84 lines
2.6 KiB
Plaintext
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);
|
|
}
|
|
}
|