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.

CSGShape3D

Hereda: GeometryInstance3D < VisualInstance3D < Node3D < Node < Object

Heredado por: CSGCombiner3D, CSGPrimitive3D

La clase base del CSG.

Descripción

Esta es la clase base de CSG que proporciona soporte para operaciones CSG a los diversos nodos CSG en Godot.

Rendimiento: Los nodos CSG están destinados únicamente al prototipado, ya que tienen un coste de rendimiento de CPU significativo. Considera hornear (bake) los resultados finales de las operaciones CSG en geometría estática que reemplace a los nodos CSG.

Los resultados de nodos raíz CSG individuales pueden hornearse a nodos con recursos estáticos mediante el menú del editor que aparece cuando se selecciona un nodo raíz CSG.

Los nodos raíz CSG individuales también pueden hornearse a recursos estáticos mediante scripts llamando a bake_static_mesh() para la malla visual o a bake_collision_shape() para la colisión física.

Escenas enteras de nodos CSG pueden hornearse a geometría estática y exportarse con el exportador de escenas glTF del editor: Escena > Exportar como... > Escena glTF 2.0...

Tutoriales

Propiedades

bool

autosmooth

false

bool

calculate_tangents

true

int

collision_layer

1

int

collision_mask

1

float

collision_priority

1.0

Operation

operation

0

float

smoothing_angle

50.0

float

snap

bool

use_collision

false

Métodos

ConcavePolygonShape3D

bake_collision_shape()

ArrayMesh

bake_static_mesh()

bool

get_collision_layer_value(layer_number: int) const

bool

get_collision_mask_value(layer_number: int) const

Array

get_meshes() const

bool

is_root_shape() const

void

set_collision_layer_value(layer_number: int, value: bool)

void

set_collision_mask_value(layer_number: int, value: bool)


Enumeraciones

enum Operation: 🔗

Operation OPERATION_UNION = 0

La geometría de ambas primitivas se fusiona, la geometría que se interseca se elimina.

Operation OPERATION_INTERSECTION = 1

Solo queda la geometría de intersección, el resto se elimina.

Operation OPERATION_SUBTRACTION = 2

La segunda forma se resta de la primera, dejando una depresión con su forma.


Descripciones de Propiedades

bool autosmooth = false 🔗

  • void set_autosmooth(value: bool)

  • bool is_autosmooth()

Enables automatic smoothing. This overrides any smoothing on the CSG node and instead uses smoothing_angle to calculate normals based on the angle between faces.

Children of a CSGCombiner3D node will be treated as a single mesh.


bool calculate_tangents = true 🔗

  • void set_calculate_tangents(value: bool)

  • bool is_calculating_tangents()

Calcula las tangentes para la forma CSG, lo que permite el uso de mapas de normales y de altura. Esto solo se aplica a la forma raíz; este ajuste se ignora en cualquier hijo. Establecer esto en false puede acelerar ligeramente la generación de la forma.


int collision_layer = 1 🔗

  • void set_collision_layer(value: int)

  • int get_collision_layer()

The physics layers this area is in.

Collidable objects can exist in any of 32 different layers. These layers work like a tagging system, and are not visual. A collidable can use these layers to select with which objects it can collide, using the collision_mask property.

A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A. See Collision layers and masks in the documentation for more information.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Las capas de física en las que esta forma CSG busca colisiones. Solo es efectivo si use_collision es true. Consulta Capas y máscaras de colisión en la documentación para más información.


float collision_priority = 1.0 🔗

  • void set_collision_priority(value: float)

  • float get_collision_priority()

La prioridad utilizada para resolver colisiones cuando ocurre una penetración. Solo es efectiva si use_collision es true. Cuanto mayor sea la prioridad, menor será la penetración en el objeto. Esto se puede utilizar, por ejemplo, para evitar que el jugador atraviese los límites de un nivel.


Operation operation = 0 🔗

La operación que se realiza en esta forma. Esto se ignora para el primer nodo hijo de CSG ya que la operación es entre este nodo y el hijo previo a este nodo padre.


float smoothing_angle = 50.0 🔗

  • void set_smoothing_angle(value: float)

  • float get_smoothing_angle()

When autosmooth is enabled, faces with an angle between them greater than this will be smoothed, while faces with a smaller angle will remain sharp.

Note: An angle lower than 0.1 will cause all smoothing to be disabled, this can be used to increase performance.


float snap 🔗

Obsoleto: The CSG library no longer uses snapping.

Esta propiedad no hace nada.


bool use_collision = false 🔗

  • void set_use_collision(value: bool)

  • bool is_using_collision()

Adds a collision shape to the physics engine for our CSG shape. This will always act like a static body. Note that the collision shape is still active even if the CSG shape itself is hidden. See also collision_mask and collision_priority.


Descripciones de Métodos

ConcavePolygonShape3D bake_collision_shape() 🔗

Returns a baked physics ConcavePolygonShape3D of this node's CSG operation result. Returns an empty shape if the node is not a CSG root node or has no valid geometry.

Performance: If the CSG operation results in a very detailed geometry with many faces physics performance will be very slow. Concave shapes should in general only be used for static level geometry and not with dynamic objects that are moving.

Note: CSG mesh data updates are deferred, which means they are updated with a delay of one rendered frame. To avoid getting an empty shape or outdated mesh data, make sure to call await get_tree().process_frame before using bake_collision_shape() in Node._ready() or after changing properties on the CSGShape3D.


ArrayMesh bake_static_mesh() 🔗

Devuelve una ArrayMesh estática procesada con baking con el resultado de la operación CSG de este nodo. Los materiales de los nodos CSG involucrados se añaden como superficies de malla adicionales. Devuelve una malla vacía si el nodo no es un nodo raíz CSG o no tiene una geometría válida.

Nota: Las actualizaciones de los datos de malla CSG se aplazan, lo que significa que se actualizan con un retraso de un frame renderizado. Para evitar obtener una malla vacía o datos de malla desactualizados, asegúrate de llamar a await get_tree().process_frame antes de utilizar el bake_static_mesh() en Node._ready() o después de modificar las propiedades de CSGShape3D.


bool get_collision_layer_value(layer_number: int) const 🔗

Devuelve si la capa especificada de collision_layer está habilitada o no, dado un layer_number entre 1 y 32.


bool get_collision_mask_value(layer_number: int) const 🔗

Devuelve si la capa especificada de collision_mask está habilitada o no, dado un layer_number entre 1 y 32.


Array get_meshes() const 🔗

Retorna un Array con 2 elementos, el primero es el Transform3D de este nodo y el segundo es el Mesh raíz de este nodo. Solo funciona cuando este nodo es la forma raíz.

Nota: Las actualizaciones de los datos de mesh de CSG son diferidas, lo que significa que se actualizan con un delay de un frame renderizado. Para evitar obtener una forma vacía o datos de mesh desactualizados, asegúrate de llamar a await get_tree().process_frame antes de usar get_meshes() en Node._ready() o después de cambiar propiedades en el CSGShape3D.


bool is_root_shape() const 🔗

Devuelve true si se trata de una forma de raíz y por lo tanto es el objeto que se renderiza.


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

Basado en value, habilita o deshabilita la capa especificada en collision_layer, dado un layer_number entre 1 y 32.


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

Basado en value, habilita o deshabilita la capa especificada en collision_mask, dado un layer_number entre 1 y 32.