Toon outline for selected edges in VR.

There’s a game on steam called “Sweet Surrender” which features a rather interesting style somewhat similar to Outline style used , say, in XIII (2003).

The thing is, I’m unclear about certain detail and woudl like to hear opinion about how it could be done:

Here’s what it looks like:

I would like to know how edges on the model can be done. It is also possible for edges to glow:

This is a VR game, meaning it is unlikely that they’re running edge detect, plus there are flat surfaces with visible edges.
This is not a shell shader either, as the models have hard edges and they would explode into visible flying pieces. To be precise, there are places which use shell shader, those are hands and certain tubes on weapons.
This is not a geometry shader, as surfaces are quads, and there are surfaces that are concave polygons.

So, either they hand-crafted every edge using texture coordinates (this is actually done this way on some pipes), or in some other way encoded the edge information into texture space… or I am missing something obvious.

What’s your take on this?

You can do this with the inverted mesh approach but you’d want to do it in clip space, and account for aspect etc.

I’m pretty sure those areas won’t produce an edge if you use an inverted mesh.

7575718--938521--upload_2021-10-15_22-0-18.png

It probably will, depending on how you model it… and if they’re infrequent you can add these manually.

Nah, they won’t.
Inverted mesh produces outlines in areas that face away from the user. Here Both of those faces are looking at the user, so there will be no edge.

They do use inverted mesh, but as I said - it is on weapon tubes.

Yeah. inverted hull outlines absolutely will not produce outlines like those screenshots. You’ll get silhouette outlines in most places as long as there’s a depth gap, but not on edges without the depth gap. So concave edges or edges close to other surfaces will not get an outline from an inverted hull.

The only way to get outlines like that is to use a post process outline, or have them drawn into the textures directly. The original XII did the later, with an inverted hull on top. XII is from an era when post processing wasn’t really a common thing yet. Bloom was just starting to show up, and the multi-camera comic book panel rendering stuff was already expensive for that era.

Im not entirely sure what Sweet Surrender is doing. My guess is a combination of hand drawn lines and basic post processing outlines to cover the silhouette. There are a lot of artifacts that look the your basic depth based outline, and the interior line widths are inconsistent which is common with hand drawn ones.

1 Like

I’ve noticed three line types.

  1. Texture outline. See pipes here. This is definitely texture detail:

Inverted mesh outlines. See hands here. Also appears on some pipes and tubes attached to weapons:

Mystery outlines. That’s basically stuff on robots.

Here I can only theorize. They could add a separate mesh “stream” which would actually render a wireframe. Because wireframe can glow, it is likely a separate material
It is also possible that the mesh is cleverly split (perhaps by geometry shader) and individual faces shrink/move to create sufficient gaps…
The outline data could be encoded via texture coordinates, though that one is probably a royal pain. (Basically see Guilty Gear modeling techniques video)

I remembered there’s one more edge filter. Screen space normal based. That one could work on surfaces that bend invard, although I’m not entirely sure it would look like this.

Definitely texture based.

The line work is probably just a texture separate from the base color. You can make the lines any color you want with that.

I think you might want to watch those again yourself, because they just used textures for the lines. The key thing was they kept the line work in the texture as straight lines along the x or y axis and most curves or diagonal lines are done with creative UV mapping. But it’s still just basic textures.

There’s a million different ways to do outlines as a post process. Normals, depth, material or object ids, smoothing groups, edge masks, surface color, etc.

It doesn’t look this way. I refunded the title and can’t shoot a video with it, but there’s video footage on steam page.

Basically, painted edge will look like model from borderlands, or characters from dorohedoro (anime).

The robots do not look like that in the game. Here’s the robot from the earlier screenshot depicted close.

7578685--939160--upload_2021-10-17_5-28-22.jpg
7578685--939163--upload_2021-10-17_5-29-35.jpg

The lines grow thinner with distance, but they do not look the way a textured line would and remain noticeable.

Here’s a very good example:

7578685--939166--upload_2021-10-17_5-37-34.jpg

I’m aware, and that’s exactly what I meant. The difference about Guilty Gear Xrd Sign, however, is what they did with texture layouts. They’re unusual.


What I also meant is that it is possible to define outline squares in texture, and shift them in vertex shader based on distance, to create thinner/thicker lines with textures.

How many of those are VR compatible? The title is also VERY performant. Not having lighting or shadows helps, of course.[/spoiler]

I watched some videos of it, and yeah, they’re doing something really different.

Some lines are absolutely done using a texture.

Most of the effect is done with an inverted hull of sorts.

But the interior lines for edges between a lot of face appear to be done by directly modelling the “main” model with gaps, likely meaning there are separate inverted “outline” meshes and surface meshes. They do this effect on explosions where everything in the world reacts, which is done by just moving the “surfaces” out along their world normal. This is done on all meshes.


The line widths don’t seem to scale with distance, which is why I think it’s just manually modeled in.

1 Like

That’s a good one and I haven’t noticed it. Having a separate outline mesh and either shrinking or moving geometry to make the gaps visible… that would largely explain it, yes.

Run it with RenderDoc and look how it’s done.

1 Like

adding for reference (about outlines, different game)
“inner lines are created using fwidth, the outer lines are created using a classic inverted mesh”

1 Like