모델 변환 중 재질 재정의

원본 모델의 재질 설정은 렌더러에서 사용하는 PBR 재질을 정의합니다. 기본 변환이 원하는 결과를 제공하지 않아 변경해야 하는 경우도 있습니다. 자세한 내용은 모델 형식에 대한 재질 매핑을 참조하세요.

Azure Remote Rendering에서 사용하기 위해 삼각 메시를 변환할 때 재질 재정의 파일을 제공하여 재질별로 재질을 변환하는 방법을 사용자 지정할 수 있습니다. <modelName>.MaterialOverrides.json이라는 파일을 <modelName>.<ext> 입력 모델이 있는 입력 컨테이너에서 찾을 수 있는 경우, 이 파일이 재질 재정의 파일로 사용됩니다.

변환 시 사용되는 재정의 파일

간단한 예로, 상자 모델에 Default라는 단일 재질이 있다고 가정해 보겠습니다. Remote Rendering에서 사용하려면 albedo 색을 조정해야 합니다. 이 경우 다음과 같이 box.MaterialOverrides.json 파일을 만들 수 있습니다.

[
    {
        "name": "Default",
        "albedoColor": {
            "r": 0.33,
            "g": 0.33,
            "b": 0.33,
            "a": 1.0
        }
    }
]

box.MaterialOverrides.json 파일은 변환 서비스에 새 설정을 적용하도록 지시하는 box.fbx가 있는 입력 컨테이너에 배치됩니다.

색 재질

색 재질 모델은 조명과 독립적인 지속적으로 음영 처리된 표면에 대해 설명합니다. 예를 들어 색 재질은 사진 측량 알고리즘에서 만든 자산에 유용합니다. 자세한 내용은 색 재질을 참조하세요. 재질 재정의 파일에서 unlittrue로 설정하여 재질을 색 재질로 선언할 수 있습니다.

[
    {
        "name": "Photogrametry_mat1",
        "unlit" : true
    },
    {
        "name": "Photogrametry_mat2",
        "unlit" : true
    }
]

특정 질감 맵 무시

경우에 따라 변환 프로세스에서 특정 질감 맵을 무시하도록 할 수 있습니다. 이 상황은 특수 맵을 생성하는 도구로 생성된 모델이 렌더러에서 올바르게 인식되지 않는 경우에 발생할 수 있습니다. 예로, 불투명도 이외의 항목을 정의하는 데 사용될 수 있는 ‘OpacityMap’ 또는 ‘BumpMap’으로 저장되는 ‘NormalMap’을 들 수 있습니다. 후자의 경우 변환기가 ‘BumpMap’을 ‘NormalMap’으로 사용하게 되므로, ‘NormalMap’을 무시할 수 있습니다.

ignoreTextureMaps라는 속성을 추가하고 무시할 질감 맵을 추가합니다.

[
    {
        "name": "Default",
        "ignoreTextureMaps": ["OpacityMap", "NormalMap"]
    }
]

무시할 수 있는 질감 맵의 전체 목록은 JSON 스키마를 참조하세요.

여러 재질에 동일한 재정의 적용

기본적으로 재질 재정의 파일의 항목은 이름이 재질 이름과 정확히 일치하는 경우에 적용됩니다. 동일한 재정의가 여러 재질에 적용되는 것이 일반적이기 때문에 필요에 따라 정규식을 항목 이름으로 제공할 수 있습니다. nameMatching 필드의 기본값은 exact이지만 regex로 설정하면 일치하는 모든 재질에 항목을 적용할 수 있습니다. regex 구문은 JavaScript에 사용되는 것과 동일한 구문입니다.

임의의 문자열에 대해 정규식을 테스트하고 디버그하는 데 사용할 수 있는 무료 정규식 테스트 웹 사이트가 있습니다.

다음 예는 이름이 Material2, Material01, Material999와 같은 재질에 적용되는 재정의를 보여 줍니다.

