diff thesis/cortex.org @ 464:8bf4bb02ed05

sleeeeeep.
author Robert McIntyre <rlm@mit.edu>
date Fri, 28 Mar 2014 00:42:42 -0400
parents 6d55ac73bc6f
children e4104ce9105c
line wrap: on
line diff
     1.1 --- a/thesis/cortex.org	Thu Mar 27 20:46:36 2014 -0400
     1.2 +++ b/thesis/cortex.org	Fri Mar 28 00:42:42 2014 -0400
     1.3 @@ -485,14 +485,70 @@
     1.4          pipeline. The engine was not built to serve any particular
     1.5          game but is instead meant to be used for any 3D game. 
     1.6  
     1.7 -
     1.8     I chose jMonkeyEngine3 because it because it had the most features
     1.9 -   out of all the open projects I looked at, and because I could then
    1.10 +   out of all the free projects I looked at, and because I could then
    1.11     write my code in clojure, an implementation of =LISP= that runs on
    1.12     the JVM.
    1.13  
    1.14  ** Bodies are composed of segments connected by joints
    1.15  
    1.16 +   For the simple worm-like creatures I will use later on in this
    1.17 +   thesis, I could define a simple API in =CORTEX= that would allow
    1.18 +   one to create boxes, spheres, etc., and leave that API as the sole
    1.19 +   way to create creatures. However, for =CORTEX= to truly be useful
    1.20 +   for other projects, it needs to have a way to construct complicated
    1.21 +   creatures. If possible, it would be nice to leverage work that has
    1.22 +   already been done by the community of 3D modelers, or at least
    1.23 +   enable people who are talented at moedling but not programming to
    1.24 +   design =CORTEX= creatures. 
    1.25 +
    1.26 +   Therefore, I use Blender, a free 3D modeling program, as the main
    1.27 +   way to create creatures in =CORTEX=. However, the creatures modeled
    1.28 +   in Blender must also be simple to simulate in jMonkeyEngine3's game
    1.29 +   engine, and must also be easy to rig with =CORTEX='s senses. 
    1.30 +   
    1.31 +   While trying to find a good compromise for body-design, one option
    1.32 +   I ultimately rejected is to use blender's [[http://wiki.blender.org/index.php/Doc:2.6/Manual/Rigging/Armatures][armature]] system. The idea
    1.33 +   would have been to define a mesh which describes the creature's
    1.34 +   entire body. To this you add an skeleton which deforms this
    1.35 +   mesh. This technique is used extensively to model humans and create
    1.36 +   realistic animations. It is hard to use for my purposes because it
    1.37 +   is difficult to update the creature's Physics Collision Mesh in
    1.38 +   tandem with its Geometric Mesh under the influence of the
    1.39 +   armature. Without this the creature will not be able to grab things
    1.40 +   in its environment, and it won't be able to tell where its physical
    1.41 +   body is by using its eyes. Also, armatures do not specify any
    1.42 +   rotational limits for a joint, making it hard to model elbows,
    1.43 +   shoulders, etc.
    1.44 +
    1.45 +   Instead of using the human-like ``deformable bag of bones''
    1.46 +   approach, I decided to base my body plans on multiple solid objects
    1.47 +   that are connected by joints, inspired by the robot =EVE= from the
    1.48 +   movie WALL-E.
    1.49 +   
    1.50 +   #+caption: =EVE= from the movie WALL-E.  This body plan turns 
    1.51 +   #+caption: out to be much better suited to my purposes than a more 
    1.52 +   #+caption: human-like one.
    1.53 +   [[./images/Eve.jpg]]
    1.54 +
    1.55 +   =EVE='s body is composed of several rigid components that are held
    1.56 +   together by invisible joint constraints. This is what I mean by
    1.57 +   ``eve-like''. The main reason that I use eve-style bodies is for
    1.58 +   efficiency, and so that there will be correspondence between the
    1.59 +   AI's vision and the physical presence of its body. Each individual
    1.60 +   section is simulated by a separate rigid body that corresponds
    1.61 +   exactly with its visual representation and does not change.
    1.62 +   Sections are connected by invisible joints that are well supported
    1.63 +   in jMonkeyEngine3. Bullet, the physics backend for jMonkeyEngine3,
    1.64 +   can efficiently simulate hundreds of rigid bodies connected by
    1.65 +   joints. Sections do not have to stay as one piece forever; they can
    1.66 +   be dynamically replaced with multiple sections to simulate
    1.67 +   splitting in two. This could be used to simulate retractable claws
    1.68 +   or =EVE='s hands, which are able to coalesce into one object in the
    1.69 +   movie.
    1.70 +   
    1.71 +   
    1.72 +
    1.73  ** Eyes reuse standard video game components
    1.74  
    1.75  ** Hearing is hard; =CORTEX= does it right