|
|
- //
- // OvrAvatar eye lens shader
- //
- // Generates glint on the eye lens of expressive avatars
- //
-
- Shader "OvrAvatar/Avatar_EyeLens"
- {
- Properties
- {
- _Cube("Cubemap Reflection", CUBE) = "black" {}
- _ReflectionIntensity("Reflection Intensity", Range(0.0,1.0)) = 0.2
- _GlintStrength("Glint Strength", Range(0, 10)) = 1.57
- _GlintSpead("Glint Spead", Range(32, 2048)) = 600
- _Alpha("Alpha", Range(0.0,1.0)) = 1.0
- }
-
- SubShader
- {
- Tags { "LightMode" = "ForwardBase" "Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True" }
- Pass
- {
- Blend SrcAlpha OneMinusSrcAlpha
-
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #pragma fragmentoption ARB_precision_hint_fastest
- #pragma target 3.0
- #include "UnityCG.cginc"
- #include "UnityLightingCommon.cginc"
- #include "AutoLight.cginc"
-
- samplerCUBE _Cube;
- half _ReflectionIntensity;
- half _GlintStrength;
- half _GlintSpead;
- half _Alpha;
-
- struct VertexInput
- {
- float4 vertex : POSITION;
- float3 normal : NORMAL;
- };
-
- struct VertexOutput
- {
- float4 pos : SV_POSITION;
- float4 posWorld : TEXCOORD1;
- float3 normalDir : TEXCOORD2;
- };
-
- VertexOutput vert(VertexInput v)
- {
- VertexOutput o = (VertexOutput)0;
- o.normalDir = UnityObjectToWorldNormal(v.normal);
- o.posWorld = mul(unity_ObjectToWorld, v.vertex);
- o.pos = UnityObjectToClipPos(v.vertex);
- return o;
- }
-
- float4 frag(VertexOutput i) : COLOR
- {
- i.normalDir = normalize(i.normalDir);
- half3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
- half NdotLV = max(0, dot(i.normalDir, normalize(_WorldSpaceLightPos0.xyz + viewDirection)));
- half3 spec = pow(NdotLV, _GlintSpead) * _GlintStrength;
-
- // Sample the default reflection cubemap using the reflection vector
- half3 viewReflectDirection = reflect(-viewDirection, i.normalDir);
- half4 skyData = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, viewReflectDirection);
- // Decode cubemap data into actual color
- half3 reflectionColor = DecodeHDR(skyData, unity_SpecCube0_HDR);
-
- half4 finalColor;
- finalColor.rgb = reflectionColor.rgb * _ReflectionIntensity;
- finalColor.rgb += spec;
- finalColor.a = (finalColor.r + finalColor.g + finalColor.b) / 3;
-
- return finalColor;
- }
- ENDCG
- }
- }
- FallBack "Diffuse"
- }
|