This commit is contained in:
zzz
2025-07-01 18:33:27 +08:00
parent f239c48158
commit 703071de1c
14 changed files with 372 additions and 6 deletions

View File

@@ -1,4 +0,0 @@
https://zhuanlan.zhihu.com/p/68530142 Batch的前世今生
但是因为Pass不同
透明度不同,可能需要半透明混合而另外一个不需要,就会形成两次[[DrawCall]]渲染层级不同等等原因

View File

@@ -1 +0,0 @@
一个Batch即为同一批材质的游戏对象

View File

@@ -1 +0,0 @@
CPU调用一次GPU即为一次

View File

@@ -0,0 +1,6 @@
---
原文发布链接: https://github.com/UnityPatterns/PolyMesh/tree/master
tags:
- 网格
- 2D
---

View File

@@ -0,0 +1 @@
把数据加载到显存设置渲染状态CPU调用GPU渲染的过程称之为一个Batch。这其实就是渲染流程的运用阶段最终输出一个渲染图元(点、线、面等)再传递给GPU进行几何阶段和光栅化阶段的渲染显示。一个Batch必然会触发一次或多次DrawCal目包含了该对象的所有的网格和顶点数据以及材质信息。把数据加载到显存是指把清染所蛋的数据从硬盘加载到内存(RAM),再将网格和纹理等加载到显卡 VRAM),这一步比较释时。设置清染状态就是设置场景中的网格的顶点 Verex)片元(Fragment)着色器光源属性材质等。Unitv提供的动态合批(Dvnamic Batching)合并的就是这一过程,将清染状态相同的对象合并成-个Batch减少DrawCall。

View File

@@ -0,0 +1 @@
CPU每次调用图像编程接口 glDrawElements(0penGl日中的图元清染函数)或者 DrawIndexedPrimitive(Direct中的顶点绘制方法)命令GPU渲染的操作称为一次Draw CalDraw Cal就是一次渲染命令的调用它指向一个需要被渲染的图元(primitive)列表不包含任何材质信息glDrawElements 或者 DrawIndexedPrimitive 函数的作用是将CPU准备好的顶点数据渲染出来.

View File

@@ -0,0 +1 @@
Shader脚本中一个Pass语义块就是一个完整的渲染流程一个着色器可以包含多个Pass语义块每当GPU运行-个Pass之前就会产生一个SetPassCall所以可以理解为一次完整的染流程次数。

View File

@@ -0,0 +1,19 @@
---
原文发布链接: https://blog.csdn.net/Wei_Yuan_2012/article/details/88677172?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
tags:
- 性能优化
- Batch
- DrawCall
- SetPassCall
---
- [[DrawCall]]:CPU每次调用图像编程接口 glDrawElements(0penGl日中的图元清染函数)或者 DrawIndexedPrimitive(Direct中的顶点绘制方法)命令GPU渲染的操作称为一次Draw CallDraw Call就是一次渲染命令的调用它指向一个需要被渲染的图元(primitive)列表不包含任何材质信息glDrawElements 或者 DrawIndexedPrimitive 函数的作用是将CPU准备好的顶点数据渲染出来.**在Unity FrameDebugger中每一项都是一个DrawCall**
- [[Batch]]:把数据加载到显存设置渲染状态CPU调用GPU渲染的过程称之为一个Batch。这其实就是渲染流程的运用阶段最终输出一个渲染图元(点、线、面等)再传递给GPU进行几何阶段和光栅化阶段的渲染显示。**一个Batch必然会触发一次或多次DrawCall且包含了该对象的所有的网格和顶点数据以及材质信息。把数据加载到显存是指把清染所蛋的数据从硬盘加载到内存(RAM),再将网格和纹理等加载到显卡 VRAM)**,这一步比较释耗时。设置清染状态就是设置场景中的网格的顶点 Verex)片元(Fragment)着色器光源属性材质等。Unitv提供的动态合批(Dvnamic Batching)合并的就是这一过程将清染状态相同的对象合并成一个Batch减少DrawCall。
- [[SetPassCall]]:Shader脚本中一个Pass语义块就是一个完整的渲染流程一个着色器可以包含多个Pass语义块每当GPU运行一个Pass之前就会产生一个SetPassCall所以可以理解为一次完整的染流程次数。
由此可见一个Batch包含一个或多个DrawCall都是产生是在CPU阶段而目前普遍渲染的瓶颈恰恰就是CPUGPU的处理速度比CPU快多了Draw Call太高CPU会把大量时间花费在处理Draw Call调用上如果Batch太大CPU需要频繁的从硬盘加载数据切换渲染状态这个消耗要比DrawCall大所以后面Unity才逐渐弱化了DrawCall的显示。
再提一下优化的时候还要关注下Statistics窗口上的三角形数(Tris)和顶点数(Verts),这两个数据也是会影响到性能,比如**单个物体的顶点数最好不要超过900不然会影响到Unity的动态合批**。Unity的Statistics窗口上的三角形数(Tris)和顶点数(Verts)并不仅仅是视链中的梯形内的三角形数和顶点数而是Camera中 feld ofview所有取值下的三角形数和顶点数也就是说即使当前Gam视图中看不到这个 cube只有 field ofview在1-179 范围内都看不到这个cubestats面板才不会统计GPU才不会渲染否则都会渲染而且Unity不会把模型四拆分这个模型哪怕只有1个顶点需要渲染Unity也会把整个模型都渲出来。

View File

@@ -0,0 +1,7 @@
---
原文发布链接: https://zhuanlan.zhihu.com/p/444413015?utm_psn=1903740548596097377
tags:
- 性能优化
- URP
---
- 基于安卓平台开发的。因此你需要把编辑器的环境设置如上。在Command Line Arguments上输入`-force-vulkan`让其作为vulkan api运行。