// 색을 하나도 쓰지 않고 깊이만 기록하는 사각형. // // 캐릭터보다 "먼저"(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 }