上午好☀️☀️☀️️
本答案参考通义千问
在Unity中使用Shader Graph为2D项目(特别是基于URP的2D项目)创建一个带有Normal Map的材质,可以让物体看起来更立体。以下是详细的配置步骤和关键点说明。
✅ 1. 确保项目设置正确
1.1 检查项目是否使用URP(Universal Render Pipeline)
- 打开
Edit > Project Settings > Player > Other Settings。 - 确保
Graphics API 和 Render Pipeline 设置为 URP。 - 如果没有,需要导入 URP 包并切换到 URP。
1.2 安装必要的包
- 打开
Window > Package Manager。 - 确保安装了以下包:
- Shader Graph
- Universal RP (URP)
- 2D Sprite(如果未启用)
✅ 2. 创建或打开 Shader Graph
2.1 新建 Shader Graph
- 在 Project 窗口中右键 →
Create > Shader > Universal Render Pipeline > Unlit Shader Graph(或 Lit,根据需求)。 - 选择 Unlit 或 Lit 类型,2D项目通常用 Unlit。
2.2 添加 Normal Map 输入
- 在 Shader Graph 中添加一个 Texture Sample 节点。
- 将其类型改为 Normal Map。
- 将该节点连接到 Normal 输入端口(注意:如果是 Unlit Shader,可能需要手动添加 Normal 属性)。
✅ 3. 配置 Material 以接受 Normal Map
3.1 创建 Material
- 右键
Project → Create > Material。 - 选择 Shader Graph 中创建的材质(如
My2DShader)。 - 在 Inspector 中找到 Shader 下拉菜单,选择你创建的 Shader Graph。
3.2 绑定 Normal Map
- 在 Material Inspector 中,找到 Normal Map 属性。
- 将你的 Normal Map 图片拖入该属性中。
✅ 4. 使用 Sprite 时确保 Normal Map 生效
4.1 设置 Sprite 的 Sprite Editor
- 选中 Sprite 图像。
- 打开
Sprite Editor(右键 → Sprite Editor)。 - 在
Sprite Mode 中选择 Multiple(如果你有多个精灵)或 Single。 - 确保 Tiling 和 Offset 设置正确。
4.2 设置 Sprite Atlas(可选)
- 如果使用 Sprite Atlas,确保 Normal Map 正确映射到对应的 Sprite。
- 可通过
Sprite Atlas 编辑器调整 UV 映射。
✅ 5. 修改 Shader Graph 代码(如有需要)
如果你使用的是 Unlit Shader Graph,默认情况下不支持 Normal Map。你可以手动添加 Normal 属性:
5.1 在 Shader Graph 中添加 Normal 属性
- 在 Graph 中添加一个 Vector 2 节点(用于 UV)。
- 添加一个 Texture Sample 节点,选择 Normal Map。
- 添加一个 Normalize 节点,将输出连接到 Normal 属性。
- 最后将 Normal 连接到 Surface Output 的 Normal 端口。
5.2 示例代码片段(若需手动修改)
// 在 Shader Graph 的 C# 代码中添加
float3 normal = UnpackNormal(tex2D(_NormalMap, IN.uv));
注意: 如果你使用的是 Unity 2021.3+,Shader Graph 已经内置了 Normal Map 支持,无需手动写代码。
✅ 6. 测试效果
- 将 Material 应用到 Sprite 上。
- 在 Scene 视图中查看效果。
- 如果没有立体感,检查 Normal Map 是否正确绑定、UV 是否正确。
🧠 关键点总结(加粗重点)
- 确认项目使用的是 URP,否则无法使用 Shader Graph 的高级功能。
- 使用 Unlit Shader Graph 更适合 2D 游戏,避免不必要的光照计算。
- 确保 Normal Map 是正确的格式(RGB),并且是 Linear Color Space。
- 在 Material 中绑定 Normal Map,否则材质不会生效。
- 在 Sprite Editor 中设置正确的 UV 映射,保证 Normal Map 正确显示。
📦 附:推荐资源
如果你需要我帮你生成一个完整的 Shader Graph 示例文件或代码片段,请告诉我!