1.1:Get Started with Unity Shaders

文章著作权归作者所有。转载请联系作者,并在文中注明出处,给出原文链接。

第1章开始正式进入Unity Shader的学习。

什么是Shader

本系列约定,如无特殊说明,文中出现的Shader均基于Unity Shaderlab

每一门编程语言的诞生都是为了方便人们和计算机进行更好地交互。Shader是一门着色器语言,它作用于计算机Rendering(绘制,通常译为渲染)流程的一部分。GPU从CPU获取到顶点信息后,会进入顶点着色器,随后进入片元着色器(在其他shader语言中,着色器名称可能不尽相同),经过一系列变换运算,最终呈现在屏幕上(渲染管线部分可以参考冯乐乐的《Unity Shader入门精要》第二章)。而本系列介绍的Shader是以Unity的shaderlab为基础的,shaderlab除了定制着色器以外,还提供了和Unity交互的途径,自带了Unity的优化,如批处理等。话不多说,直接进入正题。

第一个Shader

我们首先来看下面这个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 program shader or
        // - fixed function shader
    }
    SubShader {
        // here goes a simpler version of the SubShader
        // above than can run on older graphics cards
    }
    FallBack "Diffuse"
}

有编程基础的可以看出一点端倪。

首先,整个Shader是包含在一个大括号里,其中“MyShader”是这个Shader在Unity工程中的标签名(注意与文件名区分开),语法是“[SubTagName/]ShaderName”

接着,可以看到Shader下有两种代码块——Properties以及SubShader

Properties:用于存放各个Shader的各个属性以及初始值,声明的属性用于暴露shader(着色器)实现过程中相关的参数值(如:材质的整体颜色等),暴露出来的属性参数可供Shader使用者进行调整、和脚本交互,以得到更多样的效果。

SubShader:SubShader是Shader代码的核心部分。由于运行终端的不同,其所能支持的渲染等级也是不同的,所以我们在必要时可以编写多个SubShader,Unity会为我们从上到下寻找并使用终端所能支持的第一个SubShader。在SubShader中,可以设置细节层级,渲染方式等,也可以插入Cg/HLSL代码块,这也是Shader核心中的核心。

最后则是FallBack, 顾名思义,这是我们唯一的退路,这是在上面所有SubShader都失效的情况下所使用的Shader。当然,我们可以通过FallBack Off禁用FallBack功能。

最后

通过上面的例子,我们就揭开了Shader的神秘面纱,在后续的分享中,会进一步讲述Shader中的各个细节。

猜你喜欢

转载自www.cnblogs.com/Li-F/p/10635532.html
今日推荐