<?xml version="1.0" encoding="UTF-8" ?>
<class name="GPUParticlesCollisionSDF3D" inherits="GPUParticlesCollision3D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		A baked signed distance field 3D particle collision shape affecting [GPUParticles3D] nodes.
	</brief_description>
	<description>
		A baked signed distance field 3D particle collision shape affecting [GPUParticles3D] nodes.
		Signed distance fields (SDF) allow for efficiently representing approximate collision shapes for convex and concave objects of any shape. This is more flexible than [GPUParticlesCollisionHeightField3D], but it requires a baking step.
		[b]Baking:[/b] The signed distance field texture can be baked by selecting the [GPUParticlesCollisionSDF3D] node in the editor, then clicking [b]Bake SDF[/b] at the top of the 3D viewport. Any [i]visible[/i] [MeshInstance3D]s within the [member size] will be taken into account for baking, regardless of their [member GeometryInstance3D.gi_mode].
		[b]Note:[/b] Baking a [GPUParticlesCollisionSDF3D]'s [member texture] is only possible within the editor, as there is no bake method exposed for use in exported projects. However, it's still possible to load pre-baked [Texture3D]s into its [member texture] property in an exported project.
		[b]Note:[/b] [member ParticleProcessMaterial.collision_mode] must be [constant ParticleProcessMaterial.COLLISION_RIGID] or [constant ParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT] on the [GPUParticles3D]'s process material for collision to work.
		[b]Note:[/b] Particle collision only affects [GPUParticles3D], not [CPUParticles3D].
	</description>
	<tutorials>
	</tutorials>
	<methods>
		<method name="get_bake_mask_value" qualifiers="const">
			<return type="bool" />
			<param index="0" name="layer_number" type="int" />
			<description>
				Returns whether or not the specified layer of the [member bake_mask] is enabled, given a [param layer_number] between 1 and 32.
			</description>
		</method>
		<method name="set_bake_mask_value">
			<return type="void" />
			<param index="0" name="layer_number" type="int" />
			<param index="1" name="value" type="bool" />
			<description>
				Based on [param value], enables or disables the specified layer in the [member bake_mask], given a [param layer_number] between 1 and 32.
			</description>
		</method>
	</methods>
	<members>
		<member name="bake_mask" type="int" setter="set_bake_mask" getter="get_bake_mask" default="4294967295">
			The visual layers to account for when baking the particle collision SDF. Only [MeshInstance3D]s whose [member VisualInstance3D.layers] match with this [member bake_mask] will be included in the generated particle collision SDF. By default, all objects are taken into account for the particle collision SDF baking.
		</member>
		<member name="resolution" type="int" setter="set_resolution" getter="get_resolution" enum="GPUParticlesCollisionSDF3D.Resolution" default="2">
			The bake resolution to use for the signed distance field [member texture]. The texture must be baked again for changes to the [member resolution] property to be effective. Higher resolutions have a greater performance cost and take more time to bake. Higher resolutions also result in larger baked textures, leading to increased VRAM and storage space requirements. To improve performance and reduce bake times, use the lowest resolution possible for the object you're representing the collision of.
		</member>
		<member name="size" type="Vector3" setter="set_size" getter="get_size" default="Vector3(2, 2, 2)">
			The collision SDF's size in 3D units. To improve SDF quality, the [member size] should be set as small as possible while covering the parts of the scene you need.
		</member>
		<member name="texture" type="Texture3D" setter="set_texture" getter="get_texture">
			The 3D texture representing the signed distance field.
		</member>
		<member name="thickness" type="float" setter="set_thickness" getter="get_thickness" default="1.0">
			The collision shape's thickness. Unlike other particle colliders, [GPUParticlesCollisionSDF3D] is actually hollow on the inside. [member thickness] can be increased to prevent particles from tunneling through the collision shape at high speeds, or when the [GPUParticlesCollisionSDF3D] is moved.
		</member>
	</members>
	<constants>
		<constant name="RESOLUTION_16" value="0" enum="Resolution">
			Bake a 16×16×16 signed distance field. This is the fastest option, but also the least precise.
		</constant>
		<constant name="RESOLUTION_32" value="1" enum="Resolution">
			Bake a 32×32×32 signed distance field.
		</constant>
		<constant name="RESOLUTION_64" value="2" enum="Resolution">
			Bake a 64×64×64 signed distance field.
		</constant>
		<constant name="RESOLUTION_128" value="3" enum="Resolution">
			Bake a 128×128×128 signed distance field.
		</constant>
		<constant name="RESOLUTION_256" value="4" enum="Resolution">
			Bake a 256×256×256 signed distance field.
		</constant>
		<constant name="RESOLUTION_512" value="5" enum="Resolution">
			Bake a 512×512×512 signed distance field. This is the slowest option, but also the most precise.
		</constant>
		<constant name="RESOLUTION_MAX" value="6" enum="Resolution">
			Represents the size of the [enum Resolution] enum.
		</constant>
	</constants>
</class>
