Home Technical Talk

Techniques / Behind The Scenes - Mixing realism and anime aesthetics?

exileshd
polycounter lvl 2
Offline / Send Message
exileshd polycounter lvl 2
Apologies if this isn't the correct place to ask this, I recently came across the newer cut scenes for DragonBall Xenoverse 2 and I'm completely in love with how they've mixed the more realistic and anime art styles.

I was wondering if anyone has found any information related to how they actually went about creating / implementing this style or in general just any insight they gather from seeing the scenes (maybe key features that give it that style e.g. lighting techniques). From checking the wiki it seems it's done on an in-house engine at Dimps, but I'm not sure if that includes where the cut scenes were made.

Example of the style:

https://www.youtube.com/watch?v=do32VulUz5g



I've seen other talks and breakdowns for games like Dragonball Fighterz + Guilty Gear, but this style is very different and I want to learn more about it.

Replies

  • Eric Chadwick
    Options
    Offline / Send Message
    Looks to me like a pretty straightforward toon shader on 3d models.





    Do some research into toon shaders, in the 3d software you prefer. And do some tests.

    This thread has a lot of very useful discussion on techniques:
    Convincing 3d that looks like 2d.... Wow
  • RN
    Options
    Offline / Send Message
    RN sublime tool
    The shading seems to be the easiest part, it looks like they're using more shading steps than the Guilty Gear Xrd method, which uses only 2 steps (lit or unlit). You can see it on the orange vest there how it has 4 steps, and there's some smoothing on it too?

    On Guilty Gear Xrd they used the step shader instruction as a fast means of having those shading 2 steps.
    But if you want to do more steps as well as that smooth finish on the highlights, you can use a 1D texture (a texture that is a single row of pixels, like a color ramp) to store the color that each step should have.

    (this is enlarged)

    You use this 1D texture to map the color that the surface should have with the amount of lighting that the surface is receiving.

    To sample that 1D texture, you can use a U coordinate like this:
    float u = (-dot(N, L) + 1.0) * 0.5;
    With N being the surface normal at that pixel and L being the normalized light direction, you use the +1 and the * 0.5 to transform the dot product value from [-1, +1] to [0, +1]. This means that the terminator (the surface points perpendicular to the light) will sample the texture at 0.5U (at the half). You can do this with nodes as well.


    What I'm really interested in is the black outlines. Some look like they're made with texturing (like on Guilty Gear Xrd), but others seem to be made with that inverted black hull method -- but there's some lines around the jaw that wouldn't work with that method though, so I'm really curious.
  • exileshd
    Options
    Offline / Send Message
    exileshd polycounter lvl 2
    Thanks for the information, especially the detailed example RN. I'll mess around with some toon shaders in UE or blender and see what I can learn. 
  • m_asher
    Options
    Offline / Send Message
    m_asher node
    When it comes to outlines in UE4,  how you set it up will depend on how predictable your camera positioning. Setting up a one-size-fits-all solution is hard, which means you'll probably use a mix of different techniques depending on the scene.

    If you're looking to slap a silhouette outline around individual objects that don't (or rarely) overlap on screen,  offsetting and stacking the stencil pass to create an outline mask is a straightforward option. You can then use a sobel filter on your depth pass to add outlines to smaller overlapping shapes and a fresnel effect (using world normals) to dial in how the outline "wraps" a surface in the right situations. You'll probably have to use the stencil pass to mask objects into or out of different parts of different effects, too.

    As  a quick note, if you end up following Ferkizue's tutorial for setting up an HLSL sobel filter, you'll find that it uses a deprecated method for sampling the screen UVs. skip the input node and replace it with something like this:float2 uv = GetDefaultSceneTextureUV(Parameters, 14);


Sign In or Register to comment.