[WebGL2] Wie viel Speicher kann ich nutzen?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Zudomon
Establishment
Beiträge: 2272
Registriert: 25.03.2009, 07:20
Kontaktdaten:

[WebGL2] Wie viel Speicher kann ich nutzen?

Beitrag von Zudomon »

Ich würde gerne mein Rendering auf Low- und High-End Geräten realisieren.

Aktuell habe ich zwei Profile, bei dem einen werden etwa 205 MB Texturspeicher genutzt, bei dem anderen gute 3,8 GB. (Natürlich wird es da später noch weitere Profile geben...)

Die Problematik ist, wann nutze ich welches Profil? Ich hätte die Qualitätsanpassung gerne automatisch. Allerdings scheint das nicht so trivial zu sein. Nun möchte ich auch nicht einfach nur danach gehen, ob es sich um ein Handy oder Desktop System handelt. Es scheint keine Möglichkeit zu geben, raus zu bekommen, wie viel (GPU-)Speicher dem System zur Verfügung steht.

Auch ein Ansatz, wo vorsichtig Texturen (mit Daten, damit sie tatsächlich Speicher verbrauchen) akquiriert werden und dann auf WebGL Fehler zu reagieren, bringt nichts. Bei meinem Desktop System schaufelt der ohne Probleme die Grafikkarte komplett zu, danach holt er sich scheinbar noch den RAM dazu und am Ende kommt dann noch die Auslagerung, man merkt halt nur, wie es alles immer langsamer wird... hab das dann mal lieber abgebrochen, bevor mein System komplett instabil wird.
Auf dem Handy wird dagegen einfach der Browser geschlossen, wenn zu viele große Texturen erzeugt werden.

Also irgendwie ist das alles nicht so dolle. Der Ansatz, da erstmal die Grenzen auszutesten finde ich generell nicht gut, wollte es aber zumindest mal getestet habe. Zur Not müsste man die Qualität doch manuell einstellen, aber letztendlich hätte man das gleiche Problem: Wählt man ein zu hohes Profil, wird das ganze mit einem Device Lost quittiert. Was allerdings im Browser übel ist. Denn passiert das 2-3 mal, dann wird einfach erstmal die Hardwarebeschleunigung deaktiviert und man muss diese selbst reaktivieren. Also wäre es gut, dass unter allen Umständen zu vermeiden. Ideal wäre also zu ermitteln, wie viel Speicher Systembedingt für WebGL sicher zur Verfügung steht und davon z.B. dann 50% als eigene Maximalgrenze setzen. Und falls es möglich ist, die Qualität selbst einzustellen, dann auch nur die Optionen zulassen, die das System auch verkraftet.

Die Frage ist nur, wie macht man das am besten? Oder vielleicht gibt es noch andere Strategien?
Benutzeravatar
TomasRiker
Establishment
Beiträge: 100
Registriert: 18.07.2011, 11:45
Echter Name: David Scherfgen
Wohnort: Hildesheim

Re: [WebGL2] Wie viel Speicher kann ich nutzen?

Beitrag von TomasRiker »

Den verfügbaren Speicher kann man nicht rauskriegen.
Du kannst aber mit getParameter(gl.RENDERER) ungefähr rauskriegen, um welche Hardware es sich handelt, also z. B. Intel HD Graphics oder GeForce irgendwas. Das könnte einen ungefähren Anhaltspunkt bieten.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2272
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [WebGL2] Wie viel Speicher kann ich nutzen?

Beitrag von Zudomon »

Danke TomasRiker,
gleich mal ausprobiert, allerdings bekomme ich dann bei Desktop und Handy jeweils nur "WebKit WebGL" als Ausgabe.

Mit der Extension "WEBGL_debug_renderer_info" kommt man aber dann doch an genauere Informationen:

Code: Alles auswählen

