09th / YABEE

Export models from the Blender to Panda3D game engine
MIT License
107 stars 39 forks source link

NoneType exception during egg writing #33

Closed SkyLeach closed 5 years ago

SkyLeach commented 6 years ago

I'll try to dig deeper, but I get this stack trace relatively often:

Traceback (most recent call last):
  File "/Users/magregor/Library/Application Support/Blender/2.79/scripts/addons/io_scene_egg/yabee_libs/egg_writer.py", line 1737, in write_out
    file.write(gr.get_full_egg_str())
  File "/Users/magregor/Library/Application Support/Blender/2.79/scripts/addons/io_scene_egg/yabee_libs/egg_writer.py", line 187, in get_full_egg_str
    return ''.join(self.get_full_egg_str_arr(level))
  File "/Users/magregor/Library/Application Support/Blender/2.79/scripts/addons/io_scene_egg/yabee_libs/egg_writer.py", line 220, in get_full_egg_str_arr
    egg_str.append( ch.get_full_egg_str(level + 1) )
  File "/Users/magregor/Library/Application Support/Blender/2.79/scripts/addons/io_scene_egg/yabee_libs/egg_writer.py", line 187, in get_full_egg_str
    return ''.join(self.get_full_egg_str_arr(level))
  File "/Users/magregor/Library/Application Support/Blender/2.79/scripts/addons/io_scene_egg/yabee_libs/egg_writer.py", line 213, in get_full_egg_str_arr
    for line in self._yabee_object.get_full_egg_str().splitlines():
  File "/Users/magregor/Library/Application Support/Blender/2.79/scripts/addons/io_scene_egg/yabee_libs/egg_writer.py", line 947, in get_full_egg_str
    self.get_polygons_str()))
  File "/Users/magregor/Library/Application Support/Blender/2.79/scripts/addons/io_scene_egg/yabee_libs/egg_writer.py", line 939, in get_polygons_str
    polygons = '\n' + ''.join(self.collect_polygons())
  File "/Users/magregor/Library/Application Support/Blender/2.79/scripts/addons/io_scene_egg/yabee_libs/egg_writer.py", line 912, in collect_polygons
    tref(f, attributes)
  File "/Users/magregor/Library/Application Support/Blender/2.79/scripts/addons/io_scene_egg/yabee_libs/egg_writer.py", line 740, in collect_poly_tref
    if material.use_nodes:
AttributeError: 'NoneType' object has no attribute 'use_nodes'
SkyLeach commented 6 years ago

Looks like this is a bit unsafe:

from yabee_libs/egg_writer.py under the cycles_materials_export branch:

            textures = []

            # Find the material assigned to that polygon:
            # First, check if that polygon has a material at all
            material = None
            if face.material_index < len(self.obj_ref.data.materials):
                material = self.obj_ref.data.materials[face.material_index]

            matIsFancyPBRNode = False
            if material.use_nodes:
                nodeTree = material.node_tree
                if nodeTree.nodes.get("Panda3D_RP_Diffuse_Mat"):
                    matIsFancyPBRNode = True
            if material:

That material.use_nodes should be dropped below if material:

rdb commented 5 years ago

Fixed in #42