Тема: Диваны
Показать сообщение отдельно
Старый 07.10.2010, 23:37   #23
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Диваны

Первый мой шейдер был с использованием сурфейсной техники юнити, как оказалось я пока не до конца понимаю как она генерит шейдеры и блики там сделать вообще не получилось.
Сейчас шейдер переписал заново вот так:
Shader "Divan/DiffuseSpecularNew" {
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.8    
    _MainTex 
("Base (RGB) Gloss (A)", 2D) = "white" {}
    
_LightMap ("Lightmap (RGB)", 2D) = "white" {}
    
_LightMap2 ("Lightmap2 (RGB)", 2D) = "white" {}
    
_LightMapT ("LightmapT", Range (0.0, 1)) = 0.0 
}

SubShader {
    
LOD 200
    Tags 
{ "RenderType" = "Opaque" }
    
Pass{
        
CGPROGRAM
        
#pragma vertex vert
        #pragma fragment frag

        #include "UnityCG.cginc" 

        
sampler2D _MainTex;
        
sampler2D _LightMap;
        
sampler2D _LightMap2;
        
float4 _Color;
        
float4 _SpecColor;
        
float _LightMapT;
        
float _Shininess;
        
float4x4 _MainTexMatrix;

        
struct appdata
        
{
            
float4 vertex   : POSITION;
            
float4 texcoord : TEXCOORD0;
            
float4 texcoord1: TEXCOORD1;
            
float4 normal   : NORMAL;
        };

        
struct v2f {
          
float4 pos : POSITION;
          
float4 uv  : TEXCOORD0;
          
float4 uv2 : TEXCOORD1;
          
float4 normal : TEXCOORD2;
          
float3 lightDir : TEXCOORD3;
          
float3 viewDir  : TEXCOORD4;
        };


        
v2f vert (appdata v) 
        {
            
v2f o;
            
o.pos = mul( UNITY_MATRIX_MVP, v.vertex );
            
o.uv = mul(_MainTexMatrix, v.texcoord);
            
o.uv2 = v.texcoord1;
            
o.normal = v.normal;
            
o.lightDir = ObjSpaceLightDir( v.vertex );
            
o.viewDir = ObjSpaceViewDir( v.vertex );
            return 
o;
        }

        
half4 frag( v2f i ) : COLOR {
            
half4 mainColor = tex2D(_MainTex, i.uv.xy);
            
half4 c = ((1 - _LightMapT) * tex2D (_LightMap, i.uv2.xy) + _LightMapT * tex2D (_LightMap2, i.uv2.xy) ) * mainColor;
           
            
half3 h = normalize (i.lightDir + i.viewDir);
            
float nh = max (0, dot (i.normal, h));
            
float spec = pow (nh, mainColor.a * 48) * _Shininess;
            
            return 
c * _Color + spec * _SpecColor;
        }


        
ENDCG
    
}
}

FallBack "Divan/VertexLit"
} 

UPD: такое чувство, что шейдер считает положение камеры и источника в одном месте, и источник точечный... хотя должен быть направленный...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием