- Код: Выделить всё
Shader "RefTest" {
Properties {
_Bumpheight ("Bump Height", Range (0, 2)) = 0.01
_Reflective ("Reflectivity", Range (0, 1)) = 0.4
_Fresnel ("Fresnel_Coeff", Range (0, 10)) = 2
_Color ("Main Color", Color) = (1,1,1,0.5)
_MainTex ("Base (RGB)", 2D) = "white" {}
_LightMap ("Lightmap (RGB)", 2D) = "light" {}
_BumpMap ("Bumpmap (RGB)", 2D) = "white" {}
}
Category {
Blend AppSrcAdd AppDstAdd
Fog { Color [_AddFog] }
// Fragment program cards
SubShader {
Pass {
Tags { "LightMode" = "Pixel" }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_builtin
#pragma fragmentoption ARB_fog_exp2
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
#include "AutoLight.cginc"
struct a2v {
//float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
float2 texcoord1 : TEXCOORD1;
float3 tangent : TANGENT;
};
struct v2f {
V2F_POS_FOG;
LIGHTING_COORDS // <= note no semicolon!
//float4 color : COLOR0;
float2 uv :TEXCOORD4;
float2 uv2 :TEXCOORD3;
float3 normal : TEXCOORD0;
float3 ldir : TEXCOORD1;
float3 tangent : TEXCOORD2;
float3 binormal : COLOR0;
float3 viewDir: TEXCOORD5;
};
// Vertex program
v2f vert (appdata_base v, a2v i)
{
v2f o;
PositionFog( v.vertex, o.pos, o.fog );
o.uv = i.texcoord;
o.uv2 = i.texcoord1;
float3 ldir = normalize( ObjSpaceLightDir( v.vertex ) );
float diffuse = dot( v.normal, ldir );
// o.color = diffuse * _ModelLightColor0;
float3 binormal = cross(v.normal, i.tangent);
o.normal = v.normal;// normalize(mul((v.normal) , (float3x3)_Object2World));
o.tangent = i.tangent;
//o.binormal = binormal;//normalize(mul((binormal) , (float3x3)_Object2World));
o.viewDir = -(ObjSpaceViewDir( v.vertex ));
o.ldir=ldir;
TRANSFER_VERTEX_TO_FRAGMENT(o);
return o;
}
uniform float _Bumpheight;
uniform float _Reflective;
uniform float _Fresnel;
uniform sampler2D _MainTex;
uniform sampler2D _LightMap;
uniform sampler2D _BumpMap;
uniform samplerCUBE _Mycube;
// Fragment program
float4 frag (v2f i) : COLOR
{
////// -=_LIGHTMAP_=-
half4 lightmap=tex2D(_LightMap, i.uv2);
////// -=_MAIN TEXTURE_=-
float4 texcol = tex2D(_MainTex,i.uv);
////// -=_BUMP_=-
float3 normaltex = tex2D(_BumpMap, i.uv.xy).xyz;
half3 smooth = half3(0.5,0.5,1.0);
half3 normalc= lerp( smooth, normaltex , _Bumpheight);
half3 normalb= normalize( ( normalc* 2.0f ) - 1.0f );
float3 N = normalize(normalb.x*i.tangent-normalb.y*i.binormal+normalb.z*i.normal);
half ndotl = saturate(dot(N, i.ldir));
////// -=_REFLECTION_=-
float3 V = i.viewDir;
float3 R= (reflect(V, N));
R=mul( (float3x3)_Object2World, R );
float4 refcol = texCUBE(_Mycube,R);
half tipa_fresnel = 0.2+saturate(1-dot(N, normalize(-V)));
tipa_fresnel = saturate(pow(tipa_fresnel, _Fresnel));
return lightmap*lerp(texcol*(ndotl * LIGHT_ATTENUATION(i) +_PPLAmbient)*4* _ModelLightColor0, refcol, _Reflective*tipa_fresnel);///texcol*(ndotl * LIGHT_ATTENUATION(i) +_PPLAmbient)* 4;
}
ENDCG
}
}
}
Fallback "VertexLit"
}
Пишите в случае каких-либо ошибок...
PS Юзайте CrazyBump
PPS Рефлектит кубмап заданный через сетглобал --- uniform samplerCUBE _Mycube; --- вот строчка