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.
Checking the stable version of the documentation...
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
|
||
|
||
|
Méthodes
get_max_height() const |
|
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) 🔗
void set_map_data(value: PackedFloat32Array)
PackedFloat32Array get_map_data()
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.
Number of vertices in the depth of the heightmap. Changing this will resize the map_data.
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.