Skip to content

Commit

Permalink
[docs] 迭代文档
Browse files Browse the repository at this point in the history
  • Loading branch information
Italink committed Nov 13, 2024
1 parent d0c503f commit b3c4cc4
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 23 deletions.
41 changes: 18 additions & 23 deletions Docs/04-UnrealEngine/10.LOD不完全指南.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,11 +101,11 @@ Nanite 会分析模型几何的重要性信息,自动生成高质量的LOD,

![image-20241109114502541](Resources/image-20241109114502541.png)

在早期的LOD制作流程中,我们一般将模型与相机之间的 **距离** 作为LOD切换的判断标准,将可能制作出类似这样的 **LOD 链**
在早期的LOD制作流程中,我们一般将 模型与相机 之间的 **距离** 作为LOD切换的判断标准,每隔一段距离,切换一个精度的简模,在这种方式下我们可能会制作出这样的 **LOD 链**

![image-20241109115221157](Resources/image-20241109115221157.png)

但很快有人发现,使用 距离 似乎并不能很直观地确立LOD之间的距离间隔,因为有的模型大,有的模型小,所以引入了另一个参数 —— **屏幕尺寸(Screen Size)**我们通过综合评估 **相机距离****相机的透视矩阵** 以及模型的 **包围球半径** 来得到它,这是它的计算公式:
但很快有人发现,使用 距离 似乎并不能很直观地确立LOD之间的距离间隔,因为有的模型大,有的模型小,为了保证每个模型采用合适的精度分布,就必须为其评估出不同的距离间隔,为了解决这个问题,我们引入了另一个参数 —— **屏幕尺寸(Screen Size)**通过综合评估 **相机距离****相机的透视矩阵** 以及模型的 **包围球半径** 来得到屏幕尺寸,这是它的计算公式:

``` c++
float ConvertDistanceToScreenSize(float ObjectSphereRadius, float Distance)
Expand All @@ -122,9 +122,9 @@ float ConvertDistanceToScreenSize(float ObjectSphereRadius, float Distance)
![image-20241109121834793](Resources/image-20241109121834793.png)
可是,虽然使用屏幕尺寸确实能直观地设置LOD之间的间隔,但为不同尺寸的模型生成不均匀分布的LOD链,会导致视觉上产生的瑕疵更加明显
可是,虽然使用屏幕尺寸确实能直观地设置LOD之间的间隔,但如果为不同尺寸的模型生成LOD链的距离间隔不统一,将会让视觉上产生的瑕疵更加明显
假如我们采用屏幕尺寸百分比递减的方式生成LOD(这里为了能看出瑕疵,刻意把LOD的简化幅度调得很大):
假如我们采用屏幕尺寸百分比递减的方式生成LOD,可以看到不同模型的LOD链距离是不一致的(这里为了能看出瑕疵,刻意把LOD的简化幅度调得很大):
![image-20241109133230072](Resources/image-20241109133230072.png)
Expand All @@ -140,7 +140,7 @@ float ConvertDistanceToScreenSize(float ObjectSphereRadius, float Distance)
![image-20241109135329103](Resources/image-20241109135329103.png)
虽然使用屏幕尺寸确实可以让单个模型的LOD链组织得更加合理,但由于引擎中大量使用 距离 来为某些视觉效果进行限制(比如阴影,距离场光照...),如果为了可以保证视觉效果的平滑过渡,更建议使用这样的策略来生成LOD
虽然使用屏幕尺寸确实可以让单个模型的LOD链组织得更加合理,但由于引擎中大量使用 **距离** 来限制某些视觉效果(比如阴影,距离场光照...),如果为了可以让视觉效果更加平滑地过渡,建议使用这样的策略来生成LOD
- 使用固定的LOD距离梯度
- 根据包围球半径确定LOD的数量
Expand Down Expand Up @@ -199,13 +199,13 @@ UE5的地形运行机制非常完善,地形的LOD是通过调整曲面细分
![image-20241109210110173](Resources/image-20241109210110173.png)
UE5.1之后支持了Nanite地形,相比LOD,Nanite拥有更合理的几何组织,它通常具有更少的三角形和更保真的视觉效果:
UE5.1之后支持了Nanite地形,由于地形拿到的是一种非常标准化的模型数据,开启Nanite之后无疑会拥有更合理的几何组织,相比LOD,它通常具有更少的三角形和更保真的视觉效果:
![image-20241109211741424](Resources/image-20241109211741424.png)
虽然Nanite的调度算法相比曲面细分复杂一些,并且多了一份网格数据,但在镜头静止时,Nanite的渲染消耗明显低于LOD,并且Nanite对虚拟阴影是友好的,如果没有设备限制,Nanite地形会是更好的选择。
目前一些项目中会使用静态网格作为地形,借助世界分区的流送和HLOD可以得到更好的性能且没有地形编辑的限制,但地形主要的优势在于使用几张高分辨率(贴图的分辨率远远小于地形分辨率)的Tile贴图就可以平铺出一个很大的区域,它所占用的磁盘大小要远远小于使用模型平铺出相同精度的地形
目前一些项目中会使用静态网格作为地形,借助世界分区的流送和HLOD可以得到更好的性能且没有地形编辑的限制,但地形主要的优势在于使用几张高分辨率(贴图的分辨率远远小于地形分辨率)的Tile贴图就可以平铺出一个很大的区域,它所占用的磁盘大小要远远小于使用模型平铺出相同视觉精度的地形
## HLOD
Expand All @@ -232,40 +232,33 @@ UE5.1之后支持了Nanite地形,相比LOD,Nanite拥有更合理的几何组
但它同样也存在问题:
- 只针对静态网格资产
- 只能扩大一定的显示范围
- 会增加磁盘空间大小
目前UE提供了四种基础的HLOD生成策略,分布是:
目前UE提供了四种基础的HLOD生成策略,它们 **只针对静态网格体资产** ,分布是:
- 实例化:将单元格内的物体合并为ISM
- 合并:将单元格内的物体合并为一个网格
- 简化:将单元格内的物体合并之后进行网格简化
- 近似:将单元格内的物体合并之后进行网格近似
它们分布适用于不同的网格类别,主要可以分以下几个大类:
- 地形
- 植被
- 场景模型
- 其他
假如使用了这样的分区网格:
| GirdName | Cell Size | Loading Range | Priority | BlockOnSlowStreaming |
| --------------------- | --------- | ------------- | -------- | -------------------- |
| `MainGrid`(Default) | 12800 | 25600 | 0 | false |
| `DeferGrid` | 25600 | 25600 | -9 | true |
| `AdvanceGrid` | 51200 | 51200 | 9 | true |
| `SmallGrid` | 6400 | 12800 | -9 | false |
| `SmallGrid` | 6400 | 19200 | -9 | false |
地形主要是一些地表静态网格,分布在`AdvanceGrid`,HLOD策略是合并几何,减少 DrawCall 和 图元组件数量。
植被分布在`AdvanceGrid`中,使用 `25600` 的 HISM 进行 Partition,HLOD策略是将 HISM 合并 并退化为大小为`51200` 的ISM。
它们分布适用于不同的网格类别,主要可以分以下几个大类:
场景模型分布在 `MainGrid` 中,HLOD是剔除掉小物件,使用近似生成HLOD简模。
- 地形面片:主要是一些用来补充地表的静态网格面片(非地形组件),分布在`AdvanceGrid`,地形块的大小一般可以是25600,对于地形面片,它们会放在`51200`的Cell中,合并几何来生成HLOD,减少 DrawCall 和 图元组件数量。
- 普通模型:分布在 `MainGrid` 中,放置在`12800`的Cell中,HLOD的生成方式是剔除掉小物件,合并后简化或近似生成HLOD简模,可以具有多个HLOD级别。
- 植被:分布在`AdvanceGrid`中,使用 `25600` 的 HISM 组织 Partition,放置在`51200`的Cell中,HLOD策略是将 HISM 合并并退化为大小为`51200` 的ISM。
- 其他:一些自定义或是动态的渲染组件(如粒子,水体...),尽可能避免在远处显示,通常这类物品在远处显示需要扩大加载距离,并做好LOD,或者定制专属的HLOD生成策略。
其他包含水体以及一些自定义的渲染组件,可能需要定制专属的HLOD生成策略。
![image-20241113203356506](Resources/image-20241113203356506.png)
## 物理
Expand All @@ -275,7 +268,9 @@ UE5.1之后支持了Nanite地形,相比LOD,Nanite拥有更合理的几何组
## 特效
特效(Niagara)是一种非常特殊的渲染组件,GPU粒子使用 Computer Shader 模拟粒子运动,模拟的数据将交由粒子渲染器执行间接渲染。
**特效(Niagara)**是一种非常特殊的渲染组件,GPU粒子使用 **Computer Shader** 模拟粒子运动,模拟的数据将交由粒子渲染器执行 **间接渲染 (Indirect Rendering)**。
粒子的LOD主要体现在
> Waiting
Expand Down
Binary file modified Docs/04-UnrealEngine/Docs.pptx
Binary file not shown.

0 comments on commit b3c4cc4

Please sign in to comment.