Digital Sunlite Project

news | main | screenshots | download | hosts


15th October 2004:
Q: What's this?
A: Every penny arcade comic from 2004 :P

7th October 2004:
So I added TGA support to my engine. The good thing about tgas is that they support a 4th=alpha channel. So my engine now supports transparent textures. Quite a small detail but it really allows for some cool stuff. Below is a sketch of the new hypercard design, inspired by Masumane Shirow's new Ghost in the Shell : Man Machine Interface manga, which is absolutely packed with cyberspace scenes, and these cool floating info-panel things.

Some other cool stuff... I added compression of file transfers across the network, using ZLib. So far ZLib seems ultra solid, with a pretty simple interface - basically a compress() and uncompress() function. ZLib compression is an absolute life-saver when you want to transfer TGAs over the network :P

10th August 2004: I've written a tutorial on how to create a wind turbine model in 3DS max, and import it into the cyberspace, as well as giving the blades a script so that they spin. You can view it in pdf of html form:
Wind turbine tut (html)
Wind turbine tut (pdf)

19th July 2004: Finally got everything working again. Our IP address got changed which is kinda annoying when you don't own a DNS name. I moved my webserver to a linux computer from a Windows 98 box, which I'm sure you'll agree is a big improvement in terms of OSs.

If you're trying to connect with an already downloaded DSP version, then you'll need to grab the new bootstrapips.txt (just run getbootstrapips.exe) to get my new IP address. The v1.2.1 download is now updated with the new IP Address tho.

p.s. Check out the purty screenshots from my Monte Carlo raytracer.

14th July 2004: Our cable connection was fragged recently, looked like the ISP did something like allocate our IP Address to two households at the same time. It's nearly fixed now, although right now I'm on a new IP address, hopefully it will be changed back. This reminds me why a DNS name for my connection would be a good idea :) So if anyone has tried out the cyberspace recently and it didn't connect, that's why.

I've been working a little more on enabling scripts/machine code that can autonomously create and destroy objects in the virtual world, which has brought me bang up against the issue of 'object pollution / object spam'. For example, when you can create a script that can cover the central 4km3 of the cyberspace with thousands of 'spam objects' in a fraction of a second, then you really need a way of making sure this doesn't happen, or at least that it is easily undoable. I'm still mulling this one over.

Another problem arises from the use of tombstones, which are needed to mark deleted objects when epidemic consistency algorithms are used. The problem is they accumulate very fast when scripts can create and delete objects rapidly. The solution to this is related to the solution of the first issue, and perhaps with being more aggressive in discarding old tombstones.

6th July 2004: Some new screens up. They're being served off my home connection so they might load a bit slow tho :(

24th June 2004: Changed the planar shadow generation to use OpenGL's transformation matrices for projecting the models onto the ground, instead of doing the projection in software myself. Things are quite a bit faster now. In fact you could say it was a crime to do it the old way. It's actually the first time I have constructed a custom transformation matrix by hand like this (i.e. for a custom uninvertible transform); it's actually pretty easy once you figure out what's what.

20th June 2004: It's the return of the DSP. webcam! yay!. Check it out here. It was such a mission getting this working. I had it kinda working ages ago, using glReadPixels reading off the normal display buffer. The only problem with that approach was that a minimised or obscured window returned crazy undefined pixels. So I had to use offscreen pbuffers, which were a mission to get going. Actually I still haven't got them working with VBOs yet; I have to fall back to immediate mode rendering for the offscreen render :)

9th June 2004: Gregault had the great idea of providing instructions actually in the cyberspace so that people don't have to alt-tab and try and find the instructions somewhere. Here's an image of the portal instruction sign, and this is a sign I made for the hypercards. Actually I have seen such instructions in Alphaworld, but for some reason didn't think of putting them in my cyberspace.

18 May 2004: New version 1.2.0 is ready! Go to the downloads page to get it. This version breaks network compatibility with old versions so don't use old versions any more. Check out the changelog here.

The stuff I mentioned below about Lua agents and so forth is in this release. However it's gonna take a while to write up docs on how to do scripting etc.. so that can wait till later.

There is another big change that I hinted at below: scriptable world rules! Now different voxels can be assigned different world scripts. Right now the scope of the rules is pretty limited - the rules can create new objects, change the gravity, and teleport players. I hope to extend this in future.

You can post feedback/discuss here.

1st May 2004: Knocked up a glow effect. Screenshots before and after. It's quite a subtle effect. What it does is 'bleed' bright areas into dark areas. Gives the image a nice soap opera effect. It's done by rendering the scene at low resolution, then copying the colour buffer into a texture. This texture is then blurred by rendering jittered copies of itself into a new texture. The actual scene is then draw again. Finally the blurred scene texture (the glow texture) is added to the scene by drawing as an alpha blended quad over the image.
Unfortunately there's quite a big performance hit associated with this method, due to the scene having to be rendered twice per frame. Even though the first time the scene is rendered it is to a small 128x128 area, it still takes a while, probably due to the amount of geometry being drawn.

26th March 2004: K, I've been working on some PRETTY FUCKING COOL SHIT.

First off, I've added scripting. I'm using the language Lua for the scripting. I defined a new type of object, the LuaAgent type. Each LuaAgent has a Lua script that controls its behaviour. The scripts can make calls into an API that I am working on. Right now it has stuff for moving, setting orientation, and saying chat messages. I'm working on adding lots of stuff to it.

