Как создавать 3D-модели и сцены для Web3D
Этот документ находится в статусе альфа-версии. Распространение документа возможно только в качестве ссылки на эту страницу. Использование этой страницы позволит всегда использовать актуальную версию документа. |
- Система единиц и измерений
- Требуемая точность
- Правила именования объектов сцены
- Объекты геометрии (Meshes)
- Текстуры
- Материалы
- Animations
- Свет и окружение
- Ограничения
- Быстрое уменьшение количества полигонов
- Backface culling
- Модификатор Decimate
- LOD-объекты
File system
Названия файлов
Наменование главных сцен проекта
1-я часть - название проекта
2-я часть - содержание файла одним словом
3-я часть - версия файла
Название проекта + Содержание + версия
Пример:
Главная сцена для проекта Сюзанна 3-й версии будет выглядеть так:
suzanneSceneV3
Именование вспомогательных 3D сцен
1-я часть - название проекта
2-я часть - содержание файла одним или несколькими словами для передачи смысла
Название проекта + Содержание
Пример:
Сцена для запекания карты нормалей со стен в проекте Suzanne будет выглядеть:
suzanneWallsNrmBaking
Именование LODов объектов
1-я часть - название проекта
2-я часть - точное имя объекта в сцены для которого был создан LOD
3-я часть - “LOD”
4-я часть - диапазон заложенных в файл уровней детализации в виде(_0_3)
Название проекта+название объекта+LOD+Диапазон
Пример:
Файл лодов для объекта table в проекте Suzanne, имеющий 3 ступени детализации:
suzanneTableLOD_0_3
Note: Название файлов, папок и текстур пишутся в стиле camel case:
camelCase.
Именование glb сцен
Если сцена единственна:
scene.glb
Если сцена состоит из нескольких частей:
1-я часть - scene
2-я часть - содержание части
Пример:
Сцена проекта Suzanne состоящая из 3 .glb файлов, в которых хранится комната, окружение и машина, будет состоять из 3 файлов, названных так:
sceneRoom.glb
sceneEnvironment.glb
sceneCar.glb
Note: LODы объектов готовых к работе с web (в формате glb) называются так же как и исходная сцена с лодом.
Именование текстур
Если текстура применяется для многих объектов (baseTexture):
- 1-я часть - название текстуры, описывающее содержание
- 2-я часть - тип текстуры
- 3-я часть - ключ “Tx”
Если текстура применима только для конкретного объекта (uniqueTexture):
- 1-я часть - ключ “u”
- 2-я часть - название объекта, для которого применяется текстура
- 3-я часть - тип
- 4-я часть - ключ “Tx”
Сокращение типов текстур:
- def - Diffuse (Albedo)
- rgh - Roughness (micro surface)
- nrm - Normal
- met - Metallic (met)
- emit - Emissive
- alpha - Alpha(Opacity/Transparency)
- mask - Mask (только ч/б текстур)
- mul - Текстура, используемая для нескольких свойств
Пример:
Diffuse текстура для конкретного объекта Suzanne: uSuzanneDifTx
Roughness текстура для общей текстуры дерева: woodRghTx
Особые случаи
Текстуры .env для окружения называются так:
envName.env, где envName-содержимое этой текстуры.
Пример:
env неба: sky.env
Кубические текстуры
Кубические карты отражения являются набором из 6 текстур, называемых следующим образом:
reflectionBoxName + _coordinates(nx/pz/px/nz/ny/py)
Например, если у вас есть текстура отражений sunnyDay, то её нужно распределить на:
- sunnyDay_nx
- sunnyDay_pz
- sunnyDay_px
- sunnyDay_nz
- sunnyDay_py
- sunnyDay_ny
Формат таких текстур - jpg
Note: Использование полных названий типов текстур допускается.
Организация файлов
GLB файлы в репозитории
- www
- projectName
- src
- assets
- meshes
- sceneName
- scene.glb
Note: LODы добавляются сюда же
Локальная структура
- Work
- customerName
- projectName
- sources
- models
(Все модели и сцены над которыми велась работа) - textures
(Все текстуры, используемые сценой) - outerResources
(Все внешние ассеты и текстуры, которые в итоге были добавлены в проект) - references
(Исходники-чертежи, изображения, на которых делается опора при создании сцены) - etc
(Файлы, которые не вошли перечисленные папки) - export
(Файлы для экспорта (glb, fbx и т.д.))
Исходники проекта в репозитории
- www
- projectName
- sources
- scenes
- sceneName
- Далее-структура, повторяющая локальную после “projectName”
Note: Исходники LODов добавляются сюда же
Текстуры
- www
- projectName
- src
- assets
- textures
- Далее происходит разветвление по назначению текстур. Общие текстуры хранятся в common, а текстуры для эффектов располагаются в common/fx.
Note: В случае, если вы затрудняетесь с организацией структуры файлов в репозитории - лучше обратиться к ответственному координатору проекта, чем вносить структурные изменения после.
Warning!
НИКОГДА не храните свои исходники в одном месте на одном носителе. Храните их в двух местах, регулярно делая резервную копию на второй носитель, и добавляйте свои исходники в git после каждого этапа работы.
Правила обозначения версий:
- Версия 0.0
Начало работы с моделями (создание/ретопология), костяк сцены. Как правило здесь присутствуют примитивные материалы, отсутствуют сложные анимации. - Версия 1.0
Работа над моделями закончена, стартует работа с материалами, светом. Создаются LOD-объекты для сцены, если это требуется. - Версия 2.0
Начата работа с анимациями. - Версия 3.0
Работа с анимациями завершена, начата работа с интерактивом, специальными объектами для связи с программной частью, пост-эффектами. - Версия 4.0
Все этапы создания сцены завершены. Внесены поправки со стороны заказчика и отдела разработки.
Note: Разумеется, не всегда удаётся следовать такому порядку, но в целом характер разработки должен следовать указанному.
Scene
Система единиц и измерений
В проекте принято использовать метрическую систему измерения. Из Blender в формат glb экспорт происходит 1 к 1, в плане размеров.
С углами можно работать в двух системах:
- В системе Эйлера (Euler angles)
- В кватернионах (Quaternion angles)
Для большинства случаев использование углов Эйлера предпочтительнее.
Выставить указанную систему мер можно на вкладке Scene->Units в Blender
Требуемая точность
При создании геометрии
Максимальное расхождение в точности при создании модели по точному чертежу с нанесёнными размерами: 1/1000
Например, если размер модели 1м, то максимальная погрешность составляет 1мм.
В случае, если модель создавалась по референсу без размеров, то точность зависит от качества самого референса и важности модели в сцене. В случае, когда даже приблизительные размеры объекта неизвестны - можно воспользоваться оценкой через вспомогательные источники информации. Например, если речь идёт о здании - оценить его высоту по близким объектам, таким, как деревья, люди и др. предметам, находящимся на этом или другом референсе того же объекта.
Также, в случаях, когда это возможно, стоит использовать snapping-инструмент для привязке к фиксированной сетке сцены. Это позволяет снизить вероятность ошибок в размерах объектов и откинуть лишние знаки после запятой в координатах точек.
Note: Иногда точность геометрии должна быть соблюдена на 100%. Подробнее об этом можно прочитать в пункте “Топология объекта”.
При создании анимаций
Ключи
Анимации не должны содержать ключ в каждом кадре, кроме редких случаев, когда это необходимо. Число ключей анимации в общем случае не должно превышать 50 значений, если число ключей выше, тому должно быть обоснование.
Когда необходимо анимировать свойство объекта, например, позицию или размер, ключ необходимо ставить на все 3 координаты анимируемого свойства. GLTF экспорт из Blender поддерживает анимирование позиции, размера, поворота.
Циклические анимации
Анимации не должны содержать скачков при переходе через границу цикла, кроме случаев, когда это сделано намеренно.
При создании циклических анимаций необходимо удостовериться, что не используется многократное повторение одних и тех же ключей. Описывать нужно только один повтор циклической анимации.
Интерполяция анимаций
Анимации могут использовать линейную интерполяцию или интерполяцию кривыми Безье. Оба типа интерполяции присутствуют в blender, и в большинстве случаев стабильно работают при экспорте в glb формат.
При создании текстур
Размеры текстур должны быть выровнены по степеням двойки, т.е:
- 8
- 16
- 32
- 64
- 128
- 256
- 512
- 1024
- 2048
- 4096
Если вы хотите использовать другое соотношение сторон (отличное от 1:1) и размер, то для этого должны быть основания.
Наиболее ходовыми размерами являются 256, 512, 1024, 2048.
Характерный объём памяти для текстур:
- 256 : < 50 кб
- 512 : < 100 кб
- 1024 : < 500 кб
- 2048 : < 1 мб
Если текстура указанного разрешения занимает много больший объём (превышающий референсные значения в 1.5 или более раз), то её разрешение стоит уменьшить или провести сжатие, в случае, если это сделать невозможно, должно быть обоснование причины.
Текстуры, размером выше 4096 недопустимы для web-разработки из-за чрезмерно большого объёма.
При позиционировании объектов в сцене
0-Уровень
Все объекты должны располагаться выше нулевого уровня, кроме случаев, когда они расположены ниже уровня поверхности в предметной области (приямки, скважины и т.д.).
Оси и шарниры
Оси вращения взаимно связанных деталей должны совпадать с точностью 100%.
Например, не допускается смещение осей вращения вала, шестерни на нём, подшипника вала.
Правила именования объектов сцены
Объекты геометрии(Meshes)
Называются с маленькой буквы, если слов несколько, между ними пишется нижнее подчёркивание. Название объекта должно содержать его смысловую нагрузку.
Например:
- lamp_switcher - для выключателя лампы
- car_engine - для двигателя машины и т.д.
Узлы(Nodes)
Узлы называются в стиле camelCase, и название должно говорить о назначении узла в сцене. Если узел служит для контроля над группой объектов или над одним объектом, в конец названия обязательно дописывается “Controller”.
Например:
suzannesController - узел, к которому привязаны Сюзанны
Существуют также системные узлы, для которых используются особые правила.
Ключевой системный узел сцены называется: @_SETTINGS_@, к нему привязываются другие узлы, в начало которых пишется @.
Например:
Note: В сценах узел @_SETTINGS_@ может не присутствовать. Но правило для обозначения системных узлов сохраняется.
Материалы
Правила для именования материалов аналогичны правилам для объектов геометрии.
Анимации
Названия анимаций строятся следующим образом:
objectName + actionCharacteristic + Anim
Например:
Для объекта с именем bigСube анимация вращения будет выглядеть следующим образом:
bigCubeRotationAnim или bigCubeRotAnim.
Название анимации должно нести информацию о её действии в предметной области.
Например:
bigTubeRotAnim - плохое именование
mainShaftRotCycleAnim - заметно лучше
UV-карты
На данный момент в blender создаётся 2 базовых UV карты.
Названия UV должны нести информацию о том для чего они были созданы. Если UV карта у объекта одна-можно оставить её название таким как есть, но при добавлении 2-ой карты нужно дать названия.
Например:
1-uvMain
2-uvAlpha
1-я для основных каналов
2-я для прозрачности
Названия пишутся в стиле camelCase.
Подробнее в пункте 11 - “Материалы”.
Коллекции (Если Blender выступает в роли 3D редактора)
Именуются в стиле camelCase, коллекция должна отражать смысл, который она несёт в себе.
LOD-объекты
LOD-объекты именуются по следующим правилам:
Имя объекта- источника+ LOD+ номер lod.
Например:
2-ой LOD Сюзанны будет выглядеть следующим образом:
suzanne_LOD2
Объекты геометрии (Meshes)
Топология
Дубли
Ни в одной геометрии не должно быть ни одного дубля.
Нормали
Нормали объекта должны быть ориентированы правильно:
- В общем случае нормали единой поверхности должны быть направлены в одну сторону
- В случае, если все нормали направлены в правильную сторону, то при включении режима backface culling для соответствующего материала этого объекта, он будет выглядеть как ожидается, в противном случае появятся артефакты, такие как дыра на поверхности геометрии и отсутствующие плоскости.
- Используйте ориентацию нормалей в своих целях, например, для сокрытия объектов-триггеров взаимодействия с окружением.
Острые грани (sharp edges)
Активно используйте используйте инструмент sharpEdges для эмуляции острых граней объекта, обратите внимание, как меняется восприятие одной и той же сетки при разном выделении острых граней:
На первом изображении нет острых граней
На втором они выделены на кромке углубления.
Также добавляйте фаски высокодетализированным объектам, но не стоить забывать и об ограниченном полигонаже. См. Optimization
Модификатор Boolean
Использовать модификатор boolean только в самых экстренных случаях, когда другого выхода нет, или при создании карты нормалей для объекта.
Отверстия
Минимизируйте создание отверстий с помощью геометрии - используйте текстурный подход к проблеме отверстий. См. Optimization
Треугольники и многоугольники
Треугольники и многоугольники в геометрии допустимы, но их использование должно быть обосновано.
Например, если вы зашиваете края трубы, превращая её в цилиндр - применение n-гона вполне оправдано.
Триангулированная топология недопустима.
Точность
В геометрии объектов не должно возникать топологической неточностей, таких как:
- Расхождение точек плоскости
- Лежащие в разных плоскостях точки n-гона
- Наслоение граней
- Необоснованное использование большого количества граней.
- Несоответствие числа точек внешней и внутренней замкнутой линии при создании отверстий
Ключи формы
Названия ключей форм должно соответствовать действию, которое они выполняют.
Ключи форм не должны задействовать полигоны, которые не касаются данного ключа форм
Ключи форм поддерживают сохраняют анимации при экспорте в GLTF. Работа с такими анимациями аналогична работе с классическими анимациями.
UV-карта
Правила создания UV-карт:
- UV-карта должна рационально использовать пространство текстуры.
- Части UV-карты одного объекта не должны пересекаться.
- У качественной UV-карты должно быть минимальное количество швов.
- Не рекомендуется масштабировать UV-карту в большую или меньшую стороны
- Активно обозначайте грани, по которым вы планируете провести швы текстур
- Не стесняйтесь пробовать различные подходы к полуавтоматическим развёрткам для достижения наилучшего результата.
- Независимые части (islands) UV-карты должны быть единого масштаба. Чтобы это проверить, добавьте на объект текстуру квадратов. Если карта создана правильно, то размеры квадратов на всей модели будут одинаковы.
Текстура, которая может быть использована для проверки:
Иерархия сцены
Коллекции
Каждая обособленная группа объектов, объединённых по функциональному признаку должна состоять в коллекции, название которой отражает её смысловое содержание.
Например:
Есть какая-либо установка, назовём её unit. У unit 50 деталей, каждая из которых является отдельным объектом, тогда необходимо создать коллекцию unit, в которой будут находится все детали, относящиеся к unit.
Группировка объектов узлами преобразований
Помимо коллекций, по такому же принципу создаются узлы преобразований (empty), к которым привязываются объекты:
Та же установка, необходимо создать трансформ-нод unit, в котором будут находится все детали, относящиеся к unit.
Узлы преобразований, в отличие от коллекций сохранят иерархию ваших объектов и после экспорта сцены в glb формат. Поэтому вы можете использовать коллекции для группировки сторонних и вспомогательных ресурсов сцены, которые не должны быть экспортированы в glb.
Системные узлы
Системные узлы находятся в коллекции с названием settings. В этой же коллекции создаётся трансформ-нод с именем @_SETTINGS_@ (было описано выше). К @_SETTINGS_@ привязаны все трансформ-ноды, отвечающие за системные узлы. К системным узлам относятся @viewPointSystem, @area, @walls и другие
Note: Mesh-объекты также могут выступать родителями для других объектов, но желательно, чтобы такое происходило только внутри локальной группы объектов.
Навигация
Поворот объектов. Локальные оси объекта должны совпадать с глобальными осями объекта, если расхождение этих осей не обосновано геометрией или функционалом объекта.
Ориентация
В пространстве оси симметрии объектов должны быть коллинеарны с локальными осями координат объекта.
Note: Правилом можно пренебречь, если на то имеются основания.
Ориджины (Origins)
Ориджин объекта зависит от:
- Геометрии:
Если объект не имеет специфических свойств и параметров, то ориджин объекта определяется как стереометрический центр всех точек его поверхности (Центр масс объекта равной плотности).
- Оси вращения объекта
Если объект имеет физическую ось вращения в месте, отличающемся от его геометрического центра, то его ориджин перемещается в точку оси вращения.
Например: Рычаг
- Исключительные случаи.
Случаи, когда необходимо указывать специфический origin объекта.
Например: при распределении предметов, стоящих на поверхности, таких как деревья, или, например, цветочные горшки, удобно размещать origin в месте касания поверхности. В таком случае их очень удобно масштабировать и поворачивать.
Применение (фиксация) координат (Apply coordinates)
Когда нужно применять трансформацию объектов:
- Rotation
Всегда, исключая случаи, когда: - объект участвует в анимации вращения
- поворот объекта требуется сохранить, чтобы комфортно работать с ним в дальнейшем
- Scale:
Применяется во всех случаях.
Warning!
Не забудьте применить все преобразования, которые будут затронуты анимацией, до того, как вы создали её, иначе в дальнейшем будут значительные проблемы при попытке применения трансформации.
Текстуры
Неиспользуемые области текстур
Те, в которые не попадает поля UV-карты, должны быть однотонно закрашены. Общее простое правило, работающее в большинстве случаев - чем больше энтропия изображения (разнообразие и количество передаваемых деталей), тем больше размер файла после сжатия. Ограничивайте размеры и детализацию разумными рамками.
PNG и JPG, сжатие
Все текстуры, не имеющие альфа-канала предпочтительно используют формат jpg. Текстуры с альфа-каналом - png. Качество jpg текстур выставлять от 60% до 95% в зависимости от степени визуального ухудшения качества.
Для шкал приборов, деталей, которые будут воспроизводиться с большим увеличением - качество выше.
К файлу текстуры (в случае, если текстура не получена уже готовой, а обрабатывалась или создавалась) необходимо предоставлять исходные файлы текстур в форматах PSD или XCF.
Все слои отдельно. Где возможно использовать векторный слой - используется векторный слой.
Название слоя должно отражать смысловую нагрузку, которую несёт слой.
Для масок нужно использовать формат png.
Для текстур с множеством деталей используется формат jpg.
Необходимо трезво оценивать выбор степени сжатия и размера текстур, бережно подходить к неиспользуемым пространствам.
Запекание
Для запекания текстур создаётся отдельный файл, который называется: projectName + (что запекается) + Bake.
Пример:
Есть проект suzanne. Файл с запекаемым AO будет называться suzanneAoBake.
Правила запекания:
- Запекать стоит статичные тени, карты нормалей, AO-эффекты - то, что не меняется с течением времени
- Если вы запекаете тени и AO - то следует использовать Combined bake type и простой диффуз-материал. Тогда не будет необходимости объединять 2 текстуры в одну.
- Стоит объединять diffuse-карту и light-map в одну текстуру везде, где это возможно по условиям построения сцены.
Warning!
- НАСТОЯТЕЛЬНО НЕ РЕКОМЕНДУЕТСЯ использовать размеры текстур, детали которых не попадут на экран.
Например: есть камень на удалении 500 метров, который занимает максимум 20px, значит размер его текстур не должен быть больше 64-128 px. - ВАЖНО ПОМНИТЬ О СОБЛЮДЕНИИ ОБ АВТОРСКИХ И СМЕЖНЫХ ПРАВ! Скачанные текстуры не должны быть токсичны в этом аспекте.
Substance painter
При использовании программы Substance Painter или аналогичной нужно следовать ряду правил:
- Текстуры создаются в разрешении 4к или 2к, затем они сжимаются до нужных размеров с помощью средств GIMP или Adobe Photoshop постфактум.
- Текстуры для разных материалов одного объекта пакуются в одну текстуру с помощью стороннего графического редактора или другими средствами. Т.е. если для объекта есть 2 diffuse-текстуры, то в финале она должна быть одна и являться объединением двух, аналогично и с другими картами.
- Название слоя должно отражать смысловую нагрузку, которую несёт слой
- Исходники в формате spp также должны быть предоставлены
Материалы
Ноды и техники, поддерживаемые GLTF при использовании Blender
См. документацию по GLTF в Blender: Документация
Текстуры, подключаемые к каналам должны соответствовать им, но в случае надобности не запрещается подключать одну текстуру на несколько каналов.
Цветовое пространство всех текстур, кроме baseColor и Alpha должно быть выставлено на non-color space.
Для добавления материалу альфа-канала нужно включить этому материалу режим alpha blend. Для всех материалах, не несущих в себе альфа-канал - необходимо включить этому материалу режим opaque.
Occlusion, roughness и metallic карты пакуются как одна текстура. Значение каждого канала результирующей текстуры является одной из карт:
- R : Occlusion
- G : Roughness
- B : Metallic
Такую паковку можно выполнить, используя GIMP, Photoshop, Blender и д.р.
Animations
Типы интерполяции, поддерживаемые GLTF при экспорте из blender:
- Linear:
Значения ключей изменяются через простые линейные функции. Используется, как правило, в циклических анимациях, которые многократно повторяются, например, вращение лопастей вентилятора; - Bezier curve:
Значения ключей изменяются с использованием сглаживания посредством кривых Bezier
При использовании Bezier-интерполяции необходимо выравнивать контроллеры точки Bezier так, чтобы прямая, образуемая контроллерами, была горизонтальна.
При создании ключа трансформации объекта (location, rotation или scale) все три параметра этих трансформаций должны иметь ключ в данной точке.
Если вы хотите создать 2 анимации для объекта, то сначала нужно создать и сделать pushDown первой, затем удалить её, создать вторую и сделать pushDown второй, чтобы обе анимации появились в NLA editor. Для каждой анимации понадобится создать свой NLA track.
О создании циклических анимаций и правил расставления ключей смотрите в разделе "Точность анимаций"
Свет и окружение
Свет
Соотношения интенсивностей в Blender и BABYLON при использовании gltf формата:
Light type |
Intensity in Blender |
Intensity in BABYLON |
---|---|---|
PointLight |
10W |
1 |
DirectionalLight |
1W |
1 |
SpotLight |
100W |
5 |
Как видно из таблицы, интенсивности источников света для BABYLON и Blender в некоторых случаях значительно отличаются, это нужно учитывать.
Не забывайте проверять свои glb файлы во время работы. См. Инспектирование
Note: Не забывайте запекать статичные тени от объектов, Ambient Occlusion, или Diffuse целиком.
Используйте .env текстуры окружения. Чтобы их получить, можно использовать обычную текстуру одного из распространённых форматов, а затем с помощью программы IBLBaker создайте dds файл, в конце названия которого будет EnvHDR.dds.
Далее используя BABYLON Viewer сохраните эту текстуру в формате env, которую можно использовать в BABYLON. Для этого в BABYLON Viewer откройте инспектор, предварительно загрузив любую модель:
Перейдите на вкладку Scene в меню Explorer и обновите текстуру окружения на созданную (dds).
После этого
На компьютер будет загружена .env текстура, которая может быть удобно использована в работе с BABYLON.
Note: BABYLON может использовать и обычные .hdr текстуры, но, как правило, размер таких текстур довольно большой (16-20 мб), что не рекомендуется для Web 3D.
Окружение
Окружение (Дальние планы), как правило, состоит из нескольких уровней:
- Самый дальний уровень - текстура неба, для неё можно использовать SkyBox или, что более предпочтительно, куполовидную/цилиндроподобную конструкцию.
- Далее - второй уровень, обычно это низкодетализированная поверхность земли/гор/пустыни и т.д., зависит от задумки автора
- Третий уровень - это мелкие объекты, такие как дома, деревья и т.п. объекты, которые находятся на достаточно большом расстоянии. Такие объекты должны обладать минимальным уровнем детализации.
Оптимизация
Ограничения
Ограничение по количеству полигонов зависит от каждой конкретной сцены. Целевой “вес” сцен: 100-200 килофейсов.
Note: Это не строгие значения, в зависимости от сцены и требований заказчика они могут меняться.
Во время ретопологии cad-моделей (типичный полигонаж 2-4 млн полигонов), количество полигонов должно быть сокращено до 5-35 тысяч полигонов, если модель используется совместно с другими моделями в сцене, 50-100 тысяч, если модель на сцену одна. Чем выше степень уменьшения полигонов, тем лучше. Используйте текстурный подход к созданию отверстий и другие “хитрости” для уменьшения количества полигонов при сохранении внешнего вида объектов.
Быстрое уменьшение количества полигонов
В геометрии не должно быть полигонов, которые никогда не могут быть видимыми (днища, полигоны, обращённые к “земле” и т.д.) Должны быть нейтрализованы дубли у объектов. Следует обратить внимание на круги (cap), закрывающие цилиндрические геометрии, так как закрывание геометрии к центру, требует большее количество полигонов, чем закрывание по окружности одним фейсом. Разница видна при триангуляции. Цилиндрические геометрии, как правило, слишком тяжелы у входящих моделей, не стоит создавать цилиндрические формы с количеством граней по кругу более 32.
Изображения демонстрируют текстурный подход к эмуляции геометрии. Подобным образом можно делать не только отверстия, но и любые другие углубления.
Backface culling
Для всех материалов, где это возможно, необходимо включать backface culling mode.
Модификатор Decimate
Использование модификатора decimate может значительно уменьшить количество полигонов объекта, но им стоит пользоваться осторожно и не применять к объекту (он применится автоматически при экспорте).
Warning!
Модификатор decimate хоть и является быстрым решением для упрощения геометрии пользоваться им постоянно не следует, так как он буквально уничтожает геометрию объекта после чего дальнейшие манипуляции над ним становятся практически невозможными.
LOD-объекты
Количество и параметры LOD-объектов определяются, исходя из конкретной сцены и здравого смысла.
Общие принципы:
- Внутренние части модели должны существовать отдельно от её внешней части. Или же должно быть разработано минимум две версии модели для просмотра внутреннего строения объекта, если оно имеется, и внешнего (CUT).
- LOD-объекты, обычно используются для объектов со сложной геометрией. И деградация качества модели происходит обратно пропорционально расстоянию до объекта, в единицах длины самого объекта.
- LOD-проекты называются особым образом и хранятся в отдельных файлах и экспортируются в отдельные .glb сцены.
- Объекты, имеющие LOD, в основном используют материалы из библиотеки материалов, их названия должны соответствовать названиям материалов из библиотеки.
Warning!
Лоды не работают сами по себе, поэтому, прежде чем начинать их создание, нужно точно установить, для каких объектов сцены они будут, для каких нет, и будут ли они вообще.
Инспектирование:
Не забывайте использовать BabylonJS Viewer для проверки объектов, которые были экспортированы в glb формат. Этот инструмент поможет подобрать вам нужные значения интенсивностей ламп а также позволит обнаружить недочеты.
Viewer
Руководство пользования инспектором
Экспорт
Формат
При экспорте используется бинарный GLTF формат: glb
Включённые файлы
Будут экспортированы только выделенные объекты и свет
Трансформации
Ось Y смотрит вверх
Геометрия
Будут применены модификаторы, экспортированы UV карты, нормали и цвета вершин. Материалы. Изображения пакуются в файл.
Компрессия не используется, так как она работает не везде и не всегда стабильно.
Анимации
Always sample animation
Ставит ключи с фиксированной частотой.
Warning!
Пункт Always sample animation должен быть ВЫКЛЮЧЕН. Если вы всё же включили его, у вас должно быть веское для этого основание.
Group by NLA track
Добавляет NLA дорожки, что позволяет хранить несколько анимаций для одного объекта. Используйте если у ваших объектов есть больше 1 анимации.
Shape key
Экспорт ключей формы
Skinning
Экспорт скелетов в glb.
Правила паковки текстур
Текстуры, в дополнительной настройке которых не принимает участие разработчик, пакуются в glb. Текстуры, размером более 1024px и текстуры, которые будут подвержены дальнейшей разработке, не паковать.
Этот документ находится в статусе альфа-версии. Распространение документа возможно только в качестве ссылки на эту страницу. Использование этой страницы позволит всегда использовать актуальную версию документа. |