开始编写着色器前我们需要了解的一些基础知识
-
什么是渲染管线
gpu 内部处理图形信号相互独立的并行单元,一个渲染管线(流水线)是一序列可以并行和按照固定顺序进行的阶段。 -

-
Shader
通用的 shader 是渲染流水线的某些特定阶段,例如顶点着色器阶段(vertex shader)和片元着色器阶段(fragment shader)
TODO 渲染流水线 -
UnityShader
Unity 为开发者提供的高层级的渲染抽象层,而所有 UnityShader 都是有 ShaderLab 编写的,ShaderLab 是 unity 提供的编写 Unity Shader 的一种说明性语言,
使用 ShaderLab 后开发者将不需要和许多文件和设置打交道 -
着色器语言 ShadingLaguage
- DirectX 的 HLSL(High Level Shading Language)
- OpenGL 的 GLSL (OpenGL Shading Language)
- NVIDIA Cg (C for Graphic)
-
选择哪种语言呢?
首先 GLSL 是跨平台的,但是 GLSL 得跨平台是由于 OpenGL 没有提供着色器编译器,而是由显卡驱动来完成着色器的编译工作,因此 GLSL 是依赖硬件而非操作系统的,对于
不同的硬件,编译结果会不一致。对于手游或者端游开发,我们依赖的是操作系统级的,而非硬件。
HLSL 是微软控制着色器编译,对于不同硬件,相同编译器编译结果是相同的
CG 根据平台不同,会编译成相应的中间语言,而 cg 是和微软合作的产物,因此语法和 HLSL 相像
在 Unity 中我们可以认为是等价的,因此后续我们使用"Cg/HLSL"来编写我们的着色器 -
什么是 DirectX,OpenGL
DirectX,OpenGL 是图像应用层的编程接口,这些接口用于渲染二维或者三维图像 -
什么是 DrawCall,为什么 DrawCall 多了会导致帧率下降
DrawCall cpu 调用图像编程接口,以命令 Gpu 进行渲染的操作 eg. DirextX 中的 DrawIndexedPrimitive。
每次调用 DrawCall 前,cpu 需要向 GPU 发送很多内容,包括数据,状态,命令等,在这一阶段 cpu 需要完成很多工作,例如检查渲染状态等。
完成后 gpu 开始渲染,gpu 渲染能力很强,渲染 200 或者 2000 个三角网格通常花费差不多,真正造成帧率下降的原因是 cpu 在 DrawCall 过多
之后,会花费大量时间在准备上述工作和提交 DrawCall 上。

334

被折叠的 条评论
为什么被折叠?



