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

Hérite de : Shape3D < Resource < RefCounted < Object

A 3D heightmap shape used for physics collision.

Description

Une forme de heightmap 3D, destinée à être utilisée pour la physique. Habituellement utilisée pour fournir une forme à un CollisionShape3D. Ce type est le plus souvent utilisé pour un terrain avec des sommets placés dans une grille de largeur fixe.

La heightmap est représentée comme une grille 2D de valeurs de hauteur, qui représentent la position des points de grille sur l'axe Y. Les points de grille sont espacés de 1 unité sur les axes X et Z, et la grille est centrée sur l'origine du noeud CollisionShape3D. En interne, chaque quadrillage est divisé en deux triangles.

En raison de la nature de la heightmap , elle ne peut être utilisée pour modéliser des surplombs ou des grottes, ce qui nécessiterait plusieurs sommets au même endroit vertical. Les trous peuvent être perforés à travers la collision en assignant @GDScript.NAN à la hauteur des sommets désirés (ceci est supporté à la fois dans GodotPhysics3D et Jolt Physics). Vous pouvez ensuite insérer des maillages avec leur propre collision séparée pour fournir des surplombs, des grottes, etc.

Performance : HeightMapShape3D est plus rapide pour vérifier les collisions que ConcavePolygonShape3D, mais elle est nettement plus lente que les formes primitives comme BoxShape3D.

Une forme de collision de heightmap peut également être construite en utilisant une référence d'Image :

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

var hauteur_min = 0,0
var hauteur_max = 10.0

update_map_data_from_image(heightmap_image, hauteur_min, hauteur_max)

Note : Si vous avez besoin d'utiliser un espacement différent de 1 unité, vous pouvez définir la Node3D.scale de la forme. Cependant, gardez à l'esprit que GodotPhysics3D ne supporte pas d'échelle non uniforme : vous aurez besoin de dimensionner l'axe Y de la même quantité que les axes X et Z, ce qui signifie que les valeurs dans map_data devront être pré-échelonnées par l'inverse de cette échelle. Notez également que GodotPhysics3D ne supporte pas la mise à l'échelle du tout pour les corps dynamiques (c'est-à-dire les nœuds RigidBody3D non gelés). Pour utiliser une HeightMapShape3D mise à l'échelle avec ceux-ci, vous devrez utiliser Jolt Physics.

Propriétés

PackedFloat32Array

map_data

PackedFloat32Array(0, 0, 0, 0)

int

map_depth

2

int

map_width

2

Méthodes

float

get_max_height() const

float

get_min_height() const

void

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


Descriptions des propriétés

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

Heightmap data. The array's size must be equal to map_width multiplied by 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()

Number of vertices in the depth of the heightmap. Changing this will resize the map_data.


int map_width = 2 🔗

  • void set_map_width(value: int)

  • int get_map_width()

Number of vertices in the width of the heightmap. Changing this will resize the map_data.


Descriptions des méthodes

float get_max_height() const 🔗

Renvoie la plus grande valeur de hauteur trouvée dans map_data. Recalcule seulement lorsque map_data change.


float get_min_height() const 🔗

Renvoie la plus petite valeur de hauteur trouvée dans map_data. Recalcule seulement lorsque map_data change.


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

Met à jour map_data avec les données lues à partir d'une référence Image. Redimensionne automatiquement map_width et map_depth de la heightmap pour faire correspondre à la largeur et à la hauteur complètes de l'image.

L'image doit être en format Image.FORMAT_RF (32 bit), Image.FORMAT_RH (16 bits), ou Image.FORMAT_R8 (8 bits).

Chaque pixel d'image est lu comme un flottant sur une plage de 0.0 (pixel noir) à 1.0 (pixel blanc). Cette valeur de plage est réaffectée à height_min et height_max pour former la valeur de hauteur finale.

Note : Il est recommandé d'utiliser une heightmap avec des données 16 bits ou 32 bits, stockées en format EXR ou HDR. L'utilisation de données de hauteur de 8 bits, ou un format comme le PNG que Godot importe en 8 bits, entraînera un terrain en terrasses.