第二章 渲染流水线(下)---Shader语言与Draw Call

来源:互联网 发布:数据库设计工具 编辑:程序博客网 时间:2024/06/14 10:15
一.HLSL,GLSL,CG
GLSL:       OpenGL支持的。跨平台,编译结果依赖于硬件供应商。
HLSL:    微软控制着色器编译,仅支持微软自己的产品。
CG:          跨平台,与HLSL的语法非常像。

在unity shader 中,可以选择'CG/HLSL"或者"GLSL",但Unity shader语言并不是真正意义上的对应着色器语言,尽管它们的语法几乎一样。

二.Draw Call
1.Draw Call其实就是调用图像编程接口,如OpenGL 中的glDrawElements或者DirectX中的DrawIndexedPrimitive命令。
2.CPU 和 GPU通过命令缓冲区执行命令。
3.为什么Draw Call影响帧率
在每次调用Draw Call前,CPU需要向GPU 发送很多内容,包括数据,状态和命令等。
GPU渲染能力很强,渲染200还是2000三角网格通常没有区别,渲染速主要取决于CPU提交命令的速度。
如果DrawCall数量太多,CPU就会把大量时间花费在提交DrawCall上,造成CPU过载。

4.如何减少Draw Call
4.1 避免使用大量很小的网格,当不可避免时考虑是否合并它们。
4.2 避免使用过多材质,尽量在不同网格之间共同使用同一个材质。



原创粉丝点击