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.

GPUParticlesCollisionHeightField3D

Hérite de : GPUParticlesCollision3D < VisualInstance3D < Node3D < Node < Object

Une forme de collision de particules 3D en forme de heightmap en temps réel affectant les nœuds GPUParticles3D.

Description

A real-time heightmap-shaped 3D particle collision shape affecting GPUParticles3D nodes.

Heightmap shapes allow for efficiently representing collisions for convex and concave objects with a single "floor" (such as terrain). This is less flexible than GPUParticlesCollisionSDF3D, but it doesn't require a baking step.

GPUParticlesCollisionHeightField3D can also be regenerated in real-time when it is moved, when the camera moves, or even continuously. This makes GPUParticlesCollisionHeightField3D a good choice for weather effects such as rain and snow and games with highly dynamic geometry. However, this class is limited since heightmaps cannot represent overhangs (e.g. indoors or caves).

Note: ParticleProcessMaterial.collision_mode must be true on the GPUParticles3D's process material for collision to work.

Note: Particle collision only affects GPUParticles3D, not CPUParticles3D.

Propriétés

bool

follow_camera_enabled

false

int

heightfield_mask

1048575

Resolution

resolution

2

Vector3

size

Vector3(2, 2, 2)

UpdateMode

update_mode

0

Méthodes

bool

get_heightfield_mask_value(layer_number: int) const

void

set_heightfield_mask_value(layer_number: int, value: bool)


Énumérations

enum Resolution: 🔗

Resolution RESOLUTION_256 = 0

Génère une heightmap 256×256. Prévu pour des scènes à petite échelle, ou des scènes plus grandes sans particules lointaines.

Resolution RESOLUTION_512 = 1

Génère une heightmap 512×512. Prévu pour des scènes de taille moyenne, ou des scènes plus grandes sans particules lointaines.

Resolution RESOLUTION_1024 = 2

Génère une heightmap 1024×1024. Prévu pour des scènes grandes avec des particules lointaines.

Resolution RESOLUTION_2048 = 3

Génère une heightmap 2048×2048. Prévu pour des scènes très grandes avec des particules lointaines.

Resolution RESOLUTION_4096 = 4

Génère une heightmap 4096×4096. Prévu pour des scènes énormes avec des particules lointaines.

Resolution RESOLUTION_8192 = 5

Génère une heightmap 8192×8192. Prévu pour des scènes gigantesques avec des particules lointaines.

Resolution RESOLUTION_MAX = 6

Représente la taille de l'énumération Resolution.


enum UpdateMode: 🔗

UpdateMode UPDATE_MODE_WHEN_MOVED = 0

Ne mettre à jour la heightmap seulement lorsque le nœud GPUParticlesCollisionHeightField3D est déplacé, ou lorsque la caméra se déplace si follow_camera_enabled vaut true. Une mise à jour peut être forcée en déplaçant légèrement les GPUParticlesCollisionHeightField3D dans n'importe quelle direction, ou en appelant RenderingServer.particles_collision_height_field_update().

UpdateMode UPDATE_MODE_ALWAYS = 1

Mettre à jour la heightmap à chaque trame. Cela a un coût en performances important. Cette mise à jour ne devrait être utilisée que lorsque la géométrie avec laquelle les particules peuvent entrer en collision change significativement durant le gameplay.


Descriptions des propriétés

bool follow_camera_enabled = false 🔗

  • void set_follow_camera_enabled(value: bool)

  • bool is_follow_camera_enabled()

Si true, le GPUParticlesCollisionHeightField3D suivra la caméra actuelle dans l'espace global. Le GPUParticlesCollisionHeightField3D n'a pas besoin d'être un enfant du nœud Camera3D pour que cela fonctionne.

Suivre la caméra a un coût en performance, car cela forcera la heightmap à se mettre à jour chaque fois que la caméra se déplace. Envisagez de diminuer la resolution pour améliorer les performances si follow_camera_enabled vaut true.


int heightfield_mask = 1048575 🔗

  • void set_heightfield_mask(value: int)

  • int get_heightfield_mask()

The visual layers to account for when updating the heightmap. Only MeshInstance3Ds whose VisualInstance3D.layers match with this heightfield_mask will be included in the heightmap collision update. By default, all 20 user-visible layers are taken into account for updating the heightmap collision.

Note: Since the heightfield_mask allows for 32 layers to be stored in total, there are an additional 12 layers that are only used internally by the engine and aren't exposed in the editor. Setting heightfield_mask using a script allows you to toggle those reserved layers, which can be useful for editor plugins.

To adjust heightfield_mask more easily using a script, use get_heightfield_mask_value() and set_heightfield_mask_value().


Resolution resolution = 2 🔗

Des résolutions plus élevées peuvent représenter des petits détails plus précisément dans de grandes scènes, au coût de performances plus faibles. Si update_mode vaut UPDATE_MODE_ALWAYS, envisagez d'utiliser la résolution la plus basse possible.


Vector3 size = Vector3(2, 2, 2) 🔗

La taille de la heightmap de collision en unités 3D. Pour améliorer la qualité de la heightmap, la taille size devrait être aussi petite que possible tout en couvrant les parties de la scène dont vous avez besoin.


UpdateMode update_mode = 0 🔗

La politique de mise à jour à utiliser pour la heightmap générée.


Descriptions des méthodes

bool get_heightfield_mask_value(layer_number: int) const 🔗

Renvoie true si la couche spécifiée du heightfield_mask est active, selon un numéro de couche layer_number entre 1 et 20, inclusifs.


void set_heightfield_mask_value(layer_number: int, value: bool) 🔗

Selon la valeur de value, active ou désactive la couche spécifiée du heightfield_mask, selon un numéro de couche layer_number entre 1 et 20, inclusifs.