Sonic the Hedgehog (2006) Shaders: Difference between revisions
No edit summary |
mNo edit summary |
||
| (23 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
'''''Shaders''''' in [[Sonic the Hedgehog (2006)]] are compiled GPU programs that control the appearance of objects and effects. Most shaders have several different variants with different feature support. Multiplayer shaders may have additional optimisations, like replacing real-time planar reflections with cubemaps. | |||
In the Xbox 360 version of the game, shaders are stored in the following [[U8 Archive|archives]]: | |||
{| class="wikitable" | {| class="wikitable" | ||
!Type | |||
!Location | |||
|- | |||
|Singleplayer | |||
|<code>/game/xenon/archives/shader.arc</code> | |||
|- | |||
|Multiplayer | |||
|<code>/game/xenon/archives/shader_lt.arc</code> | |||
|} | |||
Within the archives, shaders variants are stored in a number of sub-folders. | |||
{| class="wikitable" | |||
!Folder | !Folder | ||
!Description | !Description | ||
|- | |||
|<code>std</code> | |||
|Standard | |||
|- | |||
|<code>np</code> | |||
|Standard without point lights | |||
|- | |- | ||
|<code>lm</code> | |<code>lm</code> | ||
| | |Replaces CSM with baked lightmaps and shadows. | ||
|- | |- | ||
|<code>lm_np</code> | |<code>lm_np</code> | ||
| | |Same as <code>lm</code> without point lights | ||
|- | |- | ||
|<code>morph</code> | |<code>morph</code>, <code>morph_np</code> | ||
| | |Morph targets (only affects vertex shaders) | ||
|- | |- | ||
|<code>skin</code>, <code>skin_np</code> | |||
|Skined meshes (only affects vertex shaders) | |||
|<code>skin</code> | |||
| | |||
|} | |} | ||
Many of the shaders within the | Many of the shaders within the sub-folders are exact duplicates of the standard variant. | ||
Each of the shaders listed below are in the <code>.fxo</code> format in the 360 version of the game. Each shader can contain multiple techniques, which hold the respective vertex and fragment shaders. | Each of the shaders listed below are in the <code>.fxo</code> format in the 360 version of the game. Each shader can contain multiple techniques, which hold the respective vertex and fragment shaders. | ||
The shader and specific technique used are defined per mesh set in | The shader and specific technique used are defined per mesh set in [[NN Chunk Format|XNO files]]. Some shaders are not referenced in XNO files, either because they are used internally or because they are unused altogether. | ||
{| class="wikitable | == Shader Inputs == | ||
All shaders used for rendering 3D objects use a common input block format. | |||
{| class="wikitable" | |||
|+ | |+ | ||
!Registers | |||
!Parameter | |||
!Description | |||
|- | |||
|<code>c0</code>-<code>c3</code> | |||
|<code>g_Material</code> | |||
|NinjaNext material parameters. Not always used as described. | |||
|- | |||
|<code>c4</code> | |||
|<code>g_Misc</code> | |||
| | |||
|- | |||
|<code>c5</code>-<code>c6</code> | |||
|<code>g_OffsetUV</code> | |||
| | |||
|- | |||
|<code>c8</code>-<code>c13</code> | |||
|<code>g_OLS</code> | |||
|[https://renderwonk.com/publications/gdm-2002/GDM_August_2002.pdf Hoffman–Preetham] scattering parameters. Most shaders evaluate phase at constant <code>cos(θ) = 0.5</code>. | |||
|- | |||
|<code>c14</code> | |||
|<code>g_RTDimensions</code> | |||
| | |||
|- | |||
|<code>c15</code> | |||
|<code>g_ClipInfo</code> | |||
| | |||
|- | |||
|<code>c16</code> | |||
|<code>g_KhronosParam</code> | |||
|Time | |||
|- | |||
|<code>c28</code>-<code>c30</code> | |||
|<code>g_LightMisc</code> | |||
| | |||
|- | |||
|<code>c31</code>-<code>c34</code> | |||
|<code>g_DirectionalLights[2]</code> | |||
| | |||
|- | |||
|<code>c39</code>-<code>c44</code> | |||
|<code>g_PointLights[2]</code> | |||
| | |||
|- | |||
|<code>c64</code>-<code>c66</code> | |||
|<code>g_MatW</code> | |||
|World matrix | |||
|- | |||
|<code>c68</code>-<code>c70</code> | |||
|<code>g_MatWV</code> | |||
|World * View matrix | |||
|- | |||
|<code>c72</code>-<code>c75</code> | |||
|<code>g_MatWVP</code> | |||
|World * View * Projection matrix | |||
|- | |||
|<code>c76</code>-<code>c78</code> | |||
|<code>g_MatV</code> | |||
|View matrix | |||
|- | |||
|<code>c80</code>-<code>c82</code> | |||
|<code>g_MatVI</code> | |||
|Inverse View matrix | |||
|- | |||
|<code>c84</code>-<code>c87</code> | |||
|<code>g_MatP</code> | |||
|Projection matrix | |||
|- | |||
|<code>c88</code>-<code>c91</code> | |||
|<code>g_MatVP</code> | |||
|View * Projection matrix | |||
|- | |||
|<code>c92</code>-<code>c95</code> | |||
|<code>g_mtxCSMViewProj</code> | |||
|CSM View * Projection matrix | |||
|- | |||
|<code>c96</code>-<code>c191</code> | |||
|<code>g_BoneMtx[32]</code> | |||
| | |||
|- | |||
|<code>c192</code> | |||
|<code>g_Morph</code> | |||
| | |||
|- | |||
|<code>c193</code> | |||
|<code>g_MorphFlags</code> | |||
| | |||
|- | |||
|<code>c194</code> | |||
|<code>g_SystemLightMapWork</code> | |||
| | |||
|- | |||
|<code>c210</code>+ | |||
|Shader-specific constants | |||
| | |||
|- | |||
|<code>b0</code> | |||
|<code>bReflection</code> | |||
| rowspan="2" |<code>CharacterMaterial</code> only | |||
|- | |||
|<code>b1</code> | |||
|<code>bCubeReflection</code> | |||
|- | |||
|<code>s0</code>-<code>s3</code> | |||
|Material textures | |||
| | |||
|- | |||
|<code>s8</code> | |||
|<code>g_smpEnvMap</code> | |||
|Static environment cube map | |||
|- | |||
|<code>s9</code> | |||
|<code>g_smpDepth0</code> | |||
|Packed linear depth, used by <code>Fog00</code>, <code>DepthOfFieldFilter</code> | |||
|- | |||
|<code>s10</code> | |||
|<code>g_smpDynamicEnvMap</code> | |||
|Planar reflection, used by <code>CscGlass02</code>, <code>MefiressSpecific</code>, <code>TpjWater00</code>, <code>Water03</code> | |||
|- | |||
|<code>s11</code> | |||
|<code>g_smpCSM</code> | |||
|CSM array | |||
|- | |||
|<code>s13</code> | |||
|<code>g_smpFB</code> | |||
|Resolved framebuffer, used by <code>OpticalCamouflage</code> | |||
|} | |||
== Shader List == | |||
{| class="wikitable" | |||
!Shader | !Shader | ||
!Notes | !Notes | ||
!Morph/Skin | |||
!Used in XNOs | !Used in XNOs | ||
|- | |- | ||
| Line 48: | Line 185: | ||
|- | |- | ||
| Air00 | | Air00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 53: | Line 191: | ||
| Animal00 | | Animal00 | ||
| Used for Kingdom Valley eagle. | | Used for Kingdom Valley eagle. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Line 71: | Line 210: | ||
|- | |- | ||
| Aqua00 | | Aqua00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 99: | Line 239: | ||
|- | |- | ||
| Billboard00 | | Billboard00 | ||
| | | No lighting, CSM sampling or point lights support. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Billboard01 | | Billboard01 | ||
| | | Vertex lighting and point lights, no CSM sampling. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Billboard02 | | Billboard02 | ||
| | | By far the most used shader. Vertex lighting with no CSM sampling or point lights support. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Billboard03 | | Billboard03 | ||
| | | Vertex lighting, CSM sampling and point lights. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Billboard04 | | Billboard04 | ||
| Pixel lighting, CSM sampling, no point lights. | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Billboard05 | | Billboard05 | ||
| Pixel lighting, no CSM sampling or point lights. | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Billboard06 | | Billboard06 | ||
| Pixel lighting and point lights, no CSM sampling. | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Billboard07 | | Billboard07 | ||
| | | Unused. Pixel lighting, CSM sampling and point lights. | ||
|- | |- | ||
| BillboardSp00 | | BillboardSp00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| BillboardSp01 | | BillboardSp01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| BillboardSp02 | | BillboardSp02 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 145: | Line 295: | ||
|- | |- | ||
| bod_light | | bod_light | ||
| Used by "Book of Darkness" aka Scepter of Darkness. | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| bod_metal | | bod_metal | ||
| Used by "Book of Darkness" aka Scepter of Darkness. | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 156: | Line 308: | ||
|- | |- | ||
| ChaosDrive | | ChaosDrive | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| CharacterMaterial | | CharacterMaterial | ||
| Responsible for rendering playable characters. By far the densest shader in the game, including many unused techniques. | | Responsible for rendering playable characters, NPCs, and many random hub world objects. By far the densest shader in the game, including many unused techniques. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Line 185: | Line 339: | ||
|- | |- | ||
| CscGlass00 | | CscGlass00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 192: | Line 347: | ||
|- | |- | ||
| CscGlass02 | | CscGlass02 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| CscScene00 | | CscScene00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| CscScene01 | | CscScene01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 213: | Line 371: | ||
|- | |- | ||
| csd3D | | csd3D | ||
| | | Used for world-space UI like enemy health gauges. | ||
|- | |- | ||
| csdBG | | csdBG | ||
| Line 228: | Line 386: | ||
|- | |- | ||
| DtdSand01 | | DtdSand01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| DtdSand02 | | DtdSand02 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 242: | Line 402: | ||
|- | |- | ||
| DtdScene00 | | DtdScene00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 249: | Line 410: | ||
|- | |- | ||
| DtdScene02 | | DtdScene02 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| DtdScene03 | | DtdScene03 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| DtdScene04 | | DtdScene04 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 265: | Line 429: | ||
| ecb_light | | ecb_light | ||
| Used for Egg Cerberus. | | Used for Egg Cerberus. | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| ecb_metal | | ecb_metal | ||
| Used for Egg Cerberus. | | Used for Egg Cerberus. | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Effect00 | | Effect00 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| egen_light | | egen_light | ||
| Used for Egg Genesis. | | Used for Egg Genesis. | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| egen_metal | | egen_metal | ||
| Used for Egg Genesis. | | Used for Egg Genesis. | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| egen_slight | | egen_slight | ||
| Used for Egg Genesis. | | Used for Egg Genesis. | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| emob_light | | emob_light | ||
| Used for Egg Mobile. | | Used for Egg Mobile. | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| emob_metal | | emob_metal | ||
| Used for Egg Mobile. | | Used for Egg Mobile. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| en_bullet | | en_bullet | ||
|Used by <code>en_cmn_bullet00</code>. | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 303: | Line 476: | ||
|- | |- | ||
| en_lava | | en_lava | ||
| | |Used by various Iblis enemies, and Solaris. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| en_light | | en_light | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| en_lightani | | en_lightani | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| en_metal | | en_metal | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| en_plating | | en_plating | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 324: | Line 502: | ||
| en_rock | | en_rock | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| EndSky00 | | EndSky00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| FBTex_NrmMap | | FBTex_NrmMap | ||
| Used by <code>esp_ripple</code> and <code>esp_Sphere</code> | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Fence00 | | Fence00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Fence01 | | Fence01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 344: | Line 527: | ||
| FlcCore00 | | FlcCore00 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| FlcScene00 | | FlcScene00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 354: | Line 539: | ||
|- | |- | ||
| Fluff00 | | Fluff00 | ||
| | |Used by Tropical Jungle plant grind rails. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Fog00 | | Fog00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 366: | Line 553: | ||
| fsol_armor | | fsol_armor | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Line 378: | Line 566: | ||
|- | |- | ||
| Gadget | | Gadget | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 385: | Line 574: | ||
|- | |- | ||
| Glass00 | | Glass00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Glass01 | | Glass01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 400: | Line 591: | ||
| iblis01_eye | | iblis01_eye | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| iblis01_lava | | iblis01_lava | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| iblis01_rock | | iblis01_rock | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 415: | Line 609: | ||
| iblis02_lava | | iblis02_lava | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| iblis02_rock | | iblis02_rock | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| iblis03_eye | | iblis03_eye | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| iblis03_lava | | iblis03_lava | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| iblis03_rock | | iblis03_rock | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Ice00 | | Ice00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Ice01 | | Ice01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Ice02 | | Ice02 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 449: | Line 651: | ||
|- | |- | ||
| Item_Board | | Item_Board | ||
| | | Crisis City snowboard. Separate from White Acropolis board. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| ItemGlass00 | | ItemGlass00 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| ItemMetal00 | | ItemMetal00 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Line 464: | Line 669: | ||
|- | |- | ||
| KdvAqua01 | | KdvAqua01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| KdvMist00 | | KdvMist00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 478: | Line 685: | ||
|- | |- | ||
| Kyozoress | | Kyozoress | ||
| | | Likely referring to "巨像", the large monsters in Mephiles' final boss fight. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Line 486: | Line 694: | ||
| Laser01 | | Laser01 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Leaf00 | | Leaf00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Leaf01 | | Leaf01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 500: | Line 711: | ||
|- | |- | ||
| LightCore | | LightCore | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Lightmap00 | | Lightmap00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Lightmap01 | | Lightmap01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| LightmapSp00 | | LightmapSp00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 519: | Line 734: | ||
|- | |- | ||
| LightmapSp02 | | LightmapSp02 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 526: | Line 742: | ||
|- | |- | ||
| LightmapSp04 | | LightmapSp04 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 531: | Line 748: | ||
| Luminous00 | | Luminous00 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Luminous01 | | Luminous01 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Luminous02 | | Luminous02 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Luminous03 | | Luminous03 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Luminous04 | | Luminous04 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Luminous05 | | Luminous05 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Luminous06 | | Luminous06 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 567: | Line 791: | ||
|- | |- | ||
| Mantle00 | | Mantle00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 572: | Line 797: | ||
| Mantle01 | | Mantle01 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Mantle02 | | Mantle02 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Line 585: | Line 812: | ||
|- | |- | ||
| Mefiress | | Mefiress | ||
| | |Mephiles-specific CharacterMaterial variant. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| MefiressSpecific | | MefiressSpecific | ||
|Used for Flame Core Mephiles boss floor to draw his "shadow". | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| MefiressSpecific2 | | MefiressSpecific2 | ||
|Used for goopy Dusty Desert Mephiles boss floor. | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 601: | Line 831: | ||
| Metal00 | | Metal00 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Metal01 | | Metal01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Metal02 | | Metal02 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 645: | Line 878: | ||
|- | |- | ||
| psi_effect | | psi_effect | ||
| | | Used for rendering Silver's psychokinesis effects. | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Ring | | Ring | ||
|Goal rings, hint rings, regular rings, and keys. | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 660: | Line 895: | ||
| Rust00 | | Rust00 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Line 666: | Line 902: | ||
|- | |- | ||
| scr_metal | | scr_metal | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Shield | | Shield | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 678: | Line 916: | ||
| Sky00 | | Sky00 | ||
| Used for Egg Wyvern fight and E0026 skybox. | | Used for Egg Wyvern fight and E0026 skybox. | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Sky01 | | Sky01 | ||
| Used for Egg Wyvern fight skybox. | | Used for Egg Wyvern fight skybox. | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Sky02 | | Sky02 | ||
| Used for every other skybox not previously mentioned. | | Used for every other skybox not previously mentioned. | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Snow00 | | Snow00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Snow01 | | Snow01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Snow02 | | Snow02 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 702: | Line 946: | ||
| Stone00 | | Stone00 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Stone01 | | Stone01 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Stone02 | | Stone02 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 714: | Line 961: | ||
| Stone03 | | Stone03 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Line 721: | Line 969: | ||
| Terrain00 | | Terrain00 | ||
| Only used by <code>kdv_obj_D_bridge01</code> | | Only used by <code>kdv_obj_D_bridge01</code> | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Terrain01 | | Terrain01 | ||
| Only used by <code>tpj_obj_oldtree</code> and <code>tpj_obj_sphere | | Only used by <code>tpj_obj_oldtree</code> and <code>tpj_obj_sphere</code> | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Terrain02 | | Terrain02 | ||
| Only used by <code>csc_obj_groundA</code>, <code>csc_obj_groundB</code>, and <code>tpj_obj_sphere</code> | | Only used by <code>csc_obj_groundA</code>, <code>csc_obj_groundB</code>, and <code>tpj_obj_sphere</code> | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Line 736: | Line 987: | ||
| Terrain04 | | Terrain04 | ||
| Only used by <code>e0125_map02_nos_</code> and <code>tpj_mapA_roadlm</code> | | Only used by <code>e0125_map02_nos_</code> and <code>tpj_mapA_roadlm</code> | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Terrain05 | | Terrain05 | ||
| Used extensively (91 times). | | Used extensively (91 times). | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Line 755: | Line 1,008: | ||
|- | |- | ||
| TpjWater00 | | TpjWater00 | ||
|Tropical Jungle specific variant similar to Water03. | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| TpjWater01 | | TpjWater01 | ||
|Tropical Jungle specific variant similar to Water04. | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 767: | Line 1,022: | ||
| TwnGate | | TwnGate | ||
| Used for warp gates. | | Used for warp gates. | ||
| | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Line 776: | Line 1,032: | ||
|- | |- | ||
| TwnScene00 | | TwnScene00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 783: | Line 1,040: | ||
|- | |- | ||
| TwnScene02 | | TwnScene02 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 793: | Line 1,051: | ||
|- | |- | ||
| WapScene00 | | WapScene00 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 800: | Line 1,059: | ||
|- | |- | ||
| WapScene02 | | WapScene02 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 807: | Line 1,067: | ||
|- | |- | ||
| Water01 | | Water01 | ||
|Used by translucent waterfalls and splash effects. | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 814: | Line 1,075: | ||
|- | |- | ||
| Water03 | | Water03 | ||
|Used for planar-reflection enabled liquids, water in Kingdom Valley and mercury pools in Aquatic Base. | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Water04 | | Water04 | ||
|Used for static environment-mapped liquids. | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 825: | Line 1,088: | ||
|- | |- | ||
| Waterrise | | Waterrise | ||
| Unused Kingdom Valley object. Some kind of rippling water/mist. | |||
| | | | ||
| ✓ | | ✓ | ||
| Line 830: | Line 1,094: | ||
| Wood00 | | Wood00 | ||
| | | | ||
|✓ | |||
| ✓ | | ✓ | ||
|- | |- | ||
| Wood01 | | Wood01 | ||
| | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| Zakoress | | Zakoress | ||
| Referring to "雑魚" small-fry crowd of NPCs, the tiny shadow minions in Mephiles' boss fight. | |||
| | | | ||
| ✓ | | ✓ | ||
|- | |- | ||
| ZakoressBillboard | | ZakoressBillboard | ||
| | | Billboarded approximation for distant Zakoress. | ||
|- | |- | ||
| zout_pt | | zout_pt | ||
| | | Used for rendering depth pre-pass for punchthrough. | ||
|- | |- | ||
| zout | | zout | ||
| | | Used for rendering depth pre-pass. | ||
|} | |} | ||
Latest revision as of 18:56, 28 October 2026
Shaders in Sonic the Hedgehog (2006) are compiled GPU programs that control the appearance of objects and effects. Most shaders have several different variants with different feature support. Multiplayer shaders may have additional optimisations, like replacing real-time planar reflections with cubemaps.
In the Xbox 360 version of the game, shaders are stored in the following archives:
| Type | Location |
|---|---|
| Singleplayer | /game/xenon/archives/shader.arc
|
| Multiplayer | /game/xenon/archives/shader_lt.arc
|
Within the archives, shaders variants are stored in a number of sub-folders.
| Folder | Description |
|---|---|
std
|
Standard |
np
|
Standard without point lights |
lm
|
Replaces CSM with baked lightmaps and shadows. |
lm_np
|
Same as lm without point lights
|
morph, morph_np
|
Morph targets (only affects vertex shaders) |
skin, skin_np
|
Skined meshes (only affects vertex shaders) |
Many of the shaders within the sub-folders are exact duplicates of the standard variant.
Each of the shaders listed below are in the .fxo format in the 360 version of the game. Each shader can contain multiple techniques, which hold the respective vertex and fragment shaders.
The shader and specific technique used are defined per mesh set in XNO files. Some shaders are not referenced in XNO files, either because they are used internally or because they are unused altogether.
Shader Inputs
All shaders used for rendering 3D objects use a common input block format.
| Registers | Parameter | Description |
|---|---|---|
c0-c3
|
g_Material
|
NinjaNext material parameters. Not always used as described. |
c4
|
g_Misc
|
|
c5-c6
|
g_OffsetUV
|
|
c8-c13
|
g_OLS
|
Hoffman–Preetham scattering parameters. Most shaders evaluate phase at constant cos(θ) = 0.5.
|
c14
|
g_RTDimensions
|
|
c15
|
g_ClipInfo
|
|
c16
|
g_KhronosParam
|
Time |
c28-c30
|
g_LightMisc
|
|
c31-c34
|
g_DirectionalLights[2]
|
|
c39-c44
|
g_PointLights[2]
|
|
c64-c66
|
g_MatW
|
World matrix |
c68-c70
|
g_MatWV
|
World * View matrix |
c72-c75
|
g_MatWVP
|
World * View * Projection matrix |
c76-c78
|
g_MatV
|
View matrix |
c80-c82
|
g_MatVI
|
Inverse View matrix |
c84-c87
|
g_MatP
|
Projection matrix |
c88-c91
|
g_MatVP
|
View * Projection matrix |
c92-c95
|
g_mtxCSMViewProj
|
CSM View * Projection matrix |
c96-c191
|
g_BoneMtx[32]
|
|
c192
|
g_Morph
|
|
c193
|
g_MorphFlags
|
|
c194
|
g_SystemLightMapWork
|
|
c210+
|
Shader-specific constants | |
b0
|
bReflection
|
CharacterMaterial only
|
b1
|
bCubeReflection
| |
s0-s3
|
Material textures | |
s8
|
g_smpEnvMap
|
Static environment cube map |
s9
|
g_smpDepth0
|
Packed linear depth, used by Fog00, DepthOfFieldFilter
|
s10
|
g_smpDynamicEnvMap
|
Planar reflection, used by CscGlass02, MefiressSpecific, TpjWater00, Water03
|
s11
|
g_smpCSM
|
CSM array |
s13
|
g_smpFB
|
Resolved framebuffer, used by OpticalCamouflage
|
Shader List
| Shader | Notes | Morph/Skin | Used in XNOs |
|---|---|---|---|
| AcrobataPrimitive | Used in rendering of Acroarts particle effects. | ||
| Air00 | ✓ | ||
| Animal00 | Used for Kingdom Valley eagle. | ✓ | ✓ |
| Animal01 | |||
| Animal02 | |||
| AqaScene00 | |||
| AqaScene01 | |||
| AqaScene02 | |||
| Aqua00 | ✓ | ||
| Artifact00 | |||
| Artifact01 | |||
| Artifact02 | |||
| Artifact03 | |||
| Artifact06 | |||
| Artifact07 | |||
| BackGround | |||
| balloonicon | Used for rendering quest "balloons" in hub worlds. | ||
| Billboard00 | No lighting, CSM sampling or point lights support. | ✓ | ✓ |
| Billboard01 | Vertex lighting and point lights, no CSM sampling. | ✓ | ✓ |
| Billboard02 | By far the most used shader. Vertex lighting with no CSM sampling or point lights support. | ✓ | ✓ |
| Billboard03 | Vertex lighting, CSM sampling and point lights. | ✓ | ✓ |
| Billboard04 | Pixel lighting, CSM sampling, no point lights. | ✓ | |
| Billboard05 | Pixel lighting, no CSM sampling or point lights. | ✓ | |
| Billboard06 | Pixel lighting and point lights, no CSM sampling. | ✓ | |
| Billboard07 | Unused. Pixel lighting, CSM sampling and point lights. | ||
| BillboardSp00 | ✓ | ||
| BillboardSp01 | ✓ | ||
| BillboardSp02 | ✓ | ||
| BloomFilter | |||
| bod_light | Used by "Book of Darkness" aka Scepter of Darkness. | ✓ | |
| bod_metal | Used by "Book of Darkness" aka Scepter of Darkness. | ✓ | |
| BurnoutBlurFilter | Responsible for the radial "motion" blur seen in the final game. Likely named after the Burnout racing series. | ||
| ChaosDrive | ✓ | ||
| CharacterMaterial | Responsible for rendering playable characters, NPCs, and many random hub world objects. By far the densest shader in the game, including many unused techniques. | ✓ | ✓ |
| ColorCopyFilter | |||
| ColorCorrectionFilter | |||
| ColorOutFilter | Outputs a solid colour. Used for bright areas of spotlights in White Acropolis stealth sections. | ||
| Common | |||
| conditional_rendering | Used in rendering of lens flare effect. | ||
| CopyFilter | |||
| core_circle | |||
| CscGlass00 | ✓ | ||
| CscGlass01 | |||
| CscGlass02 | ✓ | ||
| CscScene00 | ✓ | ||
| CscScene01 | ✓ | ||
| CscScene02 | |||
| CscScene03 | |||
| csd | Used in rendering of CSD (UI) scenes. | ||
| csd3D | Used for world-space UI like enemy health gauges. | ||
| csdBG | |||
| cyl | |||
| DepthOfFieldFilter | Unused in the final game. Likely a depth of field effect similar to the one in Sonic Unleashed. | ||
| DtdSand00 | |||
| DtdSand01 | ✓ | ||
| DtdSand02 | ✓ | ||
| DtdSand03 | |||
| DtdSand04 | |||
| DtdScene00 | ✓ | ||
| DtdScene01 | |||
| DtdScene02 | ✓ | ||
| DtdScene03 | ✓ | ||
| DtdScene04 | ✓ | ||
| DtdScene05 | |||
| ecb_light | Used for Egg Cerberus. | ✓ | |
| ecb_metal | Used for Egg Cerberus. | ✓ | |
| Effect00 | ✓ | ✓ | |
| egen_light | Used for Egg Genesis. | ✓ | |
| egen_metal | Used for Egg Genesis. | ✓ | |
| egen_slight | Used for Egg Genesis. | ✓ | |
| emob_light | Used for Egg Mobile. | ✓ | |
| emob_metal | Used for Egg Mobile. | ✓ | ✓ |
| en_bullet | Used by en_cmn_bullet00.
|
✓ | |
| en_laser00 | |||
| en_lava | Used by various Iblis enemies, and Solaris. | ✓ | ✓ |
| en_light | ✓ | ✓ | |
| en_lightani | ✓ | ✓ | |
| en_metal | ✓ | ✓ | |
| en_plating | ✓ | ||
| en_rock | ✓ | ✓ | |
| EndSky00 | ✓ | ||
| FBTex_NrmMap | Used by esp_ripple and esp_Sphere
|
✓ | |
| Fence00 | ✓ | ||
| Fence01 | ✓ | ||
| FlcCore00 | ✓ | ✓ | |
| FlcScene00 | ✓ | ||
| FlcScene01 | |||
| Fluff00 | Used by Tropical Jungle plant grind rails. | ✓ | ✓ |
| Fog00 | ✓ | ||
| font | Used in font rendering for CSD. | ||
| fsol_armor | ✓ | ✓ | |
| fsol_eye | |||
| fsol_fluid | |||
| Gadget_Glider | |||
| Gadget | ✓ | ||
| gindows | |||
| Glass00 | ✓ | ||
| Glass01 | ✓ | ||
| Glass02 | |||
| Glass03 | |||
| iblis01_eye | ✓ | ✓ | |
| iblis01_lava | ✓ | ✓ | |
| iblis01_rock | ✓ | ||
| iblis02_eye | Unused, iblis02.xno uses iblis01_eye. They seem more or less identical.
| ||
| iblis02_lava | ✓ | ✓ | |
| iblis02_rock | ✓ | ✓ | |
| iblis03_eye | ✓ | ✓ | |
| iblis03_lava | ✓ | ✓ | |
| iblis03_rock | ✓ | ✓ | |
| Ice00 | ✓ | ||
| Ice01 | ✓ | ||
| Ice02 | ✓ | ||
| Ice03 | |||
| Item_Board | Crisis City snowboard. Separate from White Acropolis board. | ✓ | ✓ |
| ItemGlass00 | ✓ | ✓ | |
| ItemMetal00 | ✓ | ✓ | |
| KdvAqua00 | |||
| KdvAqua01 | ✓ | ||
| KdvMist00 | ✓ | ||
| KdvRope | |||
| KdvWindRoad | |||
| Kyozoress | Likely referring to "巨像", the large monsters in Mephiles' final boss fight. | ✓ | ✓ |
| Laser00 | |||
| Laser01 | ✓ | ✓ | |
| Leaf00 | ✓ | ||
| Leaf01 | ✓ | ||
| lensflare | |||
| LightCore | ✓ | ||
| Lightmap00 | ✓ | ||
| Lightmap01 | ✓ | ||
| LightmapSp00 | ✓ | ||
| LightmapSp01 | |||
| LightmapSp02 | ✓ | ||
| LightmapSp03 | |||
| LightmapSp04 | ✓ | ||
| Luminous00 | ✓ | ✓ | |
| Luminous01 | ✓ | ✓ | |
| Luminous02 | ✓ | ✓ | |
| Luminous03 | ✓ | ✓ | |
| Luminous04 | ✓ | ✓ | |
| Luminous05 | ✓ | ✓ | |
| Luminous06 | ✓ | ||
| Luminous07 | |||
| lzout_pt | |||
| lzout | |||
| Mantle00 | ✓ | ||
| Mantle01 | ✓ | ✓ | |
| Mantle02 | ✓ | ✓ | |
| MarathonSpeedTree | |||
| MaskCopyFilter | |||
| Mefiress | Mephiles-specific CharacterMaterial variant. | ✓ | ✓ |
| MefiressSpecific | Used for Flame Core Mephiles boss floor to draw his "shadow". | ✓ | |
| MefiressSpecific2 | Used for goopy Dusty Desert Mephiles boss floor. | ✓ | |
| Mercury | |||
| Metal00 | ✓ | ✓ | |
| Metal01 | ✓ | ||
| Metal02 | ✓ | ||
| MotionBlurFilter | BurnoutBlurFilter is used in retail rather than this shader. | ||
| movie | |||
| movieARGB | |||
| movieYUV420 | |||
| no_shader | |||
| OpticalCamouflage | Used for rendering camouflaged enemies. | ||
| pe | |||
| PhaseShiftFilter | |||
| physicsviewer | |||
| player_homing | |||
| primitive | |||
| psi_effect | Used for rendering Silver's psychokinesis effects. | ✓ | ✓ |
| Ring | Goal rings, hint rings, regular rings, and keys. | ✓ | |
| rt_clear | |||
| rt_restoration | |||
| Rust00 | ✓ | ✓ | |
| SampleFilter | |||
| scr_metal | ✓ | ||
| Shield | ✓ | ||
| simple | |||
| Sky00 | Used for Egg Wyvern fight and E0026 skybox. | ✓ | |
| Sky01 | Used for Egg Wyvern fight skybox. | ✓ | |
| Sky02 | Used for every other skybox not previously mentioned. | ✓ | |
| Snow00 | ✓ | ||
| Snow01 | ✓ | ||
| Snow02 | ✓ | ||
| Stone00 | ✓ | ✓ | |
| Stone01 | ✓ | ✓ | |
| Stone02 | ✓ | ||
| Stone03 | ✓ | ✓ | |
| Stone04 | |||
| Terrain00 | Only used by kdv_obj_D_bridge01
|
✓ | |
| Terrain01 | Only used by tpj_obj_oldtree and tpj_obj_sphere
|
✓ | |
| Terrain02 | Only used by csc_obj_groundA, csc_obj_groundB, and tpj_obj_sphere
|
✓ | |
| Terrain03 | |||
| Terrain04 | Only used by e0125_map02_nos_ and tpj_mapA_roadlm
|
✓ | |
| Terrain05 | Used extensively (91 times). | ✓ | ✓ |
| Terrain06 | |||
| Terrain07 | |||
| Tex_Phone | |||
| Tex_Spec_Phone | |||
| TpjWater00 | Tropical Jungle specific variant similar to Water03. | ✓ | |
| TpjWater01 | Tropical Jungle specific variant similar to Water04. | ✓ | |
| TwnFence00 | |||
| TwnGate | Used for warp gates. | ✓ | |
| TwnGlass00 | |||
| TwnGlideWire | |||
| TwnScene00 | ✓ | ||
| TwnScene01 | |||
| TwnScene02 | ✓ | ||
| TwnScene03 | |||
| vout | |||
| WapScene00 | ✓ | ||
| WapScene01 | |||
| WapScene02 | ✓ | ||
| Water00 | |||
| Water01 | Used by translucent waterfalls and splash effects. | ✓ | |
| Water02 | |||
| Water03 | Used for planar-reflection enabled liquids, water in Kingdom Valley and mercury pools in Aquatic Base. | ✓ | |
| Water04 | Used for static environment-mapped liquids. | ✓ | |
| Water05 | |||
| Waterrise | Unused Kingdom Valley object. Some kind of rippling water/mist. | ✓ | |
| Wood00 | ✓ | ✓ | |
| Wood01 | ✓ | ||
| Zakoress | Referring to "雑魚" small-fry crowd of NPCs, the tiny shadow minions in Mephiles' boss fight. | ✓ | |
| ZakoressBillboard | Billboarded approximation for distant Zakoress. | ||
| zout_pt | Used for rendering depth pre-pass for punchthrough. | ||
| zout | Used for rendering depth pre-pass. |