{"id":1220,"date":"2007-07-03T08:00:47","date_gmt":"2007-07-03T13:00:47","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=1220"},"modified":"2009-08-06T14:18:25","modified_gmt":"2009-08-06T18:18:25","slug":"faces","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=1220","title":{"rendered":"Faces"},"content":{"rendered":"<p>I&#8217;m working on a research project right now that involves deforming polygonal faces and bodies in real time.  It&#8217;s strictly low-polygon stuff.  I&#8217;ve had an itch to work on this sort of thing for years.  The idea is to have a few basic controls that allows the user to radically change the appearance of the starting mesh.  If you&#8217;ve played with the face builder in Oblivion then you have the basic idea, although the models I&#8217;m working with have  a tiny fraction of the polygons to work with. (A wild guess tells me the Oblivion meshes are 5 to 10 times denser.)<\/p>\n<p>What has shocked me is how easy it turned out to be. I thought I was going to need a lot of logic to manipulate points on a face.  This is complex business, and I assumed it would need complex code.  It doesn&#8217;t.  The only real trick is identifying the right points on the mesh.  Once you know which points make up the tip of the nose, you can pull them around in different ways to make different noses.  It&#8217;s so simple it&#8217;s stupid.  In fact, the surest way to make it work badly is to make the logic too complex.  I keep trying to come up with more &#8220;intelligent&#8221; code that will do more with a face based on calculations, but the results are rarely as realistic as simply moving groups of points along an axis. For example, if you want higher or lower cheekbones, then identifying the &#8220;cheekbones&#8221; points yanking them down is much more effective than trying to analyze the shape of the cheekbones and re-create that shape using points in the desired location.   <\/p>\n<p>In the midst of this project, my wife has sent me this video:<\/p>\n<p><center><object width=\"425\" height=\"350\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/nice6NYb_WA\"><\/param><param name=\"wmode\" value=\"transparent\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/nice6NYb_WA\" type=\"application\/x-shockwave-flash\" wmode=\"transparent\" width=\"425\" height=\"350\"><\/embed><\/object><\/center><\/p>\n<p>Not realtime, but very, very interesting.  I remember an episode of Star Trek: TNG where the ship&#8217;s computer reconstructed someone&#8217;s face based on a small portion available in a photograph.  It seemed far-fetched at the time, but here we have the ability to turn flat photos into moveable 3d shapes, which is half the battle right there.  Amazing.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m working on a research project right now that involves deforming polygonal faces and bodies in real time. It&#8217;s strictly low-polygon stuff. I&#8217;ve had an itch to work on this sort of thing for years. The idea is to have a few basic controls that allows the user to radically change the appearance of the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[66],"tags":[],"class_list":["post-1220","post","type-post","status-publish","format-standard","hentry","category-programming"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/1220","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1220"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/1220\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}