material { name : defaultUnlit, shadingModel : unlit, doubleSided : true, parameters : [ { type : float3, name : baseColor }, { type : float, name : pointSize }, { type : sampler2d, name : albedo }, // srgbColor > 0.0 means per vertex color is encoded as sRGB { type : float, name : srgbColor } ], requires : [ color, uv0 ] } vertex { void materialVertex(inout MaterialVertexInputs material) { gl_PointSize = materialParams.pointSize; } } fragment { float sRGB_to_linear(float color) { return color <= 0.04045 ? color / 12.92 : pow((color + 0.055) / 1.055, 2.4); } void material(inout MaterialInputs material) { prepareMaterial(material); float3 linear_color = getColor().rgb; // Linearize per vertex color if necessary if (materialParams.srgbColor > 0.0) { linear_color.r = sRGB_to_linear(linear_color.r); linear_color.g = sRGB_to_linear(linear_color.g); linear_color.b = sRGB_to_linear(linear_color.b); } material.baseColor.rgb = materialParams.baseColor*linear_color * texture(materialParams_albedo, getUV0()).rgb; } }