Shader "Hidden/IndirectSpecularLight" { Properties { _Skybox("_Skybox", CUBE) = "white" {} _A ("View Dir OS", 2D) = "white" {} _B ("Normal OS", 2D) = "white" {} _C ("LOD", 2D) = "white" {} } SubShader { Pass // not connected { CGPROGRAM #pragma vertex vert_img #pragma fragment frag #include "UnityCG.cginc" #include "Preview.cginc" #include "Lighting.cginc" #include "UnityPBSLighting.cginc" uniform samplerCUBE _Skybox; sampler2D _A; sampler2D _B; sampler2D _C; uint viewDirInput; uint normalInput; uint lodInput; float4 frag(v2f_img i) : SV_Target { float3 vertexPos = PreviewFragmentPositionOS( i.uv ); float3 normal = PreviewFragmentNormalOS( i.uv ); float3 worldNormal = UnityObjectToWorldNormal( normal ); float3 worldViewDir = normalize( preview_WorldSpaceCameraPos - vertexPos ); float lod = 0; float2 sphereUV = PreviewFragmentSphericalUV( i.uv ); if ( viewDirInput != 0 ) { float3 viewDirOS = tex2D( _A, sphereUV ); worldViewDir = UnityObjectToWorldDir( viewDirOS ); } if ( normalInput != 0 ) { float3 normalOS = tex2D( _B, i.uv ); worldNormal = UnityObjectToWorldNormal( normalOS ); } if ( lodInput != 0 ) { lod = tex2D( _C, i.uv ); } float3 worldRefl = normalize( reflect( -worldViewDir, worldNormal ) ); float3 sky = texCUBElod( _Skybox, float4( worldRefl, lod ) ).rgb; return float4( sky, 1 ); } ENDCG } } }