Unity3D -- 图形 -- Shader概述

在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 的语法写的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值