KhronosGroup / glTF-Blender-IO

Blender glTF 2.0 importer and exporter
https://docs.blender.org/manual/en/latest/addons/import_export/scene_gltf2.html
Apache License 2.0
1.48k stars 316 forks source link

Blender 2.8 Export GLTF error messages #116

Closed enzyme69 closed 5 years ago

enzyme69 commented 5 years ago

I am testing Blender 2.8 Beta, it seems to have GLB and GLTF exporter.

Scene is simple, just Principles with some PBR textures: albedo, metalness, etc.

screen shot 2018-11-30 at 11 04 17 pm

Getting this error:

Traceback (most recent call last):
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/__init__.py", line 380, in execute
    return gltf2_blender_export.save(self, context, export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_export.py", line 38, in save
    scenes, animations = gltf2_blender_gather.gather_gltf2(export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather.py", line 32, in gather_gltf2
    scenes.append(__gather_scene(blender_scene, export_settings))
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py", line 51, in wrapper_cached
    result = func(*args)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather.py", line 49, in __gather_scene
    node = gltf2_blender_gather_nodes.gather_node(blender_object, export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py", line 51, in wrapper_cached
    result = func(*args)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py", line 40, in gather_node
    mesh=__gather_mesh(blender_object, export_settings),
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py", line 137, in __gather_mesh
    return gltf2_blender_gather_mesh.gather_mesh(blender_object.data, vertex_groups, modifiers, export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py", line 51, in wrapper_cached
    result = func(*args)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py", line 35, in gather_mesh
    primitives=__gather_primitives(blender_mesh, vertex_groups, modifiers, export_settings),
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_mesh.py", line 81, in __gather_primitives
    return gltf2_blender_gather_primitives.gather_primitives(blender_mesh, vertex_groups, modifiers, export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py", line 51, in wrapper_cached
    result = func(*args)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py", line 55, in gather_primitives
    material=__gather_materials(internal_primitive, blender_mesh, modifiers, export_settings),
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_primitives.py", line 69, in __gather_materials
    return gltf2_blender_gather_materials.gather_material(material, export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py", line 51, in wrapper_cached
    result = func(*args)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py", line 50, in gather_material
    pbr_metallic_roughness=__gather_pbr_metallic_roughness(blender_material, export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials.py", line 137, in __gather_pbr_metallic_roughness
    export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py", line 51, in wrapper_cached
    result = func(*args)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py", line 34, in gather_material_pbr_metallic_roughness
    metallic_roughness_texture=__gather_metallic_roughness_texture(blender_material, export_settings),
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_materials_pbr_metallic_roughness.py", line 85, in __gather_metallic_roughness_texture
    return gltf2_blender_gather_texture_info.gather_texture_info(texture_input, export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py", line 51, in wrapper_cached
    result = func(*args)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_texture_info.py", line 33, in gather_texture_info
    index=__gather_index(blender_shader_sockets_or_texture_slots, export_settings),
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_texture_info.py", line 62, in __gather_index
    return gltf2_blender_gather_texture.gather_texture(blender_shader_sockets_or_texture_slots, export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py", line 51, in wrapper_cached
    result = func(*args)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_texture.py", line 47, in gather_texture
    source=__gather_source(blender_shader_sockets_or_texture_slots, export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_texture.py", line 88, in __gather_source
    return gltf2_blender_gather_image.gather_image(blender_shader_sockets_or_texture_slots, export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py", line 39, in gather_image
    uri=__gather_uri(blender_shader_sockets_or_texture_slots, export_settings)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py", line 85, in __gather_uri
    return __get_image_data(sockets_or_slots)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_image.py", line 137, in __get_image_data
    image.add_to_image(image_data)
  File "/Users/jimmygunawan/Downloads/blender-2.80.0-git20181129.26d5a3625ed-x86_64/blender.app/Contents/Resources/2.80/scripts/addons/io_scene_gltf2/io/exp/gltf2_io_image_data.py", line 38, in add_to_image
    raise ValueError("Can't append image: channels full")
ValueError: Can't append image: channels full

location: <unknown location>:-1

I am wondering if I am doing it correctly? Is there documentation?

enzyme69 commented 5 years ago

monkey_PBR_005.blend.zip

Here is the Blend file to play with. Please use Blender 2.8 Beta.

enzyme69 commented 5 years ago

I tested with material only with Albedo and Normal, seems like not getting error. But if I am also adding textures for both Metalness and Roughness, it gives the error.

Is it still the norm that Metalness and Roughness is coming from a single material and it automatically takes the R and G?

enzyme69 commented 5 years ago

After investigation so far:

enzyme69 commented 5 years ago
screen shot 2018-11-30 at 11 24 07 pm

If I separate RGB and plugging it into Roughness and Metalness, I am not getting error and it seems to export a texture to either Metalness or Roughness. It's blue color.

This is promising.

enzyme69 commented 5 years ago

And... also curious on where to plug Occlusion map in Principled? Hmm... 🤔

dsinni commented 5 years ago

@enzyme69

Is it still the norm that Metalness and Roughness is coming from a single material and it automatically takes the R and G?

From what I understand from https://www.khronos.org/blog/art-pipeline-for-gltf, RGB translates to ORM, so:

R = Ambient Occlusion G = Roughness B = Metallic

At least, I think it's supposed to work that way; I've also been having issues getting this to work in the Blender/Exporter Beta.

I'm also not sure if it's supposed to be automatic or if you need to run it through the Separate RGB node, but I've been seeing some node configuration demos using the latter.

emackey commented 5 years ago

@enzyme69 Thanks for this sample. The "channels full" error should be fixed now (at least on the master branch here, I'm not sure if it's in Blender yet).

Also, you have the correct type of normal map here, but it's wired incorrectly in your node setup (the documentation isn't written yet, please bear with us). You have a purple node named "Bump" that should be replaced with a different node called "Normal Map".

correctnormals

The two nodes take very different types of images. The "height" channel of the Bump node wants a grayscale image with dark valleys and bright peaks. But glTF doesn't accept those, glTF wants a Tangent-space Normal Map. You're in luck, as you already have one in this blend project. It's the purplish image that looks like a red light is shining in from the right (+X), a green light is shining down from the top (+Y) and a blue light is shining face-on to the image (+Z). Hook that up to the Normal Map node, and Blender should show it to you correctly.

@UX3D-nopper I do still see an export bug here in master. The blend file has separate grayscale images for metallic and roughness, but, the roughness ends up in R and the metallic ends up in both G and B, even after the fix in #139. Not sure why.