zoukankan      html  css  js  c++  java
  • Unity3D shader脚本

    Unity中的shader脚本,是用叫做shaderlab的脚本语言来写。这个unity中的shader不只是DX中HLSL写的顶点和像素shader,而应该说是对应着
    DX中的Effect脚本,定义了一个完整渲染的状态。


    一个文件,只能包含一个unity的shader


    shader文件的内容:


    简单的一个shader的内容框架大致如下:
    shader "shader name"
    {


    properties
    {
    _Color("Diffuse Color", Color) = (1,.5,.5,1)
    _Texture("Main Texture", 2D) = ""{}
    }
    SubShader
    {
    Tags{"Queue"="Transparent"}
    pass
    {
    Tags{}
    Material{}


    }
    }
    Fallback ""
    }
    框架看上去非常简洁,大致的功能也从字面意思上面就可以理解。
    properties 中定义的变量,是可以暴露出来给编辑器编辑的,在unity编辑器中选中一个材质,材质中的shader里面定义在properties 
    中的变量就会出现该材质的属性面板中,可以手动设置对应的属性。其中,纹理属性后面,还有一些可选的属性可以设置,用于设置纹理的坐标,和其他一些属性。
    当使用顶点shader的时候,该属性标记的纹理坐标无效。




    一个SubShader相当于DX中的技术,一个shader中可以出现多个subshader。在引擎渲染物体的时候,会在shader中找到第一个可以匹配硬件的SubShader,用于渲染。
    如果一个都没有找到,则用 Fallback 中的shader来渲染物体。
    Tags 标记。SubShader 和 pass都有自己的标记。先来说说SubShader的Tags,这个Tags是用来告诉引擎该什么时候渲染该物体。一般在渲染引擎中,
    渲染物体顺序为 背景物体->不透明物体->透明物体->UI。Unity给了几个保留的关键字,Background, Geometry, Transparent,Overly.也就对应着背景,不透明,透明,UI。
    在内部,这几个关键字都对应着一个数值Background = 1000, Geometry = 2000, Transparent = 3000,Overly = 4000。所以,我们也可以把tag这样写:
    Tags{"Queue"="Geometry + 1"}
    这代表着该物体时在不透明物体渲染之后,透明物体渲染之前被渲染。

  • 相关阅读:
    zoj 2001 Adding Reversed Numbers
    hdu 2391 Filthy Rich (简单dp)
    hdu 1128 (hash)
    华为交换机有关BGP的相关配置
    Cent os 6.8添加中文字体
    Liunx之始
    自己鼓励自己
    UML用例图中包含(include)、扩展(extend)和泛化(generalization)三种关系详解(转载)
    20091125心情感觉还不错
    DataTable 行列转换
  • 原文地址:https://www.cnblogs.com/xpvincent/p/3165159.html
Copyright © 2011-2022 走看看