MetaCore/Source/MetaCoreRender/Private/editorGrid.mat

84 lines
2.6 KiB
Plaintext

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);
}
}