About Shading Language


a shader is a type of computer program originally used for shading in 3D scenes.

Published on December 06, 2021 by shadershader

shader unity

1 min READ

In computer graphics, a shader is a type of computer program originally used for shading in 3D scenes (the production of appropriate levels of light, darkness, and color in a rendered image). They now perform a variety of specialized functions in various fields within the category of computer graphics special effects, or else do video post-processing unrelated to shading, or even perform functions unrelated to graphics


关于shader

1. 什么是shader

运行在GPU上的着色器程序

2. 什么是渲染管线
a.简单理解就是一条流水线,是一系列可以并行和按照固定顺序进行的阶段。
b.每个阶段都是从前一阶段接收输入,然后把输出结果给后一阶段。
c.传统的渲染管线就以流水线的方式处理大量的顶点、几何图元、片段。
3. 工作原理
// 按以下顺序依次从上到下:
// 1.顶层应用
// 2.图形API(OpenGL,DirectX)
// 3.顶点处理器(顶点shader)
// 4.像素处理器(像素shader)
// 5.顶点shader+像素sahder=sahder文件
// 6.FrameBuffer(帧缓冲)包括屏幕上显示的以及未显示的深度值等
  • 关于顶点着色器主要包括空间变换,纹理坐标生成,光照处理等
  • 关于片段着色器例如雾化什么的
4. 一个核心概念:DrawCall
// 1.在调用图形硬件进行CPU渲染的过程中,应用需要准备很多数据。
// 2.顶点的各种数据,变换当中使用到矩阵向量等都需要传递给GPU
// 3.这样一个调度过程CPU必须要收集数据来产生API调用
// 4.收集数据传递参数的过程非常昂贵,所以造成应用性能问题
// 5.所以减少DrawCall本质是减少CPU到GPU的调用
5.关于shader, material,texture的关系
// 1.shader是程序,其实本质就是一系列的算法,用来处理输入的顶点数据、贴图、及颜色的组合方式
// 2.公式:shader+贴图颜色等=材质
// 3.举例说明:车轮/车门等零件(贴图颜色等原材料)+生产组合方式(shder)=成品汽车(材质)
6.关于shader语言
// 三大主流:GLSL/HLSL/CG
// 1. GLSL:OpenGL Shading Language
// 2. HLSL:High Level Shading Language
// 3. CG:C for Graphic
// 另外一种目前还是非主流,苹果的Metal
// Metal:Metal Shading Language
备注:
1.CgNvidaMS一起搞的,HLSL是微软的
2.所以HLSLCG在语法和主义上有很多相通的地方
3.Cg早期在Unity中被官方使用,目前还有但是新版本中已经不用
  (猜测应该是Cg长期不更新,具体原因可以从网上找找,总之2019之后的版本中Cg逐渐被弃用,而使用HLSL)
7.关于学习和方向
  • 如果针对Unity2018之前的版本可以了解ShaderLab或者是Cg
  • 对于Unity2019之后的版本和未来跨引擎或者行业追求更高的通用性,建议HLSL
  • 纯Unity从业者可以多了解一些ShaderGraph,关于ShaderGraph我后面可能会持续更新
  • 工具分享:https://github.com/Unity-Technologies/HLSLcc