Unity Shader 学习系列(二)第一个纯色 Shader
这篇正式进入第一个纯色 Shader:S01_SolidColor.shader。
目标很简单:先让模型稳定显示纯色,同时把最基础的 Shader 结构吃透。
1. 先创建文件
新建:
Assets/Shaders/Basic/S01_SolidColor.shader
填入代码:
Shader "Study/S01_SolidColor"
{
Properties
{
_BaseColor ("Base Color", Color) = (1, 1, 1, 1)
}
SubShader
{
Tags
{
"RenderType" = "Opaque"
"RenderPipeline" = "UniversalPipeline"
"Queue" = "Geometry"
}
Pass
{
Name "ForwardUnlit"
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
};
struct Varyings
{
float4 positionCS : SV_POSITION;
};
float4 _BaseColor;
Varyings vert(Attributes input)
{
Varyings output;
output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
return output;
}
half4 frag(Varyings input) : SV_Target
{
return _BaseColor;
}
ENDHLSL
}
}
}
2. 逐步拆解
2.1 Shader 名称
Shader "Study/S01_SolidColor" 是 Shader 菜单路径。
创建材质后,你可以在 Shader 下拉中按这个路径找到它。
2.2 Properties
_BaseColor ("Base Color", Color) = (1,1,1,1) 的含义:
_BaseColor:代码变量名。"Base Color":Inspector 显示名。Color:参数类型。(1,1,1,1):默认 RGBA。
Properties 里常见参数类型,可以先记住这几个高频:
Color:颜色(常见于主色、发光色)。Float:浮点数(常见于强度、速度、阈值)。Range(min,max):带滑块范围的浮点数(便于美术调参)。Int:整数(常见于开关状态或枚举映射)。Vector:四维向量(可存方向、参数组)。2D:二维纹理(最常见的贴图类型)。
这里先不列太多,够入门就行。后续写到贴图、溶解、动态效果时,我们会一边用一边补充。
2.3 SubShader + Tags
"RenderType" = "Opaque"
"RenderPipeline" = "UniversalPipeline"
"Queue" = "Geometry"
Opaque:不透明物体。UniversalPipeline:这个 Shader 属于 URP。Geometry:走不透明几何队列。
2.4 Pass
一个 Pass 可以理解成一次绘制规则。
这篇只用一个最小 Pass,名字是 ForwardUnlit。
2.5 #pragma 入口绑定
#pragma vertex vert
#pragma fragment frag
- 顶点阶段入口是
vert。 - 片元阶段入口是
frag。
2.6 include
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
引入 URP 的基础工具函数,本篇会用到 TransformObjectToHClip。
2.7 Attributes(顶点输入)
float4 positionOS : POSITION;
positionOS:物体空间顶点坐标(OS = Object Space)。POSITION:语义,标记这是顶点位置输入。
2.8 Varyings(阶段间传递)
float4 positionCS : SV_POSITION;
positionCS:裁剪空间坐标。SV_POSITION:系统语义,供光栅化阶段定位像素。
2.9 顶点函数 vert
output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
TransformObjectToHClip 的作用:
把物体空间坐标转换到裁剪空间坐标。
2.10 片元函数 frag
half4 frag(Varyings input) : SV_Target
{
return _BaseColor;
}
half4:四通道颜色输出。SV_Target:输出到当前渲染目标。- 直接返回
_BaseColor,所以结果就是纯色。
3. 跑起来验证
- 新建材质
Materials/S01_SolidColor.mat,Shader 选Study/S01_SolidColor。 - 挂到
Capsule。 - 调整
Base Color。 - 模型会实时变色。
4. 系列规则(后续去重讲解)
从下一篇开始,这些基础点默认不重复展开:
Properties基础写法POSITION / SV_POSITION / SV_Target基础语义#pragma vertex / #pragma fragmentTransformObjectToHClip的基础用途
后续只重点讲“新函数”或“旧函数新用法”。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Beyond Lightcone!