glExtensionDebugRendererInfo = gl.getExtension( 'WEBGL_debug_renderer_info' );
document.body.innerHTML += gl.getParameter(gl.RENDERER)+"<br>";
document.body.innerHTML += gl.getParameter(gl.VENDOR)+"<br>";
document.body.innerHTML += (glExtensionDebugRendererInfo && gl.getParameter( glExtensionDebugRendererInfo.UNMASKED_RENDERER_WEBGL ))+"
document.body.innerHTML += (glExtensionDebugRendererInfo && gl.getParameter( glExtensionDebugRendererInfo.UNMASKED_VENDOR_WEBGL ))+"<br>";
Das zeigt dann auf meinem Desktop zumindest schon mal das hier an:

Code: Alles auswählen

WebKit WebGL
WebKit
ANGLE (NVIDIA Corporation, NVIDIA GeForce RTX 4070 Ti/PCIe/SSE2, OpenGL 4.5.0)
Google Inc. (NVIDIA Corporation)
Auf dem Samsung A14:

Code: Alles auswählen

WebKit WebGL
WebKit
Mali-G52 MC2
ARM
Die Frage wäre dann zum einen, ist die Extension soweit auch weiträumiger verfügbar und ist es praktikabel einfach zu sagen:
Okay, scheinbar eine RTX 4070, also werden da schon so mindestens 12 GB VRAM zur Verfügung stehen... wobei das natürlich schon viel besser ist, als überhaupt gar keinen Anhaltpunkt zu haben und nur mit

Code: Alles auswählen

let isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
ins blaue zu raten.

EDIT:
Also wenn es sonst keine bessere Möglichkeit gibt, dann könnte man es vielleicht erstmal so lösen.

Vielleicht ist das hier dann noch hilfreich... hab aber noch nicht genauer geschaut:
https://deviceandbrowserinfo.com/learni ... rer_values
Magister
Beiträge: 44
Registriert: 12.08.2018, 22:07
Kontaktdaten:

Re: [WebGL2] Wie viel Speicher kann ich nutzen?

Beitrag von Magister »

