class_docstr: Attributes:
    position (vec3d): the (x, y, z) position of the object.
    quaternion (vec4d): a (W, X, Y, Z) quaternion for describing the rotation.
    up (str): which direction to consider as "up" (required for look_at).
    front (str): which direction to consider as "front" (required for look_at).
code: def __init__(
      self,
      position=(0.0, 0.0, 0.0),
      quaternion=None,
      up="Y",
      front="-Z",
      look_at=None,
      euler=None,
      **kwargs,
  ):
      if look_at is not None:
          assert quaternion is None and euler is None
          quaternion = look_at_quat(position, look_at, up, front)
      elif euler is not None:
          assert look_at is None and quaternion is None
          quaternion = _euler_to_quat(euler)
      elif quaternion is None:
          quaternion = (1.0, 0.0, 0.0, 0.0)
  
      super().__init__(
          position=position,
          quaternion=quaternion,
          up=up,
          front=front,
          **kwargs,
      )
  
imports: import itertools
  import numpy
  import pyquaternion
  import traitlets
  from typing import Optional, Union, Tuple
  from kubric.core import traits
  from kubric.core import assets
  from kubric.core import materials
  from kubric.kubric_typing import ArrayLike
label_desc: Use image node_id 1 to create a new Object3D object from inherited base classes: assets with example: obj = Object3D(position, quaternion, up, front, look_at, euler)