material { name : MetaCoreEditorGrid, blending : transparent, culling : none, depthCulling : true, depthWrite : false, shadingModel : unlit, variantFilter : [ skinning, shadowReceiver, vsm, fog ], parameters : [ { type : float, name : minorAlpha }, { type : float, name : majorAlpha }, { type : float, name : axisAlpha }, { type : float3, name : cameraPosition }, { type : float, name : fadeStart }, { type : float, name : fadeEnd } ], variables : [ gridWorldPosition ] } vertex { void materialVertex(inout MaterialVertexInputs material) { highp vec4 worldPosition = getWorldFromModelMatrix() * getPosition(); material.gridWorldPosition.xyz = worldPosition.xyz; } } fragment { highp float gridLine(highp vec2 coord, highp float pixelWidth) { highp vec2 dudv = max(fwidth(coord), vec2(1e-6)); highp vec2 uvMod = fract(coord); highp vec2 uvDist = min(uvMod, 1.0 - uvMod); highp vec2 distInPixels = uvDist / dudv; highp vec2 lineAlpha = 1.0 - smoothstep(pixelWidth, pixelWidth + 0.85, distInPixels); return max(lineAlpha.x, lineAlpha.y); } highp float axisLine(highp float coord, highp float pixelWidth) { highp float dudv = max(fwidth(coord), 1e-6); highp float distInPixels = abs(coord) / dudv; return 1.0 - smoothstep(pixelWidth, pixelWidth + 1.0, distInPixels); } void material(inout MaterialInputs material) { prepareMaterial(material); highp vec2 coord = variable_gridWorldPosition.xy; highp float distanceToCamera = distance(coord, materialParams.cameraPosition.xy); highp float distanceFade = 1.0 - smoothstep(materialParams.fadeStart, materialParams.fadeEnd, distanceToCamera); highp vec2 minorDeriv = fwidth(coord); highp float minorLodFade = 1.0 - smoothstep(0.10, 0.38, max(minorDeriv.x, minorDeriv.y)); highp float minor = gridLine(coord / 2.0, 0.18) * materialParams.minorAlpha * minorLodFade; highp float major = gridLine(coord / 10.0, 0.32) * materialParams.majorAlpha; highp float axis = max(axisLine(coord.x, 0.35), axisLine(coord.y, 0.35)) * materialParams.axisAlpha; highp float alpha = max(max(minor, major), axis) * distanceFade; if (alpha < 0.004) { discard; } material.baseColor = vec4(vec3(0.46, 0.50, 0.56), alpha); } }