Skip to content

Order-independent Transparency Implementation in Unity with Per-Pixel Linked Lists

License

Notifications You must be signed in to change notification settings

ipud2/oit-unity

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Order-independent Transparency in Unity

Animation2


OIT Standard

Both images show three stacked transparent cubes. The first one with this implementation of order-independent transparency and correct color blending. The second one is rendered with the standard shader.

Description

This is an implementation of order-independent transparency in Unity's Built-In Pipeline. It uses Per-Pixel Linked Lists, implemented with RWStructuredBuffers. This is a feature requiring Shader Model 5.0 with ComputeBuffers, see the Unity Manual for supported platforms. For reference a presentation by Holger Gruen and Nicolas Thibieroz was used. The code is based on their suggestions.

Usage

I recommend using this with the package Post-Processing Stack v2, because then transparent objects will be rendered in Scene View as well. Follow these steps:

  1. Add the post-processing override Order Independent Transparency to a post-processing volume in your scene.
  2. Change the shaders of every object that shall be rendered with order-independent transparency. They have to have a material using a custom shader. Two sample shaders that you can use are included in this project OrderIndependentTransparency/Unlit and OrderIndependentTransparency/Standard (standard shader has to be set to Rendering Mode Transparent).
  3. Run your scene.

Without Post-Processing Stack v2

If you don't want to use the post-processing stack just skip the first step and instead add the component OitCameraComponent to a camera. Transparent objects won't render in the editor scene view using this component.

Notes

  • Other platforms than Windows might not work as expected as this is using more unconventianol HLSL features. Let me know of your experience and if you got this running on different platforms.
  • Note that this project currently does not include implementations for the Universal Render-Pipeline and the High-Definition Render-Pipeline.

References

About

Order-independent Transparency Implementation in Unity with Per-Pixel Linked Lists

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • ShaderLab 53.6%
  • C# 26.2%
  • HLSL 20.2%