본문으로 바로가기
반응형



MODO에서의 UDIM Setup(e.g. youtube


UDIM이란?(원문 링크 : https://www.fxguide.com/featured/udim-uv-mapping/)

U-Dimension의 약자로 UV 공간에서 각 정수 블록을 식별하는 단일 선형 숫자를 만드는 방법. U 방향 (U-DIM)에서 사용할 수 있는 패치 수를 제한한 다음 U를 0으로 재설정하고 그 수에 도달 한 후 V를 1 씩 증가시킴으로써 이를 수행. 즉 모든 패치를 U = 10까지 채운 다음 U = 0으로 돌아가 V 라인을 올리게 된다. 실제로 UDIM은 U베이스 번호를 사용할 수 있지만 10은 일반적으로 기본값이며 거의 독점적으로 유일한 번호


기술적 해설은 위와 같고 쉽게 말해 메쉬를 분할하지 않고 UV를 가로로 길게 늘려 셋팅하는 방법. Multi-Sub와 유사해 보이지만 이를 빠르게 처리하기 위한 기술이다.(Multi-Sub UV일 경우 UV Ediotr에서 위 이미지와 같이 가로로 배열해서 볼 수 있는 걸 제공하지 않는다. - 맥스에서도 제공할수 있을것 같은데...)


익숙한 UDIM 번호는 1001에서 시작하여 U = 0, Y = 0은 1001.



Ptex에 비해 UDIM의 장점은

UDIM은 매우 널리 알려져 있습니다.
UDIM은 빠르며, 보다 효율적으로 still의 오버 페인트가 가능합니다(특히 빠른 픽스를 위해)
Ptex는 모든 것이 지원되지 않습니다 (예 : Mudbox에서 MARI 및 그 중간의 모든 항목)
Ptex는 Arnold에서 8k x8k의 32k x 32k로 제한 될 수 있습니다.
Ptex는 작업이 시작되기 전에 꽤 많이 잠겨있는 에셋을 필요로합니다. UV's는 훨씬 더 많은것을 풀어두고 사용할 수 있습니다.
지오메트리에 충분한 테셀레이션이 없는 경우 Ptex에서 충분한 해상도를 얻을 수 없습니다.




유니티에서 UDIM Material Inspector에 대한 블로그 내용이 있어 첨부


원문링크 : https://blogs.unity3d.com/kr/2017/08/01/multi-material-using-custom-inspectors-and-scriptable-objects-for-udim-materials/


Multi-material: Using custom Inspectors and Scriptable Objects for UDIM materials

, 8월 1, 2017


Unity Labs 팀은 화질은 높지만 비 실시간 렌더링을 위해 고안된 필름 품질 에셋을 Unity를 통해 60FPS+로 가져 오는 실험을 진행하고 있습니다. 실시간 엔진에서는 영화 및 TV 형식 및 파이프 라인 (예 : Ptex, USD 및 UDIM)이 널리 지원되지 않으므로 이러한 에셋을 사용하려면 새로운 기술과 도구가 필요합니다.


이러한 에셋의 크기와 밀도에 대한 명백한 문제 외에도 단일 자산 (예 : UDIM의 경우)에 관련된 많은 수의 재료 및 텍스처 파일이있을 수 있습니다. 이러한 파일은 우리가 쉽게 상호 작용하고 수정할 필요가 있습니다 . 이 워크 플로우를 능률화하기 위해이 모든 자료를 관리하고 상호 작용할 수있는 새로운 다중 재료 편집기(Multi-material Editor)를 만들었습니다.



UDIM 및 기타 멀티 타일 UV 매핑 기술은 새로운 파일 유형이 아니라 UVing을 위한 파이프 라인 및 소스 텍스처 파일의 이름 지정을 위한 일련의 규칙입니다. 이러한 멀티 타일 UV 매핑 기술은 현재 매터리얼 인스펙터와 동시에 편집하고 유지할 수 있는 합당한 것 이상으로 재료 수를 늘릴 수 있으며, 매번 재료를 여러 개 선택하는 것은 별로 실용적이지 않습니다.

멀티 머티리얼 에디터에서는 개별 타일이 가장 일반적인 파이프 라인 인 소스 에셋의 고유 한 매터리얼 할당을 가지고 있다고 가정합니다. 파이프 라인에 해당하지 않는 경우 맞춤형 메쉬 임포터를 사용하여 자산 가져 오기시 해당 매터리얼로 개별 메쉬로 메쉬를 분할 할 수 있습니다.




Getting Started


다중 재료 편집기를 다운로드하십시오.

링크 : https://github.com/Unity-Technologies/MultiMaterial

설치하려면 Unity 5.5 이상에서 프로젝트를 만드십시오. 그런 다음 프로젝트의 자산 폴더에이 repo를 추가하십시오. Create 메뉴의 프로젝트 뷰에서 마우스 오른쪽 버튼을 클릭하여 액세스 할 수있는 두 개의 새로운 스크립팅 가능 객체 유형이 있습니다.

매터리얼 텍스쳐 설정은 Create> Multi Material> Material texture Setting에 있으며 UDIM 매터리얼에 텍스쳐를 지정하는 데 사용할 수 있습니다. 사용자 정의 관리자는 선택한 재질에 텍스처 설정을 적용 할 수 있으며 UDIM 규칙에 따라 매터리얼과 텍스처의 이름이 지정되어 있다고 가정합니다.


Texture Name은 텍스처 필드의 머티리얼 속성 이름이고 Search Dir은 해당 머티리얼 속성의 텍스처가 들어있는 디렉토리입니다. Multi Material 데이터는 Create> Multi Material> Multi Material DATA 아래에 있으며 멀티 매터리얼 컴포넌트에 사용할 매터리얼 배열(Array)을 보유하거나 스크립트 가능한 객체의 속성에서 매터리얼을 직접 수정할 수 있습니다.

멀티 머티리얼 컴포넌트를 게임 오브젝트에 추가하여 오브젝트 렌더러의 Shared Materials 배열을 제어 할 수 있습니다. 멀티 머티리얼 데이터가 렌더링에서 생성되거나 프로젝트에서 지정된 경우 여기에서 해당 데이터를 수정할 수 있습니다. 한 번에 수정해야하는 매터리얼 그룹을 공유하는 여러 객체가있는 경우 유용 할 수 있습니다.




About the Tool


우리는 텍스처 할당의 경우를 제외하고는 하나의 소재 인 것처럼 오브젝트 또는 오브젝트 전반의 여러 재질과 상호 작용할 수있는 도구가 필요합니다.

대부분의 옵션을 허용하기 위해 재질 데이터를 자체 클래스로 분할하여 개체 렌더러를 기반으로 구성 요소에 만들고 직렬화하거나 스크립트 가능한 개체에 자산으로 저장하여 여러 개체간에 공유 할 수 있습니다. 그런 다음 별도의 사용자 정의 서랍 클래스를 사용하여이 단일 사용자 정의 관리자의 모든 재료를 볼 수있는 사용자 정의 관리자를 작성했습니다. 이것은 표준 머티리얼 인스펙터를 사용하지만 사용자가 사용할 수있는 커스텀 머티리얼 인스펙터도 지원합니다.

머티리얼, 특히 Unity Standard Shader는 인스펙터에 로직이 내장 된 커스텀 UI를 사용하기 때문에 머티리얼의 직렬화 된 속성에 표준 Property Drawers를 사용할 수 없습니다. 즉, 의미있는 방식으로 재료와 상호 작용하려면 Custom Inspector 내에서 Material Editor Inspector를 사용해야합니다. 삽입 된 편집기를 만들고 관리하는 경우 다른 편집기 또는 EditorWindow 안에 편집기의 그림 (공용 GUI 메서드 포함)을 삽입 할 수 있습니다.


e.g C# script IngredientDrawer


using UnityEditor;
using UnityEngine;

// IngredientDrawer
[CustomPropertyDrawer(typeof(Ingredient))]
public class IngredientDrawer : PropertyDrawer
{
    // Draw the property inside the given rect
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        // Using BeginProperty / EndProperty on the parent property means that
        // prefab override logic works on the entire property.
        EditorGUI.BeginProperty(position, label, property);

        // Draw label
        position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);

        // Don't make child fields be indented
        var indent = EditorGUI.indentLevel;
        EditorGUI.indentLevel = 0;

        // Calculate rects
        var amountRect = new Rect(position.x, position.y, 30, position.height);
        var unitRect = new Rect(position.x + 35, position.y, 50, position.height);
        var nameRect = new Rect(position.x + 90, position.y, position.width - 90, position.height);

        // Draw fields - passs GUIContent.none to each so they are drawn without labels
        EditorGUI.PropertyField(amountRect, property.FindPropertyRelative("amount"), GUIContent.none);
        EditorGUI.PropertyField(unitRect, property.FindPropertyRelative("unit"), GUIContent.none);
        EditorGUI.PropertyField(nameRect, property.FindPropertyRelative("name"), GUIContent.none);

        // Set indent back to what it was
        EditorGUI.indentLevel = indent;

        EditorGUI.EndProperty();
    }
}


