Jump to content
Unity Insider Forum
  • Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011

GaRv3

Members
  • Content count

    279
  • Joined

  • Last visited

  • Days Won

    2

GaRv3 last won the day on May 5 2015

GaRv3 had the most liked content!

Community Reputation

27 Excellent

About GaRv3

  • Rank
    Advanced Member
  • Birthday 07/01/1980

Contact Methods

  • Website URL
    http://www.garvin-gurbat.de

Profile Information

  • Gender
    Male
  • Location
    Köln
  1. Ich habe schon verstanden, wie das ganze funktioniert. Allerdings glaube ich, dass es schon seit einer ganzen Weile nicht mehr über die RGBA-Kanäle läuft, denn man kann inzwischen beliebig viele Texturen auf ein Terrain "malen". Daher wird - wenn ich das richtig verstanden habe - eben nicht mehr auf die vier Kanäle zugegriffen, sondern Splatmaps genutzt, die in der dritten Dimension (eine je Textur) des Splatmap-Arrays gesetzt werden. Die erste und zweite Dimension (x, y) stellen ja die Position auf dem Terrain, also den "Pixel" der Splatmap dar und sind somit auf je 2048 begrenzt. Das Problem ist genau dieses System. Eigentlich liegt es im Shader. Es geht mit ja nur um Echtzeitmanipulation der Texturen. Ich will zur Laufzeit bestimmte Texturen aufzeichnen und wieder entfernen können. Ich kann die einzelnen Werte der Splatmap zwar problemlos per Script anpassen, allerdings müsste ich eine Kopie der ursprünglichen Splatmaps speichern, um die Änderungen an bestimmten Stellen wieder rückgängig machen zu können. Vermutlich bleibt mir aber nichts anderes übrig... :-/
  2. Hallo zusammen, ich würde über die Texturen meines Terrains gern weitere Texturen legen, die aber anders kombiniert werden sollen. Bei dem normalen Terrain werden die Texturen ja über Alphamaps kombiniert. Das ist grundsätzlich auch ok für mich, aber sie werden einfach ungünstig kombiniert. Die Summe der Alphawerte muss immer 1 ergeben. Ist die Summe höher, entstehen unschöne Effekte. Ich hätte gern die Möglichkeit, einzelne "Layer" auf 1 zu setzen, die dann alle darunterliegenden einfach verdecken. Wenn ich bei map[x, y, 0] = 0.6f; map[x, y, 1] = 0.4f; map[x, y, 2] = 0; nur noch Textur 2 Anzeigen will, muss ich die Werte wie folgt ändern: map[x, y, 0] = 0; map[x, y, 1] = 0; map[x, y, 2] = 1; Möchte ich nun aber wieder zurückwechseln, muss ich die Werte für die Texturen 0 und 1 noch kennen. Andernfalls kann ich Textur 2 nicht einfach wieder ausblenden. Gibt es eine Möglichkeit, dass der Alphawert wirklich nur die Deckkraft der jeweiligen Textur bestimmt und sie damit die darunterliegenden einfach verdeckt? Etwa so: map[x, y, 0] = 0.6f; map[x, y, 1] = 0.4f; map[x, y, 2] = 1; Dann könnte ich die 1 bei Bedarf einfach wieder in 0 ändern und hätte die selbe Texturkombination wie zuvor. Das ganze würde ich gern nutzen, um Details auf dem Terrain ein- und wieder auszublenden. Vielen Dank im Voraus für alle Hinweise! garv3
  3. Listentyp mit schnellem Suchalgorithmus

    Hehe, also ist ein Dictionary praktisch nur eine handlichere Version eines HashTables!? Ich werde erst mal diesen Weg gehen. Vielleicht haut es ja hin. Ich muss halt nur immer eindeutige Hashes erzeugen.
  4. Listentyp mit schnellem Suchalgorithmus

    Hmm, okay.. Bei einem Hashset kann man keine Elemente auslesen. Daher wird es wohl doch ein Disctionary werden... Ich berichte dann
  5. Hallo zusammen, ich habe eine Klasse "KlasseX" in einer Datei "KlasseX.cs", auf welche ich aus anderen Scripts zugreife. Das funktioniert auch einwandfrei. Das Projekt kompiliert problemlos und startet im Player. Allerdings erkennt Visual Studio die Klasse nicht. Die Datei wird zwar im Projektmappen-Explorer angezeigt, die Klasse (als Kindelement der Scriptdatei) wird aber nicht gefunden. Entsprechend wird in den anderen Scripts bei Verweisen auch der Fehler "Der Typ- oder Namespace "KlasseX" wurde nicht gefunden..." angezeigt. Die Codevervollständigung funktioniert entsprechend auch nicht. Das Problem besteht aber halt nur in VS. In Unity werdern keine Compilerfehler angezeigt. Weiß jemand, woran das liegen könnte? Vielen Dank im Voraus! garv3 Edit: OK, hab die Lösung selbst gefunden: Im Projektmappen-Explorer das Projekt auswählen und auf "Aktualisieren" klicken, führt zum Erfolg. Das ist interessant, da ein Schließen und erneutes Öffnen der Projektmappe nicht geholfen hat.
  6. Listentyp mit schnellem Suchalgorithmus

    Ja, das sind alles valide Argumente. Ich glaube, das ganze könnte letztendlich doch etwas komplizierter werden. Sobald ich es komplett durchdacht habe, werde ich hier mal die Klassen und meinen Lösungsansatz posten. Ich denke, dann wird alles ziemlich deutlich. Derzeit habe ich sogar eine Theorie im Kopf, die mit einem einzigen HashSet funktionieren könnte, aber das muss ich erst noch überprüfen. Vielen, vielen Dank schon mal für eure Hilfe!
  7. Listentyp mit schnellem Suchalgorithmus

    Danke für den Denkanstoß! Also erstelle ich drei Hashtables. Aus jedem Objekt erstelle ich dann den jeweiligen Hashcodes und füge es in alle drei Hashtables ein. Bei einer Suche des ersten Typs suche ein oder ggf. zwei mal im ersten Hashtable. Bei einer Suche des zweiten Typs suche ich im zweiten und dritten Hashtable. War das so deine Idee? Grundsätzlich eine gute Idee, obwohl dies natürlich den dreifachen Speicher erfordert. Jetzt stellt sich mir noch die Frage, wie ich eindeutige Hashes erstellen kann. Oder ich nehme HashSets. Die benötigen ja keine eindeutigen Hashes.
  8. Listentyp mit schnellem Suchalgorithmus

    Hi Sascha, Erstmal vielen dank für deine Antwort! Das sieht grundsätzlich auch nach einer schönen Struktur aus. Leider wird diese in meinem Fall nicht funktionieren. Das liegt im Wesentlichen an zwei Problemen: 1. x und y sind keine Zahlenwerte. Hier habe ich in meinem Beispiel wohl unschöne Bezeichner verwendet. Es handelt sich dabei um eher komplexe Datentypen bzw. u.U. Instanzen anderer Klassen. Daher kann ich leider nicht mit der Summe der beiden Variablen vorsortieren. Das könnte ich aber theoretisch über Hashwerte lösen. 2. Viel entscheidender ist, dass ich x und y (und deren Summe/Hash) eben nicht immer kenne. Im Fall meiner ersten Beispielsuche kenne ich sie, aber im zweiten Beispiel ist nur einer der beiden Werte (suche.x) bekannt. Dieser muss in x und y der Objekte in der Liste gesucht werden, aber unabhängig vom jeweils anderen Wert. Als Beispiel habe ich obj01 - obj07 angenommen, die jeweils in x oder y der Listenelemente stecken können. Hier die Beispielliste (Die Nummerierung ist nur zur Veranschaulichung. Die Liste muss nicht sortiert oder sortierbar sein!): 1. x=obj05; y=obj02 2. x=obj01; y=obj04 3. x=obj04; y=obj03 4. x=obj07; y=obj01 5. x=obj06; y=obj07 6. x=obj04; y=obj01 Beispielsuche 1: "Finde alle Elemente mit obj01 und obj04, also "(x == obj01 && y == obj04) || (x == obj04 && y == obj01)". Das ergibt dann die Einträge 2 und 6. Beispielsuche 2: "Finde alle Objekte, die obj04 enthalten, also "x == obj04 || y == obj04". Das ergibt die Einträge 2, 3 und 6. Hier ist der jeweils andere Wert vor der Suche nicht bekannt. Dadurch kann ich auch nicht nach einem vorher definierten Hasch (oder einer Summe) vorsortieren. Hast du (oder jemand anders) vielleicht noch eine Idee? Dank und Gruß garv3
  9. Hallo zusammen, ich suche derzeit nach einem Listentyp, der auch bei extrem großen Datensätzen sehr schnell zu durchsuchen ist. Grundsätzlich bietet sich hier ja ein HashSet mit überschriebenem HashCode und angepasster Equals-Methode an. Allerdings reicht mir die Equals/Contains-Suche nicht, da ich unterschiedliche Suchen durchführen muss, die teilweise auch mehrere Ergebnisse liefern sollen. Es können mehrere Mio. Objekte in der Liste sein. Hier ein vereinfachtes Beispiel: In der Liste sollen Objekte einer Klasse gespeichert werden, die die zwei Member-Variablen x und y enthält. Die Objekte sind alle unique. Das heißt, es gibt niemals mehrere Objekte, in denen x und y übereinstimmen (a.x == b.x && a.y == b.y). Auch invertiert sind diese niemals gleich. "a.x == b.y && a.y == b.x" gibt es also ebenso niemals. Allerdings kann es viele Objekte geben, in denen x ODER y identisch sind. Nun muss ich folgende Suchen möglichst performant durchführen können: 1. Finde ein Objekt, in dem "(x == suche.x && y == suche.y) || (x == suche.y && y == suche.x)" -> Das Ergebnis ist ein einzelnes Objekt. 2. Finde alle Objekte, in denen "x == suche.x || y == suche.x" -> Das Ergebnis können mehrere Objekte sein. Welchen Listentyp wähle ich hierfür? Vielen Dank im Voraus und beste Grüße garv3
  10. Ja, so ähnlich habe ich es nun gemacht. Die Abschnitte des Weges werden über einen Pathfinding-Algorithmus generiert, dann auf die aktuelle Basemap geschrieben und zum Schluss der benötigte Teil der Alphamaps ersetzt. Das ganze geht jetzt auch innerhalb eines Frames ohne übertriebene Ruckler. Falls jemand das gleiche Problem hat, kann ich das ganze auch gern noch mal im Detail erläutern.
  11. Ich habe die Projektmappe nach SaveAssets durchsucht und keine Treffer erhalten. Allerdings werden die Änderungen des Terrains immer gespeichert. Soll heißen: Wenn ich im Play Mode (ingame) Änderungen an den Alphamaps vornehme, sind diese auch noch nach beenden des Play Modes vorhanden. Der Lag (ca. 60 - 100ms) kommt übrigens von Terrain.GenerateBasemap. Warum ich häufig Änderungen an den Alphamaps vornehmen muss? Bei dem Spiel handelt es sich um ein Aufbaustrategiespiel und dort werden unter anderem Wege gebaut, Geländeeigenschaften geändert usw. Das geschieht nun mal zur Laufzeit während des Spiels und das alles mit Meshes abzubilden, wird nicht nur kompliziert (aufgrund des unebenen Terrains), sondern dann sicherlich auch kritisch bezüglich des Poly-Counts.
  12. Ich hole den Thread mal wieder hoch, da ich mich derzeit mit dem selben Problem herumschlage. Ich möchte ingame Pfade auf das Terrain zeichnen. Das habe ich per TerrainData.SetAlphamaps realisiert. Die Pfade sind in einige kleinere Abschnitte unterteilt, da sie über mehrere Grid-Nodes hinweg gezeichnet werden. Entsprechend sind die einzelnen Updates der Alphamaps auf kleinere Bereiche beschränkt. Inzwischen habe ich das ganze sogar testweise in eine Coroutine gepackt, die je Frame nur einen kleinen Bereich der Alphamaps aktualisiert. Hierbei habe ich natürlich keine Hänger im Sekundenbereich mehr, dafür baut sich der Pfad aber halt sichtbar stückweise auf, was ich ja eigentlich nicht möchte. Weiterhin ist die Performance trotzdem absolut inakzeptabel. Das Spiel läuft bei mir mit 60-70fps. Sobald ein Weg gezeichnet wird, sinkt die Framerate auf ca. 6-8fps. Gibt es hierfür inzwischen eine bessere Lösung?
  13. Insgesamt wirklich ziemlich gut. Nur die Holztextur sieht irgendwie nicht ganz so bombe aus.
  14. Hallo zusammen! Ich suche derzeit nach einer Möglichkeit, ein eigenes Beleuchtungssystem zu realisieren. Dazu möchte ich die Vertex Color nutzen, die ich über mesh.colors setze. Dabei soll das eigentliche Beleuchtungssystem komplett ignoriert werden. Die Maps des Materials sollen ganz normal für die Texturen benutzt werden, aber die Helligkeit und Farbe der Beleuchtung sollen einzig und allein über die Vertex Colors gesteuert werden. Hat da jemand einen Ansatz für mich? Dank und Gruß garv3
  15. Color Palette Shader?

    Ja, das dachte ich mir schon fast. Ich werde sehen, ob sich der Aufwand für mein kleines Projekt lohnt. Aber ich danke dir vielmals für die Hilfe!!!
×