Unity Shader 学习系列(一)发展历程与 URP 学习环境搭建
这篇是系列第一篇。先不急着写特效,我们先把大方向搞清楚:
Unity Shader 这些年怎么演进、为什么换代、现在该学哪套,以及怎么从 0 搭一个靠谱的学习工程。
1. Shader 学习最容易踩的坑
最常见的问题是:上来就抄代码,能跑但不知道为什么。
所以这套系列会按这个节奏走:
- 先把环境搭好。
- 再从最小可运行 Shader 开始。
- 每篇只加一点新知识,稳步推进。
2. Unity Shader 发展历程
2.1 早期:Built-in 管线时代
常见写法是 CGPROGRAM、Surface Shader、UnityCG.cginc。
优点是资料多、历史项目多;缺点是可控性和扩展性一般。
2.2 后来:SRP 时代
Unity 推出 SRP(Scriptable Render Pipeline)后,主流分成两条:
- URP:跨平台,性能和画质比较均衡。
- HDRP:偏高端画质,适合重型项目。
2.3 现在:手写 HLSL 和 Shader Graph 并行
- Shader Graph:效率高,适合快速迭代。
- 手写 HLSL:可控性强,适合理解底层和做定制效果。
建议顺序:先会手写基础,再用 Graph 提速。
3. 为什么会“换代”
核心原因可以总结成三点:
- 跨平台要求更高(移动端、PC、主机要统一维护)。
- 渲染能力要持续升级(老体系扩展成本高)。
- 团队协作要可维护(结构清晰、调试方便)。
4. 2026 年推荐学习主线
如果目标是“真正会写 Shader”,建议:
- URP 手写 Shader(主线)。
- URP Shader Graph(提效)。
- Built-in 旧写法(用于看老项目和迁移)。
5. Shader 文件结构介绍
很多人第一次看 Shader 会觉得“这文件怎么这么多层大括号”。
你先记这个思路:从外到内看,先框架,后细节。
一个典型的 URP Shader,大致长这样:
Shader "Study/Example"
{
Properties
{
// 材质面板可调参数
}
SubShader
{
Tags { "RenderPipeline"="UniversalPipeline" }
Pass
{
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
// include / struct / 变量 / 函数
ENDHLSL
}
}
}
各部分职责可以这么理解:
Shader "路径/名称":Shader 的菜单路径和名字。Properties:暴露给材质面板调参的入口。SubShader:按渲染管线和平台组织的一组渲染实现。Tags:告诉引擎“我是谁、怎么参与渲染队列”。Pass:一次具体绘制规则(可有多个)。HLSLPROGRAM...ENDHLSL:真正执行的顶点/片元代码。#pragma vertex/#pragma fragment:绑定入口函数。
后面你会频繁看到这个结构。
不用一次全记住,先把“层级关系”记住就已经很够用了。
6. 从 0 创建 Shader 学习工程
6.1 创建项目
- 打开 Unity Hub。
- 新建项目,模板选
Universal 3D。 - 项目名建议:
LearnShader。 - 选择你习惯管理的目录并创建。
6.2 检查关键配置
Window > Package Manager,确认Universal RP已安装。Project Settings > Graphics,确认绑定了 URP Pipeline Asset。- 场景里放一个
Capsule和Directional Light,后续调试方便。
6.3 推荐目录结构
Assets/
Shaders/
Basic/
Effects/
Lighting/
Common/
Materials/
Textures/
Scenes/
这个结构的好处是:后面系列扩展时不会乱。
7. 下一篇预告
下一篇就进代码实战,从第一个纯色 Shader 开始,按步骤把最基础的 Shader 流程讲透。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Beyond Lightcone!





