Unity3D -- 图形 -- Shader概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cuit/article/details/39785349
在Unity中所有的渲染都是通过Shaders完成的,Shaders是配置显卡如何渲染的小型脚本。

Shaders在Unity中有3种方式:

  • Surface Shaders

如果想被光照和阴影 影响,那么 Surface Shaders 是最好的选择。Surface shaders 让复杂的shaders变的简洁。Surface shaders 是一种与Unity的光照流水线的抽象的更高级别。大多数Surface shaders 自动支持先行光照和延迟光照。几十行CG/HLSL代码就可以自动生成Surface shaders 。

如果跟光照不相关,就别使用Surface shaders 。对于Image Effects 或其他特效的shaders,surface shaders 是一个次优选,因为它需要做大量的光照运算。

  • Vertex Shaders 和 Fragment Shaders

如果不需要处理与光相关的东西,或者需要一些奇特的Surface Shaders做不到的效果,则需要 Vertex Shaders 和 Fragment Shaders 。这种 Shader 程序是最灵活的方式(甚至surface shaders会自动地转换成Vertex Shaders 和 Fragment Shaders),但是是有代价的:你需要写更多的代码,并且与光照的交互更困难。也是用 Cg/HLSL完成的。

  • Fixed Function Shaders

Fixed Function Shaders 用于老旧的不支持编程化shaders的硬件设备。你可能想要写 fixed function shaders 作为 Fragment Shaders 和Surface shaders 的退路,要确保你的游戏在老旧的硬件或简易的移动平台上仍然能够运行的话。Fixed Function Shaders是完全地用一种叫做ShaderLab的语言编写的,ShaderLab与微软的.FX文件或NVIDIA的CgFX很像。


ShaderLab

无论选择哪种Shaders,最终的shaders代码都会被封装成ShaderLab,用于组织Shader结构,像下面这样:

Shader "MyShader" {
    Properties {
        _MyTexture ("My Texture", 2D) = "white" { }
        // other properties like colors or vectors go here as well
    }
    SubShader {
        // here goes the 'meat' of your
        // - surface shader or
        // - vertex and fragment shader or
        // - fixed function shader
    }
    SubShader {
        // here goes a simpler version of the SubShader above that can run on older graphics cards
    }
}

建议先学习ShaderLab 的语法再学习Surface shaders 和 Vertex/Fragment Shaders,因为只有fixed function shaders 是用ShaderLab 的语法写的。


展开阅读全文

没有更多推荐了,返回首页