Heilan X3D Browser


I guess it's kind of obvious by now, but to make it official; I'm not able to continue developing Heilan. I'd have liked to carry on and turn it into something more generally useful, but I really don't have the time to work on a project like this.


v0.15 is ready for download! The big improvements in this one are all to do with the Ambisonics implementation - I've finally fixed the soundfield rotation so that it doesn't get screwed up when you rotate the scene around more than one axis. You're also no longer limited to using the speaker configuration presets. The browser will now read a speaker configuration file containing either speaker positions (this is still a little sketchy, and shouldn't be relied upon to give an absolutely correct soundfield) or your own Ambisonic WXYZ coefficients. There is also the option of bypassing the decoder entirely, and streaming the Ambisonic data straight out as a 4 channel B-format signal. This is so you can hook Heilan up to a superior decoder like AmbDec, and not have to worry about my maths being correct.

Other major additions are:

  • Audio Input: You can now stream audio from your soundcard into Heilan's scene and move it about the soundfield, via the new AudioInput node in libheilanextras.
  • OSC Output: With the new OSCOutput node in libheilanextras, Heilan can now act as an OSC client. This essentially means it is now possible to have multiple instances of Heilan all connected and interacting with the same scene.
  • Viewpoint Automation: It's now possible to automate the camera's position and orientation by sending events to the currently-bound Viewpoint. I believe this is how you're supposed to move the camera in X3D scenes, and it means the TimedViewpointNavigation type in libheilanextras is now redundant/deprecated.

There's also various bug fixes and behind the scenes improvements, which you can see in the change log. I'm afraid there's still no fully working MovieTexture or OSX webcam implementations though, because they seem to be kind of complicated.

Finally, if you check the documentation page, you'll see various new bits and pieces (including a tutorial on how to hook up Pure Data to Heilan via OSC), as I do worry that Heilan is not as user-friendly as it should be.

Oh, and there's a new version of the front end too, adding widgets for the new command line options and fixing some bugs.


There's a new video on the videos page of a performance I did last year. Hopefully I'll have another update of some kind over the next week or so.


I finally got round to doing another tutorial. This one demonstrates how to work with sound in Heilan/X3D.


I've added a couple of new videos to the videos page. They're of a couple of improvisations I did with my Ashitaka audiovisual instrument, which runs in Heilan. You can see the code for it in libheilanextras, but I'm afraid you'll have a hard time using it without the physical interface I built for it (visible in the first video).


I've just uploaded v0.14 of Heilan. This is mostly a maintenance release, to fix some issues I didn't notice before uploading v0.13. So the complete list of changes is:

  • Added GestureDetector node type to libheilanextras. This is solely intended for detecting specific gestures from the interface I built for my Ashitaka audiovisual instrument, and (like a lot of the libheilanextras node types) probably isn't of much use to anyone else.
  • Finally got round to incorporating xine-lib so it's possible to view videos via MovieTexture. This is nowhere near complete, and only works on Linux at the moment. I'm still struggling to build xine on Windows, and OSX is always last on my list, due to Apple hating me. If you're on Linux and want to try it out, you should be aware that none of the startTime etc. fields are implemented yet, only url.
  • Implemented Viewport node type (because it was easy to do, not because I have any particular use for it).
  • Now uses GLEW for OpenGL extension handling. I was having some horrible dependency issues trying to handle OpenGL extensions (for multitexturing, shaders etc.) myself, so this vastly simlpifies things for my part (though it does add an extra dependency).
  • Fixed a stupid bug where the browser would crash if you used a Shape node and your graphics card doesn't support shaders.

I have also written a quickstart guide, aimed at quickly getting you up and running with Heilan, as I realised the existing documentation wasn't entirely clear on how everything works together.

This is joined by what will hopefully be the first in a series of tutorials explaining how to create X3D scenes by hand. This one is a very basic explanation of the minimum you need to do to create an X3D scene, aimed at people who are entirely new to Heilan and X3D. Future tutorials will cover working with sound, creating TimeSensor-based animations, and making use of Heilan's OSC support in audiovisual performances.

