Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > Godot

Ответ
 
Опции темы
Старый 15.11.2020, 18:57   #31
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 4,852
Написано 2,211 полезных сообщений
(для 5,144 пользователей)
Стрелка Ответ: Вопросы

Сообщение от Arton Посмотреть сообщение
Godot 3.2.3
GLES 2.0
Android, apk релизный


Сделал простой шейдер, где смешиваются 2 текстуры, с движением UV.
На ПК работает как надо.
Однако на Андроиде, спустя минуту текстуры начинают едва заметно тормозить...
По какой бы то не было причине, главная проблема во фрагментом шейдере.

Решение для GLES 2, Android:
  1. Объявить переменную uv для каждой текстуры глобально.
  2. Анимировать UV в Vertex-шейдере.
  3. Подставить каждой текстуре свою 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.10.5);
    
vec2 speed_1 vec2(-0.1, -0.5);
    
vec2 speed_2 vec2(-0.20.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_0uv_out0);
    
vec4 Tex_1 texture(Texture_1uv_out1);
    
vec4 Tex_2 texture(Texture_2uv_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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ant0N (15.11.2020)
Старый 17.11.2020, 18:20   #32
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 4,852
Написано 2,211 полезных сообщений
(для 5,144 пользователей)
Ответ: Вопросы

Сообщение от 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
ARA
ТЫ ЧООО?
 
Аватар для ARA
 
Регистрация: 26.02.2007
Сообщений: 3,357
Написано 2,013 полезных сообщений
(для 7,173 пользователей)
Ответ: Вопросы

Сообщение от Arton Посмотреть сообщение
А что это такое и с чем его едят?
Мне говорят что это просто жёсткое и мягкое затенение поверности.

Оно же? (справка Годо)
Я не знаю что это, т.к. с годотом не работаю. Если работает без этого, то прекрасно. Всё что я тебе пишу - это мои спроецированные на годот скудные знания из шейдеров в Юнити Всё очень похоже.
__________________
Вертекс в глаз или в пиксель раз?
(Offline)
 
Ответить с цитированием
Старый 18.11.2020, 05:26   #34
MadMedic
ПроЭктировщик
 
Регистрация: 05.08.2006
Сообщений: 166
Написано 98 полезных сообщений
(для 388 пользователей)
Ответ: Вопросы

как удалить объект(картинку), загруженный в коде?

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
mingw
ПроЭктировщик
 
Аватар для mingw
 
Регистрация: 01.01.2016
Сообщений: 117
Написано 62 полезных сообщений
(для 133 пользователей)
Ответ: Вопросы

Сообщение от MadMedic Посмотреть сообщение
как удалить объект(картинку), загруженный в коде?
Инфа не 100%. Но смею предположить, что ресурс удаляется вместе с родительским узлом... Возможно родительский узел является "менеджером" дочернего ресурса и если узел выкидывается из дерева, то и все дочерние ресурсы отправляются в дискард? При условии если этих ресурсов нет в других узлах.
(Offline)
 
Ответить с цитированием
Старый 18.11.2020, 12:42   #36
ant0N
Бывалый
 
Аватар для ant0N
 
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 809
Написано 308 полезных сообщений
(для 799 пользователей)
Ответ: Вопросы

Сообщение от 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 за это полезное сообщение:
Arton (18.11.2020), MadMedic (18.11.2020), mingw (18.11.2020), St_AnGer (18.11.2020), Tiranas (18.11.2020)
Старый 19.11.2020, 10:26   #37
MadMedic
ПроЭктировщик
 
Регистрация: 05.08.2006
Сообщений: 166
Написано 98 полезных сообщений
(для 388 пользователей)
Ответ: Вопросы

я прошу прощения за занудство, но такой вариант будет верным? То есть при готовности нода картинка загрузится, а потом удалится из памяти?

func _ready():
	var image_temp = Image.new()
	image_temp.load("res://data/gui/image_temp.png")
	image_temp = null
И вопрос номер следующий. GLES2 или GLES3 ? Два режима почему то показывают разные картинки при использовании стандартного гаджета. Однако 3д вьюпорт (камера + сфера) рисует одинаковые правильные цвета. Что выбрать и на чем остановиться?
Изображения
Тип файла: png gles2_vs_gles3.png (323.6 Кб, 34 просмотров)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ARA (19.11.2020)
Старый 19.11.2020, 21:29   #38
mingw
ПроЭктировщик
 
Аватар для mingw
 
Регистрация: 01.01.2016
Сообщений: 117
Написано 62 полезных сообщений
(для 133 пользователей)
Ответ: Вопросы

Сообщение от MadMedic Посмотреть сообщение
я прошу прощения за занудство, но такой вариант будет верным? То есть при готовности нода картинка загрузится, а потом удалится из памяти?
Да.
Но, скорее всего это произойдет не сразу.

Задача сборщика мусора заключается не в своевременном удалении обнуленных ресурсов, а в обеспечении достаточного количества памяти приложению. Сборщик какое-то время будет накапливать ненужные ресурсы. И обнулит их в тот момент, когда приложение запросит новую порцию памяти для создания обьектов. И вместо запроса памяти у операционной системы сборщик обнулит и отдаст приложению эти накопленые учаски памяти. Это своего рода оптимизация такая. Поэтому твой кусок кода просто сообщает сборщику мусора, что этот участок памяти больше не нужен. Реально очищен он будет когда-то в будущем.

P.S. Не знаю.. есть ли деструкторы в Godot?

GLES2 vs GLES3 - https://docs.godotengine.org/ru/stab...fferences.html
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо mingw за это полезное сообщение:
ant0N (19.11.2020), Arton (20.11.2020), MadMedic (20.11.2020), St_AnGer (20.11.2020)
Старый 19.11.2020, 23:06   #39
ant0N
Бывалый
 
Аватар для ant0N
 
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 809
Написано 308 полезных сообщений
(для 799 пользователей)
Ответ: Вопросы

Сообщение от 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 за это полезное сообщение:
Arton (20.11.2020), MadMedic (20.11.2020), mingw (20.11.2020), St_AnGer (20.11.2020), Tiranas (21.11.2020)
Старый 20.11.2020, 03:02   #40
MadMedic
ПроЭктировщик
 
Регистрация: 05.08.2006
Сообщений: 166
Написано 98 полезных сообщений
(для 388 пользователей)
Ответ: Вопросы

Спасибо за подробнейшие разъяснения, товарищи!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 11:23.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com