About supporting Quake III

Discuss about anything related to the Irrlicht Engine, or read announcements about any significant features or usage changes.
christianclavet
Posts: 1638
Joined: Mon Apr 30, 2007 3:24 am
Location: Montreal, CANADA
Contact:

About supporting Quake III

Post by christianclavet »

Hi,

The support for Quake III maps, shaders and models in IRRlicht are great.

But I was trying to import a BSP I made using "OPEN ARENA" & GTKRadiant an open source equivalent to quake III based on the same source as the Quake III engine.

The BSP doesnt seem to be compatible, I've tryied to compile the .MAP file with another tools that can compile QUAKE MAP to BSP. Still the same.

So for using this I absolutely need QUAKEIII???

Can someone could tell me how compatible the IRRlicht BSP loader is with other QUAKEIII type BSP?

Is there a working tool to create MD3? (I use 3DS in a recent version (at least version 9)) but there is no exporter for it to create MD3 (Latest release I found was release 6 and didnt worked.)

This was all tested under the latest version of IRRlicht (1.5 official release)

Thanks.
sio2
Competition winner
Posts: 1003
Joined: Thu Sep 21, 2006 5:33 pm
Location: UK

Re: About supporting Quake III

Post by sio2 »

christianclavet wrote:Can someone could tell me how compatible the IRRlicht BSP loader is with other QUAKEIII type BSP?
At the moment I would say that you can only load Quake3 BSP files. Compiled BSP files hold a version number in the header - I would imagine that "Open Arena" uses a different version number, hence the Irrlicht BSP loader would simply bail.

I guess there's no reason why Irrlicht can't load Open Arena BSP files. It just needs support added to the BSP loader. I'm guessing that the "open" part means that full source code is available, including the BSP file format? If I had those details I could add support myself. One of the most common alterations is to increase the resolution of lightmaps, but this requires a change in the BSP version number.

Did they change the MD3 model format as well? Anyway, I personally would avoid the MD3 format.

I'm just wrapping up Version 0.3 of IrrPhysx (with fluid support). One of the tasks on my list was to look at adding PVS support to the Irrlicht BSP loader so I guess I could bump this up my list and look at loading Open Arena files.

Can I ask why you're not just using vanilla Quake3?

Oh, and if you can supply an Open Arena level you have built it would help for testing.
Katsankat
Posts: 178
Joined: Sun Mar 12, 2006 4:15 am
Contact:

Re: About supporting Quake III

Post by Katsankat »

christianclavet wrote:So for using this I absolutely need QUAKEIII???
Hi, GTKRadiant 1.5.0 is multi-engine so it might be possible to set up radiant for your engine. This is what I am working on at the moment. The engine will have its own game definition file that contains the entity list available for this engine. This is certainly how they did for RTCW, Quake, Doom... If I can find something it will be shared.
sio2
Competition winner
Posts: 1003
Joined: Thu Sep 21, 2006 5:33 pm
Location: UK

Re: About supporting Quake III

Post by sio2 »

Katsankat wrote:
christianclavet wrote:So for using this I absolutely need QUAKEIII???
Hi, GTKRadiant 1.5.0 is multi-engine so it might be possible to set up radiant for your engine. This is what I am working on at the moment. The engine will have its own game definition file that contains the entity list available for this engine. This is certainly how they did for RTCW, Quake, Doom... If I can find something it will be shared.
I think Christian's problem is that the bsp won't load in Irrlicht. I'm guessing it's the bsp version number, but I'll try it for myself when I get chance...
christianclavet
Posts: 1638
Joined: Mon Apr 30, 2007 3:24 am
Location: Montreal, CANADA
Contact:

Post by christianclavet »

Hi! Thanks for the reply!

Wow! Great!
Here is the OpenArena Web site: http://openarena.ws/

I would have prefered opening Source's BSP files (My experience is mostly building levels with Hammer), but since they don't load (MAP files and VMF files are a lot different, I assume they changed it a lot). I was at least hoping to build levels inside GTK Radiant. Quake III is almost 10 years old now, I really think it's really passed out. We should be open to new technologies based on this (The Quake base is still used today but being updated)

If you could update IRRlicht to accomodate for those new technology I would be very happy!

