Какие данные нужно передать шейдеру для нормальной визуализа

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение Zimaell 25 фев 2023, 16:36

Я запекаю анимацию в текстуру для лучшей производительности, основной этап уже сделан, сами вершины запекаются и воспроизводятся с помощью шейдера.

но конечно я не вижу на нём отсвечивания и отброса тени, а может еще чего.

вопрос - что мне нужно еще запечь в текстуру чтобы передать, а что может просто можно вычислить?
(если можно примеры или ссылки, или в каком направлении двигаться)
ниже пример, слева запеченный, справа оригинал (конечно лоу поли)
https://ibb.co/j5ggQkC
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение Alkos26Rus 25 фев 2023, 16:40

А причем тут текстура анимации? Ты смотри свой шейдер, который рендерит модель, и уже гугли как что подрубить в нем для лучшего отображения
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение Zimaell 25 фев 2023, 17:01

Alkos26Rus писал(а):А причем тут текстура анимации? Ты смотри свой шейдер, который рендерит модель, и уже гугли как что подрубить в нем для лучшего отображения

в текстуру записываются позиции вершин в каждом кадре, далее шейдер считывает их и получается анимация, это работает уже, осталось определиться с остальными данными которые нужно передать в шейдер...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение waruiyume 25 фев 2023, 19:33

Нормали нужны. Чтобы тени нормально отображались, нужно их включить и переписать шадоукастер или поставить директиву об изменении, если это сурфейс шейдер.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение Zimaell 25 фев 2023, 19:54

waruiyume писал(а):Нормали нужны. Чтобы тени нормально отображались, нужно их включить и переписать шадоукастер или поставить директиву об изменении, если это сурфейс шейдер.

я скопировал кусок Pass из Lit шейдера который отвечает за тень, тень отображается но статически, то есть анимация на тень не действует, ну это такое, с далека не будет видно, а вот самое главное это то что свет не влияет на текстуру, я думаю нормали за это отвечают, или нет?
https://ibb.co/zbTXT1H
видите на него свет пока что никак не действует, я хочу для начала понять что ему за данные нужно передать в шейдер, а также какие можно переменными а какие нужно будет запекать в текстуру чтобы они нормально во время анимации воспроизводились...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение Zimaell 25 фев 2023, 20:24

запеченные нормали добавил, эффект есть но свет я так понял нужно тоже отдельно либо настраивать либо запекать, что ж будем копаться дальше...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение waruiyume 25 фев 2023, 20:27

Чтобы свет как-то воздействовал, недостаточно просто передать данные в шейдер, их нужно использовать (с сурфейс шейдерами немного иначе).
Для освещения нужны только нормали в локалспейсе, если планируется использовать нормалмапы, то нужны ещё и касательные.
Шейдер хоть покажите.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение Zimaell 25 фев 2023, 20:31

waruiyume писал(а):Чтобы свет как-то воздействовал, недостаточно просто передать данные в шейдер, их нужно использовать (с сурфейс шейдерами немного иначе).
Для освещения нужны только нормали в локалспейсе, если планируется использовать нормалмапы, то нужны ещё и касательные.
Шейдер хоть покажите.

да конечно, просто я его крутил и куча там было лишнего, но вот на данный момент с запеченной анимацией плюс нормалями выглядит так

Синтаксис:
Используется csharp
Shader "Animations/VertexAnimation"{
        Properties{
                _MainTex ("Texture", 2D) = "white" {}
                _AnimMap ("Animation Texture", 2D) ="white" {}
        _AnimNorm ("Animation Normals", 2D) ="white" {}
            }
    SubShader{
        Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalRenderPipeline"}
        Cull off
        Pass{
            Tags{ "LightMode"="UniversalForward" }
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
 
            struct appdata{
                float2 uv       : TEXCOORD0;
                float4 pos      : POSITION;
                half3 normal    : NORMAL;
                UNITY_VERTEX_INPUT_INSTANCE_ID
                };

            struct v2f{
                float2 uv       : TEXCOORD0;
                float4 vertex   : SV_POSITION;
                float3 normal   : TEXCOORD1;
                UNITY_VERTEX_INPUT_INSTANCE_ID
                };

            CBUFFER_START(UnityPerMaterial)
                sampler2D _MainTex;
                float4 _MainTex_ST;
                sampler2D _AnimMap;
                float4 _AnimMap_TexelSize;
                sampler2D _AnimNorm;
                float4 _AnimNorm_TexelSize;
            CBUFFER_END

float4 ObjectToClipPos (float3 pos){
                return mul (UNITY_MATRIX_VP, mul (UNITY_MATRIX_M, float4 (pos,1)));
                }

            v2f vert(appdata v, uint vid : SV_VertexID){
                UNITY_SETUP_INSTANCE_ID(v);
                                float x = (vid + 0.5) * _AnimMap_TexelSize.x;
                                float y = fmod(_Time.y / 1, 1);
                                float4 pos = tex2Dlod(_AnimMap, float4(x, y, 0, 0));
                                float3 normal = tex2Dlod(_AnimNorm, float4(x, y, 0, 0));
                                v2f o;
                                o.vertex = ObjectToClipPos(pos);
                                o.normal = TransformObjectToWorldNormal(normal);
                                o.uv = v.uv;
                return o;
                }

            half4 frag (v2f i) : SV_Target{
                                half diff = dot(i.normal, float3(0,1,0)) * 0.5 + 0.5;
                                half4 col = tex2D(_MainTex, i.uv);
                                return diff * col;
                            }
           
            ENDHLSL
            }
        }
    }
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение Zimaell 26 фев 2023, 13:02

waruiyume писал(а):Чтобы свет как-то воздействовал, недостаточно просто передать данные в шейдер, их нужно использовать (с сурфейс шейдерами немного иначе).
Для освещения нужны только нормали в локалспейсе, если планируется использовать нормалмапы, то нужны ещё и касательные.
Шейдер хоть покажите.

что-то скажете по поводу шейдера?
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение waruiyume 26 фев 2023, 20:02

Я давненько не писал шейдере буквами, ибо попаболь. Могу предложить почитать по ссылкам.
https://en.wikibooks.org/wiki/Cg_Programming тут, скорее всего, много устаревшей инфы, но подход остаётся тем же.
https://catlikecoding.com/unity/tutorials/rendering/ тут, по идее, актуальней.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение Zimaell 26 фев 2023, 20:16

waruiyume писал(а):Я давненько не писал шейдере буквами, ибо попаболь. Могу предложить почитать по ссылкам.
https://en.wikibooks.org/wiki/Cg_Programming тут, скорее всего, много устаревшей инфы, но подход остаётся тем же.
https://catlikecoding.com/unity/tutorials/rendering/ тут, по идее, актуальней.

да смотрел я такое уже, там не для urp скрипты которые мне нужно.
ну да ладно, решил скрестить бульдога с носорогом, стандартный Lit шейдер URP со своим, почти получилось, только пока что никак не могу найти метода
Синтаксис:
Используется csharp
LightweightFragmentAdvanced()

что-то матерится что его нету, я из какой он библиотеки пока что не найду...
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45

Re: Какие данные нужно передать шейдеру для нормальной визуализа

Сообщение Zimaell 26 фев 2023, 20:33

ясно, сверялся со старыми библиотеками, сейчас этот метод по другому называется....
Zimaell
UNIверсал
 
Сообщения: 474
Зарегистрирован: 04 июл 2020, 18:45


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 23