Content Creation / Rendering

NVIDIA GeForce RTX 50 시리즈 GPU로 패스 트레이싱된 머리카락을 실시간으로 렌더링하기

Reading Time: 5 minutes

2018년, NVIDIA RTX의 일부로 레이 트레이싱 트라이앵글 메시에 대한 하드웨어 지원이 도입되었습니다. 하지만 머리카락과 털을 레이 트레이싱하는 것은 여전히 높은 연산 성능이 요구되는 과제로 남아 있어 가속화가 어려웠습니다. 지금까지는 말이죠.

NVIDIA GeForce RTX 50 시리즈 GPU에는 머리카락과 털을 위한 레이 트레이싱 가속화의 핵심 기술인 선형 스윕 구체(LSS) 프리미티브에 대한 하드웨어 지원이 포함되었습니다. 이 새로운 프리미티브는 고품질 디지털 휴먼을 실시간으로 렌더링하는 데 있어 획기적인 발전을 의미합니다. 사실적인 인간 렌더링 기술의 활용 범위는 계속 확장되고 있으며, AI 아바타, 영화 및 게임 캐릭터, 그래픽 연구, 고성능 과학 컴퓨팅, 합성 데이터 생성 등 다양한 분야에서 적용될 수 있습니다.

현재 LSS는 NVIDIA OptiXNVAPI SDK에서 사용할 수 있으며, 물리 기반 셰이딩 모델과 함께 리얼타임 헤어 렌더링의 고급 예제는 RTX 캐릭터 렌더링 SDK에 포함되어 있습니다. 이 SDK는 NVIDIA RTX Kit의 일부로 제공되며, RTX Kit은 AI 기반 게임 레이 트레이싱, 방대한 지오메트리를 활용한 씬 렌더링, 사실적인 게임 캐릭터 제작을 지원하는 뉴럴 렌더링 기술 모음입니다. RTX Kit은 GeForce RTX 50 시리즈와 함께 새롭게 소개되었습니다.

LSS 프리미티브란 무엇인가요?

LSS 프리미티브는 서로 다른 반경을 가진 굵고 둥근 3D 선입니다. 마치 삼각형을 연결해 3D 표면을 만드는 것처럼, 여러 개의 선형 스윕 구체(LSS)를 이어 붙여 3D 곡선을 형성할 수 있으며, 이 과정에서 서로 겹치는 지점을 공유할 수도 있습니다. LSS는 원통형 또는 원뿔형 튜브 모양을 가지며, 필요에 따라 양쪽 끝을 구 형태로 마감할 수도 있습니다.

그림 1. 선형 스윕 구의 모양

두 끝점이 겹쳐 선의 길이가 없는 경우, 선형 스윕 구체(LSS)는 일반적인 구(Sphere)가 됩니다. 이 특성을 활용하면 하드웨어 가속 파티클 렌더링이 가능해집니다. 또한, 메모리 효율성과 편의성을 높이기 위해, 이 특수한 LSS 형태는 독립적인 일류 구 프리미티브로 제공됩니다.

일반적으로 선형 스윕 구체는 확대된 클로즈업 형태(그림 1처럼)로 표시되지 않습니다. 대신, 화면에서 1픽셀 너비 정도로 작게 보이도록 설계되었습니다. 여러 개의 선형 스윕 구를 한 가닥으로 연결한 뒤, 카메라를 약간 멀리서 배치하면 날카로운 각이 부드러워지고, 굵은 선이 얇고 자연스러운 곡선처럼 표현됩니다.

그림 2. 멀리서 보면 부드럽게 보이는 선형 스윕 구체

LSS 인덱싱

LSS에는 명시적 목록 모드와 연속 암시적(반암시적) 모드 두 가지 인덱싱 방식이 있습니다. 연속 암시적 모드에서는 하나의 명시적 인덱스와 하나의 암시적 인덱스를 사용합니다. 이때 두 번째 지점은 버텍스 버퍼의 다음 버텍스로 자동 인식됩니다. 목록 모드에서는 각 세그먼트가 버텍스 버퍼에서 두 개의 명시적 인덱스를 사용해 지정됩니다.

연속적인 정점 배치는 일반적으로 더 효율적이고 편리하기 때문에, 연속 암시적 모드는 인덱스 버퍼에서 최대 50%의 메모리를 절약할 수 있습니다. 예를 들어, 명시적 인덱스 버퍼에서는 [0,1,1,2,2,3,4,5,5,6]처럼 저장되지만, 연속 암시적 인덱싱을 사용하면 [0,1,2,4,5]로 줄일 수 있습니다. (그림 3 참조)

