@@ -39,6 +39,9 @@ void Terrain3DMaterial::_preload_shaders() {
3939#include " shaders/displacement.glsl"
4040 , " displacement" );
4141 _parse_shader (
42+ #include " shaders/macro_variation.glsl"
43+ , " displacement" );
44+ _parse_shader (
4245#include " shaders/debug_views.glsl"
4346 , " debug_views" );
4447 _parse_shader (
@@ -147,22 +150,23 @@ String Terrain3DMaterial::_generate_shader_code() const {
147150 }
148151 if (_texture_filtering == LINEAR) {
149152 excludes.push_back (" TEXTURE_SAMPLERS_NEAREST" );
150- excludes.push_back (" NOISE_SAMPLER_NEAREST" );
151153 } else {
152154 excludes.push_back (" TEXTURE_SAMPLERS_LINEAR" );
153- excludes.push_back (" NOISE_SAMPLER_LINEAR" );
154155 }
155- if (!_auto_shader ) {
156+ if (!_auto_shader_enabled ) {
156157 excludes.push_back (" AUTO_SHADER_UNIFORMS" );
157158 excludes.push_back (" AUTO_SHADER" );
158159 }
159- if (!_dual_scaling ) {
160+ if (!_dual_scaling_enabled ) {
160161 excludes.push_back (" DUAL_SCALING_UNIFORMS" );
161162 excludes.push_back (" DUAL_SCALING" );
162163 excludes.push_back (" DUAL_SCALING_CONDITION_0" );
163164 excludes.push_back (" DUAL_SCALING_CONDITION_1" );
164165 excludes.push_back (" DUAL_SCALING_MIX" );
165- excludes.push_back (" TRI_SCALING" );
166+ }
167+ if (!_macro_variation_enabled) {
168+ excludes.push_back (" MACRO_VARIATION_UNIFORMS" );
169+ excludes.push_back (" MACRO_VARIATION" );
166170 }
167171 if (_terrain->get_tessellation_level () == 0 ) {
168172 excludes.push_back (" DISPLACEMENT_UNIFORMS" );
@@ -268,12 +272,10 @@ String Terrain3DMaterial::_generate_buffer_shader_code() {
268272 Array excludes;
269273 if (_texture_filtering == LINEAR) {
270274 excludes.push_back (" TEXTURE_SAMPLERS_NEAREST" );
271- excludes.push_back (" NOISE_SAMPLER_NEAREST" );
272275 } else {
273276 excludes.push_back (" TEXTURE_SAMPLERS_LINEAR" );
274- excludes.push_back (" NOISE_SAMPLER_LINEAR" );
275277 }
276- if (!_auto_shader ) {
278+ if (!_auto_shader_enabled ) {
277279 excludes.push_back (" AUTO_SHADER_UNIFORMS" );
278280 excludes.push_back (" AUTO_SHADER" );
279281 }
@@ -731,18 +733,24 @@ void Terrain3DMaterial::set_texture_filtering(const TextureFiltering p_filtering
731733 _update_shader ();
732734}
733735
734- void Terrain3DMaterial::set_auto_shader (const bool p_enabled) {
735- SET_IF_DIFF (_auto_shader , p_enabled);
736+ void Terrain3DMaterial::set_auto_shader_enabled (const bool p_enabled) {
737+ SET_IF_DIFF (_auto_shader_enabled , p_enabled);
736738 LOG (INFO, " Enable auto shader: " , p_enabled);
737739 _update_shader ();
738740}
739741
740- void Terrain3DMaterial::set_dual_scaling (const bool p_enabled) {
741- SET_IF_DIFF (_dual_scaling , p_enabled);
742+ void Terrain3DMaterial::set_dual_scaling_enabled (const bool p_enabled) {
743+ SET_IF_DIFF (_dual_scaling_enabled , p_enabled);
742744 LOG (INFO, " Enable dual scaling: " , p_enabled);
743745 _update_shader ();
744746}
745747
748+ void Terrain3DMaterial::set_macro_variation_enabled (const bool p_enabled) {
749+ SET_IF_DIFF (_macro_variation_enabled, p_enabled);
750+ LOG (INFO, " Enable macro variation: " , p_enabled);
751+ _update_shader ();
752+ }
753+
746754void Terrain3DMaterial::set_shader_override_enabled (const bool p_enabled) {
747755 SET_IF_DIFF (_shader_override_enabled, p_enabled);
748756 LOG (INFO, " Enable shader override: " , p_enabled);
@@ -1169,10 +1177,12 @@ void Terrain3DMaterial::_bind_methods() {
11691177 ClassDB::bind_method (D_METHOD (" get_world_background" ), &Terrain3DMaterial::get_world_background);
11701178 ClassDB::bind_method (D_METHOD (" set_texture_filtering" , " filtering" ), &Terrain3DMaterial::set_texture_filtering);
11711179 ClassDB::bind_method (D_METHOD (" get_texture_filtering" ), &Terrain3DMaterial::get_texture_filtering);
1172- ClassDB::bind_method (D_METHOD (" set_auto_shader" , " enabled" ), &Terrain3DMaterial::set_auto_shader);
1173- ClassDB::bind_method (D_METHOD (" get_auto_shader" ), &Terrain3DMaterial::get_auto_shader);
1174- ClassDB::bind_method (D_METHOD (" set_dual_scaling" , " enabled" ), &Terrain3DMaterial::set_dual_scaling);
1175- ClassDB::bind_method (D_METHOD (" get_dual_scaling" ), &Terrain3DMaterial::get_dual_scaling);
1180+ ClassDB::bind_method (D_METHOD (" set_auto_shader_enabled" , " enabled" ), &Terrain3DMaterial::set_auto_shader_enabled);
1181+ ClassDB::bind_method (D_METHOD (" get_auto_shader_enabled" ), &Terrain3DMaterial::get_auto_shader_enabled);
1182+ ClassDB::bind_method (D_METHOD (" set_dual_scaling_enabled" , " enabled" ), &Terrain3DMaterial::set_dual_scaling_enabled);
1183+ ClassDB::bind_method (D_METHOD (" get_dual_scaling_enabled" ), &Terrain3DMaterial::get_dual_scaling_enabled);
1184+ ClassDB::bind_method (D_METHOD (" set_macro_variation_enabled" , " enabled" ), &Terrain3DMaterial::set_macro_variation_enabled);
1185+ ClassDB::bind_method (D_METHOD (" get_macro_variation_enabled" ), &Terrain3DMaterial::get_macro_variation_enabled);
11761186
11771187 ClassDB::bind_method (D_METHOD (" set_shader_override_enabled" , " enabled" ), &Terrain3DMaterial::set_shader_override_enabled);
11781188 ClassDB::bind_method (D_METHOD (" is_shader_override_enabled" ), &Terrain3DMaterial::is_shader_override_enabled);
@@ -1246,8 +1256,9 @@ void Terrain3DMaterial::_bind_methods() {
12461256 // These must be different from the names of uniform groups
12471257 ADD_PROPERTY (PropertyInfo (Variant::INT, " world_background" , PROPERTY_HINT_ENUM, " None,Flat,Noise" ), " set_world_background" , " get_world_background" );
12481258 ADD_PROPERTY (PropertyInfo (Variant::INT, " texture_filtering" , PROPERTY_HINT_ENUM, " Linear,Nearest" ), " set_texture_filtering" , " get_texture_filtering" );
1249- ADD_PROPERTY (PropertyInfo (Variant::BOOL, " auto_shader_enabled" ), " set_auto_shader" , " get_auto_shader" );
1250- ADD_PROPERTY (PropertyInfo (Variant::BOOL, " dual_scaling_enabled" ), " set_dual_scaling" , " get_dual_scaling" );
1259+ ADD_PROPERTY (PropertyInfo (Variant::BOOL, " auto_shader_enabled" ), " set_auto_shader_enabled" , " get_auto_shader_enabled" );
1260+ ADD_PROPERTY (PropertyInfo (Variant::BOOL, " dual_scaling_enabled" ), " set_dual_scaling_enabled" , " get_dual_scaling_enabled" );
1261+ ADD_PROPERTY (PropertyInfo (Variant::BOOL, " macro_variation_enabled" ), " set_macro_variation_enabled" , " get_macro_variation_enabled" );
12511262 ADD_PROPERTY (PropertyInfo (Variant::BOOL, " shader_override_enabled" ), " set_shader_override_enabled" , " is_shader_override_enabled" );
12521263 ADD_PROPERTY (PropertyInfo (Variant::OBJECT, " shader_override" , PROPERTY_HINT_RESOURCE_TYPE, " Shader" ), " set_shader_override" , " get_shader_override" );
12531264
0 commit comments