Unity中的Shader的形态

Unity通过ShaderLab来组织Shader
作为一款号称跨平台性最好的游戏开发引擎,Unity使用自定义使用Mono这个开源的.NET来实现。对于要适应不同的GPU的Shader来说,Unity使用自定义ShaderLab来组织Shader的内容,并会针对不同的平台进行编译。
1.关键字Shader
Unity的Shader文件是通过Shader这个关键字来开始的,用户可以像目录一样组织Shader的命名,Shader的文件名和引用名不必一样,举例如下

Shader "Tut/NewBie/FirstShader"{
    Properties {
            _MainTex("Base (RGB)",2D)="white" {}
}
SubShader{
...
}
SubShader {
...
}
FallBack"Diffuse"
}

2.SubShader的重要标签
给SubShader添加标签(Tags{}块),其实这就是一系列指示牌,这些标签可以告诉Unity渲染引擎,或者其他用户如何认证这个SubShader。下面的代码是适应于SubShader的BuildIn类Tags;

SubShader {
Tags{"Queue"="Geometry""RenderType"="Opaque""IgnoreProjector"="True"}
}
//Queue就是队列的意思,在这里就是渲染队列的意思,表示希望Unity渲染引擎在什么时候渲染自己。Queue有5个可选值,它们就是Background,Geometry,AlphaTest,Transparent和Overlay,分别是对应数字1000,000,2450,3000,4000,既然可以对应成数字,当然也可以把这些单词当作整型变量来看待,例如:
Tags{"Queue"="Geometry+1314"}
//当你混合使用自定义的Shader和Unity的内置Shader时,一定要尊重上面的单词和字母的对应关系,因为,Unity的内置Shader就是按照这个顺序来渲染的,

下面是RenderType标签,其常用的内置值有Opaque,Transparent,TransparentCutout,Background,Overlay.这个标签在替代渲染做Post Effetcs时很重要,Unity内置的Image Effects就是根据它来决定如何替代渲染,除此之外,如果你想到场景的一张ZDepth和Normals的快照,一个正确的RenderType是必不可少的。

IgnoreProjector比较简单,值为True时,表示当前物体忽略Projector的影响。
你还可以为SubShader添加自定义的标签,例如
Tags{"MyTag"="Lucifer"}
这种做法一般会在做替代渲染时用到。
  1. SubShader中的Pass块
    SubShader包装了一个渲染方案,而这个方案是由一个个Pass块来执行的。SubShader可以包括多个Pass块,每一个Pass块都包含了渲染一个几何体的具体代码。我们如果写Shader,大部分费力且能体现每位读者的劳动价值的地方就是Pass块中。
    4 . Pass块的标签及其名字的意义
    Pass块的内置的那些标签都是针对渲染路径的,告诉渲染引擎这个Pass应该在什么渲染路径下被渲染。
Pass块的Name一般用来引用此Pass.这种引用意味着可以定义一个Pass块,然后再其他Shader的Pass块中的多次引用它,这是一种减少重复劳动的技巧,请牢记,下面是这种技巧的一个演示;
Shader "Tut/NewBie/SecondShader"{
SubShader {
       Pass{ 
            Name "MYM"
            Material{
                     Diffuse(1,0.7,0.4,1)
                     Ambient(1,0.7,0.4,1)
                    }
                    Lighting On
                    SetTexture[_]  {combine primary}       
                     }
        }
}

这个Shader命名了一个Pass块,由于Unity的原因,命名是必须使用大写,下面这个Shader则通过名字引用了此Pass块:

Shader "Tut/NewBie/ThiedShader" {
SubShader {
           UsePass "Tut/NewBie/SecondShader/MYM"
          }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值