Quake-style fullbright colors
- Edited
There are many ways, I recommend you read the docs or some other text about shading.
For starters, use lambert and maybe disable specular. If you don't want shading you can use unshaded or disable receive shadows in material.
You may still want ambient light, since quake used baked shadows.
And Color correction should be linear.
Check the options in your material and in world environment node.
An emission texture is another alternative, but it could end up looking too bright.
You can't reserve colors in a palette, if you use unshaded the colors will be the ones in the Albedo texture, but any calculated color will be in 24-32 bits, and that's because of modern hardware. You could however use a postprocess shader to reduce the number of colors through an algorithm, but a palette of selected colors would be too computationaly expensive, think of, tones in a "curve" instead (10-20-30-40 / 8-16-24 / 3-5-7).
If you're in Godot 3.5, oversaturation is an option too. You can turn the color settings in the wheel to "raw" and "overload" the values for super bright colors but be aware, this can cause some weird effects if using, say bloom settings with a world environment.
- Edited
Jesusemora
There is already a postprocess shader to reduce the number of colors:
https://github.com/saltern/Godot-Shaders/blob/main/AdaptToPalette.gdshader
- Edited
AlevamLtd You should ask them. Afaik GLQuake didn't support fullbrights precisely for the reason I mentioned above. It can be done only in software rasterizers (which original Quake engine was). The whole concept of fullbright colors is tied with indexed display modes. It makes no sense in full RGBA mode modern GPUs operate in. Quakespasm may be doing some tricks or conversions but I'd say it's not worth the effort if you don't need to be compatible with original Quake asset formats. The effect itself (and better) can and should be done with emission textures or masks. In fact having a part of indexed palette reserved for incandescent colors is a primitive version of an emission texture.
If your texture assets use indexed color you'll need to convert them into RGBA anyway if you intend to use them with Godot. While doing so it wouldn't be hard to generate a mask for fullbright pixels as well.
- Edited
AlevamLtd If I do need to use emission maps, will I be able to apply emission maps to texture tiles on level geometry as well?
No reason not to be able to. Level geometry is just meshes. Apply Godot's standard material to them, map the emission property and that's it. You don't even need a custom shader unless you want to render the emission in an unusual way.
If you want to mimic the fullbright "logic" more closely, instead of a RGB emission map you can use only a single channel (grayscale) mask. In that case you'll need a custom shader with light function that reads the mask texture and sets the diffuse illumination to full brightness for masked-in pixels. Then those pixels will never be darkened. They'll always just render out as they are in the albedo texture, effectively acting as Quake's fullbright colors. The only difference is that you mask-in actual texture pixels instead of specific color entries in the palette, i.e. you can make arbitrary texture parts fullbright, regardless of their color. This is obviously better than being limited to specific colors.
- Edited
AlevamLtd You can do it in the exact same fashion just need to adjust the texture intensity because Godot's renderer and Blender's renderer may calculate things differently as former is a realtime renderer and latter is not.
Godot's standard material has the emission intensity multiplier property. So try to play with it to get the similar looking results. You also may want to disable environment/ambient illumination when tuning things.