diff --git a/Assets/measuregeneric/shaders/InteriorReflectionShader.shader b/Assets/measuregeneric/shaders/InteriorReflectionShader.shader index 840f72f..94583d1 100644 --- a/Assets/measuregeneric/shaders/InteriorReflectionShader.shader +++ b/Assets/measuregeneric/shaders/InteriorReflectionShader.shader @@ -44,8 +44,8 @@ Shader "Custom/InteriorReflectionShader" float3 BoxProjectReflectionDir(float3 worldPos, float3 worldRefl) { // Calculate relative position within the box - float3 boxMin = unity_SpecCube0_BoxMin; - float3 boxMax = unity_SpecCube0_BoxMax; + float3 boxMin = unity_SpecCube0_BoxMin.xyz; + float3 boxMax = unity_SpecCube0_BoxMax.xyz; float3 boxCenter = 0.5 * (boxMin + boxMax); float3 boxSize = boxMax - boxMin; @@ -60,12 +60,28 @@ Shader "Custom/InteriorReflectionShader" fixed4 frag (v2f i) : SV_Target { + float3 worldViewDir = normalize(i.worldPos); + float3 worldNormal = normalize(i.worldNormal); + float3 worldRefl = normalize(reflect(-worldViewDir, worldNormal)); + + float3 scale = ((worldRefl > 0 ? unity_SpecCube0_BoxMax.xyz : unity_SpecCube0_BoxMin.xyz) - i.worldPos) / worldRefl; + float scaleMin = min(min(scale.x, scale.y), scale.z); + float3 uvw = worldRefl * scaleMin + (i.worldPos - unity_SpecCube0_ProbePosition.xyz); + + // float4 sampleRefl = SAMPLE_TEXTURECUBE_LOD(unity_SpecCube0, samplerunity_SpecCube0, uvw, LOD); + // float3 specCol = DecodeHDREnvironment(sampleRefl, unity_SpecCube0_HDR); + half4 sampleRefl = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, uvw); + half3 specCol = DecodeHDR(sampleRefl, unity_SpecCube0_HDR); // This is done becasue the cubemap is stored HDR + return half4(specCol, 1.0); + +/* 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 reflection = BoxProjectReflectionDir(i.worldPos, reflection); half4 skyData = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, reflection); half3 skyColor = DecodeHDR(skyData, unity_SpecCube0_HDR); // This is done becasue the cubemap is stored HDR return half4(skyColor, 1.0); +*/ } ENDCG }