3D 임포스터 스프라이트 렌더

Windows
MacOS
Linux

13.jpg

Imposter (임포스터)란 플립북 스타일의 텍스처를 사용하여 가능한 모든 시야, 아니면 텍스처 시트에 편안하게 들어맞을 수 있는 최소 갯수의 시야에서 스태틱 메시를 본 것을 저장하는 스프라이트를 말합니다. 그 결과 머티리얼과 라이팅 관점에서 원본 메시와 매우 잘 맞아 떨어지는 스프라이트가 나오게 되지만, 프레임 사이에 약간 튀는 부분이 생깁니다. 즉 모든 적용 상황에 완벽하지 않다는 뜻입니다. 엄청나게 많은 오브젝트를 렌더링해야 하는데 카메라 가까이 천천히 지나지 않는 경우, 매우 유용할 수 있습니다.

초기 셋업

임포스터 스프라이트를 만들기 전, 임포스터 텍스처 시리즈를 구워야 합니다. 그러기 위해서는 RenderToTexture_LevelBPRender TypeRender 3D Imposter Sprites 로 설정하고, Capture Settings 를 선택한 다음, render 3D Imposter Sprite 세팅을 조절해야 합니다.

settings_3.png

프로퍼티

설명

Imposter Static Mesh

임포스터를 만들려는 스태틱 메시입니다.

Imposter Material Array

하나 이상의 머티리얼 ID 를 가진 메시의 각 인덱스에 머티리얼을 지정할 수 있도록 하기 위한 배열입니다.

임포스터 머티리얼 배열 내 머티리얼에 대한 노멀맵 입력에 "Tangent to Local" 설정된 Transform 노드를 사용해야 합니다. 그 이유는, 모두 이 내려보기 방식이 강제하는 같은 카메라를 사용하는 대신, 카메라가 바라봤으면 하는 방향으로 월드 노멀을 표현하고 싶기 때문입니다. 노멀맵 텍스처가 없는 경우, 단순히 0,0,1 트랜스폼이 적용된 탄젠트->월드 를 사용하면 됩니다.

Frames around Z

임포스터가 Z 주변으로 몇 프레임이나 저장할지 결정하는 세팅입니다. 수치가 클 수록 모션 도중 최종 결과의 '팝핑' 이 줄어들지만 텍스처 해상도가 줄어들거나 크기가 매우 큰 텍스처를 사용해야 하는 경우가 생깁니다.

Mesh Scale

최종 임포스터 스프라이트 머티리얼에 에지가 새는 문제가 있는 경우 메시의 스케일을 살짝 낮출 수 있습니다. 메시가 구체 바운드에 매우 밀접하게 일치되어 메시가 각 그리드 셀의 에지에 가까워지는 희귀한 경우에만 필요합니다. 스케일이 작을 수록 손실되는 해상도도 커지므로, 필요할 때만 조절하세요.

Aspect Ratio 1 by

비균등 텍스처를 만들 수 있도록 해 주는 세팅입니다. 기본값 1 에서 임포스터 그리드는 정사각형입니다. 2 가 되면, 종횡비가 2:1 이 되며, 4 면 4:1 식입니다. "풀 3D 임포스터" 의 경우 종횡비를 정사각형으로 유지하지만, "단일 회전축" 모드 사용시에만 변경하는 것이 좋습니다. 주: 이름이 부적절하므로, 곧 개선될 것으로 기대합니다.

Imposter Enum

임포스터 굽기의 두 가지 유형인 "Full 3D Imposters" (풀 3D 임포스터)와 "Single Rotation Axis" (단일 회전축) 사이에서 선택할 수 있도록 해주는 드롭다운 리스트입니다. 풀 3D 임포스터는 위와 아래를 포함한 모든 각도에서 표현됩니다. "단일 회전축" 은 Z 축만을 중심으로 회전하는데, 나무, 거대한 빌딩이나 일반적인 스카이박스 요소처럼 수평선에 서있는 것들에 대한 원거리 LOD 를 만들기에 이상적입니다. 단일 회전축은 저장에 필요한 공간이 많지 않아 텍스처 메모리를 더욱 효율적으로 사용할 수 있습니다.

