피벗 페인터 툴 1.0

상호작용형 애니메이션용 버텍스 안에 모델 피벗과 로테이션 데이터를 저장하는 Pivot Painter 1.0 MAXScript 안내서입니다.

Windows
MacOS
Linux

피벗 페인터 툴 최신 버전은 2.0 이며, 단순화된 파이프라인을 통해 직관적인 폴리지 생성이 가능합니다.

Pivot Painter Tool (피벗 페인터 툴)은 모델의 버텍스 데이터에 피벗(중심점)과 로테이션(회전) 정보를 저장하는 MAXScript 입니다. 나중에 이 정보를 언리얼의 셰이더 시스템 안에서 참조하여 상호작용형 이펙트를 만들 수 있습니다.

위 샘플 비디오의 동작은 버텍스 셰이더를 사용하여 실시간으로 만든 것입니다. 풀잎 하나 하나마다 뿌리를 주위로 회전하며 굽이칩니다. 나뭇가지와 잎사귀는 계층구조를 이루면서 부모의 동작을 상속받아 각각의 피벗 포인트를 중심으로 애니메이션이 이루어 지고요. 서브-오브젝트의 회전 역시도 보관되므로, 바람에도 사실적이고 역동적인 반응이 가능합니다.

이런 셰이더 생성 작업이 피벗 페인터 머티리얼 기능을 통해 훨씬 간편해 졌습니다. 위에 선보인 것같은 애니메이션이 어떻게 만들어지는지, 샘플 콘텐츠도 도움이 됩니다. 서브-오브젝트 피벗 포인트를 구하는 것도 이제 3ds Max 에서 피벗 페인트 스크립트로 메시를 처리해 주고, 파일을 임포트하여, 피벗 페인터 함수를 사용해 머티리얼을 만들기만 하면 끝입니다. 머티리얼 함수에는 2단계 계층구조와 1단계 계층구조 둘 다에 대한 피벗 포인트 출력이 들어 있습니다.

이른 식으로 동작을 만들면 나름 좋은 점이 있습니다. 이 기법으로 처리한 모델은 표준 스태틱 메시에 비해 메모리 측면에서 딱 18% 정도 클 뿐입니다. 애니메이션도 보관할 필요 없이 바로 계산되니 스켈레탈 애니메이션보다 훨씬 저렴합니다. 보통 버텍스 셰이더 인스트럭션 수는 퍼포먼스 측면에서 픽셀 인스트럭션 수보다 영향을 덜 끼칩니다. 모델에 있는 버텍스의 수래봐야 화면에 있는 픽셀 수에 비할 바가 못되기 때문입니다.

아래 링크의 셰이더 예제가 보여주는 기능은 빙산의 일각에 지나지 않습니다. 제공된 정보로 이리저리 실험해 보다 보면 다른 사용법을 알아보고픈 마음이 들 것입니다. 플레이어 상호작용, 재미난 바람 설정, 폴리지에 무관한 모션, 기타 이펙트 모두 서브오브젝트 레벨 정보 접근을 통해 가능합니다.

설치

Pivot Painter 스크립트는 다음 위치에서 찾을 수 있습니다:

[UE4Directory]/Engine/Extras/3dsMaxScripts/PivotPainter.ms

스크립트를 설치하고 키보드 단축키와 피벗 페인터 툴을 열기 위한 메뉴를 만드는 법을 다루는 비디오입니다.

프렙 툴

스크립트의 "Prep Tools" 부분, 전체적인 프로세스에 대한 작업방식에 대한 팁과 정보를 다루는 비디오입니다. 프렙 툴에는 모델 엘리먼트를 별도의 오브젝트로 떼어내는(detach) 옵션, 새 중심점을 쉽게 만들 수 있는 여러가지 툴이 들어 있습니다.

프렙 툴 은 주어진 모델 엘리먼트를 새로운 모델 시리즈로 분할하고 그 피벗을 이상적인 위치로 이동시키도록 디자인되었습니다. 이 툴 사용이 필수는 아니며, 그냥 편의상 제공되는 것일 뿐입니다. 처리중인 모델이 이미 분할되어 있고, 그 피벗은 회전해야 할 곳에 위치해 있으며, 모델의 X 축이 모델 길이 아래쪽을 향해 있다면, 그 모델은 다음 단계로 넘어가도 좋은 모델입니다.

