Shader "SpawnCamp/Triplanar_Blend"
{
Properties
{
_Tex("Texture", 2D) = "white" {}
_Scale("Scale", Float) = 1
}
SubShader
{
Tags { "RenderType"="Opaque" }
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _Tex;
float _Scale;
struct v2f {
float4 pos : SV_POSITION;
float3 wPos : TEXCOORD0;
float3 wNorm : TEXCOORD1;
};
v2f vert(appdata_full v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.wPos = mul(unity_ObjectToWorld, v.vertex).xyz;
o.wNorm = normalize(mul((float3x3)unity_ObjectToWorld, v.normal));
return o;
}
fixed4 frag(v2f i) : SV_Target
{
float3 n = abs(i.wNorm);
float sum = n.x + n.y + n.z;
n /= sum; // normalize weights
float2 uvX = i.wPos.yz * _Scale;
float2 uvY = i.wPos.xz * _Scale;
float2 uvZ = i.wPos.xy * _Scale;
float3 cX = tex2D(_Tex, uvX).rgb;
float3 cY = tex2D(_Tex, uvY).rgb;
float3 cZ = tex2D(_Tex, uvZ).rgb;
float3 blended = cX * n.x + cY * n.y + cZ * n.z;
return float4(blended, 1);
}
ENDCG
}
}
}