Browse Source

Don't bake shadows for objects with no drawables

I fail to understand why Blender thinks this is legit, but oh well...
Also, as a bonus, we no longer clobber values in the GoodNeighbor tracker.
I wonder how many bugs this will fix?
pull/38/head
Adam Johnson 9 years ago
parent
commit
7e387fda48
  1. 9
      korman/exporter/etlight.py
  2. 3
      korman/helpers.py

9
korman/exporter/etlight.py

@ -163,7 +163,10 @@ class LightBaker:
return None return None
def _has_valid_material(self, bo): def _has_valid_material(self, bo):
for material in bo.data.materials: data = bo.data
if data is None or not isinstance(data, bpy.types.Mesh):
return False
for material in data.materials:
if material is not None: if material is not None:
return True return True
return False return False
@ -318,11 +321,15 @@ class LightBaker:
toggle.track(objs, "hide_render", False) toggle.track(objs, "hide_render", False)
for i in bpy.data.objects: for i in bpy.data.objects:
i.select = i == objs i.select = i == objs
if not self._has_valid_material(i):
toggle.track(i, "hide_render", True)
else: else:
for i in bpy.data.objects: for i in bpy.data.objects:
value = i in objs value = i in objs
if value: if value:
toggle.track(i, "hide_render", False) toggle.track(i, "hide_render", False)
elif not self._has_valid_material(i):
toggle.track(i, "hide_render", True)
i.select = value i.select = value
@persistent @persistent

3
korman/helpers.py

@ -24,7 +24,8 @@ class GoodNeighbor:
return self return self
def track(self, cls, attr, value): def track(self, cls, attr, value):
self._tracking[(cls, attr)] = getattr(cls, attr) if (cls, attr) not in self._tracking:
self._tracking[(cls, attr)] = getattr(cls, attr)
setattr(cls, attr, value) setattr(cls, attr, value)
def __exit__(self, type, value, traceback): def __exit__(self, type, value, traceback):

Loading…
Cancel
Save