ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity ShaderLab 语法基础一

2021-09-12 19:35:10  阅读:298  来源: 互联网

标签:SubShader Tags 标签 渲染 语法 Unity Pass ShaderLab


学习笔记  整理来至《Unity Shader入门精要》 

一个Unity Shader 的基础结构如下;

Shader "Name" {
  Properties {
  //开放到材质面板的属性
  }
  SubShader{
//SubShader可以写多个
  }
  FallBack "Vertexlit"
}

Properties语义支持的属性类型
属性类型例子对应CG变量类型
Int                

_Int("Int",Int) = 2

float,half,fixed

Float

_Float("Float",Float) = 4.5

float,half,fixed
Range(min,max)

_Range("Range",Range(1,10)) = 5 

float,half,fixed
Color        

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

float4,half4,fixed4
Vector

_Vector("Vector",Vertex) = (1,2,3,4)

float4,half4,fixed4
2D

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

sampler2D
Cube

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

samplerCube
3D

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

sampler3D

float 高精度类型,32位,通常用于世界坐标下的位置,纹理UV,或涉及复杂函数的标量计算,如三角函数、幂运算等

half  中精度类型,16位,数值范围为[-60000,+60000],通常用于本地坐标下的位置、方向向量、HDR颜色等

fixed 低精度类型,11位,数值范围为[-2,+2],通常用于常规的颜色与贴图,以及低精度间的一些运算变量等

比较常用的一个规则是,除了位置和坐标用float以外,其余的全部用half,颜色用fixed

subshader 语义中包含的定义通常如下:

Subshader{
    //可选的
    [Tags]
  
    //可选的
    [RenderSetup]

    Pass{
    }
    //其他Pass
}
常见的渲染状态设置选项
状态名称设置指令解释
CullCull Back/Front/Off设置剔除模式:剔除背面/正面/关闭剔除
ZTest

ZTest Less Greater/LEqual/GEqual/

Equal/NotEqual/Always

设置深度测试时使用的函数
ZWrite      ZWrite On/ Off开启/关闭深度写入
BlendBlend SrcFactor DstFactor开启并设置混合模式

在SubShader中设置了上述渲染状态时,将会应用到所有的Pass

subshader 的标签(Tags)的结构如下:

Tags {"TagName1"="Valuel" "TagName2" = "Value2"}
SubShader 的标签类型(Tags)
标签类型说明例子
Queue控制渲染顺序,制定该物体属于哪一个渲染列队,通过这种方式可以保证所有的透明物体可以在所有不透明物体后面被渲染,我们也可以自定义使用的渲染列队来控制物体的渲染顺序Tags{"Queue"="Transparent"}
RenderType        对着色器进行分类,列如这是一个不透明的着色器,或是一个透明的着色器等.这可以被用于着色器替换(Shader Replacement)功能        Tags{"RenderType"="Opaque"}
DisableBatching    一些SubShader在使用Unity的批处理功能时会出现问题,列如使用了模型空间下的坐标进行顶点动画,这时可以通过该标签来直接指明是否对该SurShader使用批处理Tags{"DisableBatching"="True"}
ForceNoShadowCasing控制使用该SubShader的物体是否会投射阴影Tags{"ForceNOShadowCasting"="True"}
IgnoreProjector        如果该标签值为"True",那么使用该SubShader的物体将不会受Porjector的影响,通常用于半透明物体.Tags{"IgnoreProjector"= "True"}
CanUseSpriteAtlas当该SubShader是用于精灵(sprites)时,将该标签设置为"False"Tags{"CanUseSpriteAtlas"="False"}
PreviewType指明材质面板将如何预览该材质,默认情况下,材质将显示为一个球形,我们可以通过把该标签的值设为"Plane","SkyBox"来改变预览类型Tags{"PreviewType"="Plane"}

上述标签仅可以在SubShader中声明,不可以在Pass中声明

Pass的标签类型(Tags)
标签类型说明例子
LightMode定义该Pass在Unity的渲染流水线中的角色Tags{"LightMode"="ForwardBase"}
RequireOptions用于指定当满足某些条件时才渲染该Pass,他的值是一个由空格分隔的字符串.目前,Unity支持的选项有:SoftVegetation.Tags{"RequireOptions"="SoftVegetation"}

特殊Pass标签:

UsePass:如我们之前提到的一样,可以使用该命令来复用其他Unity Shader中的Pass

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

标签:SubShader,Tags,标签,渲染,语法,Unity,Pass,ShaderLab
来源: https://blog.csdn.net/qq_38910626/article/details/120251745

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有