Jump to content
Unity Insider Forum

Verbessern von Texturen und Text im 3D-Raum


Kokujou

Recommended Posts

Hallo ihr Lieben :) Lang ists her!

Ich hab ml wieder ein neues Projekt und baue mir gerade einen hübschen Mahjong-Tisch auf. Das problem ist jetzt aber, wenn ich Texturen mit Mustern nehme, in meinem Fall Mahjong-Steine und diese rotiere, dann ist alles verpixelt.

Ich habe... eigentlich alles probiert. Jedes Setting an und ausgeschaltet. Inzwischen hab ich die Texturen sogar als Vektorgrafik exportiert. Sieht sogar sehr gut aus.

Ein ähnliches Problem habe ich mit Text. Der Text ist im World Space und wenn ich Rotation hinzufüge und mit einer perspektivischen Kamera arbeite sieht alles unscharf und verpixelt aus.

Also... was kann ich da machen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

also ich hab im Projekt alles was Antistroph ist oder Antialiasing an geschaltet und auf den höchstwert gedreht... generell ist alles auf Maximal. ich hab sogar mal die Bildauflösung hochgestellt. Aber kein wirklicher unterschied.
grafik.png.5f03994630b685f208ade8bc72a2be8f.png

so sieht es aktuell aus. wie ihr seht wirkt die Kanji 3 links total verschwommen. Man könnte es auch blurry nennen. Ich hab jetzt übrigens sogar MipMaps drin, obwohl die auflösung meiner Texturen nicht wirklich POT ist und so das seitenverhältnis etwas drauf geht.

Rechts die Bambus 1 ist noch shclimmer dran. hier ist sie nicht nur verschwommen sondern man sieht uach deutlich die Kanteneffekte

wie gesagt habe ich sogar Vektorgrafiken dafür erstellt, gibt es dafür inzwischen vielleicht einen guten Shader oder so? kann doch nicht sein dass das alles ist was man aus Texturen rausholen kann...

Link zu diesem Kommentar
Auf anderen Seiten teilen

erzähl mal was super sampling ist ^^

ich bin halt nicht sehr zufrieden. Überleg doch mal ob du als Spieler diese Steine jetzt sehen könntest. Ich glaube ja nicht. Auf mobil würdest du wahnsinnig werden, da ist es ja noch kleiner und noch verpixelter

hier mal im verkleinerten Modus wie es auf mobil der Fall wäre

grafik.png.d4b5af3f6890ad816719c9473ae0ebb3.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Kokujou:

erzähl mal was super sampling ist ^^

Spiel wird auf höherer Auflösung gerendert und dann runterskaliert, um auf die eigentliche Auflösung des Spiels zu passen. Ist recht teuer, aber dafür hast du da (quasi) anisotropische Filterung und Antialiasing gratis mit drin.

Stell dir vor, du hast ein dünnes Objekt... z.B. eine Wäscheleine im Bild. Die ist aufgrund des Abstands der Kamera weniger als ein Pixel breit. Durch Rundung auf ganze Pixel gibt's dann Stellen, an denen die Leine zu sehen ist und andere, wo sie nicht zu sehen ist. Dasselbe gilt bei Pixeln auf Texturen. Solcherlei Fehler äußern sich bei sich bewegender Kamera gerne als Flackern und tauchen prinzipiell in jedem Spiel auf, das eine recht freie Kamera hat und dabei nicht perfektes LODing macht. In Elite Dangerous sehe ich das z.B. oft. Jedenfalls erhöht man mit einer höheren Render-Auflösung die Chance, das ein kleines Ding noch ein Pixel findet, in das es passt. Dieser Artikel scheint beim Drüberschauen gerade ganz hilfreich zu sein.

vor 2 Stunden schrieb Kokujou:

Auf mobil würdest du wahnsinnig werden, da ist es ja noch kleiner und noch verpixelter

Das ist halt so die Sache... Kleine Bildschirme sind klein. Man kann halt nicht beliebig viele Details gut lesbar auf eine begrenzte Bildschirmgröße schmeißen. Da stößt man an die Grenzen der Physik.

