Вузли Occluder¶
На додаток до оклюзії через Кімнати і Портали, Godot надає можливість забезпечити базову оклюзію за допомогою простих геометричних вузлів Occluder
. Це геометричні фігури, які відображаються в редакторі за допомогою gizmos, але невидимі під час роботи гри.
Будь-який об'єкт, повністю перекритий формою вузла Occluder (позаду нього, або, в деяких випадках, всередині), буде вибракований під час виконання. Ці вузли розроблені, щоб бути простими і недорогими у використанні, але компроміс полягає в тому, що вони можуть бути не такими ефективними при вибракуванні, як Кімнати і Портали. Тим не менш, вони все ще можуть значно підвищити продуктивність в деяких ситуаціях.
Примітка
It is important to understand that geometric occluders work by testing the axis aligned bounding box (AABB
) of the occludee against the occluder. The AABB must be fully occluded to be culled. The consequence of this is that smaller objects are more likely to be effectively culled than larger objects, and larger occluders tend to be much more effective than smaller ones.
Основною перевагою вузлів Occluder є те, що вони повністю динамічні. Наприклад, якщо ви присвоїте вузол occluder в нащадки космічному кораблю, він буде рухатися під час переміщення батьківського об'єкта.
Причина того, що вузли Occluder настільки дешеві з точки зору продуктивності, полягає в тому, що двигун динамічно вибирає найактуальніші оклюдери під час виконання, виходячи з поточної точки зору камери. Це означає, що ви часто можете мати сотні оклюдерів, присутніх на сцені, але тільки найактуальніші будуть активні в любий момент часу.
Сам вузол Occluder є утримувачем ресурсу OccluderShape, який визначає функціональність. Для початку додайте вузол Occluder до дерева сцени.
Порада
Ви побачите жовтий попереджувальний трикутник, який дає вам знати, що ви повинні встановити OccluderShape в Інспекторі, перш ніж Occluder
стане функціональним.
OccluderShapeSphere (Сферична Форма Оклюдера)¶
Сфера є одним з найпростіших і найшвидших оклюдерів, і легко піддається налаштуванню і розташуванню. Недоліком є те, що сфера має тенденцію мати сенс лише в певних дизайнах ігрового рівня, і більше підходить для природньої місцевості, або органічної геометрії на тлі.
Після того, як ви додали вузол Occluder і вирішили додати новий OccluderShapeSphere
в Інспекторі, натисніть OccluderShapeSphere в інспекторі, щоб розкрити параметри.

На відміну від багатьох вузлів, ``OccluderShapeSphere``можуть зберігати кілька сфер на одному об'єкті. Це ефективніше для рушія, і зберігає ваше Дерево Сцен зрозумілішим. Вам не потрібно зберігати всі свої сфери в одному Occluder, оскільки це може стати складним для управління, але цілком розумно додати 10, або близько того, сфер або більше. Вони дуже дешеві, і часто чим більше ви розміщуєте, тим краще прораховується ваша геометрія.
Кілька сфер зберігаються у вигляді масиву Array. Якщо натиснути на Array в інспекторі, ви можете збільшити розмір Масиву, щоб додати ще одну сферу.

Сфера з'явиться у вигляді невеликого рожевого сферичного об'єкта у вікні редактора. У кожній сфері є дві ручки. Більша середня ручка дозволяє переміщати сферу в локальному просторі вузла Occluder, а невелика ручка дозволяє регулювати радіус.
Хоча змінити положення сфери можна за допомогою переміщення вузла Occluder в інспекторі, це переміщує увесь масив сфер. Якщо ви хочете використовувати кілька сфер в одному оклюдері, цю роботу ручки виконують. Для того, щоб дозволити позиціонування в 3D, gizmo буде переміщати 3D-позицію тільки в двох основних осях в залежності від точки зору в редакторі.
Порада
Є ще одна зручна функція в редакторі при використанні декількох сфер. Якщо натиснути кнопку панелі інструментів Center Node, вона перерахує локальні позиції сфер відносно середнього значення всього вузла та змінить перетворення вузла оклюдера. Ця зручна функція полегшити їх розміщення.
Під час виконання сфери можуть бути ввімкнені та вимкнені, в залежності від видимості вузла Occluder, а Вузол можна переміщувати, масштабувати та обертати тощо.
Поширеним прикладом використання для сфер оклюдера є забезпечення оклюзії на гірській/горбистій місцевості. Розміщуючи сфери всередині гір, ви можете запобігти рендерингу дерев, рослин, будівель та інших об'єктів позаду гір. З деякою творчістю вони також можуть бути використані для переміщення об'єктів, таких як великі космічні апарати, планети тощо.
OccluderShapePolygon¶
The polygon is a generalist occluder. It can be made to work well in almost all situations, and can quickly provide a degree of occlusion culling to most scenes.
As with all geometric occluders, the key to success is to make them large. They do not have to match rendered geometry, and in many cases they will work better if you extend them past rendered geometry to make them as big as possible (without blocking legitimate lines of sight). The reason why they need to be large is that in general, they will only cull objects whose AABB
is completely hidden by the polygon. For large objects to be culled, you will need large occluders.
Примітка
Like all occluders, polygons can overlap, and in many cases they will work better if you overlap them (they are more likely to cull objects on boundaries).
Editing and details¶
Occluder polygons are edited as a list of points which define a convex polygon, on a single plane. In order to confine the polygon to a single plane, the points are defined in 2D space rather than 3D. The orientation, position and scale of the polygon is taken instead from the transform of the Occluder
Node.

