Как я могу добавить глянцевую / зеркальную текстуру к модели GLTF?

ВОПРОС:

У меня есть изображение текстуры зеркальности / глянца для модели, которая еще не используется моделью GLTF.

Как я могу использовать / добавить текстуру к моей модели, чтобы она была отражающей / глянцевой там, где должна быть?

Я не знаю, что изменить в файле .gltf, чтобы использовать текстуру.

РЕДАКТИРОВАТЬ: добавлено больше строк GLTF, чтобы лучше понять ситуацию.


GLTF JSON:

"images": [
    {
        "name": "...",
        "uri": "..."
    },
    {
        "name": "...",
        "uri": "..."
    },
    {
        "name": "...",
        "uri": "..."
    },
    {
        "name": "...",
        "uri": "..."
    },
    {
        "name": "...",
        "uri": "..."
    }
],
"samplers": [
    {}
],
"textures": [
    {
        "name": "T_N",
        "sampler": 0,
        "source": 0
    },
    {
        "name": "Map #9",
        "sampler": 0,
        "source": 1
    },
    {
        "name": "T_D",
        "sampler": 0,
        "source": 2
    },
    {
        "name": "Map #6",
        "sampler": 0,
        "source": 3
    },
    {
        "name": "Specular",
        "sampler": 0,
        "source": 4
    }
],

"materials": [
    {
        "name": "Head",
        "alphaMode": "OPAQUE",
        "extras": {
            "fromFBX": {
                "shadingModel": "<unknown>",
                "isTruePBR": false
            }
        },
        "normalTexture": {
            "index": 0,
            "texCoord": 0
        },
        "emissiveTexture": {
            "index": 1,
            "texCoord": 0
        },
        "pbrMetallicRoughness": {
            "baseColorTexture": {
                "index": 2,
                "texCoord": 0
            },
            "baseColorFactor": [
                1.0,
                1.0,
                1.0,
                1.0
            ],
            "metallicFactor": 0.800000002980232,
            "roughnessFactor": 0.600000011920929
        }
    },
    {
        "name": "Body",
        "alphaMode": "BLEND",
        "extras": {
            "fromFBX": {
                "shadingModel": "<unknown>",
                "isTruePBR": true
            }
        },
        "pbrMetallicRoughness": {
            "baseColorTexture": {
                "index": 3,
                "texCoord": 0
            },
            "baseColorFactor": [
                1.0,
                1.0,
                1.0,
                1.0
            ],
            "metallicFactor": 0.80000002980232,
            "roughnessFactor": 0.600000011920929
        },
        "extensions": {
            "KHR_materials_pbrSpecularGlossiness": {
                "specularGlossinessTexture": {
                    "index": 4
                }
            }
        }
    }
],
"meshes": [
    {
        "name": "Head",
        "primitives": [
            {
                "material": 0,
                "mode": 4,
                "attributes": {
                    "COLOR_0": 3,
                    "NORMAL": 2,
                    "POSITION": 1,
                    "TEXCOORD_0": 4
                },
                "indices": 0,
                "extensions": {
                    "KHR_draco_mesh_compression": {
                        "bufferView": 0,
                        "attributes": {
                            "COLOR_0": 2,
                            "NORMAL": 1,
                            "POSITION": 0,
                            "TEXCOORD_0": 3
                        }
                    }
                }
            }
        ]
    },
    {
        "name": "Body",
        "primitives": [
            {
                "material": 1,
                "mode": 4,
                "attributes": {
                    "COLOR_0": 8,
                    "NORMAL": 7,
                    "POSITION": 6,
                    "TEXCOORD_0": 9
                },
                "indices": 5,
                "extensions": {
                    "KHR_draco_mesh_compression": {
                        "bufferView": 1,
                        "attributes": {
                            "COLOR_0": 2,
                            "NORMAL": 1,
                            "POSITION": 0,
                            "TEXCOORD_0": 3
                        }
                    }
                }
            }
        ]
    }
],

ОШИБКА:

Вот ошибка, которую я получаю с измененным выше GLTF при попытке загрузить модель:

{"message":"Cannot read property 'getMaterialType' of undefined","name":"TypeError"} 

person TheProgrammer    schedule 14.08.2018    source источник


Ответы (1)


В репозитории glTF-Sample-Models есть несколько хороших примеров. Вот та же модель, использующая два разных рабочих процесса PBR:

В приведенном выше примере JSON используется металл / шероховатость, поэтому вам придется «преобразовать» его в спецификации / блеск, заменив коэффициенты металла и шероховатости эквивалентными характеристиками / глянцевыми свойствами.

Я бы посоветовал взглянуть на спецификацию для получения дополнительной информации:

Вам также может быть проще сделать это в таком инструменте, как Substance Painter или Blender, который может импортировать и экспортировать glTF.

person Don McCurdy    schedule 14.08.2018
comment
Ставлю на следующую ошибку: {"message":"Cannot read property 'getMaterialType' of undefined","name":"TypeError"} после добавления полей из: github.com/KhronosGroup/glTF-Sample-Models/blob/master/2.0/ - person TheProgrammer; 15.08.2018
comment
Обновил мой текущий файл GLTF в вопросе с изменениями и дополнительными строками. - person TheProgrammer; 15.08.2018
comment
Вы знаете, что может вызвать ошибку? - person TheProgrammer; 18.08.2018
comment
Я думаю, вам нужно будет опубликовать весь файл glTF с помощью Google Диска или Dropbox или еще чего-нибудь. Также могут помочь инструменты «проверки» glTF. - person Don McCurdy; 18.08.2018
comment
Я проверил файл, теперь я получаю ту же ошибку, что и здесь: stackoverflow.com/questions/51839039/ Я понятия не имею, что может быть причиной этого ... - person TheProgrammer; 19.08.2018
comment
Как это предполагается использовать, если модель глянца спецификации определяет параметры шероховатости / металла? - person pailhead; 22.08.2018
comment
Вы имеете в виду, что увидит пользователь, если у модели есть параметры spec / gloss и металл / шероховатость? См. лучшие практики spec / gloss, но tl; dr движок может выбрать один из двух. - person Don McCurdy; 22.08.2018
comment
@DonMcCurdy. Нам нужны отдельные текстуры для базовой, шероховатой, металлической в ​​Blender? Это вроде как складывает размер файла. Есть ли способ показать глянцевитость с помощью одной текстуры? - person June Wang; 29.05.2019
comment
Если вы используете Blender, используйте материалы Principled BSDF и текстуры основного цвета, шероховатости и металла. Металлическая и грубая текстуры будут объединены автоматически. См .: docs.blender.org/manual/en/dev/addons/ io_gltf2.html - person Don McCurdy; 29.05.2019