当前位置: 首页 > news >正文

【UE】材质与半透明 - 00.什么是半透明材质

本系列将聚焦于各种实用的透明效果案例实现,每篇文章篇幅不会很长。
但在讲案例之前,需要先补上一些重要的前置知识——透明材质是什么,UE 中“透明”到底意味着什么。


现实中的透明是什么?

要理解引擎里的透明,我们必须先回到现实世界,看看自然界的光学现象。
在这里插入图片描述

如果在 UE 中,你认为这些物体的透明度是多少呢?
在这里插入图片描述
在日常生活中,人们会凭直觉将物质分为:不透明 半透明 透明

我们在游戏或渲染材质里也常常设定一个“透明度”参数。但要理解的是,这并不是一个严格的物理量。
在现实中,没有单一的物理量叫做“透明度”。所谓透明现象,是光与物质发生多种复杂相互作用的综合结果——涉及折射、散射、吸收、表面反射、表面粗糙度等多个因素。

现实光学中,更准确描述透光能力的量是透射率(Transmittance),即光线穿过介质后的能量比例。
在这里插入图片描述

图示箭头代表光线传播方向。
这是一个高度简化的模型:

  • 光线在介质内可能多次散射,不一定只从背面射出
  • 介质内部可能发生全反射,增加光程,引发更多吸收
  • 吸收距离并非固定,取决于材质的微观结构
    这些更复杂的机制,会在讲到 SSS(次表面散射) 时详细展开。

影响透射率的主要因素

  1. 材料吸收系数
    决定光在传播过程中被材料分子吸收的程度。吸收能量会转化为热或其它形式。

  2. 材料厚度
    Beer–Lambert 定律 ,厚度越大,透射光强呈指数衰减。

  3. 散射现象
    材料内部的微结构会导致光线路径偏折,减少直射光强。例如玉石、乳白玻璃会发生强烈散射,使透过的影像模糊。

  4. 表面反射
    折射率变化会造成部分光被反射。即使是优质玻璃,单个界面也会反射约 4% 的入射光(无镀膜)。

UE 中的透明是什么?

从“金属值”说起

听起来关乎透明的主题,却为什么会提到“金属值”?
没错,因为透明与金属的光学本质,其实有共通的物理来源。

考虑镀膜玻璃这个例子:
在这里插入图片描述
即使是透明的玻璃,表面加上极薄的金属镀膜后,其反射率会大幅提高。

这是因为金属的光学行为是极端的导体案例
材料的复折射率 n+ikn + ikn+ik 中,消光系数 kkk 在可见光范围极大,意味着光进入极浅的深度就几乎被完全衰减。绝大部分入射光直接在表面被反射,少数透过镀膜的光才进入玻璃。

金属的反射机理

根据麦克斯韦方程组,导体的自由电子响应远强于介电体的位移电流。入射光在金属自由电子中激发强烈的感应电流,其电场与入射光存在约 90° 的相位差,导致大部分能量反射。
在这里插入图片描述

这导致除了转化为热的部分外,大部分光被反射(这就是金属镜面反射强烈的原因)。

不同金属的吸收系数随波长变化不同,这种选择性吸收与反射造成了颜色差异:

  • 金吸收蓝光,反射红黄光 → 呈金色
  • 铜反射红橙,吸收蓝 → 呈红铜色

回到镀膜玻璃,即使镀层极薄,仍能部分透光,但反射率显著提升。

透明的真实本质

那么之所以先提到“金属”,就是为了引出他:

一切物体都是“透明”的

所有物体在某种意义上都是“半透明”的。

在真实世界中,物质的光学行为是连续的光谱分布,折射率、消光系数、吸收系数都会随波长平滑变化,不存在“绝对”两极分类。

当我们沿着真实物理继续探究时,会发现:“透明”才是更贴近世界本质的材质模型,反倒是我们习以为常的“不透明”,只是为了实时计算而构建的抽象化近似。

区分是否透明,是技术上的折中

“不透明”是一种典型的技术折中,既规避了多余的渲染开销,又赋予了美术更高的可控性。

这看似“倒反天罡”的结论,就是 Shader,乃至整个图形学的本质:

  • 在有限算力下,实现最好的视觉

因此:

  • 图形学的艺术就是魔术的艺术
  • 看上去是对的就是对的

接下来的文章中,我们要牢牢记住这两条共识。在把玩“透明”的时候,我们非常需要依赖这样的思路。

透明材质

现在我们已经理解,在 UE 的材质系统中,
不同的混合模式(如 Opaque、Translucent、Masked)和着色模型,其实都是为了减少计算量而存在的技术折中。

真实透射率渲染的计算代价

但是这会有一个看似合理的疑问:
既然透射率是自然界的真实物理属性,为什么不让所有物体都按真实透射率渲染?
石头用低透射率,玻璃用高透射率,不就是更接近现实吗?
在这里插入图片描述
在这里插入图片描述