Finally, my plans for v0.15:

  • OSC output support: This will let Heilan act as an OSC client as well as a server, and let you hook it up to other applications where any events output by X3D nodes can be sent on to them. Most significantly, it will enable you to link multiple instances of the Heilan browser, so you can have people on different computers all working in the same X3D scene (I'm quite excited about this).
  • MovieTexture: I'll make sure this is fully implemented.
  • Audio input: This has been on my todo list for a while now. It'll take the form of a new node type in libheilanextras, since the X3D spec doesn't specify any AudioInput nodes, and let you stream audio into X3D scenes from your soundcard's inputs.
  • OSX support for WebcamTexture: Not sure how possible this is, as I don't have an Apple webcam to test with, and I don't know if they support third party cams...

I won't be supporting the full Interactive profile until at least v0.16, as it's going to require some refactoring of the code. v0.15 is basically about me implementing the remaining things that I think are most important to Heilan's core audiovisual performance audience (assuming there is such an audience), before I start hacking parts of the code apart.


Today marks the release of v0.13. This is probably the biggest update to date. Here's a list of the most significant changes:

  • There's now an OSX version. I've probably not tested it as much as I should have, so let me know if you find any things that don't work as you expect them to.
  • Soundfield rotation now almost works correctly - if you rotate the camera round a single axis it'll work, but not if you try and rotate it around multiple axes.
  • All code is now licensed under version 3 of the GPL.
  • Alpha blending works now.
  • Added a WebcamTexture node to libheilanextras, allowing you to stream webcam footage into the scene (not on OSX yet).
  • Sped up the browser's startup with the addition of an initialise() method to AbstractNode.
  • Added fixes so textures get loaded correctly on big-endian machines.
  • New X3D nodes added:
    • Switch
    • Fog
    • LineProperties
    • Billboard
    • PointLight
    • BooleanFilter
    • BooleanToggle
    • BooleanTrigger
    • IntegerTrigger
    • TimeTrigger
    • BooleanSequencer
    • IntegerSequencer
    • Spotlight
    • KeySensor
    • ElevationGrid
    • StringSensor
    • ProximitySensor
    • Inline (not quite complete)

Check out the ChangeLog for a more detailed list. As you've maybe realised from the above list, not all the Interactive profile nodes are supported yet, as some of them are going to be a pain to implement (that's what I get for designing Heilan without reading the entire X3D spec in depth first... :-( ).


So, um, contrary to what I said previously, there will be an OSX version of Heilan, and it'll be universal binary: Universal Binary Heilan on OSX
(sorry about the huge image, anyone who clicked that - my mac usually acts as my TV (Ubuntu, MythTV), so I've got a fairly big monitor attached to it... Actually, what I should have done is drop the resolution before taking that screenshot. Oops...)


I figured I should probably post a brief update here regarding Heilan's progress. I'm mostly focusing on Ashitaka (the audiovisual instrument I'm developing for my PhD) at the moment, but I have been working on more general purpose functionality too. v0.13 will come with quite a few bug fixes, making it more compatible with standard X3D files, and some new bits and pieces in libheilanextras (e.g. a WebcamTexture node, letting you display the output of a webcam as a texture). I'm also planning on making Heilan an Interactive profile-compatible browser for this release, so you'll be able to use TouchSensors etc. With a bit of luck I'll have it ready for upload by the end of the year.

I don't really know of anyone using Heilan, but if you're out there and you have any requests, please let me know, either via the forum or by email.


An update about the possibility of an OS X version: My mac's still running OSX 10.3.9, which means I can't build universal binaries. I was going to release a ppc-only version, but it turns out that with one of the recent updates to Quicktime, Apple decided they needed to include a new version of libstdc++. A version that is completely incompatible with the version included with XCode. As such, not only can I not build universal binaries, I can't even build a ppc-only executable, since Heilan uses SDL, which uses Quicktime.

So, unless anyone is willing to buy me an upgrade to Tiger, it doesn't look like there's going to be an OS X version of Heilan.


I've just uploaded a new version, v0.12. The major things in this release are an EXAMINE navigation mode that works correctly, multitexturing now being implemented (though only with the MODULATE mode for now), a bloom filter post-processing option that really isn't very good, and support for the ProgramShader and ShaderProgram X3D nodes (so you can implement vertex and fragment shaders now). There's a bunch of other updates too which you can see in the ChangeLog, though I think they're probably only of interest to me. This release also includes the tentative beginnings of my Ashitaka instrument.

Also, I'm not aware of any developers creating extra nodes/navigation types for Heilan, but if you're out there, you should note that I've refactored the way audio is handled in nodes, so you'll have to update your code. I've also updated and cleaned up the doxygen documentation.


Sorry, I just realised my instructions for generating a video from the offline rendering output were out of date compared with my current methods, and probably wouldn't have generated a particularly good-quality video. I've updated them now, to what I used for the two videos on the videos page.


Just a quick note for anyone interested: the videos are now on youtube too (the download links remain, since they're higher quality).


Following on from my last post, I've now uploaded the new version of Heilan - both the browser and the front end have been updated to v0.11. As well as the things noted in the last post, this version also has the ability to record and playback OSC events, so you can record any performances you do. There's various bug fixes too - the full list of changes is in the change logs included in the two *-src.tar.gz files.


I've finally got Heilan's offline rendering working, so I've uploaded a couple of videos of Heilan in action. The first one's an audiovisual piece I did for a concert at the university (no real-time interaction involved), and the second one's a simple example of what's possible when you connect a MIDI fader box to Heilan via OSC. I'll upload the updated version of Heilan once I've finished the other updates I've been working on for it (USE support, some more nodes for libheilanextras, a slightly upgraded OSC implementation, a fully implemented Background node...).


The first version of Heilan is released, along with this website. I've included as much information as I could think of here, which is maybe a bit optimistic - I'm not sure how many people are actually interested in such a specific (and only moderately useful, at this stage) X3D browser, but we'll see how things go. There's no OSX version of the software yet since I don't have the ability to build universal binaries, but that should come eventually, as I aim to support Windows, Linux and OSX.