Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve Node design #698

Merged
merged 43 commits into from
Aug 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
34323e5
Add Panel to StatusBar
Jowan-Spooner Jul 5, 2024
951eecb
Improve design of Library Panel
Jowan-Spooner Jul 5, 2024
2cada8c
Make flexbible tab font color change when unselected
Jowan-Spooner Jul 5, 2024
dacb499
Move UndoRedoLabel and use Dotted Grid
Jowan-Spooner Jul 5, 2024
d1656f1
Fix typo
Jowan-Spooner Jul 5, 2024
6b74732
Adjust Nodes left and right content margin
Jowan-Spooner Jul 16, 2024
ca85681
Resize Node Labels
Jowan-Spooner Jul 16, 2024
350f837
Implement new Float Edit
Jowan-Spooner Jul 16, 2024
5d2100e
Allow CTRL+Scrolling on new float edit
Jowan-Spooner Jul 16, 2024
9587eda
Allow right click > Open Expression Editor when Editing value
Jowan-Spooner Jul 16, 2024
22d3130
New Output-Preview indicators
Jowan-Spooner Jul 16, 2024
16073a4
Adjustments to float edit
Jowan-Spooner Jul 17, 2024
df36f17
Make FloatEdit font slightly smaller
Jowan-Spooner Jul 17, 2024
b7e393d
Don't show incorrect preview indication when first preview is locked
Jowan-Spooner Jul 17, 2024
1d5acd1
Adjust port colors
Jowan-Spooner Jul 17, 2024
292bfb2
Make node parameter label size more adaptive
Jowan-Spooner Jul 17, 2024
2bf50c2
Add hover and focus indication to float edit
Jowan-Spooner Jul 17, 2024
be5df17
Improve usage of float_edit in settings
Jowan-Spooner Jul 30, 2024
cabe1f5
Improve clicking
Jowan-Spooner Jul 30, 2024
ce55074
Allow Ctrl+Scroll in Edit mode too
Jowan-Spooner Jul 30, 2024
25b4432
Slightly improve node bg stylebox
Jowan-Spooner Jul 30, 2024
01a996b
Better Option Edit
Jowan-Spooner Jul 30, 2024
fad3d99
Implement Hover-Copy+Paste on values
Jowan-Spooner Jul 30, 2024
3eebcd0
Remove unnecessary spacing controls in nodes
Jowan-Spooner Jul 30, 2024
2f8116c
Better Tooltip Panel
Jowan-Spooner Jul 30, 2024
a4df4d0
Gradient Edit rework
Jowan-Spooner Aug 3, 2024
0d90a96
Remove old Gradient Editor
Jowan-Spooner Aug 3, 2024
ffb23be
Allow to Ctrl+C and Ctrl+V Gradient
Jowan-Spooner Aug 3, 2024
815e62e
Tiny fix to GradientEdit pasting color
Jowan-Spooner Aug 3, 2024
f130436
Updated export presets for new gradient parameter editor
RodZill4 Aug 3, 2024
6fed02d
Increase port-zone and fix Reference panel Gradient preview
Jowan-Spooner Aug 3, 2024
9ecb01a
Merge branch 'master' into better-nodes
RodZill4 Aug 3, 2024
84b839e
Improve ImagePicker ui
Jowan-Spooner Aug 4, 2024
49b999c
Re-introduce minimum size
Jowan-Spooner Aug 4, 2024
0364872
Improve/fix Float Edit snapping
Jowan-Spooner Aug 4, 2024
b484342
Fix HoverPressed stylebox for CheckBox buttons
Jowan-Spooner Aug 4, 2024
6ef78b3
Attempt at fixing the graph loading
Jowan-Spooner Aug 6, 2024
d9886e9
Decrease port-hotzone to fix reroute moving and right-click menu
Jowan-Spooner Aug 8, 2024
ea3aba2
Updated gradient type for constant interpolation
RodZill4 Aug 16, 2024
8405d4a
Fixed gradient interpolation names
RodZill4 Aug 16, 2024
7b4639c
Fix icon_pressed_hover color
Jowan-Spooner Aug 16, 2024
dc3a708
Improved gradient editor cursor edge color
RodZill4 Aug 18, 2024
99fd169
Fixed port type colors in doc
RodZill4 Aug 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions addons/flexible_layout/flexible_tab.gd
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ func update():
add_theme_stylebox_override("panel", get_theme_stylebox("tab_selected" if is_current else "tab_unselected", "MM_FlexibleTab"))
$Container/Undock.visible = is_current and get_flex_layout().main_control.allow_undock
$Container/Close.visible = is_current
$Container/Label.add_theme_color_override("font_color", get_theme_color("font_selected_color" if is_current else "font_unselected_color", "MM_FlexibleTab") )
updating = false

func _on_undock_pressed():
Expand Down
5 changes: 4 additions & 1 deletion addons/material_maker/engine/io_types.gd
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ func _ready():
if t.has("label"):
type_names.push_back(t.name)
var c = t.color
t.color = Color(c.r, c.g, c.b, c.a)
if c is String:
t.color = Color(c)
else:
t.color = Color(c.r, c.g, c.b, c.a)
file = FileAccess.open(p+"/preview_"+t.name+".gdshader", FileAccess.READ)
if file != null:
t.preview = file.get_as_text()
Expand Down
2 changes: 1 addition & 1 deletion addons/material_maker/engine/loader.gd
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ func create_gen(data : Dictionary, fix : bool = true) -> MMGenBase:
if generator == null:
print("LOADER: data not supported:"+str(data))
if generator != null:
var status = generator.deserialize(data)
var status = await generator.deserialize(data)
return generator

func get_generator_list() -> Array:
Expand Down
2 changes: 1 addition & 1 deletion addons/material_maker/engine/nodes/gen_base.gd
Original file line number Diff line number Diff line change
Expand Up @@ -669,7 +669,7 @@ func _deserialize(_data : Dictionary) -> void:
pass

func deserialize(data : Dictionary) -> void:
_deserialize(data)
await _deserialize(data)
if data.has("name"):
name = data.name
if data.has("node_position"):
Expand Down
2 changes: 2 additions & 0 deletions addons/material_maker/engine/nodes/gen_buffer.gd
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ func update_shader() -> void:
func do_update_shader() -> void:
if ! is_instance_valid(self) or exiting:
return
if not is_node_ready():
await ready
updating_shader = false
var context : MMGenContext = MMGenContext.new()
var source : ShaderCode
Expand Down
22 changes: 11 additions & 11 deletions addons/material_maker/nodes/io_types.mmt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
{ "type":"rgb", "expr":"vec3($(value))" },
{ "type":"rgba", "expr":"vec4(vec3($(value)), 1.0)" }
],
"color":{ "r":0.5, "g":0.5, "b":0.5, "a":1.0 }
"color":"#8D8D8D",
},
{
"name":"rgb",
Expand All @@ -23,7 +23,7 @@
{ "type":"f", "expr":"(dot($(value), vec3(1.0))/3.0)" },
{ "type":"rgba", "expr":"vec4($(value), 1.0)" }
],
"color":{ "r":0.5, "g":0.5, "b":1.0, "a":1.0 }
"color":"#33A3C7",
},
{
"name":"rgba",
Expand All @@ -36,7 +36,7 @@
{ "type":"f", "expr":"(dot(($(value)).rgb, vec3(1.0))/3.0)" },
{ "type":"rgb", "expr":"(($(value)).rgb)" }
],
"color":{ "r":0.0, "g":0.5, "b":0.0, "a":0.5 }
"color":"#335DC7",
},
{
"name":"sdf2d",
Expand All @@ -45,7 +45,7 @@
"paramdefs":"vec2 uv",
"params":"uv",
"slot_type":1,
"color":{ "r":1.0, "g":0.5, "b":0.0, "a":1.0 }
"color":"#E8A31D",
},
{
"name":"sdf3d",
Expand All @@ -57,7 +57,7 @@
"convert":[
{ "type":"sdf3dc", "expr":"vec2($(value), 0.0)" }
],
"color":{ "r":0.5, "g":0.0, "b":0.0, "a":1.0 }
"color":"#EB6135",
},
{
"name":"sdf3dc",
Expand All @@ -69,7 +69,7 @@
"convert":[
{ "type":"sdf3d", "expr":"($(value)).x" }
],
"color":{ "r":1.0, "g":0.0, "b":0.0, "a":1.0 }
"color":"#DF2626",
},
{
"name":"tex3d_gs",
Expand All @@ -81,7 +81,7 @@
"convert":[
{ "type":"tex3d", "expr":"vec3($(value))" }
],
"color":{ "r":0.8, "g":0.0, "b":1.0, "a":1.0 }
"color":"#A734DD",
},
{
"name":"tex3d",
Expand All @@ -93,7 +93,7 @@
"convert":[
{ "type":"tex3d_gs", "expr":"(dot($(value), vec3(1.0))/3.0)" }
],
"color":{ "r":1.0, "g":0.0, "b":1.0, "a":1.0 }
"color":"#E739D5",
},
{
"name":"v4v4",
Expand All @@ -102,7 +102,7 @@
"paramdefs":"vec4 p",
"params":"p",
"slot_type":4,
"color":{ "r":0.6, "g":0.4, "b":0.1, "a":1.0 }
"color":"#B79074",
},
{
"name":"fill",
Expand All @@ -111,11 +111,11 @@
"paramdefs":"vec2 uv",
"params":"uv",
"slot_type":5,
"color":{ "r":0.86, "g":0.73, "b":0.53, "a":1.0 }
"color":"#2DB76C",
},
{
"name":"any",
"slot_type":42,
"color":{ "r":1.0, "g":1.0, "b":1.0, "a":1.0 }
"color":"#DEDEDE",
}
]
27 changes: 23 additions & 4 deletions addons/material_maker/types/gradient.gd
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,15 @@ func get_shader_params(parameter_name : String, attribute : String = "uniform")
rv += p.to_str(attribute)
return rv


