ShaderLab Syntax

来源:互联网 发布:adidas旗舰店淘宝真假 编辑:程序博客网 时间:2024/06/03 19:45

ShaderLab Syntax

在Unity中,所有的Shader文件都由一个声明语言“ShaderLab”写成。文件中,一个嵌套的括号语法,描述了shader的各种东西 - 例如哪个shader属性应该被显示在材质监视窗口(Inspector窗口); 什么类型的硬件需要什么样的fallbacks操作; 使用什么类型的混合模式 等等..; 然后实际上的“shader 代码”是该文件中写在CGPROGRAM片段内的代码(查看surface shaders 和 vertex and fragment shaders)。

本篇和子篇介绍了嵌套括号“ShaderLab”语法。CGPROGRAM代码块是用常规的 HLSL/Cg 着色语言写成,请查看他们的文档页面。

Shader是一个shader文件的根命令。每个文件必须定义一个shader(且只能有一个)。它指定了每个材质中使用了它的对象如何渲染。

Syntax

Shader "name" { [Properties] Subshaders [Fallback] [CustomEditor] }

定义一个shader。它将出现在材质的inspector窗口的shader列表中的name下。Shaders可以选择一个Properties列表,显示在材质inspector窗口。然后是一个SubShaders列表,一个fallback选项,和一个可有可无的自定义编辑器声明。

Dtails

Properties

Shaders可以有一个列表的properties。Shader中每个被声明的properties都会显示在Unity的材质的inspector面板中。典型的属性比如对象颜色、纹理或只是shader所使用的任意值。

SubShaders & Fallback

每个shader是由多个sub-shaders组成。你必须定义至少一个。当加载一个shader,Unity会浏览subshaders列表,并选择第一个被用户终端设备支持的subshader。如果没有找到支持的subshaders,Unity会尝试使用fallback shader。

不同的显卡有不同的能力。他给游戏开发商提出了一个永恒的课题; 你希望你的游戏在新的硬件中看起来很棒, 但是你不希望它只在3%的玩家中有效。这就是为什么subshaders会加入。创建一个包含所有你梦想的理想特效的subshader,然后添加更多subshaders来支持老得显卡。这些subshaders肯能会用一个较慢的方式来实现你所期望的特效,或者他们选择不现实一些细节。

Shader “level of detail” (LOD) 和 “shader replacement” 是两个建立在subshaders上的技术。查看see Shader LOD and Shader Replacemement获取更多信息.

Examples

这是一个最简单的shaders:

// colored vertex lightingShader "Simple colored lighting"{    // a single color property    Properties {        _Color ("Main Color", Color) = (1,.5,.5,1)    }    // define one subshader    SubShader    {        // a single pass in our subshader        Pass        {            // use fixed function per-vertex lighting            Material            {                Diffuse [_Color]            }            Lighting On        }    }}

这个shader定义了一个默认值为(1,0.5,0.5,1)的颜色属性_Color(此属性将会在材质inspector面板上以Main Color显示)。然后定义了一个单独的subshader。这个subshader包含了一个Pass,它打开了固定管线顶点光照,并为他设置了材质。

查看更多复杂的例子请浏览Surface Shader Examples 或 Vertex and Fragment Shader Examples.