A tool I developed for quickly creating interesting textures for 3d objects. By manipulating decals through a range of parameters much like a particle system users can control aspects like size, rotation and layering to achieve a unique look. Parameters can also be directly controlled by textures leading to a very experimental workflow where for example you could use a paint layer to control areas of high density, a noise map to control size while a baked occlusion map drives the color of each decal.
Most of this month was just on solidifing the core of the program, and greatly simplifying a lot of systems that had gotten out of control in the rush to finish the initial prototype. Things like properly handling conversion between different color spaces, and getting better debugging visuals setup which haven't had much of an impact of the usability of the project but should make it easier to make progress in the future. Even still I managed to get a couple newer things in...
The way texures work has changed significantly from the prototype, now instead of just being a preset list of occlusion, curvature etc you can add the types of maps you want and set their resolution and settings independently. This greatly simplified a bunch of the interface, like being able to move background color and sample information into their respective layers. It also opened up the ability to easily add paintable textures and noise maps without adding a bunch of complication. Some of the map types are less useful then others currently, for example theres not really any point in having a secondary ambient occlusion map but eventually I expect there to be some unique ao generation settings like a max occlusion distance that might necessitate having a second ao map.
Another texture related feature is the new texture viewport which allows for panning and zooming, I should have gotten this in much sooner as it ended up helping quite a lot with debugging as now I can inspect individual pixels to see their values.
The other thing that took a significant amount of development time last month was improving the decal position generation, now decals can vary in density and be mapped in the same way as size or color. I had not been happy with how this had worked in the previous version as the rendered texture would often be empty for a few seconds until the generation had finished. Now that the user would be making minor tweaks to density regularly, I thought it was important for this to be much smoother. I achieved this by using a simpler algorithm to first show a rough preview on the first frame before filling in the gaps on subsequent frames.
Overall I didn't get quite as many features in as I would have liked in this version. In particular I was hoping to improve the lightmap generation alot but that will have to wait for the next version. However a lot more of the foundations are now in place for many of the interesting things I want to do. I have decided that it's still not worth releasing the source code publicly at this stage due to the number of remaining issues, but a download is available if your interested in trying it out.
In the past I’ve built many small tools for game projects, mostly for editing levels or managing art assets but I wanted to make something not just for a specific game but a tool that would be useful to a more general audience but I wasn’t sure what that would be. An idea came when I was working on a prototype and tasked with creating buildings in a paper cut out style inspired by chaotic graffiti. So I setup a system that used blender geometry nodes and a small python script that then went into a substance designer setup to generate a texture and mesh. As I developed these tools further for the project I found they were quite exible in achieving a range of different styles, however due to how I had set it up it was difficult to experiment and make changes quickly. Also if the project had been expanded the setup would have been difficult for anyone else to use But I could see potential and thought it might be something that other people could find useful so I decided to expand it into it’s own dedicated tool.
Initially I had wanted to do this as a unity plugin however I had ran into issues in the past when trying to access unitys baked ao for my own textures and I thought it might limit the usefulness by being tied to one engine. The other main reason was that I wanted to focus on design rather than getting caught up in unity specific details.
One of the main problems with this type of texturing is that each object needs it’s own texture, this isn’t so bad for characters but generally environments try to fit multiple objects on the same texture using trim or atlases. Early on I experimented with doing the scattering in engine using texture bombing, I was able to achieve a similar looking result and because it was purely done throuhg the shader each object didn’t need a separate texture, another benefit was that the resolution was only limited by the size of the decal meaning you could have very dense patterns that were still perfectly crisp when you get close to them. Unfortunately this approached introduced many limitations including, the shader getting exponentially more expensive with larger decal sizes, supporting non square textures would have been a lot of extra work and the approach would have been difficult to turn into something general purpose since different features often required completely different shader setups. I would probably look further into this though if attempting to do a large game with similar texturing techniques.
Each part of the software went through several iterations to get to something that was easy to use while still providing full control over the visual appearance.