> > 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.rushfo...@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 <nlis...@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 > >> > >