Gildor's Forums

Author Topic: Доработка экспартера gltf 2.0  (Read 510 times)
lovepsone
Newbie
*
Posts: 19


View Profile
Доработка экспартера gltf 2.0
« on: September 18, 2020, 21:10 »

Всем привет. Пытаюсь доработать экспартер gltf 2.0. Изучаю структуру проекта. Я так понимаю что все данные меша для генерации json берутся из функции appSprintf(...). Где хранятся данные о текстурах и материалах? класс UnrealMaterial или BaseMeshLod?

Что касается gltf (как понял я):

1) Свойство Textures.Все текстуры хранятся в массиве "textures". Имеет параметр sampler (id Samplera) и source (id изображения которые хранит свойство Images).
Code:
{
    "textures": [
        {
            "sampler": 0,
            "source": 2
        }
    ]
}

2) Свойство Images. Загружаемые текстуры(изображения) хранятся в массиве "images". Параметры которые может принимать (одно из) :
a) URI внешнего файла в одном из поддерживаемых форматов изображений;
b) URI со встроенными данными в кодировке base64
c) ссылка на bufferView; в этом случае необходимо определить mimeType.
Code:
{
    "images": [
        {
            "uri": "duckCM.png"
        },
        {
            "bufferView": 14,
            "mimeType": "image/jpeg"
        }
    ]
}
3) Свойство Samplers. Хранит параметры "magFilter", "minFilter", "wrapS", "wrapT":
Code:
{
    "samplers": [
        {
            "magFilter": 9729,
            "minFilter": 9987,
            "wrapS": 10497,
            "wrapT": 10497
        }
    ]
}

4) Свойство materials : пока что разбираюсь.
спасибо за внимание.

P.S Не судить строго если не по теме. Можно ли как - сто скомпилировать исходники в Visual Studio Code?
« Last Edit: September 18, 2020, 21:13 by lovepsone » Logged

Gildor
Administrator
Hero Member
*****
Posts: 7973



View Profile WWW
Re: Доработка экспартера gltf 2.0
« Reply #1 on: September 18, 2020, 21:39 »

Привет.

1. appSprintf - это тот же sprintf (который по логике должен знать каждый программист, который умеет программировать на C). Эта функция ВЫВОДИТ данные, которые ей передаются, в текстовую строку (даже не в файл), и никакие другие данные из этой не "берутся".
2. В VSCode скомпилить можно, проект есть в репозитории, и вроде я что-то даже писал в readme.md. Есть проекты и для VSCode, и для обычной Visual Studio - надо просто выбрать "открыть папку" и указать корневую папку umodel.

С материалами в glTF есть пара проблем - собственно, почему я до сих пор формат не доделал.

1. Куда положить текстуры? UModel всегда кладёт их в ту папку, которая использовалась в оригинальной игре. То есть, НЕ рядом с моделью. glTF формат использует относительный путь до текстуры, и это нормально - до тех пор, пока вы не попробуете загрузить модель для проверки в какой-нибудь glTF viewer - а они ВСЕ написаны на Java Script (нормальных программистов у них нет, что ли?) и сделаны для браузера. Там нужно нажать что-то вроде "загрузить glTF" и выбрать файл на диске, вернее - ВСЕ файлы сразу - модель, bin, текстуры - и тут возникает проблема если текстуры лежат в другой папке. Есть вариант с форматом glb, в который сразу кладётся всё подряд, но я его даже не рассматриваю. Другой вариант - копировать все текстуры рядом с моделью, то есть текстуры будут экспортированы дважды (и занимать в 2 раза больше места на диске).

2. В glTF очень жёсткая структура материала - у них metallic/speciar/roughness хранятся в виде масок в одной текстуре. Соответственно, использовать текстуры из игры (кроме diffuse и normal) не получится, потому что вряд ли вообще кто-то придерживается той же самой модели материала.
Logged
lovepsone
Newbie
*
Posts: 19


View Profile
Re: Доработка экспартера gltf 2.0
« Reply #2 on: September 18, 2020, 21:58 »

