UnityShaderLab_08_Shader概念

187 阅读2分钟

「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战」。

作为一名优秀的开发者,对于技术的探求应该是永无止步的,如何让自己更进步,那就只有不停的学习,不停的充电.而这些都都是说起来容易做起来难,坚持才是难的地方 --蛙哈哈

UnityShaderLab_08_Shader概念

1.什么是Shader

  1. Shader的中文名称叫做"着色器",字面意思就是"给物体上色的机器",它是通过编写代码实现的,因此本质上是程序代码(不过有很多TA是不会写Shader的,他们会通过一些工具,比如AES等工具,通过连线的方式来实现想要的效果,不过本质还是会生成对应的代码).
  2. Shader是运行在GPU上的其目的是为了告诉GPU,如何计算和输出图像.
  3. Shader所处的阶段只是渲染流水线的一部分,它主要由顶点着色器和片段着色器组成.
  4. 编写Shader语言只要有两种
    1. 基于D3D平台的HLSL,是由微软开发的,Windows平台游戏的首选(高级着色器语言 (HLSL) - Win32 apps | Microsoft Docs)
    2. 基于OpenGL的GLSL,具有很好的移植性,在跨平台开发的时候的首选(GitHub - wshxbqq/GLSL-Card: 着色器语言 GLSL (opengl-shader-language)入门大全)

​ NVIDIA希望显卡程序的开发独立于DX和GL,于是联合微软基于HLSL开发出了CG语言,使用CG语言开发的Shader也具有良好的跨平台特性,因此CG语言成了UnityShader的首选语言.

​ 随着CG语言长久不更新,以及用户对UnityShader更多功能的需求越来越旺盛,Unity也慢慢的将Shader语言转为HLSL,不过因为CG就是在HLSL的基础上开发的,所以学习完CG,可以基本无缝切换到HLSL.

2.Shader材质的关系

Shader实际上是一段程序,它负责把输入的顶点数据按照代码里指定的方式进行处理,并对输入的颜色或者贴图进行计算,然后输入数据.

image-20220210211811713.png Shader程序,加上开发的叔叔设置,以及关联贴图等资源,为了实现某种效果,而将这些打包在一起,最终得到的就是材质(Material).材质是Shader的实例化资源,一个Shader可以实例化多个材质,最终把材质再指定给对应的模型,就可以有不同的效果啦.

image-20220210211936285.png
同学们有分清Shader和Material的关系了么?