feat: add grid material
This commit is contained in:
53
materials/grid.mat
Normal file
53
materials/grid.mat
Normal file
@@ -0,0 +1,53 @@
|
||||
material {
|
||||
name : Grid,
|
||||
parameters : [
|
||||
{
|
||||
type : float,
|
||||
name : maxDistance
|
||||
},
|
||||
{
|
||||
type : float3,
|
||||
name : color
|
||||
}
|
||||
],
|
||||
depthWrite : true,
|
||||
depthCulling : false,
|
||||
shadingModel : unlit,
|
||||
blending: transparent,
|
||||
variantFilter : [ skinning, shadowReceiver, vsm ],
|
||||
culling: none,
|
||||
instanced: false,
|
||||
vertexDomain: object
|
||||
}
|
||||
|
||||
vertex {
|
||||
void materialVertex(inout MaterialVertexInputs material) {
|
||||
material.worldPosition = getWorldFromModelMatrix() * getPosition();
|
||||
}
|
||||
}
|
||||
|
||||
fragment {
|
||||
void material(inout MaterialInputs material) {
|
||||
prepareMaterial(material);
|
||||
|
||||
// Convert world position to view space
|
||||
float4 viewPos = getViewFromWorldMatrix() * float4(getWorldPosition(), 1.0);
|
||||
|
||||
// Calculate distance in view space (camera is at 0,0,0 in view space)
|
||||
float distance = length(viewPos.xz);
|
||||
|
||||
// Discard fragment if it's too far from the camera
|
||||
if (distance > materialParams.maxDistance) {
|
||||
material.baseColor = float4(0.0);
|
||||
} else {
|
||||
material.baseColor = float4(materialParams.color, 1.0);
|
||||
|
||||
// Optional: fade out as we approach maxDistance
|
||||
float fadeStart = materialParams.maxDistance * 0.8;
|
||||
if (distance > fadeStart) {
|
||||
float fade = 1.0 - (distance - fadeStart) / (materialParams.maxDistance - fadeStart);
|
||||
material.baseColor.a = fade;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user