(学习记录)性能优化

 ①细分着色器似乎不能支持GPU instancing,图片来源:Tessellation (catlikecoding.com)
但是
几何着色器可以:Is it possible to have GPU Instancing with Geometry shader? - Unity Forum

 

视锥体剔除

①原理:理论原理:(36条消息) 【unity】性能优化之——视锥体剔除(Frustum Culling)(一)_程序员茶馆的博客-CSDN博客

    代码原理:Unity中使用ComputeShader做视锥剔除(View Frustum Culling) - 知乎 (zhihu.com)

②实战:(36条消息) 【unity】性能优化之——视锥体剔除(Frustum Culling)(一)_程序员茶馆的博客-CSDN博客

    (36条消息) 【Unity】相机视锥体剔除算法_魔术师Dix的博客-CSDN博客

//2023.5.20

 

(7 封私信) 为什么在ndc归一化坐标已经包含了视锥体剔除功能的情况下 还需要视锥体裁剪? - 知乎 (zhihu.com)   

问:视锥体裁剪和渲染管线中几何阶段的裁剪的不同?
答:视锥体裁剪应用在CPU阶段,也就是渲染管线的应用程序阶段,我们相当于编写了一个指令,该指令就是不去渲染包围盒外的物体,然后传递给GPU,而渲染管线中几何阶段的裁剪是GPU操控的,在没有视锥体裁剪的时候,CPU将会发送所有物体给GPU进行裁剪。

//2023.5.22

 

unity中视锥体相关API

①GeometryUtility.CalculateFrustumPlanes(camera);——解释:输入摄像机,获取视锥体6个平面(AABB),返回数据类型Plane[]。

其他API:

②GeometryUtility.TestPlanesAABB(CameraSourcePlanes, bounds);——解释:输入AABB,物体mesh边界,获取一个布尔值,可判断该mesh是否在AABB内

具体代码:

为了方便我设定为挂在摄像机上了

缺点:①剔除时,阴影也会被剔除,这就导致AABB之外的物体投射到AABB之内物体的阴影消失

 左:剔除  右:未剔除

//2023.5.23

解决方案①:阴影视锥裁剪实现 - 知乎 (zhihu.com)  再聊阴影裁剪与高性能视锥剔除 - 知乎 (zhihu.com)。该方法只适用于1平行光,2透视相机

解决方案②:脚本不直接控制物体的enable而是去控制meshrender组件的shadowcastingmode为shadows only,这样设置之后物体网格就不会渲染,并保留阴影,另外也要把receive shadows关闭

      

 

 

遮挡剔除

原理:

 

对于不移动相机的场景来说,可以使用以下方法进行优化:

[Unity教程]-达哥专辑-这个高逼格场景居然不用网格模型!?Unity无模型研究-第一期_哔哩哔哩_bilibili

[Unity教程]-达哥专辑-如何欺骗眼睛让手游有3A等级画面。Unity无模型研究-第二期_哔哩哔哩_bilibili

[Unity教程]-达哥专辑-天天直播 360照片如何和3D交互?无模型场景研究-第三期_哔哩哔哩_bilibili

主要原理就是将场景拍摄成360照片,以达到无模型(也就是减少drawcall)的情况

posted @ 2023-02-27 10:36  terrificia  阅读(43)  评论(0编辑  收藏  举报