版本:Unity 6(6000.0)
語言:英語
從 URP 著色器程式庫匯入檔案
在自定義 URP 著色器中使用相機

變換自定義 URP 著色器中的位置

若要在自定義通用渲染管線一系列作業,將場景的內容顯示在螢幕上。Unity 讓您可以從預先建立的渲染管線中選擇,或自行撰寫 。更多資訊
請在中查看 詞彙表
(URP)著色器在 GPU 上執行的程式。 更多資訊
請在中查看 詞彙表
中變換位置,請執行下列步驟:

  1. 在著色器檔案中的HLSLPROGRAM內加入#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"Core.hlsl檔案匯入ShaderVariablesFunction.hlsl檔案。
  2. 使用ShaderVariablesFunction.hlsl檔案中的下列方法之一。
方法 語法 說明
GetNormalizedScreenSpaceUV float2 GetNormalizedScreenSpaceUV(float2 positionInClipSpace) 將剪輯空間中的位置轉換為螢幕空間。
GetObjectSpaceNormalizeViewDir half3 GetObjectSpaceNormalizeViewDir(float3 positionInObjectSpace) 將物體空間中的位置轉換為觀看者的標準化方向。
GetVertexNormalInputs VertexNormalInputs GetVertexNormalInputs(float3 normalInObjectSpace) 將物體空間中頂點的常態轉換為世界空間中的切線、二切線和常態。您也可以同時輸入常態和物體空間中的float4切線。
GetVertexPositionInputs VertexPositionInputs GetVertexPositionInputs(float3 positionInObjectSpace) 將物體空間中頂點的位置轉換為世界空間、檢視空間、剪輯空間和標準化裝置座標中的位置。
GetWorldSpaceNormalizeViewDir half3 GetWorldSpaceNormalizeViewDir(float3 positionInWorldSpace) 傳回從世界空間中的位置到觀看者的方向,並標準化該方向。
GetWorldSpaceViewDir float3 GetWorldSpaceViewDir(float3 positionInWorldSpace) 傳回從世界空間中的位置到觀看者的方向。

結構體

VertexPositionInputs

使用GetVertexNormalInputs方法取得此結構。

欄位 說明
float3 positionWS 在世界空间中的位置。
float3 positionVS 在视图空间中的位置。
float4 positionCS 在剪辑空间中的位置。
float4 positionNDC 作为标准化设备坐标 (NDC) 中的位置。

VertexNormalInputs

使用GetVertexNormalInputs方法取得此結構。

欄位 說明
real3 tangentWS 在世界空间中的切线。
real3 bitangentWS 在世界空间中的副切线。
float3 normalWS 在世界空间中的法线。

示例

以下 URP 着色器以颜色表示其在屏幕空间中的位置来绘制对象表面。

Shader "Custom/ScreenSpacePosition"
{
    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;
                float2 uv: TEXCOORD0;
            };

            struct Varyings
            {
                float4 positionCS  : SV_POSITION;
                float2 uv: TEXCOORD0;
                float3 positionWS : TEXCOORD2;
            };

            Varyings vert(Attributes IN)
            {
                Varyings OUT;
                OUT.positionCS = TransformObjectToHClip(IN.positionOS.xyz);

                // Get the position of the vertex in different spaces
                VertexPositionInputs positions = GetVertexPositionInputs(IN.positionOS);

                // Set positionWS to the screen space position of the vertex
                OUT.positionWS = positions.positionWS.xyz;

                return OUT;
            }

            half4 frag(Varyings IN) : SV_Target
            {
                // Set the fragment color to the screen space position vector
                return float4(IN.positionWS.xy, 0, 1);
            }
            ENDHLSL
        }
    }
}

其他资源

從 URP 著色器程式庫匯入檔案
在自定義 URP 著色器中使用相機