美文网首页Shader编程
Unity渲染管线 入门概览

Unity渲染管线 入门概览

作者: xzhuan | 来源:发表于2020-11-23 16:22 被阅读0次

    xzhuan原创稿件,转载请注明出处!

    Shader开发语言

    • HLSL: 主要用于Direct3D。平台:windows。

    • GLSL: 主要用于OpenGL。 平台:移动平台(iOS,安卓),mac(only use when you target Mac OS X or OpenGL ES 2.0)

    • CG:与DirectX 9.0以上以及OpenGL 完全兼容。运行时或事先编译成GPU汇编代码。
      CG比HLSL、GLSL支持更多的平台,Unity Shader采用CG/HLSL作为开发语言。

    Unity3d里CG如何编译

    • Windows:Direct3D GPU汇编代码

    • Mac:OpenGL GPU汇编代码

    • Flash: flash GPU汇编代码

    • Ios/Android: Unity会将CG转换成GLSL代码
      也就是除了移动平台会把CG转换成GLSL代码,其余平台都是转换成汇编代码。

    渲染管线

    Shader按管线分类一般分为固定渲染管线与可编程渲染管线。
    渲染管线(Rendering Pipeline)其实就是GPU渲染流程。你可以这样理解渲染,在一个三维坐标系下,给定一个视点(即摄相机),给定三维物体、光源以及照明模式、纹理等信息,如何绘制一幅呈现在视点画面中的二维图像的过程。
    早期GPU遵循的管线叫固定管线(Existing Fixed Function Pipeline)。

    固定管线只能配置“是否开启雾效”、“是否开启光照”、“是否开启深度测试”等一些参数,而不能控制物体与光交互的算法。不同质感的物体,比如金属和木头,金属反光强烈,看起来质感坚硬,木头反光较弱,看起来质感较软一些,金属和木头两种材质着色的算法应该是不一样的。总之,固定管线因为功能固定,无法在程序上对物体细节的表现给予更多更自由的控制,无法达到更多更炫酷的效果。
    如今已经不再需要学习固定管线了,GPU都已经进入了2.0时代,新的显卡都是可编程渲染管线了。
    所谓的可编程,就是上面所说的功能固定的那个部分,变成可以由程序员编程控制了。这样自由度就更大了,可以表现出更多的特效了。

    Vertex的输出是Fragment的输入。Vertex是顶点变换,输入和输出都需要包含顶点的position信息;Fragment是色深的变化,输出一般只有color信息。

    简单总结: 顶点变换 → 图元装配和光栅化 → 片元纹理映射和着色 → 写入帧缓存
    可编程的部分就是顶点变换和片元着色啦。

    Unity3D的四种Shader

    Unity的Shader有四种:

    1. Fixed function shader 属于固定渲染管线Shader, 基本用于高级Shader在老显卡无法显示时的备用Shader。

    2. Vertex and Fragment Shader 最强大的Shader类型,属于可编程渲染管线。使用的是CG/HLSL语言。也就是我上面说过的两种。

    3. Surface Shader Unity3d推荐的Shader类型。它是一个代码生成器,帮我们将重复的代码省去了,使得编写Shader更为容易。使用的也是CG/HLSL语言。

    4. Compute Shader 这是Unity3D新增的一种。看下度娘百科对它的介绍:

    Compute Shader技术是微软DirectX 11 API新加入的特性,在Compute Shader的帮助下,程序员可直接将GPU作为并行处理器加以利用,GPU将不仅具有3D渲染能力,也具有其他的运算能力,也就是我们说的GPGPU的概念和物理加速运算。

    Compute Shader 使用HLSL语言。

    哇卡卡~~~

    相关文章

      网友评论

        本文标题:Unity渲染管线 入门概览

        本文链接:https://www.haomeiwen.com/subject/nqrviktx.html