若要在自定義通用渲染管線一系列作業,將場景的內容顯示在螢幕上。Unity 讓您可以從預先建立的渲染管線中選擇,或自行撰寫 。更多資訊
請在中查看 詞彙表(URP)著色器在 GPU 上執行的程式。 更多資訊
請在中查看 詞彙表中變換位置,請執行下列步驟:
HLSLPROGRAM
內加入#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
。Core.hlsl
檔案匯入ShaderVariablesFunction.hlsl
檔案。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) |
傳回從世界空間中的位置到觀看者的方向。 |
使用GetVertexNormalInputs
方法取得此結構。
欄位 | 說明 |
---|---|
float3 positionWS |
在世界空间中的位置。 |
float3 positionVS |
在视图空间中的位置。 |
float4 positionCS |
在剪辑空间中的位置。 |
float4 positionNDC |
作为标准化设备坐标 (NDC) 中的位置。 |
使用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
}
}
}