게임개발/게임 그래픽 프로그래밍
Triplanar : WorldNormal
pudding81
2024. 2. 26. 13:16
x= >red
y =>green
z=> blue
Shader "Custom/triplanar"
{
Properties
{
_MainTex ("Albedo (RGB)1", 2D) = "white" {}
_MainTex2 ("Albedo (RGB)2", 2D) = "white" {}
_MainTex3 ("Albedo (RGB)3", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Lambert
#pragma target 3.0
sampler2D _MainTex;
sampler2D _MainTex2;
sampler2D _MainTex3;
struct Input
{
float2 uv_MainTex;
float3 worldPos;
float3 worldNormal;
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
float2 topUV = float2(IN.worldPos.x,IN.worldPos.z); //윗면
float2 sideUV = float2(IN.worldPos.z,IN.worldPos.y); //옆면
float2 frontUV = float2(IN.worldPos.x,IN.worldPos.y); //앞면
float4 topColor = tex2D(_MainTex,topUV); //red
float4 sideColor = tex2D(_MainTex2,sideUV); //green
float4 frontColor = tex2D(_MainTex3,frontUV);//blue
//혼합
o.Albedo = lerp(sideColor,frontColor,abs(IN.worldNormal.z)); //y =green, z=blue
o.Albedo = lerp(o.Albedo,topColor,abs(IN.worldNormal.x)); //x =red
// o.Albedo = IN.worldNormal.rgb;
o.Alpha = 1;
}
ENDCG
}
FallBack "Diffuse"
}