Bei Material soll erkennen ob innen oder außen von, z.B. einem Gebäude, bzw. z.B. vom Regen erreichbar.

  • Hallo zusammen.


    Ich glaube, ich habe mich gerade seit Wochen mit meinen Materialfunktionen verrannt.


    Und zwar folgendes. Ich habe ein paar Materialfunktionen geschrieben, die ich in mein normales Material packen kann, um zum Beispiel Nässe, Schnee usw., als Effekt zu bekommen.


    Sieht auch klasse aus, das macht auch keine Probleme.


    Nur, jetzt habe ich das Ganze mal in einem richtigen Level getestet, vorher nur im Materialpreview, und da ist mir dann ein großes Problem aufgefallen. In dem Moment wo ich ein Material habe, in dem zum Beispiel die Funktion Nässe vorhanden ist und aktiviert wird, ist es überall Nass, egal ob Außenwand, Innenwand, vom Regen getroffen, oder was auch immer.


    Einige der Funktionen haben bereits eine VertexNormalWS-Node, um eben halt nur oben dargestellt zu werden. Dass man über entsprechende Masken auch die Seiten ansprechen kann, auch kein Problem. Nur, das funktioniert ja nur Richtungsgebunden, es sei denn, da gibt es irgend einen Trick, den ich noch nicht kenne.


    Deswegen, gibt es da irgend einen eleganten Trick, dass nur die Seite von dem Material sich ändert, die auch wirklich betroffen ist? Oder habe ich mich da jetzt total verrannt und muss da noch einmal komplett drüber?

  • gibt es da irgend einen eleganten Trick, dass nur die Seite von dem Material sich ändert, die auch wirklich betroffen ist?

    Sind die Teile vom Spieler baubar oder setzt du es alles selber ins Level und es kann nicht umgesetzt werden?


    Wenn letzteres, dann versuchs mal mit Vertex-Painting:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Du malst sozusagen eine Maske aufs Mesh und im Material wird dann per Lerp nur da wo die Farbe gemalt wurde, die Nässe angezeigt ^^

  • Sind die Teile vom Spieler baubar oder setzt du es alles selber ins Level und es kann nicht umgesetzt werden?

    Die Idee ist gut, wäre ja so ähnlich wie beim VertexNormalWS, nur halt von Hand und etwas präziser vielleicht noch. Aber was die Spieler angeht, sowohl als auch. Der Spieler soll schon die Möglichkeit haben sich auch sein Eigenheim bauen zu können.


    Ich habe schon überlegt, ob Partikel nicht die Farbkleckse auf dem Material hinterlassen könnten, weil die kann man ja mit Kollision versehen, eine Maske darüber, die sich beim Treffer dann farblich entsprechend ändert oder so. Aber so richtig habe ich da noch nichts gefunden, was da funktionieren könnte.


    Alternativ könnte ich natürlich auch noch ein Schimmelmaterial bauen, aber ich glaube, das wäre auch Käse. ^^

  • Könntest du deine Wände nicht zB in Innen und Außen Materials trennen?
    Oder wenn du für alles ein großes Master Material hast, dann baust noch einen Switch rein für Außen oder Innen. Dann gibst du deine Außenwand eine Material Instance mit Außen auf True und der Innenwand eine Instance mit False.


    Kannst aber auch zB in Blender mit Vertex Paint die Außenwände Weiß machen und die Innenwände schwarz. Die Vertex Informationen kannst du dann im Material als Maske benutzen.


    Je nach dem wie viele Objekte du schon hast ist beides auf jeden fall mit viel Nacharbeit verbunden. :D

    • Offizieller Beitrag

    Sieht man das rein technisch weißt du ein Material einem oderen mehren Meshes zu. Dann verbraucht dein Material 1 Drawcall.

    Änderst du jetzt eine Attribute des Material zb die Farbe, so ändert sich diese Änderung für das gesamte Material im Speicher. Sprich die Änderungen werden für alle Meshes ausgeführt denen dieses Material zugewiesen wurde.


    Ich hab im SD schon ähnliche Materials programmiert. Man Läd ein Mesh in das Material, man drückt in der UI auf einen Knopf, es werden Automatisch Texturen basierend auf diesem Mesh erstellt.

    So hatte ich mir ein Mesh Generator gebaut der mir fast automatisch alle Texturen für ein Level Generiert.

    Die Support Maps wie Normal, Curvature, AO, Colorid usw werden dabei einfach nur durch das Programm gejagt.


    Wäre natürlich ein Traum wenn man dieses Material nun für alle Meshes verwenden könnte. Für das ganze Level nur ein Drawcall was dass Material angeht doch leider ist dem nicht so.

    Den die Texturen für jedes Mesh müssen Extra gespeichert werden somit braucht jedes Mesh ein eigenes Material wo wir dann wieder bei einem Drawcall pro Mesh sind.

    Performance Sparen tut man so nicht aber die Programmierung ist eine Hilfe beim erstellen der Materials.


    Du könntest jetzt einfach jeder Horizontalen Fläche eine eigene ColorID geben und dort eine Schnee Textur anzeigen lassen. Aber das willst du ja nicht.

    Was du grunde brauchst wär ein verschachteltes Layer basierendes Material.


    Du hast ein Base Material das könnte zb eine Ziegel oder Sand Textur sein und über die müsste jetzt dein Material gelegt sein.

    Jetzt könntest du die Sand textur zb langsam zuschneien oder gefrieren lassen.


    Du müsstest dein Material in jedes Material einbauen, dass du nutzen willst.


    Was die Richtngsgeschichte angeht, ich hatte vor einiger Zeit mal ein Decal Material gebaut. Decals werden normalerweise auch nur in eine Richtung projiziert, aber man kann sie so umbauen das sie zb nur in X und Z Richtung nicht aber in Y Richtung funktionieren.


    Vielleicht kannst du dies ja für dein Material nutzen dort werden mehre Texturen miteinander verschachelt.


    Keine Ahnung ob dich das weiter bringt.


    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • Ja, auch das habe ich schon überlegt. Nur, wenn der Spieler nun sein eigenes Haus baut, aus Wandbauteilen, dann muss ich ihm ja irgendwie markieren, welche Wand innen und welche außen ist. Zum Beispiel die Bauteile für ein Blockhaus oder Fachwerkhaus, die sind innen nicht verputzt und sehen entsprechend gleich aus. Von daher könnte er dann das Teil trotzdem so drehen, dass die Außenseite innen ist und umgekehrt.


    Wenn ich so darüber nachdenke, komme ich gar nicht drumherum irgendwie erkennen zu lassen, ob eine Seite dem Wetter ausgesetzt ist und welche nicht. Und entsprechend muss ich dann wohl eine Kombination finden, ähnlich Butterflys Ansatz, nur halt irgendwie automatisiert.


    Und wenn ich mir so einen Mix vorstelle, vielleicht auch unter Berücksichtigung mit Vertexpainting via Partieltreffer, stellen sich mir nun zwei Fragen, die ein wenig meine Materialkenntnisse überschreiten, weil so weit habe ich mich dann doch noch nie mit Material beschäftigt.


    Ich bräuchte dann eine Vertixpaint-Grundlage für 5 Seiten des Objektes. Also oben, vorne, hinten, rechts und links, unten ist ja egal, da sollte ja nie etwas vom Wetter betroffen sein. Das Zweite ist, wie mache ich dieser Grundlage dann klar, dass an der Stelle eines Partikeltreffers, dann entsprechende4 Maskenfarbe entstehen soll? Gibt es da eine Kollisionsinteraktion, die das ermöglicht? Und es geht ja um verschiedene Elemente, nicht nur Regen, Schnee sollte ja auch möglich sein. Wobei ich das ja über den Wetterzustand regeln könnte. Regen und Schnee wird es dann halt nie gleichzeitig geben.

  • Wäre natürlich ein Traum wenn man dieses Material nun für alle Meshes verwenden könnte.

    Kann man ... indem man Material Instances mit Parametern benutzt ^^


    Wenn ich so darüber nachdenke, komme ich gar nicht drumherum irgendwie erkennen zu lassen, ob eine Seite dem Wetter ausgesetzt ist und welche nicht.

    Vielleicht auch einfach alle Meshes per LineTrace durchtesten, ob und wenn ja, welche Seite außen ist?

  • Vielleicht auch einfach alle Meshes per LineTrace durchtesten, ob und wenn ja, welche Seite außen ist?

    So habe ich Linetrace noch nie benutzt. Bin auch bisher gar nicht auf die Idee gekommen. Aber wie soll mir das helfen zu bestimmen, welche der Seiten nun innen und welche außen ist? Ich habe Linetrace bisher immer so benutzt, um festzustellen, ob zum Beispiel in meine Blickrichtung, ein Hindernis ist, bis zu einer gewissen Entfernung etc. Aber wie stelle ich denn fest, ob sich ein Vertex in einem geschlossenen Raum befindet oder halt nicht, bzw. noch schlimmer, ob da indessen ein Dach drüber ist oder halt nicht?


    Aber ich behalte es mal im Hinterkopf, auch wenn mir noch nicht ganz bewusst ist wie du das jetzt umgesetzt meinst.

  • Aber wie stelle ich denn fest, ob sich ein Vertex in einem geschlossenen Raum befindet oder halt nicht, bzw. noch schlimmer, ob da indessen ein Dach drüber ist oder halt nicht?

    Geht natürlich nur mit nem Mesh mit je einem Material pro Seite.

    1. Du öffnest dein Mesh, fügst 2 Sockets hinzu, die jeweils etwas außerhalb des Meshes platziert sind (je eins pro Seite).
    2. Du holst dir die beiden Sockets im BP, nimmst nen LineTrace der nach oben checkt und wenn ein Dach da ist, ists innen...
    3. Jetzt weißt welcher Socket innen ist und machst auf der Seite das Material für innen drauf.

    Nicht sooo schwer, oder?

  • OK, das werde ich mal probieren. Dauert etwas, weil nun gehe ich erstmal pennen, vorausgesetzt ich kriege das hin mit dem Einschlafen, denn ich habe die ganzen Tage mich nur mit Material beschäftigt und bin inzwischen über 48 Stunden wach. Frei nach dem Motto "6 Liter Kaffee und trotzdem noch nicht müde". Meine Konzentration lässt so ganz geringfügig nach würde ich behaupten.


    Aber ich sag mal Bescheid wie ich es gelöst habe, unter Berücksichtigung aller Vorschläge. Dafür erstmal Danke.