func get_parameters(parameter_name : String) -> Array[MMGenBase.ShaderUniform]:
var rv : Array[MMGenBase.ShaderUniform] = []
var parameter_values : Dictionary = get_parameter_values(parameter_name)
rv.append(MMGenBase.ShaderUniform.new("p_%s_pos" % parameter_name, "float", parameter_values["p_%s_pos" % parameter_name], points.size()))
rv.append(MMGenBase.ShaderUniform.new("p_%s_col" % parameter_name, "vec4", parameter_values["p_%s_col" % parameter_name], points.size()))
return rv


func get_parameter_values(parameter_name : String) -> Dictionary:
sort()
var rv : Dictionary = {}
Expand Down Expand Up @@ -115,11 +117,11 @@ func get_shader(parameter_name : String) -> String:
match interpolation:
0:
if points.size() > 0:
shader += " if (x < 0.5*(%s+%s)) {\n" % [ pv(parameter_name, 0), pv(parameter_name, 1) ]
shader += " if (x < %s) {\n" % pv(parameter_name, 1)
shader += " return "+pc(parameter_name, 0)+";\n"
var s = points.size()-1
for i in range(1, s):
shader += " } else if (x < 0.5*(%s+%s)) {\n" % [ pv(parameter_name, i), pv(parameter_name, i+1) ]
shader += " } else if (x < %s) {\n" % pv(parameter_name, i+1)
shader += " return "+pc(parameter_name, i)+";\n"
shader += " }\n"
shader += " return "+pc(parameter_name, s)+";\n"
Expand Down Expand Up @@ -172,8 +174,17 @@ func get_shader(parameter_name : String) -> String:
func serialize() -> Dictionary:
sort()
var rv = []
for p in points:
rv.append({ pos=p.v, r=p.c.r, g=p.c.g, b=p.c.b, a=p.c.a })
if interpolation == 0:
var p : Point = points[0]
rv.append({ pos=0, r=p.c.r, g=p.c.g, b=p.c.b, a=p.c.a })
for i in range(1, points.size()):
var next_p : Point = points[i]
rv.append({ pos=next_p.v-0.00001, r=p.c.r, g=p.c.g, b=p.c.b, a=p.c.a })
p = next_p
rv.append({ pos=next_p.v+0.00001, r=p.c.r, g=p.c.g, b=p.c.b, a=p.c.a })
else:
for p in points:
rv.append({ pos=p.v, r=p.c.r, g=p.c.g, b=p.c.b, a=p.c.a })
rv = { type="Gradient", points=rv, interpolation=interpolation }
return rv

