렌더링 해상도 독립적 인 텍스트


11

게임에서 해상도 독립적 인 텍스트를 그리는 방법이 필요합니다. 즉, 텍스트를 확대하고 픽셀 아티팩트를 볼 수 없어야합니다.

누구든지 내가 어떻게 할 수 있는지 제안 할 수 있습니까?


래스터 화 된 글꼴보다는 벡터 기반 글꼴의 방법을 찾아야한다고 가정합니다.이 글꼴은 시작점이 될 수 있습니다. 나는 그 문제에 대해 전문가가 아니므로 답을 아는 사람에게 알려줄 것입니다.
Ray Dey

답변:


7

일반적인 세 ​​가지 방법이 있습니다. 무제한 메모리 또는 프로세서 시간이 없으면 불가능한 아티팩트를 완전히 제거하는 것이 아니라 기존 코드 및 대상 플랫폼에 맞는 방식으로 아티팩트를 최소화하는 방법입니다.

먼저 글꼴 래스터 라이저 (일반적으로 FreeType)를 사용하면 확대 할 때 원하는 크기로 글꼴을 래스터화할 수 있습니다. 스크린 샷에서는 멋지게 보이지만 엄청나게 느립니다. 크기를 캐싱하여 속도 저하를 해결할 수는 있지만 메모리가 너무 많이 소모됩니다. 정적 디스플레이에 글리프를보기 좋게 만들려면 불균일하게 크기를 조정해야하기 때문에 동작이 좋지 않습니다. 그래도 충분한 메모리 (예 : PC)가있는 플랫폼에 있고 스케일이 10px에서 30px와 같은 작은 범위로 제한되는 경우 옵션입니다. 이 방법은 또한 많은 눈 사탕을 인정하지 않습니다.

둘째, 텍스트를 메쉬로 저장할 수 있습니다. GLTT와 같은 일부 라이브러리가 존재 하거나 직접 작성할 수 있습니다. 이제 더 이상 픽셀 아티팩트가 없지만 3D 게임의 다른 메쉬처럼 매우 가까이 확대하면 다각형 아티팩트가 생깁니다. 메쉬 텍스트는 버텍스 쉐이더를 적용 할 수 있고 메쉬를 다른 세계 드로잉과 인터리브 할 수 있기 때문에 많은 눈 사탕을 허용합니다. 메모리와 CPU가 상당히 가벼우 며 표준 메시이므로 비용을 쉽게 측정 할 수 있습니다. 일반 스프라이트 기반 2D 렌더링 파이프 라인에 통합하기가 어려울 수 있습니다.

셋째, 거리 필드를 픽셀 셰이더와 함께 사용할 수 있습니다 . 이것은 간단한 셰이더를 사용하여 사전 제작 된 텍스처를 샘플링하고 비디오 카드의 "무료"이중 선형 필터링을 사용하여 글리프를 깔끔하게 확장 할 수있는 비교적 새로운 기술입니다. 글꼴마다 문자 세트당 0.5MB에서 1MB의 텍스처로 다른 방법과 비교하여 거의 예측하기 어려운 메모리를 사용합니다. 스프라이트 기반 렌더링 파이프 라인에 적합합니다. 스프라이트 기반이기 때문입니다. 각 글리프는 여전히 텍스처 쿼드입니다. 픽셀 아티팩트를 생성하지만 텍스처를 스케일링하는 다른 방법과 비교할 때 매우 적습니다. 픽셀 셰이더를 사용할 수없는 경우 고정 함수 폴 백도 있지만 텍스트의 별칭은 매우 중요합니다. 샘플링은 픽셀 셰이더로 이루어지기 때문에 값이 싼 외곽선과 그림자 같은 눈 사탕을 받아들입니다.


3

셰이더를 사용하여 해상도 독립적 인 곡선을 렌더링하는 방법에 대한 Microsoft Research by Loop and Blinn 의 연구 기사 도 있습니다 . 제시된 기술을 사용하여 해상도 독립적 인 방식으로 트루 타입 텍스트를 렌더링하는 것이 좋습니다.


1

커브와 선의 조합으로 글꼴 문자를 빌드 한 다음 런타임에 적절한 수준의 디테일을 가진 지오메트리로 변환해야합니다.

다행히도 대부분의 글꼴은 이미 베 지어 곡선으로 만들어졌습니다. 커브 데이터를 얻으려면 표준 Windows GetGlyphOutline () 함수를 사용하여 추출하면됩니다.

PInvoke없이 C #에서 해당 곡선 데이터를 얻을 수 있는지 확실하지 않습니다.


1
이 크로스 플랫폼을 만들고 PInvoke에 대해 걱정하지 않으려면 GetGlyphOutline이 읽는 데이터 ( 이 SO 질문 참조 )를 일부 사용자 정의 형식 으로 덤프하는 도구를 작성할 수 있습니다. 게임 코드에서 간단한 파일 I / O로 사용자 정의 저장된 글리프 데이터를로드합니다.
Ricket

0

자유형을 살펴볼 수도 있습니다. 플랫폼에서 사용할 수 있는지 또는 라이센스가 적용 가능한지 잘 모르겠지만 트루 타입 및 기타 벡터 글꼴을 렌더링하기위한 다소 뛰어난 오픈 소스 라이브러리입니다. 나는 글꼴을 미적으로 유쾌하게 렌더링하기 위해 코드를 피하는 영리한 변호사를해야한다고 생각합니다. 트루 타입 방식은 커브에 바이트 코드를 사용하여 렌더러에 힌트를 제공하여 중요한 글꼴 기능 (예 : 세로 및 세로 문자)이 표준 순진 앤티 앨리어싱을 사용할 때처럼 흐리게 처리되지 않도록합니다. 이 기술은 그것에 대한 특허를 가지고 있기 때문에 자유형 사람들은 일을 해왔고 애플의 끔찍한 변호사를 불러 일으키지 않은 다른 것을 생각해 내야했습니다. 어쨌든, 법을 제쳐두고 옆으로 치우 치지 말고, 자유 형식을 살펴보십시오.http://freetype.sourceforge.net/index2.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.