Blender does not save the alpha channel correctly for volumetric flames / fire with no smoke
#78578
Closed
opened
No Branch/Tag Specified
temp-sculpt-dyntopo
main
blender-v3.6-release
temp-sculpt-dyntopo-hive-alloc
asset-shelf
cycles-light-linking
tmp-usd-python-mtl
brush-assets-project
blender-v2.93-release
blender-v3.3-release
universal-scene-description
node-group-operators
asset-browser-frontend-split
temp-sculpt-attr-api
blender-v3.5-release
realtime-clock
sculpt-dev
gpencil-next
bevelv2
microfacet_hair
blender-projects-basics
principled-v2
v3.3.7
v2.93.18
v3.5.1
v3.3.6
v2.93.17
v3.5.0
v2.93.16
v3.3.5
v3.3.4
v2.93.15
v2.93.14
v3.3.3
v2.93.13
v2.93.12
v3.4.1
v3.3.2
v3.4.0
v3.3.1
v2.93.11
v3.3.0
v3.2.2
v2.93.10
v3.2.1
v3.2.0
v2.83.20
v2.93.9
v3.1.2
v3.1.1
v3.1.0
v2.83.19
v2.93.8
v3.0.1
v2.93.7
v3.0.0
v2.93.6
v2.93.5
v2.83.18
v2.93.4
v2.93.3
v2.83.17
v2.93.2
v2.93.1
v2.83.16
v2.93.0
v2.83.15
v2.83.14
v2.83.13
v2.92.0
v2.83.12
v2.91.2
v2.83.10
v2.91.0
v2.83.9
v2.83.8
v2.83.7
v2.90.1
v2.83.6.1
v2.83.6
v2.90.0
v2.83.5
v2.83.4
v2.83.3
v2.83.2
v2.83.1
v2.83
v2.82a
v2.82
v2.81a
v2.81
v2.80
v2.80-rc3
v2.80-rc2
v2.80-rc1
v2.79b
v2.79a
v2.79
v2.79-rc2
v2.79-rc1
v2.78c
v2.78b
v2.78a
v2.78
v2.78-rc2
v2.78-rc1
v2.77a
v2.77
v2.77-rc2
v2.77-rc1
v2.76b
v2.76a
v2.76
v2.76-rc3
v2.76-rc2
v2.76-rc1
v2.75a
v2.75
v2.75-rc2
v2.75-rc1
v2.74
v2.74-rc4
v2.74-rc3
v2.74-rc2
v2.74-rc1
v2.73a
v2.73
v2.73-rc1
v2.72b
2.72b
v2.72a
v2.72
v2.72-rc1
v2.71
v2.71-rc2
v2.71-rc1
v2.70a
v2.70
v2.70-rc2
v2.70-rc
v2.69
v2.68a
v2.68
v2.67b
v2.67a
v2.67
v2.66a
v2.66
v2.65a
v2.65
v2.64a
v2.64
v2.63a
v2.63
v2.61
v2.60a
v2.60
v2.59
v2.58a
v2.58
v2.57b
v2.57a
v2.57
v2.56a
v2.56
v2.55
v2.54
v2.53
v2.52
v2.51
v2.50
v2.49b
v2.49a
v2.49
v2.48a
v2.48
v2.47
v2.46
v2.45
v2.44
v2.43
v2.42a
v2.42
v2.41
v2.40
v2.37a
v2.37
v2.36
v2.35a
v2.35
v2.34
v2.33a
v2.33
v2.32
v2.31a
v2.31
v2.30
v2.28c
v2.28a
v2.28
v2.27
v2.26
v2.25
Labels
Clear labels
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
Apply labels
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
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
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
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
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
Issues relating to security: https://wiki.blender.org/wiki/Process/Vulnerability_Reports
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 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
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
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
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
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
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Set Project
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
7 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#78578
Reference in New Issue
There is no content yet.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. It CANNOT be undone. Continue?
System Information
Operating system: Windows-10-10.0.18362-SP0 64 Bits
Graphics card: GeForce GTX 1060/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 446.14
Blender Version
Broken: version: 2.83.1, branch: master, commit date: 2020-06-25 09:47, hash:
8289fc688b
Worked: (newest version of Blender that worked as expected)
Short description of error
[Blender does not save the alpha channel correctly for volumetric flames / fire with no smoke, if 'density' is set to zero or less in the 'Principled Volume' shader node.]
Exact steps for others to reproduce the error
[load the attached blend and try to get a correct alpha channel saved, I've tried saving as EXR, Targa, DPX and TIFF {all 16bit RGBA), all the files show the flames in the, but only the plane object shows at all in the alpha.
If you set 'density' above zero in the 'Principled Volume' shader, despite fixing the render preview issue ( #52680 -sort of), as in you can see the flames slightly in the render-preview window now, you still get zero or black in the alpha channel in any saved files.
This is what I'm seeing in the compositor-
Flame_No_Alpha.mp4
Just to be clear: I'm not talking about the render preview issue #52680, with not showing the flames/fire at all as you watch the render.
I'm saying I'm not getting the alpha channel for the flames, that should be generated from what I can actually 'see' in the viewport, as in the rendered camera view in the GUI.
Surely if it shows in the GUI-viewport correctly, it should be able to save a valid alpha for that image? I mean if you can't trust that you can get what you create in the GUI-viewport out of the software that's quite a fundamental one isn't it?
]
[Based on the default startup or an attached .blend file (as simple as possible)]
FireNoAlpha.blend
and here's the VDB frame in case it didn't pack-
FireBurst_01HR_.0069.7z
#89894 was marked as duplicate of this issue
Added subscriber: @marks-4
I've been told that this is a 'technically correct' behaviour in #56280 and I do get the argument, but I'd still say it should be a check box- 'technically correct' alpha channel or one that works y/n.
Added subscriber: @troy_s
This is the one that works. It really is.
Asking for something to occlude, in a manner that is not occluding in the path tracing engine is asking for a wonky path tracing hack.
What would you expect a path tracing engine to generate for a pure emission? Can you describe it?
Added subscriber: @mano-wii
To me it seems to be a bug.
I will wait for a third opinion.
It is what makes things like the following possible:

@troy_s I do understand, and totally get the argument, but for my two pennies worth-
The whole point of Cycles / any GI renderer is physically accurate rendering, and it does this beautifully for the most part, but, in the real world my eyes can see things occluded by other 'emissive' things, therefore to my humble human eyeball / brain combination these things are, to all intents and purposes, opaque. As in: I cannot see the specular pattern on the wall behind the flame in your image above.
Secondly, at a more fundamental level, Blender's viewport is showing me what I'd expect to see in the 'real' world (to my eye anyway- the emissive objects may well not be totally opaque, but they look it in parts), while the render is not giving me the same results, therefore I can't, in this instance, 'trust' the viewport / render. Which is more of a problem to my thinking.
Additive light will “occlude” in compositing too. It works exactly the same way! This is a good little demo test file created by someone else that shows how the additive flames bury the background emissions. It’s less “occlusion” in this instance than overpowering the background emission. The mechanics however are completely different to actual occlusion, which would block the light, which is extremely relevant in a light transport model. We do not want a reflection for example, to block the light. Nor a subtle glow or flare. Nor fire.
Therein lies the crucial distinction; occlusion blocks light, while emissions do not. So a glowing ball of gas is fundamentally different from the edge of a starship.
The viewer being totally garbage certainly isn’t helping anyone, and arguably having file encoding for all integer encodings completely screwed doesn’t help either, as folks are saving their reflections, flares, and fires incorrectly, as well as getting completely mangled colour transforms.
Added subscriber: @fclem
Changed status from 'Needs Triage' to: 'Archived'
I think @troy_s answered the question thoroughly.
The flame is not occluding the background because of its opacity but by the light it adds to it. But for that to work you need to composite it in scene referred linear color space and then pass it to film transform curve.
Closing this ticket then.
Added subscriber: @MadMinstrel
I think your ideals are clouding your judgement on matters of practicality.
While the proper and correct way to do it is leave it like this and rely on the user compositing it correctly, the reality is that in a lot of situations where you would want to use a glowy alpha image, the software is simply not capable of compositing it in the proper and correct way. Web browsers come to mind.
@MadMinstrel this is an issue of the web browsers then (more likely the broken png format). But then if you need a workaround I would put the responsability towards the user. You just cannot emulate correctly emissive transparency with just a alpha hack. Since this hack is very situation dependant we will not implement it. Do you have any example of any other 3D renderer that handle this case the way you want?
If you want an alpha channel for your fire, just render your fire with some absorption shader, maybe even inside a separate render pass.
Hello All
I've woken up and smelled the coffee as they say: I'm doing the grown-up linear workflow and all is fine...
But, as I think I commented in #52680, I do still think it's quite an issue that you get totally different images from the viewport rendered preview and the F12 render preview (before you go properly linear for your workflow and find all this out that is!). It looks like the viewport is doing a proper linear comp of the flame/whatever emissive stuff over transparency, while the F12 window is not, as in you should be able to 'trust' all the previews in Blender, therefore they should be consistent. The F12 window really ought to show the emissive stuff over transparency like the viewport does, and (as it already does) show the lack of alpha channel info for the emissive over transparent stuff if you look at the alpha.
@marks-4 this has been fixed in 2.91 alpha.
@fclem Kewl!
Added subscribers: @Arnklit, @EAW