Ich denke, du wirst da in die Trickkiste greifen müssen. Zum Beispiel könntest du von jeder Textur eine Kopie machen und da die Zeichen lesbarer machen... so wie fettgedruckter Text. Ein Shader könnte dann zwischen der normalen und der leichter lesbaren Textur faden. Notfalls kann das auch ein Script, aber dann vermutlich eher ohne schöne Zwischenstufen. Wenn der Stein weiter weg liegt und/oder von der Kamera weg geneigt ist, wird die leichter lesbare Textur benutzt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

umm... auch wennd as jetzt dämlich klingt aber es gibt in Unity wohl nicht zufälligerweise einen freundlichen Knubbel-Knopf wo Supersampling drauf steht? :P Den Effekt seh ich ja dann aber wie schalt ich das jetzt an?
 

Tja... Deine Idee ist vielleicht nicht schlecht. Ich habe die Vektorgrafiken, vielleicht kann ich einfach reingehen und die stroke width erhöhen, vielleicht wäre das eine Idee...

ich hatte ja im Stilen gehofft dass ich irgendwo einen weiteren freundlichen Knubbelknopf mit der Aufschrift "Mach das Bild mal scharf" übersehen habe

Bei einem früheren Projekt war es ja sogar so. Da hieß der Knopf "MipMap" :P

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 21 Minuten schrieb Kokujou:

umm... auch wennd as jetzt dämlich klingt aber es gibt in Unity wohl nicht zufälligerweise einen freundlichen Knubbel-Knopf wo Supersampling drauf steht? :P Den Effekt seh ich ja dann aber wie schalt ich das jetzt an?

Das lass bloß den Spieler bestimmen. Dein Projekt darf keinesfalls darauf aufbauen, dass das an ist. Ist nämlich extrem performance-teuer.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Im Zweifelsfall RenderTexture in gewünschter Auflösung bauen, die Kamera da reinrendern lassen und die RenderTexture dann in das Spiel rendern, zum Beispiel mit einer zweiten Kamera. So hat das der Kollege gemacht (guter Talk übrigens). Eine direkte Einstellung um das so zu machen kenne ich aktuell nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

okay... ich hab dran rumgespielt - wie immer... aber keine spürbare verbesserung... ich hab sogar am antialiasing der rendetexture herumgespielt und fun fact: Es macht die Sache sogar noch schlimmer und verpixelter >.<

100% GPU Last für nichts... schade eigentlich

 

mir scheint außerdem dass antialiasing und mip maps sich gegenseitig ausschließen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nur mal so zwischendurch. Vielleicht habe ich's ja auch überlesen.
Wie sind denn deine Importeinstellungen für die Grafiken?
Schärfste Ergebnisse bekommst du bei RGB24bit oder RGBA32bit. Außerdem den Filtermode auf "Point" stellen.

Solltest du das nicht so haben, dann teste es mal.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also Filtermode Point macht es gleich mal massiv schlechter, darum geh ich jetzt wieder auf Trilinear

grafik.png.3c1f8f51d9612674632a146a5918760c.png

aber ich will ehrlich sein ich hab keine Ahnung was das meiste bedeutet. ich klicke da seit minuten einfach nur durch und gucke ob es mit Haken besser oder schlechter wird^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

vielleicht noch ein paar Beobachtungen:
sRGB aus -> das Muster wird greller, farbiger

MipMaps + NPOT -> verbessert das Bild ebenfalls wieder

-> Filter Mode Bi/Trilinear macht das Bild nochmal schärfer

-> Farbmodus RGBA32 macht kaum einen Unterschied. Das Muster bleibt gleich. komischerweise verändert sich aber etwas am weißen Rand.

Link zu diesem Kommentar
Auf anderen Seiten teilen

im GameView

