RFR: 8234920: Add SpotLight to the selection of 3D light types [v7]
Nir Lisker
nlisker at openjdk.java.net
Mon Feb 8 19:30:46 UTC 2021
On Wed, 3 Feb 2021 21:56:08 GMT, Kevin Rushforth <kcr at openjdk.org> wrote:
> I still get a runtime shader compilation error on Mac (see above)
I pushed a fix now. Since it doesn't happen on Win or Ubuntu I can't verify it, but I changed `0` to `0.0` etc. in the shader code.
> Unless the transform itself is non-invertible, I don't think this can happen. What I would expect is that if we go this route -- which seems like a fine API choice to me -- the direction vector would be `(0, 0, 1)` in the local coordinate system of the light, which would then be suitably rotated based on the transform of the light (and any transforms above it).
I think that this is also what I did when I tested this approach. When computing the direction in `NGSpotLight`, I multiplied the `Affine3D worldTransform` by a `Vec3D` of (0, 0, 1). Then, using rotations on the main axes, I was able to rotate the light in any direction I want. The problem here is ease of use. Because the order in which you add the rotation transforms matter, it becomes unintuitive for the user compared to using a direction. If I rotate 90 degrees in the X direction, the Y and Z axes are "flipped". If we can make it intuitive, then I think this approach is better.
> Hmm. I wonder if the ideal choice? One of the reasons for wanting a DirectionalLight, as distinct from a very far away PointLight with no attenuation, is performance. On the other hand, since it will complicates the design of the shaders to have a special case for directional lights, it might not be worth implementing. I don't think it matters all that much, so if you want to rename it to setLight that seems OK. It's an implementation detail and could be revisited in the future.
The branching vs unneeded computation costs is a main testing point in this patch. We will do the same tests for DirectionalLight in its own patch. A DirectionalLight can be implemented in the vertex shader, but it gives less accurate results I believe.
I updated the Ubuntu tests results.
-------------
PR: https://git.openjdk.java.net/jfx/pull/334
More information about the openjfx-dev
mailing list