Files
godot-docs-l10n/classes/zh_CN/class_gpuparticlescollisionsdf3d.rst

265 lines
12 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:github_url: hide
.. DO NOT EDIT THIS FILE!!!
.. Generated automatically from Godot engine sources.
.. Generator: https://github.com/godotengine/godot/tree/4.2/doc/tools/make_rst.py.
.. XML source: https://github.com/godotengine/godot/tree/4.2/doc/classes/GPUParticlesCollisionSDF3D.xml.
.. _class_GPUParticlesCollisionSDF3D:
GPUParticlesCollisionSDF3D
==========================
**继承:** :ref:`GPUParticlesCollision3D<class_GPUParticlesCollision3D>` **<** :ref:`VisualInstance3D<class_VisualInstance3D>` **<** :ref:`Node3D<class_Node3D>` **<** :ref:`Node<class_Node>` **<** :ref:`Object<class_Object>`
影响 :ref:`GPUParticles3D<class_GPUParticles3D>` 节点的烘焙的带符号距离场 3D 粒子碰撞形状。
.. rst-class:: classref-introduction-group
描述
----
影响 :ref:`GPUParticles3D<class_GPUParticles3D>` 节点的烘焙的带符号距离场 3D 粒子碰撞形状。
有符号的距离场SDF允许有效地表示任何形状的凸面和凹面对象的近似碰撞形状。它比 :ref:`GPUParticlesCollisionHeightField3D<class_GPUParticlesCollisionHeightField3D>` 更灵活,但需要一个烘焙步骤。
\ **烘焙:**\ 可以通过在编辑器中选择 **GPUParticlesCollisionSDF3D** 节点,然后点击 3D 视口顶部的\ **烘焙 SDF**\ ,来烘焙有符号的距离场纹理。\ :ref:`size<class_GPUParticlesCollisionSDF3D_property_size>` 内的任何\ *可见* :ref:`MeshInstance3D<class_MeshInstance3D>`\ ,无论它们的 :ref:`GeometryInstance3D.gi_mode<class_GeometryInstance3D_property_gi_mode>` 如何,都将被考虑用于烘焙。
\ **注意:**\ 烘焙 **GPUParticlesCollisionSDF3D**:ref:`texture<class_GPUParticlesCollisionSDF3D_property_texture>` 只能在编辑器中进行,因为没有公开的烘焙方法可用于导出的游戏项目中。但是,在导出的游戏项目中,仍然可以将预先烘焙的 :ref:`Texture3D<class_Texture3D>` 加载到 :ref:`texture<class_GPUParticlesCollisionSDF3D_property_texture>` 属性中。
\ **注意:**\ 在 :ref:`GPUParticles3D<class_GPUParticles3D>` 的处理材质上,\ :ref:`ParticleProcessMaterial.collision_mode<class_ParticleProcessMaterial_property_collision_mode>` 必须是 :ref:`ParticleProcessMaterial.COLLISION_RIGID<class_ParticleProcessMaterial_constant_COLLISION_RIGID>`:ref:`ParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT<class_ParticleProcessMaterial_constant_COLLISION_HIDE_ON_CONTACT>`\ ,才能使碰撞生效。
\ **注意:**\ 粒子碰撞只影响 :ref:`GPUParticles3D<class_GPUParticles3D>`\ ,不影响 :ref:`CPUParticles3D<class_CPUParticles3D>`\ 。
.. rst-class:: classref-reftable-group
属性
----
.. table::
:widths: auto
+---------------------------------------------------------------+-------------------------------------------------------------------------+----------------------+
| :ref:`int<class_int>` | :ref:`bake_mask<class_GPUParticlesCollisionSDF3D_property_bake_mask>` | ``4294967295`` |
+---------------------------------------------------------------+-------------------------------------------------------------------------+----------------------+
| :ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` | :ref:`resolution<class_GPUParticlesCollisionSDF3D_property_resolution>` | ``2`` |
+---------------------------------------------------------------+-------------------------------------------------------------------------+----------------------+
| :ref:`Vector3<class_Vector3>` | :ref:`size<class_GPUParticlesCollisionSDF3D_property_size>` | ``Vector3(2, 2, 2)`` |
+---------------------------------------------------------------+-------------------------------------------------------------------------+----------------------+
| :ref:`Texture3D<class_Texture3D>` | :ref:`texture<class_GPUParticlesCollisionSDF3D_property_texture>` | |
+---------------------------------------------------------------+-------------------------------------------------------------------------+----------------------+
| :ref:`float<class_float>` | :ref:`thickness<class_GPUParticlesCollisionSDF3D_property_thickness>` | ``1.0`` |
+---------------------------------------------------------------+-------------------------------------------------------------------------+----------------------+
.. rst-class:: classref-reftable-group
方法
----
.. table::
:widths: auto
+-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`get_bake_mask_value<class_GPUParticlesCollisionSDF3D_method_get_bake_mask_value>` **(** :ref:`int<class_int>` layer_number **)** |const| |
+-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`set_bake_mask_value<class_GPUParticlesCollisionSDF3D_method_set_bake_mask_value>` **(** :ref:`int<class_int>` layer_number, :ref:`bool<class_bool>` value **)** |
+-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
枚举
----
.. _enum_GPUParticlesCollisionSDF3D_Resolution:
.. rst-class:: classref-enumeration
enum **Resolution**:
.. _class_GPUParticlesCollisionSDF3D_constant_RESOLUTION_16:
.. rst-class:: classref-enumeration-constant
:ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` **RESOLUTION_16** = ``0``
烘焙 16×16×16 的有符号距离场。这是最快的选项,但也是最不精确的。
.. _class_GPUParticlesCollisionSDF3D_constant_RESOLUTION_32:
.. rst-class:: classref-enumeration-constant
:ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` **RESOLUTION_32** = ``1``
烘焙 32×32×32 的有符号距离场。
.. _class_GPUParticlesCollisionSDF3D_constant_RESOLUTION_64:
.. rst-class:: classref-enumeration-constant
:ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` **RESOLUTION_64** = ``2``
烘焙 64×64×64 的有符号距离场。
.. _class_GPUParticlesCollisionSDF3D_constant_RESOLUTION_128:
.. rst-class:: classref-enumeration-constant
:ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` **RESOLUTION_128** = ``3``
烘焙 128×128×128 的有符号距离场。
.. _class_GPUParticlesCollisionSDF3D_constant_RESOLUTION_256:
.. rst-class:: classref-enumeration-constant
:ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` **RESOLUTION_256** = ``4``
烘焙 256×256×256 的有符号距离场。
.. _class_GPUParticlesCollisionSDF3D_constant_RESOLUTION_512:
.. rst-class:: classref-enumeration-constant
:ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` **RESOLUTION_512** = ``5``
烘焙 512×512×512 的有符号距离场。这是最慢的选项,但也是最精确的。
.. _class_GPUParticlesCollisionSDF3D_constant_RESOLUTION_MAX:
.. rst-class:: classref-enumeration-constant
:ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` **RESOLUTION_MAX** = ``6``
代表 :ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` 枚举的大小。
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
属性说明
--------
.. _class_GPUParticlesCollisionSDF3D_property_bake_mask:
.. rst-class:: classref-property
:ref:`int<class_int>` **bake_mask** = ``4294967295``
.. rst-class:: classref-property-setget
- void **set_bake_mask** **(** :ref:`int<class_int>` value **)**
- :ref:`int<class_int>` **get_bake_mask** **(** **)**
烘焙粒子碰撞 SDF 时要考虑的可视层。只有其 :ref:`VisualInstance3D.layers<class_VisualInstance3D_property_layers>` 与该 :ref:`bake_mask<class_GPUParticlesCollisionSDF3D_property_bake_mask>` 匹配的 :ref:`MeshInstance3D<class_MeshInstance3D>`\ ,才会被包含在生成的粒子碰撞 SDF 中。默认情况下,粒子碰撞 SDF 烘焙会考虑所有对象。
.. rst-class:: classref-item-separator
----
.. _class_GPUParticlesCollisionSDF3D_property_resolution:
.. rst-class:: classref-property
:ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` **resolution** = ``2``
.. rst-class:: classref-property-setget
- void **set_resolution** **(** :ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` value **)**
- :ref:`Resolution<enum_GPUParticlesCollisionSDF3D_Resolution>` **get_resolution** **(** **)**
用于有符号距离场 :ref:`texture<class_GPUParticlesCollisionSDF3D_property_texture>` 的烘焙分辨率。必须再次烘焙纹理,才能使 :ref:`resolution<class_GPUParticlesCollisionSDF3D_property_resolution>` 属性的更改生效。更高的分辨率具有更高的性能成本,并且需要更多的时间来烘焙。更高的分辨率还会产生更大的烘焙纹理,从而增加 VRAM 和存储的空间需求。要提高性能并减少烘焙时间,请为表示碰撞的对象使用尽可能低的分辨率。
.. rst-class:: classref-item-separator
----
.. _class_GPUParticlesCollisionSDF3D_property_size:
.. rst-class:: classref-property
:ref:`Vector3<class_Vector3>` **size** = ``Vector3(2, 2, 2)``
.. rst-class:: classref-property-setget
- void **set_size** **(** :ref:`Vector3<class_Vector3>` value **)**
- :ref:`Vector3<class_Vector3>` **get_size** **(** **)**
碰撞 SDF 的大小,单位为 3D 单位。为了提高 SDF 质量,应在能覆盖需要的场景部分的同时,将 :ref:`size<class_GPUParticlesCollisionSDF3D_property_size>` 设置得尽可能小。
.. rst-class:: classref-item-separator
----
.. _class_GPUParticlesCollisionSDF3D_property_texture:
.. rst-class:: classref-property
:ref:`Texture3D<class_Texture3D>` **texture**
.. rst-class:: classref-property-setget
- void **set_texture** **(** :ref:`Texture3D<class_Texture3D>` value **)**
- :ref:`Texture3D<class_Texture3D>` **get_texture** **(** **)**
代表有符号距离场的 3D 纹理。
.. rst-class:: classref-item-separator
----
.. _class_GPUParticlesCollisionSDF3D_property_thickness:
.. rst-class:: classref-property
:ref:`float<class_float>` **thickness** = ``1.0``
.. rst-class:: classref-property-setget
- void **set_thickness** **(** :ref:`float<class_float>` value **)**
- :ref:`float<class_float>` **get_thickness** **(** **)**
碰撞形状的厚度。与其他粒子碰撞器不同,\ **GPUParticlesCollisionSDF3D** 实际上内部是空心的。可以增加 :ref:`thickness<class_GPUParticlesCollisionSDF3D_property_thickness>`\ ,以防止粒子在高速运动、或者当 **GPUParticlesCollisionSDF3D** 移动时,穿过碰撞形状。
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
方法说明
--------
.. _class_GPUParticlesCollisionSDF3D_method_get_bake_mask_value:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **get_bake_mask_value** **(** :ref:`int<class_int>` layer_number **)** |const|
返回是否启用了 :ref:`bake_mask<class_GPUParticlesCollisionSDF3D_property_bake_mask>` 的指定层,该层由给定的一个介于 1 和 32 之间的 ``layer_number`` 指定。
.. rst-class:: classref-item-separator
----
.. _class_GPUParticlesCollisionSDF3D_method_set_bake_mask_value:
.. rst-class:: classref-method
void **set_bake_mask_value** **(** :ref:`int<class_int>` layer_number, :ref:`bool<class_bool>` value **)**
基于 ``value``\ ,启用或禁用 :ref:`bake_mask<class_GPUParticlesCollisionSDF3D_property_bake_mask>` 中的指定层,该层由给定的一个介于 1 和 32 之间的 ``layer_number`` 指定。
.. |virtual| replace:: :abbr:`virtual (本方法通常需要用户覆盖才能生效。)`
.. |const| replace:: :abbr:`const (本方法没有副作用。不会修改该实例的任何成员变量。)`
.. |vararg| replace:: :abbr:`vararg (本方法除了在此处描述的参数外,还能够继续接受任意数量的参数。)`
.. |constructor| replace:: :abbr:`constructor (本方法用于构造某个类型。)`
.. |static| replace:: :abbr:`static (调用本方法无需实例,所以可以直接使用类名调用。)`
.. |operator| replace:: :abbr:`operator (本方法描述的是使用本类型作为左操作数的有效操作符。)`
.. |bitfield| replace:: :abbr:`BitField (这个值是由下列标志构成的位掩码整数。)`