Open Label Library - API specification and reference implementations for glyph rendering in 2D and 3D graphics environments.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
ll-opengl
spec
.gitignore
.travis.yml
LICENSE
README.md
plan.txt

README.md

OpenLL

Open Label Library is an Open Source, MIT licensed API specification for high performance label (glyphs, text, etc) rendering in 2D and 3D graphics environments.

Until first approval, a language-agnostic API is externally maintained.

OpenLL was initially published on the 22nd International Conference on Information Visualisation (iV 2018).

  • Daniel Limberger, Anne Gropler, Stefan Buschmann, Jürgen Döllner, and Benjamin Wasty: "OpenLL: an API for Dynamic 2D and 3D Labeling". Proceedings of the International Conference on Information Visualization 2018.

Overview

  1. Reference Implementations
  2. Tool Support
  3. Terminology
  4. Usage
  5. Contributing

Reference Implementations

Reference implementations of OpenLL are currently implemented in C++ using OpenGL and TypeScript using WebGL. The corresponding projects are openll-cpp for C++ and webgl-operate for TypeScript and web browsers. Further, gloperate provides an integration into a rendering system.

Tool Support

To create font assets from font files required by OpenLL, we suggest to use the command line tool llassetgen.

Terminology

This section introduces and partially extends common terminology from computer graphics and typography within the context of texture-based glyph rendering, as it is the basis of OpenLL and required for comprehending its API. Please note that these are not intended as general definitions but instead used to clarify their use within OpenLL.

Basic Computer Graphics

Bitmask
A rectangular, high-resolution bitfield that approximates the shape of a grapheme by means of 'inside' and 'outside' bits.
Distance Map
A discrete, low-resolution scalar field that specifies the minimum distance to a shape's contour approximated by a bitmask. The distance may be signed to distinguish between the inside and outside of the shape.
Texture
A rectangular container storing data in a GPU friendly format for efficient processing.
Texture Atlas
A large, rectangular container comprising multiple textures that can be efficiently addressed as single texture.

For efficient label rendering OpenLL uses texture atlases of distance maps of graphemes. OpenLL further allows the computation of distance maps based on bitmasks at run-time.

Reference Systems and Units

Pixel
Base element of a digital image in computer graphics; a physical point in a raster image and the smallest addressable element of a picture represented on the screen.
Point
0-dimensional object, i.e. a position in a geometric space, used as a unit in World Space or Local Space.
Dots per Inch
Measure of spatial printing or video dot density; number of individual dots that can be placed in a line within the span of 1 inch (2.54cm). Regarding screens, there are no dots but pixels, and the measure concept is thus called PPI (pixel per inch).
Screen Space
defined by the screen, thus a 2-dimensional space addressable via a positive integer coordinate system.
World Space
space that contains the geometric objects, thus a potentially unlimited 2- or 3-dimensional space addressable via a floating-point coordinate system. The reference space of each object is called Object Space, which is part of the World Space. Glyph Sequences can be placed in Object Space or World Space, this should be up to the user.
Local Space
also called Typesetting Space; reference space of a Glyph Sequence. All typesetting transformations (kerning, glyph sizes, etc.) are applied within this space. Usually, it is a 2-dimensional space, as long as the baseline is not a spline that extends in 3-dimensional space.

Typography

Character
Abstract idea of a smallest readable component with semantic value in written language.
Grapheme
Term intended to designate a unit of a writing system, parallel to phoneme and morpheme, but in practice used as a synonym for letter, diacritic, character, or sign. (taken from: https://de.wikipedia.org/wiki/Graphem#cite_note-DanielsBright1995:Glossar-11)
Glyph
An elemental symbol (graphical unit) intended to represent a readable character for the purposes of written communication. If a glyph should be renderable, a distance field representation has to be present in the font face texture atlas.
Ligature
Two or more graphemes or glyphs are joined as a single glyph. A font face can declare combinations of glyphs that should be rendered using a different distance transform representation.
Glyph Sequence
Sequence of glyphs placed along the baseline.
Font Face
A collection of glyphs that form a coherent composition. It is typically a subset of the Unicode character set. Discerning a font family, a font face has fixed font size, font weight, line spacing, a glyph catalogue, as well as kerning information.

Typesetting

Typesetting
The process of text composition. This takes a glyph sequence, the associated font face, the baseline, alignment and all advance and kerning information into account. Additionally, multi-line typesetting is supported.
Kerning
process of adjusting the spacing between two glyphs to achieve a visually pleasing result. The kerning value depends on each glyph pair and can be positive (larger spacing) or negative (smaller spacing). As opposed to kerning, the term tracking (letter-spacing) means adjusting the spacing uniformly and independently of the affected glyphs.
Baseline
Line or spline along which glyphs are placed in a glyph sequence. Descending glyphs (such as 'p') extend below the baseline.
Advance
The space along the baseline that is advanced before a next glyph is placed.
Anchor
The reference anchor in typesetting space that is placed onto the reference point in view or world coordinates.
Alignment
Setting of text flow along the maximum extent of the baseline, e.g. centered, left, right, block.

Advanced Computer Graphics

Renderer
A software system that provides (hardware-accelerated) functionality to synthesize an image containing the configured OpenLL labels. Renderer are vendor-specific but are intended to be implemented using rendering APIs such as OpenGL, Vulkan, OpenGL ES, WebGL, or Metal. Although unendorsed, software renderer are possible, too.
Attributed Vertex Cloud
A specialized geometry encoding that relies on the programmable rendering pipeline of modern graphics hardware to instantiate geometry templates. For OpenLL, rectangles are used as templates for the glyph rendering.
Super Sampling
spatial anti-aliasing method to make jagged glyph edges appear smoother. For each output pixel, multiple samples at higher resolution are processed to calculate the average value for that pixel. The number of samples influences the quality.
Back-face Culling
When activated, the back-faces are not rendered, i.e., glyphs are not visible when the viewer would see them from behind. If culling is not active, the viewer would see mirrored glyphs.
Texture Array
Multiple textures that are referenced using a single entry point and qualified using a texture index.
Sub Texture
A virtual texture within a texture. A basic concept to use texture atlases.

Usage

If you want to use OpenLL within your project, feel free to contact us. For a quick-start, refer to our examples using OpenLL:

Contributing

OpenLL is a community-driven API and we rely on community effort and feedback to provide a versatile and usable API. The following tasks are highly appreciated: