본문 바로가기

회사에서 살아남기

SDFFont 사용하기 (1)

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