요약
텍스처는 셰이더 라이브러리와 스튜디오 파이프라인을 통해 다양한 방식으로 처리되며, Katana 몇 가지 일반적인 규칙에 따라 텍스처를 할당하기 위한 유연한 프레임워크를 제공합니다.
아래는 3Delight, RenderMan, Arnold 렌더러에서 사용할 수 있는 몇 가지 옵션을 요약한 것입니다. 또한, 여기에 설명된 두 가지 방법을 보여주는 첨부된 예시 장면도 참고하시기 바랍니다.
더 많은 정보
텍스처를 선언하기 위해 재료 속성 사용
각 객체에 고유한 텍스처를 부여하는 가장 간단한 방법은 객체별로 머티리얼을 생성하고 셰이더에서 텍스처를 문자열 매개변수로 명시적으로 선언하는 것입니다. 그러면 각 객체에 해당 머티리얼이 할당됩니다.
이 방법은 노동 집약적인 방법이며, 특히 많은 수의 객체가 포함된 장면을 작업할 때 더욱 그렇습니다. 또한, 재료를 변경해야 할 때 유연성이 부족합니다.
많은 객체가 동일한 재질을 공유하지만 서로 다른 텍스처를 지정해야 하는 경우가 많습니다. 이 경우, 각 객체가 고유한 텍스처를 사용하도록 장면을 설정할 수 있습니다.
객체 속성을 사용하여 텍스처 선언
재질에 텍스처를 설정하는 대신, 렌더링할 객체는 임의의 속성을 통해 관련 텍스처 파일을 가리킬 수 있습니다.
Katana 의 사용자 데이터 및 기본 변수
렌더러는 셰이더에서 조회할 수 있는 사용자 데이터 또는 원시 데이터(primvar)를 사용할 수 있도록 합니다. Katana 에서는 임의의 지오메트리 데이터를 geometry.arbitrary.xxx 라는 속성으로 읽어들이는 것이 관례이며 , 이 속성은 기본적으로 렌더러에 사용자 데이터 또는 원시 데이터로 기록됩니다. 즉, 원시 데이터나 사용자 데이터를 사용하여 텍스처를 지정하는 경우 이 작업이 자동으로 수행되도록 할 수 있습니다.
Katana 에서 RenderMan을 사용할 때 primvar를 사용하여 텍스처 선언
RenderMan에는 인스턴스 간 텍스처를 처리하는 방법이 있는데, 이는 인스턴스 위치에서 셰이더 매개변수 구문을 확인하고 RenderMan <primstr:attributename> 구문을 통해 이를 수행하는 것입니다. 하지만 이 기능은 RenderMan 24에서만 도입되었습니다.
예시 장면 만들기
다음 단계는 3Delight 렌더러를 사용하여 객체 속성을 사용하여 텍스처를 선언하는 방법에 대한 지침입니다.
- 도움말 > 포니 만들기 메뉴 에서 CameraCreate, NetworkMaterialCreate, 그리고 두 개의 포니 노드를 추가합니다 . 각 포니 노드의 이름 매개변수를 고유하게 변경하세요.
- 각 Pony의 다운스트림에 AttributeSet 노드를 만들고 해당 업스트림 Pony의 Scene Graph 위치로 경로를 설정합니다.
- 각 AttributeSet 노드를 편집하고 각 attributeName 매개변수를 'geometry.arbitrary.basecolor.value'로, 유형 매개변수를 'string'으로 변경합니다.
- 각 AttributeSet의 stringValue를 고유한 텍스처 파일을 가리키도록 설정하세요. Katana 에 포함된 예제 파일은
$KATANA_ROOT/demos/tx_files/에서 확인할 수 있으며, 이 글에 텍스처 파일을 첨부했습니다. - NetworkMaterialCreate 노드로 이동합니다(단축키: Ctrl+MMB 또는 선택 시 Ctrl+Enter ). dlPrincipled 및 dlTexture 셰이딩 노드를 만듭니다.
- dlTexture 노드를 편집하고 텍스처 파일 매개변수를
{attr:geometry.arbitrary.basecolor.value}로 설정합니다. 이렇게 하면 이전에 설정된 속성에서 파일 경로를 읽습니다. - dlTexture의 outputColor 포트를 dlPrincipled 노드의 Base > Color 포트의 입력에 연결하고 NetworkMaterialCreate에서 빠져나옵니다(단축키: Ctrl+Backspace ).
- 포니 노드를 제외한 모든 노드를 선택하고 'M'을 눌러 하류에 병합 노드를 만듭니다.
- Merge 아래에 MaterialAssign 노드를 생성하여 연결하고, 값이
/root/world/geo//*인 사용자 지정 CEL 참조를 추가하고 materialAssign 매개변수를/root/materials/NetworkMaterial로 설정합니다. 이렇게 하면 Scene Graph에서 'geo' 위치 아래의 모든 위치에 재질이 적용됩니다. - 마지막으로 MaterialAssign의 다운스트림에 GafferThree 노드를 만들고 Add 3Delight 메뉴에서 Environment Light를 추가합니다.
렌더링할 때 이제 하나의 재질에서 두 가지 다른 텍스처가 포니에 적용된 것을 볼 수 있습니다.
추가 읽기
인스턴스 간 텍스처 처리 에 대한 자세한 내용은 Q100508: 계층적(인스턴스 소스) 인스턴싱을 통한 씬 그래프 쿠킹 성능 향상을 참조하세요.
첨부 파일
우리는 문제로 불편을 끼쳐 드려 죄송합니다
이유를 알려주세요