Compositor: CPU vs GPU Differences #118548
Labels
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#118548
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Each of the following sections describe one difference between the CPU and GPU compositors, its
problem, its potential solution, the nodes it affects, and the failed regression tests where it
manifests.
Anisotropic Filtering
Problem
GPU uses the hardware anisotropic filtering capabilities of the GPU. Since each vendor, GPU, and
driver might have a different implementation, we can't really unify the implementations.
Solution
Reimplement our own anisotropic filter.
Affected Nodes
This affects the following nodes:
Failed Tests
Jitter Anti-Aliasing (blender/blender!118853)
Problem
CPU uses an 8-sample jitter multi-sample anti-aliasing algorithm to anti-alias some masks. GPU
compositor uses bilinear interpolation with zero boundary to achieve anti-aliasing.
Solution
Use SMAA in all compositor operations that require anti-aliasing.
Affected Nodes
Failed Tests
SMAA (blender/blender!119414)
Problem
SMAA operation produce different results between CPU and GPU. GPU uses the original SMAA library,
CPU uses a C++ port of the library.
Solution
No solution known yet. Needs investigation to figure out where the difference originates.
Affected Nodes
Failed Tests
Fast Gaussian
Problem
GPU does not implement the Fast Gaussian blur mode and falls back to the slow convolution algorithm.
But, CPU implementation seems broken and could better match standard Gaussian for low dynamic range
images. Further, CPU sometimes uses Fast Gaussian as a utility in other operations, like the Glare
node, while a normal blur should be used instead since the blur radius is very small.
Solution
Implement Fast Gaussian for GPU, port the same implementation to CPU.
Affected Nodes
Failed Tests
Curve Maps (Indirectly fixed by blender/blender!118624)
Problem
CPU and GPU evaluates curve maps slightly differently, which can produce a tiny difference in the
0.001 magnitude. Further, curve maps are stored as half floats in the GPU, so we lose some
precision, making the difference worse.
Solution
Don't use the hardware sampler and interpolate the curve maps manually. Use full float for curve
maps.
Affected Nodes
Failed Tests
Clipped Transformations (blender/blender!119278)
Problem
The result of some transformations is clipped in CPU, but only in background rendering, so this is a
bug in the CPU implementation rather than a difference.
Solution
Unknown, still needs investigation.
Affected Nodes
Failed Tests
Linear Space Color Conversion (blender/blender!118624)
Problem
CPU produces slightly different values after sRGB to Linear color transformations, for instance,
pixels of value 1.0 becomes 1.00002408. According to Sergey:
Solution
Do the color space conversion on the CPU using the same OIIO method. Or move to a more accurate method on the CPU.
Affected Nodes
Failed Tests
Legacy Cryptomatte (blender/blender!118570)
Problem
GPU doesn't have an implementation.
Solution
Unclear what this node represents or if it will be removed. Just do an implementation regardless.
Affected Nodes
Failed Tests
Fog Glare
Problem
CPU convolves the image with an arbitrary point spread function. GPU uses a Bloom algorithm.
Solution
Move Bloom as to separate option, port implementation to CPU. Add an FFT implementation for GPU and
use that to do the convolution, getting rid of the arbitrary PSF for both CPU and GPU.
Affected Nodes
Failed Tests
Denoise (blender/blender!118553)
Problem
CPU always adds the normal and albedo passes even if they are not connected, and inflates their
values to full buffers.
Solution
Only add the normal and albedo passes if they are actually connected and are full buffers.
Affected Nodes
Failed tests
Interpolation
Problem
CPU and GPU interpolate images differently, but it is likely that the GPU is more correct.
Solution
Unknown, needs more investigation.
Affected Nodes
Failed Tests
Vector Blur (blender/blender#120135)
Problem
GPU uses an implementation similar to EEVEE, while CPU uses a more compute intensive operation.
Solution
Formalize GPU implementation and port it to CPU.
Affected Nodes
Failed Tests
Variable Transformations (blender/blender#120314)
Problem
CPU allow the inputs of transform nodes to be variable, GPU does not.
Solution
Allow variable transformations for GPU.
Affected Nodes
Failed Tests