Expand All @@ -183,12 +194,20 @@ func deserialize(v) -> void:
for i in v:
if !i.has("a"): i.a = 1.0
add_point(i.pos, Color(i.r, i.g, i.b, i.a))
interpolation = 1
elif typeof(v) == TYPE_DICTIONARY and v.has("type") && v.type == "Gradient":
for i in v.points:
if !i.has("a"): i.a = 1.0
add_point(i.pos, Color(i.r, i.g, i.b, i.a))
if v.has("interpolation"):
interpolation = int(v.interpolation)
if interpolation == 0:
for i in range(points.size()-1, 0, -1):
if points[i].c == points[i-1].c:
points.remove_at(i)
else:
points[i].v = 0.5*(points[i-1].v+points[i].v)
points[0].v = 0
else:
interpolation = 1
elif typeof(v) == TYPE_OBJECT and v.get_script() == get_script():
Expand Down
6 changes: 3 additions & 3 deletions export_presets.cfg

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions material_maker/doc/nodes_common.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,17 @@ connected to several node inputs. Each node output (and input) can be:

* a **color image** (shown in blue)

* an **RGBA image** (shown in semi-transparent green)
* an **RGBA image** (shown in blue)

* a **2D signed distance function** (shown in orange)

* a **3D signed distance function** (shown in red), with or without a color index
* a **3D signed distance function** (shown in orange-red), with or without a color index

* a color or greyscale **3D texture** (shown in fuchsia), that can be associated to
* a color or greyscale **3D texture** (shown in violet), that can be associated to
a color index, which makes it possible to associate several 3D textures in a single
3D scene

* **Fill information** (shown in light orange), that contain the bounding box of the
* **Fill information** (shown in green), that contain the bounding box of the
area. This information is generated by the Fill node and a few pattern nodes, and is
used as input by the Fill companion nodes

Expand Down
48 changes: 24 additions & 24 deletions material_maker/main_window.gd
Original file line number Diff line number Diff line change
Expand Up @@ -119,35 +119,35 @@ func _ready() -> void:
get_window().transparent = false
get_window().move_to_foreground()
get_window().gui_embed_subwindows = false

get_window().close_requested.connect(self.on_close_requested)

get_tree().set_auto_accept_quit(false)

if mm_globals.get_config("locale") == "":
mm_globals.set_config("locale", TranslationServer.get_locale())

on_config_changed()

# Restore the window position/size if values are present in the configuration cache
if mm_globals.config.has_section_key("window", "screen"):
get_window().current_screen = mm_globals.config.get_value("window", "screen")

if mm_globals.config.has_section_key("window", "maximized"):
get_window().mode = Window.MODE_MAXIMIZED if (mm_globals.config.get_value("window", "maximized")) else Window.MODE_WINDOWED

if get_window().mode != Window.MODE_MAXIMIZED:
if mm_globals.config.has_section_key("window", "position"):
get_window().position = mm_globals.config.get_value("window", "position")
if mm_globals.config.has_section_key("window", "size"):
get_window().size = mm_globals.config.get_value("window", "size")

# Restore the theme
var theme_name : String = "default"
if mm_globals.config.has_section_key("window", "theme"):
theme_name = mm_globals.config.get_value("window", "theme")
change_theme(theme_name)

