<?xml version="1.0"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Crowds Control</title>
    <link>http://www.crowdscontrol.net</link>
    <atom:link href="http://feeds.feedburner.com/crowdscontrol" rel="self" type="application/rss+xml" />
    <description>stuff from coyled</description>
    <language>en-us</language>
    <pubDate>Tue, 08 Oct 2013 05:54:57 -0700</pubDate>
    <lastBuildDate>Tue, 08 Oct 2013 05:54:57 -0700</lastBuildDate>

    
    <item>
      <title>Contributions to Recast/Detour</title>
      <link>http://www.crowdscontrol.net/blog/2013-10-08-contributions-to-recastdetour</link>
      <pubDate>Tue, 08 Oct 2013 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/blog/2013-10-08-contributions-to-recastdetour</guid>
      <description>
        &lt;p&gt;In a previous &lt;a href=&#39;/blog/2013-03-21-recast-detour-in-masa-life&#39;&gt;post&lt;/a&gt; I&amp;#8217;ve announced that, as a part of our work on &lt;a href=&#39;http://www.masalife.net&#39;&gt;MASA LIFE&lt;/a&gt;, the team will work with Recast/Detour and that we would release our updates to the community.&lt;/p&gt;

&lt;p&gt;This have been effective since the beginning of the summer and we&amp;#8217;re just releasing today a new version which is the first to be used in a released version of MASA LIFE, the upcoming (if all goes well, this week) v1.2. Our work is available on github at &lt;a href=&#39;https://github.com/masagroup/recastdetour&#39;&gt;https://github.com/masagroup/recastdetour&lt;/a&gt;.&lt;/p&gt;

&lt;h1 id=&#39;introduced_features&#39;&gt;Introduced features&lt;/h1&gt;

&lt;h2 id=&#39;modular_crowd_framework&#39;&gt;Modular &lt;em&gt;crowd&lt;/em&gt; framework&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;DetourCrowd&lt;/code&gt; was a rather monolithical, we redesigned a large part of its basic framework with two goals in mind: modularity and usage safety. In the process we introduced several new concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Navigation behaviors&lt;/strong&gt;, self-contained navigation algorithms defining how agents take movement decisions, eg. how they update their velocity (cf. the &lt;a href=&#39;http://masagroup.github.io/recastdetour/group__behavior.html&#39;&gt;user documentation&lt;/a&gt;), such behavior is assigned to each agent and used to update it, the existing path following and collision avoidance algorithms were encapsulated in navigation behaviors;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Indirect agents access&lt;/strong&gt;, forbidding direct read or write to &lt;code&gt;dtAgent&lt;/code&gt;, introducing explicit fetch/push queries based on the agent&amp;#8217;s &lt;code&gt;id&lt;/code&gt;, as a result it is easier to make checks (are we out of the navmesh?) and the users always safely manipulate data (cf. the &lt;a href=&#39;http://masagroup.github.io/recastdetour/group__crowd.html&#39;&gt;user documentation&lt;/a&gt;);&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;Modular &lt;strong&gt;Update loop&lt;/strong&gt;, allowing more complex update strategy by supporting the update of part of the crowd in different steps, environment, velocity and position (cf. the &lt;a href=&#39;http://masagroup.github.io/recastdetour/group__crowd.html&#39;&gt;user documentation&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#39;navigation_tests&#39;&gt;Navigation tests&lt;/h2&gt;

&lt;p&gt;We introduced unit tests on &amp;#8216;DetourCrowd&amp;#8217; in order to test the new features we introduced. We chose to use &lt;a href=&#39;https://github.com/philsquared/Catch&#39;&gt;Catch&lt;/a&gt; mainly because it is dependency free and with an active community.&lt;/p&gt;

&lt;p&gt;Additionally we created a simple framework to create &lt;em&gt;functional&lt;/em&gt; visual tests for navigation based on JSON configuration files.&lt;/p&gt;

&lt;h1 id=&#39;known_issues&#39;&gt;Known issues&lt;/h1&gt;

&lt;p&gt;This fork is still very young and several issues are remaining. The most important being:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bad usage of the pathfinding queue in the path following behavior;&lt;/li&gt;

&lt;li&gt;&lt;em&gt;Dumb&lt;/em&gt; neighbors retrieving, we had to remove the previous proximity grid that couldn&amp;#8217;t work properly with multi-level scenes;&lt;/li&gt;

&lt;li&gt;Removal of the navigation test features from the &lt;em&gt;RecastDemo&lt;/em&gt; application, we didn&amp;#8217;t took the time to port them to the new framework.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once we are fully happy with our state, we&amp;#8217;ll send a pull request to Mikko and make these updates part of the &amp;#8220;main&amp;#8221; repository. In the meantime contributions and issue reporting are welcome!&lt;/p&gt;

&lt;p&gt;We have nice features in the MASA LIFE pipe that will surely lead to new contributions. I&amp;#8217;ll keep the community in touch on this blog or on the &lt;a href=&#39;https://groups.google.com/forum/?fromgroups#!forum/recastnavigation&#39;&gt;Recast Google Group&lt;/a&gt;.&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>A sample iOS application using Ogre 3D</title>
      <link>http://www.crowdscontrol.net/blog/2013-08-13-a-sample-ios-application-using-ogre-3d</link>
      <pubDate>Tue, 13 Aug 2013 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/blog/2013-08-13-a-sample-ios-application-using-ogre-3d</guid>
      <description>
        &lt;p&gt;I&amp;#8217;m currently working on an iOS demo of &lt;a href=&#39;http://www.masalife.net&#39;&gt;MASA LIFE&lt;/a&gt;, the AI middleware I&amp;#8217;m developping; in fact I&amp;#8217;m porting the demo we did for this year&amp;#8217;s GDC to iOS. It is called &lt;em&gt;PaperArena&lt;/em&gt;, and it is a small capture the flag tank game showcasing the kind of AI you can develop with LIFE. This demo was originally developped for Windows using &lt;a href=&#39;http://www.ogre3d.org/&#39;&gt;Ogre 3D&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;Paperarena&#39; src=&#39;/images/posts/2013/paperarena.png&#39; /&gt;&lt;/p&gt;

&lt;p&gt;Long story short, while porting LIFE runtime and the core of the PaperArena code to iOS was quite easy and straightforward, I ran into some problem trying to make Ogre use a &lt;code&gt;UIView&lt;/code&gt; that I gave him.&lt;/p&gt;

&lt;p&gt;No documentation is available but I found two interesting forum threads, &lt;a href=&#39;http://www.ogre3d.org/forums/viewtopic.php?f=2&amp;amp;t=71508&amp;amp;hilit=externalviewhandle&amp;amp;sid=0c0d92ddd87f3f25af2ad8181a530e4f&#39;&gt;here&lt;/a&gt; and &lt;a href=&#39;http://www.ogre3d.org/forums/viewtopic.php?f=21&amp;amp;t=71904&amp;amp;hilit=externalviewhandle&amp;amp;sid=b148dd48905674e5895284aa903a0c1b&#39;&gt;there&lt;/a&gt;. While providing good base information, none gave a final solution.&lt;/p&gt;

&lt;p&gt;After a few hours of work I finally got something running and decided to share it, expecting it might help others and hoping to get some feedback, being neither an Ogre3D nor an iOS expert.&lt;/p&gt;

&lt;p&gt;The full repository can be browsed, pulled and forked on &lt;a href=&#39;https://github.com/cloderic/ios-ogre&#39;&gt;github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;The sample&#39; src=&#39;/images/posts/2013/ios-ogre.jpg&#39; /&gt;&lt;/p&gt;

&lt;h2 id=&#39;interesting_stuffs&#39;&gt;Interesting stuffs&lt;/h2&gt;

&lt;h3 id=&#39;the_objectivec_side&#39;&gt;The Objective-C side&lt;/h3&gt;

&lt;p&gt;The &lt;em&gt;app delegate&lt;/em&gt; handles the lifetime of the application, it creates the window, the view controller (from an interface builder file) and start the &lt;em&gt;&amp;#8220;simulation&amp;#8221;&lt;/em&gt;. The windows is passed to the view controller because it is needed to properly initialize the Ogre renderer.&lt;/p&gt;
&lt;div class=&#39;highlight&#39;&gt;&lt;pre&gt;&lt;code class=&#39;objective-c&#39;&gt;&lt;span class=&#39;lineno&#39;&gt; 1&lt;/span&gt; &lt;span class=&#39;k&#39;&gt;-&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;kt&#39;&gt;void&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;applicationDidFinishLaunching:&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;UIApplication&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;*&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;nv&#39;&gt;application&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 2&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;{&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 3&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;mWindow&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;[[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;UIWindow&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;alloc&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;initWithFrame&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;[[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;UIScreen&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;mainScreen&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;bounds&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]];&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 4&lt;/span&gt;     
&lt;span class=&#39;lineno&#39;&gt; 5&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;mViewController&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;[[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;ViewController&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;alloc&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;initWithNibName&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;@&amp;quot;ViewController&amp;quot;&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;bundle&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;nb&#39;&gt;nil&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;];&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 6&lt;/span&gt;     
&lt;span class=&#39;lineno&#39;&gt; 7&lt;/span&gt;     &lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;mViewController&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;startWithWindow&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;mWindow&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;];&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 8&lt;/span&gt;     
&lt;span class=&#39;lineno&#39;&gt; 9&lt;/span&gt;     &lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;mWindow&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;makeKeyAndVisible&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;];&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;10&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The view controller &lt;code&gt;start&lt;/code&gt; method initializes the &lt;code&gt;OgreApplication&lt;/code&gt;, the C++ instance that encapsulate the Ogre context and all the actual &lt;em&gt;&amp;#8220;simulation&amp;#8221;&lt;/em&gt;, in this case.&lt;/p&gt;
&lt;div class=&#39;highlight&#39;&gt;&lt;pre&gt;&lt;code class=&#39;objective-c&#39;&gt;&lt;span class=&#39;lineno&#39;&gt; 1&lt;/span&gt; &lt;span class=&#39;k&#39;&gt;-&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;kt&#39;&gt;void&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;nf&#39;&gt;startWithWindow:&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;UIWindow&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;*&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;window&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 2&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;{&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 3&lt;/span&gt;     &lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;int&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;width&lt;/span&gt;  &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;view&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;frame&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;size&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;width&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 4&lt;/span&gt;     &lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;int&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;height&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;view&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;frame&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;size&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;height&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 5&lt;/span&gt;     
&lt;span class=&#39;lineno&#39;&gt; 6&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;mOgreView&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;[[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;OgreView&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;alloc&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;initWithFrame&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;CGRectMake&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;mi&#39;&gt;0&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt;&lt;span class=&#39;mi&#39;&gt;0&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;width&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;height&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)];&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 7&lt;/span&gt;     &lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;view&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;addSubview&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;mOgreView&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;];&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 8&lt;/span&gt; 
&lt;span class=&#39;lineno&#39;&gt; 9&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;mApplication&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;start&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;window&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;mOgreView&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;width&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;height&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;10&lt;/span&gt;     
&lt;span class=&#39;lineno&#39;&gt;11&lt;/span&gt;     &lt;span class=&#39;c1&#39;&gt;// Linking the ogre view to the render window&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;12&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;mOgreView&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;mRenderWindow&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;mApplication&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;mRenderWindow&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;13&lt;/span&gt; 
&lt;span class=&#39;lineno&#39;&gt;14&lt;/span&gt;     &lt;span class=&#39;c1&#39;&gt;// Ogre has created an EAGL2ViewController for the provided mOgreView&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;15&lt;/span&gt;     &lt;span class=&#39;c1&#39;&gt;// and assigned it as the root view controller of the window&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;16&lt;/span&gt;     &lt;span class=&#39;c1&#39;&gt;//&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;17&lt;/span&gt;     &lt;span class=&#39;c1&#39;&gt;// Let&amp;#39;s first retrieve it&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;18&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;UIViewController&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;*&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;ogreViewController&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;window&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;rootViewController&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;19&lt;/span&gt;     
&lt;span class=&#39;lineno&#39;&gt;20&lt;/span&gt;     &lt;span class=&#39;c1&#39;&gt;// I want to be the actual root view controller&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;21&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;window&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;rootViewController&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;22&lt;/span&gt;     
&lt;span class=&#39;lineno&#39;&gt;23&lt;/span&gt;     &lt;span class=&#39;c1&#39;&gt;// But i want to add a child link with the ogre one&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;24&lt;/span&gt;     &lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;self&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;addChildViewController&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;ogreViewController&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;];&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;25&lt;/span&gt;     
&lt;span class=&#39;lineno&#39;&gt;26&lt;/span&gt;     &lt;span class=&#39;c1&#39;&gt;// add the ogre view as a sub view&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;27&lt;/span&gt;     &lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;view&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;addSubview&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;mOgreView&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;];&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;28&lt;/span&gt;     &lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;self&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;view&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;sendSubviewToBack&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;:&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;mOgreView&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;];&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;29&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On line 6, a sub-view is created, that is the one actually used by Ogre. I would have preferred to be able to directly create such view in the interface builder and even get rid of the parent view but it Ogre creates its own view controller for it (which I failed to replace) and I wanted to keep my own.&lt;/p&gt;