그림 3. 정점 인덱스가 있는 두 개의 스트랜드 예시

레거시 하드웨어를 사용하여 스트랜드 기반 커브 렌더링하기

이미 CUDA 기반 레이 트레이싱 API 프레임워크인 NVIDIA OptiX를 사용 중이라면, LSS는 기본 선형 커브 유형으로 제공되며, OptiX가 지원하는 모든 GPU에서 작동합니다. OptiX에서는 코드 변경 없이도 GeForce RTX 50 시리즈 GPU에서는 새로운 하드웨어 가속 프리미티브를, NVIDIA Blackwell 이전 GPU에서는 소프트웨어 폴백을 자동으로 적용합니다. 따라서 OptiX를 사용하고 있다면 LSS를 바로 활용할 수 있으며, OptiX를 사용하지 않는 경우에는 다른 프리미티브를 선택해야 할 가능성이 큽니다.

고성능이 필요한 경우 LSS의 대안으로 테셀레이션 커브를 고려할 수 있습니다. 특히, 카메라 방향 또는 광선 방향 쿼드(quad)가 한 가지 옵션이 됩니다. 광선 방향 쿼드는 상대적으로 메모리 사용량이 적지만, 애니메이션의 모든 프레임에서 방향을 지정해야 할 수도 있습니다. 예를 들어, 헤어 모션이나 카메라 움직임이 있는 경우 프레임마다 방향을 조정해야 하는 부담이 생길 수 있습니다.

분리된 직교 삼각형 스트립(DOTS)은 테셀레이션 커브를 효율적으로 구현하는 솔루션으로, 카메라를 향하도록 삼각형의 방향을 프레임마다 변경할 필요 없이 모든 각도에서 자연스럽게 보이도록 합니다. 덕분에 정적 커브를 렌더링할 때, 카메라나 머리카락이 움직여도 바운딩 볼륨 계층구조(BVH)를 다시 구축할 필요가 없습니다. 또한, 트라이앵글이 광범위하게 지원되므로 DOTS는 기존 RTX 하드웨어를 그대로 활용할 수 있습니다.

GeForce RTX 50 시리즈 GPU에서 LSS를 사용하려는 사용자라면 DOTS를 통해 구형 GPU에서도 레이 트레이싱 기반의 머리카락 렌더링을 지원할 수 있습니다. 실제로, RTX 캐릭터 렌더링 SDK에서는 사실적인 머리카락과 피부의 패스 트레이싱을 구현하기 위해 DOTS와 LSS를 함께 사용하는 헤어 렌더링 예제를 제공하고 있습니다.

LSS의 주요 장점 중 하나는 지오메트리가 자연스럽게 둥글어 음영 처리가 쉬우며, 그림자나 반사광을 표현할 때 자기 교차 문제를 최소화할 수 있다는 점입니다. 그림 4에서 볼 수 있듯이, DOTS와 같은 테셀레이션 커브는 일반적으로 커스텀 셰이딩 노멀을 적용해 지오메트리 노멀을 조정해야 합니다. 둥근 셰이딩 노멀을 사용하면, DOTS로 표현된 커브의 형태가 선형 스윕 구체로 생성된 커브와 유사하거나 구별하기 어려울 정도로 자연스러워질 수 있습니다.

그림 4. 음영 노멀을 사용할 때 직교 직각 삼각형 스트립은 선형 스윕 구의 모양과 일치할 수 있습니다.

LSS 사용의 이점

실시간 헤어 랜더링에 대한 기존 접근 방식은 다음과 같습니다:

  • 텍스처 카드
  • 광선 방향 쿼드, 테셀레이션 튜브, 직교 쿼드(DOTS)
  • 소프트웨어 고차 커브 프리미티브(예: cubic Bezier)

텍스처 카드는 적은 예산으로도 게임 내 헤어를 합리적인 퀄리티로 구현할 수 있는 효과적인 방법이었습니다. 그러나 이러한 방식은 제한적이어서 헤어 시뮬레이션이나 애니메이션을 위한 충분한 공간을 제공하지 못합니다. 또한, 텍스처 카드는 하나의 카드에 여러 개의 스트랜드가 포함되어 있어 개별 스트랜드를 자유롭게 제어할 수 없습니다. 반면, 스트랜드 기반 접근 방식은 훨씬 더 높은 제어력과 유연성을 제공하며, 하드웨어가 발전함에 따라 실시간 헤어 렌더링의 미래가 될 것입니다.

