https://wiki.unvanquished.net/api.php?action=feedcontributions&user=Illwieckz&feedformat=atomUnvanquished - User contributions [en-gb]2024-03-28T15:21:57ZUser contributionsMediaWiki 1.25.3https://wiki.unvanquished.net/index.php?title=Tools/IQM&diff=8606Tools/IQM2024-03-09T21:09:24Z<p>Illwieckz: /* IQM Development Kit */</p>
<hr />
<div>[[Category:Tools]]<br />
[[Category:IQM]]<br />
Here are some known tools supporting IQM/IQE formats (or with work-in-progress support).<br />
<br />
==Frequently asked questions==<br />
<br />
* IQE to IQM conversion: see [[#iqmtool|iqmtool]];<br />
* IQM to IQE conversion: see [[#asstools|asstools]];<br />
* Blender Exporter: see [[#IQM Development Kit|IQM Development Kit]];<br />
* Blender Importer: see [[#asstools|asstools]];<br />
* Viewer: see [[#IqeBrowser|IqeBrowser]] and [[#Noesis|Noesis]];<br />
* Converter to many formats: see [[#Noesis|Noesis]];<br />
* Game level editor and map compiler recommended for Unvanquished: see [[#NetRadiant|NetRadiant]] and [[#Q3map3|Q3map2]] from NetRadiant.<br />
<br />
==IQM tools==<br />
<br />
===iqmtool===<br />
<br />
{{InfoIqmtool}}<br />
<br />
'''Repository:''' https://svn.code.sf.net/p/fteqw/code/trunk/iqm<br />
<br />
===asstools===<br />
<br />
Some free open source tools, including a Blender import plugin (but it has to be ported to latest Blender version).<br />
<br />
Also provides a <code>iqm_to_iqe.py</code> tool that can convert <code>.iqm</code> files back to <code>.iqe</code> ones.<br />
<br />
'''Repository:''' https://github.com/ccxvii/asstools<br />
<br />
===IQM Development Kit===<br />
<br />
Original Lee Salzman's free open source reference project for IQM. It provides a Blender export plugin, and a tool to convert some formats to IQM (including Doom 3's md5mesh/anim).<br />
<br />
For the command line tool prefer the FTEQW's <code>iqmtool</code> one (see [[#iqmtool|iqmtool]]) if you're contributing to Unvanquished (it's a fork with more features we rely on).<br />
<br />
'''Website:''' http://sauerbraten.org/iqm/<br />
<br />
===IqeBrowser===<br />
<br />
A free open source graphical viewer and converter. Unfortunately only built for Windows (and there are some Windowsism in code), but works well on Wine.<br />
<br />
'''Download page:''' https://www.moddb.com/mods/r-reinhard/addons/iqebrowser-v217<br />
<br />
'''Forum thread:''' https://forums.unvanquished.net/viewtopic.php?f=8&t=2106<br />
<br />
===Noesis===<br />
<br />
A free (gratis) graphical viewer and converter. Unfortunately only built for Windows, but works well on Wine.<br />
<br />
'''Download page:''' http://richwhitehouse.com/index.php?content=inc_projects.php<br />
<br />
==Tools with IQM support==<br />
<br />
===NetRadiant===<br />
<br />
{{InfoNetRadiant}}<br />
<br />
NetRadiant supports <code>.iqm</code> model rendering in the editor thanks to IQM implementation in picomodel library and the provided [[Tools/Q3map2|Q3map2]] map compiler can now bake <code>.iqm</code> files (see below).<br />
<br />
'''Website:''' https://netradiant.gitlab.io<br />
<br />
===Q3map2===<br />
<br />
{{InfoQ3map2}}<br />
<br />
The q3map2 map compiler from upstream NetRadiant can now bake <code>.iqm</code> files.<br />
<br />
'''Website:''' https://netradiant.gitlab.io<br />
<br />
===GtkRadiant===<br />
<br />
Another level editor initially purposed for Quake 3 mapping that is also usable for Unvanquished mapping (see [[Tools/Level editors|Level editors]]), it now supports rendering IQM models thanks to IQM implementation in picomodel library.<br />
<br />
The q3map2 map compiler from GtkRadiant can now bake <code>.iqm</code> files but is not recommended for Unvanquished mapping (it does not support some other features we want). If you map with GtkRadiant editor, please compile your maps with NetRadiant's q3map2.<br />
<br />
'''Website:''' https://icculus.org/gtkradiant/<br />
<br />
===DarkRadiant===<br />
<br />
Another level editor initially purposed for Doom 3 mapping that is also usable for Unvanquished mapping (see [[Tools/Level editors|Level editors]]), it now supports rendering IQM models thanks to IQM implementation in picomodel library. The integrated animation viewer does not support IQM animation though.<br />
<br />
'''Website:''' https://www.darkradiant.net<br />
<br />
==Tools with work in progress IQM support==<br />
<br />
===Maverick Model 3D===<br />
<br />
A free open source graphical viewer, with IQM format being work in progress (may not be already usable or even available in releases).<br />
<br />
It's a fork of Misfit Model 3D, maintained by ZTM.<br />
<br />
'''Website:''' https://clover.moe/mm3d/</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Formats/Material&diff=8605Formats/Material2024-03-08T23:58:10Z<p>Illwieckz: </p>
<hr />
<div>[[Category:Formats]]<br />
[[Category:Texturing]]<br />
[[Category:Mapping]]<br />
[[Category:Modeling]]<br />
Materials were named ''shaders'' at Quake 3 time, they must not be confused with ''[[Formats/GLSL|GLSL]] shaders''.<br />
<br />
Material format is engine specific (mods don't modify it).<br />
<br />
See also [[Formats/Particle|Particle]] and [[Formats/Trail|Trail]].<br />
<br />
==Supported material formats and keywords==<br />
<br />
The {{engine}} supports:<br />
<br />
* Quake 3 materials in files named like <code>scripts/<basename>.shader</code> with Quake 3 material syntax and keywords (if it's not 100% compatible, it's a bug, please report!);<br />
* Some Doom 3 material keywords like <code>normalMap</code> and others, but the {{engine}} can stage them too (it was a regression from Doom 3), files named like <code>materials/<basename>.mtr</code> are not supported.<br />
* Some Darkplaces keywords like <code>dpoffsetmapping</code> or <code>dpreflectcube</code>, features like implicit image sidecar loading and compatibility with Darkplaces blending limitations when enabling <code>r_dpMaterial</code> and <code>r_dpBlend</code>.<br />
* Specific {{engine}} features like physical mapping, reflect mapping and others, with the ability to stage them, and other keywords like <code>normalFormat</code> to support multiple formats for normal maps.<br />
<br />
==Legacy guides==<br />
<br />
The [https://icculus.org/gtkradiant/documentation/Q3AShader_Manual/ Q3 shader manual] is useful to grasp the legacy keywords and syntax, not all things described here are optimal in Dæmon (we sometime improved Dæmon to offer easier syntax), but this is useful to understand legacy shaders, and everything from this manual should be supported in Dæmon (otherwise we want to fix it).<br />
<br />
The [http://q3map2.robotrenegade.com/docs/shader_manual/ Q3map shader manual] is useful to get the knowledge about options specific to map compilation, namely the {{code|q3map_}}-prefixed options that are prrocessed by the Q3map2 map compiler.<br />
<br />
The [http://tremap.xtr3m.net/__Games/Xreal/Manual_Shader_1/ShaderManual.htm XReal shader manual] may also be a useful reference, keeping in mind some things differs in Dæmon, some features may not be implemented or in better ways, for example the way to set a height map as documented in this manual is not supported and a far easier option is offered in Dæmon (see the {{code|heightMap}} keyword).<br />
<br />
<br />
==Texture creation==<br />
<br />
See [[Formats/Image|Image]] for details on texture formats and packing.<br />
<br />
==Texture naming conventions and material keywords==<br />
<br />
{{Texture naming conventions}}<br />
<br />
==Dept, doubt and shortcoming==<br />
<br />
===Preview image===<br />
<br />
While optional to be rendered in game, a material should feature a preview image to be rendered in the level editor. It can be different from the diffuse map, but if the preview does not have to be different, just reuse the diffuse map.<br />
<br />
The first reason why it exists is that the actual material image to be rendered in game may uses a format that is unknown to the level editor or the map compiler.<br />
<br />
{{Note|content=For some historical reasons the <code>q3map2</code> map compiler usually uses the preview image (editor image) to bake light bouncing colors, so it's better to not do preview images that doesn't look like the diffuse map. For example if your preview image is pink for a surface that is green, the bounced light will be pink. Fixing this requires <code>q3map2</code> changes.}}<br />
<br />
===Normal map===<br />
<br />
Quake 3-like <code>.shader</code> material files assume <code>X -Y Z</code> like DirectX because XreaL mimicked DOOM3 that followed that standard, it's possible to use <code>X Y Z</code> (OpenGL-like) with the keyword <code>normalFormat X Y Z</code> (or any unconventional variant). The <code>normalScale</code> keyword can also be used to scale the normal map components this way: <code>normalScale .3 .4 2</code>.<br />
<br />
===Gloss map===<br />
<br />
Maybe the engine supports Gloss map in alpha channel of specular maps. Some of our model textures provide additional data in alpha channel of specular maps, and the renderer does some computation with it. We should investigate what's this computation is for. Some people call gloss map the specular map, but some people seems to design two different things with those two different names. The [https://unvanquished.net/about/ About page of Unvanquished] says: “''Support for glow, gloss, specular, and physical mapping''”, so maybe the gloss map is the alpha channel of the specular map since the {{engine}} does something with it? The [[Engine]] page says: ''Specular mapping (color and intensity)'', so maybe the alpha channel is the intensity?<br />
<br />
===Physical map===<br />
<br />
Occlusion seems to not be implemented in engine yet. Roughness and Metalness is.<br />
<br />
==Material manuals==<br />
<br />
Those material manuals are from other games, though a big part of them is compatible, they may even be incomplete even for the original game they were written for.<br />
<br />
* [https://icculus.org/gtkradiant/documentation/Q3AShader_Manual/ Q3A Shader Manual],<br/>The {{engine}} must be 100% compatible with it, if it isn't, it's a bug, please report!<br/>The Dæmon engine may provide more efficient ways to do things anyway (for example via the use of pre-collapsed stages).<br />
* [https://tremap.xtr3m.net/__Games/Xreal/Manual_Shader_1/ShaderManual.htm XreaL Shader Manual],<br/>The {{engine}} may not implement everything, or may implement it in another way.<br/>If you need something listed in the XreaL manual but it does not work when you try to use it, please report a feature request.<br />
<br />
==Material syntax==<br />
<br />
{{Note|content=Material paths must always start with <code>textures/</code> prefix if they are expected to be used in maps.<br />
<br />
While textures can be stored in various places (<code>textures/</code> for usual textures, <code>env/</code> for skyboxes, <code>models/</code> for per-model textures), the [[Tools/NetRadiant|NetRadiant]] level editor will only list files from <code>textures/</code> folder. Also, the Quake 3 <code>.map</code> format we use to store source level assumes all materials start with <code>textures/</code> and strip that prefix before saving.}}<br />
<br />
The material syntax is inherited from Quake 3 and Doom 3, but the {{engine}} also received fixes for design regressions introduced in Doom 3 (components like <code>normalMap</code> can be staged).<br />
<br />
Keywords prefixed with <code>q3map_</code> prefixes are map compiler keywords ([[Tools/Q3map2|Q3map2]]), keywords prefixed with <code>qer_</code> are editor keywords ([[Tools/NetRadiant|NetRadiant]], its ancestor was named ''QERadiant'', ''QE'' dates back from ''Quake'' with ''QuakeEd'').<br />
<br />
There are other keywords not having prefixes for historical reasons like <code>cull</code>, <code>nopicmip</code>, <code>nonsolid</code>, <code>trans</code>, etc. Some may be compiler keywords, others may be engine keywords. The <code>surfaceparm</code> keyword may be read and may be used (or not) by both compiler and engine, they may affect surfaces or content of brushes with faces having this material on its sides.<br />
<br />
Comments are preceded with <code>//</code>.<br />
<br />
Here is an example of material file defining three materials:<br />
<br />
<pre><br />
// this is a material name (to be applied on a surface):<br />
textures/shared_vega/plasma_whirl<br />
// this block is a material definition (a single-staged one):<br />
{<br />
// those are optional per-material editor, compiler or renderer keywords:<br />
qer_editorImage textures/shared_vega_src/plasma_whirl_p<br />
<br />
q3map_surfacelight 150<br />
q3map_lightRGB 0 .95 0<br />
q3map_globaltexture<br />
<br />
surfaceparm nonsolid<br />
surfaceparm noimpact<br />
surfaceparm nomarks<br />
<br />
cull none<br />
<br />
deformVertexes wave 64 sin .25 .25 0 .5<br />
<br />
// this block is a stage definition:<br />
{<br />
// this is a texture keyword with a texture path:<br />
map textures/shared_vega_src/plasma_whirl_b<br />
<br />
// those are optional per-stage renderer keywords:<br />
tcMod rotate 20<br />
blend blend<br />
}<br />
}<br />
<br />
// this is another material name:<br />
textures/shared_ex/base1a<br />
// this block is another material definition (a multitextured one):<br />
{<br />
// those is an optional per-material editor keyword:<br />
qer_editorImage textures/shared_ex_src/base1a_d<br />
<br />
// this block is a stage definition,<br />
// it is called a pre-collapsed stage as diffuse, normal<br />
// and (implicit) lightmap stages are done within a single stage:<br />
{<br />
diffuseMap textures/shared_ex_src/base1a_d<br />
normalMap textures/shared_ex_src/base1_n<br />
heightMap textures/shared_ex_src/base1_h<br />
specularMap textures/shared_ex_src/base1_s<br />
}<br />
}<br />
<br />
<br />
// this is another material name:<br />
textures/thunder_custom/ter_rocksand_yz<br />
// this block is another material definition (a multi-staged one):<br />
{<br />
// those are optional per-material editor and compiler keywords:<br />
qer_editorImage textures/thunder_custom_src/ter_rocksand_p<br />
<br />
q3map_nonplanar<br />
q3map_shadeAngle 90<br />
q3map_tcGen ivector ( 0 256 0 ) ( 0 0 256 )<br />
q3map_alphaMod dotproduct2 ( 0 0 .75 )<br />
<br />
// this block is a pre-collapsed stage definition:<br />
{<br />
// those are a texture component keywords with texture paths:<br />
diffuseMap textures/shared_pk02_src/rock01_d<br />
normalMap textures/shared_pk02_src/rock01_n<br />
specularMap textures/shared_pk02_src/rock01_s<br />
<br />
// those are optional per-stage renderer keywords:<br />
rgbGen identity<br />
}<br />
<br />
// this block is another pre-collapsed stage definition:<br />
{<br />
// those are a texture component keywords with texture paths:<br />
diffuseMap textures/shared_pk02_src/sand01_d<br />
normalMap textures/shared_pk02_src/sand01_n<br />
specularMap textures/shared_pk02_src/sand01_s<br />
<br />
// those are optional per-stage renderer keywords:<br />
blendFunc blend<br />
alphaGen vertex<br />
}<br />
}<br />
</pre><br />
<br />
==Material examples==<br />
<br />
===Simple materials===<br />
<br />
This material features a pure white diffuse map and lightmap will not be baked on it, engine will not draw weapon impacts and other marks.<br />
<br />
<pre><br />
textures/vega_custom/white<br />
{<br />
qer_editorImage textures/vega_custom_src/white_d<br />
<br />
{<br />
diffuseMap textures/vega_custom_src/white_d<br />
}<br />
<br />
surfaceparm nomarks<br />
surfaceparm nolightmap<br />
}<br />
</pre><br />
<br />
This environmental texture features a diffuse map, a normal map, an height map and a specular map.<br />
<br />
<pre><br />
textures/shared_ex/base1a<br />
{<br />
qer_editorImage textures/shared_ex_src/base1a_d<br />
<br />
{<br />
diffuseMap textures/shared_ex_src/base1a_d<br />
normalMap textures/shared_ex_src/base1_n<br />
heightMap textures/shared_ex_src/base1_h<br />
specularMap textures/shared_ex_src/base1_s<br />
}<br />
}<br />
</pre><br />
<br />
This player model texture features a diffuse map, a normal map, and a specular map. The engine will not reduce its resolution to side size below <code>256</code> pixels to keep details readable.<br />
<br />
<pre><br />
models/players/level4/level4b<br />
{<br />
qer_editorImage models/players/level4/level4b_d<br />
imageMinDimension 256<br />
{<br />
diffuseMap models/players/level4/level4b_d<br />
normalMap models/players/level4/level4b_n<br />
specularMap models/players/level4/level4b_s<br />
}<br />
}<br />
</pre><br />
<br />
===Graphical effects materials===<br />
<br />
This buildable material features a diffuse map, a normal map and a specular map, and two stages for glow maps with custom blending functions. The top glow map is waving using a sine function, the around glow map uses a custom per-color-channel blending function.<br />
<br />
When the buildable is destroyed, another material is used instead which only features a diffuse map, a normal map and a specular map.<br />
<br />
The engine will not reduce the image to side lower than <code>128</code> to keep details readable.<br />
<br />
<pre><br />
models/buildables/drill/drill<br />
{<br />
qer_editorImage models/buildables/drill/drill_d<br />
imageMinDimension 128<br />
{<br />
diffuseMap models/buildables/drill/drill_d<br />
normalMap models/buildables/drill/drill_n<br />
specularMap models/buildables/drill/drill_s<br />
}<br />
// white lamp on top<br />
{<br />
map models/buildables/drill/drill_top_a<br />
blendfunc add<br />
rgbGen wave sin 1 .85 .5 .08<br />
}<br />
// small yellow lamps around<br />
{<br />
map models/buildables/drill/drill_around_a<br />
blendfunc add<br />
rgb .85 .85 .85<br />
}<br />
when destroyed models/buildables/drill/drill_dead<br />
}<br />
<br />
models/buildables/drill/drill_dead<br />
{<br />
qer_editorImage models/buildables/drill/drill_d<br />
imageMinDimension 128<br />
{<br />
diffuseMap models/buildables/drill/drill_d<br />
normalMap models/buildables/drill/drill_n<br />
specularMap models/buildables/drill/drill_s<br />
}<br />
}<br />
</pre><br />
<br />
This material is a non-solid double-sided (not culled) translucent rotating material emitting light, the surface will be deformed like waves and no impact will be drawn on it.<br />
<br />
<pre><br />
textures/shared_vega/plasma_whirl<br />
{<br />
qer_editorImage textures/shared_vega_src/plasma_whirl_p<br />
<br />
q3map_surfacelight 150<br />
// radioactive green #00f200<br />
q3map_lightRGB 0 .95 0<br />
q3map_globaltexture<br />
<br />
surfaceparm nonsolid<br />
surfaceparm noimpact<br />
surfaceparm nomarks<br />
<br />
cull none<br />
<br />
// deformVertexes wave <div> <func> <base> <amplitude> <phase> <freq><br />
deformVertexes wave 64 sin .25 .25 0 .5<br />
<br />
{<br />
map textures/shared_vega_src/plasma_whirl_b<br />
tcMod rotate 20<br />
blend blend<br />
}<br />
}<br />
</pre><br />
<br />
This material is a double-sided, non solid, moving water texture, with a scaling and scrolling effects applied. Surface is also deformed.<br />
<br />
If a player manages to go enter a brush using this material, the player view will be affected by in-water view effect.<br />
<br />
<pre><br />
textures/shared_vega/water<br />
{<br />
qer_editorImage textures/shared_vega_src/water_p<br />
qer_trans .5<br />
<br />
surfaceparm nonsolid<br />
surfaceparm water<br />
cull none<br />
<br />
q3map_globaltexture<br />
<br />
deformVertexes wave 64 sin .25 .25 0 .5<br />
<br />
{<br />
map textures/shared_vega_src/water_b<br />
blendFunc GL_dst_color GL_one<br />
rgbGen identity<br />
tcMod scale .5 .5<br />
tcMod scroll .01 .01<br />
}<br />
}<br />
</pre><br />
<br />
===Translucent materials===<br />
<br />
This glass material features a diffuse map and is translucent. The engine will render things behind this surface.<br />
<br />
In [[Tools/NetRadiant|NetRadiant]] editor, the image will be rendered with a <code>50%</code> translucency (<code>0.50</code>/1). The editor renderer is not as advanced as a game engine and does not support blending, that's why we use simpler tricks like half translucency in editor.<br />
<br />
This texture is double-sided (not <code>cull</code>ed) and considered as <code>trans</code>lucent by the [[Tools/Q3map2|Q3map2]] map compiler (surfaces behind will not be removed from BSP tree so the engine will render them). When baking lightmaps with [[Tools/Q3map2|Q3map2]], the casted light going through this texture will be affected by this texture, producing shadows with darkness relative to the alpha channel of the glass texture.<br />
<br />
<pre><br />
textures/shared_trak5/glass<br />
{<br />
qer_editorImage textures/shared_trak5_src/glass_d<br />
qer_trans 0.50<br />
<br />
cull none<br />
surfaceparm alphashadow<br />
surfaceparm trans<br />
<br />
{<br />
diffuseMap textures/shared_trak5_src/glass_d<br />
blend blend<br />
}<br />
}<br />
</pre><br />
<br />
This grate floor material features a diffuse map, a normal map and a specular map.<br />
<br />
The [[Tools/Q3map2|Q3map2]] map compiler will keep visible the surfaces behind and when computing lightmaps, it will cast shadows based on the diffuse map alpha channel.<br />
<br />
The engine will not draw weapon impacts and other marks on it. The engine will not blend the texture, instead, it will consider opaque everything that is greater or equal (<code>GE</code>) to <code>128</code> (from <code>0</code> to <code>256</code>). Other options are <code>GT0</code> (greater than <code>0</code>) or <code>LT128</code> (less then <code>128</code>).<br />
<br />
Because of the <code>nopicmip</code> keyword, this textures will always be displayed in full resolution (you may prefer using <code>imageMinDimension</code> keyword instead, to only set a minimum value to not reduce the resolution below it).<br />
<br />
The game will play metal step sounds when a player walks on it.<br />
<br />
<pre><br />
textures/perseus_pk02/floor07<br />
{<br />
qer_editorImage textures/perseus_pk02_src/floor07_d<br />
<br />
surfaceparm trans<br />
surfaceparm nomarks<br />
surfaceparm metalsteps<br />
surfaceparm alphashadow<br />
nopicmip<br />
<br />
{<br />
diffuseMap textures/perseus_pk02_src/floor07_d<br />
normalMap textures/perseus_pk02_src/floor07_n<br />
specularMap textures/perseus_pk02_src/floor07_s<br />
alphafunc GE128<br />
}<br />
}<br />
</pre><br />
<br />
===Light-emitting materials===<br />
<br />
This material for a star chart to be displayed on a wall only features a diffuse map and emits a light with an intensity of <code>150</code> and no lightmap will be baked on it.<br />
<br />
<pre><br />
textures/vega_custom/starchart01<br />
{<br />
qer_editorImage textures/vega_custom_src/starchart01_d<br />
<br />
q3map_surfacelight 150<br />
<br />
surfaceparm nolightmap<br />
<br />
{<br />
map textures/vega_custom_src/starchart01_d<br />
}<br />
}<br />
</pre><br />
<br />
This is a light-emitting material for the surface of a soda vending machine front. It features a diffuse map, a normal map, an height map (adding relief to buttons and other things), a specular map, and a glow map.<br />
<br />
The emitted light is an arbitrary RGB color (with floats from <code>0.0</code> to <code>1.0</code>)<br />
<br />
The emitted light intensity is <code>150</code>, a light is emitted every <code>64</code> unit, the backSplash light (a specific light added to lit back the surface) has an intensity that is <code>100</code>% the one of the light and is positioned at <code>20</code> quake units in front of the surface.<br />
<br />
<pre><br />
textures/shared_ambient/soda-machines/khalsacola<br />
{<br />
qer_editorImage textures/shared_ambient_src/soda-machines/khalsacola_d<br />
<br />
q3map_lightRGB .392 .235 .392<br />
q3map_lightSubdivide 64<br />
q3map_surfaceLight 150<br />
q3map_backSplash 100 20<br />
<br />
{<br />
diffuseMap textures/shared_ambient_src/soda-machines/khalsacola_d<br />
heightMap textures/shared_ambient_src/soda-machines/khalsacola_h<br />
normalMap textures/shared_ambient_src/soda-machines/khalsacola_n<br />
normalFormat X Y Z<br />
specularMap textures/shared_ambient_src/soda-machines/khalsacola_s<br />
glowMap textures/shared_ambient_src/soda-machines/khalsacola_a<br />
}<br />
}<br />
</pre><br />
<br />
This is a light-emitting material for a door surface. It feature a diffuse map, a normal map, and height map, a specular map and a glow map. The emitted light is averaged from the glow map.<br />
<br />
The light intensity is <code>50</code>. The backSplash light values are the default ones (<code>5</code>%, <code>23</code> qu).<br />
<br />
<pre><br />
textures/shared_pk01/door01a_50<br />
{<br />
qer_editorImage textures/shared_pk01_src/door01a_d<br />
<br />
q3map_surfacelight 50<br />
q3map_lightImage textures/shared_pk01_src/door01_a<br />
<br />
{<br />
diffuseMap textures/shared_pk01_src/door01a_d<br />
normalMap textures/shared_pk01_src/door01_n<br />
heightMap textures/shared_pk01_src/door01_h<br />
specularMap textures/shared_pk01_src/door01_s<br />
glowMap textures/shared_pk01_src/door01_a<br />
}<br />
}<br />
</pre><br />
<br />
===Terrain blending materials===<br />
<br />
This is a material featuring two stages. The first stage featuyes one rock texture with diffuse, normal and specular maps. The second stage features one sand texture with diffuse, normal, specular maps. Those two stages are blended together by the engine according to the alphaGen vertex value of the surface (computed by the [[Tools/Q3map2|Q3map2]] tool) allowing a rocky surface to smoothly fade to sand surface. This is useful for example blend some rocks into a sandy floor.<br />
<br />
The preview image is custom.<br />
<br />
<pre><br />
textures/thunder_custom/ter_rocksand_yz<br />
{<br />
qer_editorImage textures/thunder_custom_src/ter_rocksand_p<br />
<br />
q3map_nonplanar<br />
q3map_shadeAngle 90<br />
q3map_tcGen ivector ( 0 256 0 ) ( 0 0 256 )<br />
q3map_alphaMod dotproduct2 ( 0 0 .75 )<br />
<br />
{<br />
diffuseMap textures/shared_pk02_src/rock01_d<br />
normalMap textures/shared_pk02_src/rock01_n<br />
specularMap textures/shared_pk02_src/rock01_s<br />
rgbGen identity<br />
}<br />
{<br />
diffuseMap textures/shared_pk02_src/sand01_d<br />
normalMap textures/shared_pk02_src/sand01_n<br />
specularMap textures/shared_pk02_src/sand01_s<br />
blendFunc blend<br />
alphaGen vertex<br />
}<br />
}<br />
</pre><br />
<br />
===Materials reusing textures===<br />
<br />
Those two ceiling material variants have specific diffuse and specular maps but reuse the same normal map.<br />
<br />
<pre><br />
textures/shared_ej01-clean/ceiling01<br />
{<br />
qer_editorImage textures/shared_ej01-clean_src/ceiling01_d<br />
<br />
{<br />
diffuseMap textures/shared_ej01-clean_src/ceiling01_d<br />
normalMap textures/shared_ej01-common_src/ceiling01_n<br />
specularMap textures/shared_ej01-clean_src/ceiling01_s<br />
}<br />
}<br />
<br />
textures/shared_ej01-ice/ceiling01<br />
{<br />
qer_editorImage textures/shared_ej01-ice_src/ceiling01_d<br />
<br />
{<br />
diffuseMap textures/shared_ej01-ice_src/ceiling01_d<br />
normalMap textures/shared_ej01-common_src/ceiling01_n<br />
specularMap textures/shared_ej01-ice_src/ceiling01_s<br />
}<br />
}<br />
</pre><br />
<br />
This material is a light-emitting one with diffuse, normal, specular and glow maps. The normal map uses a custom <code>-X -Y Z</code> normal map format.<br />
<br />
The glow map uses a dedicated stage using a blending function to only make the red channel glowing. This means another material can reuse the exact same image but glow in green or blue or yellow by using other RGB blending values.<br />
<br />
One can do another material reusing the exact same textures with another intensity and/or another color by modifying <code>q3map_surfacelight</code> and <code>q3map_lightRGB</code> and modifying material name to reflect the changes.<br />
<br />
<pre><br />
textures/vega_custom/squarelight01_red_150<br />
{<br />
qer_editorImage textures/shared_vega_src/squarelight01_red_p<br />
<br />
// red<br />
q3map_lightRGB 1 0 0<br />
q3map_surfacelight 150<br />
<br />
{<br />
diffuseMap textures/shared_vega_src/squarelight01_d<br />
normalMap textures/shared_vega_src/squarelight01_n<br />
normalFormat -X -Y Z<br />
specularMap textures/shared_vega_src/squarelight01_s<br />
}<br />
{<br />
map textures/shared_vega_src/squarelight01_a<br />
blendFunc add<br />
red 1<br />
green 0<br />
blue 0<br />
}<br />
}<br />
</pre></div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Tutorials/Exporting_models&diff=8604Tutorials/Exporting models2024-03-08T23:49:30Z<p>Illwieckz: /* Writing shaders */</p>
<hr />
<div>[[Category:Tutorials]]<br />
[[Category:Modeling]]<br />
==Overview==<br />
{{OutOfDate}}<br />
<br />
{{Note|content=This guide was written for the 2.6 series of Blender. Most of this guide should apply for other versions of Blender, but this is not guaranteed.}}<br />
<br />
{{TODO|Add tutorial for exporting IQM models.}}<br />
<br />
Getting a finished model out of Blender and into the game is a relatively involved process with a number of possible pitfalls. This guide aims to describe the process in as much detail as possible to assist users who have not done it before, or those who have exported models for other games and would like to know what (if anything) is different.<br />
<br />
If you would like to export from Maya, you may find the official [http://www.iddevnet.com/quake4/Animations id Software documentation] useful.<br />
<br />
At present, this guide primarily describes the process for exporting models to the MD5 format. While the engine supports both MD3 and MD5, the latter is preferred. The reasons for this are discussed [[#What_is_MD5?|below]].<br />
<br />
Before a model may be exported and used in-game, it must be adequately prepared:<br />
<br />
{{TODO|Determine which of these are only applicable to the old exporter.}}<br />
<br />
* [[#Limitations_of_the_engine|Engine limitations]] must be adhered to.<br />
* The model must have a texture applied to it. This texture is not automagically applied to the model after it is exported and loaded in-game, this is only necessary to satisfy the MD5 exporter; that is, the game cannot read from the exported model the filename of the texture to use.<br />
* The model must be a mesh and must have an armature modifier applied to it.<br />
* The armature's bones all must have at least one keyframe.<br />
<br />
The actual process of exporting a model is straightforward:<br />
<br />
# After ensuring that the above requirements are met, the mesh itself is exported.<br />
# If using the old exporter, each animation is exported separately. The new exporter adds support for [[#Batch_export_with_the_new_exporter|batch export]] of animations.<br />
# A [[#Configuring_the_model|configuration file]] specifying data such as the bounding box size and vertical offset is written. This may include information that is specific to the particular type of model (i.e., buildable or player model).<br />
# A [[#Writing_shaders|shader]] is written that determines how the model is textured in-game.<br />
# Finally, after everything is properly named and configured, the files are [[Packaging_game_data|packaged]] and placed in the correct game data folder to allow it to be loaded in-game.<br />
<br />
==What is MD5?==<br />
<br />
MD5 is the model format created by id Software for Doom 3 which is also used by Unvanquished. It is an improvement over its predecessor, MD3, in that it uses bones to pose the model.<br />
<br />
{{Note|header=What about MD3? IQM? PSK? ASE? Obj?|content=<br />
{{SupportedModelFormats}}<br />
}}<br />
<br />
===Advantages over MD3===<br />
<br />
* Unlike MD3, MD5 is bone-based, meaning that instead of storing an entire mesh for each frame of animation, there is only one mesh file. This single mesh file is deformed using a vertex shader.<br />
* Because there is only one mesh, only one VBO (vertex buffer object) needs to be created for each MD5 model. The deformation is performed entirely on the GPU, so it is (theoretically) faster than MD3, and uses less memory.<br />
* Because the format is in plain-text, it can be easily verified for sanity (i.e., to ensure that it was exported correctly and not corrupted in some way).<br />
<br />
===Disadvantages over MD3===<br />
<br />
* Some forms of motion are more difficult to achieve; certain animation techniques (such as lattices) are not usable.<br />
* Because the format is in plain-text, it takes up more space than it needs to, though this is negligible and a MD5 model will typically be smaller than the same model in MD3 format as less data is used per each frame of animation with MD5 as compared to MD3.<br />
<br />
===Limitations of the engine===<br />
<br />
The engine places certain limitations on the fidelity of your models when using the MD5 format. These are:<br />
<br />
* There may not be more than 128 bones. (Note: this was increased from 64.)<br />
* There may not be more than 100,000 vertices.<br />
* There may not be more than 10,000 triangles.<br />
* No vertex may belong to more than four vertex groups (i.e., one vertex may not be controlled by more than four bones). An error message will be displayed in-game if this requirement is not met. A [[#.22R_LoadMD5:_vertex_.25i_requires_more_than_.25i_weights_on_surface_.28.25i.29_in_model_.27.25s.27.22|script]] may be used before exporting to check that this limitation is not exceeded.<br />
<br />
{{Note|header=Developer Note|content=The limitation on vertex groups is a hard-coded limitation of the vertex shader ({{SourceFile|main/glsl/vertexSkinning_vp.glsl}}) that deforms the base mesh.}}<br />
<br />
===Limitations of the format===<br />
<br />
The MD5 format only supports bones. You may not<br />
<br />
* Use lattices or any other means of deformation.<br />
* Scale bones.<br />
* Use keyframes on anything other than bone poses. You may, however, set keyframes on bone constraint influences or anything else that would affect a bone's position or rotation.<br />
<br />
Note that you do not have to have a parent/child relationship between bones. In fact, in some instances, avoiding a parent/child relationship is necessary to achieve certain effects, such as moving bones around.<br />
<br />
==Acquiring and installing the exporter==<br />
<br />
===MD3===<br />
<br />
If for some reason you are interested in the MD3 exporter, it is available from [http://sourceforge.net/projects/md3exporter/ SourceForge].<br />
<br />
===MD5===<br />
<br />
====Old exporter====<br />
<br />
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''<br />
<br />
You can download the exporter from [http://www.katsbits.com/smforum/index.php?topic=178.0 this thread on katsbits.com]. Installation instructions are in the thread.<br />
<br />
====New exporter====<br />
<br />
As of 15 May 2012, there is another [http://sourceforge.net/projects/blenderbitsbobs/ MD5 exporter available for Blender 2.63+] ([http://www.katsbits.com/smforum/index.php?topic=404.0 discussion on katsbits]). This has been found to be superior to the old exporter. Note that portions of this guide have not yet been updated to reflect the differences in the new exporter.<br />
<br />
dsalt had patched it (see [http://sourceforge.net/u/dsalt/blenderbitsbobs/ repository]) to allow each mesh objects to have a custom <code>q3tex</code> property to store the shader name. In the <code>.md5mesh</code> file, this will fill the <code>shader</code> for the corresponding mesh.<br />
<br />
==Exporting the mesh==<br />
<br />
===MD5===<br />
<br />
Note that for buildables and weapons, the filename of the exported mesh is dictated by the corresponding [[#Configuring_the_model|configuration file]]. All player models, however, are hardcoded to look for <code>body.md5mesh</code>.<br />
<br />
====Old exporter====<br />
<br />
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''<br />
<br />
# Select the armature and the mesh. The order in which you select the two does not matter.<br />
# Click File &rarr; Export &rarr; Quake&nbsp;Model&nbsp;5&nbsp;(.md5)<br />
# On the left shelf that appears in the file prompt, change the Exports combo box to "Mesh only." Don't worry about the scale or name fields.<br />
# Click "Export MD5".<br />
<br />
Once this has been completed, you must manually edit the mesh file (the one with a <code>.md5mesh</code> extension) to specify the correct shader to use.<br />
<br />
<pre><br />
--- snip ---<br />
mesh {<br />
shader "models/buildables/medistat"<br />
<br />
numverts 4<br />
vert 0 ( 1.000000 0.000000 ) 0 1<br />
vert 1 ( 0.000000 0.000000 ) 1 1<br />
--- snip ---<br />
</pre><br />
<br />
Note that <code>models/buildables/medistat</code> is '''not''' a file path to a shader; it is the name (again, not filename) of the shader to use. That is, a shader with the matching name will be used for this model.<br />
<br />
To avoid having to do this every time you export the mesh, set the name of the material applied to the object in Blender to the same as you edited the md5mesh.<br />
<br />
====New exporter====<br />
<br />
* Select the mesh to export.<br />
* Click File &rarr; Export &rarr; MD5 Mesh (.md5mesh).<br />
* Specify the output filename in the dialog, and click "Export MD5MESH".<br />
<br />
The exported model is not ready to be used in-game just yet; it must be manually edited. Open the exported <code>.md5mesh</code> file in a text editor, and manually delete the top three lines of the file (highlighted in red below):<br />
<br />
<span style="color:#f00;">// Parameters used during export:<br />
// Reorient: True<br />
// Scale: 1.0</span><br />
MD5Version 10<br />
commandline ""<br />
<br />
numJoints 4<br />
numMeshes 1<br />
<br />
joints {<br />
<br />
...<br />
<br />
<i>remainder of file omitted for brevity</i><br />
<br />
Be sure to save the file when you are done. You will also have to do this for each animation file that you export.<br />
<br />
If you do not want to have to do this each time, you can edit the exporter script. Open the <code>export_md5.py</code> script in the <code>io_scene_md5</code> folder where you installed the script, at around line 30, edit this code:<br />
<br />
def record_parameters(correctionMatrix):<br />
return [<br />
"// Parameters used during export:\n",<br />
"// Reorient: {}\n".format(bool(correctionMatrix.to_euler()[2])),<br />
"// Scale: {}\n".format(correctionMatrix.decompose()[2][0])]<br />
<br />
to look like this:<br />
<br />
def record_parameters(correctionMatrix):<br />
return []<br />
<br />
If you are comfortable with applying patches, you may use this:<br />
<br />
<pre><br />
@@ -27,10 +27,7 @@<br />
return pairs<br />
<br />
def record_parameters(correctionMatrix):<br />
- return [<br />
- "// Parameters used during export:\n",<br />
- "// Reorient: {}\n".format(bool(correctionMatrix.to_euler()[2])),<br />
- "// Scale: {}\n".format(correctionMatrix.decompose()[2][0])]<br />
+ return []<br />
<br />
def define_components(obj, bm, bones, correctionMatrix):<br />
scaleFactor = correctionMatrix.to_scale()[0]<br />
</pre><br />
<br />
Note that you will also have to manually set the shader as with the [[#Old_exporter_2|old exporter]].<br />
<br />
==Exporting the animations==<br />
<br />
===MD3===<br />
<br />
Exported MD3 animations require a configuration file that specifies which frames of the animation correspond to which actions the game will display.<br />
<br />
This varies slightly by the type (i.e., weapon or buildable) of model.<br />
<br />
===MD5===<br />
<br />
====Old exporter====<br />
<br />
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''<br />
<br />
The procedure for exporting animations is the same as for exporting the mesh with regard to selecting the mesh and the armature. Before using the exporter, however, you must be certain to set the start and end frames to encompass only the particular animation that you wish to export; each animation must be exported separately, unless the [[#New_exporter|new exporter]] is used, which adds a [[#Batch_export_with_the_new_exporter|batch export]] feature.<br />
<br />
[[Image:Md5_export_timeline.png|frame|center|The timeline view in Blender, which is used to set which frames of animation to export. Here, only one frame of animation (frame 180) is being exported.]]<br />
<br />
At the export file prompt, choose "Anim only." from the "Exports" combo box. Enter as the filename the name of the particular animation that you are exporting; the correct names to use are given below.<br />
<br />
====Batch export with the new exporter====<br />
<br />
The [[Exporting Models#Batch export|new exporter]] now supports batch export of models.<br />
<br />
To make use of this feature, you must set [http://wiki.blender.org/index.php/Doc:2.6/Manual/Animation/Markers frame markers] denoting the start and end of each animation. The name of frame markers denoting the start of an animation must end in "_start" and markers denoting the end of an animation must end in "_end"; for example, frame markers denoting the start and end of a buildable's construct animation would be "construct_start" and "construct_end". Avoid using frame markers with duplicate names, as which one will be used by the exporter is not predictable. Note that frame markers may overlap however you please; this is useful when two animations share a frame or you would like to automate the process of exporting the same few frames of animation as several different animation files (e.g., for testing purposes).<br />
<br />
All operations in modifying frame markers are performed in the [http://wiki.blender.org/index.php/Doc:2.6/Manual/Animation/Timeline timeline]:<br />
* To create a frame marker, move the timeline to the desired frame and press <span class="hotkey">M</span>.<br />
* To select a frame marker, click with the right mouse button.<br />
* To move a frame marker, select it and press <span class="hotkey">G</span>.<br />
* To delete a frame marker, select it and press <span class="hotkey">X</span>.<br />
* To rename a frame marker, select it and press <span class="hotkey">Ctrl</span><span class="hotkey">M</span>.<br />
<br />
The actual exportation process becomes much simpler:<br />
<br />
# Click File &rarr; Export &rarr; MD5 (batch export).<br />
# Specify the filename of the <code>.md5mesh</code> to export.<br />
<br />
==Animation names==<br />
<br />
The filenames for each exported animation must be what the engine expects for it to be able to load them, and vary depending on the format (MD3 or MD5) and type (e.g., buildable, weapon, or player) of model being exported.<br />
<br />
===Weapons===<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
See the <code>CG_ParseWeaponFile()</code> function in {{SourceFile|src/gamelogic/cgame/cg_weapons.c}}</code>.<br />
<br />
Weapon state constants are enumerated in the <code>weaponstate_t</code> enum in {{SourceFile|src/gamelogic/game/bg_public.h}}</code>:<br />
<br />
{{{!}} class{{=}}"wikitable"<br />
{{!}}-<br />
! Constant<br />
! Description<br />
{{!}}-<br />
{{!}} <code>WEAPON_READY</code><br />
{{!}} The weapon at its idle state, ready to fire.<br />
{{!}}-<br />
{{!}} <code>WEAPON_RAISING</code><br />
{{!}} The weapon as it is being raised. It may not be fired in this state.<br />
{{!}}-<br />
{{!}} <code>WEAPON_DROPPING</code><br />
{{!}} The weapon as it is being put away. It may not be fired in this state.<br />
{{!}}-<br />
{{!}} <code>WEAPON_FIRING</code><br />
{{!}} The weapon as it is being fired.<br />
{{!}}-<br />
{{!}} <code>WEAPON_RELOADING</code><br />
{{!}} The weapon as it is being reloaded.<br />
{{!}}-<br />
{{!}} <code>WEAPON_NEEDS_RESET</code><br />
{{!}} The Lucifer Cannon in its overcharged state.<br />
{{!}}-<br />
{{!}}}<br />
<br />
Control of weapon states is done by <code>PM_Weapon()</code>, <code>PM_BeginWeaponChange()</code>, and <code>PM_FinishWeaponChange()</code> in {{SourceFile|src/gamelogic/game/bg_pmove.c}}</code>.<br />
}}<br />
<br />
Note that for both MD3 and MD5 models, there may be separate models for first- and third-person views. Please see "[[#Weapons|Configuring the model]]" for more information regarding how to specify separate models.<br />
<br />
====MD3====<br />
<br />
MD3 does not use separate files for separate animations. Instead, a configuration file specifies what frames of a single MD3 animation are used for each in-game animation.<br />
<br />
{{TODO|Find out how barrel spin is handled by the engine. Is it animated into the barrel model or is it done procedurally?}}<br />
<br />
In addition to the base weapon mesh, there may be as many as three additional MD3 meshes:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Search string<br />
! Tag<br />
! Description<br />
|-<br />
| <code>%s_flash.md3</code><br />
| <code>tag_flash</code><br />
| The weapon's muzzle flash.<br />
|-<br />
| <code>%s_barrel.md3</code><br />
| <code>tag_barrel</code><br />
| The weapon's barrel.<br />
|-<br />
| <code>%s_hand.md3</code><br />
| N/A<br />
| Hands holding the weapon model. Note: this is not used for third person models.<br />
|}<br />
<br />
For non-programmers, the <code>%s</code> string is replaced by the parameter given to the <code>weaponModel</code> or <code>weaponModel3rdPerson</code> keyword.<br />
<br />
The tag <code>tag_weapon</code> is used on the main weapon model to align the third person weapon model to the third person player model.<br />
<br />
====MD5====<br />
<br />
Note that each animation filename must have the <code>.md5anim</code> extension.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Animation name<br />
! Engine constant<br />
! Description<br />
|-<br />
| <code>%s_view_idle</code><br />
| <code>WANIM_IDLE</code><br />
| Animation played when a weapon is not being fired<br />
|-<br />
| <code>%s_view_lower</code><br />
| <code>WANIM_DROP</code><br />
| Animation played when a weapon is being put away<br />
|-<br />
| <code>%s_view_reload</code><br />
| <code>WANIM_RELOAD</code><br />
| Weapon reload animation<br />
|-<br />
| <code>%s_view_raise</code><br />
| <code>WANIM_RAISE</code><br />
| Animation played when a weapon is switched to<br />
|-<br />
| <code>%s_view_fire</code><br />
| <code>WANIM_ATTACK1</code><br />
| Default attack animation<br />
|-<br />
|<br />
| <code>WANIM_ATTACK2</code><br />
| rowspan="7" | Usage of these is highly dependent on the player class. The marauder, for example, may randomly use one of these instead of <code>WANIM_ATTACK1</code>.<sup>1</sup><br />
|-<br />
|<br />
| <code>WANIM_ATTACK3</code><br />
|-<br />
|<br />
| <code>WANIM_ATTACK4</code><br />
|-<br />
|<br />
| <code>WANIM_ATTACK5</code><br />
|-<br />
|<br />
| <code>WANIM_ATTACK6</code><br />
|-<br />
|<br />
| <code>WANIM_ATTACK7</code><br />
|-<br />
|<br />
| <code>WANIM_ATTACK8</code><br />
|-<br />
|}<br />
<br />
# See <code>PM_Weapon()</code>.<br />
<br />
===Buildables===<br />
<br />
====MD3====<br />
<br />
As always, MD3 buildable models require a separate configuration file that specifies which frames of the animation correspond to actions displayed by the game.<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
This file is parsed by <code>CG_ParseBuildableAnimationFile()</code> in {{SourceFile|src/gamelogic/cgame/cg_buildable.c}}.<br />
}}<br />
<br />
Each line in the configuration file corresponds to a single animation. Those animations are in the same order as in the table for MD5 animation names below.<br />
<br />
The order that animations appear in the configuration file must match this order exactly. Animations may not be omitted.<br />
<br />
The syntax is as follows:<br />
<br />
<var>firstFrame</var> <var>numFrames</var> [<var>loopFrames</var> [<var>fps</var>]]<br />
<br />
* <var>firstFrame</var> &mdash; Specifies the initial frame of the animation.<br />
* <var>numFrames</var> &mdash; Specifies the number of frames following the initial frame that comprise that animation.<br />
* <var>loopFrames</var> &mdash; (''Optional'')<br />
* <var>fps</var> &mdash; (''Optional, may only be used if loopFrames is specified'') Specifies the framerate of the animation. If not specified, defaults to 1.<br />
<br />
C and C++ style comments (i.e., <code>//</code> and <code>/* */</code>) are permitted past the last argument.<br />
<br />
====MD5====<br />
<br />
As with weapon animations, each animation filename must have the <code>.md5anim</code> extension.<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
These animation constants are in the <code>buildableAnimNumber_t</code> enumeration in {{SourceFile|src/gamelogic/game/bg_public.c}}. Animations are set using the <code>G_SetIdleBuildableAnim()</code> and <code>G_SetBuildableAnim()</code> functions. All animations are in entity behavior functions in {{SourceFile|src/gamelogic/game/g_buildable.c}}.<br />
<br />
Sounds for animations are enumerated in the <code>cg_buildableSoundNames</code> array in {{SourceFile|src/gamelogic/game/bg_public.h}}.}}<br />
<br />
<!-- Items in this table are in the same order as in enum buildableAnimNumber_t --><br />
{| class="wikitable"<br />
|-<br />
! Animation name<br />
! Engine constant<br />
! Used by<br />
! Description<br />
|-<br />
| <code>idle</code><br />
| <code>BANIM_IDLE1</code><br />
| All<br />
| Idle animation, shown when the buildable is not doing anything (or unpowered in case of human buildables). They are used in place of other animations when they are missing (unless otherwise noted).<br />
|-<br />
| <code>idle2</code><br />
| <code>BANIM_IDLE2</code><br />
| Medistation, telenode, barricade, egg<br />
| ‘Active’ idle state, e.g. while the medistation is currently healing (but not when transitionning from or to healing state).<br />
|-<br />
| <code>powerdown</code><br />
| <code>BANIM_POWERDOWN</code><br />
| Human buildables, (barricade)<br />
| Animation played at the moment a buildable loses power.<br />
|-<br />
| <code>idle_unpowered</code><br />
| <code>BANIM_IDLE_UNPOWERED</code><br />
| Human buildables, (barricade)<br />
| Idle animation played when a buildable is unpowered. ''(Formerly <code>idle3</code>.)''<br />
|-<br />
| <code>construct</code><br />
| <code>BANIM_CONSTRUCT1</code><br />
| All<br />
| Construction animation, shown when the buildable is being built.<br />
|-<br />
| <code>construct2</code><br />
| <code>BANIM_CONSTRUCT2</code><br />
| Medistation, (telenode), (egg)<br />
| Animation played when returning to the primary idle state, for example after a medistation has healed.<br />
|-<br />
| <code>attack</code><br />
| <code>BANIM_ATTACK1</code><br />
| All (except tesla)<br />
| Animation played when a buidlable is attacking or transitioning to its ‘active’ idle state. For the barricade, the animation when it is shrinking.<br />
|-<br />
| <code>attack2</code><br />
| <code>BANIM_ATTACK2</code><br />
| (Medistation), (telenode), barricade, (egg)<br />
| Unshrink animation for the barricade, it falls back on <code>BANIM_ATTACK1</code>.<br />
|-<br />
| <code>spawn</code><br />
| <code>BANIM_SPAWN1</code><br />
| Telenode, Egg<br />
| Animation for when when a player spawns from a spawn buildable like an egg or a telenode.<br />
|-<br />
| <code>spawn2</code><br />
| <code>BANIM_SPAWN2</code><br />
| Currently unused.<br />
| <br />
|-<br />
| <code>pain</code><br />
| <code>BANIM_PAIN1</code><br />
| All<br />
| Default pain animation, used when a buildable is damaged.<br />
|-<br />
| <code>pain2</code><br />
| <code>BANIM_PAIN2</code><br />
| (Medistation), barricade, (egg)<br />
| Pain animation used for the barricade when it is damaged and shrunk. It falls back on <code>BANIM_PAIN1</code>.<br />
|-<br />
| <code>destroy</code><br />
| <code>BANIM_DESTROY1</code><br />
| All<br />
| Played when a buildable is killed or destroyed.<br />
|-<br />
| <code>destroy_unpowered</code><br />
| <code>BANIM_DESTROY_UNPOWERED</code><br />
| All which can be unpowered<br />
| Played when an unpowered buildable is killed or destroyed. It falls back on <code>BANIM_DESTROY1</code>.<br />
|-<br />
| <code>destroyed</code><br />
| <code>BANIM_DESTROYED</code><br />
| All<br />
| The animation played between the buildable's destroy animation and the blow up. At this point the is in a dead state. The barricade reuses the shrunk state animation.<br />
|-<br />
|}<br />
<br />
''Note: buildables whose names are in (parentheses) may not actually use the animation but the animations are loaded. Maybe one day it is possible those animations well be used.''<br />
<br />
===Player models===<br />
<br />
====MD5====<br />
<br />
As with weapon animations, each animation filename must have the <code>.md5anim</code> extension.<br />
<br />
Items in italics need to be double-checked.<br />
<br />
Note that at present, some of these strings do not match the constants.<br />
<br />
{| class="wikitable"<br />
|-<br />
! colspan="3" | Animation name<br />
! colspan="2" | Engine constant<br />
! rowspan="2" | Humans?<br />
! rowspan="2" | Aliens?<br />
! rowspan="2" | Description<br />
|-<br />
! Assumed Correct<br />
! Actual (Humans)<br />
! Actual (Aliens)<br />
! Humans<br />
! Aliens<br />
|-<br />
| <code>attack</code> <!-- checked --><br />
| <code>attack</code><br />
| <code>attack</code><br />
| <code>TORSO_ATTACK</code><br />
| <code>NSPA_ATTACK1</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>attack2</code> <!-- checked --><br />
| <code>idle</code><br />
| <code>attack2</code><br />
| <code>TORSO_ATTACK2</code><br />
| <code>NSPA_ATTACK2</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>attack3</code> <!-- checked --><br />
| <code>attack3</code><br />
| <code>attack3</code><br />
| N/A<br />
| <code>NSPA_ATTACK3</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>charge</code> <!-- checked --><br />
| N/A<br />
| <code>charge</code><br />
| N/A<br />
| <code>NSPA_CHARGE</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| Tyrant charge animation<br />
|-<br />
| <code>crouch</code> <!-- checked --><br />
| <code>crouch</code><br />
| N/A<br />
| <code>LEGS_IDLECR</code><br />
| N/A<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| <br />
|-<br />
| <code>crouch_backward</code> <!-- checked --><br />
| <code>crouch_forward</code><br />
| N/A<br />
| <code>LEGS_BACKCR</code><br />
| N/A<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| <br />
|-<br />
| <code>crouch_forward</code> <!-- checked --><br />
| <code>crouch_forward</code><br />
| N/A<br />
| <code>LEGS_WALKCR</code><br />
| N/A<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| <br />
|-<br />
| <code>die</code> <!-- checked --><br />
| <code>die</code><br />
| <code>die</code><br />
| <code>BOTH_DEATH1</code><br />
| <code>NSPA_DEATH1</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>gesture</code> <!-- checked --><br />
| <code>gesture</code><br />
| <code>gesture</code><br />
| <code>TORSO_GESTURE</code><br />
| <code>NSPA_GESTURE</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>idle</code> <!-- checked --><br />
| <code>idle</code><br />
| N/A<br />
| <code>LEGS_IDLE</code><br />
| N/A<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| Human idle animation. It seems as though NSPA_STAND ("stand") is used as the idle animation for aliens.<br />
|-<br />
| <code>jump</code> <!-- checked --><br />
| <code>jump</code><br />
| <code>jump</code><br />
| <code>LEGS_JUMP</code><br />
| <code>NSPA_JUMP</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>jump_back</code> <!-- checked --><br />
| <code>jump</code><br />
| <code>jump_back</code><br />
| <code>LEGS_JUMPB</code><br />
| <code>NSPA_JUMPBACK</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| Evidently although humans have a separate constant for jumping backwards, they use the same animation file as for jumping forwards.<br />
|-<br />
| <code>land</code> <!-- checked --><br />
| <code>land</code><br />
| <code>land</code><br />
| <code>LEGS_LAND</code><br />
| <code>NSPA_LAND</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>land_back</code> <!-- checked --><br />
| <code>land</code><br />
| <code>land_back</code><br />
| <code>LEGS_LANDB</code><br />
| <code>NSPA_LANDBACK</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| Like with jumping, humans evidently use the same animation for both LEGS_LAND and LEGS_LANDB.<br />
|-<br />
| <code>pain1</code> <!-- checked --><br />
| N/A<br />
| <code>pain1</code><br />
| N/A<br />
| <code>NSPA_PAIN1</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| Humans evidently do not have a pain animation?<br />
|-<br />
| <code>pain2</code> <!-- checked --><br />
| N/A<br />
| <code>pain2</code><br />
| N/A<br />
| <code>NSPA_PAIN2</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>run</code> <!-- checked --><br />
| <code>run</code><br />
| <code>run</code><br />
| <code>LEGS_RUN</code><br />
| <code>NSPA_RUN</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>run_backwards</code> <!-- checked --><br />
| <code>run</code> (?)<br />
| <code>run_backwards</code><br />
| <code>LEGS_BACK</code><br />
| <code>NSPA_RUNBACK</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| Note: Not sure if this is correct for the humans<br />
|-<br />
| <code>run_left</code> <!-- checked --><br />
| N/A<br />
| <code>run_left</code><br />
| N/A<br />
| <code>NSPA_RUNLEFT</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>run_right</code> <!-- checked --><br />
| N/A<br />
| <code>run_right</code><br />
| N/A<br />
| <code>NSPA_RUNLEFT</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>stand</code> <!-- checked --><br />
| <code>?</code><br />
| <code>stand</code><br />
| <code></code><br />
| <code>NSPA_STAND</code><br />
| ''No''<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| TORSO_STAND is in the code, but I didn't see an animation loaded for the humans<br />
|-<br />
| <code>stand2</code> <!-- checked --><br />
| <code>idle</code><br />
| <code></code><br />
| <code>TORSO_STAND2</code><br />
| <code></code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| ''No''<br />
| <br />
|-<br />
| <code>step</code><br />
| <code>step</code><br />
| <code></code><br />
| <code>LEGS_TURN</code>?<br />
| <code></code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| ''No''<br />
| <br />
|-<br />
| <code>swim</code> <!-- checked --><br />
| <code>swim</code><br />
| <code>swim</code><br />
| <code>LEGS_SWIM</code><br />
| <code>NSPA_SWIM</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>turn</code><br />
| <code>step</code><br />
| <code></code><br />
| <code>LEGS_TURN</code><br />
| <code></code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>walk</code> <!-- checked --><br />
| <code>walk</code><br />
| <code>walk</code><br />
| <code>LEGS_WALK</code><br />
| <code>NSPA_WALK</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>walk_backwards</code> <!-- checked --><br />
| <code>walk</code><br />
| <code>walk_backwards</code><br />
| <code>LEGS_BACKWALK</code><br />
| <code>NSPA_WALKBACK</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>walk_left</code> <!-- checked --><br />
| N/A<br />
| <code>walk_left</code><br />
| N/A<br />
| <code>NSPA_WALKLEFT</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>walk_right</code> <!-- checked --><br />
| N/A<br />
| <code>walk_right</code><br />
| N/A<br />
| <code>NSPA_WALKLEFT</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
|}<br />
<br />
<!-- other animation constants seen that aren't in the table:<br />
LEGS_WALKCR_BACK<br />
--><br />
<br />
==Writing shaders==<br />
<br />
{{Note|See the [[Formats/Material]] page for details.<br />
<br />
As was implied before, the texture(s) used by a model are not stored in the md5mesh or md5anim files; they are specified by a separate shader file that is placed in the <code>scripts/</code> directory.<br />
<br />
<pre><br />
models/buildables/trapper<br />
{<br />
diffuseMap models/buildables/trapper/trapper.tga<br />
normalMap models/buildables/trapper/trapper_n.tga<br />
specularMap models/buildables/trapper/trapper_s.tga<br />
}<br />
</pre><br />
<br />
Do take note that <code>models/buildables/trapper</code> is NOT a path, it is merely a string that matches the shader specified by the <code>.md5mesh</code> file.<br />
<br />
==Configuring the model==<br />
<br />
Aside from the textures used by a model, the scale, vertical position, and bounding box size of the model must be specified. This is done with a configuration file. These were formerly placed in <code>overrides/buildables/</code> (for buildables) or <code>overrides/classes/</code> (for player models), but are now placed in <code>configs/</code>.<br />
<br />
===Player models===<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
Reading the configuration file for player models is handled by the <code>CG_ParseCharacterFile()</code> function in {{SourceFile|src/gamelogic/cgame/cg_players.c}}</code>.<br />
}}<br />
<br />
The configuration file may use the following keywords:<br />
<br />
''Note: this list is incomplete''<br />
<br />
<ul><br />
<li><code>headoffset <var>x</var> <var>y</var> <var>z</var></code></li><br />
<li><code>sex <var>gender</var></code><br />
<p><br />
Sets the gender of the model. Options are <code>f</code> for female or <code>n</code> for neuter. Any other character is interpreted as male.<br />
</p><br />
</li><br />
<li><code>fixedlegs</code></li><br />
<li><code>fixedtorso</code></li><br />
<li><code>firstTorsoBoneName</code></li><br />
<li><code>footsteps</code><br />
<p><br />
* <code>default</code><br />
* <code>flesh</code><br />
* <code>metal</code><br />
* <code>splash</code><br />
* <code>none</code><br />
</p><br />
</li><br />
<li><code>lastTorsoBoneName</code></li><br />
<li><code>torsoControlBoneName</code></li><br />
<li><code>neckControlBoneName</code></li><br />
<li><code>modelScale</code></li><br />
</ul><br />
<br />
As an example:<br />
<br />
<pre><br />
name "Basilisk"<br />
model level1<br />
modelScale 1.0<br />
skin default<br />
shadowScale 1.0<br />
hud alien_general_hud<br />
mins -18 -18 -18<br />
maxs 18 18 18<br />
crouchMaxs 18 18 18<br />
deadMins -18 -18 -4<br />
deadMaxs 18 18 4<br />
zOffset 0.0<br />
</pre><br />
<br />
===Weapons===<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
Weapon configuration files are parsed with <code>CG_ParseWeaponConfig()</code> function in {{SourceFile|src/gamelogic/cgame/cg_weapons.c}}</code>.<br />
}}<br />
<br />
The configuration file may use the following keywords:<br />
<br />
<ul><br />
<li><code>weaponModel <var>path</var></code></li><br />
<li><code>weaponModel3rdPerson <var>path</var></code></li><br />
<li><code>idleSound <var>path</var></code></li><br />
<li><code>icon <var>path</var></code> &mdash; The relative path to the icon that is displayed in the HUD for that weapon.</li><br />
<li><code>crosshair <var>path</var></code></li><br />
<li><code>disableIn3rdPerson</code></li><br />
</ul><br />
<br />
After those keywords, one of the following keywords must be used, followed by an opening curly brace (<code>{</code>), more commands, and a final closing curly brace (<code>}</code>):<br />
<br />
* <code>primary</code> (engine constant: <code>WPM_PRIMARY</code>)<br />
* <code>secondary</code> (engine constant: <code>WPM_SECONDARY</code>)<br />
* <code>tertiary</code> (engine constant: <code>WPM_TERTIARY</code>)<br />
<br />
The configuration between the curly braces is handled by <code>CG_ParseWeaponModeSection</code>, in the same file. It accepts the following keywords:<br />
<br />
<ul><br />
<li><code>missileModel <var>path</var></code></li><br />
<li><code>missileSprite <var>size</var> <var>shader</var></code><br />
* <var>size</var> &mdash; The size of the missile sprite. If this value is negative, it is made zero.<br />
* <var>shader</var> &mdash; The shader describing the missile sprite.<br />
</li><br />
<li><code>missileRotates</code></li><br />
<li><code>missileAnimates <var>startFrame</var> <var>numFrames</var> <var>frameRate</var> <var>looping</var></code></li><br />
<li><code>missileParticleSystem <var>name</var></code></li><br />
<li><code>missileTrailSystem <var>name</var></code></li><br />
<li><code>muzzleParticleSystem <var>name</var></code></li><br />
<li><code>impactParticleSystem <var>name</var></code></li><br />
<li><code>impactMark <var>size</var> <var>shader</var></code></li><br />
<li><code>impactSound <var>index</var> <var>path</var></code><br />
* <var>index</var> &mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.<br />
* <var>path</var> &mdash; The file path of the sound file to use.<br />
</li><br />
<li><code>impactFleshSound <var>index</var> <var>path</var></code><br />
* <var>index</var> &mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.<br />
* <var>path</var> &mdash; The file path of the sound file to use.<br />
</li><br />
<li><code>alwaysImpact</code></li><br />
<li><code>flashDLightColor <var>red</var> <var>green</var> <var>blue</var></code><br />
<p>Specifies the color of the muzzle flash <!-- didn't actually double check this --> dynamic lighting.</p><br />
* <var>red</var> &mdash; The red color component as a floating point number in the range [0,1].<br />
* <var>green</var> &mdash; The green color component as a floating point number in the range [0,1].<br />
* <var>blue</var> &mdash; The blue color component as a floating point number in the range [0,1].<br />
</li><br />
<li><code>continuousFlash</code></li><br />
<li><code>missileDlightColor <var>red</var> <var>green</var> <var>blue</var></code><br />
* <var>red</var> &mdash; The red color component as a floating point number in the range [0,1].<br />
* <var>green</var> &mdash; The green color component as a floating point number in the range [0,1].<br />
* <var>blue</var> &mdash; The blue color component as a floating point number in the range [0,1].<br />
</li><br />
<li><code>missileDlight <var>size</var></code><br />
* <var>size</var> &mdash; If this value is negative, it is made zero.<br />
</li><br />
<li><code>firingSound <var>path</var></code></li><br />
<li><code>missileSound <var>path</var></code></li><br />
<li><code>flashSound <var>index</var> <var>path</var></code><br />
* <var>index</var> &mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.<br />
* <var>path</var> &mdash; The file path of the sound file to use.<br />
</li><br />
</ul><br />
<br />
As an example, this is the configuration for the chaingun (<code>models/weapons/chaingun/weapon.cfg</code>):<br />
<br />
<pre><br />
weaponModel models/weapons/chaingun/chaingun.md3<br />
<br />
icon icons/iconw_chaingun<br />
crosshair 48 gfx/2d/crosshair-chaingun_s<br />
<br />
primary<br />
{<br />
flashDlightColor 1.0 1.0 0.0<br />
flashSound 0 models/weapons/chaingun/flash0.wav<br />
flashSound 1 models/weapons/chaingun/flash1.wav<br />
flashSound 2 models/weapons/chaingun/flash2.wav<br />
flashSound 3 models/weapons/chaingun/flash3.wav<br />
<br />
impactMark 8 gfx/marks/bullet_mrk<br />
<br />
impactSound 0 models/weapons/chaingun/impact0.wav<br />
<br />
impactParticleSystem models/weapons/rifle/impactPS<br />
muzzleParticleSystem models/weapons/chaingun/muzzlePS<br />
}<br />
</pre><br />
<br />
===Buildables===<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
Reading the configuration file for buildables is handled by the <code>BG_ParseBuildableFile()</code> function in {{SourceFile|src/gamelogic/game/bg_misc.c}}</code>.<br />
}}<br />
<br />
The configuration file may use the following keywords:<br />
<br />
<ul><br />
<li><code>model <var>index</var> <var>path</var></code><br />
* <var>index</var> Some models may actually have several different model files (not sure why); this argument specifies which. Clamped to the range [0,3] (which should actually be [0, MAX_BUILDABLE_MODELS]), which means that you may use as many as four models per buildable. This is only used by the machine gun turret, which is composed of different parts.<br />
* <var>path</var> The file path where the model file is located. Note that for MD5 models, an extension of <code>.md3</code> is still to be used; it will automatically be changed by the engine.<br />
</li><br />
<li><code>modelScale <var>scale</var></code><br />
<p>Scales the model linearly.</p><br />
</li><br />
<li><code>mins <var>minX</var> <var>minY</var> <var>minZ</var></code><br />
<p>The coordinates passed to this and <code>maxs</code> define the bounding box for the model that is used for collision. The bounding box is always aligned to the global coordinate axes regardless of the orientation of the model, which is something to keep in mind when defining these values. You will likely have to debug these values by enabling drawing the bounding boxes. Load a map in developer mode with <code>\devmap</code> and set <code>\cg_drawBBOX</code> to 1. The three arguments combined form the coordinate of one corner of the bounding box, and <code>maxs</code> the opposite corner.</p><br />
</li><br />
<li><code>maxs <var>minX</var> <var>minY</var> <var>minZ</var></code><br />
<p>Defines the opposite corner of the AABB. (See above.)</p><br />
</li><br />
<li><code>zOffset <var>offset</var></code><br />
<p>Sets the vertical offset of the model; in other words, how far off the ground it is.</p><br />
* <var>offset</var> The offset as a floating point (decimal) value.<br />
</li><br />
</ul><br />
<br />
As an example:<br />
<br />
<pre><br />
model 0 models/buildables/trapper/trapper.md3<br />
modelScale 0.8<br />
mins -15 -15 -15<br />
maxs 15 15 15<br />
zOffset -15<br />
</pre><br />
<br />
Note that at present, you do not have to change the filename extension of the model to match what it actually is; that is, if the model is actually an md5, you may leave the extension as ".md3" and not ".md5mesh" or whatever.<br />
<br />
==Directory overview==<br />
<br />
This section provides an overview of the subset of the directory structure used by models; directories used for other purposes have been omitted.<br />
<br />
* <code>armor/</code> Location of configurations for the three armor types (i.e., light, helmet, and battlesuit). You should not have to edit these.<br />
* <code>configs/</code> Location of configuration files for various models.<br />
** <code>buildables/</code><br />
* <code>scripts/</code><br />
* <code>gfx/</code> Location of various 2d effect textures, such as those used for weapons.<br />
** ''Subdirectories omitted for brevity''<br />
* <code>models/</code><br />
** <code>ammo/</code><br />
*** <code>tesla/</code> Contains a single image used for the tesla sparks. Not sure why it's located here.<br />
** <code>buildables/</code><br />
*** <code>acid_tube/</code> Acid tube<br />
*** <code>arm/</code> Armory<br />
*** <code>barricade/</code> Barricade<br />
*** <code>booster/</code> Booster<br />
*** <code>dcc/</code> Defense Computer<br />
*** <code>eggpod/</code> Egg<br />
*** <code>hive/</code> Hive<br />
*** <code>hovel/</code> Hovel<br />
*** <code>medistat/</code> Medistation<br />
*** <code>mgturret/</code> Machinegun Turret<br />
*** <code>overmind/</code> Overmind<br />
*** <code>reactor/</code> Reactor<br />
*** <code>telenode/</code> Telenode<br />
*** <code>tesla/</code> Tesla generator<br />
*** <code>trapper/</code> Trapper<br />
** <code>players/</code><br />
*** <code>builder/</code> Human builder model.<br />
*** <code>human_base/</code> Unarmored human model. Also includes the jetpack and battery pack.<br />
*** <code>human_bsuit/</code> Battlesuit model.<br />
*** <code>level0/</code> Dretch.<br />
*** <code>level1/</code> Basilisk and advanced basilisk. (The advanced basilisk uses the same model as the regular dragoon, but a different texture.)<br />
*** <code>level2/</code> Marauder and advanced marauder. (Same as basilisk with regard to advanced model.)<br />
*** <code>level3/</code> Dragoon and advanced dragoon. (Same as basilisk with regard to advanced model.)<br />
*** <code>level4/</code> Tyrant.<br />
** <code>weapons/</code><br />
*** <code>abuild/</code> As there is no weapon model for the granger, the only thing in this directory is a config to hide the (nonexistant) weapon model in third person (a hack, I guess).<br />
*** <code>abuildupg/</code> Advanced granger weapon. Same as above, except the config file specifies sounds for the attack sounds (which are also located in this directory).<br />
*** <code>ackit/</code> Advanced construction kit.<br />
*** <code>blaster/</code> Blaster.<br />
*** <code>chaingun/</code> Chaingun.<br />
*** <code>ckit/</code> Construction kit.<br />
*** <code>flamer/</code> Flamethrower.<br />
*** <code>grenade/</code> Grenade.<br />
*** <code>hive/</code> Sprites, configuration file, and sound file for the hive.<br />
*** <code>lcannon/</code> Lucifer cannon.<br />
*** <code>level0/</code> Dretch configuration and attack sound file.<br />
*** <code>level1/</code> Basilisk configuration and attack sound files (hit and miss).<br />
*** <code>level1upg/</code> Advanced Basilisk configuration and added gas attack sound file.<br />
*** <code>level2/</code> Marauder configuration and attack sound files (hit and miss).<br />
*** <code>level2upg/</code> Advanced Marauder configuration and added electric attack sound file.<br />
*** <code>level3/</code> Dragoon configuration and attack sound files (hit, miss, and pounce).<br />
*** <code>level3upg/</code> Advanced Dragoon configuration and added barb sound files and model.<br />
*** <code>level4/</code> Tyrant configuration and attack sound files (hit and miss).<br />
*** <code>lgun/</code> Lasgun<br />
*** <code>lockblob/</code><br />
*** <code>mdriver/</code> Mass Driver<br />
*** <code>mgturret/</code> Machinegun turret '''''FIXME: why does this show up twice?'''''<br />
*** <code>prifle/</code> Plasma rifle<br />
*** <code>psaw/</code> Painsaw<br />
*** <code>rifle/</code> Rifle<br />
*** <code>shells/</code><br />
*** <code>shotgun/</code> Shotgun<br />
*** <code>teslagen/</code> Tesla generator '''''FIXME: why does this show up twice?'''''<br />
* <code>overrides/</code> Depreciated directory for model configuration files. Use <code>configs/</code> instead.<br />
** <code>buildables/</code> Depreceated location for buildable model configs.<br />
** <code>classes/</code> Depreceated location for character model configs.<br />
* <code>scripts/</code> Location for shaders.<br />
<br />
==Getting the model in game==<br />
<br />
There are two approaches to test your model in-game. The model and related files may be in actual folders, or the engine can load them from a <code>.pk3</code> (package) file, which is really just a zip-compressed archive with the extension changed. The process for creating these archives is discussed on the [[packaging game data]] page.<br />
<br />
==Testing the model==<br />
<br />
Once you have the model exported, the shader and configuration written, and everything packaged into a .pk3 file and in place, you are ready to test.<br />
<br />
===Testing externally===<br />
<br />
Rather than testing the exported model in-game, you may also test the model with a stand-alone MD5 viewer. At present, there is a viewer for Windows available [http://www.katsbits.com/files/md5/modelviewer_0.93a.zip here].<br />
<br />
===Testing in game===<br />
<br />
See the [[testing]] page.<br />
<br />
==Troubleshooting==<br />
<br />
===Old exporter===<br />
<br />
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''<br />
<br />
====Error while exporting from Blender====<br />
<br />
{| class="wikitable"<br />
|-<br />
| [[Image:Md5_export_error_no_armature.png]]<br />
| style="vertical-align:top;" | This error displays when the selected object does not have an armature modifier. Any object exported as an md5 needs bones, even if it is static. If you are unsure of how to create a static object with md5, just add an armature, set the playback start and end frame to 1, and add a location or rotation keyframe at frame 1.<br />
|-<br />
| [[Image:Md5_export_error_no_animation.png]]<br />
| style="vertical-align:top;" | This error displays when there are no keyframes. Follow the abov instructions for exporting a static object with md5.<br />
|-<br />
| [[Image:Md5_export_error_no_material.png]]<br />
| style="vertical-align:top;" | This error displays when the object does not have a material applied to it. This is required by the script, even though it really does not affect the exported result.<br />
|-<br />
|}<br />
<br />
===Appearance problems in-game===<br />
<br />
====All or part of the mesh appears to be sucked to the center====<br />
<br />
''Please note that as of 2012-02-27, the MD5 exporter does not work properly in several more recent versions of Blender. Use Blender 2.59 until this is fixed. See [http://www.katsbits.com/smforum/index.php?topic=167.msg2135#msg2135 the MD5 exporter thread] for more information.''<br />
<br />
This can happen for a number of reasons:<br />
<ul><br />
<li>There are vertices without weights.<br />
<p>''Solution'': apply weights to vertices that do not have them. If those verts are not to be animated, weight them to a bone that does not move.</p><br />
</li><br />
<li>You are using Blender 2.61 and you have bones that have animated positions.<br />
<p>''Solution'': Use an earlier version of blender until this is fixed in the exporter.</p><br />
</li><br />
<li>You are using Blender 2.62 and you have bones that are not located at the origin and do not have a parent or have animated positions.<br />
<p>''Solution'': Again, use an earlier version of blender until this is fixed in the exporter.</p><br />
</li><br />
</ul><br />
<br />
==="R_LoadMD5: vertex %i requires more than %i weights on surface (%i) in model '%s'"===<br />
<br />
This error is displayed in the console in game when a vertex belongs to too many groups.<br />
<br />
You can use this script to check your model for this before exporting:<br />
<br />
<pre><br />
# Copyright 2012 Nicholas De Cicco. <velociostrich@gmail.com><br />
#<br />
# Licensed under the Apache License, Version 2.0 (the "License");<br />
# you may not use this file except in compliance with the License.<br />
# You may obtain a copy of the License at<br />
#<br />
# http://www.apache.org/licenses/LICENSE-2.0<br />
#<br />
# Unless required by applicable law or agreed to in writing, software<br />
# distributed under the License is distributed on an "AS IS" BASIS,<br />
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br />
# See the License for the specific language governing permissions and<br />
# limitations under the License.<br />
<br />
import bpy, math<br />
from bpy.props import *<br />
<br />
MAX_GROUPS_PER_VERT = 4<br />
<br />
# Switch to object mode for vertex selection to work<br />
bpy.ops.object.mode_set(mode='OBJECT')<br />
<br />
for obj in bpy.context.selected_objects:<br />
# Check to see that the object is a mesh.<br />
if obj.type != 'MESH':<br />
continue<br />
<br />
# Select verts that belong to too many groups<br />
for vertex in obj.data.vertices:<br />
if len(vertex.groups) > MAX_GROUPS_PER_VERT:<br />
vertex.select = True<br />
else:<br />
vertex.select = False<br />
<br />
# Switch back to edit mode so the user can see any selected verts<br />
bpy.ops.object.mode_set(mode='EDIT')<br />
</pre><br />
<br />
====Using the Script====<br />
<br />
# Select the mesh (or meshes) that you would like to check.<br />
# Create a new text editor window and text data block.<br />
# Copy and paste the script into the text editor.<br />
# Click "Run Script".<br />
<br />
Once the script has ran, the 3d view will switch to edit mode and any offending vertices will be selected. A handy tip: clicking an individual vertex will reveal which groups it is a member of in the properties shelf.<br />
<br />
[[Image:Properties_shelf_vertex_groups.png|frame|center|The vertex group section of the properties shelf]]<br />
<br />
==Resources==<br />
<br />
* [http://www.modwiki.net/wiki/MD5_%28file_format%29 MD5 file format documentation]<br />
* [http://www.katsbits.com/tools/# Tools for MD5 and other file formats]<br />
* [http://download.blender.org/release/ Older versions of Blender]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Tutorials/Exporting_models&diff=8603Tutorials/Exporting models2024-03-08T23:41:30Z<p>Illwieckz: </p>
<hr />
<div>[[Category:Tutorials]]<br />
[[Category:Modeling]]<br />
==Overview==<br />
{{OutOfDate}}<br />
<br />
{{Note|content=This guide was written for the 2.6 series of Blender. Most of this guide should apply for other versions of Blender, but this is not guaranteed.}}<br />
<br />
{{TODO|Add tutorial for exporting IQM models.}}<br />
<br />
Getting a finished model out of Blender and into the game is a relatively involved process with a number of possible pitfalls. This guide aims to describe the process in as much detail as possible to assist users who have not done it before, or those who have exported models for other games and would like to know what (if anything) is different.<br />
<br />
If you would like to export from Maya, you may find the official [http://www.iddevnet.com/quake4/Animations id Software documentation] useful.<br />
<br />
At present, this guide primarily describes the process for exporting models to the MD5 format. While the engine supports both MD3 and MD5, the latter is preferred. The reasons for this are discussed [[#What_is_MD5?|below]].<br />
<br />
Before a model may be exported and used in-game, it must be adequately prepared:<br />
<br />
{{TODO|Determine which of these are only applicable to the old exporter.}}<br />
<br />
* [[#Limitations_of_the_engine|Engine limitations]] must be adhered to.<br />
* The model must have a texture applied to it. This texture is not automagically applied to the model after it is exported and loaded in-game, this is only necessary to satisfy the MD5 exporter; that is, the game cannot read from the exported model the filename of the texture to use.<br />
* The model must be a mesh and must have an armature modifier applied to it.<br />
* The armature's bones all must have at least one keyframe.<br />
<br />
The actual process of exporting a model is straightforward:<br />
<br />
# After ensuring that the above requirements are met, the mesh itself is exported.<br />
# If using the old exporter, each animation is exported separately. The new exporter adds support for [[#Batch_export_with_the_new_exporter|batch export]] of animations.<br />
# A [[#Configuring_the_model|configuration file]] specifying data such as the bounding box size and vertical offset is written. This may include information that is specific to the particular type of model (i.e., buildable or player model).<br />
# A [[#Writing_shaders|shader]] is written that determines how the model is textured in-game.<br />
# Finally, after everything is properly named and configured, the files are [[Packaging_game_data|packaged]] and placed in the correct game data folder to allow it to be loaded in-game.<br />
<br />
==What is MD5?==<br />
<br />
MD5 is the model format created by id Software for Doom 3 which is also used by Unvanquished. It is an improvement over its predecessor, MD3, in that it uses bones to pose the model.<br />
<br />
{{Note|header=What about MD3? IQM? PSK? ASE? Obj?|content=<br />
{{SupportedModelFormats}}<br />
}}<br />
<br />
===Advantages over MD3===<br />
<br />
* Unlike MD3, MD5 is bone-based, meaning that instead of storing an entire mesh for each frame of animation, there is only one mesh file. This single mesh file is deformed using a vertex shader.<br />
* Because there is only one mesh, only one VBO (vertex buffer object) needs to be created for each MD5 model. The deformation is performed entirely on the GPU, so it is (theoretically) faster than MD3, and uses less memory.<br />
* Because the format is in plain-text, it can be easily verified for sanity (i.e., to ensure that it was exported correctly and not corrupted in some way).<br />
<br />
===Disadvantages over MD3===<br />
<br />
* Some forms of motion are more difficult to achieve; certain animation techniques (such as lattices) are not usable.<br />
* Because the format is in plain-text, it takes up more space than it needs to, though this is negligible and a MD5 model will typically be smaller than the same model in MD3 format as less data is used per each frame of animation with MD5 as compared to MD3.<br />
<br />
===Limitations of the engine===<br />
<br />
The engine places certain limitations on the fidelity of your models when using the MD5 format. These are:<br />
<br />
* There may not be more than 128 bones. (Note: this was increased from 64.)<br />
* There may not be more than 100,000 vertices.<br />
* There may not be more than 10,000 triangles.<br />
* No vertex may belong to more than four vertex groups (i.e., one vertex may not be controlled by more than four bones). An error message will be displayed in-game if this requirement is not met. A [[#.22R_LoadMD5:_vertex_.25i_requires_more_than_.25i_weights_on_surface_.28.25i.29_in_model_.27.25s.27.22|script]] may be used before exporting to check that this limitation is not exceeded.<br />
<br />
{{Note|header=Developer Note|content=The limitation on vertex groups is a hard-coded limitation of the vertex shader ({{SourceFile|main/glsl/vertexSkinning_vp.glsl}}) that deforms the base mesh.}}<br />
<br />
===Limitations of the format===<br />
<br />
The MD5 format only supports bones. You may not<br />
<br />
* Use lattices or any other means of deformation.<br />
* Scale bones.<br />
* Use keyframes on anything other than bone poses. You may, however, set keyframes on bone constraint influences or anything else that would affect a bone's position or rotation.<br />
<br />
Note that you do not have to have a parent/child relationship between bones. In fact, in some instances, avoiding a parent/child relationship is necessary to achieve certain effects, such as moving bones around.<br />
<br />
==Acquiring and installing the exporter==<br />
<br />
===MD3===<br />
<br />
If for some reason you are interested in the MD3 exporter, it is available from [http://sourceforge.net/projects/md3exporter/ SourceForge].<br />
<br />
===MD5===<br />
<br />
====Old exporter====<br />
<br />
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''<br />
<br />
You can download the exporter from [http://www.katsbits.com/smforum/index.php?topic=178.0 this thread on katsbits.com]. Installation instructions are in the thread.<br />
<br />
====New exporter====<br />
<br />
As of 15 May 2012, there is another [http://sourceforge.net/projects/blenderbitsbobs/ MD5 exporter available for Blender 2.63+] ([http://www.katsbits.com/smforum/index.php?topic=404.0 discussion on katsbits]). This has been found to be superior to the old exporter. Note that portions of this guide have not yet been updated to reflect the differences in the new exporter.<br />
<br />
dsalt had patched it (see [http://sourceforge.net/u/dsalt/blenderbitsbobs/ repository]) to allow each mesh objects to have a custom <code>q3tex</code> property to store the shader name. In the <code>.md5mesh</code> file, this will fill the <code>shader</code> for the corresponding mesh.<br />
<br />
==Exporting the mesh==<br />
<br />
===MD5===<br />
<br />
Note that for buildables and weapons, the filename of the exported mesh is dictated by the corresponding [[#Configuring_the_model|configuration file]]. All player models, however, are hardcoded to look for <code>body.md5mesh</code>.<br />
<br />
====Old exporter====<br />
<br />
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''<br />
<br />
# Select the armature and the mesh. The order in which you select the two does not matter.<br />
# Click File &rarr; Export &rarr; Quake&nbsp;Model&nbsp;5&nbsp;(.md5)<br />
# On the left shelf that appears in the file prompt, change the Exports combo box to "Mesh only." Don't worry about the scale or name fields.<br />
# Click "Export MD5".<br />
<br />
Once this has been completed, you must manually edit the mesh file (the one with a <code>.md5mesh</code> extension) to specify the correct shader to use.<br />
<br />
<pre><br />
--- snip ---<br />
mesh {<br />
shader "models/buildables/medistat"<br />
<br />
numverts 4<br />
vert 0 ( 1.000000 0.000000 ) 0 1<br />
vert 1 ( 0.000000 0.000000 ) 1 1<br />
--- snip ---<br />
</pre><br />
<br />
Note that <code>models/buildables/medistat</code> is '''not''' a file path to a shader; it is the name (again, not filename) of the shader to use. That is, a shader with the matching name will be used for this model.<br />
<br />
To avoid having to do this every time you export the mesh, set the name of the material applied to the object in Blender to the same as you edited the md5mesh.<br />
<br />
====New exporter====<br />
<br />
* Select the mesh to export.<br />
* Click File &rarr; Export &rarr; MD5 Mesh (.md5mesh).<br />
* Specify the output filename in the dialog, and click "Export MD5MESH".<br />
<br />
The exported model is not ready to be used in-game just yet; it must be manually edited. Open the exported <code>.md5mesh</code> file in a text editor, and manually delete the top three lines of the file (highlighted in red below):<br />
<br />
<span style="color:#f00;">// Parameters used during export:<br />
// Reorient: True<br />
// Scale: 1.0</span><br />
MD5Version 10<br />
commandline ""<br />
<br />
numJoints 4<br />
numMeshes 1<br />
<br />
joints {<br />
<br />
...<br />
<br />
<i>remainder of file omitted for brevity</i><br />
<br />
Be sure to save the file when you are done. You will also have to do this for each animation file that you export.<br />
<br />
If you do not want to have to do this each time, you can edit the exporter script. Open the <code>export_md5.py</code> script in the <code>io_scene_md5</code> folder where you installed the script, at around line 30, edit this code:<br />
<br />
def record_parameters(correctionMatrix):<br />
return [<br />
"// Parameters used during export:\n",<br />
"// Reorient: {}\n".format(bool(correctionMatrix.to_euler()[2])),<br />
"// Scale: {}\n".format(correctionMatrix.decompose()[2][0])]<br />
<br />
to look like this:<br />
<br />
def record_parameters(correctionMatrix):<br />
return []<br />
<br />
If you are comfortable with applying patches, you may use this:<br />
<br />
<pre><br />
@@ -27,10 +27,7 @@<br />
return pairs<br />
<br />
def record_parameters(correctionMatrix):<br />
- return [<br />
- "// Parameters used during export:\n",<br />
- "// Reorient: {}\n".format(bool(correctionMatrix.to_euler()[2])),<br />
- "// Scale: {}\n".format(correctionMatrix.decompose()[2][0])]<br />
+ return []<br />
<br />
def define_components(obj, bm, bones, correctionMatrix):<br />
scaleFactor = correctionMatrix.to_scale()[0]<br />
</pre><br />
<br />
Note that you will also have to manually set the shader as with the [[#Old_exporter_2|old exporter]].<br />
<br />
==Exporting the animations==<br />
<br />
===MD3===<br />
<br />
Exported MD3 animations require a configuration file that specifies which frames of the animation correspond to which actions the game will display.<br />
<br />
This varies slightly by the type (i.e., weapon or buildable) of model.<br />
<br />
===MD5===<br />
<br />
====Old exporter====<br />
<br />
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''<br />
<br />
The procedure for exporting animations is the same as for exporting the mesh with regard to selecting the mesh and the armature. Before using the exporter, however, you must be certain to set the start and end frames to encompass only the particular animation that you wish to export; each animation must be exported separately, unless the [[#New_exporter|new exporter]] is used, which adds a [[#Batch_export_with_the_new_exporter|batch export]] feature.<br />
<br />
[[Image:Md5_export_timeline.png|frame|center|The timeline view in Blender, which is used to set which frames of animation to export. Here, only one frame of animation (frame 180) is being exported.]]<br />
<br />
At the export file prompt, choose "Anim only." from the "Exports" combo box. Enter as the filename the name of the particular animation that you are exporting; the correct names to use are given below.<br />
<br />
====Batch export with the new exporter====<br />
<br />
The [[Exporting Models#Batch export|new exporter]] now supports batch export of models.<br />
<br />
To make use of this feature, you must set [http://wiki.blender.org/index.php/Doc:2.6/Manual/Animation/Markers frame markers] denoting the start and end of each animation. The name of frame markers denoting the start of an animation must end in "_start" and markers denoting the end of an animation must end in "_end"; for example, frame markers denoting the start and end of a buildable's construct animation would be "construct_start" and "construct_end". Avoid using frame markers with duplicate names, as which one will be used by the exporter is not predictable. Note that frame markers may overlap however you please; this is useful when two animations share a frame or you would like to automate the process of exporting the same few frames of animation as several different animation files (e.g., for testing purposes).<br />
<br />
All operations in modifying frame markers are performed in the [http://wiki.blender.org/index.php/Doc:2.6/Manual/Animation/Timeline timeline]:<br />
* To create a frame marker, move the timeline to the desired frame and press <span class="hotkey">M</span>.<br />
* To select a frame marker, click with the right mouse button.<br />
* To move a frame marker, select it and press <span class="hotkey">G</span>.<br />
* To delete a frame marker, select it and press <span class="hotkey">X</span>.<br />
* To rename a frame marker, select it and press <span class="hotkey">Ctrl</span><span class="hotkey">M</span>.<br />
<br />
The actual exportation process becomes much simpler:<br />
<br />
# Click File &rarr; Export &rarr; MD5 (batch export).<br />
# Specify the filename of the <code>.md5mesh</code> to export.<br />
<br />
==Animation names==<br />
<br />
The filenames for each exported animation must be what the engine expects for it to be able to load them, and vary depending on the format (MD3 or MD5) and type (e.g., buildable, weapon, or player) of model being exported.<br />
<br />
===Weapons===<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
See the <code>CG_ParseWeaponFile()</code> function in {{SourceFile|src/gamelogic/cgame/cg_weapons.c}}</code>.<br />
<br />
Weapon state constants are enumerated in the <code>weaponstate_t</code> enum in {{SourceFile|src/gamelogic/game/bg_public.h}}</code>:<br />
<br />
{{{!}} class{{=}}"wikitable"<br />
{{!}}-<br />
! Constant<br />
! Description<br />
{{!}}-<br />
{{!}} <code>WEAPON_READY</code><br />
{{!}} The weapon at its idle state, ready to fire.<br />
{{!}}-<br />
{{!}} <code>WEAPON_RAISING</code><br />
{{!}} The weapon as it is being raised. It may not be fired in this state.<br />
{{!}}-<br />
{{!}} <code>WEAPON_DROPPING</code><br />
{{!}} The weapon as it is being put away. It may not be fired in this state.<br />
{{!}}-<br />
{{!}} <code>WEAPON_FIRING</code><br />
{{!}} The weapon as it is being fired.<br />
{{!}}-<br />
{{!}} <code>WEAPON_RELOADING</code><br />
{{!}} The weapon as it is being reloaded.<br />
{{!}}-<br />
{{!}} <code>WEAPON_NEEDS_RESET</code><br />
{{!}} The Lucifer Cannon in its overcharged state.<br />
{{!}}-<br />
{{!}}}<br />
<br />
Control of weapon states is done by <code>PM_Weapon()</code>, <code>PM_BeginWeaponChange()</code>, and <code>PM_FinishWeaponChange()</code> in {{SourceFile|src/gamelogic/game/bg_pmove.c}}</code>.<br />
}}<br />
<br />
Note that for both MD3 and MD5 models, there may be separate models for first- and third-person views. Please see "[[#Weapons|Configuring the model]]" for more information regarding how to specify separate models.<br />
<br />
====MD3====<br />
<br />
MD3 does not use separate files for separate animations. Instead, a configuration file specifies what frames of a single MD3 animation are used for each in-game animation.<br />
<br />
{{TODO|Find out how barrel spin is handled by the engine. Is it animated into the barrel model or is it done procedurally?}}<br />
<br />
In addition to the base weapon mesh, there may be as many as three additional MD3 meshes:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Search string<br />
! Tag<br />
! Description<br />
|-<br />
| <code>%s_flash.md3</code><br />
| <code>tag_flash</code><br />
| The weapon's muzzle flash.<br />
|-<br />
| <code>%s_barrel.md3</code><br />
| <code>tag_barrel</code><br />
| The weapon's barrel.<br />
|-<br />
| <code>%s_hand.md3</code><br />
| N/A<br />
| Hands holding the weapon model. Note: this is not used for third person models.<br />
|}<br />
<br />
For non-programmers, the <code>%s</code> string is replaced by the parameter given to the <code>weaponModel</code> or <code>weaponModel3rdPerson</code> keyword.<br />
<br />
The tag <code>tag_weapon</code> is used on the main weapon model to align the third person weapon model to the third person player model.<br />
<br />
====MD5====<br />
<br />
Note that each animation filename must have the <code>.md5anim</code> extension.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Animation name<br />
! Engine constant<br />
! Description<br />
|-<br />
| <code>%s_view_idle</code><br />
| <code>WANIM_IDLE</code><br />
| Animation played when a weapon is not being fired<br />
|-<br />
| <code>%s_view_lower</code><br />
| <code>WANIM_DROP</code><br />
| Animation played when a weapon is being put away<br />
|-<br />
| <code>%s_view_reload</code><br />
| <code>WANIM_RELOAD</code><br />
| Weapon reload animation<br />
|-<br />
| <code>%s_view_raise</code><br />
| <code>WANIM_RAISE</code><br />
| Animation played when a weapon is switched to<br />
|-<br />
| <code>%s_view_fire</code><br />
| <code>WANIM_ATTACK1</code><br />
| Default attack animation<br />
|-<br />
|<br />
| <code>WANIM_ATTACK2</code><br />
| rowspan="7" | Usage of these is highly dependent on the player class. The marauder, for example, may randomly use one of these instead of <code>WANIM_ATTACK1</code>.<sup>1</sup><br />
|-<br />
|<br />
| <code>WANIM_ATTACK3</code><br />
|-<br />
|<br />
| <code>WANIM_ATTACK4</code><br />
|-<br />
|<br />
| <code>WANIM_ATTACK5</code><br />
|-<br />
|<br />
| <code>WANIM_ATTACK6</code><br />
|-<br />
|<br />
| <code>WANIM_ATTACK7</code><br />
|-<br />
|<br />
| <code>WANIM_ATTACK8</code><br />
|-<br />
|}<br />
<br />
# See <code>PM_Weapon()</code>.<br />
<br />
===Buildables===<br />
<br />
====MD3====<br />
<br />
As always, MD3 buildable models require a separate configuration file that specifies which frames of the animation correspond to actions displayed by the game.<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
This file is parsed by <code>CG_ParseBuildableAnimationFile()</code> in {{SourceFile|src/gamelogic/cgame/cg_buildable.c}}.<br />
}}<br />
<br />
Each line in the configuration file corresponds to a single animation. Those animations are in the same order as in the table for MD5 animation names below.<br />
<br />
The order that animations appear in the configuration file must match this order exactly. Animations may not be omitted.<br />
<br />
The syntax is as follows:<br />
<br />
<var>firstFrame</var> <var>numFrames</var> [<var>loopFrames</var> [<var>fps</var>]]<br />
<br />
* <var>firstFrame</var> &mdash; Specifies the initial frame of the animation.<br />
* <var>numFrames</var> &mdash; Specifies the number of frames following the initial frame that comprise that animation.<br />
* <var>loopFrames</var> &mdash; (''Optional'')<br />
* <var>fps</var> &mdash; (''Optional, may only be used if loopFrames is specified'') Specifies the framerate of the animation. If not specified, defaults to 1.<br />
<br />
C and C++ style comments (i.e., <code>//</code> and <code>/* */</code>) are permitted past the last argument.<br />
<br />
====MD5====<br />
<br />
As with weapon animations, each animation filename must have the <code>.md5anim</code> extension.<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
These animation constants are in the <code>buildableAnimNumber_t</code> enumeration in {{SourceFile|src/gamelogic/game/bg_public.c}}. Animations are set using the <code>G_SetIdleBuildableAnim()</code> and <code>G_SetBuildableAnim()</code> functions. All animations are in entity behavior functions in {{SourceFile|src/gamelogic/game/g_buildable.c}}.<br />
<br />
Sounds for animations are enumerated in the <code>cg_buildableSoundNames</code> array in {{SourceFile|src/gamelogic/game/bg_public.h}}.}}<br />
<br />
<!-- Items in this table are in the same order as in enum buildableAnimNumber_t --><br />
{| class="wikitable"<br />
|-<br />
! Animation name<br />
! Engine constant<br />
! Used by<br />
! Description<br />
|-<br />
| <code>idle</code><br />
| <code>BANIM_IDLE1</code><br />
| All<br />
| Idle animation, shown when the buildable is not doing anything (or unpowered in case of human buildables). They are used in place of other animations when they are missing (unless otherwise noted).<br />
|-<br />
| <code>idle2</code><br />
| <code>BANIM_IDLE2</code><br />
| Medistation, telenode, barricade, egg<br />
| ‘Active’ idle state, e.g. while the medistation is currently healing (but not when transitionning from or to healing state).<br />
|-<br />
| <code>powerdown</code><br />
| <code>BANIM_POWERDOWN</code><br />
| Human buildables, (barricade)<br />
| Animation played at the moment a buildable loses power.<br />
|-<br />
| <code>idle_unpowered</code><br />
| <code>BANIM_IDLE_UNPOWERED</code><br />
| Human buildables, (barricade)<br />
| Idle animation played when a buildable is unpowered. ''(Formerly <code>idle3</code>.)''<br />
|-<br />
| <code>construct</code><br />
| <code>BANIM_CONSTRUCT1</code><br />
| All<br />
| Construction animation, shown when the buildable is being built.<br />
|-<br />
| <code>construct2</code><br />
| <code>BANIM_CONSTRUCT2</code><br />
| Medistation, (telenode), (egg)<br />
| Animation played when returning to the primary idle state, for example after a medistation has healed.<br />
|-<br />
| <code>attack</code><br />
| <code>BANIM_ATTACK1</code><br />
| All (except tesla)<br />
| Animation played when a buidlable is attacking or transitioning to its ‘active’ idle state. For the barricade, the animation when it is shrinking.<br />
|-<br />
| <code>attack2</code><br />
| <code>BANIM_ATTACK2</code><br />
| (Medistation), (telenode), barricade, (egg)<br />
| Unshrink animation for the barricade, it falls back on <code>BANIM_ATTACK1</code>.<br />
|-<br />
| <code>spawn</code><br />
| <code>BANIM_SPAWN1</code><br />
| Telenode, Egg<br />
| Animation for when when a player spawns from a spawn buildable like an egg or a telenode.<br />
|-<br />
| <code>spawn2</code><br />
| <code>BANIM_SPAWN2</code><br />
| Currently unused.<br />
| <br />
|-<br />
| <code>pain</code><br />
| <code>BANIM_PAIN1</code><br />
| All<br />
| Default pain animation, used when a buildable is damaged.<br />
|-<br />
| <code>pain2</code><br />
| <code>BANIM_PAIN2</code><br />
| (Medistation), barricade, (egg)<br />
| Pain animation used for the barricade when it is damaged and shrunk. It falls back on <code>BANIM_PAIN1</code>.<br />
|-<br />
| <code>destroy</code><br />
| <code>BANIM_DESTROY1</code><br />
| All<br />
| Played when a buildable is killed or destroyed.<br />
|-<br />
| <code>destroy_unpowered</code><br />
| <code>BANIM_DESTROY_UNPOWERED</code><br />
| All which can be unpowered<br />
| Played when an unpowered buildable is killed or destroyed. It falls back on <code>BANIM_DESTROY1</code>.<br />
|-<br />
| <code>destroyed</code><br />
| <code>BANIM_DESTROYED</code><br />
| All<br />
| The animation played between the buildable's destroy animation and the blow up. At this point the is in a dead state. The barricade reuses the shrunk state animation.<br />
|-<br />
|}<br />
<br />
''Note: buildables whose names are in (parentheses) may not actually use the animation but the animations are loaded. Maybe one day it is possible those animations well be used.''<br />
<br />
===Player models===<br />
<br />
====MD5====<br />
<br />
As with weapon animations, each animation filename must have the <code>.md5anim</code> extension.<br />
<br />
Items in italics need to be double-checked.<br />
<br />
Note that at present, some of these strings do not match the constants.<br />
<br />
{| class="wikitable"<br />
|-<br />
! colspan="3" | Animation name<br />
! colspan="2" | Engine constant<br />
! rowspan="2" | Humans?<br />
! rowspan="2" | Aliens?<br />
! rowspan="2" | Description<br />
|-<br />
! Assumed Correct<br />
! Actual (Humans)<br />
! Actual (Aliens)<br />
! Humans<br />
! Aliens<br />
|-<br />
| <code>attack</code> <!-- checked --><br />
| <code>attack</code><br />
| <code>attack</code><br />
| <code>TORSO_ATTACK</code><br />
| <code>NSPA_ATTACK1</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>attack2</code> <!-- checked --><br />
| <code>idle</code><br />
| <code>attack2</code><br />
| <code>TORSO_ATTACK2</code><br />
| <code>NSPA_ATTACK2</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>attack3</code> <!-- checked --><br />
| <code>attack3</code><br />
| <code>attack3</code><br />
| N/A<br />
| <code>NSPA_ATTACK3</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>charge</code> <!-- checked --><br />
| N/A<br />
| <code>charge</code><br />
| N/A<br />
| <code>NSPA_CHARGE</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| Tyrant charge animation<br />
|-<br />
| <code>crouch</code> <!-- checked --><br />
| <code>crouch</code><br />
| N/A<br />
| <code>LEGS_IDLECR</code><br />
| N/A<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| <br />
|-<br />
| <code>crouch_backward</code> <!-- checked --><br />
| <code>crouch_forward</code><br />
| N/A<br />
| <code>LEGS_BACKCR</code><br />
| N/A<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| <br />
|-<br />
| <code>crouch_forward</code> <!-- checked --><br />
| <code>crouch_forward</code><br />
| N/A<br />
| <code>LEGS_WALKCR</code><br />
| N/A<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| <br />
|-<br />
| <code>die</code> <!-- checked --><br />
| <code>die</code><br />
| <code>die</code><br />
| <code>BOTH_DEATH1</code><br />
| <code>NSPA_DEATH1</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>gesture</code> <!-- checked --><br />
| <code>gesture</code><br />
| <code>gesture</code><br />
| <code>TORSO_GESTURE</code><br />
| <code>NSPA_GESTURE</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>idle</code> <!-- checked --><br />
| <code>idle</code><br />
| N/A<br />
| <code>LEGS_IDLE</code><br />
| N/A<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| Human idle animation. It seems as though NSPA_STAND ("stand") is used as the idle animation for aliens.<br />
|-<br />
| <code>jump</code> <!-- checked --><br />
| <code>jump</code><br />
| <code>jump</code><br />
| <code>LEGS_JUMP</code><br />
| <code>NSPA_JUMP</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>jump_back</code> <!-- checked --><br />
| <code>jump</code><br />
| <code>jump_back</code><br />
| <code>LEGS_JUMPB</code><br />
| <code>NSPA_JUMPBACK</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| Evidently although humans have a separate constant for jumping backwards, they use the same animation file as for jumping forwards.<br />
|-<br />
| <code>land</code> <!-- checked --><br />
| <code>land</code><br />
| <code>land</code><br />
| <code>LEGS_LAND</code><br />
| <code>NSPA_LAND</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>land_back</code> <!-- checked --><br />
| <code>land</code><br />
| <code>land_back</code><br />
| <code>LEGS_LANDB</code><br />
| <code>NSPA_LANDBACK</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| Like with jumping, humans evidently use the same animation for both LEGS_LAND and LEGS_LANDB.<br />
|-<br />
| <code>pain1</code> <!-- checked --><br />
| N/A<br />
| <code>pain1</code><br />
| N/A<br />
| <code>NSPA_PAIN1</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| Humans evidently do not have a pain animation?<br />
|-<br />
| <code>pain2</code> <!-- checked --><br />
| N/A<br />
| <code>pain2</code><br />
| N/A<br />
| <code>NSPA_PAIN2</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>run</code> <!-- checked --><br />
| <code>run</code><br />
| <code>run</code><br />
| <code>LEGS_RUN</code><br />
| <code>NSPA_RUN</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>run_backwards</code> <!-- checked --><br />
| <code>run</code> (?)<br />
| <code>run_backwards</code><br />
| <code>LEGS_BACK</code><br />
| <code>NSPA_RUNBACK</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| Note: Not sure if this is correct for the humans<br />
|-<br />
| <code>run_left</code> <!-- checked --><br />
| N/A<br />
| <code>run_left</code><br />
| N/A<br />
| <code>NSPA_RUNLEFT</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>run_right</code> <!-- checked --><br />
| N/A<br />
| <code>run_right</code><br />
| N/A<br />
| <code>NSPA_RUNLEFT</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>stand</code> <!-- checked --><br />
| <code>?</code><br />
| <code>stand</code><br />
| <code></code><br />
| <code>NSPA_STAND</code><br />
| ''No''<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| TORSO_STAND is in the code, but I didn't see an animation loaded for the humans<br />
|-<br />
| <code>stand2</code> <!-- checked --><br />
| <code>idle</code><br />
| <code></code><br />
| <code>TORSO_STAND2</code><br />
| <code></code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| ''No''<br />
| <br />
|-<br />
| <code>step</code><br />
| <code>step</code><br />
| <code></code><br />
| <code>LEGS_TURN</code>?<br />
| <code></code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| ''No''<br />
| <br />
|-<br />
| <code>swim</code> <!-- checked --><br />
| <code>swim</code><br />
| <code>swim</code><br />
| <code>LEGS_SWIM</code><br />
| <code>NSPA_SWIM</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>turn</code><br />
| <code>step</code><br />
| <code></code><br />
| <code>LEGS_TURN</code><br />
| <code></code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>walk</code> <!-- checked --><br />
| <code>walk</code><br />
| <code>walk</code><br />
| <code>LEGS_WALK</code><br />
| <code>NSPA_WALK</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>walk_backwards</code> <!-- checked --><br />
| <code>walk</code><br />
| <code>walk_backwards</code><br />
| <code>LEGS_BACKWALK</code><br />
| <code>NSPA_WALKBACK</code><br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>walk_left</code> <!-- checked --><br />
| N/A<br />
| <code>walk_left</code><br />
| N/A<br />
| <code>NSPA_WALKLEFT</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
| <code>walk_right</code> <!-- checked --><br />
| N/A<br />
| <code>walk_right</code><br />
| N/A<br />
| <code>NSPA_WALKLEFT</code><br />
| style="background:#ff1a1d;color:#fff;" | No<br />
| style="background:#3c9e2d;color:#fff;" | Yes<br />
| <br />
|-<br />
|}<br />
<br />
<!-- other animation constants seen that aren't in the table:<br />
LEGS_WALKCR_BACK<br />
--><br />
<br />
==Writing shaders==<br />
<br />
As was implied before, the texture(s) used by a model are not stored in the md5mesh or md5anim files; they are specified by a separate shader file that is placed in the <code>scripts/</code> directory.<br />
<br />
Shaders are a very large topic and are outside the scope of this guide. The [http://tremap.xtr3m.net/__Games/Xreal/Manual_Shader_1/ShaderManual.htm XReal shader guide] explains shaders in detail. However, the following shader should do for most purposes:<br />
<br />
<pre><br />
models/buildables/trapper<br />
{<br />
diffuseMap models/buildables/trapper/trapper.tga<br />
bumpMap models/buildables/trapper/trapper_n.tga<br />
specularMap models/buildables/trapper/trapper_s.tga<br />
}<br />
</pre><br />
<br />
Do take note that<br />
* <code>models/buildables/trapper</code> is NOT a path, it is merely a string that matches the shader specified by the <code>.md5mesh</code>, and<br />
* <code>bumpMap</code> actually refers to a normal map.<br />
<br />
==Configuring the model==<br />
<br />
Aside from the textures used by a model, the scale, vertical position, and bounding box size of the model must be specified. This is done with a configuration file. These were formerly placed in <code>overrides/buildables/</code> (for buildables) or <code>overrides/classes/</code> (for player models), but are now placed in <code>configs/</code>.<br />
<br />
===Player models===<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
Reading the configuration file for player models is handled by the <code>CG_ParseCharacterFile()</code> function in {{SourceFile|src/gamelogic/cgame/cg_players.c}}</code>.<br />
}}<br />
<br />
The configuration file may use the following keywords:<br />
<br />
''Note: this list is incomplete''<br />
<br />
<ul><br />
<li><code>headoffset <var>x</var> <var>y</var> <var>z</var></code></li><br />
<li><code>sex <var>gender</var></code><br />
<p><br />
Sets the gender of the model. Options are <code>f</code> for female or <code>n</code> for neuter. Any other character is interpreted as male.<br />
</p><br />
</li><br />
<li><code>fixedlegs</code></li><br />
<li><code>fixedtorso</code></li><br />
<li><code>firstTorsoBoneName</code></li><br />
<li><code>footsteps</code><br />
<p><br />
* <code>default</code><br />
* <code>flesh</code><br />
* <code>metal</code><br />
* <code>splash</code><br />
* <code>none</code><br />
</p><br />
</li><br />
<li><code>lastTorsoBoneName</code></li><br />
<li><code>torsoControlBoneName</code></li><br />
<li><code>neckControlBoneName</code></li><br />
<li><code>modelScale</code></li><br />
</ul><br />
<br />
As an example:<br />
<br />
<pre><br />
name "Basilisk"<br />
model level1<br />
modelScale 1.0<br />
skin default<br />
shadowScale 1.0<br />
hud alien_general_hud<br />
mins -18 -18 -18<br />
maxs 18 18 18<br />
crouchMaxs 18 18 18<br />
deadMins -18 -18 -4<br />
deadMaxs 18 18 4<br />
zOffset 0.0<br />
</pre><br />
<br />
===Weapons===<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
Weapon configuration files are parsed with <code>CG_ParseWeaponConfig()</code> function in {{SourceFile|src/gamelogic/cgame/cg_weapons.c}}</code>.<br />
}}<br />
<br />
The configuration file may use the following keywords:<br />
<br />
<ul><br />
<li><code>weaponModel <var>path</var></code></li><br />
<li><code>weaponModel3rdPerson <var>path</var></code></li><br />
<li><code>idleSound <var>path</var></code></li><br />
<li><code>icon <var>path</var></code> &mdash; The relative path to the icon that is displayed in the HUD for that weapon.</li><br />
<li><code>crosshair <var>path</var></code></li><br />
<li><code>disableIn3rdPerson</code></li><br />
</ul><br />
<br />
After those keywords, one of the following keywords must be used, followed by an opening curly brace (<code>{</code>), more commands, and a final closing curly brace (<code>}</code>):<br />
<br />
* <code>primary</code> (engine constant: <code>WPM_PRIMARY</code>)<br />
* <code>secondary</code> (engine constant: <code>WPM_SECONDARY</code>)<br />
* <code>tertiary</code> (engine constant: <code>WPM_TERTIARY</code>)<br />
<br />
The configuration between the curly braces is handled by <code>CG_ParseWeaponModeSection</code>, in the same file. It accepts the following keywords:<br />
<br />
<ul><br />
<li><code>missileModel <var>path</var></code></li><br />
<li><code>missileSprite <var>size</var> <var>shader</var></code><br />
* <var>size</var> &mdash; The size of the missile sprite. If this value is negative, it is made zero.<br />
* <var>shader</var> &mdash; The shader describing the missile sprite.<br />
</li><br />
<li><code>missileRotates</code></li><br />
<li><code>missileAnimates <var>startFrame</var> <var>numFrames</var> <var>frameRate</var> <var>looping</var></code></li><br />
<li><code>missileParticleSystem <var>name</var></code></li><br />
<li><code>missileTrailSystem <var>name</var></code></li><br />
<li><code>muzzleParticleSystem <var>name</var></code></li><br />
<li><code>impactParticleSystem <var>name</var></code></li><br />
<li><code>impactMark <var>size</var> <var>shader</var></code></li><br />
<li><code>impactSound <var>index</var> <var>path</var></code><br />
* <var>index</var> &mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.<br />
* <var>path</var> &mdash; The file path of the sound file to use.<br />
</li><br />
<li><code>impactFleshSound <var>index</var> <var>path</var></code><br />
* <var>index</var> &mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.<br />
* <var>path</var> &mdash; The file path of the sound file to use.<br />
</li><br />
<li><code>alwaysImpact</code></li><br />
<li><code>flashDLightColor <var>red</var> <var>green</var> <var>blue</var></code><br />
<p>Specifies the color of the muzzle flash <!-- didn't actually double check this --> dynamic lighting.</p><br />
* <var>red</var> &mdash; The red color component as a floating point number in the range [0,1].<br />
* <var>green</var> &mdash; The green color component as a floating point number in the range [0,1].<br />
* <var>blue</var> &mdash; The blue color component as a floating point number in the range [0,1].<br />
</li><br />
<li><code>continuousFlash</code></li><br />
<li><code>missileDlightColor <var>red</var> <var>green</var> <var>blue</var></code><br />
* <var>red</var> &mdash; The red color component as a floating point number in the range [0,1].<br />
* <var>green</var> &mdash; The green color component as a floating point number in the range [0,1].<br />
* <var>blue</var> &mdash; The blue color component as a floating point number in the range [0,1].<br />
</li><br />
<li><code>missileDlight <var>size</var></code><br />
* <var>size</var> &mdash; If this value is negative, it is made zero.<br />
</li><br />
<li><code>firingSound <var>path</var></code></li><br />
<li><code>missileSound <var>path</var></code></li><br />
<li><code>flashSound <var>index</var> <var>path</var></code><br />
* <var>index</var> &mdash; The index of the sound file, clamped to the range [0,3]; up to four impact sounds may be defined with this keyword.<br />
* <var>path</var> &mdash; The file path of the sound file to use.<br />
</li><br />
</ul><br />
<br />
As an example, this is the configuration for the chaingun (<code>models/weapons/chaingun/weapon.cfg</code>):<br />
<br />
<pre><br />
weaponModel models/weapons/chaingun/chaingun.md3<br />
<br />
icon icons/iconw_chaingun<br />
crosshair 48 gfx/2d/crosshair-chaingun_s<br />
<br />
primary<br />
{<br />
flashDlightColor 1.0 1.0 0.0<br />
flashSound 0 models/weapons/chaingun/flash0.wav<br />
flashSound 1 models/weapons/chaingun/flash1.wav<br />
flashSound 2 models/weapons/chaingun/flash2.wav<br />
flashSound 3 models/weapons/chaingun/flash3.wav<br />
<br />
impactMark 8 gfx/marks/bullet_mrk<br />
<br />
impactSound 0 models/weapons/chaingun/impact0.wav<br />
<br />
impactParticleSystem models/weapons/rifle/impactPS<br />
muzzleParticleSystem models/weapons/chaingun/muzzlePS<br />
}<br />
</pre><br />
<br />
===Buildables===<br />
<br />
{{Note|header = Developer Note|disregardby = artists|content =<br />
Reading the configuration file for buildables is handled by the <code>BG_ParseBuildableFile()</code> function in {{SourceFile|src/gamelogic/game/bg_misc.c}}</code>.<br />
}}<br />
<br />
The configuration file may use the following keywords:<br />
<br />
<ul><br />
<li><code>model <var>index</var> <var>path</var></code><br />
* <var>index</var> Some models may actually have several different model files (not sure why); this argument specifies which. Clamped to the range [0,3] (which should actually be [0, MAX_BUILDABLE_MODELS]), which means that you may use as many as four models per buildable. This is only used by the machine gun turret, which is composed of different parts.<br />
* <var>path</var> The file path where the model file is located. Note that for MD5 models, an extension of <code>.md3</code> is still to be used; it will automatically be changed by the engine.<br />
</li><br />
<li><code>modelScale <var>scale</var></code><br />
<p>Scales the model linearly.</p><br />
</li><br />
<li><code>mins <var>minX</var> <var>minY</var> <var>minZ</var></code><br />
<p>The coordinates passed to this and <code>maxs</code> define the bounding box for the model that is used for collision. The bounding box is always aligned to the global coordinate axes regardless of the orientation of the model, which is something to keep in mind when defining these values. You will likely have to debug these values by enabling drawing the bounding boxes. Load a map in developer mode with <code>\devmap</code> and set <code>\cg_drawBBOX</code> to 1. The three arguments combined form the coordinate of one corner of the bounding box, and <code>maxs</code> the opposite corner.</p><br />
</li><br />
<li><code>maxs <var>minX</var> <var>minY</var> <var>minZ</var></code><br />
<p>Defines the opposite corner of the AABB. (See above.)</p><br />
</li><br />
<li><code>zOffset <var>offset</var></code><br />
<p>Sets the vertical offset of the model; in other words, how far off the ground it is.</p><br />
* <var>offset</var> The offset as a floating point (decimal) value.<br />
</li><br />
</ul><br />
<br />
As an example:<br />
<br />
<pre><br />
model 0 models/buildables/trapper/trapper.md3<br />
modelScale 0.8<br />
mins -15 -15 -15<br />
maxs 15 15 15<br />
zOffset -15<br />
</pre><br />
<br />
Note that at present, you do not have to change the filename extension of the model to match what it actually is; that is, if the model is actually an md5, you may leave the extension as ".md3" and not ".md5mesh" or whatever.<br />
<br />
==Directory overview==<br />
<br />
This section provides an overview of the subset of the directory structure used by models; directories used for other purposes have been omitted.<br />
<br />
* <code>armor/</code> Location of configurations for the three armor types (i.e., light, helmet, and battlesuit). You should not have to edit these.<br />
* <code>configs/</code> Location of configuration files for various models.<br />
** <code>buildables/</code><br />
* <code>scripts/</code><br />
* <code>gfx/</code> Location of various 2d effect textures, such as those used for weapons.<br />
** ''Subdirectories omitted for brevity''<br />
* <code>models/</code><br />
** <code>ammo/</code><br />
*** <code>tesla/</code> Contains a single image used for the tesla sparks. Not sure why it's located here.<br />
** <code>buildables/</code><br />
*** <code>acid_tube/</code> Acid tube<br />
*** <code>arm/</code> Armory<br />
*** <code>barricade/</code> Barricade<br />
*** <code>booster/</code> Booster<br />
*** <code>dcc/</code> Defense Computer<br />
*** <code>eggpod/</code> Egg<br />
*** <code>hive/</code> Hive<br />
*** <code>hovel/</code> Hovel<br />
*** <code>medistat/</code> Medistation<br />
*** <code>mgturret/</code> Machinegun Turret<br />
*** <code>overmind/</code> Overmind<br />
*** <code>reactor/</code> Reactor<br />
*** <code>telenode/</code> Telenode<br />
*** <code>tesla/</code> Tesla generator<br />
*** <code>trapper/</code> Trapper<br />
** <code>players/</code><br />
*** <code>builder/</code> Human builder model.<br />
*** <code>human_base/</code> Unarmored human model. Also includes the jetpack and battery pack.<br />
*** <code>human_bsuit/</code> Battlesuit model.<br />
*** <code>level0/</code> Dretch.<br />
*** <code>level1/</code> Basilisk and advanced basilisk. (The advanced basilisk uses the same model as the regular dragoon, but a different texture.)<br />
*** <code>level2/</code> Marauder and advanced marauder. (Same as basilisk with regard to advanced model.)<br />
*** <code>level3/</code> Dragoon and advanced dragoon. (Same as basilisk with regard to advanced model.)<br />
*** <code>level4/</code> Tyrant.<br />
** <code>weapons/</code><br />
*** <code>abuild/</code> As there is no weapon model for the granger, the only thing in this directory is a config to hide the (nonexistant) weapon model in third person (a hack, I guess).<br />
*** <code>abuildupg/</code> Advanced granger weapon. Same as above, except the config file specifies sounds for the attack sounds (which are also located in this directory).<br />
*** <code>ackit/</code> Advanced construction kit.<br />
*** <code>blaster/</code> Blaster.<br />
*** <code>chaingun/</code> Chaingun.<br />
*** <code>ckit/</code> Construction kit.<br />
*** <code>flamer/</code> Flamethrower.<br />
*** <code>grenade/</code> Grenade.<br />
*** <code>hive/</code> Sprites, configuration file, and sound file for the hive.<br />
*** <code>lcannon/</code> Lucifer cannon.<br />
*** <code>level0/</code> Dretch configuration and attack sound file.<br />
*** <code>level1/</code> Basilisk configuration and attack sound files (hit and miss).<br />
*** <code>level1upg/</code> Advanced Basilisk configuration and added gas attack sound file.<br />
*** <code>level2/</code> Marauder configuration and attack sound files (hit and miss).<br />
*** <code>level2upg/</code> Advanced Marauder configuration and added electric attack sound file.<br />
*** <code>level3/</code> Dragoon configuration and attack sound files (hit, miss, and pounce).<br />
*** <code>level3upg/</code> Advanced Dragoon configuration and added barb sound files and model.<br />
*** <code>level4/</code> Tyrant configuration and attack sound files (hit and miss).<br />
*** <code>lgun/</code> Lasgun<br />
*** <code>lockblob/</code><br />
*** <code>mdriver/</code> Mass Driver<br />
*** <code>mgturret/</code> Machinegun turret '''''FIXME: why does this show up twice?'''''<br />
*** <code>prifle/</code> Plasma rifle<br />
*** <code>psaw/</code> Painsaw<br />
*** <code>rifle/</code> Rifle<br />
*** <code>shells/</code><br />
*** <code>shotgun/</code> Shotgun<br />
*** <code>teslagen/</code> Tesla generator '''''FIXME: why does this show up twice?'''''<br />
* <code>overrides/</code> Depreciated directory for model configuration files. Use <code>configs/</code> instead.<br />
** <code>buildables/</code> Depreceated location for buildable model configs.<br />
** <code>classes/</code> Depreceated location for character model configs.<br />
* <code>scripts/</code> Location for shaders.<br />
<br />
==Getting the model in game==<br />
<br />
There are two approaches to test your model in-game. The model and related files may be in actual folders, or the engine can load them from a <code>.pk3</code> (package) file, which is really just a zip-compressed archive with the extension changed. The process for creating these archives is discussed on the [[packaging game data]] page.<br />
<br />
==Testing the model==<br />
<br />
Once you have the model exported, the shader and configuration written, and everything packaged into a .pk3 file and in place, you are ready to test.<br />
<br />
===Testing externally===<br />
<br />
Rather than testing the exported model in-game, you may also test the model with a stand-alone MD5 viewer. At present, there is a viewer for Windows available [http://www.katsbits.com/files/md5/modelviewer_0.93a.zip here].<br />
<br />
===Testing in game===<br />
<br />
See the [[testing]] page.<br />
<br />
==Troubleshooting==<br />
<br />
===Old exporter===<br />
<br />
''Please be aware that there are numerous issues with the old exporter and the newer versions of Blender. See [[#All_or_part_of_the_mesh_appears_to_be_sucked_to_the_center|the troubleshooting section]] below for more information. It is strongly recommended that you use the [[#New_exporter|new exporter]] instead.''<br />
<br />
====Error while exporting from Blender====<br />
<br />
{| class="wikitable"<br />
|-<br />
| [[Image:Md5_export_error_no_armature.png]]<br />
| style="vertical-align:top;" | This error displays when the selected object does not have an armature modifier. Any object exported as an md5 needs bones, even if it is static. If you are unsure of how to create a static object with md5, just add an armature, set the playback start and end frame to 1, and add a location or rotation keyframe at frame 1.<br />
|-<br />
| [[Image:Md5_export_error_no_animation.png]]<br />
| style="vertical-align:top;" | This error displays when there are no keyframes. Follow the abov instructions for exporting a static object with md5.<br />
|-<br />
| [[Image:Md5_export_error_no_material.png]]<br />
| style="vertical-align:top;" | This error displays when the object does not have a material applied to it. This is required by the script, even though it really does not affect the exported result.<br />
|-<br />
|}<br />
<br />
===Appearance problems in-game===<br />
<br />
====All or part of the mesh appears to be sucked to the center====<br />
<br />
''Please note that as of 2012-02-27, the MD5 exporter does not work properly in several more recent versions of Blender. Use Blender 2.59 until this is fixed. See [http://www.katsbits.com/smforum/index.php?topic=167.msg2135#msg2135 the MD5 exporter thread] for more information.''<br />
<br />
This can happen for a number of reasons:<br />
<ul><br />
<li>There are vertices without weights.<br />
<p>''Solution'': apply weights to vertices that do not have them. If those verts are not to be animated, weight them to a bone that does not move.</p><br />
</li><br />
<li>You are using Blender 2.61 and you have bones that have animated positions.<br />
<p>''Solution'': Use an earlier version of blender until this is fixed in the exporter.</p><br />
</li><br />
<li>You are using Blender 2.62 and you have bones that are not located at the origin and do not have a parent or have animated positions.<br />
<p>''Solution'': Again, use an earlier version of blender until this is fixed in the exporter.</p><br />
</li><br />
</ul><br />
<br />
==="R_LoadMD5: vertex %i requires more than %i weights on surface (%i) in model '%s'"===<br />
<br />
This error is displayed in the console in game when a vertex belongs to too many groups.<br />
<br />
You can use this script to check your model for this before exporting:<br />
<br />
<pre><br />
# Copyright 2012 Nicholas De Cicco. <velociostrich@gmail.com><br />
#<br />
# Licensed under the Apache License, Version 2.0 (the "License");<br />
# you may not use this file except in compliance with the License.<br />
# You may obtain a copy of the License at<br />
#<br />
# http://www.apache.org/licenses/LICENSE-2.0<br />
#<br />
# Unless required by applicable law or agreed to in writing, software<br />
# distributed under the License is distributed on an "AS IS" BASIS,<br />
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br />
# See the License for the specific language governing permissions and<br />
# limitations under the License.<br />
<br />
import bpy, math<br />
from bpy.props import *<br />
<br />
MAX_GROUPS_PER_VERT = 4<br />
<br />
# Switch to object mode for vertex selection to work<br />
bpy.ops.object.mode_set(mode='OBJECT')<br />
<br />
for obj in bpy.context.selected_objects:<br />
# Check to see that the object is a mesh.<br />
if obj.type != 'MESH':<br />
continue<br />
<br />
# Select verts that belong to too many groups<br />
for vertex in obj.data.vertices:<br />
if len(vertex.groups) > MAX_GROUPS_PER_VERT:<br />
vertex.select = True<br />
else:<br />
vertex.select = False<br />
<br />
# Switch back to edit mode so the user can see any selected verts<br />
bpy.ops.object.mode_set(mode='EDIT')<br />
</pre><br />
<br />
====Using the Script====<br />
<br />
# Select the mesh (or meshes) that you would like to check.<br />
# Create a new text editor window and text data block.<br />
# Copy and paste the script into the text editor.<br />
# Click "Run Script".<br />
<br />
Once the script has ran, the 3d view will switch to edit mode and any offending vertices will be selected. A handy tip: clicking an individual vertex will reveal which groups it is a member of in the properties shelf.<br />
<br />
[[Image:Properties_shelf_vertex_groups.png|frame|center|The vertex group section of the properties shelf]]<br />
<br />
==Resources==<br />
<br />
* [http://www.modwiki.net/wiki/MD5_%28file_format%29 MD5 file format documentation]<br />
* [http://www.katsbits.com/tools/# Tools for MD5 and other file formats]<br />
* [http://download.blender.org/release/ Older versions of Blender]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Tools/IQM&diff=8602Tools/IQM2024-03-07T14:34:44Z<p>Illwieckz: /* IQM Development Kit */</p>
<hr />
<div>[[Category:Tools]]<br />
[[Category:IQM]]<br />
Here are some known tools supporting IQM/IQE formats (or with work-in-progress support).<br />
<br />
==Frequently asked questions==<br />
<br />
* IQE to IQM conversion: see [[#iqmtool|iqmtool]];<br />
* IQM to IQE conversion: see [[#asstools|asstools]];<br />
* Blender Exporter: see [[#IQM Development Kit|IQM Development Kit]];<br />
* Blender Importer: see [[#asstools|asstools]];<br />
* Viewer: see [[#IqeBrowser|IqeBrowser]] and [[#Noesis|Noesis]];<br />
* Converter to many formats: see [[#Noesis|Noesis]];<br />
* Game level editor and map compiler recommended for Unvanquished: see [[#NetRadiant|NetRadiant]] and [[#Q3map3|Q3map2]] from NetRadiant.<br />
<br />
==IQM tools==<br />
<br />
===iqmtool===<br />
<br />
{{InfoIqmtool}}<br />
<br />
'''Repository:''' https://svn.code.sf.net/p/fteqw/code/trunk/iqm<br />
<br />
===asstools===<br />
<br />
Some free open source tools, including a Blender import plugin (but it has to be ported to latest Blender version).<br />
<br />
Also provides a <code>iqm_to_iqe.py</code> tool that can convert <code>.iqm</code> files back to <code>.iqe</code> ones.<br />
<br />
'''Repository:''' https://github.com/ccxvii/asstools<br />
<br />
===IQM Development Kit===<br />
<br />
{{Note|content=Here can be found some improvements for the Blender exporter (works in 0.82 and 0.93 and maybe later): https://github.com/MikeMorals/blender2.93-iqm}}<br />
<br />
Original Lee Salzman's free open source reference project for IQM. It provides a Blender export plugin, and a tool to convert some formats to IQM (including Doom 3's md5mesh/anim).<br />
<br />
For the command line tool prefer the FTEQW's <code>iqmtool</code> one (see [[#iqmtool|iqmtool]]) if you're contributing to Unvanquished (it's a fork with more features we rely on).<br />
<br />
'''Website:''' http://sauerbraten.org/iqm/<br />
<br />
===IqeBrowser===<br />
<br />
A free open source graphical viewer and converter. Unfortunately only built for Windows (and there are some Windowsism in code), but works well on Wine.<br />
<br />
'''Download page:''' https://www.moddb.com/mods/r-reinhard/addons/iqebrowser-v217<br />
<br />
'''Forum thread:''' https://forums.unvanquished.net/viewtopic.php?f=8&t=2106<br />
<br />
===Noesis===<br />
<br />
A free (gratis) graphical viewer and converter. Unfortunately only built for Windows, but works well on Wine.<br />
<br />
'''Download page:''' http://richwhitehouse.com/index.php?content=inc_projects.php<br />
<br />
==Tools with IQM support==<br />
<br />
===NetRadiant===<br />
<br />
{{InfoNetRadiant}}<br />
<br />
NetRadiant supports <code>.iqm</code> model rendering in the editor thanks to IQM implementation in picomodel library and the provided [[Tools/Q3map2|Q3map2]] map compiler can now bake <code>.iqm</code> files (see below).<br />
<br />
'''Website:''' https://netradiant.gitlab.io<br />
<br />
===Q3map2===<br />
<br />
{{InfoQ3map2}}<br />
<br />
The q3map2 map compiler from upstream NetRadiant can now bake <code>.iqm</code> files.<br />
<br />
'''Website:''' https://netradiant.gitlab.io<br />
<br />
===GtkRadiant===<br />
<br />
Another level editor initially purposed for Quake 3 mapping that is also usable for Unvanquished mapping (see [[Tools/Level editors|Level editors]]), it now supports rendering IQM models thanks to IQM implementation in picomodel library.<br />
<br />
The q3map2 map compiler from GtkRadiant can now bake <code>.iqm</code> files but is not recommended for Unvanquished mapping (it does not support some other features we want). If you map with GtkRadiant editor, please compile your maps with NetRadiant's q3map2.<br />
<br />
'''Website:''' https://icculus.org/gtkradiant/<br />
<br />
===DarkRadiant===<br />
<br />
Another level editor initially purposed for Doom 3 mapping that is also usable for Unvanquished mapping (see [[Tools/Level editors|Level editors]]), it now supports rendering IQM models thanks to IQM implementation in picomodel library. The integrated animation viewer does not support IQM animation though.<br />
<br />
'''Website:''' https://www.darkradiant.net<br />
<br />
==Tools with work in progress IQM support==<br />
<br />
===Maverick Model 3D===<br />
<br />
A free open source graphical viewer, with IQM format being work in progress (may not be already usable or even available in releases).<br />
<br />
It's a fork of Misfit Model 3D, maintained by ZTM.<br />
<br />
'''Website:''' https://clover.moe/mm3d/</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Tools/IQM&diff=8601Tools/IQM2024-03-07T14:33:50Z<p>Illwieckz: /* IQM Development Kit */</p>
<hr />
<div>[[Category:Tools]]<br />
[[Category:IQM]]<br />
Here are some known tools supporting IQM/IQE formats (or with work-in-progress support).<br />
<br />
==Frequently asked questions==<br />
<br />
* IQE to IQM conversion: see [[#iqmtool|iqmtool]];<br />
* IQM to IQE conversion: see [[#asstools|asstools]];<br />
* Blender Exporter: see [[#IQM Development Kit|IQM Development Kit]];<br />
* Blender Importer: see [[#asstools|asstools]];<br />
* Viewer: see [[#IqeBrowser|IqeBrowser]] and [[#Noesis|Noesis]];<br />
* Converter to many formats: see [[#Noesis|Noesis]];<br />
* Game level editor and map compiler recommended for Unvanquished: see [[#NetRadiant|NetRadiant]] and [[#Q3map3|Q3map2]] from NetRadiant.<br />
<br />
==IQM tools==<br />
<br />
===iqmtool===<br />
<br />
{{InfoIqmtool}}<br />
<br />
'''Repository:''' https://svn.code.sf.net/p/fteqw/code/trunk/iqm<br />
<br />
===asstools===<br />
<br />
Some free open source tools, including a Blender import plugin (but it has to be ported to latest Blender version).<br />
<br />
Also provides a <code>iqm_to_iqe.py</code> tool that can convert <code>.iqm</code> files back to <code>.iqe</code> ones.<br />
<br />
'''Repository:''' https://github.com/ccxvii/asstools<br />
<br />
===IQM Development Kit===<br />
<br />
{{Note|content=There are some fixes for the Blender exporter (works in 0.82 and 0.93) here: https://github.com/MikeMorals/blender2.93-iqm}}<br />
<br />
Original Lee Salzman's free open source reference project for IQM. It provides a Blender export plugin, and a tool to convert some formats to IQM (including Doom 3's md5mesh/anim).<br />
<br />
For the command line tool prefer the FTEQW's <code>iqmtool</code> one (see [[#iqmtool|iqmtool]]) if you're contributing to Unvanquished (it's a fork with more features we rely on).<br />
<br />
'''Website:''' http://sauerbraten.org/iqm/<br />
<br />
===IqeBrowser===<br />
<br />
A free open source graphical viewer and converter. Unfortunately only built for Windows (and there are some Windowsism in code), but works well on Wine.<br />
<br />
'''Download page:''' https://www.moddb.com/mods/r-reinhard/addons/iqebrowser-v217<br />
<br />
'''Forum thread:''' https://forums.unvanquished.net/viewtopic.php?f=8&t=2106<br />
<br />
===Noesis===<br />
<br />
A free (gratis) graphical viewer and converter. Unfortunately only built for Windows, but works well on Wine.<br />
<br />
'''Download page:''' http://richwhitehouse.com/index.php?content=inc_projects.php<br />
<br />
==Tools with IQM support==<br />
<br />
===NetRadiant===<br />
<br />
{{InfoNetRadiant}}<br />
<br />
NetRadiant supports <code>.iqm</code> model rendering in the editor thanks to IQM implementation in picomodel library and the provided [[Tools/Q3map2|Q3map2]] map compiler can now bake <code>.iqm</code> files (see below).<br />
<br />
'''Website:''' https://netradiant.gitlab.io<br />
<br />
===Q3map2===<br />
<br />
{{InfoQ3map2}}<br />
<br />
The q3map2 map compiler from upstream NetRadiant can now bake <code>.iqm</code> files.<br />
<br />
'''Website:''' https://netradiant.gitlab.io<br />
<br />
===GtkRadiant===<br />
<br />
Another level editor initially purposed for Quake 3 mapping that is also usable for Unvanquished mapping (see [[Tools/Level editors|Level editors]]), it now supports rendering IQM models thanks to IQM implementation in picomodel library.<br />
<br />
The q3map2 map compiler from GtkRadiant can now bake <code>.iqm</code> files but is not recommended for Unvanquished mapping (it does not support some other features we want). If you map with GtkRadiant editor, please compile your maps with NetRadiant's q3map2.<br />
<br />
'''Website:''' https://icculus.org/gtkradiant/<br />
<br />
===DarkRadiant===<br />
<br />
Another level editor initially purposed for Doom 3 mapping that is also usable for Unvanquished mapping (see [[Tools/Level editors|Level editors]]), it now supports rendering IQM models thanks to IQM implementation in picomodel library. The integrated animation viewer does not support IQM animation though.<br />
<br />
'''Website:''' https://www.darkradiant.net<br />
<br />
==Tools with work in progress IQM support==<br />
<br />
===Maverick Model 3D===<br />
<br />
A free open source graphical viewer, with IQM format being work in progress (may not be already usable or even available in releases).<br />
<br />
It's a fork of Misfit Model 3D, maintained by ZTM.<br />
<br />
'''Website:''' https://clover.moe/mm3d/</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Tools/IQM&diff=8600Tools/IQM2024-03-07T14:33:27Z<p>Illwieckz: blender importer fixes are now merged, blender exporter fixes not</p>
<hr />
<div>[[Category:Tools]]<br />
[[Category:IQM]]<br />
Here are some known tools supporting IQM/IQE formats (or with work-in-progress support).<br />
<br />
==Frequently asked questions==<br />
<br />
* IQE to IQM conversion: see [[#iqmtool|iqmtool]];<br />
* IQM to IQE conversion: see [[#asstools|asstools]];<br />
* Blender Exporter: see [[#IQM Development Kit|IQM Development Kit]];<br />
* Blender Importer: see [[#asstools|asstools]];<br />
* Viewer: see [[#IqeBrowser|IqeBrowser]] and [[#Noesis|Noesis]];<br />
* Converter to many formats: see [[#Noesis|Noesis]];<br />
* Game level editor and map compiler recommended for Unvanquished: see [[#NetRadiant|NetRadiant]] and [[#Q3map3|Q3map2]] from NetRadiant.<br />
<br />
==IQM tools==<br />
<br />
===iqmtool===<br />
<br />
{{InfoIqmtool}}<br />
<br />
'''Repository:''' https://svn.code.sf.net/p/fteqw/code/trunk/iqm<br />
<br />
===asstools===<br />
<br />
Some free open source tools, including a Blender import plugin (but it has to be ported to latest Blender version).<br />
<br />
Also provides a <code>iqm_to_iqe.py</code> tool that can convert <code>.iqm</code> files back to <code>.iqe</code> ones.<br />
<br />
'''Repository:''' https://github.com/ccxvii/asstools<br />
<br />
===IQM Development Kit===<br />
<br />
{{Note|content=There are some fixes for the exporter (works in 0.82 and 0.93) here: https://github.com/MikeMorals/blender2.93-iqm}}<br />
<br />
Original Lee Salzman's free open source reference project for IQM. It provides a Blender export plugin, and a tool to convert some formats to IQM (including Doom 3's md5mesh/anim).<br />
<br />
For the command line tool prefer the FTEQW's <code>iqmtool</code> one (see [[#iqmtool|iqmtool]]) if you're contributing to Unvanquished (it's a fork with more features we rely on).<br />
<br />
'''Website:''' http://sauerbraten.org/iqm/<br />
<br />
===IqeBrowser===<br />
<br />
A free open source graphical viewer and converter. Unfortunately only built for Windows (and there are some Windowsism in code), but works well on Wine.<br />
<br />
'''Download page:''' https://www.moddb.com/mods/r-reinhard/addons/iqebrowser-v217<br />
<br />
'''Forum thread:''' https://forums.unvanquished.net/viewtopic.php?f=8&t=2106<br />
<br />
===Noesis===<br />
<br />
A free (gratis) graphical viewer and converter. Unfortunately only built for Windows, but works well on Wine.<br />
<br />
'''Download page:''' http://richwhitehouse.com/index.php?content=inc_projects.php<br />
<br />
==Tools with IQM support==<br />
<br />
===NetRadiant===<br />
<br />
{{InfoNetRadiant}}<br />
<br />
NetRadiant supports <code>.iqm</code> model rendering in the editor thanks to IQM implementation in picomodel library and the provided [[Tools/Q3map2|Q3map2]] map compiler can now bake <code>.iqm</code> files (see below).<br />
<br />
'''Website:''' https://netradiant.gitlab.io<br />
<br />
===Q3map2===<br />
<br />
{{InfoQ3map2}}<br />
<br />
The q3map2 map compiler from upstream NetRadiant can now bake <code>.iqm</code> files.<br />
<br />
'''Website:''' https://netradiant.gitlab.io<br />
<br />
===GtkRadiant===<br />
<br />
Another level editor initially purposed for Quake 3 mapping that is also usable for Unvanquished mapping (see [[Tools/Level editors|Level editors]]), it now supports rendering IQM models thanks to IQM implementation in picomodel library.<br />
<br />
The q3map2 map compiler from GtkRadiant can now bake <code>.iqm</code> files but is not recommended for Unvanquished mapping (it does not support some other features we want). If you map with GtkRadiant editor, please compile your maps with NetRadiant's q3map2.<br />
<br />
'''Website:''' https://icculus.org/gtkradiant/<br />
<br />
===DarkRadiant===<br />
<br />
Another level editor initially purposed for Doom 3 mapping that is also usable for Unvanquished mapping (see [[Tools/Level editors|Level editors]]), it now supports rendering IQM models thanks to IQM implementation in picomodel library. The integrated animation viewer does not support IQM animation though.<br />
<br />
'''Website:''' https://www.darkradiant.net<br />
<br />
==Tools with work in progress IQM support==<br />
<br />
===Maverick Model 3D===<br />
<br />
A free open source graphical viewer, with IQM format being work in progress (may not be already usable or even available in releases).<br />
<br />
It's a fork of Misfit Model 3D, maintained by ZTM.<br />
<br />
'''Website:''' https://clover.moe/mm3d/</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Contributing&diff=8598Contributing2024-02-12T10:59:57Z<p>Illwieckz: /* I want to bring a change to ______. What do I need to know? */</p>
<hr />
<div>[[Category:Contributing]]<br />
== Motto==<br />
Here are some motto to help make and keep Unvanquished a welcoming place:<br />
<br />
<table style="margin: 2em auto 2em auto; border: 0px !important;"><tr><td style="border: 1pt solid cyan !important; background-color: #385555 !important;"><div style="font-size: 500%; margin: .5em;">🤗️</div></td><td style="border: 1pt solid cyan !important; background-color: #005353 !important; color: white;"><div style="margin: 1em;"><br />
<span style="color: #fffacd;">'''You can do it'''</span><br />
<br />
''Don't be intimidated for trying to contribute something, every contributor is not less than a man.''<br />
<br />
<span style="color: #fffacd;">'''Be bold as a merger'''</span><br />
<br />
''It's better to improve iteratively something that is not perfect than to not merge anything.''<br />
<br />
<span style="color: #fffacd;">'''Be patient as a reviewer'''</span><br />
<br />
''If you think there is something better to be done, you will have time to do it yourself later.''<br />
<br />
<span style="color: #fffacd;">'''Everything submitted is a gift'''</span><br />
<br />
''People come to submit changes to make us a gift, not to be obligated to do something.''<br />
<br />
<span style="color: #fffacd;">'''Don't put excessive weight on someone else's shoulder'''</span><br />
<br />
''Never expect from a man an expectation only a god can fulfill, every contributor is not more than a man.''<br />
</div></td></tr></table><br />
<br />
__TOC__<br />
<br />
==I want to bring a change to ______. What do I need to know?==<br />
<br />
Anyone can contribute changes! There are separate pages for guidelines for the following:<br />
<br />
* {{Subpage|Code}}<br />
* {{Subpage|Media}}<br />
<br />
Once your change is ready, it has to be submitted for review then merged, see also:<br />
<br />
* {{Subpage|Review}}<br />
* {{Subpage|Merge}}<br />
<br />
We recommend to submit changes using Git and doing pull requests. If you cannot, see the {{Subpage|Patches}} page.<br />
<br />
==I'm skilled at ______. How do I become a developer?==<br />
<br />
===For content creators===<br />
<br />
Please let us know that you are interested in producing content for the game via [[chat]] or the {{forums}} and someone will get in touch with you with further instructions.<br />
<br />
===For programmers===<br />
<br />
Talk to the team! Just introduce yourself on [[chat]] or the {{forums}} and get involved in discussion. If you appear to be intelligent and posses the right attitude, you may be made into a contributor without even having contributed any actual code.<br />
<br />
==How does the project work?==<br />
<br />
Unvanquished is developed by individuals around the world over the Internet. Individuals involved with the project can be divided into a few different categories:<br />
<!-- Note to editors: Please do not add names to this page so that we do not have to constantly keep it updated as well as the credits page. The credits page can serve as a reference for who's who. --><br />
<br />
<ul><br />
<li>'''Project Leaders''', Currently, there are only three of these, they are responsible for:<br />
<ul><br />
<li>Art lead &mdash; Responsible for maintaining quality of all elements of the visual and auditory aspects of the game that are not controlled by code.</li><br />
<li>Programming lead &mdash; Responsible for overseeing development of the engine and game code.</li><br />
<li>Meta-project &amp; Public Relations lead &mdash; Responsible for public relations (any interactions with our player base and the outside world) as well as recruiting new developers.</li><br />
</ul><br />
Input from project leads is considered only in some cases to be law, but that doesn't mean that discussion from other individuals will not change what the project leaders do or say. The aim of project leads is to guide, not rule: if a project lead has an unpopular opinion, it will not be enforced in any way. The development '''team''' as a whole is responsible for shaping Unvanquished, not a handful of individuals. Developers are not ''expected'' to do what they are asked, but if a project lead makes a request, then there is generally a reason for it.<br />
</li><br />
<li>'''Developers''', These are all those who actively make large contributions (in terms of effort) to the project.</li><br />
<li>'''Contributors''', These are those who have made smaller or more infrequent contributions to the project, or who do not wish to get too involved.</li><br />
<li>'''Users''', Those who play the game but do not contribute any further than to merely provide discussion fall into this category.</li><br />
</ul><br />
<br />
==How often is there a release?==<br />
<br />
The game is currently in Beta.<br />
<br />
In the past releases were made once a month but because of most members of the team being busy in their lives, releases are now made at a slower pace (mostly when people are available to sustain a release).<br />
<br />
==Where does discussion take place?==<br />
<br />
Unlike many open-source projects, we do not have a mailing list. Instead, discussion occurs in one of two places:<br />
<br />
* The {{forums}}, where long-form discussion takes place, and<br />
* The [[chat]], where short-form discussion takes place.<br />
<br />
Because of the verbose nature of the forums, they are the preferred destination for any serious discussion. Moreover, the forums allow individuals '''from all timezones''' the opportunity to contribute to discussion, and discussion generally stays much more on-topic.<br />
<br />
Do note that there are two separate forums for discussion:<br />
<br />
* "Development", and<br />
* "Community Development".<br />
<br />
'''Development''' is for the development of official features of the game to be shipped in a future release. It's focused on Media contributions as most of the code discussion happens in GitHub issues.<br />
<br />
'''Community Development''' is for any development around the game (like mods, new tools, etc.) without any need to be released as a core part of the game and then not requiring the same constraints. Some experiments may be done as community development first then be integrated with the game or as official product.<br />
<br />
The '''Development''' forum also has a sub-forum named '''Project Planning''' that currently requires '''Contributor''' or '''Developer''' status to be seen.<br />
<br />
There are also two other forums that are purposed for artists: '''Level Design''' and '''Map Releases''', the first one is for discussions about level design techniques, architecture or inspiration, level design tools, showing off your in progress work, etc. while the second one is dedicated to release threads for your maps, being official or not.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Contributing/Patches&diff=8597Contributing/Patches2024-02-12T10:56:12Z<p>Illwieckz: </p>
<hr />
<div>[[Category:Contributing]]<br />
The standard way to contribute changes is to fork the repository, commit the change, push it to a git branch and then open a pull request on our forge. Our current forge being hosted by GitHub, a GitHub account is therefore needed. If one day we host our forge elsewhere (for example on GitLab), an account on that other place would be required instead.<br />
<br />
If for some reasons you cannot have an account on GitHub, you may rely on patches, but it is required to strictly follow those rules:<br />
<br />
* You have to find someone willing to merge your commit in a branch for you, push that branch, and do the pull request for you. It is important that prior to you sending your patches, you have to find someone “willing” to do the pull-request task for you. It is not permitted to “expect” someone to do it.<br />
* The patches should be based on a current development branch at the time of the publication, the target branch being either {{code|master}} our a future branch named like {{code|for-0.55/sync}}. If the commit is older at the time you publish the patch, the rebase task up to you.<br />
* The commit should be distributed with the explicit reference it is expected to be merged on, this reference being part of an upstream development branch as said earlier. If the patch format doesn't carry this information, this information should be given in any way of attachment to the patch. For example if you send patches by mail to someone willing to do the pull-request work for you, if the patch format doesn't carry the parent commit reference, you should write this reference down in the mail body.<br />
* As with native git commits, patch should come with meaningful enough titles.<br />
<br />
When behaving with the team and with people willing to do pull-request tasks for you, or not, it is important to remember that :<br />
<br />
* Publishing a patch never creates an expectation that should be fulfilled.<br />
* The one willing to do the pull-request task for you has full rights to stop willing to at any time.<br />
* It is not allowed to put any pressure on someone willing to do for you something that is up to you.<br />
* It's better to avoid any pressure on anyone in all cases.<br />
<br />
If you cannot push to GitHub but you can push your changes to another public Git repository somewhere else, it is better to push and publish our changes on such public Git repository than sending raw patches, rebased on current target development branch as usual. This strongly reduces the amount of work to do for the one willing to do the pull request task for you and then increases your chance to find someone willing to and reduce the chance of the one willing to do being discouraged by the effort.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Contributing/Patches&diff=8596Contributing/Patches2024-02-12T07:23:47Z<p>Illwieckz: Created page with "The standard way to contribute changes is to fork the repository, commit the change, push it to a git branch and then open a pull request on our forge. Our current forge being..."</p>
<hr />
<div>The standard way to contribute changes is to fork the repository, commit the change, push it to a git branch and then open a pull request on our forge. Our current forge being hosted by GitHub, a GitHub account is therefore needed. If one day we host our forge elsewhere (for example on GitLab), an account on that other place would be required instead.<br />
<br />
If for some reasons you cannot have an account on GitHub, you may rely on patches, but it is required to strictly follow those rules:<br />
<br />
* You have to find someone willing to merge your commit in a branch for you, push that branch, and do the pull request for you. It is important that prior to you sending your patches, you have to find someone “willing” to do the pull-request task for you. It is not permitted to “expect” someone to do it.<br />
* The patches should be based on a current development branch at the time of the publication, the target branch being either {{code|master}} our a future branch named like {{code|for-0.55/sync}}. If the commit is older at the time you publish the patch, the rebase task up to you.<br />
* The commit should be distributed with the explicit reference it is expected to be merged on, this reference being part of an upstream development branch as said earlier. If the patch format doesn't carry this information, this information should be given in any way of attachment to the patch. For example if you send patches by mail to someone willing to do the pull-request work for you, if the patch format doesn't carry the parent commit reference, you should write this reference down in the mail body.<br />
* As with native git commits, patch should come with meaningful enough titles.<br />
<br />
When behaving with the team and with people willing to do pull-request tasks for you, or not, it is important to remember that :<br />
<br />
* Publishing a patch never creates an expectation that should be fulfilled.<br />
* The one willing to do the pull-request task for you has full rights to stop willing to at any time.<br />
* It is not allowed to put any pressure on someone willing to do for you something that is up to you.<br />
* It's better to avoid any pressure on anyone in all cases.<br />
<br />
If you cannot push to GitHub but you can push your changes to another public Git repository somewhere else, it is better to push and publish our changes on such public Git repository than sending raw patches, rebased on current target development branch as usual. This strongly reduces the amount of work to do for the one willing to do the pull request task for you and then increases your chance to find someone willing to and reduce the chance of the one willing to do being discouraged by the effort.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Contributing/Merge&diff=8595Contributing/Merge2024-02-08T01:55:08Z<p>Illwieckz: add someone else's PR closing rule</p>
<hr />
<div>[[Category:Contributing]]<br />
{{Note|header=Proposal|content=This is a proposal, things may be discussed and changed.<br />
<br />
See the forum thread: https://forums.unvanquished.net/viewtopic.php?t=2426}}<br />
<br />
{{NoteMergeReview}}<br />
<br />
== Common merge rules ==<br />
<br />
As a start, some things copy pasted from [[Contributing/Code]]:<br />
<br />
* People with commit access should always merge their own pull requests. Don't merge another contributor's code as they may have good reasons to hold back that aren't obvious.<br />
* Get the approval of another team member before merging.<br />
* Do not merge pull requests that have been open for less than 24 hours. Mistakes are likely if people don't get a chance to review.<br />
<br />
== Merge role hierarchy ==<br />
<br />
I suggest to formally define three roles (this may not translate into GitHub user interface):<br />
<br />
=== Super merger ===<br />
<br />
The purpose of super merger role is to be able to take some decisions to unstuck situations.<br />
<br />
The super merger can, as an exception, merge someone else's pull request, if needed for example if the pull request looks ready but is sleeping for too long and the submitter is not answering, or to merge some things that looks ready for a release and delaying a release is not wanted.<br />
<br />
In all cases, those are exceptions and when going the exception way it's recommended to first write a motivated comment and to wait a delay of one day between the motivated comment and the merge.<br />
<br />
{{Note|Suggested super mergers: project heads, perturbed.}}<br />
<br />
=== Merger ===<br />
<br />
Everyone with commit access is a merger, so basically the team members.<br />
<br />
A merger can also merge a pull request from a contributor who doesn't have commit permission, or for any reason explaining why the author will not do it, the merger is then considered the reviewer and the approver.<br />
<br />
Merging someone else's code and being the approver requires the merged code to have been written against Unvanquished source, porting a code from another software (for example porting from ioquake3 engine to Dæmon engine) requires the porting effort to be reviewed by someone else than the merger.<br />
<br />
Any merger is an approver to someone else.<br />
<br />
=== Contributors ===<br />
<br />
External contributors without commit permission, but submitting pull requests.<br />
<br />
== Closing an unmerged pull request from someone else ==<br />
<br />
=== Superseded ===<br />
<br />
If you believe an original pull request that is not yours is superseded by another one that you believe does the same and that was merged, and if you believe there is nothing more to merge in the original one, don't close it immediately but:<br />
<br />
<blockquote><br />
* Ask the original author (mention him in your GitHub comment) if he believes there is nothing left to merge in the original pull request,<br />
* Express your intention to close the pull request.<br />
<br />
If the original author agrees with the closing, you can close the pull request without waiting more.<br/><br />
If there is no answer after one month has passed, you can close the pull request.<br/><br />
Add a comment saying you're closing the PR at the moment you can close the pull request.<br />
</blockquote><br />
<br />
=== Stalled ===<br />
<br />
A pull request is considered stalled if it had no activity in one year.<br />
<br />
We don't have dozens of thousands pull request so we have no urge to clean-up them. Our team is small and the work is sometime done in very slow pace, so we better not close all stalled PR just for purity.<br />
<br />
If you believe a stalled a change from a stalled pull request is wanted but the pull request can't be merged without being reworked, don't close it. It will be closed the day a reworked pull request will be merged instead and after we have followed the “Superseded” pull request closing rule.<br />
<br />
If a pull request that is not yours is stalled and you believe it has no hope to get merged, you can follow similar rules in order to close it:<br />
<br />
<blockquote><br />
* Ask the original author (mention him in your GitHub comment) if he plans to resume on it,<br />
* Express your intention to close the pull request.<br />
<br />
If the original author agrees with the closing, you can close the pull request without waiting more.<br/><br />
If there is no answer after one month has passed, you can close the pull request.<br/><br />
Add a comment saying you're closing the PR at the moment you can close the pull request.<br />
<br />
If the original author has deleted his GitHub account, express your intention to close the pull request and also wait for a month, to leave time to other people of the team to react.<br />
</blockquote><br />
<br />
It means a stalled pull request may be closed after one year of stalling plus one month of lack of response from the original author.<br />
It doesn't mean a stalled pull request should be closed, whatever the time spent in stalling.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Infrastructure/Servers&diff=8594Infrastructure/Servers2024-01-14T13:47:50Z<p>Illwieckz: /* Hosted web services */ add illwieckz' release mirror</p>
<hr />
<div>[[Category:Infrastructure]]<br />
== Dedicated server hosted by `Ishq ==<br />
<br />
99% Unvanquished stuff, `Ishq hosts one personal service.<br />
<br />
Administration is shared among some team members.<br />
<br />
=== System ===<br />
<br />
* System: Debian<br />
* Web server: Nginx<br />
* PHP application server: PHP-FPM<br />
* Database: MariaDB/MySQL<br />
* SSL certificates: Let's Encrypt<br />
<br />
=== Hosted web services ===<br />
<br />
* https://unvanquished.net blog<br />
** Software: Wordpress<br />
* https://unvanquished.net/activity Pluto rss/atom planet for development activity<br />
** Software: Pluto, https://github.com/feedreader/pluto<br />
** Configuration: https://github.com/Unvanquished/pluto-devfeeds<br />
* https://unvanquished.net/servers Wordpress plugin for server listing<br />
** Software: XonPress, https://github.com/DaemonEngine/XonPress ([https://gitlab.com/mattia.basaglia/Xonpress originally written] by Melanosuchus)<br />
* https://forums.unvanquished.net forums<br />
** Software: phpBB<br />
* https://wiki.unvanquished.net wiki<br />
** Software: MediaWiki<br />
* https://login.unvanquished.net shared authentication system<br />
** Software: SimpleSAMLphp<br />
* http://dl.unvanquished.net primary download server (releases, ingame download)<br />
** Software: raw Nginx<br />
* http://cdn.unvanquished.net primary CDN server<br />
** Software: raw Nginx<br />
<br />
=== Hosted game services ===<br />
<br />
* <code>master.unvanquished.net</code> primary master server (unvanquished-master)<br />
* <code>unvanquished.net:27960</code> official US game server<br />
<br />
=== Hosted chat services ===<br />
<br />
* Overmind IRC bot: autovoice webchat users, welcome messages, antispam features<br />
** Software: PyTIBot, https://github.com/DefaultUser/PyTIBot<br />
* Unvanquished IRC bot: announce game and events<br />
** Software: Mantis, https://gitlab.com/Viech/Mantis/<br />
* Granger: keeps note for users, do some fun stuff as well (markov chains)<br />
** Software: ruby-rbot, https://github.com/ruby-rbot/rbot<br />
* Dretch (DiscordFlips): bridge IRC, Matrix and Discord<br />
** Software: matterbridge, https://github.com/42wim/matterbridge<br />
<br />
See [[Chat#Chat bots]] for details about what those chat bots do.<br />
<br />
== Dedicated server hosted by illwieckz ==<br />
<br />
99% personnal stuff, some Unvanquished services among others.<br />
<br />
Has been used as a landing page when `Ishq dedicated server was offline.<br />
<br />
Administration is not shared. It may be possible to share administration powers on the game-related virtual machine or to redesign things to make it possible.<br />
<br />
=== System ===<br />
<br />
* System (hypervisor): Debian Xen<br />
* Web front: Nginx<br />
* SSL certificates: Let's Encrypt<br />
* System (web virtual machine): Debian<br />
* Web: Nginx<br />
* System (gaming virtual machine): Ubuntu<br />
* Web: Nginx<br />
<br />
=== Hosted web services ===<br />
<br />
* http://cdn.illwieckz.net/unvanquished CDN mirror<br />
* https://dl.illwieckz.net/share/unvanquished/release release mirror<br />
* http://gg.illwieckz.net/dl/unvanquished/pkg in-game download<br />
<br />
=== Hosted game services ===<br />
<br />
* <code>master2.unvanquished.net</code> secondary master server (unvanquished-master)<br />
* <code>gg.illwieckz.net:27960</code> official EU game server</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Infrastructure/Servers&diff=8593Infrastructure/Servers2024-01-14T13:41:38Z<p>Illwieckz: /* Hosted chat services */</p>
<hr />
<div>[[Category:Infrastructure]]<br />
== Dedicated server hosted by `Ishq ==<br />
<br />
99% Unvanquished stuff, `Ishq hosts one personal service.<br />
<br />
Administration is shared among some team members.<br />
<br />
=== System ===<br />
<br />
* System: Debian<br />
* Web server: Nginx<br />
* PHP application server: PHP-FPM<br />
* Database: MariaDB/MySQL<br />
* SSL certificates: Let's Encrypt<br />
<br />
=== Hosted web services ===<br />
<br />
* https://unvanquished.net blog<br />
** Software: Wordpress<br />
* https://unvanquished.net/activity Pluto rss/atom planet for development activity<br />
** Software: Pluto, https://github.com/feedreader/pluto<br />
** Configuration: https://github.com/Unvanquished/pluto-devfeeds<br />
* https://unvanquished.net/servers Wordpress plugin for server listing<br />
** Software: XonPress, https://github.com/DaemonEngine/XonPress ([https://gitlab.com/mattia.basaglia/Xonpress originally written] by Melanosuchus)<br />
* https://forums.unvanquished.net forums<br />
** Software: phpBB<br />
* https://wiki.unvanquished.net wiki<br />
** Software: MediaWiki<br />
* https://login.unvanquished.net shared authentication system<br />
** Software: SimpleSAMLphp<br />
* http://dl.unvanquished.net primary download server (releases, ingame download)<br />
** Software: raw Nginx<br />
* http://cdn.unvanquished.net primary CDN server<br />
** Software: raw Nginx<br />
<br />
=== Hosted game services ===<br />
<br />
* <code>master.unvanquished.net</code> primary master server (unvanquished-master)<br />
* <code>unvanquished.net:27960</code> official US game server<br />
<br />
=== Hosted chat services ===<br />
<br />
* Overmind IRC bot: autovoice webchat users, welcome messages, antispam features<br />
** Software: PyTIBot, https://github.com/DefaultUser/PyTIBot<br />
* Unvanquished IRC bot: announce game and events<br />
** Software: Mantis, https://gitlab.com/Viech/Mantis/<br />
* Granger: keeps note for users, do some fun stuff as well (markov chains)<br />
** Software: ruby-rbot, https://github.com/ruby-rbot/rbot<br />
* Dretch (DiscordFlips): bridge IRC, Matrix and Discord<br />
** Software: matterbridge, https://github.com/42wim/matterbridge<br />
<br />
See [[Chat#Chat bots]] for details about what those chat bots do.<br />
<br />
== Dedicated server hosted by illwieckz ==<br />
<br />
99% personnal stuff, some Unvanquished services among others.<br />
<br />
Has been used as a landing page when `Ishq dedicated server was offline.<br />
<br />
Administration is not shared. It may be possible to share administration powers on the game-related virtual machine or to redesign things to make it possible.<br />
<br />
=== System ===<br />
<br />
* System (hypervisor): Debian Xen<br />
* Web front: Nginx<br />
* SSL certificates: Let's Encrypt<br />
* System (web virtual machine): Debian<br />
* Web: Nginx<br />
* System (gaming virtual machine): Ubuntu<br />
* Web: Nginx<br />
<br />
=== Hosted web services ===<br />
<br />
* http://cdn.illwieckz.net/unvanquished CDN mirror<br />
* http://gg.illwieckz.net/dl/unvanquished/pkg in-game download<br />
<br />
=== Hosted game services ===<br />
<br />
* <code>master2.unvanquished.net</code> secondary master server (unvanquished-master)<br />
* <code>gg.illwieckz.net:27960</code> official EU game server</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Chat&diff=8592Chat2024-01-14T13:40:26Z<p>Illwieckz: /* Chat bots */</p>
<hr />
<div>[[Category:Infrastructure]]<br />
== Chat networks ==<br />
<br />
Our main chat platform is '''Libera.Chat''' IRC but there are also Matrix and Discord rooms that are bridged together. Every people from IRC, Matrix or Discord can chat together, read what others write and respond to each others.<br />
<br />
The chat is tantamount to a multiplayer version of Notepad; where ideas are exchanged fast and furiously, words are taken out of context, people misinterpret them, and feelings get hurt. In most cases, we trust people to be kind, helpful, responsible and mature individuals. For everyone else, we have these rules. Remember that access to our channel(s) is a privilege that we provide, not a right. We reserve the right to revoke your privileges. <br />
<br />
===IRC===<br />
<br />
We use IRC ([https://en.wikipedia.org/wiki/IRC Internet Relay Chat]) channels and our {{forums}} to discuss work on the game and help people. Many of the developers, artists and players remain permanently connected in IRC whilst others drop in and out when they can.<br />
<br />
If you're asking for help please remember that everyone lives in different time-zones and can't always be at their computer. You need to stay logged into the channel for generally a few hours until you get a reply. If this does not suit you, our {{forums}} might be better.<br />
<br />
Our IRC channels are:<br />
<br />
* [irc://libera.chat/#unvanquished #unvanquished] ([https://web.libera.chat/?channel=#unvanquished web interface]): the general channel. Often used to get help.<br />
* [irc://libera.chat/#unvanquished-dev #unvanquished-dev] ([https://web.libera.chat/?channel=#unvanquished-dev web interface]): the development channel. Open to everyone.<br />
* [irc://libera.chat/#unvanquished-fr #unvanquished-fr] ([https://web.libera.chat/?channel=#unvanquished-fr web interface]): a French channel. Un canal en français.<br />
<br />
If these channels are even down we have a backup on QuakeNet:<br />
<br />
* [irc://quakenet.org/#unvanquished #unvanquished@quakenet.org] ([https://webchat.quakenet.org/?channels=unvanquished web interface])<br />
<br />
See our [https://unvanquished.net/chat/ chat page] for details.<br />
<br />
=== Matrix ===<br />
<br />
* [https://matrix.to/#/!WnuetRiQZJNBTKwMrF:matrix.org Matrix room]<br />
<br />
The Matrix room is bridged with IRC and Discord.<br />
<br />
There also exist a [https://matrix.to/#/!rWJbPedjfZkWXTvPIc:gnugen.ch IRC Matrix room] for people who may prefer to use Matrix as an IRC client. The integration with IRC will be more polished but using this requires more configuration from the user and the Matrix built-in bridge is less reliable than ours.<br />
<br />
=== Discord ===<br />
<br />
* [https://discord.gg/usuDT9Pyna Discord room]<br />
<br />
The Discord room is bridged with IRC and Matrix.<br />
<br />
==Channel rules==<br />
<br />
By joining the chat you agree to the Unvanquished channel rules:<br />
<br />
===Global rules===<br />
<br />
* '''Irony or mocking towards and from anyone is not allowed, insults are not allowed'''. If this happens, both parties will be asked to avoid talking to and about each other for a given time, to both protect each others and prevent the feeding of the drama.<br />
* '''It is not allowed to threaten someone to death neither to encourage someone to suicide, neither to express hope someone will die in any way.''' This is a bannable offense and action will be taken on sight, no question asked.<br />
* '''Do not post links to illegal material or pornography'''. No exceptions. This is a bannable offense.<br />
* '''Do not spam the channel. This means repeatedly posting meaningless material, or the same thing several times in a row.<br />
* '''Do not abuse bots. Bot spam is not entertaining to anyone that isn’t the direct participant'''. If you have to spam bot commands, use them via <code>/msg</code> to keep them to yourself.<br />
* '''Do not flame each other. Keep it to private messages'''. If it gets out of hand, both sides of the conflict will take a short break.<br />
<br />
===Development channel rules===<br />
<br />
* Stay on-topic! Try to keep discussions going about coding or assets. Offering constructive feedback whenever possible is encouraging and speeds up production.<br />
* NO personal attacks are allowed (flaming someone beyond what would potentially be considered "tongue-in-cheek" criticism). We have NO TOLERANCE for this and you WILL be banned!<br />
* Contact a developer if there’s a problem in the channel.<br />
<br />
These rules will be enforced after either a private or public warning to the offender to give them a chance to stop, followed by a quiet (+q) in the channel, which will be removed when we feel you are ready to participate in the conversation again.<br />
<br />
If you have an issue with another developer that cannot be resolved by a channel operator, please contact Ishq, illwieckz, Viech or cu-kai directly.<br />
<br />
===Platform channel rules===<br />
<br />
Extra rules may apply that are specific to the chat platform you connect to, like the [https://libera.chat/guidelines/ Libera.Chat channel guidelines], the [https://matrix.org/legal/code-of-conduct Matrix code of conduct] or the [https://discord.com/terms Discord terms of service].<br />
<br />
==Chat bots==<br />
<br />
Unvanquished operates various chat bots:<br />
<br />
* {{code|Unvanquished}}: an IRC bot (sometime referred to as {{code|Mantis}} because of the name of the software running it).<p>ℹ️ The Unvanquished bot commands work from IRC, Matrix and Discord.</p><br />
** Automatically announce games when people are playing, telling the map, the server, the amount of players per team…<br />
** Can be queried with the {{code|!list}}.<br />
* {{code|overmind}}: an IRC bot.<br />
** User permission,<br />
** Spam detection,<br />
** Notifications from git repositories, wiki and forums.<br />
* {{code|granger}}: an IRC bot.<p>ℹ️ The granger bot commands only work from IRC.</p><br />
** Commands like {{code|!note <user> <message>}} makes possible to leave a message for someone else (will be printed the next time the user talks).<br />
** Fun behaviors, the bot reads what everything says and sometime decides to participate to conversations by trying to make up phrases all by itself (it's usually ''wrong''), one can request the granger to chat on a topic with the command {{code|!chat about <word1> [word2]}}.<br />
* {{code|dretch}}: the IRC/Matrix/Discord bridge.<br />
** Message forwarding from and to each chat networks.<br />
<br />
See [[Infrastructure/Servers#Hosted chat services]] for details about the various pieces of software running those chat bots.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Template:GPU_compatibility_matrix&diff=8591Template:GPU compatibility matrix2023-12-21T01:44:53Z<p>Illwieckz: update</p>
<hr />
<div><noinclude>{{Documentation}}</noinclude><table class="wikitable gpumatrix"><tr><th class="LS">Brand</th><th class="LD">Vendor</th><th class="LS">Name</th><th class="LD">Code name</th><th class="LS">Micro arch.</th><th class="LS">Launch</th><th class="LL">Bus</th><th class="LD">Host</th><th class="LD">Form</th><th class="LD">Mem. size</th><th class="LS">System</th><th class="LS">Kernel<br/>module</th><th class="LS">OpenGL<br/>driver</th><th class="LL"><span class="LD">Open</span>GL</th><th class="LD">Bones</th><th class="LL LD">Tester</th><th class="LL LD">Availability</th><th class="LD">Updated</th><th class="LD">Unv.</th><th class="LL">Status</th><th class="LL">Preset</th><th class="LL">Resolution</th><th class="LL">Note</th></tr><tr><td class="LS">AMD</td><td class="LD">AMD</td><td class="LS"><span id="AMD_Radeon_Pro_W7600"></span>[[#AMD_Radeon_Pro_W7600|Radeon Pro W7600]]</td><td class="LD">Navi 33</td><td class="LS">RDNA 3.0</td><td class="LS">2023<span class="LD">-08-03</span></td><td class="LL SP-hig">PCIe <span class="LD">4.0 x8</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">8GB</td><td class="LS">Ubuntu 23.10</td><td class="LS">Linux&nbsp;6.5.0<br/>amdgpu</td><td class="LS">Mesa&nbsp;23.2.1<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2023-10-27</td><td class="LD">0.55~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 23.10</td><td class="LS">Linux&nbsp;6.5.0<br/>amdgpu</td><td class="LS">ATI&nbsp;23.20<br/>oglp</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2023-10-27</td><td class="LD">0.55~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">AMD</td><td class="LS"><span id="AMD_Radeon_780M"></span>[[#AMD_Radeon_780M|Radeon 780M]]</td><td class="LD">Navi III IGP</td><td class="LS">RDNA 3.0</td><td class="LS">2023<span class="LD">-01-04</span></td><td class="LL SP-hig">PCIe <span class="LD">4.0 x8</span></td><td class="LD">laptop</td><td class="LD">integrated</td><td class="LD">4GB</td><td class="LS">Fedora</td><td class="LS">Linux&nbsp;6.5.6<br/>amdgpu</td><td class="LS">Mesa&nbsp;23.2.1<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">kai</td><td class="LL LD SA-con">configured</td><td class="LD">2023-12-21</td><td class="LD">0.54.1</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">2256×1504+</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Valve (Steam Deck)</td><td class="LS"><span id="AMD_Custom_0405"></span>[[#AMD_Custom_0405|Custom 0405]]</td><td class="LD">VanGhogh</td><td class="LS">RDNA 2.0</td><td class="LS">2022<span class="LD">-02-25</span></td><td class="LL SP-hig">PCIe <span class="LD">4.0 x8?</span></td><td class="LD">console</td><td class="LD">integrated</td><td class="LD">16GB</td><td class="LS">Ubuntu </td><td class="LS">Linux&nbsp;5.15.0<br/>amdgpu</td><td class="LS">Mesa&nbsp;22.0.5<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2022-10-08</td><td class="LD">0.53.2</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Asus</td><td class="LS"><span id="AMD_Radeon_RX_6800S"></span>[[#AMD_Radeon_RX_6800S|Radeon RX 6800S]]</td><td class="LD">Navi 23</td><td class="LS">RDNA 2.0</td><td class="LS">2022<span class="LD">-01-04</span></td><td class="LL SP-hig">PCIe <span class="LD">4.0 x8</span></td><td class="LD">laptop</td><td class="LD">-</td><td class="LD">8GB</td><td class="LS">Arch</td><td class="LS">Linux&nbsp;5.18.3<br/>amdgpu</td><td class="LS">Mesa&nbsp;22.1.1<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">kai</td><td class="LL LD SA-con">configured</td><td class="LD">2022-06-17</td><td class="LD">0.52.1</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">2560×1600+</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Asus</td><td class="LS"><span id="AMD_Radeon_RX_680M"></span>[[#AMD_Radeon_RX_680M|Radeon RX 680M]]</td><td class="LD">Rembrandt</td><td class="LS">RDNA 2.0</td><td class="LS">2022<span class="LD">-01-04</span></td><td class="LL SP-hig">PCIe <span class="LD">4.0 x8</span></td><td class="LD">laptop</td><td class="LD">integrated</td><td class="LD">-</td><td class="LS">Arch</td><td class="LS">Linux&nbsp;5.18.3<br/>amdgpu</td><td class="LS">Mesa&nbsp;22.1.1<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">kai</td><td class="LL LD SA-con">configured</td><td class="LD">2022-06-17</td><td class="LD">0.52.1</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">2560×1600+</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Apple</td><td class="LS"><span id="AMD_Radeon_Pro_5500M"></span>[[#AMD_Radeon_Pro_5500M|Radeon Pro 5500M]]</td><td class="LD">Navi 14</td><td class="LS">RDNA 1.0</td><td class="LS">2019<span class="LD">-10-07</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">laptop</td><td class="LD">onboard</td><td class="LD">4GB</td><td class="LS">macOS 10.15.7</td><td class="LS">Darwin&nbsp;19.6.0</td><td class="LS">ATI&nbsp;4.4.17</td><td class="LL SS-pas"><span class="LD">Core </span>4.1</td><td class="LD">233</td><td class="LL LD">kai</td><td class="LL LD SA-con">configured</td><td class="LD">2021-04-30</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Gigabyte</td><td class="LS"><span id="AMD_Radeon_RX_5700_XT"></span>[[#AMD_Radeon_RX_5700_XT|Radeon RX 5700 XT]]</td><td class="LD">Navi 10 XT</td><td class="LS">RDNA 1.0</td><td class="LS">2019<span class="LD">-07-07</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">8GB</td><td class="LS">Arch</td><td class="LS">Linux&nbsp;6.0.12<br/>amdgpu</td><td class="LS">Mesa&nbsp;22.2.3<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">kai</td><td class="LL LD SA-con">configured</td><td class="LD">2022-12-19</td><td class="LD">0.53.2</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Windows 10 2004</td><td class="LS">NT&nbsp;19041.508</td><td class="LS">Adrenalin&nbsp;20.7.1</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">kai</td><td class="LL LD SA-con">configured</td><td class="LD">2020-10-12</td><td class="LD">0.51.1</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">macOS 10.15.7</td><td class="LS">Darwin&nbsp;19.6.0</td><td class="LS">ATI&nbsp;3.10.18</td><td class="LL SS-slo">2.1</td><td class="LD">233</td><td class="LL LD">kai</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-10-12</td><td class="LD">0.51.1</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">AMD</td><td class="LS"><span id="AMD_Radeon_RX_Vega_8"></span>[[#AMD_Radeon_RX_Vega_8|Radeon RX Vega 8]]</td><td class="LD">Picasso / Raven2</td><td class="LS">GCN 5.0</td><td class="LS">2019<span class="LD">-07-07</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16?</span></td><td class="LD">workstation</td><td class="LD">integrated</td><td class="LD">2GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.8.0<br/>amdgpu</td><td class="LS">Mesa&nbsp;20.2.6<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2021-10-24</td><td class="LD">0.52.1</td><td class="LL SS-pas">passed</td><td class="LL SP-hig">high</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Atari (VCS 800)</td><td class="LS"><span id="AMD_Radeon_RX_Vega_3_R1606G"></span>[[#AMD_Radeon_RX_Vega_3_R1606G|Radeon RX Vega 3 (R1606G)]]</td><td class="LD">Picasso / Raven2</td><td class="LS">GCN 5.0</td><td class="LS">2019<span class="LD">-04-16</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x8?</span></td><td class="LD">console</td><td class="LD">integrated</td><td class="LD">2GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.8.0<br/>amdgpu</td><td class="LS">Mesa&nbsp;20.2.6<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2021-01-09</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">AMD</td><td class="LS"><span id="AMD_Radeon_VII"></span>[[#AMD_Radeon_VII|Radeon VII]]</td><td class="LD">Vega 20</td><td class="LS">GCN 5.0</td><td class="LS">2019<span class="LD">-02-07</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">16GB</td><td class="LS">Windows 10 2004</td><td class="LS">NT&nbsp;19041.508</td><td class="LS">Adrenalin&nbsp;20.7.1</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">kai</td><td class="LL LD SA-con">configured</td><td class="LD">2020-10-12</td><td class="LD">0.51.1</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">macOS 10.15.7</td><td class="LS">Darwin&nbsp;19.6.0</td><td class="LS">ATI&nbsp;3.10.18</td><td class="LL SS-slo">2.1</td><td class="LD">233</td><td class="LL LD">kai</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-10-12</td><td class="LD">0.51.1</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Sapphire</td><td class="LS"><span id="AMD_Radeon_RX_Vega_56_Nitro"></span>[[#AMD_Radeon_RX_Vega_56_Nitro|Radeon RX Vega 56 Nitro+]]</td><td class="LD">Vega 10 XL</td><td class="LS">GCN 5.0</td><td class="LS">2017<span class="LD">-08-28</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">8GB</td><td class="LS">Mageia 8 beta 1</td><td class="LS">Linux&nbsp;5.7.6<br/>amdgpu</td><td class="LS">Mesa&nbsp;20.1.1<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-los">lost</td><td class="LD">2020-10-07</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">AMD</td><td class="LS"><span id="AMD_Radeon_Instinct_MI25"></span>[[#AMD_Radeon_Instinct_MI25|Radeon Instinct MI25]]</td><td class="LD">Vega 10</td><td class="LS">GCN 5.0</td><td class="LS">2017<span class="LD">-06-20</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">server</td><td class="LD">discrete</td><td class="LD">16GB</td><td class="LS">Ubuntu 22.04.1</td><td class="LS">Linux&nbsp;5.15.0<br/>amdgpu</td><td class="LS">Mesa&nbsp;22.0.5<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2022-11-14</td><td class="LD">0.53.2</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Asus</td><td class="LS"><span id="AMD_Radeon_RX_570"></span>[[#AMD_Radeon_RX_570|Radeon RX 570]]</td><td class="LD">Polaris 20 XL</td><td class="LS">GCN 4.0</td><td class="LS">2017<span class="LD">-04-18</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">4GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>amdgpu</td><td class="LS">Mesa&nbsp;20.0.8<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-for">foreign</td><td class="LD">2020-09-02</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">QNAP (TVS-x73e)</td><td class="LS"><span id="AMD_Radeon_R7_RX-421BD"></span>[[#AMD_Radeon_R7_RX-421BD|Radeon R7 (RX-421BD)]]</td><td class="LD">Carrizo / Wani</td><td class="LS">GCN 3.0</td><td class="LS">2015<span class="LD">-10-21</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16?</span></td><td class="LD">NAS</td><td class="LD">integrated</td><td class="LD">512MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>amdgpu</td><td class="LS">Mesa&nbsp;20.0.8<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-07-21</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">2560×1440</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>amdgpu</td><td class="LS">ATI&nbsp;20.20<br/>oglp</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-20</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">2560×1440</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">MSI</td><td class="LS"><span id="AMD_Radeon_R9_390X_OC_Edition"></span>[[#AMD_Radeon_R9_390X_OC_Edition|Radeon R9 390X OC Edition]]</td><td class="LD">Grenada XT</td><td class="LS">GCN 2.0</td><td class="LS">2015<span class="LD">-06</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16 (2.1)</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">8GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.8.0<br/>amdgpu</td><td class="LS">Mesa&nbsp;21.0.1<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2021-06-04</td><td class="LD">0.52</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04.2</td><td class="LS">Linux&nbsp;5.8.0<br/>amdgpu</td><td class="LS">Mesa&nbsp;21.3.0<br/>zink/radv</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2021-07-15</td><td class="LD">0.52.1</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>amdgpu</td><td class="LS">ATI&nbsp;20.20<br/>oglp</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-27</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 14.04.6</td><td class="LS">Linux&nbsp;3.19.0<br/>fglrx_pci</td><td class="LS">ATI&nbsp;15.302<br/>fglrx</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2021-06-04</td><td class="LD">0.52</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04.2</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-07-05</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Asus</td><td class="LS"><span id="AMD_Radeon_R7_240-2GD5-L"></span>[[#AMD_Radeon_R7_240-2GD5-L|Radeon R7 240-2GD5-L]]</td><td class="LD">Oland PRO</td><td class="LS">GCN 1.0</td><td class="LS">2013<span class="LD">-08-08</span></td><td class="LL SP-hig">PCIe <span class="LD">2.1 x16</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">2GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.5</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-09-23</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">AMD</td><td class="LS"><span id="AMD_FirePro_S10000"></span>[[#AMD_FirePro_S10000|FirePro S10000]]</td><td class="LD">2×Zaphod (Tahiti Pro GL)</td><td class="LS">GCN 1.0</td><td class="LS">2012<span class="LD">-11-12</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">2×3GB</td><td class="LS">Ubuntu 20.04.4 </td><td class="LS">Linux&nbsp;5.13.0<br/>radeon</td><td class="LS">Mesa&nbsp;21.2.5<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.5</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2022-04-09</td><td class="LD">0.53.2</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">HIS</td><td class="LS"><span id="AMD_Radeon_HD_7970_GHZ_Edition"></span>[[#AMD_Radeon_HD_7970_GHZ_Edition|Radeon HD 7970 GHZ Edition]]</td><td class="LD">Tahiti XT2</td><td class="LS">GCN 1.0</td><td class="LS">2012<span class="LD">-06-01</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16 (2.1)</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">3GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>radeonsi</td><td class="LL SS-pas"><span class="LD">Core </span>4.5</td><td class="LD">256</td><td class="LL LD">golyath</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-12-25</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Windows 10 2004</td><td class="LS">NT</td><td class="LS">Adrenalin</td><td class="LL SS-pas"><span class="LD">Core </span>4.5</td><td class="LD">256</td><td class="LL LD">golyath</td><td class="LL LD SA-con">configured</td><td class="LD">2020-12-25</td><td class="LD">0.51.1</td><td class="LL SS-pas">passed</td><td class="LL SP-hig">high</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Asus</td><td class="LS"><span id="AMD_Radeon_HD_7450"></span>[[#AMD_Radeon_HD_7450|Radeon HD 7450]]</td><td class="LD">RV910, Caicos</td><td class="LS">TeraScale 2</td><td class="LS">2012<span class="LD">-01</span></td><td class="LL SP-hig">PCIe <span class="LD">2.1 x16</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">2GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-los">lost</td><td class="LD">2020-07-18</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-low">low</td><td class="LL SP-med">1280×720</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Gigabyte</td><td class="LS"><span id="AMD_Radeon_HD_6990"></span>[[#AMD_Radeon_HD_6990|Radeon HD 6990]]</td><td class="LD">RV970, 2×Antilles XT</td><td class="LS">TeraScale 3</td><td class="LS">2011<span class="LD">-03-08</span></td><td class="LL SP-hig">PCIe <span class="LD">2.1 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">2×2GB</td><td class="LS">Ubuntu 20.04.4</td><td class="LS">Linux&nbsp;5.13.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.4<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2022-03-30</td><td class="LD">0.53~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">XFX</td><td class="LS"><span id="AMD_Radeon_HD_6970"></span>[[#AMD_Radeon_HD_6970|Radeon HD 6970]]</td><td class="LD">RV970, Cayman XT</td><td class="LS">TeraScale 3</td><td class="LS">2010<span class="LD">-12-15</span></td><td class="LL SP-hig">PCIe <span class="LD">2.1 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">2GB</td><td class="LS">Ubuntu 20.04.4</td><td class="LS">Linux&nbsp;5.13.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2022-03-31</td><td class="LD">0.52</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Asus</td><td class="LS"><span id="AMD_Radeon_HD_6950"></span>[[#AMD_Radeon_HD_6950|Radeon HD 6950]]</td><td class="LD">RV970, Cayman PRO</td><td class="LS">TeraScale 3</td><td class="LS">2010<span class="LD">-12-14</span></td><td class="LL SP-hig">PCIe <span class="LD">2.1 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">2GB</td><td class="LS">Ubuntu 22.04.3</td><td class="LS">Linux&nbsp;6.2.0<br/>radeon</td><td class="LS">Mesa&nbsp;23.0.4</td><td class="LL SS-pas"><span class="LD">Core </span>4.5</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2023-10-27</td><td class="LD">0.55~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">AMD</td><td class="LD">Dell</td><td class="LS"><span id="AMD_FirePro_3D_V4800"></span>[[#AMD_FirePro_3D_V4800|FirePro 3D V4800]]</td><td class="LD">RV830, Redwood XT GL</td><td class="LS">TeraScale 2</td><td class="LS">2010<span class="LD">-04-26</span></td><td class="LL SP-hig">PCIe <span class="LD">2.1 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">1GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-09-04</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">2560×1440</td><td class="LL">-</td></tr><tr><td class="LS">ATi</td><td class="LD">Gigabyte</td><td class="LS"><span id="ATi_Radeon_HD_5870_Eyefinity_6"></span>[[#ATi_Radeon_HD_5870_Eyefinity_6|Radeon HD 5870 Eyefinity 6]]</td><td class="LD">RV870, Cypress XT</td><td class="LS">TeraScale 2</td><td class="LS">2010<span class="LD">-03-11</span></td><td class="LL SP-hig">PCIe <span class="LD">2.1 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">2GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-07-08</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">ATi</td><td class="LD">MSI</td><td class="LS"><span id="ATi_Radeon_HD_5450"></span>[[#ATi_Radeon_HD_5450|Radeon HD 5450]]</td><td class="LD">RV810, Cedar</td><td class="LS">TeraScale 2</td><td class="LS">2010<span class="LD">-02-04</span></td><td class="LL SP-hig">PCIe <span class="LD">2.1 x16</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">1GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-08-04</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-low">low</td><td class="LL SP-med">1280×1024</td><td class="LL">-</td></tr><tr><td class="LS">ATi</td><td class="LD">Asus</td><td class="LS"><span id="ATi_Radeon_HD_5670"></span>[[#ATi_Radeon_HD_5670|Radeon HD 5670]]</td><td class="LD">RV830, Redwood XT</td><td class="LS">TeraScale 2</td><td class="LS">2010<span class="LD">-01-14</span></td><td class="LL SP-hig">PCIe <span class="LD">2.1 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">1GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-los">lost</td><td class="LD">2020-07-18</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-low">low</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">ATi</td><td class="LD">ATi</td><td class="LS"><span id="ATi_Radeon_HD_5970"></span>[[#ATi_Radeon_HD_5970|Radeon HD 5970]]</td><td class="LD">RV870, 2×Hemlock XT</td><td class="LS">TeraScale 2</td><td class="LS">2009<span class="LD">-11-18</span></td><td class="LL SP-hig">PCIe <span class="LD">2.1 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">2×1GB</td><td class="LS">Ubuntu 20.04.4</td><td class="LS">Linux&nbsp;5.13.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2022-04-01</td><td class="LD">0.53~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">ATi</td><td class="LD">Sapphire</td><td class="LS"><span id="ATi_Radeon_HD_4890_Vapor-X"></span>[[#ATi_Radeon_HD_4890_Vapor-X|Radeon HD 4890 Vapor-X]]</td><td class="LD">RV790 XT</td><td class="LS">TeraScale 1</td><td class="LS">2009<span class="LD">-04-02</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">1GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-07-07</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">fakefps</td></tr><tr><td class="LS">ATi</td><td class="LD">HIS</td><td class="LS"><span id="ATi_Radeon_HD_4350"></span>[[#ATi_Radeon_HD_4350|Radeon HD 4350]]</td><td class="LD">RV710</td><td class="LS">TeraScale 1</td><td class="LS">2008<span class="LD">-09-30</span></td><td class="LL SP-low">PCI</td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">512MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-10-21</td><td class="LD">0.52~</td><td class="LL SS-pla">playable</td><td class="LL SP-low">low</td><td class="LL SP-med">1280×720</td><td class="LL">-</td></tr><tr><td class="LS">ATi</td><td class="LD">HIS</td><td class="LS"><span id="ATi_Radeon_HD_4670_IceQ"></span>[[#ATi_Radeon_HD_4670_IceQ|Radeon HD 4670 IceQ]]</td><td class="LD">RV730 XT</td><td class="LS">TeraScale 1</td><td class="LS">2008<span class="LD">-09-10</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">1GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-11-29</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">ATi</td><td class="LD">HIS</td><td class="LS"><span id="ATi_Radeon_HD_4670_IceQ"></span>[[#ATi_Radeon_HD_4670_IceQ|Radeon HD 4670 IceQ]]</td><td class="LD">RV730 XT</td><td class="LS">TeraScale 1</td><td class="LS">2008<span class="LD">-09-10</span></td><td class="LL SP-med">AGP <span class="LD">2.0 8x</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">1GB</td><td class="LS">Ubuntu 20.04.2</td><td class="LS">Linux&nbsp;5.8.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.2.6<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2021-06-03</td><td class="LD">0.52</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">ATi</td><td class="LD">HP</td><td class="LS"><span id="ATi_Radeon_HD_3650"></span>[[#ATi_Radeon_HD_3650|Radeon HD 3650]]</td><td class="LD">RV635 PRO</td><td class="LS">TeraScale 1</td><td class="LS">2008<span class="LD">-01-23</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">256MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2020-07-05</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-low">lowest</td><td class="LL SP-med">1280×720</td><td class="LL">nohyperz</td></tr><tr><td class="LS">ATi</td><td class="LD">Sapphire</td><td class="LS"><span id="ATi_Radeon_HD_2600_PRO"></span>[[#ATi_Radeon_HD_2600_PRO|Radeon HD 2600 PRO]]</td><td class="LD">RV630</td><td class="LS">TeraScale 1</td><td class="LS">2007<span class="LD">-06-28</span></td><td class="LL SP-med">AGP <span class="LD">2.0 8x</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">512MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r600</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2020-07-18</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-low">lowest</td><td class="LL SP-med">1280×720</td><td class="LL">nohyperz</td></tr><tr><td class="LS">ATi</td><td class="LD">Palit</td><td class="LS"><span id="ATi_Radeon_X550_XT"></span>[[#ATi_Radeon_X550_XT|Radeon X550 XT]]</td><td class="LD">RV410 alto</td><td class="LS">R400</td><td class="LS">2007<span class="LD">-01-24</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">256MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r300</td><td class="LL SS-slo">2.1</td><td class="LD">41</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-11-24</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">lowtex, slowmodel</td></tr><tr><td class="LS">ATi</td><td class="LD">ATi</td><td class="LS"><span id="ATi_Radeon_X1050"></span>[[#ATi_Radeon_X1050|Radeon X1050]]</td><td class="LD">RV370 hari</td><td class="LS">R300</td><td class="LS">2006<span class="LD">-12-07</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">128MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r300</td><td class="LL SS-slo">2.1</td><td class="LD">41</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-10-05</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">lowtex, slowmodel, tinyalu</td></tr><tr><td class="LS">ATi</td><td class="LD">Sapphire</td><td class="LS"><span id="ATi_Radeon_X1950_PRO"></span>[[#ATi_Radeon_X1950_PRO|Radeon X1950 PRO]]</td><td class="LD">RV570</td><td class="LS">R500</td><td class="LS">2006<span class="LD">-10-25</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">512MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r300</td><td class="LL SS-slo">2.1</td><td class="LD">41</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-11-28</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">low</td><td class="LL SP-ult">1920×1080</td><td class="LL">lowsky, slowmodel</td></tr><tr><td class="LS">ATi</td><td class="LD">MSI</td><td class="LS"><span id="ATi_Radeon_X1950_PRO"></span>[[#ATi_Radeon_X1950_PRO|Radeon X1950 PRO]]</td><td class="LD">RV570</td><td class="LS">R500</td><td class="LS">2006<span class="LD">-10-25</span></td><td class="LL SP-med">AGP <span class="LD">2.0 8x</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">512MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r300</td><td class="LL SS-slo">2.1</td><td class="LD">41</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-08-25</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">low</td><td class="LL SP-ult">1920×1080</td><td class="LL">lowsky, slowmodel</td></tr><tr><td class="LS">ATi</td><td class="LD">GeCube</td><td class="LS"><span id="ATi_Radeon_X550_HyperMemory"></span>[[#ATi_Radeon_X550_HyperMemory|Radeon X550 HyperMemory]]</td><td class="LD">RV370 hari</td><td class="LS">R300</td><td class="LS">2005<span class="LD">-07-21</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x16</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">128MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r300</td><td class="LL SS-slo">2.1</td><td class="LD">41</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-10-05</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">lowtex, slowmodel, tinyalu</td></tr><tr><td class="LS">ATi</td><td class="LD">ATi</td><td class="LS"><span id="ATi_Radeon_X300"></span>[[#ATi_Radeon_X300|Radeon X300]]</td><td class="LD">RV370 hari</td><td class="LS">R300</td><td class="LS">2004<span class="LD">-09-01</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x16</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">64MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r300</td><td class="LL SS-slo">2.1</td><td class="LD">41</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-10-05</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">lowtex, slowmodel, tinyalu</td></tr><tr><td class="LS">ATi</td><td class="LD">PowerColor</td><td class="LS"><span id="ATi_Radeon_9200_SE_R92LE"></span>[[#ATi_Radeon_9200_SE_R92LE|Radeon 9200 SE R92LE]]</td><td class="LD">RV280 argus</td><td class="LS">R200</td><td class="LS">2003<span class="LD">-04-01</span></td><td class="LL SP-med">AGP <span class="LD">2.0 8x</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">128MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r200</td><td class="LL SS-mis">1.3</td><td class="LD">-</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-08-09</td><td class="LD">0.52~</td><td class="LL SS-mis">missing</td><td class="LL">N/A</td><td class="LL">N/A</td><td class="LL">-</td></tr><tr><td class="LS">ATi</td><td class="LD">ATi</td><td class="LS"><span id="ATi_Radeon_9500"></span>[[#ATi_Radeon_9500|Radeon 9500]]</td><td class="LD">R300 khan</td><td class="LS">R300</td><td class="LS">2002<span class="LD">-10-24</span></td><td class="LL SP-med">AGP <span class="LD">2.0 8x</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">128MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.0.8<br/>r300</td><td class="LL SS-slo">2.1</td><td class="LD">41</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-10-10</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">lowtex, slowmodel, tinyalu</td></tr><tr><td class="LS">ATi</td><td class="LD">Hercules</td><td class="LS"><span id="ATi_Radeon_9700_PRO"></span>[[#ATi_Radeon_9700_PRO|Radeon 9700 PRO]]</td><td class="LD">R300 khan</td><td class="LS">R300</td><td class="LS">2002<span class="LD">-07-18</span></td><td class="LL SP-med">AGP <span class="LD">2.0 8x</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">128MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.8.0<br/>radeon</td><td class="LS">Mesa&nbsp;20.2.6<br/>r300</td><td class="LL SS-slo">2.1</td><td class="LD">41</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2021-05-06</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">lowtex, slowmodel, tinyalu</td></tr><tr><td class="LS">ATi</td><td class="LD">HIS</td><td class="LS"><span id="ATi_Radeon_7000_VE_Excalibur"></span>[[#ATi_Radeon_7000_VE_Excalibur|Radeon 7000 VE Excalibur]]</td><td class="LD">RV100 piglet</td><td class="LS">R100</td><td class="LS">2001<span class="LD">-02-19</span></td><td class="LL SP-med">AGP <span class="LD">2.04x</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">32MB</td><td class="LS">Ubuntu 14.04.6</td><td class="LS">Linux&nbsp;4.4.0<br/>radeon</td><td class="LS">Mesa&nbsp;10.1.3<br/>r100</td><td class="LL SS-mis">No</td><td class="LD">-</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2022-02-03</td><td class="LD">0.52~</td><td class="LL SS-mis">missing</td><td class="LL">N/A</td><td class="LL">N/A</td><td class="LL">-</td></tr><tr><th class="LS">Brand</th><th class="LD">Vendor</th><th class="LS">Name</th><th class="LD">Code name</th><th class="LS">Micro arch.</th><th class="LS">Launch</th><th class="LL">Bus</th><th class="LD">Host</th><th class="LD">Form</th><th class="LD">Mem. size</th><th class="LS">System</th><th class="LS">Kernel<br/>module</th><th class="LS">OpenGL<br/>driver</th><th class="LL"><span class="LD">Open</span>GL</th><th class="LD">Bones</th><th class="LL LD">Tester</th><th class="LL LD">Availability</th><th class="LD">Updated</th><th class="LD">Unv.</th><th class="LL">Status</th><th class="LL">Preset</th><th class="LL">Resolution</th><th class="LL">Note</th></tr><tr><td class="LS">Intel</td><td class="LD">Dell</td><td class="LS"><span id="Intel_UHD_620_rev.2_i7-10610U"></span>[[#Intel_UHD_620_rev.2_i7-10610U|UHD 620 rev.2 (i7-10610U)]]</td><td class="LD">Comet Lake</td><td class="LS">Gen10 GT2</td><td class="LS">2020<span class="LD">-Q2</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x1?</span></td><td class="LD">laptop</td><td class="LD">integrated</td><td class="LD">3GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">quantix</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-12</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">2560×1440</td><td class="LL">-</td></tr><tr><td class="LS">Intel</td><td class="LD">Intel</td><td class="LS"><span id="Intel_UHD_620_i5-10210U"></span>[[#Intel_UHD_620_i5-10210U|UHD 620 (i5-10210U)]]</td><td class="LD">Comet Lake</td><td class="LS">Gen10 GT2</td><td class="LS">2019<span class="LD">-Q3</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x1?</span></td><td class="LD">minipc</td><td class="LD">integrated</td><td class="LD">3GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-los">lost</td><td class="LD">2020-07-09</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">2560×1440</td><td class="LL">-</td></tr><tr><td class="LS">Intel</td><td class="LD">Clevo</td><td class="LS"><span id="Intel_HD_530_i7-6700HQ"></span>[[#Intel_HD_530_i7-6700HQ|HD 530 (i7-6700HQ)]]</td><td class="LD">Skylake</td><td class="LS">Gen9 GT2</td><td class="LS">2015<span class="LD">-Q3</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x1?</span></td><td class="LD">laptop</td><td class="LD">integrated</td><td class="LD">3GB</td><td class="LS">Manjaro</td><td class="LS">Linux&nbsp;5.12.0<br/>i915</td><td class="LS">Mesa&nbsp;21.0.3<br/>i965</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">poVoq</td><td class="LL LD SA-con">configured</td><td class="LD">2020-04-26</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Intel</td><td class="LD">Gigabyte</td><td class="LS"><span id="Intel_HD_520_i3-6100U"></span>[[#Intel_HD_520_i3-6100U|HD 520 (i3-6100U)]]</td><td class="LD">Skylake</td><td class="LS">Gen9 GT2</td><td class="LS">2015<span class="LD">-Q3</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x1?</span></td><td class="LD">minipc</td><td class="LD">integrated</td><td class="LD">3GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-los">lost</td><td class="LD">2020-09-05</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Intel</td><td class="LD">Lenovo (Thinkpad W541)</td><td class="LS"><span id="Intel_HD_4600_i7-4810MQ"></span>[[#Intel_HD_4600_i7-4810MQ|HD 4600 (i7-4810MQ)]]</td><td class="LD">Haswell</td><td class="LS">Gen7 GT2</td><td class="LS">2014<span class="LD">-Q1</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x1?</span></td><td class="LD">laptop</td><td class="LD">integrated</td><td class="LD">2GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-pas"><span class="LD">Core </span>4.5</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2020-08-07</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Intel</td><td class="LD">Lenovo (Thinkpad T440p)</td><td class="LS"><span id="Intel_HD_4600_i5-4300M"></span>[[#Intel_HD_4600_i5-4300M|HD 4600 (i5-4300M)]]</td><td class="LD">Haswell</td><td class="LS">Gen7 GT2</td><td class="LS">2013<span class="LD">-Q4</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x1?</span></td><td class="LD">laptop</td><td class="LD">integrated</td><td class="LD">1536MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-pas"><span class="LD">Core </span>4.5</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-07</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-med">1366×768</td><td class="LL">-</td></tr><tr><td class="LS">Intel</td><td class="LD">Asus</td><td class="LS"><span id="Intel_HD_4000_i5-3337U"></span>[[#Intel_HD_4000_i5-3337U|HD 4000 (i5-3337U)]]</td><td class="LD">Ivy Bridge</td><td class="LS">Gen7 GT2</td><td class="LS">2013<span class="LD">-Q1</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x1?</span></td><td class="LD">laptop</td><td class="LD">integrated</td><td class="LD">1536MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-pas"><span class="LD">Core </span>4.2</td><td class="LD">256</td><td class="LL LD">quantix</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-12</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Intel</td><td class="LD">Lenovo (Thinkpad W530)</td><td class="LS"><span id="Intel_HD_4000_i7-3740QM"></span>[[#Intel_HD_4000_i7-3740QM|HD 4000 (i7-3740QM)]]</td><td class="LD">Ivy Bridge</td><td class="LS">Gen7 GT2</td><td class="LS">2012<span class="LD">-Q2</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x1?</span></td><td class="LD">laptop</td><td class="LD">integrated</td><td class="LD">1536MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-pas"><span class="LD">Core </span>4.2</td><td class="LD">256</td><td class="LL LD">mary</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-21</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Intel</td><td class="LD">Dell (Precision T1650)</td><td class="LS"><span id="Intel_HD_P4000_Xeon_E3-1275V2"></span>[[#Intel_HD_P4000_Xeon_E3-1275V2|HD P4000 (Xeon E3-1275V2)]]</td><td class="LD">Ivy Bridge</td><td class="LS">Gen7 GT2</td><td class="LS">2012<span class="LD">-Q2</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x1?</span></td><td class="LD">workstation</td><td class="LD">integrated</td><td class="LD">1536MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-pas"><span class="LD">Core </span>4.2</td><td class="LD">256</td><td class="LL LD">dom</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-09-04</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Intel</td><td class="LD">Dell (Precision T1600)</td><td class="LS"><span id="Intel_HD_2000_Xeon_E3-1225"></span>[[#Intel_HD_2000_Xeon_E3-1225|HD 2000 (Xeon E3-1225)]]</td><td class="LD">Sandy Bridge</td><td class="LS">Gen6 GT1</td><td class="LS">2011<span class="LD">-Q2</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x1?</span></td><td class="LD">workstation</td><td class="LD">integrated</td><td class="LD">1536MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">dom</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-09-04</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-low">low</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Intel</td><td class="LD">Toshiba</td><td class="LS"><span id="Intel_GM45_Pentium_U4100"></span>[[#Intel_GM45_Pentium_U4100|GM45 (Pentium U4100)]]</td><td class="LD">Cantigua</td><td class="LS">GMA Gen4 (GM45)</td><td class="LS">2009<span class="LD">-Q3</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x1?</span></td><td class="LD">workstation</td><td class="LD">onboard</td><td class="LD">1536MB</td><td class="LS">Debian 10.10</td><td class="LS">Linux&nbsp;4.19.0<br/>i915</td><td class="LS">Mesa&nbsp;18.3.6<br/>i964</td><td class="LL SS-slo">2.1</td><td class="LD">256</td><td class="LL LD">th2otime</td><td class="LL LD SA-con">configured</td><td class="LD">2021-07-22</td><td class="LD">0.52.0</td><td class="LL SS-slo">slow</td><td class="LL SP-low">low</td><td class="LL SP-low">800×600</td><td class="LL">slowmodel</td></tr><tr><td class="LS">Intel</td><td class="LD">Lenovo</td><td class="LS"><span id="Intel_GMA_4500_Pentium_E5200"></span>[[#Intel_GMA_4500_Pentium_E5200|GMA 4500 (Pentium E5200)]]</td><td class="LD">Eaglelake</td><td class="LS">GMA Gen4 (Q45)</td><td class="LS">2008<span class="LD">-Q3</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x1?</span></td><td class="LD">workstation</td><td class="LD">onboard</td><td class="LD">1536MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-slo">2.1</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-08</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">slowmodel</td></tr><tr><td class="LS">Intel</td><td class="LD">HP</td><td class="LS"><span id="Intel_GMA_3100_Pentium_E5200"></span>[[#Intel_GMA_3100_Pentium_E5200|GMA 3100 (Pentium E5200)]]</td><td class="LD">Bearlake</td><td class="LS">GMA Gen3 (G33)</td><td class="LS">2008<span class="LD">-Q3</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x1?</span></td><td class="LD">workstation</td><td class="LD">onboard</td><td class="LD">384MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-slo">2.1</td><td class="LD">-</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2021-07-14</td><td class="LD">0.52.1</td><td class="LL SS-mis">missing</td><td class="LL">N/A</td><td class="LL">N/A</td><td class="LL">nohalfloatvertex</td></tr><tr><td class="LS">Intel</td><td class="LD">Dell</td><td class="LS"><span id="Intel_GMA_3100_Pentium_E2200"></span>[[#Intel_GMA_3100_Pentium_E2200|GMA 3100 (Pentium E2200)]]</td><td class="LD">Bearlake</td><td class="LS">GMA Gen3 (82Q35)</td><td class="LS">2007<span class="LD">-Q4</span></td><td class="LL SP-hig">PCIe <span class="LD">1.1 x16</span></td><td class="LD">workstation</td><td class="LD">onboard</td><td class="LD">-</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.4<br/>i965</td><td class="LL SS-slo">2.1</td><td class="LD">-</td><td class="LL LD">papap</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2021-07-08</td><td class="LD">0.52.1</td><td class="LL SS-mis">missing</td><td class="LL">N/A</td><td class="LL">N/A</td><td class="LL">nohalfloatvertex</td></tr><tr><td class="LS">Intel</td><td class="LD">Lenovo (Thinkpad X61T)</td><td class="LS"><span id="Intel_GMA_X3100_Core_2_Duo_L7500"></span>[[#Intel_GMA_X3100_Core_2_Duo_L7500|GMA X3100 (Core 2 Duo L7500)]]</td><td class="LD">Crestline</td><td class="LS">GMA Gen4 (GM965)</td><td class="LS">2006<span class="LD">-Q3</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x1?</span></td><td class="LD">laptop</td><td class="LD">onboard</td><td class="LD">384MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>i915</td><td class="LS">Mesa&nbsp;20.0.8<br/>i965</td><td class="LL SS-slo">2.1</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2020-07-07</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">lowtex, slowmodel</td></tr><tr><th class="LS">Brand</th><th class="LD">Vendor</th><th class="LS">Name</th><th class="LD">Code name</th><th class="LS">Micro arch.</th><th class="LS">Launch</th><th class="LL">Bus</th><th class="LD">Host</th><th class="LD">Form</th><th class="LD">Mem. size</th><th class="LS">System</th><th class="LS">Kernel<br/>module</th><th class="LS">OpenGL<br/>driver</th><th class="LL"><span class="LD">Open</span>GL</th><th class="LD">Bones</th><th class="LL LD">Tester</th><th class="LL LD">Availability</th><th class="LD">Updated</th><th class="LD">Unv.</th><th class="LL">Status</th><th class="LL">Preset</th><th class="LL">Resolution</th><th class="LL">Note</th></tr><tr><td class="LS">Nvidia</td><td class="LD">PNY</td><td class="LS"><span id="Nvidia_GeForce_GTX_1050_Ti"></span>[[#Nvidia_GeForce_GTX_1050_Ti|GeForce GTX 1050 Ti]]</td><td class="LD">NV137, GP107-400-A1 </td><td class="LS">Pascal</td><td class="LS">2016<span class="LD">-10-25</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">4GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.0.8<br/>nvc0</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">quantix</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-12</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;440.100<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">233</td><td class="LL LD">quantix</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-12</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Gigabyte</td><td class="LS"><span id="Nvidia_GeForce_GTX_1060"></span>[[#Nvidia_GeForce_GTX_1060|GeForce GTX 1060]]</td><td class="LD">NV136, GP106-300-A1</td><td class="LS">Pascal</td><td class="LS">2016<span class="LD">-08-18</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">3GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.0.8<br/>nvc0</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-los">lost</td><td class="LD">2020-07-18</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;440.100<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">233</td><td class="LL LD">illwieckz</td><td class="LL LD SA-los">lost</td><td class="LD">2020-07-18</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-ult">ultra</td><td class="LL SP-ult">3840×2160</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Lenovo (Thinkpad W541)</td><td class="LS"><span id="Nvidia_Quadro_K1100M"></span>[[#Nvidia_Quadro_K1100M|Quadro K1100M]]</td><td class="LD">NVE7, GK107GLM</td><td class="LS">Kepler</td><td class="LS">2013<span class="LD">-07-23</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">laptop</td><td class="LD">onboard</td><td class="LD">2GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.0.8<br/>nvc0</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-07-11</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-low">low</td><td class="LL SP-med">1280×720</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;390.138<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">233</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-07-11</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Asus</td><td class="LS"><span id="Nvidia_GeForce_GT_740M"></span>[[#Nvidia_GeForce_GT_740M|GeForce GT 740M]]</td><td class="LD">NVE7, GK107M</td><td class="LS">Kepler</td><td class="LS">2013<span class="LD">-04-01</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">laptop</td><td class="LD">onboard</td><td class="LD">2GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.0.8<br/>nvc0</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">quantix</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-12</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-med">1366×768</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;440.100<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">233</td><td class="LL LD">quantix</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-12</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Asus</td><td class="LS"><span id="Nvidia_GeForce_GTX_650"></span>[[#Nvidia_GeForce_GTX_650|GeForce GTX 650]]</td><td class="LD">NVE7, GK107</td><td class="LS">Kepler</td><td class="LS">2012<span class="LD">-09-13</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">2GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.0.8<br/>nvc0</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-los">lost</td><td class="LD">2020-07-18</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-med">1280×720</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;440.100<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">233</td><td class="LL LD">illwieckz</td><td class="LL LD SA-los">lost</td><td class="LD">2020-07-18</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-hig">high</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Lenovo (Thinkpad W530)</td><td class="LS"><span id="Nvidia_Quadro_K2000M"></span>[[#Nvidia_Quadro_K2000M|Quadro K2000M]]</td><td class="LD">NVE7, GK107GLM</td><td class="LS">Kepler</td><td class="LS">2012<span class="LD">-06-01</span></td><td class="LL SP-hig">PCIe <span class="LD">3.0 x16</span></td><td class="LD">laptop</td><td class="LD">onboard</td><td class="LD">1536MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.0.8<br/>nvc0</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">mary</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-21</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;390.138<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">233</td><td class="LL LD">mary</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-08-21</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-hig">high</td><td class="LL SP-ult">1920×1080</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Asus</td><td class="LS"><span id="Nvidia_GeForce_GT_610_GT_520"></span>[[#Nvidia_GeForce_GT_610_GT_520|GeForce GT 610/GT 520]]</td><td class="LD">NVD9, GF119-300-A1</td><td class="LS">Fermi</td><td class="LS">2012<span class="LD">-05-15</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x16</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">1GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.0.8<br/>nvc0</td><td class="LL SS-pas"><span class="LD">Core </span>4.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-los">lost</td><td class="LD">2020-07-11</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-low">low</td><td class="LL SP-med">1280×720</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;390.138<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">233</td><td class="LL LD">illwieckz</td><td class="LL LD SA-los">lost</td><td class="LD">2020-07-11</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-med">1280×720</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Apple</td><td class="LS"><span id="Nvidia_Geforce_GT_640M"></span>[[#Nvidia_Geforce_GT_640M|Geforce GT 640M]]</td><td class="LD">NV108, GK208</td><td class="LS">Kepler</td><td class="LS">2012<span class="LD">-03-22</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x16</span></td><td class="LD">workstation</td><td class="LD">onboard</td><td class="LD">512MB</td><td class="LS">macOS 10.15.7</td><td class="LS">Darwin&nbsp;19.6.0</td><td class="LS">Nvidia&nbsp;14.0.2</td><td class="LL SS-pas"><span class="LD">Core </span>4.1</td><td class="LD">233</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2021-06-03</td><td class="LD">0.52</td><td class="LL SS-pas">passed</td><td class="LL SP-hig">high</td><td class="LL SP-ult">1920×1080</td><td class="LL">fakefps</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Nvidia</td><td class="LS"><span id="Nvidia_Quadro_NVS_300"></span>[[#Nvidia_Quadro_NVS_300|Quadro NVS 300]]</td><td class="LD">NVA8, GT218</td><td class="LS">Tesla 2.0</td><td class="LS">2011<span class="LD">-01-08</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x16</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">512MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.0.8<br/>nv50</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-09-04</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-low">lowest</td><td class="LL SP-low">800×600</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;340.108<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">233</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-09-04</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-low">low</td><td class="LL SP-med">1280×720</td><td class="LL">nogather</td></tr><tr><td class="LS">Nvidia</td><td class="LD">PNY</td><td class="LS"><span id="Nvidia_Geforce_GTX_460"></span>[[#Nvidia_Geforce_GTX_460|Geforce GTX 460]]</td><td class="LD">NVC4, GF104-300-KB-A1 </td><td class="LS">Fermi</td><td class="LS">2010<span class="LD">-07-12</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">1GB</td><td class="LS">Mint 20.01</td><td class="LS">Linux&nbsp;5.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;390.143</td><td class="LL SS-pas"><span class="LD">Core </span>4.6</td><td class="LD">233</td><td class="LL LD">RaFaL</td><td class="LL LD SA-con">configured</td><td class="LD">2021-05-11</td><td class="LD">0.52</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-med">1280×720</td><td class="LL">hickups</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Gainward</td><td class="LS"><span id="Nvidia_GeForce_8400_GS_rev.3"></span>[[#Nvidia_GeForce_8400_GS_rev.3|GeForce 8400 GS rev.3]]</td><td class="LD">NVA8, GT218</td><td class="LS">Tesla 2.0</td><td class="LS">2010<span class="LD">-07-12</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x16</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">512MB</td><td class="LS">Debian 10.5</td><td class="LS">Linux&nbsp;4.19.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;340.108<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">233</td><td class="LL LD">freem</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-09-05</td><td class="LD">0.51.1</td><td class="LL SS-pas">passed</td><td class="LL SP-low">low</td><td class="LL SP-low">1024×768</td><td class="LL">nogather</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Lenovo</td><td class="LS"><span id="Nvidia_Quadro_880M"></span>[[#Nvidia_Quadro_880M|Quadro 880M]]</td><td class="LD">NVA5, GT216GLM</td><td class="LS">Tesla 2.0</td><td class="LS">2010<span class="LD">-01-07</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x16</span></td><td class="LD">laptop</td><td class="LD">onboard</td><td class="LD">1GB</td><td class="LS">Ubuntu 20.04.2</td><td class="LS">Linux&nbsp;5.8.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.2.6<br/>nv50</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">asellia</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2021-07-28</td><td class="LD">0.52.1</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-med">1280×720</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04.2</td><td class="LS">Nvidia&nbsp;340.108<br/>nvidia</td><td class="LS">Nvidia&nbsp;340.108<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">233</td><td class="LL LD">asellia</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2021-07-28</td><td class="LD">0.52.1</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-med">1280×720</td><td class="LL">nogather</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Asus</td><td class="LS"><span id="Nvidia_GeForce_210_Silent"></span>[[#Nvidia_GeForce_210_Silent|GeForce 210 Silent]]</td><td class="LD">NVA8, GT218-325-B1</td><td class="LS">Tesla 2.0</td><td class="LS">2009<span class="LD">-08-12</span></td><td class="LL SP-hig">PCIe <span class="LD">2.0 x16</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">1GB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.0.8<br/>nv50</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-07-11</td><td class="LD">0.52~</td><td class="LL SS-pla">playable</td><td class="LL SP-low">low</td><td class="LL SP-med">1280×720</td><td class="LL">lowtex</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Nvidia&nbsp;340.108<br/>nvidia</td><td class="LS">Nvidia&nbsp;340.108<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">233</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-07-11</td><td class="LD">0.52~</td><td class="LL SS-pas">passed</td><td class="LL SP-low">low</td><td class="LL SP-med">1280×720</td><td class="LL">nogather</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Asus</td><td class="LS"><span id="Nvidia_GeForce_8400_GS_rev.2"></span>[[#Nvidia_GeForce_8400_GS_rev.2|GeForce 8400 GS rev.2]]</td><td class="LD">NV98, G98</td><td class="LS">Tesla 1.0</td><td class="LS">2007<span class="LD">-12-10</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x16</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">512MB</td><td class="LS">Debian 10.5</td><td class="LS">Linux&nbsp;4.19.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;340.108<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">233</td><td class="LL LD">freem</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-09-05</td><td class="LD">0.51.1</td><td class="LL SS-pas">passed</td><td class="LL SP-low">low</td><td class="LL SP-low">1024×768</td><td class="LL">nogather</td></tr><tr><td class="LS">Nvidia</td><td class="LD">PNY</td><td class="LS"><span id="Nvidia_GeForce_8400_GS_rev.2"></span>[[#Nvidia_GeForce_8400_GS_rev.2|GeForce 8400 GS rev.2]]</td><td class="LD">NV98, G98</td><td class="LS">Tesla 1.0</td><td class="LS">2007<span class="LD">-12-10</span></td><td class="LL SP-low">PCI</td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">512MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.0.8<br/>nv30</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-09-25</td><td class="LD">0.52~</td><td class="LL SS-pla">playable</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-low">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;340.108<br/>nvidia</td><td class="LL SS-pas"><span class="LD">Core </span>3.3</td><td class="LD">233</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2021-05-31</td><td class="LD">0.52</td><td class="LL SS-pas">passed</td><td class="LL SP-med">medium</td><td class="LL SP-low">800×600</td><td class="LL">nogather</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Dell (Optiplex 740)</td><td class="LS"><span id="Nvidia_GeForce_6150_LE_nForce_430"></span>[[#Nvidia_GeForce_6150_LE_nForce_430|GeForce 6150 LE + nForce 430]]</td><td class="LD">NV4C, MCP61</td><td class="LS">Curie</td><td class="LS">2006<span class="LD">-06</span></td><td class="LL SP-med">H<span class="LD">yper</span>T<span class="LD">ransport</span></td><td class="LD">workstation</td><td class="LD">onboard</td><td class="LD">128MB</td><td class="LS">Ubuntu 22.04.1</td><td class="LS">Linux&nbsp;5.15.0<br/>nouveau</td><td class="LS">Mesa&nbsp;23.0.0<br/>nv30</td><td class="LL SS-slo">2.1</td><td class="LD">-</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2022-11-26</td><td class="LD">0.54~</td><td class="LL SS-slo">slow</td><td class="LL">-</td><td class="LL">-</td><td class="LL">extfbo, mesamain</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-med">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 16.04.7</td><td class="LS">Linux&nbsp;4.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;304.134<br/>nvidia</td><td class="LL SS-slo">2.1</td><td class="LD">41</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-09-30</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">nvidiagarbage, slowmodel, norgtc</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Asus</td><td class="LS"><span id="Nvidia_GeForce_7500_LE"></span>[[#Nvidia_GeForce_7500_LE|GeForce 7500 LE]]</td><td class="LD">NV46, G72</td><td class="LS">Curie</td><td class="LS">2006<span class="LD"></span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x16</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">256MB</td><td class="LS">Ubuntu 22.04.1</td><td class="LS">Linux&nbsp;5.15.0<br/>nouveau</td><td class="LS">Mesa&nbsp;23.0.0<br/>nv30</td><td class="LL SS-slo">2.1</td><td class="LD">-</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2022-11-26</td><td class="LD">0.54~</td><td class="LL SS-slo">slow</td><td class="LL">-</td><td class="LL">-</td><td class="LL">extfbo, mesamain</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 16.04.7</td><td class="LS">Linux&nbsp;4.11.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;304.134<br/>nvidia</td><td class="LL SS-slo">2.1</td><td class="LD">41</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2021-06-03</td><td class="LD">0.52</td><td class="LL SS-slo">slow</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">nvidiagarbage, slowmodel, norgtc</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Asus/HP</td><td class="LS"><span id="Nvidia_GeForce_Extreme_N6600LE_Silencer"></span>[[#Nvidia_GeForce_Extreme_N6600LE_Silencer|GeForce Extreme N6600LE Silencer]]</td><td class="LD">NV43</td><td class="LS">Curie</td><td class="LS">2004<span class="LD">-08-12</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x16</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">256MB</td><td class="LS">Ubuntu 22.04.1</td><td class="LS">Linux&nbsp;5.15.0<br/>nouveau</td><td class="LS">Mesa&nbsp;23.0.0<br/>nv30</td><td class="LL SS-slo">2.1</td><td class="LD">-</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2022-11-26</td><td class="LD">0.54~</td><td class="LL SS-slo">slow</td><td class="LL">-</td><td class="LL">-</td><td class="LL">extfbo, mesamain</td></tr><tr><td class="LS">Nvidia</td><td class="LD">↑</td><td class="LS">↑</td><td class="LD">↑</td><td class="LS">↑</td><td class="LS">↑</td><td class="LL SP-hig">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LD">↑</td><td class="LS">Ubuntu 16.04.7</td><td class="LS">Linux&nbsp;4.4.0<br/>nvidia</td><td class="LS">Nvidia&nbsp;304.134<br/>nvidia</td><td class="LL SS-slo">2.1</td><td class="LD">41</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2020-09-30</td><td class="LD">0.52~</td><td class="LL SS-slo">slow</td><td class="LL SP-low">lowest</td><td class="LL SP-low">640×480</td><td class="LL">nvidiagarbage, slowmodel, norgtc</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Chaintech</td><td class="LS"><span id="Nvidia_Geforce_FX_5200_Cinema"></span>[[#Nvidia_Geforce_FX_5200_Cinema|Geforce FX 5200 Cinema]]</td><td class="LD">NV34</td><td class="LS">Rankine</td><td class="LS">2003<span class="LD">-03</span></td><td class="LL SP-med">AGP <span class="LD">2.0 8x</span></td><td class="LD">workstation</td><td class="LD">discrete</td><td class="LD">128MB</td><td class="LS">Ubuntu 16.04.7</td><td class="LS">Linux&nbsp;4.8.0<br/>nouveau</td><td class="LS">Mesa&nbsp;18.0.5<br/>nv30</td><td class="LL SS-mis">1.5</td><td class="LD">-</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-10-03</td><td class="LD">0.52~</td><td class="LL SS-mis">missing</td><td class="LL">N/A</td><td class="LL">N/A</td><td class="LL">-</td></tr><tr><td class="LS">Nvidia</td><td class="LD">Nvidia</td><td class="LS"><span id="Nvidia_Geforce_4_MX440_8x"></span>[[#Nvidia_Geforce_4_MX440_8x|Geforce 4 MX440 8x]]</td><td class="LD">NV18</td><td class="LS">Celsius</td><td class="LS">2002<span class="LD">-09-28</span></td><td class="LL SP-med">AGP <span class="LD">2.0 8x</span></td><td class="LD">workstation</td><td class="LD">lowprofile</td><td class="LD">64MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>nouveau</td><td class="LS">Mesa&nbsp;20.0.8<br/>vieux</td><td class="LL SS-mis">1.2</td><td class="LD">-</td><td class="LL LD">illwieckz</td><td class="LL LD SA-unp">unplugged</td><td class="LD">2020-08-09</td><td class="LD">0.52~</td><td class="LL SS-mis">missing</td><td class="LL">N/A</td><td class="LL">N/A</td><td class="LL">-</td></tr><tr><th class="LS">Brand</th><th class="LD">Vendor</th><th class="LS">Name</th><th class="LD">Code name</th><th class="LS">Micro arch.</th><th class="LS">Launch</th><th class="LL">Bus</th><th class="LD">Host</th><th class="LD">Form</th><th class="LD">Mem. size</th><th class="LS">System</th><th class="LS">Kernel<br/>module</th><th class="LS">OpenGL<br/>driver</th><th class="LL"><span class="LD">Open</span>GL</th><th class="LD">Bones</th><th class="LL LD">Tester</th><th class="LL LD">Availability</th><th class="LD">Updated</th><th class="LD">Unv.</th><th class="LL">Status</th><th class="LL">Preset</th><th class="LL">Resolution</th><th class="LL">Note</th></tr><tr><td class="LS">Broadcom</td><td class="LD">Raspberry Pi (Raspberry Pi 4)</td><td class="LS"><span id="Broadcom_VideoCore_VI_BCM2711"></span>[[#Broadcom_VideoCore_VI_BCM2711|VideoCore VI (BCM2711)]]</td><td class="LD">-</td><td class="LS">VC4 V3D 4.2</td><td class="LS">2019<span class="LD">-Q2</span></td><td class="LL SP-hig">chip</td><td class="LD">singleboard</td><td class="LD">SoC</td><td class="LD">2GB</td><td class="LS">Debian 12 Bookworm</td><td class="LS">Linux&nbsp;6.1.0<br/>vc4</td><td class="LS">Mesa&nbsp;20.2.1<br/>v3d</td><td class="LL SS-pas">3.1</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2023-12-19</td><td class="LD">0.54.1</td><td class="LL SS-pas">passed</td><td class="LL SP-low">low</td><td class="LL SP-low">800×480</td><td class="LL">-</td></tr><tr><td class="LS">Broadcom</td><td class="LD">Raspberry Pi (Raspberry Pi 3B+)</td><td class="LS"><span id="Broadcom_VideoCore_IV_BCM2837"></span>[[#Broadcom_VideoCore_IV_BCM2837|VideoCore IV (BCM2837)]]</td><td class="LD">-</td><td class="LS">VC4 V3D 2.1</td><td class="LS">2016<span class="LD">-Q1</span></td><td class="LL SP-hig">chip</td><td class="LD">singleboard</td><td class="LD">SoC</td><td class="LD">1GB</td><td class="LS">Debian 12 Bookworm</td><td class="LS">Linux&nbsp;6.1.0<br/>vc4</td><td class="LS">Mesa&nbsp;20.2.1<br/>vc4</td><td class="LL SS-slo">2.1</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2023-12-19</td><td class="LD">0.54.1</td><td class="LL SS-mis">missing</td><td class="LL SP-low">lowest</td><td class="LL SP-low">800×480</td><td class="LL">crash</td></tr><tr><th class="LS">Brand</th><th class="LD">Vendor</th><th class="LS">Name</th><th class="LD">Code name</th><th class="LS">Micro arch.</th><th class="LS">Launch</th><th class="LL">Bus</th><th class="LD">Host</th><th class="LD">Form</th><th class="LD">Mem. size</th><th class="LS">System</th><th class="LS">Kernel<br/>module</th><th class="LS">OpenGL<br/>driver</th><th class="LL"><span class="LD">Open</span>GL</th><th class="LD">Bones</th><th class="LL LD">Tester</th><th class="LL LD">Availability</th><th class="LD">Updated</th><th class="LD">Unv.</th><th class="LL">Status</th><th class="LL">Preset</th><th class="LL">Resolution</th><th class="LL">Note</th></tr><tr><td class="LS">ARM</td><td class="LD">Orange Pi (Orange Pi 5)</td><td class="LS"><span id="ARM_Mali-G610_Rockchip_RK3588S"></span>[[#ARM_Mali-G610_Rockchip_RK3588S|Mali-G610 (Rockchip RK3588S)]]</td><td class="LD">MP4 Odin</td><td class="LS">Valhall 3rd gen</td><td class="LS">2021<span class="LD">-Q2</span></td><td class="LL SP-hig">chip</td><td class="LD">singleboard</td><td class="LD">SoC</td><td class="LD">16GB</td><td class="LS">Debian 11 Bullseye</td><td class="LS">Linux&nbsp;5.10.11<br/>panfrost</td><td class="LS">None</td><td class="LL SS-mis">No</td><td class="LD">-</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2023-01-11</td><td class="LD">0.54.0~</td><td class="LL SS-mis">missing</td><td class="LL">N/A</td><td class="LL">N/A</td><td class="LL">noaccel</td></tr><tr><td class="LS">ARM</td><td class="LD">Banana Pi (Banana Pi M5)</td><td class="LS"><span id="ARM_Mali-G31_Amlogic_S905X3"></span>[[#ARM_Mali-G31_Amlogic_S905X3|Mali-G31 (Amlogic S905X3)]]</td><td class="LD">MP2 Dvalin</td><td class="LS">Bifrost 1st gen</td><td class="LS">2018<span class="LD">-Q1</span></td><td class="LL SP-hig">chip</td><td class="LD">singleboard</td><td class="LD">SoC</td><td class="LD">4GB</td><td class="LS">Debian 11 Bullseye</td><td class="LS">Linux&nbsp;5.19.16<br/>panfrost</td><td class="LS">Mesa&nbsp;23.0.0<br/>panfrost</td><td class="LL SS-pas">3.1</td><td class="LD">256</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2022-11-21</td><td class="LD">0.54.0~</td><td class="LL SS-pla">playable</td><td class="LL SP-low">lowest</td><td class="LL SP-low">800×600</td><td class="LL">mesamain</td></tr><tr><th class="LS">Brand</th><th class="LD">Vendor</th><th class="LS">Name</th><th class="LD">Code name</th><th class="LS">Micro arch.</th><th class="LS">Launch</th><th class="LL">Bus</th><th class="LD">Host</th><th class="LD">Form</th><th class="LD">Mem. size</th><th class="LS">System</th><th class="LS">Kernel<br/>module</th><th class="LS">OpenGL<br/>driver</th><th class="LL"><span class="LD">Open</span>GL</th><th class="LD">Bones</th><th class="LL LD">Tester</th><th class="LL LD">Availability</th><th class="LD">Updated</th><th class="LD">Unv.</th><th class="LL">Status</th><th class="LL">Preset</th><th class="LL">Resolution</th><th class="LL">Note</th></tr><tr><td class="LS">Via</td><td class="LD">Asus</td><td class="LS"><span id="Via_Chrome_9"></span>[[#Via_Chrome_9|Chrome 9]]</td><td class="LD">K8M890CE / K8N890CE</td><td class="LS">Chromotion CE</td><td class="LS">2005<span class="LD">-10</span></td><td class="LL SP-hig">PCIe <span class="LD">1.0 x16?</span></td><td class="LD">workstation</td><td class="LD">onboard</td><td class="LD">256MB</td><td class="LS">Ubuntu 20.04</td><td class="LS">Linux&nbsp;5.4.0<br/>viafb</td><td class="LS">None</td><td class="LL SS-mis">No</td><td class="LD">-</td><td class="LL LD">papap</td><td class="LL LD SA-unc">unconfigured</td><td class="LD">2021-07-09</td><td class="LD">0.52.1</td><td class="LL SS-mis">missing</td><td class="LL">N/A</td><td class="LL">N/A</td><td class="LL">noaccel</td></tr><tr><th class="LS">Brand</th><th class="LD">Vendor</th><th class="LS">Name</th><th class="LD">Code name</th><th class="LS">Micro arch.</th><th class="LS">Launch</th><th class="LL">Bus</th><th class="LD">Host</th><th class="LD">Form</th><th class="LD">Mem. size</th><th class="LS">System</th><th class="LS">Kernel<br/>module</th><th class="LS">OpenGL<br/>driver</th><th class="LL"><span class="LD">Open</span>GL</th><th class="LD">Bones</th><th class="LL LD">Tester</th><th class="LL LD">Availability</th><th class="LD">Updated</th><th class="LD">Unv.</th><th class="LL">Status</th><th class="LL">Preset</th><th class="LL">Resolution</th><th class="LL">Note</th></tr><tr><td class="LS">ASPEED</td><td class="LD">Gigabyte</td><td class="LS"><span id="ASPEED_ASPEED_Graphics_Family_rev_41"></span>[[#ASPEED_ASPEED_Graphics_Family_rev_41|ASPEED Graphics Family rev 41]]</td><td class="LD">-</td><td class="LS">-</td><td class="LS">-</td><td class="LL SP-hig">PCIe <span class="LD">4.0 x1?</span></td><td class="LD">workstation</td><td class="LD">onboard</td><td class="LD">-</td><td class="LS">Ubuntu 21.10</td><td class="LS">Linux&nbsp;5.13.0<br/>ast</td><td class="LS">None</td><td class="LL SS-mis">No</td><td class="LD">-</td><td class="LL LD">illwieckz</td><td class="LL LD SA-con">configured</td><td class="LD">2021-11-07</td><td class="LD">0.52.1</td><td class="LL SS-mis">missing</td><td class="LL">N/A</td><td class="LL">N/A</td><td class="LL">noaccel</td></tr></table>Tested GPUs: '''90''', tested configurations: '''114''', last update: '''2023-12-21'''.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Engine&diff=8590Engine2023-12-14T08:12:07Z<p>Illwieckz: /* Engine features */ typo</p>
<hr />
<div>{{DISPLAYTITLE:Dæmon engine}}<br />
Unvanquished development uses the {{engine}} to power the {{game}}, an ever-improving engine with a long list of modern features (see below).<br />
<br />
__TOC__<br />
<br />
==Engine history==<br />
<br />
{{NoteOpenWolf}}<br />
<br />
'''Dæmon''' can trace its lineage all the way back to Quake 3, integrating the various features and improvements from quite a few engines before it. The aim of Unvanquished Development is to make Dæmon the most modern and best available quake-derived FOSS engine.<br />
<br />
{{Game and engine lineage}}<br />
<br />
==Engine source code==<br />
<br />
The {{engine}} source tree is tracked on a dedicated repository to make contributions easier and help projects to port their game on it:<br />
<br />
* [https://github.com/DaemonEngine/Daeon Dæmon engine repository]<br />
<br />
==Engine features==<br />
<br />
{{Note|content=Of all features showcased by the Unvanquished game, some are implemented in the {{engine}}, some are implemented in the game code, like bot navigation, translation or RmlUi user interface, etc. and others in the updater/launcher. As a game developer if you want to make your own game you may want to reuse the engine and fork the Unvanquished game to use it as an upstream and be able to merge back our game code improvements to your game.}}<br />
<br />
===Sandboxed cross-platform virtual machine===<br />
<br />
The game code is sandboxed and running in a virtual machine.<br />
<br />
For the virtual machine we currently use the [https://developer.chrome.com/docs/native-client/ Native Client] (NaCl) technology, and are in process to replace NaCl with [https://webassembly.org/ WebAssembly] (Wasm) as industry shifted from NaCl to Wasm.<br />
<br />
The virtualized game code is cross-platform: build it once, deliver it to players running on Windows, Linux and macOS. Once the engine runs on a platform, the game code runs.<br />
<br />
It makes very easy to modders to distribute their own game code to players on supported operating system, and it makes very easy to players to enjoy those mods since custom game code can be downloaded from servers while running it sandboxed.<br />
<br />
Unlike the old Q3VM technology we're not limited to the old C version supported by the non-free LCC compiler, and we can use third-party C++ libraries in the game code, while running it with close-to-the-metal performance in a sandboxed virtual machine.<br />
<br />
===Rendering===<br />
<br />
* Modern OpenGL 3 renderer with very large hardware support,<br/>see the [[GPU compatibility matrix]];<br />
* Improved Quake 3 shader (material) system:<br />
** Procedural vertex deformation;<br />
** Alpha mapping;<br />
** Specular mapping (color and intensity);<br />
** Physically based shading (PBR);<br />
** Normal mapping;<br />
** Relief mapping;<br />
** Glow mapping;<br />
** Multitextured terrain blending;<br />
* Many special effects:<br />
** Motion blur;<br />
** Rim lighting;<br />
** Bloom;<br />
** Heat haze;<br />
** FXAA;<br />
* Outline fonts;<br />
* Procedural animation blending.<br />
<br />
===Extensible virtual file system===<br />
<br />
See the {{Formats|DPK}} and [[Filesystem]] pages.<br />
<br />
Game data is distributed as a set of DPK packages, which are Zip archives storing files. Each file from each DPK packages is added to a virtual file system that is seen by the game. The game code is only allowed to explore that virtual file system (the game code is not allowed to explore the user's file system).<br />
<br />
This is very similar to the idSoftware PK3 and PK4 VFS but we extended it to solve various design issues: unlike PK3 and PK4 a DPK can provide a list of dependencies to load, so the game engine only loads the required packages for the current game and for the map currently played on.<br />
<br />
The dependency mechanism also allows a package to extend an older version of itself, either by adding files to the VFS, either by replacing files from older packages, making possible for a game project to deliver partial updates through light delta packages: with a suitable distribution system (see our [[Launcher|updater/launcher]]), players would only download the delta paks containing the new files when a new release is distributed.<br />
<br />
===Networking===<br />
<br />
* Remote administration support;<br />
* Custom <code>unv://</code> protocol to allow starting the game from a web browser or with an internet link;<br />
* {{TODO|inline=true|Mumble integration, what's the status of it?}}<br />
<br />
===Miscellaneous===<br />
<br />
* Curses-based console<br />
<br />
==Supported data formats==<br />
<br />
See [[Filesystem]] for instructions on how to package assets.<br />
<br />
===Image formats===<br />
<br />
See the {{Formats|Image}} page.<br />
<br />
* CRN &mdash; optimized for GPU (like DDS), {{Recommended}};<br />
* WebP &mdash; lossy and lossless, {{Recommended}} for skyboxes as lossy, and lightmaps as lossless;<br />
* DDS &mdash; Direct Draw Surface, optimized for GPU, '''Well tested''';<br />
* KTX &mdash; Khronos Texture, optimized for GPU, '''Poorly tested''';<br />
* PNG &mdash; lossless and slow, {{Discouraged}};<br />
* TGA &mdash; lossless but uncompressed, {{Discouraged}};<br />
* JPEG &mdash; lossy, {{Discouraged}}.<br />
<br />
===Material formats===<br />
<br />
See the {{Formats|Material}} page.<br />
<br />
* Quake 3 {{code|.shader}} materials;<br />
* Dæmon {{code|.shader}} materials &mdash; extension of Quake 3 materials with pre-collapsed stages and some features from Doom 3 and Xreal, including fixes for regressions from Doom 3 like multitextured multistage materials (like multitextured terrain blending);<br />
* DarkPlaces {{code|.shader}} materials &mdash; extension of Quake 3 materials with custom keywords (not all of them are supported) and implicit sidecar texture loading.<br />
<br />
Other formats like {{Formats|Particle}} and {{Formats|Trail}} formats are not implemented in engine but in Unvanquished game code.<br />
<br />
===Sound file formats===<br />
<br />
See the {{Formats|Audio}} page.<br />
<br />
* Opus &mdash; lossy, {{Recommended}};<br />
* OGG Vorbis &mdash; lossy, '''Well tested''';<br />
* Wav &mdash; lossless but uncompressed, {{Discouraged}}.<br />
<br />
===Model formats===<br />
<br />
See the {{Formats|Model}}, [[Modeling]] and {{Tutorials|Exporting models}} pages.<br />
<br />
* IQM &mdash; bone-based, {{Recommended}};<br />
* MD5 &mdash; bone-based, '''Well tested''';<br />
* MD3 &mdash; vertex-based, {{Discouraged}}.<br />
<br />
===Map formats===<br />
<br />
See the {{Formats|BSP}} and [[Mapping]] pages.<br />
<br />
* Quake 3 / Wolf:ET style BSP ({{code|IBSP46}}, {{code|IBSP47}}).<br />
<br />
==Engine related blog posts==<br />
<br />
{{TODO|Import to the wiki.}}<br />
<br />
* [https://unvanquished.net/announcing-daemon-engine-beta-0-52/ Announcing Dæmon engine Beta 0.52] by illwieckz;<br />
* [https://unvanquished.net/upgrading-our-15-year-old-engine/ Upgrading our 15-year-old engine] by Kangz;<br />
* [https://unvanquished.net/first-engine-upgrade-merge/ Merge of the first batch of engine-upgrade changes] by Kangz;<br />
* [https://unvanquished.net/big-changes-to-the-filesystem/ Big changes to the Filesystem] by Kangz;<br />
* [https://unvanquished.net/moving-the-server-side-gamelogic-to-pnacl/ Moving the server-side gamelogic to PNaCl] by Kangz.<br />
<br />
=Non-engine features=<br />
<br />
==Game features==<br />
<br />
{{Note|content=Those features are not implemented in {{engine}} but in '''Unvanquished game''' code.<br />
<br />
As a game developer if you want to make a game on {{engine}}, you'll may also want to fork '''Unvanquished''' and use it as upstream to benefit from these features as well.}}<br />
<br />
Some of those features were previously living in the engine, but we moved them to the game code to make it easy to update them without releasing the engine, and to simplify the interactions between engine and game.<br />
<br />
===Localization===<br />
<br />
Localization is implemented in Unvanquished game code, it supports translation of C++ strings and RmlUI strings (starting with 0.53.0).<br />
<br />
===RmlUi user interface===<br />
<br />
See the [[UI]] page.<br />
<br />
The Unvanquished user interface is implemented using RmlUi (libRocket before 0.53.0) supporting RML and RCSS formats based on HTML4 and CSS2 standards (it supports transforms!).<br />
<br />
===Navigation meshes and bot behavior trees===<br />
<br />
See the {{Formats|Navigation mesh}} and {{Formats|Behavior tree}} pages.<br />
<br />
Unvanquished implements navigation mesh based bot AI configured with behavior trees.<br />
<br />
===Gameplay features===<br />
<br />
* [[Voice say system]];<br />
* Support for multiple [[Server/Map layout|build layouts]] per map.<br />
<br />
==Game formats==<br />
<br />
===Particles and trails===<br />
<br />
See the {{Formats|Particle}} and {{Formats|Trail}} pages.<br />
<br />
Unvanquished implements particle and trails, the formats are the ones of Tremulous.<br />
<br />
==Launcher and updater features==<br />
<br />
{{Note|content=Those features are not implemented in {{engine}} but in '''[[Launcher|Unvanquished launcher]]''' code.<br />
<br />
As a game developer if you want to make a game on {{engine}}, you'll may also want to fork our '''[[Launcher]]''' and use it as upstream to benefit from these features as well.}}<br />
<br />
See the [[Launcher]] page.<br />
<br />
===Auto updates===<br />
<br />
Our auto update mechanism is implemented as a game launcher. This is the icon the player executes to run the game. The engine itself is just an updatable file among others.<br />
<br />
The launcher checks for updates at startup. If there is an update, the update is downloaded and applied and the game is run. If there is no update, the game is run.<br />
<br />
===Peer-to-peer delta updates===<br />
<br />
The update is done using BitTorrent, enabling peer-to-peer download (reducing pressure on game infrastructure) and partial updates (see [[#Extensible virtual file system]] on how the {{engine}} makes possible to ship updates as delta packages).<br />
<br />
===Configuration===<br />
<br />
The updater also does extra configuration steps like setting-up the {{code|unv://}} protocol (see [[#Networking]]) to enable players to join games by clicking links on web pages.<br />
<br />
=Dæmon-based games=<br />
<br />
The {{game}} is currently the only released game running on the {{engine}}.<br />
<br />
Though, multiple projects are attempting to make games on or port games to the {{engine}}.<br />
<br />
See the [[Daemon based games]] page for more information.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Formats/Known_regressions_since_Tremulous&diff=8589Formats/Known regressions since Tremulous2023-12-11T01:55:30Z<p>Illwieckz: /* Regressions with fixes implemented but not released yet */ (removed)</p>
<hr />
<div>[[Category:Formats]]<br />
As a mapper or someone creating assets for the game, you may be aware of those pitfalls that can be considered as regressions when comparing with Tremulous or Quake Ⅲ.<br />
<br />
See also the [[Formats/Limitations that are not regressions|Limitations that are not regressions]] page for things that are not regressions.<br />
<br />
== Regressions that may make the game look broken ==<br />
<br />
=== Missing portal blending ===<br />
<br />
Portal blending is not implemented yet in the renderer.<br />
<br />
What happens is that the renderer that was used in Quake Ⅲ and Tremulous were OpenGL 1 renderers, and the Dæmon engine renderer is an OpenGL 3+ renderer. The difference between OpenGL 1 and OpenGL 3+ is similar to the difference between OpenGL 4.6 and Vulkan. Those renderers are different software. Everything from the OpenGL 1 renderer had to be re-implemented in OpenGL 3+ renderer with new code.<br />
<br />
So the lack of portable blending is not technically a regression as the code never existed in the renderer to begin with. It also means there is no bug in our code.<br />
<br />
Though, we fully agree this means a map ported from Tremulous that was using that feature will look broken and that then can be considered as a regression from a player or mapper point of view.<br />
<br />
From the code point of view, this is a feature request and we need someone to implement it. We are looking for renderer developers and OpenGL 3+ specialist to implement the feature in our engine.<br />
<br />
=== "Autosprite" shaders don't work ===<br />
See [https://github.com/DaemonEngine/Daemon/issues/322 Daemon#322].<br />
<br />
== Regressions that may make the game look broken, but with workaround ==<br />
<br />
=== Stereo sound effect not being positional ===<br />
<br />
Currently only mono sound files are played properly as positional audio, stereo sound files are played ''in your face''. We need to fix this.<br />
<br />
A simple workaround can be applied when repackaging the files: just convert the positional stereo sound as mono, this would make no difference to the player (stereo positional sound is meaningless anyway).<br />
<br />
== Regressions that don't make the game look broken ==<br />
<br />
=== Missing alphaGen lightingSpecular ===<br />
<br />
The {{code|alphaGen lightingSpecular}} was a subtle effect applied on some textures. This feature being missing doesn't break the rendering of the texture and if you look at the surface you may not notice something is wrong, unless you do comparative screenshots with Tremulous and Unvanquished. [https://github.com/DaemonEngine/Daemon/issues/213 Github issue]<br />
<br />
Implementing this feature has very low priority as there is no impact on gameplay and textures don't look bad without it. The game doesn't look broken without it and one cannot know the feature is missing just by playing the game, unless some warning tells it in log.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Tutorials/RSS_BitTorrent_seeding&diff=8588Tutorials/RSS BitTorrent seeding2023-12-11T01:53:53Z<p>Illwieckz: </p>
<hr />
<div>[[Category:Tutorials]]<br />
Here are some tutorials for adding a Torrent RSS to some BitTorrent software. This is a convenient way to set-up a BitTorrent software to automatically download new versions of the game and seed them.<br />
<br />
See [[Infrastructure/CDN]] for details about the '''Unvanquished CDN''' and how BitTorrent is used by the {{launcher}}.<br />
<br />
= qBittorrent =<br />
<br />
qBittorrent has out of the box RSS torrent support.<br />
<br />
So you fist need the [https://www.qbittorrent.org/ qBittorrent] software.<br />
<br />
In qBittorrent Preferences (''Tools'' → ''Preferences''), click “''RSS''” icon and tick those two checkboxes:<br />
<br />
* ''Enable fetching RSS feeds''<br />
* ''Enable auto downloading of RSS torrents''<br />
<br />
Then closes preferences window and in the main qBittorrent window, open the “''RSS''” tab, click the “''New subscription''” button, and fill this filed:<br />
<br />
* ''Feed URL'': {{code|https://cdn.unvanquished.net/current-torrent.rss}}<br />
<br />
Then click the “''RSS Downloader…''” button of the “''RSS''” tab (or the “''Edit auto downloading rules''” button in qBittorrent RSS preferences)<br />
<br />
Click the “''+''” button next to “''Download Rules''” to add a rule.<br />
<br />
Fill the fields this way:<br />
<br />
* ''New rule name'': {{code|Unvanquished}}<br />
<br />
Tick this check box:<br />
<br />
* ''Apply Rule to Feeds'': {{code|Unvanquished torrents}}<br />
<br />
You can customize the folder where to download the Unvanquished files by ticking this checkbox:<br />
<br />
* ''Save to a Different Directory''<br />
<br />
And fill this field:<br />
<br />
* ''Save to'': as you want<br />
<br />
If needed, you can force the download this way: on the “''RSS''” tab of qBittorrent: right-click on the feed then “''Update''”, right-click on the torrent name then “''Download torrent''”.<br />
<br />
= Deluge =<br />
<br />
First, you'll need the [https://deluge-torrent.org/ Deluge] software and the [https://dev.deluge-torrent.org/wiki/Plugins/YaRSS2 YaRSS2] plugin.<br />
<br />
In Deluge Preferences, enable the YaRSS2 plugin.<br />
<br />
In YaRSS2 plugin, in “''Rss Feeds''” tab, click the “''Add Feed''” button and fill those fields this way:<br />
<br />
* ''RSS Feed Name'': {{code|Unvanquished}}<br />
* ''RSS Feed URL'': {{code|https://cdn.unvanquished.net/current-torrent.rss}}<br />
<br />
Then in “''Subscription''” tab, click the “''Add Subscription''” button and fill those fields this way:<br />
<br />
* ''Subscription name'': {{Code|Unvanquished}}<br />
* ''RSS Feed'': select the “''Unvanquished''” feed in the drop down list<br />
* ''Filter include (regex)'': {{code|.*}}<br />
<br />
In “Options” tab you may also want to customize “''Download location''” and “''Move completed''” fields.<br />
<br />
The “Move completed” feature is handy if you download with bittorrent the files for a web seed: once the download is completed the files will be moved to a specific folder you can chose, making sure they are complete once they are written to this folder.<br />
<br />
If needed you can force the download this way: on the Subscription list you can right click the “''Unvanquished''” subscription and click “''Reset last matched timestamp''” then “''Run this subscriptions''”.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Template:Version&diff=8587Template:Version2023-12-11T00:56:52Z<p>Illwieckz: </p>
<hr />
<div>{{#switch: {{{1}}}<br />
| Game = 0.54.1<br />
| Engine = 0.54.1<br />
| Launcher = 0.2.0<br />
}}<noinclude><br />
{{Documentation}}<br />
</noinclude></div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Template:KnownGraphicalBugs&diff=8582Template:KnownGraphicalBugs2023-12-08T13:02:56Z<p>Illwieckz: </p>
<hr />
<div>{{Note|header=Known workarounds and fixes|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].<br />
* {{Intel}}: If you notice some [https://github.com/DaemonEngine/Daemon/issues/949 colored square confetti] with some particle systems on Intel UHD, try updating the driver.}}<br />
{{Note|header=Known bugs|content=<br />
* {{Intel}}: People reported some [https://github.com/DaemonEngine/Daemon/issues/909 distorted textures] with Intel UHD on both Windows and Linux. We [https://gitlab.freedesktop.org/mesa/mesa/-/issues/10224 reported it] to driver developers.<br />
<br />
If you encounter a rendering bug, please check [https://github.com/DaemonEngine/Daemon/issues?q=is%3Aopen+label%3AA-Renderer+label%3AT-Bug here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
<br />
The place to report new graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here], see the [[Bug reporting]] page for advices.}}</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=GPU_compatibility_matrix&diff=8581GPU compatibility matrix2023-12-08T12:58:22Z<p>Illwieckz: Move KnownGraphicalBugs as a template to have a separate page history.</p>
<hr />
<div>{{KnownGraphicalBugs}}<br />
<br />
This table gathers test results about various hardware and software configurations, <span style="background-color: green !important; color: white !important; padding: .25em .5em;">passed</span> means nothing wrong is noticed and frame rate is at least <u>60 fps</u> on common scene, <span style="background-color: lightgreen !important; color: green !important; padding: .25em .5em;">playable</span> means at least <u>30 fps</u>.<br />
<br />
All those tests were driven by Unvanquished developers or under Unvanquished developer supervision.<br />
<br />
See [[#Comprehensive_analysis|below]] for analysis, specific definitions and meanings.<br />
{{GPU compatibility matrix}}<br />
<br />
<br/><hr/><br/><br />
<br />
== Comprehensive analysis ==<br />
<br />
Minimal configuration for the Unvanquished game is OpenGL 3.2. Unvanquished can run on OpenGL 2.1 hardware but this would not be playable because because we use models with more than 41 bones and OpenGL 2.1 cards can't accelerate them enough. It will run but it will be slow.<br />
<br />
Decent performance (given advanced graphical effects are disabled) starts with AMD/ATI TeraScale GPU, Intel HD Graphics (HD 4000), Nvidia Tesla-based GPUs. Though, it is strongly discouraged to buy GT218-based GPU like the Geforce 210 one as the proprietary driver for them is known to be buggy, requiring the engine to implement workarounds for it (save a game developer, do not buy this GPU!).<br />
<br />
To play at 4K resolutions, high-end AMD GCN/RDNA is recommended: AMD R9 390X from 2015 can handle <code>ultra</code> preset with 4K resolution at 144Hz. AMD R7 Embedded in R series APU can handle 2K resolution with <code>medium</code> preset (no realtime light and relief mapping disabled) as well as Intel UHD.<br />
<br />
Minimal configuration to run the Dæmon engine is OpenGL 2.1 with <code>ARB_half_float_vertex</code> and <code>ARB_framebuffer_object</code> (<code>EXT_framebuffer_object</code> is not enough). It includes ATI/AMD GPU starting with R300 (Radeon X300), Intel GPU starting with GMA965 (X3100) on Linux and macOS, HD Graphics on Windows, Nvidia starting with Curie (NV40, Geforce 6xxx). Wikipedia says the GMA965 Windows driver only supports OpenGL 1.5 and then would not reach the requirements for running Unvanquished on this platform. If you plan to make a game using Damon engine supporting those older cards, make sure your animated models don't have more than 41 bones.<br />
<br />
== How to contribute ==<br />
<br />
This matrix is generated from a cell sheet. Do not edit it by hand, Please ask <code>illwieckz</code> for access to the cell sheet.<br />
<br />
Please sort your contributions by brand (ATI/AMD, Intel, Nvidia, Via…) then by launch date (from newer to older).<br />
<br />
The table also documents who may be able to reproduce a special configuration, please put your nick name and tell how much it is easy for you to reproduce a test on it (see below for keywords to use).<br />
<br />
Please tell at least, brand, model, model launch date (look at Wikipedia), host, memory size, the operating system, the driver (kernel mode and user mode), OpenGL and GLSL version, Unvanquished version you tested, the status, the preset and the resolution you validated and eventual notes.<br />
<br />
If you find out the code name and related micro architecture, please note it, same with form factor and bus.<br />
<br />
Other data are less relevant for diagnostic and are only useful to get a better picture of the tested hardware, don't hesitate to write down as much info as you can.<br />
<br />
Append the <code>~</code> character to version number if you're testing a preversion. For example use <code>0.52~</code> to tell you tested against the to-be-released 0.52 version.<br />
<br />
Put a single <code>-</code> character in cell you don't have data for (do not leave empty cells). When you describe multiple configuration for the same piece of hardware, use the <code>↑</code> character to tell the cell uses the same value as the previous line.<br />
<br />
== Definitions ==<br />
<br />
=== Status ===<br />
<br />
* '''hang''': the computer becomes unresponsive, requiring a hard reset;<br />
* '''crash''': the game is terminated by the operating system on some unrecoverable failure;<br />
* '''missing''': the game exits by itself because of some requirement not being met;<br />
* '''broken''': the game loads maps but graphical bugs affecting gameplay are seen;<br />
* '''glitchy''': the game loads maps but graphical bugs non-affecting gameplay are seen;<br />
* '''slow''': the game is rendered properly but slowly with less than 30 fps;<br />
* '''playable''': nothing wrong is noticed and frame rate is at least 30 fps but less than 60 fps;<br />
* '''passed''': nothing wrong is noticed and frame rate is at least 60 fps.<br />
<br />
=== Availability ===<br />
<br />
* '''lost''': tester has lost access to the hardware;<br />
* '''foreign''': tester has access to the hardware but does not own it;<br />
* '''unplugged''': tester owns the hardware but testing requires to plug the hardware in a computer;<br />
* '''unconfigured''': hardware is plugged in a computer but making use of it requires software changes;<br />
* '''configured''': hardware and software are ready to use for testing.<br />
<br />
=== Notes ===<br />
<br />
* '''extfbo''': this GPU provides {{code|ARB_framebuffer_object}} instead of {{code|ARB_framebuffer_object}};<br />
* '''fakefps''': game displays high frame rate number but the experience is stuttering;<br />
* '''hickups''': performance is globally correct, but sometime the framerate drops a bit for a very short time;<br />
* '''lowsky''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid skybox graphical glitches;<br />
* '''lowtex''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid a computer hang;<br />
* '''mesamain''': running the driver from Mesa {{code|main}} at the time of the test was required to get the game running or avoid major rendering bugs;<br />
* '''noaccel''': no OpenGL hardware acceleration is implemented;<br />
* '''nogather''': <code>GL_ARB_texture_gather</code> is wrongly advertised by the driver to be supported by this hardware, making the engine crash at startup (Nvidia proprietary driver bug). The engine ships some workaround for this driver bug, if you experience the crash on version 0.52 and later but can properly start the game with <code>-set r_arb_texture_gather 0</code> engine command line option, please reopen issue [https://github.com/DaemonEngine/Daemon/issues/368 Daemon#368];<br />
* '''nohalfloatvertex''': missing <code>ARB_half_float_vertex</code> OpenGL extension;<br />
* '''nohyperz''': <code>R600_DEBUG=nohyperz</code> environment variable is required to be set to avoid graphical glitches, see issues [https://github.com/DaemonEngine/Daemon/issues/343 Daemon#343] and [https://gitlab.freedesktop.org/mesa/mesa/-/issues/3290 Mesa#3290];<br />
* '''norgtc''': <code>GL_ARB_texture_compression_rgtc</code> extension is not supported on this hardware, some texture may be loaded with swapped channels, especially normal maps. Engine implements special algorithms to workaround this, see issue [https://github.com/DaemonEngine/Daemon/issues/375 Daemon#375];<br />
* '''nvidiagarbage''': this driver is so bad you have to be very lucky to get at least a desktop drawn on screen before the computer hangs. With or without the game, after some screen freezes and display server crashes the kernel will complain about the card having disconnected itself from the PCIe bus. This issue was verified on multiple cards of this generations that are known to run for months without crashing when using free open source drivers instead;<br />
* '''slowmodel''': models with a lot of bones are known to induce severe frame drop on such hardware, see issue [https://github.com/Unvanquished/Unvanquished/issues/1207 Unvanquished#1207];<br />
* '''tinyalu''': this hardware has a very small ALU (arithmetic logic unit), dynamic lighting must be disabled with <code>r_dynamicLight 0</code> to prevent the driver to abort GLSL shader compilation that may lead to an engine crash, see issue [https://github.com/DaemonEngine/Daemon/issues/344 Daemon#344].<br />
<br />
=== Bus ===<br />
<br />
* '''PCI''': [https://en.wikipedia.org/wiki/Peripheral_Component_Interconnect Peripheral Component Interconnect], slow multi-purpose bus for add-on cards, obsolete;<br />
* '''PCI-X''': [https://en.wikipedia.org/wiki/PCI-X Peripheral Component Interconnect eXtended], enhanced version of PCI for servers and workstations, obsolete;<br />
* '''AGP''': [https://en.wikipedia.org/wiki/Accelerated_Graphics_Port Accelerated Graphics Port], high-speed bus designed for graphic cards, obsolete;<br />
* '''FSB''': [https://en.wikipedia.org/wiki/Front-side_bus Front-side bus], high-speed Intel system bus for CPUs, sometime used with onboard GPUs (example: GeForce 7050 + nForce 610i/630i);<br />
* '''HT''': [https://en.wikipedia.org/wiki/HyperTransport HyperTransport], high-speed AMD system bus for CPUs, sometime used with onboard GPUs (example: GeForce 6150 LE + nForce 430);<br />
* '''chip''': Internal bus of a [https://en.wikipedia.org/wiki/System_on_a_chip system on a chip] (SoC), the exact communication bus technology is usually poorly documented;<br />
* '''PCIe''': [https://en.wikipedia.org/wiki/PCI_Express PCI Express], high-speed multi-purpose bus for add-on cards and on-board devices, recommended;<br />
* '''CXL''': [https://en.wikipedia.org/wiki/Compute_Express_Link, Compute Express Link], high-speed multi-purpose bus for add-on cards;<br />
* '''TB''': [https://fr.wikipedia.org/wiki/Thunderbolt_(interface) ThunderBolt], high speed cable combining PCI Express and DisplayPort or USB-C to connect external PCI Express cards like GPUs.<br />
<br />
=== Form factor ===<br />
<br />
* '''discrete''': full height workstation extension card, with dedicated graphics memory;<br />
* '''lowprofile''': low profile workstation extension card, with dedicated graphics memory;<br />
* '''MXM''': [https://en.wikipedia.org/wiki/Mobile_PCI_Express_Module Mobile PCI Express module], laptop extension card, with dedicated graphics memory;<br />
* '''onboard''': dedicated GPU on motherboard, low end ones may share memory with the CPU;<br />
* '''integrated''': GPU integrated in CPU package or chipset, likely sharing memory with the CPU;<br />
* '''SoC''': System on a chip, with the GPU likely sharing memory with the CPU;<br />
<br />
=== Micro architecture ===<br />
<br />
* '''USSA''': ATi Unified Superscalar Shader Architecture;<br />
* '''GCN''': AMD Graphics Core Next;<br />
* '''RDNA''': AMD Radeon DNA;<br />
* '''GMA''': Intel Graphics Media Accelerator;<br />
* '''GT''': Intel Graphics Technology.<br />
<br />
=== Memory glossary ===<br />
<br />
* '''HM''': HyperMemory, ATi technology using main memory when GPU memory is full;<br />
* '''TC''': TurboCache, Nvidia technology using main memory when GPU memory is full;<br />
* '''AR''': AcceleRAM, S3 technology using main memory when GPU memory is full.<br />
<br />
== Useful resources ==<br />
<br />
* [https://mesamatrix.net/ Mesa Matrix]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units Wikipedia list of AMD graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units Wikipedia list of AMD accelerated processing units]<br />
* [https://www.x.org/wiki/RadeonFeature/ X.Org Radeon feature matrix and decoder ring]<br />
* [https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units Wikipedia list of Intel graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units Wikipedia list of Nvidia graphics processing units]<br />
* [https://nouveau.freedesktop.org/wiki/MesaDrivers/ Mesa Nouveau drivers]<br />
* [https://nouveau.freedesktop.org/wiki/CodeNames/ Mesa Nouveau decoder ring]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Template:KnownGraphicalBugs&diff=8580Template:KnownGraphicalBugs2023-12-08T12:58:09Z<p>Illwieckz: Move KnownGraphicalBugs as a template to have a separate page history.</p>
<hr />
<div>{{Note|header=Known workarounds and fixes|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].<br />
* {{Intel}}: If you notice some [https://github.com/DaemonEngine/Daemon/issues/949 colored square confetti] with some particle systems on Intel UHD, try updating the driver.}}<br />
{{Note|header=Known bugs|content=<br />
* {{Intel}}: People reported some [https://github.com/DaemonEngine/Daemon/issues/909 distorted textures] with Intel UHD on both Windows and Linux. We [https://gitlab.freedesktop.org/mesa/mesa/-/issues/10224 reported it] to driver developers.<br />
<br />
If you encounter a rendering bug, please check [https://github.com/DaemonEngine/Daemon/issues?q=is%3Aopen+label%3AA-Renderer+label%3AT-Bug here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
<br />
The place to report new graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here].}}</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=GPU_compatibility_matrix&diff=8579GPU compatibility matrix2023-12-08T12:56:41Z<p>Illwieckz: </p>
<hr />
<div>{{Note|header=Known workarounds and fixes|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].<br />
* {{Intel}}: If you notice some [https://github.com/DaemonEngine/Daemon/issues/949 colored square confetti] with some particle systems on Intel UHD, try updating the driver.}}<br />
{{Note|header=Known bugs|content=<br />
* {{Intel}}: People reported some [https://github.com/DaemonEngine/Daemon/issues/909 distorted textures] with Intel UHD on both Windows and Linux. We [https://gitlab.freedesktop.org/mesa/mesa/-/issues/10224 reported it] to driver developers.<br />
<br />
If you encounter a rendering bug, please check [https://github.com/DaemonEngine/Daemon/issues?q=is%3Aopen+label%3AA-Renderer+label%3AT-Bug here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
<br />
The place to report new graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here].}}<br />
<br />
This table gathers test results about various hardware and software configurations, <span style="background-color: green !important; color: white !important; padding: .25em .5em;">passed</span> means nothing wrong is noticed and frame rate is at least <u>60 fps</u> on common scene, <span style="background-color: lightgreen !important; color: green !important; padding: .25em .5em;">playable</span> means at least <u>30 fps</u>.<br />
<br />
All those tests were driven by Unvanquished developers or under Unvanquished developer supervision.<br />
<br />
See [[#Comprehensive_analysis|below]] for analysis, specific definitions and meanings.<br />
{{GPU compatibility matrix}}<br />
<br />
<br/><hr/><br/><br />
<br />
== Comprehensive analysis ==<br />
<br />
Minimal configuration for the Unvanquished game is OpenGL 3.2. Unvanquished can run on OpenGL 2.1 hardware but this would not be playable because because we use models with more than 41 bones and OpenGL 2.1 cards can't accelerate them enough. It will run but it will be slow.<br />
<br />
Decent performance (given advanced graphical effects are disabled) starts with AMD/ATI TeraScale GPU, Intel HD Graphics (HD 4000), Nvidia Tesla-based GPUs. Though, it is strongly discouraged to buy GT218-based GPU like the Geforce 210 one as the proprietary driver for them is known to be buggy, requiring the engine to implement workarounds for it (save a game developer, do not buy this GPU!).<br />
<br />
To play at 4K resolutions, high-end AMD GCN/RDNA is recommended: AMD R9 390X from 2015 can handle <code>ultra</code> preset with 4K resolution at 144Hz. AMD R7 Embedded in R series APU can handle 2K resolution with <code>medium</code> preset (no realtime light and relief mapping disabled) as well as Intel UHD.<br />
<br />
Minimal configuration to run the Dæmon engine is OpenGL 2.1 with <code>ARB_half_float_vertex</code> and <code>ARB_framebuffer_object</code> (<code>EXT_framebuffer_object</code> is not enough). It includes ATI/AMD GPU starting with R300 (Radeon X300), Intel GPU starting with GMA965 (X3100) on Linux and macOS, HD Graphics on Windows, Nvidia starting with Curie (NV40, Geforce 6xxx). Wikipedia says the GMA965 Windows driver only supports OpenGL 1.5 and then would not reach the requirements for running Unvanquished on this platform. If you plan to make a game using Damon engine supporting those older cards, make sure your animated models don't have more than 41 bones.<br />
<br />
== How to contribute ==<br />
<br />
This matrix is generated from a cell sheet. Do not edit it by hand, Please ask <code>illwieckz</code> for access to the cell sheet.<br />
<br />
Please sort your contributions by brand (ATI/AMD, Intel, Nvidia, Via…) then by launch date (from newer to older).<br />
<br />
The table also documents who may be able to reproduce a special configuration, please put your nick name and tell how much it is easy for you to reproduce a test on it (see below for keywords to use).<br />
<br />
Please tell at least, brand, model, model launch date (look at Wikipedia), host, memory size, the operating system, the driver (kernel mode and user mode), OpenGL and GLSL version, Unvanquished version you tested, the status, the preset and the resolution you validated and eventual notes.<br />
<br />
If you find out the code name and related micro architecture, please note it, same with form factor and bus.<br />
<br />
Other data are less relevant for diagnostic and are only useful to get a better picture of the tested hardware, don't hesitate to write down as much info as you can.<br />
<br />
Append the <code>~</code> character to version number if you're testing a preversion. For example use <code>0.52~</code> to tell you tested against the to-be-released 0.52 version.<br />
<br />
Put a single <code>-</code> character in cell you don't have data for (do not leave empty cells). When you describe multiple configuration for the same piece of hardware, use the <code>↑</code> character to tell the cell uses the same value as the previous line.<br />
<br />
== Definitions ==<br />
<br />
=== Status ===<br />
<br />
* '''hang''': the computer becomes unresponsive, requiring a hard reset;<br />
* '''crash''': the game is terminated by the operating system on some unrecoverable failure;<br />
* '''missing''': the game exits by itself because of some requirement not being met;<br />
* '''broken''': the game loads maps but graphical bugs affecting gameplay are seen;<br />
* '''glitchy''': the game loads maps but graphical bugs non-affecting gameplay are seen;<br />
* '''slow''': the game is rendered properly but slowly with less than 30 fps;<br />
* '''playable''': nothing wrong is noticed and frame rate is at least 30 fps but less than 60 fps;<br />
* '''passed''': nothing wrong is noticed and frame rate is at least 60 fps.<br />
<br />
=== Availability ===<br />
<br />
* '''lost''': tester has lost access to the hardware;<br />
* '''foreign''': tester has access to the hardware but does not own it;<br />
* '''unplugged''': tester owns the hardware but testing requires to plug the hardware in a computer;<br />
* '''unconfigured''': hardware is plugged in a computer but making use of it requires software changes;<br />
* '''configured''': hardware and software are ready to use for testing.<br />
<br />
=== Notes ===<br />
<br />
* '''extfbo''': this GPU provides {{code|ARB_framebuffer_object}} instead of {{code|ARB_framebuffer_object}};<br />
* '''fakefps''': game displays high frame rate number but the experience is stuttering;<br />
* '''hickups''': performance is globally correct, but sometime the framerate drops a bit for a very short time;<br />
* '''lowsky''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid skybox graphical glitches;<br />
* '''lowtex''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid a computer hang;<br />
* '''mesamain''': running the driver from Mesa {{code|main}} at the time of the test was required to get the game running or avoid major rendering bugs;<br />
* '''noaccel''': no OpenGL hardware acceleration is implemented;<br />
* '''nogather''': <code>GL_ARB_texture_gather</code> is wrongly advertised by the driver to be supported by this hardware, making the engine crash at startup (Nvidia proprietary driver bug). The engine ships some workaround for this driver bug, if you experience the crash on version 0.52 and later but can properly start the game with <code>-set r_arb_texture_gather 0</code> engine command line option, please reopen issue [https://github.com/DaemonEngine/Daemon/issues/368 Daemon#368];<br />
* '''nohalfloatvertex''': missing <code>ARB_half_float_vertex</code> OpenGL extension;<br />
* '''nohyperz''': <code>R600_DEBUG=nohyperz</code> environment variable is required to be set to avoid graphical glitches, see issues [https://github.com/DaemonEngine/Daemon/issues/343 Daemon#343] and [https://gitlab.freedesktop.org/mesa/mesa/-/issues/3290 Mesa#3290];<br />
* '''norgtc''': <code>GL_ARB_texture_compression_rgtc</code> extension is not supported on this hardware, some texture may be loaded with swapped channels, especially normal maps. Engine implements special algorithms to workaround this, see issue [https://github.com/DaemonEngine/Daemon/issues/375 Daemon#375];<br />
* '''nvidiagarbage''': this driver is so bad you have to be very lucky to get at least a desktop drawn on screen before the computer hangs. With or without the game, after some screen freezes and display server crashes the kernel will complain about the card having disconnected itself from the PCIe bus. This issue was verified on multiple cards of this generations that are known to run for months without crashing when using free open source drivers instead;<br />
* '''slowmodel''': models with a lot of bones are known to induce severe frame drop on such hardware, see issue [https://github.com/Unvanquished/Unvanquished/issues/1207 Unvanquished#1207];<br />
* '''tinyalu''': this hardware has a very small ALU (arithmetic logic unit), dynamic lighting must be disabled with <code>r_dynamicLight 0</code> to prevent the driver to abort GLSL shader compilation that may lead to an engine crash, see issue [https://github.com/DaemonEngine/Daemon/issues/344 Daemon#344].<br />
<br />
=== Bus ===<br />
<br />
* '''PCI''': [https://en.wikipedia.org/wiki/Peripheral_Component_Interconnect Peripheral Component Interconnect], slow multi-purpose bus for add-on cards, obsolete;<br />
* '''PCI-X''': [https://en.wikipedia.org/wiki/PCI-X Peripheral Component Interconnect eXtended], enhanced version of PCI for servers and workstations, obsolete;<br />
* '''AGP''': [https://en.wikipedia.org/wiki/Accelerated_Graphics_Port Accelerated Graphics Port], high-speed bus designed for graphic cards, obsolete;<br />
* '''FSB''': [https://en.wikipedia.org/wiki/Front-side_bus Front-side bus], high-speed Intel system bus for CPUs, sometime used with onboard GPUs (example: GeForce 7050 + nForce 610i/630i);<br />
* '''HT''': [https://en.wikipedia.org/wiki/HyperTransport HyperTransport], high-speed AMD system bus for CPUs, sometime used with onboard GPUs (example: GeForce 6150 LE + nForce 430);<br />
* '''chip''': Internal bus of a [https://en.wikipedia.org/wiki/System_on_a_chip system on a chip] (SoC), the exact communication bus technology is usually poorly documented;<br />
* '''PCIe''': [https://en.wikipedia.org/wiki/PCI_Express PCI Express], high-speed multi-purpose bus for add-on cards and on-board devices, recommended;<br />
* '''CXL''': [https://en.wikipedia.org/wiki/Compute_Express_Link, Compute Express Link], high-speed multi-purpose bus for add-on cards;<br />
* '''TB''': [https://fr.wikipedia.org/wiki/Thunderbolt_(interface) ThunderBolt], high speed cable combining PCI Express and DisplayPort or USB-C to connect external PCI Express cards like GPUs.<br />
<br />
=== Form factor ===<br />
<br />
* '''discrete''': full height workstation extension card, with dedicated graphics memory;<br />
* '''lowprofile''': low profile workstation extension card, with dedicated graphics memory;<br />
* '''MXM''': [https://en.wikipedia.org/wiki/Mobile_PCI_Express_Module Mobile PCI Express module], laptop extension card, with dedicated graphics memory;<br />
* '''onboard''': dedicated GPU on motherboard, low end ones may share memory with the CPU;<br />
* '''integrated''': GPU integrated in CPU package or chipset, likely sharing memory with the CPU;<br />
* '''SoC''': System on a chip, with the GPU likely sharing memory with the CPU;<br />
<br />
=== Micro architecture ===<br />
<br />
* '''USSA''': ATi Unified Superscalar Shader Architecture;<br />
* '''GCN''': AMD Graphics Core Next;<br />
* '''RDNA''': AMD Radeon DNA;<br />
* '''GMA''': Intel Graphics Media Accelerator;<br />
* '''GT''': Intel Graphics Technology.<br />
<br />
=== Memory glossary ===<br />
<br />
* '''HM''': HyperMemory, ATi technology using main memory when GPU memory is full;<br />
* '''TC''': TurboCache, Nvidia technology using main memory when GPU memory is full;<br />
* '''AR''': AcceleRAM, S3 technology using main memory when GPU memory is full.<br />
<br />
== Useful resources ==<br />
<br />
* [https://mesamatrix.net/ Mesa Matrix]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units Wikipedia list of AMD graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units Wikipedia list of AMD accelerated processing units]<br />
* [https://www.x.org/wiki/RadeonFeature/ X.Org Radeon feature matrix and decoder ring]<br />
* [https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units Wikipedia list of Intel graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units Wikipedia list of Nvidia graphics processing units]<br />
* [https://nouveau.freedesktop.org/wiki/MesaDrivers/ Mesa Nouveau drivers]<br />
* [https://nouveau.freedesktop.org/wiki/CodeNames/ Mesa Nouveau decoder ring]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Formats/Known_regressions_since_Tremulous&diff=8576Formats/Known regressions since Tremulous2023-12-06T21:50:19Z<p>Illwieckz: </p>
<hr />
<div>[[Category:Formats]]<br />
As a mapper or someone creating assets for the game, you may be aware of those pitfalls that can be considered as regressions when comparing with Tremulous or Quake Ⅲ.<br />
<br />
See also the [[Formats/Limitations that are not regressions|Limitations that are not regressions]] page for things that are not regressions.<br />
<br />
== Regressions that may make the game look broken ==<br />
<br />
=== Missing portal blending ===<br />
<br />
Portal blending is not implemented yet in the renderer.<br />
<br />
What happens is that the renderer that was used in Quake Ⅲ and Tremulous were OpenGL 1 renderers, and the Dæmon engine renderer is an OpenGL 3+ renderer. The difference between OpenGL 1 and OpenGL 3+ is similar to the difference between OpenGL 4.6 and Vulkan. Those renderers are different software. Everything from the OpenGL 1 renderer had to be re-implemented in OpenGL 3+ renderer with new code.<br />
<br />
So the lack of portable blending is not technically a regression as the code never existed in the renderer to begin with. It also means there is no bug in our code.<br />
<br />
Though, we fully agree this means a map ported from Tremulous that was using that feature will look broken and that then can be considered as a regression from a player or mapper point of view.<br />
<br />
From the code point of view, this is a feature request and we need someone to implement it. We are looking for renderer developers and OpenGL 3+ specialist to implement the feature in our engine.<br />
<br />
== Regressions with fixes implemented but not released yet ==<br />
<br />
{{TODO|Remove this once Dæmon 0.54.1 is out.}}<br />
<br />
=== Missing RoQ video ===<br />
<br />
RoQ video support was removed long time ago as Unvanquished did not make use of it.<br />
<br />
Later the last remaining video format was removed, it was a format from an alternate reality that never happened : OGM with Vorbis and Theora. OGM with Vorbis and Theora is '''''not''''' OGG with Vorbis and Theora. The OGM format was a hack purposed for DivX piracy scene to mux XviD video with Vorbis audio, and while OGM with XviD was pretty popular, no one known tool can produce OGM with Vorbis and Theora. illwieckz tried a bunch of current and old software from the era and none was able to produce OGM with Theora and Vorbis. Neither oggenc from vorbis-tools, neither ogmtools, neither ffmpeg (recent and old), neither mencoder, neither OggMux, neither OGMMuxer, neither VirtualDubMod (modded VirtualDub for OGM support), neither ffdshow with OGM, Theora and Vorbis codecs. The only remaining thing untested is some obscure Visual Studio plugin that was mentioned in some places but for which no one file was found yet. We know something existed since Smokin' Guns game uses such OGM with Theora and Vorbis title video. That's all.<br />
<br />
Once that cursed OGM with Theora and Vorbis format was removed, the Theora codec was dead code and the Video support was dead code. This dead code was removed at some point because of being dead code.<br />
<br />
The removal of Video playing feature and the removal of RoQ support without alternative was controversial, and Dæmon 0.54.1 will bring back {{code|videoMap}} support with RoQ format.<br />
<br />
== Regressions that may make the game look broken, but with workaround ==<br />
<br />
=== Stereo sound effect not being positional ===<br />
<br />
Currently only mono sound files are played properly as positional audio, stereo sound files are played ''in your face''. We need to fix this.<br />
<br />
A simple workaround can be applied when repackaging the files: just convert the positional stereo sound as mono, this would make no difference to the player (stereo positional sound is meaningless anyway).<br />
<br />
== Regressions that don't make the game look broken ==<br />
<br />
=== Missing alphaGen lightingSpecular ===<br />
<br />
The {{code|alphaGen lightingSpecular}} was a subtle effect applied on some textures. This feature being missing doesn't break the rendering of the texture and if you look at the surface you may not notice something is wrong, unless you do comparative screenshots with Tremulous and Unvanquished.<br />
<br />
Implementing this feature has very low priority as there is no impact on gameplay and textures don't look bad without it. The game don't look broken without it and one cannot know the feature is missing just by playing the game, unless some warning tells it in log.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=GPU_compatibility_matrix&diff=8574GPU compatibility matrix2023-11-26T19:22:18Z<p>Illwieckz: </p>
<hr />
<div>{{Note|header=Known workarounds|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].}}<br />
{{Note|header=Known bugs|content=<br />
* {{Intel}}: People reported some graphical glitches on specific graphic chip or specific operating system, if you encounter a bug, please check [https://github.com/DaemonEngine/Daemon/labels/GPU-Intel here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
The place to report graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here].}}<br />
<br />
This table gathers test results about various hardware and software configurations, <span style="background-color: green !important; color: white !important; padding: .25em .5em;">passed</span> means nothing wrong is noticed and frame rate is at least <u>60 fps</u> on common scene, <span style="background-color: lightgreen !important; color: green !important; padding: .25em .5em;">playable</span> means at least <u>30 fps</u>.<br />
<br />
All those tests were driven by Unvanquished developers or under Unvanquished developer supervision.<br />
<br />
See [[#Comprehensive_analysis|below]] for analysis, specific definitions and meanings.<br />
{{GPU compatibility matrix}}<br />
<br />
<br/><hr/><br/><br />
<br />
== Comprehensive analysis ==<br />
<br />
Minimal configuration for the Unvanquished game is OpenGL 3.2. Unvanquished can run on OpenGL 2.1 hardware but this would not be playable because because we use models with more than 41 bones and OpenGL 2.1 cards can't accelerate them enough. It will run but it will be slow.<br />
<br />
Decent performance (given advanced graphical effects are disabled) starts with AMD/ATI TeraScale GPU, Intel HD Graphics (HD 4000), Nvidia Tesla-based GPUs. Though, it is strongly discouraged to buy GT218-based GPU like the Geforce 210 one as the proprietary driver for them is known to be buggy, requiring the engine to implement workarounds for it (save a game developer, do not buy this GPU!).<br />
<br />
To play at 4K resolutions, high-end AMD GCN/RDNA is recommended: AMD R9 390X from 2015 can handle <code>ultra</code> preset with 4K resolution at 144Hz. AMD R7 Embedded in R series APU can handle 2K resolution with <code>medium</code> preset (no realtime light and relief mapping disabled) as well as Intel UHD.<br />
<br />
Minimal configuration to run the Dæmon engine is OpenGL 2.1 with <code>ARB_half_float_vertex</code> and <code>ARB_framebuffer_object</code> (<code>EXT_framebuffer_object</code> is not enough). It includes ATI/AMD GPU starting with R300 (Radeon X300), Intel GPU starting with GMA965 (X3100) on Linux and macOS, HD Graphics on Windows, Nvidia starting with Curie (NV40, Geforce 6xxx). Wikipedia says the GMA965 Windows driver only supports OpenGL 1.5 and then would not reach the requirements for running Unvanquished on this platform. If you plan to make a game using Damon engine supporting those older cards, make sure your animated models don't have more than 41 bones.<br />
<br />
== How to contribute ==<br />
<br />
This matrix is generated from a cell sheet. Do not edit it by hand, Please ask <code>illwieckz</code> for access to the cell sheet.<br />
<br />
Please sort your contributions by brand (ATI/AMD, Intel, Nvidia, Via…) then by launch date (from newer to older).<br />
<br />
The table also documents who may be able to reproduce a special configuration, please put your nick name and tell how much it is easy for you to reproduce a test on it (see below for keywords to use).<br />
<br />
Please tell at least, brand, model, model launch date (look at Wikipedia), host, memory size, the operating system, the driver (kernel mode and user mode), OpenGL and GLSL version, Unvanquished version you tested, the status, the preset and the resolution you validated and eventual notes.<br />
<br />
If you find out the code name and related micro architecture, please note it, same with form factor and bus.<br />
<br />
Other data are less relevant for diagnostic and are only useful to get a better picture of the tested hardware, don't hesitate to write down as much info as you can.<br />
<br />
Append the <code>~</code> character to version number if you're testing a preversion. For example use <code>0.52~</code> to tell you tested against the to-be-released 0.52 version.<br />
<br />
Put a single <code>-</code> character in cell you don't have data for (do not leave empty cells). When you describe multiple configuration for the same piece of hardware, use the <code>↑</code> character to tell the cell uses the same value as the previous line.<br />
<br />
== Definitions ==<br />
<br />
=== Status ===<br />
<br />
* '''hang''': the computer becomes unresponsive, requiring a hard reset;<br />
* '''crash''': the game is terminated by the operating system on some unrecoverable failure;<br />
* '''missing''': the game exits by itself because of some requirement not being met;<br />
* '''broken''': the game loads maps but graphical bugs affecting gameplay are seen;<br />
* '''glitchy''': the game loads maps but graphical bugs non-affecting gameplay are seen;<br />
* '''slow''': the game is rendered properly but slowly with less than 30 fps;<br />
* '''playable''': nothing wrong is noticed and frame rate is at least 30 fps but less than 60 fps;<br />
* '''passed''': nothing wrong is noticed and frame rate is at least 60 fps.<br />
<br />
=== Availability ===<br />
<br />
* '''lost''': tester has lost access to the hardware;<br />
* '''foreign''': tester has access to the hardware but does not own it;<br />
* '''unplugged''': tester owns the hardware but testing requires to plug the hardware in a computer;<br />
* '''unconfigured''': hardware is plugged in a computer but making use of it requires software changes;<br />
* '''configured''': hardware and software are ready to use for testing.<br />
<br />
=== Notes ===<br />
<br />
* '''extfbo''': this GPU provides {{code|ARB_framebuffer_object}} instead of {{code|ARB_framebuffer_object}};<br />
* '''fakefps''': game displays high frame rate number but the experience is stuttering;<br />
* '''hickups''': performance is globally correct, but sometime the framerate drops a bit for a very short time;<br />
* '''lowsky''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid skybox graphical glitches;<br />
* '''lowtex''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid a computer hang;<br />
* '''mesamain''': running the driver from Mesa {{code|main}} at the time of the test was required to get the game running or avoid major rendering bugs;<br />
* '''noaccel''': no OpenGL hardware acceleration is implemented;<br />
* '''nogather''': <code>GL_ARB_texture_gather</code> is wrongly advertised by the driver to be supported by this hardware, making the engine crash at startup (Nvidia proprietary driver bug). The engine ships some workaround for this driver bug, if you experience the crash on version 0.52 and later but can properly start the game with <code>-set r_arb_texture_gather 0</code> engine command line option, please reopen issue [https://github.com/DaemonEngine/Daemon/issues/368 Daemon#368];<br />
* '''nohalfloatvertex''': missing <code>ARB_half_float_vertex</code> OpenGL extension;<br />
* '''nohyperz''': <code>R600_DEBUG=nohyperz</code> environment variable is required to be set to avoid graphical glitches, see issues [https://github.com/DaemonEngine/Daemon/issues/343 Daemon#343] and [https://gitlab.freedesktop.org/mesa/mesa/-/issues/3290 Mesa#3290];<br />
* '''norgtc''': <code>GL_ARB_texture_compression_rgtc</code> extension is not supported on this hardware, some texture may be loaded with swapped channels, especially normal maps. Engine implements special algorithms to workaround this, see issue [https://github.com/DaemonEngine/Daemon/issues/375 Daemon#375];<br />
* '''nvidiagarbage''': this driver is so bad you have to be very lucky to get at least a desktop drawn on screen before the computer hangs. With or without the game, after some screen freezes and display server crashes the kernel will complain about the card having disconnected itself from the PCIe bus. This issue was verified on multiple cards of this generations that are known to run for months without crashing when using free open source drivers instead;<br />
* '''slowmodel''': models with a lot of bones are known to induce severe frame drop on such hardware, see issue [https://github.com/Unvanquished/Unvanquished/issues/1207 Unvanquished#1207];<br />
* '''tinyalu''': this hardware has a very small ALU (arithmetic logic unit), dynamic lighting must be disabled with <code>r_dynamicLight 0</code> to prevent the driver to abort GLSL shader compilation that may lead to an engine crash, see issue [https://github.com/DaemonEngine/Daemon/issues/344 Daemon#344].<br />
<br />
=== Bus ===<br />
<br />
* '''PCI''': [https://en.wikipedia.org/wiki/Peripheral_Component_Interconnect Peripheral Component Interconnect], slow multi-purpose bus for add-on cards, obsolete;<br />
* '''PCI-X''': [https://en.wikipedia.org/wiki/PCI-X Peripheral Component Interconnect eXtended], enhanced version of PCI for servers and workstations, obsolete;<br />
* '''AGP''': [https://en.wikipedia.org/wiki/Accelerated_Graphics_Port Accelerated Graphics Port], high-speed bus designed for graphic cards, obsolete;<br />
* '''FSB''': [https://en.wikipedia.org/wiki/Front-side_bus Front-side bus], high-speed Intel system bus for CPUs, sometime used with onboard GPUs (example: GeForce 7050 + nForce 610i/630i);<br />
* '''HT''': [https://en.wikipedia.org/wiki/HyperTransport HyperTransport], high-speed AMD system bus for CPUs, sometime used with onboard GPUs (example: GeForce 6150 LE + nForce 430);<br />
* '''chip''': Internal bus of a [https://en.wikipedia.org/wiki/System_on_a_chip system on a chip] (SoC), the exact communication bus technology is usually poorly documented;<br />
* '''PCIe''': [https://en.wikipedia.org/wiki/PCI_Express PCI Express], high-speed multi-purpose bus for add-on cards and on-board devices, recommended;<br />
* '''CXL''': [https://en.wikipedia.org/wiki/Compute_Express_Link, Compute Express Link], high-speed multi-purpose bus for add-on cards;<br />
* '''TB''': [https://fr.wikipedia.org/wiki/Thunderbolt_(interface) ThunderBolt], high speed cable combining PCI Express and DisplayPort or USB-C to connect external PCI Express cards like GPUs.<br />
<br />
=== Form factor ===<br />
<br />
* '''discrete''': full height workstation extension card, with dedicated graphics memory;<br />
* '''lowprofile''': low profile workstation extension card, with dedicated graphics memory;<br />
* '''MXM''': [https://en.wikipedia.org/wiki/Mobile_PCI_Express_Module Mobile PCI Express module], laptop extension card, with dedicated graphics memory;<br />
* '''onboard''': dedicated GPU on motherboard, low end ones may share memory with the CPU;<br />
* '''integrated''': GPU integrated in CPU package or chipset, likely sharing memory with the CPU;<br />
* '''SoC''': System on a chip, with the GPU likely sharing memory with the CPU;<br />
<br />
=== Micro architecture ===<br />
<br />
* '''USSA''': ATi Unified Superscalar Shader Architecture;<br />
* '''GCN''': AMD Graphics Core Next;<br />
* '''RDNA''': AMD Radeon DNA;<br />
* '''GMA''': Intel Graphics Media Accelerator;<br />
* '''GT''': Intel Graphics Technology.<br />
<br />
=== Memory glossary ===<br />
<br />
* '''HM''': HyperMemory, ATi technology using main memory when GPU memory is full;<br />
* '''TC''': TurboCache, Nvidia technology using main memory when GPU memory is full;<br />
* '''AR''': AcceleRAM, S3 technology using main memory when GPU memory is full.<br />
<br />
== Useful resources ==<br />
<br />
* [https://mesamatrix.net/ Mesa Matrix]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units Wikipedia list of AMD graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units Wikipedia list of AMD accelerated processing units]<br />
* [https://www.x.org/wiki/RadeonFeature/ X.Org Radeon feature matrix and decoder ring]<br />
* [https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units Wikipedia list of Intel graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units Wikipedia list of Nvidia graphics processing units]<br />
* [https://nouveau.freedesktop.org/wiki/MesaDrivers/ Mesa Nouveau drivers]<br />
* [https://nouveau.freedesktop.org/wiki/CodeNames/ Mesa Nouveau decoder ring]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=GPU_compatibility_matrix&diff=8573GPU compatibility matrix2023-11-26T19:19:51Z<p>Illwieckz: </p>
<hr />
<div>{{Note|header=Known workarounds|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].}}<br />
{{Note|header=Known bugs|content=<br />
* {{Intel}}: People reported some graphical glitches on specific graphic chip or specific operating system, if you encounter a bug, please check [https://github.com/DaemonEngine/Daemon/labels/GPU-Intel here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
The place to report graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here].}}<br />
<br />
This table gathers test results about various hardware and software configurations, <span style="background-color: green !important; color: white !important; padding: .25em .5em;">passed</span> means nothing wrong is noticed and frame rate is at least <u>60 fps</u> on common scene, <span style="background-color: lightgreen !important; color: green !important; padding: .25em .5em;">playable</span> means at least <u>30 fps</u>.<br />
<br />
All those tests were driven by Unvanquished developers or under Unvanquished developer supervision.<br />
<br />
See [[#Comprehensive_analysis|below]] for analysis, specific definitions and meanings.<br />
{{GPU compatibility matrix}}<br />
<br />
<br/><hr/><br/><br />
<br />
== Comprehensive analysis ==<br />
<br />
Minimal configuration for the Unvanquished game is OpenGL 3.2. Unvanquished can run on OpenGL 2.1 hardware but this would not be playable because because we use models with more than 41 bones and OpenGL 2.1 cards can't accelerate them enough. It will run but it will be slow.<br />
<br />
Decent performance (given advanced graphical effects are disabled) starts with AMD/ATI TeraScale GPU, Intel HD Graphics (HD 4000), Nvidia Tesla-based GPUs. Though, it is strongly discouraged to buy GT218-based GPU like the Geforce 210 one as the proprietary driver for them is known to be buggy, requiring the engine to implement workarounds for it (save a game developer, do not buy this GPU!).<br />
<br />
To play at 4K resolutions, high-end AMD GCN/RDNA is recommended: AMD R9 390X from 2015 can handle <code>ultra</code> preset with 4K resolution at 144Hz. AMD R7 Embedded in R series APU can handle 2K resolution with <code>medium</code> preset (no realtime light and relief mapping disabled) as well as Intel UHD.<br />
<br />
Minimal configuration to run the Dæmon engine is OpenGL 2.1 with <code>ARB_half_float_vertex</code> and <code>ARB_framebuffer_object</code> (<code>EXT_framebuffer_object</code> is not enough). It includes ATI/AMD GPU starting with R300 (Radeon X300), Intel GPU starting with GMA965 (X3100) on Linux and macOS, HD Graphics on Windows, Nvidia starting with Curie (NV40, Geforce 6xxx). Wikipedia says the GMA965 Windows driver only supports OpenGL 1.5 and then would not reach the requirements for running Unvanquished on this platform. If you plan to make a game using Damon engine supporting those older cards, make sure your animated models don't have more than 41 bones.<br />
<br />
== How to contribute ==<br />
<br />
This matrix is generated from a cell sheet. Do not edit it by hand, Please ask <code>illwieckz</code> for access to the cell sheet.<br />
<br />
Please sort your contributions by brand (ATI/AMD, Intel, Nvidia, Via…) then by launch date (from newer to older).<br />
<br />
The table also documents who may be able to reproduce a special configuration, please put your nick name and tell how much it is easy for you to reproduce a test on it (see below for keywords to use).<br />
<br />
Please tell at least, brand, model, model launch date (look at Wikipedia), host, memory size, the operating system, the driver (kernel mode and user mode), OpenGL and GLSL version, Unvanquished version you tested, the status, the preset and the resolution you validated and eventual notes.<br />
<br />
If you find out the code name and related micro architecture, please note it, same with form factor and bus.<br />
<br />
Other data are less relevant for diagnostic and are only useful to get a better picture of the tested hardware, don't hesitate to write down as much info as you can.<br />
<br />
Append the <code>~</code> character to version number if you're testing a preversion. For example use <code>0.52~</code> to tell you tested against the to-be-released 0.52 version.<br />
<br />
Put a single <code>-</code> character in cell you don't have data for (do not leave empty cells). When you describe multiple configuration for the same piece of hardware, use the <code>↑</code> character to tell the cell uses the same value as the previous line.<br />
<br />
== Definitions ==<br />
<br />
=== Status ===<br />
<br />
* '''hang''': the computer becomes unresponsive, requiring a hard reset;<br />
* '''crash''': the game is terminated by the operating system on some unrecoverable failure;<br />
* '''missing''': the game exits by itself because of some requirement not being met;<br />
* '''broken''': the game loads maps but graphical bugs affecting gameplay are seen;<br />
* '''glitchy''': the game loads maps but graphical bugs non-affecting gameplay are seen;<br />
* '''slow''': the game is rendered properly but slowly with less than 30 fps;<br />
* '''playable''': nothing wrong is noticed and frame rate is at least 30 fps but less than 60 fps;<br />
* '''passed''': nothing wrong is noticed and frame rate is at least 60 fps.<br />
<br />
=== Availability ===<br />
<br />
* '''lost''': tester has lost access to the hardware;<br />
* '''foreign''': tester has access to the hardware but does not own it;<br />
* '''unplugged''': tester owns the hardware but testing requires to plug the hardware in a computer;<br />
* '''unconfigured''': hardware is plugged in a computer but making use of it requires software changes;<br />
* '''configured''': hardware and software are ready to use for testing.<br />
<br />
=== Notes ===<br />
<br />
* '''extfbo''': this GPU provides {{code|ARB_framebuffer_object}} instead of {{code|ARB_framebuffer_object}};<br />
* '''fakefps''': game displays high frame rate number but the experience is stuttering;<br />
* '''hickups''': performance is globally correct, but sometime the framerate drops a bit for a very short time;<br />
* '''lowsky''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid skybox graphical glitches;<br />
* '''lowtex''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid a computer hang;<br />
* '''mesamain''': running the driver from Mesa {{code|main}} at the time of the test was required to get the game running or avoid major rendering bugs;<br />
* '''noaccel''': no OpenGL hardware acceleration is implemented;<br />
* '''nogather''': <code>GL_ARB_texture_gather</code> is wrongly advertised by the driver to be supported by this hardware, making the engine crash at startup (Nvidia proprietary driver bug). The engine ships some workaround for this driver bug, if you experience the crash on version 0.52 and later but can properly start the game with <code>-set r_arb_texture_gather 0</code> engine command line option, please reopen issue [https://github.com/DaemonEngine/Daemon/issues/368 Daemon#368];<br />
* '''nohalfloatvertex''': missing <code>ARB_half_float_vertex</code> OpenGL extension;<br />
* '''nohyperz''': <code>R600_DEBUG=nohyperz</code> environment variable is required to be set to avoid graphical glitches, see issues [https://github.com/DaemonEngine/Daemon/issues/343 Daemon#343] and [https://gitlab.freedesktop.org/mesa/mesa/-/issues/3290 Mesa#3290];<br />
* '''norgtc''': <code>GL_ARB_texture_compression_rgtc</code> extension is not supported on this hardware, some texture may be loaded with swapped channels, especially normal maps. Engine implements special algorithms to workaround this, see issue [https://github.com/DaemonEngine/Daemon/issues/375 Daemon#375];<br />
* '''nvidiagarbage''': this driver is so bad you have to be very lucky to get at least a desktop drawn on screen before the computer hangs. With or without the game, after some screen freezes and display server crashes the kernel will complain about the card having disconnected itself from the PCIe bus. This issue was verified on multiple cards of this generations that are known to run for months without crashing when using free open source drivers instead;<br />
* '''slowmodel''': models with a lot of bones are known to induce severe frame drop on such hardware, see issue [https://github.com/Unvanquished/Unvanquished/issues/1207 Unvanquished#1207];<br />
* '''tinyalu''': this hardware has a very small ALU (arithmetic logic unit), dynamic lighting must be disabled with <code>r_dynamicLight 0</code> to prevent the driver to abort GLSL shader compilation that may lead to an engine crash, see issue [https://github.com/DaemonEngine/Daemon/issues/344 Daemon#344].<br />
<br />
=== Bus ===<br />
<br />
* '''PCI''': [https://en.wikipedia.org/wiki/Peripheral_Component_Interconnect Peripheral Component Interconnect], slow multi-purpose bus for add-on cards, obsolete;<br />
* '''PCI-X''': [https://en.wikipedia.org/wiki/PCI-X Peripheral Component Interconnect eXtended], enhanced version of PCI for servers and workstations, obsolete;<br />
* '''AGP''': [https://en.wikipedia.org/wiki/Accelerated_Graphics_Port Accelerated Graphics Port], high-speed bus designed for graphic cards, obsolete;<br />
* '''FSB''': [https://en.wikipedia.org/wiki/Front-side_bus Front-side bus], high-speed Intel system bus for CPUs, sometime used with onboard GPUs (example: GeForce 7050 + nForce 610i/630i);<br />
* '''HT''': [https://en.wikipedia.org/wiki/HyperTransport HyperTransport], high-speed AMD system bus for CPUs, sometime used with onboard GPUs (example: GeForce 6150 LE + nForce 430);<br />
* '''chip''': Internal bus of a [https://en.wikipedia.org/wiki/System_on_a_chip system on a chip] (SoC), the exact communication bus technology is usually poorly documented;<br />
* '''PCIe''': [https://en.wikipedia.org/wiki/PCI_Express PCI Express], high-speed multi-purpose bus for add-on cards and on-board devices, recommended;<br />
* '''CXL''': [https://en.wikipedia.org/wiki/Compute_Express_Link, Compute Express Link], high-speed multi-purpose bus for add-on cards;<br />
* '''TB''': [https://fr.wikipedia.org/wiki/Thunderbolt_(interface) ThunderBolt], high speed cable combining PCI Express and DisplayPort or USB-C to connect external PCI Express cards like GPUs.<br />
<br />
=== Form factor ===<br />
<br />
* '''discrete''': full height workstation extension card, with dedicated graphics memory;<br />
* '''lowprofile''': low profile workstation extension card, with dedicated graphics memory;<br />
* '''MXM''': [https://en.wikipedia.org/wiki/Mobile_PCI_Express_Module Mobile PCI Express module], laptop extension card, with dedicated graphics memory;<br />
* '''onboard''': GPU chipset on motherboard, likely sharing memory with the CPU;<br />
* '''integrated''': GPU integrated in CPU package or chipset, likely sharing memory with the CPU;<br />
* '''SoC''': System on a chip, with the GPU likely sharing memory with the CPU;<br />
<br />
=== Micro architecture ===<br />
<br />
* '''USSA''': ATi Unified Superscalar Shader Architecture;<br />
* '''GCN''': AMD Graphics Core Next;<br />
* '''RDNA''': AMD Radeon DNA;<br />
* '''GMA''': Intel Graphics Media Accelerator;<br />
* '''GT''': Intel Graphics Technology.<br />
<br />
=== Memory glossary ===<br />
<br />
* '''HM''': HyperMemory, ATi technology using main memory when GPU memory is full;<br />
* '''TC''': TurboCache, Nvidia technology using main memory when GPU memory is full;<br />
* '''AR''': AcceleRAM, S3 technology using main memory when GPU memory is full.<br />
<br />
== Useful resources ==<br />
<br />
* [https://mesamatrix.net/ Mesa Matrix]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units Wikipedia list of AMD graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units Wikipedia list of AMD accelerated processing units]<br />
* [https://www.x.org/wiki/RadeonFeature/ X.Org Radeon feature matrix and decoder ring]<br />
* [https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units Wikipedia list of Intel graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units Wikipedia list of Nvidia graphics processing units]<br />
* [https://nouveau.freedesktop.org/wiki/MesaDrivers/ Mesa Nouveau drivers]<br />
* [https://nouveau.freedesktop.org/wiki/CodeNames/ Mesa Nouveau decoder ring]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=GPU_compatibility_matrix&diff=8572GPU compatibility matrix2023-11-26T19:15:40Z<p>Illwieckz: </p>
<hr />
<div>{{Note|header=Known workarounds|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].}}<br />
{{Note|header=Known bugs|content=<br />
* {{Intel}}: People reported some graphical glitches on specific graphic chip or specific operating system, if you encounter a bug, please check [https://github.com/DaemonEngine/Daemon/labels/GPU-Intel here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
The place to report graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here].}}<br />
<br />
This table gathers test results about various hardware and software configurations, <span style="background-color: green !important; color: white !important; padding: .25em .5em;">passed</span> means nothing wrong is noticed and frame rate is at least <u>60 fps</u> on common scene, <span style="background-color: lightgreen !important; color: green !important; padding: .25em .5em;">playable</span> means at least <u>30 fps</u>.<br />
<br />
All those tests were driven by Unvanquished developers or under Unvanquished developer supervision.<br />
<br />
See [[#Comprehensive_analysis|below]] for analysis, specific definitions and meanings.<br />
{{GPU compatibility matrix}}<br />
<br />
<br/><hr/><br/><br />
<br />
== Comprehensive analysis ==<br />
<br />
Minimal configuration for the Unvanquished game is OpenGL 3.2. Unvanquished can run on OpenGL 2.1 hardware but this would not be playable because because we use models with more than 41 bones and OpenGL 2.1 cards can't accelerate them enough. It will run but it will be slow.<br />
<br />
Decent performance (given advanced graphical effects are disabled) starts with AMD/ATI TeraScale GPU, Intel HD Graphics (HD 4000), Nvidia Tesla-based GPUs. Though, it is strongly discouraged to buy GT218-based GPU like the Geforce 210 one as the proprietary driver for them is known to be buggy, requiring the engine to implement workarounds for it (save a game developer, do not buy this GPU!).<br />
<br />
To play at 4K resolutions, high-end AMD GCN/RDNA is recommended: AMD R9 390X from 2015 can handle <code>ultra</code> preset with 4K resolution at 144Hz. AMD R7 Embedded in R series APU can handle 2K resolution with <code>medium</code> preset (no realtime light and relief mapping disabled) as well as Intel UHD.<br />
<br />
Minimal configuration to run the Dæmon engine is OpenGL 2.1 with <code>ARB_half_float_vertex</code> and <code>ARB_framebuffer_object</code> (<code>EXT_framebuffer_object</code> is not enough). It includes ATI/AMD GPU starting with R300 (Radeon X300), Intel GPU starting with GMA965 (X3100) on Linux and macOS, HD Graphics on Windows, Nvidia starting with Curie (NV40, Geforce 6xxx). Wikipedia says the GMA965 Windows driver only supports OpenGL 1.5 and then would not reach the requirements for running Unvanquished on this platform. If you plan to make a game using Damon engine supporting those older cards, make sure your animated models don't have more than 41 bones.<br />
<br />
== How to contribute ==<br />
<br />
This matrix is generated from a cell sheet. Do not edit it by hand, Please ask <code>illwieckz</code> for access to the cell sheet.<br />
<br />
Please sort your contributions by brand (ATI/AMD, Intel, Nvidia, Via…) then by launch date (from newer to older).<br />
<br />
The table also documents who may be able to reproduce a special configuration, please put your nick name and tell how much it is easy for you to reproduce a test on it (see below for keywords to use).<br />
<br />
Please tell at least, brand, model, model launch date (look at Wikipedia), host, memory size, the operating system, the driver (kernel mode and user mode), OpenGL and GLSL version, Unvanquished version you tested, the status, the preset and the resolution you validated and eventual notes.<br />
<br />
If you find out the code name and related micro architecture, please note it, same with form factor and bus.<br />
<br />
Other data are less relevant for diagnostic and are only useful to get a better picture of the tested hardware, don't hesitate to write down as much info as you can.<br />
<br />
Append the <code>~</code> character to version number if you're testing a preversion. For example use <code>0.52~</code> to tell you tested against the to-be-released 0.52 version.<br />
<br />
Put a single <code>-</code> character in cell you don't have data for (do not leave empty cells). When you describe multiple configuration for the same piece of hardware, use the <code>↑</code> character to tell the cell uses the same value as the previous line.<br />
<br />
== Definitions ==<br />
<br />
=== Status ===<br />
<br />
* '''hang''': the computer becomes unresponsive, requiring a hard reset;<br />
* '''crash''': the game is terminated by the operating system on some unrecoverable failure;<br />
* '''missing''': the game exits by itself because of some requirement not being met;<br />
* '''broken''': the game loads maps but graphical bugs affecting gameplay are seen;<br />
* '''glitchy''': the game loads maps but graphical bugs non-affecting gameplay are seen;<br />
* '''slow''': the game is rendered properly but slowly with less than 30 fps;<br />
* '''playable''': nothing wrong is noticed and frame rate is at least 30 fps but less than 60 fps;<br />
* '''passed''': nothing wrong is noticed and frame rate is at least 60 fps.<br />
<br />
=== Availability ===<br />
<br />
* '''lost''': tester has lost access to the hardware;<br />
* '''foreign''': tester has access to the hardware but does not own it;<br />
* '''unplugged''': tester owns the hardware but testing requires to plug the hardware in a computer;<br />
* '''unconfigured''': hardware is plugged in a computer but making use of it requires software changes;<br />
* '''configured''': hardware and software are ready to use for testing.<br />
<br />
=== Notes ===<br />
<br />
* '''extfbo''': this GPU provides {{code|ARB_framebuffer_object}} instead of {{code|ARB_framebuffer_object}};<br />
* '''fakefps''': game displays high frame rate number but the experience is stuttering;<br />
* '''hickups''': performance is globally correct, but sometime the framerate drops a bit for a very short time;<br />
* '''lowsky''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid skybox graphical glitches;<br />
* '''lowtex''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid a computer hang;<br />
* '''mesamain''': running the driver from Mesa {{code|main}} at the time of the test was required to get the game running or avoid major rendering bugs;<br />
* '''noaccel''': no OpenGL hardware acceleration is implemented;<br />
* '''nogather''': <code>GL_ARB_texture_gather</code> is wrongly advertised by the driver to be supported by this hardware, making the engine crash at startup (Nvidia proprietary driver bug). The engine ships some workaround for this driver bug, if you experience the crash on version 0.52 and later but can properly start the game with <code>-set r_arb_texture_gather 0</code> engine command line option, please reopen issue [https://github.com/DaemonEngine/Daemon/issues/368 Daemon#368];<br />
* '''nohalfloatvertex''': missing <code>ARB_half_float_vertex</code> OpenGL extension;<br />
* '''nohyperz''': <code>R600_DEBUG=nohyperz</code> environment variable is required to be set to avoid graphical glitches, see issues [https://github.com/DaemonEngine/Daemon/issues/343 Daemon#343] and [https://gitlab.freedesktop.org/mesa/mesa/-/issues/3290 Mesa#3290];<br />
* '''norgtc''': <code>GL_ARB_texture_compression_rgtc</code> extension is not supported on this hardware, some texture may be loaded with swapped channels, especially normal maps. Engine implements special algorithms to workaround this, see issue [https://github.com/DaemonEngine/Daemon/issues/375 Daemon#375];<br />
* '''nvidiagarbage''': this driver is so bad you have to be very lucky to get at least a desktop drawn on screen before the computer hangs. With or without the game, after some screen freezes and display server crashes the kernel will complain about the card having disconnected itself from the PCIe bus. This issue was verified on multiple cards of this generations that are known to run for months without crashing when using free open source drivers instead;<br />
* '''slowmodel''': models with a lot of bones are known to induce severe frame drop on such hardware, see issue [https://github.com/Unvanquished/Unvanquished/issues/1207 Unvanquished#1207];<br />
* '''tinyalu''': this hardware has a very small ALU (arithmetic logic unit), dynamic lighting must be disabled with <code>r_dynamicLight 0</code> to prevent the driver to abort GLSL shader compilation that may lead to an engine crash, see issue [https://github.com/DaemonEngine/Daemon/issues/344 Daemon#344].<br />
<br />
=== Bus ===<br />
<br />
* '''PCI''': [https://en.wikipedia.org/wiki/Peripheral_Component_Interconnect Peripheral Component Interconnect], slow multi-purpose bus for add-on cards, obsolete;<br />
* '''PCI-X''': [https://en.wikipedia.org/wiki/PCI-X Peripheral Component Interconnect eXtended], enhanced version of PCI for servers and workstations, obsolete;<br />
* '''AGP''': [https://en.wikipedia.org/wiki/Accelerated_Graphics_Port Accelerated Graphics Port], high-speed bus designed for graphic cards, obsolete;<br />
* '''FSB''': [https://en.wikipedia.org/wiki/Front-side_bus Front-side bus], high-speed Intel system bus for CPUs, sometime used with onboard GPUs (example: GeForce 7050 + nForce 610i/630i);<br />
* '''HT''': [https://en.wikipedia.org/wiki/HyperTransport HyperTransport], high-speed AMD system bus for CPUs, sometime used with onboard GPUs (example: GeForce 6150 LE + nForce 430);<br />
* '''chip''': Internal bus of a [https://en.wikipedia.org/wiki/System_on_a_chip system on a chip] (SoC), the exact communication bus technology is usually poorly documented;<br />
* '''PCIe''': [https://en.wikipedia.org/wiki/PCI_Express PCI Express], high-speed multi-purpose bus for add-on cards and on-board devices, recommended;<br />
* '''CXL''': [https://en.wikipedia.org/wiki/Compute_Express_Link, Compute Express Link], high-speed multi-purpose bus for add-on cards;<br />
* '''TB''': [https://fr.wikipedia.org/wiki/Thunderbolt_(interface) ThunderBolt], high speed cable combining PCI Express and DisplayPort or USB-C to connect external PCI Express cards like GPUs.<br />
<br />
=== Form factor ===<br />
<br />
* '''discrete''': full height workstation extension card;<br />
* '''lowprofile''': low profile workstation extension card;<br />
* '''MXM''': Mobile PCI Express module;<br />
* '''onboard''': dedicated chip on motherboard;<br />
* '''integrated''': chip integrated in CPU package or chipset;<br />
* '''SoC''': System on a chip.<br />
<br />
=== Micro architecture ===<br />
<br />
* '''USSA''': ATi Unified Superscalar Shader Architecture;<br />
* '''GCN''': AMD Graphics Core Next;<br />
* '''RDNA''': AMD Radeon DNA;<br />
* '''GMA''': Intel Graphics Media Accelerator;<br />
* '''GT''': Intel Graphics Technology.<br />
<br />
=== Memory glossary ===<br />
<br />
* '''HM''': HyperMemory, ATi technology using main memory when GPU memory is full;<br />
* '''TC''': TurboCache, Nvidia technology using main memory when GPU memory is full;<br />
* '''AR''': AcceleRAM, S3 technology using main memory when GPU memory is full.<br />
<br />
== Useful resources ==<br />
<br />
* [https://mesamatrix.net/ Mesa Matrix]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units Wikipedia list of AMD graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units Wikipedia list of AMD accelerated processing units]<br />
* [https://www.x.org/wiki/RadeonFeature/ X.Org Radeon feature matrix and decoder ring]<br />
* [https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units Wikipedia list of Intel graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units Wikipedia list of Nvidia graphics processing units]<br />
* [https://nouveau.freedesktop.org/wiki/MesaDrivers/ Mesa Nouveau drivers]<br />
* [https://nouveau.freedesktop.org/wiki/CodeNames/ Mesa Nouveau decoder ring]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=GPU_compatibility_matrix&diff=8571GPU compatibility matrix2023-11-26T19:14:42Z<p>Illwieckz: </p>
<hr />
<div>{{Note|header=Known workarounds|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].}}<br />
{{Note|header=Known bugs|content=<br />
* {{Intel}}: People reported some graphical glitches on specific graphic chip or specific operating system, if you encounter a bug, please check [https://github.com/DaemonEngine/Daemon/labels/GPU-Intel here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
The place to report graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here].}}<br />
<br />
This table gathers test results about various hardware and software configurations, <span style="background-color: green !important; color: white !important; padding: .25em .5em;">passed</span> means nothing wrong is noticed and frame rate is at least <u>60 fps</u> on common scene, <span style="background-color: lightgreen !important; color: green !important; padding: .25em .5em;">playable</span> means at least <u>30 fps</u>.<br />
<br />
All those tests were driven by Unvanquished developers or under Unvanquished developer supervision.<br />
<br />
See [[#Comprehensive_analysis|below]] for analysis, specific definitions and meanings.<br />
{{GPU compatibility matrix}}<br />
<br />
<br/><hr/><br/><br />
<br />
== Comprehensive analysis ==<br />
<br />
Minimal configuration for the Unvanquished game is OpenGL 3.2. Unvanquished can run on OpenGL 2.1 hardware but this would not be playable because because we use models with more than 41 bones and OpenGL 2.1 cards can't accelerate them enough. It will run but it will be slow.<br />
<br />
Decent performance (given advanced graphical effects are disabled) starts with AMD/ATI TeraScale GPU, Intel HD Graphics (HD 4000), Nvidia Tesla-based GPUs. Though, it is strongly discouraged to buy GT218-based GPU like the Geforce 210 one as the proprietary driver for them is known to be buggy, requiring the engine to implement workarounds for it (save a game developer, do not buy this GPU!).<br />
<br />
To play at 4K resolutions, high-end AMD GCN/RDNA is recommended: AMD R9 390X from 2015 can handle <code>ultra</code> preset with 4K resolution at 144Hz. AMD R7 Embedded in R series APU can handle 2K resolution with <code>medium</code> preset (no realtime light and relief mapping disabled) as well as Intel UHD.<br />
<br />
Minimal configuration to run the Dæmon engine is OpenGL 2.1 with <code>ARB_half_float_vertex</code> and <code>ARB_framebuffer_object</code> (<code>EXT_framebuffer_object</code> is not enough). It includes ATI/AMD GPU starting with R300 (Radeon X300), Intel GPU starting with GMA965 (X3100) on Linux and macOS, HD Graphics on Windows, Nvidia starting with Curie (NV40, Geforce 6xxx). Wikipedia says the GMA965 Windows driver only supports OpenGL 1.5 and then would not reach the requirements for running Unvanquished on this platform. If you plan to make a game using Damon engine supporting those older cards, make sure your animated models don't have more than 41 bones.<br />
<br />
== How to contribute ==<br />
<br />
This matrix is generated from a cell sheet. Do not edit it by hand, Please ask <code>illwieckz</code> for access to the cell sheet.<br />
<br />
Please sort your contributions by brand (ATI/AMD, Intel, Nvidia, Via…) then by launch date (from newer to older).<br />
<br />
The table also documents who may be able to reproduce a special configuration, please put your nick name and tell how much it is easy for you to reproduce a test on it (see below for keywords to use).<br />
<br />
Please tell at least, brand, model, model launch date (look at Wikipedia), host, memory size, the operating system, the driver (kernel mode and user mode), OpenGL and GLSL version, Unvanquished version you tested, the status, the preset and the resolution you validated and eventual notes.<br />
<br />
If you find out the code name and related micro architecture, please note it, same with form factor and bus.<br />
<br />
Other data are less relevant for diagnostic and are only useful to get a better picture of the tested hardware, don't hesitate to write down as much info as you can.<br />
<br />
Append the <code>~</code> character to version number if you're testing a preversion. For example use <code>0.52~</code> to tell you tested against the to-be-released 0.52 version.<br />
<br />
Put a single <code>-</code> character in cell you don't have data for (do not leave empty cells). When you describe multiple configuration for the same piece of hardware, use the <code>↑</code> character to tell the cell uses the same value as the previous line.<br />
<br />
== Definitions ==<br />
<br />
=== Status ===<br />
<br />
* '''hang''': the computer becomes unresponsive, requiring a hard reset;<br />
* '''crash''': the game is terminated by the operating system on some unrecoverable failure;<br />
* '''missing''': the game exits by itself because of some requirement not being met;<br />
* '''broken''': the game loads maps but graphical bugs affecting gameplay are seen;<br />
* '''glitchy''': the game loads maps but graphical bugs non-affecting gameplay are seen;<br />
* '''slow''': the game is rendered properly but slowly with less than 30 fps;<br />
* '''playable''': nothing wrong is noticed and frame rate is at least 30 fps but less than 60 fps;<br />
* '''passed''': nothing wrong is noticed and frame rate is at least 60 fps.<br />
<br />
=== Availability ===<br />
<br />
* '''lost''': tester has lost access to the hardware;<br />
* '''foreign''': tester has access to the hardware but does not own it;<br />
* '''unplugged''': tester owns the hardware but testing requires to plug the hardware in a computer;<br />
* '''unconfigured''': hardware is plugged in a computer but making use of it requires software changes;<br />
* '''configured''': hardware and software are ready to use for testing.<br />
<br />
=== Notes ===<br />
<br />
* '''extfbo''': this GPU provides {{code|ARB_framebuffer_object}} instead of {{code|ARB_framebuffer_object}};<br />
* '''fakefps''': game displays high frame rate number but the experience is stuttering;<br />
* '''hickups''': performance is globally correct, but sometime the framerate drops a bit for a very short time;<br />
* '''lowsky''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid skybox graphical glitches;<br />
* '''lowtex''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid a computer hang;<br />
* '''mesamain''': running the driver from Mesa {{code|main}} at the time of the test was required to get the game running or avoid major rendering bugs;<br />
* '''noaccel''': no OpenGL hardware acceleration is implemented;<br />
* '''nogather''': <code>GL_ARB_texture_gather</code> is wrongly advertised by the driver to be supported by this hardware, making the engine crash at startup (Nvidia proprietary driver bug). The engine ships some workaround for this driver bug, if you experience the crash on version 0.52 and later but can properly start the game with <code>-set r_arb_texture_gather 0</code> engine command line option, please reopen issue [https://github.com/DaemonEngine/Daemon/issues/368 Daemon#368];<br />
* '''nohalfloatvertex''': missing <code>ARB_half_float_vertex</code> OpenGL extension;<br />
* '''nohyperz''': <code>R600_DEBUG=nohyperz</code> environment variable is required to be set to avoid graphical glitches, see issues [https://github.com/DaemonEngine/Daemon/issues/343 Daemon#343] and [https://gitlab.freedesktop.org/mesa/mesa/-/issues/3290 Mesa#3290];<br />
* '''norgtc''': <code>GL_ARB_texture_compression_rgtc</code> extension is not supported on this hardware, some texture may be loaded with swapped channels, especially normal maps. Engine implements special algorithms to workaround this, see issue [https://github.com/DaemonEngine/Daemon/issues/375 Daemon#375];<br />
* '''nvidiagarbage''': this driver is so bad you have to be very lucky to get at least a desktop drawn on screen before the computer hangs. With or without the game, after some screen freezes and display server crashes the kernel will complain about the card having disconnected itself from the PCIe bus. This issue was verified on multiple cards of this generations that are known to run for months without crashing when using free open source drivers instead;<br />
* '''slowmodel''': models with a lot of bones are known to induce severe frame drop on such hardware, see issue [https://github.com/Unvanquished/Unvanquished/issues/1207 Unvanquished#1207];<br />
* '''tinyalu''': this hardware has a very small ALU (arithmetic logic unit), dynamic lighting must be disabled with <code>r_dynamicLight 0</code> to prevent the driver to abort GLSL shader compilation that may lead to an engine crash, see issue [https://github.com/DaemonEngine/Daemon/issues/344 Daemon#344].<br />
<br />
=== Bus ===<br />
<br />
* '''PCI''': [https://en.wikipedia.org/wiki/Peripheral_Component_Interconnect Peripheral Component Interconnect], slow multi-purpose bus for add-on cards, obsolete;<br />
* '''PCI-X''': [https://en.wikipedia.org/wiki/PCI-X Peripheral Component Interconnect eXtended], enhanced version of PCI for servers and workstations, obsolete;<br />
* '''AGP''': [https://en.wikipedia.org/wiki/Accelerated_Graphics_Port Accelerated Graphics Port], high-speed bus designed for graphic cards, obsolete;<br />
* '''FSB''': [https://en.wikipedia.org/wiki/Front-side_bus Front-side bus], high-speed Intel system bus for CPUs, sometime used with onboard GPUs (example: GeForce 7050 + nForce 610i/630i);<br />
* '''HT''': [https://en.wikipedia.org/wiki/HyperTransport HyperTransport], high-speed AMD system bus for CPUs, sometime used with onboard GPUs (example: GeForce 6150 LE + nForce 430);<br />
* '''chip''': Internal bus of a [https://en.wikipedia.org/wiki/System_on_a_chip system on a chip] (SoC), the exact communication bus technology is usually poorly documented;<br />
* '''PCIe''': [https://en.wikipedia.org/wiki/PCI_Express PCI Express], high-speed multi-purpose bus for add-on cards and on-board devices, recommended;<br />
* '''CXL''': [https://en.wikipedia.org/wiki/Compute_Express_Link, Compute Express Link], high-speed multi-purpose bus for add-on cards;<br />
* '''TB''': [https://fr.wikipedia.org/wiki/Thunderbolt_(interface) ThunderBolt], high speed cable combining PCI Express and DisplayPort or USB-C to connect external PCI Express cards.<br />
<br />
=== Form factor ===<br />
<br />
* '''discrete''': full height workstation extension card;<br />
* '''lowprofile''': low profile workstation extension card;<br />
* '''MXM''': Mobile PCI Express module;<br />
* '''onboard''': dedicated chip on motherboard;<br />
* '''integrated''': chip integrated in CPU package or chipset;<br />
* '''SoC''': System on a chip.<br />
<br />
=== Micro architecture ===<br />
<br />
* '''USSA''': ATi Unified Superscalar Shader Architecture;<br />
* '''GCN''': AMD Graphics Core Next;<br />
* '''RDNA''': AMD Radeon DNA;<br />
* '''GMA''': Intel Graphics Media Accelerator;<br />
* '''GT''': Intel Graphics Technology.<br />
<br />
=== Memory glossary ===<br />
<br />
* '''HM''': HyperMemory, ATi technology using main memory when GPU memory is full;<br />
* '''TC''': TurboCache, Nvidia technology using main memory when GPU memory is full;<br />
* '''AR''': AcceleRAM, S3 technology using main memory when GPU memory is full.<br />
<br />
== Useful resources ==<br />
<br />
* [https://mesamatrix.net/ Mesa Matrix]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units Wikipedia list of AMD graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units Wikipedia list of AMD accelerated processing units]<br />
* [https://www.x.org/wiki/RadeonFeature/ X.Org Radeon feature matrix and decoder ring]<br />
* [https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units Wikipedia list of Intel graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units Wikipedia list of Nvidia graphics processing units]<br />
* [https://nouveau.freedesktop.org/wiki/MesaDrivers/ Mesa Nouveau drivers]<br />
* [https://nouveau.freedesktop.org/wiki/CodeNames/ Mesa Nouveau decoder ring]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=GPU_compatibility_matrix&diff=8570GPU compatibility matrix2023-11-26T19:13:55Z<p>Illwieckz: </p>
<hr />
<div>{{Note|header=Known workarounds|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].}}<br />
{{Note|header=Known bugs|content=<br />
* {{Intel}}: People reported some graphical glitches on specific graphic chip or specific operating system, if you encounter a bug, please check [https://github.com/DaemonEngine/Daemon/labels/GPU-Intel here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
The place to report graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here].}}<br />
<br />
This table gathers test results about various hardware and software configurations, <span style="background-color: green !important; color: white !important; padding: .25em .5em;">passed</span> means nothing wrong is noticed and frame rate is at least <u>60 fps</u> on common scene, <span style="background-color: lightgreen !important; color: green !important; padding: .25em .5em;">playable</span> means at least <u>30 fps</u>.<br />
<br />
All those tests were driven by Unvanquished developers or under Unvanquished developer supervision.<br />
<br />
See [[#Comprehensive_analysis|below]] for analysis, specific definitions and meanings.<br />
{{GPU compatibility matrix}}<br />
<br />
<br/><hr/><br/><br />
<br />
== Comprehensive analysis ==<br />
<br />
Minimal configuration for the Unvanquished game is OpenGL 3.2. Unvanquished can run on OpenGL 2.1 hardware but this would not be playable because because we use models with more than 41 bones and OpenGL 2.1 cards can't accelerate them enough. It will run but it will be slow.<br />
<br />
Decent performance (given advanced graphical effects are disabled) starts with AMD/ATI TeraScale GPU, Intel HD Graphics (HD 4000), Nvidia Tesla-based GPUs. Though, it is strongly discouraged to buy GT218-based GPU like the Geforce 210 one as the proprietary driver for them is known to be buggy, requiring the engine to implement workarounds for it (save a game developer, do not buy this GPU!).<br />
<br />
To play at 4K resolutions, high-end AMD GCN/RDNA is recommended: AMD R9 390X from 2015 can handle <code>ultra</code> preset with 4K resolution at 144Hz. AMD R7 Embedded in R series APU can handle 2K resolution with <code>medium</code> preset (no realtime light and relief mapping disabled) as well as Intel UHD.<br />
<br />
Minimal configuration to run the Dæmon engine is OpenGL 2.1 with <code>ARB_half_float_vertex</code> and <code>ARB_framebuffer_object</code> (<code>EXT_framebuffer_object</code> is not enough). It includes ATI/AMD GPU starting with R300 (Radeon X300), Intel GPU starting with GMA965 (X3100) on Linux and macOS, HD Graphics on Windows, Nvidia starting with Curie (NV40, Geforce 6xxx). Wikipedia says the GMA965 Windows driver only supports OpenGL 1.5 and then would not reach the requirements for running Unvanquished on this platform. If you plan to make a game using Damon engine supporting those older cards, make sure your animated models don't have more than 41 bones.<br />
<br />
== How to contribute ==<br />
<br />
This matrix is generated from a cell sheet. Do not edit it by hand, Please ask <code>illwieckz</code> for access to the cell sheet.<br />
<br />
Please sort your contributions by brand (ATI/AMD, Intel, Nvidia, Via…) then by launch date (from newer to older).<br />
<br />
The table also documents who may be able to reproduce a special configuration, please put your nick name and tell how much it is easy for you to reproduce a test on it (see below for keywords to use).<br />
<br />
Please tell at least, brand, model, model launch date (look at Wikipedia), host, memory size, the operating system, the driver (kernel mode and user mode), OpenGL and GLSL version, Unvanquished version you tested, the status, the preset and the resolution you validated and eventual notes.<br />
<br />
If you find out the code name and related micro architecture, please note it, same with form factor and bus.<br />
<br />
Other data are less relevant for diagnostic and are only useful to get a better picture of the tested hardware, don't hesitate to write down as much info as you can.<br />
<br />
Append the <code>~</code> character to version number if you're testing a preversion. For example use <code>0.52~</code> to tell you tested against the to-be-released 0.52 version.<br />
<br />
Put a single <code>-</code> character in cell you don't have data for (do not leave empty cells). When you describe multiple configuration for the same piece of hardware, use the <code>↑</code> character to tell the cell uses the same value as the previous line.<br />
<br />
== Definitions ==<br />
<br />
=== Status ===<br />
<br />
* '''hang''': the computer becomes unresponsive, requiring a hard reset;<br />
* '''crash''': the game is terminated by the operating system on some unrecoverable failure;<br />
* '''missing''': the game exits by itself because of some requirement not being met;<br />
* '''broken''': the game loads maps but graphical bugs affecting gameplay are seen;<br />
* '''glitchy''': the game loads maps but graphical bugs non-affecting gameplay are seen;<br />
* '''slow''': the game is rendered properly but slowly with less than 30 fps;<br />
* '''playable''': nothing wrong is noticed and frame rate is at least 30 fps but less than 60 fps;<br />
* '''passed''': nothing wrong is noticed and frame rate is at least 60 fps.<br />
<br />
=== Availability ===<br />
<br />
* '''lost''': tester has lost access to the hardware;<br />
* '''foreign''': tester has access to the hardware but does not own it;<br />
* '''unplugged''': tester owns the hardware but testing requires to plug the hardware in a computer;<br />
* '''unconfigured''': hardware is plugged in a computer but making use of it requires software changes;<br />
* '''configured''': hardware and software are ready to use for testing.<br />
<br />
=== Notes ===<br />
<br />
* '''extfbo''': this GPU provides {{code|ARB_framebuffer_object}} instead of {{code|ARB_framebuffer_object}};<br />
* '''fakefps''': game displays high frame rate number but the experience is stuttering;<br />
* '''hickups''': performance is globally correct, but sometime the framerate drops a bit for a very short time;<br />
* '''lowsky''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid skybox graphical glitches;<br />
* '''lowtex''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid a computer hang;<br />
* '''mesamain''': running the driver from Mesa {{code|main}} at the time of the test was required to get the game running or avoid major rendering bugs;<br />
* '''noaccel''': no OpenGL hardware acceleration is implemented;<br />
* '''nogather''': <code>GL_ARB_texture_gather</code> is wrongly advertised by the driver to be supported by this hardware, making the engine crash at startup (Nvidia proprietary driver bug). The engine ships some workaround for this driver bug, if you experience the crash on version 0.52 and later but can properly start the game with <code>-set r_arb_texture_gather 0</code> engine command line option, please reopen issue [https://github.com/DaemonEngine/Daemon/issues/368 Daemon#368];<br />
* '''nohalfloatvertex''': missing <code>ARB_half_float_vertex</code> OpenGL extension;<br />
* '''nohyperz''': <code>R600_DEBUG=nohyperz</code> environment variable is required to be set to avoid graphical glitches, see issues [https://github.com/DaemonEngine/Daemon/issues/343 Daemon#343] and [https://gitlab.freedesktop.org/mesa/mesa/-/issues/3290 Mesa#3290];<br />
* '''norgtc''': <code>GL_ARB_texture_compression_rgtc</code> extension is not supported on this hardware, some texture may be loaded with swapped channels, especially normal maps. Engine implements special algorithms to workaround this, see issue [https://github.com/DaemonEngine/Daemon/issues/375 Daemon#375];<br />
* '''nvidiagarbage''': this driver is so bad you have to be very lucky to get at least a desktop drawn on screen before the computer hangs. With or without the game, after some screen freezes and display server crashes the kernel will complain about the card having disconnected itself from the PCIe bus. This issue was verified on multiple cards of this generations that are known to run for months without crashing when using free open source drivers instead;<br />
* '''slowmodel''': models with a lot of bones are known to induce severe frame drop on such hardware, see issue [https://github.com/Unvanquished/Unvanquished/issues/1207 Unvanquished#1207];<br />
* '''tinyalu''': this hardware has a very small ALU (arithmetic logic unit), dynamic lighting must be disabled with <code>r_dynamicLight 0</code> to prevent the driver to abort GLSL shader compilation that may lead to an engine crash, see issue [https://github.com/DaemonEngine/Daemon/issues/344 Daemon#344].<br />
<br />
=== Bus ===<br />
<br />
* '''PCI''': [https://en.wikipedia.org/wiki/Peripheral_Component_Interconnect Peripheral Component Interconnect], slow multi-purpose bus for add-on cards, obsolete;<br />
* '''PCI-X''': [https://en.wikipedia.org/wiki/PCI-X Peripheral Component Interconnect eXtended], enhanced version of PCI for servers and workstations, obsolete;<br />
* '''AGP''': [https://en.wikipedia.org/wiki/Accelerated_Graphics_Port Accelerated Graphics Port], high-speed bus designed for graphic cards, obsolete;<br />
* '''FSB''': [https://en.wikipedia.org/wiki/Front-side_bus Front-side bus], high-speed Intel system bus for CPUs, sometime used with onboard GPUs (example: GeForce 7050 + nForce 610i/630i);<br />
* '''HT''': [https://en.wikipedia.org/wiki/HyperTransport HyperTransport], high-speed AMD system bus for CPUs, sometime used with onboard GPUs (example: GeForce 6150 LE + nForce 430);<br />
* '''chip''': Internal bus of a system on a chip (SoC), the exact communication bus technology is usually poorly documented;<br />
* '''PCIe''': [https://en.wikipedia.org/wiki/PCI_Express PCI Express], high-speed multi-purpose bus for add-on cards and on-board devices, recommended;<br />
* '''CXL''': [https://en.wikipedia.org/wiki/Compute_Express_Link, Compute Express Link], high-speed multi-purpose bus for add-on cards;<br />
* '''TB''': [https://fr.wikipedia.org/wiki/Thunderbolt_(interface) ThunderBolt], high speed cable combining PCI Express and DisplayPort or USB-C to connect external PCI Express cards.<br />
<br />
=== Form factor ===<br />
<br />
* '''discrete''': full height workstation extension card;<br />
* '''lowprofile''': low profile workstation extension card;<br />
* '''MXM''': Mobile PCI Express module;<br />
* '''onboard''': dedicated chip on motherboard;<br />
* '''integrated''': chip integrated in CPU package or chipset;<br />
* '''SoC''': System on a chip.<br />
<br />
=== Micro architecture ===<br />
<br />
* '''USSA''': ATi Unified Superscalar Shader Architecture;<br />
* '''GCN''': AMD Graphics Core Next;<br />
* '''RDNA''': AMD Radeon DNA;<br />
* '''GMA''': Intel Graphics Media Accelerator;<br />
* '''GT''': Intel Graphics Technology.<br />
<br />
=== Memory glossary ===<br />
<br />
* '''HM''': HyperMemory, ATi technology using main memory when GPU memory is full;<br />
* '''TC''': TurboCache, Nvidia technology using main memory when GPU memory is full;<br />
* '''AR''': AcceleRAM, S3 technology using main memory when GPU memory is full.<br />
<br />
== Useful resources ==<br />
<br />
* [https://mesamatrix.net/ Mesa Matrix]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units Wikipedia list of AMD graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units Wikipedia list of AMD accelerated processing units]<br />
* [https://www.x.org/wiki/RadeonFeature/ X.Org Radeon feature matrix and decoder ring]<br />
* [https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units Wikipedia list of Intel graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units Wikipedia list of Nvidia graphics processing units]<br />
* [https://nouveau.freedesktop.org/wiki/MesaDrivers/ Mesa Nouveau drivers]<br />
* [https://nouveau.freedesktop.org/wiki/CodeNames/ Mesa Nouveau decoder ring]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=GPU_compatibility_matrix&diff=8569GPU compatibility matrix2023-11-26T18:59:25Z<p>Illwieckz: </p>
<hr />
<div>{{Note|header=Known workarounds|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].}}<br />
{{Note|header=Known bugs|content=<br />
* {{Intel}}: People reported some graphical glitches on specific graphic chip or specific operating system, if you encounter a bug, please check [https://github.com/DaemonEngine/Daemon/labels/GPU-Intel here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
The place to report graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here].}}<br />
<br />
This table gathers test results about various hardware and software configurations, <span style="background-color: green !important; color: white !important; padding: .25em .5em;">passed</span> means nothing wrong is noticed and frame rate is at least <u>60 fps</u> on common scene, <span style="background-color: lightgreen !important; color: green !important; padding: .25em .5em;">playable</span> means at least <u>30 fps</u>.<br />
<br />
All those tests were driven by Unvanquished developers or under Unvanquished developer supervision.<br />
<br />
See [[#Comprehensive_analysis|below]] for analysis, specific definitions and meanings.<br />
{{GPU compatibility matrix}}<br />
<br />
<br/><hr/><br/><br />
<br />
== Comprehensive analysis ==<br />
<br />
Minimal configuration for the Unvanquished game is OpenGL 3.2. Unvanquished can run on OpenGL 2.1 hardware but this would not be playable because because we use models with more than 41 bones and OpenGL 2.1 cards can't accelerate them enough. It will run but it will be slow.<br />
<br />
Decent performance (given advanced graphical effects are disabled) starts with AMD/ATI TeraScale GPU, Intel HD Graphics (HD 4000), Nvidia Tesla-based GPUs. Though, it is strongly discouraged to buy GT218-based GPU like the Geforce 210 one as the proprietary driver for them is known to be buggy, requiring the engine to implement workarounds for it (save a game developer, do not buy this GPU!).<br />
<br />
To play at 4K resolutions, high-end AMD GCN/RDNA is recommended: AMD R9 390X from 2015 can handle <code>ultra</code> preset with 4K resolution at 144Hz. AMD R7 Embedded in R series APU can handle 2K resolution with <code>medium</code> preset (no realtime light and relief mapping disabled) as well as Intel UHD.<br />
<br />
Minimal configuration to run the Dæmon engine is OpenGL 2.1 with <code>ARB_half_float_vertex</code> and <code>ARB_framebuffer_object</code> (<code>EXT_framebuffer_object</code> is not enough). It includes ATI/AMD GPU starting with R300 (Radeon X300), Intel GPU starting with GMA965 (X3100) on Linux and macOS, HD Graphics on Windows, Nvidia starting with Curie (NV40, Geforce 6xxx). Wikipedia says the GMA965 Windows driver only supports OpenGL 1.5 and then would not reach the requirements for running Unvanquished on this platform. If you plan to make a game using Damon engine supporting those older cards, make sure your animated models don't have more than 41 bones.<br />
<br />
== How to contribute ==<br />
<br />
This matrix is generated from a cell sheet. Do not edit it by hand, Please ask <code>illwieckz</code> for access to the cell sheet.<br />
<br />
Please sort your contributions by brand (ATI/AMD, Intel, Nvidia, Via…) then by launch date (from newer to older).<br />
<br />
The table also documents who may be able to reproduce a special configuration, please put your nick name and tell how much it is easy for you to reproduce a test on it (see below for keywords to use).<br />
<br />
Please tell at least, brand, model, model launch date (look at Wikipedia), host, memory size, the operating system, the driver (kernel mode and user mode), OpenGL and GLSL version, Unvanquished version you tested, the status, the preset and the resolution you validated and eventual notes.<br />
<br />
If you find out the code name and related micro architecture, please note it, same with form factor and bus.<br />
<br />
Other data are less relevant for diagnostic and are only useful to get a better picture of the tested hardware, don't hesitate to write down as much info as you can.<br />
<br />
Append the <code>~</code> character to version number if you're testing a preversion. For example use <code>0.52~</code> to tell you tested against the to-be-released 0.52 version.<br />
<br />
Put a single <code>-</code> character in cell you don't have data for (do not leave empty cells). When you describe multiple configuration for the same piece of hardware, use the <code>↑</code> character to tell the cell uses the same value as the previous line.<br />
<br />
== Definitions ==<br />
<br />
=== Status ===<br />
<br />
* '''hang''': the computer becomes unresponsive, requiring a hard reset;<br />
* '''crash''': the game is terminated by the operating system on some unrecoverable failure;<br />
* '''missing''': the game exits by itself because of some requirement not being met;<br />
* '''broken''': the game loads maps but graphical bugs affecting gameplay are seen;<br />
* '''glitchy''': the game loads maps but graphical bugs non-affecting gameplay are seen;<br />
* '''slow''': the game is rendered properly but slowly with less than 30 fps;<br />
* '''playable''': nothing wrong is noticed and frame rate is at least 30 fps but less than 60 fps;<br />
* '''passed''': nothing wrong is noticed and frame rate is at least 60 fps.<br />
<br />
=== Availability ===<br />
<br />
* '''lost''': tester has lost access to the hardware;<br />
* '''foreign''': tester has access to the hardware but does not own it;<br />
* '''unplugged''': tester owns the hardware but testing requires to plug the hardware in a computer;<br />
* '''unconfigured''': hardware is plugged in a computer but making use of it requires software changes;<br />
* '''configured''': hardware and software are ready to use for testing.<br />
<br />
=== Notes ===<br />
<br />
* '''extfbo''': this GPU provides {{code|ARB_framebuffer_object}} instead of {{code|ARB_framebuffer_object}};<br />
* '''fakefps''': game displays high frame rate number but the experience is stuttering;<br />
* '''hickups''': performance is globally correct, but sometime the framerate drops a bit for a very short time;<br />
* '''lowsky''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid skybox graphical glitches;<br />
* '''lowtex''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid a computer hang;<br />
* '''mesamain''': running the driver from Mesa {{code|main}} at the time of the test was required to get the game running or avoid major rendering bugs;<br />
* '''noaccel''': no OpenGL hardware acceleration is implemented;<br />
* '''nogather''': <code>GL_ARB_texture_gather</code> is wrongly advertised by the driver to be supported by this hardware, making the engine crash at startup (Nvidia proprietary driver bug). The engine ships some workaround for this driver bug, if you experience the crash on version 0.52 and later but can properly start the game with <code>-set r_arb_texture_gather 0</code> engine command line option, please reopen issue [https://github.com/DaemonEngine/Daemon/issues/368 Daemon#368];<br />
* '''nohalfloatvertex''': missing <code>ARB_half_float_vertex</code> OpenGL extension;<br />
* '''nohyperz''': <code>R600_DEBUG=nohyperz</code> environment variable is required to be set to avoid graphical glitches, see issues [https://github.com/DaemonEngine/Daemon/issues/343 Daemon#343] and [https://gitlab.freedesktop.org/mesa/mesa/-/issues/3290 Mesa#3290];<br />
* '''norgtc''': <code>GL_ARB_texture_compression_rgtc</code> extension is not supported on this hardware, some texture may be loaded with swapped channels, especially normal maps. Engine implements special algorithms to workaround this, see issue [https://github.com/DaemonEngine/Daemon/issues/375 Daemon#375];<br />
* '''nvidiagarbage''': this driver is so bad you have to be very lucky to get at least a desktop drawn on screen before the computer hangs. With or without the game, after some screen freezes and display server crashes the kernel will complain about the card having disconnected itself from the PCIe bus. This issue was verified on multiple cards of this generations that are known to run for months without crashing when using free open source drivers instead;<br />
* '''slowmodel''': models with a lot of bones are known to induce severe frame drop on such hardware, see issue [https://github.com/Unvanquished/Unvanquished/issues/1207 Unvanquished#1207];<br />
* '''tinyalu''': this hardware has a very small ALU (arithmetic logic unit), dynamic lighting must be disabled with <code>r_dynamicLight 0</code> to prevent the driver to abort GLSL shader compilation that may lead to an engine crash, see issue [https://github.com/DaemonEngine/Daemon/issues/344 Daemon#344].<br />
<br />
=== Bus ===<br />
<br />
* '''PCI''': Peripheral Component Interconnect, slow multi-purpose bus for add-on cards, obsolete;<br />
* '''AGP''': Accelerated Graphics Port, high-speed bus designed for graphic cards, obsolete;<br />
* '''HT''': HyperTransport, high-speed AMD system bus for CPUs, sometime used with onboard GPUs;<br />
* '''chip''': Internal bus of a system on a chip (SoC), the exact communication bus technology is usually poorly documented;<br />
* '''PCIe''': PCI Express, high-speed multi-purpose bus for add-on cards and on-board devices, recommended;<br />
* '''CXL''': Compute Express Link, high-speed multi-purpose bus for add-on cards, meant to fix PCI Express issues in multi-GPU configuration.<br />
<br />
=== Form factor ===<br />
<br />
* '''discrete''': full height workstation extension card;<br />
* '''lowprofile''': low profile workstation extension card;<br />
* '''MXM''': Mobile PCI Express module;<br />
* '''onboard''': dedicated chip on motherboard;<br />
* '''integrated''': chip integrated in CPU package or chipset;<br />
* '''SoC''': System on a chip.<br />
<br />
=== Micro architecture ===<br />
<br />
* '''USSA''': ATi Unified Superscalar Shader Architecture;<br />
* '''GCN''': AMD Graphics Core Next;<br />
* '''RDNA''': AMD Radeon DNA;<br />
* '''GMA''': Intel Graphics Media Accelerator;<br />
* '''GT''': Intel Graphics Technology.<br />
<br />
=== Memory glossary ===<br />
<br />
* '''HM''': HyperMemory, ATi technology using main memory when GPU memory is full;<br />
* '''TC''': TurboCache, Nvidia technology using main memory when GPU memory is full;<br />
* '''AR''': AcceleRAM, S3 technology using main memory when GPU memory is full.<br />
<br />
== Useful resources ==<br />
<br />
* [https://mesamatrix.net/ Mesa Matrix]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units Wikipedia list of AMD graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units Wikipedia list of AMD accelerated processing units]<br />
* [https://www.x.org/wiki/RadeonFeature/ X.Org Radeon feature matrix and decoder ring]<br />
* [https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units Wikipedia list of Intel graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units Wikipedia list of Nvidia graphics processing units]<br />
* [https://nouveau.freedesktop.org/wiki/MesaDrivers/ Mesa Nouveau drivers]<br />
* [https://nouveau.freedesktop.org/wiki/CodeNames/ Mesa Nouveau decoder ring]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=GPU_compatibility_matrix&diff=8568GPU compatibility matrix2023-11-26T18:54:59Z<p>Illwieckz: </p>
<hr />
<div>{{Note|header=Known workarounds|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].}}<br />
{{Note|header=Known bugs|content=<br />
* {{Intel}}: People reported some graphical glitches on specific graphic chips or specific operating system, if you encounter a bug, please check [https://github.com/DaemonEngine/Daemon/labels/GPU-Intel here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
The place to report graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here].}}<br />
<br />
This table gathers test results about various hardware and software configurations, <span style="background-color: green !important; color: white !important; padding: .25em .5em;">passed</span> means nothing wrong is noticed and frame rate is at least <u>60 fps</u> on common scene, <span style="background-color: lightgreen !important; color: green !important; padding: .25em .5em;">playable</span> means at least <u>30 fps</u>.<br />
<br />
All those tests were driven by Unvanquished developers or under Unvanquished developer supervision.<br />
<br />
See [[#Comprehensive_analysis|below]] for analysis, specific definitions and meanings.<br />
{{GPU compatibility matrix}}<br />
<br />
<br/><hr/><br/><br />
<br />
== Comprehensive analysis ==<br />
<br />
Minimal configuration for the Unvanquished game is OpenGL 3.2. Unvanquished can run on OpenGL 2.1 hardware but this would not be playable because because we use models with more than 41 bones and OpenGL 2.1 cards can't accelerate them enough. It will run but it will be slow.<br />
<br />
Decent performance (given advanced graphical effects are disabled) starts with AMD/ATI TeraScale GPU, Intel HD Graphics (HD 4000), Nvidia Tesla-based GPUs. Though, it is strongly discouraged to buy GT218-based GPU like the Geforce 210 one as the proprietary driver for them is known to be buggy, requiring the engine to implement workarounds for it (save a game developer, do not buy this GPU!).<br />
<br />
To play at 4K resolutions, high-end AMD GCN/RDNA is recommended: AMD R9 390X from 2015 can handle <code>ultra</code> preset with 4K resolution at 144Hz. AMD R7 Embedded in R series APU can handle 2K resolution with <code>medium</code> preset (no realtime light and relief mapping disabled) as well as Intel UHD.<br />
<br />
Minimal configuration to run the Dæmon engine is OpenGL 2.1 with <code>ARB_half_float_vertex</code> and <code>ARB_framebuffer_object</code> (<code>EXT_framebuffer_object</code> is not enough). It includes ATI/AMD GPU starting with R300 (Radeon X300), Intel GPU starting with GMA965 (X3100) on Linux and macOS, HD Graphics on Windows, Nvidia starting with Curie (NV40, Geforce 6xxx). Wikipedia says the GMA965 Windows driver only supports OpenGL 1.5 and then would not reach the requirements for running Unvanquished on this platform. If you plan to make a game using Damon engine supporting those older cards, make sure your animated models don't have more than 41 bones.<br />
<br />
== How to contribute ==<br />
<br />
This matrix is generated from a cell sheet. Do not edit it by hand, Please ask <code>illwieckz</code> for access to the cell sheet.<br />
<br />
Please sort your contributions by brand (ATI/AMD, Intel, Nvidia, Via…) then by launch date (from newer to older).<br />
<br />
The table also documents who may be able to reproduce a special configuration, please put your nick name and tell how much it is easy for you to reproduce a test on it (see below for keywords to use).<br />
<br />
Please tell at least, brand, model, model launch date (look at Wikipedia), host, memory size, the operating system, the driver (kernel mode and user mode), OpenGL and GLSL version, Unvanquished version you tested, the status, the preset and the resolution you validated and eventual notes.<br />
<br />
If you find out the code name and related micro architecture, please note it, same with form factor and bus.<br />
<br />
Other data are less relevant for diagnostic and are only useful to get a better picture of the tested hardware, don't hesitate to write down as much info as you can.<br />
<br />
Append the <code>~</code> character to version number if you're testing a preversion. For example use <code>0.52~</code> to tell you tested against the to-be-released 0.52 version.<br />
<br />
Put a single <code>-</code> character in cell you don't have data for (do not leave empty cells). When you describe multiple configuration for the same piece of hardware, use the <code>↑</code> character to tell the cell uses the same value as the previous line.<br />
<br />
== Definitions ==<br />
<br />
=== Status ===<br />
<br />
* '''hang''': the computer becomes unresponsive, requiring a hard reset;<br />
* '''crash''': the game is terminated by the operating system on some unrecoverable failure;<br />
* '''missing''': the game exits by itself because of some requirement not being met;<br />
* '''broken''': the game loads maps but graphical bugs affecting gameplay are seen;<br />
* '''glitchy''': the game loads maps but graphical bugs non-affecting gameplay are seen;<br />
* '''slow''': the game is rendered properly but slowly with less than 30 fps;<br />
* '''playable''': nothing wrong is noticed and frame rate is at least 30 fps but less than 60 fps;<br />
* '''passed''': nothing wrong is noticed and frame rate is at least 60 fps.<br />
<br />
=== Availability ===<br />
<br />
* '''lost''': tester has lost access to the hardware;<br />
* '''foreign''': tester has access to the hardware but does not own it;<br />
* '''unplugged''': tester owns the hardware but testing requires to plug the hardware in a computer;<br />
* '''unconfigured''': hardware is plugged in a computer but making use of it requires software changes;<br />
* '''configured''': hardware and software are ready to use for testing.<br />
<br />
=== Notes ===<br />
<br />
* '''extfbo''': this GPU provides {{code|ARB_framebuffer_object}} instead of {{code|ARB_framebuffer_object}};<br />
* '''fakefps''': game displays high frame rate number but the experience is stuttering;<br />
* '''hickups''': performance is globally correct, but sometime the framerate drops a bit for a very short time;<br />
* '''lowsky''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid skybox graphical glitches;<br />
* '''lowtex''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid a computer hang;<br />
* '''mesamain''': running the driver from Mesa {{code|main}} at the time of the test was required to get the game running or avoid major rendering bugs;<br />
* '''noaccel''': no OpenGL hardware acceleration is implemented;<br />
* '''nogather''': <code>GL_ARB_texture_gather</code> is wrongly advertised by the driver to be supported by this hardware, making the engine crash at startup (Nvidia proprietary driver bug). The engine ships some workaround for this driver bug, if you experience the crash on version 0.52 and later but can properly start the game with <code>-set r_arb_texture_gather 0</code> engine command line option, please reopen issue [https://github.com/DaemonEngine/Daemon/issues/368 Daemon#368];<br />
* '''nohalfloatvertex''': missing <code>ARB_half_float_vertex</code> OpenGL extension;<br />
* '''nohyperz''': <code>R600_DEBUG=nohyperz</code> environment variable is required to be set to avoid graphical glitches, see issues [https://github.com/DaemonEngine/Daemon/issues/343 Daemon#343] and [https://gitlab.freedesktop.org/mesa/mesa/-/issues/3290 Mesa#3290];<br />
* '''norgtc''': <code>GL_ARB_texture_compression_rgtc</code> extension is not supported on this hardware, some texture may be loaded with swapped channels, especially normal maps. Engine implements special algorithms to workaround this, see issue [https://github.com/DaemonEngine/Daemon/issues/375 Daemon#375];<br />
* '''nvidiagarbage''': this driver is so bad you have to be very lucky to get at least a desktop drawn on screen before the computer hangs. With or without the game, after some screen freezes and display server crashes the kernel will complain about the card having disconnected itself from the PCIe bus. This issue was verified on multiple cards of this generations that are known to run for months without crashing when using free open source drivers instead;<br />
* '''slowmodel''': models with a lot of bones are known to induce severe frame drop on such hardware, see issue [https://github.com/Unvanquished/Unvanquished/issues/1207 Unvanquished#1207];<br />
* '''tinyalu''': this hardware has a very small ALU (arithmetic logic unit), dynamic lighting must be disabled with <code>r_dynamicLight 0</code> to prevent the driver to abort GLSL shader compilation that may lead to an engine crash, see issue [https://github.com/DaemonEngine/Daemon/issues/344 Daemon#344].<br />
<br />
=== Bus ===<br />
<br />
* '''PCI''': Peripheral Component Interconnect, slow multi-purpose bus for add-on cards, obsolete;<br />
* '''AGP''': Accelerated Graphics Port, high-speed bus designed for graphic cards, obsolete;<br />
* '''HT''': HyperTransport, high-speed AMD system bus for CPUs, sometime used with onboard GPUs;<br />
* '''chip''': Internal bus of a system on a chip (SoC), the exact communication bus technology is usually poorly documented;<br />
* '''PCIe''': PCI Express, high-speed multi-purpose bus for add-on cards and on-board devices, recommended;<br />
* '''CXL''': Compute Express Link, high-speed multi-purpose bus for add-on cards, meant to fix PCI Express issues in multi-GPU configuration.<br />
<br />
=== Form factor ===<br />
<br />
* '''discrete''': full height workstation extension card;<br />
* '''lowprofile''': low profile workstation extension card;<br />
* '''MXM''': Mobile PCI Express module;<br />
* '''onboard''': dedicated chip on motherboard;<br />
* '''integrated''': chip integrated in CPU package or chipset;<br />
* '''SoC''': System on a chip.<br />
<br />
=== Micro architecture ===<br />
<br />
* '''USSA''': ATi Unified Superscalar Shader Architecture;<br />
* '''GCN''': AMD Graphics Core Next;<br />
* '''RDNA''': AMD Radeon DNA;<br />
* '''GMA''': Intel Graphics Media Accelerator;<br />
* '''GT''': Intel Graphics Technology.<br />
<br />
=== Memory glossary ===<br />
<br />
* '''HM''': HyperMemory, ATi technology using main memory when GPU memory is full;<br />
* '''TC''': TurboCache, Nvidia technology using main memory when GPU memory is full;<br />
* '''AR''': AcceleRAM, S3 technology using main memory when GPU memory is full.<br />
<br />
== Useful resources ==<br />
<br />
* [https://mesamatrix.net/ Mesa Matrix]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units Wikipedia list of AMD graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units Wikipedia list of AMD accelerated processing units]<br />
* [https://www.x.org/wiki/RadeonFeature/ X.Org Radeon feature matrix and decoder ring]<br />
* [https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units Wikipedia list of Intel graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units Wikipedia list of Nvidia graphics processing units]<br />
* [https://nouveau.freedesktop.org/wiki/MesaDrivers/ Mesa Nouveau drivers]<br />
* [https://nouveau.freedesktop.org/wiki/CodeNames/ Mesa Nouveau decoder ring]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=GPU_compatibility_matrix&diff=8567GPU compatibility matrix2023-11-26T17:52:14Z<p>Illwieckz: </p>
<hr />
<div>{{Note|header=Known workarounds|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].}}<br />
{{Note|header=Known bugs|content=<br />
* {{Intel}}: People reported some graphical glitches on specific graphic chips or specific operating system, if you encounter a bug, please check [https://github.com/DaemonEngine/Daemon/labels/GPU-Intel here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
The place to report graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here].}}<br />
<br />
This table gathers test results about various hardware and software configurations, <span style="background-color: green !important; color: white !important; padding: .25em .5em;">passed</span> means nothing wrong is noticed and frame rate is at least <u>60 fps</u> on common scene, <span style="background-color: lightgreen !important; color: green !important; padding: .25em .5em;">playable</span> means at least <u>30 fps</u>.<br />
<br />
All those tests were driven by Unvanquished developers or under Unvanquished developer supervision.<br />
<br />
See [[#Comprehensive_analysis|below]] for analysis, specific definitions and meanings. Those results are given for Unvanquished and Dæmon engine 0.52.<br />
<br />
{{GPU compatibility matrix}}<br />
<br />
<br/><hr/><br/><br />
<br />
== Comprehensive analysis ==<br />
<br />
Minimal configuration for the Unvanquished game is OpenGL 3.2. Unvanquished can run on OpenGL 2.1 hardware but this would not be playable because because we use models with more than 41 bones and OpenGL 2.1 cards can't accelerate them enough. It will run but it will be slow.<br />
<br />
Decent performance (given advanced graphical effects are disabled) starts with AMD/ATI TeraScale GPU, Intel HD Graphics (HD 4000), Nvidia Tesla-based GPUs. Though, it is strongly discouraged to buy GT218-based GPU like the Geforce 210 one as the proprietary driver for them is known to be buggy, requiring the engine to implement workarounds for it (save a game developer, do not buy this GPU!).<br />
<br />
To play at 4K resolutions, high-end AMD GCN/RDNA is recommended: AMD R9 390X from 2015 can handle <code>ultra</code> preset with 4K resolution at 144Hz. AMD R7 Embedded in R series APU can handle 2K resolution with <code>medium</code> preset (no realtime light and relief mapping disabled) as well as Intel UHD.<br />
<br />
Minimal configuration to run the Dæmon engine is OpenGL 2.1 with <code>ARB_half_float_vertex</code> and <code>ARB_framebuffer_object</code> (<code>EXT_framebuffer_object</code> is not enough). It includes ATI/AMD GPU starting with R300 (Radeon X300), Intel GPU starting with GMA965 (X3100) on Linux and macOS, HD Graphics on Windows, Nvidia starting with Curie (NV40, Geforce 6xxx). Wikipedia says the GMA965 Windows driver only supports OpenGL 1.5 and then would not reach the requirements for running Unvanquished on this platform. If you plan to make a game using Damon engine supporting those older cards, make sure your animated models don't have more than 41 bones.<br />
<br />
== How to contribute ==<br />
<br />
This matrix is generated from a cell sheet. Do not edit it by hand, Please ask <code>illwieckz</code> for access to the cell sheet.<br />
<br />
Please sort your contributions by brand (ATI/AMD, Intel, Nvidia, Via…) then by launch date (from newer to older).<br />
<br />
The table also documents who may be able to reproduce a special configuration, please put your nick name and tell how much it is easy for you to reproduce a test on it (see below for keywords to use).<br />
<br />
Please tell at least, brand, model, model launch date (look at Wikipedia), host, memory size, the operating system, the driver (kernel mode and user mode), OpenGL and GLSL version, Unvanquished version you tested, the status, the preset and the resolution you validated and eventual notes.<br />
<br />
If you find out the code name and related micro architecture, please note it, same with form factor and bus.<br />
<br />
Other data are less relevant for diagnostic and are only useful to get a better picture of the tested hardware, don't hesitate to write down as much info as you can.<br />
<br />
Append the <code>~</code> character to version number if you're testing a preversion. For example use <code>0.52~</code> to tell you tested against the to-be-released 0.52 version.<br />
<br />
Put a single <code>-</code> character in cell you don't have data for (do not leave empty cells). When you describe multiple configuration for the same piece of hardware, use the <code>↑</code> character to tell the cell uses the same value as the previous line.<br />
<br />
== Definitions ==<br />
<br />
=== Status ===<br />
<br />
* '''hang''': the computer becomes unresponsive, requiring a hard reset;<br />
* '''crash''': the game is terminated by the operating system on some unrecoverable failure;<br />
* '''missing''': the game exits by itself because of some requirement not being met;<br />
* '''broken''': the game loads maps but graphical bugs affecting gameplay are seen;<br />
* '''glitchy''': the game loads maps but graphical bugs non-affecting gameplay are seen;<br />
* '''slow''': the game is rendered properly but slowly with less than 30 fps;<br />
* '''playable''': nothing wrong is noticed and frame rate is at least 30 fps but less than 60 fps;<br />
* '''passed''': nothing wrong is noticed and frame rate is at least 60 fps.<br />
<br />
=== Availability ===<br />
<br />
* '''lost''': tester has lost access to the hardware;<br />
* '''foreign''': tester has access to the hardware but does not own it;<br />
* '''unplugged''': tester owns the hardware but testing requires to plug the hardware in a computer;<br />
* '''unconfigured''': hardware is plugged in a computer but making use of it requires software changes;<br />
* '''configured''': hardware and software are ready to use for testing.<br />
<br />
=== Notes ===<br />
<br />
* '''extfbo''': this GPU provides {{code|ARB_framebuffer_object}} instead of {{code|ARB_framebuffer_object}};<br />
* '''fakefps''': game displays high frame rate number but the experience is stuttering;<br />
* '''hickups''': performance is globally correct, but sometime the framerate drops a bit for a very short time;<br />
* '''lowsky''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid skybox graphical glitches;<br />
* '''lowtex''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid a computer hang;<br />
* '''mesamain''': running the driver from Mesa {{code|main}} at the time of the test was required to get the game running or avoid major rendering bugs;<br />
* '''noaccel''': no OpenGL hardware acceleration is implemented;<br />
* '''nogather''': <code>GL_ARB_texture_gather</code> is wrongly advertised by the driver to be supported by this hardware, making the engine crash at startup (Nvidia proprietary driver bug). The engine ships some workaround for this driver bug, if you experience the crash on version 0.52 and later but can properly start the game with <code>-set r_arb_texture_gather 0</code> engine command line option, please reopen issue [https://github.com/DaemonEngine/Daemon/issues/368 Daemon#368];<br />
* '''nohalfloatvertex''': missing <code>ARB_half_float_vertex</code> OpenGL extension;<br />
* '''nohyperz''': <code>R600_DEBUG=nohyperz</code> environment variable is required to be set to avoid graphical glitches, see issues [https://github.com/DaemonEngine/Daemon/issues/343 Daemon#343] and [https://gitlab.freedesktop.org/mesa/mesa/-/issues/3290 Mesa#3290];<br />
* '''norgtc''': <code>GL_ARB_texture_compression_rgtc</code> extension is not supported on this hardware, some texture may be loaded with swapped channels, especially normal maps. Engine implements special algorithms to workaround this, see issue [https://github.com/DaemonEngine/Daemon/issues/375 Daemon#375];<br />
* '''nvidiagarbage''': this driver is so bad you have to be very lucky to get at least a desktop drawn on screen before the computer hangs. With or without the game, after some screen freezes and display server crashes the kernel will complain about the card having disconnected itself from the PCIe bus. This issue was verified on multiple cards of this generations that are known to run for months without crashing when using free open source drivers instead;<br />
* '''slowmodel''': models with a lot of bones are known to induce severe frame drop on such hardware, see issue [https://github.com/Unvanquished/Unvanquished/issues/1207 Unvanquished#1207];<br />
* '''tinyalu''': this hardware has a very small ALU (arithmetic logic unit), dynamic lighting must be disabled with <code>r_dynamicLight 0</code> to prevent the driver to abort GLSL shader compilation that may lead to an engine crash, see issue [https://github.com/DaemonEngine/Daemon/issues/344 Daemon#344].<br />
<br />
=== Bus ===<br />
<br />
* '''PCI''': Peripheral Component Interconnect, slow multi-purpose bus for add-on cards, obsolete;<br />
* '''AGP''': Accelerated Graphics Port, high-speed bus designed for graphic cards, obsolete;<br />
* '''HT''': HyperTransport, high-speed AMD system bus for CPUs, sometime used with onboard GPUs;<br />
* '''chip''': Internal bus of a system on a chip (SoC), the exact communication bus technology is usually poorly documented;<br />
* '''PCIe''': PCI Express, high-speed multi-purpose bus for add-on cards and on-board devices, recommended;<br />
* '''CXL''': Compute Express Link, high-speed multi-purpose bus for add-on cards, meant to fix PCI Express issues in multi-GPU configuration.<br />
<br />
=== Form factor ===<br />
<br />
* '''discrete''': full height workstation extension card;<br />
* '''lowprofile''': low profile workstation extension card;<br />
* '''MXM''': Mobile PCI Express module;<br />
* '''onboard''': dedicated chip on motherboard;<br />
* '''integrated''': chip integrated in CPU package or chipset;<br />
* '''SoC''': System on a chip.<br />
<br />
=== Micro architecture ===<br />
<br />
* '''USSA''': ATi Unified Superscalar Shader Architecture;<br />
* '''GCN''': AMD Graphics Core Next;<br />
* '''RDNA''': AMD Radeon DNA;<br />
* '''GMA''': Intel Graphics Media Accelerator;<br />
* '''GT''': Intel Graphics Technology.<br />
<br />
=== Memory glossary ===<br />
<br />
* '''HM''': HyperMemory, ATi technology using main memory when GPU memory is full;<br />
* '''TC''': TurboCache, Nvidia technology using main memory when GPU memory is full;<br />
* '''AR''': AcceleRAM, S3 technology using main memory when GPU memory is full.<br />
<br />
== Useful resources ==<br />
<br />
* [https://mesamatrix.net/ Mesa Matrix]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units Wikipedia list of AMD graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units Wikipedia list of AMD accelerated processing units]<br />
* [https://www.x.org/wiki/RadeonFeature/ X.Org Radeon feature matrix and decoder ring]<br />
* [https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units Wikipedia list of Intel graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units Wikipedia list of Nvidia graphics processing units]<br />
* [https://nouveau.freedesktop.org/wiki/MesaDrivers/ Mesa Nouveau drivers]<br />
* [https://nouveau.freedesktop.org/wiki/CodeNames/ Mesa Nouveau decoder ring]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=GPU_compatibility_matrix&diff=8566GPU compatibility matrix2023-11-26T17:50:47Z<p>Illwieckz: </p>
<hr />
<div>{{Note|header=Known workarounds|content=<br />
* {{ATI}}: If you run a very old Radeon HD 2000 or HD 3000 from 2007 or 2008 on Linux, you may have to set <code>R600_DEBUG=nohyperz</code> environment variable, see ''nohyperz'' mention in [[#Notes|Notes]].}}<br />
{{Note|header=Known issues|content=<br />
* {{Intel}}: People reported some graphical glitches on specific graphic chips or specific operating system, if you encounter a bug, please check [https://github.com/DaemonEngine/Daemon/labels/GPU-Intel here] if it is already known and if yes, please tell us what graphic chip and operating system you use.<br />
The place to report graphical bugs is [https://github.com/DaemonEngine/Daemon/issues/new here].}}<br />
<br />
This table gathers test results about various hardware and software configurations, <span style="background-color: green !important; color: white !important; padding: .25em .5em;">passed</span> means nothing wrong is noticed and frame rate is at least <u>60 fps</u> on common scene, <span style="background-color: lightgreen !important; color: green !important; padding: .25em .5em;">playable</span> means at least <u>30 fps</u>.<br />
<br />
All those tests were driven by Unvanquished developers or under Unvanquished developer supervision.<br />
<br />
See [[#Comprehensive_analysis|below]] for analysis, specific definitions and meanings. Those results are given for Unvanquished and Dæmon engine 0.52.<br />
<br />
{{GPU compatibility matrix}}<br />
<br />
<br/><hr/><br/><br />
<br />
== Comprehensive analysis ==<br />
<br />
Minimal configuration for the Unvanquished game is OpenGL 3.2. Unvanquished can run on OpenGL 2.1 hardware but this would not be playable because because we use models with more than 41 bones and OpenGL 2.1 cards can't accelerate them enough. It will run but it will be slow.<br />
<br />
Decent performance (given advanced graphical effects are disabled) starts with AMD/ATI TeraScale GPU, Intel HD Graphics (HD 4000), Nvidia Tesla-based GPUs. Though, it is strongly discouraged to buy GT218-based GPU like the Geforce 210 one as the proprietary driver for them is known to be buggy, requiring the engine to implement workarounds for it (save a game developer, do not buy this GPU!).<br />
<br />
To play at 4K resolutions, high-end AMD GCN/RDNA is recommended: AMD R9 390X from 2015 can handle <code>ultra</code> preset with 4K resolution at 144Hz. AMD R7 Embedded in R series APU can handle 2K resolution with <code>medium</code> preset (no realtime light and relief mapping disabled) as well as Intel UHD.<br />
<br />
Minimal configuration to run the Dæmon engine is OpenGL 2.1 with <code>ARB_half_float_vertex</code> and <code>ARB_framebuffer_object</code> (<code>EXT_framebuffer_object</code> is not enough). It includes ATI/AMD GPU starting with R300 (Radeon X300), Intel GPU starting with GMA965 (X3100) on Linux and macOS, HD Graphics on Windows, Nvidia starting with Curie (NV40, Geforce 6xxx). Wikipedia says the GMA965 Windows driver only supports OpenGL 1.5 and then would not reach the requirements for running Unvanquished on this platform. If you plan to make a game using Damon engine supporting those older cards, make sure your animated models don't have more than 41 bones.<br />
<br />
== How to contribute ==<br />
<br />
This matrix is generated from a cell sheet. Do not edit it by hand, Please ask <code>illwieckz</code> for access to the cell sheet.<br />
<br />
Please sort your contributions by brand (ATI/AMD, Intel, Nvidia, Via…) then by launch date (from newer to older).<br />
<br />
The table also documents who may be able to reproduce a special configuration, please put your nick name and tell how much it is easy for you to reproduce a test on it (see below for keywords to use).<br />
<br />
Please tell at least, brand, model, model launch date (look at Wikipedia), host, memory size, the operating system, the driver (kernel mode and user mode), OpenGL and GLSL version, Unvanquished version you tested, the status, the preset and the resolution you validated and eventual notes.<br />
<br />
If you find out the code name and related micro architecture, please note it, same with form factor and bus.<br />
<br />
Other data are less relevant for diagnostic and are only useful to get a better picture of the tested hardware, don't hesitate to write down as much info as you can.<br />
<br />
Append the <code>~</code> character to version number if you're testing a preversion. For example use <code>0.52~</code> to tell you tested against the to-be-released 0.52 version.<br />
<br />
Put a single <code>-</code> character in cell you don't have data for (do not leave empty cells). When you describe multiple configuration for the same piece of hardware, use the <code>↑</code> character to tell the cell uses the same value as the previous line.<br />
<br />
== Definitions ==<br />
<br />
=== Status ===<br />
<br />
* '''hang''': the computer becomes unresponsive, requiring a hard reset;<br />
* '''crash''': the game is terminated by the operating system on some unrecoverable failure;<br />
* '''missing''': the game exits by itself because of some requirement not being met;<br />
* '''broken''': the game loads maps but graphical bugs affecting gameplay are seen;<br />
* '''glitchy''': the game loads maps but graphical bugs non-affecting gameplay are seen;<br />
* '''slow''': the game is rendered properly but slowly with less than 30 fps;<br />
* '''playable''': nothing wrong is noticed and frame rate is at least 30 fps but less than 60 fps;<br />
* '''passed''': nothing wrong is noticed and frame rate is at least 60 fps.<br />
<br />
=== Availability ===<br />
<br />
* '''lost''': tester has lost access to the hardware;<br />
* '''foreign''': tester has access to the hardware but does not own it;<br />
* '''unplugged''': tester owns the hardware but testing requires to plug the hardware in a computer;<br />
* '''unconfigured''': hardware is plugged in a computer but making use of it requires software changes;<br />
* '''configured''': hardware and software are ready to use for testing.<br />
<br />
=== Notes ===<br />
<br />
* '''extfbo''': this GPU provides {{code|ARB_framebuffer_object}} instead of {{code|ARB_framebuffer_object}};<br />
* '''fakefps''': game displays high frame rate number but the experience is stuttering;<br />
* '''hickups''': performance is globally correct, but sometime the framerate drops a bit for a very short time;<br />
* '''lowsky''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid skybox graphical glitches;<br />
* '''lowtex''': lowering texture size using at least <code>r_picmip 1</code> is required to avoid a computer hang;<br />
* '''mesamain''': running the driver from Mesa {{code|main}} at the time of the test was required to get the game running or avoid major rendering bugs;<br />
* '''noaccel''': no OpenGL hardware acceleration is implemented;<br />
* '''nogather''': <code>GL_ARB_texture_gather</code> is wrongly advertised by the driver to be supported by this hardware, making the engine crash at startup (Nvidia proprietary driver bug). The engine ships some workaround for this driver bug, if you experience the crash on version 0.52 and later but can properly start the game with <code>-set r_arb_texture_gather 0</code> engine command line option, please reopen issue [https://github.com/DaemonEngine/Daemon/issues/368 Daemon#368];<br />
* '''nohalfloatvertex''': missing <code>ARB_half_float_vertex</code> OpenGL extension;<br />
* '''nohyperz''': <code>R600_DEBUG=nohyperz</code> environment variable is required to be set to avoid graphical glitches, see issues [https://github.com/DaemonEngine/Daemon/issues/343 Daemon#343] and [https://gitlab.freedesktop.org/mesa/mesa/-/issues/3290 Mesa#3290];<br />
* '''norgtc''': <code>GL_ARB_texture_compression_rgtc</code> extension is not supported on this hardware, some texture may be loaded with swapped channels, especially normal maps. Engine implements special algorithms to workaround this, see issue [https://github.com/DaemonEngine/Daemon/issues/375 Daemon#375];<br />
* '''nvidiagarbage''': this driver is so bad you have to be very lucky to get at least a desktop drawn on screen before the computer hangs. With or without the game, after some screen freezes and display server crashes the kernel will complain about the card having disconnected itself from the PCIe bus. This issue was verified on multiple cards of this generations that are known to run for months without crashing when using free open source drivers instead;<br />
* '''slowmodel''': models with a lot of bones are known to induce severe frame drop on such hardware, see issue [https://github.com/Unvanquished/Unvanquished/issues/1207 Unvanquished#1207];<br />
* '''tinyalu''': this hardware has a very small ALU (arithmetic logic unit), dynamic lighting must be disabled with <code>r_dynamicLight 0</code> to prevent the driver to abort GLSL shader compilation that may lead to an engine crash, see issue [https://github.com/DaemonEngine/Daemon/issues/344 Daemon#344].<br />
<br />
=== Bus ===<br />
<br />
* '''PCI''': Peripheral Component Interconnect, slow multi-purpose bus for add-on cards, obsolete;<br />
* '''AGP''': Accelerated Graphics Port, high-speed bus designed for graphic cards, obsolete;<br />
* '''HT''': HyperTransport, high-speed AMD system bus for CPUs, sometime used with onboard GPUs;<br />
* '''chip''': Internal bus of a system on a chip (SoC), the exact communication bus technology is usually poorly documented;<br />
* '''PCIe''': PCI Express, high-speed multi-purpose bus for add-on cards and on-board devices, recommended;<br />
* '''CXL''': Compute Express Link, high-speed multi-purpose bus for add-on cards, meant to fix PCI Express issues in multi-GPU configuration.<br />
<br />
=== Form factor ===<br />
<br />
* '''discrete''': full height workstation extension card;<br />
* '''lowprofile''': low profile workstation extension card;<br />
* '''MXM''': Mobile PCI Express module;<br />
* '''onboard''': dedicated chip on motherboard;<br />
* '''integrated''': chip integrated in CPU package or chipset;<br />
* '''SoC''': System on a chip.<br />
<br />
=== Micro architecture ===<br />
<br />
* '''USSA''': ATi Unified Superscalar Shader Architecture;<br />
* '''GCN''': AMD Graphics Core Next;<br />
* '''RDNA''': AMD Radeon DNA;<br />
* '''GMA''': Intel Graphics Media Accelerator;<br />
* '''GT''': Intel Graphics Technology.<br />
<br />
=== Memory glossary ===<br />
<br />
* '''HM''': HyperMemory, ATi technology using main memory when GPU memory is full;<br />
* '''TC''': TurboCache, Nvidia technology using main memory when GPU memory is full;<br />
* '''AR''': AcceleRAM, S3 technology using main memory when GPU memory is full.<br />
<br />
== Useful resources ==<br />
<br />
* [https://mesamatrix.net/ Mesa Matrix]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_graphics_processing_units Wikipedia list of AMD graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_AMD_accelerated_processing_units Wikipedia list of AMD accelerated processing units]<br />
* [https://www.x.org/wiki/RadeonFeature/ X.Org Radeon feature matrix and decoder ring]<br />
* [https://en.wikipedia.org/wiki/List_of_Intel_graphics_processing_units Wikipedia list of Intel graphics processing units]<br />
* [https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_units Wikipedia list of Nvidia graphics processing units]<br />
* [https://nouveau.freedesktop.org/wiki/MesaDrivers/ Mesa Nouveau drivers]<br />
* [https://nouveau.freedesktop.org/wiki/CodeNames/ Mesa Nouveau decoder ring]</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Template:User_game_locations&diff=8553Template:User game locations2023-11-24T22:17:08Z<p>Illwieckz: Undo revision 8552 by Illwieckz (talk)</p>
<hr />
<div>{{#ifeq: {{{loc|}}} |false| | {{Other_game_locations}} }}<br />
The default user directory is:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default user directory (homepath)<br />
|- <br />
! Linux <sup><small>#xdg</small></sup><br />
| <code>${HOME}/.local/share/unvanquished</code><br />
|-<br />
! Windows<br />
| <code>%USERPROFILE%\Documents\My Games\Unvanquished</code><br />
|- <br />
! macOS<br />
| <code>${HOME}/Library/Application Support/Unvanquished</code><br />
|-<br />
|}<br />
<br />
<small><br />
* '''#xdg''': {{XdgDataHome_clarification}}<br />
</small></div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Template:User_game_locations&diff=8552Template:User game locations2023-11-24T22:07:19Z<p>Illwieckz: random modification to test something</p>
<hr />
<div>{{#ifeq: {{{loc|}}} |false| | {{Other_game_locations}} }}<br />
The default ''user'' directory is:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default user directory (homepath)<br />
|- <br />
! Linux <sup><small>#xdg</small></sup><br />
| <code>${HOME}/.local/share/unvanquished</code><br />
|-<br />
! Windows<br />
| <code>%USERPROFILE%\Documents\My Games\Unvanquished</code><br />
|- <br />
! macOS<br />
| <code>${HOME}/Library/Application Support/Unvanquished</code><br />
|-<br />
|}<br />
<br />
<small><br />
* '''#xdg''': {{XdgDataHome_clarification}}<br />
</small></div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Hosting_one%27s_own_awesome_mod&diff=8551Hosting one's own awesome mod2023-11-24T12:27:11Z<p>Illwieckz: Random change to trigger an IRC message ( ͡° ͜ʖ ͡°)</p>
<hr />
<div>{{Note|content=The page [[Server/Running]] provides extra information on server configuration.}}<br />
<br />
For now, it's only some notes and improvements may come later.<br />
<br />
Building the dpk (additions to how to build mod):<br />
<br />
* with 7zip: <code>cd mod-<name>_src.dpkdir; 7z -tzip -mx=9 a ../mod-<name>_<version>.dpk .</code><br />
* can simply depends on Unvanquished, the mod's content will be applied on top of Unvanquished's data<br />
<br />
To host a mod, one needs two types of software servers on the host machine:<br />
<br />
* an HTTP server (https does NOT work)<br />
* daemonded<br />
<br />
Starting daemonded: <code>./daemonded -homepath server +exec server.cfg</code><br />
<br />
Unvanquished provides it's own <code>maprotation.cfg</code> file internally, which is used by default by provided file (<code>rotation1 { goto defaultRotation }</code>)<br />
<br />
Things to change in <code>config/server.cfg</code>:<br />
<br />
* <code>sv_hostname "my awesome server"</code>: name displayed on server list<br />
* <code>g_motd "my awesome mod"</code>: what to display when people connect<br />
* <code>sv_allowdownload 1</code>: must be 1, since people won't have your mod otherwise<br />
* <code>sv_dl_maxRate "1000"</code>: seems pretty useless, related to UDP download, slow as hell anyway<br />
* <code>sv_wwwBaseURL "example.com/unvanquished/pkg"</code>: where to find the files to download, do not put protocol<br />
* <code>sv_wwwDownload "1"</code>: enable HTTP download (otherwise only slow UDP download will work)<br />
* <code>sv_wwwFallbackURL "dl.unvanquished.net/pkg"</code>: where to find packages you don't provide, a rather good idea, don't you think?<br />
* <code>set fs_extrapaks mod-awesome</code>: mods to load at startup, relative to pakpath (TODO: document), up to the first underscore (_), since text after is reserved to versioning and extension. Last version will (probably?) always be used.<br />
<br />
Last but not least, place in <code>example.com/unvanquished/pkg</code>:<br />
<br />
* the dpk files people will need<br />
* a file named <code>PAKSERVER</code> containing the text <code>ALLOW_UNRESTRICTED_DOWNLOAD</code>, you can download a ready to use one [https://dl.unvanquished.net/pkg/PAKSERVER there].</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Hosting_one%27s_own_awesome_mod&diff=8550Hosting one's own awesome mod2023-11-24T12:19:01Z<p>Illwieckz: Random change to trigger an IRC message ( ͡° ͜ʖ ͡°)</p>
<hr />
<div>{{Note|content=The page [[Server/Running]] provides extra information on server configuration.}}<br />
<br />
For now, it's only some notes, improvements may come later.<br />
<br />
Building the dpk (additions to how to build mod):<br />
<br />
* with 7zip: <code>cd mod-<name>_src.dpkdir; 7z -tzip -mx=9 a ../mod-<name>_<version>.dpk .</code><br />
* can simply depends on Unvanquished, the mod's content will be applied on top of Unvanquished's data<br />
<br />
To host a mod, one needs two types of software servers on the host machine:<br />
<br />
* an HTTP server (https does NOT work)<br />
* daemonded<br />
<br />
Starting daemonded: <code>./daemonded -homepath server +exec server.cfg</code><br />
<br />
Unvanquished provides it's own <code>maprotation.cfg</code> file internally, which is used by default by provided file (<code>rotation1 { goto defaultRotation }</code>)<br />
<br />
Things to change in <code>config/server.cfg</code>:<br />
<br />
* <code>sv_hostname "my awesome server"</code>: name displayed on server list<br />
* <code>g_motd "my awesome mod"</code>: what to display when people connect<br />
* <code>sv_allowdownload 1</code>: must be 1, since people won't have your mod otherwise<br />
* <code>sv_dl_maxRate "1000"</code>: seems pretty useless, related to UDP download, slow as hell anyway<br />
* <code>sv_wwwBaseURL "example.com/unvanquished/pkg"</code>: where to find the files to download, do not put protocol<br />
* <code>sv_wwwDownload "1"</code>: enable HTTP download (otherwise only slow UDP download will work)<br />
* <code>sv_wwwFallbackURL "dl.unvanquished.net/pkg"</code>: where to find packages you don't provide, a rather good idea, don't you think?<br />
* <code>set fs_extrapaks mod-awesome</code>: mods to load at startup, relative to pakpath (TODO: document), up to the first underscore (_), since text after is reserved to versioning and extension. Last version will (probably?) always be used.<br />
<br />
Last but not least, place in <code>example.com/unvanquished/pkg</code>:<br />
<br />
* the dpk files people will need<br />
* a file named <code>PAKSERVER</code> containing the text <code>ALLOW_UNRESTRICTED_DOWNLOAD</code>, you can download a ready to use one [https://dl.unvanquished.net/pkg/PAKSERVER there].</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Game_locations&diff=8549Game locations2023-11-24T11:32:27Z<p>Illwieckz: /* When installed using Flatpak */</p>
<hr />
<div>== When using the Unvanquished launcher ==<br />
<br />
{{Game_locations|loc=false}}<br />
== When installed using Flatpak ==<br />
When installed using Flatpak, the default user path is:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default user directory (homepath)<br />
|- <br />
! Linux (Flatpak)<br />
| <code>${HOME}/.var/app/net.unvanquished.Unvanquished/data/unvanquished/</code><br />
|-<br />
|}<br />
<br />
The system directorys follows a different layout and can be split and stored in various places (as system install or user install). When installed system-wide, here is the parent directory for the {{code|pkg}} directory, to be used as ''engine path'' (even if it's not the engine path) in tools like [[Tools/NetRadiant|NetRadiant]]:<br />
<br />
{{code|/var/lib/flatpak/app/net.unvanquished.Unvanquished/current/active/files}}<br />
<br />
== When using the Universal zip ==<br />
<br />
When using [[Universal zip]], the default system paths are:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default binary directory (libpath)<br />
! Default data directory (basepath)<br />
|-<br />
! Linux/Windows<br />
| <code><Extracted directory></code><br />
| <code><Extracted directory></code><br />
|-<br />
! macOS<br />
| <code><Extracted directory>/Unvanquished.app/Contents/MacOS</code><br />
| <code><Extracted directory></code><br />
|- <br />
|}<br />
<br />
The default user paths are the same as the launcher ones.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Game_locations&diff=8548Game locations2023-11-24T11:32:09Z<p>Illwieckz: /* When installed using Flatpak */</p>
<hr />
<div>== When using the Unvanquished launcher ==<br />
<br />
{{Game_locations|loc=false}}<br />
== When installed using Flatpak ==<br />
When installed using Flatpak, the default user path is:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default user directory (homepath)<br />
|- <br />
! Linux (Flatpak)<br />
| <code>${HOME}/.var/app/net.unvanquished.Unvanquished/data/unvanquished/</code><br />
|-<br />
|}<br />
<br />
The system directorys follows a different layout and can be split and stored in various places (as system install or user install). When installed system-wide, here is the parent directory for the {{code|pkg}} folder, to be used as _engine path_ (even if it's not the engine path) in tools like [[Tools/NetRadiant|NetRadiant]]:<br />
<br />
{{code|/var/lib/flatpak/app/net.unvanquished.Unvanquished/current/active/files}}<br />
<br />
== When using the Universal zip ==<br />
<br />
When using [[Universal zip]], the default system paths are:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default binary directory (libpath)<br />
! Default data directory (basepath)<br />
|-<br />
! Linux/Windows<br />
| <code><Extracted directory></code><br />
| <code><Extracted directory></code><br />
|-<br />
! macOS<br />
| <code><Extracted directory>/Unvanquished.app/Contents/MacOS</code><br />
| <code><Extracted directory></code><br />
|- <br />
|}<br />
<br />
The default user paths are the same as the launcher ones.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Game_locations&diff=8547Game locations2023-11-24T11:31:36Z<p>Illwieckz: /* When installed using Flatpak */</p>
<hr />
<div>== When using the Unvanquished launcher ==<br />
<br />
{{Game_locations|loc=false}}<br />
== When installed using Flatpak ==<br />
When installed using Flatpak, the default user directory is:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default user directory (homepath)<br />
|- <br />
! Linux (Flatpak)<br />
| <code>${HOME}/.var/app/net.unvanquished.Unvanquished/data/unvanquished/</code><br />
|-<br />
|}<br />
<br />
The system directory follows a different layout and can be split and stored in various places (as system install or user install). When installed system-wide, here is the parent directory for the {{code|pkg}} folder, to be used as _engine path_ (even if it's not the engine path) in tools like [[Tools/NetRadiant|NetRadiant]]:<br />
<br />
{{code|/var/lib/flatpak/app/net.unvanquished.Unvanquished/current/active/files}}<br />
<br />
== When using the Universal zip ==<br />
<br />
When using [[Universal zip]], the default system paths are:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default binary directory (libpath)<br />
! Default data directory (basepath)<br />
|-<br />
! Linux/Windows<br />
| <code><Extracted directory></code><br />
| <code><Extracted directory></code><br />
|-<br />
! macOS<br />
| <code><Extracted directory>/Unvanquished.app/Contents/MacOS</code><br />
| <code><Extracted directory></code><br />
|- <br />
|}<br />
<br />
The default user paths are the same as the launcher ones.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Game_locations&diff=8546Game locations2023-11-24T11:23:12Z<p>Illwieckz: /* When using the Universal zip */</p>
<hr />
<div>== When using the Unvanquished launcher ==<br />
<br />
{{Game_locations|loc=false}}<br />
== When installed using Flatpak ==<br />
When installed using Flatpak, the default user directory is:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default user directory (homepath)<br />
|- <br />
! Linux (Flatpak)<br />
| <code>${HOME}/.var/app/net.unvanquished.Unvanquished/data/unvanquished/</code><br />
|-<br />
|}<br />
<br />
== When using the Universal zip ==<br />
<br />
When using [[Universal zip]], the default system paths are:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default binary directory (libpath)<br />
! Default data directory (basepath)<br />
|-<br />
! Linux/Windows<br />
| <code><Extracted directory></code><br />
| <code><Extracted directory></code><br />
|-<br />
! macOS<br />
| <code><Extracted directory>/Unvanquished.app/Contents/MacOS</code><br />
| <code><Extracted directory></code><br />
|- <br />
|}<br />
<br />
The default user paths are the same as the launcher ones.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Template:Other_game_locations&diff=8545Template:Other game locations2023-11-24T11:22:01Z<p>Illwieckz: </p>
<hr />
<div><p>If you installed the game using Flatpak or Universal zip or other means, see [[Game locations]] for specific paths.</p></div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Template:User_game_locations&diff=8544Template:User game locations2023-11-24T11:20:25Z<p>Illwieckz: </p>
<hr />
<div>{{#ifeq: {{{loc|}}} |false| | {{Other_game_locations}} }}<br />
The default user directory is:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default user directory (homepath)<br />
|- <br />
! Linux <sup><small>#xdg</small></sup><br />
| <code>${HOME}/.local/share/unvanquished</code><br />
|-<br />
! Windows<br />
| <code>%USERPROFILE%\Documents\My Games\Unvanquished</code><br />
|- <br />
! macOS<br />
| <code>${HOME}/Library/Application Support/Unvanquished</code><br />
|-<br />
|}<br />
<br />
<small><br />
* '''#xdg''': {{XdgDataHome_clarification}}<br />
</small></div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Template:System_game_locations&diff=8543Template:System game locations2023-11-24T11:20:10Z<p>Illwieckz: </p>
<hr />
<div>{{#ifeq: {{{loc|}}} |false| | {{Other_game_locations}} }}<br />
When using the [[Unvanquished launcher]], the default system paths are:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default data directory (basepath)<br />
! Default binary directory (libpath)<br />
|-<br />
! Linux <sup><small>#xdg</small></sup><br />
| colspan="2" | <code>${HOME}/.local/share/unvanquished/base</code><br />
|-<br />
! Windows<br />
| colspan="2" | <code>%ProgramFiles%\Unvanquished</code><br />
|- <br />
! macOS<br />
| <code>${HOME}/Games/Unvanquished</code><br />
| <code>${HOME}/Games/Unvanquished/Unvanquished.app/Contents/MacOS</code><br />
|-<br />
|}<br />
<br />
<small><br />
* '''#xdg''': {{XdgDataHome_clarification|subdirectory=base}}<br />
</small></div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Template:User_game_locations&diff=8542Template:User game locations2023-11-24T11:18:28Z<p>Illwieckz: Reverted edits by Illwieckz (talk) to last revision by Killing time</p>
<hr />
<div>{{#ifeq: {{{loc|}}} |false| | {{Other_game_locations}} }}<br />
<br />
The default user directory is:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default user directory (homepath)<br />
|- <br />
! Linux <sup><small>#xdg</small></sup><br />
| <code>${HOME}/.local/share/unvanquished</code><br />
|-<br />
! Windows<br />
| <code>%USERPROFILE%\Documents\My Games\Unvanquished</code><br />
|- <br />
! macOS<br />
| <code>${HOME}/Library/Application Support/Unvanquished</code><br />
|-<br />
|}<br />
<br />
<small><br />
* '''#xdg''': {{XdgDataHome_clarification}}<br />
</small></div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Template:User_game_locations&diff=8541Template:User game locations2023-11-24T11:14:44Z<p>Illwieckz: add flatpak user directory</p>
<hr />
<div>{{#ifeq: {{{loc|}}} |false| | {{Other_game_locations}} }}<br />
<br />
The default user directory is:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default user directory (homepath)<br />
|- <br />
! Linux <sup><small>#xdg</small></sup><br />
| <code>${HOME}/.local/share/unvanquished</code><br />
|- <br />
! Linux (Flatpak)<br />
| <code>${HOME}/.var/app/net.unvanquished.Unvanquished/data/unvanquished</code><br />
|-<br />
! Windows<br />
| <code>%USERPROFILE%\Documents\My Games\Unvanquished</code><br />
|- <br />
! macOS<br />
| <code>${HOME}/Library/Application Support/Unvanquished</code><br />
|-<br />
|}<br />
<br />
<small><br />
* '''#xdg''': {{XdgDataHome_clarification}}<br />
</small></div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Game_locations&diff=8540Game locations2023-11-24T11:09:33Z<p>Illwieckz: /* When installed using Flatpak */</p>
<hr />
<div>== When using the Unvanquished launcher ==<br />
<br />
{{Game_locations|loc=false}}<br />
== When installed using Flatpak ==<br />
When installed using Flatpak, the default user directory is:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default user directory (homepath)<br />
|- <br />
! Linux (Flatpak)<br />
| <code>${HOME}/.var/app/net.unvanquished.Unvanquished/data/unvanquished/</code><br />
|-<br />
|}<br />
<br />
== When using the Universal zip ==<br />
<br />
When using [[Universal zip]], the default system paths are:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Platform<br />
! Default binary directory (libpath)<br />
! Default data directory (basepath)<br />
|-<br />
! Linux/Windows<br />
| <code><Extracted directory></code><br />
| <code><Extracted directory></code><br />
|-<br />
! macOS<br />
| <code><Extracted directory>/Unvanquished.app/Contents/MacOS</code><br />
| <code><Extracted directory></code><br />
|- <br />
|}</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Tools/Audacity&diff=8537Tools/Audacity2023-11-24T09:57:54Z<p>Illwieckz: </p>
<hr />
<div>[[Category:Tools]]<br />
[[Category:Audio]]<br />
Audacity is a cross-platform audio editor available for GNU/Linux, macOS, Windows and more operating systems.<br />
<br />
Audacity is free software and is the recommended way to edit sounds for Unvanquished.<br />
<br />
==Website==<br />
<br />
The Audacity website is [https://www.audacityteam.org audacityteam.org].<br />
<br />
The Audacity documentation is on [https://support.audacityteam.org audacityteam.org/help/documentation].<br />
<br />
==Sources==<br />
<br />
The Audacity source repository is [https://github.com/audacity/audacity github.com/audacity/audacity].</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Formats/Known_regressions_since_Tremulous&diff=8536Formats/Known regressions since Tremulous2023-11-24T09:41:52Z<p>Illwieckz: </p>
<hr />
<div>[[Category:Formats]]<br />
As a mapper or someone creating assets for the game, you may be aware of those pitfalls that can be considered as regressions when comparing with Tremulous or Quake Ⅲ.<br />
<br />
See also the [[Formats/Limitations that are not regressions|Limitations that are not regressions]] page for things that are not regressions.<br />
<br />
== Regressions that may make the game look broken ==<br />
<br />
=== Missing portal blending ===<br />
<br />
Portal blending is not implemented yet in the renderer.<br />
<br />
What happens is that the renderer that was used in Quake Ⅲ and Tremulous were OpenGL 1 renderers, and the Dæmon engine renderer is an OpenGL 3+ renderer. The difference between OpenGL 1 and OpenGL 3+ is similar to the difference between OpenGL 4.6 and Vulkan. Those renderers are different software. Everything from the OpenGL 1 renderer had to be re-implemented in OpenGL 3+ renderer with new code.<br />
<br />
So the lack of portable blending is not technically a regression as the code never existed in the renderer to begin with. It also means there is no bug in our code.<br />
<br />
Though, we fully agree this means a map ported from Tremulous that was using that feature will look broken and that then can be considered as a regression from a player or mapper point of view.<br />
<br />
From the code point of view, this is a feature request and we need someone to implement it. We are looking for renderer developers and OpenGL 3+ specialist to implement the feature in our engine.<br />
<br />
=== Missing RoQ video ===<br />
<br />
RoQ video support was removed long time ago as Unvanquished did not make use of it.<br />
<br />
Later the last remaining video format was removed, it was a format from an alternate reality that never happened : OGM with Vorbis and Theora. OGM with Vorbis and Theora is '''''not''''' OGG with Vorbis and Theora. The OGM format was a hack purposed for DivX piracy scene to mux XviD video with Vorbis audio, and while OGM with XviD was pretty popular, no one known tool can produce OGM with Vorbis and Theora. illwieckz tried a bunch of current and old software from the era and none was able to produce OGM with Theora and Vorbis. Neither oggenc from vorbis-tools, neither ogmtools, neither ffmpeg (recent and old), neither mencoder, neither OggMux, neither OGMMuxer, neither VirtualDubMod (modded VirtualDub for OGM support), neither ffdshow with OGM, Theora and Vorbis codecs. The only remaining thing untested is some obscure Visual Studio plugin that was mentioned in some places but for which no one file was found yet. We know something existed since Smokin' Guns game uses such OGM with Theora and Vorbis title video. That's all.<br />
<br />
Once that cursed OGM with Theora and Vorbis format was removed, the Theora codec was dead code and the Video support was dead code. This dead code was removed at some point because of being dead code.<br />
<br />
The removal of Video playing feature and the removal of RoQ support without alternative was controversial, and Dæmon 0.54 will bring back {{code|videoMap}} support with RoQ format.<br />
<br />
== Regressions that may make the game look broken, but with workaround ==<br />
<br />
=== Stereo sound effect not being positional ===<br />
<br />
Currently only mono sound files are played properly as positional audio, stereo sound files are played ''in your face''. We need to fix this.<br />
<br />
A simple workaround can be applied when repackaging the files: just convert the positional stereo sound as mono, this would make no difference to the player (stereo positional sound is meaningless anyway).<br />
<br />
== Regressions that don't make the game look broken ==<br />
<br />
=== Missing alphaGen lightingSpecular ===<br />
<br />
The {{code|alphaGen lightingSpecular}} was a subtle effect applied on some textures. This feature being missing doesn't break the rendering of the texture and if you look at the surface you may not notice something is wrong, unless you do comparative screenshots with Tremulous and Unvanquished.<br />
<br />
Implementing this feature has very low priority as there is no impact on gameplay and textures don't look bad without it. The game don't look broken without it and one cannot know the feature is missing just by playing the game, unless some warning tells it in log.</div>Illwieckzhttps://wiki.unvanquished.net/index.php?title=Main_Page&diff=8529Main Page2023-11-22T18:02:57Z<p>Illwieckz: Add link to the GPU compatibility matrix</p>
<hr />
<div>{{DISPLAYTITLE:Unvanquished wiki}}<br />
* If you need help about the game or the wiki, jump on [https://unvanquished.net/chat/ IRC or Matrix or Discord] (ses [[Chat#Channel_rules|rules]]) or the {{forums}}.<br />
* If you are facing a bug in the game, report it on [https://github.com/Unvanquished/Unvanquished/issues GitHub].<br />
* Build the wiki! Contribute guides, information, corrections and improvements.<br />
<br />
<div class="mainPageNewBox"><br />
<br />
<h2> [[Install and play]] </h2> <br />
* [[Install and play#Getting the game|Getting the game]]<br />
* [[Install and play#Running and configuration|Configuration]]<br />
* [[Bug reporting]]<br />
* [[Install and play#Getting in contact|Getting in contact]]<br />
* [[Server/Running|Running a server]]<br />
* [[GPU compatibility matrix]]<br />
<br />
</div><br />
<br />
<div class="mainPageNewBox"><br />
<br />
<h2> [[Lore]] </h2><br />
* [[Humans]], [[Aliens]], [[:Category:Buildables|Buildables]], [[:Category:Weapons|Weapons]]…<br />
* [[Gameplay|Gameplay guides]]<br />
* [[Lore#Stories|Stories]]<br />
* [[Maps]] and [[Mods]]<br />
<br />
</div><br />
<br />
<div class="mainPageNewBox"><br />
<br />
<h2> [[Coding]] </h2><br />
* [[Getting the source]]<br />
* [[Compiling the source]]<br />
* [[Contributing|Contributing guide]]<br />
* [[Coding convention]]<br />
* [[Dealing with submodules]]<br />
* [[Continuous integration]]<br />
* Reference materials<br />
<br />
</div><br />
<br />
<div class="mainPageNewBox"><br />
<br />
<h2> [[Making and modding]] </h2><br />
* [[Mapping]], [[Modeling]], [[Texturing]]…<br />
* [[Music and sounds]]<br />
* [[Tutorials]], [[Formats]]<br />
* [[Translation]]<br />
* Gameplay modification<br />
<br />
</div><br />
<br />
<div class="mainPageNewBox"><br />
<br />
<h2> [[Projects|Tools and projects]] </h2><br />
<br />
* [[Wiki project resources]]<br />
* [[Infrastructure]]<br />
* [[Tools]]<br />
* [[Projects#Unvanquished on the web|Unvanquished on the web]]<br />
<br />
</div><br />
<br />
<div style="clear: both;"></div><br />
<br />
<div style="text-align: center;">{{NUMBEROFEDITS}} edits to {{NUMBEROFPAGES}} pages with {{NUMBEROFFILES}} uploaded files</div><br />
<br />
<div style="height: 150px; width: 100%; overflow:hidden; align:centre;"><br />
<br />
[[File:Dir inpackage.png|x150px]][[File:Egg concept.png|x150px]] [[File:Om concept.png|x150px]] [[File:Librocket test custom menuscreen.png|x150px]] [[File:NetRadiant texture browser common.png|x150px]] [[File:Colourgrade_2.png|x150px]] [[File:Parpax upper.png|x150px]] [[File:Niveus brushesSelected.jpeg|x150px]] [[File:Mgturret render 300x240.png|x150px]] [[File:Barricade.png|x150px]]<br />
<br />
</div><br />
<br />
__NOTOC__ <!-- Disable table of contents. See https://www.mediawiki.org/wiki/Help:Magic_words --></div>Illwieckz