Вопросы
Первонах ! Тупой вопрос. Как завершить программу? end не работает
|
Ответ: Вопросы
Цитата:
PHP код:
|
Ответ: Вопросы
Благодарю!
|
Ответ: Вопросы
жесть!
|
Ответ: Вопросы
Цитата:
PHP код:
|
Ответ: Вопросы
Что это за дерево у которого вызывается метод Quit ?
|
Ответ: Вопросы
Цитата:
Если подробно - https://docs.godotengine.org/en/stab...l#introduction |
Ответ: Вопросы
Что такое Mesh Texture?
Почитал поискал, ничего не понял. Что это и как правильно "готовить"? Думал могу свой меш в WorldEnvironment загрузить как небо, оказалось все не так. Что вообще можно засунуть в стандартное небо, по мимо карты окружения? |
Ответ: Вопросы
Вложений: 2
Цитата:
При создании атласа можно выбрать Mesh2D И тогда текстуры будут храниться как Mesh2D. А для чего нужен Mesh2D, я думаю понятно. Цитата:
|
Ответ: Вопросы
Вложений: 1
Цитата:
Цитата:
Но с порядком рендера, в Годо проблемы. Обычный флаг No Depth Test годится только для простой геометрии. Всё что сложнее куба/сферы начинает просвечивать сквозь себя. Альтернатива, использовать флаг прозрачности, у них своя сортировка. Но с прозрачностью могут не работать некоторые эффекты. И в добавок, в обоих случаях надо не забывать проставлять флаги каждому материалу участвующему в сцене, иначе не будет работать. WorldEnvironment видимо отдельно обрабатывается, думал к нему не только текстуру можно подключить. Но ладно, чёрт с ним с небом, не так важно, а если мне нужно в FPS что-то поверх рендерить принципиально? Слишком заморочено. С грустью вспоминаю Блиц, с его EntityOrder. Ещё я читал предложения рендерить в спрайт, рендерить с поддельной глубиной... :( P. S. Где можно достать скомпилированный Godot 4? А то я только на исходники натыкаюсь, хочу потыкать его. P. P. S. Кстати, как полная альтернатива (только для окружения), можно всё рендерить в текстуру и натягивать на небо. Давно видел способ для псевдо-2D персонажа, по логике тут тоже самое. |
Ответ: Вопросы
Цитата:
Цитата:
Цитата:
https://hugo.pro/projects/godot-builds/ |
Ответ: Вопросы
Вложений: 2
Всем привет!
Делаю генератор планет, Нужен совет. Короче есть программно рисуемая картинка при помощи следующего кода Код:
WorldMapImage.lock() Рассматриваю вариант - сверху создать еще один гаждет и рисовать облака тупо поверх, но хотелось бы узнать, как рисовать картинку на картинку |
Ответ: Вопросы
Если есть функция get_pixel, то можно использовать классическую функцию смешивания по альфе:
Result = CurrentColor * (1 - Alpha) + NewColor * Alpha где CurrentColor - текущий цвет пикселя текстуры NewColor - цвет рисуемого пикселя Alpha - прозрачность рисуемого пикселя Функцию применить для каждого компонента цвета ( RGB ): ResultR = CurrentColorR * (1 - Alpha) + NewColorR * Alpha ResultG = CurrentColorG * (1 - Alpha) + NewColorG * Alpha ResultB = CurrentColorB * (1 - Alpha) + NewColorB * Alpha Если смешивание идет в целых числах (0..255), то единицу заменить на 255 |
Ответ: Вопросы
Цитата:
Но есть наверняка элегантный способ рисовать картинками на картинках. |
Ответ: Вопросы
Цитата:
1. Сделать рендертекстуру размером с исходную. 2. Сделать ее активным рендер таргетом. 3. Нарисовать полноэкранный квад с исходной текстурой с unlit шейдером. Обычно есть метод Blit или подобный. 4. Нарисовать квад с оверлей текстурой и нужным смешиванием (для этого сделать шейдер с альфаблендом или другим способом смешивания). 5. Считать пиксели рендертекстуры в исходную. Но так как задача поставлена с примером записи пикселей в текстуру, я предложил другой метод. |
Ответ: Вопросы
Цитата:
|
Ответ: Вопросы
Цитата:
|
Ответ: Вопросы
Цитата:
А так глянул на этот двиг, почитал доки... ну что могу сказать... это старый, добрый Blitz3D! По крайней мере именно такое впечатление он на меня производит. Конечно, он с нормальным 2Д и ещё кучей плюшек... но простота двига подкупает. Общая архитектура тоже нравится. Я вкатился в этот двиг почти сразу. Чего не скажешь о Юнити. |
Ответ: Вопросы
Цитата:
Цитата:
Цитата:
|
Ответ: Вопросы
Вложений: 1
Godot 3.2.3
GLES 2.0 Android, apk релизный Сделал простой шейдер, где смешиваются 2 текстуры, с движением UV. На ПК работает как надо. Однако на Андроиде, спустя минуту текстуры начинают едва заметно тормозить. Ещё через 2, ощутимо двигаются рывками, пикселизируются. Остальная сцена проигрывается гладко. Текстуры натянуты на плоский меш, со сферообразно искажённой развёрткой. Проблема замечена на Huawei P8 Lite и P10, но по всей видимости дело не в аппаратах. Двигать UV пробовал по разному. Разница только в скорости движения, чем быстрее движется, тем скорее начинаются рывки. В чём может быть дело, как решить? Навсякий случай, генерируемый VisualShaders код: Второй вопрос, что бы не ходить дважды. Тоже шейдер с расчётом на телефон, смешиваются 2 текстуры по Vertex-маске через VectorMix. Почему же этот шейдер на единственной такой поверхности, в 35 треугольников отнимает ~10 FPS? Неужели это настолько тяжёлая операция для смартфона? |
Ответ: Вопросы
1: Двигать текстуру с определенной скоростью:
uv = UV + Time * Speed 2: Смешивать текстуры попробуй функцией: mix (текстура1, текстура2, красныйканалвершин) |
Ответ: Вопросы
Вложений: 2
Цитата:
2) Канал вершин, не UV? Ты уверен? У меня вершины не раскрашены, текстуры не смешиваются. UV попробовал, не работает. Стоп, ты про другое? А как я по твоему их смешиваю? :crazy: Ну, разве что ScalarMix попробовать :mda: Вложение 23253 P. S. Похоже ScalarMix действительно меньше влияет на производительность чем Mix, спасибо что напомнил :super: Текстуры на «сфере» по прежнему дёргаются. Втыкал туда R с UV через ScalarMix. |
Ответ: Вопросы
>> 1) Не работает.
uv = UV + 0.5 Это сдвигает текстуру (без динамики)? |
Ответ: Вопросы
Может float UV обнулять? У него же чем больше число - тем меньше точность
|
Ответ: Вопросы
Цитата:
Цитата:
Сегодня узнал что это проблема GLES2, особенно на мобильниках. В Годо можно повысить точность в настройках проекта (или вручную в шейдере). Но я почему-то не увидел разницу. Анимировать UV во фрагментом шейдере настоятельно не рекомендуется. Предлагается смещать только в вертексном шейдере.
Обнулять UV и вращать дальше, как это сделать во фрагментом шейдере? Для GLES2 - Andorid такое не запрещено? |
Ответ: Вопросы
Цитата:
Цитата:
float2 uv1 = UV + Time * SpeedTexture1; float2 uv2 = UV + Time * SpeedTexture2; float2 uv3 = UV + Time * SpeedTexture3; etc uv1, uv2, uv3 уже подставляешь в tex2D: float3 Texture1 = tex2D(_Texture1 , uv1 ); float3 Texture2 = tex2D(_Texture2 , uv2 ); float3 Texture3 = tex2D(_Texture3 , uv3 ); etc |
Ответ: Вопросы
Цитата:
А именно с UV там примитивный баг на подуставших мобилках, который тупо не чинят. https://github.com/godotengine/godot/issues/37935 Кстати возможно ты нашел еще один баг :crazy: Еще на gles 2 vertex color рисует не те цвета и тоже все вкурсе, но никто не чинит. |
Ответ: Вопросы
Любимы дуалист Антона нарисовался, теперь опишем все баги Unity :)))
|
Ответ: Вопросы
Вложений: 1
Цитата:
В вершинном шейдере проблем нет. Никакое принудительно выставление точности не работает. В фрагментах тупо нельзя анимировать UV — деградируют. Цитата:
Однако вопрос, а если двигать в вершинном, то как тогда «анимировать 10 текстур»? Я их просто в UV и UV2 втыкаю: Цитата:
Цитата:
По твоей ссылке баг на конкретном устройстве. |
Ответ: Вопросы
Интересно сработает ли это:
Код:
shader_type spatial; flat - The value is not interpolated noperspective - The value is linearly interpolated in window-space smooth - The value is interpolated in a perspective-correct fashion. This is the default |
Ответ: Вопросы
Цитата:
Решение для GLES 2, Android:
Рабочий код: P. S. Я уже пошёл в чатик Сканера по Годо. Советы не помогли, однако общение каким-то образом помогло заставить работать то что вчера не получилось. А именно, правильно объявить вектора глобальными :rolleyes: P. P. S. Осталось проверить на разных устройства и словить новые баги. Потестируйте пожалуйста: Обычный вариант: Test_Android_2.apk Выше точность: Test_Android_2_H.apk |
Ответ: Вопросы
Цитата:
Мне говорят что это просто жёсткое и мягкое затенение поверности. Оно же? (справка Годо) |
Ответ: Вопросы
Цитата:
|
Ответ: Вопросы
как удалить объект(картинку), загруженный в коде?
Код:
var image_temp = Image.new() Что делать и как быть? |
Ответ: Вопросы
Цитата:
|
Ответ: Вопросы
Цитата:
Просто занули переменную, оставь остальное сборщику мусора. Цитата:
|
Ответ: Вопросы
Вложений: 1
я прошу прощения за занудство, но такой вариант будет верным? То есть при готовности нода картинка загрузится, а потом удалится из памяти?
Код:
func _ready(): |
Ответ: Вопросы
Цитата:
Но, скорее всего это произойдет не сразу. Задача сборщика мусора заключается не в своевременном удалении обнуленных ресурсов, а в обеспечении достаточного количества памяти приложению. Сборщик какое-то время будет накапливать ненужные ресурсы. И обнулит их в тот момент, когда приложение запросит новую порцию памяти для создания обьектов. И вместо запроса памяти у операционной системы сборщик обнулит и отдаст приложению эти накопленые учаски памяти. Это своего рода оптимизация такая. Поэтому твой кусок кода просто сообщает сборщику мусора, что этот участок памяти больше не нужен. Реально очищен он будет когда-то в будущем. P.S. Не знаю.. есть ли деструкторы в Godot? GLES2 vs GLES3 - https://docs.godotengine.org/ru/stab...fferences.html |
Ответ: Вопросы
Цитата:
Смысл в том, что ресурс обычно создаётся для использования в каком-то объекте. И этот ресурс будет жить пока живёт хотя бы один объект его использующий. Когда умрет последний объект, тогда сборщик мусора уничтожит и бесхозный ресурс. Цитата:
GLES2 более органичен, в нем нет некоторых модных фич (gpu партиклов, рилтайм GI и что-то ещё) но он менее требователен к железу и поддерживается всеми телефонами и браузерами. То, что картинка получается разная, это нормально, нужно настраивать. Цитата:
|
Ответ: Вопросы
Спасибо за подробнейшие разъяснения, товарищи!
|
Ответ: Вопросы
Шейдеры, в чём разница между:
1.0 и 1f? Что это (1f) форма записи означает? F - Float? |
Ответ: Вопросы
Цитата:
1f = 1.0 Для чисел без точки указывают суффикс, чтобы чётко отделить флоат от интеджера. |
Ответ: Вопросы
Продолжаю задавать нубятские вопросы. Итак есть панель, на ней 10 спрайтов. Подразумевается , что это картинки ачивок. В скрипте картинки загружаются и хранятся как Texture в массиве. Когда настает ачивка, в скрипт прилетает сигнал и скрипт меняет картинку неизвестной ачивки на активную.
При выполнении этого когда в логах я нашел следующие ворнинги: Код:
... |
Ответ: Вопросы
Цитата:
В общем, изображения это "сырые" данные и чтобы они работали везде и всегда одинаково хорошо их нужно "запечь", т.е. импортировать в родные форматы движка. Подробнее см. здесь https://docs.godotengine.org/en/3.2/...ng_images.html Но это странно, движок должен был автоматически это сделать. Какая у тебя версия? |
Ответ: Вопросы
Версия 3.2.3 штабле официале
Импортированы как текстуры, все настройки импорта были по умолчанию кроме выключенного флажка filter |
Ответ: Вопросы
Цитата:
По идеи. Нет. ant0N, где почитать про режимы импорта? Почему если я Texture меняю на Image или TextureAtlas редактор обязательно перезапускается? ... Так, TextureAtlas вроде позволяет несколько изображений в одно объединить, ладно. Цитата:
Потому что в последнем не вижу смысла (пригодилось для mip-map), в первом же копии импорта создаются автоматически. P. S. Термин «запечь» в данном случае неуместен. P. P. S. Цитата:
По идеи относиться ко всем ресурсам окромя сцен и кода. |
Ответ: Вопросы
Сорян что так долго, работал
Цитата:
Например: Texture, Image То, что редактор перезапускается, это нормально для некоторых ресурсов. Видимо необходимо для реимпорта, думаю со временем это исправят. Цитата:
|
Ответ: Вопросы
Вложений: 1
Вот скрин. Тут и настройки импорта, и ворнинги и кусочек кода
|
Ответ: Вопросы
Твоя проблема в том, что ты грузишь картинки не через Resourceloader.
Поэтому настройки импорта игнорируются. Вместо: temp_image.load("path") Пиши: temp_image = load("path") |
Ответ: Вопросы
О, спасибо!
|
Ответ: Вопросы
Хм, скрипты обновляются в разных потоках? Получил ситуацию , когда в ходе выполнения функции скрипта, значение переменной другого скрипта изменилось.
|
Ответ: Вопросы
Цитата:
В версии 3.2.3 была ошибка из-за которой после удаления объекта не удалялась ссылка, и вела на новый объект в этой же памяти (часть оптимизации). Актуальная версия сейчас 3.3 |
Ответ: Вопросы
Цитата:
|
Ответ: Вопросы
Цитата:
|
Ответ: Вопросы
Вложений: 1
Загружаю сцену:
Создаю переменную Scene Цитата:
Цитата:
Цитата:
И сразу возникает вопрос, как правильно очистить Scene? В справке рекомендуется queue_free(), ей я могу удалить только инстанс загруженной сцены. Если я копирую код выше, но меняю загрузку на Level_2.tscn И начинаю по очереди загружать-выгружать разные сцены. То в консоли видно что с каждой подобной загрузкой, увеличивается PackedScene (см. скриншот). Получается в памяти продолжают висеть объекты. Что логично, я ведь ничего не делаю с Scene. Вопрос правильно удалять ресурсы? Как полностью очистить Scene что бы загрузить под ней новую? Какой подход вернее, 1 переменная для загрузки всех уровней, или для каждой своя переменная? Вложение 23384 |
Ответ: Вопросы
Цитата:
Мне кажется что твоя проблема в том, что ты на самом деле не удаляешь прошлую сцену вот ты ее создаешь: Код:
var scene = Scene.instance() Код:
var scene_del = get_node("Node//Level_1") Попробуй у себя сделать удаление так: Код:
var spat_node = get_node("Spatial") |
Ответ: Вопросы
Вложений: 1
Цитата:
Короче всё правильно. Надо удалять ноду, о загруженном ресурсе беспокоится не надо. При необходимости его можно обнулить Scene = null. Система так и работает, загрузить ресурс, создать его инстанс, подключить к нужной ноде. Примерный код: Подробности тут - Reference. Вложение 23385 |
Ответ: Вопросы
У меня созрел вопрос (в контексте движка).
Как правильно организовать программную часть игры. Самый простой способ, на каждый активный объект: дверь, персонаж, враг и т. д. Нацепить скрипт, обернуть в сцену. И расставить на игровой-сцене инстансы. Просто, быстро, сердито. Второй вариант, добавлять всё активное в группы/списки, и тому подобное. А дальше управлять всем этим из универсального скрипта. Скрипт для врагов, скрипт для всех дверей и т. д. Сложнее, надо продумать правила для разработки уровней. По идеи выигрыш в скорости и удобство управления. Как «правильно», насколько допустим первый вариант вне прототипа? Какая разница в скорости выполнения и т. п.? P. S. Написал и подумал, только во втором варианте можно нормально организовать работу через потоки. |
Ответ: Вопросы
Вопрос слишком абстрактный. Если ты спрашиваешь как сделать архитектуру игры, то на этот вопрос нет правильно ответа, есть лишь разного рода паттерны.
Советовать конкретный паттерн бессмысленно, это зависит от проекта. Но есть некоторые правила, которым следует придерживаться: - единая точка входа в игру, единый апдейт. - скрипты, которые ты весишь на объекты в редакторе - просто вьюшки, в них не должно быть логики. Вся логика должна быть на другом уровне (в Контроллерах, в случае MVC или в Системах - если ECS) В общем, тут мне проще тебе объяснять на живом примере уже в IDE, чем расписывать это на форуме |
Часовой пояс GMT +4, время: 06:04. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot