Worn Edges

Worn Edges

WORN EDGES is a tool I created in 2013 that allows the user to generate a worn look (amongst other things) for their props. It is written as a Unity3D editor extension (as such it only works within unity).
I wrote a small post on it when it was early in development, you can see it here.

Tori, before and after using the WORN EDGES tool

It works by generating a lot of different maps, which get combined into a single “combined map”, which details the level of wornness for each pixel of the texture. This combined map is in turn used to alter the original, clean, texture.

a simple example of the principle
a simple example of the principle

The tool can create a lot of different maps:

  • 3d, 2d and 1d noise map
  • sharpness map
  • ambient occlusion map
  • directional occlusion map
  • angle falloff map
  • distance map
  • wood map
  • mask map

How these maps are created and combined is fully customizable, to create the effect the user desires.
As such, it can create more than just a worn edges look (see screenshot below).
tikis with different maps

In general, for just a worn edges look, only the 3d noise, ambient occlusion and sharpness maps are used. The other maps are generally for more specific effects (see screenshot above).

The models this tool is used on should have a clean UV layout, without overlapping triangles (although symmetrical or otherwise identical geometry can often share uv-space without a problem). But it can also bake everything to a 2nd set of UVs, for example the auto-generated lightmap UVs (that is often used in Unity3D). As such you can actually also use this to bake multiple textures with overlapping UVs into a single texture that uses these 2nd UVs.

wooden - worn edges
ball_variations 2_ballDevelopment
worn (edges) (worn) edges

It’s available on the Unity Asset Store.

Here’s a relatively recent (at the time of writing) demonstration movie:

and here’s an older demonstration (a bit outdated, but still relevant):
(Unfortunately though, it is kind of slow)

Golden Circle Level

The GoldenCircle Level is the newest for the Tacx Trainer Software Virtual Reality (see my previous post on this software here). It’s the biggest yet, containing more than 40 km of road, in a region of 4 x 4 km.

The level has an oriental theme, and consists of extremely varied Chinese and Japanese scenery.

I created the full Golden Circle Level, the bulk of the work was done in Spring and Summer of 2014.

GoldenCircle GoldenCircle
GoldenCircle GoldenCircle
GoldenCircle GoldenCircle GoldenCircle
GoldenCircle GoldenCircle GoldenCircle

More screenshots can be found on Flickr.



SNOWIFY is a tool I created early 2013 that allows the user to generate thick packs of snow on any prop.
For when a simple snow shader isn’t enough.

It started of as a hobby project; I had just had to make a snow level for work (more precisely, a snowed version of an existing level), for which I had created a couple of simple snow shaders (using the angle of the surface normal to determine snowiness).
But when making that level, I found that in some cases it would have looked better if the snow had a volume, rather than being flat.
So afterwards I came up with an idea to create snow meshes based on the mesh of the object it was resting on, and started working on a tool to do that in my spare time.

Since I nowadays work primarily in the Unity3D engine, I made this tool for use in Unity.

houses with snow

The tool allows for complete control over the snow’s thickness, angle, direction, material, smoothness, and various other settings.
The snow meshes are also automatically unwrapped and textured.

jeep with snow

It’s available on the Unity Asset Store.



Snowify was used by Hinterland Studios for the creation of their game “The Long Dark”:
(it’s being listed as one of their favorite packages from the Unity Asset Store)

Projection Correction

Some time ago I had to take a bunch of screenshots of the TTS VR for advertising purposes.
They needed a lot of screenshot for various formats (web banners, magazines, …),
so they tend to recrop the screenshots I send them a lot, depending on the need and space,
because of that I have to add some extra space outside of the actual screenshots, which I simply do by increasing the fov of the camera I render the screenshots with.

The thing is though, that the higher the fov, the more perspective distortion you get away from the center.
(a logical result for a projection of a 3d space onto flat plane)
This isn’t essentially a bad thing though, it’s actually correct, if the image is viewed from straight in front of the center, and at the right distance, so it’s looked at with the same angular size as the image was made (the fov).

The problem, is that these screenshots sometimes get cropped in extreme ways, by which I mean, far to one side, moving focus away from the center.
This causes the image to look strange, as the content is skewed and stretched.

So I decided to make something to counter that.

I figured that if the 2d space that was projected on was a spherical shell instead of a flat plane, there would be no distortion.
A spherical shell however can not be mapped to a flat plane without distortion (obviously, just look at maps of the earth),
but, a cylindrical shell totally can.

So, using math and logic (whoo) I created a post effect that manipulates the image as if it was projected on a cylinder (with either a horizontal or a vertical axis), and then unfolded.

