Unity Shader的ShaderLab语法

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

Shader简要概括:

1、Shader在可编程渲染流水线中,所处的位置是顶点着色器和片元着色器,这两个部分是高度可编程的。

2、Unity的ShaderLab是Untiy特有的着色器编程语言,他是对Cg/HLSL/的一层封装,是为了简化编程而诞生的。

3、Shader脚本和Material密切相关,和Material一起作用在GameObject上。

4、Unity的着色器包括2种类型,一种是表面着色器,一种是顶点/片元着色器。其中表面着色器其实是对顶点/片元着色器的更高一层封装,它具有简单,易用性,但同时牺牲了控制的灵活性。需要注意的是顶点/片元着色器的“顶点着色器”和“片元着色器”写在同个shader文件里面,两个不连续的过程之所以可以放在一起,也是因为Unity为用户进行了封装。

5、一个Shader可以有多个SubShader,但必须至少有一个SubShader。

6、一个SubShader可以有多个Pass,多个Pass可以实现更加复杂的效果。

Shader结构:

    shader结构包含了:声明,属性(Properties),SubShader,状态设置,标签(tags),Pass,Fallback。

1 声明:例如 shader "Custom/MyShader" {      }   其中"Custom/"表示文件路径 "MyShader"表示这个Shader的名字

2 属性:例如 Properties{  _Int("Int", Int) = 2 }  其中 _Int是在Shader脚本里面的变量名,"Int" 是在Inspector 上显示的变量名, Int 是变量的属性,= 是给这个变量默认值。

除了Int类型外,还有Float、Range(min,max)、Color、Vector、2D、Cube、3D。需要注意的是2D、Cube、3D的属性语句是:

 _2D("2D", 2D) = "white"  {}, 其中"white"是系统内置的纹理,除了“white”还有“black”、“gray”、“bump”。

3 SubShader:SubShader包含了Pass模块,状态设置模块和标签模块。Shader可以包含多个SubShader,每个SubShader的渲染级别不同,渲染过程中会选择最合适的SubShader代码块来执行。

4 状态设置:是ShaderLab提供用于设置渲染状态的指令。常见的状态设置有:

  Cull Back | Cull Front | Cull Off :剔除模式:剔除背面/正面/关闭剔除;

  ZTest Less Greater | ZTest LEqual | ZTest GEqual | ZTest Equal | ZTest NotEqual | ZTest Always :深度测试的判断条件;

  ZWrite On | ZWrite Off :开启/关闭深度测试;

  Blend SrcFactor DstFactor:开启并设置混合模式;

5 标签:是一个键值对,用于描述对象的渲染方式,形式如 Tags{ “Queue” = "Transfparent" }常见的Tags有:

  "Queue" = "Transparent" :控制渲染顺序;

  "RenderType" = "Opaque" :对着色器进行分类,可用于着色器替换功能;

  "DisableBatching" =  "True" :使用模型空间下的顶点动画可能会出现问题,指定该SubShader是否可以批处理;

  "ForceNoShadowCasting" = "True" :该SubShader是否会投射阴影;

  "IgnorProject" = "True" :表示物体是否不受Projector的影响,常用于半透明物体;

  “CanUseSpriteAtlas” = "True" :该SubShader用于精灵时,应该设置为"False";

  "PreviewType" = "Plane" :指明材质面板应该以社么形状来预览模型,一般是球形。

6 Pass:Pass可以包含命名、标签(Tags)、渲染设置。可以用UsePass命令在其他Shader里面调用该Pass。

7 FallBack:当shader里面的所有SubShader都不符合当前运行环境时,便会执行FallBack,它告诉Unity用某个特定的Shader来执行渲染,当然也可以关闭,不使用任何Shader渲染。 例如:FallBack Off / FallBack "Name"。

Unity Shader 学习笔记】ShaderLab Unity shader学习笔记 shaderlab 阅读详情

相关推荐

Unity Shader基础【三】- Unity ShaderLab语法基础

此外引用官方文档中对ShaderLab的解释: Unity中所有Shader文件都通过一种陈述性语言进行描述,称为“ShaderLab”, Shader文件中用一种嵌套式语法来描述着色器行为,如材质面板中显示的属性、使用的混合模式等等,实际的着色器代码(如HLSL/Cg)定义在CGPROGRAM与ENDCG之间。 着色器文件的根命令为Shader,每个文件都必须调用该命令进行定义,语法...

一个游戏开发的博客 1273

Unity实现角色受击身体边缘发光特效

主要为大家详细介绍了Unity实现角色受击身体边缘发光特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Unity Shader学习笔记】(六)ShaderLab语法基础

Unity中的Shader使用ShaderLab语言编写,通过嵌套结构组织着色器代码。核心内容包括:1) Properties块定义材质面板可调参数;2) 至少一个SubShader实现渲染逻辑,支持多版本适配不同显卡;3) 可选的CustomEditor定制属性面板和Fallback提供兼容性回退。常用数据类型分为基础标量(float/half)、向量(float2/3/4)、矩阵(用于变换)和纹理采样器(sampler2D等),其中float系列和采样器最常用。Shader代码框架包含名称声明、属性定义

我是一条寻水的鱼 172

2024-02-01 Unity Shader 开发入门4 —— ShaderLab 语法

ShaderLabUnity 自定义的语法规则,是专门用于在 Untiy 中编写和管理着色器的语言。​ 它提供一种结构化的方式来描述 Unity 着色器的各个部分,从而更轻松地创建和管理着色器。​ Unity 通过 ShaderLab 语言Shader 进行包装和组织。

zheliku的博客 3203

Unity ShaderLab语法基础