If you create an Occluder and add to it a OccluderShapePolygon
resource, by default it will create 4 starting points forming a rectangle. If you move the position and rotation of the Occluder Node you will see how the rectangle follows the node. When the Occluder is selected in the editor, handles will appear for each of the points. You can actually click and drag these handles, to match your polygon to the environment of your scene.

You are not restricted to 4 points, you can add and remove points in the Inspector, but note that:
The editor will automatically sanitize your points to form a convex polygon. If you drag a point into a position that would form a concave polygon, it will be ignored.
In general, the less edges (and thus points), the faster the polygon will work at runtime. A polygon with 6 edges will have to make twice the calculations of a polygon with 3 edges. In most cases 4 is a good number.

Holes¶
Real world game levels don't always have large continuous areas that should be occluded. Often walls will have a door or windows, caves will have an entrance, etc. In some cases we have to make do by placing several OccluderShapePolygons around such an opening, but Occluder polygons have one more trick up their sleeve - they can have "holes".
In the inspector you will notice that as well as a set of points for the polygon, the polygon has a set of points for a single "hole". If you add 3 or 4 to your polygon, you will see they appear in the editor as smaller handles. You can drag these around just like the polygon handles, to form a convex hole.

The hole can be totally within the polygon (such as a window), abutting the edge (like a door) or crossing the edge of the polygon completely, to make the occluder concave. The way the hole works is that the culling follows a simple rule:
If the object to be culled is totally hidden by the polygon, it then looks to see whether it can be seen through the hole. If the object touches the hole, it is not culled, but if hidden by the polygon and not seen through the hole it is culled.
Примітка
Placing holes is usually far more convenient, and works faster and better at runtime, than creating lots of smaller OccluderShapePolygons.
Hole Limits¶
The main limitation of holes is that there can only be one per polygon. If you have a situation which requires two or more holes, you have a choice:
Combine the area of the two holes into one bigger hole (if they are close together).
Use two or more OccluderPolygons.
Порада
Remember that if you are using more than one polygon, they can overlap, and you should use this to your advantage.
How many Occluder polys are needed?¶
This very much depends on your scene, but generally you can start getting a good benefit from 3 or 4 well placed polygons. After that it is totally up to you how much time you want to spend. Placing occluders is a bit of an art form, and you will get better at it and learn new tricks the more you work with them.
Some ideas:¶
Build your levels to take advantage of occlusion.
This is one of the secrets of the pros. A good level design is not just about what the gameplay demands, it should also be built with occlusion in mind.
When in a building with multiple floors, try placing an occluder polygon between each floor, with a hole for where the staircase transitions between them. This can potentially cull out entire floors and greatly improve performance.
Don't be afraid to extend your occluder polygons far past the edges of visible geometry to cull more objects - for instance far into the ground or sky.
Using polygons dynamically¶
Like all geometric occluders, polygons are not confined to static (non-moving) geometry. You can place them on moving objects. You can even change the relative position of the points in realtime.
Some guidelines:
There is a slight cost to moving polygons, the points of the polygons must be transformed on the CPU each time their transform changes.
This is not something to worry excessively about, even CPUs are reasonably fast at transforming points, and generally polygons have very few points compared to rendered geometry. But it is something to consider, if you wanted to create e.g. 10,000 simultaneous spaceships all with occluder polys.
Changing the transform of the polygon Node (e.g. by moving the parent object) is cheaper than changing the points themselves. Use the former rather than the latter wherever possible.