MyShader-2 UnityShader

Unlit Shader

它是定点片元shader,也是最基础的那种。

名称

首先shader要有个名字,一般定义如下:

//中间用/
Shader "My/shader1"

位置:
在这里插入图片描述

Properties

属性块
常用的有如下:

Int

_Int("Int",Int) = 2

Float

_Float(“Float”,Float) = 2
其中的标红的 可用用float
注意:2不需要带f,语法结束也不需要加分号。

Range(范围)

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

范围0.0~3.0 默认是1.0
如图:
在这里插入图片描述

Color

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

Vector

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

2D

可以如下:
_MainTex(“main tex”,2d) = “”{}//主贴图
_FlowTex(“flow tex”,2d) = “”{}//流光图
_MaskTex(“mask tex”,2d) = “”{}//过滤图
也可以:

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

Cube

一般用于天空盒
_Cube(“Cube”,Cube) = “white”{}

小结

展示
在这里插入图片描述
对于Int,Float,Range这些数字类型的属性,其默认值都是一个数字;对于Color和Vector这类属性,默认值是用圆括号包围的四维数字向量。对于2D,Cube,3D这3种纹理,默认值稍微复杂,是一个字符串后跟一个花括号组成,其中字符串要么是空,要么是内置的纹理名称,如"white",“black”,花括号的用处是指定一些纹理属性的,5.0之前,提供了一些选项。但是之后被去除了,因为很少用。如果我们需要,就要在顶点着色器中编写代码。

Unlit Shader 总结

Unlit Shader ≠ 真正的Shader

Unity Shader实际上指的就是一个ShaderLab文件。以.shader作为后缀的一种文件。在Unity shader里面,我们可以做的事情远多于一个传统意义上的Shader。
在传统的shader中,我们仅可以编写特定类型的Shader,例如顶点着色器,片元着色器等。在Unity Shader中,我们可以在同一个文件里面同时包含需要的顶点着色器和片元着色器代码。
在传统shader中,我们无法设置一些渲染设置,例如是否开启混合,深度测试等,这些是开发者在另外的代码中自行设置的。而Unity shader中,我们通过一行特定的指令就可以完成这些设置。
在传统shader中,我们需要编写冗长的代码设置着色器的输入和输出,要小心的处理这些输入输出的位置对应关系等。而在Unity shader中,我们只需要在特定语句块中声明一些属性,就可以依靠材质来方便的改变这些属性。而对于模型自带的数据(如顶点,纹理坐标,法线等),Unity Shader也提供了直接访问的方法,不需要开发者自行编码来传给着色器。

Unity游戏引擎中,Shader Clip是一种技术,用于在顶点着色器(Vertex Shader)中嵌入一个小片段(小脚本)。它允许你在GPU上处理一些复杂的几何变换或光照计算,并将结果馈送到主着色器的其余部分,从而提高性能并简化代码结构。 使用`clip()`函数的基本步骤如下: 1. **声明Clip**: 在顶点着色器内,先宣告你要使用的Clip,通常定义为一个名为`myCustomClip`的内置类型,如`float4`或`half4`。 ```glsl #pragma vertex vert struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 pos : SV_POSITION; }; sampler2D _MainTex; float4 myCustomClip; //... ``` 2. **赋值和调用**:然后在合适的位置设置你的数据,并通过`clip()`函数调用它。例如,你可以基于UV坐标应用Clip数据。 ```glsl v2f vert(appdata v) { v2f o; o.uv = v.uv; // 使用uv作为索引来访问Clip o.pos = UnityObjectToClipPos(v.vertex); // 使用clip()函数 o.pos += tex2D(_MainTex, o.uv) * myCustomClip; // 这里假设Clip是一个颜色值,用于偏移位置 return o; } //... ``` 3. **编译和使用**:记得在Material中引用这个包含Clip的Shader,并在编辑器中预览或运行游戏查看效果。 ```csharp Shader "Custom/MyShader" { Properties { _MainTex ("Texture", 2D) = "white" {} _ColorClip("Color Clip", Color) = (1,1,1,1) } SubShader { Tags {"Queue"="Transparent" "RenderType"="Opaque"} LOD 200 Pass { CGPROGRAM #pragma vertex vert // ... 其他代码 ... // 应用你的clip数据 float4 myCustomClip = _ColorClip; // ... ENDCG } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值