다중 재질 편집기에서 MaterialArrayDrawers 클래스를 사용하면 MultiMaterialEditor 및 MultiMaterialDataEditor에서 볼 수있는 재질 편집기로 작업 할 수 있습니다. 이 편집기에 사용되는 코딩 패턴은 다른 편집기에서 인스펙터를 그리는 다른 경우에도 사용할 수 있습니다.이 인스펙터는 해당 객체를 사용하는 구성 요소에 Scriptable Object에 대한 사용자 정의 인스펙터를 직접 그릴 때 유용합니다.


머티리얼 에디터가 다른 에디터의 OnInspectorGUI 내부에 드로잉하려고 할 때 성능 및 상호 작용 제한 사항에 대해 유의해야 할 몇 가지 중요한 사항이 있습니다. 첫째, 헤더 GUI는 inspector에서 설정 한 레이아웃 및 rect 컨텍스트를 변경할 수 있습니다. 또한 헤더에 셰이더 메뉴와 같은 컨트롤이 포함되어 있으면 BeginChangeCheckEndChangeCheck 를 사용하여 컨트롤의 변경 내용을 감지 할 수 없습니다. 이는 쉐이더 선택시 변경 사항을 동기화 할 수 없음을 의미합니다. 셰이더를 동기화 상태로 유지하기 위해 DrawMaterialHeaderMaterialView ()에 가능한 한 가깝게 머티리얼 헤더를 다시 만듭니다. 편집기의 본문을 표시하기 위해 Material 편집기에 반영해야하는 isVisibleField와 내부 편집기 그리기 스타일을 복제하려고하는 ShaderPopup은 이미로드되지 않은 한 Unity 내부 셰이더를 표시 할 수 없습니다.

