Position: Virtual Reality Development Engineer
Company: Assystem — Venelles office
(Bouches-du-Rhône)
Duration: 6 months (March – August 2025)
ISIMA track: Interactive Systems for Embedded and
Virtual Environments
Main technologies: Unity, C#, Python, Pixyz, HTC VIVE,
CATIA
Application domain: Nuclear industry — ITER project /
CEA Cadarache
Assystem is an international engineering group specialising in the management of technology-intensive projects (nuclear energy, critical infrastructure, transport, healthcare). The Venelles office contributes in particular to the ITER (International Thermonuclear Experimental Reactor) project, an experimental nuclear fusion reactor located in Cadarache, and supports CEA Cadarache on several nuclear safety projects.
Faced with complex, hazardous or physically inaccessible industrial environments, Assystem made the strategic decision to integrate Virtual Reality (VR) into its engineering processes. VR enables the simulation of human interventions (assembly, maintenance, dismantling) in order to:
assess the ergonomic feasibility of technical tasks in confined spaces;
quantify the radiological dose received by operators during each scenario;
reduce design errors before any physical manufacturing.
The central objective of the internship was to make these simulations accessible to non-developer engineers, by reducing preparation time and industrialising Unity workflows.
The two existing projects (ergonomics and dosimetry) were maintained separately, causing asset duplication and costly context switching. I merged these projects into a single generic template activatable by modules, reducing disk usage and simplifying version management.
Integration of the student project (Centrale Lyon): an object manipulation module (instantiation, translation/rotation, labelling) developed by students under an emulator was adapted to Assystem’s HTC VIVE controllers, correcting UI/UX incompatibilities.
Instantiable tools: development of a Unity editor tool allowing a 3D tool (FBX format) to be added to a simulation in a few clicks — automatic assignment of collisions, gravity and VR grabbing, generation of an identifying icon — with no Unity expertise required.
CamViewTool: spectator camera control interface from the Unity inspector (orbital camera, free keyboard mode, fixed cameras, automatic selection by counting visible operator pixels). Integrates REBA analysis activation.
PrefabCleaner: automatic cleaning tool for Prefabs imported via Pixyz — removal of missing scripts, conversion of materials to URP/Lit, application of a default material — to eliminate blocking errors and warnings without Unity expertise.
Volume Filter Tool: automatic removal of small 3D elements (screws, bolts, etc.) below a volume threshold defined by reference, significantly lightening scenes.
REBA (Rapid Entire Body Assessment) is an ergonomic analysis method that evaluates the musculoskeletal risk of a posture by considering the entire body (trunk, neck, legs, arms, forearms, wrists, loads). To my knowledge, no commercial plugin offers a turnkey REBA implementation in Unity.
I developed a native Unity REBA calculator:
Referencing of body segments via the VR mannequin inspector;
Measurement of joint angles at each frame by vector computation between parent/child segments;
Calibration function on neutral posture to correct initial morphology;
Application of REBA scoring rules per segment (scores +1 for inclinations/rotations);
Bilateral evaluation (left and right) retaining the most conservative score;
Checkboxes to input lifted load and grip quality;
Real-time visualisation of the coloured skeleton and global score in the supervision interface.
File reformatting: development of a Python script automatically converting two formats of radiological maps (data provided by other teams) to the Unity-compatible format. Addition of point cloud decimation to limit rendering latency.
Zone placement tool: new Unity component allowing the radiation point cloud to be materialised, moved and resized interactively in the scene, filling the complete absence of any repositioning tool in the existing system.
CATIA models (3DXML format) are not directly compatible with Unity; Pixyz is used as a conversion and optimisation layer. I defined a pre-configured Unity project with Pixyz Rule Engines adapted to two use cases:
Manipulable objects: high geometric precision + precise colliders;
Passive elements (structures, pipes): heavy simplification for performance.
The LOD (Levels of Detail) system was evaluated and then discarded, as its per-model configuration was incompatible with the goal of rapid, standardised preparation.