Unity Shader常见指令和标签
来源:互联网 发布:双色球算法必中6红球 编辑:程序博客网 时间:2024/05/26 02:21
前言
学习Shader的过程中,经常见到一些不明其意的指令或标签或常量,本文记录下供以后参考,因ShaderLab语言也是不断发展的,而学习中看到的Shader很可能已过时,所以本文记录的内容也可能过时。
正文
一、Properties块中的特殊命令
二、SubShader块中的渲染状态设置指令
Blend比较复杂,包含以下几种形式:
1. Blend Off
关闭颜色混合模式,默认值
2. Blend SrcFactor DstFactor
最终颜色 = SrcFactor*源颜色(即计算出来的片元颜色值) + DstFactor*目标颜色(即颜色缓冲区中的颜色值)
3. Blend SrcFactor DstFactor,SrcFactorA DstFactorA
与2相似,只是把Alpha通道分离出来了
上述SrcFactor和DstFactor的值可以为以下任一值:
4. Blend Op
采用操作符进行计算
5. Blend OpColor,OpAlpha
与4相似,只是把透明通道分离出来了
二、SubShader块中的Tag标签
Background/Overlay/TreeOpaque/TreeTransparentCutout/
TreeBillboard/Grass/GrassBillboard 用于替代渲染和获取场景深度和法线信息 DisableBatching true/false 禁用批处理 ForceNoShadowCasting true/false 禁止投射阴影 IgnoreProjector true/false 忽略Projector,通常用于半透明物体 CanUseSpriteAtlas true/false 当该SubShader用于Sprite时用false PreviewType Plane/SkyBox 预览形状
三、Pass块中的指令
1.Name “MYPASSNAME”
为该Pass命名,用于在其他Shader中通过UsePass命令调用该Pass,即使使用小写字母命名,Unity也会自动转为大写字母,所以UsePass命令中也需写成大写字母
2.GrabPass { “TextureName”}
抓取屏幕并生成纹理,TextureName为自定义纹理名称,默认为_GrabTexture
四、Pass块中的Tag标签
MotionVectors/PrepassBase/PrepassFinal/Vertex/VertexLMRGBM/VertexLM 详见官方文档 PassFlags OnlyDirectional 仅传送主平行光、环境光和LightProbe的光照数据 RequireOptions SoftVegetation 满足给定条件才渲染该Pass
五、#prama指令
4.0/4.5(es3.1)/4.6(gl4.1)/5.0 geometry 用于geometry shader,编译目标自动设为4.0 hull 用于tessellation shader,编译目标自动设为4.6 domain 同hull vertex 顶点函数名 定义顶点函数入口 fragment 片元函数名 定义片元函数入口 only_renderers d3d9/d3d11/opengl/gles/xbox360/p3/flash 指定渲染平台 exclude_renderers 同only_renderers 排除指定平台 multi_compile_fwdadd_fullshadows 开启ForwardAdd中的阴影效果 multi_compile_fwdbase 用于ForwardBase,保证光照衰减等光照变量被正确赋值 multi_compile_fwdadd 用于ForwardAdd,保证光照衰减等光照变量被正确获取
六、Unity内置函数
用于声明阴影纹理的坐标 TRANSFER_SHADOW(o) 计算结果即为阴影纹理的坐标,o为输出结构体,需放在顶点函数中 SHADOW_ATTENUATION(i) 计算阴影衰减值,需放在片元函数中,i为片元函数的输入结构体,即上式中的o
注意:以上三个函数使用时,需保证顶点函数的输入结构体变量为v,结构体的顶点坐标为vertex,输出结构体中的顶点坐标为pos float2 ParallaxOffset (half h, half height, half3 viewDir) 为视差法线贴图计算UV偏移 fixed Luminance (fixed3 c) 将颜色转换为亮度(灰度) fixed3 DecodeLightmap (fixed4 color) 从Unity光照贴图解码颜色(基于平台为RGBM 或dLDR) float4 EncodeFloatRGBA (float v) 为储存低精度的渲染目标,编码[0..1)范围的浮点数到RGBA颜色 float DecodeFloatRGBA (float4 enc) 解码RGBA颜色到float float2 EncodeFloatRG (float v) 类似EncodeFloatRGBA float DecodeFloatRG (float2 enc) 类似DecodeFloatRGBA float2 EncodeViewNormalStereo (float3 n) 编码视图空间法线到在0到1范围的两个数 float3 DecodeViewNormalStereo (float4 enc4) 从enc4.xy解码视图空间法线
七、Unity内置变量
八、语义
z=[0(near),1(far)],w=1(正交投影)/[1/near,1/far](透视投影) WPOS 同VPOS
注:使用这两个语义定义的输入input可得到视口空间坐标:input.xy/_ScreenParams.xy
另一种等价方法:顶点函数中用ComputeScreenPos计算屏幕空间坐标,再在片元函数中用结果srcPos.xy/srcPos.w
九、宏定义
- Unity Shader常见指令和标签
- Unity shader 编译指令
- Unity Shader 常见参数
- Unity Shader 属性及标签
- unity 全息和xRay shader
- Unity之Shader Pass 的通用指令 LOD - 五
- 【Unity Shaders】Shader学习资源和Surface Shader概述
- 【Unity Shaders】Shader学习资源和Surface Shader概述
- unity Shader学习资源和Surface Shader概述
- 【Unity Shader】HSV和RGB互转的shader实现
- 【Unity Shaders】使用CgInclude让你的Shader模块化——使用#define指令创建Shader
- unity shader
- Unity Shader
- Unity-Shader
- unity shader
- Unity Shader
- Unity Shader
- Unity Shader
- Builder(建造者)模式
- 想知道账号被封的感觉么?
- Java 使用NotePad++DIY一个IDE
- TopShelf+Quartz.net实现window定时调度服务
- 静态方法详解 静态类 静态属性的对比和具体应用
- Unity Shader常见指令和标签
- 项目总结(1)
- SQL语句优化,高效率SQL
- H.264 基础及 RTP 封包详解
- C#取三个数的最大值、最小值、平均值、中间值
- Which Android runs which Linux kernel? ( Android Version --- API Level --- Linux Kernel in AOSP )
- C++ primer 薄片系列之拷贝控制
- mysql主备
- Java通过反射获取自定义注解