Naxela / The_Lightmapper

Fast and easy baked GI Lightmaps for Blender and Cycles
GNU General Public License v3.0
716 stars 52 forks source link

Proposal: export glTF files with lightmaps #173

Open dirkk0 opened 1 year ago

dirkk0 commented 1 year ago

I think the lightmapper can be changed so that lightmaps can be exported to glTF files.

The challenge is to make use of a feature of the blender exporter which can export a Baked Ambient Occlusion texture. To do that one needs to add a gltf settings node to the material and connect the baked lightmap to it.

I made this video to showcase the process. https://youtu.be/Kd_IFycRqEg

So, two steps are needed: 1) change the order at the mix node (easy, change lines 341 to 344 with mixNode.inputs[2/1]) 2) add a gltf settings group node

Does this make sense?

Naxela commented 1 year ago

Hi,

I think there's already sort of something like that available - If you go to Utilities and select "GLTF Utilities", there's a button called "Add GLTF Node":

image

I never really got far with it because I don't have any specific test settings, but if A-Frame isn't too hard to setup, I might give it a go during the weekend, since adding a utility to go through all the materials and rearranging the links shouldn't be too hard.

Did I understand it correctly, that the correct setup would be like this? - Does A-Frame just assume that the UV map for the "main" texture is channel 1 when it's not specified?:

image

dirkk0 commented 1 year ago

Oh, I didn't see that!

And yes, that's what I meant! A-Frame relies on ThreeJS, and thankfully Diego just updated it: https://github.com/aframevr/aframe/issues/5288

You don't have to set up A-Frame (you can, of course, and I would be very glad to assist!) but you can use Don McCurdy's gltf viewer: https://gltf-viewer.donmccurdy.com/

If it works there, it works anywhere.

Thank you so much!

PS: BabylonJS viewer: https://sandbox.babylonjs.com/

PlayCanvas Viewer: https://playcanvas.com/viewer

Naxela commented 1 year ago

Thank you very much for these, would save me a lot of time trying to set up viewers for these frameworks! - With a bit of luck, I might be able to have a utility feature added sometime this weekend

dirkk0 commented 1 year ago

Awesome, thank you! Let me know if I can assist.

Naxela commented 1 year ago

I've tried a bit on doing this, and I've gotten it working to some extent - The problem is that the .hdr lightmaps are "downgraded" from 32-bit to 8-bit jpg/png files, thus you loose quite a bit of lighting data. While 8-bit works fine to some extent (but it becomes washed out and not fully HDR), I'm looking into if I can make something work with the encoded 8-bit files - The problem with this is that it needs a decoder on the other end too, and I don't know if A-Frame have some way to decode RGBD files?

dirkk0 commented 1 year ago

Not entirely sure, tbh. Since A-Frame is a wrapper around THREE, there seems to be a way but not very straightforward: https://discourse.threejs.org/t/threejs-loader-add-hdr/25758 So, the gltfLoader might support this but I wouldn't know how to test this.

How about a switch? I could imagine a use case where people would like to directly look into the textures and can't see/edit .hdr files directly.

jywarren commented 5 months ago

For the AddGLTF Node button, i get this error on Blender 4.1, using the latest 0.6.3 build. I'll try the latest main branch for comparison!

jywarren commented 5 months ago

That's odd, i had downloaded the latest 0.6.3 but in the Add-on preferences dialog it said the previous version had been 0.5.5.0...

in any case, now using the latest master branch, i get a different error:

Python: Traceback (most recent call last):
File "/Users/warren/Library/Application Support/Blender/4.1/scripts/addons/thelightmapper/addon/operators/tlm.py", line 1710, in execute if 'Occlusion' not in gltf_settings_node.node_tree.inputs:
ААААААААААААААААААААААААААААААААЛАЛ
AttributeError: 'ShaderNode Tree' object has no attribute 'inputs'

Thanks for this great add-on!

jywarren commented 5 months ago

Ah just noting i'm also seeing a connection to this issue: https://github.com/Naxela/The_Lightmapper/issues/185#issuecomment-2135770148