болванка Custom BlinnPhong Lighting Model

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

болванка Custom BlinnPhong Lighting Model

Сообщение gnoblin 06 ноя 2010, 18:54

Шейдер, полностью идентичный стандартному спекуляру со скопированной из Lighting.cginc моделью освещения BlinnPhong.
Работает как с forward, так и с deferred режимом.

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

Синтаксис:
Используется glsl
Shader "CustomLightingSpecular" {
    Properties {
      _Color ("Main Color", Color) = (1,1,1,1)
          _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
          _Shininess ("Shininess", Range (0.01, 1)) = 0.078125
          _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
    }
    SubShader {
      Tags { "RenderType" = "Opaque" }
      CGPROGRAM
      #pragma surface surf CustomBlinnPhong

    half4 LightingCustomBlinnPhong (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten)
        {
                half3 h = normalize (lightDir + viewDir);
               
                half diff = max (0, dot (s.Normal, lightDir));
               
                float nh = max (0, dot (s.Normal, h));
                float spec = pow (nh, s.Specular*128.0) * s.Gloss;
               
                half4 c;
                c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * _SpecColor.rgb * spec) * (atten * 2);
                c.a = s.Alpha + _LightColor0.a * _SpecColor.a * spec * atten;
                return c;
        }

        half4 LightingCustomBlinnPhong_PrePass (SurfaceOutput s, half4 light)
        {
                half spec = light.a * s.Gloss;
               
                half4 c;
                c.rgb = (s.Albedo * light.rgb + light.rgb * _SpecColor.rgb * spec);
                c.a = s.Alpha + spec * _SpecColor.a;
                return c;
        }

      struct Input {
          float2 uv_MainTex;
      };
     sampler2D _MainTex;
     float4 _Color;
     float _Shininess;
      void surf (Input IN, inout SurfaceOutput o) {
          half4 tex = tex2D(_MainTex, IN.uv_MainTex);
                  o.Albedo = tex.rgb * _Color.rgb;
                  o.Gloss = tex.a;
                  o.Alpha = tex.a * _Color.a;
                  o.Specular = _Shininess;
      }
      ENDCG
    }
    Fallback "Diffuse"
  }
 
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

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

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

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