그림 5. 사람의 애니메이션 머리카락 렌더링은 DOTS에 비해 LSS를 사용하면 약 2배 더 빠르며, 지오메트리를 저장하는 데 필요한 VRAM도 약 5배 더 적습니다.

요즘은 하드웨어에서 트라이앵글을 효과적으로 처리할 수 있어, 커브를 트라이앵글(튜브, 쿼드, DOTS)로 테셀레이션하면 렌더링 속도가 크게 향상됩니다. 다만, 테셀레이션 과정에서 시간이 소요되고 메모리 사용량이 늘어날 수 있습니다. 쿼드는 4개의 정점이 필요하지만, 그중 2개는 스트랜드의 인접한 쿼드와 공유할 수 있습니다. 따라서 평균적으로 카메라를 향한 쿼드는 스트랜드 세그먼트당 최소 2개의 버텍스만 필요합니다. 반면, 튜브나 DOTS를 사용하면 세그먼트당 버텍스 개수가 2개 이상으로 늘어납니다.

LSS는 스트랜드 세그먼트당 평균 1개의 버텍스만 사용하기 때문에, 테셀레이션된 커브보다 훨씬 적은 메모리로 더 빠르게 렌더링할 수 있습니다. 또한, 큐빅 B-스플라인 같은 소프트웨어 기반의 고차 커브 프리미티브보다도 훨씬 높은 성능을 제공합니다. 물론, 부드러운 곡선을 위해 더 많은 버텍스가 필요할 수도 있는데, 이 경우 추가적인 성능 이점을 큐빅 커브 대비 메모리 사용량과 균형을 맞춰 활용할 수 있습니다.

LSS는 또 어떤 용도로 사용할 수 있나요?

RTX 버전의 리니어 스윕 스피어는 주로 머리카락과 털 렌더링을 위해 설계되었지만, 파티클, 분자 모델, 와이어프레임 렌더링, 글꼴 및 경로 렌더링 등 다양한 용도로도 활용할 수 있습니다.

그림 6. 와이어프레임(왼쪽), 파티클 렌더링(가운데), 분자 모델(오른쪽) 등 선형 스윕 구의 다른 용도. 이미지 크레딧: Bay Raitt, Valve; 스탠포드 다크 스카이 시뮬레이션; 일리노이 대학교

LSS 시작하기

NVIDIA GeForce RTX 50 시리즈 GPU의 RT 코어는 리니어 스윕 스피어(LSS)라는 새로운 프리미티브를 하드웨어로 지원합니다. LSS는 다양한 두께를 가진 둥근 3D 선 프리미티브로, 여러 형태의 스트랜드를 유연하게 표현할 수 있습니다. 특히 GeForce RTX 50 시리즈 GPU에서는 스윕된 선형 세그먼트 없이 구체를 직접 처리할 수 있어, 파티클 시스템 같은 애플리케이션에 유용합니다.

애니메이션 머리카락을 렌더링할 때 LSS를 사용하면 DOTS 대비 약 2배 빠른 성능을 제공하며, VRAM 사용량도 5배 이상 절감할 수 있습니다. 이러한 성능 차이는 다른 일반적인 사용 사례에서도 유사하게 나타납니다. 이제 GeForce RTX 50 시리즈의 LSS와 기존 GPU의 DOTS를 활용하면, 모든 RTX GPU에서 최상의 헤어 레이 트레이싱 성능을 구현할 수 있습니다.

CUDA 기반 레이 트레이싱에서는 현재 OptiX에서 LSS를 지원합니다. DirectX의 경우, NVAPI SDK의 R570 버전부터 LSS용 API를 사용할 수 있으며, Vulkan 개발자는 Vulkan LSS 확장을 확인하면 됩니다.

물리 기반 헤어 렌더링의 예시는 RTX 캐릭터 렌더링 SDK에서 확인할 수 있습니다. 최신 AI 및 렌더링 기술에 대한 정보는 NVIDIA RTX Kit를 참고하세요. LSS 관련 논의에 참여하려면 OptiX NVIDIA 개발자 포럼을 방문하면 됩니다.

관련 리소스

Discuss (0)

Tags