Skip to content

Commit c80243a

Browse files
committed
add PBR channel output toggles
1 parent 7311883 commit c80243a

File tree

4 files changed

+95
-10
lines changed

4 files changed

+95
-10
lines changed

src/shaders/main.glsl

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -577,14 +577,11 @@ void fragment() {
577577
float roughness = clamp(fma(color_map.a - 0.5, 2.0, mat.normal_rough.a), 0., 1.);
578578

579579
// Apply PBR
580-
ALBEDO = mat.albedo_height.rgb * color_map.rgb;
581-
ROUGHNESS = roughness;
582-
SPECULAR = 1. - mat.normal_rough.a;
583-
// Repack final normal map value.
584-
NORMAL_MAP = fma(normalize(mat.normal_rough.xzy), vec3(0.5), vec3(0.5));
585-
NORMAL_MAP_DEPTH = mat.normal_map_depth;
586-
AO = clamp(mat.ao, 0., 1.);
587-
AO_LIGHT_AFFECT = mat.ao_affect;
580+
//INSERT: OUTPUT_ALBEDO
581+
//INSERT: OUTPUT_ALBEDO_GREY
582+
//INSERT: OUTPUT_ROUGHNESS
583+
//INSERT: OUTPUT_NORMAL_MAP
584+
//INSERT: OUTPUT_AMBIENT_OCCLUSION
588585

589586
}
590587

src/shaders/pbr_views.glsl

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
R"(
77
//INSERT: PBR_TEXTURE_ALBEDO
8-
// Show height textures
8+
// Show albedo textures
99
{
1010
ALBEDO = mat.albedo_height.rgb;
1111
ROUGHNESS = 0.7;
@@ -54,4 +54,19 @@ R"(
5454
AO = 1.0;
5555
}
5656

57-
)"
57+
//INSERT: OUTPUT_ALBEDO
58+
ALBEDO = mat.albedo_height.rgb * color_map.rgb;
59+
//INSERT: OUTPUT_ALBEDO_GREY
60+
ALBEDO = vec3(0.4);
61+
//INSERT: OUTPUT_ROUGHNESS
62+
ROUGHNESS = roughness;
63+
SPECULAR = 1. - mat.normal_rough.a;
64+
//INSERT: OUTPUT_NORMAL_MAP
65+
// Repack final normal map value.
66+
NORMAL_MAP = fma(normalize(mat.normal_rough.xzy), vec3(0.5), vec3(0.5));
67+
NORMAL_MAP_DEPTH = mat.normal_map_depth;
68+
//INSERT: OUTPUT_AMBIENT_OCCLUSION
69+
AO = clamp(mat.ao, 0., 1.);
70+
AO_LIGHT_AFFECT = mat.ao_affect;
71+
72+
)"

src/terrain_3d_material.cpp

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
825863
void 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");

src/terrain_3d_material.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ enum UpdateFlags {
5959
bool _macro_variation_enabled = false;
6060
bool _projection_enabled = true;
6161

62+
// PBR Outputs
63+
bool _output_albedo_enabled = true;
64+
bool _output_roughness_enabled = true;
65+
bool _output_normal_map_enabled = true;
66+
bool _output_ambient_occlusion_enabled = true;
67+
6268
// Overlays
6369
bool _show_region_grid = false;
6470
bool _show_instancer_grid = false;
@@ -148,6 +154,19 @@ enum UpdateFlags {
148154
void set_shader_param(const StringName &p_name, const Variant &p_value);
149155
Variant get_shader_param(const StringName &p_name) const;
150156

157+
// PBR outputs
158+
void set_output_albedo_enabled(const bool p_enabled);
159+
bool get_output_albedo_enabled() const { return _output_albedo_enabled; }
160+
161+
void set_output_roughness_enabled(const bool p_enabled);
162+
bool get_output_roughness_enabled() const { return _output_roughness_enabled; }
163+
164+
void set_output_normal_map_enabled(const bool p_enabled);
165+
bool get_output_normal_map_enabled() const { return _output_normal_map_enabled; }
166+
167+
void set_output_ambient_occlusion_enabled(const bool p_enabled);
168+
bool get_output_ambient_occlusion_enabled() const { return _output_ambient_occlusion_enabled; }
169+
151170
// Overlays
152171
void set_show_region_grid(const bool p_enabled);
153172
bool get_show_region_grid() const { return _show_region_grid; }

0 commit comments

Comments
 (0)