#1
|
|||
|
|||
Randomly and Continuously Change Avatar's Face Texture
I would like to make a Sequence that Waits 2-6sec., Randomly changes the texture on the avatar's face, and Repeats.
Based on the post http://www.worldviz.com/forum/showthread.php?t=776 the texture needs to be set to repeating mode. Otherwise, the face is blacked out. See attached files and code. Thanks, Karla Code:
#August 19th, 2008 import viz import vizinfo #For info box import viztask #For wait time import random #For random.choice(), etc. viz.go() #****ADD CHARACTER HERE**** #Character M-0327 mv_x = 0; mv_y = 1.78; mv_z = -1.0; viz.MainView.setPosition(mv_x,mv_y,mv_z) mv_euler_x = 180; mv_euler_y = 0; mv_euler_z = 0; viz.MainView.setEuler(mv_euler_x,mv_euler_y,mv_euler_z) character1 = viz.add('male.cfg'); character1.translate(0,0,-1.4572); character1.rotate(0,1,0,0); character1.state(1) #Neutral state of avatar face1 = character1.face('M-0327.vzf') #add a face to the avatar eyes_center = viz.add('M-0327Bio_UV_Head.jpg'); face1.texture(eyes_center); eyes_center.wrap(viz.WRAP_S,viz.REPEAT); eyes_center.wrap(viz.WRAP_T,viz.REPEAT) #****ADD CHARACTER HERE**** view1 = viz.get(viz.MAIN_VIEWPOINT) #Make the avatars' eyes Blink at slightly different rates***************** #MUST ADD LITERATURE REFERENCES FOR DURATION BETWEEN BLINKS, DURATION OF CLOSE, & DURATION OF OPEN close_eye = vizact.morph("blink",1,0.1) #Closing Blink morph, take 0.1sec. to close open_eye = vizact.morph("blink",0,0.2) #Opening Blink morph, take 0.2sec. to open wait_blink = vizact.waittime(vizact.randfloat(4,10)) #Wait 4-10sec. between blinks, less duration for easier tasks (talking), more duration (up to 15sec.) for more difficult tasks blinkAction = vizact.sequence(wait_blink, close_eye, open_eye, viz.FOREVER) #Blink indefinitely #Add blink action to face; different avatars will have a slightly different blink rate face1.addAction(blinkAction, pool=12) #Use 4 positions (Left, Right, Center, and Up) to create different Eye Contact #l_eyes = viz.add('M-0327_eyes_Left.jpg') #modified face, 'eyes' to Left #r_eyes = viz.add('M-0327_eyes_Right.jpg') #modified face, 'eyes' to Right #c_eyes = viz.add('M-0327_eyes_Center.jpg') #modified face, 'eyes' Center (default) #u_eyes = viz.add('M-0327_eyes_Up.jpg') #modified face, 'eyes' Up l_eyes = viz.addTexture('M-0327_eyes_Left.jpg') #modified face, 'eyes' to Left r_eyes = viz.addTexture('M-0327_eyes_Right.jpg') #modified face, 'eyes' to Right c_eyes = viz.addTexture('M-0327_eyes_Center.jpg') #modified face, 'eyes' Center (default) u_eyes = viz.addTexture('M-0327_eyes_Up.jpg') #modified face, 'eyes' Up #TRYING TO DEFINE A SEQUENCE THAT RANDOMLY CHANGES THE TEXTURE ON THE AVATAR'S FACE #Intention: Make a Sequence that Waits 2-6sec., Randomly changes gaze, Repeats #Applies a texture for first assignment of "position" gaze_duration = vizact.waittime(vizact.randint(2,6)) #Mean of gaze duration is 4sec., Wait 2-6sec. between changes in gaze position = random.choice([l_eyes, r_eyes, c_eyes, u_eyes]) GazeAction = vizact.sequence(gaze_duration, face1.texture(position), position.wrap(viz.WRAP_S,viz.REPEAT), position.wrap(viz.WRAP_T,viz.REPEAT), viz.FOREVER) #Change gaze indefinitely #Under "Dynamic Parameters" in Vizard Help, found the following suggestions #Applies a texture for first assignment of "position" #gaze_duration = vizact.waittime(vizact.randint(2,6)) #Mean of gaze duration is 4sec., Wait 2-6sec. between changes in gaze #position = random.choice([l_eyes, r_eyes, c_eyes, u_eyes]) #ApplyTexture = vizact.texture_node(position) #GazeAction = vizact.sequence(gaze_duration, ApplyTexture, position.wrap(viz.WRAP_S,viz.REPEAT), position.wrap(viz.WRAP_T,viz.REPEAT), viz.FOREVER) #Change gaze indefinitely #Applies a black texture, need REPEAT in GazeAction #gaze_duration = vizact.waittime(vizact.randint(2,6)) #Mean of gaze duration is 4sec., Wait 2-6sec. between changes in gaze #textures = [l_eyes, r_eyes, c_eyes, u_eyes] #ApplyTexture = vizact.texture_node(vizact.choice(textures,vizact.RANDOM)) #GazeAction = vizact.sequence(gaze_duration, ApplyTexture, viz.FOREVER) #Change gaze indefinitely #Also tried following code in different combinations with no success #position = random.choice([l_eyes, r_eyes, c_eyes, u_eyes]) #print position #position = vizact.choice([l_eyes, r_eyes, c_eyes, u_eyes],vizact.RANDOM) #position = vizact.choice(["l_eyes", "r_eyes", "c_eyes", "u_eyes"],vizact.RANDOM) #viz.getOption(position, default="u_eyes") #GazeAction = vizact.sequence(gaze_duration, position = random.choice([l_eyes, r_eyes, c_eyes, u_eyes]), face1.texture(position), position.wrap(viz.WRAP_S,viz.REPEAT), position.wrap(viz.WRAP_T,viz.REPEAT), viz.FOREVER) #Change gaze indefinitely #GazeAction = vizact.sequence(gaze_duration, face1.texture(position), viz.FOREVER) #Change gaze indefinitely #textures = ["M-0327_eyes_Left.jpg", "M-0327_eyes_Right.jpg", "M-0327_eyes_Center.jpg", "M-0327_eyes_Up.jpg"] #textures = [l_eyes, r_eyes, c_eyes, u_eyes] #position = vizact.choice(textures,vizact.RANDOM) #ApplyTexture = vizact.texture_node(vizact.choice(textures,vizact.RANDOM)) #gaze_duration = vizact.waittime(vizact.randint(2,6)) #Mean of gaze duration is 4sec., Wait 2-6sec. between changes in gaze #GazeAction = vizact.sequence(gaze_duration, ApplyTexture, viz.FOREVER) #Change gaze indefinitely #GazeAction = vizact.sequence(gaze_duration, ApplyTexture, position.wrap(viz.WRAP_S,viz.REPEAT), position.wrap(viz.WRAP_T,viz.REPEAT), viz.FOREVER) #Change gaze indefinitely #position = random.choice([l_eyes, r_eyes, c_eyes, u_eyes]) #textures = [l_eyes, r_eyes, c_eyes, u_eyes] #position = vizact.choice(textures,vizact.RANDOM) #position = vizact.choice([l_eyes, r_eyes, c_eyes, u_eyes],vizact.RANDOM) #ApplyTexture = vizact.texture_node(position) #GazeAction = vizact.sequence(gaze_duration, ApplyTexture, viz.FOREVER) #Change gaze indefinitely #GazeAction = vizact.sequence(gaze_duration, ApplyTexture, position.wrap(viz.WRAP_S,viz.REPEAT), position.wrap(viz.WRAP_T,viz.REPEAT), viz.FOREVER) #Change gaze indefinitely #TRYING TO DEFINE A SEQUENCE THAT RANDOMLY CHANGES THE TEXTURE ON THE AVATAR'S FACE #Add Avatar speech Actions with .wav files******************************** Story = vizact.speak("00Demo1_My_grandpa's_snoring_Story.wav", scale=0.01, sync=True) length_story_sec = (71) #Number of seconds in Story .wav file (66) plus 5 seconds #vizact.speak(filename, scale=1.0, morph='mouth_open', threshold) def changeEyesDuringStory(): #Automatically loop through direction of gazes #Set variables count = 0 pool_number = 3 while count <3: face1.addAction(blinkAction, pool=12) face1.addAction(GazeAction, pool=10) yield viztask.waitTime(2) #Wait 2 seconds, v3.0+ character1.addAction(Story, pool=pool_number); yield viztask.waitTime(length_story_sec) #Wait seconds; based individually on length of story #***Story Question*** QuestionBox = vizinfo.add("") #Add the vizinfo object QuestionBox.translate(1.0,.90) #Set position on screen, down lower for longer title QuestionBox.title("Who's snoring \nkept me awake?") invisibleRadio = QuestionBox.add(viz.RADIO, 0, "") #Create an invisible Radio button to be the default selected one, so that one of the visible ones must be chosen by the user invisibleRadio.visible(0) #invisible aRadio = QuestionBox.add(viz.RADIO, 0, "A. My nephew's snoring") bRadio = QuestionBox.add(viz.RADIO, 0, "B. My grandpa's snoring") #want a button or box that will be empty at first but can have only one selected when the OK button is pressed cRadio = QuestionBox.add(viz.RADIO, 0, "C. My father's snoring") #not using checkboxes because a user can check more than one OKbutton = QuestionBox.add(viz.BUTTON, "OK") #Create a button count +=1 #Schedule task to start changing eye gaze around while telling story viztask.schedule(changeEyesDuringStory()) |
Thread Tools | |
Display Modes | Rate This Thread |
|
|