- GPU的运行效率高,如果是10000个顶点着色,CPU会顺序执行10000个指令,而GPU是会并行的,同时对10000个顶点进行着色。
- GPU的缺点:在并行的过程中顶点之间无法相互联系。
- 计算机中的三维模型本质上是一组包括顶点位置、法线方向、顶点颜色等信息的一组数据。
- GPU将包括三维模型在内的一系列数据进行计算,将结果提交给显示器设备。
- Shader主要编辑顶点着色器和片元着色器来影响渲染效果。
- CPU将准备的数据传送到显存,GPU再访问显存(不会直接访问内存,因为这样比较快),比较耗时的是DrawCall过程。
- 根据DrawCall原理进行优化:如果很多个网格都用的是不同Shader,就会调用多次DrawCall,如果将所有的网格用一个Shader,就会快很多。
- 顶点着色器:几何阶段的数据,对每一个顶点调用顶点着色器,计算顶点的颜色和进行坐标变换。
- 几何着色器:输入点线面等图元数据。生成新的图元,逐图元的着色,利用GPU的特性来生成新的细节,减轻CPU的负担。
- 裁剪:裁减掉无需渲染的部分,减轻后序流程负担。
- 屏幕映射:坐标映射到屏幕坐标系,不可编程,三维变成二维。
- 三角形设置:输入顶点的位置、颜色、深度等,得到三角形对屏幕像素的覆盖信息。
- 三角形变换:根据设置结果,判断像素是否被三角形覆盖,如果是,则生成片元,并且对屏幕内部的像素进行插值。(三角形内部的颜色根据三角形顶点的颜色进行插值)
- 片元着色器:根据插值结果,纹理采样、计算光照结果(对每一个像素进行光照结果的计算,这样的计算的结果比放在三角形变换里更正确、柔和)等。
- 逐片元操作:用片元像素颜色、深度等来混合和写入像素颜色。
- OpenGL与DirectX :是图像应用接口,开发者使用接口,接口调用显卡驱动,显卡驱动推动显卡工作。
- 两个简单的shader程序。
- 几种Shader简介:
- Shader程序的组成:
- Properties代码格式:_Name("DisplayName",Type)=Default Value DisplayName是在用户面板上显示的名字。最后不需要写分号。
- Subshader:做一些渲染状态设置。Cull Back :背面剔除(法线方向可以判断正反面)。 Front :正面剔除。 Off:不剔除。
Ztest:Z轴深度。Zwhite:是否要让近处景物遮挡远处的。 Blend:透明等设置。
Tag:
Subshader中的Pass会依次执行。Shader中的Pass可以互相调用。
Subshader和Pass中包含的是最重要的渲染信息。
Vertex Shader 顶点着色器 Fragment 片段着色器 Surface 基本的着色器,相当于前两个的封装。
- FallBack是本Shader中的内容不被支持时,选用哪种低级的Shader替换。