Difference between revisions of "Cubemaps"

From Valve Developer Community
Jump to: navigation, search
m (Minor improvements)
m (More improvements)
Line 1: Line 1:
 
{{lang|Cubemaps}}
 
{{lang|Cubemaps}}
[[Image:Env_cubemap.png|left]][[Image:Specular.jpg|thumb|300px|right|Models with specular reflections.]]
+
[[Image:Env_cubemap.png|left]]
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 for generating these textures, which are then saved into the [[BSP|map]] file. Once [[#Building cubemaps|built]], cubemaps will be reflected on surfaces that use the [[$envmap]] parameter with ''env_cubemap'' as its value.
+
[[Image:Specular.jpg|thumb|right|300px|Models with specular reflections.]]
 +
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 automatically embedded into the [[BSP|map]] file. Cubemaps, when [[#Building cubemaps|built]], are reflected on surfaces that use the [[$envmap]] parameter with ''env_cubemap'' as its value.
  
  
 
== Building cubemaps ==
 
== Building cubemaps ==
Building cubemaps is the process of generating their textures for reflective effects. For technical reasons, this process is not automated and should be done by the user; until then, '''env_cubemaps''' will remain unused and the map, depending on the game, will display either generic or "missing" textures on reflections due to non-existent cubemaps.
+
Building cubemaps is the process of generating their textures for reflective purposes. For technical reasons, this process is not automated and is up to the user to do so; until then, existing '''env_cubemaps''' will remain unused and the map, depending on the game, will display either generic or "missing" textures as reflections due to non-existing cubemaps.
{{warning|Your game's resolution must be at least 4 times higher than the highest [[env cubemap#Keyvalues|size]] of an '''env_cubemap''' in a map, or else attempting to build them will either fail or even cause the game to crash. For example: if an '''env_cubemap''' sizes 128x128, you'll need a resolution of at least 512x512 (''128 × 4 = '''512''''' -> 720x576 or higher).}}
+
{{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 '''env_cubemap''' in a map, or else attempting to build them will either fail or even cause the game to crash. For example: if the highest '''env_cubemap''' sizes 128x128, a resolution of 512x512 will be needed. (''128 × 4 = '''512''' -> 720x576 or higher)}}
{{note|It's necessary to relaunch the game after building cubemaps in order to display them.}}
+
{{note|Your game needs to be relaunched in order to display cubemaps after building them.}}
{{tip|Maxing out your game's visual settings prior to building cubemaps will generate their textures in the best-possible quality (based on the '''env_cubemaps'''<nowiki>'</nowiki> size).}}
+
{{tip|Maxing out your game's visual settings prior to building cubemaps will generate their textures in the best-possible quality for the cubemaps' size.}}
  
  
 
=== Before building ===
 
=== Before building ===
{{css}} '''Counter-Strike: Source''' maps are among the known ones to include pre-built, blank cubemaps on compile; they're built even if there are no '''env_cubemaps''' in the map, and it is recommended to delete them first as explained [[#Deleting cubemaps|here]].
+
{{tip|{{css}}'''Counter-Strike: Source''' maps, among other games', are known for including pre-built, blank cubemaps after compiling them. Their textures are generated even if there are no '''env_cubemaps''' in the map, and it is recommended to delete them prior to building cubemaps as explained [[#Deleting cubemaps|here]].}}
  
  
 
=== LDR ===
 
=== LDR ===
{{note|This step doesn't apply to {{csgo}} '''Counter-Strike: Global Offensive''' as its maps are compiled in [[#HDR|HDR]] only.}}
+
{{note|This step does not apply to {{csgo}}'''Counter-Strike: Global Offensive''' as its maps are compiled in [[#HDR|HDR]] mode only.}}
A map compiled in '''LDR''' (''Low Dynamic Range'') will build only that mode's cubemaps, regardless of your game's current [[HDR]] (''High Dynamic Range'') setting. Submit the following commands into the game's console:
+
Building cubemaps on a map compiled in '''LDR''' (''Low Dynamic Range'') mode will generate textures only for said 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"
 +
|-
 
! Command !! Description
 
! Command !! Description
 
|-
 
|-
| <code>mat_specular 0</code> || Disables specularity. Required to properly build cubemaps
+
| <code>mat_specular 0</code> || Disables reflections. Required to properly build cubemaps
 
|-
 
|-
| <code>map</code> &lt;'''the map's filename'''&gt; || Loads the map (e.g., <code>''map cs_mymap''</code>)
+
| <code>map ''cs_mymap''</code> || Loads a map; replace "''cs_mymap''" 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 31: Line 33:
 
| <code>disconnect</code> || Unloads the map, returning you to the main menu
 
| <code>disconnect</code> || Unloads the map, returning you to the main menu
 
|-
 
|-
| <code>mat_specular 1</code> || Enables specularity. Required to see reflections
+
| <code>mat_specular 1</code> || Enables reflections
 
|-
 
|-
| <code>quit</code> || (optional) Closes the game. Required to see reflections after building cubemaps
+
| <code>quit</code> || (optional) Closes the game. Required to display newly-built cubemaps (after relaunching it)
 
|}
 
|}
  
  
 
=== HDR ===
 
=== HDR ===
A map compiled with '''HDR''' support will need its cubemaps built twice; once for each mode ('''HDR''' and '''LDR'''). As opposed to a '''LDR''' map's case, your game's '''HDR''' setting must be set to "None" to build '''LDR''' cubemaps, and to "Full" to build '''HDR''' ones. Submit the following commands into the game's console:
+
Building cubemaps on a map compiled with [[HDR]] support needs to be done twice - once for each mode ('''HDR''' and '''LDR'''). As opposed to a '''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:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
 
! Command !! Description
 
! Command !! Description
 
|-
 
|-
| <code>mat_specular 0</code> || Disables specularity. Required to properly build cubemaps
+
| <code>mat_specular 0</code> || Disables reflections. Required to properly build cubemaps
 
|-
 
|-
| <code>map</code> &lt;'''the map's filename'''&gt; || Loads the map (e.g., <code>''map cs_mymap''</code>)
+
| <code>map ''cs_mymap''</code> || Loads a map; replace "''cs_mymap''" 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 51: Line 53:
 
| <code>buildcubemaps</code> || Starts building cubemaps
 
| <code>buildcubemaps</code> || Starts building cubemaps
 
|-
 
|-
| <code>sv_cheats 0</code> || Disables cheat commands. Prevents command ''<code>mat_reloadallmaterials</code>'' from self-executing and briefly freezing the game unnecessarily
+
| <code>disconnect</code> || Unloads the map, returning you to the main menu
 
|-
 
|-
| <code>disconnect</code> || Unloads the map, returning you to the main menu
+
| <code>sv_cheats 0</code> || Disables cheat commands. Prevents command <code>''mat_reloadallmaterials''</code> from unnecessarily self-executing and briefly freezing 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
 
|-
 
|-
| <code>map</code> &lt;'''the map's filename'''&gt; || Loads the map again to build cubemaps for the new mode
+
| <code>map ''cs_mymap''</code> || Loads the map again to build cubemaps for the new mode
 
|-
 
|-
 
| <code>sv_cheats 1</code> ||
 
| <code>sv_cheats 1</code> ||
Line 65: Line 67:
 
| <code>disconnect</code> ||
 
| <code>disconnect</code> ||
 
|-
 
|-
| <code>mat_specular 1</code> || Enables specularity. Required to see reflections
+
| <code>mat_specular 1</code> || Enables reflections
 
|-
 
|-
| <code>mat_hdr_level ''0/1/2''</code> || If necessary, switches back to the mode it was before having submitted <code>''mat_hdr_level 0/2''</code>
+
| <code>mat_hdr_level ''0/1/2''</code> || If necessary, switches back to the mode it was before having submitted <code>''mat_hdr_level ''0/2''</code>
 
|-
 
|-
| <code>quit</code> || (optional) Closes the game. Required to see reflections after building cubemaps
+
| <code>quit</code> || (optional) Closes the game. Required to display newly-built cubemaps (after relaunching it)
 
|}
 
|}
  
  
 
=== Half-Life: Source ===
 
=== Half-Life: Source ===
{{bug|Cubemaps in {{hls}} '''Half-Life: Source''' currently don't build properly as their textures, despite being generated, aren't saved into the map file afterward.}}
+
{{bug|Building cubemaps in {{hls}}'''Half-Life: Source''' isn't currently possible as the textures, despite being generated, aren't embedded into the map file afterward.}}
:{{workaround|Move the '''BSP''' file into the "maps" folder of a game of the same engine branch (such as {{hl2}} '''Half-Life 2'''), build the cubemaps in that game, then move the file back into '''Half-Life: Source'''<nowiki>'</nowiki>s.}}
+
:{{workaround|Move the map file into the "maps" folder of a game of 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.}}
  
  
 
=== Source Filmmaker ===
 
=== Source Filmmaker ===
{{bug|In {{sfm}} '''Source Filmmaker''', loading a map whose cubemaps were built in another game will display weird artifacts on reflections due to a sixth cubemap face that it doesn't seem to recognize (it uses only five of them). Rebuilding the cubemaps would fix the issue, but '''Source Filmmaker''' currently doesn't properly build cubemaps as their textures are generated blank.}}
+
{{bug|Cubemaps built in other games will display weird artifacts on reflections due to a sixth cubemap face that {{sfm}}'''Source Filmmaker''' doesn't seem to recognize (it uses only five of them). While rebuilding cubemaps in it would fix the issue, it is currently not possible to do so as '''Source Filmmaker''' generates blank textures.}}
:{{workaround|Move the '''BSP''' file into {{as}} '''Alien Swarm'''<nowiki>'</nowiki>s "maps" folder, build the cubemaps in said game, then move the file back into '''Source Filmmaker'''<nowiki>'</nowiki>s.}}
+
:{{workaround|Move the map file into {{as}}'''Alien Swarm'''<nowiki>'</nowiki>s "maps" folder, build its cubemaps in that game, then move the file back into '''Source Filmmaker'''<nowiki>'</nowiki>s.}}
::{{note|For this procedure, '''Alien Swarm'''<nowiki>'</nowiki>s "gameinfo.txt" file will need to be edited to have access to assets from the mod directories within '''Source Filmmaker''' not to build cubemaps with missing textures/models. The file's "SearchPath" section should look like this:}}
+
::{{note|'''Alien Swarm'''<nowiki>'</nowiki>s "gameinfo.txt" file needs to be edited for this procedure so that the game can have access to missing map assets not to build cubemaps with missing textures/models. The file's "SearchPaths" section should be like this:}}
 
  "SearchPaths"
 
  "SearchPaths"
 
  {
 
  {
Line 87: Line 89:
 
  "Game" "swarm_base"
 
  "Game" "swarm_base"
 
  "Game" "platform"
 
  "Game" "platform"
  "Game" "..\SourceFilmmaker\game\hl2"
+
  '''"Game" "..\SourceFilmmaker\game\hl2"'''
  "Game" "..\SourceFilmmaker\game\tf"
+
  '''"Game" "..\SourceFilmmaker\game\tf"'''
  "Game" "..\SourceFilmmaker\game\tf_movies"
+
  '''"Game" "..\SourceFilmmaker\game\tf_movies"'''
  "Game" "..\SourceFilmmaker\game\usermod"
+
  '''"Game" "..\SourceFilmmaker\game\usermod"'''
 
  }
 
  }
 +
{{note|{{tf2}}'''Team Fortress 2''' configurations were used for this example; consider replacing game subfolders (only those within '''Source Filmmaker''' paths) with the needed ones.}}
 
== Deleting cubemaps ==
 
== Deleting cubemaps ==
Deleting cubemaps gets rid of unnecessary or outdated ones and their associated files. Out of all other capable tools, [[BSPZIP]] is the safest way for doing so without potentially corrupting the map; from the "maps" folder (where the '''BSP''' file should be located), execute the following command:
+
Delete unnecessary or outdated cubemaps is made possible with the use of several tools; of them all, [[BSPZIP]] not only is an official one, but also the easiest and safest option for this procedure without potentially corrupting the map. To delete the cubemaps, execute the following command within the "maps" folder:
 
  ..\..\bin\bspzip -deletecubemaps mapname.bsp
 
  ..\..\bin\bspzip -deletecubemaps mapname.bsp
{{note|Replace "''mapname''" with the map's actual filename.}}
+
{{note|Replace "''mapname''" with the map's actual name.}}
{{warning|Cubemaps should be deleted before embedding texture ("[[Valve Texture Format|.vtf]]") files into the map file as this procedure actually deletes all of its embedded textures.}}
+
{{warning|Deleting cubemaps actually deletes all the texture ("[[Valve Texture Format|.vtf]]") files embedded into the map, so it's recommended not to embed custom textures prior to deleting cubemaps.}}
 
== Extracting cubemaps ==
 
== Extracting cubemaps ==
In cases where a map needs to be updated (recompiled) with minor changes and its built cubemaps vanish as a result, extracting said cubemaps beforehand will make it not necessary to go through the whole cubemap-building process again until it actually becomes so. Create a folder that will contain the extracted cubemaps within the "maps" folder and execute the following command:
+
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 until it actually becomes so. To extract its cubemaps with '''BSPZIP''', create a folder inside the "maps" one that will contain the extracted cubemaps, and execute the following command:
 
  ..\..\bin\bspzip -extractcubemaps mapname.bsp "foldername"
 
  ..\..\bin\bspzip -extractcubemaps mapname.bsp "foldername"
{{note|Replace "''mapname''" with the map's actual filename, and "''foldername''" with the actual name of the folder to extract cubemaps into.}}
+
{{note|Replace "''mapname''" with the map's actual name, and "''foldername''" with the actual name of the folder to extract cubemaps into.}}
  
  
 
=== Embedding cubemaps ===
 
=== Embedding cubemaps ===
To make a map use extracted cubemaps, create a text file within the '''BSP''' file's location that will include paths to the cubemap textures to embed into it with the use of '''BSPZIP'''. Here's how such a file should look like:
+
To make a map use extracted cubemaps, create a text file that will be used with '''BSPZIP''' - the file should be created inside the "maps" folder and will contain paths to the files to embed into the map. The file's content should be like this:
  materials/maps/mapname/c0_416_64.hdr.vtf
+
  materials/maps/mapname/c-128_384_64.hdr.vtf
  '''foldername\materials\maps\mapname\c0_416_64.hdr.vtf'''
+
  '''foldername\materials\maps\mapname\c-128_384_64.hdr.vtf'''
  materials/maps/mapname/c0_416_64.vtf
+
  materials/maps/mapname/c-128_384_64.vtf
  '''foldername\materials\maps\mapname\c0_416_64.vtf'''
+
  '''foldername\materials\maps\mapname\c-128_384_64.vtf'''
  materials/maps/mapname/c416_0_64.hdr.vtf
+
  materials/maps/mapname/c448_-256_64.hdr.vtf
'''foldername\materials\maps\mapname\c416_0_64.hdr.vtf'''
+
  '''foldername\materials\maps\mapname\c448_-256_64.hdr.vtf'''
materials/maps/mapname/c-416_0_64.hdr.vtf
+
  materials/maps/mapname/c448_-256_64.vtf
  '''foldername\materials\maps\mapname\c-416_0_64.hdr.vtf'''
+
  '''foldername\materials\maps\mapname\c448_-256_64.vtf'''
  materials/maps/mapname/c416_0_64.vtf
 
'''foldername\materials\maps\mapname\c416_0_64.vtf'''
 
materials/maps/mapname/c-416_0_64.vtf
 
  '''foldername\materials\maps\mapname\c-416_0_64.vtf'''
 
 
  materials/maps/mapname/cubemapdefault.vtf
 
  materials/maps/mapname/cubemapdefault.vtf
 
  '''foldername\materials\maps\mapname\cubemapdefault.vtf'''
 
  '''foldername\materials\maps\mapname\cubemapdefault.vtf'''
{{note|Replace "''mapname''" with the map's actual filename, and "''foldername''" with the actual name of the folder that contains the extracted cubemaps.}}
+
{{note|Replace "''mapname''" with the map's actual name, the cubemaps' names with appropriate ones, and "''foldername''" with the actual name of the folder that contains the extracted cubemaps.}}
Two lines (paths) are required per file; the first line represents the directory structure that the file will take within the map file, while the second one is the actual path to the file to find and embed. In this example, the second lines use a relative path (considering that the text file is in the same directory as the folder with extracted cubemaps), though it can also be absolute. Once the text file is ready, execute the following comand:
+
A file requires two dedicated lines (paths): the first line represents the path it will use within the map file, while the second one is the actual location of the file to embed into the map. 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 mapname.bsp textfile.txt newmapname.bsp
 
  ..\..\bin\bspzip -addlist mapname.bsp textfile.txt newmapname.bsp
{{note|Replace "''mapname''" with the map's actual filename, "''textfile''" with the text file's actual filename, and "''newmapname''" with the map's actual filename to override it (or type in a different one to generate an additional '''BSP''' file without overwriting the original).}}
+
{{note|Replace "''mapname''" with the map's actual name, "''textfile''" with the text file's actual name, and "''newmapname''" with either the map's actual name, or a new name not to overwrite the original file (and instead create a separate one).}}
 
== Renaming a map ==
 
== Renaming a map ==
The map's name is used for the directory where built cubemaps are saved into within the file; changing its name will cause the cubemaps not to load alongside the map, and therefore it will act as if there were none. To correct that, either delete and then rebuild the cubemaps, or extract and then repack (embed) them with the cubemaps' directory matching the map's new name.
+
Built cubemaps are saved into a directory that uses the map's name; renaming it will cause its cubemaps not to load alongside the map, and therefore it will act as if there were none. To correct that, either delete then rebuild the cubemaps, or extract then embed them back, with their directory's name matching that of the map.
 
== See also ==
 
== See also ==
 
* [[env_cubemap]]
 
* [[env_cubemap]]
 
* [[$envmap]]
 
* [[$envmap]]
 
[[Category:Level Design]]
 
[[Category:Level Design]]

Revision as of 11:27, 25 November 2020

English Español Français Русский
Env cubemap.png
Models with specular reflections.

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 automatically embedded into the map file. Cubemaps, when built, are reflected on surfaces that use the $envmap parameter with env_cubemap as its value.


Building cubemaps

Building cubemaps is the process of generating their textures for reflective purposes. For technical reasons, this process is not automated and is up to the user to do so; until then, existing env_cubemaps will remain unused and the map, depending on the game, will display either generic or "missing" textures as reflections due to non-existing cubemaps.

Warning.png Warning: To build cubemaps, your game's screen resolution needs to be at least 4 times higher than the highest size of an env_cubemap in a map, or else attempting to build them will either fail or even cause the game to crash. For example: if the highest env_cubemap sizes 128x128, a resolution of 512x512 will be needed. (128 × 4 = 512 -> 720x576 or higher)
Note.png Note: Your game needs to be relaunched in order to display cubemaps after building them.
Tip.png Tip: Maxing out your game's visual settings prior to building cubemaps will generate their textures in the best-possible quality for the cubemaps' size.


Before building

Tip.png Tip: Counter-Strike: SourceCounter-Strike: Source maps, among other games', are known for including pre-built, blank cubemaps after compiling them. Their textures are generated even if there are no env_cubemaps in the map, and it is recommended to delete them prior to building cubemaps as explained here.


LDR

Note.png Note: This step does not apply to Counter-Strike: Global OffensiveCounter-Strike: Global Offensive as its maps are compiled in HDR mode only.

Building cubemaps on a map compiled in LDR (Low Dynamic Range) mode will generate textures only for said 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 Disables reflections. Required to properly build cubemaps
map cs_mymap Loads a map; replace "cs_mymap" with the map's actual name
sv_cheats 1 Enables the use of cheat commands. Required to build cubemaps
buildcubemaps Starts building cubemaps
disconnect Unloads the map, returning you to the main menu
mat_specular 1 Enables reflections
quit (optional) Closes the game. Required to display newly-built cubemaps (after relaunching it)


HDR

Building cubemaps on a map compiled with HDR support needs to be done twice - once for each mode (HDR and LDR). As opposed to a 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 Disables reflections. Required to properly build cubemaps
map cs_mymap Loads a map; replace "cs_mymap" with the map's actual name
sv_cheats 1 Enables the use of cheat commands. Required to build cubemaps
buildcubemaps Starts building cubemaps
disconnect Unloads the map, returning you to the main menu
sv_cheats 0 Disables cheat commands. Prevents command mat_reloadallmaterials from unnecessarily self-executing and briefly freezing 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 cs_mymap Loads the map again to build cubemaps for the new mode
sv_cheats 1
buildcubemaps Starts building cubemaps for the new mode
disconnect
mat_specular 1 Enables reflections
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) Closes the game. Required to display newly-built cubemaps (after relaunching it)


Half-Life: Source

Bug.png Bug: Building cubemaps in Half-Life: SourceHalf-Life: Source isn't currently possible as the textures, despite being generated, aren't embedded into the map file afterward.
Placementtip.gif Workaround: Move the map file into the "maps" folder of a game of the same engine branch (such as Half-Life 2Half-Life 2), build its cubemaps in that game, then move the file back into Half-Life: Source's.


Source Filmmaker

Bug.png Bug: Cubemaps built in other games will display weird artifacts on reflections due to a sixth cubemap face that Source FilmmakerSource Filmmaker doesn't seem to recognize (it uses only five of them). While rebuilding cubemaps in it would fix the issue, it is currently not possible to do so as Source Filmmaker generates blank textures.
Placementtip.gif Workaround: Move the map file into Alien SwarmAlien Swarm's "maps" folder, build its cubemaps in that game, then move the file back into Source Filmmaker's.
Note.png Note: Alien Swarm's "gameinfo.txt" file needs to be edited for this procedure so that the game can have access to missing map assets not to build cubemaps with missing textures/models. The file's "SearchPaths" section should be like this:
"SearchPaths"
{
	"Game"	"|gameinfo_path|."
	"Game"	"swarm_base"
	"Game"	"platform"
	"Game" "..\SourceFilmmaker\game\hl2"
	"Game" "..\SourceFilmmaker\game\tf"
	"Game" "..\SourceFilmmaker\game\tf_movies"
	"Game" "..\SourceFilmmaker\game\usermod"
}
Note.png Note: Team Fortress 2Team Fortress 2 configurations were used for this example; consider replacing game subfolders (only those within Source Filmmaker paths) with the needed ones.

Deleting cubemaps

Delete unnecessary or outdated cubemaps is made possible with the use of several tools; of them all, BSPZIP not only is an official one, but also the easiest and safest option for this procedure without potentially corrupting the map. To delete the cubemaps, execute the following command within the "maps" folder:

..\..\bin\bspzip -deletecubemaps mapname.bsp
Note.png Note: Replace "mapname" with the map's actual name.
Warning.png Warning: Deleting cubemaps actually deletes all the texture (".vtf") files embedded into the map, so it's recommended not to embed custom textures prior to deleting cubemaps.

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 until it actually becomes so. To extract its cubemaps with BSPZIP, create a folder inside the "maps" one that will contain the extracted cubemaps, and execute the following command:

..\..\bin\bspzip -extractcubemaps mapname.bsp "foldername"
Note.png Note: Replace "mapname" with the map's actual name, and "foldername" with the actual name of the folder to extract cubemaps into.


Embedding cubemaps

To make a map use extracted cubemaps, create a text file that will be used with BSPZIP - the file should be created inside the "maps" folder and will contain paths to the files to embed into the map. The file's content should be like this:

materials/maps/mapname/c-128_384_64.hdr.vtf
foldername\materials\maps\mapname\c-128_384_64.hdr.vtf
materials/maps/mapname/c-128_384_64.vtf
foldername\materials\maps\mapname\c-128_384_64.vtf
materials/maps/mapname/c448_-256_64.hdr.vtf
foldername\materials\maps\mapname\c448_-256_64.hdr.vtf
materials/maps/mapname/c448_-256_64.vtf
foldername\materials\maps\mapname\c448_-256_64.vtf
materials/maps/mapname/cubemapdefault.vtf
foldername\materials\maps\mapname\cubemapdefault.vtf
Note.png Note: Replace "mapname" with the map's actual name, the cubemaps' names with appropriate ones, and "foldername" with the actual name of the folder that contains the extracted cubemaps.

A file requires two dedicated lines (paths): the first line represents the path it will use within the map file, while the second one is the actual location of the file to embed into the map. 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 mapname.bsp textfile.txt newmapname.bsp
Note.png Note: Replace "mapname" with the map's actual name, "textfile" with the text file's actual name, and "newmapname" with either the map's actual name, or a new name not to overwrite the original file (and instead create a separate one).

Renaming a map

Built cubemaps are saved into a directory that uses the map's name; renaming it will cause its cubemaps not to load alongside the map, and therefore it will act as if there were none. To correct that, either delete then rebuild the cubemaps, or extract then embed them back, with their directory's name matching that of the map.

See also