Created
November 18, 2018 18:51
-
-
Save josephbk117/a43f5335cea9b3e12a44f196dc81f30f to your computer and use it in GitHub Desktop.
Reflection Probe In Custom Unity Shader
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*Please do support www.bitshiftprogrammer.com by joining the facebook page : fb.com/BitshiftProgrammer | |
Legal Stuff: | |
This code is free to use no restrictions but attribution would be appreciated. | |
Any damage caused either partly or completly due to usage this stuff is not my responsibility*/ | |
Shader "BitshiftProgrammer/ReflectionProbeAccess" | |
{ | |
Properties | |
{ | |
_Roughness("Roughness", Range(0.0, 10.0)) = 0.0 | |
} | |
SubShader | |
{ | |
Pass | |
{ | |
CGPROGRAM | |
#pragma vertex vert | |
#pragma fragment frag | |
#include "UnityCG.cginc" | |
float _Roughness; | |
struct appdata | |
{ | |
float4 vertex : POSITION; | |
float3 normal : NORMAL; | |
}; | |
struct v2f | |
{ | |
float3 worldPos : TEXCOORD0; | |
float3 worldNormal : TEXCOORD1; | |
float4 pos : SV_POSITION; | |
}; | |
v2f vert (appdata v) | |
{ | |
v2f o; | |
o.pos = UnityObjectToClipPos(v.vertex); | |
o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; | |
o.worldNormal = UnityObjectToWorldNormal(v.normal); | |
return o; | |
} | |
fixed4 frag (v2f i) : SV_Target | |
{ | |
half3 worldViewDir = normalize(UnityWorldSpaceViewDir(i.worldPos)); //Direction of ray from the camera towards the object surface | |
half3 reflection = reflect(-worldViewDir, i.worldNormal); // Direction of ray after hitting the surface of object | |
/*If Roughness feature is not needed : UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, reflection) can be used instead. | |
It chooses the correct LOD value based on camera distance*/ | |
half4 skyData = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflection, _Roughness); | |
half3 skyColor = DecodeHDR (skyData, unity_SpecCube0_HDR); // This is done becasue the cubemap is stored HDR | |
return half4(skyColor, 1.0); | |
} | |
ENDCG | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment