Depth API-Referenz für Shader-Bibliotheken
API-Referenz für EnvironmentOcclusion-Shader-Bibliotheken
Beschreibung
Wird in der Fragment-Shader-Eingabestruktur verwendet. Entspricht:
float3 posWorld : TEXCOORD##number;
Parameter:
number-Typ: int. Wert, der auf TEXCOORD##number angewendet wird
Beschreibung
Wird im Vertex-Shader verwendet. Konvertiert vom Objektraum in den Weltenraum und übergibt ihn an die Vertex-Ausgabe.
Parameter:
output-Typ: struct. Stellt die Vertex-Ausgabe dar.input-Typ: float3. Stellt die SV_POSITION der Vertex-Eingabe dar.
Beschreibung
Wird im Fragment-Shader verwendet. Berechnet den Wert der Verdeckung an der Position „posWorld“.
Parameter:
posWorld-Typ: float3. Stellt den Wert der Welt-Position des Fragments dar.zBias-Typ: float. Stellt den Betrag der auf die Verdeckung angewendeten Umgebungs-Tiefenverzerrung dar.
Beschreibung
Wird im Fragment-Shader verwendet. Berechnet den Wert für die Verdeckung, wenn angenommen wird, dass die Eingabe die Welt-Position „posWorld“ hat.
Parameter:
input-Typ: struct. Stellt die Eingabestruktur des Fragment-Shaders dar.zBias-Typ: float. Stellt den Betrag der auf die Verdeckung angewendeten Umgebungs-Tiefenverzerrung dar.
Beschreibung
Wird im Fragment-Shader verwendet. Ändert die Ausgabefarbe automatisch, um den Wert für die Verdeckung an Position „posWorld“ zu berücksichtigen.
Parameter:
posWorld-Typ: float3. Stellt den Wert der Welt-Position des Fragments dar.output-Typ: float4. Stellt die endgültige Fragment-Shader-Farbe dar, die durch den Verdeckungswert geändert wird.zBias-Typ: float. Stellt den Betrag der auf die Verdeckung angewendeten Umgebungs-Tiefenverzerrung dar.
Beschreibung
Wird im Fragment-Shader verwendet. Ändert die Ausgabefarbe automatisch, um den Wert für die Verdeckung an Position „posWorld“ zu berücksichtigen.
Parameter:
input-Typ: struct. Stellt die Eingabestruktur des Fragment-Shaders dar.output-Typ: float4. Stellt die endgültige Fragment-Shader-Farbe dar, die durch den Verdeckungswert geändert wird.zBias-Typ: float. Stellt den Betrag der auf die Verdeckung angewendeten Umgebungs-Tiefenverzerrung dar.
Shader "Depth/Unlit"
{
Properties
{
[MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1)
}
SubShader
{
Tags { "RenderType" = "Opaque" }
// 0. It's important to have One OneMinusSrcAlpha so it blends properly against transparent background (passthrough)
Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha
Pass
{
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
// 1. Keywords are used to enable different occlusions
#pragma multi_compile _ HARD_OCCLUSION SOFT_OCCLUSION
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
// 2. Include the file with utility functions
#include "Packages/com.meta.xr.sdk.core/Shaders/EnvironmentDepth/URP/EnvironmentOcclusionURP.hlsl"
// if your shaders are in a BiRP project, you would add this include instead:
//#include "Packages/com.meta.xr.sdk.core/Shaders/EnvironmentDepth/BiRP/EnvironmentOcclusionBiRP.hlsl"
struct Attributes
{
float4 vertex : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Varyings
{
float4 positionCS : SV_POSITION;
// 3. This macro adds 'posWorld' to the varyings struct.
// The subsequent macros require this field to be named as such.
// The number has to be filled with the recent TEXCOORD number + 1
// Or 0 as in this case, if there are no other TEXCOORD fields
META_DEPTH_VERTEX_OUTPUT(0)
UNITY_VERTEX_INPUT_INSTANCE_ID
// 4. The fragment shader needs to understand to which eye it's currently
// rendering, in order to get depth from the correct texture.
UNITY_VERTEX_OUTPUT_STEREO
};
CBUFFER_START(UnityPerMaterial)
half4 _BaseColor;
CBUFFER_END
Varyings vert(Attributes input)
{
Varyings output;
UNITY_SETUP_INSTANCE_ID(input);
UNITY_TRANSFER_INSTANCE_ID(input, output);
output.positionCS = TransformObjectToHClip(input.vertex.xyz);
// 5. World position is required to calculate the occlusions.
// This macro will calculate and set world position value in the output Varyings structure.
META_DEPTH_INITIALIZE_VERTEX_OUTPUT(output, input.vertex);
// 6. Passes stereo information to frag shader
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
return output;
}
half4 frag(Varyings input) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(input);
// 7. Initializes global stereo constant for the frag shader
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
half4 finalColor = _BaseColor;
// 8. A third macro required to enable occlusions.
// It requires previous macros to be there as well as the naming behind the macro is strict.
// It will enable soft or hard occlusions depending on the current keyword set.
// finalColor value will be multiplied by the occlusion visibility value.
// Occlusion visibility value is 0 if virtual object is completely covered by environment and vice versa.
// Fully occluded pixels will be discarded
META_DEPTH_OCCLUDE_OUTPUT_PREMULTIPLY(input, finalColor, 0);
return finalColor;
}
ENDHLSL
}
}
}