This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold по сути является 3D движком. Даже когда работа ведется только с 2D-материалом, весь рендеринг выполняется в 3D, но проецируется на экран ортографически. Defold позволяет полноценно использовать 3D-контент, включая 3D-ассеты, или модели в коллекции. Игры могут быть созданы исключительно в 3D с использованием лишь 3D-ассетов, или же 3D и 2D контент может совмещаться в соответствии с целями разработчика.
Модели создаются так же, как и любой другой компонент игрового объекта. Это можно сделать двумя способами:

После того как модель создана, необходимо определить ряд ее свойств.
Помимо свойств Id, Position и Rotation существуют следующие специфичные для данного компонента свойства:
Помимо свойств выше, также есть поле для назначения материала каждой сетке модели:
gltf для физически корректного рендеринга свойств материала glTF, встроенный материал model для общего затенения модели либо собственный материал. См. варианты материалов ниже и руководство по PBR.В зависимости от материала будет доступно одно или несколько свойств текстур:
При выборе glTF или GLB Scene либо изменении выбранной Mesh редактор может предложить заполнить привязки материалов и текстур. Auto Fill заменяет существующие привязки значениями из исходника; Keep Current сохраняет ваши привязки, применяя новую сцену или сетку. См. порядок импорта модели.
После того, как модель размещена, можно свободно редактировать и манипулировать этим компонентом и/или объемлющим игровым объектом с помощью обычных инструментов Scene Editor, перемещая, вращая и масштабируя модель по своему усмотрению.
Манипулировать моделями во время выполнения можно с помощью ряда различных функций и свойств (обращайтесь к документации по API).

Defold предоставляет мощную поддержку для управления анимацией во время выполнения. За подробностями обращайтесь к руководству по модельной анимации:
local play_properties = { blend_duration = 0.1 }
model.play_anim("#model", "jump", go.PLAYBACK_ONCE_FORWARD, play_properties)
Курсор воспроизведения анимации может быть анимирован как вручную, так и с помощью механизма анимации свойств:
-- задать анимацию run
model.play_anim("#model", "run", go.PLAYBACK_NONE)
-- анимировать курсор
go.animate("#model", "cursor", go.PLAYBACK_LOOP_PINGPONG, 1, go.EASING_LINEAR, 10)
Модели также могут использовать анимации морф-таргетов glTF. Веса морф-таргетов анимируются с помощью model.play_anim(), как и другие анимации модели, и их можно читать или переопределять во время выполнения с помощью model.get_blend_weights() и model.set_blend_weights(). Подробнее см. в разделе о морф-таргетах руководства по модельной анимации.
Модель также имеет ряд различных свойств, которыми можно манипулировать с помощью go.get() и go.set():
animationhash, только для чтения). Анимация изменяется с помощью model.play_anim() (см. выше).cursornumber).materialhash). Это свойство можно изменить с помощью свойства ресурса Material и go.set(). За примером обращайтесь к справочнику по API.playback_ratenumber).textureNhash). Эти свойства можно читать с помощью go.get() и изменять с помощью свойства ресурса текстуры и go.set(). Defold поддерживает не более 16 текстур за один вызов отрисовки, однако на графических адаптерах с меньшим пределом сэмплеров текстур шейдер может использовать меньшее количество.3D-программы обычно позволяют задавать свойства вершин объекта, такие как цвет и текстурирование. Эта информация попадает в файл glTF .gltf или .glb, который экспортируется из 3D-программы. В зависимости от требований игры потребуется выбрать и/или создать подходящие и эффективные материалы для объектов. Материал сочетает в себе шейдерные программы с набором параметров для рендеринга объекта.
В /builtins/materials/ доступны следующие встроенные материалы:
| Тип модели | Общее затенение модели | Затенение glTF PBR |
|---|---|---|
| Статическая, без инстансинга | model.material |
gltf.material |
| Статическая, с инстансингом | model_instanced.material |
gltf_instanced.material |
| Со скиннингом (анимированная), без инстансинга | model_skinned.material |
gltf_skinned.material |
| Со скиннингом (анимированная), с инстансингом | model_skinned_instanced.material |
gltf_skinned_instanced.material |
Материалы gltf предоставляют встроенное освещение metallic/roughness на основе импортированных данных материала glTF. Привязки текстур, освещение и пользовательские шейдеры описаны в руководстве по PBR.
Все эти встроенные материалы используют локальное пространство вершин. Для скелетных моделей локальное пространство вершин позволяет вершинному шейдеру выполнять скиннинг на GPU с помощью текстуры матриц костей; локальное пространство также требуется для инстансинга моделей. Поэтому пользовательский материал для моделей с GPU-скиннингом или инстансингом должен использовать настройку пространства вершин Local.
Кэш матриц костей использует текстуру RGBA32F. Если активный графический адаптер не поддерживает этот формат текстур, Defold не сможет создать анимированный компонент Model, использующий материал в локальном пространстве. Поэтому в OpenGL ES 2.0 и WebGL 1.0 поддержка зависит от расширения адаптера для текстур с плавающей точкой. Для совместимости с адаптером без такого расширения используйте пользовательский материал в мировом пространстве: он выполняет скиннинг на CPU и не поддерживает инстансинг моделей. Размеры кэша можно изменить в настройках проекта Model.
Если необходимо создавать пользовательские материалы для моделей, обращайтесь к документации по материалам. Руководство по шейдерам содержит информацию о работе шейдерных программ.
Стандартный материал model содержит следующие константы, которые можно изменять с помощью go.set() или go.animate() (подробнее см. в руководстве по материалам). Примеры:
go.set("#model", "tint", vmath.vector4(1,0,0,1))
go.animate("#model", "tint", go.PLAYBACK_LOOP_PINGPONG, vmath.vector4(1,0,0,1), go.EASING_LINEAR, 2)
tintvector4). Для представления оттенка с компонентами x, y, z и w, соответствующими красному, зеленому, синему и альфа оттенкам, используется тип vector4.Рендер-скрипт по умолчанию отрисовывает материалы с тегом model, включая встроенные материалы model и glTF. Для их отрисовки в собственном рендер-скрипте создайте соответствующий предикат и отрисуйте его с видом и проекцией, подходящими для сцены. Например:
function init(self)
self.model_pred = render.predicate({"model"})
...
end
function update()
...
render.set_depth_mask(true)
render.enable_state(graphics.STATE_DEPTH_TEST)
render.set_projection(stretch_projection(-1000, 1000)) -- ортографическая
render.draw(self.model_pred)
render.set_depth_mask(false)
...
end
Обращайтесь к документации по рендеру за информацией о работе рендер-скриптов.