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

Refract

From Valve Developer Community
< Zh
Revision as of 07:54, 11 January 2025 by MoRanYue (talk | contribs) (chatgpt translation)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
一个具有折射效果的func_brush(en)

Refract是一个像素着色器(en),可在所有的 起源 起源 游戏中使用。 它会扭曲其后方的物体。与(en)类似,但没有实时反射,因此不局限于平面表面。可用于创建扭曲的玻璃窗、冰等效果。

折射效果通过先渲染不包含折射表面的视图实现,然后使用法线贴图通过沿法线投影将预渲染视图中的像素坐标替换为新的像素坐标,从而扭曲图像。

Note.png注意:在旧引擎中应用于world brush(en)时将无法正常工作。
澄清: 在哪些引擎中有效?
PlacementTip.png解决方案:将具有折射效果的刷子绑定到一个func_brush上。
Note.png注意:Refract着色器应用在同一实体上的多层时,将无法正确渲染。
Tip.png提示:如果在模型上使用了折射着色器,则必须在模型的qc文件中指定$mostlyopaque参数,并为vmt设置$nowritez "1"$model "1"

请注意,排序时折射的渲染开销很高。多层折射会导致严重的重叠绘制。避免使用大量的粒子贴图或彼此重叠渲染的多个折射表面。

语法

Refract
{
	$normalmap ...
	$dudvmap ...
	$refracttint "[1 1 1]"
	$refractamount .2
}

$normalmap $dudvmap $normalmap2 $bumpframe $bumptransform $refracttint $refracttinttexture $refracttinttextureframe $refractamount $bluramount $forcerefract $envmap $envmaptint $envmapcontrast $envmapsaturation $fresnelreflection $fadeoutonsilhouette $vertexcolormodulate $basetexture $masked $forcealphawrite $nowritez $noviewportfixup $mirroraboutviewportedges $magnifyenable $magnifycenter $magnifyscale $localrefract $localrefractdepth $spitternoisetexture

注意事项

  • 目前无法定义整体alpha遮罩以指示折射效果的衰减位置。这只适用于基于刷子和模型的几何体,而不适用于粒子。为了在基于刷子或模型的几何体上实现alpha效果,可以创建一个带有alpha通道的法线贴图,并将其定义为第一个$normalmap。然后使用另一个法线贴图作为$normalmap2$normalmap2将继承第一个法线贴图的alpha,并相应地起作用。这对于模拟效果(如表面上的滚动水)非常有用,其中第一个法线贴图提供alpha,第二个法线贴图可以沿该alpha移动。
  • 如果在模型的某一部分上使用Refract,则必须在模型的qc文件中指定$mostlyopaque参数,并为vmt设置$nowritez "1"$model "1"
  • 此着色器无法与water(en)的动态反射和sky_camera(en)正常工作。仅适用于刷子,如果刷子是world geometry(en)func_detail(en)。此错误不会出现在次级摄像头(func_reflective_glass(en)func_monitor(en)portals(en))中。

另见