전장의 안개 로직 개선
미탐험지역은 검게 덮음. 탐험된 지역은 어두운 색, 보고 있는 블록은 밝은색
This commit is contained in:
45
Assets/Materials/FogHeightMask.shader
Normal file
45
Assets/Materials/FogHeightMask.shader
Normal file
@@ -0,0 +1,45 @@
|
||||
// 파일명: FogHeightMask.shader
|
||||
Shader "Custom/FogHeightMask"
|
||||
{
|
||||
Properties { _MainColor ("Fog Color", Color) = (0,0,0,1) }
|
||||
SubShader {
|
||||
Tags { "Queue"="Transparent" "RenderType"="Transparent" }
|
||||
Blend SrcAlpha OneMinusSrcAlpha // 투명도 사용 설정
|
||||
ZWrite Off
|
||||
|
||||
Pass {
|
||||
CGPROGRAM
|
||||
#pragma vertex vert
|
||||
#pragma fragment frag
|
||||
#include "UnityCG.cginc"
|
||||
|
||||
struct v2f {
|
||||
float4 vertex : SV_POSITION;
|
||||
float3 worldPos : TEXCOORD0;
|
||||
};
|
||||
|
||||
sampler2D _GlobalFogTex;
|
||||
float _FogWorldSize;
|
||||
float _GroundLevelY; // 매니저가 보내줄 높이값
|
||||
float4 _MainColor;
|
||||
|
||||
v2f vert (appdata_base v) {
|
||||
v2f o;
|
||||
o.vertex = UnityObjectToClipPos(v.vertex);
|
||||
o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
|
||||
return o;
|
||||
}
|
||||
|
||||
fixed4 frag (v2f i) : SV_Target {
|
||||
// [핵심 로직] 현재 픽셀의 높이가 지상 레벨보다 높으면 투명하게!
|
||||
if (i.worldPos.y > _GroundLevelY) return fixed4(0,0,0,0);
|
||||
|
||||
float2 uv = i.worldPos.xz / _FogWorldSize + 0.5;
|
||||
fixed4 fogData = tex2D(_GlobalFogTex, uv);
|
||||
|
||||
return fixed4(_MainColor.rgb, fogData.a); // 안개 텍스처의 알파값(검정 정도) 적용
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user