Page MenuHome

EEVEE: Add Support for AOVs
Changes PlannedPublic

Authored by Jeroen Bakker (jbakker) on Mar 3 2020, 3:03 PM.
"Like" token, awarded by szap."Love" token, awarded by blueprintrandom."Love" token, awarded by mistajuliax."Love" token, awarded by higgsas."Like" token, awarded by EAW.



This patch adds support for AOVs in EEVEE. This patch migrates Cycles AOVs to Blender AOVs. For EEVEE it generates the AOV code paths in the GPUMaterial. A generated GPUMaterial can have one output active. Based on the renderpass ubo the right output is selected. A future development would be to output multiple outputs in a single draw command.

  • Due to the loosely coupling between a viewlayer, material and 3d viewport it is hard to determine if the user wants a value or color output. This needs a different user interface in the node so it is easier to select what output is desired.
  • When doing final rendering upto 8 AOVs are supported. In the Viewport the user can select any AOV.
  • In order to do exactly the same as cycles did before we need to add a separate validate/verify function to the engines. Cycles implementation also had some limitations. We need to check which limitation is sufficient or that we want to add a special RenderEngine method for this.

Special note. Treat this patch as nice to have. It could still need some polishing.


  • Fix Dynamic creation of render passes in the Render Result.
  • Convert Cycles AOVs to Blender internal AOVs.
  • Add support for multiple AOVs.
  • Add support for value based AOVs.
  • Add selector to choose the AOV in the viewport.
  • Fix crash when removing all AOV's that are still used in a viewport.
  • Make it possible to add an AOV output node when EEVEE is the active render engine.
  • Add better check on conflicting AOV names
  • Cycles crashes when there are conflicting names. The cause of this is that cycles used to remove the conflicting render pass, but the same method is used by this patch to check if there are conflicts.
  • Write documentation and a more detailed description for this patch

Diff Detail

rB Blender
eevee-aov (branched from master)
Build Status
Buildable 7072
Build 7072: arc lint + arc unit

Event Timeline


Add OAV Hash to this function. So it can select the correct ubo for the hash.


Create more renderpass data to store other aov hashes (when rendering multiple aov passes at the same time


this can only be done at render time.
a possible workaround would be to store the data on GPU as RGB and only when reading the texture back to CPU we will convert to the appropriate data type.

Added Support for multiple AOVs
Added Support for image rendering

Jeroen Bakker (jbakker) edited the summary of this revision. (Show Details)Thu, Mar 5, 1:53 PM

Added basic support for value based AOVs.

Jeroen Bakker (jbakker) edited the summary of this revision. (Show Details)Thu, Mar 5, 2:14 PM

Add comment of for the render_pass_aov_index_ parameter


Use struct assignments

Jeroen Bakker (jbakker) edited the summary of this revision. (Show Details)Thu, Mar 5, 2:27 PM

Data conversion of Cycles AOVs. Cycles still needs to be modified to use the unified AOVs.

Added AOV passes in the render pass selection box

Jeroen Bakker (jbakker) retitled this revision from [WIP] EEVEE: AOVs to EEVEE: Add Support for AOVs.Fri, Mar 6, 8:51 AM
Jeroen Bakker (jbakker) edited the summary of this revision. (Show Details)

Migrated Cycles to use Blenders AOV

Jeroen Bakker (jbakker) edited the summary of this revision. (Show Details)Fri, Mar 6, 10:06 AM

Verification of duplicate AOV names

Jeroen Bakker (jbakker) edited the summary of this revision. (Show Details)Tue, Mar 10, 6:11 PM
Jeroen Bakker (jbakker) planned changes to this revision.Fri, Mar 13, 2:12 PM
  • Fix crash when rendering with invalid AOVs: My proposal would be to ignore AOVs when they are in conflict.
Jeroen Bakker (jbakker) edited the summary of this revision. (Show Details)Fri, Mar 20, 7:51 AM