[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: D3D pipeline possible inconsistencies
From:       Nir Lisker <nlisker () gmail ! com>
Date:       2022-04-29 17:53:02
Message-ID: CA+0ynh-AymR_6gmWLZxLNAnJP+aMwczFi4EFGK3fTWP=5nqKwQ () mail ! gmail ! com
[Download RAW message or body]

> 
> It's possible (although
> 
I don't know for sure) that the image is being treated as a non-
> premultiplied color format, and is subsequently converted to a
> premultiplied format; if so, this could explain the color darkening.


The image is constructed with
        var image = new WritableImage(1, 1);
I called
        image.getPixelWriter().getPixelFormat().getType();
and got
       BYTE_BGRA_PRE
so it's premultiplied.

I filed a placeholder JBS issue [1] until it's determined what exactly
needs to be fixed.

Do all of the above issues happen with the OpenGL shaders, too?


I haven't tested yet, but I will.

[1] https://bugs.openjdk.java.net/browse/JDK-8285862


On Wed, Apr 27, 2022 at 3:02 AM Kevin Rushforth <kevin.rushforth@oracle.com>
wrote:

> As you note, there are a few different issues here. To answer your
> questions as best I can:
> 
> 1 & 3. We should document that self-illum maps and specular only use the
> rgb components and that alpha should be ignored. It's possible (although
> I don't know for sure) that the image is being treated as a non-
> premultiplied color format, and is subsequently converted to a
> premultiplied format; if so, this could explain the color darkening.
> 
> 2. This also needs to be documented. The diffuse component should have
> an alpha that applies whether from the diffuse color or from a diffuse
> map. I agree with you that the pixel fragment should not be discarded
> just because the diffuse component is transparent. A specular highlight
> should be possible on a fully transparent object.
> 
> 4. It does seem that the result should be the same regardless of whether
> the color comes from a specular map or color, but I'd need to dig further.
> 
> Do all of the above issues happen with the OpenGL shaders, too?
> 
> -- Kevin
> 
> 
> On 4/26/2022 11:41 AM, Nir Lisker wrote:
> > I found a comment [1] on JBS stating that specular and self-Illumination
> > alphas should be ignored, so it seems like there's at least 2 bugs here
> > already.
> > 
> > 
> https://bugs.openjdk.java.net/browse/JDK-8090548?focusedCommentId=13771150&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13771150
> 
> > 
> > On Tue, Apr 26, 2022 at 4:25 AM Nir Lisker <nlisker@gmail.com> wrote:
> > 
> > > Hi,
> > > 
> > > Using the updated lighting test sample [1], I found some odd behavior
> with
> > > regards to PhongMaterial:
> > > 
> > > 1. The effect of the opacity (alpha channel) of a self-illumination map
> is
> > > not documented, but lowering its value makes the object darker. I
> looked at
> > > the pixel shader [2] and only the rgb components are sampled, so I'm a
> bit
> > > confused here. What is the intended behavior?
> > > 
> > > 2. The opacity of the object is controlled in the shader by both the
> > > diffuse color and diffuse map. This is also not documented (although it
> > > might be obvious for some). In the shader, the pixel (fragment) is
> > > discarded only if the map is fully transparent (line 55), but not the
> > > color. This leads to a situation where the object completely disappears
> > > when the map is transparent, but not when the color is. In the shader,
> the
> > > pixel should be transparent because of the multiplication of the alpha,
> but
> > > it's not, so this is also confusing. Should they both have the same
> > > contribution? Shouldn't it be valid to have a transparent diffuse but
> still
> > > have specular reflections?
> > > 
> > > 3. The specular map and color behave differently in regards to the
> > > opacity. There is no documented behavior here. The alpha on the color is
> > > ignored (it's used for the specular power), but not on the map - it
> > > controls the reflection's strength, probably by making its color
> darker. In
> > > the shader, lines 76-84 indeed ignore the alpha of the color, but take
> the
> > > alpha of the map, although later in line 93 it's not used, so again I'm
> > > confused. What's the intended behavior?
> > > 
> > > 4. The specular map and color also behave differently in regards to the
> > > reflection's strength. In the shader, this happens in line 78: the
> specular
> > > power is corrected with NTSC_Gray if there is a map (with or without
> > > color), but not if there's only a color. Shouldn't the contributions be
> the
> > > same? Is the NTSC_Gray correction correct in this case?
> > > 
> > > Thanks,
> > > Nir
> > > 
> > > [1] https://github.com/openjdk/jfx/pull/787
> > > [2]
> > > 
> https://github.com/openjdk/jfx/blob/master/modules/javafx.graphics/src/main/native-prism-d3d/hlsl/Mtl1PS.hlsl
> 
> > > 
> 
> 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic