Files
QuizzinMk5.1/Packages/red.sim.lightvolumes/Scripts/CubeFace.shader
2025-11-27 01:27:15 +00:00

56 lines
1.7 KiB
Plaintext

Shader "Hidden/CubeFace"
{
Properties {
_MainTex("Cubemap", Cube) = "" {}
_FaceIndex("FaceIndex", Int) = 0
}
SubShader {
Tags { "RenderType" = "Opaque" }
Cull Off ZWrite Off ZTest Always
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
samplerCUBE _MainTex;
int _FaceIndex;
struct appdata {
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f {
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert(appdata v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
static const float3 faceDirs[6][3] = {
{ float3( 1, 0, 0), float3( 0, 0, -1), float3(0, -1, 0) }, // +X
{ float3(-1, 0, 0), float3( 0, 0, 1), float3(0, -1, 0) }, // -X
{ float3( 0, 1, 0), float3( 1, 0, 0), float3(0, 0, 1) }, // +Y
{ float3( 0, -1, 0), float3( 1, 0, 0), float3(0, 0, -1)}, // -Y
{ float3( 0, 0, 1), float3( 1, 0, 0), float3(0, -1, 0) }, // +Z
{ float3( 0, 0, -1), float3(-1, 0, 0), float3(0, -1, 0) } // -Z
};
float4 frag(v2f i) : SV_Target {
float2 uv = i.uv * 2 - 1;
float3 viewDir = faceDirs[_FaceIndex][0] + uv.x * faceDirs[_FaceIndex][1] + uv.y * faceDirs[_FaceIndex][2];
return texCUBE(_MainTex, - normalize(viewDir));
}
ENDCG
}
}
}