Registriert: Di Mai 18, 2004 16:45 Beiträge: 2622 Wohnort: Berlin
Programmiersprache: Go, C/C++
OpenglerF hat geschrieben:
Vorhin hast du geschrieben habe bezog sich vor allen Dingen auf dieser Aussage von dir:
Zitat:
entpackgeschwindigkeit ist stark von der Lib abhängig aber PNG ist immer hoch im Kurs in einigen Fällen JPEG2k und JPEG ist das Schlusslicht.
Ich interpretiere das so: Entpackgeschwindigkeit PNG > Entpackgeschwindigkeit JPEG2000 > Entpackgeschwindigkeit JPEG
Tatsächlich ist es aber so: Entpackgeschwindigkeit JPEG > Entpackgeschwindigkeit PNG ≫ Entpackgeschwindigkeit JPEG2000
Es mag sein, dass es anders ist wenn man sich einen JPEG Dekoder mit aktivierter Handbremse aussucht. Allerdings gehe ich mal davon aus, dass das eher vermeidet (auch der Browserhersteller). Und es kann auch sein, dass zum Beispiel Snappy und TextureCrunch eine schöne Alternative mit entfernt verwandten Ideen sein könnten, allerdings haben die mit PNG und JPEG2000 erstmal ziemlich wenig zu tun, weil das so genannte Format nunmal anders definiert ist.
Ich hab beim suchen nach Benchmarkvergleichen zwischen PNG und JPEG noch ein weiteres Format gefunden. JPEG XR. Das kommt von MS und ist Patentfrei und liegt in der quali, kompressionsrate und einfachheit zwischen jpeg und jpeg2k. Hier der Artikel wo ich drüber gestolpert bin.
Zum PNG, ich hab mich mal durch die erste Seite von Google Treffern gegoogelt und die Dekompression von PNG wird zunehmend mit der steigenden Auflösung schneller, wo JPEG ziemlich konstant ist. Beide waren z.B. ab 500er Auflösung gleich schnell bei iPhone. Was ich recht häufig gesehen hab, ist das Leute PNG mit Jpeg < 100% verglichen haben, was natürlich Äpfel mit Birnen vergleichen ist. PNG ist verlustfrei, es dann mit verlustbehafteten Formaten zu vergleichen ist nicht Zielführend, weil wenn ich abstriche bei der Qualität machen kann, dann ist PNG sowieso keine Wahl. Deswegen mag einige Algos von JPEG2k so sehr, weil die bei gleichem PSNR Wert deutlich kleiner sind.
Etwas was wir z.B. garnicht angesprochen haben ist der Einfluss von der Art des Bildes in die Performance. Je weniger Rauschen im Bild ist, des so schneller wird z.B. PNG gegenüber JPEG, je höher die Auflösung wird des so besser greift die Block Kompression von JPEG auf Mehrkern Machienen und wird schneller. Die Benchmarks sind alle so stark unterschiedlich und in der Regel nicht annähernd auf der von den Libs angegebenen Theoretischen Geschwindigkeit.
Ich will definitiv keines der Format nutzen, die sind alle so brechend langsam beim dekompremieren, das die Total ungeeignet für Spiele sind. Die Zahlen sind ein absolutes no go für Spiele, beim Browsen oder anderen nicht Zeitkritischen dingen ist es eine ganz andere Geschichte.
Ich plane und versuche beim Laden von Modellen und Texturen eigentlich mehr im <1ms Bereich zu kommen und nicht 50-1000ms. Deswegen auch der kleine Exkurs mit den Virtuellen File System, weil das immer ne Handbremse ist.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Nu mal abgesehen davon muss man sich hier nicht so einen abbrechen. Es gibt ganz klare Anwendungsfälle für Desktop, Mobile, Web und Games welches Format wann gut ist. Oder will hier tatsächlich jemand ein GUI mit JPG bauen und Fotos als GIF speichern? Quake 2 hat für solche Leute noch eine Funktion zum Mipmap generieren!
Der einzige Fall wo das noch nicht wirklich klar aus meiner Sicht ist, wäre WebGL. Da würde ich aber stark auf PNG tippen, weil man dort mehrere Texturen in ein Bild bekommst und so Request spart. Habs aber noch nie ausprobiert.
Achja, und bei Mobil ist PNG > JPG. Freundliche Anleitung usw.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Nun nimm doch einfach ImageMagick. Das kannst du Problemlos in dein Buildscript einbauen. Oder du schnappst dir halt Mono oder .NET. Dann kannst du dir mit C# schnell ein kleines Konsolenprogramm zusammenbauen (5 Minuten). Gibt bestimmt sowas wie FromFile und dann Save als Methoden für die Bitmap Klasse.
Ich würde aber davon abraten jpg nach png umzuwandeln. JPG erzeugt ja beim komprimieren diverse Artefakte (Verluste) auf die PNG nicht so gut klarkommt. Du bekommst dabei in der Regel ein Bild mit der gleichen Qualität welches dann wahrscheinlich größer ist.
Es ist besser genau umgekehrt zu arbeiten und erst beim Deployment / Build umzuwandeln. Das könntest du zum Beispiel ganz leicht über eine bestimmte Namenkonvention erledigen. Zum Beispiel: {Name}_Tile.png -> png //Tileset {Name}_Back.png -> jpg //Background Image {Name}_Part.png -> png //Partikel, wahrscheinlich Alphakanal und Animationen {Name}_Wall.png -> png or jpg //Wandtextur, wenn Alphakanal dann png ansonsten jpg
Oder du machst das über die Scripts für deine Materials .... Halt je nachdem was einfacher für dich ist.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2622 Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich benutz in meiner techdemo imagemagick zum vergrößern und sollte es der fall sein noch in srgb farbraum umwandeln(destruktive). Danach jag ich das ganze durch texconv und erzeuge eine dds. Was wo passierrt legt ein json file fest, welches mit gleichen namen daneben liegt. In der json steht auf welche auflösung, farbraum, texturformat es umgewandelt werden soll. Der input kommt vom work ordner und der output geht in dist. Mein tool guckt mit einem filewatcher und triggered bei veränderung.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Umwandlungen von JPG nach PNG sind nicht zu empfehlen, wie ich oben schon schrieb. Imagemagick habe ich noch nicht probiert, aber dies in Skripte einbauen zu können, ist natürlich ein echter Vorteil. IrfanView funktioniert übrigens hervorragend mit Wine.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Das Script hat ledeglich 3 C Funktionen, GetAssetDir, GetExportDir, GetTempDir, welche von dem C++ Tool kommen der rest sind Module die mit LuaJit mit kommen. Ich erzeuge für jede Unterstützte Datei eine JSON, wenn nicht vorhanden, rufe convert(imagemagick), identify(imagemagick) und texconv(Microsoft standalone tool) auf. Der Inhalt von JSON files wird in dem Luascript fest gelegt. Ich kopiere radonframework3.svg in den work Ordner und meine C++ App ruft das Luascript auf und übergibt den Dateiname. Es wird eine JSON angelegt und im Export Ordner die BC7 DDS abgelegt.
Code:
{
"file":"radonframework3.svg",
"width":512,
"height":256,
"filter":"Kaiser",
"mipmaps":true,
"colorspace":"sRGB",
"outputformat":"bc7_unorm_srgb"
}
Die File kann ich dann in Notepad noch anpassen und jedes mal, wenn ich was an den parametern änder und speicher wird das Lua Script wieder aufgerufen, Aktualisiert das Export Asset und informiert alle Clients, die sich an den Converter Service registriert haben(zwecks hot asset loading).
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
glAwesome hat geschrieben:
Umwandlungen von JPG nach PNG sind nicht zu empfehlen, wie ich oben schon schrieb. Imagemagick habe ich noch nicht probiert, aber dies in Skripte einbauen zu können, ist natürlich ein echter Vorteil. IrfanView funktioniert übrigens hervorragend mit Wine.
Irfan hat soweit ich weiß auch Konsole nur gibs des halt nicht auf jeden 0815 php Server
war glaube ich: i_view32.exe c:\src\*.jpg convert=c:\dst\*png
edit: Außerdem es ist halt definitiv Featureärmer als ImageMagick oder Inkscape
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2622 Wohnort: Berlin
Programmiersprache: Go, C/C++
mathias hat geschrieben:
Zitat:
Ich benutze ein minimales selbstgeschriebene konsolenapp und mach die eigentliche Arbeit in Lua und über externe Tools.
In was für einer Sprache ist den Script geschrieben ?
Das Script ist Lua.
Lua kann man recht breitbanding einsetzen. Blizzard nutzt Lua in WoW(für alles, was mit dem User zu tun hat), Crytek in Cryengine(gamelogik) und Adobe in Light Room(program logik).
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 34 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.