UE4 材质进阶 学习笔记

文章讨论了3D渲染中半透明物体的排序问题,以及如何通过提升大正方体的渲染优先级来改善视觉效果。同时,建议使用2的n次方大小的图片以减少性能损耗,并介绍了MipMap技术如何通过空间换性能。此外,文章还涉及了材质调试、法线贴图、光照函数的应用以及材质性能开销的分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

半透明排序:

大正方体包裹小正方体,这个时候引擎不知道该先渲染谁,有时候先渲染大正方体,有时候先渲染小正方体

按照真实世界来说,应该是先渲染大正方体,所以我们对半透明材质进行排序

将大正方体的排序优先级升为1,可以看出,同样的视角,大正方体先被渲染了


图片大小是2的n次方,那么消耗的性能是相对于不是2的n次方的消耗是小很多的

这里就可以有一个很明显的对比 ,所以切图最好都改为2的n次方的形式,以此减少性能的开销

现在将该图片改成2的n次方的模式:

对,还是性能消耗变小了 


用了Mip的话,距离越远,对材质消耗的性能越小

在这里改成从原切图中进行做成Mip Settings

就是和图形学Games 101中的MipMap是一样的,会生成一系列1/2 * 1/2的递归图像,用空间换性能


这里的设置,可以将原图片直接改成法线贴图 


UE4材质调试:

Debug节点点击开始预览节点

这里就会在没有连接引脚的情况下打印其数值


需要连接在自发光或者基础颜色(让玩家能够直接观察到的内容)才进行性把这个选项给勾上,这里很明显不够上

我在这里选择法线,sRGB会自动为false 


纹理旋转:


顶点法线:

像素法线:

 精度更高每个位置都会有一个法线信息 


贴花材质:用于附在其他物体的表面,可以做比较低劣的扫描效果


光照函数:



材质曲线的使用:

调黑一点,相当于就是外黑,内白

用这个才能把它放进材质内

使用该函数

把之前的曲线和CurveAlpha给它

没用曲线的效果

用了立马有黑色变白色的过渡,这里的视觉体验是阴影 


Sign:正数输出1,负数输出-1,0输出0


Distance:A到B的距离

示例:


如果这个位置没有选择对应的选项,则对应效果出不来 


Depth Fade

和其它物体有接触会有一个从1到0的过渡


按住ALT+7

这里可以看到各种各样的颜色,越偏右边的颜色,材质的性能消耗越大



材质性能开销参照表

看这里去比对


半透明材质性能开销大的原因:

1、因为材质半透明,所以它会不断的去计算透明后面的像素(半透明物体移动或者玩家视角移动都会重新计算)

2、半透明排序


如果纹理池不够了,记得设置大一些,数值是M,我项目上有遇到过



制作草风吹草动

### UE5 中的半透明阴影实现 在 Unreal Engine 5 (UE5) 中,半透明阴影的效果可以通过多种方式实现。以下是关于如何利用引擎功能以及可能的技术路径来创建高质量的半透明阴影。 #### 半透明材质的支持 Unreal Engine 提供了强大的材质编辑器支持自定义着色器逻辑[^1]。对于半透明对象,可以调整其混合模式(Blend Mode),并启用特定的功能以模拟真实的光线穿透效果。例如,在材质设置中可以选择 `Translucent` 或者更高级别的 `Masked Translucency` 来处理复杂的光照交互。 为了使半透明物体投射出逼真的阴影,需确保启用了全局光照(Global Illumination)和屏幕空间反射(Screen Space Reflections)。这些特性能够增强场景的真实感,并允许动态计算间接光对半透明表面的影响[^2]。 #### 使用 Lumen 实现实时全局照明 Lumen 是 UE5 的核心渲染技术之一,它提供了高效的实时光线追踪解决方案。通过开启 Lumen 功能,开发者可以直接获得精确的环境遮挡、反射以及其他基于物理原理的视觉反馈。这对于表现半透明材料上的柔和阴影至关重要。 具体操作上,可以在项目设置里激活 Lumen 并测试不同参数组合下的性能与画质平衡点。注意观察当存在多个光源时,是否仍然保持稳定帧率的同时展现细腻层次分明的影调变化。 #### 自定义 Shader 编写技巧 如果内置选项无法满足需求,则可尝试编写自定义 HLSL/GLSL shaders 。正如之前提到过的内容那样,虚幻具备热加载部分 shader 文件的能力 ,这极大地加快了开发周期内的迭代速度 。下面给出一段简单的代码片段作为起点: ```hlsl float4 mainPS( VertexOutput IN ) : SV_Target { float3 normalWorldSpace = normalize(IN.normal); // Compute lighting contribution here... float NdotL = dot(normalWorldSpace, lightDirection); // Apply translucency factor based on angle between normals & lights. const float kTranslucencyFactor = 0.7f; float diffuseIntensity = max(kTranslucencyFactor * NdotL , 0.f ); return float4(diffuseColor.rgb * diffuseIntensity , alphaValue ); } ``` 上述例子展示了如何根据法向量同灯光方向夹角决定最终颜色强度,从而营造出一种薄纱般的质感。 --- ### 注意事项 尽管现代 GPU 架构越来越强大,但在实际应用过程中仍需要注意优化资源消耗。特别是针对移动平台或者低端硬件配置的情况下,应该谨慎评估每一步额外开销所带来的收益比值。 此外,由于某些情况下 Shader Source Hot Reloading 可能不会生效,请参照官方文档进一步排查原因或寻找替代方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值