August 26, 2010

Llkdu, Emkdu und OpenJPEG oder: was ist was und wozu braucht man es?

In allen Diskussionen um den Emerald-Client wird auch immer wieder über die Emkdu.dll diskutiert, viele wissen nicht wirklich, wozu diese gebraucht wird noch was sich hinter diesen verschiedenen Begrifflichkeiten wie OpenJPEG und Llkdu verbirgt. Ich will hier einmal das Knäuel ein wenig aufdröseln.

Die Basis von allem: JPEG2000.

Second Life basiert auf 3D-Objekten, die mit Texturen beliebigen Inhalts überzogen werden können. Da diese Texturen viel Bandbreite bei der Übertragung und auf Seiten Linden Labs dauerhaft Speicherplatz benötigen, war beim Design von Second Life eines der Ziele gewesen, einen Standard zu wählen, der möglichst viel Information bei möglichst wenig Speicherbedarf abbilden kann.

Man kennt diese Problematik bereits aus dem WWW, dort ist JPEG das verbreitetste Kodierungsverfahren für Bilder aller Art. Wichtig dabei ist, dass JPEG Bilder verlustbehaftet komprimiert, das bedeutet, es gehen je nach Qualität mehr oder weniger gut sichtbar Informationen verloren. JPEG basiert dabei auf verschiedenen Kodierungsschritten, wobei das Herz ein aus der Mathematik bekanntes Verfahren namens diskrete Cosinus-Transformation darstellt

Nun entstand JPEG aber im Jahr 1992 und seitdem blieb die Welt nicht stehen, im Laufe der Zeit entstanden bessere Verfahren als dieses. Bei der Konzeptionierung von Second Life entschied man sich für JPEG2000 als den Standard aller Bilder. JPEG2000 ist jünger als JPEG, damit technisch weiter und komprimiert Bilder besser. JPEG2000 ist rechenintensiver im Vergleich zu JPEG und basiert auf dem Verfahren der diskreten Wavelet-Transformation, zudem ist es teilweise von Softwarepatenten geschützt.

Kurz: alle Bilder, die wir in Second Life sehen, basieren auf dem Bildstandard JPEG2000. Da dieser sich bisher bis auf einige Nischenbereiche kaum durchgesetzt hat, muss der Viewer die benötigten Grundfunktionen zum De- und Kodieren dieses Standards selber mitbringen. Dies geschieht mit Hilfe einer Programmbibliothek, die die dazu benötiigten Funktionen bereitstellt.

Auftritt: OpenJPEG!

OpenJPEG ist eine Opensource-Implementierung des JPEG2000-Standards, die unter der BSD-Lizenz steht. OpenJPEG ist dabei solide programmiert, aber was die Kodierungs- und Dekodierungsgeschwindigkeit anbelangt die langsamste Variante. Dafür ist die Benutzung von OpenJPEG kostenlos und damit ist es die Standardbibliothek aller alternativen Viewer, die diese zur Darstellung von Texturen benutzen. Der Vollständigkeit halber sei erwähnt, dass es mit JasPer noch eine weitere OSS-Implementierung des Standards gibt, die im Viewer aber nie Verwendung fand.

Schneller: LLkdu!

Die industriell genutzte Standardimplementierung in C++ von JPEG2000 stammt aus dem wenig bekannten Softwarehaus Kakadu Software. Der Autor ist dabei einer der Urheber dieses Standards. KDU im Dateinamen ist dabei nichts anderes als die Abkürzung für „Kakadu“ und LL steht für Linden Lab.

Diese Implementierung des JPEG2000-Standards ist dabei um Längen schneller arbeitend als OpenJPEG, dafür aber kein Opensource und zum Einsatz in Software ist eine saftige Lizenzgebühr fällig. Linden Lab liefert seinen Viewer standardmäßig mit Kakadu als Bibliothek aus, und das Ergebnis macht sich in spürbar schnelleren Ladezeiten der Texturen bemerkbar.

Noch schneller: Emkdu!

Einer der Entwickler von Emerald, Phox Modularsystems, lizenzierte bei Kakadu ebenfalls deren Bibliothek in einer neueren Variante als Linden Lab das tat und baute darum seine eigene Variante namens Emkdu.dll. Die Lizenz zur nicht kommerziellen Nutzung der Bibliothek kostet dabei im Jahr 250 US$, und es machte sich in einer nochmals leicht schnelleren Geschwindigkeit beim Laden der Texturen bemerkbar.

Er baute in die Bibliothek dann auch eine Funktion ein, die den Dateipfad samt Windows-Titel vom Emerald-Viewer in den Metadaten der Avatartextur versteckten, das ist inzwischen nicht mehr der Fall, aber war auch der Anstoß für viel Kritik.

Fazit

Emerald funktioniert bisher mit Emkdu, Llkdu und OpenJPEG, ansonsten jeder Viewer zumindest mit Llkdu oder OpenJPEG. Die Bibliotheken sind dabei beliebig austauschbar; wer z.B. im Verzeichnis von Emerald die emkdu.dll löscht und den Viewer neu startet, dann nutzt der die noch vorhandene openjpeg.dll und gut ist es.

Wer wirklich auf der sicheren Seite sein will, der sollte momentan nur OpenJPEG oder LLkdu nutzen bis die Turbulenzen um Emerald geklärt sind.