Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Прототипування рівнів з CSG

CSG розшифровується як Constructive Solid Geometry і є інструментом для комбінування базових форм або спеціальних сіток для створення більш складних форм. У програмному забезпеченні для 3D-моделювання CSG здебільшого відомий як «булеві оператори».

Створення прототипів рівня є одним із основних застосувань CSG у Godot. Ця техніка дозволяє користувачам створювати найпоширеніші форми, комбінуючи примітиви. Внутрішнє середовище можна створити за допомогою перевернутих примітивів.

Примітка

Вузли CSG у Godot в основному призначені для створення прототипів. Немає вбудованої підтримки UV-картографії або редагування 3D-полігонів (хоча екструдовані 2D-полігони можна використовувати з вузлом CSGPolygon3D).

Якщо вам потрібен простий у використанні інструмент розробки рівнів для проекту, ви можете скористатися FuncGodot або Cyclops Level Builder замість цього.

Дивись також

Ви можете перевірити, як використовувати вузли CSG для побудови різних фігур (наприклад, сходів або доріг), використовуючи демонстраційний проект Constructive Solid Geometry <https://github.com/godotengine/godot-demo-projects/tree/master/3d/ csg>`__.

Загальні відомості про вузли CSG

Як і інші особливості Godot, CSG підтримується у вигляді вузлів. Це вузли CSG:

../../_images/csg_nodes.png ../../_images/csg_mesh.png

Функції інструментів CSG

Кожен вузол CSG підтримує 3 види логічних операцій:

  • Об'єднання: Геометрія обох примітивів об'єднується, геометрія, що перетинається, видаляється.

  • Перетин: Залишається лише перетинна геометрія, решта видаляється.

  • Віднімання: Друга фігура віднімається від першої, залишаючи вм'ятину з її формою.

../../_images/csg_operation_menu.png ../../_images/csg_operation.png

Вузол CSGPolygon

Вузол CSGPolygon3D витягується вздовж багатокутника, намальованого у 2D (у координатах X, Y) у такий спосіб:

  • Глибина: Видавлено назад на задану величину.

  • Обертання: Екструдується під час обертання навколо початку координат.

  • Path: Видавити вздовж вузла Path. Цю операцію зазвичай називають лофтингом.

../../_images/csg_poly_mode.png ../../_images/csg_poly.png

Примітка

Для роботи режиму Path має бути надано вузол Path3D. У вузлі «Шлях» намалюйте шлях, і багатокутник у CSGPolygon3D витягнеться вздовж заданого шляху.

Власні меші

Спеціальні сітки можна використовувати для CSGMesh3D, якщо сітка є різноманітною. Сітку можна моделювати в іншому програмному забезпеченні та імпортувати в Godot. Підтримується кілька матеріалів.

Щоб сітка використовувалася як сітка CSG, необхідно:

  • бути закритим

  • щоб кожен край з’єднувався лише з двома гранями

  • мати обсяг

І рекомендується уникати:

  • негативний обсяг

  • самоперетин

  • внутрішні грані

Godot використовує бібліотеку manifold для реалізації сіток CSG. Технічне визначення «різноманітності», використане Godot, є наступним, адаптованим із визначення «різноманітності» цієї бібліотеки:

Кожне ребро кожного трикутника має містити ті самі дві вершини (за індексом), що й інше ребро трикутника, а початкова та кінцева вершини мають мінятися місцями між цими двома ребрами. Вершини трикутника повинні з’являтися в порядку за годинниковою стрілкою, якщо дивитися з зовнішньої сторони колекторної сітки двигуна Godot.

../../_images/csg_custom_mesh.png

Створення існуючого сітчастого колектора за допомогою Blender

Якщо у вас є існуюча сітка, яка ще не є колектором, ви можете зробити його колектором за допомогою Blender.

У Blender встановіть і ввімкніть додаток 3D Print Toolbox.

Виберіть сітку, яку ви хочете зробити колектором. Відкрийте бічну панель, натиснувши на стрілку:

../../_images/csg_manifold_step_1.webp

На вкладці 3D Print у розділі Clean Up натисніть кнопку Make Manifold:

../../_images/csg_manifold_step_2.webp

Тепер сітка має бути різносторонньою, і її можна використовувати як власну сітку.

Комбінатор CSG 3D

Вузол CSGCombiner3D — це порожня форма, яка використовується для організації. Він об’єднає лише дочірні вузли.

Порядок обробки

Кожен вузол CSG спочатку оброблятиме свої дочірні вузли та їхні операції: об’єднання, перетин або віднімання, у порядку дерева, і застосовуватиме їх до себе один за одним.

Примітка

