Archive for the ‘ENGINE’ Category

Wednesday, March 18th, 2009

This is fantastic news!  Unity3D 2.5 has been released a bit early before GDC and it includes the game changing windows build environment and IDE.  This now opens up the Unity 3D market by a huge factor and Unity3d will find its way into many gaming companies that are heavily invested in Windows. We should see the amount of unity 3d players and content ramp up quite a bit this year.

Dont’ get me wrong I love my Mac Book Pro and continue to use it for development in Unity3D, iphone sdk etc.  But being able to use my windows machine as a dev box is great and I know this will be huge for many windows users not wanting to shell out the $1500 for the unity license AND $3000 for a decent macbook.  The cost wall has been lowered and it is a great investment if you are an indie game developer or a large game developer.

I usually only get excited about open source tools on this blog because they help everyone with skills have access, I hope one day there will be an open source 3d browser based engine as well.  Right now though there is nothing price competitive other than maybe torque instantaction plugin or the gaim engine (quakelive) that comes close with hardware rendering and none of them beat Unity in ease of pipeline.

One thing about Unity3d is it was a game engine from day one, it is only a game engine.  It isn’t like Director or Flash that are also application development kits, rich internet application kits etc.  This is pure game engine baby with hardware rendering for the win. Also, if you want to make 3d games for the iPhone without going hardcore OpenGL ES you can do so with an additional license that opens up your distribution channel to the iphone, flash can’t do that currently unfortunately.

And so it begins… GAME ON!

Monday, March 16th, 2009

Libspark from Japan is a treasure trove of great flash advancements, they seem to realize the great things that can come from porting in existing solid libraries from C/C++ etc into flash and have been scoring lately including augmented reality in flash porting the ARToolkit to FLARToolkit.  Recently a port of openCV for as3 called Marilena was found and it is for object detection and decent facial recognition (it is a computer vision library from intel) considering the processing power needed to do this.

Face Detection: Here is the sample included with Marilena showing facial detection on an image.


Lots of recent action has blown up on this front from Mr doob, quasimondo (optimizing the Marilena classes for better performance) and Boffwswana. Also there is a kit called deface by sshipman that is the first foray into this a year ago doing similar things but it was just a bit before it’s time and a bit slow in previous versions of flash, it performs decent now in this sample. Flash 10 performance of the AVM2 and future directions with Alchemy will lead to more interesting stuff just like this.

Mr. doob head tracking sample, be sure to check lots of other examples there


Boffswana example of head tracking Johnny Lee Wii style with only a webcam and flash, no wiimote needed since it uses facial detection to check where you are and how close you are in the screen and then moves accordingly.


This is stemming from the recent explosion of the FLARToolkit and augmented reality in flash as well as the gimmicks used by Nintendo with the wii and Johnny Lee’s great head tracking advancements. Porting great libraries to flash seems to be the phase we are entering now judging by the recent excitement around Adobe Alchemy and the LLVM along with the lead from the contributors. We have also seen this heavily last year in ports of Box2D for 2d physics and other toolkits using established working code and porting that to flash now that is is mostly capable of handling the performance.

OpenCV (Open Computer Vision Library by Intel) is quite a powerful platform that allows you to do all this and now it is available in flash. There are other great libraries for nearly all platforms now. I have done some previous work with Aforge which is also a port of OpenCV mainly for motion detection. This was always around but not until the recent performance updates and the innovation that has come with Alchemy and the thinking that goes along with that (porting in libraries to flash from C/C++ etc), has allowed this to flourish in flash and thus the web.

The amazing new things we can do with flash by porting in existing libraries is only going to get more intense as alchemy and flash 10 are even more mainstream.  It is almost as if Flash will eventually just become a web renderer and simplified front end to many great toolkits that exist in more native environments like C/C++ but with the speed and distribution access of the web with Flash.  Exciting times ahead.

Wednesday, February 18th, 2009

