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