Single Rotation Axis rotation

단일 회전축 옵션이 선택되었을 때만 사용되는 초기 회전 세팅입니다. 카메라를 기준으로 메시의 방향을 맞출 수 있습니다.

메시 노멀

임포스터를 만들고자 하는 메시의 머티리얼에는 몇 가지 트윅 작업이 필요합니다.

  1. 임포스터를 만들려 하는 스태틱 메시의 머티리얼을 엽니다.

  2. 머티리얼 노드를 선택합니다.

  3. 탄젠트 스페이스 노멀 을 끕니다.

  4. 머티리얼 그래프의 노멀 맵/계산과 머티리얼 노드의 노멀 입력 핀 사이에 Transform 노드를 추가합니다.

    노멀 맵 또는 노멀 계산이 없는 경우, 0,0,1 (파랑) 으로 설정된 벡터를 추가하여 대신 사용해도 됩니다.

  5. Transform 노드에서 Source 프로퍼티를 Tangent 로 설정합니다.

  6. Transform 노드에서 Destination 프로퍼티를 Local 로 설정합니다.

setupYourMesh.png

임포스터 렌더

임포스터에 원하는 프레임 수를 환경설정해 준 이후, 임포스터 텍스처 렌더링은 원본 "타일링 머티리얼" 과 똑같습니다.

캡처 세팅 아래 원하는 버퍼 타깃을 선택합니다. 고해상도 스크린샷 창이 열려있는지, 버퍼 시각화 포함 옵션이 켜져있는지 확인합니다. 새 창 에서 게임을 플레이 하고, ~ 키를 눌러 콘솔 을 띄운 다음 "ke * rendertextures" 를 입력합니다.

renderTextures.png

이미지가 저장되었다는 메시지가 뜰 것입니다. 그 메시지는 사실 클릭하면 해당 폴더 위치로 이동되는 링크입니다. 제때 링크를 클릭할 수 없었다면, 저장된 텍스처는 다음 위치에서 찾을 수 있습니다:

\YourProject\Saved\Screenshots\Windows\

BaseColor.png DecalMask.png WorldNormal.png

노멀맵이 거의 파랑에 연빨강/초록 조금인 것으로 보인다면, 스태틱 메시의 머티리얼에서 탄젠트를 로컬 스페이스 노멀로 변환하는 단계를 생략했기 때문일 수 있습니다.

임포스터 임포트

언리얼 엔진 4 의 고해상도 스크린샷 기능이 .bmp 파일을 익스포트하므로, 이미지 편집 툴에서 로드하고 .tga 파일로 저장하면, 다른 텍스처처럼 임포트할 수 있습니다.

노멀 맵 텍스처 조절

노멀 맵 텍스처에 프로퍼티를 몇 가지 변경해 줘야 합니다:

  1. 콘텐츠 브라우저 에서 노멀맵을 더블클릭 하여 엽니다.

  2. sRGB 프로퍼티를 끕니다.

  3. Compression SettingsTC_Default 로 설정합니다.

  4. 텍스처를 저장합니다.

normalSettings.png

임포스터 머티리얼 제작

렌더링된 임포스터 이미지 시리즈가 생겼습니다. 이 텍스처를 활용하려면, 콘텐츠 브라우저 에서 ImposterUVs 머티리얼 함수를 클릭한 뒤 임포스터 머티리얼 그래프에 끌어놓아 머티리얼을 만들어 줘야 합니다.

imposterMatNodeCB.png

imposterNode.png

이 함수는 머티리얼에 대한 UV, 노멀, WorldPositionOffset 을 셋업해 줍니다. 임포스터 셋업에 일치시키기 위해 정의해 줘야 하는 파라미터가 몇 가지 있습니다:

