Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

86 lines
2.9 KiB

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