    material {
        name : Gizmo,
        parameters : [
            {
                type : mat4,
                name : transform,
                precision : high
            },
            {
                type : float4,
                name : color,
                precision : low
            }
        ],
        depthWrite : true,
        depthCulling : false,
        shadingModel : unlit,
        blending: transparent,
        variantFilter : [ skinning, shadowReceiver, vsm ],
        culling: none,
        instanced: false,
        vertexDomain: object
    }

    vertex {
        void materialVertex(inout MaterialVertexInputs material) {	

            // we want to ensure the gizmo has the same size (in screen-space), no matter the distance from the camera
            // we do this by scaling the model-space vertex positions by the distance from the camera
            vec4 modelSpace = getPosition();
            vec4 worldSpace = getWorldFromModelMatrix() * modelSpace;
            vec4 viewSpace = getViewFromWorldMatrix() * worldSpace;           
            float distanceFromCamera = length(viewSpace.xyz);
            modelSpace.xyz *= (distanceFromCamera / 4.0f); // divide by 4 so that the size is equivalent to the camera being 4 world-space units away from the (unscaled) gizmo

            worldSpace = getWorldFromModelMatrix() * modelSpace;
            material.worldPosition = worldSpace;
            //vec4 clipSpace = getClipFromWorldMatrix() * worldSpace;
            //clipSpace.z = 0.99f;
            //material.worldPosition = getWorldFromClipMatrix() * clipSpace;
        }
    }

    fragment {
        void material(inout MaterialInputs material) {
            prepareMaterial(material);
            material.baseColor = materialParams.color;
        }
    }

