Skip to content

Commit

Permalink
Improve material editor
Browse files Browse the repository at this point in the history
tobspr committed Nov 23, 2016
1 parent 205fe00 commit da5410a
Showing 5 changed files with 476 additions and 223 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -57,3 +57,4 @@ toolkit/bake_gi/resources/*.bam
toolkit/bake_gi/resources/*.blend
toolkit/bake_gi/scene

.vscode
2 changes: 0 additions & 2 deletions rpcore/render_pipeline.py
Original file line number Diff line number Diff line change
@@ -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]
250 changes: 158 additions & 92 deletions toolkit/material_editor/main.py
Original file line number Diff line number Diff line change
@@ -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,47 +86,115 @@ 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"),
(self.slider_param1, self.lbl_param1, 0.0, 1.0, "shading_model_param1"),
]

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()
259 changes: 193 additions & 66 deletions toolkit/material_editor/ui/main_window.ui
Original file line number Diff line number Diff line change
@@ -7,19 +7,19 @@
<x>0</x>
<y>0</y>
<width>262</width>
<height>556</height>
<height>608</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>262</width>
<height>556</height>
<height>608</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>262</width>
<height>556</height>
<height>5560</height>
</size>
</property>
<property name="windowTitle">
@@ -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;</string>
<widget class="QWidget" name="horizontalLayoutWidget_3">
<property name="geometry">
<rect>
<x>20</x>
<y>200</y>
<width>221</width>
<x>30</x>
<y>240</y>
<width>201</width>
<height>73</height>
</rect>
</property>
@@ -273,8 +292,8 @@ font-weight: 600;</string>
</property>
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="1">
<widget class="QLabel" name="lbl_basecolor_g">
<item row="1" column="2">
<widget class="QLabel" name="lbl_basecolor_val2">
<property name="minimumSize">
<size>
<width>30</width>
@@ -288,7 +307,7 @@ font-weight: 600;</string>
</size>
</property>
<property name="styleSheet">
<string notr="true">color: green;background: transparent;</string>
<string notr="true">background: transparent;</string>
</property>
<property name="text">
<string>0.43</string>
@@ -298,36 +317,8 @@ font-weight: 600;</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="lbl_basecolor_r">
<property name="minimumSize">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">color: red; background: transparent;</string>
</property>
<property name="text">
<string>0.12</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QSlider" name="basecolor_b">
<property name="styleSheet">
<string notr="true">QSlider::handle:horizontal { background: blue; }</string>
</property>
<item row="2" column="1">
<widget class="QSlider" name="basecolor_3">
<property name="maximum">
<number>100</number>
</property>
@@ -339,11 +330,8 @@ font-weight: 600;</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QSlider" name="basecolor_r">
<property name="styleSheet">
<string notr="true">QSlider::handle:horizontal { background: red; }</string>
</property>
<item row="0" column="1">
<widget class="QSlider" name="basecolor_1">
<property name="maximum">
<number>100</number>
</property>
@@ -355,11 +343,8 @@ font-weight: 600;</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QSlider" name="basecolor_g">
<property name="styleSheet">
<string notr="true">QSlider::handle:horizontal { background: green; }</string>
</property>
<item row="1" column="1">
<widget class="QSlider" name="basecolor_2">
<property name="maximum">
<number>100</number>
</property>
@@ -371,8 +356,8 @@ font-weight: 600;</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="lbl_basecolor_b">
<item row="2" column="2">
<widget class="QLabel" name="lbl_basecolor_val3">
<property name="minimumSize">
<size>
<width>30</width>
@@ -386,7 +371,7 @@ font-weight: 600;</string>
</size>
</property>
<property name="styleSheet">
<string notr="true">color: blue;background: transparent;</string>
<string notr="true">background: transparent;</string>
</property>
<property name="text">
<string>0.53</string>
@@ -396,6 +381,79 @@ font-weight: 600;</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="lbl_basecolor_val1">
<property name="minimumSize">
<size>
<width>30</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background: transparent;</string>
</property>
<property name="text">
<string>0.12</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="lbl_basecolor1">
<property name="minimumSize">
<size>
<width>11</width>
<height>0</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background: transparent; color: #555; </string>
</property>
<property name="text">
<string>R</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="lbl_basecolor2">
<property name="minimumSize">
<size>
<width>11</width>
<height>0</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background: transparent; color: #555; </string>
</property>
<property name="text">
<string>G</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="lbl_basecolor3">
<property name="minimumSize">
<size>
<width>11</width>
<height>0</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background: transparent; color: #555; </string>
</property>
<property name="text">
<string>B</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
@@ -439,7 +497,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>20</x>
<y>290</y>
<y>340</y>
<width>131</width>
<height>16</height>
</rect>
@@ -452,7 +510,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>20</x>
<y>310</y>
<y>360</y>
<width>191</width>
<height>19</height>
</rect>
@@ -471,7 +529,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>20</x>
<y>340</y>
<y>390</y>
<width>131</width>
<height>16</height>
</rect>
@@ -484,7 +542,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>20</x>
<y>360</y>
<y>410</y>
<width>191</width>
<height>19</height>
</rect>
@@ -503,7 +561,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>20</x>
<y>390</y>
<y>440</y>
<width>131</width>
<height>16</height>
</rect>
@@ -516,7 +574,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>20</x>
<y>410</y>
<y>460</y>
<width>191</width>
<height>19</height>
</rect>
@@ -535,7 +593,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>220</x>
<y>310</y>
<y>360</y>
<width>31</width>
<height>20</height>
</rect>
@@ -551,7 +609,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>220</x>
<y>360</y>
<y>410</y>
<width>31</width>
<height>20</height>
</rect>
@@ -567,7 +625,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>220</x>
<y>409</y>
<y>459</y>
<width>31</width>
<height>20</height>
</rect>
@@ -585,7 +643,7 @@ font-weight: 600;</string>
<x>-10</x>
<y>166</y>
<width>311</width>
<height>341</height>
<height>561</height>
</rect>
</property>
<property name="styleSheet">
@@ -601,7 +659,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>230</x>
<y>289</y>
<y>339</y>
<width>31</width>
<height>20</height>
</rect>
@@ -620,7 +678,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>30</x>
<y>290</y>
<y>340</y>
<width>191</width>
<height>19</height>
</rect>
@@ -639,7 +697,7 @@ font-weight: 600;</string>
<property name="geometry">
<rect>
<x>30</x>
<y>270</y>
<y>320</y>
<width>141</width>
<height>16</height>
</rect>
@@ -648,6 +706,75 @@ font-weight: 600;</string>
<string>Shading-model-param</string>
</property>
</widget>
<widget class="QRadioButton" name="cb_rgb">
<property name="geometry">
<rect>
<x>30</x>
<y>34</y>
<width>60</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>RGB</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
<widget class="QRadioButton" name="cb_srgb">
<property name="geometry">
<rect>
<x>92</x>
<y>34</y>
<width>71</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>SRGB</string>
</property>
</widget>
<widget class="QRadioButton" name="cb_hsv">
<property name="geometry">
<rect>
<x>165</x>
<y>34</y>
<width>62</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>HSV</string>
</property>
</widget>
<widget class="QFrame" name="frame_3">
<property name="geometry">
<rect>
<x>30</x>
<y>59</y>
<width>220</width>
<height>96</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">QFrame { background: #eee; }</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
<zorder>lbl_param1</zorder>
<zorder>slider_param1</zorder>
<zorder>lbl_shading_model_param1</zorder>
<zorder>cb_rgb</zorder>
<zorder>cb_srgb</zorder>
<zorder>lbl_basecolor_val1</zorder>
<zorder>cb_hsv</zorder>
<zorder>frame_3</zorder>
</widget>
<zorder>frame_2</zorder>
<zorder>label_2</zorder>
187 changes: 124 additions & 63 deletions toolkit/material_editor/ui/main_window_generated.py
Original file line number Diff line number Diff line change
@@ -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,56 +146,68 @@ 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)
self.horizontalLayout_4.setSpacing(6)
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

0 comments on commit da5410a

Please sign in to comment.