Looks like it is a javascript day here at *drawlogic.  Here is an interesting example with some demos of a javascript and canvas based pseudo 3d engine. Anything this cool you know it has to be from Japan.
Also of note, it has been rumored that Silverlight 3 will have fully hardware accelerated 3d and canvas and javascript engines are getting much faster with great demos like this.  Adobe needs to leap into hardware acceleration for flash on a broader scale soon.

But I digress, this demo it appears, was inspired by Papervision3D due to the naming and the javascript reference of “parpevision.js“.  I wasn’t able to find much more information about this but it is very well done and this example even shows some environment mapping. It is not close to flash pseudo-3d engines like Papervision3D yet but at the rate of javascript engine development lately this could rival flash AVM2 in the next couple of years.



Here is the code for the parpevision.js file and the mini engine, it is an MIT license. (more…)

Wednesday, February 18th, 2009

Box2D is responsible for inspiring many 2d physics engines including Motor2, Box2DFlashAS3 and others.  Box2D the original toolkit is a solid c++ physics engine that has many great examples and features including real collision.

Now it has inspired a pure Javascript version of Box2D called Box2Djs to (using prototype dependency) to implement many of the same demos using the same functionality.  So it appears Box2D if you want to find a baseline standard physics kit for 2D, it now has versions in many languages that might allow you to have 2d physics capabilities across many platforms.

Box2DJS is a JavaScript port of Box2D Physics Engine. To tell the truth, this is converted from Box2DFlashAS3_1.4.3.1 in an automatic manner. (The reason why not Box2DFlashAS3_2.0.0 based is simply because I overlooked the renewal.)


  • prototype.js
  • IECanvas (when you use a canvas tag to display the result of your physics simulation)


