Page 43 - FDMAsia Sep/Oct 2026
P. 43

DESIGN       41
         www.fdmasia.com | FDM ASIA SEP/OCT 2026




            First, a cut is triggered by a Meta Quest 3 controller button   directly, the often complex mesh data produced by cutting is
          so that the user can cut at any time.              first decomposed into a float array and a triangle-index array
            Second, a cut executes only if the button was not already   before being written out.
          pressed  on  the  previous  frame and  a  cooldown  timer  has   The information stored for each object includes the source
          elapsed;  without these  conditions, holding the button down   prefab name used on restoration, a unique identifier used
          while passing  the  tool  through  an object produced  dozens   to restore joint connections, transform position and rotation,

          of cuts within a fraction of a second, reducing it to wafer-  material  name,  mesh  collider  information,  joining  structure,
          thin slices.                                       layer information, and original collider information used by
            Third, each object produced by a cut receives the same   the part-alignment function.
          data as an uncut object, plus original shape information, so   Saving is triggered by a button on the in-VR panel;
          that cut objects behave identically to uncut ones.  the resulting file is named using the save timestamp, and
            The object joining function lets a user connect and separate   a corresponding restore button showing that timestamp is
          objects inside VR. It is implemented by controlling Unity's   added to the panel.
          FixedJoint component, which rigidly connects two physics   On restoration, the system reconstructs each object's
          objects so that they move as one. Joining and separating are   Rigidbody, interaction components, and input state in addition

          triggered by controller buttons. Several refinements were added   to the saved fields; FixedJoints are restored only after every
          after observing how users interacted with the function in VR.   object has been restored, since a joint cannot be created before
            Joining and separation are restricted to DIY objects so   both of its endpoints exist. After every object is restored, a
          that unrelated scene geometry such as the floor or UI panels   physics synchronisation pass stabilises the scene.
          is never drawn into the process.                      The central contribution of this work is a second set of
            Whether  an  object is  currently  grabbed  serves  as an   functions, added to the DIY functions above, that support
          additional condition, and a spatial query searches for candidate   turning a VR-created object into a physical one. The part-

          objects near the grabbed one, with the search terminating   alignment function detects every object within a designated
          after the first match so that only one join is made per action.   area of the VR scene and rearranges the individual parts at
            The system also records, for every object, the complete   regular intervals.
          list of FixedJoints it currently owns, which allows it to remove   Displaying the alignment proceeds in a fixed order: the
          exactly the joints belonging to a separated object and is   system detects the objects in the target area, saves each
          essential for accurately restoring every FixedJoint when a   object's relevant state, freezes its physics, and saves and
          saved scene is reloaded.
            Finally, to address an artifact whereby grabbing an assembly                                      pxhere.com
          of very differently sized objects made it swing sharply toward

          the larger one, the mass of a grabbed object and everything
          joined to it is temporarily set to a fixed value while it is held,
          with the original masses cached beforehand and restored
          on release.
            The save and load function serialises the state of every
          object—including its cutting and joining history—to JSON.
          Because Unity's native Mesh type cannot be saved to JSON
   38   39   40   41   42   43   44   45   46   47   48