В інтересах продуктивності переконайтеся, що геометрія CSG залишається відносно простою, оскільки обробка складних мешів може зайняти деякий час. Якщо ви додаєте об'єкти разом (наприклад, об'єкти стола та кімнати), створюйте їх як окремі дерева CSG. Обробка занадто великої кількості об'єктів в одному дереві в кінцевому підсумку почне впливати на продуктивність. Використовуйте бінарні операції тільки там, де вони вам дійсно потрібні.

Прототипування рівня

Ми створимо прототип кімнати для практики використання інструментів CSG.

Порада

Робота в ортогональній проекції дає кращий вигляд на поєднання форм CSG.

Наш рівень буде містити такі об'єкти:

  • кімнату,

  • ліжко,

  • лампу,

  • стіл,

  • книжкову полицю.

Створіть сцену з вузлом Node3D як кореневим вузлом.

Порада

Освітлення середовища за замовчуванням не забезпечує чіткого затінення під деякими кутами. Змініть режим відображення за допомогою Display Overdraw у меню 3D-огляду або додайте вузол DirectionalLight, щоб краще бачити.

../../_images/csg_overdraw.png

Створіть CSGBox3D і назвіть його room, увімкніть Invert Faces і змініть розміри вашої кімнати.

../../_images/csg_room.png ../../_images/csg_room_invert.png

Далі створіть CSGCombiner3D і назвіть його desk.

Стіл має одну поверхню і 4 ноги:

  • Створіть 1 дочірній вузол CSGBox3D у режимі Union для поверхні та налаштуйте розміри.

  • Створіть 4 дочірні вузли CSGBox3D у режимі Union для ніг і налаштуйте розміри.

Відрегулюйте їх розміщення так, щоб було схоже на стіл.

../../_images/csg_desk.png

Примітка

Вузли CSG всередині CSGCombiner3D оброблятимуть свою роботу лише в об’єднувачі. Тому CSGCombiner3D використовуються для організації вузлів CSG.

Створіть CSGCombiner3D і назвіть його bed.

Наше ліжко складається з 3 частин: ліжко, матрац і подушка. Створіть CSGBox3D і налаштуйте його розміри для ліжка. Створіть інший CSGBox3D і налаштуйте його розміри для матраца.

../../_images/csg_bed_mat.png

Ми створимо інший CSGCombiner3D під назвою pillow як дочірній елемент bed. Дерево сцени має виглядати так:

../../_images/csg_bed_tree.png

Ми об’єднаємо 3 вузли CSGSphere3D у режимі Union, щоб сформувати подушку. Змініть масштаб осі Y сфер і ввімкніть Smooth Faces.

../../_images/csg_pillow_smooth.png

Виберіть вузол pillow і переключіть режим на Subtraction; приєднані сфери виріжуть вм'ятину в матраці.

../../_images/csg_pillow_hole.png

Спробуйте повторно зробити батьківським вузлом pillow кореневий вузол Node3D; дірка зникне.

Примітка

Це для ілюстрації ефекту порядку обробки CSG. Оскільки кореневий вузол не є вузлом CSG, вузли CSGCombiner3D є кінцем операцій; це показує використання CSGCombiner3D для організації сцени CSG.

Скасуйте перепризначення після спостереження за ефектом. Ліжко, яке ви побудували, має виглядати так:

../../_images/csg_bed.png

Створіть CSGCombiner3D і назвіть його lamp.

Лампа складається з 3 частин: підставки, стовпа і абажура. Створіть CSGCylinder3D, увімкніть параметр Cone і зробіть його підставкою. Створіть інший CSGCylinder3D і налаштуйте розміри, щоб використовувати його як полюс.

../../_images/csg_lamp_pole_stand.png

Ми будемо використовувати CSGPolygon3D для абажура. Використовуйте режим Spin для CSGPolygon3D і намалюйте трапецію у Вигляді спереду (цифрова клавіатура 1); ця форма буде витягуватися навколо початку координат і формуватиме абажур.

../../_images/csg_lamp_spin.png ../../_images/csg_lamp_polygon.png ../../_images/csg_lamp_extrude.png

Відрегулюйте розташування 3 частин, щоб вони виглядали, як лампа.

../../_images/csg_lamp.png

Створіть CSGCombiner3D і назвіть його bookshelf.

Для книжкової полиці ми будемо використовувати 3 ноди CSGBox3D. Створіть CSGBox3D і налаштуйте його розміри; це буде розмір книжкової полиці.

../../_images/csg_shelf_big.png

Скопіюйте CSGBox3D і скоротіть розміри кожної осі та змініть режим на Віднімання.

../../_images/csg_shelf_subtract.png ../../_images/csg_shelf_subtract_menu.png

Ви майже побудували полицю. Створіть ще один CSGBox3D для поділу полиці на два рівні.

