Jump to content
Unity Insider Forum

VertexLit Shader schwarz auf manchen Geräten


Recommended Posts

Hiho,

 

vorab etwas Hintergrundwissen: Ich arbeite derzeit an einem 3D Spiel für Android. Mitlerweile ist es so weit, dass es sich als Testversion im Playstore befindet und ich es ein paar Leuten zum testen geschickt habe. Funktioniert auch soweit super auf den Testgeräten.

 

 

Bis auf bei einem Kollegen, der ein Galaxy Note Edge besitzt. Bei ihm werden alle Texturen, die einen VertexLit Shader benutzen, einfach komplett schwarz angezeigt. Da fast das ganze Spiel auf VertixLit Shadern basiert, ist es somit unspieltbar bei ihm.

 

Jetzt frag ich mich natürlich wie ich das Problem beheben kann. Wenn es bei ihm nicht funktioniert, wird es höchstwahrscheinlich auch einen zu hohen Anteil anderer Geräte geben, auf denen der selbe Fehler auftritt.

 

Ich habe auch noch nicht so viel Erfahrung darin, 3D Spiele für x tausende verschiedene Mobilgeräte zur Verfügung zu stellen. Da das Gerät, auf dem der Fehler auftritt, halt nicht mein Gerät ist, wird es auch schwierig über Tage hinweg alles Mögliche kurz auszutesten bis es funktioniert.

 

 

Auf anhieb kam mir in den Sinn, dass es eventuell daran liegt, dass ich die Texture Kompression auf "Don't Override" habe. Glaube mich zu erinnern, dass Unity dann standardmäßig ETC2 benutzt. Kann das Problem mit den VertexLit Shadern auf manchen Geräten so enstehen? . Und würde es dann aussreichen ledeglich mehre APK's im Playstore mit verschiedenen Texture Kompressionen hochzuladen?

Das einzige was mich an der Lösungsidee stutzig macht, dass andere Shader bei ihm ja funktionieren.

(Edit: Benutze ETC1, dass sollte ja auf jedem Android Gerät funktionieren)

 

 

Im Anhang befinden sich noch andere, möglicherweise relevante, Informationen. Screenshots kann ich ggf auch noch hochladen.

 

Ich bin für jeden Hinweis dankbar! :)

 

lg Chris

post-5847-0-73028000-1461101847_thumb.png

post-5847-0-33280700-1461101849_thumb.png

post-5847-0-75732600-1461101849_thumb.png

post-5847-0-16548100-1461102088_thumb.png

post-5847-0-09614400-1461102385_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also erst einmal benutzen Texturen keine Shader. Materials haben einen Shader und Texturen.

Entsprechend kann, wenn du schon eingegrenzt hast, dass der Fehler bei einem bestimmten Shader auftritt, der Fix nicht in der Textur liegen.

 

Vertex Lit mit Forward Rendering bedeutet ja, dass beim Rendern eines Objekts für jedes Vertex, also für jeden Punkt des 3D-Modells, die umliegenden Lichter betrachtet werden und dann für diesen Punkt eine Beleuchtungsfarbe ausgerechnet wird.

Die ganzen Pixel auf einer Fläche werden dann mit Mischungen der Farben der umliegenden Punkte beleuchtet.

 

Wenn Objekte jetzt nicht beleuchtet werden, liegt das meist daran, dass nicht die richtigen Lichter berücksichtigt werden. Bei forward Rendering bedeuten mehr Lichter in der Nähe eines Objekts proportional mehr Aufwand, und bei mehr Objekten und mehr Lichtern steigt der Rechenaufwand exponentiell. Entsprechend ist in der Regel bei acht Lichtern Schluss. Diese Zahl kann vermutlich von Grafikchip zu Grafikchip, aber auch von GL-Version zu GL-Version variieren.

 

Lösungsansätze wären daher:

  • Nach Möglichkeit Pixel Lights benutzen
  • Die Anzahl der Lichtquellen reduzieren
  • Mit der Priority-Einstellung der Lichtquellen wichtige von unwichtigen Lichtern trennen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die ausführliche Antwort :)

 

In einem Level sind schon sehr viele statische vertex Lichtquellen (Fackeln in einem Kerker), dass läuft aber zum Glück mit Hilfe der richtigen Lightning Settings selbst auf einem 4 Jahre alten Tablet recht flüssig. Dafür ist das Spiel dennoch ein großer Akkfresser. Sollte ich mal drüber nachdenken das zu überarbeiten :/

 

Naja worum es eigentlich geht: Das Problem tritt bei ihm aber auch in einem anderen Level auf (Slenderman mäßig aufgebaut), wenn weit und breit keine Lichtquellen sind, außer zwei pixel Spotlights der Taschenlampe :/

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Pixel Spotlights sollten gar nicht als solche funktionieren können, da in den Quality Settings Pixel Light Count auf 0 steht. Damit sind sowieso erstmal alle Lichter Vertex-Lichter. Wenn man jetzt ein Objekt anleuchtet, dabei aber keine der Vertices trifft, dann bleibt das Objekt dunkel.

Wenn das bei anderen Leuten anders aussieht, würde ich mich erstmal darüber wundern :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke :)

 

Der Render Mode der Taschenlampe steht auf important. So wie ich die Unity Documentation interpretiere, wird das Licht dann immer als Pixel Light gerendert. http://docs.unity3d....lass-Light.html

Das sieht dann so aus:

post-5847-0-25359800-1461226870_thumb.png

(Das Terrain und der Container benutzen haben zwar keinen VertexLit Shader, aber mit nem Vertex Light sollte es eigentlich trotzdem anders aussehen).

 

Die Objekte sind bei ihm immer schwarz, egal wie man die anleuchtet. Zusätzlich befindet sich hinter dem Player noch ein zweites Spotlight für die Taschenlampe mit einem größeren Radius (für den Screenshot von oben aber kurz deaktiviert), um sicher zu gehen das immer ein Vertex angeleuchtet wird.

post-5847-0-54981500-1461227887_thumb.png

 

 

Ich werde zusehen heute oder morgen noch zur Veranschaulichung Vergleichs-Screenshots von ihm und anderen Testgeräten hochzuladen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, ich hoffe der Doppelpost is okay.

 

Die 8 Screenshots im Anhang zeigen das Problem. Was was ist und auf welchem Gerät, lässt sich anhand der Dateinamen erkennen.

 

Texture Compression: ETC1

Screenshot 1: Alles komplett standard pixel Shader, Directional Lights im "Auto" Render Mode. Gibt hier keine Probleme.

Screenshots 2-3: Das Terrain hat den auch den standard pixel Shader, sonst ist alles was zu sehen ist VertexLit. Zwei Spotlights als Taschenlampe mit Render Mode "Important".

Screenshot 4: Alles komplett VertexLit Shader und Point Lights an den Fackeln im Render Mode "Not Important".

 

Wer mag kann sich den aktuellen Entwicklungsstand der Level und und eventuell ja sogar auch das Problem hier selbst betrachten: https://play.google.....strange_autumn

 

Edit: Screenshots sind in der falschen Reihenfolge, aber sieht man an den Dateinamen.

post-5847-0-40080700-1461274491_thumb.png

post-5847-0-27861700-1461274493_thumb.jpg

post-5847-0-57378900-1461274501_thumb.png

post-5847-0-85731000-1461274503_thumb.jpg

post-5847-0-06905600-1461274509_thumb.png

post-5847-0-63792600-1461274510_thumb.jpg

post-5847-0-79748700-1461274520_thumb.png

post-5847-0-89347200-1461274522_thumb.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...