Zh/Cubemaps: Difference between revisions
m (-Using L template for links) |
mNo edit summary |
||
(8 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{LanguageBar|title = 立方体贴图(cubemaps)}} | ||
{{Tabs|Cubemaps|source=1|source2=1|main=source}} | |||
[[File:Env_cubemap.png|left]] | [[File:Env_cubemap.png|left]] | ||
[[File:Specular.jpg|thumb|right|300px|模型上的镜面反射<br>(夸张的使用{{ | [[File:Specular.jpg|thumb|right|300px|模型上的镜面反射<br>(夸张的使用{{L|r_showenvcubemap}})]] | ||
'''cubemap'''是表示区域中的三维呈现的纹理。{{L|Source|起源}}使用 {{L|env_cubemap}} 实体作为采样点来生成这些纹理,然后将其自动嵌入到 {{L|BSP|地图文件}}中。[[#Building cubemaps|构建]]Cubemaps之后,将反应在使用{{L|$envmap}}参数(以''env_cubemap''作为值)的表面上。 | '''cubemap'''是表示区域中的三维呈现的纹理。{{L|Source|起源}}使用 {{L|env_cubemap}} 实体作为采样点来生成这些纹理,然后将其自动嵌入到{{L|BSP|地图文件}}中。[[#Building cubemaps|构建]]Cubemaps之后,将反应在使用{{L|$envmap}}参数(以''env_cubemap''作为值)的表面上。 | ||
Line 13: | Line 15: | ||
{{tip |在构建立方体贴图之前最大化游戏设置将以适合 '''env_cubemaps''' 大小的最佳质量生成纹理。<nowiki>'</nowiki>}} | {{tip |在构建立方体贴图之前最大化游戏设置将以适合 '''env_cubemaps''' 大小的最佳质量生成纹理。<nowiki>'</nowiki>}} | ||
{{tip |该命令可以选择接受要执行的迭代次数。例如,将要构建两次立方体贴图。当需要递归反射才能看起来正确时,这很有用,例如两个建筑物相互反射。<code>buildcubemaps</code> <code>buildcubemaps 2 </code> | {{tip |该命令可以选择接受要执行的迭代次数。例如,将要构建两次立方体贴图。当需要递归反射才能看起来正确时,这很有用,例如两个建筑物相互反射。<code>buildcubemaps</code> <code>buildcubemaps 2 </code> | ||
{{bug|目前在{{p2ce}},这个不能正常工作。要解决此问题,请运行 buildcubemaps,让映射重新加载,然后再次运行该命令。}}}} | {{bug|hidetested=1|目前在{{p2ce}},这个不能正常工作。要解决此问题,请运行 buildcubemaps,让映射重新加载,然后再次运行该命令。}}}} | ||
{{warning |在Vulkan上运行的游戏,例如{{l4d2}},在构建cubemap时不会暂停屏幕,但屏幕会剧烈闪烁。但是你不能 alt 选项卡退出此过程以停止闪烁。如果你容易癫痫发作,你应该把目光移开或离开电脑。}} | {{warning |在Vulkan上运行的游戏,例如{{l4d2}},在构建cubemap时不会暂停屏幕,但屏幕会剧烈闪烁。但是你不能 alt 选项卡退出此过程以停止闪烁。如果你容易癫痫发作,你应该把目光移开或离开电脑。}} | ||
{{warning |如果在构建cubemap之前使用了该命令 ,则绿色框也将烘焙到cubemap中。<code>Nav_Show_Ladder_Bounds</code>}} | {{warning |如果在构建cubemap之前使用了该命令 ,则绿色框也将烘焙到cubemap中。<code>Nav_Show_Ladder_Bounds</code>}} | ||
Line 20: | Line 22: | ||
=== LDR === | === LDR === | ||
{{note |此步骤不适用于{{l4d}} '''Left 4 Dead''' 和 {{csgo}}'''Counter-Strike: Global Offensive''',因为它的地图仅在[[#HDR|HDR模式]] 下编译。}} | {{note |此步骤不适用于{{l4d}} '''Left 4 Dead''' 和 {{csgo}}'''Counter-Strike: Global Offensive''',因为它的地图仅在 [[#HDR|HDR模式]] 下编译。}} | ||
在以 '''LDR''' (''低动态范围'')模式编译的地图上构建cubemap将仅为该模式生成纹理,而不管游戏的 '''HDR''' (''高动态范围'')视频设置如何。要构建立方体贴图,请将以下命令提交到游戏的控制台中: | 在以 '''LDR''' (''低动态范围'')模式编译的地图上构建cubemap将仅为该模式生成纹理,而不管游戏的 '''HDR''' (''高动态范围'')视频设置如何。要构建立方体贴图,请将以下命令提交到游戏的控制台中: | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 43: | Line 45: | ||
=== HDR === | === HDR === | ||
在支持 {{L|HDR}} | 在支持 {{L|HDR}} 的地图上构建cubemap需要执行两次 - 每种模式('''HDR''' 和 '''LDR''')一次。与 '''LDR''' 地图的情况相反,游戏的高动态范围视频设置必须设置为“完整”才能构建 '''HDR''' 的cubemap,必须设置为“无”才能构建 '''LDR''' cubemap。要构建cubemap,请将以下命令提交到游戏的控制台中: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 79: | Line 81: | ||
=== 半条命: 起源 === | === 半条命: 起源 === | ||
{{bug|在{{hls}}'''Half-Life: Source''' 中构建立方体cubemap目前不可用,因为它们的纹理尽管已生成,但之后不会嵌入到地图文件中。 | {{bug|hidetested=1|在{{hls}}'''Half-Life: Source''' 中构建立方体cubemap目前不可用,因为它们的纹理尽管已生成,但之后不会嵌入到地图文件中。 | ||
{{workaround|将地图文件移动到同一引擎分支的游戏的“map”文件夹中(例如 {{hl2}}'''Half-Life 2'''),在该游戏中构建其cubemap,然后将文件移回 '''Half-Life: Source''' 的文件夹。<nowiki>'</nowiki> | {{workaround|将地图文件移动到同一引擎分支的游戏的“map”文件夹中(例如 {{hl2}}'''Half-Life 2'''),在该游戏中构建其cubemap,然后将文件移回 '''Half-Life: Source''' 的文件夹。<nowiki>'</nowiki>}}}} | ||
=== 传送门 2 === | === 传送门 2 === | ||
{{bug|在 {{portal2}}'''Portal 2''' 构建cubemap,如果 BSP 不在编号最高的 DLC 文件夹中(默认情况下为 dlc2),'''传送门 2''' 将失败}} | {{bug|hidetested=1|在 {{portal2}}'''Portal 2''' 构建cubemap,如果 BSP 不在编号最高的 DLC 文件夹中(默认情况下为 dlc2),'''传送门 2''' 将失败}} | ||
{{workaround|可以先手动将地图移动到那里, 编辑 {{L|Hammer_Build_Programs|Build Programs}} 选项卡中的 "'''place compiled maps in this directory before running the game'''" 选项以自动执行此操作,或者创建一个 {{path|portal2_dlc3}}文件夹,再创建一个 {{path|maps}} 文件夹,并将所有自定义地图放入其中。 游戏会自动识别dlc3文件夹,因此无需编辑 '''gameinfo''' }} | {{workaround|可以先手动将地图移动到那里, 编辑 {{L|Hammer_Build_Programs|Build Programs}} 选项卡中的 "'''place compiled maps in this directory before running the game'''" 选项以自动执行此操作,或者创建一个 {{path|portal2_dlc3}}文件夹,再创建一个 {{path|maps}} 文件夹,并将所有自定义地图放入其中。 游戏会自动识别dlc3文件夹,因此无需编辑 '''gameinfo''' }} | ||
=== Source Filmmaker === | === Source Filmmaker === | ||
[[File:Cubemap_bug_sfm.jpg|thumb|right|300px| | [[File:Cubemap_bug_sfm.jpg|thumb|right|300px|Source Filmmaker 中HDR立方体贴图的面渲染不正确。]] | ||
{{bug|内置低于 128x128 的 '''HDR''' cubemap在 {{tf2}}'''Team Fortress 2''' 和其他一些游戏通常会在反射上显示图形伪影,因为每个立方体贴图的最后一面没有正确渲染在 {{sfm}}'''Source Filmmaker'''。 虽然在'''Source Filmmaker''' 其中重建立方体贴图通常可以解决问题,但目前无法这样做, 因为它会生成空白纹理。 | {{bug|hidetested=1|内置低于 128x128 的 '''HDR''' cubemap在 {{tf2}}'''Team Fortress 2''' 和其他一些游戏通常会在反射上显示图形伪影,因为每个立方体贴图的最后一面没有正确渲染在 {{sfm}}'''Source Filmmaker'''。 虽然在'''Source Filmmaker''' 其中重建立方体贴图通常可以解决问题,但目前无法这样做, 因为它会生成空白纹理。 | ||
{{workaround|如果无法重新编译受影响地图的特殊版本, '''env_cubemaps''' 现在的大小为 128x128,请将地图文件移动到 {{as}}'''Alien Swarm'''的<nowiki>'</nowiki>s "maps" 文件夹中, 在该游戏中构建其cubemap,然后将文件移回 '''Source Filmmaker'''<nowiki></nowiki>的文件夹中。}}}} | {{workaround|如果无法重新编译受影响地图的特殊版本, '''env_cubemaps''' 现在的大小为 128x128,请将地图文件移动到 {{as}}'''Alien Swarm'''的<nowiki>'</nowiki>s "maps" 文件夹中, 在该游戏中构建其cubemap,然后将文件移回 '''Source Filmmaker'''<nowiki></nowiki>的文件夹中。}}}} | ||
{{note|'''Alien Swarm'''<nowiki></nowiki>的"gameinfo.txt" 文件在此过程需要编辑,以便游戏可以访问其他游戏地图使用的资产,而不是构建缺少纹理或模型的cubemap。文件的 "SearchPaths" 部分应如下所示:}} | {{note|'''Alien Swarm'''<nowiki></nowiki>的"gameinfo.txt" 文件在此过程需要编辑,以便游戏可以访问其他游戏地图使用的资产,而不是构建缺少纹理或模型的cubemap。文件的 "SearchPaths" 部分应如下所示:}} | ||
Line 108: | Line 110: | ||
{{note|将 "''地图名称''" 替换为地图的实际名称。}} | {{note|将 "''地图名称''" 替换为地图的实际名称。}} | ||
{{warning|删除cubemap实际上会删除当时嵌入到贴图中的所有纹理 ("{{L|Valve Texture Format|.vtf}}") 文件,因此建议在删除立方体贴图之前不要嵌入自定义纹理。}} | {{warning|删除cubemap实际上会删除当时嵌入到贴图中的所有纹理 ("{{L|Valve Texture Format|.vtf}}") 文件,因此建议在删除立方体贴图之前不要嵌入自定义纹理。}} | ||
{{bug|(在 {{src13mp}}){{code|-deletecubemaps}} 中实际上可能会删除整个PAKFILE块,使地图损坏!使用 {{vide|4}} 则相反。}} | {{bug|hidetested=1|(在 {{src13mp}}){{code|-deletecubemaps}} 中实际上可能会删除整个PAKFILE块,使地图损坏!使用 {{vide|4}} 则相反。}} | ||
{{confirm|删除 {{file|cubemapdefault|vtf}} 和 {{file|cubemapdefault.hdr|vtf}} 可能会搞砸构建其他cubemap....}} | {{confirm|删除 {{file|cubemapdefault|vtf}} 和 {{file|cubemapdefault.hdr|vtf}} 可能会搞砸构建其他cubemap....}} | ||
Line 140: | Line 142: | ||
* {{L|$envmap}} | * {{L|$envmap}} | ||
* {{L|parallax_obb}} - 用于视差校正立方体贴图。 | * {{L|parallax_obb}} - 用于视差校正立方体贴图。 | ||
{{ACategory|Level Design}} |
Latest revision as of 07:16, 17 July 2025
cubemap是表示区域中的三维呈现的纹理。起源 使用 env_cubemap 实体作为采样点来生成这些纹理,然后将其自动嵌入到地图文件 中。构建Cubemaps之后,将反应在使用$envmap 参数(以env_cubemap作为值)的表面上。
构建cubemap
构建cubemaps是生成其纹理并将其用作反射的过程。由于技术原因,此过程不是自动的,而是需要开发者来执行此操作;在此之前,现有的 env_cubemaps 将保持未启用的状态,并且由于不存在cubemap,地图将根据游戏将“缺失”纹理显示为反射。





buildcubemaps
buildcubemaps 2

Nav_Show_Ladder_Bounds
在搭建前


LDR



在以 LDR (低动态范围)模式编译的地图上构建cubemap将仅为该模式生成纹理,而不管游戏的 HDR (高动态范围)视频设置如何。要构建立方体贴图,请将以下命令提交到游戏的控制台中:
命令 | 描述 |
---|---|
mat_specular 0 |
禁用反射。正确构建cubemap所需要 |
map cs_mymap |
加载地图;将 "“cs_mymap”" 替换为地图的实际名称 |
sv_cheats 1 |
启用作弊命令。生成cubemap时需要 |
buildcubemaps |
开始构建cubemap。(可选)指定迭代次数(默认值为 1) |
disconnect |
退出地图,返回主菜单 |
mat_specular 1 |
启用反射 |
quit |
(可选)关闭游戏。需要重新启动它才能显示新建的cubemap |
HDR
在支持 HDR 的地图上构建cubemap需要执行两次 - 每种模式(HDR 和 LDR)一次。与 LDR 地图的情况相反,游戏的高动态范围视频设置必须设置为“完整”才能构建 HDR 的cubemap,必须设置为“无”才能构建 LDR cubemap。要构建cubemap,请将以下命令提交到游戏的控制台中:
命令 | 描述 |
---|---|
mat_specular 0 |
禁用反射。正确构建cubemap需要 |
map cs_mymap |
加载地图;将 "“cs_mymap”" 替换为地图的实际名称 |
sv_cheats 1 |
启用作弊命令。生成cubemap时需要 |
buildcubemaps |
开始构建cubemap。(可选)指定迭代次数(默认值为 1) |
disconnect |
退出地图,返回主菜单 |
sv_cheats 0 |
禁用作弊命令。防止命令 mat_reloadallmaterials 不必要地自动执行并短暂冻结游戏
|
mat_hdr_level 0 |
切换到 LDR 模式 (从 HDR); mat_hdr_level 2 如果首先构建 LDR 则改为提交
|
map cs_mymap |
再次加载地图以构建新模式的cubemap |
sv_cheats 1 |
|
buildcubemaps |
开始为新模式构建cubemap。(可选)指定迭代次数(默认值为 1) |
disconnect |
|
mat_specular 1 |
启用反射 |
mat_hdr_level 0/1/2 |
如有必要,切换回提交前的模式 mat_hdr_level 0/2
|
quit |
(可选)关闭游戏。需要重新启动它才能显示新建的cubemap |
半条命: 起源
传送门 2


portal2_dlc3
文件夹,再创建一个 
maps
文件夹,并将所有自定义地图放入其中。 游戏会自动识别dlc3文件夹,因此无需编辑 gameinfo Source Filmmaker

"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" }
删除 cubemaps
有几个工具可以删除不必要或过时的cubemap;其中,BSPZIP 不仅是官方的,而且是此过程最简单,最安全的选择,而且不会损坏地图。要删除cubemap,请在“maps”文件夹中执行以下命令:
..\..\bin\bspzip -deletecubemaps 地图名称.bsp





提取 cubemaps
如果地图必须通过微小的修改并重新编译,并且其构建的cubemaps因此消失,则事先提取它们将使得在现实变得这样之前无需再次经历整个cubemaps构建过程。 要使用 BSPZIP 提取其cubemaps,请创建一个文件夹,该文件夹将包含提取的cubemaps在“maps”内,然后执行以下命令:
..\..\bin\bspzip -extractcubemaps 地图名称.bsp "foldername"

嵌入 cubemaps
要使地图使用提取的立方体图,请创建一个将由 BSPZIP 使用的文本文件 - 该文件应在“maps”文件夹中创建,并将包含要嵌入到地图文件中的文件的路径。文件的内容应如下所示:
materials/maps/地图名称/c-128_384_64.hdr.vtf foldername\materials\maps\地图名称\c-128_384_64.hdr.vtf materials/maps/地图名称/c-128_384_64.vtf foldername\materials\maps\地图名称\c-128_384_64.vtf materials/maps/地图名称/c448_-256_64.hdr.vtf foldername\materials\maps\地图名称\c448_-256_64.hdr.vtf materials/maps/地图名称/c448_-256_64.vtf foldername\materials\maps\地图名称\c448_-256_64.vtf materials/maps/地图名称/cubemapdefault.vtf foldername\materials\maps\地图名称\cubemapdefault.vtf

文件需要两行专用行(路径):第一行表示它将在映射文件中使用的路径,而第二行是要嵌入到映射文件中的文件的实际位置。示例使用了相对位置路径,但它们也可以是绝对路径。文本文件准备就绪后,执行以下命令:
..\..\bin\bspzip -addlist 地图名称.bsp textfile.txt 新地图名称.bsp

重命名地图
构建的cubemaps将保存到使用其名称的地图文件中;重命名它将导致cubemaps不与地图一起加载,因此它将表现得好像没有一样。要解决此问题,请删除然后重建cubemaps,或者提取然后重新嵌入它们(其文件夹的名称与地图的名称匹配)。
参见
- env_cubemap
- $envmap
- parallax_obb - 用于视差校正立方体贴图。