Zh/Hint brush: Difference between revisions

From Valve Developer Community
< Zh
Jump to navigation Jump to search
(Undo revision 328046 by NOUG4AT (talk))
Tag: Undo
No edit summary
Line 1: Line 1:
{{language subpage|Hint brush|title=Hint 固体}}
{{Language subpage}}
{{autolang|title=Hint 固体}}
{{:User:1416006136/Signature|time=2023年1月1日|machine=1}}
{{:User:1416006136/Signature|time=2023年1月1日|machine=1}}
{{back|Tool textures#hint|Tool Textures}}
{{back|Tool textures#hint|Tool Textures}}

Revision as of 12:34, 12 July 2023

English (en)Русский (ru)中文 (zh)Translate (Translate)
Red x.png
This template (and its redirect) is Wikipedia icon Deprecated. Its use is not recommended and its functionality may be compromised.
You can help our editors by replacing or deleting this template on the Pages that use this template. Once no more pages use this template, it should be Marked for deletion.

Additional notes:
Use #switch parser function instead. Example
{{#switch: {{language}}
| #default = English
| ja = 日本語
| zh-tw = 中文(台灣)
‎}}

This page was translated by DaKang233 on Error: Invalid time. (UTC+8). Anyone is welcome to add new content or fix errors. Some of the content was translated by machine.


Tool Textures
Toolshint.gif

Hint 平面用于在编译时拆分可见性分支区域,因此是优化 Vis 地图编译阶段结果的一种方式。

它们通常被称为 Hint 固体,因为它们以与普通世界固体相同的方式放置在地图中。Hint 平面由覆盖有 tools/toolshint 纹理的固体的一个边定义。可以通过为固体的多个边添加纹理或使用多个固体来定义多个 Hint 平面。固体的其他不充当 Hint 平面的一侧必须用 tools/toolsskip 覆盖;编译器将忽略这些面。

Hint 会自动绑定到其自己的自动可见组,因此你可以轻松隐藏它们。

为什么以及什么时候切分可见性分支区域

Template:Note:zh-cn

有时,某些叶子(即“可见性分支区域”)形状比其他形状更受欢迎,仅仅是因为这种形状使这些叶子看到更少的其他叶子。每当看不到叶子时,就不会绘制叶子的内容,从而加快渲染速度。

下面说明了叶片切割的重要性,同时提供了提示有用的示例。

第一个示例与 SDK 示例地图几乎相同。这是一个单人房间的侧视图,玩家和管道被一堵墙隔开:

sdk_hints.vmf 示例地图的侧视图,玩家从左侧开始,模型在右侧,由一堵墙隔开。

当玩家处于两个 player_start 中的任何一个时,引擎必须考虑是否应该绘制墙壁右侧的固体(管道)。发生这种情况是因为 vbsp.exe 没有采取最有效的方式将我们的关卡划分叶子:

没有任何 Hint,vbsp 制作了一直延伸到天花板的叶子。

因为叶子很高,一直到天花板,所以左边的叶子(和玩家一起)可以用管道直接“看到”右边的叶子。因此,引擎将绘制叶子和内容物(管道)。很遗憾,因为从玩家的角度看不到这些管道(它们在中间的墙后面)。我们可以使用 Hint 来引导叶子制作过程。

创建单个水平 Hint 会创建多个叶子,并且墙两侧的两片叶子无法相互看到。

白线是带有工具 tools/toolshint 纹理的画笔的一面。它迫使 vbsp 将我们的地图分成三片叶子。在这种情况下,不能再有一条从玩家所在的叶子到管道所在的叶子的直线。这就是 Hint 的本质。

天空盒有时有点高,导致玩家在城市中看到很多东西,因为他们所在的叶子可以看到房屋(如上例所示)。这也是一个很好的情况,我们可以使用 Hint 来阻挡可见性。

角落 Hint

如果没有 Hint,当站在对面的角落时,这条走廊的任何角落都会被渲染。

这是一个典型角落的俯视图。有两个玩家(绿色盒子),两端的圆柱代表了很多引擎要绘制的东西。在这种情况下,Hint 的目标是避免在不必要的情况下渲染对象,例如,当玩家在远离对象的拐角处时。

有人可能会认为 vbsp 会确保每个玩家不会看到属于另一个玩家的对象。这是错误的。它将这个空间分成两片叶子,沿着棕色或粉红色的线切割叶子(取决于 vbsp 首先切割哪个固体面)。

无论哪种方式,两个角落的叶子彼此直接可见,因此当站在相对的角落时,每个角落的内容将始终渲染。

添加倾斜的 Hint 画笔会创建无法看到彼此的角落叶子。

只需在角落放置一个 Hint,将我们的关卡分成三片叶子(总共三片而不是两片),但要确保一个玩家的东西不会从另一个玩家的角度渲染,就可以大大改善这种情况。

红色和棕色叶子之间没有直接的视线,因此避免了不必要的渲染。但是,如果其中一个玩家进入绿色的叶子,他们将看到自己和另一个玩家的东西都被渲染。你无法用 Hint 来阻止这种情况。阻止这种情况的唯一方法是更改关卡布局或使用其他方法,如控制几何可见性和编译时间中所述的方法。

更多示例

使用 Hint 的各种方法。

以下是何时以及如何使用 Hint 的几个示例。在所有情况下,目标都是将绿色玩家彼此隐藏起来。上面的三个工作正常。左边的那个说明,即使它的一个 Hint 固体跨越角落也无关紧要,只要它的角度 > 180°,两个玩家就不会“看到”对方的叶子,因为他们的叶子之间没有一条直线连接。左下角的示例显示了当角度小于 180° 时可能会发生何种情况。我们可以很容易地从叶子到叶子画一条直线,导致非功能性 Hint(Hint 没有达到它的效果)。

当走廊的拐角是 180° 时,如中间顶部图片所示,两个 Hint 就足够了。事实上,他们甚至可以更接近玩家,但这会降低他们的效率(更多的东西将在“拐角处”绘制。在中间底部的示例中,Hint 的高度已降低,vbsp 被迫切割顶部的 visleaf,因为 visleaf 不能是凹形。无论 vbsp 如何切割这个角落,Hint 总是会降低工作效率并创建额外的叶子(vvis 的更多计算)。在示例中,左侧玩家可以看到叶子 1 和 2(与上面的面相同),但右侧玩家将看到所有三个编号的叶子(这比顶部示例更多)。

右边的两张图片告诉你,你应该让事情尽可能简单。如果一个 Hint 就足够了,如上例所示,则首选。而且,显然,如果不需要,则不应使用 Hint,如下图所示。如图所示,vbsp 无法创建使两个玩家都能看到对方的叶子,因此这里不需要使用 Hint 来隐藏玩家(当然,可以使用 Hint 来隐藏走廊的某些部分)。在同一示例中,中间墙永远不应该细节固体(detail brushes)。细节几何图形不会创建可见性分支区域,并且 vvis 不会考虑这些几何图形。它会认为两个玩家都会看到对方,这不是我们想要的。vbsp 甚至可能会执行这个操作,所以这里的两个玩家都在同一片叶子里。

总之,由于 Hint 在游玩地图期间没有直接的渲染成本,因此如果使用得当,它们是加快地图速度和控制可见性的主要方法

用于简化的 Hint

最后,Hint 可用于简化地图。有时,vbsp 会将一个关卡切割成比必要的更多的叶子。这会增加编译时间。Hint 可用于抵消这种情况。例如,可以在门口放置 Hint,以防止门口切割它们连接的房间。或者,如果你收到某个叶子的错误,指出某个叶子正在穿过太多其他叶子,则可以使用 Hint 将该叶子切成多个叶子,从而穿过较少数量的叶子。

Template:Note:zh-cn

另请参阅

示例

  • sourcesdk_content\hl2\mapsrc\sdk_hints.vmf - Source SDK 中包含的示例地图。