UDN
Search public documentation:

AllegorithmicSubstanceKR
English Translation
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 머티리얼과 텍스처 > Allegorithmic Substance 통합

Allegorithmic Substance 통합


문서 변경내역: Jeremie Noguer 작성. 홍성진 번역.

UDK 의 Substance


Substance (서브스턴스, 물질)이란 표준 비트맵에 비해 여러가지 장점을 가진 새로운 텍스처 포맷입니다:

  • 다중 출력 - 파일 하나에 하나 이상의 머티리얼에 필요한 맵을 전부 포함시킬 수 있습니다.
  • 해상도 독립적 - 크기가 2048x2048 까지 동적으로 조절됩니다.
  • 동적인 파라미터형 - UDK 에디터에서, 심지어 게임내에서 텍스처를 수정합니다.
  • 동적인 비트맵 입력을 사용하여 다목적 필터로 사용할 수 있습니다.
  • 생성 프로세스가 비선형, 비파괴형 입니다.

Substance 에코시스템


레퍼런스

  • Substance 란 무엇인가? 이 페이지 에서 간략 기술 개요를 확인해 보세요.
  • Substance Designer 란 무엇인가? 여기서 답을 찾을 수 있습니다.
  • 빠르게 배우고 싶습니까? 비디오 튜토리얼이 여기 있습니다.
  • 돈이 없습니까? Substance Utilities 는 무료입니다.

Substance Utilities 로는 텍스처를 Substance 로 변환, 에디터에서의 임포트 시간이 빨라짐은 물론 자동 머티리얼 생성 기능과 동적인 텍스처 트윅이 가능합니다.

파일 포맷

Substance 에코시스템에는 크게 두 가지 파일 포맷이 있습니다. 텍스처 기반이며 소스 콘트롤 적용이 쉬운 편집가능한 것은 sbs 파일 포맷입니다. 이 포맷은 Substance Designer 에서 만든 패키지를 저장하는 데 사용되며, 각각 출력이 여럿인 그래프를 다수 포함할 수 있습니다. SVG 나 비트맵 같은 외부 리소스를 sbs 파일에 끼워넣을 수도 있는데, .PSD 파일과 비교되는 부분입니다.

UDK 에서 Substance 파일을 사용하기 전에 먼저 publish 해 줘야 합니다. 이 프로세스를 거치면 Substance(sbs) 아카이브(ar)인 sbsar 파일이 됩니다. UDK 나 Substance Air 가 통합된 다른 소프트웨어에서 지원되는 파일 포맷이 바로 이것입니다. 이 포맷은 압축된 바이너리 파일 포맷으로 편집가능하지 않습니다.

주: Substance 의 입력에 대한 값을 프리셋(preset)으로 저장할 수 있습니다. 이 프리셋 파일의 확장자는 sbsprs 으로, 단일 Substance 의 여러 변종을 저장하는 데 사용할 수 있습니다. 이는 텍스트 기반으로 매우 가볍습니다. 언리얼 엔진에서 프리셋은 Substance Graph Instance 에서 임포트 / 익스포트 가능합니다 ("Substance 그래프 인스턴스" 참고).

작업방식


schemaUDK.png

SBSAR 임포트

sbsar 파일을 임포트할 때, 두 개의 오브젝트가 새로 생성됩니다. Substance Instance Factory 와, sbsar 파일에 있는 각 그래프의 Graph Instance 입니다. Instance Factory 는 다른 Graph Instance 를 만드는데 사용할 수 있습니다. 각 Substance Graph Instance 별로 언리얼 Material 을 만들 수도 있습니다.

ImportDialog.png

  • Create Material 은 Graph Instance 가 생성된 패키지의 서브그룹에 머티리얼을 만듭니다. Substance 의 출력은 자동으로 올바른 머티리얼 슬롯에 연결됩니다.

  • 임포트중인 Substance 의 Graph Instance 에 대한 목적지를 지정할 수 있습니다. 이 경우 Graph Instance 와 그 출력들 모두 지정된 패키지에 저장됩니다.

contentbrowser.jpg

Substance Graph Instance

sbsar 에 포함된 각각의 그래프는 필요한 횟수만큼 인스턴싱 가능하여, 하나의 Substance 로 다양한 변종을 만들 수 있습니다. 그 Graph Instance 들은 여러 패키지에 저장 가능합니다.

파라미터 수정하기


Graph Instance Editor

Graph Instance Editor 에서 입력값을 수정하기 위해서는, 원하는 Graph Instance 를 더블클릭하기만 하면 (Image Inputs 가 포함된) 동적인 파라미터에 접근할 수 있게 됩니다.

