From da5410ac382d7c1cba0260cf0816fbfe0af7df1d Mon Sep 17 00:00:00 2001 From: tobspr Date: Wed, 23 Nov 2016 21:10:38 +0100 Subject: [PATCH] Improve material editor --- .gitignore | 1 + rpcore/render_pipeline.py | 2 - toolkit/material_editor/main.py | 250 ++++++++++------- toolkit/material_editor/ui/main_window.ui | 259 +++++++++++++----- .../ui/main_window_generated.py | 187 ++++++++----- 5 files changed, 476 insertions(+), 223 deletions(-) diff --git a/.gitignore b/.gitignore index 613413a6c..9258aa609 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,4 @@ toolkit/bake_gi/resources/*.bam toolkit/bake_gi/resources/*.blend toolkit/bake_gi/scene +.vscode diff --git a/rpcore/render_pipeline.py b/rpcore/render_pipeline.py index 6e9b66abb..513441822 100644 --- a/rpcore/render_pipeline.py +++ b/rpcore/render_pipeline.py @@ -668,8 +668,6 @@ def export_materials(self, pth): material.emission.w, # arbitrary 1 ) + "\n") - self.debug("Wrote materials to", pth) - def update_serialized_material(self, data): """ Internal method to update a material from a given serialized material """ name = data[0] diff --git a/toolkit/material_editor/main.py b/toolkit/material_editor/main.py index 5016ff18f..6eb68e5ca 100644 --- a/toolkit/material_editor/main.py +++ b/toolkit/material_editor/main.py @@ -32,7 +32,9 @@ import os import sys import time +import math import tempfile +import colorsys from threading import Thread from functools import partial @@ -41,7 +43,7 @@ sys.path.insert(0, "../../") from rplibs.six import iteritems # noqa -from rplibs.pyqt_imports import * #noqa +from rplibs.pyqt_imports import * # noqa from ui.main_window_generated import Ui_MainWindow # noqa from rpcore.util.network_communication import NetworkCommunication # noqa @@ -50,7 +52,9 @@ # ONLY for debugging the viewer. ALLOW_OUTDATED_MATERIALS = False + class MaterialData: + def __init__(self): self.name = "" self.shading_model = 0 @@ -64,6 +68,7 @@ def __init__(self): self.basecolor_g = 0.6 self.basecolor_b = 0.6 + class MaterialEditor(QMainWindow, Ui_MainWindow): """ Interface to change the plugin settings """ @@ -81,22 +86,22 @@ def __init__(self): QMainWindow.__init__(self) Ui_MainWindow.__init__(self) - self.materials = [] self.in_update = False + self.materials = [] + self.material = MaterialData() self.setupUi(self) self.init_shading_models() + self.init_bindings() + self.update_material_list() + self.on_material_selected() - self.material = MaterialData() - - qt_connect(self.cb_metallic, "stateChanged", self.set_metallic) - qt_connect(self.cb_shading_model, "currentIndexChanged", self.set_shading_model) - qt_connect(self.cb_material, "currentIndexChanged", self.set_material) + def init_bindings(self): + qt_connect(self.cb_shading_model, "currentIndexChanged", self.read_from_ui) + qt_connect(self.cb_material, "currentIndexChanged", self.on_material_selected) + qt_connect(self.cb_metallic, "stateChanged", self.read_from_ui) self.sliders = [ - (self.basecolor_r, self.lbl_basecolor_r, 0.0, 1.0, "basecolor_r"), - (self.basecolor_g, self.lbl_basecolor_g, 0.0, 1.0, "basecolor_g"), - (self.basecolor_b, self.lbl_basecolor_b, 0.0, 1.0, "basecolor_b"), (self.slider_roughness, self.lbl_roughness, 0.0, 1.0, "roughness"), (self.slider_specular, self.lbl_specular, 1.0, 2.51, "specular"), (self.slider_normal, self.lbl_normal, 0.0, 1.0, "normal_strength"), @@ -104,24 +109,92 @@ def __init__(self): ] for slider, lbl, start, end, prop in self.sliders: - qt_connect(slider, "valueChanged", self.update_sliders) + qt_connect(slider, "valueChanged", self.read_from_ui) + + qt_connect(self.basecolor_1, "valueChanged", self.read_from_ui) + qt_connect(self.basecolor_2, "valueChanged", self.read_from_ui) + qt_connect(self.basecolor_3, "valueChanged", self.read_from_ui) + + for cb in (self.cb_rgb, self.cb_srgb, self.cb_hsv): + qt_connect(cb, "toggled", self.write_to_ui) + + def update_ui(self): + # Basecolor + labels = "R", "G", "B" + if self.cb_hsv.isChecked(): + labels = "H", "S", "V" + self.lbl_basecolor1.setText(labels[0]) + self.lbl_basecolor2.setText(labels[1]) + self.lbl_basecolor3.setText(labels[2]) + + a, b, c = (self.basecolor_1.value() / 100.0, + self.basecolor_2.value() / 100.0, + self.basecolor_3.value() / 100.0) + rgb = self.tuple_to_basecolor(a, b, c) + self.lbl_basecolor_val1.setText("{:0.2f}".format(a)) + self.lbl_basecolor_val2.setText("{:0.2f}".format(b)) + self.lbl_basecolor_val3.setText("{:0.2f}".format(c)) + self.lbl_color_preview.setStyleSheet("background: rgb({}, {}, {});".format( + int(rgb[0] * 255), int(rgb[1] * 255), int(rgb[2] * 255))) + + # Shading model + self._update_shading_model() + + def read_from_ui(self): + if self.in_update: + return + + # Rest of sliders + for slider, lbl, start, end, prop in self.sliders: + val = (slider.value() / 100.0) * (end - start) + start + lbl.setText("{:0.2f}".format(val)) + setattr(self.material, prop, val) - self.update_material_list() - self.set_material() + # Basecolor + rgb = self._get_ui_basecolor_rgb() + self.material.basecolor_r = rgb[0] + self.material.basecolor_g = rgb[1] + self.material.basecolor_b = rgb[2] + + # Metallic + self.material.metallic = self.cb_metallic.isChecked() + + # Shading model + self.material.shading_model = self.cb_shading_model.currentIndex() + + self.update_ui() + self.send_update() + + def write_to_ui(self): + self.in_update = True - def update_sliders(self): - if not self.in_update: - self.send_update() + # Basecolor + values = self.basecolor_to_tuple(self.material) + self.basecolor_1.setValue(values[0] * 100.0) + self.basecolor_2.setValue(values[1] * 100.0) + self.basecolor_3.setValue(values[2] * 100.0) - for slider, lbl, start, end, prop in self.sliders: - val = (slider.value() / 100.0) * (end - start) + start - lbl.setText("{:0.2f}".format(val)) - setattr(self.material, prop, val) + # Shading model + self.cb_shading_model.setCurrentIndex(self.material.shading_model) - self.lbl_color_preview.setStyleSheet("background: rgb({}, {}, {});".format( - int(self.material.basecolor_r * 255), - int(self.material.basecolor_g * 255), - int(self.material.basecolor_b * 255))) + # Metallics + self.cb_metallic.setChecked(self.material.metallic) + self.slider_specular.setEnabled(not self.material.metallic) + + # Rest of sliders + for slider, lbl, start, end, prop in self.sliders: + val = getattr(self.material, prop) + slider.setValue((val - start) / (end - start) * 100.0) + + self.in_update = False + self.update_ui() + + def _get_ui_basecolor_rgb(self): + """ Extracts the RGB color which is currently edited in the UI """ + a, b, c = (self.basecolor_1.value() / 100.0, + self.basecolor_2.value() / 100.0, + self.basecolor_3.value() / 100.0) + return self.tuple_to_basecolor(a, b, c) def update_material_list(self): temp_path = os.path.join(tempfile.gettempdir(), "rp_materials.data") @@ -136,89 +209,86 @@ def update_material_list(self): while not os.path.isfile(temp_path) and time.time() - start_time < 5.0: time.sleep(0.5) if not os.path.isfile(temp_path): - QMessageBox.critical(self, "Error", "Render Pipeline not responding! Make sure a render pipeline application is running, and try again later.") + QMessageBox.critical( + self, "Error", "Render Pipeline not responding! Make sure a render pipeline application is running, and try again later.") sys.exit(-1) if not ALLOW_OUTDATED_MATERIALS: time.sleep(0.5) self._load_material_list(temp_path) def _load_material_list(self, pth): - self.in_update = True self.materials = [] self.cb_material.clear() with open(pth) as handle: for line in handle.readlines(): parts = line.strip().split(" ") - material = MaterialData() - material.name = parts[0] - material.basecolor_r = float(parts[1]) - material.basecolor_g = float(parts[2]) - material.basecolor_b = float(parts[3]) - material.roughness = float(parts[4]) - material.specular = float(parts[5]) - material.metallic = float(parts[6]) > 0.5 - material.shading_model = int(float(parts[7])) - material.normal_strength = float(parts[8]) - material.shading_model_param1 = float(parts[9]) - material.shading_model_param2 = float(parts[10]) + material = self._read_in_material(parts) self.materials.append(material) - print("Materials[] =", material.name) self.cb_material.addItem(material.name) - self.in_update = False - print("Loaded material list") - def set_material(self): - if self.in_update: - return + def _read_in_material(self, parts): + material = MaterialData() + material.name = parts[0] + material.basecolor_r = float(parts[1]) + material.basecolor_g = float(parts[2]) + material.basecolor_b = float(parts[3]) + material.roughness = float(parts[4]) + material.specular = float(parts[5]) + material.metallic = float(parts[6]) > 0.5 + material.shading_model = int(float(parts[7])) + material.normal_strength = float(parts[8]) + material.shading_model_param1 = float(parts[9]) + material.shading_model_param2 = float(parts[10]) + return material + + def basecolor_to_tuple(self, mat): + def to_srgb(v): return math.pow(v, 1.0 / 2.2) + if self.cb_rgb.isChecked(): + return mat.basecolor_r, mat.basecolor_g, mat.basecolor_b + elif self.cb_srgb.isChecked(): + return to_srgb(mat.basecolor_r), to_srgb(mat.basecolor_g), to_srgb(mat.basecolor_b) + elif self.cb_hsv.isChecked(): + return colorsys.rgb_to_hsv(mat.basecolor_r, mat.basecolor_g, mat.basecolor_b) + else: + assert False + + def tuple_to_basecolor(self, a, b, c): + def from_srgb(v): return math.pow(v, 2.2) + if self.cb_rgb.isChecked(): + return a, b, c + elif self.cb_srgb.isChecked(): + return from_srgb(a), from_srgb(b), from_srgb(c) + elif self.cb_hsv.isChecked(): + return colorsys.hsv_to_rgb(a, b, c) + else: + assert False + + def on_material_selected(self): index = self.cb_material.currentIndex() - if index >= len(self.materials): + if index < 0 or index >= len(self.materials): print("Invalid material with index", index, "only have", len(self.materials), "materials") return - self.in_update = True - material = self.materials[index] - print("Loaded material", material.name) - self.cb_shading_model.setCurrentIndex(material.shading_model) - self.cb_metallic.setChecked(material.metallic) - self.slider_roughness.setValue(material.roughness * 100.0) - self.slider_specular.setValue(material.specular / 2.51 * 100.0) - self.slider_normal.setValue(material.normal_strength * 100.0) - self.basecolor_r.setValue(material.basecolor_r * 100) - self.basecolor_g.setValue(material.basecolor_g * 100) - self.basecolor_b.setValue(material.basecolor_b * 100) - self.slider_param1.setValue(material.shading_model_param1 * 100) - self.material = material - self.in_update = False - self.update_sliders() - self.set_metallic() - self.set_shading_model() - - def set_metallic(self): - if not self.in_update: - self.material.metallic = self.cb_metallic.isChecked() - self.slider_specular.setEnabled(not self.material.metallic) - self.send_update() + self.material = self.materials[index] + print("Loaded material", self.material.name) + self.write_to_ui() def send_update(self): - if not self.in_update: - serialized = ("{} " * 11).format( - self.material.name, - self.material.basecolor_r, - self.material.basecolor_g, - self.material.basecolor_b, - self.material.roughness, - self.material.specular, - 1.0 if self.material.metallic else 0.0, - self.material.shading_model, - self.material.normal_strength, - self.material.shading_model_param1, - self.material.shading_model_param2, - ) - NetworkCommunication.send_async(NetworkCommunication.MATERIAL_PORT, "update_material " + serialized) - - def set_shading_model(self): - if self.in_update: - return - + serialized = ("{} " * 11).format( + self.material.name, + self.material.basecolor_r, + self.material.basecolor_g, + self.material.basecolor_b, + self.material.roughness, + self.material.specular, + 1.0 if self.material.metallic else 0.0, + self.material.shading_model, + self.material.normal_strength, + self.material.shading_model_param1, + self.material.shading_model_param2, + ) + NetworkCommunication.send_async(NetworkCommunication.MATERIAL_PORT, "update_material " + serialized) + + def _update_shading_model(self): name, val, optional_param = self.SHADING_MODELS[self.cb_shading_model.currentIndex()] if optional_param is None: self.slider_param1.setEnabled(False) @@ -245,16 +315,12 @@ def set_shading_model(self): self.cb_metallic.hide() elif name == "Foliage": self.cb_metallic.hide() - - self.material.shading_model = val - self.send_update() def init_shading_models(self): self.cb_shading_model.clear() for name, val, optional_param in self.SHADING_MODELS: self.cb_shading_model.addItem(name) - # Start application app = QApplication(sys.argv) qt_register_fonts() diff --git a/toolkit/material_editor/ui/main_window.ui b/toolkit/material_editor/ui/main_window.ui index 091ea9f5c..bf64748cf 100644 --- a/toolkit/material_editor/ui/main_window.ui +++ b/toolkit/material_editor/ui/main_window.ui @@ -7,19 +7,19 @@ 0 0 262 - 556 + 608 262 - 556 + 608 262 - 556 + 5560 @@ -37,7 +37,7 @@ QSlider::groove:horizontal { QSlider::handle:horizonal { background: #666; - width: 9px; + width: 8px; margin: -6px 0; } @@ -48,7 +48,26 @@ QSlider::groove:horizontal:disabled { background: rgba(0, 0, 0, 8); } +QRadioButton { + background: #fafafa; + padding: 4px 6px 3px; + font-size: 12px; + color: #333; +} + +QRadioButton::indicator { + width: 15px; + height: 15px; + margin-top: -1px; +} + +QRadioButton:checked { +background: #eee; +} +QRadioButton:hover { +background: #eaeaea; +} QComboBox { border: 0; @@ -261,9 +280,9 @@ font-weight: 600; - 20 - 200 - 221 + 30 + 240 + 201 73 @@ -273,8 +292,8 @@ font-weight: 600; - - + + 30 @@ -288,7 +307,7 @@ font-weight: 600; - color: green;background: transparent; + background: transparent; 0.43 @@ -298,36 +317,8 @@ font-weight: 600; - - - - - 30 - 0 - - - - - 30 - 16777215 - - - - color: red; background: transparent; - - - 0.12 - - - Qt::AlignCenter - - - - - - - QSlider::handle:horizontal { background: blue; } - + + 100 @@ -339,11 +330,8 @@ font-weight: 600; - - - - QSlider::handle:horizontal { background: red; } - + + 100 @@ -355,11 +343,8 @@ font-weight: 600; - - - - QSlider::handle:horizontal { background: green; } - + + 100 @@ -371,8 +356,8 @@ font-weight: 600; - - + + 30 @@ -386,7 +371,7 @@ font-weight: 600; - color: blue;background: transparent; + background: transparent; 0.53 @@ -396,6 +381,79 @@ font-weight: 600; + + + + + 30 + 0 + + + + + 30 + 16777215 + + + + background: transparent; + + + 0.12 + + + Qt::AlignCenter + + + + + + + + 11 + 0 + + + + background: transparent; color: #555; + + + R + + + + + + + + 11 + 0 + + + + background: transparent; color: #555; + + + G + + + + + + + + 11 + 0 + + + + background: transparent; color: #555; + + + B + + + @@ -439,7 +497,7 @@ font-weight: 600; 20 - 290 + 340 131 16 @@ -452,7 +510,7 @@ font-weight: 600; 20 - 310 + 360 191 19 @@ -471,7 +529,7 @@ font-weight: 600; 20 - 340 + 390 131 16 @@ -484,7 +542,7 @@ font-weight: 600; 20 - 360 + 410 191 19 @@ -503,7 +561,7 @@ font-weight: 600; 20 - 390 + 440 131 16 @@ -516,7 +574,7 @@ font-weight: 600; 20 - 410 + 460 191 19 @@ -535,7 +593,7 @@ font-weight: 600; 220 - 310 + 360 31 20 @@ -551,7 +609,7 @@ font-weight: 600; 220 - 360 + 410 31 20 @@ -567,7 +625,7 @@ font-weight: 600; 220 - 409 + 459 31 20 @@ -585,7 +643,7 @@ font-weight: 600; -10 166 311 - 341 + 561 @@ -601,7 +659,7 @@ font-weight: 600; 230 - 289 + 339 31 20 @@ -620,7 +678,7 @@ font-weight: 600; 30 - 290 + 340 191 19 @@ -639,7 +697,7 @@ font-weight: 600; 30 - 270 + 320 141 16 @@ -648,6 +706,75 @@ font-weight: 600; Shading-model-param + + + + 30 + 34 + 60 + 27 + + + + RGB + + + true + + + + + + 92 + 34 + 71 + 27 + + + + SRGB + + + + + + 165 + 34 + 62 + 27 + + + + HSV + + + + + + 30 + 59 + 220 + 96 + + + + QFrame { background: #eee; } + + + QFrame::StyledPanel + + + QFrame::Raised + + + lbl_param1 + slider_param1 + lbl_shading_model_param1 + cb_rgb + cb_srgb + lbl_basecolor_val1 + cb_hsv + frame_3 frame_2 label_2 diff --git a/toolkit/material_editor/ui/main_window_generated.py b/toolkit/material_editor/ui/main_window_generated.py index b2f4035ea..0f6f56507 100644 --- a/toolkit/material_editor/ui/main_window_generated.py +++ b/toolkit/material_editor/ui/main_window_generated.py @@ -11,9 +11,9 @@ class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") - MainWindow.resize(262, 556) - MainWindow.setMinimumSize(QtCore.QSize(262, 556)) - MainWindow.setMaximumSize(QtCore.QSize(262, 556)) + MainWindow.resize(262, 608) + MainWindow.setMinimumSize(QtCore.QSize(262, 608)) + MainWindow.setMaximumSize(QtCore.QSize(262, 5560)) MainWindow.setStyleSheet("QMainWindow { background: #fff;}\n" "*, QLabel { font-family: Roboto; font-weight: 300; }\n" "\n" @@ -25,7 +25,7 @@ def setupUi(self, MainWindow): "\n" "QSlider::handle:horizonal {\n" " background: #666;\n" -" width: 9px;\n" +" width: 8px;\n" " margin: -6px 0;\n" "}\n" "\n" @@ -36,7 +36,26 @@ def setupUi(self, MainWindow): " background: rgba(0, 0, 0, 8);\n" "}\n" "\n" +"QRadioButton {\n" +" background: #fafafa;\n" +" padding: 4px 6px 3px;\n" +" font-size: 12px;\n" +" color: #333;\n" +"}\n" +"\n" +"QRadioButton::indicator {\n" +" width: 15px;\n" +" height: 15px;\n" +" margin-top: -1px;\n" +"}\n" "\n" +"QRadioButton:checked {\n" +"background: #eee;\n" +"}\n" +"\n" +"QRadioButton:hover {\n" +"background: #eaeaea;\n" +"}\n" "\n" "QComboBox {\n" "border: 0;\n" @@ -127,7 +146,7 @@ def setupUi(self, MainWindow): self.cb_metallic.setGeometry(QtCore.QRect(20, 140, 81, 17)) self.cb_metallic.setObjectName("cb_metallic") self.horizontalLayoutWidget_3 = QtWidgets.QWidget(self.sidebar_material) - self.horizontalLayoutWidget_3.setGeometry(QtCore.QRect(20, 200, 221, 73)) + self.horizontalLayoutWidget_3.setGeometry(QtCore.QRect(30, 240, 201, 73)) self.horizontalLayoutWidget_3.setObjectName("horizontalLayoutWidget_3") self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_3) self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0) @@ -135,48 +154,60 @@ def setupUi(self, MainWindow): self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") - self.lbl_basecolor_g = QtWidgets.QLabel(self.horizontalLayoutWidget_3) - self.lbl_basecolor_g.setMinimumSize(QtCore.QSize(30, 0)) - self.lbl_basecolor_g.setMaximumSize(QtCore.QSize(30, 16777215)) - self.lbl_basecolor_g.setStyleSheet("color: green;background: transparent;") - self.lbl_basecolor_g.setAlignment(QtCore.Qt.AlignCenter) - self.lbl_basecolor_g.setObjectName("lbl_basecolor_g") - self.gridLayout.addWidget(self.lbl_basecolor_g, 1, 1, 1, 1) - self.lbl_basecolor_r = QtWidgets.QLabel(self.horizontalLayoutWidget_3) - self.lbl_basecolor_r.setMinimumSize(QtCore.QSize(30, 0)) - self.lbl_basecolor_r.setMaximumSize(QtCore.QSize(30, 16777215)) - self.lbl_basecolor_r.setStyleSheet("color: red; background: transparent;") - self.lbl_basecolor_r.setAlignment(QtCore.Qt.AlignCenter) - self.lbl_basecolor_r.setObjectName("lbl_basecolor_r") - self.gridLayout.addWidget(self.lbl_basecolor_r, 0, 1, 1, 1) - self.basecolor_b = QtWidgets.QSlider(self.horizontalLayoutWidget_3) - self.basecolor_b.setStyleSheet("QSlider::handle:horizontal { background: blue; }") - self.basecolor_b.setMaximum(100) - self.basecolor_b.setProperty("value", 53) - self.basecolor_b.setOrientation(QtCore.Qt.Horizontal) - self.basecolor_b.setObjectName("basecolor_b") - self.gridLayout.addWidget(self.basecolor_b, 2, 0, 1, 1) - self.basecolor_r = QtWidgets.QSlider(self.horizontalLayoutWidget_3) - self.basecolor_r.setStyleSheet("QSlider::handle:horizontal { background: red; }") - self.basecolor_r.setMaximum(100) - self.basecolor_r.setProperty("value", 12) - self.basecolor_r.setOrientation(QtCore.Qt.Horizontal) - self.basecolor_r.setObjectName("basecolor_r") - self.gridLayout.addWidget(self.basecolor_r, 0, 0, 1, 1) - self.basecolor_g = QtWidgets.QSlider(self.horizontalLayoutWidget_3) - self.basecolor_g.setStyleSheet("QSlider::handle:horizontal { background: green; }") - self.basecolor_g.setMaximum(100) - self.basecolor_g.setProperty("value", 43) - self.basecolor_g.setOrientation(QtCore.Qt.Horizontal) - self.basecolor_g.setObjectName("basecolor_g") - self.gridLayout.addWidget(self.basecolor_g, 1, 0, 1, 1) - self.lbl_basecolor_b = QtWidgets.QLabel(self.horizontalLayoutWidget_3) - self.lbl_basecolor_b.setMinimumSize(QtCore.QSize(30, 0)) - self.lbl_basecolor_b.setMaximumSize(QtCore.QSize(30, 16777215)) - self.lbl_basecolor_b.setStyleSheet("color: blue;background: transparent;") - self.lbl_basecolor_b.setAlignment(QtCore.Qt.AlignCenter) - self.lbl_basecolor_b.setObjectName("lbl_basecolor_b") - self.gridLayout.addWidget(self.lbl_basecolor_b, 2, 1, 1, 1) + self.lbl_basecolor_val2 = QtWidgets.QLabel(self.horizontalLayoutWidget_3) + self.lbl_basecolor_val2.setMinimumSize(QtCore.QSize(30, 0)) + self.lbl_basecolor_val2.setMaximumSize(QtCore.QSize(30, 16777215)) + self.lbl_basecolor_val2.setStyleSheet("background: transparent;") + self.lbl_basecolor_val2.setAlignment(QtCore.Qt.AlignCenter) + self.lbl_basecolor_val2.setObjectName("lbl_basecolor_val2") + self.gridLayout.addWidget(self.lbl_basecolor_val2, 1, 2, 1, 1) + self.basecolor_3 = QtWidgets.QSlider(self.horizontalLayoutWidget_3) + self.basecolor_3.setMaximum(100) + self.basecolor_3.setProperty("value", 53) + self.basecolor_3.setOrientation(QtCore.Qt.Horizontal) + self.basecolor_3.setObjectName("basecolor_3") + self.gridLayout.addWidget(self.basecolor_3, 2, 1, 1, 1) + self.basecolor_1 = QtWidgets.QSlider(self.horizontalLayoutWidget_3) + self.basecolor_1.setMaximum(100) + self.basecolor_1.setProperty("value", 12) + self.basecolor_1.setOrientation(QtCore.Qt.Horizontal) + self.basecolor_1.setObjectName("basecolor_1") + self.gridLayout.addWidget(self.basecolor_1, 0, 1, 1, 1) + self.basecolor_2 = QtWidgets.QSlider(self.horizontalLayoutWidget_3) + self.basecolor_2.setMaximum(100) + self.basecolor_2.setProperty("value", 43) + self.basecolor_2.setOrientation(QtCore.Qt.Horizontal) + self.basecolor_2.setObjectName("basecolor_2") + self.gridLayout.addWidget(self.basecolor_2, 1, 1, 1, 1) + self.lbl_basecolor_val3 = QtWidgets.QLabel(self.horizontalLayoutWidget_3) + self.lbl_basecolor_val3.setMinimumSize(QtCore.QSize(30, 0)) + self.lbl_basecolor_val3.setMaximumSize(QtCore.QSize(30, 16777215)) + self.lbl_basecolor_val3.setStyleSheet("background: transparent;") + self.lbl_basecolor_val3.setAlignment(QtCore.Qt.AlignCenter) + self.lbl_basecolor_val3.setObjectName("lbl_basecolor_val3") + self.gridLayout.addWidget(self.lbl_basecolor_val3, 2, 2, 1, 1) + self.lbl_basecolor_val1 = QtWidgets.QLabel(self.horizontalLayoutWidget_3) + self.lbl_basecolor_val1.setMinimumSize(QtCore.QSize(30, 0)) + self.lbl_basecolor_val1.setMaximumSize(QtCore.QSize(30, 16777215)) + self.lbl_basecolor_val1.setStyleSheet("background: transparent;") + self.lbl_basecolor_val1.setAlignment(QtCore.Qt.AlignCenter) + self.lbl_basecolor_val1.setObjectName("lbl_basecolor_val1") + self.gridLayout.addWidget(self.lbl_basecolor_val1, 0, 2, 1, 1) + self.lbl_basecolor1 = QtWidgets.QLabel(self.horizontalLayoutWidget_3) + self.lbl_basecolor1.setMinimumSize(QtCore.QSize(11, 0)) + self.lbl_basecolor1.setStyleSheet("background: transparent; color: #555; ") + self.lbl_basecolor1.setObjectName("lbl_basecolor1") + self.gridLayout.addWidget(self.lbl_basecolor1, 0, 0, 1, 1) + self.lbl_basecolor2 = QtWidgets.QLabel(self.horizontalLayoutWidget_3) + self.lbl_basecolor2.setMinimumSize(QtCore.QSize(11, 0)) + self.lbl_basecolor2.setStyleSheet("background: transparent; color: #555; ") + self.lbl_basecolor2.setObjectName("lbl_basecolor2") + self.gridLayout.addWidget(self.lbl_basecolor2, 1, 0, 1, 1) + self.lbl_basecolor3 = QtWidgets.QLabel(self.horizontalLayoutWidget_3) + self.lbl_basecolor3.setMinimumSize(QtCore.QSize(11, 0)) + self.lbl_basecolor3.setStyleSheet("background: transparent; color: #555; ") + self.lbl_basecolor3.setObjectName("lbl_basecolor3") + self.gridLayout.addWidget(self.lbl_basecolor3, 2, 0, 1, 1) self.horizontalLayout_4.addLayout(self.gridLayout) self.lbl_color_preview = QtWidgets.QLabel(self.horizontalLayoutWidget_3) self.lbl_color_preview.setMinimumSize(QtCore.QSize(30, 0)) @@ -189,64 +220,88 @@ def setupUi(self, MainWindow): self.label_15.setGeometry(QtCore.QRect(20, 180, 131, 16)) self.label_15.setObjectName("label_15") self.label_16 = QtWidgets.QLabel(self.sidebar_material) - self.label_16.setGeometry(QtCore.QRect(20, 290, 131, 16)) + self.label_16.setGeometry(QtCore.QRect(20, 340, 131, 16)) self.label_16.setObjectName("label_16") self.slider_roughness = QtWidgets.QSlider(self.sidebar_material) - self.slider_roughness.setGeometry(QtCore.QRect(20, 310, 191, 19)) + self.slider_roughness.setGeometry(QtCore.QRect(20, 360, 191, 19)) self.slider_roughness.setMaximum(100) self.slider_roughness.setProperty("value", 32) self.slider_roughness.setOrientation(QtCore.Qt.Horizontal) self.slider_roughness.setObjectName("slider_roughness") self.label_17 = QtWidgets.QLabel(self.sidebar_material) - self.label_17.setGeometry(QtCore.QRect(20, 340, 131, 16)) + self.label_17.setGeometry(QtCore.QRect(20, 390, 131, 16)) self.label_17.setObjectName("label_17") self.slider_specular = QtWidgets.QSlider(self.sidebar_material) - self.slider_specular.setGeometry(QtCore.QRect(20, 360, 191, 19)) + self.slider_specular.setGeometry(QtCore.QRect(20, 410, 191, 19)) self.slider_specular.setMaximum(100) self.slider_specular.setSliderPosition(20) self.slider_specular.setOrientation(QtCore.Qt.Horizontal) self.slider_specular.setObjectName("slider_specular") self.label_18 = QtWidgets.QLabel(self.sidebar_material) - self.label_18.setGeometry(QtCore.QRect(20, 390, 131, 16)) + self.label_18.setGeometry(QtCore.QRect(20, 440, 131, 16)) self.label_18.setObjectName("label_18") self.slider_normal = QtWidgets.QSlider(self.sidebar_material) - self.slider_normal.setGeometry(QtCore.QRect(20, 410, 191, 19)) + self.slider_normal.setGeometry(QtCore.QRect(20, 460, 191, 19)) self.slider_normal.setMaximum(100) self.slider_normal.setSliderPosition(80) self.slider_normal.setOrientation(QtCore.Qt.Horizontal) self.slider_normal.setObjectName("slider_normal") self.lbl_roughness = QtWidgets.QLabel(self.sidebar_material) - self.lbl_roughness.setGeometry(QtCore.QRect(220, 310, 31, 20)) + self.lbl_roughness.setGeometry(QtCore.QRect(220, 360, 31, 20)) self.lbl_roughness.setStyleSheet("color: #333;") self.lbl_roughness.setObjectName("lbl_roughness") self.lbl_specular = QtWidgets.QLabel(self.sidebar_material) - self.lbl_specular.setGeometry(QtCore.QRect(220, 360, 31, 20)) + self.lbl_specular.setGeometry(QtCore.QRect(220, 410, 31, 20)) self.lbl_specular.setStyleSheet("color: #333;") self.lbl_specular.setObjectName("lbl_specular") self.lbl_normal = QtWidgets.QLabel(self.sidebar_material) - self.lbl_normal.setGeometry(QtCore.QRect(220, 409, 31, 20)) + self.lbl_normal.setGeometry(QtCore.QRect(220, 459, 31, 20)) self.lbl_normal.setStyleSheet("color: #333;") self.lbl_normal.setObjectName("lbl_normal") self.frame_2 = QtWidgets.QFrame(self.sidebar_material) - self.frame_2.setGeometry(QtCore.QRect(-10, 166, 311, 341)) + self.frame_2.setGeometry(QtCore.QRect(-10, 166, 311, 561)) self.frame_2.setStyleSheet("QFrame { background: #fff; }") self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) self.frame_2.setObjectName("frame_2") self.lbl_param1 = QtWidgets.QLabel(self.frame_2) - self.lbl_param1.setGeometry(QtCore.QRect(230, 289, 31, 20)) + self.lbl_param1.setGeometry(QtCore.QRect(230, 339, 31, 20)) self.lbl_param1.setStyleSheet("color: #333;") self.lbl_param1.setObjectName("lbl_param1") self.slider_param1 = QtWidgets.QSlider(self.frame_2) self.slider_param1.setEnabled(False) - self.slider_param1.setGeometry(QtCore.QRect(30, 290, 191, 19)) + self.slider_param1.setGeometry(QtCore.QRect(30, 340, 191, 19)) self.slider_param1.setMaximum(100) self.slider_param1.setSliderPosition(80) self.slider_param1.setOrientation(QtCore.Qt.Horizontal) self.slider_param1.setObjectName("slider_param1") self.lbl_shading_model_param1 = QtWidgets.QLabel(self.frame_2) - self.lbl_shading_model_param1.setGeometry(QtCore.QRect(30, 270, 141, 16)) + self.lbl_shading_model_param1.setGeometry(QtCore.QRect(30, 320, 141, 16)) self.lbl_shading_model_param1.setObjectName("lbl_shading_model_param1") + self.cb_rgb = QtWidgets.QRadioButton(self.frame_2) + self.cb_rgb.setGeometry(QtCore.QRect(30, 34, 60, 27)) + self.cb_rgb.setChecked(True) + self.cb_rgb.setObjectName("cb_rgb") + self.cb_srgb = QtWidgets.QRadioButton(self.frame_2) + self.cb_srgb.setGeometry(QtCore.QRect(92, 34, 71, 27)) + self.cb_srgb.setObjectName("cb_srgb") + self.cb_hsv = QtWidgets.QRadioButton(self.frame_2) + self.cb_hsv.setGeometry(QtCore.QRect(165, 34, 62, 27)) + self.cb_hsv.setObjectName("cb_hsv") + self.frame_3 = QtWidgets.QFrame(self.frame_2) + self.frame_3.setGeometry(QtCore.QRect(30, 59, 220, 96)) + self.frame_3.setStyleSheet("QFrame { background: #eee; }") + self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) + self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) + self.frame_3.setObjectName("frame_3") + self.lbl_param1.raise_() + self.slider_param1.raise_() + self.lbl_shading_model_param1.raise_() + self.cb_rgb.raise_() + self.cb_srgb.raise_() + self.lbl_basecolor_val1.raise_() + self.cb_hsv.raise_() + self.frame_3.raise_() self.frame_2.raise_() self.label_2.raise_() self.cb_material.raise_() @@ -283,9 +338,12 @@ def retranslateUi(self, MainWindow): self.cb_shading_model.setItemText(1, _translate("MainWindow", "Emissive")) self.cb_shading_model.setItemText(2, _translate("MainWindow", "Transparent")) self.cb_metallic.setText(_translate("MainWindow", "Metallic")) - self.lbl_basecolor_g.setText(_translate("MainWindow", "0.43")) - self.lbl_basecolor_r.setText(_translate("MainWindow", "0.12")) - self.lbl_basecolor_b.setText(_translate("MainWindow", "0.53")) + self.lbl_basecolor_val2.setText(_translate("MainWindow", "0.43")) + self.lbl_basecolor_val3.setText(_translate("MainWindow", "0.53")) + self.lbl_basecolor_val1.setText(_translate("MainWindow", "0.12")) + self.lbl_basecolor1.setText(_translate("MainWindow", "R")) + self.lbl_basecolor2.setText(_translate("MainWindow", "G")) + self.lbl_basecolor3.setText(_translate("MainWindow", "B")) self.label_15.setText(_translate("MainWindow", "Basecolor")) self.label_16.setText(_translate("MainWindow", "Roughness")) self.label_17.setText(_translate("MainWindow", "Specular IOR")) @@ -295,5 +353,8 @@ def retranslateUi(self, MainWindow): self.lbl_normal.setText(_translate("MainWindow", "0.80")) self.lbl_param1.setText(_translate("MainWindow", "0.20")) self.lbl_shading_model_param1.setText(_translate("MainWindow", "Shading-model-param")) + self.cb_rgb.setText(_translate("MainWindow", "RGB")) + self.cb_srgb.setText(_translate("MainWindow", "SRGB")) + self.cb_hsv.setText(_translate("MainWindow", "HSV")) from . import resources_rc