62 lines
2.1 KiB
Plaintext
62 lines
2.1 KiB
Plaintext
// 색을 하나도 쓰지 않고 깊이만 기록하는 사각형.
|
|
//
|
|
// 캐릭터보다 "먼저"(Queue 를 앞당겨) 그리고 캐릭터보다 카메라에 "가깝게" 두면,
|
|
// 이 사각형이 덮은 픽셀에서 캐릭터가 깊이 테스트에 탈락해 아예 그려지지 않는다.
|
|
// 그리면서 색을 안 쓰므로(ColorMask 0) 창의 알파도 건드리지 않는다 —
|
|
// 그 자리는 투명한 채로 남고, 실제 데스크톱 창이 그대로 비친다.
|
|
// 결과적으로 캐릭터가 창 "뒤"에 있는 것처럼 보인다.
|
|
//
|
|
// 알파를 0 으로 덮어쓰는 방법도 있지만, 그건 그 자리에 그려진 다른 것까지 같이
|
|
// 지운다. 깊이 마스크는 캐릭터만 가리므로 부작용이 없다.
|
|
Shader "MyCharacterAgent/PlatformOccluder"
|
|
{
|
|
SubShader
|
|
{
|
|
// Geometry(2000) 보다 앞이라 캐릭터보다 먼저 그려진다.
|
|
Tags
|
|
{
|
|
"RenderType" = "Opaque"
|
|
"Queue" = "Geometry-100"
|
|
"RenderPipeline" = "UniversalPipeline"
|
|
}
|
|
|
|
Pass
|
|
{
|
|
ColorMask 0 // 색 버퍼에 아무것도 쓰지 않는다
|
|
ZWrite On // 깊이만 남긴다
|
|
ZTest LEqual
|
|
Cull Off // 사각형이 뒤집혀도 동작하게
|
|
|
|
HLSLPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
|
|
|
struct Attributes
|
|
{
|
|
float4 positionOS : POSITION;
|
|
};
|
|
|
|
struct Varyings
|
|
{
|
|
float4 positionCS : SV_POSITION;
|
|
};
|
|
|
|
Varyings vert(Attributes input)
|
|
{
|
|
Varyings output;
|
|
output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
|
|
return output;
|
|
}
|
|
|
|
half4 frag(Varyings input) : SV_Target
|
|
{
|
|
return 0; // ColorMask 0 이라 어차피 버려진다
|
|
}
|
|
ENDHLSL
|
|
}
|
|
}
|
|
|
|
Fallback Off
|
|
}
|