Skip to content

Commit

Permalink
Multiple fixes to the material editor
Browse files Browse the repository at this point in the history
  • Loading branch information
tobspr committed Nov 20, 2016
1 parent be337a9 commit c6b10d7
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 38 deletions.
Binary file modified data/builtin_models/skybox/skybox-blend.zip
Binary file not shown.
Binary file modified data/builtin_models/skybox/skybox.bam
Binary file not shown.
2 changes: 1 addition & 1 deletion effects/material_blend4.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ fragment:
// Material properties
m.shading_model = mInput.shading_model;
m.basecolor = m_base;
m.basecolor = m_base * mInput.color;
m.normal = apply_normal_map(vOutput.normal, m_nrm, mInput.normalfactor);
m.specular_ior = blend_ior(mInput.specular_ior, spec);
m.roughness = mInput.roughness;
Expand Down
13 changes: 13 additions & 0 deletions rpcore/gui/debugger.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@

from __future__ import division

import os
import sys
import subprocess

from rplibs.six.moves import range # pylint: disable=import-error

from panda3d.core import Vec4, Vec3, Vec2, RenderState, TransformState
Expand Down Expand Up @@ -198,6 +202,15 @@ def init_keybindings(self):
Globals.base.accept("f5", self.toggle_gui_visible)
Globals.base.accept("f6", self.toggle_keybindings_visible)
Globals.base.accept("r", self.pipeline.reload_shaders)
Globals.base.accept("m", self.start_material_editor)

def start_material_editor(self):
""" Starts the material editor """
self.debug("Starting material editor")
pth = sys.executable
editor = os.path.dirname(os.path.realpath(__file__))
editor = os.path.join(editor, "..", "..", "toolkit", "material_editor", "main.py")
subprocess.Popen([pth, editor], shell=True)

def toggle_gui_visible(self):
""" Shows / Hides the gui """
Expand Down
11 changes: 9 additions & 2 deletions rpcore/render_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,10 @@ def _init_common_stages(self):
self._upscale_stage = UpscaleStage(self)
add_stage(self._upscale_stage)

def _get_serialized_material_name(self, material, index=0):
""" Returns a serializable material name """
return str(index) + "-" + (material.get_name().replace(" ", "").strip() or "unnamed")

def export_materials(self, pth):
""" Exports a list of all materials found in the current scene in a
serialized format to the given path """
Expand All @@ -651,7 +655,7 @@ def export_materials(self, pth):
continue

handle.write(("{} " * 11).format(
(material.get_name().replace(" ", "") or "unnamed") + str(i),
self._get_serialized_material_name(material, i),
material.base_color.x,
material.base_color.y,
material.base_color.z,
Expand All @@ -667,10 +671,11 @@ def export_materials(self, pth):
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]

for i, material in enumerate(Globals.render.find_all_materials()):
if (material.get_name().replace(" ", "") or "unnamed") + str(i) == name:
if self._get_serialized_material_name(material, i) == name:
material.set_base_color(Vec4(float(data[1]), float(data[2]), float(data[3]), 1.0))
material.set_roughness(float(data[4]))
material.set_refractive_index(float(data[5]))
Expand All @@ -681,3 +686,5 @@ def update_serialized_material(self, data):
float(data[9]),
float(data[10]),
))

RenderState.clear_cache()
77 changes: 42 additions & 35 deletions toolkit/material_editor/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,16 +110,18 @@ def __init__(self):
self.set_material()

def update_sliders(self):
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.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)))
self.send_update()
if not self.in_update:
self.send_update()

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.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)))

def update_material_list(self):
temp_path = os.path.join(tempfile.gettempdir(), "rp_materials.data")
Expand Down Expand Up @@ -160,18 +162,21 @@ def _load_material_list(self, pth):
material.shading_model_param1 = float(parts[9])
material.shading_model_param2 = float(parts[10])
self.materials.append(material)
print("Materials[] =", material.name)
self.cb_material.addItem(material.name)
self.update_sliders()
self.in_update = False
print("Loaded material list")

def set_material(self):
if self.in_update:
return
index = self.cb_material.currentIndex()
if index >= len(self.materials) - 1:
print("invalid material.")
if 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)
Expand All @@ -181,35 +186,39 @@ def set_material(self):
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.update_sliders()
self.in_update = False
self.update_sliders()
self.set_metallic()
self.set_shading_model()

def set_metallic(self):
self.material.metallic = self.cb_metallic.isChecked()
self.slider_specular.setEnabled(not self.material.metallic)
self.send_update()
if not self.in_update:
self.material.metallic = self.cb_metallic.isChecked()
self.slider_specular.setEnabled(not self.material.metallic)
self.send_update()

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 set_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)
Expand Down Expand Up @@ -237,8 +246,6 @@ def set_shading_model(self):
elif name == "Foliage":
self.cb_metallic.hide()



self.material.shading_model = val
self.send_update()

Expand Down

0 comments on commit c6b10d7

Please sign in to comment.