Closed nixiaofei closed 3 months ago
Try this:
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
META_DEPTH_OCCLUDE_OUTPUT_PREMULTIPLY_WORLDPOS(IN.worldPos, c, _EnvironmentDepthBias) //<-- Add this
o.Albedo = c.rgb;
I'll add a simple surface shader example to the BiRP sample project, so it's easier for devs to modify their own.
And before you add the above line of code you also need to include the BiRP occlusion library. Just place it somewhere at the beginning in the #pragma area like so:
#pragma target 3.0
#pragma multi_compile _ HARD_OCCLUSION SOFT_OCCLUSION //<-- Add this
#include "Packages/com.meta.xr.depthapi/Runtime/BiRP/EnvironmentOcclusionBiRP.cginc"//<-- and this
sampler2D _MainTex;
@TudorJude Thank you very much for your help, I have successfully implemented surface shader occlusion. The following code is the completed shader, for those who need help in this regard.
Shader "Custom/DepthSurfaceShader" { Properties { _Color("Color", Color) = (1,1,1,1) _MainTex("Albedo (RGB)", 2D) = "white" {} _Glossiness("Smoothness", Range(0,1)) = 0.5 _Metallic("Metallic", Range(0,1)) = 0.0 _EnvironmentDepthBias("_EnvironmentDepthBias", Range(0,1)) = 0//<-- Add this } SubShader { Tags { "RenderType" = "Opaque" } LOD 200
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
#pragma multi_compile _ HARD_OCCLUSION SOFT_OCCLUSION //<-- Add this
#include "Packages/com.meta.xr.depthapi/Runtime/BiRP/EnvironmentOcclusionBiRP.cginc"//<-- and this
sampler2D _MainTex;
struct Input
{
float2 uv_MainTex;
float3 worldPos;//<-- Add this
};
half _EnvironmentDepthBias;//<-- Add this
half _Glossiness;
half _Metallic;
fixed4 _Color;
// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
// #pragma instancing_options assumeuniformscaling
UNITY_INSTANCING_BUFFER_START(Props)
// put more per-instance properties here
UNITY_INSTANCING_BUFFER_END(Props)
void surf(Input IN, inout SurfaceOutputStandard o)
{
// Albedo comes from a texture tinted by color
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
META_DEPTH_OCCLUDE_OUTPUT_PREMULTIPLY_WORLDPOS(IN.worldPos, c, _EnvironmentDepthBias) //<-- Add this
}
ENDCG
}
FallBack "Diffuse"
}
I don't know how to modify the surfaceshader to support depth occlusion
Shader "Custom/DepthSurfaceShader" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200
} Looking forward to reply thank you!