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-ресурси, або моделі (Models), до ваших колекцій (collections). Ви можете створювати повністю тривимірні ігри лише з 3D-ресурсами або довільно поєднувати 3D- та 2D-вміст.
Компонент Model створюють так само, як і будь-який інший компонент (component) ігрового об’єкта (game object). Це можна зробити двома способами:

Після створення моделі потрібно вказати низку властивостей:
Окрім властивостей Id, Position і Rotation, компонент має такі специфічні властивості:
На додачу до наведених вище властивостей для кожної сітки моделі буде поле для призначення матеріалу:
Залежно від матеріалу буде доступна одна або кілька властивостей текстур:
Після додавання компонента Model ви можете редагувати й змінювати компонент і/або ігровий об’єкт, що його містить, за допомогою звичайних інструментів Scene Editor: переміщувати, повертати й масштабувати модель на свій розсуд.
Ви можете керувати моделями під час виконання за допомогою різних функцій і властивостей (див. документацію API з описом використання).

Defold надає потужні можливості керування анімацією під час виконання. Докладніше — у посібнику з анімації моделей:
local play_properties = { blend_duration = 0.1 }
model.play_anim("#model", "jump", go.PLAYBACK_ONCE_FORWARD, play_properties)
Курсор відтворення анімації можна анімувати вручну або за допомогою системи анімації властивостей:
-- set the run animation
model.play_anim("#model", "run", go.PLAYBACK_NONE)
-- animate the cursor
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). Його можна змінити за допомогою властивості ресурсу матеріалу та go.set(). Приклад наведено в довіднику API.playback_ratenumber).textureNhash). Ви можете зчитувати ці властивості за допомогою go.get() і змінювати їх за допомогою властивості ресурсу текстури та go.set(). Defold підтримує щонайбільше 16 текстур на один виклик малювання, але на графічних адаптерах із нижчим обмеженням кількості текстурних семплерів шейдер може використовувати менше текстур.Програми для роботи з 3D зазвичай дають змогу задавати властивості вершин об’єкта, зокрема колір і текстурування. Ця інформація потрапляє у файл glTF .gltf або .glb, який ви експортуєте з програми для роботи з 3D. Залежно від вимог вашої гри вам потрібно вибрати та/або створити відповідні й продуктивні матеріали для ваших об’єктів. Матеріал поєднує шейдерні програми з набором параметрів для рендерингу об’єкта.
За основу можна взяти один із вбудованих матеріалів:
Вбудовані матеріали моделей використовують локальний простір вершин. Для моделей зі скінінгом локальний простір вершин дає змогу вершинному шейдеру виконувати скінінг на 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). vector4 представляє відтінок, де x, y, z і w відповідають червоному, зеленому, синьому й альфа-компонентам відтінку.Стандартний скрипт рендерингу створено спеціально для 2D-ігор, і він не працює з 3D-моделями. Але, скопіювавши стандартний скрипт рендерингу й додавши до нього кілька рядків коду, ви можете ввімкнути рендеринг ваших моделей. Наприклад:
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)) -- orthographic
render.draw(self.model_pred)
render.set_depth_mask(false)
...
end
Докладніше про роботу скриптів рендерингу див. у документації про рендеринг.