Zh/Leak: Difference between revisions
Alanwong35 (talk | contribs) |
Alanwong35 (talk | contribs) |
||
Line 52: | Line 52: | ||
另一种查找泄漏源的方法是在加载pointfile后,缩小2D视图直到看到红线。沿着这条线找到并选取实体。然后从 '''View''' 菜单中选择 [[Hammer_View_Menu#Center_Views_on_Selection_.3CCtrl.2BE.3E|Center 3D Views on Selection]]。接着就能按照泄露的实体延伸出的红线找到地图泄漏的洞口。 | 另一种查找泄漏源的方法是在加载pointfile后,缩小2D视图直到看到红线。沿着这条线找到并选取实体。然后从 '''View''' 菜单中选择 [[Hammer_View_Menu#Center_Views_on_Selection_.3CCtrl.2BE.3E|Center 3D Views on Selection]]。接着就能按照泄露的实体延伸出的红线找到地图泄漏的洞口。 | ||
== | == 其他可能引发泄露的情况 == | ||
这里是说明除了地图盒子上有缺口引发的泄露外,还有其他可能导致 [[VBSP]] 产生泄漏错误的错误。 | |||
=== | === 实体泄露 === | ||
[[Image:hammer_leaks2.jpg||thumb|300px|right| | [[Image:hammer_leaks2.jpg||thumb|300px|right|将任何实体放置在虚空[[void]]中都会导致泄漏。]] | ||
所有实体都需要位于用固体拉盒子的或skybox内,总之就是封闭环境内。 要注意VBSP将所有brush实体视为不存在,因此不可将画笔实体(比如[[func_door]]实体)用于密封地图或补上缺洞。{{clr}} | |||
=== | === 构建不当的Areaportals笔刷 === | ||
[[Image:hammer_leaks3.jpg||thumb|300px|right| | [[Image:hammer_leaks3.jpg||thumb|300px|right|Areaportals不封好也会泄露。]] | ||
当没有正确密封好[[areaportal]]时,编译器也会生成泄漏错误提示,使用与上边提到的查找泄漏的方法也同样可以查找areaportals泄漏。{{clr}} | |||
=== | === 特殊几何不封闭体泄露 === | ||
[[Image:hammer_leaks4.jpg||thumb|300px|right| | [[Image:hammer_leaks4.jpg||thumb|300px|right|密封好地形后面的区域以防止泄漏。]] | ||
[[Displacements]] | [[Displacements]]和[[water]]没封好也会导致泄漏。你可以通过在它们后面拉固体封上来解决这种类型的泄漏。使用带有<code>tools/toolsnodraw</code>材质的笔刷密封,不会增加任何额外的渲染负担,因此比较推荐这样做。而水则应该在其上面区域进行密封(用于密封的笔刷纹理可以是<code>tools/toolsskybox</code>或其他类型的纹理,比如brick纹理。)不要使用nodraw纹理的笔刷来密封水,因为这会导致奇怪的拖尾效应。{{clr}} | ||
=== | === 不匹配的实体原点 === | ||
[[Image:hammer_origin_leak.jpg|thumb|300px|right| | [[Image:hammer_origin_leak.jpg|thumb|300px|right|与父级实体分离并在地图外的origin helper也将可导致泄漏。]] | ||
泄漏原因可能是任何具有origin helper的实体,例如[[func_door_rotating]]或[[func_rot_button]]。虽然实体本身可能在世界内部,但如果origin helper在地图之外,其实体也会导致泄漏。如果你在2D视图里找到个点向地图外的虚空射出红线,并且红线的方向那里没有实体,那么就是泄露了 | |||
快速判断实体是否导致泄漏的方法是: | |||
# | # 加载pointfile. | ||
# | # 通过坐标点找到泄露处. | ||
# | # 从上方栏找到'''Edit'''点选'''Select All'''. | ||
# | # 确定在上方栏的'''View'''里勾选上'''[[Hammer_View_Menu#Show Helpers|Show Helpers]]'''. | ||
# | # 如果你看到在pointfile(红线)处出现了一个origin helper,那这便是问题所在. | ||
如果您有一个导致泄漏的origin helper,您可以选择手动将其移回地图内,使用'''Tools'''中的[[Hammer_Tools_Menu#Center_Origins|Center Origins]],或者只需右击origin helper并选取'''Center on entity'''。 | |||
当具有这些helper之一的笔刷实体在 [[Hammer_Selection_Modes_Toolbar|Solids]] 模式下移动时,通常会出现不匹配的实体origins。在[[solids]] mode之下移动笔刷实体不会移动其origin helper。.{{clr}} | |||
=== | === 透明笔刷 === | ||
如果在地图边缘使用半透明纹理(如玻璃)的笔刷时也会导致泄漏。如果pointfile(红线)通过笔刷时,请检查该笔刷所有面的纹理。 | |||
=== Func_viscluster === | === Func_viscluster === | ||
[[Func_viscluster]] | 当[[Func_viscluster]]穿过Areaportal表面或太靠近它们时,也会导致泄漏。此时应该禁用所有func_visclusters并重新编译以查看泄漏是否消失。 | ||
=== 虚假泄漏 === | === 虚假泄漏 === | ||
Revision as of 08:11, 29 July 2022

This page either contains information that is only partially or incorrectly translated, or there isn't a translation yet.
If this page cannot be translated for some reason, or is left untranslated for an extended period of time after this notice is posted, the page should be requested to be deleted.
Also, please make sure the article complies with the alternate languages guide.
什么是泄露?
BSP 地图本身必须保证完全封闭。关卡内部,即世界的任何部分不能和外部,即虚空相连。即便是天空也必须要用tools/toolsskybox
纹理的固体封闭地图。当地图没有封闭好,或者有实体在虚空,则在编译地图的时候VBSP就会发生泄露事故,当这种情况发生时,VBSP无法判定地图的哪部分在内部,哪部分在外部,使得无法正常编译地图。
此案例展示了一个在几何方面上具有明显空隙的固体。这会导致编译过程中出现泄露信息:
当这样的地图被编译时,与虚空之间存在间隙,VBSP会在编译日志中生成与此类似的错误:
ProcessBlock_Thread: 0...1...2...3...4...5...6...7...8...9...10 (0) **** leaked **** Entity light (-1607.69 -1094.12 -183.00) leaked!
出现此错误消息后,VBSP会告诉您关卡中存在泄漏,以及它试图从虚空进入关卡时找到的第一个实体(本案例以范围光为示例)。它还以X、Y和Z坐标为您提供该实体的位置。
泄露导致的debuff
关卡中的泄露会导致许多不良影响. VBSP会报告泄露,并且不会正确生成Portalfile(实际上根本不会生成) (mapname.prt
),.VVIS使用Portalfile进行渲染计算.因为没有Portalfile,VVIS将无法正常运行. 当发生泄露时, VRAD也会无法正常工作,或只进行照明,而不进行光线反射.
地图通常根本无法运行.VVIS可能会直接渲染整张地图,这对帧数不利,或直接整个区域都不可见.更坏的情况是,VRAD会直接把地图渲染成黑色.
寻找泄露
有时泄露并不像上面的示例那么明显.可能只是因为一些失误而造成的. VBSP为你提供了一个pointfile去帮助你找到泄露的尸体.它被渲染成从虚空到编译报告中所描述的实体的一条红线.在发生泄漏事故后, a mapname.lin
将会生成于vmf的同一目录下.
加载Pointfile
加载pointfile可以使Hammer编辑器的视图里精准显示地图内有哪处地方泄露 ; 使用方法: 在hammer编辑器上方栏里找到map,然后再点选Load Pointfile即可
右图为加载pointfile的示例。标示红线于 3D 和 2D 视图中,并且该红线是以实体为中心而向外散发至地图外部(即虚空)
通过加载pointfile,你可以沿着红线找到泄漏源。最好从VBSP指定的实体(也就每次地图编译时弹出的编译窗口里显示的一串红字标示的实体)开始找起,然后沿着红线走,直到找到地图中缺口。把洞补上并重新编译地图以查看你是否已修复泄漏。
通过坐标点找到泄露处
如果您在定位泄露实体时遇到问题时,可以使用视图菜单上的转到Go to Coordinates来查找实体和红线的起点。只需输入VBSP报出的实体泄露坐标,2D 和 3D 视图就会跳转到出现泄露问题的实体。按照泄露实体延伸出的红线找到地图泄漏的洞口。
另一种查找泄漏源的方法是在加载pointfile后,缩小2D视图直到看到红线。沿着这条线找到并选取实体。然后从 View 菜单中选择 Center 3D Views on Selection。接着就能按照泄露的实体延伸出的红线找到地图泄漏的洞口。
其他可能引发泄露的情况
这里是说明除了地图盒子上有缺口引发的泄露外,还有其他可能导致 VBSP 产生泄漏错误的错误。
实体泄露

所有实体都需要位于用固体拉盒子的或skybox内,总之就是封闭环境内。 要注意VBSP将所有brush实体视为不存在,因此不可将画笔实体(比如func_door实体)用于密封地图或补上缺洞。
构建不当的Areaportals笔刷
当没有正确密封好areaportal时,编译器也会生成泄漏错误提示,使用与上边提到的查找泄漏的方法也同样可以查找areaportals泄漏。
特殊几何不封闭体泄露
Displacements和water没封好也会导致泄漏。你可以通过在它们后面拉固体封上来解决这种类型的泄漏。使用带有tools/toolsnodraw
材质的笔刷密封,不会增加任何额外的渲染负担,因此比较推荐这样做。而水则应该在其上面区域进行密封(用于密封的笔刷纹理可以是tools/toolsskybox
或其他类型的纹理,比如brick纹理。)不要使用nodraw纹理的笔刷来密封水,因为这会导致奇怪的拖尾效应。
不匹配的实体原点
泄漏原因可能是任何具有origin helper的实体,例如func_door_rotating或func_rot_button。虽然实体本身可能在世界内部,但如果origin helper在地图之外,其实体也会导致泄漏。如果你在2D视图里找到个点向地图外的虚空射出红线,并且红线的方向那里没有实体,那么就是泄露了
快速判断实体是否导致泄漏的方法是:
- 加载pointfile.
- 通过坐标点找到泄露处.
- 从上方栏找到Edit点选Select All.
- 确定在上方栏的View里勾选上Show Helpers.
- 如果你看到在pointfile(红线)处出现了一个origin helper,那这便是问题所在.
如果您有一个导致泄漏的origin helper,您可以选择手动将其移回地图内,使用Tools中的Center Origins,或者只需右击origin helper并选取Center on entity。
当具有这些helper之一的笔刷实体在 Solids 模式下移动时,通常会出现不匹配的实体origins。在solids mode之下移动笔刷实体不会移动其origin helper。.
透明笔刷
如果在地图边缘使用半透明纹理(如玻璃)的笔刷时也会导致泄漏。如果pointfile(红线)通过笔刷时,请检查该笔刷所有面的纹理。
Func_viscluster
当Func_viscluster穿过Areaportal表面或太靠近它们时,也会导致泄漏。此时应该禁用所有func_visclusters并重新编译以查看泄漏是否消失。
虚假泄漏
尽管非常罕见,但是VBSP还是有可能在你编译地图时报告假泄漏,如果你确定VBSP报告的泄漏是不应该出现的,那么你可以把你的地图复制粘贴到新的地图文件中。如果编译成功,那么你之前的文件可能损坏了。
Conclusion: An ounce of prevention
Using the pointfile tools makes finding leaks relatively painless, but one of the most important ways to fix leaks is by preventing them in the first place. Taking your time when building, and making sure brushes are snapped properly to the grid can go a long way towards eliminating leaks before they occur. The cleaner and more organized your geometry, the more likely you are to be able to spot leaks when they occur, or even prevent them from happening in the first place. You can also help prevent lots of extra work by compiling your level as you go along, instead of building your whole level before trying to compile it. Finding one leak at a time while the map is only partially complete is a lot easier and faster than finding leaks in a complete map that is full of geometry.