지나주 MYPI

지나주
접속 : 3398   Lv. 40

Category

Profile

Counter

  • 오늘 : 6 명
  • 전체 : 127260 명
  • Mypi Ver. 0.3.1 β
[게임 개발] 유니티 - TMP font SDF 한글 깨짐 현상 해결 (3) 2021/05/14 PM 06:16
오래 전 프로젝트들은 NGUI로 개발했었습니다. uGUI가 나온 이후로는 기본 엔진 제공의 잇점을 기대하며 이쪽으로 넘어왔네요.

 

NGUI 개발시에는 한글 폰트를 FontMaker로 구워서 넣고 썼었는데요.

uGUI 쓰면서는 유니티에서 제공하는 TMP(TextProMesh)와 TMP Font Maker 로 작업하고 있습니다.

TMP Font Maker를 쓰면 TTF, OTF로 깔끔하게 출력할 수 있다고 해서요.

 

언제나처럼 폰트 세부 내용에 대해 충분히 공부하지 않고 구현부터 들어갑니다. (-_- 이래서 하수를 못 벗어납니다)

TMP Font Maker 한글 폰트 구현에 대한 글들은 구글링해서 많이 나오네요.

그 중에서 제일 먼저 나오기도 하고, 꾸준히 업데이트하면서 팁들을 알려주는 포스트입니다.

https://m.blog.naver.com/cdw0424/221641217203

위 글을 보며 따라 구현하니까 OTF로 Font Asset을 만들어 출력하는 것까지는 잘 되었는데요.

 

폰트 생성 후 개발하면서 한동안은 잘 출력되다가 어느정도 시간이 지나면 한글 폰트가 깨져 보이기 시작하더라구요.

처음에는 OTF 폰트 문제인가 해서 다른 폰트로 바꿔봤는데... 바꾸고 나서 바로는 괜찮더니 또 시간이 지나면 깨짐 현상이 나타납니다. ㅠㅠ

이래저래 씨름하다보니 대략적인 원인을 찾았고, 다행히 해결은 했습니다.

 

 

[현상]

TMP Font Maker로 한글 폰트용 Font Asset을 만들고 사용하다가 한글 깨짐( ☐ )현상 발생

폰트 적용후 일정 시간동안은 잘 나옴. 어느정도 시간이 지나면 새로 출력하는 글자들만 깨짐

 

[문제 해결 과정]

- 다른 OTF 폰트로 Font Asset을 만들고 적용 - 마찬가지로 한동안 괜찮다가 좀 지나면 깨짐 (지겨운 ☐)

TextMeshPro Font Maker로 구울 때 Dynamic 말고 Static으로 구움 - 해결됨 (하지만 좀 더 살펴보기로 함)

- Font Asset 아래에 Atlas Material과 Atlas가 들어 있음

- 새로운 폰트 적용 후, Font Asset의 Atlas를 살펴봄

- 출력되는 글자들이 Atals에 실시간 추가 등록됨 (Dynamic 동작 확인)

- Atlas를 글자가 꽉 채우면 새로운 글자들이 들어가지 못함, 새로운 글자들은  ☐로 출력됨 (유레카!!!)

- Font Asset을 클릭하고 Inspector창에서 Generation Setting > Atlas Width/Height을 늘림 (1024 -> 2048)

- 늘어난 만큼 글자들이 더 들어감

- 혹시 2048 Atlas도 꽉 차면 멈출까봐서 Multi Atals Textures 옵션도 체크해서 활성화 시킴

 

[알게 된 내용]

- Dynamic Font가 만능은 아님: 한정된 글자 수로 제한되어 보여지는 UI등에는 좋을 것 같지만, 일반 대화창이나 글자 수가 많아지는 텍스트에는 부적합할 것 같다

- Static으로 구우면 고민 안해도 됨 (장단점은 미리 확인하고 결정)

 

 

이틀동안 짬짬이 고민했으니, 해결까지 대략 3~4시간 정도 소모했네요.

아직도 물음표인 내용이 많은데 또 확인하려면 시간이 들어가니... 일단 여기서 덮고 본 개발로 돌아갑니다.

 

? 개발자 Editor에서 플레이, 테스트하며 생성된(구워진) Atlas가 빌드시 그대로 들어가는건가? 개발 에디터와는 상관 없는건가?

? Dynamic Font 적용시, 실시간으로 구워지는 Atals가 휴대폰에 남아있는가? 아니면 실행시마다 Atlas가 초기화되는가?

? Multi Atlas Textures Dynamic 옵션을 체크해서 활성화했을 때, 단점 혹은 부작용이 있는건가?

신고

 

루리웹-5923497279    친구신청

ClearFontAssetData 한번씩 호출해서 폰트 아틀라스 비워주면 해결될거 같습니다.
멀티 아틀라스 안써도 될겁니다.

project\Library\PackageCache\ 경로에 보시면 tmp 소스코드 볼 수 있습니다.
참고하세요.

지나주    친구신청

감사합니다! 알려주신 ClearFontAssetData 사용하면 멀티 아틀라스 안써도 될 것 같네요.
http://tsubakit1.hateblo.jp/entry/2019/02/02/060758

지나주    친구신청

ClearFontAssetData 함수를 실행했는데 Font Atals가 안비워지더군요.
살펴봤더니 fallback font로 한글 폰트를 연결한 것 때문이었습니다.
- Main font asset -> 한글 font asset을 fallback 등록
- Main font 에서 ClearFontAssetData 함수 호출 : Main font의 font atlas 가 리셋됨, 한글 font의 font atlas는 그대로

추가: TextMesh Pro, SDF, Fallback 등에 대해 잘 설명해준 동영상
https://www.youtube.com/watch?v=slvRsAYS7zw&t=814s
X