版本:Unity 6 (6000.0)
语言:English
在 URP 中编写基本的无光照着色器
在 URP 中的着色器中绘制纹理

在 URP 中编写带颜色输入的无光照着色器

此示例中的 Unity 着色器在 GPU 上运行的程序。 更多信息
参见 术语表
基本颜色 属性添加到材质中。您可以使用该属性选择颜色,着色器将使用该颜色填充 网格Unity 的主要图形基元。网格构成了 3D 世界的重要组成部分。Unity 支持三角形或四边形多边形网格。NURBS、NURMS、细分曲面必须转换为多边形。 更多信息
参见 术语表
形状。

使用“URP 基本无光照着色器”部分中的 Unity 着色器源文件,并对 ShaderLabUnity 用于定义着色器对象结构的语言。 更多信息
参见 术语表
代码进行以下更改

  1. _BaseColor 属性定义添加到 Properties 块

    Properties
    {
        [MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1)
    }
    

    此声明将标签为 基本颜色_BaseColor 属性添加到材质中

    Base Color property on a Material
    材质上的基本颜色属性

    当您使用 [MainColor] 属性声明属性时,Unity 会将此属性用作材质的 主颜色

    注意:出于兼容性原因,_Color 属性名称是保留名称。Unity 使用名称为 _Color 的属性作为 主颜色,即使它没有 [MainColor] 属性。

  2. 当您在 Properties 块中声明属性时,您还需要在 HLSL 代码中声明它。

    注意:为了确保 Unity 着色器与 SRP Batcher 兼容,请在名为 UnityPerMaterial 的单个 CBUFFER 块内声明所有材质属性。有关 SRP Batcher 的更多信息,请参阅有关 可脚本化渲染管线 (SRP) Batcher 的文档。

    顶点着色器在渲染模型时,在 3D 模型的每个顶点上运行的程序。 更多信息
    参见 术语表
    之前添加以下代码

    CBUFFER_START(UnityPerMaterial)
        half4 _BaseColor;
    CBUFFER_END
    
  3. 更改片段着色器中的代码,使其返回 _BaseColor 属性。

    half4 frag() : SV_Target
    {
        return _BaseColor;
    }
    

现在,您可以在“检查器”窗口的 基本颜色 字段中选择颜色。片段着色器将使用您选择的颜色填充网格。

Base Color field on a Material
材质上的基本颜色字段

以下是此示例的完整 ShaderLab 代码。

// This shader fills the mesh shape with a color that a user can change using the
// Inspector window on a Material.
Shader "Example/URPUnlitShaderColor"
{
    // The _BaseColor variable is visible in the Material's Inspector, as a field
    // called Base Color. You can use it to select a custom color. This variable
    // has the default value (1, 1, 1, 1).
    Properties
    {
        [MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1)
    }

    SubShader
    {
        Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }

        Pass
        {
            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 positionHCS  : SV_POSITION;
            };

            // To make the Unity shader SRP Batcher compatible, declare all
            // properties related to a Material in a a single CBUFFER block with
            // the name UnityPerMaterial.
            CBUFFER_START(UnityPerMaterial)
                // The following line declares the _BaseColor variable, so that you
                // can use it in the fragment shader.
                half4 _BaseColor;
            CBUFFER_END

            Varyings vert(Attributes IN)
            {
                Varyings OUT;
                OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
                return OUT;
            }

            half4 frag() : SV_Target
            {
                // Returning the _BaseColor value.
                return _BaseColor;
            }
            ENDHLSL
        }
    }
}

绘制纹理”部分介绍了如何在网格上绘制纹理。

在 URP 中编写基本的无光照着色器
在 URP 中的着色器中绘制纹理