Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.


Konstantin Karas
Supervisor:Prof. Gudrun Klinker
Advisor:Sandro Weber
Submission Date:15.04.2020



The goal of this bachelor thesis is to develop a control structure in Unity 3D that achieves physical movement of a humanoid remote avatar through local VR tracking information. The structure mainly utilizes Unity 3D’s built-in components to connect and rotate the body parts. Estimated masses and angular motion limits of the different parts of the human body will be used to facilitate realistic motions. In order to avoid overshooting and dampened behaviour the system has been tuned using relay tuning. An editor has been designed and implemented to configure the control structure and to allow saving different settings. A user study has been designed that analyzes the impact of physical interactions between user and environment upon embodiment, in particular concerning the sense of agency. It has been conducted in the form of an expert study.


A local control structure has been created that enables the movement of a humanoid body by the means of physics. The structure replaces the former server component of the system. Since information no longer needs to be sent to the server, latency issues are eliminated. The following is a list of features included in the control structure:

  • Choice between single and multiple joint template (single: 1 ConfigurableJoint for all axes; multiple: 3 ConfigurableJoints each controlling its own axis independently, finer control)
  • Fully configured joints / rigidbody / collider for both templates
  • Choice between simple colliders (box, capsule, sphere) and mesh colliders (custom made for the model used in the thesis)
  • Automatic setup for any humanoid model (colliders still need to be adjusted)
  • Automatic conversion from single joint to 3 ConfigurableJoints that preserve the former behaviour (e.g. movement range) as the former single joint
  • Adapted former automatic and manual tuning system and tuned the joints' values
  • Editor window:
    • Quick changes to the joints' parameters in both templates at the same time
    • Filter through customisable groups of body parts
    • Assign total body weight of the model, each body part's weight is calculated based on anatomy
    • Save & Load joint settings as JSON files, load tuning results
  • User study:
    • Complete test setup, including environment and measurement scripts
    • Complete questionnaires (demographic & embodiment) and introduction text
    • Conducted as expert study: sense of agency rated positively, made changes to the test setup accordingly

View file
View file


This work has introduced a control structure for Unity 2018.2.21f that has replaced the former Gazebo-based server physics simulation. The behaviour of the ConfigurableJoints provided by Unity has been analysed and used to implement a control structure that enables a humanoid avatar to be controlled through the physics engine of Unity based on the formerly implemented inverse kinematics system. The process is automatized and customisable. The introduction of the templates further increased the usability of the system, making it easily applicable to new models. The editor has been reconfigured multiple times and serves as an overview of the control structures parameters. Finally, the tuning system has been successfully adapted to work together with the new control structure. It is recommended to predominately use the multiple joints template for the remote avatar as the tuning has been performed on that template. The single joint template’s tuned values on the other hand are a compromise that while working might lead to different behaviour in some joints. The designed user study and the sense of agency created through the implemented control structure have been rated positively by the expert study. The user study can be conducted in the future based on the material that has been prepared in this thesis.

[ PDF (optional) ]

View file

[ Slides Kickoff/Final (optional)] 

View file