Mirror Demo
Mirror Demo
Located in ExampleScripts - Mirror_Demo
This demo allows you to view your reflection in a virtual mirror in VR. With features such as avatar swapping, facial expression tracking, body tracking, and customizable environments. Facial Expression data can also be saved to a file and analyzed afterwards. This demo is located in SightLab under "ExampleScripts- Mirror_Demo". See below for the minimum code for just adding a mirror.
Configure Settings
Edit the MirrorConfig.py file to adjust the following parameters:
swapAvatarKey: Key to advance media (default is 'c').
UseExternalPath: Set to true to use a custom path to avatars.
AvatarFolderPath: Path to your avatars.
environment: Path to the environment file.
starting_position: Starting point coordinates.
Run the Demo
Follow the instructions below to run the demo with your customized settings
Run virtual_mirror.py
Choose hardware
Default is to press the 'c' key to cycle between avatars
Use sessionReplay if wanting to replay the scene (will only show the first avatar selected)
Can see facial expressions and body tracking if using Meta Quest Pro
Facial expressions data will be saved in the utils/data folder as date_time+expressions.csv
Can run "facial_expressions_over_time" to see a chart of the expressions over time using matplotlib and PANDAs
There is also a version called "virtual_mirror_w_slider" that lets you see a panel that shows the data from all of the face tracking parameters.
Code to add mirror to your own scene (would need to copy the mirror.py file from "utils" if not running with SightLab). If wanting to use own environment, you can use Inspector (Tools- Inspector) to add a 2D plane (any image will work) to your scene, then place it where you want and name it 'mirror' (right click and rename).
Note if you're not seeing the mirror, you may need to adjust the rotation by adjusting the "euler" values
#Import the mirror modulefrom utils.mirror import addReflection
#Need to manually set the avatar head to see in the mirroravatarPath = 'utils/resources/avatar/head/Male1.osgb'
head = vizfx.addAvatar(avatarPath)headNode = vizconnect.getAvatar().getAttachmentPoint('head').getRaw()head.setParent(headNode)
sightlab.sceneConfigDict["avatarHead"] = avatarPath
bb_mirror = env.getBoundingBox(node='mirror')
# Check if the bounding box is valid (i.e., the 'mirror' node exists)if bb_mirror.valid(): scale = [bb_mirror.size[0], bb_mirror.size[1], 1.0] pos = bb_mirror.center pos[2] -= (bb_mirror.size[2] * 0.5) + 0.01else: bb = viz.addTexQuad() scale = [1.0, 1.0, 1.0] # Scale factors for x, y, and z pos = [0, 2, 1] # Position coordinates for x, y, and z # Create reflection for left eyeleftEyeQuad = viz.addTexQuad(scale=scale, pos=pos, euler=(180,0,0))leftEyeQuad.disable(viz.LIGHTING)addReflection(leftEyeQuad,eye=viz.LEFT_EYE) # Create reflection for right eyerightEyeQuad = viz.addTexQuad(scale=scale, pos=pos, euler=(180,0,0))rightEyeQuad.disable(viz.LIGHTING)addReflection(rightEyeQuad,eye=viz.RIGHT_EYE)