Texture support was (possibly) fixed for BTX (and DDT support added) to the BAR extractor. Just drag a BAR file into the page and it’ll load up thumbnails for all images within. I’m using it to look through the Age of Mythology files; I dont have Age of Empires 3 installed, but it should work with that too.
Visit here to use the tool.
A few more under-the-hood fixes (mainly around value auto-swizzling). The newest version is here https://weesals.com/Releases/HTML/Surface/R8/
I made a caustics generator in it (load the example project to see). Unfortunately PerlinNoise has a grid artifact, so cannot be used, and SimplexNoise does not wrap. I’ll need to add another noise generator once I find a suitable one.
Added a Gradient Map node, which maps a grayscale input onto a colour gradient. The UI for it is quite lacking, but it works functionally. Also made a brick texture.
To see it, load the example file in the new build. http://weesals.com/Releases/HTML/Surface/R7/
Added distance fields using an algorithm called “jump flooding”. It can be used to add bevels. The second output contains the distance values, ill swap them around at some stage.
I found this animation helpful in understanding the concept https://www.shadertoy.com/view/4syGWK, they use a power of 2 when spreading values, but I found a power of 3 works great too, and is much cheaper – that is what the Quality slider controls.
The UI is now much cleaner and easier to understand. The types of some parameters can be changed (for example making the frequency 2D for PerlinNoise, or changing blend to work with grayscale values). Worley Noise (aka cellular noise) has been added, which is useful for cutting out wedges from objects (like stone). Nodes that can be transformed can now wrap in Presentation space (ie. they still produce a tiling texture) or not at all. Tiles has some more properties, and offset was changed to be relative to the count (like in Substance).
Attempted this tutorial in Surface, it needed a lot of fine tuning to get acceptable AO and normals.
Load the file from here: http://weesals.com/Releases/HTML/Surface/R5/Grass%20Rock.json
Added a shadows node, made the Shape node more generic (all falloff functions work with all shapes), and optimised things a bunch. Also added FileSaver so large files export correctly.
Heres a perlin terrain:
Use this version here http://weesals.com/Releases/HTML/Surface/R5/, it will automatically load the test surface now (just hit New to clear it).
This utility searches for similar-named files in different directories and shows a comparison of their contents. I reuse classes from older games a lot, and often find little things to fix or improve. Running this helps to identify what was changed and what game it was changed in, and also shows a diff of the changes so I can copy them back across.
Download: Source | Binary
More work on the procedural texture generator, this time I added functionality for nodes to act as “passthrough” nodes, where instead of rendering to a texture, they pass their code onto the next node, so that a whole branch can be generated at once. While this can help with rendering times, a far bigger advantage is that nodes (like the Tiles node) can provide their own seed for the input branch. Passthrough nodes are denoted by a blue border, or can be forced on by selecting them and checking the “Passthrough” checkbox in their preview.
Loading/saving to external files is there now too, ‘blend’ outputs a (broken) mask as ‘output 2’, and various nodes have added parameters.
In this render, all the stones are unique. Disable passthrough on the PerlinNoise nodes to see without. The comparison below shows the difference.
Try out this release by visiting http://weesals.com/Releases/HTML/Surface/R4/ and load in the above surface from http://weesals.com/Releases/HTML/Surface/R4/Dirt%20Rocks.json
I was very impressed with the Substance Designer workflow, so decided to build my own node-based texture editor. After a month, here is the result.
It is only tested with Chrome, use it by visiting http://weesals.com/Releases/HTML/Surface/R3/.
Future goals are to better tag data types so they are converted correctly (ie. height-map implicitly converted to normal-map) and allow different types of data to be passed between nodes (points and meshes). And obviously add and fix nodes.