Factorio News - Freitag Fakten #333 - Geländescrolling
Es gibt eine neue News zu dem Steam Game Factorio vom 07.02.2020. Folgendes hat dabei der Entwickler von Factorio veröffentlicht:
Lesen Ihr diesen Beitrag auf unserer Website.
Hallo,
Wir haben diese Woche 0.18.4 veröffentlicht, die gleiche alte Version, mehr Fehlerbehebungen, mehr Fehler, mehr Änderungen. In diesem Stadium der Entwicklung passieren nicht viele interessante Dinge, wir polieren nur, was wir haben.
Geringfügige Optimierung des Gelände-Renderings (posila)
Nur wenige Tage vor der Veröffentlichung von 0.18.0 hatte ich eine Erleuchtung über ein Gelände-Rendering-Problem, das mich lange Zeit störte. Beim Rendern des Terrains verwenden wir die Textur aus dem vorherigen Frame wieder. Das wurde immer so gemacht, dass wir die Textur an die neue Position verschoben renderten, die Lücke auffüllten und dann das Endergebnis zur Wiederverwendung im nächsten Bild zurück in die Textur kopierten. Was hat mich daran gestört? Diese einfache Operation würde zu einer Rasterung von 2 Bildschirmen mit einem Pixelwert führen. Während das für mindestens halbwegs ordentliche GPUs aus dem letzten Jahrzehnt kein Problem darstellt, ist es für integrierte GPUs, die im Allgemeinen eine um eine Größenordnung geringere Speicherbandbreite als dedizierte GPUs haben, eine erhebliche Arbeitsbelastung. Es könnte auch genauso schlecht für alte dedizierte Low-End-GPUs sein.
Eines der Extrembeispiele ist die Intel HD Graphics 3000 - eine integrierte GPU auf der Sandy Bridge CPU-Architektur. Wenn Ihr still sitzen und das Gelände ohne Verschiebung wiederverwendet werden kann, würde es "nur" 2 Millisekunden dauern, um es in die Spielansicht zu kopieren. Aber als Ihr sich zu bewegen begannen, konnte die Zeit der GPU für das Rendern des Geländes bis zu 5 Millisekunden betragen. Und das nur bei einer Auflösung von 1600x900. Nicht einmal 1080p. Es hat mich also gestört, dass wir fast ein Drittel eines Frames (16,66 ms) für das Rendern des Terrains aufgewendet haben, während die Engine viel mehr Arbeit hat, um den Rest des Spiels zu rendern (zum Vergleich: GeForce GTX 750Ti oder Radeon R7 360 würden das gleiche unter 0,5 ms bei 1080p tun).
Die Erkenntnis, die ich hatte, war, dass ich die Puffertextur 'scrollen' kann. Wenn ich mich an den Versatz der linken oberen Ecke erinnere, kann ich ihn in der Spielansicht wieder aufrollen, und dann könnt wir, anstatt das gesamte Gelände zurück in den Puffer zu kopieren, einfach den Versatz anpassen und die Teile, die sich geändert haben, aktualisieren. Die Anzahl der kopierten Pixel ist also proportional dazu, wie stark das Gelände gescrollt wurde. Es ist so einfach, dass es mir peinlich ist, dass ich das nicht schon vor Jahren herausgefunden habe.
https://cdn.factorio.com/assets/img/blog/fff-333-tile-buffer.mp4
Die meisten Menschen hätten diese Optimierung nicht bemerken könnt, da die meisten GPUs heutzutage das Unoptimale bereits im Bruchteil einer Millisekunde erledigt haben. Aber es hat mich trotzdem sehr glücklich gemacht, diese Ineffizienz endlich beseitigen zu könnt. Zeitgenössische...
Hallo,
Wir haben diese Woche 0.18.4 veröffentlicht, die gleiche alte Version, mehr Fehlerbehebungen, mehr Fehler, mehr Änderungen. In diesem Stadium der Entwicklung passieren nicht viele interessante Dinge, wir polieren nur, was wir haben.
Geringfügige Optimierung des Gelände-Renderings (posila)
Nur wenige Tage vor der Veröffentlichung von 0.18.0 hatte ich eine Erleuchtung über ein Gelände-Rendering-Problem, das mich lange Zeit störte. Beim Rendern des Terrains verwenden wir die Textur aus dem vorherigen Frame wieder. Das wurde immer so gemacht, dass wir die Textur an die neue Position verschoben renderten, die Lücke auffüllten und dann das Endergebnis zur Wiederverwendung im nächsten Bild zurück in die Textur kopierten. Was hat mich daran gestört? Diese einfache Operation würde zu einer Rasterung von 2 Bildschirmen mit einem Pixelwert führen. Während das für mindestens halbwegs ordentliche GPUs aus dem letzten Jahrzehnt kein Problem darstellt, ist es für integrierte GPUs, die im Allgemeinen eine um eine Größenordnung geringere Speicherbandbreite als dedizierte GPUs haben, eine erhebliche Arbeitsbelastung. Es könnte auch genauso schlecht für alte dedizierte Low-End-GPUs sein.
Eines der Extrembeispiele ist die Intel HD Graphics 3000 - eine integrierte GPU auf der Sandy Bridge CPU-Architektur. Wenn Ihr still sitzen und das Gelände ohne Verschiebung wiederverwendet werden kann, würde es "nur" 2 Millisekunden dauern, um es in die Spielansicht zu kopieren. Aber als Ihr sich zu bewegen begannen, konnte die Zeit der GPU für das Rendern des Geländes bis zu 5 Millisekunden betragen. Und das nur bei einer Auflösung von 1600x900. Nicht einmal 1080p. Es hat mich also gestört, dass wir fast ein Drittel eines Frames (16,66 ms) für das Rendern des Terrains aufgewendet haben, während die Engine viel mehr Arbeit hat, um den Rest des Spiels zu rendern (zum Vergleich: GeForce GTX 750Ti oder Radeon R7 360 würden das gleiche unter 0,5 ms bei 1080p tun).
Die Erkenntnis, die ich hatte, war, dass ich die Puffertextur 'scrollen' kann. Wenn ich mich an den Versatz der linken oberen Ecke erinnere, kann ich ihn in der Spielansicht wieder aufrollen, und dann könnt wir, anstatt das gesamte Gelände zurück in den Puffer zu kopieren, einfach den Versatz anpassen und die Teile, die sich geändert haben, aktualisieren. Die Anzahl der kopierten Pixel ist also proportional dazu, wie stark das Gelände gescrollt wurde. Es ist so einfach, dass es mir peinlich ist, dass ich das nicht schon vor Jahren herausgefunden habe.
https://cdn.factorio.com/assets/img/blog/fff-333-tile-buffer.mp4
Die meisten Menschen hätten diese Optimierung nicht bemerken könnt, da die meisten GPUs heutzutage das Unoptimale bereits im Bruchteil einer Millisekunde erledigt haben. Aber es hat mich trotzdem sehr glücklich gemacht, diese Ineffizienz endlich beseitigen zu könnt. Zeitgenössische...
Die vollständige News zu Freitag Fakten #333 - Geländescrolling findet ihr auf der Factorio Steam Seite