Manuals
Manuals




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

Компонент Model

Defold за своєю суттю є 3D-рушієм. Навіть коли ви працюєте лише з 2D-матеріалами, увесь рендеринг виконується в 3D, але з ортографічною проєкцією на екран. Defold дає змогу повноцінно використовувати 3D-вміст, додаючи 3D-ресурси, або моделі (Models), до ваших колекцій (collections). Ви можете створювати повністю тривимірні ігри лише з 3D-ресурсами або довільно поєднувати 3D- та 2D-вміст.

Створення компонента Model

Компонент Model створюють так само, як і будь-який інший компонент (component) ігрового об’єкта (game object). Це можна зробити двома способами:

  • Створіть файл Model, клацнувши правою кнопкою миші потрібне місце в браузері Assets і вибравши New... ▸ Model.
  • Створіть компонент, вбудований безпосередньо в ігровий об’єкт, клацнувши правою кнопкою миші ігровий об’єкт у поданні Outline і вибравши Add Component ▸ Model.

Модель в ігровому об’єкті

Після створення моделі потрібно вказати низку властивостей:

Властивості моделі

Окрім властивостей Id, Position і Rotation, компонент має такі специфічні властивості:

Scene
Файл glTF .gltf або .glb, що містить геометрію моделі. Якщо файл містить цілі морфінгу (morph targets), їх імпортують разом зі сценою. Раніше ця властивість називалася Mesh.
Mesh
Необов’язкова іменована сітка з вибраної Scene. Залиште це поле порожнім, щоб рендерити всю сцену з її імпортованими трансформаціями. Виберіть сітку, щоб рендерити її один раз у локальних координатах, без трансформацій вузлів glTF. Щоб розмістити вибрану сітку, змініть позицію, поворот і масштаб компонента моделі або його ігрового об’єкта.
Create GO Bones
Увімкніть цей параметр, щоб створити ігровий об’єкт для кожної кістки моделі. Ці ігрові об’єкти можна використовувати для прикріплення інших ігрових об’єктів, наприклад зброї до кісток рук тощо.
Skeleton
Ця властивість має посилатися на файл glTF .gltf або .glb, що містить скелет для анімації. Зауважте, що Defold вимагає єдиної кореневої кістки в ієрархії.
Animations
Укажіть тут Animation Set File, що містить анімації, які ви хочете використовувати для моделі.
Default Animation
Це анімація (з набору анімацій), яка автоматично відтворюватиметься на моделі.

На додачу до наведених вище властивостей для кожної сітки моделі буде поле для призначення матеріалу:

Material
Задайте матеріал, придатний для моделі. Використовуйте вбудований матеріал gltf для фізично коректного рендерингу властивостей матеріалів glTF, вбудований матеріал model для загального шейдингу моделей або власний матеріал. Див. варіанти матеріалів нижче і посібник із PBR.

Залежно від матеріалу буде доступна одна або кілька властивостей текстур:

Texture
Ця властивість має вказувати на зображення текстури, яку ви хочете застосувати до об’єкта. Це може бути окремий ресурс проєкту або вбудоване зображення під файлом glTF чи GLB на панелі Assets.

Після вибору glTF або GLB у Scene чи зміни Mesh редактор може запропонувати заповнити прив’язки матеріалів і текстур. Auto Fill замінює наявні прив’язки прив’язками з джерела; Keep Current зберігає ваші прив’язки, застосовуючи новий вибір сцени або сітки. Див. процес імпорту моделей.

Редагування в редакторі

Після додавання компонента Model ви можете редагувати й змінювати компонент і/або ігровий об’єкт, що його містить, за допомогою звичайних інструментів Scene Editor: переміщувати, повертати й масштабувати модель на свій розсуд.

Керування під час виконання

Ви можете керувати моделями під час виконання за допомогою різних функцій і властивостей (див. документацію API з описом використання).

Wiggler у грі

Анімація під час виконання

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():

animation
Поточна анімація моделі (hash) (ЛИШЕ ДЛЯ ЧИТАННЯ). Анімацію змінюють за допомогою model.play_anim() (див. вище).
cursor
Нормалізований курсор анімації (number).
material
Матеріал моделі (hash). Його можна змінити за допомогою властивості ресурсу матеріалу та go.set(). Приклад наведено в довіднику API.
playback_rate
Швидкість відтворення анімації (number).
textureN
Текстури моделі, де N — від 0 до 15 (hash). Ви можете зчитувати ці властивості за допомогою 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)
tint
Кольоровий відтінок моделі (vector4). vector4 представляє відтінок, де x, y, z і w відповідають червоному, зеленому, синьому й альфа-компонентам відтінку.

Рендеринг

Стандартний скрипт рендерингу малює матеріали з тегом 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))  -- orthographic
    render.draw(self.model_pred)
    render.set_depth_mask(false)
    ...
  end

Докладніше про роботу скриптів рендерингу див. у документації про рендеринг.