Skip to content

지오메트리 셰이더(5)~지오메트리 셰이더를 활용한 신표현(1)

[칼럼 핵심 요약]
지오메트리 셰이더의 활용 방침의 두 번째. 지오메트리 셰이더를 사용함으로써 지금까지의 GPU에서는 어려웠던 표현을 할 수 있게 된다. 서서히 독특한 테크닉이 등장하기 시작하고 있지만, 여기서는 가장 기본적인 것을 소개하고 싶다.

🌐 원문 링크: ジオメトリシェーダ(5)~ジオメトリシェーダを活用した新表現(1) (Mynavi News)
📅 원문 발행일: 2008-10-10 | ✍️ 저자: 西川善司 (니시카와 젠지 / Zenji Nishikawa)

NOTE

💡 현대 그래픽스 관점에서의 발전사 (Modern Retrospective)

  • 본 칼럼에서 다루는 핵심 렌더링 기법은 현대 실시간 렌더링 엔진(DirectX 12, Vulkan, Unreal Engine, Unity)의 기초 이론을 구성하고 있으며, 최신 하드웨어 가속 기법 및 컴퓨트 셰이더와 결합하여 고도화되었습니다.

📖 본문 해설

[원문 리드문] > 지오메트리 셰이더의 활용 방침의 2번째. 지오메트리 셰이더를 사용함으로써 지금까지의 GPU에서는 어려웠던 표현을 할 수 있게 된다. 서서히 독특한 테크닉이 등장하기 시작하고 있지만, 여기서는 가장 기본적인 것을 소개하고 싶다.

지오메트리 셰이더를 활용한 신표현(1)~모션 블러

지오메트리 셰이더의 활용 방침의 둘째, 「지오메트리 셰이더를 활용한 신표현」이란, 지오메트리 셰이더를 이용하는 것으로, 지금까지의 GPU에서는 어려웠던 표현을 실시할 수 있게 된다.

서서히 독특한 테크닉이 등장하기 시작하고 있지만, 여기서는 가장 기본적인 것을 소개하고 싶다.

비교적 구현이 간단하고 효과가 큰 것이 지오메트리 셰이더를 활용한 모션 블러다.

실은 지오메트리 셰이더를 사용한 모션 블러에는 여러 종류가 있다. 여기에서는 그 중 3패턴을 소개한다.

우선 모션 블러란 무엇인가. 이 기본을 정리해 두자.

실시간 컴퓨터 그래픽은 어떤 의미에서 셔터 속도 1/∞초의 카메라로 촬영하고 있는 것과 같기 때문에 아무리 피사체가 고속으로 움직이고 있어도 생성한 프레임이 흐려지지 않는다. 이것이 '아무리 CG' 같다는 것도 사실이며, 이것을 마치 카메라로 촬영한 것 같은 포토 리얼리스틱하게 보여주려고 빠른 움직임에 대해 "흔들림"의 효과를 부가하는 테크닉을 "모션 블러"라고 부른다.

모션 블러의 부차적 효과로서, 표시 프레임 레이트가 일정을 유지할 수 없어도, 본 목적으로 알기 어렵게 하는 효과도 있기 때문에, 최근에는 많은 3D 게임 등에서 채용되게 되어 왔다.

결국, 모션 블러란, 어떠한 수법으로 "흔들림 효과"를 그려나갈까……가 키포인트가 된다.

가장 기본적인 것은, 영상 프레임 전체에 균일하게 걸어 버리는 「카메라 블러」이다.

이것은, 현재의 묘화 프레임을, 시점(카메라)의 이동 벡터에 따른 형태로 확대 축소, 혹은 회전 등을 실시하여, 반투명으로 겹쳐 그려 합성함으로써 실현할 수 있다.

이 카메라 블러는 레이스 게임과 같은 화면 전체가 움직이는 것을 주로 한 경우에는 잘 된다. 말로 달리거나, 돌아다니는 거상에 매달리는, 카메라 전체가 드래스틱하게 움직이는 액션이 ​​두드러지던 PS2용 「완다와 거상」이라고는 이 수법을 활용해, 매우 높은 효과를 얻고 있었다.

가로 2 차원 처리 카메라 흐림 개념 그림가로 2 차원 처리 카메라 흐림 개념 그림

원래 프레임(왼쪽)과 흐림 처리한 프레임(오른쪽) ※「완다와 거상」에서 인용원래 프레임(왼쪽)과 흐림 처리한 프레임(오른쪽) ※「완다와 거상」에서 인용

원래 프레임(왼쪽)과 흐림 처리한 프레임(오른쪽) ※「완다와 거상」에서 인용원래 프레임(왼쪽)과 흐림 처리한 프레임(오른쪽) ※「완다와 거상」에서 인용

깊이 방향의 2 차원 처리 카메라 흐림 개념 그림깊이 방향의 2 차원 처리 카메라 흐림 개념 그림

원래 프레임(왼쪽)과 흐림 처리한 프레임(오른쪽) ※「완다와 거상」에서 인용원래 프레임(왼쪽)과 흐림 처리한 프레임(오른쪽) ※「완다와 거상」에서 인용

