I generate GLTF files with a custom extension. Now i want to create a simple viewer, load a gltf file and react to that extension. The extension contains some coloring data and an additional mask texture that i want to use to tint the model.
I already managed to do it with BabylonJS as they have a plugin mechanism that i can hook into, read metadata, attach it to the material and then use it in a plugin material to modify the PBR shader.
Is there anything similar in playcanvas? Any documentation that i might be missing?
Found out that there is no way to register a plugin or something that can hande a custom GLTF extension. Had to copy this function here
to add custom extension handler here
would be great if the glb parser would actually expose the createMaterial function and some of the utility function. I might create an issue for that on github.
Now the last bit i need to know is how to add shader chunks into the standard material
When you load the glb asset, you can specify a processing functions that get called when the glb is parsed - at that point you can get data from your extensions.
yes, but that is too late though, because at that point the textures have already been consumed to create the material and unused textures are basically “lost”. My custom extension needs to grab one of those textures otherwise it is not assigned anywhere.
@slimbuck understands this the best.
But I’m pretty sure we have some internal test project where a custom texture is referenced by the material plugin, so it should be doable using this callbacks.
Please do create an issue and describe accurately what you’re trying to achieve.
If you need the equivalent of a material extension, then you probably can just implement a material.postprocess handler. This handler is given the standard material instance and the gltf material object (see here). Although I see it is not sent the list of textures. That’s perhaps something you’d need to get the job done?
That is exactly the point. The postprocess does not receive textures.
Sorry for not making that clear in the opening post. Yet at that point i had no understanding of playcanvas internals and was not able to find any documentation about “how to create a plugin and add to the gltf asset pipeline”. So that what i asked for. After reading the source code i then found those preprocess, process and postprocess hooks.
What i want to achieve with the custom extension:
grab an additional texture and additional metadata from any gltf material node
add custom shader to “tint” the model based on that texture (being a mask) and metadata (some coloring info)
Point 1. is solved, yet not to my satisfaction, as i need to use the process hook to access the texture and therefore have to replicate the createMaterial function from glb-parser.
Here is the current extension code
Point 2. is an open question to me. I have to learn how to add custom shader bits to an existing material. Any link to an example or documentation would be awesome.