ich hab übrigens ein experimentelles feature geladen dass SVG Files importieren kann aber da die keine MipMaps unterstützen ist es nur ein haufen pixel :(

kann man nichts machen dass SVG texturen gerendert werden? Ich meine es muss doch möglich sein eine gerade Linie zu zeichnen ohne Kanteneffekt.

Kann man vielleicht irgendwie die Präzision höher stellen oder so?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also:
Unity wandelt Grafiken immer um, wenn sie nicht schon als genutzer Typ vorliegen. Wenn du z.B. eine PSD Datei mit diversen Ebenen und Vectorgrafiken einlädst, dann wird das zu ein ein normales Pixelbild mit einer Ebene importiert. Vectorgrafiken ( Also die Punk-, Winkel- und Füllinformationen) bleiben nicht erhalten.

Um zu sehen, ob eine Grafik gut genug importiert wurde schaust du dir das Ganze im SceneView an. Da siehst du schoneinmal, ob evtl. feine Linien ausbluten oder feine Farbunterschiede zu stark komprimiert werden und zu einer Farbe werden.

Wenn da das Ergebnis ok ist, dann kannste schauen was daraus wird, wenn du das Texturierte Objekt in gewisser Entfernung zur Kamera ist. Also erst jetzt macht der GameView Sinn!

Hat deine Textur weniger Pixel als der Pixelbereich in dem es von der Kamera aus zu sehen ist, dann kann der Renderer das Bild nur irgendwie Weichzeichnen oder es so lassen und grobe Ecken anzeigen, aber keine Informationen aus der Hand schütteln. Es ist ja keine Information da.
Hat deine Textur mehr Pixel als der Ausschnittsbereich, dann muss der Renderer irgendwie schauen wie er es darstellt. Ein echter Pixel deines Screens kann ja nicht mehrere Pixel der Textur darstellen. Somit wird da ein Mischwert erzeugt. Feine Linien, die nebeneinander liegen werden irgendwie verwaschen.
Das gleiche wird auch bei AA passieren. Feine Strukturen der Grafik werden vermatschen.
Also wäre es optimal, dass die Bilder deiner Steine, die du frontal siehst, genau so viele Pixel haben, wie später auch in der gewünschten Auflösung dort zu sehen sind.
Das geht natürlich nur bei 2D. Sobald unterschiedliche Entfernungen im Spiel sind, oder perspektivische Verzerrungen, wird es zu Veränderungen kommen.

Das Bild in deinem ersten Post, ist ja nur knappe 900px X 500px groß. Ist das die Auflösung, mit der du arbeiten willst?
Die ist schon recht klein um so feine Muster auf den Steinen anzuzeigen. Und natürlich sind dann auch kontrastreiche Kanten der Steine mit treppenartigen Pixeln zu sehen.
In der doppelten Auflösung ist das alles schon viel feiner.
Es ist nicht entscheidend, wie groß ein Screen ist, sondern wieviele Pixel er hat. Auf nem kleinen Handymonitor ist zwar alle kleiner, aber trotzdem knackscharf, wenn du die Auflösung des Handys auch unterstützt. Die Dinger können alle mindestens HD-ähnliche  Auflösungen.


 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 48 Minuten schrieb malzbie:

Hat deine Textur weniger Pixel als der Pixelbereich in dem es von der Kamera aus zu sehen ist,

das passiert schonmal nicht. ich hab mir jetzt nämlich mal die SVGs zurück in hochauflösende PNGs konvertiert. meine Grafiken sind ja keine Kunstwerke es sind meistens nur japanische Kanjis oder farbige Kreise. Ihr seht es ja.

vor 49 Minuten schrieb malzbie:

Das Bild in deinem ersten Post, ist ja nur knappe 900px X 500px groß. Ist das die Auflösung, mit der du arbeiten willst?

okay ich verstehe was du meinst. Aber mal angenommen man führt es auf PC aus (cross-plattform ist das Ziel). kann man es so einrichten dass das Spiel eine konstante oder zumindest minimale auflösung hat man das Fenster aber trotzdem verkleinern kann?
Oder wäre das schon Supersampling?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...