&lt;p&gt;This view uses the custom class &lt;code&gt;OgreView&lt;/code&gt; (&lt;a href=&#39;https://github.com/cloderic/ios-ogre/blob/ff401891fcdc4e4ffd7e071cddce71d35fd9e067/OgreView.h&#39;&gt;.h&lt;/a&gt;, &lt;a href=&#39;https://github.com/cloderic/ios-ogre/blob/ff401891fcdc4e4ffd7e071cddce71d35fd9e067/OgreView.mm&#39;&gt;.mm&lt;/a&gt;) that &amp;#8220;mimicks&amp;#8221; what Ogre is expected as a view, ie. the not exported &lt;code&gt;EAGL2View&lt;/code&gt; (&lt;a href=&#39;https://bitbucket.org/sinbad/ogre/src/baa48feb22e9f35088b521d336678847a9a71504/RenderSystems/GLES2/include/EAGL/OgreEAGL2View.h?at=v1-8&#39;&gt;.h&lt;/a&gt;, &lt;a href=&#39;https://bitbucket.org/sinbad/ogre/src/baa48feb22e9f35088b521d336678847a9a71504/RenderSystems/GLES2/src/EAGL/OgreEAGL2View.mm?at=v1-8&#39;&gt;.mm&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;On line 18, Ogre&amp;#8217;s created view controller is retrieved, &lt;code&gt;self&lt;/code&gt; then takes back its place as &lt;code&gt;window&lt;/code&gt;&amp;#8217;s root view controller and a parenting link is created between the two view controllers (should help propagating OS events).&lt;/p&gt;

&lt;p&gt;Finally, the Ogre view is attached to the main view and sent to the back for other sub-views to be visible.&lt;/p&gt;

&lt;h3 id=&#39;the_c_side&#39;&gt;The C++ side&lt;/h3&gt;

&lt;p&gt;On the C++ side, the given pointers are provided when creating Ogre&amp;#8217;s render window.&lt;/p&gt;
&lt;div class=&#39;highlight&#39;&gt;&lt;pre&gt;&lt;code class=&#39;cpp&#39;&gt;&lt;span class=&#39;lineno&#39;&gt; 1&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;void&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;OgreApplication&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;start&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;kt&#39;&gt;void&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;*&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;uiWindow&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;void&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;*&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;uiView&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;void&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;*&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;uiViewController&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;int&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;width&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;int&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;height&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 2&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;{&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 3&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;mRoot&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;k&#39;&gt;new&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;Ogre&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;Root&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;mResourcesRoot&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;+&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&amp;quot;ogre.cfg&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 4&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;m_StaticPluginLoader&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;load&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;();&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 5&lt;/span&gt;     
&lt;span class=&#39;lineno&#39;&gt; 6&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;Ogre&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;NameValuePairList&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;params&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 7&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;params&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&amp;quot;colourDepth&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&amp;quot;32&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 8&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;params&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&amp;quot;contentScalingFactor&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&amp;quot;2.0&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 9&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;params&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&amp;quot;FSAA&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&amp;quot;16&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;10&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;params&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&amp;quot;Video Mode&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;Ogre&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;StringConverter&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;toString&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;width&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;+&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&amp;quot;x&amp;quot;&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;+&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;Ogre&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;StringConverter&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;toString&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;height&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;11&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;params&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&amp;quot;externalWindowHandle&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;Ogre&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;StringConverter&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;toString&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;((&lt;/span&gt;&lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;long&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;uiWindow&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;12&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;params&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&amp;quot;externalViewHandle&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;Ogre&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;StringConverter&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;toString&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;((&lt;/span&gt;&lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;long&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;uiView&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;13&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;params&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&amp;quot;externalViewController&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;]&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;Ogre&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;StringConverter&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;toString&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;((&lt;/span&gt;&lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;long&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;uiViewController&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;14&lt;/span&gt;     
&lt;span class=&#39;lineno&#39;&gt;15&lt;/span&gt;     &lt;span class=&#39;c1&#39;&gt;// Initialize w/o creating a renderwindow.&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;16&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;mRoot&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;initialise&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;nb&#39;&gt;false&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;s&#39;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;17&lt;/span&gt;     
&lt;span class=&#39;lineno&#39;&gt;18&lt;/span&gt;     &lt;span class=&#39;c1&#39;&gt;// Create the window and attach it to the given UI stuffs.&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;19&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;mRenderWindow&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;mRoot&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;createRenderWindow&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;s&#39;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;width&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;height&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt;&lt;span class=&#39;nb&#39;&gt;true&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;params&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;20&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And voilà, everything works as expected!&lt;/p&gt;

&lt;p&gt;On top of that, this sample application uses &lt;code&gt;CoreMotion&lt;/code&gt; for accelerometer/gyroscope control of the camera as well as touch gestures recognizers and more. Once again it&amp;#8217;s available on &lt;a href=&#39;https://github.com/cloderic/ios-ogre&#39;&gt;github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m sure I&amp;#8217;ve done some bad stuff and that there is a much simpler way of doing all that. Experts of iOS, experts of Ogre, please let me know, I&amp;#8217;ll update the application accordingly!&lt;/p&gt;

&lt;p&gt;If you are going to GDC Europe next week (19/08/13 and 20/08/13), drop by and say hi (booth #170 on the GDC expor floor). If all goes well for me, you should be able to play PaperArena on an iPad!&lt;/p&gt;

&lt;h2 id=&#39;update__26813&#39;&gt;Update - 26/8/13&lt;/h2&gt;

&lt;p&gt;I&amp;#8217;ve updated both the code on github and the post. I was previously setting &lt;code&gt;params[&amp;quot;externalViewController&amp;quot;]&lt;/code&gt; instead of &lt;code&gt;params[&amp;quot;externalViewControllerHandle&amp;quot;]&lt;/code&gt; which is the actual good name for the parameters. That was in fact the reason why this piece of code was working.&lt;/p&gt;

&lt;p&gt;Furthermore I have discovered that the system doesn&amp;#8217;t handle well screen orientation when starting in non portrait mode (e.g. when you set the valid orientations from the settings of the app). This needs further investigation.&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>AI Summit 2013</title>
      <link>http://www.crowdscontrol.net/blog/2013-04-24-ai-summit-2013-takeaway</link>
      <pubDate>Wed, 24 Apr 2013 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/blog/2013-04-24-ai-summit-2013-takeaway</guid>
      <description>
        &lt;p&gt;This long overdue post is about my takeaway from this year&amp;#8217;s GDC AI Summit, I tried to organize that in rough categories.&lt;/p&gt;

&lt;h1 id=&#39;spatially_located_data&#39;&gt;Spatially located data&lt;/h1&gt;

&lt;p&gt;One key part of an AI system is to have meaningful data as input to the decision-making. In most of the games genres, it is very important to have spatially located data and to be able to extract from these meaningful data.&lt;/p&gt;

&lt;p&gt;Several talks focused on this area:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&amp;#8220;AI Postmortems - Warframe&amp;#8221;&lt;/em&gt; by Daniel Brewer (Digital Extremes);&lt;/li&gt;

&lt;li&gt;&lt;em&gt;&amp;#8220;Spaces in the Sandbox: Tactical Awareness in Open World Games&amp;#8221;&lt;/em&gt; by Matthew Jack (Moon collider) and Mika Vehkala (io interactive);&lt;/li&gt;

&lt;li&gt;&lt;em&gt;From the Behavior Up: When the AI Is the Design - Third Eye Crime&lt;/em&gt; by Damian Isla and Christian Baekkelund (Moonshot Games).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically, we were presented methods to map various kind of data (cover percentage, distance to objective, probability of presence, visibility, …) to spatial location: positions or areas. This information being design to allow complex queries from the decision-making systems such as &amp;#8220;give me the most probable place where the thief is that is not so dangerous and where my teammate can still see me&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Mika Vehkala presented a system based on an area map extracted from the navmeshes, a runtime job abstraction and a set of runtime traversal helpers allowing the creation and composition of queries. With the same goal in mind (but working with positions) Matthew Jack presented a small domain language allowing the creation of these queries. These little &amp;#8220;spatial query&amp;#8221; scripts are compiled to byte code allowing a safe usage and providing a chance for optimizations. Daniel Brewer explained how he and his team relied on a area map to implement not only NPCs AI but also a game &lt;em&gt;director&lt;/em&gt; on &lt;a href=&#39;http://en.wikipedia.org/wiki/Warframe&#39;&gt;warframe&lt;/a&gt;. Those talks showcased different usage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;classical but effective &lt;strong&gt;investigation&lt;/strong&gt; using a propagating and cooling-on-sight heat map of the last seen position of the player;&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;cover point&lt;/strong&gt; selection using a distance-to-objective metric to define &amp;#8220;good&amp;#8221; cover point (between player and objective);&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;choking point&lt;/strong&gt; selection by identifying small iso distance-to-objective zones;&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;pacing monitoring&lt;/strong&gt; by mapping killed enemies, and taking the derivative of it to evaluate how the player is doing (steady pace toward the objective, falling back, &amp;#8230;);&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;buddy/squad placement&lt;/strong&gt; using distance-to-objective (e.g. buddy should be ahead of the player) and distance-to-ideal-path-to-objective (e.g. buddy shouldn&amp;#8217;t be in front of the player).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Damian Isla and Christian Baekkelund also presented their new game, Third Eye Crime, whose gameplay design is completely based on the occupancy heat map concept. I&amp;#8217;m really looking forward to it.&lt;/p&gt;
&lt;object height=&#39;480&#39; id=&#39;embedded&#39; width=&#39;640&#39;&gt;
	&lt;param name=&#39;movie&#39; value=&#39;http://www.youtube.com/v/wraeNbodjn0?version=3&amp;amp;hl=fr_FR&amp;amp;rel=0&#39; /&gt;
	&lt;param name=&#39;allowFullScreen&#39; value=&#39;true&#39; /&gt;
	&lt;param name=&#39;allowscriptaccess&#39; value=&#39;always&#39; /&gt;
	&lt;embed allowfullscreen=&#39;true&#39; allowscriptaccess=&#39;always&#39; height=&#39;480&#39; src=&#39;http://www.youtube.com/v/wraeNbodjn0?version=3&amp;amp;hl=fr_FR&amp;amp;rel=0&#39; type=&#39;application/x-shockwave-flash&#39; width=&#39;640&#39; /&gt;
&lt;/object&gt;
&lt;p&gt;Any decision-making system, be it a lua script or a fancy planner, &lt;strong&gt;will&lt;/strong&gt; look dumb and any behavior designer will be mostly &lt;strong&gt;helpless&lt;/strong&gt; if this kind of spatial queries are not available or not powerful enough. These talks provided very good insights on different approach to implement such system and on what is possible with these.&lt;/p&gt;

&lt;h1 id=&#39;utility_systems&#39;&gt;Utility systems&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;&amp;#8220;AI Postmortems - X-Com - Enemy Unknown&amp;#8221;&lt;/em&gt; by Alex Cheng (Firaxis);&lt;/li&gt;

&lt;li&gt;&lt;em&gt;&amp;#8220;Architecture Tricks: Managing Behaviors in Time, Space, and Depth - Infinite axis utility system&amp;#8221;&lt;/em&gt; by Dave Mark (Intrinsic Algorithm).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few days after the summit I was telling everyone that I felt utility systems was one of the major topics. While going though my notes for this post I could only find these 2 talks that were talking explicitly about utility system, but well, this is for me part of my main takeaways.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve always thought of &amp;#8220;utility system&amp;#8221; as a fancy word for saying &amp;#8220;turning lots of intractable knobs to evaluate possible decisions and take the one with the highest weight&amp;#8221;. The summit didn&amp;#8217;t really change my perception.&lt;/p&gt;

&lt;p&gt;Anyhow, I thought Alex Cheng presentation of the AI of X-Com interesting in the sense that, from what I saw, the resulting AI is pretty good and the method to get there are pretty simple: At each turn, NPCs can do one action and one movement, every possible one is weighted from a set of rules that depends on the class of the character and the better one is taken.&lt;/p&gt;

&lt;p&gt;Dave Mark presented the system he uses in his consulting work. For each possible decision:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define its weight as the product of an infinite number of axises…&lt;/li&gt;

&lt;li&gt;Ranging from 0 to 1…&lt;/li&gt;

&lt;li&gt;Mapped from game values (health, ammo, distance to nearest medkit…) using defined bookends and a &lt;strong&gt;response curve&lt;/strong&gt; parametrization of one of the predefined function (linear, sigmoid, logit, …).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The underlying idea is that you control the influence of each axis by tweaking the parameters of the curve. Tweaks made easy thanks to … an Excel sheet. The approach propose a unified way to evaluate possible decision thus limiting the complexity of designing a utility-based system. I&amp;#8217;m still not completely convinced that the &amp;#8220;infinite&amp;#8221; number of axises have any interest, the interaction of more than 2 axises can&amp;#8217;t be visualized and with axises more complex than boolean gates (0 before a threshold, 1 after) it&amp;#8217;s really difficult to explain, thus control, what is going on.&lt;/p&gt;

&lt;p&gt;Given the number of things that are possible with them and the apparent comfort AI devs have with these, I do think it would be interesting to add some utility flavor to something like BTs, through a particular selector node for example.&lt;/p&gt;

&lt;h1 id=&#39;the_next_giant_leap&#39;&gt;The next giant leap?&lt;/h1&gt;

&lt;h2 id=&#39;from_the_behavior_up_when_the_ai_is_the_design__shigi_by_paul_tozour_intelligence_engine_design_systems&#39;&gt;From the Behavior Up: When the AI Is the Design - Shigi by Paul Tozour (Intelligence Engine Design Systems)&lt;/h2&gt;

&lt;p&gt;This talk started by the hilarious Shigi video, a parody of Siri showing us Paul Tozour vision of world where AI can help with the design process.&lt;/p&gt;
&lt;object height=&#39;360&#39; id=&#39;embedded&#39; width=&#39;640&#39;&gt;
	&lt;param name=&#39;movie&#39; value=&#39;http://www.youtube.com/v/Jk5DydR-L9M?hl=fr_FR&amp;amp;version=3&amp;amp;rel=0&#39; /&gt;
	&lt;param name=&#39;allowFullScreen&#39; value=&#39;true&#39; /&gt;
	&lt;param name=&#39;allowscriptaccess&#39; value=&#39;always&#39; /&gt;
	&lt;embed allowfullscreen=&#39;true&#39; allowscriptaccess=&#39;always&#39; height=&#39;360&#39; src=&#39;http://www.youtube.com/v/Jk5DydR-L9M?hl=fr_FR&amp;amp;version=3&amp;amp;rel=0&#39; type=&#39;application/x-shockwave-flash&#39; width=&#39;640&#39; /&gt;
&lt;/object&gt;
&lt;p&gt;The presentation was really interesting, it focused on how to achieve the long term goal showcased in the video. The idea, &lt;em&gt;creating a virtual wind tunnel for game design to test the aerodynamic of player experience&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;During the development of &lt;a href=&#39;http://www.intelligenceenginestudios.com/cityconquest.htm&#39;&gt;City Conquest&lt;/a&gt; the team took baby steps in that direction by implementing Genetically evolved generations of AI players that would test the game over night whenever a change to the rule occurred. The analysis of the taken sequence of actions allowed the team to tweak the balancing of the game.&lt;/p&gt;

&lt;h2 id=&#39;off_the_beaten_path_nontraditional_uses_of_ai__the_restaurant_game_by_jeff_orkin&#39;&gt;Off the Beaten Path: Non-Traditional Uses of AI - &lt;a href=&#39;http://web.media.mit.edu/~jorkin/research/&#39;&gt;The Restaurant Game&lt;/a&gt; by Jeff Orkin&lt;/h2&gt;

&lt;p&gt;Jeff Orkin started his talk by asserting that, in general, AI is a content problem, the behavior of a NPC is content. For it to be better by an order of magnitude, spending more time on creating the content won&amp;#8217;t work as &lt;strong&gt;&amp;#8220;Human imagination is a limited resource&amp;#8221;&lt;/strong&gt;. His idea is to base future AI on actual players behavior (an idea a friend of mine explored in his &lt;a href=&#39;http://tel.archives-ouvertes.fr/docs/00/66/70/72/PDF/tence-thesis.pdf&#39;&gt;phd thesis&lt;/a&gt;), record these and replay fragments of the played patterns when it fits. In short, for him, the future AI engine is a search engine.&lt;/p&gt;

&lt;p&gt;To validate this approach he did an experiment with a simple restaurant game featuring the interaction between a customer and a waitress. He recorded thousands of play sessions, and crowd sourced the annotation of these transcripts (over 450h of work). In the final game, the player is the customer, the system tries to match his action to one of the transcripts and play the reaction of the waitress. With 167 different ways of asking for the bill, variety is no longer an issue and thanks to the manual annotation the waitress&amp;#8217; mood can be configured for a different experience each time.&lt;/p&gt;

&lt;p&gt;These two talks were really interesting and shows that their promise is not so crazy, I believe we will get to this kind of AI in the next decade.&lt;/p&gt;

&lt;h1 id=&#39;random_notes&#39;&gt;Random notes&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Luke Dicken was perfect in his famous role &amp;#8220;academics are not evil, please love them&amp;#8221;. His talk on planning was seriously interesting though, I have to take some time to go through his papers.&lt;/li&gt;

&lt;li&gt;Ben Sunshine-Hill did a nice talk on the interface between navigation an locomotion, it should be shown to anyone puzzled by their navigation engine being not as good on animated characters than on cylinders. I also had a good laugh during his rant on AI devs being proud of unwanted “emergent” behaviors (the infamous “Playmobil, en avant les histoires”-effect). I have an issue though, whenever I meet him I&amp;#8217;m starting to hum &lt;a href=&#39;http://youtu.be/iPUmE-tne5U?t=50s&#39;&gt;this&lt;/a&gt; song, it&amp;#8217;s a pain.&lt;/li&gt;

&lt;li&gt;You can find old (and hopefully some of the newer soon) AI summit presentation &lt;a href=&#39;http://gameai.com/papers.php&#39;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&#39;conclusion&#39;&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;All in all a pretty solid conference with a large variety of &lt;em&gt;depth&lt;/em&gt; level: from a 30 minutes talk on a 25 years old method (half of the seesion &amp;#8220;The Next Vector: Improvements in AI Steering Behaviors&amp;#8221;) to the very interesing and clever Jeff Orkin talk, beginners and veteran are adressed. This come at a price for someone with decent knowledge of the field: feeling uninterested by 1/3 of the sessions. I don&amp;#8217;t know it there is &lt;strong&gt;A&lt;/strong&gt; solution to this problem but I never felt that at the similar Game/AI conference. In any case the remaining is enough for me to go back next year!&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>LIFE with Recast/Detour</title>
      <link>http://www.crowdscontrol.net/blog/2013-03-21-recast-detour-in-masa-life</link>
      <pubDate>Thu, 21 Mar 2013 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/blog/2013-03-21-recast-detour-in-masa-life</guid>
      <description>
        &lt;p&gt;I sent this mail earlier today to the Recast/Detour &lt;a href=&#39;mailto:recastnavigation@googlegroups.com&#39;&gt;mailing list&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hello,&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m working on &lt;a href=&#39;http://www.masalife.net&#39;&gt;LIFE&lt;/a&gt;, the new AI middleware MASA is showcasing at the GDC next week. I am sending you this email to announce that LIFE uses Recast/Detour as its built-in navigation solution. I’d also like to explain how and what we will contribute to this great project. We are committed to open source our development on Recast/Detour for the benefit of the community.&lt;/p&gt;

&lt;p&gt;LIFE aims at providing a solution for behavior authoring and execution for games and simulations alike. It provides a 3D sandbox where behavior designers can preview, test and debug their work, hence our need for navigation. We ruled out rebuilding a system from scratch, something we had experience doing, and decided to integrate Recast/Detour, thus benefitting from the lean and robust (and, to be honest, awesome) software Mikko and all the contributors have built.&lt;/p&gt;

&lt;p&gt;Recast/Detour offers two mature features: navigation mesh generation and queries. but beyond that, we needed a full-fledged reactive navigation solution to make our little simulated autonomous pals able to gracefully move around, aware of their neighbors and environment. We are building this system from the existing DetourCrowd and will release it publicly in the next months as a part of Recast/Detour and under the same permissive licence.&lt;/p&gt;

&lt;p&gt;Our first goal is to provide a versatile framework for navigation behaviors thus allowing developers and scientists to develop, test and use their algorithms. We plan to include well-tested and efficient behaviors for path following, collision avoidance and group navigation. We hope these new features will benefit to the whole community and also help it grow.&lt;/p&gt;

&lt;p&gt;We are looking forward for your comments and questions. Stay tuned for the upcoming release!&lt;/p&gt;

&lt;p&gt;Thanks again to Mikko and the other contributors for making such a great piece of software.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;PS.&lt;/em&gt; I&amp;#8217;ll be at the GDC next week, both at conference (including the AI summit) and at the exhibition on &lt;a href=&#39;http://www.masagroup.net/news-resources/events/events/gdc-games-developer-conference/&#39;&gt;booth #1936&lt;/a&gt; with colleagues to present what we&amp;#8217;ve been working on for 1 year: MASA LIFE. I hope you&amp;#8217;ll be many to come have a look!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PPS.&lt;/em&gt; On the booth, you&amp;#8217;ll be able to play a small top-down tank shooter we&amp;#8217;ve developed using LIFE for AI, it&amp;#8217;s awesomely fun!&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Boudica's last stand</title>
      <link>http://www.crowdscontrol.net/blog/2012-05-21-boudica-last-stand</link>
      <pubDate>Mon, 21 May 2012 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/blog/2012-05-21-boudica-last-stand</guid>
      <description>
        &lt;p&gt;A few weeks ago, I received a mail from a reader of this blog: an ancient history enthusiast.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I use novel techniques to try and identify the UK battlefield where the Romans defeated Boudica in 60/61AD.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&#39;http://en.wikipedia.org/wiki/Boudica&#39;&gt;Boudica&lt;/a&gt; isn&amp;#8217;t just a &lt;a href=&#39;http://civilization.wikia.com/wiki/Boudica&#39;&gt;Civilization IV leader&lt;/a&gt;, she is a British ancient heroin who led an uprising against the Romans conqueror and was severely defeated at a not yet identified location (interseting how this story is closed from French&amp;#8217;s &lt;a href=&#39;http://en.wikipedia.org/wiki/Vercingetorix&#39;&gt;Vercingetorix&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;At this point 3/4 of you are wondering how that is related to the topic of this blog. I do hope 1 or 2 are interested in history, for those and the rest, the mail continued.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I have been thinking about crowd control/behaviour modeling as another method to help answer some questions – hence my arriving at your page.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The major objectives he described would be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Being able to validate/invalidate the locations;&lt;/li&gt;

&lt;li&gt;Have an idea of the casualties and especially evaluate the veracity of the Roman writer, Tacitus, reports of 80 000 dead British rebels;&lt;/li&gt;

&lt;li&gt;How were the bodies geographically distributed, and thus where could archeological evidences (armors, weapons or gears remains) be found.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img alt=&#39;Boudica in Civilization IV&#39; src=&#39;/images/posts/2012/boudica.jpg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;Needless to say this is quite ambitious for any individual with existing crowd simulation softwares. This project made me thought of how we could tackle this.&lt;/p&gt;

&lt;p&gt;To get a simulation, we&amp;#8217;d need a - wait for it (what a cool middle name!) - simulator. First we need to specify the characteristics of the simulation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;is it &lt;em&gt;microscopic&lt;/em&gt; (each warrior simulated by an autonomous entity), &lt;em&gt;aggregate&lt;/em&gt; (several warriors belonging to a group simulated by an autonomous entity) or &lt;em&gt;macroscopic&lt;/em&gt; (simulating macroscopically the various crowd phenomenom - not very adapted for this kind of behavior modelling);&lt;/li&gt;

&lt;li&gt;what &lt;em&gt;level&lt;/em&gt; of behavioral simulation do we need, we&amp;#8217;d surely need planning to handle battle strategies as well as reaction to the opponent moves, but do we need reactive navigation (i.e. maintaining groups, avoiding collisions) or motion coordination;&lt;/li&gt;

&lt;li&gt;do we need to involve a &lt;em&gt;physics&lt;/em&gt; simulation for realistics hits in fights, projectiles, falls, &amp;#8230; ;&lt;/li&gt;

&lt;li&gt;what kind of output are needed, 3D/2D rendering, localized metrics (density, number of deads&amp;#8230;). A number of commercial crowd simulation software might be able to do help with this: &lt;a href=&#39;http://www.golaem.com/content/products/golaem-crowd/overview&#39;&gt;Golaem Crowd&lt;/a&gt; or &lt;a href=&#39;http://www.massivesoftware.com/&#39;&gt;Massive&lt;/a&gt; would do fine to model the behaviors and get a pretty rendering but would fall short for data analysis, &lt;a href=&#39;http://www.legion.com/&#39;&gt;Legion&lt;/a&gt; is designed to study crowd motion but I wonder if modelling a battle would be possible, &lt;a href=&#39;http://www.masagroup.net/products/masa-sword.html&#39;&gt;Masa Sword&lt;/a&gt; is designed for combat simulation but the lack of low level behavior and animation wouldn&amp;#8217;t allow all use cases, game engines such as &lt;a href=&#39;http://unity3d.com/&#39;&gt;Unity&lt;/a&gt; provide sufficient AI basics to be able to build such simulator but would need lots of effort. In any case, we&amp;#8217;d need to involve specialized &lt;strong&gt;software engineers&lt;/strong&gt; to customize or even build our simulator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img alt=&#39;A rendition of Alesias battle with Golaem Crowd&#39; src=&#39;/images/posts/2011/alesia.jpeg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;For the resulting simulation to be somehow &lt;em&gt;valid&lt;/em&gt;, we&amp;#8217;d need to gather information from the domain experts, in this case, &lt;strong&gt;historians&lt;/strong&gt;. In order to model the behaviors at the individual and collective level, military strategies and tactics as well as the warriors behaviors need to be investigated for each belligerent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What kind of combat arms (infantry, cavalry, &amp;#8230;) could have been present?&lt;/li&gt;

&lt;li&gt;What weapons were used, how?&lt;/li&gt;

&lt;li&gt;What strategies and tactics were used?&lt;/li&gt;

&lt;li&gt;How did warriors took advantage of the terrain?&lt;/li&gt;

&lt;li&gt;What was the level of discipline?&lt;/li&gt;

&lt;li&gt;&lt;em&gt;etc&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gathering must be conducted by &lt;strong&gt;specialists of behavior modeling&lt;/strong&gt;, they&amp;#8217;ll be able to get the relevent data and create the behavior modelizations for our simulator. If we want to involve realistic character visualizations we&amp;#8217;ll also need to involve computer graphics &lt;strong&gt;artits&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One major point of doing this simulation is to validate potential geographical locations of the battle. Thus we&amp;#8217;d need to recreate faithfully the possible setting with the help of &lt;strong&gt;GIS specialists&lt;/strong&gt; and perhaps &lt;strong&gt;geologists&lt;/strong&gt; to get an idea of how the landscape looked like at that time.&lt;/p&gt;

&lt;p&gt;Once all of this is done, we would have a configurable simulator, ready to test theories, the fun part would start, finally! To go back to the start of this long article, that&amp;#8217;s exactly the part my reader is interested in.&lt;/p&gt;

&lt;p&gt;It should be possible to execute a scenario and statistical variants, extract metrics, not to scientifically validate it, the process defined above introduces too much bias to deduce anything, but to get a feeling of its validity. Do not understand me wrong here though, I do think this kind of simulator could help us understand how any historical event took place, it can be another, rather powerful, tool for historians. The interesting part for us, software engineers, is to reduce the work to do to create the simulator and to facilitate the authoring of the behaviors.&lt;/p&gt;

&lt;p&gt;Maybe one day, retired history enthusiasts will be able to use our tools, as easily as they edit their holiday movies.&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Yet another migration</title>
      <link>http://www.crowdscontrol.net/blog/2012-05-12-yet-another-migration</link>
      <pubDate>Sat, 12 May 2012 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/blog/2012-05-12-yet-another-migration</guid>
      <description>
        &lt;p&gt;The first post of 2012 (in May&amp;#8230; shame on me) is about yet another migration of the site!&lt;/p&gt;

&lt;p&gt;As you may know Posterous, that I previously used, was &lt;a href=&#39;http://blog.posterous.com/big-news&#39;&gt;bought by twitter&lt;/a&gt;. It is pretty sure they will close or at least let die their current service. So I moved everything to &lt;a href=&#39;http://pages.github.com/&#39;&gt;GitHub Pages&lt;/a&gt;! You can browse and even fork this site&amp;#8217;s &lt;a href=&#39;https://github.com/cloderic/cloderic.github.com&#39;&gt;repository&lt;/a&gt;. The setup was a little longer than expected (basically you have to write html and css on your own), but I&amp;#8217;m pretty happy with the result and because its basically a git repository of the site sources I have no fear of losing pages. More important, my inner geek is satisfied!&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll be back soon (hopefully) with real content !&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Formation Sketching</title>
      <link>http://www.crowdscontrol.net/formation-sketching</link>
      <pubDate>Wed, 09 Nov 2011 00:00:00 -0800</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/formation-sketching</guid>
      <description>
        &lt;p&gt;&lt;img alt=&#39;ml-class doodle&#39; src=&#39;/images/posts/2011/sketched-formations.jpg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;I have updated the Group navigation state-of-the-art report with an interesting article I read a few weeks ago: * &lt;em&gt;Qin Gu and Zhigang Deng. Formation Sketching: An Approach to Stylize Groups in Crowd Simulation. In Graphics Interface. University Houston, Delmar Thomson Learning, 2011&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve also set up a &lt;a href=&#39;/group-navigation-state-of-the-art-report/&#39;&gt;static page&lt;/a&gt; for the report.&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>ml-class</title>
      <link>http://www.crowdscontrol.net/ml-class</link>
      <pubDate>Tue, 08 Nov 2011 00:00:00 -0800</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/ml-class</guid>
      <description>
        &lt;p&gt;I&amp;#8217;ve been pretty busy lately following the wonderful &lt;a href=&#39;http://www.ml-class.org/&#39;&gt;machine learning Stanford open course&lt;/a&gt; of professor &lt;a href=&#39;http://ai.stanford.edu/~ang/&#39;&gt;Andrew Ng&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When I learned about this Stanford initiative this summer I was really interested and decided to follow one course just to see how it was done. I chose machine learning over &lt;a href=&#39;https://www.ai-class.com/&#39;&gt;AI&lt;/a&gt; because I felt I had more to learn in that field, as a matter of fact I have followed a machine learning course in my final MSc year but never put what I learnt into practice and just remembered enough to impress a recruiter during an interview. I didn&amp;#8217;t consider following the &lt;a href=&#39;http://www.db-class.org/&#39;&gt;database course&lt;/a&gt;, but I&amp;#8217;m sure I&amp;#8217;ld have learn more, but perhaps having less fun&amp;#8230;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m roughly halfway through the course, here&amp;#8217;s my takeover for the moment.&lt;/p&gt;

&lt;p&gt;It &lt;em&gt;IS&lt;/em&gt; possible to deliver a compelling video course, the key aspects: short segments (~10 minutes), good video and audio quality, simple slides and colored doodles.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;ml-class doodle&#39; src=&#39;/images/posts/2011/ml-class.png&#39; /&gt;&lt;/p&gt;

&lt;p&gt;The quizzes, both those during the videos and the review questions, are very good to memorize stuffs.&lt;/p&gt;

&lt;p&gt;The simple programming exercises debunk the complexity of the algorithms. The use of Octave (a free alternative to Matlab) allows you to focus on the maths not on technical time-consuming stuffs.&lt;/p&gt;

&lt;p&gt;I like the way professor Ng puts the emphasis on the intuition of how the system works before he takes us for a tour of the machinery.&lt;/p&gt;

&lt;p&gt;Neural networks back propagation is not a magical trick, it&amp;#8217;s actually a cost optimization relying on the cost gradient.&lt;/p&gt;

&lt;p&gt;Anyway, I think I&amp;#8217;d now be able to start tinkering with machine learning in some projects. I hope this experiment will be renewed, I&amp;#8217;d like to take another class next semester!&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Changes</title>
      <link>http://www.crowdscontrol.net/changes</link>
      <pubDate>Sun, 16 Oct 2011 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/changes</guid>
      <description>
        &lt;p&gt;I&amp;#8217;ve been pretty busy this past few months, busy sending resume, cover letters and doing interviews.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s go back in time a little bit, in March my girlfriend and I moved from Rennes to Paris (actually Versailles) for her new work. As I didn&amp;#8217;t want to quit my current job at Golaem (and they didn&amp;#8217;t want me to leave) we decided I was to work remotly from home and come back to Rennes ~2 times per month. I was able to work quite efficiently but quickly felt isolated working alone in my home office.&lt;/p&gt;

&lt;p&gt;In late June, I knew this wasn&amp;#8217;t working for me. From July, I worked from a Golaem&amp;#8217;s partner office in Paris. This solved the social isolation problem, but as I didn&amp;#8217;t worked at all with my officemates, I still had no work interaction beside some mails and IM. I know lots of people work this way without any problem but it seems I personally need to have real time work interactions to keep me motivated.&lt;/p&gt;

&lt;p&gt;Anyway, I started looking for a job and now I&amp;#8217;ve found a pretty good one! In January, I&amp;#8217;ll be lead developper at &lt;a href=&#39;http://www.masagroup.net/&#39;&gt;Masa Group&lt;/a&gt; working on high level AI technology.&lt;/p&gt;

&lt;p&gt;PS. I&amp;#8217;ve converted my &amp;#8220;Group navigation state-of-the-art&amp;#8221; report to Latex and created a github repository to make the sources openly available, check it &lt;a href=&#39;https://github.com/cloderic/Group-navigation-state-of-the-art-report&#39;&gt;here&lt;/a&gt;!&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Airport hall populated with Golaem Crowd</title>
      <link>http://www.crowdscontrol.net/airport-hall-populated-with-golaem-crowd</link>
      <pubDate>Thu, 15 Sep 2011 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/airport-hall-populated-with-golaem-crowd</guid>
      <description>
        &lt;p&gt;A new showcase video of Golaem Crowd has been published a few days ago. It features our new integration with the rendering engine VRay, but most importantly (from my point of view) it shows the capabilities of our navigation engine. The animation is not that good though, especially compared to the new things we&amp;#8217;re developing.&lt;/p&gt;

&lt;p&gt;Anyway this is a great showcase for the navigation engine I&amp;#8217;ve been developing since more than 2 years. The path following is natural and the collision avoidances are smooth !&lt;/p&gt;

&lt;p&gt;Please enjoy !&lt;/p&gt;
&lt;iframe frameborder=&#39;0&#39; height=&#39;315&#39; id=&#39;embedded&#39; src=&#39;http://www.youtube.com/embed/pqQOfKR_Cw8?rel=0&amp;amp;hd=1&#39; width=&#39;560&#39;&gt; &lt;/iframe&gt;
      </description>
    </item>
    
    <item>
      <title>Hosted WebGL Toy</title>
      <link>http://www.crowdscontrol.net/hosted-webgl-toy</link>
      <pubDate>Tue, 30 Aug 2011 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/hosted-webgl-toy</guid>
      <description>
        &lt;p&gt;I&amp;#8217;m so trendy, I now have a brand new &lt;a href=&#39;https://github.com/cloderic&#39;&gt;github account&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m using it both as a git repo for my WebGL experiments and, thanks to their well thought &lt;a href=&#39;http://pages.github.com/&#39;&gt;pages&lt;/a&gt; feature as a hosting facility for the project itself. You can check this awesome work at &lt;a href=&#39;http://paperplane.crowdscontrol.net/&#39;&gt;paperplane.crowdscontrol.net&lt;/a&gt;. Stable versions of the project will be published there.&lt;/p&gt;

&lt;p&gt;Don&amp;#8217;t get too excited though, there&amp;#8217;s nothing impressive to show yet, just a crate to manipulate with the mouse. This is the basis for &lt;span style=&#39;text-decoration: line-through;&#39;&gt;my world conquest!&lt;/span&gt; my hopefully, someday, working WebGL toy. Anyway there&amp;#8217;s a ton of things I&amp;#8217;ve done for the first time with this little website and spinning crate: working JavaScript, git repository, light css, markdown files, and of course WebGL.&lt;/p&gt;

&lt;p&gt;This is so lame for the moment I&amp;#8217;m wondering why I&amp;#8217;m even writing this, but, heh, I&amp;#8217;m a little proud!&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Learning WebGL</title>
      <link>http://www.crowdscontrol.net/learning-webgl</link>
      <pubDate>Sun, 21 Aug 2011 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/learning-webgl</guid>
      <description>
        &lt;p&gt;So this is my new home project, I&amp;#8217;m learning WebGL.&lt;/p&gt;

&lt;p&gt;I haven&amp;#8217;t worked with a new platform in a long time (except 3DVIA Studio, but let&amp;#8217;s just say it&amp;#8217;s not that fun) and I&amp;#8217;m getting quite bored by the usual C++ I&amp;#8217;m doing at work; I&amp;#8217;m just speaking about the code part, I&amp;#8217;m hopefully very interested by the algorithms and software architecture parts. I have several reasons to chose WebGL :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I&amp;#8217;m a little familiar with the 3D on the web thing and most of what I&amp;#8217;ve seen has not delivered on its promises (VRML, papervision, MPEG-4 System, O3D&amp;#8230;);&lt;/li&gt;

&lt;li&gt;Some guys are doing &lt;a href=&#39;http://tinkercad.com/&#39;&gt;really&lt;/a&gt; &lt;a href=&#39;http://plopbyte.net/2011/03/globetweeter/&#39;&gt;amazing&lt;/a&gt; &lt;a href=&#39;http://bodybrowser.googlelabs.com/&#39;&gt;things&lt;/a&gt; in webGL;&lt;/li&gt;

&lt;li&gt;I never used directly OpenGL or shaders, webGL is an opportunity to get back those basics;&lt;/li&gt;

&lt;li&gt;Practice javascript.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyway, I&amp;#8217;m currently doing &lt;a href=&#39;http://learningwebgl.com/blog/?page_id=1217&#39;&gt;those tutorials&lt;/a&gt;, so far (I&amp;#8217;m at lesson 8) they are really good ! But, as I thing you can&amp;#8217;t learn anything without a real project, the objective is to do a working little webapp. My current goal is to implement a &lt;a href=&#39;http://www.cs.toronto.edu/~dt/siggraph97-course/cwr87/&#39;&gt;Reynolds-style&lt;/a&gt; bird flocking algorithm, I&amp;#8217;ve never implemented those kind of things in 3D and I don&amp;#8217;t need lots of assets to get something ! Once I got this working I&amp;#8217;ll work on a shephering game; nothing is designed yet but I think it might be fun.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m currently looking at high level 3D libraries for webGL, I was wondering if someone had done a little comparison of those.&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Autonomous agents nursery</title>
      <link>http://www.crowdscontrol.net/autonomous-agents-nursery</link>
      <pubDate>Wed, 10 Aug 2011 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/autonomous-agents-nursery</guid>
      <description>
        &lt;p&gt;Finally, we&amp;#8217;ve got some Golaem Crowd animated eye candy to show to the world !&lt;/p&gt;

&lt;p&gt;Our partner &lt;a href=&#39;http://www.mikrosimage.eu/&#39;&gt;Mikros Image&lt;/a&gt; have produced a wonderfull short showcasing our plugin !&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re now ready to take on the world !&lt;/p&gt;
&lt;iframe frameborder=&#39;0&#39; height=&#39;315&#39; id=&#39;embedded&#39; src=&#39;http://www.youtube.com/embed/9VfNyq_GwCI?rel=0&amp;amp;hd=1&#39; width=&#39;560&#39;&gt; &lt;/iframe&gt;
&lt;p&gt;Agents order and more videos at &lt;a href=&#39;http://golaem.com/golaem-project&#39;&gt;http://golaem.com/golaem-project&lt;/a&gt;.&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Group navigation state-of-the-art report - Part 3, Who's in charge?</title>
      <link>http://www.crowdscontrol.net/group-navigation-state-of-the-art-report-part-90260</link>
      <pubDate>Sun, 19 Jun 2011 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/group-navigation-state-of-the-art-report-part-90260</guid>
      <description>
        &lt;p&gt;&lt;em&gt;The full article is available &lt;a href=&#39;/group-navigation-state-of-the-art-report&#39;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&#39;whos_in_charge&#39;&gt;Who&amp;#8217;s in charge?&lt;/h2&gt;

&lt;p&gt;In the previous part, we studied how group members are able to maintain cohesion or stay in formation. In this part, we&amp;#8217;ll study how the group, a whole, is able to make navigation decisions: path planning, path following, steering (including collision avoidance) and formation changes.&lt;/p&gt;

&lt;h3 id=&#39;anchor&#39;&gt;Anchor&lt;/h3&gt;

&lt;p&gt;While some behavior might be decentralized (c.f. part 1), in order to leverage groups in a context where we need to make them go from A to B, top-down decision making is needed (Musse and Thalmann 2001). A group level process will be able to make the group move while each of its member follows. We call anchor a virtual object that group members use as a reference for their formation or flocking behaviors and to which they delegate some navigation processes. It aggregates various data relative to the group, such as its position, orientation and velocity and it&amp;#8217;s where the group level decision-making is done.&lt;/p&gt;

&lt;h4 id=&#39;leader&#39;&gt;Leader&lt;/h4&gt;

&lt;p&gt;Trying to enforce a strict equivalence between simulated entities and actual characters, lots of works rely on a leader-followers approach. In such approach, one member of a group is the leader where the others are the followers. The leader takes responsibility for the whole group regarding the navigation; it becomes the anchor of the group (Loscos et al. 2003; Qiu et al. 2010). The implementation of such an approach using a navigation engine for independent entities is straightforward: the leader is similar to an independent entity; while the followers uses a subset of the default processes and maintain a reference to their leader.&lt;/p&gt;

&lt;p&gt;But the leader can&amp;#8217;t reuse the exact same processes of an independent entity. Its navigation must take into account the bulk of the whole group as well as the different locomotion constraints of its followers. It is also better to differentiate the the leader&amp;#8217;s own attributes (position, orientation and velocity) from the anchor&amp;#8217;s (Millington 2006). Taking all these constraints into account makes the decision-making process of the leader very different from the other members.&lt;/p&gt;

&lt;h4 id=&#39;group_entity&#39;&gt;Group entity&lt;/h4&gt;

&lt;p&gt;Noting that the leader-based approach as several flaws, a growing proportion of architectures chose to move the group anchor from the leader to a virtual group entity (Schuerman et al. 2010; Silveira et al. 2008; Karamouzas and Overmars 2010b). This virtual entity is similar to any other simulated entities but doesn&amp;#8217;t have visual or physic (i.e. regarding collision detection) representation. In such architecture, the group members are identical to one another. In Schuerman et al. (Schuerman et al. 2010) work, other entities detect groups entities during their collision avoidance process, trying to avoid collisions with groups as the whole. Entities are thus able to simulate the fact that pedestrians tend to avoid to pass through a group. The group entity creates a one level deep hierarchy of entities. This approach can be taken a step further to create groups of groups and so on (Schuerman et al. 2010; Millington 2006) allowing a more structured crowd.&lt;/p&gt;

&lt;h3 id=&#39;path_planningfollowing&#39;&gt;Path Planning/Following&lt;/h3&gt;

&lt;p&gt;One of the reasons for group navigation is to factorize a costly aspect of navigation: path planning. As a matter of fact the members of a group are expected to follow the same high-level path through the environment, a single query should be sufficient for the whole group.&lt;/p&gt;

&lt;p&gt;The most important aspect of group level path planning is to choose how to take the bulk of the group into account. Contrary to a single entity where its bulk can&amp;#8217;t be changed and thus is a hard constraint, a group can reconfigure in order to pass through narrower corridors. The query has to be tuned in order to prefer paths on which the group, in its current spatial configuration, can navigate but be able to select narrow passages if necessary. This implies that the cost of falling back to a narrower spatial configuration can be compared to the cost of taking a longer path (Kamphuis and Overmars 2004; Pottinger 1999; Bayazit et al. 2003).&lt;/p&gt;

&lt;p&gt;Once the path is computed, the path following process is able to provide local steering orders resulting in the entity following the path. Adapted to groups, this process makes the anchor follow the path. In some work (Bayazit et al. 2003; Pottinger 1999), the group level path following is also responsible for environment aware formation adaptation, allowing the formation to change when the clearance to obstacles changes. The following figure shows how a formation change allows a group to pass through a narrow passage more smoothly.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;Passing through a narrow passage using naive or follow-the-leader approach&#39; src=&#39;/images/posts/2011/narrow-passage.jpg&#39; /&gt;&lt;/p&gt;

&lt;h3 id=&#39;collision_avoidance&#39;&gt;Collision Avoidance&lt;/h3&gt;

&lt;p&gt;Groups tend to stay coherent when navigating between obstacles and among other pedestrians, that&amp;#8217;s why several work features group level collision avoidance. Numbers of existing algorithm for entities can be applied directly or adapted for group level collision avoidance. As we noted for path planning and following, the main difference between groups and single entities is that their bulk is not a hard constraint. The spatial configuration of a group can be adapted to occupy less frontal space, less longitudinal space or both.&lt;/p&gt;

&lt;p&gt;Schuerman et al. consider the bulk of the group as a disc allowing them to use RVO (Schuerman et al. 2010; van den Berg et al. 2008). The resulting collision avoidance is very conservative as the disc is, most of time greatly overestimating the real footprint of the group. Karamouzas and Overmars adapted their own collision avoidance algorithm, based on velocity space sampling and sweep collision test, to work on the oriented bounding box of the group (Karamouzas and Overmars 2010a; 2010b). They further extend the algorithm by allowing formation adaptation. In practice, they generate samples based on velocity changes and formation changes interpolating the current formation with a library of valid formation. Each sample is weighted depending on its distance from the desired velocity and the desired formation and its time to collision. The number of candidate formations is limited to 15 as there&amp;#8217;s 5 possible formations and 3 interpolations computed per formation. These limits lower the number of considered samples, preserving the performances of the algorithm.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;Linear interpolation between formations&#39; src=&#39;/images/posts/2011/formations-linear-interpolation.jpg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;Peters et al. rule based navigation method is able to handle both formation adaptation and group splitting which is not supported by the previously described methods (Peters et al. 2009). Unfortunately the article doesn&amp;#8217;t provide many details on the algorithm.&lt;/p&gt;

&lt;p&gt;Those group level navigation methods allows the group to take responsibility for a part of collision avoidance and more easily preserve the group cohesions. The members&amp;#8217; own navigation behaviors are still necessary both to preserve individual behaviors and to avoid remaining collisions.&lt;/p&gt;

&lt;h2 id=&#39;conclusion&#39;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;This review was limited to the navigation aspect of the group, it is supposed to answer to the question: &amp;#8220;How to make a group navigate in my simulation/game?&amp;#8221;. A group is, most of the time, the result of social interactions and relations between individuals that have other consequences beyond navigation strategy: body language, facial expressions, and speech&amp;#8230; For a simulated group to be believable those other aspects must be addressed.&lt;/p&gt;

&lt;p&gt;This state-of-the art study was instrumental in the design of Golaem Path upcoming group navigation features (Golaem n.d.). I hope others developers or even researchers in the field will find it useful. I&amp;#8217;ll try to update its content as other works come to my knowledge or are published.&lt;/p&gt;

&lt;h2 id=&#39;bibliography&#39;&gt;Bibliography&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bayazit, O Burchan, Jyh-Ming Lien, and Nancy M Amato. 2003. &amp;#8220;Better group behaviors in complex environments using global roadmaps.&amp;#8221; Pp. 362-370 in 8th International conference on Artificial Life.&lt;/li&gt;

&lt;li&gt;Golaem. n.d. &amp;#8220;Golaem Path.&amp;#8221; Retrieved (&lt;a href=&#39;http://www.golaem.com/content/products/golaem-sdk/features&#39;&gt;http://www.golaem.com/content/products/golaem-sdk/features&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Kamphuis, Arno, and Mark H Overmars. 2004. &amp;#8220;Finding paths for coherent groups using clearance.&amp;#8221; Pp. 19-28 in 2004 ACM SIGGRAPH/Eurographics symposium on Computer Animation.&lt;/li&gt;

&lt;li&gt;Karamouzas, Ioannis, and Mark H Overmars. 2010a. &amp;#8220;Simulating Human Collision Avoidance Using a Velocity-Based Approach.&amp;#8221; Pp. 125&amp;#8211;134 in VRIPHYS 10: 7th Workshop on Virtual Reality Interactions and Physical Simulations. Eurographics Association Retrieved (&lt;a href=&#39;http://people.cs.uu.nl/ioannis/interactions/&#39;&gt;http://people.cs.uu.nl/ioannis/interactions/&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Karamouzas, Ioannis, and Mark H Overmars. 2010b. &amp;#8220;Simulating the local behaviour of small pedestrian groups.&amp;#8221; Pp. 183-190 in 17th ACM Symposium on Virtual Reality Software and Technology. Hong Kong.&lt;/li&gt;

&lt;li&gt;Millington, Ian. 2006. &amp;#8220;Movement.&amp;#8221; Pp. 41-202 in Artificial intelligence for games, David H Eberlyedited by. Morgan Kaufmann.&lt;/li&gt;

&lt;li&gt;Musse, Soraia Raupp, and Daniel Thalmann. 2001. &amp;#8220;Hierarchical Model for Real Time Simulation of Virtual Human Crowds.&amp;#8221; Transactions on Visualization and Computer Graphics 7(2):152-164.&lt;/li&gt;

&lt;li&gt;Peters, Christopher, Cathy Ennis, and Carol O&amp;#8217;Sullivan. 2009. &amp;#8220;Modeling groups of plausible virtual pedestrians.&amp;#8221; IEEE Computer Graphics and Applications 29(4):54&amp;#8211;63.&lt;/li&gt;

&lt;li&gt;Pottinger, Dave. 1999. &amp;#8220;Implementing Coordinated Movement.&amp;#8221; Gamasutra. Retrieved April 20, 2011 (&lt;a href=&#39;http://www.gamasutra.com/view/feature/3314/implementing_coordinated_movement.php?print=&#39;&gt;http://www.gamasutra.com/view/feature/3314/implementing_coordinated_movement.php?print=&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Qiu, Fasheng, Xiaolin Hu, Xue Wang, and Saurav Karmakar. 2010. &amp;#8220;Modeling social group structures in pedestrian crowds.&amp;#8221; Simulation Modelling Practice and Theory 18:190-205.&lt;/li&gt;

&lt;li&gt;Schuerman, Matthew, Shawn Singh, Mubbasir Kapadia, and Petros Faloutsos. 2010. &amp;#8220;Situation agents: agent-based externalized steering logic.&amp;#8221; in International Conference on Computer Animation and Social Agents, 2010.&lt;/li&gt;

&lt;li&gt;van den Berg, Jur, Ming C Lin, and Dinesh Manocha. 2008. &amp;#8220;Reciprocal Velocity Obstacles for real-time multi-agent navigation.&amp;#8221; International Conference on Robotics and Automation 1928&amp;#8211;1935.&lt;/li&gt;
&lt;/ul&gt;
      </description>
    </item>
    
    <item>
      <title>How simple rules determine pedestrian behavior and crowd disasters</title>
      <link>http://www.crowdscontrol.net/how-simple-rules-determine-pedestrian-behavio</link>
      <pubDate>Tue, 14 Jun 2011 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/how-simple-rules-determine-pedestrian-behavio</guid>
      <description>
        &lt;p&gt;Reading french magazine Marianne this week-end, I was intrigued by a small short talking about the work of two CNRS researchers on crowd dynamics.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;Loutil autibousculade&#39; src=&#39;/images/posts/2011/antibousculade.jpeg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;Knowing the prior work of those two researchers (Medhi Moussaïd and Guy Theraulaz), in particular on small social groups (see my &lt;a href=&#39;/pages/group-navigation.html&#39;&gt;group navigation state-of-the-art report&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This article present an cognitive science approach to autonomous navigation based on observation and experimentation. It is quite similar to some of &lt;a href=&#39;http://www.irisa.fr/bunraku/GENS/jpettre/pdf/SCA2009.pdf&#39;&gt;Julien Pettré&amp;#8217;s work&lt;/a&gt;. To compute the motion of entities, the presented model relies on two simple heuristics computing the direction and the speed of the movement depending on the distance to collision for the available directions. To this &amp;#8220;intentionnal&amp;#8221; movements, a contact force is added to take into account the occurence of unavoidable collision in high density cases. This addition is interesting as it save the main model from handling those difficult cases ; I should try this!&lt;/p&gt;

&lt;p&gt;In the prior art section, the authors compare heuristic base model (such as theirs) to force base model (such as the social forces by Dirk Helbing, on of the authors). They say, and having implemented social forces I agree, that these models are hard to tune and ahve inherent flaws because they model reaction of one-on-one interactions and doesn&amp;#8217;t provide a valid solution to combine those forces. Those models are alos very dependent on the framerate due to their integrative nature. This prior art section is really incomplete though, they doesn&amp;#8217;t talk about other experiment based models (such as Julien Pettré&amp;#8217;s) nor about geometric methods which are really popular (RVO and co.). Their method is not compared to these approaches. I&amp;#8217;ll read &lt;a href=&#39;href=&amp;quot;http://mehdimoussaid.com/TheseMoussaid.pdf&#39;&gt;Medhi Moussaïd Phd Thesis&lt;/a&gt; (in french) to see if the comparison work is done in it.&lt;/p&gt;

&lt;p&gt;Anyway, and to go back to Marianne&amp;#8217;s article, I&amp;#8217;m impressed by the communication work that&amp;#8217;s been done as they&amp;#8217;re cited by general public press (another article in &lt;a href=&#39;http://www.lesechos.fr/innovation/technologies/0201429911498-un-nouveau-modele-de-simulation-de-foules-175868.php&#39;&gt;Les Echos&lt;/a&gt; was just published)!&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Group navigation state-of-the-art report - Part 2, Stay Grouped!</title>
      <link>http://www.crowdscontrol.net/group-navigation-state-of-the-art-report-part-0</link>
      <pubDate>Thu, 19 May 2011 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/group-navigation-state-of-the-art-report-part-0</guid>
      <description>
        &lt;p&gt;&lt;em&gt;The full article is available &lt;a href=&#39;/group-navigation-state-of-the-art-report&#39;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&#39;stay_grouped&#39;&gt;Stay grouped!&lt;/h2&gt;

&lt;p&gt;In order to get a valid simulation of group navigation we first have to design the behavior of the group members. In this part we&amp;#8217;ll study two families of methods to obtain groups: using local rules or following a designed formation. Finally we&amp;#8217;ll focus on how a member&amp;#8217;s individual navigation behavior is affected when part of a group.&lt;/p&gt;

&lt;h3 id=&#39;emergence&#39;&gt;Emergence&lt;/h3&gt;

&lt;p&gt;In most modern navigation engine, the simulated entities are autonomous, their behavior rely on their local &amp;#8220;perception&amp;#8221; to take action not on an external choreographer. With this approach in mind, several works relies on decentralized behavior to enforce group constraints.&lt;/p&gt;

&lt;h4 id=&#39;flocking&#39;&gt;Flocking&lt;/h4&gt;

&lt;p&gt;&lt;img alt=&#39;Reynolds flocking steering behaviors&#39; src=&#39;/images/posts/2011/flocking-steering-behaviors.jpg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;At the core of Reynolds&amp;#8217; work (Reynolds 1987; 1999), three steering behaviors allows entities to flock. For any given entity in the group, separation makes him move apart too close neighbors, alignment makes him go in the same direction as other members and cohesion makes him move towards the group&amp;#8217;s COM (center of mass). These simple behaviors allow the emergence of a flock. Others took inspiration from this work and adapt it to their architecture using voting steering behaviors (Hostetler and Kearney 2002) or relying on specific environment abstraction such as grids (Loscos, Marchal, and Meyer 2003) or roadmaps (O Burchan Bayazit, Lien, and Amato 2003; Kamphuis and Overmars 2004).&lt;/p&gt;

&lt;h4 id=&#39;social_relations&#39;&gt;Social relations&lt;/h4&gt;

&lt;p&gt;In his recent paper, Moussaïd (Moussaïd et al. 2010), extends the social force model (Helbing, Farkas, and Vicsek 2000) to obtain flocking as well as more structured small formation introducing a communication force. The gaze of group members is attracted by the center of interest of the group; here its center of mass (COM) is used. The communication force tries to limit the gaze deviation by decelerating the entity thus enabling the observed V-like formation (cf. part 1).&lt;/p&gt;

&lt;p&gt;In order to take into account social relations between members of the group, Qiu uses a member-to-member influence matrix (Qiu et al. 2010). This matrix is taken into account when computing the attraction between members of the group. This approach allows the definition of one or more attractive (or repulsive) members of the group such as more talkative persons or tourist guides.&lt;/p&gt;

&lt;h4 id=&#39;more_rigid_formations&#39;&gt;More rigid formations&lt;/h4&gt;

&lt;p&gt;&lt;img alt=&#39;Attachment sites&#39; src=&#39;/images/posts/2011/attachment-sites.jpg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;Local rules can also exhibit a more strict formation. Taking inspiration from molecular crystals, Balch and Hybinette designed the attachment sites method (Balch and Hybinette 2000). Each entity, given its desired formation, computes several attachment sites on its neighbors and steers to reach the nearest available. The resulting formation arrangement is a direct result of the attachment sites position and it can scale to any number of group members. But as the attachment rules are local, no control on the formation overall shape is possible.&lt;/p&gt;

&lt;h3 id=&#39;choreography&#39;&gt;Choreography&lt;/h3&gt;

&lt;p&gt;While groups whose members are implementing local rules can exhibit convincing behavior, they can&amp;#8217;t take into account the group as a whole and thus are not fully controllable. If an exact group arrangement is needed, some of the behavior must be deported to an upper level of control (Musse and Thalmann 2001). In this part we&amp;#8217;ll study the three features needed to make a group stay in a given formation: the formation design, the slot assignment and the formation hold.&lt;/p&gt;

&lt;h4 id=&#39;design&#39;&gt;Design&lt;/h4&gt;

&lt;p&gt;A formation is basically a list of slots to which members of the group will be assigned. As we focus on pedestrian navigation, a slot is basically a 2D position relative to the group &amp;#8220;center&amp;#8221;. In a military context two properties of the slot must be added, as we saw in part 1: the orientation and the role (i.e which kind of entity should be assigned to this slot).&lt;/p&gt;

&lt;p&gt;Such a formation definition can be designed manually following military principles or artistic concerns (Dawson 2002). Another approach has been taken by Karamouzas and Overmars (Karamouzas and Overmars 2010), they extracted from the data collected by Moussaïd et al. (Moussaïd et al. 2010) a set of typical formations for small social groups of 2 to 4 members. The following figure shows the three kinds of formations they get for groups of 3; similar formations are obtained for groups of 2 or 4.&lt;/p&gt;

&lt;h4 id=&#39;assign&#39;&gt;Assign&lt;/h4&gt;

&lt;p&gt;We now assume the formation design is chosen and defines as many slots as group members; if not, simple techniques can be used to select the used slots or create needed slots (Silveira, Prestes, and Nedel 2008). The next needed step before our entities can navigate as a group, is to assign each of them to a slot. This part might seem trivial but should be implemented right to avoid destroying the simulation credibility with traffic jams between members of the same groups.&lt;/p&gt;

&lt;p&gt;Implementation-oriented papers (Dawson 2002; Millington 2006) describe different solutions and their quality. As everyone should expect, random or index-based (ith members with ith slot) assignment are most of the time really bad: the entities might have to cross each others and to circle around the group to get to their slot. To avoid this bad result, one solution could be to, sequentially assign to each entity, its closest free spot, this solution is easy to implement and might work but last entities might end up to far slots as the closest one are already taken. The best solutions would be to globally minimize the distance the entities are covering to get to their slots but its implementation would lead to an &lt;em&gt;O(n!)&lt;/em&gt; complexity as every permutation would have to be tested.&lt;/p&gt;

&lt;p&gt;One solution to get a good result and keep a good complexity is a two steps process. First compute for each members of the group what is their cost to be assigned to which slot, allowing certain slot to be specialized for certain entity roles. Then, from the most expensive to assign to the cheapest assign entities to their preferred available slot. This solution might fail to get the optimal assignment but should have decent result while keeping a low complexity &lt;em&gt;O(n2)&lt;/em&gt; (Millington 2006).&lt;/p&gt;

&lt;p&gt;Another solution works only when no specialized slots are defined. Given a formation design, first sort the slots spatially; for a horizontal line formation, the slot might be sorted from left to right along a horizontal vector. Then sort the group members in the same way; finally assign the ith entity to the ith slot (Dawson 2002).&lt;/p&gt;

&lt;h4 id=&#39;maintain&#39;&gt;Maintain&lt;/h4&gt;

&lt;p&gt;The formation being built, entities are able to reach their slots and to arrange into the designed formation. Let&amp;#8217;s see how they are able to maintain it while the group is moving.&lt;/p&gt;

&lt;p&gt;In earlier work (Pottinger 1999), a simplistic approach is taken: once part of a formation, entities are no longer responsible for their steering, their position is set at each time step according to the formation. This solution is fine if the group steering (cf. part 3) is robust enough to handle the desired level of collision avoidance.&lt;/p&gt;

&lt;p&gt;Using the latter solution, the members do not have an own steering behavior: it is difficult to get anything but a strictly followed formation. To allow formations of individuals, several works uses a more loose approach, members are given a local goal to reach in order to stay in formation and are in charge of fulfilling this goal. A simple approach is to provide each member with a simple &amp;#8220;reach target&amp;#8221; steering behavior where the target is its slot&amp;#8217;s future position (Karamouzas and Overmars 2010; Schuerman et al. 2010). This approach works better if the slots are within navigable space as shown in Schuerman et al. videos. To avoid this problem, Silveira, Prestes and Nedel define a group potential map using slots as attractors and obstacles as repulsors thus providing to members a velocity that maintain the formation while keeping a smooth path when obstacle are present. It allows entity to break formation to pass through tight corridors and around small obstacles (Silveira et al. 2008).&lt;/p&gt;

&lt;h3 id=&#39;group_members_steering&#39;&gt;Group members steering&lt;/h3&gt;

&lt;p&gt;Whether the group is a flock or a formation, the individual steering behaviors, the collision avoidance in particular, of its members has to be considered. We&amp;#8217;ve seen that in some case the individual steering behaviors are disabled (Pottinger 1999). In most work though, the group navigation is designed to work in conjunction with its members&amp;#8217;, the main problematic is to blend the individual behavior with the group orders.&lt;/p&gt;

&lt;p&gt;In some architecture, each entity has several independent behaviors producing different steering orders that are blended together using weight and priorities. In this kind of approach the group orders are executed by another behavior and are part of the final blend (Moussaïd et al. 2010; Qiu 2010; Hostetler and Kearney 2002).&lt;/p&gt;

&lt;p&gt;In most modern architecture, a pipeline of behaviors produce a steering order each element taking the previous into account while enforcing new constraints or orders, the last one being collision avoidance (Golaem n.d.; Mononen 2010). The group orders are implemented as a part of this pipeline, they are fed to the following elements among which the collision avoidance (Karamouzas and Overmars 2010b; Silveira et al. 2008).&lt;/p&gt;

&lt;p&gt;Schuerman et al. state that while the same collision avoidance behavior can be used by the entities when they are part of a group, it must be adapted. As a matter of fact, collision avoidance algorithms such as RVO (Van den Berg et al. 2008) try to enforce a safe distance to obstacles and other entities that might forbid tight formations. A &amp;#8220;boldness&amp;#8221; factor is introduced controlling how likely an entity is to yield to other entities during steering. When a strict formation is desired the &amp;#8220;boldness&amp;#8221; factor of its members is set high making them only try to avoid imminent collisions (Schuerman et al. 2010).&lt;/p&gt;

&lt;h2 id=&#39;bibliography&#39;&gt;Bibliography&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Balch, Tucker, and Maria Hybinette. 2000. &amp;#8220;Social potentials for scalable multi-robot formations.&amp;#8221; Pp. 73-80 in IEEE International Conference on Robotics and Automation, vol. 1. San Francisco Retrieved (&lt;a href=&#39;http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=844042&#39;&gt;http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=844042&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Bayazit, O Burchan, Jyh-Ming Lien, and Nancy M Amato. 2003. &amp;#8220;Better group behaviors in complex environments using global roadmaps.&amp;#8221; Pp. 362-370 in 8th International conference on Artificial Life.&lt;/li&gt;

&lt;li&gt;Dawson, Chad. 2002. &amp;#8220;Formations.&amp;#8221; Pp. 272-282 in AI Game Programming Wisdom, Steve Rabinedited by. Charles River Media Retrieved (&lt;a href=&#39;http://introgamedev.com/resource_aiwisdom.html&#39;&gt;http://introgamedev.com/resource_aiwisdom.html&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Golaem. n.d. &amp;#8220;Golaem Path.&amp;#8221; Retrieved (&lt;a href=&#39;http://www.golaem.com/content/products/golaem-sdk/features&#39;&gt;http://www.golaem.com/content/products/golaem-sdk/features&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Helbing, Dirk, Illés Farkas, and Tam&amp;#225;s Vicsek. 2000. &amp;#8220;Simulating dynamical features of escape panic.&amp;#8221; Nature (407):487-490.&lt;/li&gt;

&lt;li&gt;Hostetler, Terry R, and Joseph K Kearney. 2002. &amp;#8220;Strolling down the avenue with a few close friends.&amp;#8221; Pp. 7-14 in Third Eurographics Irish Workshop on Computer Graphics. Dublin.&lt;/li&gt;

&lt;li&gt;Kamphuis, Arno, and Mark H Overmars. 2004. &amp;#8220;Finding paths for coherent groups using clearance.&amp;#8221; Pp. 19-28 in 2004 ACM SIGGRAPH/Eurographics symposium on Computer Animation.&lt;/li&gt;

&lt;li&gt;Karamouzas, Ioannis, and Mark H Overmars. 2010b. &amp;#8220;Simulating the local behaviour of small pedestrian groups.&amp;#8221; Pp. 183-190 in 17th ACM Symposium on Virtual Reality Software and Technology. Hong Kong.&lt;/li&gt;

&lt;li&gt;Loscos, Céline, David Marchal, and Alexandre Meyer. 2003. &amp;#8220;Intuitive Crowd Behaviour in Dense Urban Environments using Local Laws.&amp;#8221; Proceedings of the Theory and Practice of Computer Graphics 122.&lt;/li&gt;

&lt;li&gt;Millington, Ian. 2006. &amp;#8220;Movement.&amp;#8221; Pp. 41-202 in Artificial intelligence for games, David H Eberlyedited by. Morgan Kaufmann.&lt;/li&gt;

&lt;li&gt;Mononen, Mikko. 2010. &amp;#8220;Navigation Loop.&amp;#8221; Paris Game/AI Conference 2010. Retrieved (&lt;a href=&#39;http://digestingduck.blogspot.com/2010/07/my-paris-game-ai-conference.html&#39;&gt;http://digestingduck.blogspot.com/2010/07/my-paris-game-ai-conference.html&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Moussaïd, Mehdi, Niriaska Perozo, Simon Garnier, Dirk Helbing, and Guy Theraulaz. 2010. &amp;#8220;The Walking Behaviour of Pedestrian Social Groups and Its Impact on Crowd Dynamics&amp;#8221; Giuseppe Chiricoedited by. PLoS ONE 5(4):e10047.&lt;/li&gt;

&lt;li&gt;Musse, Soraia Raupp, and Daniel Thalmann. 2001. &amp;#8220;Hierarchical Model for Real Time Simulation of Virtual Human Crowds.&amp;#8221; Transactions on Visualization and Computer Graphics 7(2):152-164.&lt;/li&gt;

&lt;li&gt;Pottinger, Dave. 1999. &amp;#8220;Implementing Coordinated Movement.&amp;#8221; Gamasutra. Retrieved April 20, 2011 (&lt;a href=&#39;http://www.gamasutra.com/view/feature/3314/implementing_coordinated_movement.php?print=1&#39;&gt;http://www.gamasutra.com/view/feature/3314/implementing_coordinated_movement.php?print=1&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Qiu, Fasheng, Xiaolin Hu, Xue Wang, and Saurav Karmakar. 2010. &amp;#8220;Modeling social group structures in pedestrian crowds.&amp;#8221; Simulation Modelling Practice and Theory 18:190-205.&lt;/li&gt;

&lt;li&gt;Reynolds, Craig W. 1987. &amp;#8220;Flocks, herds and schools: A distributed behavioral model.&amp;#8221; Pp. 25-34 in 1987 International Conference and Exhibition on Computer Graphics and Interactive Techniques, vol. 21.&lt;/li&gt;

&lt;li&gt;Reynolds, Craig W. 1999. &amp;#8220;Steering behaviors for autonomous characters.&amp;#8221; Game Developers Conference 1999.&lt;/li&gt;

&lt;li&gt;Schuerman, Matthew, Shawn Singh, Mubbasir Kapadia, and Petros Faloutsos. 2010. &amp;#8220;Situation agents: agent-based externalized steering logic.&amp;#8221; in International Conference on Computer Animation and Social Agents, 2010.&lt;/li&gt;

&lt;li&gt;Silveira, Renato, Edson Prestes, and Luciana P Nedel. 2008. &amp;#8220;Managing coherent groups&amp;#8221; Gerard J Kim, Hong Qin, and Nadia Magnenat-Thalmannedited by. Computer Animation And Virtual Worlds 19(3-4):295-305.&lt;/li&gt;
&lt;/ul&gt;
      </description>
    </item>
    
    <item>
      <title>Group navigation state-of-the-art report - Part 1, Introduction and Taxonomy</title>
      <link>http://www.crowdscontrol.net/group-navigation-state-of-the-art-report-part</link>
      <pubDate>Sun, 08 May 2011 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/group-navigation-state-of-the-art-report-part</guid>
      <description>
        &lt;p&gt;&lt;em&gt;The full article is available &lt;a href=&#39;/group-navigation-state-of-the-art-report&#39;&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&#39;introduction&#39;&gt;Introduction&lt;/h2&gt;

&lt;p&gt;Autonomous human-like characters being able to navigate in a 3D environment finding their paths and avoiding collisions while exhibiting a convincing behavior is now fairly common. The popularity and the quality of recent work (Van den Berg, Lin, and Manocha 2008; Pettré et al. 2009; Ondrej et al. 2010; Mononen 2010) shows that the simulation of hundreds of navigating entities is now within the reach of almost everyone. But most of these work focus on simulating lonely entities taking their neighbors into account only to avoid collisions. Like real ones, our virtual humans should be able to walk down the road with their group of friends. Like real ones, our virtual soldiers must be able to march on enemy positions while staying in formation. And like real ones, our virtual tourists have to be able to enjoy their tour of the Mont Saint-Michel following their guide&amp;#8217;s umbrella.&lt;/p&gt;

&lt;p&gt;Before we start designing and implementing group navigation behaviors in Golaem Path (Golaem n.d.), let&amp;#8217;s first see what others have done. This document is a state-of-the-art study of existing work concerning group and formations navigation with a focus on algorithms and implementations. The first part defines the different categories of navigating groups we&amp;#8217;re interested in. The second part focuses on how the group members can stay grouped or in formation during navigation. The third and last part talks about the group&amp;#8217;s navigation from path planning to steering and collision avoidance.&lt;/p&gt;

&lt;h2 id=&#39;taxonomy&#39;&gt;Taxonomy&lt;/h2&gt;

&lt;p&gt;Before we talk velocity, steering behaviors and gradient descent, let&amp;#8217;s first present the kind of groups we&amp;#8217;re trying to make navigate, their characteristics and their constraints. In this part we&amp;#8217;ll divide navigating groups in three categories, flocks, formations and small groups resulting of social influences.&lt;/p&gt;

&lt;h3 id=&#39;flocks&#39;&gt;Flocks&lt;/h3&gt;

&lt;p&gt;&lt;img alt=&#39;Sheeps herd&#39; src=&#39;/images/posts/2011/sheeps-herd.jpg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;A flock is primarily a group of bird traveling together but it can be applied to other animal species as well as humans (e.g. a flock of school children is crossing the street to the swimming pool). Entities in a flock travel at roughly the same speed and form a cohesive group without strict arrangement. In what must be the two most cited articles in the field (Reynolds 1987; 1999), Reynolds studied empirically how flocks members move relatively to each others. With simple behaviors he was able to recreate a flock of autonomous entities, we&amp;#8217;ll dig into more details in part 2.&lt;/p&gt;

&lt;h3 id=&#39;formation&#39;&gt;Formation&lt;/h3&gt;

&lt;p&gt;&lt;img alt=&#39;Bastille day&#39; src=&#39;/images/posts/2011/bastille-day.jpg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;While flocks do not follow more rules than the cohesion of the group, formations are a kind of group arrangement where members need to enforce strict rules. Both in a combat or a parade, the spatial arrangement, i.e. the relative positions of members, is designed for a precise purpose, tactic or aesthetic; it is the first rule that needs to be followed. Secondly, in a combat context, formation gets much of its usefulness from overlapping fields of fire and sight, that&amp;#8217;s why the orientation is another rule to be followed (Dawson 2002). The last rule is to assign entities having the right role to the right slot: archers at the back, footsoldiers facing the enemy. As navigation and military simulation are important for real time strategy games, interesting and working solutions has been developed early: Dave Pottinger, who worked on the Age of Empire series, presented his in a Gamasutra article (Pottinger 1999).&lt;/p&gt;

&lt;h3 id=&#39;small_social_groups&#39;&gt;Small Social Groups&lt;/h3&gt;

&lt;p&gt;&lt;img alt=&#39;Groups of 2, 3 and 4 from video corpus&#39; src=&#39;/images/posts/2011/social-groups.jpg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;Beyond amorphous flocks and rigid military formations, groups that are more common in our everyday life are small and their spatial configuration is the result of social factors and crowd density. Two recent survey focuses on those small social groups (Moussaïd et al. 2010; Peters, Ennis, and O&amp;#8217;Sullivan 2009), they lead to the same conclusions.&lt;/p&gt;

&lt;p&gt;The two studies were conducted from videos taken at public spaces (in France and Ireland). Their observations show that: there are more groups than single pedestrians, groups of more than four are very rare and most of the groups are, indeed, pairs.&lt;/p&gt;

&lt;p&gt;More interesting, it appears the formation adopted by the observed groups is influenced both by the lateral clearance to nearby obstacles and by the social interaction between members of the group. When motion is not constrained (i.e. when obstacles are far and the crowd density is low) a group tends to adopt an abreast formation that facilitates dialog between its members. When facing navigation constraints, to reduce its frontal width, the group compact the formation. And when the lateral space between each member become too thin, i.e. when members are shoulder-to-shoulder, the formation is staggered. The bending of the group is, most of the time, forward (V-like formation) to maintain good communication when a backward bending (inversed-V-like or wedge formation) would be more flexible moving against an opposite flow.&lt;/p&gt;

&lt;p&gt;Finally, while groups tend to avoid collisions, with other pedestrians or with obstacles, as a whole they are able to split if needed merging back afterwards.&lt;/p&gt;

&lt;h2 id=&#39;bibliography&#39;&gt;Bibliography&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Dawson, Chad. 2002. &amp;#8220;Formations.&amp;#8221; Pp. 272-282 in AI Game Programming Wisdom, Steve Rabinedited by. Charles River Media Retrieved (&lt;a href=&#39;http://introgamedev.com/resource_aiwisdom.html&#39;&gt;http://introgamedev.com/resource_aiwisdom.html&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Golaem. n.d. &amp;#8220;Golaem Path.&amp;#8221; Retrieved (&lt;a href=&#39;http://www.golaem.com/content/products/golaem-sdk/features&#39;&gt;http://www.golaem.com/content/products/golaem-sdk/features&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Mononen, Mikko. 2010. &amp;#8220;Navigation Loop.&amp;#8221; Paris Game/AI Conference 2010. Retrieved (&lt;a href=&#39;http://digestingduck.blogspot.com/2010/07/my-paris-game-ai-conference.html&#39;&gt;http://digestingduck.blogspot.com/2010/07/my-paris-game-ai-conference.html&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Moussaïd, Mehdi, Niriaska Perozo, Simon Garnier, Dirk Helbing, and Guy Theraulaz. 2010. &amp;#8220;The Walking Behaviour of Pedestrian Social Groups and Its Impact on Crowd Dynamics&amp;#8221; Giuseppe Chiricoedited by. PLoS ONE 5(4):e10047.&lt;/li&gt;

&lt;li&gt;Ondrej, Jan, Julien Pettré, Anne-Hélene Olivier, and Stéphane Donikian. 2010. &amp;#8220;A synthetic-vision based steering approach for crowd simulation.&amp;#8221; in The 37th International Conference and Exhibition on Computer Graphics and Interactive Techniques.&lt;/li&gt;

&lt;li&gt;Peters, Christopher, Cathy Ennis, and Carol O&amp;#8217;Sullivan. 2009. &amp;#8220;Modeling groups of plausible virtual pedestrians.&amp;#8221; IEEE Computer Graphics and Applications 29(4):54-63.&lt;/li&gt;

&lt;li&gt;Pettré, Julien, Jan Ondrej, Anne-Hélene Olivier, Armel Crétual, and Stéphane Donikian. 2009. &amp;#8220;Experiment-based Modeling, Simulation and Validation of Interactions between Virtual Walkers.&amp;#8221; Symposium on Computer animation 1-10.&lt;/li&gt;

&lt;li&gt;Pottinger, Dave. 1999. &amp;#8220;Implementing Coordinated Movement.&amp;#8221; Gamasutra. Retrieved April 20, 2011 (&lt;a href=&#39;http://www.gamasutra.com/view/feature/3314/implementing_coordinated_movement.php?print=1&#39;&gt;http://www.gamasutra.com/view/feature/3314/implementing_coordinated_movement.php?print=1&lt;/a&gt;).&lt;/li&gt;

&lt;li&gt;Reynolds, Craig W. 1987. &amp;#8220;Flocks, herds and schools: A distributed behavioral model.&amp;#8221; Pp. 25-34 in 1987 International Conference and Exhibition on Computer Graphics and Interactive Techniques, vol. 21.&lt;/li&gt;

&lt;li&gt;Reynolds, Craig W. 1999. &amp;#8220;Steering behaviors for autonomous characters.&amp;#8221; Game Developers Conference 1999.&lt;/li&gt;

&lt;li&gt;Van den Berg, Jur, Ming C Lin, and Dinesh Manocha. 2008. &amp;#8220;Reciprocal Velocity Obstacles for real-time multi-agent navigation.&amp;#8221; International Conference on Robotics and Automation 1928-1935.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#39;other_resources&#39;&gt;Other resources&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sheep herd photography taken from &lt;a href=&#39;http://flic.kr/p/Yuy89&#39;&gt;http://flic.kr/p/Yuy89&lt;/a&gt;.&lt;/li&gt;

&lt;li&gt;Bastille Day military parade photography taken from &lt;a href=&#39;http://flic.kr/p/57KrxH&#39;&gt;http://flic.kr/p/57KrxH&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
      </description>
    </item>
    
    <item>
      <title>Golaem Crowd launch</title>
      <link>http://www.crowdscontrol.net/golaem-crowd-launches</link>
      <pubDate>Sat, 09 Apr 2011 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/golaem-crowd-launches</guid>
      <description>
        &lt;p&gt;&lt;img alt=&#39;Golaem Crowd&#39; src=&#39;/images/posts/2011/alesia.jpeg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;For the past few months we&amp;#8217;ve been working at Golaem on our new product: Golaem Crowd, a Maya plugin dedicated to crowd simulation for the VFX and animation market. While I didn&amp;#8217;t work on the Maya integration, my work on Golaem Path (navigation mesh generation and navigation behaviors) is a major part of the software and provides much added value.&lt;/p&gt;

&lt;p&gt;For the past hours lots of &lt;a href=&#39;http://www.vizworld.com/2011/04/golaem-launches-golaem-crowd-fmx/&#39;&gt;vfx&lt;/a&gt; &lt;a href=&#39;http://www.cgrecord.net/2011/04/golaem-crowd-for-autodesk-maya-released.html&#39;&gt;news&lt;/a&gt; &lt;a href=&#39;http://www.cgchannel.com/2011/04/golaem-launches-new-high-end-crowd-simulator/&#39;&gt;sites&lt;/a&gt; covered the launch and the generated buzz is &lt;a href=&#39;http://twitter.com/#!/search/golaem%20crowd&#39;&gt;pretty amazing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For further information, check &lt;a href=&#39;http://www.golaem.com/crowd&#39;&gt;www.golaem.com/crowd&lt;/a&gt;.&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Artificial intelligence for games by Ian Millington</title>
      <link>http://www.crowdscontrol.net/mjklaim-ive-got-this-one-in-fact-im-trying-to</link>
      <pubDate>Fri, 25 Feb 2011 00:00:00 -0800</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/mjklaim-ive-got-this-one-in-fact-im-trying-to</guid>
      <description>
        &lt;p&gt;&lt;a href=&#39;http://twitter.com/mjklaim&#39;&gt;@MJKlaim&lt;/a&gt; i&amp;#8217;ve got this one. In fact, im trying to get an overview on what&amp;#8217;s actually implemented in the real world.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;Artificial Intelligence for games&#39; src=&#39;/images/posts/2011/artificial-intelligence-for-games.jpeg&#39; /&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>"Founders at work": testimonials from the history of IT</title>
      <link>http://www.crowdscontrol.net/founders-at-work-testimonials-from-the-histor</link>
      <pubDate>Mon, 03 Jan 2011 00:00:00 -0800</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/founders-at-work-testimonials-from-the-histor</guid>
      <description>
        &lt;p&gt;I&amp;#8217;ve finished reading &lt;a href=&#39;http://www.foundersatwork.com/&#39;&gt;&amp;#8220;Founders at work&amp;#8221;&lt;/a&gt; by Jessica Livingston during the past holidays. It&amp;#8217;s been a very interesting read. There&amp;#8217;s two reasons why I liked this book.&lt;/p&gt;

&lt;p&gt;First, it is a valuable resource concerning IT History, a topic I am fond of. As a matter of fact I think anyone should know well the history of his field of expertise. The lack of chronological references in the computer science courses I followed at school didn&amp;#8217;t allow me to understand properly how and why technologies (languages, hardware architectures&amp;#8230;) rises and falls.&lt;/p&gt;

&lt;p&gt;Second, this books shows that there&amp;#8217;s no magic recipe for a successful product or business. Some founders are technology enthusiasts, some are driven by money only, some wanted to succeed, some just wanted to have fun. This results in very different companies almost all achieving some success.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;Founders at work&#39; src=&#39;/images/posts/2011/founders-at-work.jpeg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s a particular excerpt I particularly liked from the interview of Philip Greenspun, co-founder of ArsDigita, it sums up what are my thought on the job of software engineer (and why I insist not to be a programmer).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To my mind, a programmer is not an engineer, because an engineer is somebody who starts with a social problem that an organization or a society has and says, &amp;#8220;OK, here&amp;#8217;s this problem that we have - how can we solve it?&amp;#8221; The engineer comes up with a clever, cost-effective solution to address that problem, builds it, tests it to make sure it solves the problem. That&amp;#8217;s engineering. If you look at civil engineers, architects, they&amp;#8217;re all dealing directly with the customer and going through the whole process.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[&amp;#8230;]&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I want them [computer science students] to be able to sit with the publisher of an online community or an e-commerce site and say &amp;#8220;OK, I&amp;#8217;ve looked at your business and your goals; here are some ideas that we can bring in from these 10 other sites that I built, these 100 other sites that I&amp;#8217;ve used.&amp;#8221; And be an equal partner in the design, not just a coder.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[&amp;#8230;]&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I was very careful about trying to encourage these people to have an independent professional reputation, so there&amp;#8217;s code that had their name on it and that they took responsibility for, documentation that explained what problem they were trying to solve, what alternatives they considered, what the strengths and limitations of this particular implementation that they were releasing were, maybe a white paper on what lessons they learned from a project. I tried to get the programmers to write &lt;em&gt;[&amp;#8230;]&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
      </description>
    </item>
    
    <item>
      <title>The most relevant entry point on computational geometry I know</title>
      <link>http://www.crowdscontrol.net/mikkomononen-im-currently-reading-this-book-t</link>
      <pubDate>Fri, 10 Dec 2010 00:00:00 -0800</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/mikkomononen-im-currently-reading-this-book-t</guid>
      <description>
        &lt;p&gt;&lt;em&gt;Originally a response to &lt;a href=&#39;https://twitter.com/mikkomononen&#39;&gt;@MikkoMononen&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;The Dutch Book&#39; src=&#39;/images/posts/2010/the-dutch-book.jpg&#39; /&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>On crowd simulation validation</title>
      <link>http://www.crowdscontrol.net/on-crowd-simulation-validation</link>
      <pubDate>Wed, 01 Dec 2010 00:00:00 -0800</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/on-crowd-simulation-validation</guid>
      <description>
        &lt;p&gt;&lt;em&gt;This is a response to Mikko&amp;#8217;s &lt;a href=&#39;http://digestingduck.blogspot.com/2010/12/style-vs-technique.html&#39;&gt;latest post&lt;/a&gt; in more than 140 characters&amp;#8230;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Autonomous agents navigation is a very wide topic applied to a wide range of specific domains: Military simulation, public spaces design, games, CG FX and animation, training&amp;#8230; Each of these fields has its definitions of a &lt;em&gt;valid&lt;/em&gt; human-like characters and while the artistic aspect is very important in games or animation it is not for military simulations for exemple. Validations methods are numerous and each is suited for a few parameters only: - Motion captured data in labs can be used to check agents trajectories and velocities in various scenarios (cf. &lt;a href=&#39;http://www.irisa.fr/bunraku/GENS/jpettre/&#39;&gt;Julien Pettré work&lt;/a&gt;);&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;Navigation motion capture&#39; src=&#39;/images/posts/2010/validation-bunraku.jpeg&#39; /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Survey can evaluate various visual aspects of virtual humans (cf. &lt;a href=&#39;http://gv2.cs.tcd.ie/mcdonner/&#39;&gt;Rachel McDonnell work&lt;/a&gt;);&lt;/li&gt;

&lt;li&gt;Real world video footage can be treated to validate a simulation output;&lt;/li&gt;

&lt;li&gt;Hand measured flows (e.g. number of pedestrians per minutes passing through a door) can validate some aspects too;&lt;/li&gt;

&lt;li&gt;but most of the time though, the only validation is the expert&amp;#8217;s opinion (movie director, military instructor&amp;#8230;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyway, in the end, for real-time use cases, validity comes in consideration only after CPU/GPU/memory usage&amp;#8230;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>CASA 2010 report (part 2)</title>
      <link>http://www.crowdscontrol.net/casa-2010-report-part-2</link>
      <pubDate>Tue, 30 Nov 2010 00:00:00 -0800</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/casa-2010-report-part-2</guid>
      <description>
        &lt;p&gt;I&amp;#8217;ve been pretty lazy on this blog this past months&amp;#8230; Anyway here&amp;#8217;s the end of the CASA report.&lt;/p&gt;

&lt;h2 id=&#39;crowd_simulation_workshop&#39;&gt;Crowd Simulation Workshop&lt;/h2&gt;

&lt;p&gt;There was many presentations during that day, more or less interesting, a few of them staid in my mind since then. The first one was titled &lt;em&gt;&amp;#8220;On the interface between steering and animation for autonomous characters&amp;#8221;&lt;/em&gt; and was presented by &lt;a href=&#39;http://www.cs.ucla.edu/~pfal/Petros_Faloutsos/Main.html&#39;&gt;Petros Faloutsos&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The authors worked on a problem that every one trying to work on autonomous characters has to face: how to obtain a smooth animation &lt;em&gt;AND&lt;/em&gt; an efficient steering behavior (particularly collision avoidance).&lt;/p&gt;

&lt;p&gt;As a matter of fact the two problematics are solved separately with, most of the time, a top-down approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the steering part is solved in 2D using sliding discs to represent entities, the decision being velocity changes;&lt;/li&gt;

&lt;li&gt;the animation engine then chooses the best motion to match the computed velocity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In &amp;#8216;dumb&amp;#8217; mode steering can compute velocities that are unattainable using available motion which results in foot sliding and awkward motions. When less dumb, steering has access to a velocity model describing which velocities are valid, this model can be provided directly from the animation engine. But in order to be manageable in terms of computation complexity, this velocity model is often simplistic and the animation problems still occur.&lt;/p&gt;

&lt;p&gt;The approach presented here is quite different, no more disc motion planning, but a footprint planner. Constrained by bio-mechanical rules expressing the distance between the two feet, their sizes as well as the pedestrian body size, the planner place footprints in order to reach a goal and avoid collision. The presented videos was impressive, but the &amp;#8216;real&amp;#8217; paper still have to be published, Faloutsos was talking about SIGGRAPH Asia but it &lt;a href=&#39;http://kesen.realtimerendering.com/siga2010Papers.htm&#39;&gt;seems&lt;/a&gt; they didn&amp;#8217;t make it.&lt;/p&gt;

&lt;p&gt;The following presentation I&amp;#8217;d like to focus on is Jan Ondrej &lt;em&gt;&amp;#8220;Collision avoidance from synthetic vision&amp;#8221;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Jan is a Phd Student working under the supervision of &lt;a href=&#39;http://www.irisa.fr/bunraku/GENS/jpettre/&#39;&gt;Julien Pettré&lt;/a&gt; in the &lt;a href=&#39;http://www.irisa.fr/bunraku/&#39;&gt;Bunraku&lt;/a&gt; research group, of which Golaem spun off. This presentation was in fact a real-conditions rehearsal of Jan SIGGRAPH presentation of &lt;a href=&#39;http://www.irisa.fr/bunraku/GENS/jpettre/pdf/SIGGRAPH2010.pdf&#39;&gt;his paper&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The presented work is quite unique, it propose to solve collision avoidance problem using vision algorithm. A low resolution render of simplified geometry is computed for each entity from its point of view, the result is used by a rather simple algorithm to compute a collision free velocity. And, yes, its quite efficient, and the resulting planning is good (perhaps too good to be human-like, though), anyway let&amp;#8217;s see the result.&lt;/p&gt;
&lt;object height=&#39;385&#39; id=&#39;embedded&#39; width=&#39;640&#39;&gt;
&lt;param name=&#39;movie&#39; value=&#39;http://www.youtube.com/v/586qhaDwr24?fs=1&amp;amp;hl=fr_FR&amp;amp;hd=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999&#39; /&gt;
&lt;param name=&#39;allowFullScreen&#39; value=&#39;true&#39; /&gt;
&lt;param name=&#39;allowscriptaccess&#39; value=&#39;always&#39; /&gt;&lt;embed height=&#39;385&#39; src=&#39;http://www.youtube.com/v/586qhaDwr24?fs=1&amp;amp;hl=fr_FR&amp;amp;hd=1&amp;amp;color1=0x3a3a3a&amp;amp;color2=0x999999&#39; type=&#39;application/x-shockwave-flash&#39; width=&#39;640&#39; /&gt;
&lt;/object&gt;
&lt;p&gt;My major take away on this is the inherent advantage of this kind of vision based algorithm: visibility occlusions handling for free (entities hiding each other, walls of difference heights&amp;#8230;). What is costly using traditional geometry queries is almost free here thanks to the render phase. I hope I&amp;#8217;ll be able to experiment with this soon !&lt;/p&gt;

&lt;p&gt;The rest of the workshop features other interesting talk about various aspects of crowd simulations including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An overview of &lt;a href=&#39;http://www.legion.com/legion-software&#39;&gt;Legion&lt;/a&gt; software;&lt;/li&gt;

&lt;li&gt;A presentation of the work done by Disney Imagineering R&amp;amp;D department and &lt;a href=&#39;http://www.spirops.com/&#39;&gt;SpirOps&lt;/a&gt; on crowd simulation in theme parks;&lt;/li&gt;

&lt;li&gt;An overview of Ming Lin&amp;#8217;s &lt;a href=&#39;http://gamma.cs.unc.edu/&#39;&gt;UNC Gamma group&lt;/a&gt; work;&lt;/li&gt;

&lt;li&gt;Various presentation about Dublin &lt;a href=&#39;http://gv2.cs.tcd.ie/&#39;&gt;Trinity college GV2&lt;/a&gt;&amp;#8217;s work on a populated virtual Dublin.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An interesting workshop and the chance to meet the cream of crowd simulation researchers !&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>CASA 2010 report (part 1)</title>
      <link>http://www.crowdscontrol.net/wordpress-11</link>
      <pubDate>Wed, 23 Jun 2010 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-11</guid>
      <description>
        &lt;p&gt;Well It&amp;#8217;s been a long time since I posted here&amp;#8230; I&amp;#8217;ve been pretty busy since the beginning of 2010. Anyway, here&amp;#8217;s a report of the part of this year CASA I attended to.&lt;/p&gt;

&lt;p&gt;CASA, the yearly conference on Computer Animation and Social Agents, was held in St Malo, France, from 31/05/10 to 03/06/10 (further information &lt;a href=&#39;http://casa2010.inria.fr&#39;&gt;here&lt;/a&gt;). As its name implies, the conference focuses are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Animation techniques (motion capture, motion control, physics-based animation&amp;#8230;),&lt;/li&gt;

&lt;li&gt;Social agents (emotions, facial animation, crowd simulation&amp;#8230;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During the conference, I only attended to Craig W. Reynolds keynote and to the collocated crowd simulation workshop.&lt;/p&gt;

&lt;h2 id=&#39;craig_w_reynolds_keynote&#39;&gt;Craig W. Reynolds Keynote&lt;/h2&gt;

&lt;p&gt;Craig Reynolds is to autonomous agents navigation what Louis Pasteur is to vaccination, he virtually invented the field. His seminal work of &lt;a href=&#39;http://pille.iwr.uni-heidelberg.de/~ckurs/Data/Flocks.pdf&#39;&gt;1987&lt;/a&gt; introduced steering behavior, simple rules to models the way autonomous agents navigate in groups. When I worked on the bibliography of my master&amp;#8217;s thesis, I was amazed to see that almost every paper I read was citing this 1987 paper or its &lt;a href=&#39;http://www.cs.uu.nl/docs/vakken/mpp/papers/8.pdf&#39;&gt;1999&lt;/a&gt; little brother; Google scholar count &lt;a href=&#39;http://scholar.google.fr/scholar?cluster=8844322844823739657&amp;amp;amp;hl=fr&amp;amp;amp;as_sdt=2000&amp;quot;&#39;&gt;more than 3000 citations&lt;/a&gt;! One other thing that is quite interesting about Reynolds work is its rarity, I personally know only those two articles (and &lt;a href=&#39;http://scholar.google.fr/scholar?hl=fr&amp;amp;amp;q=CW+Reynolds&amp;amp;amp;btnG=Rechercher&amp;amp;amp;lr=&amp;amp;amp;as_sdt=2000&amp;amp;amp;as_vis=1&amp;quot;&#39;&gt;google scholar&lt;/a&gt; tends to agree). Needless to say I was really eager to attend to the legend&amp;#8217;s talk.&lt;/p&gt;

&lt;p&gt;Well, I was quite disappointed.&lt;/p&gt;

&lt;p&gt;The talk he gave was titled &amp;#8220;Crowds and emergent teamwork&amp;#8221;, it presented Reynolds observation on emergent constructions in nature, done mostly by insects (ants, termites, bees&amp;#8230;), and his attempts to design autonomous agents able to do the same. The final model gave agents simple rules to add bricks to the construction. The same king of emergent construction was observed. The rest of the keynote was filled by what seems to be the entire flickr account of the host : insects construction (no global plan but a functional emergent structure), human constructions (everything is designed globally)&amp;#8230; Some aspects of the keynote were interesting but nothing really new, controversial or brilliant&amp;#8230; I do think my expectation were too high though&amp;#8230; The crowd simulation workshop report will follow shortly&amp;#8230;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>std::vector&lt;bool&gt; is NOT a std::vector containing bools</title>
      <link>http://www.crowdscontrol.net/wordpress-10</link>
      <pubDate>Mon, 15 Feb 2010 00:00:00 -0800</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-10</guid>
      <description>
        &lt;p&gt;Everything in the title, but let me explain&amp;#8230; Lately I&amp;#8217;ve spent a lot of time trying to make a serialization/deserialization work with the huge piece of software I&amp;#8217;m working on at Golaem. Anyway I came across a strange compiler error when trying to deserialize a &lt;code&gt;std::vector&amp;lt;bool&amp;gt;&lt;/code&gt;. Here&amp;#8217;s what our serialization engine is like:&lt;/p&gt;
&lt;div class=&#39;highlight&#39;&gt;&lt;pre&gt;&lt;code class=&#39;cpp&#39;&gt;&lt;span class=&#39;lineno&#39;&gt; 1&lt;/span&gt; &lt;span class=&#39;k&#39;&gt;template&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;T&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 2&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;void&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;read&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;std&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;vector&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;T&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;myVector&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;Bitstream&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;myStream&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 3&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;{&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 4&lt;/span&gt;   &lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;int&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;size&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 5&lt;/span&gt;   &lt;span class=&#39;n&#39;&gt;read&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;size&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;myStream&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 6&lt;/span&gt;   &lt;span class=&#39;n&#39;&gt;vector&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;resize&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;size&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 7&lt;/span&gt;   &lt;span class=&#39;k&#39;&gt;for&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;int&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;i&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;mi&#39;&gt;0&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;;&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;i&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;size&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;;&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;i&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;++&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 8&lt;/span&gt;   &lt;span class=&#39;p&#39;&gt;{&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt; 9&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;read&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;vector&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;i&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;],&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;stream&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;10&lt;/span&gt;   &lt;span class=&#39;p&#39;&gt;}&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;11&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;}&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;12&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;void&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;read&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;kt&#39;&gt;bool&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;myBool&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;Bitstream&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;stream&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;13&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;{&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;14&lt;/span&gt;   &lt;span class=&#39;p&#39;&gt;...&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;15&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;}&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;16&lt;/span&gt; &lt;span class=&#39;k&#39;&gt;template&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;T&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;17&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;void&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;write&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;k&#39;&gt;const&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;std&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;::&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;vector&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;T&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;myVector&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;Bitstream&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;myStream&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;18&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;{&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;19&lt;/span&gt;   &lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;int&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;size&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;;&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;20&lt;/span&gt;   &lt;span class=&#39;n&#39;&gt;write&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;((&lt;/span&gt;&lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;int&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;myVector&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;size&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(),&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;myStream&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;21&lt;/span&gt;   &lt;span class=&#39;k&#39;&gt;for&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;kt&#39;&gt;unsigned&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;int&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;i&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;=&lt;/span&gt; &lt;span class=&#39;mi&#39;&gt;0&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;;&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;i&lt;/span&gt; &lt;span class=&#39;o&#39;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;myVector&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;.&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;size&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;()&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;;&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;i&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;++&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;22&lt;/span&gt;   &lt;span class=&#39;p&#39;&gt;{&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;23&lt;/span&gt;     &lt;span class=&#39;n&#39;&gt;write&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;vector&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;[&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;i&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;],&lt;/span&gt;&lt;span class=&#39;n&#39;&gt;stream&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;);&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;24&lt;/span&gt;   &lt;span class=&#39;p&#39;&gt;}&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;25&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;}&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;26&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;void&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;write&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;(&lt;/span&gt;&lt;span class=&#39;k&#39;&gt;const&lt;/span&gt; &lt;span class=&#39;kt&#39;&gt;bool&lt;/span&gt;&lt;span class=&#39;o&#39;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;myBool&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;,&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;Bitstream&lt;/span&gt; &lt;span class=&#39;n&#39;&gt;stream&lt;/span&gt;&lt;span class=&#39;p&#39;&gt;)&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;27&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;{&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;28&lt;/span&gt;   &lt;span class=&#39;p&#39;&gt;...&lt;/span&gt;
&lt;span class=&#39;lineno&#39;&gt;29&lt;/span&gt; &lt;span class=&#39;p&#39;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The serialization worked ok, but when trying the deserialization I got a cryptic compiler error:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;impossible to convert from &lt;code&gt;std::_Vb_reference&amp;lt;_Sizet,_Difft,_MycontTy&amp;gt;&lt;/code&gt; to &lt;code&gt;bool &amp;amp;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;WTF ? This code worked perfectly for doubles, ints and other basic types bools should be fine no ? After a quick google and follow links session I stopped on the &lt;a href=&#39;http://www.cplusplus.com/reference/stl/vector/&#39;&gt;cplusplus.com reference page of the &lt;code&gt;std::vector&lt;/code&gt;&lt;/a&gt;. You should go and read this page completly, yep now ! I give you a few seconds&amp;#8230; OK you should&amp;#8217;ve finished now, and yeah, you read well, &lt;code&gt;std::vector&amp;lt;bool&amp;gt;&lt;/code&gt; is a template specialization of &lt;code&gt;std::vector&amp;lt;T&amp;gt;&lt;/code&gt; and it does not have the the same properties: &lt;code&gt;std::vector&amp;lt;bool&amp;gt;::operator[]&lt;/code&gt; doesn&amp;#8217;t returns a reference to a bool but a specially defined type. I love C++ and especially the STL&amp;#8230; Yes, in most cases it&amp;#8217;s transparent because this type defines a transtyping operator to bool. Yes, it is designed to save space as each element of a &lt;code&gt;std::vector&amp;lt;bool&amp;gt;&lt;/code&gt; takes only 1 bit. But, it is inconsistent (&lt;code&gt;std::deque&amp;lt;bool&amp;gt;&lt;/code&gt; is a &lt;code&gt;std::deque&lt;/code&gt; of bools), opposed to the basic principles of c++ templates, and, apparently not normalized (see &lt;a href=&#39;http://www.gotw.ca/publications/N1211.pdf&#39;&gt;this open letter wrote by Herb Sutter&lt;/a&gt; the day i turned 15). Another good joke from our pals at C++ ISO committee&amp;#8230;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Aggregate Dynamics for Dense Crowd Simulation</title>
      <link>http://www.crowdscontrol.net/wordpress-9</link>
      <pubDate>Mon, 30 Nov 2009 00:00:00 -0800</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-9</guid>
      <description>
        &lt;p&gt;Ming C.Lin&amp;#8217;s lab latest work in crowd simulation has been featured in two recent publications from MIG (&lt;a href=&#39;http://www.motioningames.org/&#39;&gt;International workshop on Motion In Games&lt;/a&gt;) 2009 and &lt;a href=&#39;http://www.siggraph.org/asia2009/&#39;&gt;SIGGRAPH Asia 2009&lt;/a&gt; (the article is already published on the author&amp;#8217;s website). The method presented int those articles, particularly the latter one, is designed to simulate the navigation behaviors of tens of thousand pedestrians at interactive rates. Let&amp;#8217;s see first the eye candy !&lt;/p&gt;
&lt;object classid=&#39;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&#39; height=&#39;344&#39; id=&#39;embedded&#39; width=&#39;425&#39;&gt;
&lt;param name=&#39;allowFullScreen&#39; value=&#39;true&#39; /&gt;
&lt;param name=&#39;allowScriptAccess&#39; value=&#39;always&#39; /&gt;
&lt;param name=&#39;src&#39; value=&#39;http://www.youtube.com/v/pqBSNAOsMDc&amp;amp;rel=0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1&#39; /&gt;
&lt;param name=&#39;allowfullscreen&#39; value=&#39;true&#39; /&gt; &lt;embed height=&#39;344&#39; src=&#39;http://www.youtube.com/v/pqBSNAOsMDc&amp;amp;rel=0&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1&#39; type=&#39;application/x-shockwave-flash&#39; width=&#39;425&#39; /&gt;
&lt;/object&gt;
&lt;p&gt;Impressed ? So do I, let&amp;#8217;s see how it works. This approach combines microscopic goals with macroscopic flow simulation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each agent is described by its position and its current velocity;&lt;/li&gt;

&lt;li&gt;A desired velocity is computed by a global planner (roadmap based path planning for example) for each agent;&lt;/li&gt;

&lt;li&gt;The navigable space is divided in cells, in each cells a flow of particles is computed using the current velocity of the agents in the cell and their density;&lt;/li&gt;

&lt;li&gt;Given those initial computed velocities the global particle flow is solved at the grid level computing new velocities for each cell;&lt;/li&gt;

&lt;li&gt;For each pedestrian, a new velocity is computed taking into account the desired velocity and the flow velocity weighted by the local density (The more dense the flow is, the morethe agent&amp;#8217;s velocity is influenced by the flow&amp;#8217;s);&lt;/li&gt;

&lt;li&gt;Finally a simple collision detection and resolution is applied.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both the visual results and the computation times are really interesting ! Two major problems are still not addressed: no collision prediction (two groups heading towards each other won&amp;#8217;t try to avoid before collision detection) and no way to add social convention to the avoidance behavior (favor one side of collision avoidance, avoid splitting groups&amp;#8230;). This method should be great for dense crowds and/or used as a low LOD for navigation behaviors (this will be the topic of the next article !).&lt;/p&gt;

&lt;h2 id=&#39;bibliography&#39;&gt;Bibliography&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#39;http://gamma.cs.unc.edu/DenseCrowds/narain-siga09.pdf&#39;&gt;&lt;em&gt;Narain et al. Aggregate Dynamics for Dense Crowd Simulation. SIGGRAPH Asia (2009)&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;em&gt;Lin et al. Interactive Modeling, Simulation and Control of Large-Scale Crowds and Traffic. MIG (2009)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
      </description>
    </item>
    
    <item>
      <title>Crowds control has moved</title>
      <link>http://www.crowdscontrol.net/wordpress-8</link>
      <pubDate>Sun, 29 Nov 2009 00:00:00 -0800</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-8</guid>
      <description>
        &lt;p&gt;I just finished moving the site to a brand new wordpress hosting of mine, less tinkering and more posting I hope. Also gotten a dedicated domain name &lt;a href=&#39;http://www.crowdscontrol.net&#39;&gt;www.crowdscontrol.net&lt;/a&gt;. Sweet !&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Report: Autodesk virtual entertainment conference</title>
      <link>http://www.crowdscontrol.net/wordpress-7</link>
      <pubDate>Thu, 01 Oct 2009 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-7</guid>
      <description>
        &lt;p&gt;Tonight, Autodesk gave a &amp;#8220;virtual conference&amp;#8221; featuring talks about their products, live-broadcasted, for free on their site. I virtually attended to the portion I was interested in : Ubisoft talking about AI and animation in Prince of Persia.&lt;/p&gt;

&lt;p&gt;After an epic struggle with RealPlayer (who still uses this piece of *** by the way ?) I managed to get the live feed a few minutes after the start.&lt;/p&gt;

&lt;h2 id=&#39;the_prince_was_not_alone_elika_was_here&#39;&gt;The prince was not alone, Elika was here&lt;/h2&gt;

&lt;p&gt;The focus of the talk was the character &amp;#8220;Elika&amp;#8221; from the &lt;a href=&#39;http://en.wikipedia.org/wiki/Prince_of_Persia_(2008_video_game)&#39;&gt;Ubisoft&amp;#8217;s 2008 version of Prince of Persia&lt;/a&gt;. This character is non playable but follows the player&amp;#8217;s character, the prince, throughout the game. She is designed to help the player but never get into his way.&lt;/p&gt;

&lt;h2 id=&#39;but_their_relationship_was_completely_artificial&#39;&gt;But their relationship was completely artificial&lt;/h2&gt;

&lt;p&gt;&lt;img alt=&#39;Prince of Persia - 1&#39; src=&#39;/images/posts/2009/pop_1.png&#39; /&gt;&lt;/p&gt;

&lt;p&gt;After a few character design considerations, the first topic was the AI used to tell Elika how to move around the prince. Its main objectives on this are :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Elika must not harm the 3 Cs (character, control, camera) that is provoking collisions with the prince, occluding the camera&amp;#8230;&lt;/li&gt;

&lt;li&gt;The AI has to make sure Elika appears on the screen as much as possible as naturally as possible (no teleporting, avoid getting stuck&amp;#8230;) ;&lt;/li&gt;

&lt;li&gt;As the social relation between the two characters evolve during the game (from strangers to friends), the behavior of Elika must reflect this.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically, what is used is a set of rules taking the state of the prince as input and outputting goals for the placement (for example distances, materialized by the circles in the first screenshot). Very few details are given on this.&lt;/p&gt;

&lt;p&gt;To give the player a feel on what&amp;#8217;s the relation between the character, a set of rules are added ; the more friendly they are, the more Elika will look at the prince and be near him.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;Prince of Persia - 2&#39; src=&#39;/images/posts/2009/pop_2.png&#39; /&gt;&lt;/p&gt;

&lt;h2 id=&#39;all_they_needed_was_good_animations&#39;&gt;All they needed was good animations&lt;/h2&gt;

&lt;p&gt;OK, so here comes Autodesk and their realtime inverse kinematic solver, HumanIK, which is already integrated with Ubi&amp;#8217;s home brewed engine used for Assassin&amp;#8217;s Creed. They use this middleware for two things :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ground the characters, that is apply kinematic constraints for each foot to be layed on the ground without colliding with it. It seemed this IK wasn&amp;#8217;t applied during movements as the feet where colliding with the ground when the prince was running on a slope.&lt;/li&gt;

&lt;li&gt;Retarget the hands during acrobatics, for example putting the hands in the holds while climbing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The IK solver is used on the prince and Elika, it is pretty efficient as it doesn&amp;#8217;t has any impact on the framerate. The speaker concluded on Human IK praising its easy configuration despite the huge amount of tweakable parameters.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;Prince of Persia - 3&#39; src=&#39;/images/posts/2009/pop_3.png&#39; /&gt;&lt;/p&gt;

&lt;p&gt;Before concluding the talk, one last problematic was addressed: how are handled the situation were one characters prevent the moving of the other. But as the rest of the talk, this topic was treated too quickly. I did not had the time to wonder in which cases the AI couldn&amp;#8217;t prevent this that the talk was finished.&lt;/p&gt;

&lt;p&gt;To conclude on this virtual conference, it was interesting (both the concept and the subject) but it was too much rushed and dense&amp;#8230;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Minkowski sum</title>
      <link>http://www.crowdscontrol.net/wordpress-6</link>
      <pubDate>Fri, 18 Sep 2009 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-6</guid>
      <description>
        &lt;p&gt;Since the end of my master&amp;#8217;s internship I hadn&amp;#8217;t really followed what was going on in the academic world about autonomous agent steering. I&amp;#8217;ve done some catchup lately ; this post is a preamble to some article report I&amp;#8217;m planning to do. Here it is, a few slides about the Minkowski sum, a fun geometric function used notably in motion planning.&lt;/p&gt;
&lt;object classid=&#39;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&#39; height=&#39;355&#39; id=&#39;embedded&#39; width=&#39;425&#39;&gt;
&lt;param name=&#39;allowFullScreen&#39; value=&#39;true&#39; /&gt;
&lt;param name=&#39;allowScriptAccess&#39; value=&#39;always&#39; /&gt;
&lt;param name=&#39;src&#39; value=&#39;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=minkowskisum-090917170955-phpapp02&amp;amp;stripped_title=minkowski-sum-on-2d-geometry&#39; /&gt;
&lt;param name=&#39;allowfullscreen&#39; value=&#39;true&#39; /&gt;&lt;embed height=&#39;355&#39; src=&#39;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=minkowskisum-090917170955-phpapp02&amp;amp;stripped_title=minkowski-sum-on-2d-geometry&#39; type=&#39;application/x-shockwave-flash&#39; width=&#39;425&#39; /&gt;
&lt;/object&gt;
      </description>
    </item>
    
    <item>
      <title>SIGGRAPH: day 4</title>
      <link>http://www.crowdscontrol.net/wordpress-5</link>
      <pubDate>Wed, 12 Aug 2009 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-5</guid>
      <description>
        &lt;p&gt;This Thursday was my 4th day for this SIGGRAPH, it was also the last day for the exhibition. After a little sleepover my day started by the fist session of technical papers dedicated to character animations, really interesting but quite complex for my bad skills in the domain.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dextrous manipulation from a graping pose.&lt;/strong&gt; This paper presents a way to compute a character&amp;#8217;s hand motion from the motion of the object it handles. As I understand, once the hand has grasped the object, the system will handle its movements taking into account the friction coeficient of the material (but not its weight).&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Optimal Gait and Form for Animal Locomotion,&lt;/strong&gt; is a method able to automatically generate the morphology and the motion for any animal having any number of legs. The animal is described using cylinders of variable sizes and some constraints. Their method is able to recreate belivable horse, giraffes, etc&amp;#8230; They can even create motions for imaginary animal with 5 legs (the video is watchable here).&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Performance-Based Control Interface for Character Animation.&lt;/strong&gt; The work presented here is quite impressive and could be immediatly applied to game consoles. The authors original observations is that with the current trend for motion-driven games inputs (wii, project natal&amp;#8230;), soon we&amp;#8217;ll be able to match exactly the character&amp;#8217;s motions to the player&amp;#8217;s. But in some cases (climbing a ladder, jumping on a trampoline), the user can&amp;#8217;t reproduce the movements in his living room. The presented method is able to match the player&amp;#8217;s motions type to a type of character&amp;#8217;s motion while keeping as much 1 to 1 motion mapping as possible. On the ladder example, the arms and hip motions of the players can be mapped directly on the character while the rest is taken from offline recorded motions.&lt;/li&gt;

&lt;li&gt;&lt;strong&gt;Detail-Preserving Continuum Simulation of Straight Hair.&lt;/strong&gt; I must admit I did not pay that much attention to this talk&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img alt=&#39;Dragons&#39; src=&#39;http://www.crowdscontrol.net/images/posts/2009/new-orleans-dragon.jpeg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;The following session I attended was called &amp;#8220;Effects Omelette&amp;#8221;: 4 talks about various movies special effects.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;People from Disney animation talked about how they setup the production pipeline of Bolt in order to produce only one movie in 2D and stereoscopic 3D.&lt;/li&gt;

&lt;li&gt;&amp;#8220;Virtual&amp;#8221; taylors from Pixar gave a talk about how they designed the characters clothes in Up. Pretty interesting to see how they &amp;#8220;virtualized&amp;#8221; traditionnal tayloring techniques in order to get realistic looking clothes.&lt;/li&gt;

&lt;li&gt;One of the technical guys who had worked on Up talked about the net simulations he designed (in fact it was the same piece of work that was used for the ballon canopy).&lt;/li&gt;

&lt;li&gt;Finally, Digital Domain presented how they simulate the Eiffel tower collapsing in GI Joe, introducing their talk by &amp;#8220;The movie has been released last week, surprisingly it has some good reviews !&amp;#8221;&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The afternoon, I explored the third floor : modern art, scientific posters and japanese presenting weird, but interesting, &amp;#8220;emerging technologies&amp;#8221;. I then attended to a production session about how they 3d-printed every faces in &amp;#8220;Coraline&amp;#8221;, very impressive ! But it was quite a paradox to learn that, for the faces, the created 3d models, animated them for lip synching and facial expression and then printed every frame to recreate, in stop motion, those animations.&lt;/p&gt;

&lt;p&gt;This thursday night was the official reception night: New Orleans Mardi Gras, fanfare and buffet.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;Musician&#39; src=&#39;/images/posts/2009/new-orleans-musician.jpeg&#39; /&gt;&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>SIGGRAPH: day 3</title>
      <link>http://www.crowdscontrol.net/wordpress-4</link>
      <pubDate>Fri, 07 Aug 2009 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-4</guid>
      <description>
        &lt;p&gt;Wednesday had been quite a busy day for me, I started the day at 8:30 for a group of technical papers presentation called &amp;#8220;Motion Synthesis and Editing&amp;#8221;. I&amp;#8217;m really not a specialists but it was in interesting, there was three presented papers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generalizing Motion Edits With Gaussian Processes, it shows a method to refineexisting motions via editing them automatically based on the samples of the desired edit, I didn&amp;#8217;t quite get everything (too early I think) but it seems powerful;&lt;/li&gt;

&lt;li&gt;Optimization-Based Interactive Motion Synthesis, the described platform, given a goal and constraints, is able to synthesize the motion needed to attain that goal by optimizing different physical parameters, the article is waiting for me to read it;&lt;/li&gt;

&lt;li&gt;Lie Group Integrators for Animation and Control of Vehicles, the algorithms shown here are able to synthesize the motion of a non-holonomic vehicles via optimization given a goal and some constraint using the Lie Group, I was quite impressed by the result they get but after the talk I was told by Stéphane that those kind of stuff was known in robotics for years.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I then attended to the third keynote of this SIGGRAPH: New York Times Steve Duendes talking about data visualization and aesthetics. As a follower of blog dedicated to the subject such as &lt;a href=&#39;http://flowingdata.com/&#39;&gt;Flowing Data&lt;/a&gt; I really enjoyed the talk, it seems quite odd to find this subject at SIGGRAPH though. As nothing really interested me in the beginning of the afternoon, I took this opportunity to do some light tourism. It was pretty hot but New Orleans has some cute corners. I spent the end of the afternoon on technical stuffs: a nvidia talk about their scene graph and how its interactions with other of their stuffs and a chat with an Autodesk engineer about Kynapse, their solution for virtual characters pathfinding, steering and a little bit of AI. I then joined other french SIGGRAPHers for a drink and a dinner, that&amp;#8217;s why you didn&amp;#8217;t have the pleasure to read my prose yesterday.&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>SIGGRAPH: second day</title>
      <link>http://www.crowdscontrol.net/wordpress-3</link>
      <pubDate>Tue, 04 Aug 2009 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-3</guid>
      <description>
        &lt;p&gt;This tuesday was the second day of my first SIGGRAPH, not so great though&amp;#8230; Let&amp;#8217;s evacuate the disappointments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thinking that they got a booth at the main exhibition, I was too late to get an invitation for the Lucas Film little party (not so bad as my feet are pretty ruined right now);&lt;/li&gt;

&lt;li&gt;The exhibition in itself is a disappointment to me, the booths are really calm, there&amp;#8217;s nothing spectacular, and last, but not least, there aren&amp;#8217;t many (new) opportunities for Golaem (potentials customers or partners) ;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the bright side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This morning Will Wright kenote was really really cool ! He talked about lots of things including human perception, cognitive load, convergences of entertainment medias, social hiveminds &amp;amp; how to use dedicated fans work to improve the experience of casual ones. The way he considers as &amp;#8220;entertainment business&amp;#8221; sports, TV, videos games, but also painting, music, theater etc. annoy me though.&lt;/li&gt;

&lt;li&gt;I learned quite intersting stuffs on the Intel booth following a presentation about Larabee (their new processor featuring both traditional x86 and scalar processor on many cores) programming and getting a demo of Parallel studio (plugin to visual C++ allowing the profiling and debugging of parallel code). I had a weird talk with some of their devs though: - &amp;#8220;Is it possible to use the open source version of TBB (Thread Building Blocks, a multithread C++ API) in a commercial product ? - &amp;#8220;You&amp;#8217;ll have to check with your lawyer.&amp;#8221; - &amp;#8220;Hum, but what Intel&amp;#8217;s lawyer would say about it.&amp;#8221; - &amp;#8220;We don&amp;#8217;t know but the official statement is that its Intel best interest if you use it.&amp;#8221;&lt;/li&gt;

&lt;li&gt;I got two Pixar&amp;#8217;s renderman teapots !&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img alt=&#39;Teapots&#39; src=&#39;/images/posts/2009/teapot.jpeg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;Day two is over.&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>First day at SIGGRAPH</title>
      <link>http://www.crowdscontrol.net/wordpress-2</link>
      <pubDate>Tue, 04 Aug 2009 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-2</guid>
      <description>
        &lt;p&gt;I&amp;#8217;m happy to be at SIGGRAPH this year, throughout the week I&amp;#8217;ll try to post little reports of what I&amp;#8217;ve done there. After a very long trip (3 flight and a delay of 2h30 at Atlanta), Stéphane and I arrived at our hotel in New Orleans just in time to dinner and go to bed.&lt;/p&gt;

&lt;h2 id=&#39;day_1__first_conference_day&#39;&gt;Day 1 - First conference day.&lt;/h2&gt;

&lt;p&gt;The conference start badly for me, my registration form had been lost but the payment had been made&amp;#8230; 2 hours later and a few call (thanks Stéphane) to France and I was in, excited like a kid at he zoo ! The first session I attended was featuring the ACM SIGGRAPH award and the keynote of Randy Thom a famous sound designer. The awards was given to great researcher and artists, no one I knew except Rob Cook, the guy who created Pixar&amp;#8217;s Renderman, he got The Steven Anson Coons Award. The keynote by Randy Thom was quite a disappointment, this guy, who has participated in tons of movies, chose to talk about &amp;#8220;Designing a Movie for Sound&amp;#8221; by presenting the work of others: Apocalypse now and Wall-E. The keynote was essentially excerpts from those 2 movies, interviews of people who had worked on (From the DVD bonuses concrning Wall-E) and common sense.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&#39;ACM crap&#39; src=&#39;/images/posts/2009/acm-crap.jpeg&#39; /&gt;&lt;/p&gt;

&lt;p&gt;On the afternoon, I started by the screening of the nominees at the animation festival, with lots of great stuff, by the way the french touch won again :) Next was 4 interesting talks about animation and physics in games and movies. These did not features technical breakthrough but industrial &amp;#8220;real world&amp;#8221; implementations of advanced techniques. I was particularly interested by the Pixar guy talking about the physic simulation of the balloon canopy in &amp;#8220;Up&amp;#8221;. Last, but not least the technical papers fast forward. The rules are simple: each team presenting a technical paper at SIGGRAPH this year has to present his work in 50 seconds, some sort of teaser for the talk. Some were really funny, some were really impressive, some were really shy and most of the asiatics team choose to present a video with a recorded comment instead of talking&amp;#8230; The 2 hours felt like two minutes ! I want more ! That&amp;#8217;s all for today, tomorrow the exhibition begins !&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Paris Game AI Conference '09 (part 2)</title>
      <link>http://www.crowdscontrol.net/wordpress-1</link>
      <pubDate>Sun, 02 Aug 2009 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-1</guid>
      <description>
        &lt;p&gt;In this second part I&amp;#8217;ll talk about the presentations of day two.&lt;/p&gt;

&lt;h2 id=&#39;day_two&#39;&gt;Day Two&lt;/h2&gt;

&lt;h4 id=&#39;panel_talk_advices_and_tales_from_the_trenches&#39;&gt;Panel talk: Advices and tales from the trenches.&lt;/h4&gt;

&lt;p&gt;As I&amp;#8217;m not that familiar with game industry this panel about how the work is in game studios was very intersersting to me. What they emphasized most was that it is important to have done, and finish, something yourself (a small game for example) before starting to work in a studio. I know they were trying to say &amp;#8220;Young programmers you must know and prove that you know how to finish a project and make things work.&amp;#8221; but to me it sounded like &amp;#8220;I prefer a tinkerer who can do everything quick and dirty to a software engineer who knows it stuff but haven&amp;#8217;t code pacmans since kindergarten&amp;#8221;. As I am much more the second type of guy, to me, the first type can make things work but doesn&amp;#8217;t see the big picture, he is unsuitable for a big project ; a teacher of mine use to say &amp;#8220;Knowing how to make a toolshed in your garden doesn&amp;#8217;t help you conceive a 60 story building&amp;#8221;.&lt;/p&gt;

&lt;h3 id=&#39;multiunit_planning_with_htn_and_a__william_van_der_serren_independent_ai_consultant_at_cgfai&#39;&gt;Multi-Unit Planning with HTN and A* - William van der Serren, Independent AI Consultant at CGF-AI&lt;/h3&gt;

&lt;p&gt;This talk was about an assault planner accessible from a website. The planner finds the best course of action for several units in order to start the battle in good strategical postitions. The whole thing is an A* goal oriented planning inside a graph which vertex are the possibles tasks. Task are described as HTN and weighted by its cost in itself and the distance the unit has to cover to perform it. Simple but good results. My main takeaway for this good talk is that HTN seems to amaze everyone in the audience, seems pretty basic to me but I&amp;#8217;m not an expert.&lt;/p&gt;

&lt;h3 id=&#39;interactive_narrative_generation_and_story_telling__daniel_kudenko_york_university&#39;&gt;Interactive Narrative Generation and Story Telling - Daniel Kudenko, York University&lt;/h3&gt;

&lt;p&gt;I&amp;#8217;m casually interested in virtual interactive storytelling, so I was paying particular attention. The first part of the talk aimed at presenting the academic state of the art on the subject, not quite complete as it ignored the work of Marc Cavazza who is THE reference. The second part, features the presentation of the engine &amp;#8220;Gadin&amp;#8221; developed by Daniel Kudenko&amp;#8217;s team, interesting but knowing what is made elsewhere, not really impressive.&lt;/p&gt;

&lt;h3 id=&#39;the_racing_ai_in_pure__eduardo_jimenez_black_rock_studio&#39;&gt;The Racing AI in Pure - Eduardo Jimenez, Black Rock Studio&lt;/h3&gt;

&lt;p&gt;Whereas almost every other talk was about action game where the aim of the AI was to kill the opponent, this one is about racing. As presented in this talk, the main problematic of such AI is to adapt its skills to the player&amp;#8217;s : he mustn&amp;#8217;t feel alone behind or ahead of everyone. The presented solution is quite elegant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different &amp;#8220;skills&amp;#8221; are defined;&lt;/li&gt;

&lt;li&gt;Each AI has values between 0 and 1 associated to each &amp;#8220;skill&amp;#8221; (at 0 the AI doesn&amp;#8217;t perform well, at 1 he is good);&lt;/li&gt;

&lt;li&gt;These &amp;#8220;skill&amp;#8221; values can evolve during the game (but the changes can&amp;#8217;t be instantaneous);&lt;/li&gt;

&lt;li&gt;A scripting language is created to define game scenarios, a scenario describes the evolution of the AI&amp;#8217;s rank according to their skills during a game;&lt;/li&gt;

&lt;li&gt;During the game the engine trie to match the current state to one of the scenarios and adapt AI &amp;#8220;skills&amp;#8221; value in order to match it. Another good talk talking about things that works in the real world on a released game.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#39;building_navigation_meshes_by_voxelization__mikko_mononen_recoil_games&#39;&gt;Building Navigation Meshes by Voxelization - Mikko Mononen, Recoil Games&lt;/h3&gt;

&lt;p&gt;This talk was the one I expected the most, but I have so much to say about Mikko&amp;#8217;s work on Recast and Detour that it will be the subject of another post.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s it for the report of the first conference I ever attend to ! The official report is &lt;a href=&#39;http://aigamedev.com/open/coverage/paris09-report/&#39;&gt;here&lt;/a&gt;, much more interesting than mine (I&amp;#8217;m very proud to be cited the end of the article). Thanks Alex and the volunteers for the conference ! Thanks too to the drunk czech student who talk all the evening about linguistic, I had a good laugh !&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>Paris Game AI Conference '09 (part 1)</title>
      <link>http://www.crowdscontrol.net/wordpress-0</link>
      <pubDate>Wed, 29 Jul 2009 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress-0</guid>
      <description>
        &lt;p&gt;The Paris Game AI Conference took place on June 10th and 11th at the CNAM. It was organised by AiGameDev.com. OK it a little too late for a proper but whatever :) I needed a first real post for the blog ! Almost 200 people from Europe had came to this free event and I had the privilege to be one of them (I was the only one available in the team). The schedule was quite interesting and it was a first for me, quite exciting ! Here&amp;#8217;s a quick report about my time there.&lt;/p&gt;

&lt;h2 id=&#39;day_one&#39;&gt;Day one&lt;/h2&gt;

&lt;h3 id=&#39;panel_talk_state_of_the_industry&#39;&gt;Panel talk: State of the industry&lt;/h3&gt;

&lt;p&gt;Alex had the good idea to start the conference by an informal panel were all the speakers talked briefly about them and the challenges they&amp;#8217;re curently facing in the game industry. From what they say, their major problem isn&amp;#8217;t technology in itself but more how they can fit this technology to the needs of the game designers and to the constraints of the producers. The first telling them: &amp;#8220;I want that to improve the game experience, but I&amp;#8217;ll change my mind in two weeks !&amp;#8221; ; The others: &amp;#8220;Don&amp;#8217;t you spend too much money AI guys, I&amp;#8217;ve already spent everything on the animation/graphics/gameplay&amp;#8221;. Some of them still talks about technology matters, as they come: NPC emotion, Highly dynamic worlds, Multithreading, Interaction between AI and animation. Great Start, speakers are passionate and seems to enjoy talking with eachothers.&lt;/p&gt;

&lt;h3 id=&#39;emotions_in_game_characters__phil_carlisle_bolton_university__indie_dev&#39;&gt;Emotions in game characters - Phil Carlisle, Bolton University &amp;amp; Indie dev&lt;/h3&gt;

&lt;p&gt;Starts his talk with the bibliography from which I noted two main references. Thomas and Johnston - Disney Animation: The Illusion of Life (1981). It describes the theories and techniques behind Disney characters (on Amazon). Bartneck. Integrating the OCC model of emotions in embodied characters (2002). Features works on the implementation of a simple emotion model in 3D characters. Phil worked himself on the player perception of the NPC non-verbal communication and procedural animation. Too much time was spent on the state of the art so Phil has to rush the implementation part of the talk. However, he manages to talk about how he implemented the OCC model. This model describes a given state of emotion by a few scalars, each valuating a basic emotion (happiness, excitement, anger&amp;#8230;). His sytem gather what seems to be the best sellers here: Behavior trees and blackboard. Interesting talk but he tried to put in too much ; he didn&amp;#8217;t have the time for a proper bibliography. This OCC model I didn&amp;#8217;t know seems interesting. Those scalars pushed into a fuzzy logic controller linked to motion blending could do the trick&amp;#8230;&lt;/p&gt;

&lt;h3 id=&#39;coordinating_agents_with_behavior_trees__ricardo_pillosu_crytek&#39;&gt;Coordinating Agents with Behavior Trees - Ricardo Pillosu, Crytek&lt;/h3&gt;

&lt;p&gt;Ok, so I&amp;#8217;m was to meet the famous behavior tree (BT) ! Ricardo gave a really technical talk focusing on real world problematics. His methods introduces collaboration between agnets to traditional BT using a Tactic Manager who assigns roles to the agents fulfilling preconditions for a given tactic, ie a collaborative task. Besides behavior trees mechanisms I didn&amp;#8217;t knew, my takeaway is that Crytek switched from Lua and state machine scripting to behavior trees because of their readability. Behavior trees seems to be a efficient tool to describe reactive behaviors but goal oriented task planning is not possible. It should be interesting to compare them with our Golaem Activity&amp;#8230;&lt;/p&gt;

&lt;h3 id=&#39;the_ai_for_killzone_2s_multiplayer_bots__remco_straatman_guerilla_games__alex_j_champandard_aigamedevcom&#39;&gt;The AI for Killzone 2&amp;#8217;s Multiplayer Bots - Remco Straatman, Guerilla Games &amp;amp; Alex J. Champandard, aigamedev.com&lt;/h3&gt;

&lt;p&gt;The speakers gave a very detailed talk explaining the AI architecture used for this particular game. The Killzone 2 bots AI is organized in 3 layers : individuals, squads and a global, per team, strategy AI. The first two levels use HTN planners fed by basic perception and orders coming form the upper layer. The strategy layer uses simple rule based engines (one for each game mode) that handle high level goals. The engine is fed with semantic and topological information, give orders to squad and individuals and handles assignment of individuals to squads. Semantic and topological informations are available trough the strategic graph which is: Generated from the level roadmap and the manually tagged semantic informations (targets, flags to capture, good defending positions, sniping positions&amp;#8230;), Updated at runtime by team influences (bots presence and goals, number of death&amp;#8230;), The presented architecture is really interesting but suffers from what I think is a major drawback. The bots are used in multiplayer games to complete human teams, but even the strategy layer doesn&amp;#8217;t take into account human players. The difficulty being evaluating human current goal. The way the strategic map is designed is quite clever though.&lt;/p&gt;

&lt;h3 id=&#39;multithreading_ai__bjoern_knafla_kassel_university&#39;&gt;Multithreading AI - Bjoern Knafla, Kassel University&lt;/h3&gt;

&lt;p&gt;This talk was given by an awesome speaker, fun and interesting. Best practices presented in the talk : Use a task manager handling the execution of tasks in threads, Describe calculations in tasks not threads, Separate calculations in two parts, updates on private datas reading public datas and then publish private datas to public datas, Handle conflict via ad hock rules Go error free before performance optimizations&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s all for today, part 2 will follow soon.&lt;/p&gt;
      </description>
    </item>
    
    <item>
      <title>First post - Manifesto</title>
      <link>http://www.crowdscontrol.net/wordpress</link>
      <pubDate>Wed, 29 Jul 2009 00:00:00 -0700</pubDate>
      <author>cloderic.mars@gmail.com (Clodéric Mars)</author>
      <guid>http://www.crowdscontrol.net/wordpress</guid>
      <description>
        &lt;p&gt;For some times now I have wanted to create some kind of &amp;#8220;pro&amp;#8221; blog but I never took the time, until now. I&amp;#8217;m going to SIGGRAPH for the first time next week and I want a place where I can report some of what I&amp;#8217;ll learn there. So here we go !&lt;/p&gt;

&lt;p&gt;I work since 2006 in 3D related fields : behavioral animation, crowd simulation, virtual realistic cities, authoring tools for 3d content&amp;#8230; As I still consider myself a newbie, I&amp;#8217;m constantly and eagerly trying to gather infos and learn. Hopefully, my current job at &lt;a href=&#39;http://www.golaem.com&#39;&gt;Golaem&lt;/a&gt; allows me just that. This blog will be a place for me to formalise and keep some of those interesting stuffs and, incidentally share them. Quantitatively, I&amp;#8217;ll try to post articles every week or two ; I&amp;#8217;ve also created a twitter as a sidekick for this blog, you can check it &lt;a href=&#39;http://www.twitter.com/clodericmars&#39;&gt;here&lt;/a&gt; or on the left side of the blog page.&lt;/p&gt;
      </description>
    </item>
    

  </channel> 
</rss>
