devkitPro / citro3d

Homebrew PICA200 GPU wrapper library for Nintendo 3DS
zlib License
248 stars 35 forks source link

Add C3D_LightEnvBumpNormalZ() #63

Closed oreo639 closed 1 year ago

oreo639 commented 1 year ago

This function can be used to enable/disable recalculating the normal Z component. By default, the normal.z (blue channel) of the bump map is ignored and it is calculated based on the normal.xy components.

I verified this behavior by taking the normal_mapping example and replacing the blue channel of the normal map with black. By default, it will look exactly the same however with this setting enabled, the model will be mostly in shadow.

Looking it up, it seems like that behavior (ignoring the z component) can be desirable in some circumstances and this feature does exist in Unity and Unreal under the name "Normal Reconstruct Z" and "DeriveNormalZ".

Still it would be useful to be able to turn that off and use the Z component listed in the normal map.