Прототипування рівнів з CSG¶
CSG означає Constructive Solid Geometry (Конструююча Тверда Геометрія), і є інструментом для об'єднання основних фігур, або користувацьких мешів, для створення складніших фігур. У програмному забезпеченні для 3D-моделювання CSG в основному відома, як "логічні оператори".
Прототипування рівнів є одним з основних застосувань CSG в Godot. Ця методика дозволяє користувачам створювати прості версії найпоширеніших фігур, поєднуючи примітиви. Інтер'єри можуть бути створені всередині інвертованих примітивів.
Примітка
Вузли CSG в Godot в основному призначені для прототипування. Немає вбудованої підтримки накладання UV-розгорток, або редагування 3D-багатокутників, (хоча з вузла CSGPolygon можна витягнути (екструдувати) 2D-багатокутник).
Якщо ви шукаєте простий у використанні інструмент дизайну рівня для проекту, ви можете використовувати Qodot замість CSG. Він дозволяє розробляти рівні за допомогою TrenchBroom і імпортувати їх в Godot.

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


Функції інструментів CSG¶
Кожен вузол CSG підтримує 3 види логічних операцій:
Union: (Поєднання) Геометрія двох примітивів поєднується, геометрія, що перетинається, видаляється.
Intersection: (Перетин) Залишається тільки геометрія, що перетинається, решта видаляється.
Subtraction: (Віднімання) Друга фігура віднімається від першої, залишаючи вм'ятину з її формою.


Вузол CSGPolygon¶
Вузол CSGPolygon можна видавити в 2D полігон (який малюється в координатах X, Y) в наступних режимах:
Depth: (Вглиб) Видавити назад на певну відстань.
Spin: (Обертання) Видавити обертаючи навколо свого центру.
Path: Видавити вздовж вузла Path. Цю операцію зазвичай називають лофтингом.


Примітка
Режим Path потребує для своєї роботи вузол Path. У вузлі Path намалюйте контур, і багатокутник в CSGPolygon буде видавлюватися по цьому контурі.
Власні меші¶
Будь-який меш можна використати за допомогою CSGMesh; меш може бути змодельований в іншому програмному забезпеченні та імпортований в Godot. Підтримується кілька матеріалів. Існують деякі обмеження геометрії:
вона повинна бути закрита,
вона не повинна сама себе перетинати,
в неї не має бути внутрішніх граней,
кожне ребро має з'єднуватися тільки з двома гранями.

Вузол CSGCombiner¶
Вузол CSGCombiner є порожньою фігурою, яка використовується для організації. Він може використовуватися для поєднання його нащадків (вузлів).
Порядок обробки¶
Кожен вузол CSG спочатку обробить свої дочірні вузли та їх операції: об'єднання, перетин або віднімання, по порядку в дереві, і застосовуватиме їх до себе один за одним.
Примітка
В інтересах продуктивності переконайтеся, що геометрія CSG залишається відносно простою, оскільки обробка складних мешів може зайняти деякий час. Якщо ви додаєте об'єкти разом (наприклад, об'єкти стола та кімнати), створюйте їх як окремі дерева CSG. Обробка занадто великої кількості об'єктів в одному дереві в кінцевому підсумку почне впливати на продуктивність. Використовуйте бінарні операції тільки там, де вони вам дійсно потрібні.
Прототипування рівня¶
Ми створимо прототип кімнати для практики використання інструментів CSG.
Порада
Робота в ортогональній проекції дає кращий вигляд на поєднання форм CSG.
Наш рівень буде містити такі об'єкти:
кімнату,
ліжко,
лампу,
стіл,
книжкову полицю.
Створіть сцену з просторовим вузлом в якості кореня.
Порада
Типове освітлення навколишнього середовища не забезпечує чіткого затінення під деякими кутами. Змініть режим перегляду за допомогою функції "Показати каркас" у меню 3D вікна перегляду, або додайте вузол DirectionalLight, щоб ви могли все чітко бачити.

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


Далі створіть CSGCombiner і назвіть його desk
(стіл).
Стіл має одну поверхню і 4 ноги:
Створіть 1 дочірній вузол CSGBox у режимі Union для поверхні та відрегулюйте розміри.
Створіть 4 дочірні вузли CSGBox у режимі Union для ніг і відрегулюйте розміри.
Відрегулюйте їх розміщення так, щоб було схоже на стіл.

Примітка
Вузли CSG всередині CSGCombiner будуть оброблятися тільки тут. Таким чином, CSGCombiners використовуються для організації вузлів CSG.
Створіть CSGCombiner і назвіть його bed
(ліжко).
Наше ліжко складається з 3 частин: ліжка, матраца і подушки. Створіть CSGBox і відрегулюйте його під розмір ліжка. Створіть інший CSGBox і відрегулюйте його під розмір матраца.

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

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

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

Спробуйте пере-призначити вузол pillow
кореневому вузлу Spatial
; вм'ятина зникне.
Примітка
Це ілюструє ефект порядку обробки CSG. Оскільки кореневий вузол не є вузлом CSG, вузли CSGCombiner є кінцем операцій; це показує використання CSGCombiner для організації сцени CSG.
Скасуйте перепризначення після спостереження за ефектом. Ліжко, яке ви побудували, має виглядати так:

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

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



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

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

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


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

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

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