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, компонент має такі специфічні властивості:

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

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

Material
Укажіть у цій властивості створений вами матеріал, придатний для 3D-об’єкта з текстурою. За основу можна взяти один із вбудованих матеріалів:
  • Використовуйте model.material для статичних моделей без інстансингу (instancing)
  • Використовуйте model_instanced.material для статичних моделей з інстансингом
  • Використовуйте model_skinned.material для моделей зі скінінгом (skinning), тобто анімованих, без інстансингу
  • Використовуйте model_skinned_instanced.material для моделей зі скінінгом (анімованих) з інстансингом

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

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

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

Після додавання компонента 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. Залежно від вимог вашої гри вам потрібно вибрати та/або створити відповідні й продуктивні матеріали для ваших об’єктів. Матеріал поєднує шейдерні програми з набором параметрів для рендерингу об’єкта.

За основу можна взяти один із вбудованих матеріалів:

  • Використовуйте model.material для статичних моделей без інстансингу
  • Використовуйте model_instanced.material для статичних моделей з інстансингом
  • Використовуйте model_skinned.material для моделей зі скінінгом (анімованих) без інстансингу
  • Використовуйте model_skinned_instanced.material для моделей зі скінінгом (анімованих) з інстансингом

Вбудовані матеріали моделей використовують локальний простір вершин. Для моделей зі скінінгом локальний простір вершин дає змогу вершинному шейдеру виконувати скінінг на 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 відповідають червоному, зеленому, синьому й альфа-компонентам відтінку.

Рендеринг

Стандартний скрипт рендерингу створено спеціально для 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

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