2009-10-15

Aether3D progress



These blog posts are almost always late, but here we are again. Aether3D now has support for scripting. It's possible to make working doors, elevators, keypads etc. using my own scripting syntax which resembles BASIC or Pascal. It's implemented by having a Scriptable interface that's implemented by scriptable objects, lights and cameras. The script code currently goes to the scene file, but I'm planning to make it possible to create them from anywhere. When the player clicks RMB, a ray is cast to the looking direction. The closest intersected object's "activate" script is called. Here's an example that opens/closes elevator's doors:
objectaction liftbutton activate
object liftdoor_left openclose
object liftdoor_right openclose
end

objectaction liftdoor_left openclose
playsound assets/sounds/button.wav
if open == 0
moveto -7 4.8 -32 1
set open 1
else
moveto -3.05 4.8 -32 1
set open 0
endif
end
The other big new thing is stencil shadow volumes implemented using Carmack's Reverse. It took me about 1.5 weeks to get it working right, but it's absolutely rad. My current implementation is slow, because it's calculated every frame even if the light's or the object's origin remains the same and because I don't use two sided stencil test yet. My dev computer's Intel G45 chipset's Mesa driver doesn't yet support two sided stencil test, but I hope it's supported in Ubuntu 9.10 which is out in two weeks. At least it works on my Acer Aspire One's Intel 945GM and Ubuntu 9.10 beta.

Oh yeah, I forgot to mention that I implemented view frustum culling. Before that, my test scene (~500 meshes, ~20,000 triangles) rendered 20 FPS, but now it's 30. I'm culling against axis-aligned bounding boxes, but I will try bounding spheres in the future.

Website: http://users.utu.fi/tmwire/aether3d/