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

CSG означає Constructive Solid Geometry (Конструююча Тверда Геометрія), і є інструментом для об'єднання основних фігур, або користувацьких мешів, для створення складніших фігур. У програмному забезпеченні для 3D-моделювання CSG в основному відома, як "логічні оператори".

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

Примітка

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

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

../../_images/csg.gif

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

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

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

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

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

  • Union: (Поєднання) Геометрія двох примітивів поєднується, геометрія, що перетинається, видаляється.

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

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

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

Вузол CSGPolygon

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

  • Depth: (Вглиб) Видавити назад на певну відстань.

  • Spin: (Обертання) Видавити обертаючи навколо свого центру.

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

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

Примітка

Режим Path потребує для своєї роботи вузол Path. У вузлі Path намалюйте контур, і багатокутник в CSGPolygon буде видавлюватися по цьому контурі.

Власні меші

Будь-який меш можна використати за допомогою CSGMesh; меш може бути змодельований в іншому програмному забезпеченні та імпортований в Godot. Підтримується кілька матеріалів. Існують деякі обмеження геометрії:

  • вона повинна бути закрита,

  • вона не повинна сама себе перетинати,

  • в неї не має бути внутрішніх граней,

  • кожне ребро має з'єднуватися тільки з двома гранями.

../../_images/csg_custom_mesh.png

Вузол CSGCombiner

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

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

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

Примітка

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

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

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

Порада

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

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

  • кімнату,

  • ліжко,

  • лампу,

  • стіл,

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

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

Порада

Типове освітлення навколишнього середовища не забезпечує чіткого затінення під деякими кутами. Змініть режим перегляду за допомогою функції "Показати каркас" у меню 3D вікна перегляду, або додайте вузол DirectionalLight, щоб ви могли все чітко бачити.

../../_images/csg_overdraw.png

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

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

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

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

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

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

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

../../_images/csg_desk.png

Примітка

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

Створіть CSGCombiner і назвіть його bed (ліжко).

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

../../_images/csg_bed_mat.png

Для подушок на ліжку ми створимо ще один CSGCombiner і назвемо його pillow (подушка). Дерево сцени має виглядати так:

../../_images/csg_bed_tree.png

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

../../_images/csg_pillow_smooth.png

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

../../_images/csg_pillow_hole.png

Спробуйте пере-призначити вузол pillow кореневому вузлу Spatial; вм'ятина зникне.

Примітка

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

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

../../_images/csg_bed.png

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

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

../../_images/csg_lamp_pole_stand.png

Ми будемо використовувати CSGPolygon для абажуру. Використовуйте режим обертання Spin для CSGPolygon і намалюйте `трапецію<https://en.wikipedia.org/wiki/Trapezoid>`_ в Вигляді спереду (цифрова клавіша 1); ця форма буде видавлюватися навколо походження і утворювати абажур.

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

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

../../_images/csg_lamp.png

Створіть CSGCombiner і назвіть його bookshelf (книжкова полиця).

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

../../_images/csg_shelf_big.png

Продублюйте CSGBox, зменшіть розміри по кожній осі і змініть режим на Subtraction.

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

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

../../_images/csg_shelf.png

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

../../_images/csg_room_result.png

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

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

Spatial Material Godot підтримує триплощинне відображення, яке можна використовувати для автоматичного застосування текстури до довільних об'єктів без спотворень. Це зручно при використанні CSG, оскільки Godot ще не підтримує редагування UV карт на вузлах CSG. Триплощинне відображення відносно повільне, що зазвичай обмежує його використання на органічних поверхнях, таких, як місцевість. Тим не менш, при прототипуванні його можна використовувати для швидкого застосування текстур до рівнів на основі CSG.

Примітка

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

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

  • Застосувати його до вузла CSGCombiner як перевизначення матеріалу (Geometry > Material Override в Інспекторі). Це автоматично вплине і на його нащадків, але унеможливить зміну матеріалу у окремих нащадків.

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

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

Порада

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