![](images/chestnut/misc/left.gif) |
24.10.2020, 01:57
|
#16
|
ПроЭктировщик
Регистрация: 01.01.2016
Сообщений: 141
Написано 72 полезных сообщений (для 159 пользователей)
|
Ответ: Вопросы
Сообщение от ant0N
|
А если вызвать этот метод - node.Quit() - в локальном узле сцены - то, я так понимаю узел прервет распространение сигнала на дочерние узлы?
|
(Offline)
|
|
25.10.2020, 14:02
|
#17
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Вопросы
Сообщение от mingw
А если вызвать этот метод - node.Quit() - в локальном узле сцены - то, я так понимаю узел прервет распространение сигнала на дочерние узлы?
|
Это что за метод такой? У Node такого нет.
__________________
Абсолютли!
|
(Offline)
|
|
25.10.2020, 15:31
|
#18
|
ПроЭктировщик
Регистрация: 01.01.2016
Сообщений: 141
Написано 72 полезных сообщений (для 159 пользователей)
|
Ответ: Вопросы
Сообщение от ant0N
Это что за метод такой? У Node такого нет.
|
хмм... действительно. А как сигнал прервать то? Бывают ситуации когда не надо, что бы сигнал шел дальше по дочерним узлам.
А так глянул на этот двиг, почитал доки... ну что могу сказать... это старый, добрый Blitz3D! По крайней мере именно такое впечатление он на меня производит. Конечно, он с нормальным 2Д и ещё кучей плюшек... но простота двига подкупает. Общая архитектура тоже нравится. Я вкатился в этот двиг почти сразу. Чего не скажешь о Юнити.
Последний раз редактировалось mingw, 26.10.2020 в 02:09.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
26.10.2020, 09:40
|
#19
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Вопросы
Сообщение от mingw
хмм... действительно. А как сигнал прервать то? Бывают ситуации когда не надо, что бы сигнал шел дальше по дочерним узлам.
|
Я не очень понял что значит прервать сигнал? Какой сигнал? Что именно ты хочешь сделать?
Сообщение от mingw
А так глянул на этот двиг, почитал доки... ну что могу сказать... это старый, добрый Blitz3D!
|
В какой-то степени можно и так сказать.
Сообщение от mingw
Общая архитектура тоже нравится. Я вкатился в этот двиг почти сразу. Чего не скажешь о Юнити.
|
У меня такая же ситуация. Я уже почти год активно разрабатываю на юнити на работе, но все ещё для меня это как поедание кактуса.
__________________
Абсолютли!
Последний раз редактировалось ant0N, 26.10.2020 в 11:42.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.11.2020, 22:54
|
#20
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,021
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Вопросы
Godot 3.2.3
GLES 2.0
Android, apk релизный
Сделал простой шейдер, где смешиваются 2 текстуры, с движением UV.
На ПК работает как надо.
Однако на Андроиде, спустя минуту текстуры начинают едва заметно тормозить. Ещё через 2, ощутимо двигаются рывками, пикселизируются. Остальная сцена проигрывается гладко.
Текстуры натянуты на плоский меш, со сферообразно искажённой развёрткой.
Проблема замечена на Huawei P8 Lite и P10, но по всей видимости дело не в аппаратах.
Двигать UV пробовал по разному. Разница только в скорости движения, чем быстрее движется, тем скорее начинаются рывки.
В чём может быть дело, как решить?
Навсякий случай, генерируемый VisualShaders код:
shader_type spatial;
render_mode specular_schlick_ggx, depth_test_disable, unshaded, vertex_lighting;
uniform sampler2D Texture : hint_albedo;
uniform sampler2D Texture2 : hint_albedo;
void vertex() {
// Output:0
}
void fragment() {
// Input:5
vec3 n_out5p0 = vec3(UV, 0.0);
// Input:8
float n_out8p0 = TIME;
// VectorMix:17
vec3 n_in17p2 = vec3(0.03000, -0.02000, 0.00000);
vec3 n_out17p0 = mix(n_out5p0, vec3(n_out8p0), n_in17p2);
// TextureUniform:2
vec3 n_out2p0;
float n_out2p1;
{
vec4 n_tex_read = texture(Texture, n_out17p0.xy);
n_out2p0 = n_tex_read.rgb;
n_out2p1 = n_tex_read.a;
}
// VectorMix:18
vec3 n_in18p2 = vec3(-0.03000, 0.02000, 0.00000);
vec3 n_out18p0 = mix(n_out5p0, vec3(n_out8p0), n_in18p2);
// TextureUniform:3
vec3 n_out3p0;
float n_out3p1;
{
vec4 n_tex_read = texture(Texture2, n_out18p0.xy);
n_out3p0 = n_tex_read.rgb;
n_out3p1 = n_tex_read.a;
}
// VectorOp:16
vec3 n_out16p0 = n_out2p0 + n_out3p0;
// Output:0
ALBEDO = n_out16p0;
}
void light() {
// Output:0
}
Второй вопрос, что бы не ходить дважды.
Тоже шейдер с расчётом на телефон, смешиваются 2 текстуры по Vertex-маске через VectorMix.
Почему же этот шейдер на единственной такой поверхности, в 35 треугольников отнимает ~10 FPS?
Неужели это настолько тяжёлая операция для смартфона?
|
(Offline)
|
|
11.11.2020, 07:17
|
#21
|
ТЫ ЧООО?
Регистрация: 26.02.2007
Сообщений: 3,369
Написано 2,020 полезных сообщений (для 7,192 пользователей)
|
Ответ: Вопросы
1: Двигать текстуру с определенной скоростью:
uv = UV + Time * Speed
2: Смешивать текстуры попробуй функцией:
mix (текстура1, текстура2, красныйканалвершин)
__________________
Вертекс в глаз или в пиксель раз?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.11.2020, 10:22
|
#22
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,021
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Вопросы
Сообщение от ARA
1: Двигать текстуру с определенной скоростью:
uv = UV + Time * Speed
2: Смешивать текстуры попробуй функцией:
mix (текстура1, текстура2, красныйканалвершин)
|
1) Не работает.
2) Канал вершин, не UV? Ты уверен? У меня вершины не раскрашены, текстуры не смешиваются.
UV попробовал, не работает.
Стоп, ты про другое?
А как я по твоему их смешиваю?
Ну, разве что ScalarMix попробовать
P. S. Похоже ScalarMix действительно меньше влияет на производительность чем Mix, спасибо что напомнил ![:super:](images/smilies/super.gif)
Текстуры на «сфере» по прежнему дёргаются. Втыкал туда R с UV через ScalarMix.
|
(Offline)
|
|
11.11.2020, 18:22
|
#23
|
ТЫ ЧООО?
Регистрация: 26.02.2007
Сообщений: 3,369
Написано 2,020 полезных сообщений (для 7,192 пользователей)
|
Ответ: Вопросы
>> 1) Не работает.
uv = UV + 0.5
Это сдвигает текстуру (без динамики)?
__________________
Вертекс в глаз или в пиксель раз?
|
(Offline)
|
|
12.11.2020, 04:35
|
#24
|
ПроЭктировщик
Регистрация: 05.08.2006
Сообщений: 183
Написано 107 полезных сообщений (для 410 пользователей)
|
Ответ: Вопросы
Может float UV обнулять? У него же чем больше число - тем меньше точность
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.11.2020, 18:35
|
#25
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,021
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Вопросы
Сообщение от ARA
>> 1) Не работает.
uv = UV + 0.5
Это сдвигает текстуру (без динамики)?
|
Да
Сообщение от MadMedic
Может float UV обнулять? У него же чем больше число - тем меньше точность
|
Это была моя первая мысль, но я её отмёл.
Сегодня узнал что это проблема GLES2, особенно на мобильниках.
В Годо можно повысить точность в настройках проекта (или вручную в шейдере).
Но я почему-то не увидел разницу.
Анимировать UV во фрагментом шейдере настоятельно не рекомендуется.
Предлагается смещать только в вертексном шейдере. - Тут проблема как смешивать и двигать больше двух текстур.
Потому что других вариантов кроме UV и UV2 я не знаю. - И опять нет изменений. Возможно что-то упустил запутавшись, но вряд ли.
По этому вопрос:
Обнулять UV и вращать дальше, как это сделать во фрагментом шейдере?
Для GLES2 - Andorid такое не запрещено?
|
(Offline)
|
|
13.11.2020, 18:54
|
#26
|
ТЫ ЧООО?
Регистрация: 26.02.2007
Сообщений: 3,369
Написано 2,020 полезных сообщений (для 7,192 пользователей)
|
Ответ: Вопросы
Хм, ну тогда и с +Time проблем не должно быть. Он точно циферку корректно возвращает?
Тут проблема как смешивать и двигать больше двух текстур.
Потому что других вариантов кроме UV и UV2 я не знаю.
|
Ты можешь двигать с помощью одного UV хоть 10 текстур. Просто тебе надо создать 10 переменных, чтоб задавать скорость для каждой конкретной текстуры. Это будет выглядеть так:
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
__________________
Вертекс в глаз или в пиксель раз?
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо ARA за это полезное сообщение:
|
|
14.11.2020, 08:16
|
#27
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Вопросы
![](images/chestnut/misc/citation.gif)
Сообщение от Arton
Godot 3.2.3
GLES 2.0
Android, apk релизный
Сделал простой шейдер, где смешиваются 2 текстуры, с движением UV.
На ПК работает как надо.
Однако на Андроиде, спустя минуту текстуры начинают едва заметно тормозить. Ещё через 2, ощутимо двигаются рывками, пикселизируются. Остальная сцена проигрывается гладко.
Текстуры натянуты на плоский меш, со сферообразно искажённой развёрткой.
Проблема замечена на Huawei P8 Lite и P10, но по всей видимости дело не в аппаратах.
Двигать UV пробовал по разному. Разница только в скорости движения, чем быстрее движется, тем скорее начинаются рывки.
В чём может быть дело, как решить?
Навсякий случай, генерируемый VisualShaders код:
shader_type spatial;
render_mode specular_schlick_ggx, depth_test_disable, unshaded, vertex_lighting;
uniform sampler2D Texture : hint_albedo;
uniform sampler2D Texture2 : hint_albedo;
void vertex() {
// Output:0
}
void fragment() {
// Input:5
vec3 n_out5p0 = vec3(UV, 0.0);
// Input:8
float n_out8p0 = TIME;
// VectorMix:17
vec3 n_in17p2 = vec3(0.03000, -0.02000, 0.00000);
vec3 n_out17p0 = mix(n_out5p0, vec3(n_out8p0), n_in17p2);
// TextureUniform:2
vec3 n_out2p0;
float n_out2p1;
{
vec4 n_tex_read = texture(Texture, n_out17p0.xy);
n_out2p0 = n_tex_read.rgb;
n_out2p1 = n_tex_read.a;
}
// VectorMix:18
vec3 n_in18p2 = vec3(-0.03000, 0.02000, 0.00000);
vec3 n_out18p0 = mix(n_out5p0, vec3(n_out8p0), n_in18p2);
// TextureUniform:3
vec3 n_out3p0;
float n_out3p1;
{
vec4 n_tex_read = texture(Texture2, n_out18p0.xy);
n_out3p0 = n_tex_read.rgb;
n_out3p1 = n_tex_read.a;
}
// VectorOp:16
vec3 n_out16p0 = n_out2p0 + n_out3p0;
// Output:0
ALBEDO = n_out16p0;
}
void light() {
// Output:0
}
Второй вопрос, что бы не ходить дважды.
Тоже шейдер с расчётом на телефон, смешиваются 2 текстуры по Vertex-маске через VectorMix.
Почему же этот шейдер на единственной такой поверхности, в 35 треугольников отнимает ~10 FPS?
Неужели это настолько тяжёлая операция для смартфона?
|
В годоте gles 2 вообще лучше не трогать.
А именно с UV там примитивный баг на подуставших мобилках, который тупо не чинят.
https://github.com/godotengine/godot/issues/37935
Кстати возможно ты нашел еще один баг
Еще на gles 2 vertex color рисует не те цвета и тоже все вкурсе, но никто не чинит.
|
(Offline)
|
|
14.11.2020, 11:54
|
#28
|
Разработчик
Регистрация: 11.10.2017
Сообщений: 390
Написано 74 полезных сообщений (для 117 пользователей)
|
Ответ: Вопросы
Любимы дуалист Антона нарисовался, теперь опишем все баги Unity ![:)](images/smilies/smile.gif) ))
__________________
Человек это или баг, или заложенное специально программное яйцо.
|
(Offline)
|
|
15.11.2020, 14:45
|
#29
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,021
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Вопросы
Сообщение от ARA
Хм, ну тогда и с +Time проблем не должно быть. Он точно циферку корректно возвращает?
|
Они есть на смартфоне, GLES 2, при смещение UV с течением времени во фрагментном шейдере.
В вершинном шейдере проблем нет.
Никакое принудительно выставление точности не работает.
В фрагментах тупо нельзя анимировать UV — деградируют.
Спустя ~3 минуты:
Сообщение от ARA
Ты можешь двигать с помощью одного UV хоть 10 текстур. Просто тебе надо создать 10 переменных, чтоб задавать скорость для каждой конкретной текстуры.
|
Перехожу на код вместо нодов, так оно и есть.
Однако вопрос, а если двигать в вершинном, то как тогда «анимировать 10 текстур»?
Я их просто в UV и UV2 втыкаю:
shader_type spatial; render_mode unshaded;
uniform sampler2D Texture_0 : hint_albedo; uniform sampler2D Texture_1 : hint_albedo;
void vertex() { vec2 speed_0 = vec2(0.1, 0.02); vec2 speed_1 = vec2(-0.1, -0.02); vec2 uv_0 = TIME * speed_0; vec2 uv_1 = TIME * speed_1; vec2 uv_out = UV + uv_0; vec2 uv_out2 = UV + uv_1; UV = uv_out.xy; UV2 = uv_out2.xy; }
void fragment() { vec4 Tex_0 = texture(Texture_0, UV); vec4 Tex_1 = texture(Texture_1, UV2); vec4 Color = Tex_0 + Tex_1; ALBEDO = Color.rgb; }
Сообщение от Nex
Еще на gles 2 vertex color рисует не те цвета и тоже все вкурсе, но никто не чинит.
|
Не заметил такой проблемы. Это происходит на разном железе?
Сообщение от Nex
Кстати возможно ты нашел еще один баг
|
Ты точно моё сообщение читал?
По твоей ссылке баг на конкретном устройстве.
|
(Offline)
|
|
15.11.2020, 18:21
|
#30
|
ТЫ ЧООО?
Регистрация: 26.02.2007
Сообщений: 3,369
Написано 2,020 полезных сообщений (для 7,192 пользователей)
|
Ответ: Вопросы
Интересно сработает ли это:
shader_type spatial;
render_mode unshaded;
uniform sampler2D Texture_0 : hint_albedo;
uniform sampler2D Texture_1 : hint_albedo;
varying flat vec2 uv_out;
varying flat vec2 uv_out2;
void vertex() {
vec2 speed_0 = vec2(0.1, 0.02);
vec2 speed_1 = vec2(-0.1, -0.02);
vec2 uv_0 = TIME * speed_0;
vec2 uv_1 = TIME * speed_1;
uv_out = UV + uv_0;
uv_out2 = UV + uv_1;
}
void fragment() {
vec4 Tex_0 = texture(Texture_0, uv_out);
vec4 Tex_1 = texture(Texture_1, uv_out2);
vec4 Color = Tex_0 + Tex_1;
ALBEDO = Color.rgb;
}
Вместо 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)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:49.
|