이전에는 간단하게 SDF가 무엇인지 SDF를 이용한 Font 출력이 어떤 이점이 있는지 등을 정말 간단하게만 찾아보고 정리해 보았다.
실제로 SDF는 2D 폰트에만 사용되는 것이 아니라 3D 물체의 렌더링, 그림자 표현 등에도 다양하게 사용되고 있는것 같지만 당장 나의 문제는 SDFFont가 무엇인지 알아보고 이것을 실제 게임에 적용 시킬수 있도록 하는것이기 때문에 당장은 그런 부분까지 깊게 알아보지는 않을 생각이다.
일단 가장 첫번째 문제는 내가 사용할 폰트를 어떻게 SDF Texture로 만들 것이냐 이다.
물론 내가 직접 ttf를 SDF Texture로 만들어 주는 툴을 제작할 수 있으면 좋겠지만. 미래의 나면 몰라도 현재의 나에게는 아쉽게도 그런 능력은 존재하지 않는다...

그래서 생각한 첫번째 대안은
Unity 엔진에서 제공하는 TextMeshPro의 Font Asset Creator를 사용해서 Font (.ttf) 파일을 SDF Texture로 변환 시키고 나는 그 Texture와 매핑정보들만 가져와서 사용하는 것 이였다.
하지만 Unity 엔진의 Font Asset Creator를 사용 하면 ttf 폰트 파일을 SDF로 변환 할 수 있지만
Font Asset Creator는 이름 그대로 Unity엔진에서 사용하는 리소스 형식인 Asset 형식의 파일로 변환해 주기 때문에 여기에서 Texture와 UV 정보 등을 뽑아내는 방법을 모르는 나로써는 사용할 수 없을것 같았다.
따라서 또 다른 대안을 찯아서 여기저기 검색해가면서 찾아본 결과 GitHub에서 SDF Generator 라는것을 찾았다!
https://github.com/ShoYamanishi/SDFont
GitHub - ShoYamanishi/SDFont: Signed Distance Field Font Generator and Runtime Utility
Signed Distance Field Font Generator and Runtime Utility - GitHub - ShoYamanishi/SDFont: Signed Distance Field Font Generator and Runtime Utility
github.com
야마니시 쇼 라는 분이 제작을 해서 깃허브에 올려주신 SDF Generator와 Renderer인데 실제로 다운을 받아서 사용을 해보니 아주 잘 작동을 한다!
놀랍게도 이녀석은 사용할 폰트(.ttf/ttc) 파일과 함께 Generate할 글자의 유니코드 범위, 뽑아줄 텍스쳐의 크기, SDF 강도 등을 설정해주면 SDFTexter.png 와 함께 .txt 파일을 만들어 주는데 이 텍스트 파일에는 해당 글자의 유니코드, UV 정보 뿐만 아니라 해당 글자를 출력하는데 필요한 Width, Height, Bearing, Advance 정보들까지 전부다들어가 있었다!!!
해당 정보는 폰트 (.ttf/ttc) 파일에 기본적으로 들어가있는 정보들을 FreeType이라는 라이브러리를 이용해서 읽어온 다음에 UV 정보와 함께 txt파일에 출력해주는것 같다.

흥분하지 않을 수 없었던 나는 바로 Window 기본 폰트를 이용해서 완성형 한글을 전부다 집어넣어서 SDF Texture를 생성 해 보았고 아래의 이미지가 그 완성본이다.

한글은 왜이렇게 많은건지.... 한글이 워낙 많아서 Texture크기를 충분이 크게 해주지 않으면 글자가 짤리거나 글자가 겹치는 문제가 있어서 일단은 크게 만들어보자! 라는 생각으로 8192 X 8192 사이즈로 완성형 한글을 전체 다 뽑아 보았다. 다 뽑는데 1시간 정도 걸린거 같다... 글자가 많을수록, SDF Spread 범위를 넓히면 넓힐수록 Generate하는데 오랜 시간이 걸리는거 같다.

txt 파일은 대충 이런식으로 뽑혀져 나온다.
이제 이걸 이용해서 간단한 테스트용 DirectX9 프로젝트를 하나 만들어서 글자를 출력해보면 될것 같다!
'회사에서 살아남기' 카테고리의 다른 글
SDFFont 사용하기 (5) (0) | 2024.03.18 |
---|---|
SDFFont 사용하기 (4) (0) | 2023.11.02 |
SDFFont 사용하기 (3) (0) | 2023.10.31 |
SDFFont 사용하기 (1) (0) | 2023.10.31 |