Introduction
Unreal Engine에서 Groom Binding 과 Physics 적용을 통해 어느 정도 자연스러운 움직임 구현이 가능하지만, 특정한 움직임을 구현하기에는 무리가 있는 것이 사실이다. 이런 경우 Maya 에서 시뮬레이션을 하고, Cache 를 가져와서 Groom Cache 를 적용하는 방법을 사용해 볼 수 있다. Groom Cache 기능은 4.27 이상 버전에서 사용 가능하다.
이 글은 Groom Workflow XGen and Unreal 글에 이어서 작성 되었다.
Interactive Groom Guide Curves

Description 을 선택하고, Utilities > Guides To Curves 를 선택한다.
Create Curves 버튼을 눌러서 Guide Curves 를 만든다.

Interactive Groom Editor 에서 Descriptin 에 Linear Wire 를 추가한다.

Linear Wire > Magnitude Scale Curve Ramp 에서 Root 쪽을 0, Tip 쪽을 1로 만든다.
Linear Wire 의 Magnitude Scale 을 위와 같이 설정하는 이유

Guide 에 의한 Clump 가 없기 때문에 Strands 의 Interpolation 이 깔끔하지 않다.
Root 부분까지 1로 설정하면 시뮬레이션 시 너무 심하게 모양이 망가진다.
(왜 Interactive Groom 이 아니라 XGen 에서 바로 Cache 를 뽑을 수 있도록 해 놓지 않은걸까… ㅠㅠ)

Guide Curves 그룹을 선택하고, Linear Wire 를 선택한다.
Attribute Editor 에서 Linear Wire 의 Input Wire 섹션에서 Use Selected Curve as Wire… 버튼을 누른다.
팝업창이 뜨면, Preserve Dynamic Link 옵션을 체크하고 Apply and Close 버튼을 누른다.
Dynamic Set Up

Guide Curves 그룹을 선택한다.
Assign unique name to children nodes 옵션을 체크하고, Duplicate Special 을 실행한다.

위 과정에서 생성된 Curves 그룹과 Scalp Mesh 를 선택한다.
nHair > Make Selected Curves Dynamic 옵션 박스를 선택한다.
Attach curves to selected surfaces 옵션과 Exact shape math 옵션을 체크하고 Make Curves Dynamic 버튼을 누른다.

위 과정에서 생성된 Output Curves 그룹과 Guide Curves 그룹을 선택한다.
Deform > Blend Shape 을 적용한다.
Simulation

Nucleus 와 Hiar System 노드의 속성들을 조절하고, Volume Axis Field 를 적용해 주었다.
Field 를 적용하고 수치를 높였는데도 변화가 없다면?

Windows > Relationship Editors > Dynamic Relationships 를 선택해서 Dynamic Relationships Editor 를 연다.
Hair System 노드를 선택해서 Field 가 연결되어 있는지 확인한다.

Windows > Settings/Preferences > Preferences 를 선택해서 Preferences 창을 연다.
Settings > Animation 에서 Evaluation mode 를 DG 로 바꿔본다.
DG 에서 문제 없음이 확인 되면, 다시 Parellel 로 바꿔도 정상 작동한다.

Scale Attribute Setting of Nucleus

Hair System Dynamic Settings
Exporting Cache from Maya

Interactive Groom Description 노드를 선택한다.
Generate > Cache > Export Cache 옵션 박스를 선택한다.
Start/End 프레임을 정하고, Export 한다.
Importing Cache in Unreal

Conversion 옵션을 위와 같이 설정한다.
Import Groom Asset 옵션을 끄고, Cache 를 적용할 Groom Asset 을 선택한다. (위 스크린샷은 4.27 버전이다.)
Force Front XAxis 옵션을 사용한 경우


Skeletal Mesh를 Import 할 때, Force Front XAxis 옵션을 사용 했다면, Import 시 Rotation은 -90.0, 0.0, 90.0 그리고 Scale은 -1.0, 1.0, 1.0으로 설정해야 한다. (위 스크린샷은 5.1.0 버전이다.)

_guides_cache 와 _strands_cache
Suffix 가 붙은 Asset 이 생성된다.

Skeletal Mesh Component 에 Groom Component 를 추가한다.
Groom Cache 에서 _strands_cache
Suffix 가 붙은 Asset 을 선택한다.
(4.27 버전에서 Blueprint 에 있는 Groom Component 에 Groom Cache 를 적용할 경우 Crash 가 발생할 수 있다.)

Simulate 해 보면 Groom Cache 가 적용 된 것을 볼 수 있다.
Groom Cache in Level Sequence

Skeletal Mesh 를 Level Sequence 에 추가하고 +Track 버튼을 눌러, Skeletal Mesh 에 있는 Groom Component 를 추가한다.

Groom Component Track 에서 +Track 버튼을 눌러 Groom Cache 를 추가한다.
Properties 영역에 있는 Groom Cache 가 아니라, Tracks 영역에 있는 Groom Cache 를 추가해야 한다.

Groom Cache 를 Level Sequence 에서 Play 할 수 있다.
Conclusion
엔진에서 실시간 시뮬레이션으로 구현하기 힘든 움직임(e.g. 바람에 날리는 머리카락) 등을 구현할 때 유용하게 사용할 수 있다.
더 좋은 퀄리티를 위해서는 XGen을 Interactive Groom 으로 바꾸고 Linear Wire 를 추가하는 방법보다, Yeti 로 Groom 을 만들거나 Houdini에서 만드는 것이 더 낫다.