{"id":289,"date":"2016-04-22T22:59:05","date_gmt":"2016-04-22T22:59:05","guid":{"rendered":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/?p=289"},"modified":"2016-04-25T21:26:13","modified_gmt":"2016-04-25T21:26:13","slug":"graphics-optimization-2-character-lod","status":"publish","type":"post","link":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/2016\/04\/22\/graphics-optimization-2-character-lod\/","title":{"rendered":"Graphics &amp; Optimization #2: Character LOD"},"content":{"rendered":"<p>Since the presenter always stand at the same location in front of the audiences, it is harder for him\/her to notice those at back then those sitting at the first row. Therefore, we decided to use models with different level of detail based on the sitting positions of the audiences so that the application could spend less time rendering not-so-important stuffs.<br \/>\nThe first thing we did is to count down the number of polygons. We deleted the back side of all meshes, and for audience located far from the speaker, we delete their lower body part of meshes:<\/p>\n<div id=\"attachment_292\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-292\" class=\"size-large wp-image-292\" src=\"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/body_comp-1024x523.png\" alt=\"Left: full body mesh. Right: upper body mesh\" width=\"900\" height=\"460\" srcset=\"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/body_comp-1024x523.png 1024w, https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/body_comp-300x153.png 300w, https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/body_comp-768x392.png 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-292\" class=\"wp-caption-text\">Left: full body mesh. Right: upper body mesh<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>We also made set three levels of animation configuration for characters. The first level contains a two-level animator state machine with all animation clips, and also script-driven gazing behavior. Each behavior state (i.e. focused, bored, or chatting) contains a sub-level state machine which includes a number of more subtle animation to provide more realistic \/ natural looking.<\/p>\n<div id=\"attachment_294\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-294\" class=\"wp-image-294 size-large\" src=\"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_2_1-1024x557.png\" alt=\"sm_2_1\" width=\"900\" height=\"490\" srcset=\"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_2_1-1024x557.png 1024w, https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_2_1-300x163.png 300w, https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_2_1-768x418.png 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-294\" class=\"wp-caption-text\">The first level of the two-level state machine<\/p><\/div>\n<div id=\"attachment_293\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-293\" class=\"wp-image-293 size-large\" src=\"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_2_3-1024x557.png\" alt=\"sm_2_3\" width=\"900\" height=\"490\" srcset=\"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_2_3-1024x557.png 1024w, https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_2_3-300x163.png 300w, https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_2_3-768x418.png 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-293\" class=\"wp-caption-text\">The sub state machine under the bored state<\/p><\/div>\n<p>The second level only has a single-level state machine with gazing behavior. The third level, the most simplified one, shares the same single-level state machine, yet even remove the gazing behavior.<\/p>\n<div id=\"attachment_295\" style=\"width: 910px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-295\" class=\"wp-image-295 size-large\" src=\"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_1_1-1024x557.png\" alt=\"The single-level state machine.\" width=\"900\" height=\"490\" srcset=\"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_1_1-1024x557.png 1024w, https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_1_1-300x163.png 300w, https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/wp-content\/uploads\/2016\/04\/sm_1_1-768x418.png 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><p id=\"caption-attachment-295\" class=\"wp-caption-text\">The single-level state machine<\/p><\/div>\n<p>Later we found out that the looped animations did not actually add much sense of reality, but occupied much computational power. Therefore we removed those extra frames, and only kept the transitions between different states.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Since the presenter always stand at the same location in front of the audiences, it is harder for him\/her to notice those at back then those sitting at the first row. Therefore, we decided to use models with different level of detail based on the sitting positions of the audiences so that the application could <a href=\"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/2016\/04\/22\/graphics-optimization-2-character-lod\/\" rel=\"nofollow\"><span class=\"sr-only\">Read more about Graphics &amp; Optimization #2: Character LOD<\/span>[&hellip;]<\/a><\/p>\n","protected":false},"author":6,"featured_media":292,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"pgc_meta":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-289","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vr-rehearsal"],"_links":{"self":[{"href":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/wp-json\/wp\/v2\/posts\/289"}],"collection":[{"href":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/wp-json\/wp\/v2\/comments?post=289"}],"version-history":[{"count":2,"href":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/wp-json\/wp\/v2\/posts\/289\/revisions"}],"predecessor-version":[{"id":296,"href":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/wp-json\/wp\/v2\/posts\/289\/revisions\/296"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/wp-json\/wp\/v2\/media\/292"}],"wp:attachment":[{"href":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/wp-json\/wp\/v2\/media?parent=289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/wp-json\/wp\/v2\/categories?post=289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/projects-old.etc.cmu.edu\/vr-rehearsal\/index.php\/wp-json\/wp\/v2\/tags?post=289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}