mirror of
https://github.com/godotengine/godot.git
synced 2026-01-06 10:11:57 +03:00
Added premult alpha blending to 3D (spatial) shaders.
Co-authored-by: jitspoe <jitspoe@yahoo.com> Co-authored-by: Clay John <claynjohn@gmail.com>
This commit is contained in:
@@ -688,6 +688,9 @@ void BaseMaterial3D::_update_shader() {
|
||||
case BLEND_MODE_MUL:
|
||||
code += "blend_mul";
|
||||
break;
|
||||
case BLEND_MODE_PREMULT_ALPHA:
|
||||
code += "blend_premul_alpha";
|
||||
break;
|
||||
case BLEND_MODE_MAX:
|
||||
break; // Internal value, skip.
|
||||
}
|
||||
@@ -1819,6 +1822,11 @@ void fragment() {)";
|
||||
vec3 detail = mix(ALBEDO.rgb, ALBEDO.rgb * detail_tex.rgb, detail_tex.a);
|
||||
)";
|
||||
} break;
|
||||
case BLEND_MODE_PREMULT_ALPHA: {
|
||||
// This is unlikely to ever be used for detail textures, and in order for it to function in the editor, another bit must be used in MaterialKey,
|
||||
// but there are only 5 bits left, so I'm going to leave this disabled unless it's actually requested.
|
||||
//code += "\tvec3 detail = (1.0-detail_tex.a)*ALBEDO.rgb+detail_tex.rgb;\n";
|
||||
} break;
|
||||
case BLEND_MODE_MAX:
|
||||
break; // Internal value, skip.
|
||||
}
|
||||
@@ -3040,7 +3048,7 @@ void BaseMaterial3D::_bind_methods() {
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "alpha_hash_scale", PROPERTY_HINT_RANGE, "0,2,0.01"), "set_alpha_hash_scale", "get_alpha_hash_scale");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "alpha_antialiasing_mode", PROPERTY_HINT_ENUM, "Disabled,Alpha Edge Blend,Alpha Edge Clip"), "set_alpha_antialiasing", "get_alpha_antialiasing");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "alpha_antialiasing_edge", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_alpha_antialiasing_edge", "get_alpha_antialiasing_edge");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "blend_mode", PROPERTY_HINT_ENUM, "Mix,Add,Subtract,Multiply"), "set_blend_mode", "get_blend_mode");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "blend_mode", PROPERTY_HINT_ENUM, "Mix,Add,Subtract,Multiply,Premultiplied Alpha"), "set_blend_mode", "get_blend_mode");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "cull_mode", PROPERTY_HINT_ENUM, "Back,Front,Disabled"), "set_cull_mode", "get_cull_mode");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "depth_draw_mode", PROPERTY_HINT_ENUM, "Opaque Only,Always,Never"), "set_depth_draw_mode", "get_depth_draw_mode");
|
||||
ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "no_depth_test"), "set_flag", "get_flag", FLAG_DISABLE_DEPTH_TEST);
|
||||
@@ -3269,6 +3277,7 @@ void BaseMaterial3D::_bind_methods() {
|
||||
BIND_ENUM_CONSTANT(BLEND_MODE_ADD);
|
||||
BIND_ENUM_CONSTANT(BLEND_MODE_SUB);
|
||||
BIND_ENUM_CONSTANT(BLEND_MODE_MUL);
|
||||
BIND_ENUM_CONSTANT(BLEND_MODE_PREMULT_ALPHA);
|
||||
|
||||
BIND_ENUM_CONSTANT(ALPHA_ANTIALIASING_OFF);
|
||||
BIND_ENUM_CONSTANT(ALPHA_ANTIALIASING_ALPHA_TO_COVERAGE);
|
||||
|
||||
@@ -219,6 +219,7 @@ public:
|
||||
BLEND_MODE_ADD,
|
||||
BLEND_MODE_SUB,
|
||||
BLEND_MODE_MUL,
|
||||
BLEND_MODE_PREMULT_ALPHA,
|
||||
BLEND_MODE_MAX
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user