
Unity CommandBuffer 기반 굴절(Refraction) 셰이더
요약
Unity Command Buffers를 활용하여 조정 가능한 블러 처리된 굴절(Refraction) 셰이더 구현 방법을 소개합니다. 이 기법은 Amplify Shader Editor를 사용했으며, 유리 같은 재질을 만드는 데 유용하며 기존의 GrabPass 방식보다 성능과 유연성 면에서 우수하다고 설명합니다.
핵심 포인트
- Command Buffers는 Unity 5 이후 굴절 효과 구현에 적합한 대안입니다.
- 이 셰이더는 블러 처리된 굴절을 통해 사실적인 유리 재질 표현이 가능합니다.
- Amplify Shader Editor를 활용하여 다양한 파라미터(블러, 반사율 등) 조정이 용이합니다.
Unity Command Buffer 기반 굴절(Refraction) 셰이더
조정 가능한, 블러 처리된 굴절(Refraction) 셰이더를 Amplify Shader Editor를 사용하여 Command Buffers로 생성했습니다. 유리 같은 재질을 만드는 데 유용합니다. Amplify Shader Editor 없이도 작동합니다. Unity blog entry에서 영감을 받았습니다.
이 구현은 원래 **Pizza Connection 3**의 사용을 위해 만들어졌지만, 일반적인 사용을 위해 접근 방식을 수정했습니다.
목표
멋진 유리 재질을 만들기 위해서는 굴절(refraction) 효과가 있으면 좋습니다. 최근 게임에서는 유리 재질이 표면에 동적이고 블러 처리된 굴절 효과를 특징으로 하는 경우도 있습니다.
예시로 새로운 DOOM을 참고하세요:

Unity에서 이 효과를 구현하는 전통적인 접근 방식은 셰이더에 GrabPass를 사용하고 동일한 화면 기반 텍스처의 여러 인스턴스를 블러 처리하는 것입니다. Unity 5 이후로는 CommandBuffers를 사용하여 이 접근 방식의 대안이 있습니다. 더 자세한 내용은 이 블로그 글을 참조하세요. 요약: Command Buffers를 사용하는 것이 위 경우의 일반적인 GrabPass보다 성능이 좋고, 유연하며, 사용하기 쉽습니다.
제가 원하는 효과를 Command Buffers를 사용하여 구현하는 방법에 대한 출처를 찾지 못했기 때문에, Unity가 제공한 예제를 조정하여 직접 구현했습니다. 메인 셰이더를 만들기 위해 Amplify Shader Editor *(ASE)*를 사용했습니다.
면책 조항: 저는 셰이더/그래픽 프로그래밍 전문가가 아닙니다. 단지 기여하고 다른 사람들을 돕고 싶은 마음이 들었을 뿐입니다. 모두 이 프로젝트에 기여하여 더 좋게 만들 것을 권장합니다. :)
스크린샷
블러(blur) 양은 간단한 float 속성으로 조정할 수 있습니다.

반사율(Reflectivity), 왜곡(Distortion), 방출 기여도(Emission contribution) 및 기타 많은 요소들을 조정할 수 있습니다.

사용법
- 이 저장소의 내용을 Unity 프로젝트에 복사합니다.
- 화면을 캡처하려는 카메라에 GrabScreen.cs를 추가합니다. (이것은 우리 셰이더를 위해 2개의 전역 스크린 텍스처(Blur 및 No Blur)를 생성합니다)
- 새 **머티리얼(Material)**을 만들고, Custom/CommandBufferRefraction 또는 Custom/CommandBufferRefractionCheaper에서 찾을 수 있는 CommandBufferRefraction 셰이더 중 하나를 사용합니다.
- 머티리얼을 적용하여 씬에 있는 렌더러(renderer)에 할당합니다.
- 플레이 버튼을 누르고 **게임 뷰(Game View)**에서 머티리얼을 확인하세요.
옵션
RefractionWithCommandBuffer.shader

참고: 최대의 유연성을 제공하기 위해 이 머티리얼은 3개의 텍스처를 사용합니다. 속성 이름만 봐도 어떤 채널이 어떤 목적으로 사용되는지 알 수 있습니다.
RefractionWithCommandBufferCheaper.shader

참고: 이것은 사용하기 더 쉽고(more easy to use), 빠르며(faster) 셰이더 버전입니다 (텍스처 호출 감소). 많은 속성들이 슬라이더를 사용하여 조정됩니다.
ASE 그래프
이 셰이더는 Asset Store의 Amplify Shader Editor를 사용하여 생성되었습니다. 다행히도, 이 에셋 없이도 이 셰이더들을 사용할 수 있습니다. 하지만 만약 셰이더 에디터가 있다면 ASE에서 직접 셰이더를 열어볼 수 있습니다.
아래에 셰이더 그래프가 있습니다:
CommandBufferRefractionShader.

저렴한 버전(텍스처 호출 적음).

주의사항 (Caveats)

- Unity 에디터: 셰이더는 *씬 뷰(Scene View)*에서 올바르게 미리보기되지 않습니다.
- 성능: 커맨드 버퍼를 사용하여 2개의 전역 텍스처(블러 및 비 블러)를 생성합니다. 이들은 실제 카메라 화면 크기보다 작지만, 여전히 성능 부하가 크므로 주의해야 합니다.
- 포워드 기반 (Forward Based): 투명도 큐(transparent queue)에서 렌더링해야 하므로, 이 셰이더는 포워드 렌더링(forward rendering)과만 작동합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub GameDev의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기