How to use

  1. Download a zip file and extract it.
  2. Copy js/ and lib/ directories from the extracted directory to your app directory.
  3. Copy script tags in the header part of index.html in the extacted directory to your html file where you want to simulate physics.

    Because this library does not have a lazy-loading system now, you should load all classes before starting your simulation. To make things worse, each library has a bit complicated dependency each other so that loading libraries in wrong order may cause a fatal error. To avoid such a trouble, it is strongly recommended to copy the header part of this file or `index.html’ including the downloaded zip file.

  4. Utilizing Box2D APIs, simulate the newton world as you like.

    The Box2DJS APIs are completely same as those of Box2DFlashAS3. Please refer information about it.

Also the speed of your javascript engine makes a big difference just like the AS2 AVM1 to the AS3 AVM2 virtual machines.  Chrome is much faster than FF3.

Video of Box2DJS in Chrome

Video of Box2DJS in FF3

Thursday, December 4th, 2008

Nicolas Cannasse is at it again.  This time with a PBJ (Pixel Bender File) binary file reader and writer in haXe and Pixel Bender Assembler tools. What this can do is create and decompile PBJ files with haXe, the possibilities are limitless to how this is used including dynamic pbj file creation.

The latest haXe file format library contains complete support to read and write PBJ file, enabling you to write Pixel Bender assembler directly in haXe, then compile it on-the-fly into PBJ bytes, which can then be saved on disk or loaded directly in Flash.

I plan to have much more on Pixel Bender (shaders in flash) and Adobe Alchemy (compile other languages to which is a very cool technology that involves LLVM that Nicolas also has lots of great input on.

Saturday, October 11th, 2008

as3isolib is a great isometric library for actionscript 3
by Justin Opitz.  This is a lower level isometric library that could be used in building your own isometric gaming engine or learning more about the popular isometric view in games or other flash content.

From building basic blocks…

To constructing sprites and objects with individual iso objects with their own bounding boxes.

This sample shows a two piece tree, a common issue with sprites in isometric is where to slice them up.  This sample shows a tree with the leaves able to be in front of a character so that you could walk under the tree and be in front of the trunk but covered by the trees.  Essentially height is respected.

Sample code for the tree tutorial:

import as3isolib.display.IsoSprite;
import as3isolib.display.primitive.IsoBox;
import as3isolib.display.scene.IsoGrid;
import as3isolib.display.scene.IsoScene;

import flash.display.Loader;
import flash.display.Sprite;

public class IsoApplication extends Sprite
 private var scene:IsoScene;
 private var assets:Object;

 private var loader:Loader

 private function loadAssets ():void
  loader = new Loader();
  loader.contentLoaderInfo.addEventListener(Event.INIT, loader_initHandler);
  loader.load(new URLRequest("assets/swf/assets.swf"));

 private function loader_initHandler (evt:Event):void

 private function buildScene ():void
  scene = new IsoScene();
  scene.hostContainer = this;
  scene.container.x = 200;
  scene.container.y = 200;

  var treeTrunkClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("TreeTrunk") as Class;
  var treeLeavesClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("TreeLeaves") as Class;

  var grid:IsoGrid = new IsoGrid();
  grid.showOrigin = false;

  var s0:IsoSprite = new IsoSprite();
  s0.setSize(25, 25, 65);
  s0.moveTo(50, 50, 0);
  s0.sprites = [treeTrunkClass];

  var s1:IsoSprite = new IsoSprite();
  s1.setSize(125, 125, 100);
  s1.moveTo(0, 0, 75);
  s1.sprites = [treeLeavesClass];


 public function IsoApplication ()

current features

  • simple scene creation
  • 3 primitive types
  • base class for displaying user-created content
  • plenty of styling option on vector based primitives
  • integrates well with a variety of tween engines
  • standard 3D isometric positional sorting

So get busy building the flash version of roller coaster tycoon…

Sunday, August 24th, 2008

The Zupko show continues with reflections in Papervision 3D [demo].

Be sure to check out the shadow demo that this is based on:

After posting my shadow experiment, Patrick Matte posed a question wondering if I would be able to do real-time reflections in a similar manner. The next day I had it done, along with some nice iterations along the way: orthographic and perspective projection (I can release those later if anyone really wants them). I’ve been sitting on it every since and finally decided I would take the time to write a little description into how its done and give the code to those who are interested (and I fixed up some code for backface culling in the reflection this morning).

Thursday, July 17th, 2008

UPDATE: See comments and papervision list for revert of this change.  You can now use localRotationX, localrotationY and localRotation Z instead.  yaw(), pitch() and roll() are back by popular demand.

Hi List,

Sorry for this confusion, but we decided to revert back to pitch(
angle ), yaw( angle ) and roll( angle ) methods.

There are three new getter / setters now though:



pitch( 30 ) would be the same as doing localRotationX = 30;

Note that  localRotationX / Y /Z are rotations relative to the
rotation as set by rotationX / Y / Z.
Also note that after do3d.lookAt() localRotationX/Y/Z will be resetted to 0



Papervision 3D 2.0 Alpha has been undergoing lots of changes and one you might want to know about is the object yaw, pitch and roll change.  Thisis changing on how you access them but only slightly.  This is good because you an read and write the values on the object not just set them. Per the papervision list from the man Tim Knip:

On many users request:

DisplayObject3D‘s methods pitch(), yaw() and roll() are now getters / setters.


do3d.yaw = degrees;
do3d.pitch = degrees;
do3d.roll = degrees;

var myYaw : Number = do3d.yaw;

This means these values are now ‘absolute’ values instead of previous
‘relative’ values as in deprecated do3d.yaw( 1 );

Let me know any issues (as I’m sure there are…)


This only affects the latest and greatest revisions of papervision but is definitely a good change.  It is good to make changes that make more sense without worrying about breaking changes.

Saturday, June 21st, 2008


3D models from basic video… This can be huge in all sorts of ways.  For exponential growth you need to go virtual.

  • This is a technology called VideoTrace from Australia
  • The Siggraph paper describing VideoTrace is available here (pdf 6MB)
  • Larger videos available here, with a more compressed version here.
Tuesday, April 22nd, 2008