Higher-resolution lightmaps?


Is it possible to use higher-resolution lightmaps, other than 256x256?


Yes it is.
Here are some basics: http://sgq3-mapping.blogspot.co.at/2009/01/using-hi-resolution-external-lightmap.html


Do they have to be always external? Can’t they be embedded in the BSP with engine changes?


Thank you for keeping up this topic and response!..
Well, good question!
Technically spoken you can reimport an external lightmap back into bsp. This is done througout your map compiler (q3map2). The switch for this is -import, in opposite to -export, which creates external lightmaps.
You can find some more technical information on q3map2 wiki.
So, yes you can reattach the lighmap texture. On the other hand, there are three things I think you should be aware of.

  1. I am in doubt that 1024x1024 external lightmaps will work as you want when embedded (because you suffer from the same thing you want to get rid off). Though, of course via code changes (engine side) you can enable bigger embedded lighmaps.
    You can even implement a seperate file format similar to .bsp and .aas (there a still .rad files available for idtech3, similar to HL2).

  2. The question is, why reimport the lightmaps at all? External lightmaps neither are bad nor are they a hack or something, they are an improvement. Not only because you can have lightmaps of the size you asked for. Even more you can edit them by a paint programm. I do this very often, create the external lightmaps, open them in your favourite paint program an add shadows, colors etc.
    Xreal (an ioquake3 project) even had it’s own map compiler.

  3. Bear in mind, that the new ioquake3 renderer (OpenGL2) does support a new lightning/shadowing method. You can have real-time lightning and shadowing. In this case the process of using lightmaps works differently (at least I do some experiments atm with external lightmaps using renderer2).
    The results are not compareable to the old (default) renderer. You can even create maps that looks compareable to nowadays games, or even better. Newly created maps for renderer2 looks so awesome! I will post some screenshots soon…
    The only problem here is to get a good mixture of real-time shadows and lightmapped shadows (maybe this is not a problem of the renderer2, the problem is that I’m still not that used to the new renderer I think).
    Anyways, if you will work with renderer 2, it’s good to have external lightmaps.
    Example: do a very rough -light compile using the old sky light method (see the renderer2 readme), retouch the lightmaps in your paint program, and finally let the real-time shadows do the rest!

At least this is the way I do it atm. Well, I’m not a renderer2 expert,… I hope you can find a good way to get what you are looking for, let me know, I’m really interested!

So all in all, your question depends a bit on which renderer is used. Since most people want to support both renderer, your task might not that easy!
Nevertheless, I hope I helped a bit!


I’ve been testing the new renderer, but i’m guessing it uses shadow mapping only, right? q3map2 has ambient occlusion and other nice things that really add to the final result of the level. I don’t know if the renderer2 has SSAO, though, which could be added to improve the final result.


The new renderer uses both, real-time shadows and/or lightmaps. Though there are two methods how the map can be lit.
As mentioned in the opengl2 readme: https://github.com/ioquake/ioq3/blob/master/opengl2-readme.txt#L525 you can either compile your map as always (and produce lightmaps), or let the map geometry and entities cast real-time shadows.
The first method draws both shadows, the lightmap and additionally the real-time shadows.
This looks not really well, thats the reason why I talked about my personal method of tweaking the external lightmaps.
Please note, that this method might be wrong, and it is annoying to work this way. Though the results are okay.
Possibly there is an easier way of creating ‘baked’ lightmaps for map geometry, and dynamic shadows for everything that should cast high-resolution shadows.
Anyways, lighmaps with ambient occlusion are still there, you can test this by simply loading any older map that was compiled with method 1.
SSAO (Screen Space Ambient Occlusion) is not used for global shadows. SSAO produces very small shadows on edges/corners. In ioquake3 it works, you can enable SSAO with r_ssao set to 1.

