- Home /
Vertex Offset not written to depth buffer in Surface Shader
I'm trying to represent a terrain as a plane offsetted by a height map. It does work but the water ontop of it needs to read the depth buffer to fade itself when it's shallow.
However, the terrain vertex offset modifications done in the vertex program of the surface shader aren't written into the depth buffer, but the base mesh, the plane, is. I've done this previously on a vertex/fragment shader but it does not seem to work in a surface shader,
Here is a simplified version of the shader:
Shader "Erosion/Terrain_Simplified" {
Properties {
_BaseColor ("Color", Color) = (0.5, 0.45, 0.4)
[NoScaleOffset] _TerrainField ("Terrain Field", 2D) = "white" {} // Defined in SimulationParameters.cginc and declared by code
}
SubShader {
Tags { "RenderType" = "Opaque" }
ZWrite ON
CGPROGRAM
#pragma target 3.0
#include "UnityCG.cginc"
#include "SimulationParameters.cginc" // Contains, next to others, _TerrainField
#include "SimulationUtil.cginc" // Contains all helper functions accessing terrain height/normal using _TerrainField
#pragma surface surf Lambert
#pragma vertex vert
uniform float4 _BaseColor;
struct Input {
float2 terrainUV;
};
void vert (inout appdata_full v, out Input o) {
o.terrainUV = v.texcoord.xy;
v.vertex.xyz += v.normal * GetTerrainHeightLOD (v.texcoord);
}
void surf (Input IN, inout SurfaceOutput SUR) {
SUR.Albedo = _BaseColor;
float3 terrainNRM = GetTerrainNormal (IN.terrainUV).xzy;
SUR.Normal = terrainNRM;
}
ENDCG
}
FallBack "Diffuse"
}
Do note that this currently won't compile, I've excluded some parameters and utility functions into 'SimulationParameters.cginc' and 'SimulationUtil.cginc' but they don't contain any additional information affecting the shader logic. Including them would be overcomplicate the problem:/
Anyway, how could I make the depth buffer 'aware' of the modified vertices in a surface shader?
Your answer
Follow this Question
Related Questions
How get rid of shadows of meshes clipped by a shader? 1 Answer
re-use depth for shadows on stereo render 0 Answers
Surface Shader vertex displacement, shadows not moving 1 Answer
How to get pure black shadow on gradient shader 0 Answers
Problem with Point light and shadow in Surface Shader custom Light Model. 1 Answer