Работая над большим проектом, связанным с текстурированием, я, методом проб и ошибок, нашёл очень неплохой пайплайн для работы с текстурами. Хотел бы им поделиться с вами.
Для начала определимся, что должен содержать файл с нашим 3д-объектом. В идеале файл должен хранить геометрию с группами сглаживания, назначенными material_id и текстурной разверткой, ну и, собственно, материал multi/sub-object с названными ID. Таким образом можно добиться любого уровня детализации объекта.
Для наглядности покажу на примере модели стыковочного модуля. В этой модели есть 10 типов материалов (ткань, металл, золото, фольга и т.д.), все они назначены в геометрии через material_id. На картинке, например, выделен белый пластик под номером ID - 3.

Вот так выглядит материал модели.

Для некоторых материалов нужна растровая текстура, для некоторых - нет, но все равно желательно делать развёртку для всей геометрии. Хотя совсем не критично, если развертки отдельных объектов модели пересекаются. Часто нет необходимости делать развертку для мелкой геометрии.
Вот на моём примере есть ящик с текстурой фольги, у которого своя отдельная текстура и развертка этого ящика пересекается с основной разверткой. Но поскольку эти объекты под разными id - в этом нет ничего страшного.

Желательно, конечно, всё оптимизировать, но иногда в пределах одного объекта одной текстурой не обойтись, потому получаются пересечения. В конце концов, можно отделить обьекты с разными текстурами друг от друга.
Теперь немного насчёт форматов. Формат *.obj вообще сразу отпадает, потому как он не поддерживает экспорт материалов vray, не экспортирует material_id геометрии и вообще выносит материал в отдельную библиотеку. О нём можно сразу забыть. Другое дело *.fbx, он может делать всё перечисленное, но таки один недостаток у него есть, он не запоминает наименования material_id в материале multi/sub-object. Это не критично, но важно. Для поддержания порядка всегда нужно называть материалы и номера ID в материале multi/sub-object.
Таким образом в выпадающем списке material_id можно легко выбрать нужные нам полигоны.

Так что же делать, чтобы материалы не теряли названий после экспорта? Я нашёл для себя ответ в использовании библиотек материалов. Раньше я на них не обращал внимания, а зря, ведь это весьма удобно. В старом material editor работать с ними неудобно, а в slate - самый раз :)
Во первых, для удобства библиотеки можно выделять цветом. Сначала я выделил оранжевым основной раздел с материалами сцены, в этом списке всегда должен быть порядок, по нему хорошо видно, какие материалы в сцене используются, а какие нет. Потом создал несколько библиотек с заготовками (красная и зеленая) и одну библиотеку для текущего проекта (фиолетовая). Я поделал их в виде текстовых списков, хотя можно сделать в виде превьюшек-сфер. Правда в таком случае нужно время для их подгрузки, а это лишние затраты ресурсов.

Последняя (фиолетовая) библиотека - это, собственно, и есть решение проблемы экспорта. Для того, чтобы не загонять каждый раз текстуру в *.fbx файл, можно создать отдельную библиотеку и хранить в ней все нужные материалы. Правда я не использовал формат *.fbx, а пользовался vray proxy. Proxy мне понадобился, потому что ресурсов компьютера не хватало для того, чтобы держать все объекты во вьюпорте. А в итоге оказалось, что это еще и очень хороший способ экспортировать геометрию со всеми нужными параметрами в отдельный файл.
Делается это следующим образом: 1 - выбираем нужную геометрию, жмём правую кнопку и vray mesh export. 2 - выбираем путь для файла и его имя. Для того, чтобы при импорте объект был на нужном месте, ставлю галочку export in a single file. Тогда пивот будет в центре координат. 3 - Для импорта открываем вкладку vray и выбираем VrayProxy. Нажимаем в любом месте экрана курсором - появляется диалоговое окно выбора файла.

