<!-- # hard line break macro for HTML -->

# fiftyone.core.threed

* [fiftyone.core.threed.camera](fiftyone.core.threed.camera.md)
  * [`PerspectiveCamera`](fiftyone.core.threed.camera.md#fiftyone.core.threed.camera.PerspectiveCamera)
    * [`PerspectiveCamera.position`](fiftyone.core.threed.camera.md#fiftyone.core.threed.camera.PerspectiveCamera.position)
    * [`PerspectiveCamera.look_at`](fiftyone.core.threed.camera.md#fiftyone.core.threed.camera.PerspectiveCamera.look_at)
    * [`PerspectiveCamera.up`](fiftyone.core.threed.camera.md#fiftyone.core.threed.camera.PerspectiveCamera.up)
    * [`PerspectiveCamera.aspect`](fiftyone.core.threed.camera.md#fiftyone.core.threed.camera.PerspectiveCamera.aspect)
    * [`PerspectiveCamera.fov`](fiftyone.core.threed.camera.md#fiftyone.core.threed.camera.PerspectiveCamera.fov)
    * [`PerspectiveCamera.near`](fiftyone.core.threed.camera.md#fiftyone.core.threed.camera.PerspectiveCamera.near)
    * [`PerspectiveCamera.far`](fiftyone.core.threed.camera.md#fiftyone.core.threed.camera.PerspectiveCamera.far)
    * [`PerspectiveCamera.as_dict()`](fiftyone.core.threed.camera.md#fiftyone.core.threed.camera.PerspectiveCamera.as_dict)
* [fiftyone.core.threed.lights](fiftyone.core.threed.lights.md)
  * [`Light`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light)
    * [`Light.add()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.add)
    * [`Light.as_dict()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.as_dict)
    * [`Light.clear()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.clear)
    * [`Light.find_and_execute()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.find_and_execute)
    * [`Light.local_transform_matrix`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.local_transform_matrix)
    * [`Light.position`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.position)
    * [`Light.quaternion`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.quaternion)
    * [`Light.remove()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.remove)
    * [`Light.remove_by_name()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.remove_by_name)
    * [`Light.remove_by_uuid()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.remove_by_uuid)
    * [`Light.rotation`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.rotation)
    * [`Light.scale`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.scale)
    * [`Light.traverse()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.traverse)
    * [`Light.uuid`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light.uuid)
  * [`AmbientLight`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight)
    * [`AmbientLight.add()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.add)
    * [`AmbientLight.as_dict()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.as_dict)
    * [`AmbientLight.clear()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.clear)
    * [`AmbientLight.find_and_execute()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.find_and_execute)
    * [`AmbientLight.local_transform_matrix`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.local_transform_matrix)
    * [`AmbientLight.position`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.position)
    * [`AmbientLight.quaternion`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.quaternion)
    * [`AmbientLight.remove()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.remove)
    * [`AmbientLight.remove_by_name()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.remove_by_name)
    * [`AmbientLight.remove_by_uuid()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.remove_by_uuid)
    * [`AmbientLight.rotation`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.rotation)
    * [`AmbientLight.scale`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.scale)
    * [`AmbientLight.traverse()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.traverse)
    * [`AmbientLight.uuid`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.AmbientLight.uuid)
  * [`DirectionalLight`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight)
    * [`DirectionalLight.target`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.target)
    * [`DirectionalLight.add()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.add)
    * [`DirectionalLight.as_dict()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.as_dict)
    * [`DirectionalLight.clear()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.clear)
    * [`DirectionalLight.find_and_execute()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.find_and_execute)
    * [`DirectionalLight.local_transform_matrix`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.local_transform_matrix)
    * [`DirectionalLight.position`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.position)
    * [`DirectionalLight.quaternion`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.quaternion)
    * [`DirectionalLight.remove()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.remove)
    * [`DirectionalLight.remove_by_name()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.remove_by_name)
    * [`DirectionalLight.remove_by_uuid()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.remove_by_uuid)
    * [`DirectionalLight.rotation`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.rotation)
    * [`DirectionalLight.scale`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.scale)
    * [`DirectionalLight.traverse()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.traverse)
    * [`DirectionalLight.uuid`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.DirectionalLight.uuid)
  * [`PointLight`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight)
    * [`PointLight.add()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.add)
    * [`PointLight.as_dict()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.as_dict)
    * [`PointLight.clear()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.clear)
    * [`PointLight.find_and_execute()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.find_and_execute)
    * [`PointLight.local_transform_matrix`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.local_transform_matrix)
    * [`PointLight.position`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.position)
    * [`PointLight.quaternion`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.quaternion)
    * [`PointLight.remove()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.remove)
    * [`PointLight.remove_by_name()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.remove_by_name)
    * [`PointLight.remove_by_uuid()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.remove_by_uuid)
    * [`PointLight.rotation`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.rotation)
    * [`PointLight.scale`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.scale)
    * [`PointLight.traverse()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.traverse)
    * [`PointLight.uuid`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.PointLight.uuid)
  * [`SpotLight`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight)
    * [`SpotLight.add()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.add)
    * [`SpotLight.as_dict()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.as_dict)
    * [`SpotLight.clear()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.clear)
    * [`SpotLight.find_and_execute()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.find_and_execute)
    * [`SpotLight.local_transform_matrix`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.local_transform_matrix)
    * [`SpotLight.position`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.position)
    * [`SpotLight.quaternion`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.quaternion)
    * [`SpotLight.remove()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.remove)
    * [`SpotLight.remove_by_name()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.remove_by_name)
    * [`SpotLight.remove_by_uuid()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.remove_by_uuid)
    * [`SpotLight.rotation`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.rotation)
    * [`SpotLight.scale`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.scale)
    * [`SpotLight.traverse()`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.traverse)
    * [`SpotLight.uuid`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.SpotLight.uuid)
* [fiftyone.core.threed.material_3d](fiftyone.core.threed.material_3d.md)
  * [`Material3D`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.Material3D)
    * [`Material3D.opacity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.Material3D.opacity)
    * [`Material3D.as_dict()`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.Material3D.as_dict)
  * [`PointCloudMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.PointCloudMaterial)
    * [`PointCloudMaterial.shading_mode`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.PointCloudMaterial.shading_mode)
    * [`PointCloudMaterial.custom_color`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.PointCloudMaterial.custom_color)
    * [`PointCloudMaterial.point_size`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.PointCloudMaterial.point_size)
    * [`PointCloudMaterial.attenuate_by_distance`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.PointCloudMaterial.attenuate_by_distance)
    * [`PointCloudMaterial.as_dict()`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.PointCloudMaterial.as_dict)
    * [`PointCloudMaterial.opacity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.PointCloudMaterial.opacity)
  * [`MeshMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)
    * [`MeshMaterial.wireframe`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial.wireframe)
    * [`MeshMaterial.as_dict()`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial.as_dict)
    * [`MeshMaterial.opacity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial.opacity)
  * [`MeshBasicMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshBasicMaterial)
    * [`MeshBasicMaterial.color`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshBasicMaterial.color)
    * [`MeshBasicMaterial.as_dict()`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshBasicMaterial.as_dict)
    * [`MeshBasicMaterial.opacity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshBasicMaterial.opacity)
    * [`MeshBasicMaterial.wireframe`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshBasicMaterial.wireframe)
  * [`MeshStandardMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshStandardMaterial)
    * [`MeshStandardMaterial.color`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshStandardMaterial.color)
    * [`MeshStandardMaterial.opacity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshStandardMaterial.opacity)
    * [`MeshStandardMaterial.wireframe`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshStandardMaterial.wireframe)
    * [`MeshStandardMaterial.emissive_color`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshStandardMaterial.emissive_color)
    * [`MeshStandardMaterial.emissive_intensity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshStandardMaterial.emissive_intensity)
    * [`MeshStandardMaterial.metalness`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshStandardMaterial.metalness)
    * [`MeshStandardMaterial.roughness`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshStandardMaterial.roughness)
    * [`MeshStandardMaterial.as_dict()`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshStandardMaterial.as_dict)
  * [`MeshLambertMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshLambertMaterial)
    * [`MeshLambertMaterial.opacity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshLambertMaterial.opacity)
    * [`MeshLambertMaterial.wireframe`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshLambertMaterial.wireframe)
    * [`MeshLambertMaterial.color`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshLambertMaterial.color)
    * [`MeshLambertMaterial.emissive_color`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshLambertMaterial.emissive_color)
    * [`MeshLambertMaterial.emissive_intensity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshLambertMaterial.emissive_intensity)
    * [`MeshLambertMaterial.reflectivity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshLambertMaterial.reflectivity)
    * [`MeshLambertMaterial.refraction_ratio`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshLambertMaterial.refraction_ratio)
    * [`MeshLambertMaterial.as_dict()`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshLambertMaterial.as_dict)
  * [`MeshPhongMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshPhongMaterial)
    * [`MeshPhongMaterial.color`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshPhongMaterial.color)
    * [`MeshPhongMaterial.emissive_color`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshPhongMaterial.emissive_color)
    * [`MeshPhongMaterial.emissive_intensity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshPhongMaterial.emissive_intensity)
    * [`MeshPhongMaterial.opacity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshPhongMaterial.opacity)
    * [`MeshPhongMaterial.reflectivity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshPhongMaterial.reflectivity)
    * [`MeshPhongMaterial.refraction_ratio`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshPhongMaterial.refraction_ratio)
    * [`MeshPhongMaterial.wireframe`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshPhongMaterial.wireframe)
    * [`MeshPhongMaterial.shininess`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshPhongMaterial.shininess)
    * [`MeshPhongMaterial.specular_color`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshPhongMaterial.specular_color)
    * [`MeshPhongMaterial.as_dict()`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshPhongMaterial.as_dict)
  * [`MeshDepthMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshDepthMaterial)
    * [`MeshDepthMaterial.as_dict()`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshDepthMaterial.as_dict)
    * [`MeshDepthMaterial.opacity`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshDepthMaterial.opacity)
    * [`MeshDepthMaterial.wireframe`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshDepthMaterial.wireframe)
* [fiftyone.core.threed.mesh](fiftyone.core.threed.mesh.md)
  * [`Mesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh)
    * [`Mesh.set_default_material()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.set_default_material)
    * [`Mesh.add()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.add)
    * [`Mesh.as_dict()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.as_dict)
    * [`Mesh.clear()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.clear)
    * [`Mesh.find_and_execute()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.find_and_execute)
    * [`Mesh.local_transform_matrix`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.local_transform_matrix)
    * [`Mesh.position`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.position)
    * [`Mesh.quaternion`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.quaternion)
    * [`Mesh.remove()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.remove)
    * [`Mesh.remove_by_name()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.remove_by_name)
    * [`Mesh.remove_by_uuid()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.remove_by_uuid)
    * [`Mesh.rotation`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.rotation)
    * [`Mesh.scale`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.scale)
    * [`Mesh.traverse()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.traverse)
    * [`Mesh.uuid`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh.uuid)
  * [`ObjMesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh)
    * [`ObjMesh.add()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.add)
    * [`ObjMesh.as_dict()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.as_dict)
    * [`ObjMesh.clear()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.clear)
    * [`ObjMesh.find_and_execute()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.find_and_execute)
    * [`ObjMesh.local_transform_matrix`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.local_transform_matrix)
    * [`ObjMesh.position`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.position)
    * [`ObjMesh.quaternion`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.quaternion)
    * [`ObjMesh.remove()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.remove)
    * [`ObjMesh.remove_by_name()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.remove_by_name)
    * [`ObjMesh.remove_by_uuid()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.remove_by_uuid)
    * [`ObjMesh.rotation`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.rotation)
    * [`ObjMesh.scale`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.scale)
    * [`ObjMesh.set_default_material()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.set_default_material)
    * [`ObjMesh.traverse()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.traverse)
    * [`ObjMesh.uuid`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.ObjMesh.uuid)
  * [`FbxMesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh)
    * [`FbxMesh.add()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.add)
    * [`FbxMesh.as_dict()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.as_dict)
    * [`FbxMesh.clear()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.clear)
    * [`FbxMesh.find_and_execute()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.find_and_execute)
    * [`FbxMesh.local_transform_matrix`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.local_transform_matrix)
    * [`FbxMesh.position`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.position)
    * [`FbxMesh.quaternion`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.quaternion)
    * [`FbxMesh.remove()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.remove)
    * [`FbxMesh.remove_by_name()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.remove_by_name)
    * [`FbxMesh.remove_by_uuid()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.remove_by_uuid)
    * [`FbxMesh.rotation`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.rotation)
    * [`FbxMesh.scale`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.scale)
    * [`FbxMesh.set_default_material()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.set_default_material)
    * [`FbxMesh.traverse()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.traverse)
    * [`FbxMesh.uuid`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.FbxMesh.uuid)
  * [`GltfMesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh)
    * [`GltfMesh.add()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.add)
    * [`GltfMesh.as_dict()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.as_dict)
    * [`GltfMesh.clear()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.clear)
    * [`GltfMesh.find_and_execute()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.find_and_execute)
    * [`GltfMesh.local_transform_matrix`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.local_transform_matrix)
    * [`GltfMesh.position`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.position)
    * [`GltfMesh.quaternion`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.quaternion)
    * [`GltfMesh.remove()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.remove)
    * [`GltfMesh.remove_by_name()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.remove_by_name)
    * [`GltfMesh.remove_by_uuid()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.remove_by_uuid)
    * [`GltfMesh.rotation`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.rotation)
    * [`GltfMesh.scale`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.scale)
    * [`GltfMesh.set_default_material()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.set_default_material)
    * [`GltfMesh.traverse()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.traverse)
    * [`GltfMesh.uuid`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.GltfMesh.uuid)
  * [`PlyMesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh)
    * [`PlyMesh.add()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.add)
    * [`PlyMesh.as_dict()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.as_dict)
    * [`PlyMesh.clear()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.clear)
    * [`PlyMesh.find_and_execute()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.find_and_execute)
    * [`PlyMesh.local_transform_matrix`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.local_transform_matrix)
    * [`PlyMesh.position`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.position)
    * [`PlyMesh.quaternion`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.quaternion)
    * [`PlyMesh.remove()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.remove)
    * [`PlyMesh.remove_by_name()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.remove_by_name)
    * [`PlyMesh.remove_by_uuid()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.remove_by_uuid)
    * [`PlyMesh.rotation`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.rotation)
    * [`PlyMesh.scale`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.scale)
    * [`PlyMesh.set_default_material()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.set_default_material)
    * [`PlyMesh.traverse()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.traverse)
    * [`PlyMesh.uuid`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.PlyMesh.uuid)
  * [`StlMesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh)
    * [`StlMesh.add()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.add)
    * [`StlMesh.as_dict()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.as_dict)
    * [`StlMesh.clear()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.clear)
    * [`StlMesh.find_and_execute()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.find_and_execute)
    * [`StlMesh.local_transform_matrix`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.local_transform_matrix)
    * [`StlMesh.position`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.position)
    * [`StlMesh.quaternion`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.quaternion)
    * [`StlMesh.remove()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.remove)
    * [`StlMesh.remove_by_name()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.remove_by_name)
    * [`StlMesh.remove_by_uuid()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.remove_by_uuid)
    * [`StlMesh.rotation`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.rotation)
    * [`StlMesh.scale`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.scale)
    * [`StlMesh.set_default_material()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.set_default_material)
    * [`StlMesh.traverse()`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.traverse)
    * [`StlMesh.uuid`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.StlMesh.uuid)
* [fiftyone.core.threed.miris_stream](fiftyone.core.threed.miris_stream.md)
  * [`MirisStream`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream)
    * [`MirisStream.add()`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.add)
    * [`MirisStream.as_dict()`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.as_dict)
    * [`MirisStream.clear()`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.clear)
    * [`MirisStream.find_and_execute()`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.find_and_execute)
    * [`MirisStream.local_transform_matrix`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.local_transform_matrix)
    * [`MirisStream.position`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.position)
    * [`MirisStream.quaternion`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.quaternion)
    * [`MirisStream.remove()`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.remove)
    * [`MirisStream.remove_by_name()`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.remove_by_name)
    * [`MirisStream.remove_by_uuid()`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.remove_by_uuid)
    * [`MirisStream.rotation`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.rotation)
    * [`MirisStream.scale`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.scale)
    * [`MirisStream.traverse()`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.traverse)
    * [`MirisStream.uuid`](fiftyone.core.threed.miris_stream.md#fiftyone.core.threed.miris_stream.MirisStream.uuid)
* [fiftyone.core.threed.object_3d](fiftyone.core.threed.object_3d.md)
  * [`Object3D`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)
    * [`Object3D.uuid`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.uuid)
    * [`Object3D.position`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.position)
    * [`Object3D.rotation`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.rotation)
    * [`Object3D.quaternion`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.quaternion)
    * [`Object3D.scale`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.scale)
    * [`Object3D.local_transform_matrix`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.local_transform_matrix)
    * [`Object3D.add()`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.add)
    * [`Object3D.clear()`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.clear)
    * [`Object3D.find_and_execute()`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.find_and_execute)
    * [`Object3D.remove()`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.remove)
    * [`Object3D.remove_by_name()`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.remove_by_name)
    * [`Object3D.remove_by_uuid()`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.remove_by_uuid)
    * [`Object3D.traverse()`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.traverse)
    * [`Object3D.as_dict()`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D.as_dict)
* [fiftyone.core.threed.pointcloud](fiftyone.core.threed.pointcloud.md)
  * [`PointCloud`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud)
    * [`PointCloud.set_default_material()`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.set_default_material)
    * [`PointCloud.add()`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.add)
    * [`PointCloud.as_dict()`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.as_dict)
    * [`PointCloud.clear()`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.clear)
    * [`PointCloud.find_and_execute()`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.find_and_execute)
    * [`PointCloud.local_transform_matrix`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.local_transform_matrix)
    * [`PointCloud.position`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.position)
    * [`PointCloud.quaternion`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.quaternion)
    * [`PointCloud.remove()`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.remove)
    * [`PointCloud.remove_by_name()`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.remove_by_name)
    * [`PointCloud.remove_by_uuid()`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.remove_by_uuid)
    * [`PointCloud.rotation`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.rotation)
    * [`PointCloud.scale`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.scale)
    * [`PointCloud.traverse()`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.traverse)
    * [`PointCloud.uuid`](fiftyone.core.threed.pointcloud.md#fiftyone.core.threed.pointcloud.PointCloud.uuid)
* [fiftyone.core.threed.scene_3d](fiftyone.core.threed.scene_3d.md)
  * [`SceneBackground`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.SceneBackground)
    * [`SceneBackground.color`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.SceneBackground.color)
    * [`SceneBackground.image`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.SceneBackground.image)
    * [`SceneBackground.cube`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.SceneBackground.cube)
    * [`SceneBackground.intensity`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.SceneBackground.intensity)
    * [`SceneBackground.as_dict()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.SceneBackground.as_dict)
  * [`Scene`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene)
    * [`Scene.copy()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.copy)
    * [`Scene.write()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.write)
    * [`Scene.add()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.add)
    * [`Scene.as_dict()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.as_dict)
    * [`Scene.clear()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.clear)
    * [`Scene.find_and_execute()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.find_and_execute)
    * [`Scene.local_transform_matrix`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.local_transform_matrix)
    * [`Scene.position`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.position)
    * [`Scene.quaternion`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.quaternion)
    * [`Scene.remove()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.remove)
    * [`Scene.remove_by_name()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.remove_by_name)
    * [`Scene.remove_by_uuid()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.remove_by_uuid)
    * [`Scene.rotation`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.rotation)
    * [`Scene.scale`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.scale)
    * [`Scene.traverse()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.traverse)
    * [`Scene.uuid`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.uuid)
    * [`Scene.update_asset_paths()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.update_asset_paths)
    * [`Scene.get_scene_summary()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.get_scene_summary)
    * [`Scene.get_asset_paths()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.get_asset_paths)
    * [`Scene.from_fo3d()`](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.Scene.from_fo3d)
* [fiftyone.core.threed.shape_3d](fiftyone.core.threed.shape_3d.md)
  * [`Shape3D`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D)
    * [`Shape3D.add()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.add)
    * [`Shape3D.as_dict()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.as_dict)
    * [`Shape3D.clear()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.clear)
    * [`Shape3D.find_and_execute()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.find_and_execute)
    * [`Shape3D.local_transform_matrix`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.local_transform_matrix)
    * [`Shape3D.position`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.position)
    * [`Shape3D.quaternion`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.quaternion)
    * [`Shape3D.remove()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.remove)
    * [`Shape3D.remove_by_name()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.remove_by_name)
    * [`Shape3D.remove_by_uuid()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.remove_by_uuid)
    * [`Shape3D.rotation`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.rotation)
    * [`Shape3D.scale`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.scale)
    * [`Shape3D.set_default_material()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.set_default_material)
    * [`Shape3D.traverse()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.traverse)
    * [`Shape3D.uuid`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D.uuid)
  * [`BoxGeometry`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry)
    * [`BoxGeometry.add()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.add)
    * [`BoxGeometry.as_dict()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.as_dict)
    * [`BoxGeometry.clear()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.clear)
    * [`BoxGeometry.find_and_execute()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.find_and_execute)
    * [`BoxGeometry.local_transform_matrix`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.local_transform_matrix)
    * [`BoxGeometry.position`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.position)
    * [`BoxGeometry.quaternion`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.quaternion)
    * [`BoxGeometry.remove()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.remove)
    * [`BoxGeometry.remove_by_name()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.remove_by_name)
    * [`BoxGeometry.remove_by_uuid()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.remove_by_uuid)
    * [`BoxGeometry.rotation`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.rotation)
    * [`BoxGeometry.scale`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.scale)
    * [`BoxGeometry.set_default_material()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.set_default_material)
    * [`BoxGeometry.traverse()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.traverse)
    * [`BoxGeometry.uuid`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.BoxGeometry.uuid)
  * [`CylinderGeometry`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry)
    * [`CylinderGeometry.add()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.add)
    * [`CylinderGeometry.as_dict()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.as_dict)
    * [`CylinderGeometry.clear()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.clear)
    * [`CylinderGeometry.find_and_execute()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.find_and_execute)
    * [`CylinderGeometry.local_transform_matrix`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.local_transform_matrix)
    * [`CylinderGeometry.position`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.position)
    * [`CylinderGeometry.quaternion`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.quaternion)
    * [`CylinderGeometry.remove()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.remove)
    * [`CylinderGeometry.remove_by_name()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.remove_by_name)
    * [`CylinderGeometry.remove_by_uuid()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.remove_by_uuid)
    * [`CylinderGeometry.rotation`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.rotation)
    * [`CylinderGeometry.scale`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.scale)
    * [`CylinderGeometry.set_default_material()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.set_default_material)
    * [`CylinderGeometry.traverse()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.traverse)
    * [`CylinderGeometry.uuid`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.CylinderGeometry.uuid)
  * [`SphereGeometry`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry)
    * [`SphereGeometry.add()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.add)
    * [`SphereGeometry.as_dict()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.as_dict)
    * [`SphereGeometry.clear()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.clear)
    * [`SphereGeometry.find_and_execute()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.find_and_execute)
    * [`SphereGeometry.local_transform_matrix`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.local_transform_matrix)
    * [`SphereGeometry.position`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.position)
    * [`SphereGeometry.quaternion`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.quaternion)
    * [`SphereGeometry.remove()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.remove)
    * [`SphereGeometry.remove_by_name()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.remove_by_name)
    * [`SphereGeometry.remove_by_uuid()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.remove_by_uuid)
    * [`SphereGeometry.rotation`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.rotation)
    * [`SphereGeometry.scale`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.scale)
    * [`SphereGeometry.set_default_material()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.set_default_material)
    * [`SphereGeometry.traverse()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.traverse)
    * [`SphereGeometry.uuid`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.SphereGeometry.uuid)
  * [`PlaneGeometry`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry)
    * [`PlaneGeometry.add()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.add)
    * [`PlaneGeometry.as_dict()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.as_dict)
    * [`PlaneGeometry.clear()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.clear)
    * [`PlaneGeometry.find_and_execute()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.find_and_execute)
    * [`PlaneGeometry.local_transform_matrix`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.local_transform_matrix)
    * [`PlaneGeometry.position`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.position)
    * [`PlaneGeometry.quaternion`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.quaternion)
    * [`PlaneGeometry.remove()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.remove)
    * [`PlaneGeometry.remove_by_name()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.remove_by_name)
    * [`PlaneGeometry.remove_by_uuid()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.remove_by_uuid)
    * [`PlaneGeometry.rotation`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.rotation)
    * [`PlaneGeometry.scale`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.scale)
    * [`PlaneGeometry.set_default_material()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.set_default_material)
    * [`PlaneGeometry.traverse()`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.traverse)
    * [`PlaneGeometry.uuid`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.PlaneGeometry.uuid)
* [fiftyone.core.threed.splat](fiftyone.core.threed.splat.md)
  * [`GaussianSplat`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat)
    * [`GaussianSplat.add()`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.add)
    * [`GaussianSplat.as_dict()`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.as_dict)
    * [`GaussianSplat.clear()`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.clear)
    * [`GaussianSplat.find_and_execute()`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.find_and_execute)
    * [`GaussianSplat.local_transform_matrix`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.local_transform_matrix)
    * [`GaussianSplat.opacity`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.opacity)
    * [`GaussianSplat.position`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.position)
    * [`GaussianSplat.quaternion`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.quaternion)
    * [`GaussianSplat.remove()`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.remove)
    * [`GaussianSplat.remove_by_name()`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.remove_by_name)
    * [`GaussianSplat.remove_by_uuid()`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.remove_by_uuid)
    * [`GaussianSplat.rotation`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.rotation)
    * [`GaussianSplat.scale`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.scale)
    * [`GaussianSplat.traverse()`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.traverse)
    * [`GaussianSplat.uuid`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.uuid)
    * [`GaussianSplat.tint`](fiftyone.core.threed.splat.md#fiftyone.core.threed.splat.GaussianSplat.tint)
* [fiftyone.core.threed.transformation](fiftyone.core.threed.transformation.md)
  * [`Vector3`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3)
    * [`Vector3.x`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3.x)
    * [`Vector3.y`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3.y)
    * [`Vector3.z`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3.z)
    * [`Vector3.to_arr()`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3.to_arr)
  * [`Euler`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Euler)
    * [`Euler.degrees`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Euler.degrees)
    * [`Euler.sequence`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Euler.sequence)
    * [`Euler.to_quaternion()`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Euler.to_quaternion)
    * [`Euler.to_arr()`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Euler.to_arr)
    * [`Euler.x`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Euler.x)
    * [`Euler.y`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Euler.y)
    * [`Euler.z`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Euler.z)
  * [`Quaternion`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion)
    * [`Quaternion.x`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion.x)
    * [`Quaternion.y`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion.y)
    * [`Quaternion.z`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion.z)
    * [`Quaternion.w`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion.w)
    * [`Quaternion.to_euler()`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion.to_euler)
    * [`Quaternion.to_arr()`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion.to_arr)
  * [`normalize_to_vec3()`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.normalize_to_vec3)
  * [`coerce_to_vec3()`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.coerce_to_vec3)
* [fiftyone.core.threed.utils](fiftyone.core.threed.utils.md)
  * [`camel_to_snake()`](fiftyone.core.threed.utils.md#fiftyone.core.threed.utils.camel_to_snake)
  * [`convert_keys_to_snake_case()`](fiftyone.core.threed.utils.md#fiftyone.core.threed.utils.convert_keys_to_snake_case)
* [fiftyone.core.threed.validators](fiftyone.core.threed.validators.md)
  * [`validate_bool()`](fiftyone.core.threed.validators.md#fiftyone.core.threed.validators.validate_bool)
  * [`validate_choice()`](fiftyone.core.threed.validators.md#fiftyone.core.threed.validators.validate_choice)
  * [`validate_color()`](fiftyone.core.threed.validators.md#fiftyone.core.threed.validators.validate_color)
  * [`validate_float()`](fiftyone.core.threed.validators.md#fiftyone.core.threed.validators.validate_float)
  * [`validate_list()`](fiftyone.core.threed.validators.md#fiftyone.core.threed.validators.validate_list)
  * [`BaseValidatedDataClass`](fiftyone.core.threed.validators.md#fiftyone.core.threed.validators.BaseValidatedDataClass)

## Module contents

3D definitions for FiftyOne.

Copyright 2017-2026, Voxel51, Inc.
<br/>
[voxel51.com](https://voxel51.com/)
<br/>
<br/>

**Classes:**

| [`AmbientLight`](#fiftyone.core.threed.AmbientLight)([name, intensity, color, ...])              | Represents an ambient light.                                          |
|--------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------|
| [`DirectionalLight`](#fiftyone.core.threed.DirectionalLight)([name, target, color, ...])         | Represents a directional light.                                       |
| [`PointLight`](#fiftyone.core.threed.PointLight)([name, distance, decay, color, ...])            | Represents a point light.                                             |
| [`SpotLight`](#fiftyone.core.threed.SpotLight)([name, target, distance, decay, ...])             | Represents a spot light.                                              |
| [`MeshBasicMaterial`](#fiftyone.core.threed.MeshBasicMaterial)([color, wireframe, opacity])      | Represents a basic mesh material.                                     |
| [`MeshDepthMaterial`](#fiftyone.core.threed.MeshDepthMaterial)([wireframe, opacity])             | Represents a depth mesh material.                                     |
| [`MeshLambertMaterial`](#fiftyone.core.threed.MeshLambertMaterial)([color, emissive_color, ...]) | Represents a Lambert mesh material.                                   |
| [`MeshStandardMaterial`](#fiftyone.core.threed.MeshStandardMaterial)([color, ...])               | Represents a standard mesh material.                                  |
| [`MeshPhongMaterial`](#fiftyone.core.threed.MeshPhongMaterial)([shininess, ...])                 | Represents a Phong mesh material.                                     |
| [`PointCloudMaterial`](#fiftyone.core.threed.PointCloudMaterial)([shading_mode, ...])            | Represents a point cloud material.                                    |
| [`FbxMesh`](#fiftyone.core.threed.FbxMesh)(name, fbx_path[, default_material, ...])              | Represents an FBX mesh.                                               |
| [`GltfMesh`](#fiftyone.core.threed.GltfMesh)(name, gltf_path[, ...])                             | Represents a gLTF mesh.                                               |
| [`ObjMesh`](#fiftyone.core.threed.ObjMesh)(name, obj_path[, mtl_path, ...])                      | Represents an OBJ mesh.                                               |
| [`PlyMesh`](#fiftyone.core.threed.PlyMesh)(name, ply_path[, is_point_cloud, ...])                | Represents a PLY mesh.                                                |
| [`StlMesh`](#fiftyone.core.threed.StlMesh)(name, stl_path[, default_material, ...])              | Represents an STL mesh.                                               |
| [`MirisStream`](#fiftyone.core.threed.MirisStream)(name, asset_uuid[, viewer_key, ...])          | Represents a Miris stream rendered via the `@miris-inc/three` SDK.    |
| [`Object3D`](#fiftyone.core.threed.Object3D)(name[, visible, position, scale, ...])              | The base class for all 3D objects in the scene.                       |
| [`Quaternion`](#fiftyone.core.threed.Quaternion)([x, y, z, w])                                   | Represents a quaternion.                                              |
| [`PointCloud`](#fiftyone.core.threed.PointCloud)(name, pcd_path[, material, ...])                | Represents a point cloud.                                             |
| [`Counter`](#fiftyone.core.threed.Counter)([iterable])                                           | Dict subclass for counting hashable items.                            |
| [`PerspectiveCamera`](#fiftyone.core.threed.PerspectiveCamera)([position, look_at, up, ...])     | Represents the configuration of a 3D perspective camera.              |
| [`Light`](#fiftyone.core.threed.Light)([name, color, intensity, visible, ...])                   | Base class for 3D lights.                                             |
| [`Shape3D`](#fiftyone.core.threed.Shape3D)(name[, material, visible, position, ...])             | Represents an abstract 3D shape.                                      |
| [`GaussianSplat`](#fiftyone.core.threed.GaussianSplat)(name, splat_path[, format, ...])          | Represents a Gaussian splat asset.                                    |
| [`BaseValidatedDataClass`](#fiftyone.core.threed.BaseValidatedDataClass)()                       |                                                                       |
| [`SceneBackground`](#fiftyone.core.threed.SceneBackground)([color, image, cube, intensity])      | Represents the background of the scene.                               |
| [`Scene`](#fiftyone.core.threed.Scene)([camera, lights, background])                             | Represents a scene graph which contains a hierarchy of 3D objects.    |
| [`BoxGeometry`](#fiftyone.core.threed.BoxGeometry)(name[, width, height, depth, ...])            | Represents a 3D box.                                                  |
| [`PlaneGeometry`](#fiftyone.core.threed.PlaneGeometry)(name[, width, height, ...])               | Represents a 3D plane.                                                |
| [`SphereGeometry`](#fiftyone.core.threed.SphereGeometry)(name[, radius, ...])                    | Represents a 3D sphere.                                               |
| [`CylinderGeometry`](#fiftyone.core.threed.CylinderGeometry)(name[, radius_top, ...])            | Represents a 3D cylinder.                                             |
| [`Euler`](#fiftyone.core.threed.Euler)([x, y, z, degrees, sequence])                             | Represents intrinsic rotations about the object's own principal axes. |
| [`Vector3`](#fiftyone.core.threed.Vector3)([x, y, z])                                            | Represents a three-dimensional vector.                                |

**Functions:**

| [`convert_keys_to_snake_case`](#fiftyone.core.threed.convert_keys_to_snake_case)(d)   | Convert all keys in a dictionary from camelCase to snake_case.   |
|---------------------------------------------------------------------------------------|------------------------------------------------------------------|
| [`validate_color`](#fiftyone.core.threed.validate_color)(v[, nullable])               |                                                                  |
| [`validate_list`](#fiftyone.core.threed.validate_list)(v[, length, nullable])         |                                                                  |

### *class* fiftyone.core.threed.AmbientLight(name: str = 'AmbientLight', intensity: float = 0.1, color: str = '#ffffff', visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Light`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light)

Represents an ambient light.

This light globally illuminates all objects in the scene equally.

* **Parameters:**
  * **name** ( *"AmbientLight"*) – the name of the light
  * **intensity** (*0.1*) – the intensity of the light in the range `[0, 1]`
  * **color** ( *"#ffffff"*) – the color of the light
  * **visible** (*True*) – default visibility of the object in the scene
  * **position** (*None*) – the position of the light in object space
  * **quaternion** (*None*) – the quaternion of the light in object space
  * **scale** (*None*) – the scale of the light in object space

**Methods:**

| [`add`](#fiftyone.core.threed.AmbientLight.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.AmbientLight.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.AmbientLight.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.AmbientLight.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.AmbientLight.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.AmbientLight.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.AmbientLight.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`traverse`](#fiftyone.core.threed.AmbientLight.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.AmbientLight.local_transform_matrix)   | The local transform matrix of the object.     |
|-----------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.AmbientLight.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.AmbientLight.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.AmbientLight.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.AmbientLight.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.AmbientLight.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.DirectionalLight(name: str = 'DirectionalLight', target: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array = Vector3(x=0.0, y=0.0, z=0.0), color: str = '#ffffff', intensity: float = 1.0, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Light`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light)

Represents a directional light.

A light that gets emitted in a specific direction. This light will behave
as though it is infinitely far away and the rays produced from it are all
parallel.

* **Parameters:**
  * **name** ( *"DirectionalLight"*) – the name of the light
  * **target** ( *[**0* *,**0* *,**0* *]*) – the target of the light
  * **color** ( *"#ffffff"*) – the color of the light
  * **intensity** (*1.0*) – the intensity of the light in the range `[0, 1]`
  * **visible** (*True*) – default visibility of the object in the scene
  * **position** (*None*) – the position of the light in object space
  * **quaternion** (*None*) – the quaternion of the light in object space
  * **scale** (*None*) – the scale of the light in object space

**Attributes:**

| [`target`](#fiftyone.core.threed.DirectionalLight.target)                                 |                                               |
|-------------------------------------------------------------------------------------------|-----------------------------------------------|
| [`local_transform_matrix`](#fiftyone.core.threed.DirectionalLight.local_transform_matrix) | The local transform matrix of the object.     |
| [`position`](#fiftyone.core.threed.DirectionalLight.position)                             | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.DirectionalLight.quaternion)                         | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.DirectionalLight.rotation)                             | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.DirectionalLight.scale)                                   | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.DirectionalLight.uuid)                                     | The unique ID of the object.                  |

**Methods:**

| [`add`](#fiftyone.core.threed.DirectionalLight.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|----------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.DirectionalLight.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.DirectionalLight.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.DirectionalLight.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.DirectionalLight.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.DirectionalLight.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.DirectionalLight.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`traverse`](#fiftyone.core.threed.DirectionalLight.traverse)([include_self])                            | Traverse the scene graph.                                                   |

#### target *: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array* *= Vector3(x=0.0, y=0.0, z=0.0)*

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.PointLight(name: str = 'PointLight', distance: float = 0.0, decay: float = 2.0, color: str = '#ffffff', intensity: float = 1.0, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Light`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light)

Represents a point light.

* **Parameters:**
  * **name** ( *"PointLight"*) – the name of the light
  * **distance** (*0.0*) – the distance at which the light’s intensity is zero
  * **decay** (*2.0*) – the amount the light dims along the distance of the light
  * **color** ( *"#ffffff"*) – the color of the light
  * **intensity** (*1.0*) – the intensity of the light in the range `[0, 1]`
  * **visible** (*True*) – default visibility of the object in the scene
  * **position** (*None*) – the position of the light in object space
  * **quaternion** (*None*) – the quaternion of the light in object space
  * **scale** (*None*) – the scale of the light in object space

**Methods:**

| [`add`](#fiftyone.core.threed.PointLight.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.PointLight.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.PointLight.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.PointLight.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.PointLight.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.PointLight.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.PointLight.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`traverse`](#fiftyone.core.threed.PointLight.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.PointLight.local_transform_matrix)   | The local transform matrix of the object.     |
|---------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.PointLight.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.PointLight.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.PointLight.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.PointLight.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.PointLight.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.SpotLight(name: str = 'SpotLight', target: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array = None, distance: float = 0.0, decay: float = 2.0, angle: float = 1.0471975511965976, penumbra: float = 0.0, color: str = '#ffffff', intensity: float = 1.0, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Light`](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light)

Represents a spot light.

* **Parameters:**
  * **name** ( *"SpotLight"*) – the name of the light
  * **target** ( *[**0* *,**0* *,**0* *]*) – the target of the light
  * **distance** (*0.0*) – the distance at which the light’s intensity is zero
  * **decay** (*2.0*) – the amount the light dims along the distance of the light
  * **angle** (*PI / 3*) – the angle of the light’s spotlight, in radians
  * **penumbra** (*0.0*) – the angle of the penumbra of the light’s spotlight, in radians
  * **color** ( *"#ffffff"*) – the color of the light
  * **intensity** (*1.0*) – the intensity of the light in the range `[0, 1]`
  * **visible** (*True*) – default visibility of the object in the scene
  * **position** (*None*) – the position of the light in object space
  * **quaternion** (*None*) – the quaternion of the light in object space
  * **scale** (*None*) – the scale of the light in object space

**Methods:**

| [`add`](#fiftyone.core.threed.SpotLight.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|---------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.SpotLight.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.SpotLight.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.SpotLight.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.SpotLight.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.SpotLight.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.SpotLight.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`traverse`](#fiftyone.core.threed.SpotLight.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.SpotLight.local_transform_matrix)   | The local transform matrix of the object.     |
|--------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.SpotLight.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.SpotLight.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.SpotLight.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.SpotLight.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.SpotLight.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.MeshBasicMaterial(color: str = '#808080', wireframe: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False, opacity: float = 1.0)

Bases: [`MeshMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)

Represents a basic mesh material.

This material is not affected by lights, and is rendered as a solid color.

* **Parameters:**
  * **color** ( *"#808080"*) – the color of the material
  * **wireframe** (*False*) – whether to render the mesh as a wireframe
  * **opacity** (*1.0*) – the opacity of the material, in the range `[0, 1]`

**Attributes:**

| [`color`](#fiftyone.core.threed.MeshBasicMaterial.color)         |    |
|------------------------------------------------------------------|----|
| [`opacity`](#fiftyone.core.threed.MeshBasicMaterial.opacity)     |    |
| [`wireframe`](#fiftyone.core.threed.MeshBasicMaterial.wireframe) |    |

**Methods:**

| [`as_dict`](#fiftyone.core.threed.MeshBasicMaterial.as_dict)()   |    |
|------------------------------------------------------------------|----|

#### *property* color *: str*

#### as_dict()

#### *property* opacity *: float*

#### *property* wireframe *: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)*

### *class* fiftyone.core.threed.MeshDepthMaterial(wireframe: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False, opacity: float = 1.0)

Bases: [`MeshMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)

Represents a depth mesh material.

This material is used for drawing geometry by depth, where depth is based
off of the camera near and far plane. White is nearest, black is farthest.

* **Parameters:**
  * **wireframe** (*False*) – whether to render the mesh as a wireframe
  * **opacity** (*1.0*) – the opacity of the material, in the range `[0, 1]`

**Methods:**

| [`as_dict`](#fiftyone.core.threed.MeshDepthMaterial.as_dict)()   |    |
|------------------------------------------------------------------|----|

**Attributes:**

| [`opacity`](#fiftyone.core.threed.MeshDepthMaterial.opacity)     |    |
|------------------------------------------------------------------|----|
| [`wireframe`](#fiftyone.core.threed.MeshDepthMaterial.wireframe) |    |

#### as_dict()

#### *property* opacity *: float*

#### *property* wireframe *: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)*

### *class* fiftyone.core.threed.MeshLambertMaterial(color: str = '#808080', emissive_color: str = '#000000', emissive_intensity: float = 0.0, reflectivity: float = 1.0, refraction_ratio: float = 0.98, wireframe: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False, opacity: float = 1.0)

Bases: [`MeshMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)

Represents a Lambert mesh material.

This material only takes into account diffuse reflections, and ignores
specular reflection. This is ideal for materials that reflect light evenly
without a glossy or shiny appearance, such as unpolished surfaces.

* **Parameters:**
  * **color** ( *"#808080"*) – the color of the material
  * **emissive_color** ( *"#000000"*) – the emissive color of the material.
    This is the color emitted by the material itself independent of
    the light
  * **emissive_intensity** (*0.0*) – the intensity of the emissive color
  * **reflectivity** (*1.0*) – the reflectivity of the material
  * **refraction_ratio** (*0.98*) – the refraction ratio (IOR) of the material
  * **wireframe** (*False*) – whether to render the mesh as a wireframe
  * **opacity** (*1.0*) – the opacity of the material, in the range `[0, 1]`

**Attributes:**

| [`opacity`](#fiftyone.core.threed.MeshLambertMaterial.opacity)                       |    |
|--------------------------------------------------------------------------------------|----|
| [`wireframe`](#fiftyone.core.threed.MeshLambertMaterial.wireframe)                   |    |
| [`color`](#fiftyone.core.threed.MeshLambertMaterial.color)                           |    |
| [`emissive_color`](#fiftyone.core.threed.MeshLambertMaterial.emissive_color)         |    |
| [`emissive_intensity`](#fiftyone.core.threed.MeshLambertMaterial.emissive_intensity) |    |
| [`reflectivity`](#fiftyone.core.threed.MeshLambertMaterial.reflectivity)             |    |
| [`refraction_ratio`](#fiftyone.core.threed.MeshLambertMaterial.refraction_ratio)     |    |

**Methods:**

| [`as_dict`](#fiftyone.core.threed.MeshLambertMaterial.as_dict)()   |    |
|--------------------------------------------------------------------|----|

#### *property* opacity *: float*

#### *property* wireframe *: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)*

#### *property* color *: str*

#### *property* emissive_color *: str*

#### *property* emissive_intensity *: float*

#### *property* reflectivity *: float*

#### *property* refraction_ratio *: float*

#### as_dict()

### *class* fiftyone.core.threed.MeshStandardMaterial(color: str = '#808080', emissive_color: str = '#000000', emissive_intensity: float = 0.0, metalness: float = 0.0, roughness: float = 1.0, wireframe: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False, opacity: float = 1.0)

Bases: [`MeshMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)

Represents a standard mesh material.

This material is a standard physically-based rendering (PBR) material.
This material is ideal for most use cases.

* **Parameters:**
  * **color** ( *"#808080"*) – the color of the material
  * **emissive_color** ( *"#000000"*) – the emissive color of the material.
    This is the color emitted by the material itself independent of the
    light
  * **emissive_intensity** (*0.0*) – the intensity of the emissive color
  * **metalness** (*0.0*) – the metalness of the material
  * **roughness** (*1.0*) – the roughness of the material
  * **wireframe** (*False*) – whether to render the mesh as a wireframe
  * **opacity** (*1.0*) – the opacity of the material, in the range `[0, 1]`

**Attributes:**

| [`color`](#fiftyone.core.threed.MeshStandardMaterial.color)                           |    |
|---------------------------------------------------------------------------------------|----|
| [`opacity`](#fiftyone.core.threed.MeshStandardMaterial.opacity)                       |    |
| [`wireframe`](#fiftyone.core.threed.MeshStandardMaterial.wireframe)                   |    |
| [`emissive_color`](#fiftyone.core.threed.MeshStandardMaterial.emissive_color)         |    |
| [`emissive_intensity`](#fiftyone.core.threed.MeshStandardMaterial.emissive_intensity) |    |
| [`metalness`](#fiftyone.core.threed.MeshStandardMaterial.metalness)                   |    |
| [`roughness`](#fiftyone.core.threed.MeshStandardMaterial.roughness)                   |    |

**Methods:**

| [`as_dict`](#fiftyone.core.threed.MeshStandardMaterial.as_dict)()   |    |
|---------------------------------------------------------------------|----|

#### *property* color *: str*

#### *property* opacity *: float*

#### *property* wireframe *: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)*

#### *property* emissive_color *: str*

#### *property* emissive_intensity *: float*

#### *property* metalness *: float*

#### *property* roughness *: float*

#### as_dict()

### *class* fiftyone.core.threed.MeshPhongMaterial(shininess: float = 30.0, specular_color: str = '#111111', color: str = '#808080', emissive_color: str = '#000000', emissive_intensity: float = 0.0, reflectivity: float = 1.0, refraction_ratio: float = 0.98, wireframe: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False, opacity: float = 1.0)

Bases: [`MeshLambertMaterial`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshLambertMaterial)

Represents a Phong mesh material.

This material takes into account specular reflection. This is ideal for
materials that reflect light with a glossy or shiny appearance, such as
polished surfaces.

* **Parameters:**
  * **shininess** (*30.0*) – the shininess of the material
  * **specular_color** ( *"#111111"*) – the specular color of the material
  * **color** ( *"#808080"*) – the color of the material
  * **emissive_color** ( *"#000000"*) – the emissive color of the material.
    This is the color emitted by the material itself independent of
    the light
  * **emissive_intensity** (*0.0*) – the intensity of the emissive color
  * **reflectivity** (*1.0*) – the reflectivity of the material
  * **refraction_ratio** (*0.98*) – the refraction ratio (IOR) of the material
  * **wireframe** (*False*) – whether to render the mesh as a wireframe
  * **opacity** (*1.0*) – the opacity of the material, in the range `[0, 1]`

**Attributes:**

| [`color`](#fiftyone.core.threed.MeshPhongMaterial.color)                           |    |
|------------------------------------------------------------------------------------|----|
| [`emissive_color`](#fiftyone.core.threed.MeshPhongMaterial.emissive_color)         |    |
| [`emissive_intensity`](#fiftyone.core.threed.MeshPhongMaterial.emissive_intensity) |    |
| [`opacity`](#fiftyone.core.threed.MeshPhongMaterial.opacity)                       |    |
| [`reflectivity`](#fiftyone.core.threed.MeshPhongMaterial.reflectivity)             |    |
| [`refraction_ratio`](#fiftyone.core.threed.MeshPhongMaterial.refraction_ratio)     |    |
| [`wireframe`](#fiftyone.core.threed.MeshPhongMaterial.wireframe)                   |    |
| [`shininess`](#fiftyone.core.threed.MeshPhongMaterial.shininess)                   |    |
| [`specular_color`](#fiftyone.core.threed.MeshPhongMaterial.specular_color)         |    |

**Methods:**

| [`as_dict`](#fiftyone.core.threed.MeshPhongMaterial.as_dict)()   |    |
|------------------------------------------------------------------|----|

#### *property* color *: str*

#### *property* emissive_color *: str*

#### *property* emissive_intensity *: float*

#### *property* opacity *: float*

#### *property* reflectivity *: float*

#### *property* refraction_ratio *: float*

#### *property* wireframe *: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)*

#### *property* shininess *: float*

#### *property* specular_color *: str*

#### as_dict()

### *class* fiftyone.core.threed.PointCloudMaterial(shading_mode: Literal['height', 'intensity', 'rgb', 'custom'] = 'height', custom_color: str = '#ffffff', point_size: float = 1.0, attenuate_by_distance: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False, opacity: float = 1.0)

Bases: [`Material3D`](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.Material3D)

Represents a point cloud material.

* **Parameters:**
  * **shading_mode** ( *"height"*) – the shading mode to use. Supported values are
    “height”, “intensity”, “rgb”, and “custom”
  * **custom_color** ( *"#ffffff"*) – a custom color to use for the point cloud.
    This is only used when `shading_mode` is “custom”
  * **point_size** (*1.0*) – the size of the points in the point cloud
  * **attenuate_by_distance** (*False*) – whether to attenuate the point size
    based on distance from the camera
  * **opacity** (*1.0*) – the opacity of the material, in the range `[0, 1]`

**Attributes:**

| [`shading_mode`](#fiftyone.core.threed.PointCloudMaterial.shading_mode)                   |    |
|-------------------------------------------------------------------------------------------|----|
| [`custom_color`](#fiftyone.core.threed.PointCloudMaterial.custom_color)                   |    |
| [`point_size`](#fiftyone.core.threed.PointCloudMaterial.point_size)                       |    |
| [`attenuate_by_distance`](#fiftyone.core.threed.PointCloudMaterial.attenuate_by_distance) |    |
| [`opacity`](#fiftyone.core.threed.PointCloudMaterial.opacity)                             |    |

**Methods:**

| [`as_dict`](#fiftyone.core.threed.PointCloudMaterial.as_dict)()   |    |
|-------------------------------------------------------------------|----|

#### *property* shading_mode *: Literal['height', 'intensity', 'rgb', 'custom']*

#### *property* custom_color *: str*

#### *property* point_size *: float*

#### *property* attenuate_by_distance *: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)*

#### as_dict()

#### *property* opacity *: float*

### *class* fiftyone.core.threed.FbxMesh(name: str, fbx_path: str, default_material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial) | None = None, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Mesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh)

Represents an FBX mesh.

* **Parameters:**
  * **name** (*str*) – the name of the mesh
  * **fbx_path** (*str*) – the path to the `.fbx` file. Path may be either
    absolute or relative to the directory containing the `.fo3d`
    file
  * **material** (`fiftyone.core.threed.MeshMaterial`, optional) – the default material for the mesh if FBX file does not contain
    material information. Defaults to
    [`fiftyone.core.threed.MeshStandardMaterial`](#fiftyone.core.threed.MeshStandardMaterial)
  * **visible** (*True*) – default visibility of the mesh in the scene
  * **position** (*None*) – the position of the mesh in object space
  * **quaternion** (*None*) – the quaternion of the mesh in object space
  * **scale** (*None*) – the scale of the mesh in object space
* **Raises:**
  **ValueError** – If `fbx_path` does not end with `.fbx`

**Methods:**

| [`add`](#fiftyone.core.threed.FbxMesh.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|-------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.FbxMesh.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.FbxMesh.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.FbxMesh.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.FbxMesh.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.FbxMesh.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.FbxMesh.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`set_default_material`](#fiftyone.core.threed.FbxMesh.set_default_material)(material)          | Sets the material of the mesh.                                              |
| [`traverse`](#fiftyone.core.threed.FbxMesh.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.FbxMesh.local_transform_matrix)   | The local transform matrix of the object.     |
|------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.FbxMesh.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.FbxMesh.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.FbxMesh.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.FbxMesh.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.FbxMesh.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### set_default_material(material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial))

Sets the material of the mesh.

* **Parameters:**
  **material** ([*MeshMaterial*](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)) – the material to set as the default

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.GltfMesh(name: str, gltf_path: str, default_material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial) | None = None, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Mesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh)

Represents a gLTF mesh.

* **Parameters:**
  * **name** (*str*) – the name of the mesh
  * **gltf_path** (*str*) – the path to the `.gltf` or `.glb` file. The path
    may be either absolute or relative to the directory containing the
    `.fo3d` file
  * **material** (`fiftyone.core.threed.MeshMaterial`, optional) – the default material for the mesh if gLTF file does not contain
    material information. Defaults to
    [`fiftyone.core.threed.MeshStandardMaterial`](#fiftyone.core.threed.MeshStandardMaterial)
  * **visible** (*True*) – default visibility of the mesh in the scene
  * **position** (*None*) – the position of the mesh in object space
  * **quaternion** (*None*) – the quaternion of the mesh in object space
  * **scale** (*None*) – the scale of the mesh in object space
* **Raises:**
  **ValueError** – if `gltf_path` does not end with ‘.gltf’ or `.glb`

**Methods:**

| [`add`](#fiftyone.core.threed.GltfMesh.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|--------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.GltfMesh.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.GltfMesh.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.GltfMesh.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.GltfMesh.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.GltfMesh.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.GltfMesh.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`set_default_material`](#fiftyone.core.threed.GltfMesh.set_default_material)(material)          | Sets the material of the mesh.                                              |
| [`traverse`](#fiftyone.core.threed.GltfMesh.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.GltfMesh.local_transform_matrix)   | The local transform matrix of the object.     |
|-------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.GltfMesh.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.GltfMesh.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.GltfMesh.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.GltfMesh.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.GltfMesh.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### set_default_material(material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial))

Sets the material of the mesh.

* **Parameters:**
  **material** ([*MeshMaterial*](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)) – the material to set as the default

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.ObjMesh(name: str, obj_path: str, mtl_path: str | None = None, default_material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial) | None = None, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Mesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh)

Represents an OBJ mesh.

* **Parameters:**
  * **name** (*str*) – the name of the mesh
  * **obj_path** (*str*) – the path to the `.obj` file. The path may be either
    absolute or relative to the directory containing the `.fo3d`
    file
  * **mtl_path** (*str* *,* *optional*) – the path to the `.mtl` file. Defaults to
    `None`. The path may be either absolute or relative to the
    directory containing the `.fo3d` file
  * **material** (`fiftyone.core.threed.MeshMaterial`, optional) – the default material for the mesh if `mtl_path` is not provided
    or if material in `mtl_path` is not found. Defaults to
    [`fiftyone.core.threed.MeshStandardMaterial`](#fiftyone.core.threed.MeshStandardMaterial)
  * **visible** (*True*) – default visibility of the mesh in the scene
  * **position** (*None*) – the position of the mesh in object space
  * **quaternion** (*None*) – the quaternion of the mesh in object space
  * **scale** (*None*) – the scale of the mesh in object space
* **Raises:**
  * **ValueError** – if `obj_path` does not end with `.obj`
  * **ValueError** – if `mtl_path` does not end with `.mtl`

**Methods:**

| [`add`](#fiftyone.core.threed.ObjMesh.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|-------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.ObjMesh.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.ObjMesh.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.ObjMesh.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.ObjMesh.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.ObjMesh.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.ObjMesh.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`set_default_material`](#fiftyone.core.threed.ObjMesh.set_default_material)(material)          | Sets the material of the mesh.                                              |
| [`traverse`](#fiftyone.core.threed.ObjMesh.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.ObjMesh.local_transform_matrix)   | The local transform matrix of the object.     |
|------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.ObjMesh.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.ObjMesh.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.ObjMesh.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.ObjMesh.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.ObjMesh.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### set_default_material(material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial))

Sets the material of the mesh.

* **Parameters:**
  **material** ([*MeshMaterial*](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)) – the material to set as the default

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.PlyMesh(name: str, ply_path: str, is_point_cloud: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False, center_geometry: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = True, default_material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial) | None = None, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Mesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh)

Represents a PLY mesh. A PLY mesh can be a point cloud or a mesh.

* **Parameters:**
  * **name** (*str*) – the name of the mesh
  * **ply_path** (*str*) – the path to the `.ply` file. The path may be either
    absolute or relative to the directory containing the `.fo3d` file
  * **is_point_cloud** ([*bool*](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)) – whether the PLY file is a point cloud. Defaults
    to `False`
  * **center_geometry** ([*bool*](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)) – whether to center the geometry. Defaults to
    `True`
  * **material** (`fiftyone.core.threed.MeshMaterial`, optional) – default material for the mesh if PLY file does not contain
    vertex colors. Defaults to
    [`fiftyone.core.threed.MeshStandardMaterial`](#fiftyone.core.threed.MeshStandardMaterial). If the PLY
    file contains vertex colors, the material is ignored and vertex
    colors are used
  * **visible** (*True*) – default visibility of the mesh in the scene
  * **position** (*None*) – the position of the mesh in object space
  * **quaternion** (*None*) – the quaternion of the mesh in object space
  * **scale** (*None*) – the scale of the mesh in object space
* **Raises:**
  **ValueError** – if `ply_path` does not end with `.ply`

**Methods:**

| [`add`](#fiftyone.core.threed.PlyMesh.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|-------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.PlyMesh.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.PlyMesh.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.PlyMesh.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.PlyMesh.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.PlyMesh.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.PlyMesh.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`set_default_material`](#fiftyone.core.threed.PlyMesh.set_default_material)(material)          | Sets the material of the mesh.                                              |
| [`traverse`](#fiftyone.core.threed.PlyMesh.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.PlyMesh.local_transform_matrix)   | The local transform matrix of the object.     |
|------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.PlyMesh.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.PlyMesh.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.PlyMesh.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.PlyMesh.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.PlyMesh.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### set_default_material(material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial))

Sets the material of the mesh.

* **Parameters:**
  **material** ([*MeshMaterial*](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)) – the material to set as the default

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.StlMesh(name: str, stl_path: str, default_material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial) | None = None, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Mesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh)

Represents an STL mesh.

* **Parameters:**
  * **name** (*str*) – the name of the mesh
  * **stl_path** (*str*) – the path to the `.stl` file. The path may be either
    absolute or relative to the directory containing the `.fo3d`
    file
  * **material** (`fiftyone.core.threed.MeshMaterial`, optional) – default material for the mesh. Defaults to
    [`fiftyone.core.threed.MeshStandardMaterial`](#fiftyone.core.threed.MeshStandardMaterial)
  * **visible** (*True*) – default visibility of the mesh in the scene
  * **position** (*None*) – the position of the mesh in object space
  * **quaternion** (*None*) – the quaternion of the mesh in object space
  * **scale** (*None*) – the scale of the mesh in object space
* **Raises:**
  **ValueError** – if `stl_path` does not end with `.stl`

**Methods:**

| [`add`](#fiftyone.core.threed.StlMesh.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|-------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.StlMesh.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.StlMesh.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.StlMesh.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.StlMesh.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.StlMesh.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.StlMesh.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`set_default_material`](#fiftyone.core.threed.StlMesh.set_default_material)(material)          | Sets the material of the mesh.                                              |
| [`traverse`](#fiftyone.core.threed.StlMesh.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.StlMesh.local_transform_matrix)   | The local transform matrix of the object.     |
|------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.StlMesh.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.StlMesh.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.StlMesh.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.StlMesh.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.StlMesh.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### set_default_material(material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial))

Sets the material of the mesh.

* **Parameters:**
  **material** ([*MeshMaterial*](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)) – the material to set as the default

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.MirisStream(name: str, asset_uuid: str, viewer_key: str | None = None, visible: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Object3D`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)

Represents a Miris stream rendered via the `@miris-inc/three` SDK.

* **Parameters:**
  * **name** (*str*) – the name of the stream
  * **asset_uuid** (*str*) – the Miris asset UUID identifying the stream
  * **viewer_key** (*str* *,* *optional*) – the Miris viewer key used to authorize
    playback. If `None`, the App must supply a viewer key by
    another means (e.g. `dataset.info["miris_viewer_key"]`)
  * **visible** (*True*) – default visibility of the stream in the scene
  * **position** (*None*) – the position of the stream in object space
  * **quaternion** (*None*) – the quaternion of the stream in object space
  * **scale** (*None*) – the scale of the stream in object space

**Methods:**

| [`add`](#fiftyone.core.threed.MirisStream.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|-----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.MirisStream.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.MirisStream.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.MirisStream.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.MirisStream.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.MirisStream.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.MirisStream.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`traverse`](#fiftyone.core.threed.MirisStream.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.MirisStream.local_transform_matrix)   | The local transform matrix of the object.     |
|----------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.MirisStream.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.MirisStream.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.MirisStream.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.MirisStream.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.MirisStream.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.Object3D(name: str, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: `object`

The base class for all 3D objects in the scene.

* **Parameters:**
  * **name** – the name of the object
  * **visible** (*True*) – default visibility of the object in the scene
  * **position** (*None*) – the position of the object in object space
  * **quaternion** (*None*) – the quaternion of the object in object space
  * **scale** (*None*) – the scale of the object in object space

**Attributes:**

| [`uuid`](#fiftyone.core.threed.Object3D.uuid)                                     | The unique ID of the object.                  |
|-----------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.Object3D.position)                             | The position of the object in object space.   |
| [`rotation`](#fiftyone.core.threed.Object3D.rotation)                             | The rotation of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.Object3D.quaternion)                         | The quaternion of the object in object space. |
| [`scale`](#fiftyone.core.threed.Object3D.scale)                                   | The scale of the object in object space.      |
| [`local_transform_matrix`](#fiftyone.core.threed.Object3D.local_transform_matrix) | The local transform matrix of the object.     |

**Methods:**

| [`add`](#fiftyone.core.threed.Object3D.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|--------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`clear`](#fiftyone.core.threed.Object3D.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.Object3D.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.Object3D.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.Object3D.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.Object3D.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`traverse`](#fiftyone.core.threed.Object3D.traverse)([include_self])                            | Traverse the scene graph.                                                   |
| [`as_dict`](#fiftyone.core.threed.Object3D.as_dict)()                                            | Converts the object to a dict.                                              |

#### *property* uuid

The unique ID of the object.

#### *property* position

The position of the object in object space.

#### *property* rotation

The rotation of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### *property* scale

The scale of the object in object space.

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### traverse(include_self=True)

Traverse the scene graph.

#### as_dict()

Converts the object to a dict.

### *class* fiftyone.core.threed.Quaternion(x: float = 0.0, y: float = 0.0, z: float = 0.0, w: float = 1.0)

Bases: [`BaseValidatedDataClass`](fiftyone.core.threed.validators.md#fiftyone.core.threed.validators.BaseValidatedDataClass)

Represents a quaternion.

**Attributes:**

| [`x`](#fiftyone.core.threed.Quaternion.x)   |    |
|---------------------------------------------|----|
| [`y`](#fiftyone.core.threed.Quaternion.y)   |    |
| [`z`](#fiftyone.core.threed.Quaternion.z)   |    |
| [`w`](#fiftyone.core.threed.Quaternion.w)   |    |

**Methods:**

| [`to_euler`](#fiftyone.core.threed.Quaternion.to_euler)([degrees, sequence])   | Converts the quaternion into euler angles.   |
|--------------------------------------------------------------------------------|----------------------------------------------|
| [`to_arr`](#fiftyone.core.threed.Quaternion.to_arr)()                          | Converts the quaternion to a numpy array.    |

#### *property* x *: float*

#### *property* y *: float*

#### *property* z *: float*

#### *property* w *: float*

#### to_euler(degrees=False, sequence='XYZ')

Converts the quaternion into euler angles.

#### to_arr()

Converts the quaternion to a numpy array.

### *class* fiftyone.core.threed.PointCloud(name: str, pcd_path: str, material: [PointCloudMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.PointCloudMaterial) | None = None, center_geometry: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False, flag_for_projection: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Object3D`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)

Represents a point cloud.

* **Parameters:**
  * **name** (*str*) – the name of the point cloud
  * **pcd_path** (*str*) – the path to the `.pcd` file. The path may be either
    absolute or relative to the directory containing the `.fo3d` file
  * **material** ([`fiftyone.core.threed.PointCloudMaterial`](#fiftyone.core.threed.PointCloudMaterial), optional) – the material of the point cloud. If not specified, defaults to a
    new instance of [`fiftyone.core.threed.PointCloudMaterial`](#fiftyone.core.threed.PointCloudMaterial)
    with its default parameters
  * **center_geometry** ([*bool*](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)) – whether to center the geometry of the point
    cloud. Defaults to `False`
  * **flag_for_projection** ([*bool*](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)) – whether to flag the point cloud for
    usage in orthographic projection. Each
    [`fiftyone.core.threed.Scene`](#fiftyone.core.threed.Scene) can have at most one asset
    flagged for orthographic projection. Defaults to `False`. If
    multiple assets are flagged, the first one will be chosen
  * **visible** (*True*) – default visibility of the point cloud in the scene
  * **position** (*None*) – the position of the object in point cloud space
  * **quaternion** (*None*) – the quaternion of the point cloud in object space
  * **scale** (*None*) – the scale of the point cloud in object space
* **Raises:**
  **ValueError** – if `pcd_path` does not end with `.pcd`

**Methods:**

| [`set_default_material`](#fiftyone.core.threed.PointCloud.set_default_material)(material)          | Sets the material of the point cloud.                                       |
|----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`add`](#fiftyone.core.threed.PointCloud.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
| [`as_dict`](#fiftyone.core.threed.PointCloud.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.PointCloud.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.PointCloud.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.PointCloud.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.PointCloud.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.PointCloud.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`traverse`](#fiftyone.core.threed.PointCloud.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.PointCloud.local_transform_matrix)   | The local transform matrix of the object.     |
|---------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.PointCloud.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.PointCloud.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.PointCloud.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.PointCloud.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.PointCloud.uuid)                                       | The unique ID of the object.                  |

#### set_default_material(material: [PointCloudMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.PointCloudMaterial))

Sets the material of the point cloud.

* **Parameters:**
  **material** ([*PointCloudMaterial*](#fiftyone.core.threed.PointCloudMaterial)) – The material to set as the default

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.Counter(iterable=None, , \*\*kwds)

Bases: `dict`

Dict subclass for counting hashable items.  Sometimes called a bag
or multiset.  Elements are stored as dictionary keys and their counts
are stored as dictionary values.

When constructed from a Mapping or Counter, the original object’s
values will be used as the initial counts.

```pycon
>>> c = Counter('abcdeabcdabcaba')  # count elements from a string
```

```pycon
>>> c.most_common(3)                # three most common elements
[('a', 5), ('b', 4), ('c', 3)]
>>> sorted(c)                       # list all unique elements
['a', 'b', 'c', 'd', 'e']
>>> ''.join(sorted(c.elements()))   # list elements with repetitions
'aaaaabbbbcccdde'
>>> sum(c.values())                 # total of all counts
15
```

```pycon
>>> c['a']                          # count of letter 'a'
5
>>> for elem in 'shazam':           # update counts from an iterable
...     c[elem] += 1                # by adding 1 to each element's count
>>> c['a']                          # now there are seven 'a'
7
>>> del c['b']                      # remove all 'b'
>>> c['b']                          # now there are zero 'b'
0
```

```pycon
>>> d = Counter('simsalabim')       # make another counter
>>> c.update(d)                     # add in the second counter
>>> c['a']                          # now there are nine 'a'
9
```

```pycon
>>> c.clear()                       # empty the counter
>>> c
Counter()
```

Note:  If a count is set to zero or reduced to zero, it will remain
in the counter until the entry is deleted or the counter is cleared:

```pycon
>>> c = Counter('aaabbc')
>>> c['b'] -= 2                     # reduce the count of 'b' by two
>>> c.most_common()                 # 'b' is still in, but its count is zero
[('a', 3), ('c', 1), ('b', 0)]
```

**Methods:**

| [`total`](#fiftyone.core.threed.Counter.total)()                         | Sum of the counts                                                                   |
|--------------------------------------------------------------------------|-------------------------------------------------------------------------------------|
| [`most_common`](#fiftyone.core.threed.Counter.most_common)([n])          | List the n most common elements and their counts from the most common to the least. |
| [`elements`](#fiftyone.core.threed.Counter.elements)()                   | Iterator over elements repeating each as many times as its count.                   |
| [`fromkeys`](#fiftyone.core.threed.Counter.fromkeys)(iterable[, v])      | Create a new dictionary with keys from iterable and values set to value.            |
| [`update`](#fiftyone.core.threed.Counter.update)([iterable])             | Like dict.update() but add counts instead of replacing them.                        |
| [`subtract`](#fiftyone.core.threed.Counter.subtract)([iterable])         | Like dict.update() but subtracts counts instead of replacing them.                  |
| [`copy`](#fiftyone.core.threed.Counter.copy)()                           | Return a shallow copy.                                                              |
| [`clear`](#fiftyone.core.threed.Counter.clear)()                         | Remove all items from the dict.                                                     |
| [`get`](#fiftyone.core.threed.Counter.get)(key[, default])               | Return the value for key if key is in the dictionary, else default.                 |
| [`items`](#fiftyone.core.threed.Counter.items)()                         | Return a set-like object providing a view on the dict's items.                      |
| [`keys`](#fiftyone.core.threed.Counter.keys)()                           | Return a set-like object providing a view on the dict's keys.                       |
| [`pop`](#fiftyone.core.threed.Counter.pop)(k[,d])                        | If the key is not found, return the default if given; otherwise, raise a KeyError.  |
| [`popitem`](#fiftyone.core.threed.Counter.popitem)()                     | Remove and return a (key, value) pair as a 2-tuple.                                 |
| [`setdefault`](#fiftyone.core.threed.Counter.setdefault)(key[, default]) | Insert key with a value of default if key is not in the dictionary.                 |
| [`values`](#fiftyone.core.threed.Counter.values)()                       | Return an object providing a view on the dict's values.                             |

#### total()

Sum of the counts

#### most_common(n=None)

List the n most common elements and their counts from the most
common to the least.  If n is None, then list all element counts.

```pycon
>>> Counter('abracadabra').most_common(3)
[('a', 5), ('b', 2), ('r', 2)]
```

#### elements()

Iterator over elements repeating each as many times as its count.

```pycon
>>> c = Counter('ABCABC')
>>> sorted(c.elements())
['A', 'A', 'B', 'B', 'C', 'C']
```

Knuth’s example for prime factors of 1836:  2\*\*2 \* 3\*\*3 \* 17\*\*1

```pycon
>>> import math
>>> prime_factors = Counter({2: 2, 3: 3, 17: 1})
>>> math.prod(prime_factors.elements())
1836
```

Note, if an element’s count has been set to zero or is a negative
number, elements() will ignore it.

#### *classmethod* fromkeys(iterable, v=None)

Create a new dictionary with keys from iterable and values set to value.

#### update(iterable=None, , \*\*kwds)

Like dict.update() but add counts instead of replacing them.

Source can be an iterable, a dictionary, or another Counter instance.

```pycon
>>> c = Counter('which')
>>> c.update('witch')           # add elements from another iterable
>>> d = Counter('watch')
>>> c.update(d)                 # add elements from another counter
>>> c['h']                      # four 'h' in which, witch, and watch
4
```

#### subtract(iterable=None, , \*\*kwds)

Like dict.update() but subtracts counts instead of replacing them.
Counts can be reduced below zero.  Both the inputs and outputs are
allowed to contain zero and negative counts.

Source can be an iterable, a dictionary, or another Counter instance.

```pycon
>>> c = Counter('which')
>>> c.subtract('witch')             # subtract elements from another iterable
>>> c.subtract(Counter('watch'))    # subtract elements from another counter
>>> c['h']                          # 2 in which, minus 1 in witch, minus 1 in watch
0
>>> c['w']                          # 1 in which, minus 1 in witch, minus 1 in watch
-1
```

#### copy()

Return a shallow copy.

#### clear()

Remove all items from the dict.

#### get(key, default=None,)

Return the value for key if key is in the dictionary, else default.

#### items()

Return a set-like object providing a view on the dict’s items.

#### keys()

Return a set-like object providing a view on the dict’s keys.

#### pop(k) → v, remove specified key and return the corresponding value.

If the key is not found, return the default if given; otherwise,
raise a KeyError.

#### popitem()

Remove and return a (key, value) pair as a 2-tuple.

Pairs are returned in LIFO (last-in, first-out) order.
Raises KeyError if the dict is empty.

#### setdefault(key, default=None,)

Insert key with a value of default if key is not in the dictionary.

Return the value for key if key is in the dictionary, else default.

#### values()

Return an object providing a view on the dict’s values.

### *class* fiftyone.core.threed.PerspectiveCamera(position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | None = None, look_at: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | None = None, up: Literal['X', 'Y', 'Z', '-X', '-Y', '-Z'] | None = None, aspect: float | None = None, fov: float = 50.0, near: float = 0.1, far: float = 2000.0)

Bases: [`BaseValidatedDataClass`](fiftyone.core.threed.validators.md#fiftyone.core.threed.validators.BaseValidatedDataClass)

Represents the configuration of a 3D perspective camera.

* **Parameters:**
  * **position** (*None*) – the position of the camera. If `None`, the camera
    position is calculated based on the bounding box of the scene
  * **look_at** (*None*) – the point the camera is looking at. If `None`, the
    camera looks at the center of the scene
  * **up** (*None*) – the orthonormal axis that is considered up. Must be one of
    “X”, “Y”, “Z”, “-X”, “-Y”, or “-Z”. If `None`, it will fallback
    to the global `up` as defined in 3D plugin settings. If that too
    is not defined, it will fallback to “Z”
  * **aspect** (*None*) – the aspect ratio of the camera. If `None`, the aspect
    ratio is calculated based on the width and height of the canvas
  * **fov** (*50*) – camera frustum vertical field of view in degrees. If
    `None`, the field of view is 50 degrees
  * **near** (*0.1*) – the near clipping plane of the camera
  * **far** (*2000*) – the far clipping plane of the camera

**Attributes:**

| [`position`](#fiftyone.core.threed.PerspectiveCamera.position)   |    |
|------------------------------------------------------------------|----|
| [`look_at`](#fiftyone.core.threed.PerspectiveCamera.look_at)     |    |
| [`up`](#fiftyone.core.threed.PerspectiveCamera.up)               |    |
| [`aspect`](#fiftyone.core.threed.PerspectiveCamera.aspect)       |    |
| [`fov`](#fiftyone.core.threed.PerspectiveCamera.fov)             |    |
| [`near`](#fiftyone.core.threed.PerspectiveCamera.near)           |    |
| [`far`](#fiftyone.core.threed.PerspectiveCamera.far)             |    |

**Methods:**

| [`as_dict`](#fiftyone.core.threed.PerspectiveCamera.as_dict)()   |    |
|------------------------------------------------------------------|----|

#### *property* position *: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3)*

#### *property* look_at *: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3)*

#### *property* up *: str | None*

#### *property* aspect

#### *property* fov *: float*

#### *property* near *: float*

#### *property* far *: float*

#### as_dict() → dict

### *class* fiftyone.core.threed.Light(name: str | None = None, color: str = '#ffffff', intensity: float = 1.0, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Object3D`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)

Base class for 3D lights.

* **Parameters:**
  * **color** ( *"#ffffff"*) – the color of the light
  * **intensity** (*1.0*) – the intensity of the light in the range `[0, 1]`
  * **visible** (*True*) – default visibility of the object in the scene
  * **position** (*None*) – the position of the light in object space
  * **quaternion** (*None*) – the quaternion of the light in object space
  * **scale** (*None*) – the scale of the light in object space

**Methods:**

| [`add`](#fiftyone.core.threed.Light.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.Light.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.Light.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.Light.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.Light.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.Light.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.Light.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`traverse`](#fiftyone.core.threed.Light.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.Light.local_transform_matrix)   | The local transform matrix of the object.     |
|----------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.Light.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.Light.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.Light.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.Light.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.Light.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.Shape3D(name: str, material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial) | None = None, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Mesh`](fiftyone.core.threed.mesh.md#fiftyone.core.threed.mesh.Mesh)

Represents an abstract 3D shape.

* **Parameters:**
  * **name** – the name of the mesh
  * **material** (`fiftyone.core.threed.MeshMaterial`, optional) – default material for the shape mesh. Defaults to
    [`fiftyone.core.threed.MeshStandardMaterial`](#fiftyone.core.threed.MeshStandardMaterial) if not provided
  * **visible** (*True*) – default visibility of the mesh in the scene
  * **position** (*None*) – the position of the mesh in object space
  * **quaternion** (*None*) – the quaternion of the mesh in object space
  * **scale** (*None*) – the scale of the mesh in object space

**Methods:**

| [`add`](#fiftyone.core.threed.Shape3D.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|-------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.Shape3D.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.Shape3D.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.Shape3D.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.Shape3D.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.Shape3D.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.Shape3D.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`set_default_material`](#fiftyone.core.threed.Shape3D.set_default_material)(material)          | Sets the material of the mesh.                                              |
| [`traverse`](#fiftyone.core.threed.Shape3D.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.Shape3D.local_transform_matrix)   | The local transform matrix of the object.     |
|------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.Shape3D.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.Shape3D.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.Shape3D.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.Shape3D.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.Shape3D.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### set_default_material(material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial))

Sets the material of the mesh.

* **Parameters:**
  **material** ([*MeshMaterial*](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)) – the material to set as the default

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.GaussianSplat(name: str, splat_path: str, format: str | None = None, center_geometry: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = True, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None, , opacity: float = 1.0, tint: str = '#ffffff')

Bases: [`Object3D`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)

Represents a Gaussian splat asset.

* **Parameters:**
  * **name** (*str*) – the name of the splat
  * **splat_path** (*str*) – the path to the splat file. The path may be either
    absolute or relative to the directory containing the `.fo3d`
    file
  * **format** (*None*) – an optional file format hint, such as `"ply"`,
    `"spz"`, `"splat"`, `"ksplat"`, `"sog"`, or
    `"rad"`. A recognized hint permits extensionless or opaque
    paths. A `.zip` path is accepted only when the format is
    explicitly set to `"sog"`
  * **center_geometry** (*True*) – whether to center the splat geometry
  * **visible** (*True*) – default visibility of the splat in the scene
  * **position** (*None*) – the position of the splat in object space
  * **quaternion** (*None*) – the quaternion of the splat in object space
  * **scale** (*None*) – the scale of the splat in object space
  * **opacity** (*1.0*) – the opacity multiplier for the splat, in the range
    `[0, 1]`
  * **tint** ( *"#ffffff"*) – a color multiplier applied to the splat
* **Raises:**
  **ValueError** – if the path or format is not supported

**Methods:**

| [`add`](#fiftyone.core.threed.GaussianSplat.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|-------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.GaussianSplat.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.GaussianSplat.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.GaussianSplat.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.GaussianSplat.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.GaussianSplat.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.GaussianSplat.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`traverse`](#fiftyone.core.threed.GaussianSplat.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.GaussianSplat.local_transform_matrix)   | The local transform matrix of the object.     |
|------------------------------------------------------------------------------------------|-----------------------------------------------|
| [`opacity`](#fiftyone.core.threed.GaussianSplat.opacity)                                 | The opacity multiplier for the splat.         |
| [`position`](#fiftyone.core.threed.GaussianSplat.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.GaussianSplat.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.GaussianSplat.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.GaussianSplat.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.GaussianSplat.uuid)                                       | The unique ID of the object.                  |
| [`tint`](#fiftyone.core.threed.GaussianSplat.tint)                                       | The color multiplier for the splat.           |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* opacity *: float*

The opacity multiplier for the splat.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

#### *property* tint *: str*

The color multiplier for the splat.

### fiftyone.core.threed.convert_keys_to_snake_case(d)

Convert all keys in a dictionary from camelCase to snake_case.

* **Parameters:**
  **d** – the dictionary
* **Returns:**
  a dictionary with snake case keys

### *class* fiftyone.core.threed.BaseValidatedDataClass

Bases: `object`

### fiftyone.core.threed.validate_color(v: str | None, nullable: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False)

### fiftyone.core.threed.validate_list(v: Any, length: int | None = None, nullable: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [list](fiftyone.core.session.events.md#fiftyone.core.session.events.Colorscale.list)

### *class* fiftyone.core.threed.SceneBackground(color: str | None = None, image: str | None = None, cube: List[str] | None = None, intensity: float | None = 1.0)

Bases: [`BaseValidatedDataClass`](fiftyone.core.threed.validators.md#fiftyone.core.threed.validators.BaseValidatedDataClass)

Represents the background of the scene.

* **Parameters:**
  * **color** (*str* *,* *optional*) – the background color of the scene
  * **image** (*str* *,* *optional*) – the path to the background image. Defaults to
    None. This takes precedence over color if provided
  * **cube** ([*list*](fiftyone.core.session.events.md#fiftyone.core.session.events.Colorscale.list) *,* *optional*) – the paths to the six faces of the background.
    The order of the faces is: +X, -X, +Y, -Y, +Z, -Z. Defaults to
    `None`. This takes precedence over the image and color if
    provided. This can be used to build a skybox
  * **intensity** (*float* *,* *optional*) – the intensity of the background. Defaults
    to `1.0`. This only applies for `image` and `cube` backgrounds

**Attributes:**

| [`color`](#fiftyone.core.threed.SceneBackground.color)         |    |
|----------------------------------------------------------------|----|
| [`image`](#fiftyone.core.threed.SceneBackground.image)         |    |
| [`cube`](#fiftyone.core.threed.SceneBackground.cube)           |    |
| [`intensity`](#fiftyone.core.threed.SceneBackground.intensity) |    |

**Methods:**

| [`as_dict`](#fiftyone.core.threed.SceneBackground.as_dict)()   |    |
|----------------------------------------------------------------|----|

#### *property* color *: str | None*

#### *property* image *: str | None*

#### *property* cube *: List[str] | None*

#### *property* intensity *: float | None*

#### as_dict() → dict

### *class* fiftyone.core.threed.Scene(camera: [PerspectiveCamera](fiftyone.core.threed.camera.md#fiftyone.core.threed.camera.PerspectiveCamera) | None = None, lights: List[[Light](fiftyone.core.threed.lights.md#fiftyone.core.threed.lights.Light)] | None = None, background: [SceneBackground](fiftyone.core.threed.scene_3d.md#fiftyone.core.threed.scene_3d.SceneBackground) | None = None)

Bases: [`Object3D`](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)

Represents a scene graph which contains a hierarchy of 3D objects.

Example usage:

```default
import fiftyone as fo

scene = fo.Scene()

obj_mesh = fo.ObjMesh(
    "obj_mesh_name", "/path/to/mesh.obj", mtl_path="/path/to/mesh.mtl"
)
gltf_mesh = fo.GltfMesh("gltf_mesh_name", "/path/to/mesh.gltf")
pcd = fo.PointCloud("pcd_name", "/path/to/points.pcd")

scene.add(obj_mesh)
scene.add(gltf_mesh)
scene.add(pcd)

scene.write("/path/to/scene.fo3d")

sample = fo.Sample("/path/to/scene.fo3d")

dataset = fo.Dataset()
dataset.add_sample(sample)
```

* **Parameters:**
  * **camera** (*None*) – the default camera of the scene. If `None`, a default
    [`fiftyone.core.threed.PerspectiveCamera`](#fiftyone.core.threed.PerspectiveCamera) is created with
    reasonable defaults
  * **lights** (*None*) – a list of lights in the scene. If\`\`None\`\`, a default set
    of lights is used, which includes an ambient light and six
    directional lights placed at different angles around the scene
  * **background** (*None*) – the background for the scene. May be a color, image,
    or a skybox

**Methods:**

| [`copy`](#fiftyone.core.threed.Scene.copy)()                                                  | Returns a deep copy of the scene.                                           |
|-----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`write`](#fiftyone.core.threed.Scene.write)(fo3d_path[, resolve_relative_paths, ...])        | Export the scene to a `.fo3d` file.                                         |
| [`add`](#fiftyone.core.threed.Scene.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
| [`as_dict`](#fiftyone.core.threed.Scene.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.Scene.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.Scene.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.Scene.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.Scene.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.Scene.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`traverse`](#fiftyone.core.threed.Scene.traverse)([include_self])                            | Traverse the scene graph.                                                   |
| [`update_asset_paths`](#fiftyone.core.threed.Scene.update_asset_paths)(asset_rewrite_paths)   | Update asset paths in this scene according to an input dict mapping.        |
| [`get_scene_summary`](#fiftyone.core.threed.Scene.get_scene_summary)()                        | Returns a summary of the scene.                                             |
| [`get_asset_paths`](#fiftyone.core.threed.Scene.get_asset_paths)()                            | Returns a list of all asset paths in the scene.                             |
| [`from_fo3d`](#fiftyone.core.threed.Scene.from_fo3d)(path)                                    | Loads a scene from an FO3D file.                                            |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.Scene.local_transform_matrix)   | The local transform matrix of the object.     |
|----------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.Scene.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.Scene.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.Scene.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.Scene.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.Scene.uuid)                                       | The unique ID of the object.                  |

#### copy()

Returns a deep copy of the scene.

#### write(fo3d_path: str, resolve_relative_paths=False, pprint=False)

Export the scene to a `.fo3d` file.

* **Parameters:**
  * **fo3d_path** – the path to write the scene to
  * **resolve_relative_paths** – whether to resolve relative paths in the
    scene to absolute paths. If `True`, all asset paths in the
    scene are resolved to absolute paths. If `False`, asset
    paths are left as-is. Defaults to `False`.
  * **pprint** – whether to pretty-print the JSON output. Defaults to
    `False`.

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### traverse(include_self=False)

Traverse the scene graph.

* **Parameters:**
  **include_self** – whether to include the current node in the traversal
* **Returns:**
  a generator that yields [`Object3D`](#fiftyone.core.threed.Object3D) instances

#### *property* uuid

The unique ID of the object.

#### update_asset_paths(asset_rewrite_paths: dict)

Update asset paths in this scene according to an input dict mapping.

Asset path is unchanged if it does not exist in `asset_rewrite_paths`

* **Parameters:**
  **asset_rewrite_paths** – `dict` mapping asset path to new asset path
* **Returns:**
  `True` if the scene was modified.

#### get_scene_summary()

Returns a summary of the scene.

#### get_asset_paths()

Returns a list of all asset paths in the scene.

Note that any relative asset paths are not resolved to absolute paths.

* **Returns:**
  a list of asset paths

#### *static* from_fo3d(path: str)

Loads a scene from an FO3D file.

* **Parameters:**
  **path** – the path to an `.fo3d` file
* **Returns:**
  a [`Scene`](#fiftyone.core.threed.Scene)

### *class* fiftyone.core.threed.BoxGeometry(name: str, width: float = 1, height: float = 1, depth: float = 1, default_material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial) | None = None, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Shape3D`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D)

Represents a 3D box.

* **Parameters:**
  * **name** (*str*) – name of the box
  * **width** (*float*) – the width of the box. Defaults to 1
  * **height** (*float*) – the height of the box. Defaults to 1
  * **depth** (*float*) – the depth of the box. Defaults to 1
  * **material** (`fiftyone.core.threed.MeshMaterial`, optional) – default material for the box. Defaults to
    [`fiftyone.core.threed.MeshStandardMaterial`](#fiftyone.core.threed.MeshStandardMaterial)
  * **visible** (*True*) – default visibility of the mesh in the scene
  * **position** (*None*) – the position of the mesh in object space
  * **quaternion** (*None*) – the quaternion of the mesh in object space
  * **scale** (*None*) – the scale of the mesh in object space

**Methods:**

| [`add`](#fiftyone.core.threed.BoxGeometry.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|-----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.BoxGeometry.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.BoxGeometry.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.BoxGeometry.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.BoxGeometry.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.BoxGeometry.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.BoxGeometry.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`set_default_material`](#fiftyone.core.threed.BoxGeometry.set_default_material)(material)          | Sets the material of the mesh.                                              |
| [`traverse`](#fiftyone.core.threed.BoxGeometry.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.BoxGeometry.local_transform_matrix)   | The local transform matrix of the object.     |
|----------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.BoxGeometry.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.BoxGeometry.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.BoxGeometry.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.BoxGeometry.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.BoxGeometry.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### set_default_material(material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial))

Sets the material of the mesh.

* **Parameters:**
  **material** ([*MeshMaterial*](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)) – the material to set as the default

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.PlaneGeometry(name: str, width: float = 1, height: float = 1, default_material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial) | None = None, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Shape3D`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D)

Represents a 3D plane.

* **Parameters:**
  * **name** (*str*) – name of the plane
  * **width** (*float*) – the width of the plane. Defaults to 1
  * **height** (*float*) – the height of the plane. Defaults to 1
  * **material** (`fiftyone.core.threed.MeshMaterial`, optional) – the default material for the plane. Defaults to
    [`fiftyone.core.threed.MeshStandardMaterial`](#fiftyone.core.threed.MeshStandardMaterial)
  * **visible** (*True*) – default visibility of the mesh in the scene
  * **position** (*None*) – the position of the mesh in object space
  * **quaternion** (*None*) – the quaternion of the mesh in object space
  * **scale** (*None*) – the scale of the mesh in object space

**Methods:**

| [`add`](#fiftyone.core.threed.PlaneGeometry.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|-------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.PlaneGeometry.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.PlaneGeometry.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.PlaneGeometry.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.PlaneGeometry.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.PlaneGeometry.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.PlaneGeometry.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`set_default_material`](#fiftyone.core.threed.PlaneGeometry.set_default_material)(material)          | Sets the material of the mesh.                                              |
| [`traverse`](#fiftyone.core.threed.PlaneGeometry.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.PlaneGeometry.local_transform_matrix)   | The local transform matrix of the object.     |
|------------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.PlaneGeometry.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.PlaneGeometry.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.PlaneGeometry.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.PlaneGeometry.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.PlaneGeometry.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### set_default_material(material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial))

Sets the material of the mesh.

* **Parameters:**
  **material** ([*MeshMaterial*](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)) – the material to set as the default

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.SphereGeometry(name: str, radius: float = 1, width_segments: int = 32, height_segments: int = 16, phi_start: float = 0, phi_length: float = 6.283185307179586, theta_start: float = 0, theta_length: float = 3.141592653589793, default_material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial) | None = None, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Shape3D`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D)

Represents a 3D sphere.

* **Parameters:**
  * **name** (*str*) – the name of the sphere
  * **radius** (*float*) – the radius of the sphere. Defaults to 1
  * **width_segments** (*int*) – the number of segmented faces around the
    circumference of the sphere. Defaults to 32
  * **height_segments** (*int*) – the number of rows of faces around the
    circumference of the sphere. Defaults to 16
  * **phi_start** (*float*) – the start angle for the horizontal sweep. Defaults
    to 0
  * **phi_length** (*float*) – the angle for the horizontal sweep. Defaults to
    `2*math.pi`, which makes for a complete sphere
  * **theta_start** (*float*) – the start angle for the vertical sweep. Defaults
    to 0
  * **theta_length** (*float*) – the angle for the vertical sweep. Defaults to
    `math.pi`, which makes for a complete sphere
  * **material** (`fiftyone.core.threed.MeshMaterial`, optional) – the default material for the sphere. Defaults to
    [`fiftyone.core.threed.MeshStandardMaterial`](#fiftyone.core.threed.MeshStandardMaterial)
  * **visible** (*True*) – default visibility of the mesh in the scene
  * **position** (*None*) – the position of the mesh in object space
  * **quaternion** (*None*) – the quaternion of the mesh in object space
  * **scale** (*None*) – the scale of the mesh in object space

**Methods:**

| [`add`](#fiftyone.core.threed.SphereGeometry.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|--------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.SphereGeometry.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.SphereGeometry.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.SphereGeometry.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.SphereGeometry.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.SphereGeometry.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.SphereGeometry.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`set_default_material`](#fiftyone.core.threed.SphereGeometry.set_default_material)(material)          | Sets the material of the mesh.                                              |
| [`traverse`](#fiftyone.core.threed.SphereGeometry.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.SphereGeometry.local_transform_matrix)   | The local transform matrix of the object.     |
|-------------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.SphereGeometry.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.SphereGeometry.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.SphereGeometry.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.SphereGeometry.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.SphereGeometry.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### set_default_material(material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial))

Sets the material of the mesh.

* **Parameters:**
  **material** ([*MeshMaterial*](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)) – the material to set as the default

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.CylinderGeometry(name: str, radius_top: float = 1, radius_bottom: float = 1, height: float = 1, radial_segments: int = 32, height_segments: int = 1, open_ended: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False, theta_start: float = 0, theta_length: float = 6.283185307179586, default_material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial) | None = None, visible=True, position: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, scale: [Vector3](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3) | List[float] | Tuple[float] | array | None = None, quaternion: [Quaternion](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Quaternion) | None = None)

Bases: [`Shape3D`](fiftyone.core.threed.shape_3d.md#fiftyone.core.threed.shape_3d.Shape3D)

Represents a 3D cylinder.

* **Parameters:**
  * **name** (*str*) – name of the cylinder
  * **radius_top** (*float*) – the radius of the top of the cylinder.
    Defaults to 1
  * **radius_bottom** (*float*) – the radius of the bottom of the cylinder.
    Defaults to 1
  * **height** (*float*) – the height of the cylinder. Defaults to 1
  * **radial_segments** (*int*) – number of segmented faces around the
    circumference of the cylinder. Defaults to 32
  * **height_segments** (*int*) – number of rows of faces around the
    circumference of the cylinder. Defaults to 1
  * **open_ended** ([*bool*](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)) – whether the cylinder is open-ended. Defaults to
    `False`
  * **theta_start** (*float*) – the start angle for the vertical sweep. Defaults
    to 0
  * **theta_length** (*float*) – the angle for the vertical sweep. Defaults
    to 2\*Math.PI, which makes for a complete cylinder
  * **material** (`fiftyone.core.threed.MeshMaterial`, optional) – default material for the cylinder. Defaults to
    [`fiftyone.core.threed.MeshStandardMaterial`](#fiftyone.core.threed.MeshStandardMaterial)
  * **visible** (*True*) – default visibility of the mesh in the scene
  * **position** (*None*) – the position of the mesh in object space
  * **quaternion** (*None*) – the quaternion of the mesh in object space
  * **scale** (*None*) – the scale of the mesh in object space

**Methods:**

| [`add`](#fiftyone.core.threed.CylinderGeometry.add)(\*objs)                                              | Add one or more objects as children of this one.                            |
|----------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| [`as_dict`](#fiftyone.core.threed.CylinderGeometry.as_dict)()                                            | Converts the object to a dict.                                              |
| [`clear`](#fiftyone.core.threed.CylinderGeometry.clear)()                                                | Remove all children from this object.                                       |
| [`find_and_execute`](#fiftyone.core.threed.CylinderGeometry.find_and_execute)(node, predicate, on_match) | Recursively search the scene graph and execute an action on matching nodes. |
| [`remove`](#fiftyone.core.threed.CylinderGeometry.remove)(\*objs)                                        | Remove one or more objects from the scene graph recursively.                |
| [`remove_by_name`](#fiftyone.core.threed.CylinderGeometry.remove_by_name)(name)                          | Remove all objects with the given name from the scene graph recursively.    |
| [`remove_by_uuid`](#fiftyone.core.threed.CylinderGeometry.remove_by_uuid)(target_uuid)                   | Remove the object with the given UUID from the scene graph recursively.     |
| [`set_default_material`](#fiftyone.core.threed.CylinderGeometry.set_default_material)(material)          | Sets the material of the mesh.                                              |
| [`traverse`](#fiftyone.core.threed.CylinderGeometry.traverse)([include_self])                            | Traverse the scene graph.                                                   |

**Attributes:**

| [`local_transform_matrix`](#fiftyone.core.threed.CylinderGeometry.local_transform_matrix)   | The local transform matrix of the object.     |
|---------------------------------------------------------------------------------------------|-----------------------------------------------|
| [`position`](#fiftyone.core.threed.CylinderGeometry.position)                               | The position of the object in object space.   |
| [`quaternion`](#fiftyone.core.threed.CylinderGeometry.quaternion)                           | The quaternion of the object in object space. |
| [`rotation`](#fiftyone.core.threed.CylinderGeometry.rotation)                               | The rotation of the object in object space.   |
| [`scale`](#fiftyone.core.threed.CylinderGeometry.scale)                                     | The scale of the object in object space.      |
| [`uuid`](#fiftyone.core.threed.CylinderGeometry.uuid)                                       | The unique ID of the object.                  |

#### add(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Add one or more objects as children of this one.

#### as_dict()

Converts the object to a dict.

#### clear() → None

Remove all children from this object.

#### find_and_execute(node: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D), predicate, on_match, stop_on_first_match: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False) → [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)

Recursively search the scene graph and execute an action on
matching nodes.

This is a generic method for traversing the scene graph and
performing operations on nodes that match a given predicate.
It can be used for finding and removing nodes, collecting nodes,
updating nodes, etc.

The traversal continues into the subtrees of both matching and
non-matching nodes. For matching nodes, the subtree is traversed
when on_match returns True and stop_on_first_match is False.

* **Parameters:**
  * **node** – the node to start searching from
  * **predicate** – a function that takes a child Object3D and returns
  * **criteria** (*True if it matches the search*)
  * **on_match** – a function called when a match is found, takes
  * **(****parent**
  * **searching** ([*child*](fiftyone.core.odm.md#fiftyone.core.odm.WorkspaceDocument.child) *)* *and returns True to continue*)
  * **to** (*False*)
  * **stop**
  * **stop_on_first_match** – if True, stop searching after first match
  * **processed** (*is*)
* **Returns:**
  True if a match was found and we should stop, False otherwise

### Example

# Find all nodes with a specific name and collect them
matches = []
def predicate(child):

> return child.name == “target”

def on_match(parent, child):
: matches.append(child)
  return True  # continue searching

scene.find_and_execute(scene, predicate, on_match)

#### *property* local_transform_matrix

The local transform matrix of the object.

Setting this property also decomposes the matrix into
its constituent position, quaternion, and scale components.
However, decomposition of matrices with skew / shear components
(non-uniform scaling) might have unexpected results.

#### *property* position

The position of the object in object space.

#### *property* quaternion

The quaternion of the object in object space.

#### remove(\*objs: [Object3D](fiftyone.core.threed.object_3d.md#fiftyone.core.threed.object_3d.Object3D)) → None

Remove one or more objects from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes any matching objects from their parent’s
children list.

* **Parameters:**
  **\*objs** – one or more Object3D instances to remove
* **Raises:**
  * **ValueError** – if any of the objects to remove is this object itself
  * **ValueError** – if any of the objects is not found in the scene graph

#### remove_by_name(name: str) → None

Remove all objects with the given name from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes all objects matching the given name from
their parent’s children lists.

* **Parameters:**
  **name** – the name of the objects to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by name
  * **ValueError** – if no objects with the given name are found

#### remove_by_uuid(target_uuid: str) → None

Remove the object with the given UUID from the scene graph recursively.

This method searches recursively through the entire scene graph starting
from this object and removes the object matching the given UUID from its
parent’s children list. UUIDs should be unique, so only one match is expected.

* **Parameters:**
  **target_uuid** – the UUID of the object to remove
* **Raises:**
  * **ValueError** – if attempting to remove this object itself by UUID
  * **ValueError** – if no object with the given UUID is found

#### *property* rotation

The rotation of the object in object space.

#### *property* scale

The scale of the object in object space.

#### set_default_material(material: [MeshMaterial](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial))

Sets the material of the mesh.

* **Parameters:**
  **material** ([*MeshMaterial*](fiftyone.core.threed.material_3d.md#fiftyone.core.threed.material_3d.MeshMaterial)) – the material to set as the default

#### traverse(include_self=True)

Traverse the scene graph.

#### *property* uuid

The unique ID of the object.

### *class* fiftyone.core.threed.Euler(x: float = 0.0, y: float = 0.0, z: float = 0.0, degrees: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool) = False, sequence: Literal['XYZ', 'XZY', 'YXZ', 'YZX', 'ZXY', 'ZYX'] = 'XYZ')

Bases: [`Vector3`](fiftyone.core.threed.transformation.md#fiftyone.core.threed.transformation.Vector3)

Represents intrinsic rotations about the object’s own principal axes.

**Attributes:**

| [`degrees`](#fiftyone.core.threed.Euler.degrees)   |    |
|----------------------------------------------------|----|
| [`sequence`](#fiftyone.core.threed.Euler.sequence) |    |
| [`x`](#fiftyone.core.threed.Euler.x)               |    |
| [`y`](#fiftyone.core.threed.Euler.y)               |    |
| [`z`](#fiftyone.core.threed.Euler.z)               |    |

**Methods:**

| [`to_quaternion`](#fiftyone.core.threed.Euler.to_quaternion)()   | Converts the euler angles to a quaternion.   |
|------------------------------------------------------------------|----------------------------------------------|
| [`to_arr`](#fiftyone.core.threed.Euler.to_arr)()                 | Converts the vector to a numpy array.        |

#### *property* degrees *: [bool](fiftyone.core.stages.md#fiftyone.core.stages.Exists.bool)*

#### *property* sequence *: Literal['XYZ', 'XZY', 'YXZ', 'YZX', 'ZXY', 'ZYX']*

#### to_quaternion()

Converts the euler angles to a quaternion.

#### to_arr()

Converts the vector to a numpy array.

#### *property* x *: float*

#### *property* y *: float*

#### *property* z *: float*

### *class* fiftyone.core.threed.Vector3(x: float = 0.0, y: float = 0.0, z: float = 0.0)

Bases: [`BaseValidatedDataClass`](fiftyone.core.threed.validators.md#fiftyone.core.threed.validators.BaseValidatedDataClass)

Represents a three-dimensional vector.

**Attributes:**

| [`x`](#fiftyone.core.threed.Vector3.x)   |    |
|------------------------------------------|----|
| [`y`](#fiftyone.core.threed.Vector3.y)   |    |
| [`z`](#fiftyone.core.threed.Vector3.z)   |    |

**Methods:**

| [`to_arr`](#fiftyone.core.threed.Vector3.to_arr)()   | Converts the vector to a numpy array.   |
|------------------------------------------------------|-----------------------------------------|

#### *property* x *: float*

#### *property* y *: float*

#### *property* z *: float*

#### to_arr()

Converts the vector to a numpy array.