1.真实透射率渲染的计算代价

在物理正确的透明渲染中,我们至少需要处理:

  1. 光线的折射与反射分配(菲涅尔方程)
  2. 在介质内部的多次散射与吸收(Beer–Lambert + 相函数)
  3. 厚度与体积效应(非平面材质,光程变化)
  4. 透射后还要继续参与场景光照计算(光线继续传播到其它物体、再反射回来)

这意味着,每一个透明像素都可能:

  • 发出多条二次射线(Refraction + Transmission)
  • 多次进入材质内做体积采样
  • 在屏幕空间甚至需要回溯遮挡(Scene Color / Depth 比对)

这种渲染过程的时间复杂度通常接近:
O(npixels×nbounces) \mathcal{O}(n_{\text{pixels}} \times n_{\text{bounces}}) O(npixels×nbounces)

而如果我们假设材质材质不透明,在实时渲染中通常只有一次着色计算 O(npixels)\mathcal{O}(n_{\text{pixels}})O(npixels)

2. UE 的渲染管线限制

在 UE 的实时渲染架构中:

  • Opaque 材质会被提前写入深度缓冲(Z-Buffer),从而后续的像素可以快速剔除(Early-Z Pass,性能极高)。
  • Translucent 材质无法参与这一优化,因为它需要依赖已经渲染的背景色(Scene Color),必须按屏幕顺序渲染,并且每个像素都要做混合(Alpha Blend),无法丢弃计算。
3. 透明材质引发的排序问题

透明材质渲染有严格的前后顺序要求

  • 如果先渲染背景,再渲染前景透明物体,混合才能正确。
  • 如果物体之间互相透明,必须进行排序(Depth Sort),否则画面会出错。

这在多物体场景中会让显存和 CPU 负担显著增加。
相反,不透明物体的渲染没有这个顺序约束,批处理效率高。

4. 多层透明的指数级负担

假设场景中有 5 层彼此叠加的半透明物体(比如玻璃窗后的水杯里的冰块):

真实透射率渲染意味着:

  • 每层都要读取并混合已经渲染的颜色数据
  • 每层的混合依赖前面所有层,不能并行
  • 多次的采样和混合叠加消耗显存带宽

性能消耗与透明层数几乎呈指数增长。

5. 实时渲染的取舍

由于透明渲染的这些先天缺陷:

  • 没有 Early-Z 优化
  • 需排序处理
  • 多次采样混合
  • 光线追踪近似计算

好吧你肯定没看,简单解释一下。
非透明只用渲染距离屏幕最近的一个面
而半透明,需要渲染所有的面,而且每个面的结果都依赖于更远的一个面的结果

这个排序需要对每一个像素进行多次的采样和混合叠加,非常消耗显存带宽。
如果不这样(实际算力做不到),就会造成排序问题:
在这里插入图片描述

如果不是为每个像素单独排序,而是以模型三角面为准呢?
那如图所示,红色面在前,还是白色面在前?
在这里插入图片描述
这很难说,以目前算力就只能做到这种程度

透明乱序是个难解的问题,以后单独会讲
在这里插入图片描述

项目设置中的这些选项,可以改变排序计算方式(并没有真正的"像素排序"规则)
在这里插入图片描述

材质细节中的光照模式,确定透明模型如何收到光照影响(·向前着色·为基于像素的解法)
在这里插入图片描述

透明材质是如何渲染

为什么半透明材质会有单独的排序设置光照设置
原因很直接:在渲染管线中, 计算飞快的不透明相对缓慢的半透明 是分开处理的。

渲染管线总览

首先看一下 UE 中的渲染管线流程:
请添加图片描述

1. 渲染非透明物体

假设场景中,有两个透明模型夹在两件不透明模型之间:
在这里插入图片描述

引擎会 优先渲染不透明物体 ,忽略半透明:
在这里插入图片描述

这一阶段会输出完整的 GBuffer 数据:基础颜色、法线、深度等。
有了这些数据,光照和反射几乎可以得到最终画面:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

管线进度示意:
① 完成 GBuffer
② 完成光照计算
③ 完成反射
④ 得到最终画面
目前进度截至到最终画面
在这里插入图片描述

2. 渲染后处理阶段

得到最终画面后,下一步才进入 PostProcessing(后处理) 阶段。
那么,透明物体在哪里被计算呢?
在这里插入图片描述

半透明属于后处理 - Additional阶段与Post阶段

从管线图可知,半透明渲染(Translucency)属于 附加 Additional 阶段,位于后处理 PostProcessing

Additional 阶段包括:半透明材质、体积雾等

虽然它出现在后处理之前,但本质上依赖已经完成的 GBuffer 数据,因此可以视为为一种“后处理式”渲染。
半透明①的渲染仅以附加 Additional的名义存在于后处理 PostProcessing②之前。

