Nanite
- 原理:划分culster,按层级进行三角形的culling和lod selection(HLOD),基于compute shader,和N卡的mesh shader同目的不同路(纯软件和硬件路线)
- 开启
- 导入时勾选build nanite / 批量选中网格体右键Enable
- 几何体集合在Chaos面板的nanite settings启用
- 一些关键限制(Nantie Checklist)
- 支持静态网格,不支持骨骼动画和变形!不支持spline mesh!(一句话,只支持刚性网格体)
- 支持Chaos破碎的几何体集合(这个好)
- 材质仅支持不透明(半透明和Mask都不行!)
- 材质不支持像素深度偏移(用这种方法过度材质的要改)
- 材质不支持双面(勾了选项也没用)
- 材质不支持世界位置偏移(顶点动画不要想了)
- 材质不支持顶点绘制(同上)
- 材质不支持自定义深度(后期材质通过custom depth实现的高亮/描边等等都用不了,已实测)
(PS: Nanite虽好,限制也多,材质那块的限制基本决定了室内交互多的场景模型目前基本用不了,个人认为更多还是用于室外开放世界面数多的场景把。另外还有一个最大限制:移动端无法使用,官方说也没有为移动端开发的计划,Nanite专为下一代主机和高性能PC而生。)
Lumen
-
原理:Lumen是各种GI技术的整合,可以简单概括成SDF(Mesh距离场 + 全局距离场) + “体素”(Surface Cache) + SSGI (屏幕空间追踪)+ RSM (Reflective Shadow Map) + 硬件光追(lumen补充)
- SDF(Mesh距离场 + 全局距离场): 软光追加速结构,其中Mesh距离场在UE4里已被用于DFAO,而全局距离场是一张合并了相附近所有Mesh距离场的texture,为了避免遍历每个网格距离场的一种“低配”方案; 这俩正好对应项目设置里的两种追踪模式:Detail Tracing和Global Tracing
- Detail Tracing :前两米内的追踪使用Mesh距离场,其余范围使用Global Tracing
- Global Tracing:只追全局距离场,这种性能当然更省,质量也低一些
- Surface Cache: 软光追直接和间接光的容器,类似于体素,Nanite网格会加速捕获
- SSGI:屏幕空间追踪,这个就不说了,UE4就在用,lumen里作为软光追的补充
- RSM(反射阴影贴图):Surface Cache只覆盖相机200m范围,解决快速移动时软光追的间接光跟不上,此时只有屏幕追踪的情况
- 硬件光追:也是作为lumen里软光追的补充,Nanite网格需要设置Proxy Triangle Percent生成代理Mesh,再用代理Mesh做硬件光追
- SDF(Mesh距离场 + 全局距离场): 软光追加速结构,其中Mesh距离场在UE4里已被用于DFAO,而全局距离场是一张合并了相附近所有Mesh距离场的texture,为了避免遍历每个网格距离场的一种“低配”方案; 这俩正好对应项目设置里的两种追踪模式:Detail Tracing和Global Tracing
-
开启
-
[必要] 项目设置里全局光照设置为Lumen, 反射方法设置为Lumen,启用生成网格体距离场
-
[可选] 项目设置里硬件光追可选,作为lumen补充
-
[可选] 后期盒子里全局光照 和 反射属性部分可以调整精度
-
[可选] 项目设置中取消选中允许静态光照(Allow Static Lighting),可以为项目完全禁用预先计算的光照,
禁用静态光照还可以节约一些由于着色器排列(shader permutations)引起的静态光照开支
-
-
一些关键限制(Lumen Checklist)
- 第一个最大限制是暂时不能和静态光照同时使用(官方说后期更新说不定会支持)
- 仅支持静态网格(同Nanite)
- 材质不支持世界位置偏移(同Nanite)
- 距离场会忽略透明材质,并将遮罩材质视为不透明材质,这可能会导致叶子上出现明显的过度阴影(植物和半透明材质目前支持不好)
- 墙壁不应薄于 10 厘米 (cm),以避免漏光