What currently is missing, are real-time shadows for entities and lighmaps ONLY for map geometry. At least I don’t know how to do this. It is very likely that it would work somehow, because the new renderer is based on Xreal. In Xreal static lightmaps AND dynamic shadows, caused by entities, were possible.
If you are interested, here is the ‘history’ of the new renderer: https://bugzilla.icculus.org/show_bug.cgi?id=4358

The problem really is, that there is lack of knowledge on my side, and lack of response on the developer side.
I don’t know if I am either to stupid or if the developer of this renderer removed some features over time. It seems that some features worked quite a long time, and changed or were removed. :cry:

If you find a way to enable static lighmaps for geometry and dynamic shadows for entities, let me know!


Thanks a lot for the detailed info! :slight_smile:


You’re welcome!
By the way, don’t forget to give bump mapping and parallax mapping a try! Looks awesome, not like ‘plastic’ as seen on some other games.
Good luck!


I just enabled normalmapping and it makes the weapons in Quake 3 look ALOT better, and some map textures look more defined. How do I enable parallax mapping?


Hi AndehX,

Parallax mapping works similar to bump mapping. The cvar for enabling parallax mappng is ‘r_parallaxMapping’ set to 1.
Though, you have to write a shader for your texture to actually see how it works: https://github.com/ioquake/ioq3/blob/master/opengl2-readme.txt#L383
HINT: If you want a softer parallax effect, use bumpmapping instead!
Personally I use parallax mapping for clearly defined shapes (e.g.: rounded bolts) or lumpy terrain.
Bump mapping for soft uneven materials (concrete walls, rounded stone floors, etc.)
Though you can tweak both effects to fit your needs!

Hmm, I hope it is allowed to show some screenshots here:
First one shows a bump mapped stone floor, parallax bolts on the inside of the gateway.

The second one shows real-time shadows (e.g.: the playermodel) and the ‘HACK’ of baked lightmaps.

NOTE: I only use 2048x2048 or at least 1024x1024 texures scaled down by 0.25! Results are much better as with smaller textures!

You see, the new renderer rocks! Moreover, because those screenshots are taken from unfinished map dm6 built from scratch! Details are still missing…


That look outstanding!

Im playing around with enabling normalmapping and even with the auto generated normal maps, the models look so much better.
Even the default maps look much better with r_forcesun 1 and normalmapping enabled. I have noticed that the loading times have tripled though, which is a small price to pay.


Yes, yes, but keep in mind, actually this are very early screenshots…
You are right, the auto-generating bumpmaps (r_genNormalMaps) gives a raw impression how bumpmapping looks like. Though I cursed this feature now, since it really doesn’t represent the final look… people might get a wrong impression…

About the loading time: If you have the skills you can change to DDS texture format. There is an ioquake3 patch here: https://bugzilla.icculus.org/show_bug.cgi?id=5442

You need programming skills to apply the patch since it is outdated, unfortunately they never applied this into the current renderer2. I highly recommend using DDS texture format!


It would be far too much work to convert all the textures in Quake 3 to DDS format. I would try and create proper normal maps for the models in Quake 3, but im not convinced they would look THAT much better than the auto generated one, and again, this would be a very time consuming process.


I had a go at making my own normal/spec maps. the result is surprisingly awesome. Breathing some fresh air into Quake 3


Yeah! This looks cool! Well done!
Though, be warned, working with ioquake3 renderer2 makes ADDICTIVE! They should print a warning somewhere :smile:


Yeah it’s becoming very addictive. Just modifying Quake 3 in general is very addictive. I’ve already made 2 maps, and converted a load of stuff to work with normal mapping


Heres my ammobox skin. As you can probably tell its based off the ammoboxes in Quake 4. I personally think mine look better in ioquake3 :smile:


Tweaked the specular maps a bit. Looks much more “metal” like now.


old topic bump.

Just came back to Quake 3. Installed the latest ioquake3 and my models no longer look like this. Specular maps seem completely messed up. Map textures almost look like the specular map is simply being overlayed on top of them.