在 Unreal Engine 5(UE5)的游戏开发里,我们常常遇到一个常见问题:希望某个物件看起来是半透明的,又不想用真正的透明。对环境资产来说尤其如此——大量使用透明材质会是一场性能灾难。

这些年我做过许多套「假透明」方案,这里想分享一个简单通用的做法,它不依赖任何高级技巧。核心思路是压低基础色,再把各种计算出来的数值叠进自发光通道,做出通透的错觉。

沙色地面上的紫色水晶、灰色石板与淡蓝色晶体簇,展示材质的基础色(Base Color)

基础色

同一组晶体场景在降低基础色、叠加自发光(Emissive)后的效果,紫水晶明显提亮

自发光

首先,我们可以用 Phong 模型配合法线贴图,生成基本的明暗关系与主要高光。调整暗部亮度,就能模仿出假的通透感;微调高光,又能营造出不同粗糙度的错觉。这就是自发光数值的第一层。

白色半透明晶体与深色片状晶体并排,展示用 Phong 模型配合法线图生成的基础明暗

Phong 光照

深色晶体簇与黑色片状晶体,展示调整高光亮度带来的不同粗糙度观感

Phong 高光

接下来,我们可以在上面再建第二层自发光。这里我想要的是晶体内部裂纹与纤维状杂质的外观。做出纵深的方式有很多,这里我用的是简单的凹凸偏移(BumpOffset),任何人都容易实现。当然,你也可以按需换成更合适或者更昂贵的方法。

淡紫色晶体簇、紫水晶与蓝灰色石板,展示用 Bumpoffset 叠加的第二层噪声

第二层噪声

同时,我们也给裂纹法线贴图加上 BumpOffset,并让 BumpOffset 的深度有些变化,避免效果过于统一。

以切线空间法线图显示的晶体簇与片状晶体,用于生成第二轮高光

第二层法线(切线空间)

接着,我们用第二层法线再生成一轮高光。然后把落在裂纹区域之外的高光遮掉,把剩下的高光与第二层噪声混合在一起。

深紫色晶体簇、紫水晶与黑色石板,展示第二层法线生成的第二轮高光

第二层高光

为了让晶体看起来更通透,我们用第一层与第二层的法线做两次折射计算。这样能得到一个世界空间的向量去采样天空,形成自发光的第三层。当然,如果目标平台是移动端,可以把这一步换成用各种点积运算混合出来的纯色——会损失一点细节,但整体观感依然成立。你还可以调整这一层的强度,来控制晶体看起来有多透明。

淡紫色晶体簇、黑色石板与紫水晶,展示用两次折射计算采样天空得到的第三层自发光

天空环境采样

最后,我加了一个由场景方向光向量驱动的假透射效果,模拟晶体正对光源时被照亮的样子。这一层会与前面各阶段的颜色和噪声混合,用来表现内部杂质。这一步完全是可选的,尤其对室内场景或晶簇来说——如果不合适,直接关掉或减弱这一层就好。

天空背景下的紫水晶、黄色晶体与淡紫色晶体簇,展示由方向光驱动的假透射(Fake Transmission)
天空背景下的白色晶体与黑色晶体,展示假透射层叠加后的整体观感

假透射

以上就是整体思路。由于每一层都完全可控,美术可以自由调整效果,或者把它推向各种风格化的方向。

感谢阅读。

更多材质制作拆解可以查看本站 案例教程 分类;

想了解 UE 里的写实晶体着色,可以看 Substrate 水晶材质:Unreal Engine 写实晶体着色器拆解;

想对照冰块的半透明做法,可以参考 虚幻引擎 5 冰块材质小教学。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。