ShaderLab语法基础一、Shader基本介绍二、Properties(属性)1、数值类属性2、颜色和向量类属性3、纹理贴图类属性4、所有类型属性汇总三、SubShader1、SubShader的标签2、Pass的渲染状态3、Fallback 一、Shader基本介绍 shader的大致结构如下: Shader "Name" { Properties { //开放到材质面板的属性 } SubShader { //顶点-片段着色器 //或者表面着色器 //或者固定函数着色器 }

qq_40120946的博客 2069

shaderlab 基础

属性 在Properties{}中定义着色器属性,在这里定义的属性将被作为输入提供给所有的子着色器。每一条属性的定义的语法是这样的: _Name("Display Name", type) = defaultValue[{options}] _Name - 属性的名字,简单说就是变量名,在之后整个Shader代码中将使用这个名字来获取该属性的内容Display Name - 这个

baidu_28955655的博客 595

Unity3d开发(一)ShaderLab 入门 语法格式

ShaderLabUnity3d自己封装的一个调用CG/HLSL/GLSL的接口。这篇文章主要记录一下基本的用法.

阿修罗道 7692

Unity Shader - ShaderLab Syntax ShaderLab语法

目录:Unity Shader - 知识点目录(先占位,后续持续更新) 原文:ShaderLab Syntax 版本:2019.1 ShaderLab Syntax ShaderLab语法Unity中所有的Shader文件都使用强定义语言叫:“ShaderLab”。在文件中,大括号括起来的语法声明了描述着色器的各种东西——例如,Material Inspector中应该显示哪些着色器属性;要做...

Jave.Lin 的学习笔记 555

Unity Shader系列】第二篇:ShaderLab语法——Unity Shader的脚手架

摘要: ShaderLabUnity中组织Shader的声明式语言,为HLSL代码提供结构化框架。它包含三个核心部分:Properties(材质面板的可调参数)、SubShader/Pass(渲染设置与多硬件适配)和CGPROGRAM(HLSL代码块)。关键结构包括属性定义、子着色器、渲染标签和着色器函数(顶点/片元),通过语义绑定数据流。例如,Properties暴露参数给用户,SubShader适配硬件,而CGPROGRAM中的HLSL实现核心渲染逻辑。入门步骤包括创建Unlit Shader并替换代

分享unity,c#,c++相关内容 1087

Unity Shader入门】Shader编程基础:ShaderLab语法

Unity Shader基础:ShaderLab 前言 Unity ShaderShader CG/HLSL与ShaderLab ShaderLab Unity Shader模板 Unity Shader属性块 Unity Shader SubShaderUnity Shader Tags Unity Shader 渲染设置 SubShader语义块Pass SurfaceShader Fallback

承续缘 2612

Unity Shader新手避坑指南:从材质创建到ShaderLab语法全解析(2023版)

本文为Unity Shader新手提供了从材质创建到ShaderLab语法的全面避坑指南。文章详细解析了材质与Shader的关系、ShaderLab语法结构,并重点对比了Surface Shader与Vertex/Fragment Shader的适用场景与优劣,帮助开发者快速上手并避免常见错误,实现从基础到实战的进阶。

cc789的博客 579

Unity Shader (一)ShaderLab 语法

一、什么是Shader   Shader(着色器):是可以在GPU上运行的一段程序,通过Shader可以进行一些渲染相关的设置。   二、什么是ShaderLab   目前面向GPU的编程有三种高级图像语言:HLSL语言,GLSL语言,Cg语言。 HLSL语言:High Level Shading Language,由Microsoft公司提供,通过Direct3D图形软件库来编写的...

居安思危,游戏人生。 530

Unity Shader:从基础使用到动画实现全解析

Unity的精彩世界里,Shader(着色器)堪称打造独特视觉效果的魔法棒。无论是绚丽的光影、奇幻的材质,还是生动的动画,Shader都能助你一臂之力。今天,就让我们一同深入探索UnityShader的使用方法,以及如何调用Shader实现令人惊叹的动画效果。

王兆镇的博客 2796

[Unity Shader]Shader学习笔记5 - ShaderLab语法: SubShader

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34268753的博客 177

Unity Shader - ShaderLab: Name Pass的名

目录:Unity Shader - 知识点目录(先占位,后续持续更新) 原文:ShaderLab: Name 版本:2019.1 ShaderLab: Name Pass的名字 Syntax 语法 Name "PassName" 给当前的pass指定一个名字。注意内部会将名字都转为大写。 Details 指定了名字的pass可用于 UsePass 命令来应用它。 ...

Jave.Lin 的学习笔记 1699

【《Unity Shader入门精要》 提炼总结】(三)第三章·UnityShaderLab语法介绍&Properities属性类型&SubShader中的Tags

      本文由@唐三十胖子出品,转载请注明出处。  文章链接:https://blog.csdn.net/iceSony/article/details/84258594       这篇文章将总结和提炼《Unity Shader入门精要》的第三章“ShaderLab基础”的内容。 通过这篇文章,你可以知道 1)Unity中的ShaderLab语法 2)Properi...

唐三十胖子的博客 3006

Shader

初始shader Shader概述 Shader(着色器)是给GPU执行的程序。 Shader是运行在图形处理单元上,可以让开发人员直接操作图形硬件渲染功能。 Shader能开发出很多好的效果:UV动画,水,雾等一些特效。(这些用程序开发出来比较困难,性能不好) 渲染流水线,模型投影,定点着色器; Shader主要有: 固定管...

weixin_41316824的博客 324
上一篇: Unity渲染流水线
下一篇: Shader的几何数学、线性代数
PresleyGo
博客等级 码龄9年 20粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值