Поддержка теней для шейдера

Шейдеры и все-все-все.

Поддержка теней для шейдера

Сообщение Igsvetlo 09 фев 2011, 19:52

Приветствую вас, господа.
Нашел на просторах интернета проект, в котором в качестве шейдера для земли используется приведенный ниже шейдер. Очень бы хотелось включить поддержку динамических теней для него, но я совершенно никогда не имел дело с шейдерами и абсолютно не разбираюсь в их структуре. В дальнейшем я планирую поработать в этом направлени, т.к. шейдеры это безусловно интересно, но теней хочется уже сейчас. При установке стандартных шейдеров для земли возникают различные глюки, например отсутствие реакции на освещение. Вероятно в этом шейдере есть что-то необходимое для корректного отображения текстур для проекта.
Очень прошу специалистов, которые разбираются в шейдерах помочь мне с тенями. Я был бы очень признателен вам за это.

Синтаксис:
Используется glsl
Shader "TestShader" {
        Properties {
                _Color ("Main Color", Color) = (1,1,1,0.5)
                _MainTex ("Base (RGB)", 2D) = "grass" {}
                _LightPower ("Light Power", Float) = 0.0
        }
        SubShader {
                Pass {
                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag
                        #pragma fragmentoption ARB_fog_exp2
                        #include "UnityCG.cginc"

                        float4 _Color;
                        sampler2D _MainTex;
                        float _LightPower;

                        struct v2f
                        {
                                float4 pos : SV_POSITION;
                                float2 uv : TEXCOORD0;
                                float3 color : COLOR0;
                                //float4 lighting : TEXCOORD1;
                        };

                        struct indata
                        {
                                float4 vertex;
                                float3 normal;
                                float4 texcoord;
                                float4 color;
                        };

                        v2f vert(indata v)
                        {
                                v2f o;
                                o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
                                o.uv = TRANSFORM_UV(0);
                                o.color = v.color; //_Color; //v.normal * 0.5 + 0.5;
                                //o.lighting = v.color;
                                return o;
                        }

                        half4 frag(v2f i) : COLOR
                        {
                               
                                return half4(i.color*tex2D(_MainTex, i.uv).rgb, 1);//*i.lighting;
                        }
                        ENDCG

                        //Material {
                        //      Diffuse [_Color]
                        //}
                        //Lighting On
                        //SetTexture [_MainTex] {
                        //      constantColor[_Color]
                        //}
                }
        }
}
 
Igsvetlo
UNец
 
Сообщения: 2
Зарегистрирован: 09 фев 2011, 19:36

Re: Поддержка теней для шейдера

Сообщение Guyver 10 фев 2011, 09:28

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

я даже больше скажу .. оно впринципе игнорирует всё освещение ... тоесть просто выводит дифуз текстуру * цвет вершины

а ... ну это значит вертексное освещение, с запечённым лайт мапом в вертекс колор (вертексный лайт мап) ... старая такая техника (только нада геомертию подготовить заранее)

+ ко всему прочему .. этот шейдер будет работать на версиях [unity 3D] до 3й ... на 3+ уже не будет работать (нада переделать под сурфейс шейдеры)
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: Поддержка теней для шейдера

Сообщение Igsvetlo 10 фев 2011, 19:10

Понятно. Спасибо.
По видимому такая система с вертекс колором используется в проекте для создания абсолютно черных мест в некоторых местах, например в зданиях без окон.
Возможно ли совместить метод обработки освещения шейдером стандартного дифуза и этого шейдера? Тоесть чтоб темные места так и остались темными, а освещенные поддерживали динамическое освещение и тени?
Igsvetlo
UNец
 
Сообщения: 2
Зарегистрирован: 09 фев 2011, 19:36

Re: Поддержка теней для шейдера

Сообщение Guyver 11 фев 2011, 08:44

я с терайном не работал у [unity 3D] .. но знаю что там шейдеров гора для рендера самого терейна.
+ не уверен что можно подменить шейдеры у терейна (хотя это предположение только .. просто там сплаттинги разные, геоморфы и прочее думаю эту часть ребята тупо хардкодили)

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


ваапще вершинный лайтмап это альтернатива статического освещения ... дешовый вариант (нету фетча из текстур лайт мапов + экономим 1 UV сет .. экономим филлрейт, нагрузка на прохождение вертекс буффера по шине вырастает минимально), хорош для высокодетализированной геометрии или там где не важны детали затенения ... (терейн кст под эту технику подходит зачастую неплохо) ...

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


с дургой стороны можно мозг не мучать ... а юзать обычный лайтмаппинг .. чай 2011й на дворе.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск


Вернуться в Shader Lab

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3