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"

2D

-

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

  1. 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)

  2. 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)

Comments (1)

  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

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.