VRET Vizard
Contents
Getting Started
Vizard has a very nice tutorial and help file that is also available online on the Vizard website. It explains the basics of Vizard and also if needed the basics of Python the language used to control Vizard.
Character pack
CFG files are actually plain text files that gather up the names and locations of all the various parts of the avatars: CSF (skeleton), CAF (animations), CMF (meshes), CRF (materials). They can be opened in any plain text editor, such as notepad. I am not aware of any plugins that allow cal3d files to be imported into modeling programs such as 3ds max. (source)
Cal3D
The file format for Vizard characters (.CFG).
Vizard uses a somewhat older version of cal3d that has been slightly modified, so it is probably incompatible with the versions available on the cal3d website. (source) So get the plugin from the Vizard site
Animation files and 3DS Max
A small and quick tutorial (originally for the course IUXE) on how to import animation files into 3DS Max and export the model and its animations for use with Vizard. Click (u/p: vret_oud/vret_oud)
The end result is the following, basic looking, avatar: Click (u/p: vret_oud/vret_oud)
Resources
Vizard comes with a few build in object like avatars and a duck but you most likely want to add your own objects too your program. To avoid having to use absolute paths you can add your directory to the path list of Vizard so that you can reffere to the object directly.
- viz.res.addPath(<'directory') example: viz.res.addPath('G:\Vizard projects')
you can also reffere to the directory where the main (running) .py file is located by adding the line
- viz.res.addPath('\\\\')
You can also reffere to objects in subdirectory's of the path directory's you added. example:
- viz.add('Avatars\Male\casual09_m_highpoly.cfg')
HMD
With just a few lines of code Vizard can easily work with an HMD. All you need to add/replace from your code to get a image on the HMD are:
- viz.displaymode(800,600,32,60) <viz.displaymode(width-screen,heigh-screen,color depth,refresh rate)>
- viz.go(viz.QUAD_BUFFER |viz.FULLSCREEN) <replace the viz.go() with this>
Trackers
flockofbirds
Adding flock of birds sensor
ascension = viz.add('ascension.dle')
bird = ascension.addFlockOfBirds(birds=1, port=0, hemisphere=ascension.HEMI_FRONT )[0]
link = viz.link(bird, viz.MainView) # Link the tracker to the main view
Resetting view to right position
def resetLink():
- link.reset(viz.RESET_OPERATORS)
- euler_offset = [123.09078979492187, 5.588435173034668, -95.282585144042969] # enter your offset here
- inv_quat = viz.Matrix.euler(euler_offset).inverse().getQuat()
- link.preQuat(inv_quat,target=viz.LINK_ORI_OP)
- hmd_yaw = link.getEuler()[0]
- link.postEuler([-hmd_yaw,0,0])
vizact.onkeydown('r',resetLink)
emagin
To get Vizard to accept input from the eMagin tracker (integrated in the HMD) you need to add the tracker as a sensor in Vizard and then link the sensor to the mainView-point
- sensor = viztracker.add('emagin.dls')
- viz.link(sensor,viz.MainView)
Don't forget to disable the eMagin mouse drivers if these are enabled in the "Control Panel>System>Hardware>Device Manager" list
Also make sure that the utility program of eMagin isn't running because only one program is allowed to access the tracker
Support
We got a year payed Vizard support that can be used when you run into problems. There is a public Vizard forum where you can post your problems but if you ain't getting the required answer there a ticket can be opened on the closed Vizard support section. The ticket has to be opened by Wouter Pasman but after that can be replied by and seen by anyone having the correct url.
Vizard comes standard with a rather annoying mouseclick navigation. The following class extends the FlyNavigate.py class:
[code] import viz import vizcam
class WorldNavigator(vizcam.FlyNavigate):
MOUSE_LEFT_DOWN = False def __init__(self): # Default movement keys vizcam.FlyNavigate.__init__(self,'w','s','a','d') # Only update the mouse movement if the left mouse has been clicked def _camMouseMove(self,e): if self.MOUSE_LEFT_DOWN == True: vizcam.FlyNavigate._camMouseMove(self,e) def _camMouseDown(self,e): if e.button == viz.MOUSEBUTTON_LEFT: self.MOUSE_LEFT_DOWN = True def _camMouseUp(self,e): self.MOUSE_LEFT_DOWN = False
# Overidden to add a bit of logic def _camUpdate(self,e): vizcam.FlyNavigate._camUpdate(self,e) mousePos = viz.mouse.getPosition(viz.WINDOW_PIXELS, True) windowSize = viz.window.getSize() # If the mouse cursor leaves the client window then # don't bother updating the _camMouseMove parent function if mousePos[0] <= 0: self.MOUSE_LEFT_DOWN = False elif mousePos[0] >= windowSize[0]: self.MOUSE_LEFT_DOWN = False elif mousePos[1] <= 0: self.MOUSE_LEFT_DOWN = False elif mousePos[1] >= windowSize[1]: self.MOUSE_LEFT_DOWN = False
Then, to apply this new navigation, add the following line in the program:
viz.cam.setHandler(WorldNavigator())
[/code]