RallyGame Outlined wireframe styles

Making graphics for games is usually a team thing, with large companies having even multiple teams dedicated to creating the models, texture and animations.

I don’t have any of that.. and well.. it’s not really something im good at. So with that in mind my goal was trying to find a way getting something like an aesthetic for free, also hopefully for good via some simple method.

The idea that I came up with was a highlighted outline like view much like cartoon filters in the Borderlands games. But my idea was ideally much simpler than that, by completely removing the full lighting model. Which I hope side steps much of the problems with shading/shadows/sunlight and things that seem important like model colours/normals and maybe even textures.

So back to the actual doing, JMonkeyEngine3 has a built in class called CartoonEdgeFilter (a post-processor filter) I applied to my scene with the default engine shading and the SkyControl plugin here

..so it looks off but still closer to what I had envisioned.

As an aside I never really planned on sketching this aesthetic, all of this happens through random thoughts and a lot of chance.

This worked well but there was a problem that it worked on the entire scene in one pass. here

This means that every object in the scene/view will have that same outline, which doesn’t allow you to distinguish between objects. My research on post-processor filters (having never used them), have only the scene as an image buffer and depth texture.

A note: the depth texture is how the CartoonEdgeFilter worked, it found ‘large’ differences between pixels depths and sets their colour to the highlight colour. See: CartoonEdgeFilter.java

I had looked into setting a material parameter, which may make it to the post-processor filter as an new texture. My knowledge of the effects engine is limited, but i could only guess that this would require a new buffer and therefore engine support for it. Or depending on how much i don’t know, maybe GPU support - a road i don’t want to deal with - especially as i am trying to reduce work for myself. (there is no way GPU/engine modification is less work)

So I posed the question on the forum, which was very helpful in at least confirming this.

And also how else this should be approached, which was obvious that it needed to be at the object level which would not be supported at the post-processor level.

But the new plan from the forum post was to do this at the object level with some pre-processing before attaching it into the world.


Update: 2019 June, see the follow up blog posts for how this all matches together: update 2