r.ShadowQuality 【num】 阴影质量
t.maxfps 【num】 最大帧数
stat rhi 查看内存使用
stat scenerendering 查看渲染用时
渲染过程
intro 介绍?
before rendering 渲染前
geometry rendering 渲染成几何体
rasterizing and gbuffer 光栅化 G缓存
textures 纹理
pixel shaders and materials 像素着色器
reflections 反射?
static light/shadows
dynamic lighting/shadow
fog/transparency 雾/透明
post processing 后处理
1
2
3 4 5 6是并行的
实时渲染(RTR)
延迟渲染
1.使用Gbuffer来计算一帧
2.可以获得更稳定,更高质量的渲染
3.不擅长透明表面的渲染
4.适合大型应用
5.会在刚开始下降一些性能,之后会比较平稳
前向渲染
1.着色和集合体以及材质在同一个环节计算,无论接下来出现什么功能都会在同时渲染
2.光照和着色不会延迟,会在渲染出几何体的同时完成
3.不擅长混合各种不同功能
4.擅长透明表面的渲染
5.可以使用msaa获得更好的抗锯齿效果
6.适合简单应用
7.每添加一些东西都会使性能下降
绘制过程
CPU frame0 frame1 frame2
CPU(Draw) frame0 frame1
GPU frame0
0ms 33ms 66ms
0ms
1.Animations 计算动画
2.position of models and objects
3.physics
4.AI
5.spawn and destroy, hide and unhide
..
33ms
返回结果 result
计算实际需要渲染的东西
1.distnace culling 距离剔除 几乎任何对象->lod->current max draw distance(灰色的)可以用cul distance volunm来整体设置
2.frustum culling 视锥体剔除 视角外的隐藏 按对象隐藏而不是按面隐藏
3.precomputed visibility 预计算可见性 wordsetting->precompute visibility 添加一个预计算可视性体积 点击显示->可视化->预计算可视性单元格 可以看到很多格子,每个格子有个列表记录了这个格子可以看见哪些东西,摄像机到格子中会读取这些信息 格子大小可在wordsetting中设置,高度可以在lightmass的ini文件中设置
我只找到BaseLightmass.ini文件 应该是【PrecomputedVisibility】->PlayAreaHeight=220
4.occlusion culling 遮挡剔除 这个剔除很耗费性能所以放在最后执行 超过3w~6w可能会有很大的影响
freezerendering 冻结渲染 可以停止更新渲染,其他线程正常循行,可以用来观察这一帧的剔除效果
stat initviews 提供遮挡信息
场景中超过1w~1.5w可能就会产生影响
主要是cpu的影响但是会影响到gpu
大型开放世界可能遮挡可能不怎么起作用
将零散模型拼在一起可能影响性能,因为如果视角中只看到一点点模型就会渲染整个模型(合并多边形),而分散开就只会渲染一点,可以用freezerendering命令来查看,具体看情况
几何体渲染
1.early z pass 项目设置->渲染->early z-pass
逐对象渲染而不是一个像素一个像素渲染
一个模型会调用一次绘制调用,一个模型上每多一个材质就会多一次绘制调用(drawcall)
基本不会改,也不会产生多大影响
drawcll 2000-3000低 5000高 10000可能会有问题 取决于硬件和具体事件
面不是主要影响drawcall的因素,主要是很多个材质影响
每个对象的drawcall时间最低4.96微秒(应该)
如果要减少drawcall最好大量使用大模型而不大量使用小模型,但是会增加内存,碰撞检测会更复杂(需要自己平衡)
光照贴图内存有一个最大值
最好的是先用小模型拼好,之后选取其中一部分适合合并的模型合并
所有优化只有在有需要的时候才有必要
相同的模型在不同位置没有必要合并
lod:细节层级
大型世界需要可能需要lod,剔除