This way it can make sure there is no distortion either horizontally, or vertically, depending on whether the image is in landscape or portrait.
Because of this, you can move focus in this direction (horizontal or vertical), without it looking off.
A side effect of this is that you can easily stitch together screenshots made by rotating around the cylinder-axis.

rendered with projection correctionAn extreme example, the horizontal fov is more than 200 degrees, this isn’t even possible with normal rendering (only <180 degrees).


There are a few setbacks however,
firstly, unlike normally (projecting on a flat plane), not all straight lines (in 3D) are straight in the image, some are curved,
secondly, a lot of space is wasted in the image (the black parts), because of the extra cylinder-mapping, which means you have to render at a higher resolution for the same detail.
and lastly (and definately least), there is no filtering done in the cylinder-mapping, so the result can be a bit jaggy (and moreso the bigger the fov is).

I also made a second mode, which is a bit simpler and less extreme,
as it only streches 1 of the axes, just so proportions look correcter. This one is actually more difficult to explain, just look at the pictures.


I’ve made this post effect available for free on the Unity Asset Store:


It requires a Unity Pro license in order to work though.

Tacx Trainer Software Virtual Reality

I’ve worked for a little over 3 years now on the Virtual Reality part of the Tacx Trainer Software.

The Tacx Trainer Software (TTS) is software for riding training sessions on a Tacx bicycle trainer, for amateur and professional cyclists.
The Virtual Reality (VR) lets you ride in virtual worlds; terrain, slope and wind info is send to the bicycle trainer, for a realistic riding experience.

For the most part I was the only artist. So I pretty much made every level on my own from scratch.
(That includes the level design, placement, lighting, particle systems, …, and creating almost all off the props)

Initially we started development using GameBryo, but halfway through production, we switched over to Unity3D.

Here are some screenshots from various levels:

Downhill Valley, the first level made in Unity. Most of the vegetation was painted on the terrain, rather than placed individually (unlike the Mediteranian level)

Valeggio, half of the Mediteranian/Italy level, the first level I made. Originally made in GameBryo’s Lightspeed.

Metropolitan, Originally started with a (very basic) 3th party city-pack, but only a part of the street layout and basic buildings remain, as most of the textures and UV’s are completely replaced or redone. The smaller props, like the traffic lights, and the entire park were made by me. (Allthough the park also contains a couple of standard Unity3D trees).

While the orginal male and female cyclist models aren’t made by me, I did make almost all the cyclist outfits (shirts+pants, not the glasses, helmets and shoes), and redid the UV-layout to better fit these dozens of outfits, and created the necessary maps for changing the skin and hair color (and for some outfits, the outfit colors).


I also made all the bikes (currently 3 types), which also have customisable colors.

MTB Track Race MTBb Trackb Raceb

More screenshots can be found on Flickr.

For more info on a more recent level (summer 2014), check here.
Golden Circle Level

Procedural “Worn Edge”-effect

When texturing some sort of metallic object (a machine, weapon, robot,…),
it’s often a good idea to make the edges a bit worn off, otherwise it looks to clean, and it just makes the object more interesting.

worn-edges example (not made by me)

The way I was taught to do this, was by painting it manually on the texture.
But I always felt this to be kind of a hassle, as these worn edges are often on UV-seams, making it more difficult to paint correctly than anywhere else on the textures.
And it just always seemed to me that this could perfectly be generated procedurally,
as the location and look of a worn edge is more of a technical thing, rather than a design chose.
Like ambient occlusion, you can paint that aswell, but most often you’re better of baking procedural ambient occlusion.

A couple of weeks ago I finally started making something to do this.

I created an editor extension in Unity3D, that allows you to generate worn edges and bake it into a texture.

Here’s an example:

Both the rust/dirt and the worn edges (middle and right) where created by my tool.

My first idea was to make this a tool in Blender, but I’m not familiar with Python, and so I wanted to test some things in Unity first. But before I knew it, I had already created the whole outline of how to make it in Unity in my head.
So I started making it in Unity instead, and to my suprise, the development of it went extremely smooth, everything worked as expected, even the things I had to invent on the spot.

The editor extension and a test object in Unity.

Now the tool does have it’s restrictions (for example: it currently only works on hard/sharp edges), but if you keep these in mind it works great IMO.

I’m planning on putting it on the Unity Asset Store,
I still have to make some documentation and screenshots and stuff, those things tend to take way more time than intended. 😦
But other than that, it’s as good as finished. 🙂


Now available on the Asset Store:

More info: