Unity GrabPass 가이드
이 문서는 Unity의 GrabPass 커맨드에 대한 설명과 사용 방법을 제공합니다. GrabPass는 프레임 버퍼의 내용을 텍스처로 가져오는 데 사용되며, 이후의 패스에서 고급 이미지 기반 효과를 수행하는 데 유용합니다.
GrabPass 소개
- GrabPass: 이 커맨드는 화면의 내용을 가져와 텍스처로 저장하는 기능을 제공합니다. 보통 고급 비주얼 효과를 구현하는 데 사용됩니다.
- 성능 주의: GrabPass는 CPU와 GPU 성능에 큰 영향을 미치므로, 프로토타입 또는 간단한 테스트 외에는 남용하지 않는 것이 좋습니다. 효율성을 고려하여 사용해야 합니다.
렌더 파이프라인 호환성
| 기능 이름 | 빌트인 렌더 파이프라인 | 유니버설 렌더 파이프라인(URP) | 고해상도 렌더 파이프라인(HDRP) | 커스텀 SRP |
|---|---|---|---|---|
| GrabPass | 지원 | 지원 안 함 | 지원 안 함 | 지원 안 함 |
사용법
GrabPass는 서브셰이더 블록 내에서 주로 사용됩니다. 이 커맨드는 프레임 버퍼에서만 작동하며, 다른 렌더 타겟의 내용을 가져오는 데는 사용할 수 없습니다. 효율적인 성능을 위해 서명 가능성을 통해 작업 횟수를 줄이세요.
서명
- GrabPass { }: 서브셰이더 내에서 프레임 버퍼의 콘텐츠를 가져오는 서명입니다. 반환된 텍스처는
_GrabTexture라는 이름으로 참조됩니다. - 예제 서명: GrabPass { "ExampleTextureName" }
예제 코드
아래 예제는 GrabPass를 사용하여 렌더 타겟의 색상을 반전시키는 방법을 보여줍니다. 이 방법은 효율적이지 않지만 GrabPass의 사용을 시연하는 데 초점을 맞추고 있습니다.
Shader "GrabPassInvert"
{
SubShader
{
// Draw after all opaque geometry
Tags { "Queue" = "Transparent" }
// Grab the screen behind the object into _BackgroundTexture
GrabPass
{
"_BackgroundTexture"
}
// Render the object with the texture generated above, and invert the colors
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 grabPos : TEXCOORD0;
float4 pos : SV_POSITION;
};
v2f vert(appdata_base v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.grabPos = ComputeGrabScreenPos(o.pos);
return o;
}
sampler2D _BackgroundTexture;
half4 frag(v2f i) : SV_Target
{
half4 bgcolor = tex2Dproj(_BackgroundTexture, i.grabPos);
return 1 - bgcolor;
}
ENDCG
}
}
}
요약
GrabPass는 고급 이미지 효과를 구현하는 데 유용한 도구지만 성능에 큰 영향을 미칠 수 있습니다. 필요한 경우에만 사용하고, 대안이 있는 경우에는 다른 방법을 고려하는 것이 좋습니다.
이 문서의 정보를 바탕으로 GrabPass를 사용하여 멋진 비주얼을 구현해 보세요!