Es ist ja eher so das WebGL Browser ist und Javascript. Also Richtung eher Plattformunabhängigkeit und Sandbox. Daher machen solche Differenzierungen kaum Sinn (das einzige während Auflösungen und deren Anpassungen. Also die Hardware direkt dürfte kaum sichtbar sein.
Zuletzt geändert von Magister am 22.12.2024, 22:34, insgesamt 1-mal geändert.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2574
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: [WebGL2] Wie viel Speicher kann ich nutzen?

Beitrag von Jonathan »

Magister hat geschrieben: 22.12.2024, 22:32 Es ist ja eher so das WebGL Browser ist und Javascript. Also Richtung eher Plattformunabhängigkeit und Sandbox.
Hmhmm, aber das klingt mir dann sehr nach einem derben Designfehler von WebGL. Das ganze Gerede von Plattformunabhängigkeit ist doch bloß abstrakte Philosophie, am Ende läuft absolut alles auf einer konkreten Plattform mit konkreten Eigenschaften. Keine Möglichkeit zu haben, die Limitierungen vernünftig abzufragen, bedeutet dann doch nur, den Anwender zu zwingen, schlechte Software zu schreiben die entweder crasht, oder Ressourcen ungenutzt liegen lässt, oder, je nach Plattform (haha), beides. Erinnert mich ein wenig an die alten Dos-Spiele, die Kilobyteweise Hauptspeicher allokiert haben um zu schauen, wie viel Platz denn jetzt vorhanden ist, und dann auf modernen Systemen 20 minütige Ladezeiten hatten, weil halt einfach sehr sehr viel Speicher verfügbar war. Zu genau so Spielchen zwingt man die Entwickler dann ja, wenn man behauptet seine Umgebung sei so plattformagnostisch, dass Ressourcenlimitierung nur in Spezialfällen eine Rolle spielt, und keine Möglichkeit zu Verfügung stellt, das konkret abzufragen.

Zugegeben, in meinen Spielen interessiert es mich auch nicht, wie viel Grafikkartenspeicher noch frei ist, obwohl ich das vermutlich sehr einfach abfragen könnte. Aber ein internationaler Industriestandard ist halt vielleicht auch etwas anderes, als ein kleines Hobbyprojekt. Aber es wäre ja zumindest schön zu wissen, dass man die Möglichkeit hätte es richtig zu machen, wenn man denn nur wollte.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Zudomon
Establishment
Beiträge: 2272
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [WebGL2] Wie viel Speicher kann ich nutzen?

Beitrag von Zudomon »

Das sehe ich absolut genauso!
Vor allem wenn es um Sicherheit geht, Hardware zu verschleiern oder so, kein Problem. Mir ist ja egal, was der User verwendet oder ob es Sandbox ist oder nicht. Aber was mir nicht egal ist, zu wissen, was ich nutzen kann, ohne dass das System instabil wird oder gar crashed. Dafür hat ein User nämlich sicher kein Verständnis. Umgekehrt hat ein User aber sicher auch kein Verständnis, wenn er ne High-End Grafikkarte hat und ich dann die Kartoffeleinstellung raus hole, weil das System sonst potentiell überlastet sein könnte.
NytroX
Establishment
Beiträge: 392
Registriert: 03.10.2003, 12:47

Re: [WebGL2] Wie viel Speicher kann ich nutzen?

Beitrag von NytroX »

Es ist ja Arbeitsspeicher, also denke ich mal wird man das gleiche Problem haben wie beim RAM.
Da macht es auch wenig Sinn, die Größe zu prüfen.

Nehmen wir mal an, du nutzt die Lösung, dass du den halben Speicher belegst.
Was passiert dann, wenn ich deine Seite in 2 verschiedenen Tabs öffne? Crash?
Oder wenn ich nebenbei ein Spiel spiele, raus-tabbe und dann deine Seite im Browser öffne?

Der Hardware-RAM oder GRAM ist ja immer begrenzt und wird von allen Programmen auf dem Rechner gleichzeitig verwendet.
Wie kannst du da anhand der Größe allein sinnvoll mit deinem Programm reagieren?
Die einzige Möglichkeit für das Betriebssystem (beim RAM) bzw. dem Grafik-Treiber (beim GRAM) ist ja, den Speicher zu virtualisieren - und dann die unbenutzten Teile irgendwohin auszulagern - das kostet dann halt Performance, wenn der Speicher nicht ausreicht und geswappt werden muss.
Und beim Web kann ja dann zusätzlich auch der Browser z.B. die Resourcen pro Tab begrenzen. Dann bringt dir die Gesamtgröße auch nichts.

Am Ende fürchte ich halt ist der User dafür verantwortlich, den Prozessen auf seinem Rechner genügend Resourcen zu geben bzw. nicht alles gleichzeitig zu starten, wenn es performant sein soll. Aber ich sehe auch, dass zumindest ein Anhaltspunkt nice wäre...
Benutzeravatar
Krishty
Establishment
Beiträge: 8321
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [WebGL2] Wie viel Speicher kann ich nutzen?

Beitrag von Krishty »

Mit “verfügbar” meinst du hoffentlich den installierten Speicher und nicht den freien … der obligatorische Artikel dazu https://devblogs.microsoft.com/oldnewth ... 00/?p=8513
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2574
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: [WebGL2] Wie viel Speicher kann ich nutzen?

Beitrag von Jonathan »

NytroX hat geschrieben: 23.12.2024, 13:54 Am Ende fürchte ich halt ist der User dafür verantwortlich, den Prozessen auf seinem Rechner genügend Resourcen zu geben bzw. nicht alles gleichzeitig zu starten, wenn es performant sein soll. Aber ich sehe auch, dass zumindest ein Anhaltspunkt nice wäre...
Joah, man könnte jetzt sagen, dass es sich dabei um eine Art Sandboxing handelt und die "Plattform", wenn sie gefragt wird, wie viel Speicher denn nun da ist, nicht den tatsächlich theoretisch verfügbaren zurückgibt, sondern den Speicher, den sie dir zuteilen möchte. Das könnte z.B. 80% des noch freien Speichers sein (um einfach mal irgendeine Zahl zu nennen). Wenn ich das Spiel dann in einem zweiten Tab noch einmal starte, wird dort dementsprechend viel weniger freier Speicher gemeldet und das Spiel kann entweder mit weniger Ressourcen starten, oder sich halt mit einer netten Fehlermeldung direkt wieder beenden.
Mit anderen Worten: Der Container (Betriebssystem, Browser, etc.) ist dafür zuständig Speicher zuzuteilen. Die Verantwortung des Spiels ist es wiederum zuzusehen mit den verfügbaren Ressourcen gut zu laufen, oder den User durch eine Fehlermeldung entsprechend zu bitten, mehr Speicher zur Verfügung zu stellen (und aus Spielsicht ist es egal, ob das durch Kaufen von Hardware oder umkonfigurieren von virtuellen Umgebungen geschieht). Aber der Container sollte halt die notwendigen Informationen zur Verfügung stellen, damit das Spiel seine Verantwortung wahrnehmen kann.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Magister
Beiträge: 44
Registriert: 12.08.2018, 22:07
Kontaktdaten:

Re: [WebGL2] Wie viel Speicher kann ich nutzen?

Beitrag von Magister »

Jonathan hat geschrieben: 23.12.2024, 11:12
Magister hat geschrieben: 22.12.2024, 22:32 Es ist ja eher so das WebGL Browser ist und Javascript. Also Richtung eher Plattformunabhängigkeit und Sandbox.
Hmhmm, aber das klingt mir dann sehr nach einem derben Designfehler von WebGL. Das ganze Gerede von Plattformunabhängigkeit ist doch bloß abstrakte Philosophie, am Ende läuft absolut alles auf einer konkreten Plattform mit konkreten Eigenschaften. Keine Möglichkeit zu haben, die Limitierungen vernünftig abzufragen, bedeutet dann doch nur, den Anwender zu zwingen, schlechte Software zu schreiben die entweder crasht, oder Ressourcen ungenutzt liegen lässt, oder, je nach Plattform (haha), beides. Erinnert mich ein wenig an die alten Dos-Spiele, die Kilobyteweise Hauptspeicher allokiert haben um zu schauen, wie viel Platz denn jetzt vorhanden ist, und dann auf modernen Systemen 20 minütige Ladezeiten hatten, weil halt einfach sehr sehr viel Speicher verfügbar war. Zu genau so Spielchen zwingt man die Entwickler dann ja, wenn man behauptet seine Umgebung sei so plattformagnostisch, dass Ressourcenlimitierung nur in Spezialfällen eine Rolle spielt, und keine Möglichkeit zu Verfügung stellt, das konkret abzufragen.

Zugegeben, in meinen Spielen interessiert es mich auch nicht, wie viel Grafikkartenspeicher noch frei ist, obwohl ich das vermutlich sehr einfach abfragen könnte. Aber ein internationaler Industriestandard ist halt vielleicht auch etwas anderes, als ein kleines Hobbyprojekt. Aber es wäre ja zumindest schön zu wissen, dass man die Möglichkeit hätte es richtig zu machen, wenn man denn nur wollte.
Das ist kein Designfehler, sondern es heisst ja WebGL. Also das Webprogramm, soll auf möglichst vielen Browserplattformen laufen. Das Plattofrmunabhängikeit erstmal nur die Idealform ist wissen wir. Der Browser muss doch noch eine Debugkonsole haben (meine hat eine). Das ist die Plattform dann eher für solche Dinge., Im Programm selber werden kaum solche Dinge richtig erscheinen, da die versteckt sind. Das läuft alles in der Sandbox. Also dann müssten die Sandboxparameter oder der VM abgefragt werden..
Magister
Beiträge: 44
Registriert: 12.08.2018, 22:07
Kontaktdaten:

Re: [WebGL2] Wie viel Speicher kann ich nutzen?

Beitrag von Magister »

Also Brave zeigt auch im Tab die Speicherbelegung an. Also da wird es wohl ne Browserapi geben.
Antworten