@@ -569,6 +569,9 @@ void BaseMaterial3D::init_shaders() {
569569 shader_names->normal_scale = " normal_scale" ;
570570 shader_names->rim = " rim" ;
571571 shader_names->rim_tint = " rim_tint" ;
572+ shader_names->sheen = " sheen" ;
573+ shader_names->sheen_roughness = " sheen_roughness" ;
574+ shader_names->sheen_color = " sheen_color" ;
572575 shader_names->clearcoat = " clearcoat" ;
573576 shader_names->clearcoat_roughness = " clearcoat_roughness" ;
574577 shader_names->anisotropy = " anisotropy_ratio" ;
@@ -604,6 +607,7 @@ void BaseMaterial3D::init_shaders() {
604607
605608 shader_names->metallic_texture_channel = " metallic_texture_channel" ;
606609 shader_names->ao_texture_channel = " ao_texture_channel" ;
610+ shader_names->sheen_texture_channel = " sheen_texture_channel" ;
607611 shader_names->clearcoat_texture_channel = " clearcoat_texture_channel" ;
608612 shader_names->rim_texture_channel = " rim_texture_channel" ;
609613 shader_names->heightmap_texture_channel = " heightmap_texture_channel" ;
@@ -620,6 +624,7 @@ void BaseMaterial3D::init_shaders() {
620624 shader_names->texture_names [TEXTURE_NORMAL ] = " texture_normal" ;
621625 shader_names->texture_names [TEXTURE_BENT_NORMAL ] = " texture_bent_normal" ;
622626 shader_names->texture_names [TEXTURE_RIM ] = " texture_rim" ;
627+ shader_names->texture_names [TEXTURE_SHEEN ] = " texture_sheen" ;
623628 shader_names->texture_names [TEXTURE_CLEARCOAT ] = " texture_clearcoat" ;
624629 shader_names->texture_names [TEXTURE_FLOWMAP ] = " texture_flowmap" ;
625630 shader_names->texture_names [TEXTURE_AMBIENT_OCCLUSION ] = " texture_ambient_occlusion" ;
@@ -1076,6 +1081,15 @@ uniform sampler2D texture_bent_normal : hint_roughness_normal, %s;
10761081uniform float rim : hint_range(0.0, 1.0, 0.01);
10771082uniform float rim_tint : hint_range(0.0, 1.0, 0.01);
10781083uniform sampler2D texture_rim : hint_default_white, %s;
1084+ )" ,
1085+ texfilter_str);
1086+ }
1087+ if (features[FEATURE_SHEEN ]) {
1088+ code += vformat (R"(
1089+ uniform float sheen : hint_range(0.0, 1.0, 0.01);
1090+ uniform float sheen_roughness : hint_range(0.0, 1.0, 0.01);
1091+ uniform vec3 sheen_color : source_color;
1092+ uniform sampler2D texture_sheen : hint_default_white, %s;
10791093)" ,
10801094 texfilter_str);
10811095 }
@@ -1877,6 +1891,21 @@ void fragment() {)";
18771891)" ;
18781892 }
18791893
1894+ if (features[FEATURE_SHEEN ]) {
1895+ code += R"(
1896+ // Sheen: Enabled
1897+ )" ;
1898+ if (flags[FLAG_UV1_USE_TRIPLANAR ]) {
1899+ code += " vec2 sheen_tex = triplanar_texture(texture_sheen, uv1_power_normal, uv1_triplanar_pos).xy;\n " ;
1900+ } else {
1901+ code += " vec2 sheen_tex = texture(texture_sheen, base_uv).xy;\n " ;
1902+ }
1903+ code += R"( SHEEN = sheen * sheen_tex.x;
1904+ SHEEN_ROUGHNESS = sheen_roughness * sheen_tex.y;
1905+ SHEEN_COLOR = sheen_color;
1906+ )" ;
1907+ }
1908+
18801909 if (features[FEATURE_CLEARCOAT ]) {
18811910 code += R"(
18821911 // Clearcoat: Enabled
@@ -2224,6 +2253,33 @@ float BaseMaterial3D::get_ao_light_affect() const {
22242253 return ao_light_affect;
22252254}
22262255
2256+ void BaseMaterial3D::set_sheen (float p_sheen) {
2257+ sheen = p_sheen;
2258+ _material_set_param (shader_names->sheen , p_sheen);
2259+ }
2260+
2261+ float BaseMaterial3D::get_sheen () const {
2262+ return sheen;
2263+ }
2264+
2265+ void BaseMaterial3D::set_sheen_roughness (float p_sheen_roughness) {
2266+ sheen_roughness = p_sheen_roughness;
2267+ _material_set_param (shader_names->sheen_roughness , p_sheen_roughness);
2268+ }
2269+
2270+ float BaseMaterial3D::get_sheen_roughness () const {
2271+ return sheen_roughness;
2272+ }
2273+
2274+ void BaseMaterial3D::set_sheen_color (const Color &p_sheen_color) {
2275+ sheen_color = p_sheen_color;
2276+ _material_set_param (shader_names->sheen_color , p_sheen_color);
2277+ }
2278+
2279+ Color BaseMaterial3D::get_sheen_color () const {
2280+ return sheen_color;
2281+ }
2282+
22272283void BaseMaterial3D::set_clearcoat (float p_clearcoat) {
22282284 clearcoat = p_clearcoat;
22292285 _material_set_param (shader_names->clearcoat , p_clearcoat);
@@ -2703,6 +2759,10 @@ void BaseMaterial3D::_validate_property(PropertyInfo &p_property) const {
27032759 p_property.usage = PROPERTY_USAGE_NONE ;
27042760 }
27052761
2762+ if (p_property.name .begins_with (" sheen" )) {
2763+ p_property.usage = PROPERTY_USAGE_NONE ;
2764+ }
2765+
27062766 if (p_property.name .begins_with (" clearcoat" )) {
27072767 p_property.usage = PROPERTY_USAGE_NONE ;
27082768 }
@@ -3366,6 +3426,15 @@ void BaseMaterial3D::_bind_methods() {
33663426 ClassDB::bind_method (D_METHOD (" set_rim_tint" , " rim_tint" ), &BaseMaterial3D::set_rim_tint);
33673427 ClassDB::bind_method (D_METHOD (" get_rim_tint" ), &BaseMaterial3D::get_rim_tint);
33683428
3429+ ClassDB::bind_method (D_METHOD (" set_sheen" , " sheen" ), &BaseMaterial3D::set_sheen);
3430+ ClassDB::bind_method (D_METHOD (" get_sheen" ), &BaseMaterial3D::get_sheen);
3431+
3432+ ClassDB::bind_method (D_METHOD (" set_sheen_roughness" , " sheen_roughness" ), &BaseMaterial3D::set_sheen_roughness);
3433+ ClassDB::bind_method (D_METHOD (" get_sheen_roughness" ), &BaseMaterial3D::get_sheen_roughness);
3434+
3435+ ClassDB::bind_method (D_METHOD (" set_sheen_color" , " sheen_color" ), &BaseMaterial3D::set_sheen_color);
3436+ ClassDB::bind_method (D_METHOD (" get_sheen_color" ), &BaseMaterial3D::get_sheen_color);
3437+
33693438 ClassDB::bind_method (D_METHOD (" set_clearcoat" , " clearcoat" ), &BaseMaterial3D::set_clearcoat);
33703439 ClassDB::bind_method (D_METHOD (" get_clearcoat" ), &BaseMaterial3D::get_clearcoat);
33713440
@@ -3624,6 +3693,13 @@ void BaseMaterial3D::_bind_methods() {
36243693 ADD_PROPERTY (PropertyInfo (Variant::FLOAT , " rim_tint" , PROPERTY_HINT_RANGE , " 0,1,0.01" ), " set_rim_tint" , " get_rim_tint" );
36253694 ADD_PROPERTYI (PropertyInfo (Variant::OBJECT , " rim_texture" , PROPERTY_HINT_RESOURCE_TYPE , Texture2D::get_class_static ()), " set_texture" , " get_texture" , TEXTURE_RIM );
36263695
3696+ ADD_GROUP (" Sheen" , " sheen_" );
3697+ ADD_PROPERTYI (PropertyInfo (Variant::BOOL , " sheen_enabled" , PROPERTY_HINT_GROUP_ENABLE ), " set_feature" , " get_feature" , FEATURE_SHEEN );
3698+ ADD_PROPERTY (PropertyInfo (Variant::FLOAT , " sheen" , PROPERTY_HINT_RANGE , " 0,1,0.01" ), " set_sheen" , " get_sheen" );
3699+ ADD_PROPERTY (PropertyInfo (Variant::FLOAT , " sheen_roughness" , PROPERTY_HINT_RANGE , " 0,1,0.01" ), " set_sheen_roughness" , " get_sheen_roughness" );
3700+ ADD_PROPERTY (PropertyInfo (Variant::COLOR , " sheen_color" ), " set_sheen_color" , " get_sheen_color" );
3701+ ADD_PROPERTYI (PropertyInfo (Variant::OBJECT , " sheen_texture" , PROPERTY_HINT_RESOURCE_TYPE , " Texture2D" ), " set_texture" , " get_texture" , TEXTURE_SHEEN );
3702+
36273703 ADD_GROUP (" Clearcoat" , " clearcoat_" );
36283704 ADD_PROPERTYI (PropertyInfo (Variant::BOOL , " clearcoat_enabled" , PROPERTY_HINT_GROUP_ENABLE ), " set_feature" , " get_feature" , FEATURE_CLEARCOAT );
36293705 ADD_PROPERTY (PropertyInfo (Variant::FLOAT , " clearcoat" , PROPERTY_HINT_RANGE , " 0,1,0.01" ), " set_clearcoat" , " get_clearcoat" );
@@ -3759,6 +3835,7 @@ void BaseMaterial3D::_bind_methods() {
37593835 BIND_ENUM_CONSTANT (TEXTURE_NORMAL );
37603836 BIND_ENUM_CONSTANT (TEXTURE_BENT_NORMAL );
37613837 BIND_ENUM_CONSTANT (TEXTURE_RIM );
3838+ BIND_ENUM_CONSTANT (TEXTURE_SHEEN );
37623839 BIND_ENUM_CONSTANT (TEXTURE_CLEARCOAT );
37633840 BIND_ENUM_CONSTANT (TEXTURE_FLOWMAP );
37643841 BIND_ENUM_CONSTANT (TEXTURE_AMBIENT_OCCLUSION );
@@ -3809,6 +3886,7 @@ void BaseMaterial3D::_bind_methods() {
38093886 BIND_ENUM_CONSTANT (FEATURE_REFRACTION );
38103887 BIND_ENUM_CONSTANT (FEATURE_DETAIL );
38113888 BIND_ENUM_CONSTANT (FEATURE_BENT_NORMAL_MAPPING );
3889+ BIND_ENUM_CONSTANT (FEATURE_SHEEN );
38123890 BIND_ENUM_CONSTANT (FEATURE_MAX );
38133891
38143892 BIND_ENUM_CONSTANT (BLEND_MODE_MIX );
@@ -3918,7 +3996,10 @@ BaseMaterial3D::BaseMaterial3D(bool p_orm) :
39183996 set_normal_scale (1 );
39193997 set_rim (1.0 );
39203998 set_rim_tint (0.5 );
3921- set_clearcoat (1 );
3999+ set_sheen (1.0 );
4000+ set_sheen_roughness (0.5 );
4001+ set_sheen_color (Color (1 , 1 , 1 ));
4002+ set_clearcoat (1.0 );
39224003 set_clearcoat_roughness (0.5 );
39234004 set_anisotropy (0 );
39244005 set_heightmap_scale (5.0 );
0 commit comments