이 페이지에는 그룸과 함께 사용할 수 있는 확장성 및 퍼포먼스 옵션에 대한 정보가 포함되어 있습니다.
지오메트리 확장성
스트랜드(Strands) 지오메트리는 자연스러운 헤어 모션과 룩을 제공하지만, 퍼포먼스 예산을 할당해야 하며 모든 플랫폼에서 지원하는 것은 아닙니다. 스트랜드 지오메트리를 사용할 수 없는 경우, 그룸은 헤어 카드 제네레이터(Hair Card Generator) 플러그인으로 임포트되거나 생성된 그룸 카드와 그룸 메시에 의존할 수 있습니다. 특정 레벨 오브 디테일(Level of Detail, LOD)에 스트랜드와 카드/메시 지오메트리를 모두 포함하도록 설정할 수 있으므로 플랫폼 지원 및 확장성 세팅에 따라 둘 중 하나로 부드럽게 전환할 수 있습니다.
그룸이 지원하는 플랫폼에 대한 추가 정보는 그룸 플랫폼 지원 페이지에서 확인할 수 있습니다.
그룸 카드 생성에 대한 자세한 내용은 헤어 카드 제네레이터 페이지를 참조하세요.
스트랜드 파이프라인 개요
다음은 그룸 스트랜드용 렌더링 파이프라인의 개요입니다. 이 내용은 프로젝트의 예산 및 사용 사례에 따라 스트랜드의 퍼포먼스를 조정하는 데 도움이 될 수 있습니다.
렌더링 파이프라인은 다음과 같은 스테이지로 나뉩니다.
- 시뮬레이션(Simulation): 가이드의 모션은 씬 환경 및 그룸 컴포넌트 모션을 기반으로 시뮬레이션됩니다.
- 보간(Interpolation): 가이드의 모션은 렌더링 스트랜드로 전송되며, 그룸이 스켈레탈 메시에 바운딩된 경우 표면 스키닝이 적용됩니다.
- 복셀화(Voxelization): 헤어 커브가 복셀화되어 밀도 볼륨을 생성합니다. 이 볼륨은 라이팅 스테이지 중에 섀도 및 헤어 투과율을 계산하는 데 사용됩니다. 깊은 그림자(Deep Shadow)를 사용하는 라이트에 대해서는 이 스테이지에 전용 '깊은' 섀도 맵이 생성됩니다.
- 프라이머리 비저빌리티(Primary Visibility): 헤어 커브가 현재 카메라 뷰포트에 맞게 래스터화되고, 라이팅과 함께 사용할 수 있도록 헤어 샘플이 할당됩니다.
- 라이팅(Lighting): 모든 헤어 샘플은 복셀 또는 깊은 그림자 데이터를 사용하여 섀도 및 투과로 라이팅됩니다.
- 컴포지션(Composition): 모든 헤어 샘플이 다시 그룹화되고 최종 헤어 픽셀을 씬 컬러 버퍼에 구성합니다.
스트랜드 에셋
씬의 퍼포먼스는 렌더링되는 그룸의 수에 영향을 받습니다. 그룸의 복잡도, 즉 커브 및 포인트 의 수는 전반적인 퍼포먼스에 큰 영향을 줍니다. 그룸에 커브가 많을수록 시뮬레이션, 보간, 복셀화 및 프라이머리 비저빌리티를 위한 렌더링 패스 비용이 커집니다.
- 커브/포인트(Curves / Points) 는 그룸 에디터(Groom Editor)의 스트랜드 패널에서 데시메이션하거나 리임포트할 수 있습니다.
- 자동 LOD 바이어스(Auto LOD bias) 를 사용하면 그룸이 화면에서 더 적은 픽셀을 차지하므로 커브 수를 빠르게 줄일 수 있습니다.
보간
다음 중 하나에 해당하는 경우 그룸에 대해 보간 단계가 실행됩니다.
- 시뮬레이션(Simulation) 이 활성화된 경우
- 스킨을 입힌(Skinned) 바인딩이 적용된 어태치된 그룸이 있을 경우
- RBF/글로벌 보간(Global Interpolation) 이 활성화된 경우
그룸 바인딩이 리지드(Rigid) 로 설정되어 있고 시뮬레이션이나 RBF가 없는 경우, 보간은 실행되지 않으며 커브는 연결된 본이나 스켈레탈 메시에 의해서만 선형으로 트랜스폼됩니다. 그러면 약간의 비용이 절약됩니다.
기본적으로 섀도를 드리우는, 보이지 않는 그룸은 '최신' 섀도를 드리우기 위해 업데이트되고 복셀화됩니다. 이러한 보이지 않는 그룸의 보간 및 복셀화는 r.HairStrands.Shadow.CastShadowWhenNonVisible 을 사용하여 비활성화할 수 있으며, 그러면 보간 비용이 약간 절약됩니다.
그룸의 섀도가 거의 눈에 띄지 않는 경우, r.HairStrands.Shadow.CastShadowWhenNonVisible 콘솔 명령은 실용적인 선택이 될 수 있습니다.
섀도잉
기본적으로 그룸이 드리우는 섀도는 전부 복셀화로 생성됩니다. 이는 헤어 복셀이 루멘 오클루전 및 앰비언트 오클루전과 같은 다른 용도에 필요하기 때문이며, 이는 섀도가 드리운 각 라이트에 대해 헤어 지오메트리 다시 그리기를 피할 수 있는 간단한 수단입니다.
섀도 퀄리티는 다음과 같은 몇 가지 파라미터와 관련이 있습니다.
- 복셀 크기(Voxel Size): 복셀이 도달할 수 있는 가장 작은 월드 크기를 정의합니다. 뷰 디스턴스가 같은 경우, 복셀 크기가 커지면 섀도가 더 거칠어지지만, 복셀 및 라이팅 비용은 저렴해집니다. 이 크기는
r.HairStrands.Voxelization.VoxelSizeInPixel콘솔 명령으로 설정할 수 있습니다. 디폴트값은 0.3입니다. - 복셀 크기(픽셀)(Voxel Size in Pixel): 픽셀 단위로 복셀의 유효 크기를 정의합니다. 즉, 그룸이 카메라에서 멀어질수록 실제 복셀 크기가 커진다는 뜻입니다. 이를 통해 복셀화 및 라이팅 비용을 절약할 수 있습니다. 이 크기는
r.HairStrands.Voxelization.VoxelSizeInPixel콘솔 명령으로 제어할 수 있습니다. 이는 기본적으로 활성화됩니다.
섀도 또는 투과율을 계산할 때, 복셀 구조체를 탐색하여 오클루전/투과율 값을 추정합니다. 이 작업은 복셀을 단계적으로 레이마칭하여 수행됩니다. 각 단계 사이의 간격을 늘려 속도를 높이거나, 간격을 줄여 퀄리티를 높일 수 있습니다.
단계가 커질수록 탐색은 빨라지지만, 가져오는 밉이 더 거칠어지므로 결과도 거칠어집니다. 단계 스케일을 조정하면 특정 한계까지 라이팅 비용에 영향을 주지만, 섀도 및 헤어 투과율 퀄리티가 저하됩니다. 이는 r.HairStrands.Voxelization.RayMarching.SteppingScale 콘솔 명령으로 제어됩니다. 섀도, 환경, 라이팅, 투과 등, 라이팅 통합의 다양한 부분에 대해 이 변수의 베리언트가 존재합니다.
버추얼 섀도 맵(Virtual Shadow Map)을 사용할 때는 r.Shadow.Virtual.SMRT.SamplesPerRayHair 콘솔 명령으로 픽셀당 샘플 수를 늘려 섀도 바운더리에서의 노이즈를 개선할 수 있습니다. 디폴트는 픽셀당 샘플(sample per pixel, ssp) 1개입니다.
대부분의 라이트에 그룸이 드리우는 섀도가 필요 없는 경우, 해당 그룸의 복셀화를 에셋이나 인스턴스에서 비활성화할 수 있습니다. 그런 다음, 중요한 라이트를 선택한 뒤 투과율 계산과 호환되며 라이트별 섀도를 생성하는 깊은 오파시티 섀도(Deep Opacity Shadow) 를 드리울 수 있습니다.
래스터화
래스터화 중에 r.Shadow.Virtual.SMRT.SamplesPerRayHair 콘솔 명령을 환경설정하여 퍼포먼스보다 퀄리티를 우선하도록 균형을 맞출 수 있습니다.
- 멀티 샘플 안티 에일리어싱(Multi-Sample Anti-Aliasing, MSAA) 기법(디폴트)을 사용하는 경우, 서브 픽셀 샘플의 수는 1~8개(디폴트는 4로 설정됨)까지 달라질 수 있습니다.
-
픽셀별 링크된 목록(Per-Pixel Linked List, PPLL) 기법을 선택하여 서브 픽셀 수를 최대 32개까지 늘릴 수 있으며, 이러면 투명 결과값이 더 세밀해집니다. 이 기법은 픽셀당 긴 샘플 목록을 저장합니다.
이 옵션은 비용이 매우 많이 소모되며, 단방향 매체와 사전 계산된 시네마틱에만 사용해야 합니다.
인바이런먼트 라이팅
인바이런먼트 라이팅의 경우, 헤어에 다음 두 가지 기법을 사용하여 속도를 희생하고 퀄리티를 높일 수 있습니다.
- 빠른 단일 샘플 인바이런먼트 라이트 평가(
r.HairStrands.SkyLighting.IntegrationType 2). 결과 퀄리티는 인바이런먼트 라이팅의 스무딩 정도에 따라 달라집니다. - 여러 개의 샘플을 사용한 고퀄리티 BSDF 통합. 이 기법을 사용하면 높은 퍼포먼스 비용으로 높은 퀄리티를 얻을 수 있습니다(
r.HairStrands.SkyLighting.IntegrationType 1).r.HairStrands.SkyLighting.SampleCount콘솔 명령으로 샘플 수를 제어하며, 샘플 수에 따라 노이즈가 달라집니다.
미세한 디테일 오클루전을 고려하기 위해 r.HairStands.SkyLighting.ScreenTraceOcclusion 으로 소규모 오클루전을 활성화할 수 있습니다. 예를 들어, 속눈썹을 클로즈업하는 경우가 있습니다.
헤어가 드리우는 앰비언트 오클루전은 정말 부드럽고 거의 눈에 띄지 않는데도 보통은 상당한 비용이 소모될 수 있습니다. r.HairStrands.SkyAO 0 콘솔 명령으로 이 앰비언트 오클루전을 비활성화할 수 있습니다.
레이 트레이싱
헤어 스트랜드에 대한 레이 트레이싱 지오메트리는 디폴트로 비활성화되어 있습니다. 에셋별로, 그리고 인스턴스별로 이를 활성화할 수 있습니다. 레이 트레이싱 그룸 지오메트리를 메모리 비용이 높으며, 해당 그룸(스킨을 입혔거나 시뮬레이션된 경우)이 애니메이팅되어 있다면 업데이트 비용은 무시할 수 없는 수준이 됩니다. 레이 트레이싱 지오메트리는 필요할 때, 정밀한 섀도 캐스팅이 가장 중요한 작은 그룸 부분에만 사용해야 합니다. 예를 들어, 강력한 디렉셔널 라이트로 가느다란 속눈썹 섀도를 드리우는 경우입니다.
r.HairStrands.Raytracing 0 콘솔 명령으로 모든 레이 트레이싱 지오메트리 사용을 비활성화할 수 있습니다.