Search Issue Tracker
By Design
By Design in 6000.5.X
Votes
1
Found in
6000.0.67f1
6000.3.8f1
6000.4.0b8
6000.5.0a6
Issue ID
UUM-134152
Regression
No
Sprite with normal map is lit incorrectly when GameObject is rotated 180 degrees on Y axis or Z Scale is set to "-1"
How to reproduce:
1. Open the attached “IN-133317” project
2. Open the “BugScene”
3. Observe the Scene view
Actual result: The middle of the sprite is not lit when Spot Light is on top of the GameObject
Expected result: The sprite is lit accordingly following normal map
Reproducible with: 6000.0.67f1, 6000.3.8f1, 6000.4.0b8, 6000.5.0a6
Reproducible on: Windows 11, macOS 26.2 (M1 Pro)
Not reproducible on: No other environment tested
Comments (1)
-
RequiemOfTheSun
Feb 12, 2026 16:51
Thank you for the analysis. I'd respectfully ask the team to reconsider this as a defect.
The Normals2D pass already special-cases Flip X by negating position while preserving normal direction — so the pipeline already acknowledges that flipping a 2D sprite shouldn't reverse its lighting. Rotate Y 180° and Scale Z (-1) are visually equivalent operations on a flat quad but aren't given the same treatment. That's an inconsistency in the pipeline, not expected behavior.
In my project, characters rotate over Y to change their forward-facing direction — this isn't an exotic workflow, it's standard for 2D games with directional movement. Normal-mapped lighting silently breaking with no warning when a character turns around is a significant issue. The fix seems minimal: the Normals2D pass could negate the normal's Z when it faces away from the camera post-transform, the same way it already preserves normals during Flip X.It would be a huge effort on my part to rework every script in my game that depends on orientation.
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- “FMOD failed to set the software format to the custom sample rate…” warnings are thrown as System Sample Rate value is being changed in Audio section of Project Settings window
- VFX Marquee selection does match the visual indicator
- “Invalid AABB aabb” errors are spammed when “Infinity” value is entered in Collider Component fields
- Editor Role does not sync with the MPPM Play Mode Scenario Role when entering Play mode
- Long asset names cause overlap with the “Find” function in search result tabs
Resolution Note:
Thank you for taking the time to report this issue to us!
Normals2D pass is essential for 2D lighting.
And both 1) Rotating Y by 180 as well as 2) Scaling Z by -1 will result in Normals pointing in the opposite direction at the end of Vertex Shader stage (Post Transform).
Hence this is expected. Here are the results under various scenario. Observe both Rotate by 180 or Scale by 1 resulting in (0.00, 0.00, 1.00) which is opposite to the default normals (0, 0, -1)
Resolution Note (6000.5.X):
Thank you for taking the time to report this issue to us!
Normals2D pass is essential for 2D lighting.
And both 1) Rotating Y by 180 as well as 2) Scaling Z by -1 will result in Normals pointing in the opposite direction at the end of Vertex Shader stage (Post Transform).
Hence this is expected. Here are the results under various scenario. Observe both Rotate by 180 or Scale by 1 resulting in (0.00, 0.00, 1.00) which is opposite to the default normals (0, 0, -1)