第二章 渲染流水线(下)---Shader语言与Draw Call
2017-10-12 16:23
405 查看
一.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 避免使用过多材质,尽量在不同网格之间共同使用同一个材质。
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 避免使用过多材质,尽量在不同网格之间共同使用同一个材质。
相关文章推荐
- OGL现代图形(顶点/纹理/状态命令/Shader)和底层渲染顺序(CommandBuffer协同并行/帧前后/drawcall过程)-持续更新
- Shader、Draw Call和渲染管线(Rendering Pipeline)
- 关于DrawCall及渲染流程的认识总结
- U3D DrawCall优化手记 (DrawCall与渲染顺序)
- [Unity3D]Shader学习笔记之渲染流水线
- Shader 入门笔记(二) CPU和GPU之间的通信,渲染流水线
- 批渲染batches与DrawCall的关系
- 【Unity Shader】渲染流水线
- Shader入门理论(二)渲染流水线之GPU
- 第二章:渲染流水线(1)
- Unity Shader 之 渲染流水线
- Unity Shader入门精要学习笔记 - 第2章 渲染流水线
- 三言两语说shader(四)渲染流水线及相关
- Unity3D Shader之路 写Shader前必须要知道的事情 渲染流水线的概括
- 文字(TTF)渲染的drawcall问题
- Unity3D中UGUI及3D模型渲染的DrawCall优化
- 【Shader基础篇】之渲染流水线
- [Unity3D]Shader学习笔记之Shader与DrawCall
- Unity3d 人物换装之 一个Shader处理3张图片 减少DrawCall
- 「UnityShader入门精要」第二章 渲染流水线