
在先导篇中,我们简单梳理了半透明(Translucent)在整个渲染管线中的定位。最后总到:半透明被我视为一种"后期"。
作为正式开篇,本文将探讨如何利用半透明材质来制作类似后期处理(Post Process)的特效,以及在这一过程中需要注意的技术细节。
在半透明材质中复现后期逻辑
我们可以直接使用后期思路来使用半透明。但有些时候直接照搬 Post Process Material 的节点往往行不通,我们需要解决几个核心差异。
解决 SceneTexture 报错
在半透明材质中直接使用 SceneTexture:PostProcessInput0 或 SceneTexture:SceneColor 等输入节点时
由于半透明与后期材质在节点上略有差异,通常会遇到如下报错:
[SM6] SceneTexture expressions cannot use post process inputs or scene color in non post process domain materials

这个机制产生的原因,是因为渲染管线的执行顺序。
正如先导篇所述,UE 的半透明渲染发生在不透明(Opaque)物体之后,但在后期处理(Post Process)之前。
如果试图在半透明阶段读取 SceneColor,由于此时屏幕颜色尚未完全渲染完毕(因为自己正在渲染中),会产生循环依赖的问题。
引擎为了支持这种需求,会在透明 Pass 开始前,把当前的 SceneColor 复制一份到一个临时纹理中。
此时,你应当需按照如下节点来使用这个临时纹理:

在半透明中计算 场景世界位置 SceneWorldPosition
另一个显著差异在于 WorldPosition 节点的行为:
- 在后期材质中 :
WorldPosition通常指代当前像素对应的场景世界位置。 - 在半透明材质中 :
Absolute World Position输出的是当前半透明模型网格顶点/像素的世界位置,而非其背后的场景位置。
在半透明材质中的Absolute World Position :

如果我们需要像后期材质那样获取"背景场景的世界位置"(例如做深度扫描、世界坐标映射贴图等),需要手动利用 场景深度(SceneDepth) 和 相机位置 进行重建:



为什么要在半透明中制作后期效果
1. 性能优化:将计算局限在特定区域
全屏后期处理(Post Process)会对屏幕上的每一个像素进行计算,开销大。而使用半透明模型载体,可以将复杂的像素着色计算(Pixel Shader)限制在模型的体积范围内,大幅节省 GPU 开销。

2. 灵活控制:利用模型形态定义特效范围
由于是基于 Mesh 的,我们可以利用模型本身的形状、UV 动画或顶点色来精确控制特效的发生区域。例如制作局部的热扭曲、力场护盾或特定区域的风格化滤镜,这比用后期材质配合 CustomDepth Mask 要直观且灵活得多。


3. 渲染管线优势:享受后续的渲染特性
这是半透明材质独特的优势。因为它的渲染时机在 Post Process 之前,所以半透明特效渲染出的结果,依然可以参与后续的渲染流程。这意味着你的特效可以被 TAA(时间性抗锯齿)、Bloom(泛光)、甚至某些 GI(全局光照)和反射效果所处理,从而更好地融入环境。
相比之下,Post Process 材质通常处于管线极后方,很难再被其他效果修饰。

假自发光

文章的最后,作为抛砖引玉,这里演示制作一个假的点光源后处理,可以很好的代表半透明做后期效果的优势:





