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

Zer0Cool

Members
  • Content count

    971
  • Joined

  • Last visited

  • Days Won

    72

Zer0Cool last won the day on November 13

Zer0Cool had the most liked content!

Community Reputation

208 Excellent

6 Followers

About Zer0Cool

Contact Methods

  • Website URL
    http://https://www.facebook.com/huginmuninstudios
  • Skype
    zer0f0rce

Profile Information

  • Gender
    Male
  • Location
    Germany

Recent Profile Visitors

2,401 profile views
  1. C# Klasse oder Objekt? Verständnisproblem

    Sehe ich hier aber nicht: https://docs.unity3d.com/ScriptReference/Input.html
  2. destroying game objects in array

    Hi, i would use a fifo queue and not an array for this: https://msdn.microsoft.com/de-de/library/system.collections.queue(v=vs.110).aspx Here you add a new object by: https://msdn.microsoft.com/de-de/library/system.collections.queue.enqueue(v=vs.110).aspx and you get the "oldest" object by: https://msdn.microsoft.com/de-de/library/system.collections.queue.dequeue(v=vs.110).aspx
  3. Du solltest eine Auflösung finden, die die Auflösungen deiner Zielgeräte möglichst breit repräsentiert. Die modernen Smartphones haben eine Auflösung von "1920 × 1080". Wie gesagt, laut meinen Tests ist folgende Einstellung ziemlich positionsgetreu auch bei verschiedenen Auflösungen: "Canvas Scaler" = "Scale With Screen Size" "Reference Resolution" würde ich mal "1920x1080" nehmen (damit ist man auch bei modernen Smartphones mit dabei) "Screen Match Mode" = "Match Width or Height" Match = 1
  4. Du solltest die Auflösung deines Smartphones kennen und diese bereits beim Testen im Editor einstellen (Game Mode). Zudem würde ich empfehlen, du stellst beim Canvas Scaler "Scale With Screen Size" ein und trägst bei "Reference Resolution" die Auflösung deines Smartphones ein. Bei "Screen Match Mode" würde ich "Match Width or Height" einstellen und den Slider ganz nach rechts schieben (= Match Height), hier habe ich oft die besten Ergebnisse erzielt. Du kannst aber auch einmal testen, wie es auf deinem Smartphone aussieht, wenn du den Slider ganz links lässt (nur einen Wert dazwischen würde ich nicht empfehlen). Dies sollte die Position zumindest für dein Smartphone auf den gewünschten Positionen halten, sollte das Seitenverhältnis einer anderen Auflösung stark von ""Reference Resolution"" abweichen, werden sich die Positionen ggf. leider wieder verschieben, aber das lässt sich denke ich nicht verhindern, hier müsste man die Buttons an den Objekten in der 3D-Szene ausrichten. Die "Anchors" der Buttons auf 0.5 / 0.5 / 0.5 / 0.5 und den Pivot auf 0.5 / 0.5 lassen! Andere Anchors führen zu dynamischen Verschiebungen, die in deinem Fall nicht gewünscht sind.
  5. Klasse als Array im Inspector

    Hier mal ein Beispiel: http://catlikecoding.com/unity/tutorials/editor/custom-data/ PS: Nimm bei deiner Klasse mal die Vererbung von Editor weg. Ich denke dann sollte es auch ohne Customeditorklasse gehen: [System.Serializable] public class TextToMesh { public string charstring; public GameObject Gameobject; public float Heightoffset; }
  6. TileMap AlphaBlending

    Die Probleme gingen bei mir erst los, sobald man Treppen und Ecken im Testmuster hat. Nur die vertikalen und horizontalen Übergange zu betrachten führt zu falschen Lösungsansätzen. Ich hab dir ja eine Mail geschrieben, wie man das Ganze umsetzen kann. Man benötigt entweder eine Blendmaske je Textur (diese Maske geht dann über alle Tiles) oder man macht es ohne Blendmasken und verwendet einen Blendshader der über die Vertexcolors (und UV2, UV3) geht. So hier nun beispielhaft das Ergebnis des Lösungsansatzes 2. Die Texturen der Tiles werden als Vertexfarben codiert. Zusätzlich wurde der UV2-Kanal mit verwendet. Insgesamt kann man so nun 6(7) Texturen überblenden. Diese Technik kann die Probleme mit den Treppen und Kanten elegant lösen. Jeder Pixel des Originalbildes ist ein Tile und wird gleichmäßig überblendet. Man kann diese Lösung auf beliebig viele Texturen erweitern, dazu muss man allerdings ein Array an den Shader mit Texturdaten je Vertex übergeben. Folgende Eckdaten der Technik: keinerlei Blendmasken es werden alle 8 Nachbarn beachtet Verwendung der Vertexfarben des Meshes und UV2 der Shader ließt alle Texturen im Fragmentshader aus und vermischt diese anhand der Vertexfarben und UV2 (Performanceimpact sehr gering) Nachteile: Überblendung erfolgt immer Linear keine spezielle Überblendungsmaske zwischen 2 Texturen möglich Ergebnis mit "echten Texturen": Aus der Nähe:
  7. TileMap AlphaBlending

    So Härtetest "Pikachu" Ergebnis: Ohne Überblendung:
  8. TileMap AlphaBlending

    So letztes Ergebnis, ich glaube die Grenzen dieser Technik sind erreicht. Ich habe noch einmal die Kanten verbessert über die Zuweisungen der Vertexfarben der Tiles, aber wie man sieht macht sich die Überblendung der Faces als "Muster" bemerkbar. Der "diagonale" Übergang wird nun aber beachtet. Ich denke man sollte auch noch einmal nach einer Lösung forschen, die die Überblendung über die UVs der Texturen realisiert. Ich dachte das Überblenden über die Kanten der Faces wäre ein idealer Weg, aber bei zu vielen verschiedenen Nachbarn wird die Überblendung etwas "kantig", da eben entlang der Facevertices überblendet wird.
  9. TileMap AlphaBlending

    Ich habe das ganze System noch einmal auf den Kopf gestellt, da die Technik wegen der Interpolation der Vertexfarben (im Fragmentshader) so überhaupt nicht funktionierte, da über die Interpolation ebenfalls andere Texturen in den Übergang hinein interpoliert wurden. Als Beispiel: - Farbe 0.2 für Textur 2 - Farbe 0,1 für Textur 1 und - Farbe 0.0 für Textur 0 Wenn nun von Textur 2 nach Textur 0 überblendet werden sollte, dann wurde über den den Shader die Textur 1 mit hinein interpoliert, obwohl der Übergang eigentlich nur zwischen den Texturen 2 und 0 stattfinden sollte... Ich habe das Projekt und den Shader nun so umgestellt, daß alle Vertexfarben eines Tiles auf die gleiche Farbe gesetzt werden, damit wird im Fragmentshader nur zwischen 2 gleichen Werten interpoliert (was egal ist). Ein Tile hält dabei die aktuelle Farbe und ein angrenzendes Teil definiert quasi den Übergang. Die Programmlogik der C#-Klasse und der Shader ist einfacher als vorher. Ein Tile muss mindestens 8 Faces (2x2) haben, damit ein Übergang gezeichnet werden kann. Ein Problem bleibt immer noch bestehen, der Übergang zwischen Horizontal und Vertical. Hier ist das Ergebnis: Variante 1) Hier werden die vertikalen und horizontalen Texturen einfach zusammengemischt: lerp(mixedColorU, mixedColorV, 0.5); Variante 2: "Dependent Mix" (je nachdem ob Vertikal oder Horizontal überhaupt Texturänderungen vorhanden sind) Beide Varianten haben immer ein Problem mit Kanten, da beim Überblenden nur in 4 Richtungen geschaut wird. Ich vermute, wenn man in alle 8 Richtungen schauen würde, dann könnte man diese Kanten zumindest abschwächen. Allerdings haben wir für die 4 Richtungen bereits die 4 Farbkanäle der Vertexfarben verbraucht. Man müsste die 8 Richtungen nun in diese 4 Farbkanäle verpacken. Aber ich sehe dieses Ergebnis zumindest als Teilerfolg, da nun zumindest die Texturen extrem sauber überblendet werden.
  10. Position in RenderTexture auf Objektbasis ermitteln?

    Ja, ist doch gut. Vielleicht noch drauf achten, das daß Mipmapping bei den Texturen deaktiviert ist (sollte es nicht von Haus aus schon als Sprite markiert sein, da hier denke ich MM bereits ausgestellt ist). Möchte man performancetechnisch den letzten Rest ausquetschen möchte, dann könnte man noch den Billboardrenderer mit einer Textur verwenden, aber das Handling ist etwas kompliziert. Hat den Vorteil das Billboard wird hier über den Shader gedreht und nicht mehr über ein Skript (ich glaube der Renderer selbst dreht das Billboard nicht, aber der Billboardshader ist in Unity verfügbar): https://docs.unity3d.com/Manual/class-BillboardRenderer.html Man weisst dem Billboardrenderer eine Wordposition und ein Asset zu. Das Asset enthält dabei die Definition für die Grafik und den Shader. Das Asset muss man über ein Skript erzeugen (ich habe Code dafür wenn es jemand mal brauchen sollte). Macht aber erst wirklich Sinn, wenn du relativ viel solche kleinen Billboardgrafiken darstellen musst, ansonsten lohnt der Aufwand denke ich nicht.
  11. TileMap AlphaBlending

    Nach einiger Überlegung, ich denke das Problem liegt nicht am Shader, sondern am Setzen der Ränder (Version 1 des Shaders wäre somit richtig). Dafür müssen die Übergange allerdings von der Breite und von der Höhe her aus mehreren Tiles bestehen! Daher hatte ich auch das Grid vergrößert. Nun müsste man an der Stelle wo wir die Vertexfarben setzen die Ränder beachten. Am Rand müssten jeweils die Farben auf den gleichen Wert gesetzt werden: Color colorCodeV0 = new Color(textureMap[left.TileType] * colorScale, textureMap[tile.TileType] * colorScale, textureMap[tile.TileType] * colorScale, textureMap[bottom.TileType] * colorScale); Color colorCodeV1 = new Color(textureMap[left.TileType] * colorScale, textureMap[tile.TileType] * colorScale, textureMap[top.TileType] * colorScale, textureMap[tile.TileType] * colorScale); Color colorCodeV2 = new Color(textureMap[tile.TileType] * colorScale, textureMap[right.TileType] * colorScale, textureMap[top.TileType] * colorScale, textureMap[tile.TileType] * colorScale); Color colorCodeV3 = colorCodeV0; Color colorCodeV4 = colorCodeV2; Color colorCodeV5 = new Color(textureMap[tile.TileType] * colorScale, textureMap[right.TileType] * colorScale, textureMap[tile.TileType] * colorScale, textureMap[bottom.TileType] * colorScale); Der horizontale Rand besteht dabei aus: V1 & V2/V4 und V0/V3 & V5 Der vertikale Rand besteht dabei aus: V0/V3 & V1 und V2/V4 & V5 Soll ein Rand definiert werden, dann müssen diese Ränder den gleichen Farbcode bekommen. Da wird momentan Tiles mit nur einer Vertexkantenlänge haben, können wir keine Ränder definieren. Weil aktuell der Anfang und das Ende einer "Kante" zusammenfallen, bekommen wir quasi 2 Ränder und keinen sauberen Übergang.
  12. TileMap AlphaBlending

    So ganz zu 100% ist der Shader immer noch nicht korrekt. Man kann es sehen, wenn man nur in eine Richtung überblendet. Dabei entsteht beispielsweise eine Überblendung von oben nach unten und beim darüberliegenden Vertex entsteht die selbe Überblendung nochmal. Wie man sehen kann, überblenden die Vertices 2x. Ich habe nun versucht dies zu beheben, leider verschlechterte dies wiederum die Überblendung. Ich habe in den Shader nun beide Varianten eingebaut, so daß man Testen kann.Ich lade dir die Version mal hoch... siehe EMail Am Shader kann man nun Version 1 und Version 2 einstellen. In Version 2 kann man zusätzlich noch einmal die Überblendung für Vertikal und Horizontal getrennt nachregeln. Also die allgemeine Einschätzung: Die Ressourcen sind minimal und der Performanceimpact ist minimal. Das Hauptproblem habe ich oben beschrieben, bei einer kompletten Überblendung (Version 1) wird über 2 Zeilen überblendet. Über den Versuch dies zu beheben verschwindet zwar die doppelte Zeile, aber die Überblendung wird schwächer (verschlechtert). PS: Ich habe die Größe des Grids vervierfacht, ist ein Aufruf in der World class.
  13. TileMap AlphaBlending

    Puh, ich habe es letztendlich doch hinbekommen, ich habe die Interpolation der Vertexfarben mit einbezogen und einen Texturmix damit berechnet: Render mit den original Farbtexturen: Das einzige was nun noch stört sind die "Kanten", aber ich befürchte, daß liegt an der aktuell verwendeten "Technik". Zudem schaue ich mir jeweils nur die 4 umgebenden Tiles an und ermittle damit einen Texturmix, ich vermute wenn man 8 Seiten einbezieht wird der Mix "runder" und die Kanten vermischen sich besser. So sehen die "Kanten" aus der Nähe aus: PS: Würde Unity diese Technik beim Terrainshader verwenden, dann würde es kaum noch ein sichtbares Tiling bei den Terraintexturen geben, aber ihr sehr ja selbst, nicht ganz so einfach das Ganze umzusetzen.
  14. TileMap AlphaBlending

    Hab die Ursache gefunden, der Shader interpoliert die Vertexfarben und dadurch läuft die Bestimmung des Texturindex im Shader schief ... So hier ein letztes Ergebnis, mehr kann ich aus dem Ganzen nicht mehr rausholen: Ich befürchte viel mehr ist aus der Technik nicht mehr rauszuholen. Die Überblendung über die Vertices war zwar eine nette Idee, aber durch die Interpolation der Vertexfarben werden die Texturen nicht sauber getrennt. Vielleicht braucht man eine Routine, die die Texturen zusätzlich anhand der Vertexfarben mischt.
  15. TileMap AlphaBlending

    Ich habe die ganze Szenerie mal vergrößert. Und hier wird ein Problem deutlich, ich verstehe nicht, wo dieser "Sand-Zwischensteifen" herkommt, der unter dem grünen Streifen ist:
×