[Unity] 타일맵에서 2D Light Texture 버그 해결

PublicMinsu·2024년 3월 9일

[Unity] Shader Graph

목록 보기
3/3

개요

해결법만 궁금하시면 밑의 항목만 보시면 됩니다.
타일맵 렌더러 모드 수정
유니티 버전 변경

지난번에 구현한 어몽어스식 그림자를 타일맵에서 테스트해 봤습니다.

이게 웬걸?

적용이 안됐습니다... 이번 글에서는 타일맵에서 2D Light Texture가 적용 안되는 문제를 해결하는 과정에 대해서 담고 있습니다.

이번 글에서 사용할 이미지

출처 : https://www.irasutoya.com/2020/10/blog-post_62.html

이번 이미지는 타일 느낌이 나는 것으로 골랐습니다.

무엇이 문제인가?

분명 조명의 범위 안에 있음에도 어두움을 유지하고 있습니다.

테스트

어디서부터 잘못됐는지 모르는 상황에선 문제를 해결하기 힘듭니다. 어디가 아픈지 알아야 약을 주든 수술을 하든 할 수 있는 법이죠. 그렇기에 어디가 적용이 안됐나 확인할 필요가 있습니다. 2D Light Texture노드가 제대로 동작하는가를 확인해야 합니다.
테스트를 위한 셰이더 그래프입니다. UV에는 Screen Position을 안 넣었습니다.

2D Light Texture의 경우 그대로 받아줄 경우 위와 같이 셰이더를 적용한 물체에는 화면 내 빛의 위치가 보여야 합니다.

하지만 타일맵에선 회색만 보이는군요. 2D Light Texture 노드가 타일맵에선 힘을 못 쓰고 있다고 판단할 수 있겠습니다. 실제로 아무런 조명이 없거나 전역 조명을 사용하더라도 동일한 결과가 나오는 것을 볼 수 있습니다.

즉 2D Light Texture 노드가 타일맵에서 적용이 안된다입니다.

해결법

문제를 알았으니 해결법을 찾아야 합니다. 물론 경우에 따라 '2D Light Texture를 사용하는 타일맵을 포기'라는 답이 나올 수도 있을 겁니다. 왜냐하면 2D Light Texture은 어몽어스식 그림자 글에서도 언급했듯이 Unity 2021.2 버전에 추가됐습니다. 유니티가 지원을 해주어야 해결이 가능할 수도 있다는 뜻이죠.

하지만 2가지 방법을 찾아냈습니다.

타일맵 렌더러 모드 수정

타일맵 렌더러의 기본 모드는 Chunk입니다.

출처 : https://docs.unity3d.com/kr/2023.2/Manual/Tilemap-Isometric-RenderModes.html#batch

Chunk 모드는 일괄적으로 렌더링 해주어 드로우 콜의 수를 줄여줍니다. '아하! 그럼 일괄적으로 렌더링 하기에 문제가 발생한 거 아닐까요?'라는 의심을 가지게 됐습니다.

출처 : https://docs.unity3d.com/kr/2022.3/Manual/class-TilemapRenderer.html

그럼 각 타일을 렌더링 해주는 Individual 모드를 사용해야겠군요.

적용해 본 결과 정상작동합니다. 실제로 일괄적인 렌더링이 문제가 있는 건지 확실하진 않지만 의심해 볼 여지가 생겼습니다.

지금 상황만으론 '셰이더 그래프, 타일맵에 지식이 부족해서 근본적인 해결법을 못 찾은 거 아닐까?'라는 생각이 들 수도 있습니다. 하지만 과거의 저처럼 괜한 걱정 안 하셔도 됩니다. 이 뒤에 나오는 해결법을 보시면 알 수 있습니다.

유니티 버전 변경

저는 제목에 해당 현상을 '버그'라고 단정했습니다. 즉 지식의 부족으로 인한 실수는 아니란 뜻입니다.

분명 Chunk 모드임에도 이전과 달리 제대로 동작하는 것을 볼 수 있습니다. 제가 수정한 것은 단 한 가지, 유니티 버전입니다. '버전을 더 올렸는가?'라고 생각하실 수 있지만 오히려 내렸습니다. 2022.3.20f1에서 2021.3.36f1으로 수정했습니다.

출처 : https://forum.unity.com/threads/custom-lighting-in-2d-doesnt-work-with-tilemaps.1540436/

해당 해결법은 올해 1월에 동일한 증상을 겪으신 분이 올린 포럼 글을 통해 알 수 있었습니다. regression에 주목하시면 알 수 있습니다.

출처 : https://ko.wikipedia.org/wiki/소프트웨어_회귀

이전에는 잘 작동하다가 오류를 일으켰다는 뜻입니다. 즉 버전을 낮추면 해결이 되는 것이지요. 또는 오류가 해결된 것이 확인되면 버전을 올리는 방식도 가능할 것 같습니다.

종합하자면 유니티의 '버그'로 인해 작동해야 할 것이 작동 안 한 것일 뿐입니다. 그렇기에 제대로 작동했던 버전으로 낮추거나 해결된 버전이 나온다면 올리는 형식으로 해결하면 된다는 뜻입니다.

테스트

테스트 결과 멀쩡히 작동합니다.

후기

출처 : https://youtu.be/tTEHyMgBUlY?si=FDqY1-75DRWXaiRf

버그를 겪었던 저는 당황할 수밖에 없었습니다. 분명 의도한 대로 동작해야 함에도 버그인지, 지식 부족의 문제인지 모르겠으니 말입니다. 이러한 일은 저만 겪어도 충분하다고 생각합니다. 그렇기에 이렇게 글을 남겨 '버그'라는 것을 알려드리고자 했습니다.


출처 : https://forum.unity.com/threads/custom-lighting-in-2d-doesnt-work-with-tilemaps.1540436/

위와 같이 버그인지 지식 부족인지 헷갈리는 문제가 발생하는 이유에는 2D Light Texture 노드에 대한 정보가 부족한 것도 한몫을 한다고 생각합니다.

이는 저만 느끼고 있는 것이 아니라고 생각합니다. 왜냐하면 포럼에 글을 작성하신 분 또한 비슷한 의견을 내셨기 때문입니다.

출처 : https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@17.0/manual/2d-customlit.html

일단 문서에는 약간의 피드백을 냈습니다. 바뀔지는 모르겠네요.

출처 : https://unity.com/releases/editor/whats-new/2022.3.21

그나저나 문제를 해결하고 글을 쓰고 있는 도중에 2022.3.21f1 버전이 나왔습니다. 해당 버그를 고쳤군요.

출처 : https://issuetracker.unity3d.com/issues/returned-texture-is-grey-when-using-a-custom-lit-2d-shadergraph-and-the-2d-light-texture-node-for-tilemap-renderers

그래도 버그가 발생한 버전을 쓰시고 계시는 분이 존재할 가능성에 글을 남겨둡니다.

profile
연락 : publicminsu@naver.com

0개의 댓글