OVEN - Baking Addon - GIVEAWAY

Welcome to OVEN

When exporting your Blender creations to other 3D programs like Unity, Unreal Engine, Godot, etc., procedural materials aren’t correctly exported due to their reliance on nodes readable only by Blender. And that’s where material baking becomes essential - converting these procedural textures into image textures.

OVEN addresses this by offering a complete baking system applicable to any material, regardless of its complexity and without any constraints on specific nodes. Just choose the necessary texture maps, adjust the output image textures resolution and settings, and click “Bake” for a seamless conversion.







4 Likes

I am excited to announce the release of Oven V2!
This version is a complete overhaul of Oven, packed with tons of new features and bug fixes.

Special thanks to Ryan King Art for creating this fantastic tutorial video.

1 Like

Hi there! Oven is an amazing addition to my toolchain. It just saved me more that 18hrs. I have one additional feature to request: on your channel output feature. You don’t have a way of assigning which maps get put to which channel. It would be very handy to be able todo that. It would also be a really nice addition to take advantage of some of the formats you allow export into that support multi layer and/or channel. Open EXR allows both additional channels and layers, and Tiff allows both as well. PNG allows just extra channels. With just channel information, in formats like png, all the baked maps (non color) can be stored in one image, not just 4. With EXR and Tiff all the outputs can be stored into one image in any combination of layers and channels.

1 Like

Hey Brad! I’m really glad to hear that Oven has satisfied you!

If I understand you correctly, you can already assign specific maps to channels in the channel packing section. There, you’ll find a dropdown menu for each channel where you can choose which map corresponds to that specific color.

As for layer packing, actually that’s a great idea! I’ll definitely add it to the plans.

Sorry I didn’t communicate what I meant well. It started as praise after you saved a project of mine at 3 in the morning, then wandered off. Yes I can select which channels go where, but in most cases putting the color image in and then alpha next makes sense, that leaves the rest of the possible channels without a location. Most of the file formats listed support any number of additional channels (tiff, png, and openexr being the most common supporters).
Some of them then have fewer editors you can open them with (photoshop and Gimp being the most reliable for the odd additions).
Supporting both options gives the most support for external applications.

So: normal and color go to layers, all other black and white go to separate channels. a plus button to add any number of channels to assign channels and one for layers. Only in supporting formats obviously.

1 Like

Is/Are ARC gpus/ oneAPI / Embree Supported?

If it is supported by Blender (you can render using it on Cycles), then Oven also supports it.

Got it! :+1:t2:
Thanks for clarifying

But is there a way to extract these additional channels/layers from the image texture node back when recreating the materials?

Not Currently, it would be for external use so it might be best to implement it as a series of separate images and one “conjoined” image for the time being. It is in the blender feature update list, to implement a new image loading node supporting channels and swappable file reference and indexes for channels and layers etc, for official blender updates… I wonder how hard it would be to make that node now though… I might look into that myself. Seems like it shouldn’t be to hard as libraries are already built in…

One additional note, when replacing textures the script needs to default to setting the old textures to a protected status, like fake user, or asset. That way on save the original textures do not get deleted in case of a mistake in meshing etc. Since the plugin auto saves it can erase hours of work and having the option for it to do this would be very helpful.

one more one more… Open EXR will be the easiest to do the layers and channels in. Tiff maybe should be avoided due to closed source nature and finicky opening. But an interesting alternative comes to mind. WebP can have an alpha channel and have an animation, like gif you can turn off the clearing of the old image which will allow for it to essentially open as a stack in a browser or other reader, but will allow access as frames (animated sequence with current image loading setup) so loading and replacing here could be automated, unlike exr tiff etc. . Hadn’t thought of the animation rout but I don’t see why not. at least until blender has a node that can load additional channels etc.

2 Likes

one additional feature request: the texture replace, could it be unlinked from the render? Instead of replacing textures, just add the material and assign all faces, that way old textures aren’t unlinked and then on click go look for textures available and make placeholder image nodes for missing ones (in case of render error and the textures already exist) that way it can be executed without the render operation preceding it.

1 Like

Hello again Brad! thanks a lot for your great ideas! I can definitely work on this one and include the feature to make the imported images fake users or pack them into the Blender file. However, I’ve been trying to pack the images as OpenEXR layers using Python, but I haven’t had any success so far. It turns out to be more complex than I expected, so it might take me a bit more time to figure it out.

Also, if anyone reading this knows a way to do that in Python, I would really appreciate it if you could share it. :innocent:

I thought it was something like

import OpenImageIO as oiio
buf = oiio.ImageBuf(sourcefile)
buf.reset(sourcefile, subimage=layer)
buf.write('/tmp/mylayer_{l}.exr'.format(l=layer))

also https://docs.blender.org/manual/en/latest/compositing/types/input/image.html
missed this as I had never tried it. It does seem to lose the alpha channel, so that should be double stored, as a layer and as a channel in the rgb base layer.

Wow! Thanks so much for your help! The only issue with this code is that it relies on OpenImageIO library, which doesn’t come with Python and isn’t available through pip. Installing it varies depending on the operating system, and it can be especially tricky on Windows. That’s why I’ve been exploring other libraries for the job.

That being said, I’ve added the other two features you requested in version 2.1.1. You can now customize the material recreation method, plus there’s an option to automatically pack or mark the baked images as fake users.

By the way, Oven (along with all my other products) is now on sale! It’s $12 instead of $16. :tada:

I just realized blender has the openexr c++ library installed. It uses it in the compositor export. In theory we can use the same wrapper calls. I’d have to go look at the blender source to see what wrapper it is using and how we could call it. But it seems full support is available from within?

Just found a bug. Well more of an opportunity for another feature. So the plugin names each file with the same prefix and relies on folders to differentiate. Most exporting scripts, gltf specifically in this case, use the file name from the source datablock whether the file is packed or not. This means that the stored files all have the same name. So when you load the export, it only loads one of each map type and applies them to all the objects. So easy fix is an append option that sticks the name of the object being baked in front of the map type. A better solution is to implement a mustache bar style appending system that allows things like {date} {material_name} etc (naming specific blocks from the object or material to bake with. Just lost almost 10hrs looking for a problem which turned out to be there only being one Alpha_Map.webp in the gltf even though their should have been 30 objects worth of them.

Also, check this for some inspiration? https://github.com/3d-io/Blender_Exr_auto-pass_saver/blob/master/Exr_auto-pass_saver.py

1 Like

You know what? :joy: This was actually an option, but I decided to remove it last minute before releasing V2 to keep things simple. Now, it’s integrated with the subfolders option. When you enable subfolders, the file names don’t include the object name since they’re neatly organized into folders. However, if you turn off subfolders, all the maps are saved in one folder, so they need to include the object name to prevent overwriting.

So, for now, if you’re planning to export your assets in that format, just turn off subfolders and the object names will be added automatically. But if re-adding the option would be helpful, I can definitely bring it back if that’s what people prefer!

And thanks a lot for sharing that code! I’ve been experimenting with the EXR packing again lately. I found a solution but it turned out to be Windows-only and don’t want to limit the add-on to one OS, so I didn’t go with it. But this code you sent looks really promising!

Great News! EXR packing is finally here! Just download the new 2.2 version to start using it.

Ultimats users, you’ve got this update too! :sparkles:

To celebrate reaching 200 downloads and 10 five-star ratings on BlenderMarket, we’re giving OVEN away for free to 3 lucky customers! :four_leaf_clover::tada: