Daily Life of BlueRose

컴퓨터 & 코딩 공부/컴퓨터 그래픽스 & 언리얼 엔진

컴퓨터 그래픽스 - 언리얼 엔진 지형도구에서 각 셰이더의 역할

푸른로즈 2024. 8. 26. 22:25
728x90

여는 글

언리얼 엔진에서의 지형 레이어는 주로 버텍스 셰이더와 픽셀 셰이더를 사용하여 구현한다고 합니다. 렌더링 파이프라인에 대해 공부하면서 지오메트리 셰이더에서도 뭔가 역할이 있는건 아닐까 싶었는데, 딱히 역할이 별로 없더군요. 

 

대부분의 텍스처 작업(머티리얼 작업)에서 픽셀셰이더와 버텍스셰이더만 언급되는데는 다 그만한 이유가 있는가 봅니다. 대체로 전문분야 종사자들의 QnA와 Reddit 등을 통해 알아보았는데, 온전하게 시스템을 이해하는 사람이나 문의 글이 생각보다 많지 않아서 내용 정리가 쉽지 않네요(즉, 틀린 정보일 수 있다는 뜻).

 

어차피 실제 엔진작업에서 어떤 단계에서 어떻게 이뤄지는지를 굳이 세세하게 알 필요는 없으니, 왜 고도에 따른 지형 변화 적용시 버텍스 접근부터 시작해야 하는지, 반면 레이어 블렌딩에 따른 머티리얼 지정은 별도로 이뤄지는 지에 대해 원리만 대강 이해하기 위한 자료로 참고하시면 좋겠습니다.

 

 

버텍스 셰이더와 지형도구의 관계

버텍스 셰이더는 지형의 각 정점에 대해 계산을 수행합니다. 지형 레이어에서는 각 정점의 높이가 하이트맵에 저장되어있는데, 이 정보가 버텍스 셰이더 단계에서 처리됩니다. 따라서 이와 관련된 작업 또한 이 단계에서 처리되는 경우가 많습니다.

 

리얼 엔진에서 지형 레이어를 사용할 때, 각 레이어가 어떤 영역에 얼마나 적용될지를 결정하는 레이어 웨이트 등의 정보가 버텍스 셰이더에서 계산되어 픽셀 셰이더로 전달됩니다. 예를 들어, 산 정상에는 눈 레이어, 중턱에는 풀 레이어가 적용될 수 있습니다. 다만 이에 따라 실제 채색되는 것은 픽셀 셰이더 단계에서 이뤄집니다. 

 

만약 엔진에서 특정 고도 이상의 지점에 대해 눈에 덮히도록 표현하고 싶다면, 월드 좌표계를 기준으로 특정 고도(y값) 이상에 위치한 버텍스에 대하여는 '눈' 레이어 웨이트를 높게 잡도록 세팅해주면 되겠네요. 이 작업이 버텍스 수준에서부터 시작되므로 버텍스를 기준으로 작업을 해야 한다고 인식하는 것이 중요하겠습니다.

 

여기서 레이어 웨이트는 여러 레이어 블렌딩을 할 때 각 레이어가 갖는 상대적인 불투명도를 의미합니다. 언리얼엔진에서 이러한 표현을 저는 못봤던것 같은데, 마야, 블렌더, 언리얼 엔진까지 다양한 분야에서 두루 사용되는 용어라고 하더군요. 

 

 

픽셀 셰이더와 지형도구의 관계

픽셀 셰이더는 최종적으로 화면에 그려질 픽셀의 색상을 결정하는 단계입니다. 픽셀 셰이더는 버텍스 셰이더로부터 전달받은 레이어 웨이트 정보를 사용해, 각 픽셀에 어떤 레이어 텍스처가 적용될 지 결정하고, 여러 레이어를 혼합(블렌딩)하여 최종 픽셀의 색상을 계산합니다.

 

어떤 기준으로 버텍스를 선정할지에 대하여는 버텍스 셰이더 단계에서 이뤄졌지만, 실제 선택한 텍스처가 레이어 웨이트 값에 따라 계산되는 작업은 결국 픽셀 셰이더에 의해 처리됩니다.

 

 

지오메트리 셰이더와 지형도구의 관계

그리고 가장 제가 궁금했던 점인 지오메트리 셰이더의 역할인데요. 사실 지형 레이어 시스템에서 일반적으로 사용되지 않습니다. 지형 레이어에서 이뤄지는 작업은 주로 텍스처 블렌딩 및 버텍스 관련 조작과 관련이 있는데, 이는 앞서 언급드렸듯 픽셀 셰이더와 버텍스 셰이더의 역할입니다.

 

지오메트리 셰이더는 파티클 작업과 같은 새로운 요소의 생성과 삭제나 털/지느러미 등 생성과 같은 요소의 변형 등에 사용되므로, 일반적인 지형 레이어 시스템에서는 크게 관여하지 않는다고 하네요.

반응형