![](images/chestnut/misc/left.gif) |
15.11.2020, 18:57
|
#31
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,021
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Вопросы
Сообщение от Arton
Godot 3.2.3
GLES 2.0
Android, apk релизный
Сделал простой шейдер, где смешиваются 2 текстуры, с движением UV.
На ПК работает как надо.
Однако на Андроиде, спустя минуту текстуры начинают едва заметно тормозить...
|
По какой бы то не было причине, главная проблема во фрагментом шейдере.
Решение для GLES 2, Android:- Объявить переменную uv для каждой текстуры глобально.
- Анимировать UV в Vertex-шейдере.
- Подставить каждой текстуре свою UV в Fragment-шейдере.
Рабочий код:
shader_type spatial; uniform sampler2D Texture_0 : hint_albedo; uniform sampler2D Texture_1 : hint_albedo; uniform sampler2D Texture_2 : hint_albedo; varying vec2 uv_out0; varying vec2 uv_out1; varying vec2 uv_out2; void vertex() { vec2 speed_0 = vec2(0.1, 0.5); vec2 speed_1 = vec2(-0.1, -0.5); vec2 speed_2 = vec2(-0.2, 0.7); uv_out0 = UV + TIME * speed_0; uv_out1 = UV + TIME * speed_1; uv_out2 = UV + TIME * speed_2; } void fragment() { vec4 Tex_0 = texture(Texture_0, uv_out0); vec4 Tex_1 = texture(Texture_1, uv_out1); vec4 Tex_2 = texture(Texture_2, uv_out2); vec4 Color = Tex_0 + Tex_1 + Tex_2; ALBEDO = Color.rgb; }
P. S. Я уже пошёл в чатик Сканера по Годо. Советы не помогли, однако общение каким-то образом помогло заставить работать то что вчера не получилось. А именно, правильно объявить вектора глобальными
P. P. S. Осталось проверить на разных устройства и словить новые баги.
Потестируйте пожалуйста:
Обычный вариант: Test_Android_2.apk
Выше точность: Test_Android_2_H.apk
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.11.2020, 18:20
|
#32
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,021
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Вопросы
Сообщение от ARA
Интересно сработает ли это:
varying flat vec2 uv_out;
varying flat vec2 uv_out2;
Вместо flat можешь попробовать
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
|
А что это такое и с чем его едят?
Мне говорят что это просто жёсткое и мягкое затенение поверности.
Оно же? (справка Годо)
|
(Offline)
|
|
17.11.2020, 23:06
|
#33
|
ТЫ ЧООО?
Регистрация: 26.02.2007
Сообщений: 3,369
Написано 2,020 полезных сообщений (для 7,192 пользователей)
|
Ответ: Вопросы
Сообщение от Arton
А что это такое и с чем его едят?
Мне говорят что это просто жёсткое и мягкое затенение поверности.
Оно же? (справка Годо)
|
Я не знаю что это, т.к. с годотом не работаю. Если работает без этого, то прекрасно. Всё что я тебе пишу - это мои спроецированные на годот скудные знания из шейдеров в Юнити ![Laught](images/smilies/DDD.gif) Всё очень похоже.
__________________
Вертекс в глаз или в пиксель раз?
|
(Offline)
|
|
18.11.2020, 05:26
|
#34
|
ПроЭктировщик
Регистрация: 05.08.2006
Сообщений: 183
Написано 107 полезных сообщений (для 410 пользователей)
|
Ответ: Вопросы
как удалить объект(картинку), загруженный в коде?
var image_temp = Image.new()
image_temp.load("res://data/gui/image_temp.png")
image_temp.lock()
...
image_temp.unlock()
image_temp.free()
на строчку image_temp.free() ругается, что "Can't 'free' a reference."
Что делать и как быть?
|
(Offline)
|
|
18.11.2020, 11:38
|
#35
|
ПроЭктировщик
Регистрация: 01.01.2016
Сообщений: 141
Написано 72 полезных сообщений (для 159 пользователей)
|
Ответ: Вопросы
Сообщение от MadMedic
как удалить объект(картинку), загруженный в коде?
|
Инфа не 100%. Но смею предположить, что ресурс удаляется вместе с родительским узлом... Возможно родительский узел является "менеджером" дочернего ресурса и если узел выкидывается из дерева, то и все дочерние ресурсы отправляются в дискард? При условии если этих ресурсов нет в других узлах.
|
(Offline)
|
|
18.11.2020, 12:42
|
#36
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Вопросы
Сообщение от MadMedic
на строчку image_temp.free() ругается, что "Can't 'free' a reference."
Что делать и как быть?
|
Image - это ресурс (ссылочный тип данных), он не требует ручного удаления.
Просто занули переменную, оставь остальное сборщику мусора.
Unlike Objects, References keep an internal reference counter so that they are automatically released when no longer in use, and only then. References therefore do not need to be freed manually with Object.free.
|
https://docs.godotengine.org/en/stab...reference.html
__________________
Абсолютли!
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо ant0N за это полезное сообщение:
|
|
19.11.2020, 10:26
|
#37
|
ПроЭктировщик
Регистрация: 05.08.2006
Сообщений: 183
Написано 107 полезных сообщений (для 410 пользователей)
|
Ответ: Вопросы
я прошу прощения за занудство, но такой вариант будет верным? То есть при готовности нода картинка загрузится, а потом удалится из памяти?
func _ready():
var image_temp = Image.new()
image_temp.load("res://data/gui/image_temp.png")
image_temp = null
И вопрос номер следующий. GLES2 или GLES3 ? Два режима почему то показывают разные картинки при использовании стандартного гаджета. Однако 3д вьюпорт (камера + сфера) рисует одинаковые правильные цвета. Что выбрать и на чем остановиться?
![](https://forum.boolean.name/attachment.php?attachmentid=23256&stc=1&d=1605767052)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
19.11.2020, 21:29
|
#38
|
ПроЭктировщик
Регистрация: 01.01.2016
Сообщений: 141
Написано 72 полезных сообщений (для 159 пользователей)
|
Ответ: Вопросы
Сообщение от MadMedic
я прошу прощения за занудство, но такой вариант будет верным? То есть при готовности нода картинка загрузится, а потом удалится из памяти?
|
Да.
Но, скорее всего это произойдет не сразу.
Задача сборщика мусора заключается не в своевременном удалении обнуленных ресурсов, а в обеспечении достаточного количества памяти приложению. Сборщик какое-то время будет накапливать ненужные ресурсы. И обнулит их в тот момент, когда приложение запросит новую порцию памяти для создания обьектов. И вместо запроса памяти у операционной системы сборщик обнулит и отдаст приложению эти накопленые учаски памяти. Это своего рода оптимизация такая. Поэтому твой кусок кода просто сообщает сборщику мусора, что этот участок памяти больше не нужен. Реально очищен он будет когда-то в будущем.
P.S. Не знаю.. есть ли деструкторы в Godot?
GLES2 vs GLES3 - https://docs.godotengine.org/ru/stab...fferences.html
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо mingw за это полезное сообщение:
|
|
19.11.2020, 23:06
|
#39
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Вопросы
Сообщение от MadMedic
func _ready():
var image_temp = Image.new()
image_temp.load("res://data/gui/image_temp.png")
image_temp = null
|
В этом случае даже не нужно занулять image_temp, т.к. это локальная переменная и она удалится при выходе из метода _ready.
Смысл в том, что ресурс обычно создаётся для использования в каком-то объекте. И этот ресурс будет жить пока живёт хотя бы один объект его использующий.
Когда умрет последний объект, тогда сборщик мусора уничтожит и бесхозный ресурс.
Сообщение от MadMedic
И вопрос номер следующий. GLES2 или GLES3 ?
|
Если бы был единственно верный ответ на этот вопрос, то в движке был бы только один рендер.
GLES2 более органичен, в нем нет некоторых модных фич (gpu партиклов, рилтайм GI и что-то ещё) но он менее требователен к железу и поддерживается всеми телефонами и браузерами.
То, что картинка получается разная, это нормально, нужно настраивать.
Сообщение от mingw
P.S. Не знаю.. есть ли деструкторы в Godot?
|
Нет. Ни в GDScript ни в C# их нет.
__________________
Абсолютли!
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо ant0N за это полезное сообщение:
|
|
20.11.2020, 03:02
|
#40
|
ПроЭктировщик
Регистрация: 05.08.2006
Сообщений: 183
Написано 107 полезных сообщений (для 410 пользователей)
|
Ответ: Вопросы
Спасибо за подробнейшие разъяснения, товарищи!
|
(Offline)
|
|
07.01.2021, 22:46
|
#41
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,021
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Вопросы
Шейдеры, в чём разница между:
1.0 и 1f?
Что это (1f) форма записи означает?
F - Float?
|
(Offline)
|
|
07.01.2021, 22:58
|
#42
|
Бывалый
Регистрация: 26.07.2009
Сообщений: 785
Написано 362 полезных сообщений (для 995 пользователей)
|
Ответ: Вопросы
Сообщение от Arton
Шейдеры, в чём разница между:
1.0 и 1f?
Что это (1f) форма записи означает?
F - Float?
|
Да.
1f = 1.0
Для чисел без точки указывают суффикс, чтобы чётко отделить флоат от интеджера.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо Andvrok за это полезное сообщение:
|
|
28.01.2021, 09:45
|
#43
|
ПроЭктировщик
Регистрация: 05.08.2006
Сообщений: 183
Написано 107 полезных сообщений (для 410 пользователей)
|
Ответ: Вопросы
Продолжаю задавать нубятские вопросы. Итак есть панель, на ней 10 спрайтов. Подразумевается , что это картинки ачивок. В скрипте картинки загружаются и хранятся как Texture в массиве. Когда настает ачивка, в скрипт прилетает сигнал и скрипт меняет картинку неизвестной ачивки на активную.
При выполнении этого когда в логах я нашел следующие ворнинги:
...
**WARNING**: Loaded resource as image file, this will not work on export: 'res://media/gui/icon_achiev_0.png'. Instead, import the image file as an Image resource and load it normally as a resource.
At: core/image.cpp:1894:load() - Loaded resource as image file, this will not work on export: 'res://media/gui/icon_achiev_0.png'. Instead, import the image file as an Image resource and load it normally as a resource.
...
Будут ли какие то проблемы при экспорте? И как это импортировать файл как "Image resource"? Что то я совсем не догоняю что он хочет
|
(Offline)
|
|
28.01.2021, 12:38
|
#44
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Вопросы
Сообщение от MadMedic
Будут ли какие то проблемы при экспорте?
|
Скорее нет, чем да.
В общем, изображения это "сырые" данные и чтобы они работали везде и всегда одинаково хорошо их нужно "запечь", т.е. импортировать в родные форматы движка.
Подробнее см. здесь https://docs.godotengine.org/en/3.2/...ng_images.html
Но это странно, движок должен был автоматически это сделать. Какая у тебя версия?
__________________
Абсолютли!
|
(Offline)
|
|
28.01.2021, 15:11
|
#45
|
ПроЭктировщик
Регистрация: 05.08.2006
Сообщений: 183
Написано 107 полезных сообщений (для 410 пользователей)
|
Ответ: Вопросы
Версия 3.2.3 штабле официале
Импортированы как текстуры, все настройки импорта были по умолчанию кроме выключенного флажка filter
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:53.
|