Насчет appSprintf я не правильно выразился(исправлять уже не буду). А по теме, тот кто хочет экспортировать в gltf формате с текстурами, то почему не сделать:
Quote
Другой вариант - копировать все текстуры рядом с моделью, то есть текстуры будут экспортированы дважды (и занимать в 2 раза больше места на диске).
Хотя можно использовать кодировку base64(конечно же для WEBGL).

Или вы просто не видите смысла?
P.S Если я нечего не путаю, то этот формат изначально делался для WEBGL.
« Last Edit: September 18, 2020, 22:08 by lovepsone » Logged

Gildor
Administrator
Hero Member
*****
Posts: 7973



View Profile WWW
Re: Доработка экспартера gltf 2.0
« Reply #3 on: September 18, 2020, 22:12 »

Это планируется как опция. Просто не знаю когда снова до glTF руки дойдут - формат наверное кроме Blender нигде толком не поддерживается, в том же UE4 сделали импорт StaticMesh, а потом разработчик плагина ушёл из компании (у меня с ним просто контакт есть, поэтому знаю) - и всё остановилось. Autodesk входит в ассоциацию по glTF, но до сих пор ничего не сделали. Из Max и Maya можно ЭКСПОРТИРОВАТЬ glTF через плагины от Babylon.js, но не больше.

Пара ссылок с обнадёживающими дискуссиями насчёт продуктов Autodesk:

https://github.com/BabylonJS/Exporters/issues/428
Quote
I'm closing this issue as we do not plan to do it and Autodesk will probably soon publish one

https://forums.autodesk.com/t5/3ds-max-ideas/add-gltf-support-export-and-import/idi-p/7868477
Quote
Status changed to: Under Review
Logged
lovepsone
Newbie
*
Posts: 19


View Profile
Re: Доработка экспартера gltf 2.0
« Reply #4 on: September 18, 2020, 22:25 »

Мда, тут я не копался. Тогда ждем развития событий. Зря только время потратил (. Хотел помочь.
Logged

Gildor
Administrator
Hero Member
*****
Posts: 7973



View Profile WWW
Re: Доработка экспартера gltf 2.0
« Reply #5 on: September 18, 2020, 22:40 »

Спасибо.
Я в принципе и жду развития.
А так - я видел форк на github где кто-то уже пытался доработать glTF export
https://github.com/horsenit/UModel/tree/gltf-texture-export
Logged
lovepsone
Newbie
*
Posts: 19


View Profile
Re: Доработка экспартера gltf 2.0
« Reply #6 on: September 19, 2020, 15:03 »

Мертвый репозиторий...
Logged

andreyholkin
Newbie
*
Posts: 7


View Profile
Re: Доработка экспартера gltf 2.0
« Reply #7 on: October 24, 2020, 19:24 »

Спасибо.
Я в принципе и жду развития.
Не особо то и требуется этот формат.
Я бы приветствовал сборку статических мешей, согласно списку сцены, в один общий объект. А то получается куча хлама, который собрать невозможно, из-за того что пивоты находятся в центре объекта, а не в 0.0.0 мира.

Был еще интересный формат mdl, по-моему, там текстуры автоматом сшиваются в атлас, переписывая развёртку модели. Можно вместо кучи текстур использовать всего одну.
Вот пример кучи текстур в одной (танк WOT mdl палет)

Посмотреть как работает можно в Noesis.
Logged
andreyholkin
Newbie
*
Posts: 7


View Profile
Re: Доработка экспартера gltf 2.0
« Reply #8 on: October 24, 2020, 19:38 »

MDL https://yadi.sk/d/o1vXXTULqJ6fsQ

Для просмотра использовать 3D Object Converter 6.50
Текстура находится внутри.
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7973



View Profile WWW
Re: Доработка экспартера gltf 2.0
« Reply #9 on: October 24, 2020, 19:42 »

Понятие "текстура" устарело лет эдак 20 назад. Сейчас везде материалы, которые в простейшем случае являются комбинацией нескольких текстур. Какого-либо вменяемого формата для хранения, импорта и экспорта материалов так и не придумали - есть поделки у крупных компаний, но они широкого применения так и не получили. Поэтому в том же анриле материалы всегда создаются вручную.
Logged
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Leviathan design by Bloc | XHTML | CSS