헤어 렌더링 및 시뮬레이션 기능은 최소한의 스트랜드 기반 헤어 임포팅, 렌더링, 시뮬레이션을 제공합니다. 이번 업데이트는 헤어 그루밍 솔루션을 제공하지 않습니다. 헤어 셰이핑 또는 그루밍을 작업할 때는 Maya와 같은 외부 DCC 툴의 XGen 툴 또는 Shave and a Haircut. 플러그인을 사용해야 합니다. 이외에 Ornatrix, Yeti, Houdini와 같은 툴도 사용 가능합니다.
본 문서는 헤어 그룸 임포트를 표준화하고 언리얼 엔진 4(UE4)에 헤어 정보를 적용해 헤어 렌더링 및 시뮬레이션 기능을 사용하도록 하는 비공식 얼렘빅 파일 스키마를 설명합니다. 본 스키마에 따라 헤어 그룸을 생성하면 UE4가 해당 그룸을 직접 임포트합니다. 임포트할 때 UE4에서 렌더링과 피직스 모두를 지원하는 어트리뷰트의 경우 얼렘빅 파일에서 해당 어트리뷰트에 매핑됩니다.
목표
- 특정 그룸을 대상으로 하는 비공식 얼렘빅 메타데이터 스키마를 정의해 언리얼 엔진에 헤어를 원활하게 임포트합니다.
- UE4에서 헤어 관련으로 지원하는 어트리뷰트를 살펴보고, 해당 어트리뷰트를 얼렘빅에 매핑합니다.
커브
헤어의 일반적인 모양 정보는 표준 얼렘빅 커브 스키마를 통해 얻습니다.
Alembic::AbcGeom::ICurves
폭
이 상세 설정으로 그룸 어트리뷰트를 익스포트하면 임포터가 이를 검색하여 그룸 빌드 시 사용할 수 있습니다. 하지만 너비 어트리뷰트는 특수 비헤이비어가 존재합니다. 예를 들어 Maya와 같은 DCC 애플리케이션의 경우, 너비값이 커브로 직접 익스포트되어 커스텀 groom_width
를 익스포트할 필요가 없습니다. 임포터는 Maya의 너비값을 groom_width
어트리뷰트로 변환합니다. 그룸에 groom_width
어트리뷰트가 존재하면 임포트 시 오버라이트되지 않는다는 사실을 참고하세요. groom_width
어트리뷰트가 지정되지 않았거나 해당 어트리뷰트를 너비값에서 변환할 수 없다면, 언리얼 엔진의 빌더가 너비값으로 1 센티미터를 사용합니다.
커브 폭은 다음을 사용해서 ICurve마다 저장합니다.
(GeometryScope::kConstantScope)
또는 다음을 사용해서 커브마다 저장합니다.
(GeometryScope::kUniformScope)
또는 다음을 사용해서 cv마다 저장합니다.
(GeometryScope::kVertexScope)
임포터가 kUniformScope
를 지원하기는 하지만 테스트되지는 않았다는 사실을 참고하세요.
네이밍 규칙
프로퍼티 이름은 반드시 소문자로 작성하고 띄어쓰기나 특수문자를 포함하면 안됩니다.
모든 프로퍼티는 반드시 다음과 같은 접두사로 시작합니다: groom_
네이밍 규칙을 잘 따르는 예로 groom_id
, groom_color
, groom_width
등이 있습니다.
범위 및 우선순위
이 문서 안의 프로퍼티마다 할당된 범위가 있습니다. 범위는 그룸 프로퍼티의 레벨을 정의합니다.
사용 가능한 범위는 다음과 같습니다.
범위 | 설명 |
---|---|
일관성 | 이 파라미터는 AbcGeom::ICurves 오프젝트 한 개를 가진 모든 커브마다 한 개의 값만 갖습니다. |
통일성 | 이 파라미터는 AbcGeom::ICurves 오브젝트의 커브마다 한 개의 값만 갖습니다. |
버텍스 | 이 파라미터는 커브 및 cv마다 한 개의 값을 가집니다. |
일반 프로퍼티
다음은 그룸 전반에 적용하는 프로퍼티에 대한 설명입니다. 아래와 같은 프로퍼티는 최상단 노드에 추가해야 합니다. IXForm 또는 ICurves.
이름 | 유형 | 선택 | 설명 | 범위 |
---|---|---|---|---|
groom_version_major |
int16 | 아니오 이 파일은 어떤 그룸 스키마의 주요 버전을 따르는지 확인할 때 사용합니다. | 1 | |
groom_version_minor |
int16 | 아니오 이 파일은 어떤 그룸 스키마의 부수적 버전을 따르는지 확인할 때 사용합니다. | 5 | |
groom_tool |
string | 예 | 이 파일을 생성한 툴의 이름 및 버전입니다. 문제가 발생한 경우 디버깅 및 원인을 파악할 때 유용합니다. | |
groom_properties |
string | Yes | 이 그룸을 생성할 때 사용된 파라미터를 설명하는 스트링입니다. 디버깅에 사용하는 툴 기반 옵션입니다. |
지오메트리 파라미터
모든 지오메트리 파라미터는 선택사항이지만, 익스포트된 그룸에 존재하지 않는 경우 내부 비헤이비어를 이용할 수 있습니다.
이름 | 유형 | 스코프 | 선택 | 설명 | 범위 |
---|---|---|---|---|---|
groom_ guide |
int8/16/32 | Constant/Uniform | 예 | 가이드는 임포트된 스트랜드와 데시메이션 세팅으로 생성합니다. | 0 = 가이드 아님 / 1 = 가이드 |
groom_group_id |
int32 | Constant/Uniform | 예 | 모든 스트랜드는 그룹화됩니다. | [0, INT_MAX] |
groom_root_uv |
float32/64[2] | Uniform | 예 | 루트 UV는 스트랜드의 루트를 구체에 투영하여 연산합니다. 이 어트리뷰트는 선택사항입니다. 지정하지 않은 경우, 루트 UV는 엔진 내에서 구체 매핑을 사용해 자동으로 생성됩니다. |
[-FLOAT_MAX, FLOAT_MAX] |
groom_id |
int32 | Uniform | 예 | 스트랜드는 ID를 가지고 있지 않습니다. 이는 디버깅 및 groom_closest_guides 어트리뷰트와 함께 사용하기 위함입니다. |
[0, INT_MAX] |
groom_color |
float32/64[3] | Vertex | 예 | 검은색으로 돌아갑니다. | [0, FLOAT_MAX] |
groom_closest_guides |
int32[3] | Uniform | 예 | 언리얼 엔진 외부에서 보간 데이터를 연산하는 특정 사용 사례를 위한 것입니다. | [0, INT_MAX] |
groom_guide_weights |
float32[3] | Uniform | 예 | 언리얼 엔진 외부에서 보간 데이터를 연산하는 특정 사용 사례를 위한 것입니다. | [0, FLOAT_MAX] |