[
    {
        "name": "Material[0-9]+",
        "nameMatching": "regex",
        "albedoColor": {
            "r": 0.0,
            "g": 0.0,
            "b": 1.0,
            "a": 1.0
        }
    }
]

이 예제에서는 모든 재질에 적용되는 재정의를 보여 줍니다.

[
    {
        "name": ".*",
        "nameMatching": "regex",
        "albedoColor": {
            "r": 0.0,
            "g": 0.0,
            "b": 1.0,
            "a": 1.0
        }
    }
]

모든 재질이 일치하는 재정의를 찾는 순서는 다음과 같습니다.

  1. 먼저 정확한 이름 일치를 테스트합니다(즉, nameMatching이 없거나 exact와 같은 경우 모든 재정의 확인).
  2. 재정의가 없는 경우 regex 이름 일치 모드로 모든 재정의를 테스트하고 일치하는 첫 번째 재정의를 사용합니다.

재질 이름에 여러 regex 식이 적용되더라도 단일 재질은 둘 이상의 재정의를 적용하지 않습니다.

적용된 항목에 대한 정보 가져오기

출력 컨테이너에 작성된 정보 파일은 제공된 재정의 수와 재정의된 재질 수에 대한 정보를 전달합니다. 자세한 내용은 변환된 모델에 대한 정보를 참조하세요.

JSON 스키마

여기에는 재질 파일에 대한 전체 JSON 스키마가 제공됩니다. unlitignoreTextureMaps를 제외하고 사용할 수 있는 속성은 색 재질PBR 재질 모델의 섹션에 설명된 속성의 하위 집합입니다.

{
    "definitions" :
    {
        "color":
        {
            "type" : "object",
            "description" : "Color as 4 components vector",
            "properties":
            {
                "r": {"type":"number"},
                "g": {"type":"number"},
                "b": {"type":"number"},
                "a": {"type":"number"}
            },
            "required": ["r", "g", "b"]
        },
        "alpha":
        {
            "type" : "object",
            "description" : "Alpha channel for color",
            "properties":
            {
                "a": {"type":"number"}
            },
            "required": ["a"]
        },
        "colorOrAlpha":
        {
            "anyOf": [
                {"$ref": "#/definitions/color"},
                {"$ref": "#/definitions/alpha"}
            ]
        },
        "listOfMaps":
        {
            "type": "array",
            "items": {
                "type": "string",
                "enum": ["AlbedoMap",
                            "EmissiveMap",
                            "NormalMap",
                            "OcclusionMap",
                            "RoughnessMap",
                            "MetalnessMap",
                            "ReflectivityMap",
                            "BumpMap",
                            "OpacityMap",
                            "DiffuseMap",
                            "SpecularMap",
                            "ShininessMap",
                            "MetallicRoughnessMap",
                            "SpecularGlossinessMap"]
            }
        }
    },
    "type" : "array",
    "description" : "List of materials to override",
    "items":
    {
        "type" : "object",
        "description" : "List of parameters to override",
        "properties":
        {
            "name": { "type" : "string"},
            "nameMatching" : { "type" : "string", "enum" : ["exact", "regex"] },
            "unlit": { "type" : "boolean" },
            "albedoColor": { "$ref": "#/definitions/colorOrAlpha" },
            "roughness": { "type": "number" },
            "metalness": { "type": "number" },
            "normalMapScale": { "type": "number" },
            "transparent": { "type" : "boolean" },
            "alphaClipEnabled": { "type" : "boolean" },
            "alphaClipThreshold": { "type": "number" },
            "useVertexColor": { "type" : "boolean" },
            "isDoubleSided": { "type" : "boolean" },
            "ignoreTextureMaps": { "$ref" : "#/definitions/listOfMaps" },
            "transparencyWritesDepth": {"type" : "boolean" }
        },
        "required": ["name"],
        "additionalProperties" : false
    }
}

다음 단계