Page MenuHome

Texture properties not working with OSL enabled and unpacked textures
Confirmed, NormalPublicBUG

Description

System Information
Operating system: Linux-5.11.7-arch1-1-x86_64-with-glibc2.33 64 Bits
Graphics card: Mesa DRI Intel(R) HD Graphics 520 (SKL GT2) Intel Open Source Technology Center 4.6 (Core Profile) Mesa 20.3.4

Blender Version
Broken: version: 2.92.0, branch: master, commit date: 2021-02-24 16:25, hash: rB02948a2cab44
Broken: version: 2.93.0 Alpha, branch: master, commit date: 2021-03-19 21:37, hash: rB3494946560c2

Short description of error
I have a texture with RGB channels set to 1 and alpha set to 0. When trying to use this texture with OSL, the alpha property (at least) of the image texture node does not work when the texture is unpacked. I set it to channel packed, expecting the color data to be always white. The problem is that when the texture is unpacked, the color data is black.

Exact steps for others to reproduce the error

  1. Open the attached file.
  2. Set viewport shading to rendered.
  3. The plane shows as white (as it should).
  4. Unpack the texture.tga file.
  5. Toggle between preview and rendered viewport shading to refresh.
  6. The plane now shows as black.
  7. Pack the texture again.
  8. The plane shows as white again.

Event Timeline

b5327157 created this task.Sat, Mar 20, 1:18 PM
Germano Cavalcante (mano-wii) changed the task status from Needs Triage to Confirmed.Tue, Mar 23, 8:25 PM
Germano Cavalcante (mano-wii) changed the subtype of this task from "Report" to "Bug".

Thanks for the report, I can confirm.
This seems to be related to the pre-multiplication of alpha.
Although this is partly by design, this inconsistency should not exist.


The image editor is also pre-multiplying the alpha even when you just want to see the colors.
This didn't happen before, (maybe it can be considered a regression?)
@Jeroen Bakker (jbakker), on this second issue, I don't know if it's related to the changes to the image editor's drawing, but maybe you know what's going on?

The more general question to ask is that why is the OSL texture function doing alpha pre-multiplication in the first place? In such case it will not be possible to recover information from RGB channels when alpha is zero. I am not aware of any requirement regarding pre-multiplied alpha in the OSL specification.