这篇条目有关 Source引擎。如需详情,点击这里。

$alphatest

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)Español (es)Русский (ru)中文 (zh)Translate (Translate)

$alphatest是一个着色器参数,可在所有的 起源 起源 游戏中使用。 该参数指定用于确定二元不透明度(en)的遮罩。白色表示完全不透明,黑色表示完全透明。介于两者之间的值会被四舍五入为0或1,除非同时使用$allowalphatocoverage。此效果类似于$translucent(en),区别在于它不能呈现半透明状态(否则会出现Wikipedia icon 色带),渲染速度更快,且引擎在分层时总能正确排序(而不仅限于非detail(en)worldspawn(en))。

语法

$alphatest <布尔值(en)>

VMT示例

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
LightmappedGeneric(en) { $basetexture(en) "glass\window001a" $alphatest 1 $alphatestreference 0.5 $allowalphatocoverage 1 }

附加参数

{{MatParam|$alphatestreference|nolink=1|float|指定表面应变为透明而非不透明的alpha通道阈值。值"0.3"会创建较厚的形状,而"0.7"会创建较薄的形状。

注意
Icon-Important.png重要:反直觉的是,此参数默认值并非"0.5"。LightmappedGeneric、UnlitGeneric和VertexLitGeneric都默认为"0.7"。为避免意外结果,应始终设置此参数。
Icon-Bug.png错误:使用代理(en)实时更新$alphatestreference仅影响投射阴影(如手电筒)。
Tip.png提示:可通过使用$alphatestreference 1并改为修改$alpha(en)值来绕过此限制。(需要将$alpha提高到1以上,可能引起排序问题)
Tip.png提示:对于模型上的VertexLitGeneric(en),可使用$detail(en)配合$detailblendmode 3并修改$detailblendfactor值。细节纹理必须是带有不同alpha通道的$basetexture(en)副本。
  [todo tested in ?]

{{MatParam|$allowalphatocoverage|nolink=1|bool|基于alpha值创建半透明阶梯。可用于柔化边缘,并大幅减少远距离观看时的闪烁。
虽然不明显,但$alphatestreference仍在使用此命令时用于控制投射阴影遮罩、客户端禁用MSAA时及Hammer中(此处$allowalphatocoverage无效)。

注意
Warning.png警告:必须启用MSAA才能生效。
阶梯的粒度取决于选择的MSAA倍数;2x MSAA比8x MSAA具有更少的半透明阶梯。
Note.png注意:在8x MSAA下(测试于2(en))有7个半透明阶梯。(若包含完全不透明和完全透明则为9个)

阶梯大致分布如下:
线性值:完全透明 - 0.06 - 0.18 - 0.31 - 0.43 - 0.56 - 0.68 - 0.81 - 0.93 - 完全不透明
RGB值:完全透明 - 15 - 46 - 80 - 110 - 143 - 174 - 207 - 238 - 完全不透明
(0-255值向上取整。计算公式为线性值 * 255)

待完善: 为此制作表格。考虑其他MSAA级别。半透明阶梯数总是比MSAA采样数少1(若包含完全透明和完全不透明则多1)。
Tip.png提示:Alpha to coverage最适合锐利的高分辨率alpha通道,这能减轻因标准着色器在放大alpha to coverage纹理时缺乏锐化而固有的色带伪影。

对比

$translucent(en) $alphatest
原始图像,使用$translucent渲染
同一图像的动画预览,但使用$alphatest。首图展示$allowalphatocoverage 1效果(4x MSAA),其余展示$alphatestreference从0.1到0.9的变化。若动画未播放请点击图片。

注意右侧具有锐利alpha通道的圆环几乎无变化。

另见