Shader学习一

本篇博文仅仅记录自己的学习,如果对谁有帮助这将是我都荣幸。

1

渲染流水线的最终目的在于渲染一张二位纹理即生成一张图片。
首先明白渲染流水线不等于GPU流水线。如下图我自己整理的,开发者在应用阶段有绝对的控制权,在这个阶段渲染图元(点,线,三角面等)传递给下一阶段Shader学习一_第1张图片
渲染流水线的起点是CPU,渲染所需的数据从硬盘—>内存---->GPU,CPU调用DrawCall命令来进行渲染

2

GPU渲染的过程就是GPU流水线。
OpenGL的原点在左下角,
DirectX的原点在左上角。
逐片元操作是OpenGL中的说法,在DirectX中称为输出合并阶段。
OpenGL和DirectX是图像应用编程接口,架起了上层应用程序和底层GPU的沟通桥梁。
用书上的话说,应用程序运行在CPU上,应用程序可以通过OpenGL或DirectX的图形接口将渲染所需的数据,如顶点数据,纹理数据,材质参数等存储在显存中的特定区域。随后开发者可以通过图像编程接口发出渲染命令,这些渲染命令也被称为DrawCall,它们将会被显卡翻译成GPU能够理解的代码,进行真正的绘制。

3

着色语言:
DirectX的HLSL(High Level Shading Language)
OpenGL的GLSL(OpenGL Shading Language)
NVIDIA的Cg(C for Graphic)
改变一次渲染状态就要通过CPU调用DrawCall,数量一多就会把时间花费在提交DrawCall上,造成CPU过载。
批处理比较适合静态物体,当然也可以对动态物体进行批处理,但是由于物体不断运动每一帧都要重新合并然后发送给GPU,这对空间和时间都会造成一定的影响。
利用批处理,CPU在RAM把多个网格合并成一个更大的网格,再发给GPU,然后在一个DrawCall中渲染它们,使用批处理合并的网格将会使用同一种渲染状态。如果网格之间需要使用不同的渲染状态那么就无法使用批处理。不要使用过多的材质,尽量再不同的网格之间公用同一种材质。

你可能感兴趣的:(Unity,Shader)