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.

HeightMapShape3D

Успадковує: Shape3D < Resource < RefCounted < Object

Фігура 3D-карти висот, що використовується для фізичних зіткнень.

Опис

Фігура 3D-карти висот, призначена для використання у фізиці для надання форми CollisionShape3D. Цей тип найчастіше використовується для рельєфу з вершинами, розміщеними в сітці фіксованої ширини.

Карта висот представлена як 2D-сітка значень висоти, які відображають положення точок сітки на осі Y. Точки сітки розташовані на відстані 1 одиниці одна від одної на осях X та Z, а сітка центрована в початку координат вузла CollisionShape3D. Внутрішньо кожен квадрат сітки поділений на два трикутники.

Через природу карти висот, її не можна використовувати для моделювання нависів або печер, що вимагало б кількох вершин в одному вертикальному місці. Отвори можна пробити через колізію, призначивши @GDScript.NAN висоті потрібних вершин (це підтримується як у GodotPhysics3D, так і в Jolt Physics). Потім ви можете вставляти сітки з власною окремою колізією, щоб забезпечити нависи, печери тощо.

Продуктивність: HeightMapShape3D швидше перевіряє колізії, ніж ConcavePolygonShape3D, але значно повільніше, ніж примітивні фігури, такі як BoxShape3D.

Фігуру зіткнення карти висот також можна створити за допомогою посилання Image:

var heightmap_texture = ResourceLoader.load("res://heightmap_image.exr")
var heightmap_image = heightmap_texture.get_image()
heightmap_image.convert(Image.FORMAT_RF)

var height_min = 0.0
var height_max = 10.0

update_map_data_from_image(heightmap_image, height_min, height_max)

Примітка: Якщо вам потрібно використовувати інтервал, відмінний від 1 одиниці, ви можете налаштувати Node3D.scale фігури. Однак, майте на увазі, що GodotPhysics3D не підтримує нерівномірне масштабування: вам потрібно буде масштабувати вісь Y на ту саму величину, що й осі X та Z, а це означає, що значення в map_data потрібно буде попередньо масштабувати на обернену величину цього масштабу. Також зауважте, що GodotPhysics3D взагалі не підтримує масштабування для динамічних тіл (тобто незаморожених вузлів RigidBody3D); щоб використовувати масштабований HeightMapShape3D з ними, вам потрібно буде використовувати Jolt Physics.

Властивості

PackedFloat32Array

map_data

PackedFloat32Array(0, 0, 0, 0)

int

map_depth

2

int

map_width

2

Методи

float

get_max_height() const

float

get_min_height() const

void

update_map_data_from_image(image: Image, height_min: float, height_max: float)


Описи властивостей

PackedFloat32Array map_data = PackedFloat32Array(0, 0, 0, 0) 🔗

  • void set_map_data(value: PackedFloat32Array)

  • PackedFloat32Array get_map_data()

Дані карти висот. Розмір масиву має дорівнювати map_width, помноженому на map_depth.

Note: The returned array is copied and any changes to it will not update the original property value. See PackedFloat32Array for more details.


int map_depth = 2 🔗

  • void set_map_depth(value: int)

  • int get_map_depth()

Кількість вершин у глибині карти висот. Зміна цього значення призведе до зміни розміру map_data.


int map_width = 2 🔗

  • void set_map_width(value: int)

  • int get_map_width()

Кількість вершин по ширині карти висот. Зміна цього значення призведе до зміни розміру map_data.


Описи методів

float get_max_height() const 🔗

Повертає найбільше значення висоти, знайдене в map_data. Перераховує лише коли map_data змінюється.


float get_min_height() const 🔗

Повертає найменше значення висоти, знайдене в map_data. Перераховує лише коли map_data змінюється.


void update_map_data_from_image(image: Image, height_min: float, height_max: float) 🔗

Оновлює map_data даними, зчитаними з посилання Image. Автоматично змінює розмір карти висот map_width та map_depth, щоб вона відповідала повній ширині та висоті зображення.

Зображення має бути у форматі Image.FORMAT_RF (32 біти), Image.FORMAT_RH (16 бітів) або Image.FORMAT_R8 (8 бітів).

Кожен піксель зображення зчитується як число з плаваючою комою в діапазоні від 0.0 (чорний піксель) до 1.0 (білий піксель). Це значення діапазону перепризначується на height_min та height_max для формування кінцевого значення висоти.

Примітка: Рекомендується використовувати карту висот з 16-бітними або 32-бітними даними, що зберігаються у форматі EXR або HDR. Використання 8-бітних даних висоти або формату, такого як PNG, який Godot імпортує як 8-бітний, призведе до терасованого рельєфу.