Прокси обычно отображается, как ящик, чтобы не тратить ресурсы, но можно выставить preview from file. Тогда будет примерно понятно где объект находится. В конце концов, если нужен меш - есть кнопка import as mesh. Геометрия будет с группами сглаживания и ID, всё как надо. Осталось только из библиотеки нужный материал назначить :)
У 3дмакса есть неприятная особенность, а точнее у его модификатора unwrap. Когда его создаешь, то в списке материалов добавляется куча ненужных материалов из unwrap editor, будь то checker или другая текстура. А если моделей в сцене куча и у каждого unwrap - в списке сплошное месиво :) Потому теперь я всегда удаляю unwrap`ы после редактирования.

Еще хотел бы пару слов написать о такой штуке, как asset tracking. Обычно новички боятся таких окон и не вникают, зачем оно надо, сам таким был :) Но штука действительно полезная. В нём можно отслеживать пути к текстурам а заодно можно легко настроить сетевой рендер. Как известно, для рендера по сети нужно, чтобы текстуры лежали на расшареной по сети папке, а в этом менеджере можно сразу всем текстурам сменить путь на сетевой. Чтобы вместо пути "D:\3D\spaceship\module\adapter" назначить путь, например "rendermachine4\module\adapter" надо всего лишь выделить нужные файлы, нажать правой и выбрать set path. Главное скопировать текстуры в сетевую папку, чтобы 3дмакс их нашёл.

Вот вроде бы и всё, постарался описать доступно, если есть вопросы - задавайте. Мне очень не хватало понимания этих вещей раньше, потому, надеюсь, кому-то будет полезно почитать.
Для начала определимся, что должен содержать файл с нашим 3д-объектом. В идеале файл должен хранить геометрию с группами сглаживания, назначенными material_id и текстурной разверткой, ну и, собственно, материал multi/sub-object с названными ID. Таким образом можно добиться любого уровня детализации объекта.
Для наглядности покажу на примере модели стыковочного модуля. В этой модели есть 10 типов материалов (ткань, металл, золото, фольга и т.д.), все они назначены в геометрии через material_id. На картинке, например, выделен белый пластик под номером ID - 3.

Вот так выглядит материал модели.

Для некоторых материалов нужна растровая текстура, для некоторых - нет, но все равно желательно делать развёртку для всей геометрии. Хотя совсем не критично, если развертки отдельных объектов модели пересекаются. Часто нет необходимости делать развертку для мелкой геометрии.
Вот на моём примере есть ящик с текстурой фольги, у которого своя отдельная текстура и развертка этого ящика пересекается с основной разверткой. Но поскольку эти объекты под разными id - в этом нет ничего страшного.

Желательно, конечно, всё оптимизировать, но иногда в пределах одного объекта одной текстурой не обойтись, потому получаются пересечения. В конце концов, можно отделить обьекты с разными текстурами друг от друга.
Теперь немного насчёт форматов. Формат *.obj вообще сразу отпадает, потому как он не поддерживает экспорт материалов vray, не экспортирует material_id геометрии и вообще выносит материал в отдельную библиотеку. О нём можно сразу забыть. Другое дело *.fbx, он может делать всё перечисленное, но таки один недостаток у него есть, он не запоминает наименования material_id в материале multi/sub-object. Это не критично, но важно. Для поддержания порядка всегда нужно называть материалы и номера ID в материале multi/sub-object.
Таким образом в выпадающем списке material_id можно легко выбрать нужные нам полигоны.

Так что же делать, чтобы материалы не теряли названий после экспорта? Я нашёл для себя ответ в использовании библиотек материалов. Раньше я на них не обращал внимания, а зря, ведь это весьма удобно. В старом material editor работать с ними неудобно, а в slate - самый раз :)
Во первых, для удобства библиотеки можно выделять цветом. Сначала я выделил оранжевым основной раздел с материалами сцены, в этом списке всегда должен быть порядок, по нему хорошо видно, какие материалы в сцене используются, а какие нет. Потом создал несколько библиотек с заготовками (красная и зеленая) и одну библиотеку для текущего проекта (фиолетовая). Я поделал их в виде текстовых списков, хотя можно сделать в виде превьюшек-сфер. Правда в таком случае нужно время для их подгрузки, а это лишние затраты ресурсов.

Последняя (фиолетовая) библиотека - это, собственно, и есть решение проблемы экспорта. Для того, чтобы не загонять каждый раз текстуру в *.fbx файл, можно создать отдельную библиотеку и хранить в ней все нужные материалы. Правда я не использовал формат *.fbx, а пользовался vray proxy. Proxy мне понадобился, потому что ресурсов компьютера не хватало для того, чтобы держать все объекты во вьюпорте. А в итоге оказалось, что это еще и очень хороший способ экспортировать геометрию со всеми нужными параметрами в отдельный файл.
Делается это следующим образом: 1 - выбираем нужную геометрию, жмём правую кнопку и vray mesh export. 2 - выбираем путь для файла и его имя. Для того, чтобы при импорте объект был на нужном месте, ставлю галочку export in a single file. Тогда пивот будет в центре координат. 3 - Для импорта открываем вкладку vray и выбираем VrayProxy. Нажимаем в любом месте экрана курсором - появляется диалоговое окно выбора файла.

Прокси обычно отображается, как ящик, чтобы не тратить ресурсы, но можно выставить preview from file. Тогда будет примерно понятно где объект находится. В конце концов, если нужен меш - есть кнопка import as mesh. Геометрия будет с группами сглаживания и ID, всё как надо. Осталось только из библиотеки нужный материал назначить :)
У 3дмакса есть неприятная особенность, а точнее у его модификатора unwrap. Когда его создаешь, то в списке материалов добавляется куча ненужных материалов из unwrap editor, будь то checker или другая текстура. А если моделей в сцене куча и у каждого unwrap - в списке сплошное месиво :) Потому теперь я всегда удаляю unwrap`ы после редактирования.

Еще хотел бы пару слов написать о такой штуке, как asset tracking. Обычно новички боятся таких окон и не вникают, зачем оно надо, сам таким был :) Но штука действительно полезная. В нём можно отслеживать пути к текстурам а заодно можно легко настроить сетевой рендер. Как известно, для рендера по сети нужно, чтобы текстуры лежали на расшареной по сети папке, а в этом менеджере можно сразу всем текстурам сменить путь на сетевой. Чтобы вместо пути "D:\3D\spaceship\module\adapter" назначить путь, например "rendermachine4\module\adapter" надо всего лишь выделить нужные файлы, нажать правой и выбрать set path. Главное скопировать текстуры в сетевую папку, чтобы 3дмакс их нашёл.

Вот вроде бы и всё, постарался описать доступно, если есть вопросы - задавайте. Мне очень не хватало понимания этих вещей раньше, потому, надеюсь, кому-то будет полезно почитать.

Comments