Template:Archived Page History/Cubemaps/en: Difference between revisions
m (Cleanup and improvements) |
m (Further improvements) |
||
Line 1: | Line 1: | ||
{{langsp}} | {{langsp}} | ||
[[File:Env_cubemap.png|left]] | [[File:Env_cubemap.png|left]] | ||
[[File:Specular.jpg|thumb|right|300px| | [[File:Specular.jpg|thumb|right|300px|An example of specular reflections on some models (exaggerated through modification).]] | ||
A '''cubemap''' is a texture that represents a three-dimensional rendering of an area. The [[Source|Source Engine]] uses [[env_cubemap]] entities as sampling points to generate these textures, which are then | A '''cubemap''' is a texture that represents a three-dimensional rendering of an area. The [[Source|Source Engine]] uses [[env_cubemap]] entities as sampling points to generate these textures, which are then integrated into the [[BSP|map file]]. Cubemaps, when [[#Building cubemaps|built]], are reflected on materials that use the [[$envmap]] parameter (surfaces such as reflective glass, tiles, water, etc.) A map without built or existing '''env_cubemap''' entities will instead use other kinds of "reflections" that don't properly depict it. | ||
== Building cubemaps == | == Building cubemaps == | ||
Building cubemaps is the process of generating their textures to then use | Building cubemaps is the process of generating their textures to then use these as reflections. For technical reasons, this process isn't automated and is up to the user to do so; until then, existing '''env_cubemap''' entities will remain unused and the map, depending on the game, will display either generic or [[Missing content|"missing" textures]] as reflections due to nonexistent cubemaps. | ||
{{warning|For people with epilepsy: building cubemaps on games running on Vulkan, | {{warning|For people with epilepsy: building cubemaps on games running on Vulkan, such as {{l4d2}}'''Left 4 Dead 2''', causes the screen to violently flash black and white.}} | ||
{{warning|To build cubemaps, your game's screen resolution needs to be at least 4 times higher than the highest [[ | {{warning|To build cubemaps, your game's screen resolution needs to be at least 4 times higher than the highest [[Env cubemap#Keyvalues|size]] of an existing '''env_cubemap''', or else attempting to build them will either fail or even cause the game to crash.<br>For example, if the highest '''env_cubemap''' sizes 128x128, a resolution no lower than 512x512 will be required. (''128 × 4 = '''512''' -> 720x576'' (as a valid resolution) or higher)}} | ||
{{note|The game may appear to freeze or become unresponsive during the | {{note|The game may appear to freeze or become unresponsive during the process, and the amount of time depends on various factors. For successful results, don't switch away from the game until it's done.}} | ||
{{warning|If the <code>Nav_Show_Ladder_Bounds</code> command was used before building cubemaps, the green boxes will also be baked into the cubemap.}} | {{warning|If the <code>Nav_Show_Ladder_Bounds</code> command was used before building cubemaps, the green boxes will also be baked into the cubemap.}} | ||
=== Before building === | === Before building === | ||
{{ | {{classicImportant|Maps for {{src13|4.1}} games and others, such as {{css}}'''Counter-Strike: Source''', are known to include pre-built, blank cubemaps after being compiled (even if there are no '''env_cubemap''' entities in them); these should be deleted before building new ones, as detailed [[#Deleting cubemaps|here]].}} | ||
{{tip| | {{tip|'''env_cubemap''' entities [[Env cubemap#Keyvalues|allow]] for generating higher- or lower-quality reflections, though the game's texture quality also comes into play; consider maxing out your game's visual settings before building cubemaps.}} | ||
=== LDR === | === LDR === | ||
{{note|This step | {{note|This step doesn't apply to {{l4d}}'''Left 4 Dead''' nor {{csgo}}'''Counter-Strike: Global Offensive''' as their maps are compiled in [[#HDR|HDR mode]] only.}} | ||
Building cubemaps in a map compiled in '''LDR''' (''Low Dynamic Range'') mode will generate textures only for that mode, regardless of your game's ''High Dynamic Range'' video setting. To build the cubemaps, submit the following commands into the game's console: | Building cubemaps in a map compiled in '''LDR''' (''Low Dynamic Range'') mode will generate textures only for that mode, regardless of your game's ''High Dynamic Range'' video setting. To build the cubemaps, submit the following commands into the game's console: | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 30: | Line 26: | ||
| <code>mat_specular 0</code> || Turns reflections Off; required to properly build cubemaps | | <code>mat_specular 0</code> || Turns reflections Off; required to properly build cubemaps | ||
|- | |- | ||
| <code>map ''map_name''</code> || Loads | | <code>map ''map_name''</code> || Loads the map; replace "''map_name''" with the map's actual name | ||
|- | |- | ||
| <code>sv_cheats 1</code> || Enables the use of cheat commands; required to build cubemaps | | <code>sv_cheats 1</code> || Enables the use of cheat commands; required to build cubemaps | ||
Line 36: | Line 32: | ||
| <code>buildcubemaps</code> || Begins building cubemaps. Optionally, specify the number of iterations (e.g.: <code>buildcubemaps 2</code> (default is 1)) | | <code>buildcubemaps</code> || Begins building cubemaps. Optionally, specify the number of iterations (e.g.: <code>buildcubemaps 2</code> (default is 1)) | ||
|- | |- | ||
| <code>disconnect</code> || Unloads the map | | <code>disconnect</code> || Unloads the map and returns to the main menu | ||
|- | |- | ||
| <code>mat_specular 1</code> || Turns reflections On | | <code>mat_specular 1</code> || Turns reflections On | ||
Line 51: | Line 47: | ||
| <code>mat_specular 0</code> || Turns reflections Off; required to properly build cubemaps | | <code>mat_specular 0</code> || Turns reflections Off; required to properly build cubemaps | ||
|- | |- | ||
| <code>map ''map_name''</code> || Loads | | <code>map ''map_name''</code> || Loads the map; replace "''map_name''" with the map's actual name | ||
|- | |- | ||
| <code>sv_cheats 1</code> || Enables the use of cheat commands; required to build cubemaps | | <code>sv_cheats 1</code> || Enables the use of cheat commands; required to build cubemaps | ||
Line 57: | Line 53: | ||
| <code>buildcubemaps</code> || Begins building cubemaps. Optionally, specify the number of iterations (e.g.: <code>buildcubemaps 2</code> (default is 1)) | | <code>buildcubemaps</code> || Begins building cubemaps. Optionally, specify the number of iterations (e.g.: <code>buildcubemaps 2</code> (default is 1)) | ||
|- | |- | ||
| <code>disconnect</code> || Unloads the map | | <code>disconnect</code> || Unloads the map and returns to the main menu | ||
|- | |- | ||
| <code>sv_cheats 0</code> || Disables cheat commands; prevents command <code>''mat_reloadallmaterials''</code> from unnecessarily self-executing | | <code>sv_cheats 0</code> || Disables cheat commands; prevents command <code>''mat_reloadallmaterials''</code> from unnecessarily self-executing (which briefly freezes the game) | ||
|- | |- | ||
| <code>mat_hdr_level 0</code> || Switches to '''LDR''' mode (from '''HDR'''); submit <code>''mat_hdr_level 2''</code> instead if '''LDR''' cubemaps were built first | | <code>mat_hdr_level 0</code> || Switches to '''LDR''' mode (from '''HDR'''); submit <code>''mat_hdr_level 2''</code> instead if '''LDR''' cubemaps were built first | ||
Line 78: | Line 74: | ||
|} | |} | ||
== | == Building cubemaps in specific games == | ||
=== Black Mesa: Source === | === Black Mesa: Source === | ||
To build cubemaps in {{bms}}'''Black Mesa: Source''' maps, the game has to be launched with these parameters: <code>-oldgameui -dev -console +r_4way_use_fast_normals 0 +mat_specular 0</code><br>Then, submit the <code>buildcubemaps</code> command into the console. | To build cubemaps in {{bms}}'''Black Mesa: Source''' maps, the game has to be launched with these parameters: <code>-oldgameui -dev -console +r_4way_use_fast_normals 0 +mat_specular 0</code><br>Then, load the map and submit the <code>buildcubemaps</code> command into the console. | ||
Line 86: | Line 82: | ||
=== Half-Life: Source === | === Half-Life: Source === | ||
{{bug|Building cubemaps in {{hls}}'''Half-Life: Source''' is currently not possible as their textures, despite being generated, aren't embedded into the map file afterward. | {{bug|Building cubemaps in {{hls}}'''Half-Life: Source''' is currently not possible as their textures, despite being generated, aren't embedded into the map file afterward. | ||
{{workaround|Move the map file into the {{path|maps}} folder of a game | {{workaround|Move the map file into the {{path|maps}} folder of a game in the same engine branch (such as {{hl2}}'''Half-Life 2'''), build its cubemaps in that game, then move the file back into '''Half-Life: Source'''<nowiki>'</nowiki>s folder.}}}} | ||
=== Portal 2 === | === Portal 2 === | ||
{{bug|Building cubemaps in {{portal2}}'''Portal 2''' will fail if the | {{bug|Building cubemaps in {{portal2}}'''Portal 2''' will fail if the map file is not in the highest-numbered DLC folder ({{path|dlc2}} by default). | ||
{{workaround| | {{workaround|Move the map to that folder before building cubemaps and, if necessary, edit the "'''Place compiled maps in this directory before running the game'''" path in [[Hammer Build Programs|Hammer's Build Programs]] options so that the map is automatically generated there.}}}} | ||
=== Portal 2: Community Edition === | |||
{{bug|Amount of iterations (e.g.: <code>buildcubemaps 2</code>) doesn't currently work in {{p2ce}}'''Portal 2: Community Edition'''. | |||
{{workaround|Run the <code>buildcubemaps</code> command, reload the map, then run the command again. Successively repeat these steps if necessary.}}}} | |||
Line 99: | Line 101: | ||
[[File:Cubemap_bug_sfm.jpg|thumb|right|300px|Improper rendering of an HDR cubemap's face in Source Filmmaker.]] | [[File:Cubemap_bug_sfm.jpg|thumb|right|300px|Improper rendering of an HDR cubemap's face in Source Filmmaker.]] | ||
{{bug|'''HDR''' cubemaps sizing lower than 64x64 built in {{tf2}}'''Team Fortress 2''' and some other games usually display graphical artifacts on reflections due to the last face of each cubemap not rendering properly in {{sfm}}'''Source Filmmaker'''. While rebuilding cubemaps in it would normally fix the issue, it is currently not possible to do so as '''Source Filmmaker''' generates blank textures.}} | {{bug|'''HDR''' cubemaps sizing lower than 64x64 built in {{tf2}}'''Team Fortress 2''' and some other games usually display graphical artifacts on reflections due to the last face of each cubemap not rendering properly in {{sfm}}'''Source Filmmaker'''. While rebuilding cubemaps in it would normally fix the issue, it is currently not possible to do so as '''Source Filmmaker''' generates blank textures.}} | ||
{{workaround|If recompiling a special version of an affected map with '''env_cubemaps''' now sizing 64x64 (or higher) is not an option, move the map file into {{as}}'''Alien Swarm'''<nowiki>'</nowiki>s | {{workaround|If recompiling a special version of an affected map with '''env_cubemaps''' now sizing 64x64 (or higher) is not an option, move the map file into {{as}}'''Alien Swarm'''<nowiki>'</nowiki>s {{path|maps}} folder, build its cubemaps in that game, then move the file back into '''Source Filmmaker'''<nowiki>'</nowiki>s folder. | ||
{{note|'''Alien Swarm'''<nowiki>'</nowiki>s "gameinfo.txt" file needs to be modified for this procedure so that the game can have access to assets used by other games' maps not to build cubemaps with missing textures or models. The file's "SearchPaths" section should look like this:}} | {{note|'''Alien Swarm'''<nowiki>'</nowiki>s "gameinfo.txt" file needs to be modified for this procedure so that the game can have access to assets used by other games' maps not to build cubemaps with missing textures or models. The file's "SearchPaths" section should look like this:}}}} | ||
"SearchPaths" | "SearchPaths" | ||
{ | { | ||
Line 115: | Line 117: | ||
== Deleting cubemaps == | == Deleting cubemaps == | ||
Several tools make it possible to delete unnecessary or outdated cubemaps; [[BSPZIP]] is one official, command-line tool which is usually the preferred option for this procedure, allowing for an usage unlikely of corrupting the map due to misuse. To delete cubemaps, execute the following command within the {{path|maps}} folder: | Several tools make it possible to delete unnecessary or outdated cubemaps; [[BSPZIP]] is one official, command-line tool which is usually the preferred option for this procedure, allowing for an usage unlikely of corrupting the map file due to misuse. To delete cubemaps, execute the following command within the {{path|maps}} folder: | ||
..\..\bin\bspzip -deletecubemaps map_name.bsp | ..\..\bin\bspzip -deletecubemaps map_name.bsp | ||
{{note|Replace "''map_name''" with the map's actual name.}} | {{note|Replace "''map_name''" with the map's actual name.}} | ||
Line 144: | Line 146: | ||
== Renaming a map == | == Renaming a map == | ||
For built cubemaps to work, they must be located in a folder that is named after the map; this folder is automatically created within the map file during the building process. Renaming the map file will not also rename | For built cubemaps to work, they must be located in a folder that is named after the map; this folder is automatically created within the map file during the building process. Renaming the map file will not also rename said folder, and therefore cubemaps will not be accessed. Some third-party apps allow renaming the folder, though it is not advisable to do so as it may corrupt the file. Instead, either delete and then rebuild the cubemaps, or revert the map to its original name. | ||
== See also == | == See also == |
Revision as of 02:26, 23 February 2024
A cubemap is a texture that represents a three-dimensional rendering of an area. The Source Engine uses env_cubemap entities as sampling points to generate these textures, which are then integrated into the map file. Cubemaps, when built, are reflected on materials that use the $envmap parameter (surfaces such as reflective glass, tiles, water, etc.) A map without built or existing env_cubemap entities will instead use other kinds of "reflections" that don't properly depict it.
Building cubemaps
Building cubemaps is the process of generating their textures to then use these as reflections. For technical reasons, this process isn't automated and is up to the user to do so; until then, existing env_cubemap entities will remain unused and the map, depending on the game, will display either generic or "missing" textures as reflections due to nonexistent cubemaps.



For example, if the highest env_cubemap sizes 128x128, a resolution no lower than 512x512 will be required. (128 × 4 = 512 -> 720x576 (as a valid resolution) or higher)


Nav_Show_Ladder_Bounds
command was used before building cubemaps, the green boxes will also be baked into the cubemap.
Before building

LDR



Building cubemaps in a map compiled in LDR (Low Dynamic Range) mode will generate textures only for that mode, regardless of your game's High Dynamic Range video setting. To build the cubemaps, submit the following commands into the game's console:
Command | Description |
---|---|
mat_specular 0 |
Turns reflections Off; required to properly build cubemaps |
map map_name |
Loads the map; replace "map_name" with the map's actual name |
sv_cheats 1 |
Enables the use of cheat commands; required to build cubemaps |
buildcubemaps |
Begins building cubemaps. Optionally, specify the number of iterations (e.g.: buildcubemaps 2 (default is 1))
|
disconnect |
Unloads the map and returns to the main menu |
mat_specular 1 |
Turns reflections On |
quit |
(optional) Exits the game. Relaunching it is required to display newly-built cubemaps |
HDR
Building cubemaps in a map compiled with HDR support needs to be performed twice - once for each mode (HDR and LDR). As opposed to an LDR map's case, your game's High Dynamic Range video setting has to be set to "Full" to build HDR cubemaps, and to "None" to build LDR ones. To build the cubemaps, submit the following commands into the game's console:
Command | Description |
---|---|
mat_specular 0 |
Turns reflections Off; required to properly build cubemaps |
map map_name |
Loads the map; replace "map_name" with the map's actual name |
sv_cheats 1 |
Enables the use of cheat commands; required to build cubemaps |
buildcubemaps |
Begins building cubemaps. Optionally, specify the number of iterations (e.g.: buildcubemaps 2 (default is 1))
|
disconnect |
Unloads the map and returns to the main menu |
sv_cheats 0 |
Disables cheat commands; prevents command mat_reloadallmaterials from unnecessarily self-executing (which briefly freezes the game)
|
mat_hdr_level 0 |
Switches to LDR mode (from HDR); submit mat_hdr_level 2 instead if LDR cubemaps were built first
|
map map_name |
Loads the map again to build cubemaps for the new mode |
sv_cheats 1 |
|
buildcubemaps |
Begins building cubemaps for the new mode |
disconnect |
|
mat_specular 1 |
Turns reflections On |
mat_hdr_level 0/1/2 |
If necessary, switches back to the mode it was before having submitted mat_hdr_level 0/2
|
quit |
(optional) Exits the game. Relaunching it is required to display newly-built cubemaps |
Building cubemaps in specific games
Black Mesa: Source
To build cubemaps in Black Mesa: Source maps, the game has to be launched with these parameters:
-oldgameui -dev -console +r_4way_use_fast_normals 0 +mat_specular 0
Then, load the map and submit the buildcubemaps
command into the console.
Half-Life: Source




maps
folder of a game in the same engine branch (such as 
Portal 2



dlc2
by default).

Portal 2: Community Edition

buildcubemaps 2
) doesn't currently work in 

buildcubemaps
command, reload the map, then run the command again. Successively repeat these steps if necessary.
Source Filmmaker






maps
folder, build its cubemaps in that game, then move the file back into Source Filmmaker's folder.

"SearchPaths" { "Game" "|gameinfo_path|." "Game" "swarm_base" "Game" "platform" "Game" "..\SourceFilmmaker\game\usermod" "Game" "..\SourceFilmmaker\game\tf_movies" "Game" "..\SourceFilmmaker\game\tf" "Game" "..\SourceFilmmaker\game\hl2" }



Alternatively, deleting the affected HDR cubemap texture files will cause the LDR versions to be used, which do not suffer from this bug.
Deleting cubemaps
Several tools make it possible to delete unnecessary or outdated cubemaps; BSPZIP is one official, command-line tool which is usually the preferred option for this procedure, allowing for an usage unlikely of corrupting the map file due to misuse. To delete cubemaps, execute the following command within the maps
folder:
..\..\bin\bspzip -deletecubemaps map_name.bsp


Extracting cubemaps
In cases where a map has to be recompiled with minor changes (and its built cubemaps vanish as a result), extracting them beforehand will make it not necessary to go through the whole cubemap-building process again. To extract cubemaps with BSPZIP, create a folder that will contain the extracted cubemaps inside the maps
one, then execute the following command:
..\..\bin\bspzip -extractcubemaps map_name.bsp "foldername"

Embedding cubemaps
For BSPZIP to make a map use extracted cubemaps, create a text file inside the maps
folder. The file's content should look like this:
materials/maps/map_name/c-128_384_64.hdr.vtf foldername\materials\maps\map_name\c-128_384_64.hdr.vtf materials/maps/map_name/c-128_384_64.vtf foldername\materials\maps\map_name\c-128_384_64.vtf materials/maps/map_name/c448_-256_64.hdr.vtf foldername\materials\maps\map_name\c448_-256_64.hdr.vtf materials/maps/map_name/c448_-256_64.vtf foldername\materials\maps\map_name\c448_-256_64.vtf materials/maps/map_name/cubemapdefault.vtf foldername\materials\maps\map_name\cubemapdefault.vtf

A file requires two dedicated lines (paths): the first line represents the path it will use within the map file, whereas the second one is the actual location of the file to embed into the map file. Relative location paths were used for the example, but they can also be Absolute. Once the text file is ready, execute the following command:
..\..\bin\bspzip -addlist map_name.bsp textfile.txt newmap_name.bsp

Renaming a map
For built cubemaps to work, they must be located in a folder that is named after the map; this folder is automatically created within the map file during the building process. Renaming the map file will not also rename said folder, and therefore cubemaps will not be accessed. Some third-party apps allow renaming the folder, though it is not advisable to do so as it may corrupt the file. Instead, either delete and then rebuild the cubemaps, or revert the map to its original name.
See also
- env_cubemap
- $envmap
- parallax_obb - For Parallax Corrected Cubemaps.