Skip to content

Commit a8fbb7b

Browse files
committed
Add post-processing panel for 3d preview
1 parent cdfa171 commit a8fbb7b

File tree

8 files changed

+664
-105
lines changed

8 files changed

+664
-105
lines changed

material_maker/globals.gd

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,22 @@ const DEFAULT_CONFIG : Dictionary = {
1818
ui_3d_preview_resolution = 2.0,
1919
ui_3d_preview_tesselation_detail = 256,
2020
ui_3d_preview_sun_shadow = false,
21+
ui_3d_preview_tonemap_enabled = false,
2122
ui_3d_preview_tonemap = 0,
2223
ui_3d_preview_tonemap_white = 1.0,
2324
ui_3d_preview_tonemap_exposure = 1.0,
25+
ui_3d_preview_glow_enabled = false,
26+
ui_3d_preview_glow_size = 2.0,
27+
ui_3d_preview_glow_intensity = 0.8,
28+
ui_3d_preview_glow_strength = 1.0,
29+
ui_3d_preview_glow_blend_mode = 1,
30+
ui_3d_preview_glow_blend_mix_factor = 0.05,
31+
ui_3d_preview_glow_lower_threshold = 1.0,
32+
ui_3d_preview_glow_upper_threshold = 4.0,
33+
ui_3d_preview_adjustment_enabled = false,
34+
ui_3d_preview_adjustment_brightness = 1.0,
35+
ui_3d_preview_adjustment_contrast = 1.0,
36+
ui_3d_preview_adjustment_saturation = 1.0,
2437
ui_console_open = false,
2538
ui_console_height = 100,
2639
bake_ray_count = 64,

material_maker/panels/preview_3d/environment_menu.gd

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,34 @@ extends PanelContainer
22

33
const SETTING_PREVIEW_CLEAR_BG := "3D_preview_panel_clear_background"
44

5-
const TONEMAPS : Array = ["Linear", "Reinhard", "Filmic", "ACES", "AgX"]
6-
75
@onready var preview3D := owner
86

9-
@onready var ToneMap := %ToneMap
7+
#@onready var ToneMap := %ToneMap
108
@onready var ClearBackground := %ClearBackground
119
@onready var EnvironmentList := %EnvironmentList
1210

1311

1412
func _ready() -> void:
15-
ToneMap.clear()
16-
for i in TONEMAPS.size():
17-
ToneMap.add_item(TONEMAPS[i], i)
18-
1913
if mm_globals.has_config(SETTING_PREVIEW_CLEAR_BG):
2014
ClearBackground.button_pressed = mm_globals.get_config(SETTING_PREVIEW_CLEAR_BG)
2115

2216

23-
2417
func _open() -> void:
2518
update_environment_selector()
2619

27-
var tonemap_mode: int = mm_globals.get_config("ui_3d_preview_tonemap")
28-
ToneMap.select(tonemap_mode)
29-
30-
if mm_globals.has_config("ui_3d_preview_tonemap_exposure"):
31-
$VBoxContainer/VBox/Exposure.set_value(mm_globals.get_config("ui_3d_preview_tonemap_exposure"))
32-
33-
if mm_globals.has_config("ui_3d_preview_tonemap_white"):
34-
$VBoxContainer/VBox/White.set_value(mm_globals.get_config("ui_3d_preview_tonemap_white"))
35-
36-
$VBoxContainer/VBox/White.visible = tonemap_mode > 0 && tonemap_mode <= 3
37-
$VBoxContainer/VBox/WhiteLabel.visible = tonemap_mode > 0 && tonemap_mode <= 3
38-
20+
#var tonemap_mode : int = mm_globals.get_config("ui_3d_preview_tonemap")
21+
#ToneMap.select(tonemap_mode)
22+
#
23+
#if mm_globals.has_config("ui_3d_preview_tonemap_exposure"):
24+
#$VBoxContainer/VBox/Exposure.set_value(mm_globals.get_config("ui_3d_preview_tonemap_exposure"))
25+
#
26+
#if mm_globals.has_config("ui_3d_preview_tonemap_white"):
27+
#$VBoxContainer/VBox/White.set_value(mm_globals.get_config("ui_3d_preview_tonemap_white"))
28+
#
29+
#$VBoxContainer/VBox/White.visible = tonemap_mode > 0 && tonemap_mode <= 3
30+
#$VBoxContainer/VBox/WhiteLabel.visible = tonemap_mode > 0 && tonemap_mode <= 3
31+
32+
3933
func update_environment_selector() -> void:
4034
var environment_manager = get_node("/root/MainWindow/EnvironmentManager")
4135
if not environment_manager:
@@ -59,17 +53,10 @@ func _on_environment_editor_button_pressed() -> void:
5953
env_editor.tree_exited.connect(update_environment_selector)
6054

6155

62-
6356
func _on_environment_list_item_selected(index: int) -> void:
6457
preview3D.set_environment(index)
6558

6659

67-
68-
func _on_tone_map_item_selected(index: int) -> void:
69-
preview3D.set_tonemap(index)
70-
$VBoxContainer/VBox/White.visible = index > 0 && index <= 3
71-
$VBoxContainer/VBox/WhiteLabel.visible = index > 0 && index <= 3
72-
7360
func _on_clear_background_toggled(toggled_on: bool) -> void:
7461
preview3D.clear_background = toggled_on
7562
mm_globals.set_config(SETTING_PREVIEW_CLEAR_BG, toggled_on)
Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
extends PanelContainer
2+
3+
@onready var preview3D := owner
4+
5+
@onready var Tonemap := %Tonemap
6+
@onready var TonemapMode := %TonemapMode
7+
@onready var TonemapExposure := %TonemapExposure
8+
@onready var TonemapWhite := %TonemapWhite
9+
10+
@onready var Glow := %Glow
11+
@onready var GlowBleed := %GlowBleed
12+
@onready var GlowBloom := %GlowBloom
13+
@onready var GlowIntensity := %GlowIntensity
14+
@onready var GlowStrength := %GlowStrength
15+
@onready var GlowIntensityLabel := %GlowIntensityLabel
16+
@onready var GlowBlendMode := %GlowBlendMode
17+
@onready var GlowBlendMix := %GlowBlendMix
18+
@onready var GlowBlendMixLabel := %GlowBlendMixLabel
19+
@onready var GlowThreshold := %GlowThreshold
20+
@onready var GlowClamp := %GlowClamp
21+
22+
@onready var Adjustment := %Adjustment
23+
@onready var AdjustmentBrightness := %AdjustmentBrightness
24+
@onready var AdjustmentContrast := %AdjustmentContrast
25+
@onready var AdjustmentSaturation := %AdjustmentSaturation
26+
27+
const SETTING_PREVIEW_TONEMAP_ENABLED := "ui_3d_preview_tonemap_enabled"
28+
const SETTING_PREVIEW_TONEMAP := "ui_3d_preview_tonemap"
29+
const SETTING_PREVIEW_TONEMAP_WHITE := "ui_3d_preview_tonemap_white"
30+
const SETTING_PREVIEW_TONEMAP_EXPOSURE := "ui_3d_preview_tonemap_exposure"
31+
32+
const SETTING_PREVIEW_GLOW_ENABLED := "ui_3d_preview_glow_enabled"
33+
const SETTING_PREVIEW_GLOW_SIZE := "ui_3d_preview_glow_size"
34+
const SETTING_PREVIEW_GLOW_BLOOM := "ui_3d_preview_glow_bloom"
35+
const SETTING_PREVIEW_GLOW_INTENSITY := "ui_3d_preview_glow_intensity"
36+
const SETTING_PREVIEW_GLOW_STRENGTH := "ui_3d_preview_glow_strength"
37+
const SETTING_PREVIEW_GLOW_BLEND_MODE := "ui_3d_preview_glow_blend_mode"
38+
const SETTING_PREVIEW_GLOW_BLEND_MIX_FAC := "ui_3d_preview_glow_blend_mix_factor"
39+
const SETTING_PREVIEW_GLOW_LOWER_THRESHOLD := "ui_3d_preview_glow_lower_threshold"
40+
const SETTING_PREVIEW_GLOW_UPPER_THRESHOLD := "ui_3d_preview_glow_upper_threshold"
41+
42+
const SETTING_PREVIEW_ADJUSTMENT_ENABLED := "ui_3d_preview_adjustment_enabled"
43+
const SETTING_PREVIEW_ADJUSTMENT_BRIGHTNESS := "ui_3d_preview_adjustment_brightness"
44+
const SETTING_PREVIEW_ADJUSTMENT_CONTRAST := "ui_3d_preview_adjustment_contrast"
45+
const SETTING_PREVIEW_ADJUSTMENT_SATURATION := "ui_3d_preview_adjustment_saturation"
46+
47+
var environment : Environment
48+
49+
50+
func _open() -> void:
51+
pass
52+
53+
54+
func _ready() -> void:
55+
await preview3D.ready
56+
environment = preview3D.environment
57+
58+
if mm_globals.has_config(SETTING_PREVIEW_TONEMAP_ENABLED):
59+
Tonemap.button_pressed = mm_globals.get_config(SETTING_PREVIEW_TONEMAP_ENABLED)
60+
restore_tonemap_settings()
61+
62+
if mm_globals.has_config(SETTING_PREVIEW_GLOW_ENABLED):
63+
Glow.button_pressed = mm_globals.get_config(SETTING_PREVIEW_GLOW_ENABLED)
64+
environment.glow_enabled = Glow.button_pressed
65+
$VBoxContainer/GlowSection.visible = Glow.button_pressed
66+
67+
if mm_globals.has_config(SETTING_PREVIEW_GLOW_SIZE):
68+
GlowBleed.value = mm_globals.get_config(SETTING_PREVIEW_GLOW_SIZE)
69+
environment.glow_hdr_scale = GlowBleed.value
70+
71+
if mm_globals.has_config(SETTING_PREVIEW_GLOW_BLOOM):
72+
GlowBloom.value = mm_globals.get_config(SETTING_PREVIEW_GLOW_BLOOM)
73+
environment.glow_bloom = GlowBloom.value
74+
75+
if mm_globals.has_config(SETTING_PREVIEW_GLOW_INTENSITY):
76+
GlowIntensity.value = mm_globals.get_config(SETTING_PREVIEW_GLOW_INTENSITY)
77+
environment.glow_intensity = GlowIntensity.value
78+
79+
if mm_globals.has_config(SETTING_PREVIEW_GLOW_STRENGTH):
80+
GlowClamp.value = mm_globals.get_config(SETTING_PREVIEW_GLOW_STRENGTH)
81+
environment.glow_strength = GlowStrength.value
82+
83+
if mm_globals.has_config(SETTING_PREVIEW_GLOW_BLEND_MODE):
84+
GlowBlendMode.selected = mm_globals.get_config(SETTING_PREVIEW_GLOW_BLEND_MODE)
85+
environment.glow_blend_mode = GlowBlendMode.selected
86+
GlowBlendMix.visible = GlowBlendMode.selected == Environment.GLOW_BLEND_MODE_MIX
87+
GlowBlendMixLabel.visible = GlowBlendMode.selected == Environment.GLOW_BLEND_MODE_MIX
88+
GlowIntensity.visible = GlowBlendMode.selected != Environment.GLOW_BLEND_MODE_MIX
89+
GlowIntensityLabel.visible = GlowBlendMode.selected != Environment.GLOW_BLEND_MODE_MIX
90+
91+
if mm_globals.has_config(SETTING_PREVIEW_GLOW_BLEND_MIX_FAC):
92+
GlowBlendMix.value = mm_globals.get_config(SETTING_PREVIEW_GLOW_BLEND_MIX_FAC)
93+
environment.glow_mix = GlowBlendMix.value
94+
95+
if mm_globals.has_config(SETTING_PREVIEW_GLOW_LOWER_THRESHOLD):
96+
GlowThreshold.value = mm_globals.get_config(SETTING_PREVIEW_GLOW_LOWER_THRESHOLD)
97+
environment.glow_hdr_threshold = GlowThreshold.value
98+
99+
if mm_globals.has_config(SETTING_PREVIEW_GLOW_UPPER_THRESHOLD):
100+
GlowClamp.value = mm_globals.get_config(SETTING_PREVIEW_GLOW_UPPER_THRESHOLD)
101+
environment.glow_hdr_luminance_cap = GlowClamp.value
102+
103+
if mm_globals.has_config(SETTING_PREVIEW_ADJUSTMENT_ENABLED):
104+
Adjustment.button_pressed = mm_globals.get_config(SETTING_PREVIEW_ADJUSTMENT_ENABLED)
105+
environment.adjustment_enabled = Adjustment.button_pressed
106+
$VBoxContainer/AdjustmentSection.visible = Adjustment.button_pressed
107+
108+
if mm_globals.has_config(SETTING_PREVIEW_ADJUSTMENT_BRIGHTNESS):
109+
AdjustmentBrightness.value = mm_globals.get_config(SETTING_PREVIEW_ADJUSTMENT_BRIGHTNESS)
110+
environment.adjustment_brightness = AdjustmentBrightness.value
111+
112+
if mm_globals.has_config(SETTING_PREVIEW_ADJUSTMENT_CONTRAST):
113+
AdjustmentContrast.value = mm_globals.get_config(SETTING_PREVIEW_ADJUSTMENT_CONTRAST)
114+
environment.adjustment_contrast = AdjustmentContrast.value
115+
116+
if mm_globals.has_config(SETTING_PREVIEW_ADJUSTMENT_SATURATION):
117+
AdjustmentSaturation.value = mm_globals.get_config(SETTING_PREVIEW_ADJUSTMENT_SATURATION)
118+
environment.adjustment_saturation = AdjustmentSaturation.value
119+
120+
121+
func _on_minimum_size_changed() -> void:
122+
size = get_combined_minimum_size()
123+
124+
125+
func _on_glow_blending_item_selected(index: int) -> void:
126+
environment.glow_blend_mode = index
127+
mm_globals.set_config(SETTING_PREVIEW_GLOW_BLEND_MODE, index)
128+
GlowBlendMix.visible = index == Environment.GLOW_BLEND_MODE_MIX
129+
GlowBlendMixLabel.visible = index == Environment.GLOW_BLEND_MODE_MIX
130+
GlowIntensity.visible = GlowBlendMode.selected != Environment.GLOW_BLEND_MODE_MIX
131+
GlowIntensityLabel.visible = GlowBlendMode.selected != Environment.GLOW_BLEND_MODE_MIX
132+
133+
134+
func _on_glow_blend_mix_value_changed(value: Variant) -> void:
135+
environment.glow_mix = value
136+
mm_globals.set_config(SETTING_PREVIEW_GLOW_BLEND_MIX_FAC, value)
137+
138+
139+
func _on_glow_size_value_changed(value: Variant) -> void:
140+
environment.glow_hdr_scale = value
141+
mm_globals.set_config(SETTING_PREVIEW_GLOW_SIZE, value)
142+
143+
144+
func _on_glow_toggled(toggled_on: bool) -> void:
145+
environment.glow_enabled = toggled_on
146+
$VBoxContainer/GlowSection.visible = Glow.button_pressed
147+
mm_globals.set_config(SETTING_PREVIEW_GLOW_ENABLED, toggled_on)
148+
149+
150+
func _on_glow_bloom_value_changed(value: Variant) -> void:
151+
environment.glow_bloom = value
152+
mm_globals.set_config(SETTING_PREVIEW_GLOW_BLOOM, value)
153+
154+
155+
func _on_glow_intensity_value_changed(value: Variant) -> void:
156+
environment.glow_intensity = value
157+
mm_globals.set_config(SETTING_PREVIEW_GLOW_INTENSITY, value)
158+
159+
160+
func _on_glow_threshold_value_changed(value: Variant) -> void:
161+
environment.glow_hdr_threshold = value
162+
mm_globals.set_config(SETTING_PREVIEW_GLOW_LOWER_THRESHOLD, value)
163+
164+
165+
func _on_glow_clamp_value_changed(value: Variant) -> void:
166+
environment.glow_hdr_luminance_cap = value
167+
mm_globals.set_config(SETTING_PREVIEW_GLOW_UPPER_THRESHOLD, value)
168+
169+
170+
func _on_glow_strength_value_changed(value: Variant) -> void:
171+
environment.glow_strength = value
172+
mm_globals.set_config(SETTING_PREVIEW_GLOW_STRENGTH, value)
173+
174+
175+
func _on_adjustment_toggled(toggled_on: bool) -> void:
176+
environment.adjustment_enabled = toggled_on
177+
$VBoxContainer/AdjustmentSection.visible = toggled_on
178+
mm_globals.set_config(SETTING_PREVIEW_ADJUSTMENT_ENABLED, toggled_on)
179+
180+
181+
func _on_adjustment_brightness_value_changed(value: Variant) -> void:
182+
environment.adjustment_brightness = value
183+
mm_globals.set_config(SETTING_PREVIEW_ADJUSTMENT_BRIGHTNESS, value)
184+
185+
186+
func _on_adjustment_contrast_value_changed(value: Variant) -> void:
187+
environment.adjustment_contrast = value
188+
mm_globals.set_config(SETTING_PREVIEW_ADJUSTMENT_CONTRAST, value)
189+
190+
191+
func _on_adjustment_saturation_value_changed(value: Variant) -> void:
192+
environment.adjustment_saturation = value
193+
mm_globals.set_config(SETTING_PREVIEW_ADJUSTMENT_SATURATION, value)
194+
195+
196+
func restore_tonemap_settings() -> void:
197+
if Tonemap.button_pressed:
198+
if mm_globals.has_config(SETTING_PREVIEW_TONEMAP):
199+
TonemapMode.selected = mm_globals.get_config(SETTING_PREVIEW_TONEMAP)
200+
environment.tonemap_mode = TonemapMode.selected
201+
202+
if mm_globals.has_config(SETTING_PREVIEW_TONEMAP_EXPOSURE):
203+
TonemapExposure.value = mm_globals.get_config(SETTING_PREVIEW_TONEMAP_EXPOSURE)
204+
environment.tonemap_exposure = TonemapExposure.value
205+
206+
if mm_globals.has_config(SETTING_PREVIEW_TONEMAP_WHITE):
207+
TonemapWhite.value = mm_globals.get_config(SETTING_PREVIEW_TONEMAP_WHITE)
208+
environment.tonemap_white = TonemapWhite.value
209+
210+
func _on_tonemap_toggled(toggled_on: bool) -> void:
211+
$VBoxContainer/TonemapSection.visible = toggled_on
212+
mm_globals.set_config(SETTING_PREVIEW_TONEMAP_ENABLED, toggled_on)
213+
if not toggled_on:
214+
environment.tonemap_mode = Environment.TONE_MAPPER_LINEAR
215+
environment.tonemap_exposure = 1.0
216+
environment.tonemap_white = 1.0
217+
else:
218+
restore_tonemap_settings()
219+
220+
221+
func _on_tone_map_item_selected(index: int) -> void:
222+
environment.tonemap_mode = index
223+
mm_globals.set_config(SETTING_PREVIEW_TONEMAP, index)
224+
225+
226+
func _on_tonemap_white_value_changed(value: Variant) -> void:
227+
environment.tonemap_white = value
228+
mm_globals.set_config(SETTING_PREVIEW_TONEMAP_WHITE, value)
229+
230+
231+
func _on_tonemap_exposure_value_changed(value: Variant) -> void:
232+
environment.tonemap_exposure = value
233+
mm_globals.set_config(SETTING_PREVIEW_TONEMAP_EXPOSURE, value)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
uid://bspumned10eag

material_maker/panels/preview_3d/preview_3d.gd

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ const CAMERA_FOV_MAX = 90
1414
@onready var camera = $MaterialPreview/Preview3d/Camera3D
1515
@onready var sun = $MaterialPreview/Preview3d/Sun
1616

17+
@onready var environment : Environment = $MaterialPreview/Preview3d/WorldEnvironment.environment
18+
1719
var trigger_on_right_click = true
1820

1921
var moving = false
@@ -111,24 +113,13 @@ func set_environment(id:int) -> void:
111113
if id >= 0:
112114
current_environment = id
113115
var environment_manager = get_node("/root/MainWindow/EnvironmentManager")
114-
var environment = $MaterialPreview/Preview3d/WorldEnvironment.environment
115116
if clear_background:
116117
$MaterialPreview.transparent_bg = true
117118
environment_manager.apply_environment(current_environment, environment, sun, Color.TRANSPARENT, true)
118119
else:
119120
$MaterialPreview.transparent_bg = false
120121
environment_manager.apply_environment(current_environment, environment, sun)
121122

122-
environment.tonemap_mode = mm_globals.get_config("ui_3d_preview_tonemap")
123-
environment.tonemap_exposure = mm_globals.get_config("ui_3d_preview_tonemap_exposure")
124-
environment.tonemap_white = mm_globals.get_config("ui_3d_preview_tonemap_white")
125-
126-
127-
func set_tonemap(id) -> void:
128-
mm_globals.set_config("ui_3d_preview_tonemap", id)
129-
var environment = $MaterialPreview/Preview3d/WorldEnvironment.environment
130-
environment.tonemap_mode = id
131-
132123

133124
func configure_model() -> void:
134125
var popup = preload("res://material_maker/panels/preview_3d/mesh_config_popup.tscn").instantiate()
@@ -249,15 +240,3 @@ func do_generate_map(file_name : String, map : String, image_size : int) -> void
249240
var t : MMTexture = await MMMapGenerator.get_map(object.mesh, map, image_size)
250241
t.save_to_file(file_name)
251242
DisplayServer.clipboard_set("{\"name\":\"image\",\"parameters\":{\"image\":\"%s\"},\"type\":\"image\"}" % file_name)
252-
253-
254-
func _on_exposure_value_changed(value: Variant) -> void:
255-
var environment = $MaterialPreview/Preview3d/WorldEnvironment.environment
256-
environment.tonemap_exposure = value
257-
mm_globals.set_config("ui_3d_preview_tonemap_exposure", value)
258-
259-
260-
func _on_white_value_changed(value: Variant) -> void:
261-
var environment = $MaterialPreview/Preview3d/WorldEnvironment.environment
262-
environment.tonemap_white = value
263-
mm_globals.set_config("ui_3d_preview_tonemap_white", value)

0 commit comments

Comments
 (0)