In fact, I like the BSP file format so much, I think it could serve as a really good format for saving IRRLicht scenes in a binary fashion. With it we could have the whole scene, the textures, the shaders files (Could be Quake type shaders, HLSL or GLSL), the geometry of the meshes all inside a single file, and all the nodes (light nodes, camera nodes, etc).

A converter could be made so we could load QuakeIII types BSP and convert them into the IRRlicht variant (converting some Entities to nodes). But this could be a separate project.... Still I'm only a level designer playing a little with C++ code.

For the results of the BSP file loading; at the moment, the file is being loaded correctly, textures inside the BSP seem to be loaded, but the geometry is discarded (OpenArena Bsp's).

EDIT: Here is the link to a test level I made using GTK Radiant. It's really small and was just to test. The compile was done using OpenArena tools.

http://www.clavet.org/files/Storage/OA_Test_Map.zip
sio2
Competition winner
Posts: 1003
Joined: Thu Sep 21, 2006 5:33 pm
Location: UK

Post by sio2 »

christianclavet wrote:For the results of the BSP file loading; at the moment, the file is being loaded correctly, textures inside the BSP seem to be loaded, but the geometry is discarded (OpenArena Bsp's).
I'll take a look at it. I've just released IrrPhysx 0.3 so I'm now moving to the next item on my task list - BSP PVS was one of them. 8)

Am I right in thinking that you're not bothered which BSP technology we use? For example, if I made a Doom3 BSP loader you'd be equally happy? (I already have a demo of loading Doom3 MD5 models in Irrlicht on my website).
christianclavet
Posts: 1638
Joined: Mon Apr 30, 2007 3:24 am
Location: Montreal, CANADA
Contact:

Post by christianclavet »

sio2 wrote: I'll take a look at it. I've just released IrrPhysx 0.3 so I'm now moving to the next item on my task list - BSP PVS was one of them. 8)

Am I right in thinking that you're not bothered which BSP technology we use? For example, if I made a Doom3 BSP loader you'd be equally happy? (I already have a demo of loading Doom3 MD5 models in Irrlicht on my website).
Yes. The only thing that is important, is that we are able to use an open source editor (GtkRadiant for example) with and open source map compiler to produce the BSP. So we don't have to search for a old discontinued product to create the BSP. From what I understand, is that GTK Radiant is producing the QuakeIII MAP file but the OpenArena BSP compile tool is making that uncompatible with the IRRlicht loader.

I could say that I'd be more in favor for a BSP format compatible with Source/Hammer. (Since it's one of the most up to date BSP editor right now, but supporting an open source BSP format would be important also (since the developper would not have to buy a game for developping his own level for IRRlicht)

What would be great of the IRRlicht BSP loader:
- Compatibility with Quake III bsp (As it is now)
- Compatibility with Source BSP (I'd would be overjoyed as I could make huge maps in very short time). The bad point (as quake III) is that the developper has to get Hammer and a source game engine (as OrangeBox for example, just to compile the maps for IRRlicht)
- Compatiblity with an open source Quake III (As OpenArena). The tool is still developped, and it cost nothing. So perfect for testing purpose. But if the project would stop being developped and dropped; the IRRlicht community would have to support theses tools by hosting them for their community users (files hosting for downloading the tools)

I've also tried to load the given MAPs from the Open Arena distribution and they also don't load the geometry.
EDIT: Humm, strange. I downloaded Quake III from the net and tried to load it's map (It's point release 1.32). Everything seem to load exept the map mesh (All the textures and the shaders in the BSP were loaded)

Does the BSP format has been changed? IRRlicht is compatible with witch version of Quake III BSP?
sio2
Competition winner
Posts: 1003
Joined: Thu Sep 21, 2006 5:33 pm
Location: UK

Post by sio2 »

I just tried loading an Open Arena map and it loaded just fine.

I got openarena-0.8.1, loaded up Irrlicht 1.4.2 examples, altered the Quake3Map example to use pak0, pak1-maps and pak4-textures (full paths to the pk3's), then loaded maps/aggressor.bsp. Worked fine. :?
christianclavet
Posts: 1638
Joined: Mon Apr 30, 2007 3:24 am
Location: Montreal, CANADA
Contact:

Post by christianclavet »

Thanks a lot SIO2.

I finally understand what was the problem. I was assuming the textures was loaded inside the BSP and in fact it was not. I was thinking the texture were loaded because I did only got "Loaded texture: textures/gothic_trim/pitted_rust" messages. I think the BSP loader output is wrong about this. Having the whole thing inside the PK3 solved the problem.

If you need to create a BSP, you need also all the textures you used inside your PK3 (or path).

I've done the same thing as you've done and it now load and display correctly (A standard quake III map with all the texture).

Is there some optimisations done when you load a BSP inside IRRlicht 1.5?
I've got a 300+FPS frame rate and from what I see there, the map contain 100,000+ polys. I used the base loaders (shaders are not processed)

Code: Select all

Irrlicht Engine version 1.5
Microsoft Windows Vista Personal Service Pack 1 (Build 6001)
Using renderer: Direct3D 9.0
NVIDIA GeForce 9800 GX2 nvd3dum.dll 7.15.11.8048
Loaded shader: scripts/common.shader for scripts/common.shader
Loaded shader: scripts/models.shader for scripts/models.shader
Loaded shader: scripts/liquid.shader for scripts/liquid.shader
Loaded texture: textures/gothic_cath/xiandm9doore2
Loaded texture: textures/common/caulk
Loaded texture: textures/gothic_trim/pitted_rust
Loaded texture: textures/gothic_cath/xiandm9doore2_invert
Loaded texture: textures/gothic_block/killblock
Loaded texture: textures/gothic_floor/metalbridge06
Loaded texture: textures/gothic_floor/metalbridge02
Loaded texture: textures/sfx/launchpad_diamond
Loaded texture: noshader
Loaded texture: textures/sfx/launchpad_blocks17
Loaded texture: textures/gothic_light/gothic_light3_3k
Loaded texture: textures/gothic_block/blocks17
Loaded texture: textures/gothic_floor/metalbridge06b
Loaded texture: textures/gothic_trim/km_arena1tower2
Loaded texture: textures/gothic_trim/metalsupsolid
Loaded texture: textures/base_trim/border11light
Loaded texture: textures/sfx/bouncepad01_block17
Loaded texture: textures/skin/skin7_teeth
Loaded texture: textures/sfx/q3dm9fog
Loaded texture: textures/gothic_cath/graycathflesh5L
Loaded texture: textures/gothic_cath/graycathflesh4L
Loaded texture: textures/gothic_cath/graycathflesh4R
Loaded texture: textures/gothic_cath/graycathflesh3R
Loaded texture: textures/gothic_cath/graycathflesh3L
Loaded texture: textures/gothic_cath/graycathflesh1L
Loaded texture: textures/gothic_cath/graycathflesh1R
Loaded texture: textures/gothic_block/gkc19_wide_right
Loaded texture: textures/gothic_trim/km_arena1tower6
Loaded texture: textures/gothic_trim/metalsupport4b
Loaded texture: textures/gothic_block/dark_block
Loaded texture: textures/gothic_block/gkc18b
Loaded texture: textures/gothic_block/gkc20_wide_right
Loaded texture: textures/gothic_trim/pitted_rust2
Loaded texture: textures/common/nodraw
Loaded texture: textures/sfx/flame1
Loaded texture: textures/sfx/flame1side
Loaded texture: textures/gothic_trim/metalsupport4g
Loaded texture: textures/gothic_trim/pitted_rust3
Loaded texture: textures/common/hint
Loaded texture: textures/gothic_door/arch_tall2b
Loaded texture: textures/gothic_floor/xstepborder3
Loaded texture: textures/gothic_floor/xstairtop6
Loaded texture: textures/gothic_block/gkc14b
Loaded texture: textures/gothic_block/evil_e3window_dark
Loaded texture: textures/sfx/xflame1side
Loaded texture: textures/gothic_block/gkc15c
Loaded texture: textures/gothic_block/gkc15b
Loaded texture: textures/skies/toxicskytim_dm7
Loaded texture: textures/gothic_block/killblock_i4
Loaded texture: textures/gothic_trim/baseboard04
Loaded texture: textures/gothic_floor/blocks17floor2
Loaded texture: textures/sfx/hellfogdense
Loaded texture: textures/gothic_block/killblock_j
Loaded texture: textures/common/clip
Loaded texture: textures/gothic_block/blocks18c
Loaded texture: textures/sfx/diamond2cjumppad
Loaded texture: textures/gothic_ceiling/ceilingtechplain
Loaded texture: textures/gothic_block/gkc_larg_left
Loaded texture: textures/gothic_block/gkc20a
Loaded texture: textures/gothic_block/killblock_i3
Loaded texture: textures/gothic_trim/baseboard09_i
Loaded texture: textures/gothic_block/gkc_large_right
Loaded texture: textures/gothic_wall/killblock
Loaded texture: textures/gothic_block/xGkc15ba
Loaded texture: textures/gothic_door/arch_tall2a
Loaded texture: textures/gothic_light/gothic_light3_15K
Loaded texture: textures/gothic_door/xian_tourneyarch_inside2
Loaded texture: textures/gothic_door/xian_tourneyarch_bottom2
Loaded texture: textures/base_floor/nomarkstone_1
Loaded texture: textures/gothic_trim/baseboard09_h
Loaded texture: textures/gothic_trim/supportborderside
Loaded texture: textures/gothic_light/pentagram_light1_2K
Loaded texture: textures/gothic_light/pentagram_light1_5K
Loaded texture: textures/gothic_ceiling/ceilingtech_big
Loaded texture: textures/gothic_floor/metalbridge06broke
Loaded texture: textures/gothic_block/evil_e3bwindow
Loaded texture: textures/gothic_trim/metaldemonkillblock
Loaded texture: textures/common/weapclip
Loaded texture: textures/gothic_door/skull_door_b
Loaded texture: textures/gothic_door/skull_door_f
Loaded texture: textures/gothic_door/skull_door_d
Loaded texture: textures/gothic_door/skull_door_e
Loaded texture: textures/gothic_door/skull_door_a
Loaded texture: textures/gothic_door/skull_door_c
Loaded texture: textures/gothic_door/metal_door_c
Loaded texture: textures/gothic_door/metal_door_d
Loaded texture: textures/gothic_door/metal_door_b
Loaded texture: textures/gothic_door/metal_door_a
Loaded texture: textures/gothic_door/archpart8
Loaded texture: textures/gothic_door/archpart9
Loaded texture: textures/gothic_ceiling/ceilingtech02_c2
Loaded texture: textures/base_wall/metaltech10final
Loaded texture: textures/gothic_cath/graycathflesh5R
Loaded texture: textures/gothic_cath/graycathflesh2L
Loaded texture: textures/gothic_cath/graycathflesh2R
Loaded texture: textures/gothic_trim/window_pitted_rust
Loaded texture: textures/skin/pjwal2k
Loaded texture: models/mapobjects/visor_st
Loaded texture: models/mapobjects/major_st
Loaded texture: models/mapobjects/major_h_st
Loaded texture: models/players/ranger/ranger_statue
Loaded texture: models/players/ranger/ranger_h_statue
Loaded texture: models/players/doom/doom_statue
Loaded texture: models/players/doom/doom_f_statue
Loaded texture: models/mapobjects/baph/bapholamp_fx
Loaded texture: models/mapobjects/baph/bapho_lamp
Loaded texture: models/mapobjects/baph/wrist
Loaded texture: models/mapobjects/storch/storch
Loaded texture: models/mapobjects/storch/storch_tall
Loaded texture: models/mapobjects/wallhead/wallhead02
Loaded texture: flareShader
Loaded texture: textures/common/trigger
Loaded texture: textures/common/nodrop
Loaded shader: scripts/gothic_trim.shader for textures/gothic_trim/pitted_rust
Loaded shader: scripts/gothic_block.shader for textures/gothic_block/killblock
Loaded shader: scripts/gothic_floor.shader for textures/gothic_floor/metalbridge
06
Loaded shader: scripts/sfx.shader for textures/sfx/launchpad_diamond
Loaded shader: scripts/gothic_light.shader for textures/gothic_light/gothic_ligh
t3_3k
Loaded shader: scripts/base_trim.shader for textures/base_trim/border11light
Loaded shader: scripts/skin.shader for textures/skin/skin7_teeth
Loaded shader: scripts/gothic_wall.shader for textures/gothic_wall/killblock
Loaded shader: scripts/base_floor.shader for textures/base_floor/nomarkstone_1
Loaded shader: scripts/base_wall.shader for textures/base_wall/metaltech10final
Loaded texture: textures/gothic_cath/xiandm9doore2.jpg
Loaded texture: pitted_rust.jpg
Loaded texture: textures/gothic_cath/xiandm9doore2_invert.jpg
Loaded texture: killblock.jpg
Loaded texture: metalbridge06.jpg
Loaded texture: textures/gothic_floor/metalbridge02.jpg
Loaded texture: textures/sfx/launchpad_diamond.jpg
Loaded texture: textures/sfx/launchpad_blocks17.tga
Loaded texture: textures/gothic_light/gothic_light3.jpg
Loaded texture: blocks17.jpg
Loaded texture: metalbridge06b.jpg
Loaded texture: textures/gothic_trim/km_arena1tower2.jpg
Loaded texture: textures/gothic_trim/metalsupsolid.jpg
Loaded texture: textures/base_trim/border11light.jpg
Loaded texture: textures/sfx/bouncepad01_block17.jpg
Loaded texture: skin7_teeth.jpg
Loaded texture: graycathflesh5l.jpg
Loaded texture: textures/gothic_cath/graycathflesh4l.jpg
Loaded texture: textures/gothic_cath/graycathflesh4r.jpg
Loaded texture: textures/gothic_cath/graycathflesh3r.jpg
Loaded texture: textures/gothic_cath/graycathflesh3l.jpg
Loaded texture: textures/gothic_cath/graycathflesh1l.jpg
Loaded texture: graycathflesh1r.jpg
Loaded texture: textures/gothic_block/gkc19_wide_right.jpg
Loaded texture: textures/gothic_trim/km_arena1tower6.jpg
Loaded texture: metalsupport4b.jpg
Loaded texture: dark_block.jpg
Loaded texture: gkc18b.jpg
Loaded texture: textures/gothic_block/gkc20_wide_right.jpg
Loaded texture: pitted_rust2.jpg
Loaded texture: metalsupport4g.jpg
Loaded texture: pitted_rust3.jpg
Loaded texture: arch_tall2b.jpg
Loaded texture: textures/gothic_floor/xstepborder3.jpg
Loaded texture: textures/gothic_floor/xstairtop6.jpg
Loaded texture: textures/gothic_block/gkc14b.jpg
Loaded texture: windowevil2c_block18c.jpg
Loaded texture: textures/gothic_block/gkc15c.jpg
Loaded texture: gkc15b.jpg
Loaded texture: killblock_i4.jpg
Loaded texture: textures/gothic_trim/baseboard04.jpg
Loaded texture: blocks17floor2.jpg
Loaded texture: killblock_j.jpg
Loaded texture: blocks18c.jpg
Loaded texture: ceilingtechplain.jpg
Loaded texture: gkc_larg_left.jpg
Loaded texture: gkc20a.jpg
Loaded texture: killblock_i3.jpg
Loaded texture: textures/gothic_trim/baseboard09_i.jpg
Loaded texture: gkc_large_right.jpg
Loaded texture: killblock.jpg
Loaded texture: textures/gothic_block/xgkc15ba.jpg
Loaded texture: arch_tall2a.jpg
Loaded texture: xian_tourneyarch_inside2.jpg
Loaded texture: textures/gothic_door/xian_tourneyarch_bottom2.jpg
Loaded texture: textures/base_floor/smallstone.jpg
Loaded texture: baseboard09_h.jpg
Loaded texture: textures/gothic_trim/supportborderside.jpg
Loaded texture: ceilingtech_big.jpg
Loaded texture: metalbridge06broke.jpg
Loaded texture: windowevil2c_killblock.jpg
Loaded texture: metaldemonkillblock.jpg
Loaded texture: textures/gothic_door/skull_door_b.tga
Loaded texture: textures/gothic_door/skull_door_f.tga
Loaded texture: textures/gothic_door/skull_door_d.tga
Loaded texture: textures/gothic_door/skull_door_e.tga
Loaded texture: textures/gothic_door/skull_door_a.tga
Loaded texture: textures/gothic_door/skull_door_c.tga
Loaded texture: textures/gothic_door/metal_door_c.tga
Loaded texture: textures/gothic_door/metal_door_d.tga
Loaded texture: textures/gothic_door/metal_door_b.tga
Loaded texture: textures/gothic_door/metal_door_a.tga
Loaded texture: archpart8.jpg
Loaded texture: archpart9.jpg
Loaded texture: textures/gothic_ceiling/ceilingtech02_c2.jpg
Loaded texture: metaltech10final.jpg
Loaded texture: graycathflesh5r.jpg
Loaded texture: graycathflesh2l.jpg
Loaded texture: textures/gothic_cath/graycathflesh2r.jpg
Loaded texture: window_pitted_rust.jpg
Loaded texture: pjwal2k.jpg
Loaded texture: visor_st.jpg
Loaded texture: major_st.jpg
Loaded texture: models/mapobjects/major_h_st.jpg
Loaded texture: models/players/ranger/ranger_statue.tga
Loaded texture: models/players/ranger/ranger_h_statue.tga
Loaded texture: models/players/doom/doom_statue.tga
Loaded texture: models/players/doom/doom_f_statue.tga
Loaded texture: models/mapobjects/baph/bapho_lamp.tga
Loaded texture: models/mapobjects/baph/wrist.jpg
Loaded texture: models/mapobjects/storch/storch.jpg
Loaded texture: storch_tall.jpg
Loaded texture: models/mapobjects/wallhead/wallhead02.jpg
Loaded mesh: q3dm9.bsp
Needed 135ms to create OctTree SceneNode.(1117 nodes, 101765 polys)
sio2
Competition winner
Posts: 1003
Joined: Thu Sep 21, 2006 5:33 pm
Location: UK

Post by sio2 »

Is there some optimisations done when you load a BSP inside IRRlicht 1.5?
I don't believe so. I would try loading as a Mesh, not an Octree, and setting the hardware mapping hint to Static. See what your frame rate is - it should be higher.
Katsankat
Posts: 178
Joined: Sun Mar 12, 2006 4:15 am
Contact:

Post by Katsankat »

Optimisation ... The main reason to use bsp format is that it handles VIS however irrlicht code does not. This is the main optimisation, with hint brushes.

sio2 why not octree, as stated in the tutorial and recommended by many people here?
hybrid
Admin
Posts: 14143
Joined: Wed Apr 19, 2006 9:20 pm
Location: Oldenburg(Oldb), Germany
Contact:

Post by hybrid »

Because VBOs will give much better performance.
sio2
Competition winner
Posts: 1003
Joined: Thu Sep 21, 2006 5:33 pm
Location: UK

Post by sio2 »

Katsankat wrote:sio2 why not octree, as stated in the tutorial and recommended by many people here?
As Irrlicht stands at the moment, if you load a Quake3 level as a Mesh and upload it into hardware buffers you will see vastly improved performance compared to using an octree. [This has been verified by others, including Hybrid, I believe.] There's no cpu overhead, the GPU gets a large batch of work to do and no vertex/index data has to travel over the bus. Currently, octree data is in cpu memory, the cpu has to work out what intersects the view volume (which may be the entire level as a worst case), fill buffers in ram that the driver has to copy to it's internal buffers, etc.

Ideally we would prefer Irrlicht to load a Quake3 bsp and use the PVS, but that hasn't been coded yet (and we could also cull other Irrlicht scene nodes if we classified them within the bsp tree).

Perhaps the octree system could be improved by uploading the vertices to a hw vertex buffer and fill a dynamic index buffer with indices referring to primitives that are currently visible. This could prove a major performance increase. You must still bear in mind that a naive octree won't cull primitives that are in the view volume but are behind a huge viewport-covering wall that you're standing in front of. :wink:
sio2
Competition winner
Posts: 1003
Joined: Thu Sep 21, 2006 5:33 pm
Location: UK

Post by sio2 »

hybrid wrote:Because VBOs will give much better performance.
I'd be interested in seeing if uploading the vertices to a static vertex buffer and filling in a dynamic index buffer would give a performance improvement over the current octree code...
vermeer
Posts: 2017
Joined: Wed Jan 21, 2004 3:22 pm
Contact:

Post by vermeer »

not interested in bsps and .map workflows,(I way much prefer direct plugins from Blender) but have you tried Quark editor(more free licences than gtk radiant I think)?

http://quark.planetquake.gamespy.com/su ... ugins.php3

and getting map editor and bsp compiler (strong doubts on that bsp be compatible with quake3 bsp, also unsure on licensing, but seems freeware...)

http://www.getic.net/
Finally making games again!
http://www.konekogames.com
Post Reply