Files
godot-docs-l10n/classes/ru/class_surfacetool.rst
Rémi Verschelde c3f2364c10 Sync classref with 4.6 branch
Lots of translations invalidated (fuzzied) as we just synced Weblate.
2025-12-19 16:39:51 +01:00

686 lines
73 KiB
ReStructuredText
Raw Permalink 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
.. _class_SurfaceTool:
SurfaceTool
===========
**Наследует:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
Вспомогательный инструмент для создания геометрии.
.. rst-class:: classref-introduction-group
Описание
----------------
**SurfaceTool** используется для построения :ref:`Mesh<class_Mesh>` путем указания атрибутов вершин по отдельности. Его можно использовать для построения :ref:`Mesh<class_Mesh>` из скрипта. Все свойства, кроме индексов, необходимо добавить до вызова :ref:`add_vertex()<class_SurfaceTool_method_add_vertex>`. Например, чтобы добавить цвета вершин и UV:
.. tabs::
.. code-tab:: gdscript
var st = SurfaceTool.new()
st.begin(Mesh.PRIMITIVE_TRIANGLES)
st.set_color(Color(1, 0, 0))
st.set_uv(Vector2(0, 0))
st.add_vertex(Vector3(0, 0, 0))
.. code-tab:: csharp
var st = new SurfaceTool();
st.Begin(Mesh.PrimitiveType.Triangles);
st.SetColor(new Color(1, 0, 0));
st.SetUV(new Vector2(0, 0));
st.AddVertex(new Vector3(0, 0, 0));
Вышеуказанный **SurfaceTool** теперь содержит одну вершину треугольника, которая имеет координату UV и указанный :ref:`Color<class_Color>`. Если бы была добавлена другая вершина без вызова :ref:`set_uv()<class_SurfaceTool_method_set_uv>` или :ref:`set_color()<class_SurfaceTool_method_set_color>`, то использовались бы последние значения.
Атрибуты вершины должны быть переданы **перед** вызовом :ref:`add_vertex()<class_SurfaceTool_method_add_vertex>`. Невыполнение этого требования приведет к ошибке при фиксации информации о вершине в сетке.
Кроме того, атрибуты, используемые до добавления первой вершины, определяют формат сетки. Например, если вы добавляете UV только к первой вершине, вы не можете добавить цвет ни к одной из последующих вершин.
См. также :ref:`ArrayMesh<class_ArrayMesh>`, :ref:`ImmediateMesh<class_ImmediateMesh>` и :ref:`MeshDataTool<class_MeshDataTool>` для процедурной генерации геометрии.
\ **Примечание:** Годо использует `порядок намотки <https://learnopengl.com/Advanced-OpenGL/Face-culling>`__ по часовой стрелке для передних граней примитивных режимов треугольника.
.. rst-class:: classref-introduction-group
Обучающие материалы
--------------------------------------
- :doc:`Использование SurfaceTool <../tutorials/3d/procedural_geometry/surfacetool>`
- `Демоверсия 3D вокселей <https://godotengine.org/asset-library/asset/2755>`__
.. rst-class:: classref-reftable-group
Методы
------------
.. table::
:widths: auto
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`add_index<class_SurfaceTool_method_add_index>`\ (\ index\: :ref:`int<class_int>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`add_triangle_fan<class_SurfaceTool_method_add_triangle_fan>`\ (\ vertices\: :ref:`PackedVector3Array<class_PackedVector3Array>`, uvs\: :ref:`PackedVector2Array<class_PackedVector2Array>` = PackedVector2Array(), colors\: :ref:`PackedColorArray<class_PackedColorArray>` = PackedColorArray(), uv2s\: :ref:`PackedVector2Array<class_PackedVector2Array>` = PackedVector2Array(), normals\: :ref:`PackedVector3Array<class_PackedVector3Array>` = PackedVector3Array(), tangents\: :ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\] = []\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`add_vertex<class_SurfaceTool_method_add_vertex>`\ (\ vertex\: :ref:`Vector3<class_Vector3>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`append_from<class_SurfaceTool_method_append_from>`\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`, transform\: :ref:`Transform3D<class_Transform3D>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`begin<class_SurfaceTool_method_begin>`\ (\ primitive\: :ref:`PrimitiveType<enum_Mesh_PrimitiveType>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`clear<class_SurfaceTool_method_clear>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`ArrayMesh<class_ArrayMesh>` | :ref:`commit<class_SurfaceTool_method_commit>`\ (\ existing\: :ref:`ArrayMesh<class_ArrayMesh>` = null, flags\: :ref:`int<class_int>` = 0\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Array<class_Array>` | :ref:`commit_to_arrays<class_SurfaceTool_method_commit_to_arrays>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`create_from<class_SurfaceTool_method_create_from>`\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`create_from_arrays<class_SurfaceTool_method_create_from_arrays>`\ (\ arrays\: :ref:`Array<class_Array>`, primitive_type\: :ref:`PrimitiveType<enum_Mesh_PrimitiveType>` = 3\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`create_from_blend_shape<class_SurfaceTool_method_create_from_blend_shape>`\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`, blend_shape\: :ref:`String<class_String>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`deindex<class_SurfaceTool_method_deindex>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedInt32Array<class_PackedInt32Array>` | :ref:`generate_lod<class_SurfaceTool_method_generate_lod>`\ (\ nd_threshold\: :ref:`float<class_float>`, target_index_count\: :ref:`int<class_int>` = 3\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`generate_normals<class_SurfaceTool_method_generate_normals>`\ (\ flip\: :ref:`bool<class_bool>` = false\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`generate_tangents<class_SurfaceTool_method_generate_tangents>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`AABB<class_AABB>` | :ref:`get_aabb<class_SurfaceTool_method_get_aabb>`\ (\ ) |const| |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` | :ref:`get_custom_format<class_SurfaceTool_method_get_custom_format>`\ (\ channel_index\: :ref:`int<class_int>`\ ) |const| |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PrimitiveType<enum_Mesh_PrimitiveType>` | :ref:`get_primitive_type<class_SurfaceTool_method_get_primitive_type>`\ (\ ) |const| |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>` | :ref:`get_skin_weight_count<class_SurfaceTool_method_get_skin_weight_count>`\ (\ ) |const| |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`index<class_SurfaceTool_method_index>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`optimize_indices_for_cache<class_SurfaceTool_method_optimize_indices_for_cache>`\ (\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_bones<class_SurfaceTool_method_set_bones>`\ (\ bones\: :ref:`PackedInt32Array<class_PackedInt32Array>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_color<class_SurfaceTool_method_set_color>`\ (\ color\: :ref:`Color<class_Color>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_custom<class_SurfaceTool_method_set_custom>`\ (\ channel_index\: :ref:`int<class_int>`, custom_color\: :ref:`Color<class_Color>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_custom_format<class_SurfaceTool_method_set_custom_format>`\ (\ channel_index\: :ref:`int<class_int>`, format\: :ref:`CustomFormat<enum_SurfaceTool_CustomFormat>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_material<class_SurfaceTool_method_set_material>`\ (\ material\: :ref:`Material<class_Material>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_normal<class_SurfaceTool_method_set_normal>`\ (\ normal\: :ref:`Vector3<class_Vector3>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_skin_weight_count<class_SurfaceTool_method_set_skin_weight_count>`\ (\ count\: :ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_smooth_group<class_SurfaceTool_method_set_smooth_group>`\ (\ index\: :ref:`int<class_int>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_tangent<class_SurfaceTool_method_set_tangent>`\ (\ tangent\: :ref:`Plane<class_Plane>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_uv<class_SurfaceTool_method_set_uv>`\ (\ uv\: :ref:`Vector2<class_Vector2>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_uv2<class_SurfaceTool_method_set_uv2>`\ (\ uv2\: :ref:`Vector2<class_Vector2>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_weights<class_SurfaceTool_method_set_weights>`\ (\ weights\: :ref:`PackedFloat32Array<class_PackedFloat32Array>`\ ) |
+----------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
Перечисления
------------------------
.. _enum_SurfaceTool_CustomFormat:
.. rst-class:: classref-enumeration
enum **CustomFormat**: :ref:`🔗<enum_SurfaceTool_CustomFormat>`
.. _class_SurfaceTool_constant_CUSTOM_RGBA8_UNORM:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RGBA8_UNORM** = ``0``
Ограничивает диапазон данных, передаваемых в :ref:`set_custom()<class_SurfaceTool_method_set_custom>`, беззнаковыми нормализованными значениями от 0 до 1, хранящимися в 8 битах на канал. См. :ref:`Mesh.ARRAY_CUSTOM_RGBA8_UNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_UNORM>`.
.. _class_SurfaceTool_constant_CUSTOM_RGBA8_SNORM:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RGBA8_SNORM** = ``1``
Ограничивает диапазон данных, передаваемых в :ref:`set_custom()<class_SurfaceTool_method_set_custom>`, до нормализованных со знаком от -1 до 1, хранящихся в 8 битах на канал. См. :ref:`Mesh.ARRAY_CUSTOM_RGBA8_SNORM<class_Mesh_constant_ARRAY_CUSTOM_RGBA8_SNORM>`.
.. _class_SurfaceTool_constant_CUSTOM_RG_HALF:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RG_HALF** = ``2``
Сохраняет данные, переданные в :ref:`set_custom()<class_SurfaceTool_method_set_custom>`, как числа с плавающей точкой половинной точности (half precision float) и использует только каналы красного и зеленого цветов. См. :ref:`Mesh.ARRAY_CUSTOM_RG_HALF<class_Mesh_constant_ARRAY_CUSTOM_RG_HALF>`.
.. _class_SurfaceTool_constant_CUSTOM_RGBA_HALF:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RGBA_HALF** = ``3``
Сохраняет данные, переданные в :ref:`set_custom()<class_SurfaceTool_method_set_custom>`, как числа с плавающей точкой половинной точности (half precision float) и использует все цветовые каналы. См. :ref:`Mesh.ARRAY_CUSTOM_RGBA_HALF<class_Mesh_constant_ARRAY_CUSTOM_RGBA_HALF>`.
.. _class_SurfaceTool_constant_CUSTOM_R_FLOAT:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_R_FLOAT** = ``4``
Сохраняет данные, переданные в :ref:`set_custom()<class_SurfaceTool_method_set_custom>`, как числа с плавающей точкой полной точности (full precision float) и использует только красный цветовой канал. См. :ref:`Mesh.ARRAY_CUSTOM_R_FLOAT<class_Mesh_constant_ARRAY_CUSTOM_R_FLOAT>`.
.. _class_SurfaceTool_constant_CUSTOM_RG_FLOAT:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RG_FLOAT** = ``5``
Сохраняет данные, переданные в :ref:`set_custom()<class_SurfaceTool_method_set_custom>`, как числа с плавающей точкой полной точности (full precision float) и использует только каналы красного и зеленого цветов. См. :ref:`Mesh.ARRAY_CUSTOM_RG_FLOAT<class_Mesh_constant_ARRAY_CUSTOM_RG_FLOAT>`.
.. _class_SurfaceTool_constant_CUSTOM_RGB_FLOAT:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RGB_FLOAT** = ``6``
Сохраняет данные, переданные в :ref:`set_custom()<class_SurfaceTool_method_set_custom>`, как числа с плавающей точкой полной точности (full precision float) и использует только каналы красного, зеленого и синего цвета. См. :ref:`Mesh.ARRAY_CUSTOM_RGB_FLOAT<class_Mesh_constant_ARRAY_CUSTOM_RGB_FLOAT>`.
.. _class_SurfaceTool_constant_CUSTOM_RGBA_FLOAT:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_RGBA_FLOAT** = ``7``
Сохраняет данные, переданные в ``methodset_custom``, как числа с плавающей точкой полной точности (full precision float) и использует все цветовые каналы. См. :ref:`Mesh.ARRAY_CUSTOM_RGBA_FLOAT<class_Mesh_constant_ARRAY_CUSTOM_RGBA_FLOAT>`.
.. _class_SurfaceTool_constant_CUSTOM_MAX:
.. rst-class:: classref-enumeration-constant
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **CUSTOM_MAX** = ``8``
Используется для обозначения отключенного пользовательского канала.
.. rst-class:: classref-item-separator
----
.. _enum_SurfaceTool_SkinWeightCount:
.. rst-class:: classref-enumeration
enum **SkinWeightCount**: :ref:`🔗<enum_SurfaceTool_SkinWeightCount>`
.. _class_SurfaceTool_constant_SKIN_4_WEIGHTS:
.. rst-class:: classref-enumeration-constant
:ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>` **SKIN_4_WEIGHTS** = ``0``
На каждую отдельную вершину могут влиять только 4 веса костей.
.. _class_SurfaceTool_constant_SKIN_8_WEIGHTS:
.. rst-class:: classref-enumeration-constant
:ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>` **SKIN_8_WEIGHTS** = ``1``
На каждую отдельную вершину может влиять до 8 весов костей.
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
Описания метода
------------------------------
.. _class_SurfaceTool_method_add_index:
.. rst-class:: classref-method
|void| **add_index**\ (\ index\: :ref:`int<class_int>`\ ) :ref:`🔗<class_SurfaceTool_method_add_index>`
Добавляет вершину в индексный массив, если вы используете индексированные вершины. Не нужно вызывать перед добавлением вершин.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_add_triangle_fan:
.. rst-class:: classref-method
|void| **add_triangle_fan**\ (\ vertices\: :ref:`PackedVector3Array<class_PackedVector3Array>`, uvs\: :ref:`PackedVector2Array<class_PackedVector2Array>` = PackedVector2Array(), colors\: :ref:`PackedColorArray<class_PackedColorArray>` = PackedColorArray(), uv2s\: :ref:`PackedVector2Array<class_PackedVector2Array>` = PackedVector2Array(), normals\: :ref:`PackedVector3Array<class_PackedVector3Array>` = PackedVector3Array(), tangents\: :ref:`Array<class_Array>`\[:ref:`Plane<class_Plane>`\] = []\ ) :ref:`🔗<class_SurfaceTool_method_add_triangle_fan>`
Вставляет треугольный веер, созданный из массива данных, в создаваемую :ref:`Mesh<class_Mesh>`.
Требует, чтобы тип примитива был установлен на :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_add_vertex:
.. rst-class:: classref-method
|void| **add_vertex**\ (\ vertex\: :ref:`Vector3<class_Vector3>`\ ) :ref:`🔗<class_SurfaceTool_method_add_vertex>`
Указывает положение текущей вершины. Следует вызывать после указания других свойств вершины (например, цвета, UV).
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_append_from:
.. rst-class:: classref-method
|void| **append_from**\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`, transform\: :ref:`Transform3D<class_Transform3D>`\ ) :ref:`🔗<class_SurfaceTool_method_append_from>`
Добавить вершины из заданной поверхности :ref:`Mesh<class_Mesh>` в текущий массив вершин с указанным :ref:`Transform3D<class_Transform3D>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_begin:
.. rst-class:: classref-method
|void| **begin**\ (\ primitive\: :ref:`PrimitiveType<enum_Mesh_PrimitiveType>`\ ) :ref:`🔗<class_SurfaceTool_method_begin>`
Вызывается перед добавлением вершин. Принимает примитивный тип в качестве аргумента (например, :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`).
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_clear:
.. rst-class:: classref-method
|void| **clear**\ (\ ) :ref:`🔗<class_SurfaceTool_method_clear>`
Очистите всю информацию, переданную на данный момент в surface tool.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_commit:
.. rst-class:: classref-method
:ref:`ArrayMesh<class_ArrayMesh>` **commit**\ (\ existing\: :ref:`ArrayMesh<class_ArrayMesh>` = null, flags\: :ref:`int<class_int>` = 0\ ) :ref:`🔗<class_SurfaceTool_method_commit>`
Возвращает сконструированный :ref:`ArrayMesh<class_ArrayMesh>` из текущей переданной информации. Если существующая :ref:`ArrayMesh<class_ArrayMesh>` передана в качестве аргумента, добавит дополнительную поверхность к существующей :ref:`ArrayMesh<class_ArrayMesh>`.
Аргумент ``flags`` может быть побитовым ИЛИ :ref:`Mesh.ARRAY_FLAG_USE_DYNAMIC_UPDATE<class_Mesh_constant_ARRAY_FLAG_USE_DYNAMIC_UPDATE>`, :ref:`Mesh.ARRAY_FLAG_USE_8_BONE_WEIGHTS<class_Mesh_constant_ARRAY_FLAG_USE_8_BONE_WEIGHTS>` или :ref:`Mesh.ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY<class_Mesh_constant_ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_commit_to_arrays:
.. rst-class:: classref-method
:ref:`Array<class_Array>` **commit_to_arrays**\ (\ ) :ref:`🔗<class_SurfaceTool_method_commit_to_arrays>`
Фиксирует данные в том же формате, который используется :ref:`ArrayMesh.add_surface_from_arrays()<class_ArrayMesh_method_add_surface_from_arrays>`, :ref:`ImporterMesh.add_surface()<class_ImporterMesh_method_add_surface>` и :ref:`create_from_arrays()<class_SurfaceTool_method_create_from_arrays>`. Таким образом, вы можете дополнительно обрабатывать данные сетки с помощью API :ref:`ArrayMesh<class_ArrayMesh>` или :ref:`ImporterMesh<class_ImporterMesh>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_create_from:
.. rst-class:: classref-method
|void| **create_from**\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`\ ) :ref:`🔗<class_SurfaceTool_method_create_from>`
Создает массив вершин из существующего :ref:`Mesh<class_Mesh>`'а.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_create_from_arrays:
.. rst-class:: classref-method
|void| **create_from_arrays**\ (\ arrays\: :ref:`Array<class_Array>`, primitive_type\: :ref:`PrimitiveType<enum_Mesh_PrimitiveType>` = 3\ ) :ref:`🔗<class_SurfaceTool_method_create_from_arrays>`
Создает этот SurfaceTool из существующих массивов вершин, таких как возвращаемые :ref:`commit_to_arrays()<class_SurfaceTool_method_commit_to_arrays>`, :ref:`Mesh.surface_get_arrays()<class_Mesh_method_surface_get_arrays>`, :ref:`Mesh.surface_get_blend_shape_arrays()<class_Mesh_method_surface_get_blend_shape_arrays>`, :ref:`ImporterMesh.get_surface_arrays()<class_ImporterMesh_method_get_surface_arrays>` и :ref:`ImporterMesh.get_surface_blend_shape_arrays()<class_ImporterMesh_method_get_surface_blend_shape_arrays>`. ``primitive_type`` управляет типом данных сетки, по умолчанию равным :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_create_from_blend_shape:
.. rst-class:: classref-method
|void| **create_from_blend_shape**\ (\ existing\: :ref:`Mesh<class_Mesh>`, surface\: :ref:`int<class_int>`, blend_shape\: :ref:`String<class_String>`\ ) :ref:`🔗<class_SurfaceTool_method_create_from_blend_shape>`
Создает массив вершин из указанной формы смешивания (blend shape) существующей в :ref:`Mesh<class_Mesh>`. Это может быть использовано для извлечения определенной позы из формы смешивания.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_deindex:
.. rst-class:: classref-method
|void| **deindex**\ (\ ) :ref:`🔗<class_SurfaceTool_method_deindex>`
Удаляет массив индексов путем расширения массива вершин.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_generate_lod:
.. rst-class:: classref-method
:ref:`PackedInt32Array<class_PackedInt32Array>` **generate_lod**\ (\ nd_threshold\: :ref:`float<class_float>`, target_index_count\: :ref:`int<class_int>` = 3\ ) :ref:`🔗<class_SurfaceTool_method_generate_lod>`
**Устарело:** This method is unused internally, as it does not preserve normals or UVs. Consider using :ref:`ImporterMesh.generate_lods()<class_ImporterMesh_method_generate_lods>` instead.
Генерирует LOD для заданного ``nd_threshold`` в линейных единицах (квадратный корень квадратичной метрики ошибки), используя не более ``target_index_count`` индексов.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_generate_normals:
.. rst-class:: classref-method
|void| **generate_normals**\ (\ flip\: :ref:`bool<class_bool>` = false\ ) :ref:`🔗<class_SurfaceTool_method_generate_normals>`
Генерирует нормали из вершин, поэтому вам не придется делать это вручную. Если ``flip`` равен ``true``, результирующие нормали будут инвертированы. :ref:`generate_normals()<class_SurfaceTool_method_generate_normals>` следует вызывать *после* генерации геометрии и *до* фиксации сетки с помощью :ref:`commit()<class_SurfaceTool_method_commit>` или :ref:`commit_to_arrays()<class_SurfaceTool_method_commit_to_arrays>`. Для корректного отображения поверхностей с отображением нормалей вам также придется генерировать касательные с помощью :ref:`generate_tangents()<class_SurfaceTool_method_generate_tangents>`.
\ **Примечание:** :ref:`generate_normals()<class_SurfaceTool_method_generate_normals>` работает только в том случае, если тип примитива установлен на :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`.
\ **Примечание:** :ref:`generate_normals()<class_SurfaceTool_method_generate_normals>` учитывает группы сглаживания. Для генерации гладких нормалей установите для гладкой группы значение большее или равное ``0`` с помощью :ref:`set_smooth_group()<class_SurfaceTool_method_set_smooth_group>` или оставьте для гладкой группы значение по умолчанию ``0``. Для генерации плоских нормалей установите для гладкой группы значение ``-1`` с помощью :ref:`set_smooth_group()<class_SurfaceTool_method_set_smooth_group>` перед добавлением вершин.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_generate_tangents:
.. rst-class:: classref-method
|void| **generate_tangents**\ (\ ) :ref:`🔗<class_SurfaceTool_method_generate_tangents>`
Генерирует касательный вектор для каждой вершины. Требует, чтобы каждая вершина уже имела UV и нормали (см. :ref:`generate_normals()<class_SurfaceTool_method_generate_normals>`).
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_get_aabb:
.. rst-class:: classref-method
:ref:`AABB<class_AABB>` **get_aabb**\ (\ ) |const| :ref:`🔗<class_SurfaceTool_method_get_aabb>`
Возвращает выровненный по осям ограничивающий прямоугольник позиций вершин.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_get_custom_format:
.. rst-class:: classref-method
:ref:`CustomFormat<enum_SurfaceTool_CustomFormat>` **get_custom_format**\ (\ channel_index\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_SurfaceTool_method_get_custom_format>`
Возвращает формат для пользовательского ``channel_index`` (в настоящее время до 4). Возвращает :ref:`CUSTOM_MAX<class_SurfaceTool_constant_CUSTOM_MAX>`, если этот пользовательский канал не используется.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_get_primitive_type:
.. rst-class:: classref-method
:ref:`PrimitiveType<enum_Mesh_PrimitiveType>` **get_primitive_type**\ (\ ) |const| :ref:`🔗<class_SurfaceTool_method_get_primitive_type>`
Возвращает тип геометрии сетки, например :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_get_skin_weight_count:
.. rst-class:: classref-method
:ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>` **get_skin_weight_count**\ (\ ) |const| :ref:`🔗<class_SurfaceTool_method_get_skin_weight_count>`
По умолчанию возвращает :ref:`SKIN_4_WEIGHTS<class_SurfaceTool_constant_SKIN_4_WEIGHTS>`, чтобы указать, что используются только 4 влияния костей на вершину.
Возвращает :ref:`SKIN_8_WEIGHTS<class_SurfaceTool_constant_SKIN_8_WEIGHTS>`, если используется до 8 влияний.
\ **Примечание:** Эта функция возвращает перечисление, а не точное количество весов.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_index:
.. rst-class:: classref-method
|void| **index**\ (\ ) :ref:`🔗<class_SurfaceTool_method_index>`
Сжимает массив вершин, создавая массив индексов. Это может повысить производительность, избегая повторного использования вершин.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_optimize_indices_for_cache:
.. rst-class:: classref-method
|void| **optimize_indices_for_cache**\ (\ ) :ref:`🔗<class_SurfaceTool_method_optimize_indices_for_cache>`
Оптимизирует сортировку треугольников для производительности. Требует, чтобы :ref:`get_primitive_type()<class_SurfaceTool_method_get_primitive_type>` был :ref:`Mesh.PRIMITIVE_TRIANGLES<class_Mesh_constant_PRIMITIVE_TRIANGLES>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_bones:
.. rst-class:: classref-method
|void| **set_bones**\ (\ bones\: :ref:`PackedInt32Array<class_PackedInt32Array>`\ ) :ref:`🔗<class_SurfaceTool_method_set_bones>`
Указывает массив костей, которые будут использоваться для *следующей* вершины. ``bones`` должен содержать 4 целых числа.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_color:
.. rst-class:: classref-method
|void| **set_color**\ (\ color\: :ref:`Color<class_Color>`\ ) :ref:`🔗<class_SurfaceTool_method_set_color>`
Указывает :ref:`Color<class_Color>`, который будет использоваться для *следующей* вершины. Если для каждой вершины необходимо задать эту информацию, а вы не предоставите ее для первой вершины, эта информация может вообще не использоваться.
\ **Примечание:** Материал должен иметь включенный :ref:`BaseMaterial3D.vertex_color_use_as_albedo<class_BaseMaterial3D_property_vertex_color_use_as_albedo>`, чтобы цвет вершины был виден.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_custom:
.. rst-class:: classref-method
|void| **set_custom**\ (\ channel_index\: :ref:`int<class_int>`, custom_color\: :ref:`Color<class_Color>`\ ) :ref:`🔗<class_SurfaceTool_method_set_custom>`
Устанавливает пользовательское значение для этой вершины для ``channel_index``.
\ :ref:`set_custom_format()<class_SurfaceTool_method_set_custom_format>` должен быть вызван первым для этого ``channel_index``. Форматы, которые не являются RGBA, будут игнорировать другие цветовые каналы.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_custom_format:
.. rst-class:: classref-method
|void| **set_custom_format**\ (\ channel_index\: :ref:`int<class_int>`, format\: :ref:`CustomFormat<enum_SurfaceTool_CustomFormat>`\ ) :ref:`🔗<class_SurfaceTool_method_set_custom_format>`
Устанавливает формат цвета для этого пользовательского ``channel_index``. Используйте :ref:`CUSTOM_MAX<class_SurfaceTool_constant_CUSTOM_MAX>` для отключения.
Должен вызываться после :ref:`begin()<class_SurfaceTool_method_begin>` и должен быть установлен до :ref:`commit()<class_SurfaceTool_method_commit>` или :ref:`commit_to_arrays()<class_SurfaceTool_method_commit_to_arrays>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_material:
.. rst-class:: classref-method
|void| **set_material**\ (\ material\: :ref:`Material<class_Material>`\ ) :ref:`🔗<class_SurfaceTool_method_set_material>`
Устанавливает :ref:`Material<class_Material>`, который будет использоваться в создаваемом вами :ref:`Mesh<class_Mesh>`'е.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_normal:
.. rst-class:: classref-method
|void| **set_normal**\ (\ normal\: :ref:`Vector3<class_Vector3>`\ ) :ref:`🔗<class_SurfaceTool_method_set_normal>`
Указывает нормаль для использования для *следующей* вершины. Если для каждой вершины необходимо установить эту информацию, а вы не предоставили ее для первой вершины, эта информация может вообще не использоваться.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_skin_weight_count:
.. rst-class:: classref-method
|void| **set_skin_weight_count**\ (\ count\: :ref:`SkinWeightCount<enum_SurfaceTool_SkinWeightCount>`\ ) :ref:`🔗<class_SurfaceTool_method_set_skin_weight_count>`
Установите :ref:`SKIN_8_WEIGHTS<class_SurfaceTool_constant_SKIN_8_WEIGHTS>`, чтобы указать, что можно использовать до 8 влияний костей на вершину.
По умолчанию используются только 4 влияния костей (:ref:`SKIN_4_WEIGHTS<class_SurfaceTool_constant_SKIN_4_WEIGHTS>`).
\ **Примечание:** Эта функция принимает перечисление, а не точное количество весов.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_smooth_group:
.. rst-class:: classref-method
|void| **set_smooth_group**\ (\ index\: :ref:`int<class_int>`\ ) :ref:`🔗<class_SurfaceTool_method_set_smooth_group>`
Указывает группу сглаживания, используемую для *следующей* вершины. Если эта функция никогда не вызывается, все вершины будут иметь группу сглаживания по умолчанию ``0`` и будут сглажены с соседними вершинами той же группы. Чтобы создать сетку с плоскими нормалями, установите группу сглаживания на ``-1``.
\ **Примечание:** Эта функция на самом деле принимает ``uint32_t``, поэтому пользователи C# должны использовать ``uint32.MaxValue`` вместо ``-1`` для создания сетки с плоскими нормалями.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_tangent:
.. rst-class:: classref-method
|void| **set_tangent**\ (\ tangent\: :ref:`Plane<class_Plane>`\ ) :ref:`🔗<class_SurfaceTool_method_set_tangent>`
Specifies a tangent to use for the *next* vertex. If every vertex needs to have this information set and you fail to submit it for the first vertex, this information may not be used at all.
\ **Note:** Even though ``tangent`` is a :ref:`Plane<class_Plane>`, it does not directly represent the tangent plane. Its :ref:`Plane.x<class_Plane_property_x>`, :ref:`Plane.y<class_Plane_property_y>`, and :ref:`Plane.z<class_Plane_property_z>` represent the tangent vector and :ref:`Plane.d<class_Plane_property_d>` should be either ``-1`` or ``1``. See also :ref:`Mesh.ARRAY_TANGENT<class_Mesh_constant_ARRAY_TANGENT>`.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_uv:
.. rst-class:: classref-method
|void| **set_uv**\ (\ uv\: :ref:`Vector2<class_Vector2>`\ ) :ref:`🔗<class_SurfaceTool_method_set_uv>`
Указывает набор UV-координат для использования в *следующей* вершине. Если для каждой вершины необходимо установить эту информацию, а вы не предоставили ее для первой вершины, эта информация может вообще не использоваться.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_uv2:
.. rst-class:: classref-method
|void| **set_uv2**\ (\ uv2\: :ref:`Vector2<class_Vector2>`\ ) :ref:`🔗<class_SurfaceTool_method_set_uv2>`
Указывает необязательный второй набор UV-координат для использования для *следующей* вершины. Если для каждой вершины необходимо установить эту информацию, а вы не предоставили ее для первой вершины, эта информация может вообще не использоваться.
.. rst-class:: classref-item-separator
----
.. _class_SurfaceTool_method_set_weights:
.. rst-class:: classref-method
|void| **set_weights**\ (\ weights\: :ref:`PackedFloat32Array<class_PackedFloat32Array>`\ ) :ref:`🔗<class_SurfaceTool_method_set_weights>`
Указывает значения веса для использования для *следующей* вершины. ``weights`` должен содержать 4 значения. Если для каждой вершины необходимо установить эту информацию, а вы не предоставили ее для первой вершины, эта информация может вообще не использоваться.
.. |virtual| replace:: :abbr:`virtual (Этот метод обычно должен быть переопределен пользователем, чтобы иметь какой-либо эффект.)`
.. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)`
.. |const| replace:: :abbr:`const (Этот метод не имеет побочных эффектов. Он не изменяет ни одну из переменных-членов экземпляра.)`
.. |vararg| replace:: :abbr:`vararg (Этот метод принимает любое количество аргументов после описанных здесь.)`
.. |constructor| replace:: :abbr:`constructor (Этот метод используется для создания типа.)`
.. |static| replace:: :abbr:`static (Этот метод не нуждается в вызове экземпляра, поэтому его можно вызвать напрямую, используя имя класса.)`
.. |operator| replace:: :abbr:`operator (Этот метод описывает допустимый оператор для использования с этим типом в качестве левого операнда.)`
.. |bitfield| replace:: :abbr:`BitField (Это значение является целым числом, составленным как битовая маска следующих флагов.)`
.. |void| replace:: :abbr:`void (Нет возвращаемого значения.)`