둘째, 전체 머티리얼 에디터의 OnInspectorGUI ()를 그리기 때문에 OnInspectorGUI () 블록의 내용이 변경된 것은 무엇인지, 속성 서랍이 변경되었는지 알 수 없습니다. 즉, 다른 재료와 동기화해야 할 수있는 재료의 모든 부분에 잠재적 인 변화가 있음을 의미합니다. 작은 배열의 재료라도 모든 특성을 색상 피커와 같은 대화 형 컨트롤과 지속적으로 동기화하면 성능에 상당한 영향을 줄 수 있습니다.

따라서 자료를 동기화 할 때 최상의 성능을 얻으려면 수정 된 속성 만 변경하는 방법이 필요합니다. 우리는 적극적으로 수정 된 머티리얼과 멀티 머티리얼의 첫 번째 다른 머티리얼을 빠르게 비교하고, 두 머티리얼 사이의 텍스처를 제외한 다른 일련의 속성 만 캐시합니다. 그런 다음 캐시 된 변경 사항을 다른 모든 자료에만 적용합니다. 유감스럽게도, 재료가 크게 다를 경우 오탐 (false positives)이 발생하거나 비교 재료와 일치하는 경우 변경 사항을 놓칠 수 있습니다. 이 문제를 해결하기 위해 활성 재료에 Sync to Material 버튼을 추가했습니다.이 버튼은 Multi Material 전체의 모든 속성을 복사합니다.

멀티 머티리얼과 에디터는 유니티의 UI를 프로젝트에서 원하는 워크 플로우에 맞게 커스터마이징 할 수있는 방법을 보여줍니다. 앞으로 탐험해야 할 부분은 다른 구성 요소의 검사기 안에 여러 편집기를 표시하고 동기화하려는 직렬화 된 속성을 필터링하고 (예 : 텍스처 무시는 제외) 애니메이션 소재 및 / 또는 런타임 스크립팅 된 Multi와의 상호 작용을 처리하기위한보다 일반적인 서랍을 작성하는 것입니다.





반응형

'Technical Report > Unity Scripts' 카테고리의 다른 글

Custom Material GUI  (0) 2019.08.14
Unity Custom tube, shere Light  (0) 2018.12.04
Texture2D.Encode  (0) 2017.08.17
Unity FPSCounter  (0) 2017.07.26
Unity Attribute API  (0) 2017.07.26