¿Cómo puedo renderizar fonts en un juego con sugerencias correctas?

He usado bastante el generador de fonts de maps de bits del código ángel; aunque es muy bueno, me pregunto si habría una manera de utilizar la información de alusión para proporcionar un resultado mejor y más legible, usando sugerencias para proporcionar diferentes espesores basados ​​en la cobertura de tamaño / píxel.

Imagino que cualquier solución tendría que usar la tecnología de campo de distancia presentada en el papel de la válvula para suavizar las fonts mientras se mantiene o se networkinguce el tamaño de los activos. No he encontrado ninguna versión parcial de demos que esté siendo utilizada con información de sugerencias activada o incluida en los degradados de campo de ninguna manera.

Otra forma de ver esto es si hay generadores de bitmap de fonts que generen mipmaps que aún mantienen su legibilidad frente al tamaño de píxel. Creo que los niveles de mip inferiores tratarían de garantizar el espacio y el relleno donde es necesario mantener la legibilidad / topología sobre el mantenimiento del estilo / forma; el punto de insinuar


¿Hay alguna razón por la que no puedas simplemente renderizar el tamaño que quieres?

El problema radica en el hecho de que los rasterizadores de fonts actualmente no se procesan en 3D, y la información de pistas sería importante en diferentes cantidades, debido a que la densidad de píxeles es diferente a lo largo de diferentes ejes; incluso difiere en importancia a lo largo de una string, debido al tamaño que networkinguce la distancia. Por ejemplo, solo quiero sugerencias horizontales en una textura que se ve desde un lado, y solo realmente quiero sugerencias verticales en una fuente que se ve desde abajo o desde arriba. Esto no pretende ser un renderizador que intente renderizar un contorno perfecto con la mayor precisión posible, ya que la sugerencia distorsiona la realidad de la fuente; en su lugar, se trata de una solución de renderizado para escenas estáticas, donde las escenas utilizan el layout de text transformado y deformado en 3D. En este caso, la legibilidad es importante; más importante que la precisión de la representación de la forma del polígono.

Mi única buena sugerencia es tratar de hacer que los umbrales en la técnica de campo de distancia sean una function del tamaño de carácter deseado o (algo equivalente) la relación entre el tamaño representado y el tamaño deseado. (Creo que esto es matemáticamente equivalente a aplicar un filter no lineal al escalar.) Eso boostía drásticamente el costo del sombreador de fragments (aunque quizás no de manera significativa en un progtwig real), y terminarías duplicando un código no trivial. si también querías una ruta de function fija.

Otra posibilidad sería promediar el campo de distancia en muchos tamaños de fuente mientras lo genera, lo que le daría la información de sugerencias "en" la textura. Sin embargo, generalmente los campos de distancia almacenan entre 32px y 64px por carácter. Los casos en los que la indicación manual realmente se beneficia son en tamaños de letra pequeños (8-16px). No sé cuánta información significativa hay para get promediando algo destinado a ~ 8px con algo destinado a ~ 256px y almacenándolo en ~ 32px.

Cualquier otra técnica en la que se me ocurra requerirá más memory, en cuyo punto es mejor que solo renderices las fonts del tamaño que deseas y las uses tal como están.

IANAL, pero las patentes indirectas han expirado recientemente. Una implementación de TrueType, como FreeType, debería poder usarse con sugerencias habilitadas.

Mi grupo ha construido nuestro propio rasterizador TrueType, aunque conozco varios equipos que están satisfechos con la calidad degradada que se encuentra en la técnica del campo de distancia (en gran parte porque usan fonts simples sans-serif en situaciones simples como subtítulos y calcomanías).

Dicho todo esto, la mayoría de las fonts tienen indirectas crípticas autogeneradas en ellas. Quédese en las casas de tipo principal o simplemente verá la salida de FontLab .

A pesar de que sabíamos que las patentes de insinuación estaban expirando, no implementamos un intérprete de códigos de bytes porque consideramos que los tamaños pequeños en los que las sugerencias están más diseñadas para ayudar no deberían usarse en las consoles de juegos, que es a lo que apuntamos.