@@ -184,6 +184,20 @@ String Terrain3DMaterial::_generate_shader_code() const {
184184 excludes.push_back (" DISPLACEMENT_FUNCTIONS" );
185185 excludes.push_back (" DISPLACEMENT_VERTEX" );
186186 }
187+ if (!_output_albedo_enabled) {
188+ excludes.push_back (" OUTPUT_ALBEDO" );
189+ } else {
190+ excludes.push_back (" OUTPUT_ALBEDO_GREY" );
191+ }
192+ if (!_output_roughness_enabled) {
193+ excludes.push_back (" OUTPUT_ROUGHNESS" );
194+ }
195+ if (!_output_normal_map_enabled) {
196+ excludes.push_back (" OUTPUT_NORMAL_MAP" );
197+ }
198+ if (!_output_ambient_occlusion_enabled) {
199+ excludes.push_back (" OUTPUT_AMBIENT_OCCLUSION" );
200+ }
187201 String shader = _apply_inserts (_shader_code[" main" ], excludes);
188202 return shader;
189203}
@@ -822,6 +836,30 @@ Variant Terrain3DMaterial::get_shader_param(const StringName &p_name) const {
822836 return value;
823837}
824838
839+ void Terrain3DMaterial::set_output_albedo_enabled (const bool p_enabled) {
840+ SET_IF_DIFF (_output_albedo_enabled, p_enabled);
841+ LOG (INFO, " Enable PBR output albedo: " , p_enabled);
842+ _update_shader ();
843+ }
844+
845+ void Terrain3DMaterial::set_output_roughness_enabled (const bool p_enabled) {
846+ SET_IF_DIFF (_output_roughness_enabled, p_enabled);
847+ LOG (INFO, " Enable PBR output roughness: " , p_enabled);
848+ _update_shader ();
849+ }
850+
851+ void Terrain3DMaterial::set_output_normal_map_enabled (const bool p_enabled) {
852+ SET_IF_DIFF (_output_normal_map_enabled, p_enabled);
853+ LOG (INFO, " Enable PBR output normal map: " , p_enabled);
854+ _update_shader ();
855+ }
856+
857+ void Terrain3DMaterial::set_output_ambient_occlusion_enabled (const bool p_enabled) {
858+ SET_IF_DIFF (_output_ambient_occlusion_enabled, p_enabled);
859+ LOG (INFO, " Enable PBR output ambient occlusion: " , p_enabled);
860+ _update_shader ();
861+ }
862+
825863void Terrain3DMaterial::set_show_region_grid (const bool p_enabled) {
826864 SET_IF_DIFF (_show_region_grid, p_enabled);
827865 LOG (INFO, " Enable show_region_grid: " , p_enabled);
@@ -1234,6 +1272,16 @@ void Terrain3DMaterial::_bind_methods() {
12341272 ClassDB::bind_method (D_METHOD (" set_shader_param" , " name" , " value" ), &Terrain3DMaterial::set_shader_param);
12351273 ClassDB::bind_method (D_METHOD (" get_shader_param" , " name" ), &Terrain3DMaterial::get_shader_param);
12361274
1275+ // PBR output
1276+ ClassDB::bind_method (D_METHOD (" set_output_albedo_enabled" , " enabled" ), &Terrain3DMaterial::set_output_albedo_enabled);
1277+ ClassDB::bind_method (D_METHOD (" get_output_albedo_enabled" ), &Terrain3DMaterial::get_output_albedo_enabled);
1278+ ClassDB::bind_method (D_METHOD (" set_output_roughness_enabled" , " enabled" ), &Terrain3DMaterial::set_output_roughness_enabled);
1279+ ClassDB::bind_method (D_METHOD (" get_output_roughness_enabled" ), &Terrain3DMaterial::get_output_roughness_enabled);
1280+ ClassDB::bind_method (D_METHOD (" set_output_normal_map_enabled" , " enabled" ), &Terrain3DMaterial::set_output_normal_map_enabled);
1281+ ClassDB::bind_method (D_METHOD (" get_output_normal_map_enabled" ), &Terrain3DMaterial::get_output_normal_map_enabled);
1282+ ClassDB::bind_method (D_METHOD (" set_output_ambient_occlusion_enabled" , " enabled" ), &Terrain3DMaterial::set_output_ambient_occlusion_enabled);
1283+ ClassDB::bind_method (D_METHOD (" get_output_ambient_occlusion_enabled" ), &Terrain3DMaterial::get_output_ambient_occlusion_enabled);
1284+
12371285 // Overlays
12381286 ClassDB::bind_method (D_METHOD (" set_show_region_grid" , " enabled" ), &Terrain3DMaterial::set_show_region_grid);
12391287 ClassDB::bind_method (D_METHOD (" get_show_region_grid" ), &Terrain3DMaterial::get_show_region_grid);
@@ -1296,6 +1344,12 @@ void Terrain3DMaterial::_bind_methods() {
12961344 ADD_PROPERTY (PropertyInfo (Variant::BOOL, " shader_override_enabled" ), " set_shader_override_enabled" , " is_shader_override_enabled" );
12971345 ADD_PROPERTY (PropertyInfo (Variant::OBJECT, " shader_override" , PROPERTY_HINT_RESOURCE_TYPE, " Shader" ), " set_shader_override" , " get_shader_override" );
12981346
1347+ ADD_GROUP (" PBR Channels" , " output_" );
1348+ ADD_PROPERTY (PropertyInfo (Variant::BOOL, " output_albedo" ), " set_output_albedo_enabled" , " get_output_albedo_enabled" );
1349+ ADD_PROPERTY (PropertyInfo (Variant::BOOL, " output_roughness" ), " set_output_roughness_enabled" , " get_output_roughness_enabled" );
1350+ ADD_PROPERTY (PropertyInfo (Variant::BOOL, " output_normal_map" ), " set_output_normal_map_enabled" , " get_output_normal_map_enabled" );
1351+ ADD_PROPERTY (PropertyInfo (Variant::BOOL, " output_ambient_occlusion" ), " set_output_ambient_occlusion_enabled" , " get_output_ambient_occlusion_enabled" );
1352+
12991353 // Hidden in Material, aliased in Terrain3D
13001354 // ADD_GROUP("Overlays", "show_");
13011355 ADD_PROPERTY (PropertyInfo (Variant::BOOL, " show_region_grid" , PROPERTY_HINT_NONE, " " , PROPERTY_USAGE_NO_EDITOR), " set_show_region_grid" , " get_show_region_grid" );
0 commit comments