Mundo is a non-violent immersive 3D environment for use on the Internet and will be created in three
- Stage 1. The objective in this stage is to create a multi-participant
environment for basic chat/audio use. All of the 3D environments are complete separate worlds that
cannot be extended by the netizens. This is also where we experiment with cross-rendering terrain
and BSP-rendered buildings. This stage allows early bugs to be caught and creased out.
- Stage 2. This stage serves to insert code to allow NPC characters
to tell a storyline and initiate the code that will allow worlds to be larger by dynamic loading/unloading
of new resource information. The idea for the storyline is to explain the basics of philosophy.
This stage is useful to get to grips again with the architecture of the application as a
whole to possibly make changes before the next stage. This stage allows to crease out bugs
in the more sophisticated areas of the eventual application.
- Stage 3. In this stage the application will become fully extendable
by netizens. This means netizens will be able to add content to the world itself in the form of
landscape ( or change content ), add buildings to the landscape and also add completely new buildings
based on BSP information.
There are several requirements for this application that are both interesting and complex to implement
- Dynamic resource loading: Which should provide a seamless experience
for the netizen. This means resources in the form of vertices and textures must be dynamically loadable on
request and not break information in either the BSP or terrain renderer. Textures must be replaced
only when no longer required and otherwise proper handling should take place when texture slots are full.
- Mixing BSP and terrain rendering: The idea is to render terrain using
a regular terrain rendering engine. ( Terrain rendering is not yet *done* as much as BSP rendering is ).
In my idea, I'm rendering a BSP scene without a skybox, but use the skybox as the viewpoint of the
netizen. By translating the whole BSP scene ( and possible scaling it up/down ) it is possible to
render a BSP scene within a terrain rendering and to make it appear as a very nice detailed
building ( or, if performance allows, a village ). I have not experimented yet at this time
what the performance result is, but I expect there must be ways to handle this and perhaps optimise
by using smarter culling algorithms.
- Streaming audio/video: In the eventual application there will be
need for streaming audio and video. I wish to project video streams on polygons inside the engine.
An example would be a television in a house or a video wall on a skyscraper. Supposedly, this is also
a possibility to show the news or perhaps use timers within the application to have the TV switch on
automatically to show the news at the request of the netizen ( or let netizens in a room switch the tele to
the news from their remote, so that other netizens will see the same content ). Streaming audio can be
used both P2P and S2P. An example might be a pub where a netizen requests a song from the waiter that
will be played using streaming audio to the 'channel'.
- Extendable logic: The idea is to have several 'logic-slots' inside
the 3D engine which allows location-dependent logic modules to plug in. The location data in either the
landscape or the BSP should request the plugins to be loaded. As far as I can determine now, logic modules
will normally be used to control behaviour or capabilities of models. For instance, a waiter in a restaurant
will be a model that is loaded separately, along with the logic module for that waiter. The logic module
will determine the behaviour for the waiter and the capabilities of what it can do and when it does that.
Logic modules will be unloaded when no longer needed. Since this introduces possible security problems,
the idea is to use cryptography to verify plugins before these are loaded into memory. A 3rd party
should then act as the trusted party and supply the public keys that will be used throughout the application.
Qua choice of language, I am considering both C and C# ( dotGNU ) for implementation of the logic.
Exposure of C++/C functions of the game engine should be easy enough.
- Preventing crowding out: A problem to face eventually is the fact where many
people gather in the same place at once. There is no strategy determined yet to control what will happen
in those cases. My initial feeling is to prevent crowding in small places or otherwise 'neglect' users
based on their level within the environment, their rating by the netizen himself or another fair
FIFO based system.
- Advertisements: An idea to get sponsoring to cover expenses
is to use billboards throughout locations with rotating advertisements ( when online only ).
- Editors: It is a requirement to implement my own editors in order
to build the levels. This is one of the hardest tasks overall, as this determines the quality of the data
going in. Probably, there will be some converters here to convert data from other editors into my
own suitable format.