Mercurial > cortex
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