예: 풀 한 포기는 풀잎 하나씩 분할되어야 합니다. 풀잎 하나는 바람에 나부끼면 그 바탕을 중심으로 회전해야 합니다. 즉 그 피벗 포인트는 풀 모델의 바탕에 위치해 있어야 하고, 피벗의 X 축이 모델 길이 아래쪽을 향해야 합니다. 대부분 풀의 경우 위쪽을 향하고 있을 것입니다.

하이어라키 페인터

스크립트의 "Hierarchy Painter" 부분을 다루는 비디오입니다. 툴의 이 부분은 예를 들면 가지와 잎 사이의 관계처럼 부모 자손 관계는 물론, 메시의 모델 피벗과 로테이션 정보를 저장하는 데 사용됩니다.

모델이 계층구조를 요하는 경우 스크립트의 "하이어라키 페인터" 섹션으로만 처리해야 합니다. 나뭇잎이 있는 나무가 좋은 사용 예이며, 풀은 아닙니다. 풀은 "오브젝트별 페인터" 섹션으로 칠해야 합니다.

또한 가지/부모 피벗은 "Max dist for parent piv" (부모 피벗에 대한 최대 거리)에 나온 만큼 박스 내 위치를 잡아야 합니다. 예를 들어: 모델을 칠할 때 "Max dist for parent piv" 가 4096 으로 설정되었다면, 가지/부모 오브젝트의 피벗 포인트는 X 와 Y 는 -2048 ~ +2048, Z 는 0 ~ 4096 범위 어디든 위치 가능합니다.추가적으로 모델 처리 단계 도중 "Max dist for parent piv" 가 4096 이외의 값으로 설정된 경우, 언리얼의 모델 셰이더 안에서 같은 수치를 사용해야 합니다.

pivotpainter_hierarchydata.png

오브젝트별 페인터

"Per Object Painter" 스크립트 부분 아래에서 가능한 옵션을 다루는 비디오입니다. 몇 가지 사용법과 모델에 데이터를 저장하는 법에 대한 정보도 약간 다룹니다.

3ds Max 예제 파일

비디오 튜토리얼에 사용된 트리 사본이 담긴 파일입니다.

  • Tree.max (우클릭 후 다른 이름으로 저장)

요구사항

  • 3ds Max - 스크립트는 3ds Max 2010 / 2012 로 테스트했습니다.

  • Pivot Painter 머티리얼 함수. 함수 없이도 스크립트를 사용할 수는 있으나, 데이터 사용이 훨씬 불편해 집니다.

기타 참고

스크립트의 "하이어라키 페인터" 또는 "오브젝트별 페인터" 둘 중 하나의 섹션으로만 모델을 처리해야 하며, 둘 다는 안됩니다. 모델을 "하이어라키 페인터"로 칠한다면, 오브젝트의 머티리얼 안에서는 "PivotPainter_HierarchyData" 머티리얼 함수를 사용해야 합니다. 스크립트의 "오브젝트별 페인터" 섹션을 사용한다면 "PivotPainter_PerObjectData" 를 사용하여 머티리얼 내 피벗 정보를 디코딩해야 합니다.

3ds Max 의 월드 유닛 세팅은 칠할 때 센티미터로 설정해야 하며, 익스포트시 스케일 조절/변경해서는 안됩니다. 3ds Max 와 언리얼 사이에 스케일을 유지하는 것이 중요합니다. 그렇지 않으면 원치 않은 결과가 날 것입니다.

윈드 액터는 UE4 에 폐기되어 머티리얼 파라미터 컬렉션과 블루프린트로 대체될 수 있습니다. float 4 Wind Actor Parameter 로 머티리얼 파라미터 컬렉션을 업데이트하는 블루프린트를 만들 수 있습니다. 그런 다음 그 머티리얼 파라미터 컬렉션을 윈드 액터 대신 주어진 폴리지 머티리얼 안에서 참조 가능합니다.

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