본문 바로가기
튜터리얼_스터디

Sprite-Lit-Default 셰이더 적용 오브젝트 회전시 조명 방향 문제 해결 Fix lighting direction issue when rotating object with Sprite-Lit-Default shader applied

by 대마왕J 2021. 10. 12.

2D  Game을 만들때 가장 많이 사용되는 셰이더인 Sprite-Lit-Default 셰이더를 사용해서 캐릭터 애니를 할 때, 유니티 내장된 2D 애니메이션 에셋으로 캐릭터를 만들면, 가끔 좌우 반전이 필요할 때가 있죠. 

그럴때 많이 사용하는 방식이 캐릭터를 180도 Y 축으로 회전해서 사용하는 방식인데, 
그렇게 할 때 조명 문제가 생기곤 합니다. 

아래 그림을 보시면

왼쪽이 회전하지 않은 원본, 
오른쪽이 Y를 180도 회전한 캐릭터. 
조명은 시계 방향으로 

이쪽으로

 

그런데 보시면 오른쪽의 180도 돌아간 캐릭터의 조명을 보시면,
시계 방향이 아니라 반시계방향으로 조명이 돌고 있지요.

허벅지 부분에 조명 돌아가는걸 보시면 잘 볼 수 있습니다. 

 

 

이렇게 캐릭터를 Y 로 180도 회전 시켰을때 노말이 틀어지면서 조명 문제가 생기곤 합니다. 

그래서 아리아 크로니클을 만드신 닝구님이 요청하셔서 좀 뜯어본 결과, 
아래와 같이 해결된 셰이더를 만들게 되었습니다. 

2020 버전의 셰이더와 2021 버전의 셰이더가 다르니 맞는걸 다운받아 사용하시면 됩니다. 
셰이더 이름은 

Universal Render Pipeline/2D/Sprite-Lit-Default4Rotate

입니다. 

Sprite-Lit-Default4Rotate_2020_3.shader
0.01MB
Sprite-Lit-Default4Rotate_2021_2.shader
0.01MB

 

 

이 셰이더를 사용하시면, Y 180도 회전시킨 캐릭터도 조명을 원래 캐릭터처럼 잘 받게 됩니다. 

필요하시면 사용하세요 

주의 : Light 에서 Normalmap Distance를 0으로 놓고 사용하셔야 합니다. 

 

Version2

Light 에서 Normalmap Distance 수치가 0이어야만 했던 것을 고친 버전입니다. 이제 Distance 수치를 고쳐도 좌우 완벽히 동작합니다. 위에 것은 살짝 버그가 있었네요. 

Sprite-Lit-Default4Rotate_2021_2_v2.shader
0.01MB

 

 

ShaderGraph Version 

셰이더그래프로도 만들어 봤습니다. 조금 다른 방식을 써야 했네요 

JPSpliteLit.shadergraph
0.05MB

 

 

블로그 주인장에게 커피값을 후원할 수 있습니다! 

 

반응형

댓글