instanceEditor.png

  • Outputs
필요에 따라 Substance 출력 일부를 끌 수 있습니다.
  • Image Inputs
동적인 이미지 입력은 새로운 오브젝트 유형인 Substance Air Image Inputs 를 통해 지원되는데, 이는 jpeg 이나 tga 이미지를 임포트하거나 기존의 표준 텍스처를 변환하여 생성 가능합니다. Substance 출력 역시 이미지 입력으로 직접 사용 가능합니다. 어떤 해상도든 사용할 수 있으나, Substance 출력이 렌더링될때 이미지 입력 크기가 조절됩니다.
  • Inputs
숫자와 컬러 입력으로 UDK 뷰포트에서 Substance 의 모양을 실시간 변경할 수 있습니다.
  • Bake Outputs
Bake Outputs 옵션이 꺼져있는 경우, Substance 의 출력은 그 패키지 로딩시 생성됩니다. 켜져있는 경우, 비트맵은 언리얼 쿠킹 프로세스 내내 유지됩니다 (즉 로드 시간에는 렌더링할 일이 없을 것입니다). 이 옵션으로 인해 얻는 득실이라면, (로드 시간에 생성되는) CPU 사용량 대 (Bake Outputs 옵션이 켜졌을 때의) 패키지 크기 입니다. 어느 경우든 입력은 여전히 변경 가능하며 출력은 실행시간에 재계산됩니다.

게임 도중

  • 키즈멧
키즈멧을 사용하여 입력을 수정하려면, Substance 카테고리의 Set Input Float, Int, Image 중에서 적합한 시퀸스 액션을 생성합니다.

kismet.png

식별자는 라벨의 툴팁으로 표시되니 신경써서 사용해 주시기 바랍니다. 입력을 변경하고나면 "Substance Render" 시퀸스 액션을 사용하여 렌더링을 발동시켜야 합니다.

tooltip.jpg

  • 마티네
마티네의 데이터로 입력될 Graph Instance Actor 를 씬에 생성합니다. 입력을 변경하기 위해서는 Substance Input 트랙을 만들어야 하는데, 여기서 입력의 식별자를 지정합니다. 마치 Material Instance 수정시의 Material Instance Actor 처럼 작동합니다.

기술적인 정보


Unreal Script 에서 Instance 변경하기

입력을 변경하려면 Graph Instance 오브젝트 (SubstanceAirGraphInstance 클래스)를 사용하세요. 인터페이스는 다음과 같습니다:

// 입력 목록 구하기
native final function array<string> GetInputNames();

// 입력 유형 구하기
native final function SubstanceAirInputType GetInputType(const string InputName);

// (이름으로) 지정된 입력의 입력값을 변경합니다.
native final function bool SetInputInt(const string InputName, const array<int> Value);
native final function bool SetInputFloat(const string InputName, const array<float> Value);

// 이미지 입력을 수정합니다. 오브젝트는 반드시 SubstanceAirImageInput 또는 SubstanceAirTexture2D 여야 합니다.
native final function bool SetInputImg(const string InputName, Object Value);

// (이름으로) 지정된 입력의 입력값을 구합니다.
native final function array<int> GetInputInt(const string InputName);
native final function array<float> GetInputFloat(const string InputName);
native final function Object GetInputImg(const string InputName);

특정 INI 값

  • 쿠킹 단계 도중에는 패키지에 유지된 밉맵 수를 제한시켜 상당량의 공간을 저장하는 것이 가능합니다. 유지할 밉 갯수는 BaseEngine.ini 컨픽 파일의 Substance 부분 아래 MipCountAfterCooking 파라미터를 통해 설정 가능합니다:

[SubstanceAir]
; 쿠킹 도중 유지할 밉맵 수
MipCountAfterCooking=7

  • Substance Engine 에 할당된 CPU 와 메모리 예산은 BaseEngine.ini 파일에 설정하는데, 다음 부분입니다:

[SubstanceAir]
(...)
; 메모리 예산
MemBudgetMb=256
; (메인 스레드용으로 하나는 남겨두고) 생성에 활용가능한 CPU 코어를 전부 사용할 수 있도록 합니다.
FreeCore=0

무료 Substance 리소스


  • Beneath 데모 : 텍스처에 Substance 만 사용하여 만든 UDK 프로젝트입니다.

  • Autodesk Maya 와 3dsMax (2012 이상)에 60 개 이상의 Substance 가 번들로 포함되어 있습니다.

.