Add AO packing to channel packer
This commit is contained in:
parent
7f3735a7f4
commit
adb379b418
|
|
@ -15,7 +15,8 @@ enum {
|
|||
IMAGE_ALBEDO,
|
||||
IMAGE_HEIGHT,
|
||||
IMAGE_NORMAL,
|
||||
IMAGE_ROUGHNESS
|
||||
IMAGE_ROUGHNESS,
|
||||
IMAGE_AO
|
||||
}
|
||||
|
||||
var plugin: EditorPlugin
|
||||
|
|
@ -36,11 +37,13 @@ var height_channel: Array[Button]
|
|||
var height_channel_selected: int = 0
|
||||
var roughness_channel: Array[Button]
|
||||
var roughness_channel_selected: int = 0
|
||||
var occlusion_channel: Array[Button]
|
||||
var occlusion_channel_selected: int = 0
|
||||
var last_opened_directory: String
|
||||
var last_saved_directory: String
|
||||
var packing_albedo: bool = false
|
||||
var queue_pack_normal_roughness: bool = false
|
||||
var images: Array[Image] = [null, null, null, null]
|
||||
var images: Array[Image] = [null, null, null, null, null]
|
||||
var status_label: Label
|
||||
var no_op: Callable = func(): pass
|
||||
var last_file_selected_fn: Callable = no_op
|
||||
|
|
@ -89,6 +92,12 @@ func pack_textures_popup() -> void:
|
|||
window.find_child("RoughnessChannelB") as Button,
|
||||
window.find_child("RoughnessChannelA") as Button
|
||||
]
|
||||
occlusion_channel = [
|
||||
window.find_child("RoughnessChannelR") as Button,
|
||||
window.find_child("RoughnessChannelG") as Button,
|
||||
window.find_child("RoughnessChannelB") as Button,
|
||||
window.find_child("RoughnessChannelA") as Button
|
||||
]
|
||||
|
||||
height_channel[0].pressed.connect(func() -> void: height_channel_selected = 0)
|
||||
height_channel[1].pressed.connect(func() -> void: height_channel_selected = 1)
|
||||
|
|
@ -100,6 +109,11 @@ func pack_textures_popup() -> void:
|
|||
roughness_channel[2].pressed.connect(func() -> void: roughness_channel_selected = 2)
|
||||
roughness_channel[3].pressed.connect(func() -> void: roughness_channel_selected = 3)
|
||||
|
||||
occlusion_channel[0].pressed.connect(func() -> void: occlusion_channel_selected = 0)
|
||||
occlusion_channel[1].pressed.connect(func() -> void: occlusion_channel_selected = 1)
|
||||
occlusion_channel[2].pressed.connect(func() -> void: occlusion_channel_selected = 2)
|
||||
occlusion_channel[3].pressed.connect(func() -> void: occlusion_channel_selected = 3)
|
||||
|
||||
plugin.add_child(window)
|
||||
_init_file_dialogs()
|
||||
|
||||
|
|
@ -116,13 +130,14 @@ func pack_textures_popup() -> void:
|
|||
_init_texture_picker(window.find_child("HeightVBox"), IMAGE_HEIGHT)
|
||||
_init_texture_picker(window.find_child("NormalVBox"), IMAGE_NORMAL)
|
||||
_init_texture_picker(window.find_child("RoughnessVBox"), IMAGE_ROUGHNESS)
|
||||
_init_texture_picker(window.find_child("AmbientOcclusionVBox"), IMAGE_AO)
|
||||
|
||||
(window.find_child("PackButton") as Button).pressed.connect(_on_pack_button_pressed)
|
||||
|
||||
|
||||
func _on_close_requested() -> void:
|
||||
last_file_selected_fn = no_op
|
||||
images = [null, null, null, null]
|
||||
images = [null, null, null, null, null]
|
||||
window.queue_free()
|
||||
window = null
|
||||
|
||||
|
|
@ -180,6 +195,11 @@ func _init_texture_picker(p_parent: Node, p_image_index: int) -> void:
|
|||
roughness_channel[i].visible = i < channel_count
|
||||
roughness_channel[0].button_pressed = true
|
||||
roughness_channel[0].pressed.emit()
|
||||
elif p_image_index == IMAGE_AO:
|
||||
for i in 4:
|
||||
occlusion_channel[i].visible = i < channel_count
|
||||
occlusion_channel[0].button_pressed = true
|
||||
occlusion_channel[0].pressed.emit()
|
||||
|
||||
var load_image_fn: Callable = func(path: String):
|
||||
var image: Image = Image.new()
|
||||
|
|
@ -207,7 +227,7 @@ func _init_texture_picker(p_parent: Node, p_image_index: int) -> void:
|
|||
_set_wh_labels(p_image_index, image.get_width(), image.get_height())
|
||||
if p_image_index == IMAGE_NORMAL:
|
||||
_set_normal_vector(image)
|
||||
if p_image_index == IMAGE_HEIGHT or p_image_index == IMAGE_ROUGHNESS:
|
||||
if p_image_index == IMAGE_HEIGHT or p_image_index == IMAGE_ROUGHNESS or p_image_index == IMAGE_AO:
|
||||
set_channel_fn.call(image.detect_used_channels())
|
||||
|
||||
var os_drop_fn: Callable = func(files: PackedStringArray) -> void:
|
||||
|
|
@ -298,6 +318,9 @@ func _set_wh_labels(p_image_index: int, width: int, height: int) -> void:
|
|||
3:
|
||||
window.find_child("RoughnessW").text = w
|
||||
window.find_child("RoughnessH").text = h
|
||||
4:
|
||||
window.find_child("AmbientOcclusionW").text = w
|
||||
window.find_child("AmbientOcclusionH").text = h
|
||||
|
||||
|
||||
func _show_message(p_level: int, p_text: String) -> void:
|
||||
|
|
@ -354,12 +377,12 @@ func _on_save_file_selected(p_dst_path) -> void:
|
|||
last_saved_directory = p_dst_path.get_base_dir() + "/"
|
||||
var error: int
|
||||
if packing_albedo:
|
||||
error = _pack_textures(images[IMAGE_ALBEDO], images[IMAGE_HEIGHT], p_dst_path, false,
|
||||
error = _pack_textures(images[IMAGE_ALBEDO], images[IMAGE_HEIGHT], null, p_dst_path, false,
|
||||
invert_height_checkbox.button_pressed, false, normalize_height_checkbox.button_pressed, height_channel_selected)
|
||||
else:
|
||||
error = _pack_textures(images[IMAGE_NORMAL], images[IMAGE_ROUGHNESS], p_dst_path,
|
||||
error = _pack_textures(images[IMAGE_NORMAL], images[IMAGE_ROUGHNESS], images[IMAGE_AO], p_dst_path,
|
||||
invert_green_checkbox.button_pressed, invert_smooth_checkbox.button_pressed,
|
||||
align_normals_checkbox.button_pressed, false, roughness_channel_selected)
|
||||
align_normals_checkbox.button_pressed, false, roughness_channel_selected, occlusion_channel_selected)
|
||||
|
||||
if error == OK:
|
||||
EditorInterface.get_resource_filesystem().scan()
|
||||
|
|
@ -434,25 +457,31 @@ func _align_normals(source: Image, iteration: int = 0) -> void:
|
|||
_align_normals(source, iteration)
|
||||
|
||||
|
||||
func _pack_textures(p_rgb_image: Image, p_a_image: Image, p_dst_path: String, p_invert_green: bool,
|
||||
p_invert_smooth: bool, p_align_normals: bool, p_normalize_height: bool, p_alpha_channel: int) -> Error:
|
||||
func _pack_textures(p_rgb_image: Image, p_a_image: Image, p_ao_image: Image, p_dst_path: String, p_invert_green: bool,
|
||||
p_invert_smooth: bool, p_align_normals: bool, p_normalize_height: bool, p_alpha_channel: int, p_occlusion_channel: int = 0) -> Error:
|
||||
if p_rgb_image and p_a_image:
|
||||
if p_rgb_image.get_size() != p_a_image.get_size() and !resize_toggle_checkbox.button_pressed:
|
||||
_show_message(ERROR, "Textures must be the same size.\nEnable resize to override image dimensions")
|
||||
return FAILED
|
||||
if p_ao_image:
|
||||
if p_rgb_image.get_size() != p_ao_image.get_size() and !resize_toggle_checkbox.button_pressed:
|
||||
_show_message(ERROR, "Textures must be the same size.\nEnable resize to override image dimensions")
|
||||
return FAILED
|
||||
|
||||
if resize_toggle_checkbox.button_pressed:
|
||||
var size: int = max(128, resize_option_box.value)
|
||||
p_rgb_image.resize(size, size, Image.INTERPOLATE_CUBIC)
|
||||
p_a_image.resize(size, size, Image.INTERPOLATE_CUBIC)
|
||||
if p_ao_image:
|
||||
p_ao_image.resize(size, size, Image.INTERPOLATE_CUBIC)
|
||||
|
||||
if p_align_normals and normal_vector.dot(Vector3(0.0, 0.0, 1.0)) < 0.999:
|
||||
_align_normals(p_rgb_image)
|
||||
elif p_align_normals:
|
||||
_show_message(INFO, "Alignment OK, skipping Normal Orthogonalization")
|
||||
|
||||
var output_image: Image = Terrain3DUtil.pack_image(p_rgb_image, p_a_image,
|
||||
p_invert_green, p_invert_smooth, p_normalize_height, p_alpha_channel)
|
||||
var output_image: Image = Terrain3DUtil.pack_image(p_rgb_image, p_a_image, p_ao_image,
|
||||
p_invert_green, p_invert_smooth, p_normalize_height, p_alpha_channel, p_occlusion_channel)
|
||||
|
||||
if not output_image:
|
||||
_show_message(ERROR, "Failed to pack textures")
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://nud6dwjcnj5v"]
|
||||
[gd_scene load_steps=8 format=3 uid="uid://nud6dwjcnj5v"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mbo40"]
|
||||
draw_center = false
|
||||
|
|
@ -12,6 +12,9 @@ corner_radius_top_right = 5
|
|||
corner_radius_bottom_right = 5
|
||||
corner_radius_bottom_left = 5
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_mbo40"]
|
||||
outline_size = 1
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_cb0xf"]
|
||||
bg_color = Color(0.147, 0.168, 0.203, 1)
|
||||
draw_center = false
|
||||
|
|
@ -29,12 +32,14 @@ corner_radius_bottom_left = 5
|
|||
|
||||
[sub_resource type="ButtonGroup" id="ButtonGroup_wnxik"]
|
||||
|
||||
[sub_resource type="ButtonGroup" id="ButtonGroup_bs6ki"]
|
||||
[sub_resource type="ButtonGroup" id="ButtonGroup_47nos"]
|
||||
|
||||
[sub_resource type="ButtonGroup" id="ButtonGroup_mbo40"]
|
||||
|
||||
[node name="Window" type="Window"]
|
||||
title = "Terrain3D Channel Packer"
|
||||
initial_position = 1
|
||||
size = Vector2i(583, 891)
|
||||
size = Vector2i(828, 922)
|
||||
wrap_controls = true
|
||||
always_on_top = true
|
||||
|
||||
|
|
@ -56,54 +61,61 @@ theme_override_constants/margin_bottom = 5
|
|||
layout_mode = 2
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="AlbedoHeightPanel" type="PanelContainer" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
[node name="TabContainer" type="TabContainer" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
current_tab = 0
|
||||
|
||||
[node name="Albedo_Height" type="PanelContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_mbo40")
|
||||
metadata/_tab_index = 0
|
||||
metadata/_tab_name = "Albedo Height"
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel"]
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 10
|
||||
theme_override_constants/margin_top = 10
|
||||
theme_override_constants/margin_right = 10
|
||||
theme_override_constants/margin_bottom = 10
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer"]
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="AlbedoVBox" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer"]
|
||||
[node name="AlbedoVBox" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="AlbedoLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox"]
|
||||
[node name="AlbedoLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox"]
|
||||
layout_mode = 2
|
||||
text = "Albedo texture"
|
||||
label_settings = SubResource("LabelSettings_mbo40")
|
||||
|
||||
[node name="AlbedoHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox"]
|
||||
[node name="AlbedoHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/AlbedoHBox"]
|
||||
[node name="LineEdit" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox/AlbedoHBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="PickButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/AlbedoHBox"]
|
||||
[node name="PickButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox/AlbedoHBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ClearButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/AlbedoHBox"]
|
||||
[node name="ClearButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox/AlbedoHBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox"]
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
theme_override_constants/margin_top = 10
|
||||
|
||||
[node name="Panel" type="Panel" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/MarginContainer"]
|
||||
[node name="Panel" type="Panel" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox/MarginContainer"]
|
||||
custom_minimum_size = Vector2(110, 110)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_cb0xf")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/MarginContainer/Panel"]
|
||||
[node name="TextureRect" type="TextureRect" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox/MarginContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
|
|
@ -118,7 +130,7 @@ grow_horizontal = 2
|
|||
grow_vertical = 2
|
||||
expand_mode = 1
|
||||
|
||||
[node name="TextureButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/MarginContainer/Panel"]
|
||||
[node name="TextureButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox/MarginContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
|
|
@ -127,61 +139,62 @@ grow_horizontal = 2
|
|||
grow_vertical = 2
|
||||
theme_override_styles/normal = SubResource("StyleBoxEmpty_7qdas")
|
||||
|
||||
[node name="AlbedoWHHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox"]
|
||||
[node name="AlbedoWHHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="AlbedoW" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/AlbedoWHHBox"]
|
||||
[node name="AlbedoW" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox/AlbedoWHHBox"]
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="AlbedoH" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/AlbedoWHHBox"]
|
||||
[node name="AlbedoH" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox/AlbedoWHHBox"]
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox"]
|
||||
[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="LuminanceAsHeightButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/AlbedoVBox/HBoxContainer2"]
|
||||
[node name="LuminanceAsHeightButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/AlbedoVBox/HBoxContainer2"]
|
||||
layout_mode = 2
|
||||
text = " Generate Height from Luminance"
|
||||
icon_alignment = 2
|
||||
|
||||
[node name="HeightVBox" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer"]
|
||||
[node name="HeightVBox" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="HeightLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox"]
|
||||
[node name="HeightLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox"]
|
||||
layout_mode = 2
|
||||
text = "Height texture"
|
||||
label_settings = SubResource("LabelSettings_mbo40")
|
||||
|
||||
[node name="HeightHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox"]
|
||||
[node name="HeightHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HeightHBox"]
|
||||
[node name="LineEdit" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HeightHBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="PickButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HeightHBox"]
|
||||
[node name="PickButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HeightHBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ClearButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HeightHBox"]
|
||||
[node name="ClearButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HeightHBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox"]
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
theme_override_constants/margin_top = 10
|
||||
|
||||
[node name="Panel" type="Panel" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/MarginContainer"]
|
||||
[node name="Panel" type="Panel" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/MarginContainer"]
|
||||
custom_minimum_size = Vector2(110, 110)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_cb0xf")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/MarginContainer/Panel"]
|
||||
[node name="TextureRect" type="TextureRect" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/MarginContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
|
|
@ -196,7 +209,7 @@ grow_horizontal = 2
|
|||
grow_vertical = 2
|
||||
expand_mode = 1
|
||||
|
||||
[node name="TextureButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/MarginContainer/Panel"]
|
||||
[node name="TextureButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/MarginContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
|
|
@ -205,118 +218,124 @@ grow_horizontal = 2
|
|||
grow_vertical = 2
|
||||
theme_override_styles/normal = SubResource("StyleBoxEmpty_7qdas")
|
||||
|
||||
[node name="HeightWHHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox"]
|
||||
[node name="HeightWHHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="HeightW" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HeightWHHBox"]
|
||||
[node name="HeightW" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HeightWHHBox"]
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HeightH" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HeightWHHBox"]
|
||||
[node name="HeightH" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HeightWHHBox"]
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox"]
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="ConvertDepthToHeight" type="CheckBox" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HBoxContainer2"]
|
||||
layout_mode = 2
|
||||
text = " Convert Depth to Height"
|
||||
icon_alignment = 2
|
||||
|
||||
[node name="HBoxContainer3" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="NormalizeHeight" type="CheckBox" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HBoxContainer3"]
|
||||
layout_mode = 2
|
||||
text = "Normalize Height"
|
||||
icon_alignment = 2
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="HeightChannelLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HBoxContainer"]
|
||||
[node name="HeightChannelLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = " Source Channel: "
|
||||
horizontal_alignment = 2
|
||||
|
||||
[node name="HeightChannelR" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HBoxContainer"]
|
||||
[node name="HeightChannelR" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_pressed = true
|
||||
button_group = SubResource("ButtonGroup_wnxik")
|
||||
text = "R"
|
||||
|
||||
[node name="HeightChannelB" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HBoxContainer"]
|
||||
[node name="HeightChannelB" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_wnxik")
|
||||
text = "G"
|
||||
|
||||
[node name="HeightChannelG" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HBoxContainer"]
|
||||
[node name="HeightChannelG" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_wnxik")
|
||||
text = "B"
|
||||
|
||||
[node name="HeightChannelA" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/AlbedoHeightPanel/MarginContainer/HBoxContainer/HeightVBox/HBoxContainer"]
|
||||
[node name="HeightChannelA" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_wnxik")
|
||||
text = "A"
|
||||
|
||||
[node name="NormalRoughnessPanel" type="PanelContainer" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="ConvertDepthToHeight" type="CheckBox" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HBoxContainer2"]
|
||||
layout_mode = 2
|
||||
text = " Convert Depth to Height"
|
||||
icon_alignment = 2
|
||||
|
||||
[node name="HBoxContainer3" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="NormalizeHeight" type="CheckBox" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Albedo_Height/MarginContainer/VBoxContainer/HeightVBox/HBoxContainer3"]
|
||||
layout_mode = 2
|
||||
text = "Normalize Height"
|
||||
icon_alignment = 2
|
||||
|
||||
[node name="Normal_Roughness" type="PanelContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_mbo40")
|
||||
metadata/_tab_index = 1
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel"]
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 10
|
||||
theme_override_constants/margin_top = 10
|
||||
theme_override_constants/margin_right = 10
|
||||
theme_override_constants/margin_bottom = 10
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer"]
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="NormalVBox" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer"]
|
||||
[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="NormalVBox" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="NormalLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox"]
|
||||
[node name="NormalLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox"]
|
||||
layout_mode = 2
|
||||
text = "Normal texture"
|
||||
label_settings = SubResource("LabelSettings_mbo40")
|
||||
|
||||
[node name="NormalHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox"]
|
||||
[node name="NormalHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/NormalHBox"]
|
||||
[node name="LineEdit" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox/NormalHBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="PickButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/NormalHBox"]
|
||||
[node name="PickButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox/NormalHBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ClearButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/NormalHBox"]
|
||||
[node name="ClearButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox/NormalHBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox"]
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
theme_override_constants/margin_top = 10
|
||||
|
||||
[node name="Panel" type="Panel" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/MarginContainer"]
|
||||
[node name="Panel" type="Panel" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox/MarginContainer"]
|
||||
custom_minimum_size = Vector2(110, 110)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_cb0xf")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/MarginContainer/Panel"]
|
||||
[node name="TextureRect" type="TextureRect" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox/MarginContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
|
|
@ -331,7 +350,7 @@ grow_horizontal = 2
|
|||
grow_vertical = 2
|
||||
expand_mode = 1
|
||||
|
||||
[node name="TextureButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/MarginContainer/Panel"]
|
||||
[node name="TextureButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox/MarginContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
|
|
@ -340,68 +359,72 @@ grow_horizontal = 2
|
|||
grow_vertical = 2
|
||||
theme_override_styles/normal = SubResource("StyleBoxEmpty_7qdas")
|
||||
|
||||
[node name="NormalWHHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox"]
|
||||
[node name="NormalWHHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="NormalW" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/NormalWHHBox"]
|
||||
[node name="NormalW" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox/NormalWHHBox"]
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="NormalH" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/NormalWHHBox"]
|
||||
[node name="NormalH" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox/NormalWHHBox"]
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox"]
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="InvertGreenChannelCheckBox" type="CheckBox" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/HBoxContainer"]
|
||||
[node name="InvertGreenChannelCheckBox" type="CheckBox" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = " Convert DirectX to OpenGL"
|
||||
|
||||
[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox"]
|
||||
[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="AlignNormalsCheckBox" type="CheckBox" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/NormalVBox/HBoxContainer2"]
|
||||
[node name="AlignNormalsCheckBox" type="CheckBox" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer2/NormalVBox/HBoxContainer2"]
|
||||
layout_mode = 2
|
||||
text = " Orthoganolise Normals"
|
||||
|
||||
[node name="RoughnessVBox" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer"]
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="RoughnessVBox" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="RoughnessLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox"]
|
||||
[node name="RoughnessLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox"]
|
||||
layout_mode = 2
|
||||
text = "Roughness texture"
|
||||
label_settings = SubResource("LabelSettings_mbo40")
|
||||
|
||||
[node name="RoughnessHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox"]
|
||||
[node name="RoughnessHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/RoughnessHBox"]
|
||||
[node name="LineEdit" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/RoughnessHBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="PickButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/RoughnessHBox"]
|
||||
[node name="PickButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/RoughnessHBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ClearButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/RoughnessHBox"]
|
||||
[node name="ClearButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/RoughnessHBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox"]
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
theme_override_constants/margin_top = 10
|
||||
|
||||
[node name="Panel" type="Panel" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/MarginContainer"]
|
||||
[node name="Panel" type="Panel" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/MarginContainer"]
|
||||
custom_minimum_size = Vector2(110, 110)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_cb0xf")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/MarginContainer/Panel"]
|
||||
[node name="TextureRect" type="TextureRect" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/MarginContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
|
|
@ -416,7 +439,7 @@ grow_horizontal = 2
|
|||
grow_vertical = 2
|
||||
expand_mode = 1
|
||||
|
||||
[node name="TextureButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/MarginContainer/Panel"]
|
||||
[node name="TextureButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/MarginContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
|
|
@ -425,58 +448,162 @@ grow_horizontal = 2
|
|||
grow_vertical = 2
|
||||
theme_override_styles/normal = SubResource("StyleBoxEmpty_7qdas")
|
||||
|
||||
[node name="RoughnessWHHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox"]
|
||||
[node name="RoughnessWHHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="RoughnessW" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/RoughnessWHHBox"]
|
||||
[node name="RoughnessW" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/RoughnessWHHBox"]
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="RoughnessH" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/RoughnessWHHBox"]
|
||||
[node name="RoughnessH" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/RoughnessWHHBox"]
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox"]
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="InvertSmoothCheckBox" type="CheckBox" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/HBoxContainer2"]
|
||||
layout_mode = 2
|
||||
text = " Convert Smoothness to Roughness"
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="RoughnessChannelLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/HBoxContainer"]
|
||||
[node name="RoughnessChannelLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = " Source Channel: "
|
||||
horizontal_alignment = 2
|
||||
|
||||
[node name="RoughnessChannelR" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/HBoxContainer"]
|
||||
[node name="RoughnessChannelR" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_pressed = true
|
||||
button_group = SubResource("ButtonGroup_bs6ki")
|
||||
button_group = SubResource("ButtonGroup_47nos")
|
||||
text = "R"
|
||||
|
||||
[node name="RoughnessChannelG" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/HBoxContainer"]
|
||||
[node name="RoughnessChannelG" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_bs6ki")
|
||||
button_group = SubResource("ButtonGroup_47nos")
|
||||
text = "G"
|
||||
|
||||
[node name="RoughnessChannelB" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/HBoxContainer"]
|
||||
[node name="RoughnessChannelB" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_bs6ki")
|
||||
button_group = SubResource("ButtonGroup_47nos")
|
||||
text = "B"
|
||||
|
||||
[node name="RoughnessChannelA" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/NormalRoughnessPanel/MarginContainer/HBoxContainer/RoughnessVBox/HBoxContainer"]
|
||||
[node name="RoughnessChannelA" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_bs6ki")
|
||||
button_group = SubResource("ButtonGroup_47nos")
|
||||
text = "A"
|
||||
|
||||
[node name="HBoxContainer2" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="InvertSmoothCheckBox" type="CheckBox" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/RoughnessVBox/HBoxContainer2"]
|
||||
layout_mode = 2
|
||||
text = " Convert Smoothness to Roughness"
|
||||
|
||||
[node name="AmbientOcclusionVBox" type="VBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="AOLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox"]
|
||||
layout_mode = 2
|
||||
text = "AO texture (Optional)"
|
||||
label_settings = SubResource("LabelSettings_mbo40")
|
||||
|
||||
[node name="AOHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/AOHBox"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="PickButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/AOHBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="ClearButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/AOHBox"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
theme_override_constants/margin_top = 10
|
||||
|
||||
[node name="Panel" type="Panel" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/MarginContainer"]
|
||||
custom_minimum_size = Vector2(110, 110)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 4
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_cb0xf")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/MarginContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -50.0
|
||||
offset_top = -50.0
|
||||
offset_right = 50.0
|
||||
offset_bottom = 50.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
expand_mode = 1
|
||||
|
||||
[node name="TextureButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/MarginContainer/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/normal = SubResource("StyleBoxEmpty_7qdas")
|
||||
|
||||
[node name="NormalWHHBox" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="AmbientOcclusionW" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/NormalWHHBox"]
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="AmbientOcclusionH" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/NormalWHHBox"]
|
||||
layout_mode = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox"]
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="OcclusionChannelLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = " Source Channel: "
|
||||
horizontal_alignment = 2
|
||||
|
||||
[node name="OcclusionChannelR" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_pressed = true
|
||||
button_group = SubResource("ButtonGroup_mbo40")
|
||||
text = "R"
|
||||
|
||||
[node name="OcclusionChannelG" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_mbo40")
|
||||
text = "G"
|
||||
|
||||
[node name="OcclusionChannelB" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_mbo40")
|
||||
text = "B"
|
||||
|
||||
[node name="OcclusionChannelA" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer/TabContainer/Normal_Roughness/MarginContainer/VBoxContainer/HBoxContainer/AmbientOcclusionVBox/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
toggle_mode = true
|
||||
button_group = SubResource("ButtonGroup_mbo40")
|
||||
text = "A"
|
||||
|
||||
[node name="GeneralOptionsLabel" type="Label" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
|
|
@ -532,4 +659,6 @@ alignment = 1
|
|||
layout_mode = 2
|
||||
text = "Close"
|
||||
|
||||
[connection signal="ready" from="PanelContainer/MarginContainer/VBoxContainer/TabContainer" to="PanelContainer/MarginContainer/VBoxContainer/TabContainer" method="set_tab_title" flags=6 binds= [1, "Normal Roughness AO"]]
|
||||
[connection signal="tree_entered" from="PanelContainer/MarginContainer/VBoxContainer/TabContainer" to="PanelContainer/MarginContainer/VBoxContainer/TabContainer" method="set_tab_title" flags=6 binds= [0, "Albedo Height"]]
|
||||
[connection signal="toggled" from="PanelContainer/MarginContainer/VBoxContainer/GeneralOptionsHBox/ResizeToggle" to="PanelContainer/MarginContainer/VBoxContainer/GeneralOptionsHBox/ResizeOptionButton" method="set_visible"]
|
||||
|
|
|
|||
|
|
@ -373,8 +373,8 @@ Ref<Image> Terrain3DUtil::load_image(const String &p_file_name, const int p_cach
|
|||
* If p_invert_green is true, the destination green channel will be 1.0 - input green channel.
|
||||
* If p_invert_alpha is true, the destination alpha channel will be 1.0 - input source channel.
|
||||
*/
|
||||
Ref<Image> Terrain3DUtil::pack_image(const Ref<Image> &p_src_rgb, const Ref<Image> &p_src_a,
|
||||
const bool p_invert_green, const bool p_invert_alpha, const bool p_normalize_alpha, const int p_alpha_channel) {
|
||||
Ref<Image> Terrain3DUtil::pack_image(const Ref<Image> &p_src_rgb, const Ref<Image> &p_src_a, const Ref<Image> &p_src_ao,
|
||||
const bool p_invert_green, const bool p_invert_alpha, const bool p_normalize_alpha, const int p_alpha_channel, const int p_occlusion_channel) {
|
||||
if (!p_src_rgb.is_valid() || !p_src_a.is_valid()) {
|
||||
LOG(ERROR, "Provided images are not valid. Cannot pack");
|
||||
return Ref<Image>();
|
||||
|
|
@ -392,6 +392,14 @@ Ref<Image> Terrain3DUtil::pack_image(const Ref<Image> &p_src_rgb, const Ref<Imag
|
|||
return Ref<Image>();
|
||||
}
|
||||
|
||||
bool pack_ao = p_src_ao.is_valid();
|
||||
if (pack_ao) {
|
||||
if (p_src_rgb->get_size() != p_src_ao->get_size()) {
|
||||
LOG(ERROR, "Provided AO and normal images are not the same size. Cannot pack");
|
||||
return Ref<Image>();
|
||||
}
|
||||
}
|
||||
|
||||
real_t a_max = 0.0f;
|
||||
real_t a_min = 0.0f;
|
||||
real_t contrast = 1.0f;
|
||||
|
|
@ -423,6 +431,13 @@ Ref<Image> Terrain3DUtil::pack_image(const Ref<Image> &p_src_rgb, const Ref<Imag
|
|||
if (p_invert_alpha) {
|
||||
col.a = 1.0f - col.a;
|
||||
}
|
||||
if (pack_ao) {
|
||||
// Compress range to avoid low AO values completely destroying normal vector precision - recovered in shader.
|
||||
real_t ao = sqrt(p_src_ao->get_pixel(x, y)[p_occlusion_channel]) * 0.5 + 0.5;
|
||||
col.r = col.r * ao + (1.0f - ao) * 0.5f;
|
||||
col.g = col.g * ao + (1.0f - ao) * 0.5f;
|
||||
col.b = col.b * ao + (1.0f - ao) * 0.5f;
|
||||
}
|
||||
dst->set_pixel(x, y, col);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,10 +48,12 @@ public:
|
|||
const Vector2 &p_r16_height_range = Vector2(0.f, 255.f), const Vector2i &p_r16_size = V2I_ZERO);
|
||||
static Ref<Image> pack_image(const Ref<Image> &p_src_rgb,
|
||||
const Ref<Image> &p_src_a,
|
||||
const Ref<Image> &p_src_ao,
|
||||
const bool p_invert_green = false,
|
||||
const bool p_invert_alpha = false,
|
||||
const bool p_normalize_alpha = false,
|
||||
const int p_alpha_channel = 0);
|
||||
const int p_alpha_channel = 0,
|
||||
const int p_occlusion_channel = 0);
|
||||
static Ref<Image> luminance_to_height(const Ref<Image> &p_src_rgb);
|
||||
static void benchmark(Terrain3D *p_terrain);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue