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

Компонент Mesh

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

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

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

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

Компонент Mesh в ігровому об’єкті

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

Властивості сітки

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

Material
Матеріал для рендерингу сітки.
Vertices
Файл буфера, що описує дані сітки для кожного потоку.
Primitive Type
Lines, Triangles або Triangle Strip.
Position Stream
Значенням цієї властивості має бути назва потоку position. Потік автоматично передається як вхідні дані до вершинного шейдера.
Normal Stream
Значенням цієї властивості має бути назва потоку normal. Потік автоматично передається як вхідні дані до вершинного шейдера.
tex0
Укажіть текстуру, яку слід використовувати для сітки.

Змінення в редакторі

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

Змінення під час виконання

Ви можете змінювати сітки під час виконання за допомогою буферів Defold. Приклад створення куба зі смуг трикутників:


-- cube
local vertices = {
	0, 0, 0,
	0, 1, 0,
	1, 0, 0,
	1, 1, 0,
	1, 1, 1,
	0, 1, 0,
	0, 1, 1,
	0, 0, 1,
	1, 1, 1,
	1, 0, 1,
	1, 0, 0,
	0, 0, 1,
	0, 0, 0,
	0, 1, 0
}

-- create a buffer with a position stream
local buf = buffer.create(#vertices / 3, {
	{ name = hash("position"), type=buffer.VALUE_TYPE_FLOAT32, count = 3 }
})

-- get the position stream and write the vertices
local positions = buffer.get_stream(buf, "position")
for i, value in ipairs(vertices) do
	positions[i] = vertices[i]
end

-- set the buffer with the vertices on the mesh
local res = go.get("#mesh", "vertices")
resource.set_buffer(res, buf)

Докладніше про використання компонента Mesh, зокрема приклади проєктів і фрагменти коду, дивіться в анонсі на форумі.

Відсікання за об’ємом видимості

Компоненти Mesh не відсікаються автоматично через їхню динамічну природу та неможливість достеменно знати, як закодовано дані позицій. Щоб відсікати сітку, потрібно задати її обмежувальний паралелепіпед, вирівняний за осями, як метадані буфера, використовуючи 6 чисел із плаваючою комою (мінімальні й максимальні значення AABB):

buffer.set_metadata(buf, hash("AABB"), { 0, 0, 0, 1, 1, 1 }, buffer.VALUE_TYPE_FLOAT32)

Константи матеріалу

Стандартний матеріал компонента mesh має такі константи, які можна змінювати за допомогою go.set() або go.animate() (докладніше див. у посібнику з матеріалів). Приклади:

go.set("#mesh", "tint", vmath.vector4(1,0,0,1))
go.animate("#mesh", "tint", go.PLAYBACK_LOOP_PINGPONG, vmath.vector4(1,0,0,1), go.EASING_LINEAR, 2)
tint
Колірний відтінок сітки (vector4). Тип vector4 використовується для представлення відтінку, де x, y, z і w відповідають червоному, зеленому, синьому та альфа-компоненту відтінку.

Локальний і світовий простори вершин

Якщо для параметра Vertex Space матеріалу сітки встановлено значення Local Space, дані передаватимуться до вашого шейдера без змін, і вам потрібно буде, як зазвичай, перетворювати вершини/нормалі на GPU.

Якщо для параметра Vertex Space матеріалу сітки встановлено значення World Space, потрібно або надати стандартні потоки position і normal, або вибрати їх у розкривному списку під час редагування сітки. Це потрібно, щоб рушій міг перетворити дані у світовий простір для об’єднання з іншими об’єктами в пакети.