# In HTML5 export, copy all examples to the filesystem
if OS.get_name() == "HTML5":
print("Copying samples")
Expand All @@ -161,13 +161,13 @@ func _ready() -> void:
if f.ends_with(".ptex"):
print(f)
dir.copy("res://material_maker/examples/"+f, "/examples/"+f)

# Set a minimum window size to prevent UI elements from collapsing on each other.
get_window().min_size = Vector2(1024, 600)

# Set window title
get_window().set_title(ProjectSettings.get_setting("application/config/name")+" v"+ProjectSettings.get_setting("application/config/actual_release"))

layout.load_panels()
library = get_panel("Library")
preview_2d = [ get_panel("Preview2D"), get_panel("Preview2D (2)") ]
Expand All @@ -177,12 +177,12 @@ func _ready() -> void:
hierarchy = get_panel("Hierarchy")
hierarchy.connect("group_selected", self.on_group_selected)
brushes = get_panel("Brushes")

# Load recent projects
load_recents()

get_window().connect("files_dropped", self.on_files_dropped)

var args : PackedStringArray = OS.get_cmdline_args()
for a in args:
if a.get_extension() == "ptex":
Expand All @@ -198,7 +198,7 @@ func _ready() -> void:
continue
var project_filename : String = mesh_filename.get_basename()+".mmpp"
create_paint_project(mesh, mesh_filename, 1024, project_filename)

# Rescue unsaved projects
if true:
var dir : DirAccess = DirAccess.open("user://unsaved_projects")
Expand All @@ -223,16 +223,16 @@ func _ready() -> void:
"delete":
for f in files:
DirAccess.remove_absolute(f)

if get_current_graph_edit() == null:
await get_tree().process_frame
new_material()

size = get_window().size
position = Vector2.ZERO
set_anchors_preset(Control.PRESET_FULL_RECT)
update_menus()

mm_logger.message("Material Maker "+ProjectSettings.get_setting("application/config/actual_release"))

var menu_update_requested : bool = false
Expand Down Expand Up @@ -288,7 +288,7 @@ func on_config_changed() -> void:
ui_scale = 2 if DisplayServer.screen_get_dpi() >= 192 and DisplayServer.screen_get_size().x >= 2048 else 1
get_viewport().content_scale_factor = ui_scale
#ProjectSettings.set_setting("display/window/stretch/scale", scale)

# Clamp to reasonable values to avoid crashes on startup.
preview_rendering_scale_factor = clamp(mm_globals.get_config("ui_3d_preview_resolution"), 1.0, 2.0)
# warning-ignore:narrowing_conversion
Expand Down Expand Up @@ -566,7 +566,7 @@ func get_file_absolute_path(filename : String) -> String:
if file == null:
return ""
return file.get_path_absolute()

func do_load_projects(filenames) -> void:
var file_name : String = ""
for f in filenames:
Expand Down Expand Up @@ -1194,16 +1194,16 @@ func set_tip_text(tip : String, timeout : float = 0.0):
tip = tip.replace("#LMB", "[img]res://material_maker/icons/lmb.tres[/img]")
tip = tip.replace("#RMB", "[img]res://material_maker/icons/rmb.tres[/img]")
tip = tip.replace("#MMB", "[img]res://material_maker/icons/mmb.tres[/img]")
$VBoxContainer/StatusBar/Tip.text = tip
var tip_timer : Timer = $VBoxContainer/StatusBar/Tip/Timer
$VBoxContainer/StatusBar/HBox/Tip.text = tip
var tip_timer : Timer = $VBoxContainer/StatusBar/HBox/Tip/Timer
tip_timer.stop()
if timeout > 0.0:
tip_timer.one_shot = true
tip_timer.wait_time = timeout
tip_timer.start()

func _on_Tip_Timer_timeout():
$VBoxContainer/StatusBar/Tip.text = ""
$VBoxContainer/StatusBar/HBox/Tip.text = ""

# Add dialog

Expand Down
Loading