원래 프레임(왼쪽)과 흐림 처리한 프레임(오른쪽) ※「완다와 거상」에서 인용원래 프레임(왼쪽)과 흐림 처리한 프레임(오른쪽) ※「완다와 거상」에서 인용

그러나, 이 카메라 블러에서는, 씬내에 존재하는 1개 1개의 3D 오브젝트가, 흩어져, 임의의 빠른 움직임을 행하고 싶은, 그 움직임 각각에 꼼꼼한 블러를 낼 수 없다. 이는 카메라 블러가 표시 프레임(2D 영상)을 화상 처리했을 뿐인 '2D 블러'이기 때문이다.

나중에 소개하는 3개의 모션 블러 수법은 각각의 캐릭터들에게 개별적인 입체적인 블러를 낼 수 있는, 이른바 3차원 기반의 모션 블러를 실현한다. 그리고 이 3차원적인 흔들림의 생성에 지오메트리 셰이더를 사용하게 됩니다.

캐릭터의 움직임에 흐림 효과를주는 "액션 블러"

캐릭터가 펀치나 킥 등의 고속 액션을 했을 때 일어나는 블러 표현에 적합한 기법이다. 굳이 명명한다면 '액션 블러'라는 느낌의 기법이 된다. 최근에는 「오브젝트 모션 블러」(OMB)라고 불리는 경우도 많다.

이 기법에서는, 3D 캐릭터의 버텍스 정보에 속도 벡터(속도, 움직이는 방향)의 값을 갖게 해, 이 정보를 바탕으로, 지오메트리 셰이더로 버텍스을 늘리는 것 같은 이미지로 폴리곤을 신규로 생성한다. 덧붙여 그 움직임의 과거의 궤적 뿐만이 아니라, 미래의 진행 방향에도 폴리곤을 생성하는 것이 미소다.

지오메트리 셰이더를 활용하여 움직이는 속도와 그 방향으로 폴리곤을 생성. 현재 위치를 중심으로 과거의 궤적과 미래의 궤도에도 생성해주는 것이 미소지오메트리 셰이더를 활용하여 움직이는 속도와 그 방향으로 폴리곤을 생성. 현재 위치를 중심으로 과거의 궤적과 미래의 궤도에도 생성해주는 것이 미소

그리고 생성된 폴리곤에 대하여 현재를 기준으로 멀리 멀어질수록 α값(투명도 0~1의 값을 취하고, 0이 완전히 투명, 1이 완전히 불투명)을 낮게 하도록 설정한다. 이 α정보는 근사적으로는 「화면상에서의 각 픽셀 단위의 속도 정보 분포에 상당한다」라고 볼 수 있으므로, 원래의 폴리곤에 붙여 붙이는 텍스처에 대해, 이 정보에 따라 시프트하여 텍셀을 참조해 주고, 텍스처를 적용해 나간다. 현재 시간에서 멀수록 α 값이 0 (투명)에 가까워지기 때문에 샘플링 된 텍셀의 색상은 얇게 합성됩니다. 이것에 의해 제일 과거와 제일 미래의 픽셀은 얇고, 현재에 가까울수록 진하게……라고 하는 묘화가 되어, 속도감을 연출할 수 있게 된다. (계속)

현재 위치에서 멀어질수록 α값은 0으로. 이것은 근사적으로 화면상의 픽셀 단위의 속도를 나타냅니다. 이 값을 오프셋 값으로 하여 텍스처에서 샘플링하여 흐림 효과를 표현합니다.현재 위치에서 멀어질수록 α값은 0으로. 이것은 근사적으로 화면상의 픽셀 단위의 속도를 나타냅니다. 이 값을 오프셋 값으로 하여 텍스처에서 샘플링하여 흐림 효과를 표현합니다.

그림그림

Microsoft, DirectX 10 데모에서. 풍차는 항상 등속 회전 운동을 하고, 몬스터는 격투 액션을 피로. 각각의 속도와 방향에 따른 블러가 제대로 나오는 점이 카메라 블러와는 크게 다른 점Microsoft, DirectX 10 데모에서. 풍차는 항상 등속 회전 운동을 하고, 몬스터는 격투 액션을 피로. 각각의 속도와 방향에 따른 블러가 제대로 나오는 점이 카메라 블러와는 크게 다른 점

Microsoft, DirectX 10 데모에서. 풍차는 항상 등속 회전 운동을 하고, 몬스터는 격투 액션을 피로. 각각의 속도와 방향에 따른 블러가 제대로 나오는 점이 카메라 블러와는 크게 다른 점Microsoft, DirectX 10 데모에서. 풍차는 항상 등속 회전 운동을 하고, 몬스터는 격투 액션을 피로. 각각의 속도와 방향에 따른 블러가 제대로 나오는 점이 카메라 블러와는 크게 다른 점

(트라이Z 니시카와 젠지)


🔗 연관 지식 베이스 (Wiki)

Based on Zenji Nishikawa's 3D Graphics Maniax series. Translated & Knowledge-Based for Korean Game Developers.