Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal: export glTF files with lightmaps #173

Open
dirkk0 opened this issue May 18, 2023 · 9 comments
Open

Proposal: export glTF files with lightmaps #173

dirkk0 opened this issue May 18, 2023 · 9 comments
Labels
enhancement New feature or request

Comments

@dirkk0
Copy link
Contributor

dirkk0 commented May 18, 2023

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 Naxela added the enhancement New feature or request label May 18, 2023
@Naxela
Copy link
Owner

Naxela commented May 18, 2023

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
Copy link
Contributor Author

dirkk0 commented May 18, 2023

Oh, I didn't see that!

And yes, that's what I meant!
A-Frame relies on ThreeJS, and thankfully Diego just updated it:
aframevr/aframe#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
Copy link
Owner

Naxela commented May 19, 2023

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
Copy link
Contributor Author

dirkk0 commented May 19, 2023

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

@Naxela
Copy link
Owner

Naxela commented May 26, 2023

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
Copy link
Contributor Author

dirkk0 commented May 26, 2023

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
Copy link

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
Copy link

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
Copy link

Ah just noting i'm also seeing a connection to this issue: #185 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants