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

