// // 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" }