unityshader学习笔记2

UnityShader基础结构:

Shader "Custom/MyShader" //shader的名字以及路径

{

    Properties

 {

  //属性

    }

    SubShader

    {

        //显卡A使用的子着色器

 }

 SubShader

    {

        //显卡B使用的子着色器

    }

 Fallback "Diffuse"

}

 

*属性:

Name ("display name", PropertyType) = DefaultValue

属性名 ("显示名称", 类型) = 默认值

 

//Number and Sliders

_Int ("Int", Int) = 2

_Float ("Float", Float) = 1.5

_Range ("Range", Range(0.0, 5.0)) = 3.0

 

//Colors and Vectors

_Color ("Color", Color) = (1,1,1,1)

_Vector ("Vector", Vector) = (2,3,4,5)

 

//Textures

_2D ("2D", 2D) = "" {}

_Cube ("Cube", Cube) = "white" {}

_3D("3D", 3D) = "black" {}

 

*SubShader

每个UnityShader文件至少包含一个SubShader语义块,当Unity需要加载UnityShader时,会扫描所有的SubShader语义块,然后选择第一个能给在目标平台上运行的SubShader.如果都不支持,Unity就会使用Fallback语义指定的UnityShader.

SubShader通用定义:

SubShader

{

  //标签(可选)

  [Tags]

  //状态(可选)

  [RenderSetup]

  //Pass定义了一次完整的渲染流程

  Pass { }

  //Other Passes

  //如果Pass过多,会造成渲染性能下降

}

状态设置:ShaderLab提供了一系列渲染状态的设置指令

设置渲染状态时,将会应用到所有Pass,也可以在Pass语义块中单独进行设置

 

 

标签(Tags),是一个键值对,键和值都是字符串,用于告诉Unity的渲染引擎,怎样以及何时渲染这个对象,结构如下:

Tags  {  Tag1” = Value1”  “Tag2” = Value2”  }

 

 

Pass语义块

Pass

{

  [Name]

  [Tags]

  [RenderSetup]

  //other code

}

可以在Pass中定义该Pass的名称,:

 Name MyPass

可以使用ShaderLabUsePass命令来直接使用其他UnityShader中的Pass,:

UsePass MyShader/MYPASS

注意:Unity内部会把所有Pass名称转换成大写字符,因此在使用时必须用大写形式的名字.

 

Pass同样可以设置标签:

 

 

 

UintyShader还支持一些特殊的Pass:

UsePass:可以使用该命令来复用其他UnityShader中的Pass.

GrabPass:负责抓取屏幕并将结果存储在一张纹理中,以用于后续的Pass处理.

 

留一条后路: Fallback

posted @ 2020-01-19 15:48  亲爱的贤锅锅  阅读(225)  评论(0编辑  收藏  举报