Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
engines:software_vs_glquake [2011/10/11 13:57] – external edit 127.0.0.1engines:software_vs_glquake [2013/12/11 16:20] (current) SiPlus
Line 1: Line 1:
 ===== Differences between software rendered Quake and GLQuake ===== ===== Differences between software rendered Quake and GLQuake =====
-Showing some differences between the original software rendered Quake (quake.exe, winquake.exe and derivates) and hardware-accelerated GLQuake (glquake.exe and derivates).+Showing some differences between the original software rendered Quake (quake.exe, winquake.exe and derivates) and hardware-accelerated GLQuake (glquake.exe and derivates). Use one of the [[:quake:recommended_engines]]!
  
-Currently written in the viewpoint of Spirit who also currently is the sole author of these. Be awesome, remove all the "I"s and contribute more differences!+Currently written in the viewpoint of Spirit and SiPlus who also currently are the sole authors of these. Be awesome, remove all the "I"s and contribute more differences!
  
 ==== Texture filtering ==== ==== Texture filtering ====
Line 8: Line 8:
 When you launch GLQuake the first time one of the most prominent difference are the [[http://en.wikipedia.org/wiki/Bilinear_filtering|filtered textures]]. Where software rendered Quake showed each and every pixel, the textures in GLQuake are all soft and smooth. Some will say "hooray, no more pixels", others might be "this looks washed out, I miss all the crisp details". Let's look at some screenshots (I recommend using browser tabs to switch back and forth): When you launch GLQuake the first time one of the most prominent difference are the [[http://en.wikipedia.org/wiki/Bilinear_filtering|filtered textures]]. Where software rendered Quake showed each and every pixel, the textures in GLQuake are all soft and smooth. Some will say "hooray, no more pixels", others might be "this looks washed out, I miss all the crisp details". Let's look at some screenshots (I recommend using browser tabs to switch back and forth):
  
-[[/quake/swvsgl/filtering_e1m1_filtered.png|{{http://www.quaddicted.com/wp-content/uploads/filtering_e1m1_filtered.jpg}}]] +{{:engines:filtering_e1m1_filtered.png?direct&300|}} 
-[[/quake/swvsgl/filtering_e1m1_pixel.png|{{http://www.quaddicted.com/wp-content/uploads/filtering_e1m1_pixel.jpg}}]] +{{:engines:filtering_e1m1_pixel.png?direct&300|}} 
-[[/quake/swvsgl/filtering_e2m4_filtered.png|{{http://www.quaddicted.com/wp-content/uploads/filtering_e2m4_filtered.jpg}}]] +{{:engines:filtering_e2m4_filtered.png?direct&300|}} 
-[[/quake/swvsgl/filtering_e2m4_pixel.png|{{http://www.quaddicted.com/wp-content/uploads/filtering_e2m4_pixel.jpg}}]]+{{:engines:filtering_e2m4_pixel.png?direct&300|}}
  
-[[/quake/swvsgl/filtering_e4m3_filtered.png|{{http://www.quaddicted.com/wp-content/uploads/filtering_e4m3_filtered.jpg}}]] +{{:engines:filtering_e4m3_filtered.png?direct&300|}} 
-[[/quake/swvsgl/filtering_e4m3_pixel.png|{{http://www.quaddicted.com/wp-content/uploads/filtering_e4m3_pixel.jpg}}]] +{{:engines:filtering_e4m3_pixel.png?direct&300|}} 
-[[/quake/swvsgl/filtering_start_filtered.png|{{http://www.quaddicted.com/wp-content/uploads/filtering_start_filtered.jpg}}]] +{{:engines:filtering_start_filtered.png?direct&300|}} 
-[[/quake/swvsgl/filtering_start_pixel.png|{{http://www.quaddicted.com/wp-content/uploads/filtering_start_pixel.jpg}}]]+{{:engines:filtering_start_pixel.png?direct&300|}}
  
 I myself was amazed by it when I got a 3Dfx card, I really loved it. Then last year I tried the original look again and wished I'd done so much earlier... Well, it is a personal thing and you have decide it for yourself. Thankfully you can configure most GL engines to disable the filtering using the **gl_texturemode** cvar. I myself was amazed by it when I got a 3Dfx card, I really loved it. Then last year I tried the original look again and wished I'd done so much earlier... Well, it is a personal thing and you have decide it for yourself. Thankfully you can configure most GL engines to disable the filtering using the **gl_texturemode** cvar.
Line 22: Line 22:
 The options available might vary based on your graphics hardware (and maybe the engine too?). This list  is taken from the [[http://ezquake.sourceforge.net/docs/?vars-texture-settings|ezQuake documentation]] (remember, ezQuake is <em>not</em> a singleplayer engine): The options available might vary based on your graphics hardware (and maybe the engine too?). This list  is taken from the [[http://ezquake.sourceforge.net/docs/?vars-texture-settings|ezQuake documentation]] (remember, ezQuake is <em>not</em> a singleplayer engine):
  
-  * GL_NEAREST -> //Point sampled (software-like). Lowest quality, highest performance.// +  * GL_NEAREST -> //Point sampled. Lowest quality, highest performance.// 
-  * GL_NEAREST_MIPMAP_NEAREST -> //GL_NEAREST but with a bit more quality for far objects.//+  * GL_NEAREST_MIPMAP_NEAREST -> //GL_NEAREST but with a bit more quality for far objects (software-like).//
   * GL_NEAREST_MIPMAP_LINEAR -> //GL_NEAREST but with even more quality for far objects.//   * GL_NEAREST_MIPMAP_LINEAR -> //GL_NEAREST but with even more quality for far objects.//
-  * GL_LINEAR -> //No blending.// +  * GL_LINEAR -> //Bilinear interpolation.// 
-  * GL_LINEAR_MIPMAP_NEAREST -> //Bilinear interpolation.//+  * GL_LINEAR_MIPMAP_NEAREST -> //Bilinear interpolation with a bit more quality for far objects.//
   * GL_LINEAR_MIPMAP_LINEAR -> //Trilinear interpolation. Highest quality, lowest performance.//   * GL_LINEAR_MIPMAP_LINEAR -> //Trilinear interpolation. Highest quality, lowest performance.//
  
Line 52: Line 52:
 From left to right: Software, GLQuake, Overbright GLQuake From left to right: Software, GLQuake, Overbright GLQuake
  
-[[/quake/swvsgl/overbright_sm139_spd_sw.jpg|{{http://www.quaddicted.com/wp-content/uploads/overbright_sm139_spd_sw_t.jpg}}]] +{{:engines:overbright_sm139_spd_sw.jpg?direct&256|}} 
-[[/quake/swvsgl/overbright_sm139_spd_off.jpg|{{http://www.quaddicted.com/wp-content/uploads/overbright_sm139_spd_off_t.jpg}}]] +{{:engines:overbright_sm139_spd_off.jpg?direct&256|}} 
-[[/quake/swvsgl/overbright_sm139_spd_on.jpg|{{http://www.quaddicted.com/wp-content/uploads/overbright_sm139_spd_on_t.jpg}}]]+{{:engines:overbright_sm139_spd_on.jpg?direct&256|}}
  
 At least the following engines support overbright lighting: Fitzquake, Joequake, Qrack, QMB, Darkplaces, MHQuake, TomazQuake. In Fitzquake it is controlled by gl_overbright (default is on), I did not check what the others use (if they let you toggle it). aguirRe is a strong opponent to it, so his Enhanced GLQuake has no support for this, see below. At least the following engines support overbright lighting: Fitzquake, Joequake, Qrack, QMB, Darkplaces, MHQuake, TomazQuake. In Fitzquake it is controlled by gl_overbright (default is on), I did not check what the others use (if they let you toggle it). aguirRe is a strong opponent to it, so his Enhanced GLQuake has no support for this, see below.
Line 60: Line 60:
 This was another feature I lived without for ages and did not know what I missed. It is very easy to overlook this when being blinded by GLQuake's freshness at first. For me it makes a huge difference in atmosphere, look at this example from the start map. This was another feature I lived without for ages and did not know what I missed. It is very easy to overlook this when being blinded by GLQuake's freshness at first. For me it makes a huge difference in atmosphere, look at this example from the start map.
  
-[[/quake/swvsgl/overbright_start_off.jpg|{{http://www.quaddicted.com/wp-content/uploads/overbright_start_off_t.jpg}}]] +{{:engines:overbright_start_off.jpg?direct&300|}} 
-[[/quake/swvsgl/overbright_start_on.jpg|{{http://www.quaddicted.com/wp-content/uploads/overbright_start_on_t.jpg}}]]+{{:engines:overbright_start_on.jpg?direct&300|}}
  
 While the non-overbright screenshot looks good and innocent, once you see the one with overbright lighting enabled the blandness becomes obvious. While the non-overbright screenshot looks good and innocent, once you see the one with overbright lighting enabled the blandness becomes obvious.
Line 67: Line 67:
 However, there is another view on this [[http://www.celephais.net/board/view_thread.php?id=60133|which aguirRe presented a while back at func]]. The screenshots below are made by me, I guess they show the correct subject. It is an extreme example, probably the most extreme one can find. Not only are the ikwhite textures quite sensitive to colour settings, this extreme brightness is only to be found at this one spot in the map and it's some kind of skylight. However, there is another view on this [[http://www.celephais.net/board/view_thread.php?id=60133|which aguirRe presented a while back at func]]. The screenshots below are made by me, I guess they show the correct subject. It is an extreme example, probably the most extreme one can find. Not only are the ikwhite textures quite sensitive to colour settings, this extreme brightness is only to be found at this one spot in the map and it's some kind of skylight.
  
-[[/quake/swvsgl/overbright_kjsp1_off.jpg|{{http://www.quaddicted.com/wp-content/uploads/overbright_kjsp1_off_t.jpg}}]] +{{:engines:overbright_kjsp1_off.jpg?direct&300|}} 
-[[/quake/swvsgl/overbright_kjsp1_on.jpg|{{http://www.quaddicted.com/wp-content/uploads/overbright_kjsp1_on_t.jpg}}]]+{{:engines:overbright_kjsp1_on.jpg?direct&300|}}
  
 It probably becomes even more of an issue if you play with idgamma and/or a brighter gamma setting. I don't and I have no problem with the drawbacks (one could even say that it is the 1996 way to make HDR bloom blingbling, heh). In this particular example (kjsp1) I like the look it creates, it is so bright that you cannot see it all anymore. It really is your decision but I suggest using overbright lighting. It probably becomes even more of an issue if you play with idgamma and/or a brighter gamma setting. I don't and I have no problem with the drawbacks (one could even say that it is the 1996 way to make HDR bloom blingbling, heh). In this particular example (kjsp1) I like the look it creates, it is so bright that you cannot see it all anymore. It really is your decision but I suggest using overbright lighting.
Line 80: Line 80:
 Fullbrights were part of Quake, good modern engines show them. GLQuake does not. Let's take a look, left is what GLQuake shows, right is what an engine with fullbright support shows: Fullbrights were part of Quake, good modern engines show them. GLQuake does not. Let's take a look, left is what GLQuake shows, right is what an engine with fullbright support shows:
  
-[[/quake/swvsgl/fullbrights_e1m1_off1.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_e1m1_off1_t.jpg|}}]] +{{:engines:fullbrights_e1m1_off1.png?direct&300|}} 
-[[/quake/swvsgl/fullbrights_e1m1_on1.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_e1m1_on1_t.jpg|}}]]+{{:engines:fullbrights_e1m1_on1.png?direct&300|}}
  
-[[/quake/swvsgl/fullbrights_e1m1_off2.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_e1m1_off2_t.jpg|}}]] +{{:engines:fullbrights_e1m1_off2.png?direct&300|}} 
-[[/quake/swvsgl/fullbrights_e1m1_on2.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_e1m1_on2_t.jpg|}}]]+{{:engines:fullbrights_e1m1_on2.png?direct&300|}}
  
-[[/quake/swvsgl/fullbrights_start_off.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_start_off_t.jpg|}}]] +{{:engines:fullbrights_start_off.png?direct&300|}} 
-[[/quake/swvsgl/fullbrights_start_on.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_start_on_t.jpg|}}]]+{{:engines:fullbrights_start_on.png?direct&300|}}
  
-[[/quake/swvsgl/fullbrights_starkmon_off.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_starkmon_off_t.jpg|}}]] +{{:engines:fullbrights_starkmon_off.png?direct&300|}} 
-[[/quake/swvsgl/fullbrights_starkmon_on.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_starkmon_on_t.jpg|}}]]+{{:engines:fullbrights_starkmon_on.png?direct&300|}}
  
 Let's look at the technical background. Quake uses a [[http://quakery.quakedev.com/qwiki/index.php/Quake_palette|palette file]] to assign colors to numeric values referenced in the texture files. The last 32 colors (two rows) in that palette are "fullbright". The upper 16 ones are obviously used for fire effects so let's ignore those. The lower (bottom) 16 are "the fullbrights". By the way if you ever had really funky colors in Quake while playing some mod, chances are that there was a palette mismatch. Let's look at the technical background. Quake uses a [[http://quakery.quakedev.com/qwiki/index.php/Quake_palette|palette file]] to assign colors to numeric values referenced in the texture files. The last 32 colors (two rows) in that palette are "fullbright". The upper 16 ones are obviously used for fire effects so let's ignore those. The lower (bottom) 16 are "the fullbrights". By the way if you ever had really funky colors in Quake while playing some mod, chances are that there was a palette mismatch.
Line 102: Line 102:
 This occasionally leads to ugly texturing disasters when mappers use bad tools to make their textures and test with stock GLQuake. Then sometimes fullbright pixels sneak in. A recent example being [[/reviews/toa.html|toa.zip - Temple Of Anubis: Judgement Of The Dead]] and an older much worse example [[/reviews/alk15.html|alk15.zip - Brumal Quest]]. This occasionally leads to ugly texturing disasters when mappers use bad tools to make their textures and test with stock GLQuake. Then sometimes fullbright pixels sneak in. A recent example being [[/reviews/toa.html|toa.zip - Temple Of Anubis: Judgement Of The Dead]] and an older much worse example [[/reviews/alk15.html|alk15.zip - Brumal Quest]].
  
-[[/quake/swvsgl/fullbrights_toa_off.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_toa_off_t.jpg|}}]] +{{:engines:fullbrights_toa_off.png?direct&300|}} 
-[[/quake/swvsgl/fullbrights_toa_on.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_toa_on_t.jpg|}}]]+{{:engines:fullbrights_toa_on.png?direct&300|}}
  
-[[/quake/swvsgl/fullbrights_alk15_off.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_alk15_off_t.jpg|}}]] +{{:engines:fullbrights_alk15_off.png?direct&300|}} 
-[[/quake/swvsgl/fullbrights_alk15_on.jpg|{{http://www.quaddicted.com/quake/swvsgl/fullbrights_alk15_on_t.jpg|}}]]+{{:engines:fullbrights_alk15_on.png?direct&300|}}
  
 Thankfully most good 3d-accelerated engines do support fullbrights. aguirRe's glquakes being the notable exception at the time of writing. Thankfully most good 3d-accelerated engines do support fullbrights. aguirRe's glquakes being the notable exception at the time of writing.
Line 120: Line 120:
 Lava_Croft once taught me about another quite nasty and overlooked regression in most GL engines. Textures that are not sized in a power of two (64, 128, 256 etc) are getting rescaled. And with that the pixels are not square anymore but a huge mess of distorted uglyness. This is most easily seen on a weapon skin so I used that in the image below. The Shambler's face also is a good place to spot it. On the left is software Quake (argh, Argh, ARGH! The high FOV is to blame for that, sorry.), in the middle a bad GL engine and on the right a good one. From what I know at least Fitzquake (of course!) and Darkplaces fixed this. Lava_Croft once taught me about another quite nasty and overlooked regression in most GL engines. Textures that are not sized in a power of two (64, 128, 256 etc) are getting rescaled. And with that the pixels are not square anymore but a huge mess of distorted uglyness. This is most easily seen on a weapon skin so I used that in the image below. The Shambler's face also is a good place to spot it. On the left is software Quake (argh, Argh, ARGH! The high FOV is to blame for that, sorry.), in the middle a bad GL engine and on the right a good one. From what I know at least Fitzquake (of course!) and Darkplaces fixed this.
  
-[[/quake/swvsgl/nonpowerof2_texturedistortion.jpg|{{http://www.quaddicted.com/quake/swvsgl/nonpowerof2_texturedistortion_t.jpg|}}]]+{{:engines:nonpowerof2_texturedistortion.png?nolink&|}} 
 + 
 +==== Affine texture mapping ==== 
 +For higher performance, the software renderer doesn't perform perspective correction on alias model textures, causing noticeable artifacts on low-poly models. 
 + 
 +While the effects of this can be barely seen on monsters, they are very easy to spot on weapon view models. 
 + 
 +You can see screenshots of the issue in the "Non-square pixels" section. 
 + 
 +The 1st screenshot demonstrates affine texture mapping in software rendering mode. The texture looks skewed and is aligned differently on each pair of triangles. The pixels always have the same width and height, no matter how far they are from the player. 
 + 
 +The 2nd and 3rd screenshots show perspective-correct texture mapping. The metal shine is now a straight line, and distant pixels appear smaller than the close ones. 
 + 
 +On certain video cards, the effect can be re-enabled in GLQuake by setting the console variable "gl_affinemodels" to non-zero.