Search Unity

Question Sprite transparency stencil rendering backwards

Discussion in '2D' started by robinhood14501, Jun 3, 2023.

  1. robinhood14501

    robinhood14501

    Joined:
    Jul 22, 2021
    Posts:
    17
    So I'm trying to mask sprites using a stencil buffer. The red circle is rendered first, and the blue should be rendered after, but for some reason the red circle overrides the blue one.

    I'm new to unity shader code, and I couldn't find any thread that had the same issue. Any help would be much appreciated.

    I'm using unity's default sprite-lit shader, except I added this stencil code:

    Stencil {
    Ref 0
    Comp Equal
    Pass IncrSat
    }



    Current:
    upload_2023-6-3_11-48-57.png

    Desired:
    upload_2023-6-3_11-49-55.png
     
  2. Kurt-Dekker

    Kurt-Dekker

    Joined:
    Mar 16, 2013
    Posts:
    38,742
    Three (3) primary ways that Unity draws / stacks / sorts / layers / overlays stuff:

    https://forum.unity.com/threads/orthographic-camera-rendering-order.1114078/#post-7167037

    In short, as far as the Standard Rendering Pipeline,

    1. The default 3D Renderers draw stuff according to Z depth - distance from camera.

    2. SpriteRenderers draw according to their Sorting Layer and Sorting Depth properties

    3. UI Canvas Renderers draw in linear transform sequence, like a stack of papers

    If you find that you need to mix and match items using these different ways of rendering, and have them appear in ways they are not initially designed for, you need to:

    - identify what you are using
    - search online for the combination of things you are doing and how to to achieve what you want.

    There may be more than one solution to try.

    For instance, you may even use multiple co-located cameras to more-explicitly control apparent draw ordering.

    Additional reading in the official docs:

    https://docs.unity3d.com/Manual/2DSorting.html

    And SortingGroups can also be extremely helpful in certain circumstances:

    https://docs.unity3d.com/Manual/class-SortingGroup.html

    Other rendering pipelines may have other ways of layering (HDRP and URP). Go see the latest docs for details.