可以仔细的看看附加 AdditionalTranslucency的流程,Transparent 渲染基本上会头计算一遍半透明的光照与反射的计算
在这里插入图片描述

不过你可能会说,附加 Additional不是在后处理 PostProcessing②之前吗?为什么可以视为后处理?

半透明通道

实际上,我们可以在透明材质细节设置中使用半透明通道

通过这个设置,你可以让透明材质与自定义后期(Post Material)在渲染顺序上混合:

半透明Post完全混在一起,随意的更改透明在后处理阶段中的顺序
在这里插入图片描述

用一张示意图来描述的话,①和②都是相机前的一层层面片模型(面积填充相机画面):
①为排序后的半透明,每一层就是 一个 渲染的透明模型
②为Post中的各种特效和自定义特效,泛光,景深,动态模糊等,他们也是有先后顺序的
在这里插入图片描述
通过半透明通道可以调整每个透明材质(自定义后期处理材质也同样设置),在后期中的先后顺序,最终可以完全混编半透明与Post,因此可以说,半透明就是后期
在这里插入图片描述

使用半透明材质制作的后期效果
请添加图片描述

我们理清了半透明在管线里的地位。

那么回到示例,现在我们对半透明排序,然后由远到近渲染半透明
先渲染最远的
在这里插入图片描述
然后由后到前逐个向前渲染,直到完成
在这里插入图片描述

我们怎么将其放回画面呢?
获取不透明阶段的场景深度(Scene Depth) GBuffer
在这里插入图片描述

与透明物体的深度相减,得到遮罩
在这里插入图片描述

用计算得到的遮罩,剔除被遮挡的部分的颜色
在这里插入图片描述

然后水灵灵的将其混合到画面,这样我们就完成了渲染
在这里插入图片描述

禁用深度测试

这一步,用两个深度生成模板来扣除遮挡部分的计算,叫做深度测试
默认情况下,透明材质会执行深度测试来剔除被遮挡部分:
可以勾选 Allow Custom Depth Writes 来禁用深度测试,跳过遮挡判断:
在这里插入图片描述

没有计算遮蔽这一步,透明物体会无视场景深度,看起来始终在最前方
在这里插入图片描述
在这里插入图片描述


结语

好了,至此我们已经对透明材质的概念有了一个初步的认知。

接下来,我们将通过一系列实际案例与创意玩法,逐步攻克各种有关透明的需求,在实践中进一步理解和掌握它。

这将涉及图形学、光学、甚至摄影学的,在这个过程中,你会看到不同领域的知识如何交织在一起。

http://www.dtcms.com/a/494750.html

相关文章:

  • FPGA基础 -- 无毛刺时钟切换(glitch-free clock switching)
  • Vhost架构解析:vhost-net与vhost-user详解
  • 西安建设商城类网站html静态网站源码
  • 一个基于双向时序卷积网络(BiTCN)的时间序列预测MATLAB程序
  • 【超详细】C#自定义工具类-StringHelper
  • 网站关闭与域名备案怎么设置网页版浏览器
  • 11G显存DPO强化学习微调实战
  • 在 Ubuntu 上安装 MinIO 并使用 Python 封装类操作对象存储
  • 基于DDGS实现图片搜索,文本搜索,新闻搜索
  • 点胶喷嘴技术支持东莞网站建设昆明软件定制
  • 怎样做钓鱼网站网站编辑教程
  • AI驱动软件测试全流程自动化:从理论到实践的深度探索
  • 开源接口管理工具PostIn,从安装到入门零基础指南
  • 构建未来的智能体:Coze 的能力、部署与应用场景
  • DBCO-Sulfo-NHS ester酯,1400191-52-7在生物正交连接体系中的作用机制与功能开发
  • 【cursor】通用开发环境配置指南(AI辅助开发最佳实践)
  • 【数据结构】双向链表“0”基础知识讲解 + 实战演练
  • 药品经营许可证识别技术:通过深度学习算法实现资质文件的自动化识别与核验
  • 网站的建设思想企业app定制
  • YOLOv3 目标检测算法核心技术
  • MySQL 主从复制故障排查及解决方案
  • 告别单打独斗:多智能体协作如何解决复杂问题?
  • Netty连接断开检测:Epoll与NIO的对比及实战解决方案
  • 神经网络之反向传播
  • el-table-column show-overflow-tooltip 只能显示纯文本,无法渲染 <p> 标签
  • (定时任务)接上篇:定时任务的分布式执行与分布式锁使用场景
  • 广州网站制作哪家专业凡科互动游戏可以作弊码
  • caching_sha2_password认证插件说明
  • 13.继承(一)
  • vue3:el-progress的圆形无线滚动,心跳、呼吸效果,加载中的效果