Using ioquake3 for a standalone game


#1

Hello,

I had a few questions about using recent ioquake3 for a fully free/libre, standalone game (that does not require any Quake 3 data).

  • Are there guides on writing .shader files that are compatible with the OpenGL 2 renderer? I don’t need legacy OpenGL support by the way.

  • Is there documentation on creating a player model using the IQM format? I read you still need to split the model in 3 parts, how is this done?

  • What about fonts? Is there a font generator available somewhere? I heard there were problems with using HD fonts in OpenArena at least (they looked pixelated in the console), but I would really like my fonts to look crisp.

  • How to use GtkRadiant in a way that’s compliant with the OpenGL 2 renderer? I’d like to have high-resolution lightmaps.

  • How would I go about hosting a master server list for the game?

  • The SSAO support in ioquake3 works, but looks pixelated and “goes through” particles. Is there a way to solve that, or can it be improved?

  • How do I use the physically-based renderer (assuming I already have PBR assets)? Do I need to write the .shader files differently?

  • Finally, a more general question… What would be the best way to build a standalone game using ioquake3? Start with no assets at all and fill gaps until the game runs (more time-consuming), or progressively replace the original assets (which requires to keep track of all assets to avoid legal issues)?

Thanks for answering!


#2

Hey these are interesting questions :slight_smile: I can answer a few of them :

  • the only guide there is to my knowledge is this one, in the opengl2 readme : https://github.com/ioquake/ioq3/blob/master/opengl2-readme.md#--materials
    It has the basics, but you’ll have to do a lot of trial and error on your side to test stuff out (I haven’t done any texture / terrain blending at the moment, for example).

  • At the moment, you would be better off using the md3 model format and the quake 3 character system. I think the md3 exporters for blender are stable. I looked a bit into the IQM format, but the exporter for Blender is not up to date (currently compatible with blender 2.74, but with 2.75 I could export static geometry with no problem).

I think it would be great to have some good IQM integration in ioQuake3, and by that I mean a way to do some dynamic pose blending, but this implies maybe loading the skeleton data into the client game ? I’m thinking about it but I haven’t done any work on it.

  • Fonts : sorry, I don’t know anything about that.

  • As far as I now, the size limitation of bsp files still implies that you can’t have ultra high resolution lightmaps in the engine.

GtkRadiant / q3map2 aren’t compatible with the openGL2 new .mtr shaders, as far as I know, so right now you need to have some basic mirrored .shader files of everything … and even in ioQuake3, a .mtr shader is used only if it has a corresponding .shader file available ! a .mtr file alone will be ignored. Maybe we could ask for a ioquake3 opengl2 friendly package of GtkRadiant ? This brings up wider questions …

  • I don’t know anything about servers sorry :slight_smile:

  • Yeah, the SSAO implementation is really basic for the moment … it needs some refinement, but I’m no graphics programmer …

  • There is no PBR in ioquake3, or have I missed something ? Your assets will only use diffuse, alpha, normal map, height map (store it in your normal map’s TGA alpha channel), and specular map. I haven’t been able to see the speculars yet, I don’t know if they work or how are they supposed to look.

  • Personnally I currently start with the Quake 3 assets, and I cut them off while I make some progress. But I was thinking of a “basic package” with simplified gameplay and only copyright free assets. This would be nice :slight_smile:

I’m sorry I don’t have all the answers !


#3

As far as I now, the size limitation of bsp files still implies that you
can’t have ultra high resolution lightmaps in the engine.

I read somewhere on these forums that you can use external image files for lightmaps, is this possible? If you use lightmaps bundled in BSP files, what is the size limit for lightmaps?

There is no PBR in ioquake3, or have I missed something ? Your assets
will only use diffuse, alpha, normal map, height map (store it in your
normal map’s TGA alpha channel), and specular map. I haven’t been able
to see the speculars yet, I don’t know if they work or how are they
supposed to look.

In ioquake3, there is a r_pbr cvar that you can set to 1. It is a merge of older cvars. The opengl2-readme.md also hints at physically-based rendering support. It does warn that you need compatible assets, so it looks broken if you try to use it on Quake 3 Arena.


#4

q3map2 lets you extract lightmaps from a bsp, as tga, you can them manually edit them, and use q3map2 again to inject them back in. As for the precise sizelimitation, I would say it’s around 64 megs, I never seen anything bigger. Digging through the q3world forums might give you a precise answer !

Ok for PBR, if you hack it out and make it work, please share some screenshots ! I’m curious :smile:


#5

dpmaster 2.2 can be used for running a master server.

I progressively replace the Q3 assets when making Turtle Arena. I kept the Q3 data in a separate pk3 from mine and deleted ones I replaced or no longer used.

Lightmap images in BSPs are 128x128 pixels in size. iirc vanilla Q3 can have 128 lightmap images. ioq3 can have unlimited (as long as they fit in the Hunk memory).


#6

you can also use the regular ioquake3 master for your game, it’s the 2nd default master.ioquake3.org


#7

I figured out how to use the shaders, GtkRadiant, and such. Here’s some results (textures are from Nobiax):




#8

Wow, your parallax looks great ! There must be something I made wrong somewhere in my tests, it always seemed wrong … see the screenshots topic for reference !


#9

Wow, your parallax looks great ! There must be something I made wrong
somewhere in my tests, it always seemed wrong … see the screenshots
topic for reference !

I used r_parallaxMapping 2, which means relief mapping is used. It also looks fine with r_parallaxMapping 1, but doesn’t look as good (but is faster).

You can find a Git repository containing all Nobiax textures here.

Also, AwesomeBump is a pretty useful program to generate normal maps, height maps, specular maps and convert between them.