猫教父 2025-07-31 10:05 采纳率: 0%
浏览 2

Unity的shadergraoh2D材质

怎么配置2DURP的shadergraph,让这个材质球能接受normalmap变成立体的那种材质?

img

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2025-07-31 10:06
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    在Unity中使用Shader Graph为2D项目(特别是基于URP的2D项目)创建一个带有Normal Map的材质,可以让物体看起来更立体。以下是详细的配置步骤和关键点说明。


    ✅ 1. 确保项目设置正确

    1.1 检查项目是否使用URP(Universal Render Pipeline)

    • 打开 Edit > Project Settings > Player > Other Settings
    • 确保 Graphics APIRender 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,根据需求)。
    • 选择 UnlitLit 类型,2D项目通常用 Unlit

    2.2 添加 Normal Map 输入

    • 在 Shader Graph 中添加一个 Texture Sample 节点。
    • 将其类型改为 Normal Map
    • 将该节点连接到 Normal 输入端口(注意:如果是 Unlit Shader,可能需要手动添加 Normal 属性)。

    ✅ 3. 配置 Material 以接受 Normal Map

    3.1 创建 Material

    • 右键 ProjectCreate > 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
    • 确保 TilingOffset 设置正确。

    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 OutputNormal 端口。

    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 是否正确。

    🧠 关键点总结(加粗重点)

    1. 确认项目使用的是 URP,否则无法使用 Shader Graph 的高级功能。
    2. 使用 Unlit Shader Graph 更适合 2D 游戏,避免不必要的光照计算。
    3. 确保 Normal Map 是正确的格式(RGB),并且是 Linear Color Space
    4. 在 Material 中绑定 Normal Map,否则材质不会生效。
    5. 在 Sprite Editor 中设置正确的 UV 映射,保证 Normal Map 正确显示。

    📦 附:推荐资源


    如果你需要我帮你生成一个完整的 Shader Graph 示例文件或代码片段,请告诉我!

    评论

报告相同问题?

问题事件

  • 创建了问题 7月31日