DirectX9 기반의 게임에서 폰트를 출력하는 방법은 여러가지가 있다.
WinAPI에 포함되어 있는 TextOut함수를 이용할 수도 있고 D3DXFont 객체를 이용하거나 다른 외부 라이브러리를 이용하는 방법 등등 다양한 방법들이 있을것이다. 나는 그 중에 SDFFont라는것을 이용해서 폰트 출력을 해보려고 한다.
아래는 내 나름대로 조금 조사를 해서 정리한 내용들을 한번 적어보겠다. 그리고 앞으로 계속 공부 하면서 새롭게 알아내는 것들고 추가 하면서 기록해 나갈 예정이다.
일단 구글에서 막 퍼온것들이라서 최대한 출처를 적어놓을 생각이지만 원문이 영어로 되어있어서 원 출처를 알 수 없다거나 원 출처가 없어진 경우들이 있어서... 만약 문제가 생긴다면 글을 삭제 하겠습니다.
SDFFont
SDF는 Signed Distance Fields의 약자로 어떠한 Geometry의 Edge를 기준으로 Geometry 내부는 +(양수), 외부는 -(음수), 그리고 Edge에 근접 할수록 0이 되는 형태의 데이터를 말한다.
만약 아래와 같은 Geometry가 있을 때 해당 Geometry를 Signed Distance Fields로 표현하면

아래와 같은 모습이 된다.

다른 응용프로그램들과 달리 게임에서는 매핑된 텍스쳐를 확대된 상태로 보여주어야 할 상황이 존재한다.
이런 상황에서 얇은 선으로 되어있는 텍스트, UI와 같은 라인 아트 이미지들은 아래와 같이 구불구불하게 보이거나, 흐릿하게 보이는 현상이 발생하게 된다.

이런 문제의 해결책으로 사용될 수 있는 것이 SDF Texture를 이용한 폰트 출력이다.
우리가 사용하길 원하는 폰트를 SDF 텍스쳐로 변환하고 해당 텍스쳐를 이용해서 글자를 출력하면 훨씬 깔끔하게 텍스쳐를 출력할 수 있고 소프트 엣지, 아웃라인, 드랍 쉐도우, 샤프엣지 등등 다양한 특수 효과들을 적용할 수 도 있다.

결론적으로 SDF텍스쳐를 이용한 Font 출력을 사용하면 확대된 상태에서 구불거림과 흐릿하게 보이는 문제를 해결하기 위해 굳이 텍스쳐를 고해상도 텍스쳐로 사용할 필요가 없어지고 간단한 Shader 코드를 통해 아웃라인, 샤프/소프트 엣지, 드랍 쉐도우 등등 다양한 특수 효과들을 적용할 수 있다는 장점이 있다.
'회사에서 살아남기' 카테고리의 다른 글
| SDFFont 최적화 (0) | 2025.07.23 |
|---|---|
| SDFFont 사용하기 (5) (0) | 2024.03.18 |
| SDFFont 사용하기 (4) (0) | 2023.11.02 |
| SDFFont 사용하기 (3) (0) | 2023.10.31 |
| SDFFont 사용하기 (2) (0) | 2023.10.31 |