I've made a few things like bots that wander around at random. If you say (i.e. send a chat message) 'stop', then they stop moving. Say 'go' and they start moving again.

It's kinda tricky allowing arbitrary agent behaviour in a decentralised system. I've solved (or at least attempted to solve) this in a few ways, including using synchronised clocks for strictly time-paramaterised behaviour, and using dynamic coordinator agents for more complicated behaviour. More on this later.

The second cool thing is interpolation. Basically everthing that now moves or rotates is now linearly interpolated. This includes objects, LuuAgents and avatars. So no more avatars doing the short range teleport.

B.t.w, I'm getting towards one of my ultimate goals for the cyberspace - arbitrary rules for different areas of the cyberspace. Imagine walking into an area, where a first person shooter is taking place. Suddenly u are equipped with a railgun, u get a score etc.. And then you walk to another area, which is a RPG, or a flight sim , or just a chat area with no gravity.

Whether any of this is actually possible with a highly decentralised system is debatable. But I'll definitely give it a go. And if it doesn't work I'll fall back on a more centralised system.

New version with scripting etc.. will be out ASAP once the API is fleshed out to a decent degree.

12th March 2004: Wiki and cyberspace may be down over the next few days

11th March 2004: Check this out: Online Peer List

2nd Feb 2004: Ok, I fixed my firewall so that you should be able to actually visit the Wiki.

26th Jan 2004: Check out the new DSP. Wiki
A Wiki is a collaborative website, a kind of mix of forum, mailing list and document server.

10th Jan 2004: V1.10 released. Go to the downloads section to get it. This version just makes things a bit easier to use. See the changelog for a list of the changes.

5th Jan 2004: Made a couple of changes for the upcoming v1.10 which should make things slightly easier to use - fixed the crashing on exit bug in winXP, and added quake-style chatting where u press 't' and type in the message and then press enter, avoiding the console entirely.

22 Dec 2003: New screenshot in screenshot section.

23 Nov: New version v1.09 released. This version breaks network protocol compatibility with the old versions so don't use the old versions any more. Go to the download section to get it.
Also I now have a permanent connection to the net, so my computer should be serving out the world a lot more of the time.

20 Nov 2003: Added a new screenshot to the screenshots section.

10 Nov 2003: Been working on the graphics engine. It's slowly transforming from a nasty piece of work to an elegant lump of code. A couple things i learnt along the way:
* When loading .3ds models, load the smoothing groups and work out the normals from that. I was trying to approximate the smoothing groups myself using angles between adjacent tris, which is just a bad idea.
* Avoid VAR (vertex array range). It's nasty. You have to write your own mem manager among other things. Use VBOs (vertex buffer objects) instead. VBOs gave me a 2x FPS boost in areas with lots of geometry, from plain old glVertex calls

All in all it's been an interesting time for me as I've been delving further into traditional 3d-accelerated graphics programming. I tried stencil volume shadows, but they eat too much fillrate to be justifiable on my geForce2. The algorithm is a neat trick though. I'm sticking with projecting model tris onto the ground plane, although the shadowed area is now drawn with proper texturing as opposed to with untextured grey triangles. I used the stencil buffer for this.

In totally unrelated news that has shattered my fragile understanding of the universe:
1) Traditional Quantum mechanics is entirely deterministic. (If the decoherence theory is correct)
2) Not only is absolute space and time consistent with measurement, you can actually get an exact reading of the speed of the Earth relative to the cosmic microwave background (= 365Km/s ~= c / 1000). Make of this what you will :)

Thinking about control and ownership in cyberspace, it may be helpful to split the problem into 2 pieces:
1) If the underlying technology was not a problem, and could be assumed to be implemented, what should the laws/rules of ownership and control in cyberspace be like? Eg. can anyone delete any object? Can a person own a space? (the normative question)
2) Is it possible to design an algorithm to implement the system decided on in question one? (the practicality question)

Please send me an email if you have any ideas on question one.

10 Oct 2003: Hi all, time for an update.
I've been making tonnes of changes, mostly to the internals but with a few visible changes. Fixed a huge player physics bug, it's a miracle the physics code worked at all. Re-added agent state change packet-pushing. Sped up the speed of synchronisation (hopefully). etc etc..

All these changes will be seen when v0.109 is released.

* * *

You may have tried the program, started it up and found only a white plane and no objects in the world, and the console spitting out 'no hosts in locale to sync with'. This means that no one else was running the DSP (digital sunlite project) at the same time. Why not? Well my main connection is a 56k dialup modem, so I can't be online the whole time. I have access to a couple of Linux servers, but the DSP is for windows, and I can't be bothered to port it yet as it would take a few weeks at least. Also no one has volunteered a windows box to run a DSP server on. So for the time being you will only see anything in the world if u happen to catch me online at the same time. This will change when I get some people running servers, so please run a server if you can. See the hosts page for more details.

9 Sep 2003: Version 1.08 released. Please download and test!

4 Sep 2003: Version 1.07 released. The changes are mainly to make the process of 'patching in' to the p2p network more aggressive. For instance a discovery message is now sent every 20 secs instead of only on startup. Also sped up graphics and physics a bit.

27 August 2003: Version 1.06 released. Lotsa fixes/changes.

10 May 2003: Improved player physics. You are now represented by a stack of 3 spheres as opposed to a point.