입력 핀

설명

Frames X (S)

임포스터에 대한 X 축 상의 프레임 수가 되어야 합니다. 예를 들어 Z 축으로 16 로테이션을 지정했다면, X 축에 16 프레임일 것입니다.

Fixed Z (B)

"단일 회전축" 임포스터 사용시에만 True 로 설정해야 하는 부울 옵션입니다. 계산 비용이 훨씬 저렴해 집니다.

Frames Y (S)

Y 축의 프레임 수여야 합니다. 정사각 종횡비의 경우 항상 Y 프레임과 일치해야 합니다. 종횡비가 2:1 인 경우, Y 프레임 수는 X 프레임 절반이어야 합니다.

SpriteWidth (S)

결과 스프라이트의 폭입니다.

SpriteHeight (S)

결과 스프라이트의 높이입니다.

Position (V3)

기본으로 AbsoluteWorldPosition (절대 월드 위치)이며, 대부분의 경우 놔둬야 합니다. 이상한 각도로 임포스터를 표시하거나, 커스텀 데이터로 위치를 나타내고자 하는 경우 대안으로 사용할 수 있습니다.

VertexShaderZrotation (S)

디버그 전용 세팅입니다. 스프라이트의 Z 회전을 전체 범위에 걸쳐 부드럽게 보간하기 보다는 구분된 단계 세트별로 나눕니다. 임포스터를 굽는 방식으로 인해 팝핑이 더욱 안좋아 보이는 것을 방지합니다. 부드러운 스프라이트 보간으로는, 각 프레임 전환마다 임포스터의 회전이 넘어가는 것으로 보입니다. 값이 1 이면 그러한 현상을 고칩니다. 0 으로 설정하면 꺼진 상태에서 어때 보이나 확인할 수 있습니다. 임포스터 메시 위에서 가장 눈에 띕니다.

Rotation (S)

임포스터 스프라이트는 지정된 축을 중심으로 회전 가능합니다. 이를 통해 월드의 동일한 임포스터 스프라이트의 여러 사본을 임의로 회전시켜 같아 보이지 않도록 합니다.

Rotation Axis (V3)

이 세팅은 현재 꺼져있습니다. 회전축은 항상 0,0,1 또는 Z 축입니다. 그 이외의 회전축을 지원하려 할 때 문제가 있었으며, 나중에 지원될 수도 있습니다.

Normals (V3)

노멀맵 텍스처여야 합니다. 노멀을 회전시켜 지정된 회전 값에 일치시킵니다.

출력 핀

설명

TransformedNormals

트랜스폼 적용된 노멀맵이 들어있으며, 머티리얼 노멀 입력에 연결됩니다.

WorldPositionOffset

카메라를 향하는 스프라이트에 대한 WPO 가 들어있으며, 월드 포지션 오프셋 입력에 연결됩니다.

UVs

임포스터 텍스처에 대한 UV 입니다. 머티리얼에 배치하는 임포스터 텍스처는 이 출력을 UV 로 가져야 합니다. 거기에는 노멀맵이 포함되며, 그렇게 되면 "노멀" 입력의 함수로 반복해 돌아가는 것으로 보입니다.

Phase2UVs

실험단계 기능으로 완전히 구현되지 않았습니다. 한 페이즈 앞 및/또는 뒤의 텍스처 룩업 둘 이상을 두고 희미하게/녹아들게 만들어 팝핑을 줄이는 기능의 초기 단계입니다.

머티리얼은 이런 모습일 것입니다:

노멀 맵 텍스처에서 입력을 받는 Constant Bias Scale 노드가 보일 것입니다. 월드 스페이스 노멀에 대해 컬러 밸런스를 다시 맞춰야 합니다.

풀 3D 임포스터 예제:

11.jpg

단일 회전축 임포스터 예제:

13.jpg

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

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

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

네이버 카페
공식 포럼