../../_images/csg_shelf.png

Розташуйте меблі в своїй кімнаті, як вам подобається, і ваша сцена повинна виглядати так:

../../_images/csg_room_result.png

Ви успішно створили прототип рівня кімнати за допомогою інструментів CSG в Godot. Інструменти CSG можуть бути використані для проектування всіх видів рівнів, таких як лабіринт, або місто; досліджуйте їх обмеження при розробці вашої гри.

Використання текстур на прототипах

Godot Standard Material 3D і ORM Material 3D підтримує трипланарне відображення, яке можна використовувати для автоматичного застосування текстури до довільних об’єктів без спотворень. Це зручно під час використання CSG, оскільки Godot ще не підтримує редагування UV-карт на вузлах CSG. Триплощинне відображення відносно повільне, що зазвичай обмежує його використання органічними поверхнями, такими як рельєф. Тим не менш, під час прототипування його можна використовувати для швидкого застосування текстур до рівнів на основі CSG.

Примітка

Якщо вам потрібні деякі текстури для прототипування, Кенні зробив набір текстур для прототипів, на ліцензії CC0.

Існує два способи застосування матеріалу до вузла CSG:

  • Застосування його до вузла CSGCombiner3D як перевизначення матеріалу (Геометрія > Перевизначення матеріалу в інспекторі). Це автоматично вплине на дочірні елементи, але унеможливить зміну матеріалу в окремих дочірніх елементах.

  • Нанести матеріали на окремі вузли (Material в Інспекторі). Таким чином, кожен вузол CSG може мати свій зовнішній вигляд. Набудовані вузли CSG будуть застосовувати свій матеріал до вузлів, в їх підпорядкуванні.

Щоб застосувати трипланарне відображення до вузла CSG, виберіть його, перейдіть до інспектора, клацніть текст [порожній] поруч із Заміна матеріалу (або Матеріал для окремих вузлів CSG). Виберіть New StandardMaterial3D. Натисніть піктограму новоствореного матеріалу, щоб відредагувати його. Розгорніть розділ Albedo і завантажте текстуру у властивість Texture. Тепер розгорніть секцію Uv1 і позначте Triplanar. Ви можете змінити зміщення текстури та масштаб на кожній осі, погравши з властивостями Масштаб і Зміщення трохи вище. Вищі значення властивості Scale призведуть до частішого повторення текстури.

Порада

Ви можете скопіювати StandardMaterial3D, щоб повторно використовувати його на вузлах CSG. Для цього клацніть стрілку спадного меню поруч із властивістю матеріалу в інспекторі та виберіть Копіювати. Щоб вставити його, виберіть вузол, до якого ви бажаєте застосувати матеріал, клацніть стрілку спадного меню поруч із його властивістю матеріалу та виберіть Вставити.

Перетворення в MeshInstance3D

Починаючи з Godot 4.4, ви можете перетворити вузол CSG та його дочірні елементи на вузол MeshInstance3D.

Це має кілька переваг:

  • Запікайте світлові карти, оскільки UV2 можна згенерувати на MeshInstance3D.

  • Вибракування оклюзії за допомогою запікання, оскільки процес запікання оклюзії враховує лише MeshInstance3D.

  • Швидший час завантаження, оскільки сітку CSG більше не потрібно перебудовувати під час завантаження сцени.

  • Краща продуктивність під час оновлення трансформації вузла, якщо використовується сітка в іншому вузлі CSG.

Щоб перетворити вузол CSG на вузол MeshInstance3D, виділіть його, а потім виберіть CSG > Випікати екземпляр сіті на панелі інструментів. Вузол MeshInstance3D буде створено як рідний вузол. Зауважте, що вузол CSG, який використовувався для запікання, не приховано автоматично, тому не забудьте приховати його, щоб запобігти накладанню його геометрії на щойно створений MeshInstance3D.

Ви також можете створити трійчасту форму зіткнення за допомогою CSG > Запекти форму зіткнення. Згенерований вузол CollisionShape3D має бути дочірнім вузлом class_StaticBody3D або AnimatableBody3D, щоб бути ефективним.

Порада

Не забувайте зберігати вихідний вузол CSG у дереві сцени, щоб у разі потреби пізніше можна було внести зміни до геометрії. Щоб внести зміни в геометрію, видаліть вузол MeshInstance3D і знову зробіть кореневий вузол CSG видимим.

Експорт як glTF

Може бути корисно заблокувати рівень за допомогою CSG, а потім експортувати його як 3D-модель для імпорту в програмне забезпечення для 3D-моделювання. Це можна зробити, вибравши Сцена > Експортувати як... > Сцена glTF 2.0.

../../_images/export_as_gltf.webp