Jump to content
Unity Insider Forum

Zer0Cool

Members
  • Content count

    1,865
  • Joined

  • Last visited

  • Days Won

    132

Status Updates posted by Zer0Cool

  1. Hallo zusammen, bin wieder "am Start", war 6 Wochen "am Erholen" , aber nun schau ich wieder regelmäßig rein ;)

    1. Kojote

      Kojote

      Na dann Willkommen zurück! ^_^

  2. Ich bin ja immer auf der Suche nach hilfreichen Shadern und Tools. Wer ein fließendes Gewässer in sein Spiel einbauen möchte steht denke ich vor einigen Herausforderungen. Zum einen soll es halbwegs natürlich Ausehen aber eben auch nicht viel Performance fressen (siehe Water Assets von Unity).

    Zudem brauch man auch nicht immer gleich einen ganzen Ozean. Oft möchte man nur kleine Tümpel, kleine Flüsse oder einen Wasserfall visualisieren. Wenn die Lösung dann nichts kostet umso besser.

    Folgenden kleinen Fluss (aus der Demoszene) ist mit einem Shader des Tools "Vertex Painter" erstellt. Diesen kleinen Fluss habe ich zudem um eine Reflectionmap angereichert. 

    Das Tool ist leider nicht einfach zu Bedienen, also wenn ihr Fragen habt ...

    Hier ein kleiner Video wie solch ein kleiner Fluss aussehen kann. Da das Ganze nur ein Mesh mit einem Shader drauf ist, ist die Performance Vernachlässigbar. Zudem kann man Flussrichtung, Reflektionen, Farbe des Wassers, Wellenform einstellen.

    Video:
    https://streamable.com/tnw4f


    yPX9ra7.jpg

    1. Thariel

      Thariel

      Es gibt ein krasses Asset dafür, zum schauen, wie es andere machen :) https://goo.gl/qNwr1f

    2. Zer0Cool

      Zer0Cool

      Ja, das kannte ich auch schon, hab's aber nicht gekauft. Aber mal ehrlich, mal abgesehen vom Sound, den zusätzlichen Partikeleffekten (und dem passenden Flussbett) finde ich nicht, daß es optisch besser aussieht.

      Aber klar, für alle "All-In-One-Lösung" und für jemanden der sich nicht durch den obigen Shader "durchwuseln" möchte ist dieses Asset schon recht genial, zum man damit auch gleich die passenden Meshes erzeugen kann und das Abgleichen des Flussmeshes ans Terrain sieht auch interessant aus.

      Muss man das Flussbett eigentlich noch per Hand ergänzen?
      Dies könnte man nämlich auch automatisch erzeugen, indem man die UVs des Terrainmeshes ausliest, die UVs dem generiertem Mesh zuordnet und dem  River-Material-Shader die Splatmaptexturen des Terrains zuweist.
      Oder er schaltet der Material einfach nur auf transparent und man muss das Flussbett selbst ergänzen?

    3. Lonely World

      Lonely World

      Wäre auch interessiert :D

  3. Ich habe heute weiter an meinem Overlayshader gearbeitet und einen kleinen Helfer programmiert, womit man innerhalb der Sceneview direkt auf einen Mesh eine Maske malen kann. Das Ganze ist ein Editorskript welches in eine Textur zeichnet und diese Textur wird dann an meinen Overlayshader übergeben.
    Der Overlayshader stellt die Textur über einen seiner Slots dar. Über dieses Tool soll man dann im Szeneview eine Maskentextur erzeugen können, um Overlays an bestimmten Stellen ein- und auszublenden zu können:

    Video:
    https://streamable.com/9rys8
    https://streamable.com/sb5wf

    Mit dem im Video gezeigten Tool direkt auf den Mesh gemalt:
    E5cG3xb.jpg

    Der Overlayshader selbst kann mehrere Overlaytexturen auf einer Haupttextur abbilden. Dabei kann sowohl die UV0 als auch die UV1 (Lightmap UV) verwendet werden. Das Overlay kann dabei "Linear" oder "Additive" eingeblendet werden, hat ein eigenes Tiling/Offset und eine eigene Normaltextur. Das Prinzip ist ähnlich wie die Detail Albedo des Standardshaders (und seiner Detailmask) nur das man eben mehrere Overlays verwenden kann, die Stärke der Overlays bestimmen kann (Opacity) und den Overlaymode frei wählen kann. Ansonsten entspricht der Overlayshader dem Standardshader (PBS Surfaceshader).
    Zudem habe ich den Overlayshader nun noch um Vertexfarben erweitert. Damit kann man nun anhand der Vertexfarben ebenfalls die Overlays Ein-  und Aus- oder Überblenden

    Overlayshader:
    KyxzakTg.png


    Definition einer Kante anhand von Vertexfarben (= schwarze Streifen) an der die Overlays ausgeblendet werden sollen:gsTWzo9.png

    Ergebnis (ausgeblendetes Overlay im Bereich der Kante):

    JtkkSh3.jpg
     

    Mal ein Beispielbild einer kompletten Wand die mit 2 Overlays "verziert" wurde:
    7lwfBaY.jpg

    Bilder (c) by Kojote ;)

    1. Zer0Cool

      Zer0Cool

      Ich habe den Mask Painter heute weiter verfeinert, hier einmal ein typischer Anwendungsfall. Man hat eine Overlaytextur auf einer Wand und möchte bestimmte Bereiche dieses Overlays ausblenden. Über den Painter wählt man aus, ob man UV0 oder UV1 des Meshes verwenden möchte (und noch andere EInstellungen) und malt drauf los. Der Painter erzeugt beim Malen eine Textur und legt sie zur Visualisierung als Overlay auf den Overlayshader des aktuellen Wand-Materials. Ist man fertig, wird die erzeugte Textur als PNG gespeichert (und der Alpha invertiert). Zum Schluss verwendet man die so erzeugte Textur nun als Maske im Overlayshader (Material) des Meshes.

      VIdeo:
      https://streamable.com/jzhwa

       

  4. So heute einmal mit "Custom-Editoren" beschäftigt, da ich nun doch einzelne "Decorator-Drawer" im Skript herausgeschmissen habe.

    So Sachen wie Logo's und Label-Bereiche und Buttons waren etwas kniffelig. Zudem gibt es verschiedene Layout-Klassen die man in einem Custom-Editor mixen muss, daß hat Unity nicht gut gelöst...

    Hier das aktuelle Ergebnis:
    CjLqAdU.png

    1. Zer0Cool

      Zer0Cool

      Umpf, eine Coroutine zu erzeugen und eine Progressbar für das Editorskript anzuzeigen (nachdem man einen Button drückt) war ja mal eine weitere Herausforderung oO

    2. Sascha

      Sascha

      Klingt, als hättest du gerne Odin :)

    3. Zer0Cool

      Zer0Cool

      Das wäre bestimmt eine Alternative, aber die internen EditorUI-Methoden von Unity selber können mittlerweile auch schon recht viel, man muss nur immer die richtige Methode finden und wissen wie man sie richtig einbaut..., was halt unschön ist, es gibt mittlerweile 4 Klassen womit man UI-Elemente zeichnen kann, es wäre besser Unity hätte alles in eine Klasse zusammengefasst, so ist man immer am Suchen, welches Layoutelement man über welcher Klasse darstellen muss...

      Mittlerweile funktioniert aber alles über eine Art "Autolayout" (wenn man die richtige Klasse verwendet), was das Erstellen der UI sehr erleichtert.

  5. Sieht interessant aus:

     

    1. Tiwaz

      Tiwaz

      Ja find ich auch, will den unbedingt sehen, seit ich den Trailer das erste Mal im Kino gesehen hab ^^
      Es besteht natürlich auch immer eine Gefahr, dass ein Film (grade wenn er optisch so aufbereitet ist) dann eigentlich ziemlicher Mist ist aber das wäre mir bei dem tatsächlich vollkommen egal :D 

  6. So mal wieder ein Update zu dem Grasrenderer an dem ich immer noch arbeite. Ich habe noch einmal das Wegdrücken des Grases durch den Spieler (in dem Fall ein Ball) überarbeitet. Im Video habe ich das Gras zudem auch einmal mannshoch generiert, damit der Effekt besser wirkt. Weitere Fortschritte im Projekt sind, daß ich nun die Graspositionen des Unityterrains auslesen kann und mit diesen den Grasrenderer "füttern" kann. Es gibt aber immer noch viel zu tun, unter anderem muss ein Paging für das Auslesen der Positionen des Unitygrases eingebaut werden.

    So viel Spaß damit, ich hoffe ich bin nicht zu schnell gerollt ;)
    https://streamable.com/zynfr

    1. Show previous comments  6 more
    2. Zer0Cool

      Zer0Cool

      Ist noch nicht "eingebaut", wäre aber ein nettes weiteres Feature, ich habe sowieso alle Positionen aller Grasdetails permanent im Speicher, daher lassen sich solche Features recht schnell umsetzen. Das Hauptproblem bei so etwas ist immer ein effizienter Speicherzugriff, damit bei einem Entfernen von Gras nicht die Performance droppt...

      Das System "kann" sehr interaktiv sein und trotzdem performant, dies liegt an der verwendeten Technik. Es werden sowieso alle Grasdetails in jedem Frame über ein Speicherarray neu gezeichnet. Manipuliert man dieses Array kann man Instanzen hinzufügen oder entfernen. Man sollte dies eben nur nicht unbedingt jedes Frame tun, da eben auch ein Speicherzugriff Performance kostet.

      Aktuell habe ich eingebaut, daß das Gras bereits auf den Spieler reagiert, dies macht der Shader und kostet daher "fast" keine Performance.
      Bin gerade dabei ein kleines Video zu machen mit einer kleinen UI, welches alle Settings vorstellt, werde ich heute oder morgen mal Hochladen.

      Ich kann dir später gern das System als Betatest zur Verfügung stellen, wenn es dann halbwegs fertig ist, dann habe ich auch gleich einen guten Test des Systems.

    3. Thariel

      Thariel

      Ich weiss nicht, wie du es machst, aber ich hab mal ein Speichersystem entwickelt, das während des spielens permanent alles direkt speichert. Da hatte ich auch das Problem, dass jedes mal die Suche nach dem passenden Objekt im Savegame viel zu viel Ressourcen in Anspruch nahm. Da hab ich sowas wie eine Bibliothek gemacht... Hab die Objekte ein einzelne Savegames aufgeteilt (A1, A2, A3, ...) und je nach Position des Objektes gab es ein zugehöriges File. So ging das dann einigermassen, aber hab das dann sein gelassen.

      Ich würde mich schon für ein Test interessieren :)

    4. Zer0Cool

      Zer0Cool

      Ich habe ja mit Absicht alle Objekte in eine Speicherstruktur gelegt, damit diese als Block an die GPU übergeben werden kann, damit entsteht jeweils nur 1 Drawcall für alle Gras-Instanzen. Jedesmal wenn man Speicherzugriffe macht, Speicher umstrukturiert oder Speicher zusammenlegt verliert man Performance und da dies meist jeweils pro Frame durchgeführt werden müsste, sollte man dies vermeiden solange es geht.
      Wenn ich später wirklich einmal ein Objekt "suchen" muss, dann erledigt das der Compute-Shader. Dieser bekommt sowieso bereits alle Instanzen "in die Hand" und kann solche Filteraktionen extrem performant durchführen. Der Compute-Shader filtert mir aktuell bereits alle Instanzen aus, die nicht im Kamera-Frustum liegen und er filtert Instanzen die Out-of-Range sind.

  7. Bin aktuell immer noch dabei einen Grashader zu schreiben.
    Im Zuge dessen bin ich nun so ziemlich alle Lösungen durchgegangen, wie man Grasdetails performant rendern kann:

    • einzelner Mesh (Performance miserablel)
    • kombinierter statischer Mesh (Performance überraschend schlecht) 
    • instanced Mesh (Performance geht so, aber man kann nur 1024 Meshes in einem Zug rendern)
    • instanced indirect Mesh (Performance bislang die Beste / derzeit verfolgte Lösung)
    • Geometry Shader Mesh (Performance leicht schlechter als instanced indirect)

    Zusätzlich zum Grasshader (instanced indirect) wird ein Compute-Shader verwendet, der berechnet, wo die Positionen die Grasdetails sind und "blendet" diese entsprechend aus, wenn sie nicht im Frustum der Kamera liegen. Der Render-Shader bekommt dann nur die Instanzen die der Compute-Shader ausgibt. Dabei hatte der Compute-Shader mir eine Menge Probleme bereitet.... Zum einen kann er nur exakt vordefinierte Happen verarbeiten, zum anderen verhaut man sich die gute Performance, wenn man bestimmte Dinge macht und nicht höllisch aufpasst (wie das Auslesen der zurückgegebenen Werte eines Buffers). Vermutlich wird hier C#-Code anders compiliert, wenn man bestimmte Zugriffe tätigt.

    Hier nun das Ergebnis. Man sieht wie die Grasdetails im Bereich außerhalb des Kamera-Frustum ausgeblendet werden:
    Video: https://streamable.com/lki7f

    1YlryRA.jpg

    S7nxRDQ.png

    unknown.png


     

    1. Show previous comments  7 more
    2. Zer0Cool

      Zer0Cool

      Spielt aber als Performanceaspekt nur indirekt eine Rolle, da die komplette Arbeit auf die GPU verlagert wurde. Der Drawcall sagt in dem Sinne nur, daß ich nur 1x Daten an die GPU schicke und die GPU dann die Instanzen selbst erzeugt (Merkmal von einem instanced indirect shader). Man bekommt ja auch keine Drawcall oder Tri's Anzeige mehr im, Stats-Window von Unity, da das ganze System komplett an Unity vorbei arbeitet.

      PS: 
      Die FPS-Anzeige im Unity Stats-Window ist komplett nutzlos ... Sie zeigt überhaupt nicht mehr die "echten" FPS im Spiel an.

    3. Kojote

      Kojote

      Zitat

       Der Drawcall sagt in dem Sinne nur, daß ich nur 1x Daten an die GPU schicke und die GPU dann die Instanzen selbst erzeugt (Merkmal von einem instanced indirect shader).

      Und wenn man es aufteilt? Sprich die Daten dann an die GPU sendet, wenn sie auch gebraucht werden? Der Spieler schaut nach vorne. Die Logik gebietet, dass das nächste was der Spieler mit der Kamera sieht entweder der Himmel oder der Bereich links und rechts von der Kamera ist. Wäre es nicht möglich das man diese Daten in der CPU vorbereitet und wenn sich die Kamera dreht einfach die Daten an die GPU abgibt? Würde zwar CPU etwas mehr belasten aber die GPU denke ich bei weiten entlaste.

      Zitat

      PS: 
      Die FPS-Anzeige im Unity Stats-Window ist komplett nutzlos ... Sie zeigt überhaupt nicht mehr die "echten" FPS im Spiel an.

      Na Prima! :D

       

    4. Zer0Cool

      Zer0Cool

      Die Daten "müssen" jedes Frame an die GPU gesendet werden (systembedingt). Daher sollten die Daten an die GPU gesendet werden, die "vor" dem Spieler liegen. Daten die seitlich des Kamera Frustum liegen werden durch meinen Computershader "herausgenommen".
      Ich habe vor die Daten fürs Terrain in einem Speicherblock zu halten und dieses Fenster aus diesem Block pro Frame herauszukopieren (wenn sich die Kamera bewegt hat). Ich hoffe dies ist die beste Lösung. Kommt aber darauf an, wie schnell ein kleinerer Array-Speicherblock aus einem großen Array "herausgeschnitten" werden kann...

      Ich kann nur jedem empfehlen ein FPS-Counter in sein Spiel einzubauen, hier ein FPS Counter mit minimalstem Performanceimpact, welcher die aktuelle FPS anzeigt die auch tatsächlich erreicht wird. Von mir auf's Notwendigste reduziert ;)
       

      using UnityEngine;
      using System.Collections;
      
      public class FPSDisplay : MonoBehaviour
      {
      
          int framesAccumulated;
          int framesFinal;
          float oneSecondTimer;
          public Vector4 RectData = new Vector4(0, 0, 66, 26);
      
          void Update()
          {
              framesAccumulated += 1;
              if (Time.time > oneSecondTimer + 1)
              {
                  framesFinal = framesAccumulated;
                  oneSecondTimer = Time.time;
                  framesAccumulated = 0;
              }
          }
      
          void OnGUI()
          {
              if (framesFinal > 60) GUI.contentColor = Color.green;
              else GUI.contentColor = Color.red;
              GUI.Box(new Rect(RectData.x, RectData.y, RectData.z, RectData.w), framesFinal.ToString() + " fps");
          }
      }

       

  8. So die 1. Version des Grashaders steht, bin mir aber nicht sicher, ob man dies schon in einem Spiel verwenden kann, da ich mit der Performance noch nicht so ganz zufrieden bin. 20000 Grasmeshes (pro Mesh 27 Tri's / Faces) laufen mit 120 FPS. Ich vermute andere Vegetationssysteme sind da noch schneller. Nach 10 Sekunden kommt der Wind von left, nach weiteren 10 Sekunden von vorn:

    https://streamable.com/ydc0b

    HuqkCZQ.jpg

  9. Grasshader continues:

    Szene mit 20000 Cubes um den indirect instanzing shader zu testen. Es werden 20000 Cubes gerendert ohne Gameobjekte. Diese werden komplett über den Shader erzeugt und tauchen daher noch nichtmal in der Renderstatistik auf:

    image.png

  10. Grashader die 2.:
    Ich habe keinen funktionierenden "Translucent Shader" für Unity gefunden. Ich hatte zwar gedacht das Lux-Shader-Team hätte einen entwickelt, aber der hat bei meinem Gras den Dienst verweigert, zudem kommt er mit etlichen Include-Files (nicht schön wenn man nur einen Shader haben möchte). Also wieder die brauchbaren Teile des Lux-shaders übernommen (Double Sided) und mit der Lightning-Funktion des "Unity Tree Leaf"-Shaders verbunden (dieser funktioniert mit einem normalem Mesh nur bedingt und ist auch nicht doppelseitig, Ursache unbekannt).

    Folgendes Ergebnis soweit:
    - Unity Surfaceshader (PBS) 
    - Transluzentes Licht (Translucent Shader mit einigen Einstellmöglichkeiten)
    - animiert sich selbst ohne Windzone (keine Vertexfarben notwendig)
    - gängig mit einem beliebigen Mesh (muss kein Billboard sein)

    Video (Translucent Effect): 
    https://streamable.com/j721g
    https://streamable.com/8inb9

    KUBcKjU.jpg
    Noch offen:
    - instanziierbarer Shader

  11. Testlauf mit einem Grasshader der nun endlich ohne Windzone und ohne Unityterrain funktioniert. Ich habe diesen Shader aus Teilen des Unity "Tree Creator Leaves" Shader und dem "Grass Billboard" Shader zusammengesetzt. Normal sollte er daher auch ein Translucent Shader sein, aber schwer zu sagen, ob ein wahrnehmbarer Effekt erreicht wird. 
    Ich möchte diesen Shader nun weiter umarbeiten, damit er instanziiert werden kann und ich ihn dann massenhaft auf einem Mesh einsetzen kann.
    Das Mühsame dabei war, daß nirgend irgendwelche Informationen zu den Parameters dieser Shader zu bekommen sind. Zudem musste ich den Shader umschreiben, damit er ohne Vertexfarben klarkommt.

    Video: https://streamable.com/ulptf

    jEtyJ8v.jpg

    1. Tiwaz

      Tiwaz

      Ich hab letztens ein Tutorial zu einem Grasshader mit einem Geometry Shader und einer Point Cloud gesehen. Fand ich extrem nice und benutze ich auch zur Zeit. Habe mehrere tausend Grasbüschel rumgammeln, die auch unabhängig von Windzone und Unityterrain gerendert und auch animiert werden können.

       Wie generierst du eigentlich die Positionen der Grasbüschel?

    2. Zer0Cool

      Zer0Cool

      Ist denke das ist auch eine sehr gute Lösung. vor allem für Billboardgras.Unity hat es in ihrem Adam-Demo mit ihrem Gras auch so gemacht (habs mir letztens mal im Detail angeschaut, leider fehlen meiner Meinung nach sämtliche Hilfstools fürs Erstellen des Terrains, so daß sie uns nur das fertige Terrain und die Shader gegeben haben)...
      Ich möchte aber verschiedene Grasmeshes verwenden, diese bestehen zum Teil aus mehreren Faces und Texturen daher haben ich vor diesen Shader nun in einen instanzed Shader umzuwandeln und das Erzeugen des Meshes in die GPU zu verlagern. Ich habe vor die Positionen des Unityterrains einfach zu übernehmen, später könnte man aber das Gras auch einfach über einen "Meshpainter" auf unterschiedliche Oberflächen auftragen. Für die Positionen muss man die Detail Prototyp-Positionen aus dem Terrain auslesen. Dies hat auch gleich den Vorteil, daß ich die Instanzfarbe und die Instanzgröße und die Instanzworldposition an den Shader (wird in meinem Shader anstellen von Vertexfarben verwendet) übertragen kann.
       

    3. Zer0Cool

      Zer0Cool

      Hab mir gerade mal das 1. Video angeschaut, war interessant wie er die Matrix für DrawMeshInstanced erstellt und daß er auch einen Mesh für sein Gras verwenden möchte, also keine Billboard, sondern 2 Typen mit Inner- oder Outersections. Die Variante mit den Innersections kannte ich schon (allerdings nur mit 2 Quads) die Outersections ist neu für mich, man lernt nie aus. Ich denke dies kann man auch gut für Bäume in der Ferne verwenden. Die Grasmeshes die ich aus einem Asset habe und verwenden möchte benutzen eher so eine Art "verschobene Outersections" ;)

      Beim 2.  Video bekommt man auch gleich einen Pointcloud-Renderer nicht schlecht... Um Minute 20 ist es aber echt böses Shaderhacking ^^
      Nach dem 2. Video: Das ein Geometry-Shader nicht mit einem Surfaceshader zusammen arbeiten soll, da bin ich noch nicht überzeugt von .. Muss mir noch das 3. Video anschauen.

  12. Experimente mit emissiven Materialien. Eine einfache Sphere mit Material:

    https://streamable.com/qo0ub

    dZy5YeS.png

    1. Zer0Cool

      Zer0Cool

      Version 2 mit der Übertragung des Lichtes auf die Umgebung:
      https://streamable.com/cvtix

  13. SwirlEffect mit Parallax-Shader
    inspired by Kojote:
    https://streamable.com/a18w3

  14. Neues Unity Techdemo. Ich muss wohl bei meinem Terrain ein paar Schippen nachlegen xD

     

    1. Show previous comments  9 more
    2. Zer0Cool

      Zer0Cool

      Die Ressourcen sind eine Gradwanderung. Sind schon eine Menge Tri's die da gerendert werden, aber durch die Kamerafahrt haben sie auch immer ein definiertes Occlusion Culling. Die Blickweite ist ebenfalls immer begrenzt. Bei ihren letzen Demo's haben sie wohl nur um die 30 FPS erreicht. Ja, ich denke Sie verwenden sowohl ein Tool fürs massenweise platzieren von 3D-Decals und auch ein Vertex-Paint-Tool. Sie tragen die 3D-Decals aufs Terrain auf (Steine / Äste / kleinere Objekte), platzieren größere Objekte wie Baumstämme, vertrocknetes Holz einzeln und pinseln dann noch einmal über alle platzierten Objekten mit einem Vertex-Painter-Tool (so würde ich es jedenfalls machen).

    3. Kojote

      Kojote

      Klingt kompliziert! :o

    4. Zer0Cool

      Zer0Cool

      Viele neue Erkenntnisse heute gewonnen:

      • "Tree Creator"-Shader Bäume funktionieren in Windzonen auch ohne Terrain
      • der "Tree Creator"-Shader ist ein "Translucency"-Shader, der der "Tree Soft Occlusion"-Shader nicht
      • "Tree Soft Occlusion"-Shader Bäume funktionieren in Windzonen ohne Terrain nicht
      • ein "Custom-Baum" habe ich nur mit dem "Tree Soft Occlusion"-Shader zum Laufen bekommen
        daher wäre es ggf. sinnvoll den "Tree Soft Occlusion" umzuschreiben
      • Wie die Auswirkung des Windes getrennt auf Blätter und Bäume beim "Tree Soft Occlusion"-Shader geregelt werden kann ist unklar
  15. Ich hatte mit J3nsis zusammen an einem kleinen Controller gebastelt für eine 1st person view des original Ethan third person controller von Unity.
    Dabei kamen einige Problem auf, unter anderem verwendet dieser Controller ja den CC als Komponente und wenn man nun Ethan einfach eine Waffe in die Hand legt, dann haut er die Waffe beim Schlagen einfach durch die Wände durch.
    Im Endeffekt habe ich nun eine Schlaganimation, eine Axt-Animation und IK vermischt. Wir hatten komplett ohne Schlaganimation angefangen, dies ging auch, da die Bewegung der Axt über eine selbst erstellte Axt-Animation gesteuert wurde. Die Hand von Ethan wird dabei über IK in Position gehalten. Mir gefiel nur der Mix aus Idle-Animation und der Schlaganimation nicht so ganz, also hatte ich Ethan noch eine Schlaganimation hinzugefügt. Fürs Schlagen wird nun die Schlaganimation und die Axtanimation vermischt. Die Hand folgt dabei der Axtanimation und Ethan spielt eine passenden Schlaganimation ab. Ok, man hätte es auch komplett ohne Axt-Animation machen können, aber dann kann man nie steuern, wo genau die Axt sich befinden soll, nämlich vor dem Kopf.
    Weitere Probleme hatte ich mit dem Clipping des Body's von Ethan. Hierfür musste ich den Originalcontroller leicht modifizieren, damit die Kamera immer schön vor dem Gesicht bleibt. Zudem wird die Kamera nun teilweise über den Bone der Spieleranimation gesteuert, was wie ich finde eine sehr schöne Dynamik erzeugt. So hier das Ergebnis:
    Video: https://streamable.com/4xvx5

    Vorläuferversion ohne Schlaganimation: https://streamable.com/99dax

  16. Feature "Wolkenschatten auf dem Terrain" und ein kleines Experiment mit der Drehung des Kopfes (und Rumpf) eines Charakters auf ein Ziel (hier die Kamera):
    https://streamable.com/68h6h

    Die Musik ist von unserem Komposer "Daniel Larsen".

  17. Durch Zufall drauf gestoßen xD

     

  18. Ich bin gerade noch ein wenig am experimentieren mit dynamischen Haaren in Unity. Ich verwende dabei die Cloth-Komponente. Leider musste ich feststellen die Performance dieser Komponente ist mehr als mäßig. Man müsste dies eigentlich auf einen Compute-Shader umstellen. Zudem ist es äußerst schwierig einen geeigneten Hairshader zu basteln. Diverse Shader funktioneren ganz gut, solange das Haar nicht bewegt wird. Verdrehen sich aber die Vertices des Meshes muss der Shader beide Seiten rendern können. Das klappt auch soweit ganz gut, aber wenn man nun noch echte Transparenz ins Spiel kommt und man nicht nur ein Cutout implementieren möchte, dann gehen die Probleme wieder los...

    Naja hier ein ganz passables Ergebnis (die Performance ist leider unbrauchbar wegen der Cloth-Komponente), der Shader funktioniert auch soweit ganz gut bis auf ein paar Glanzeffekte bei zu stark verdrehten Vertices:
    Größeres Bild: https://i.imgur.com/pA3igbu.jpg
    pA3igbu.jpg

    Größeres Bild: https://i.imgur.com/7EBZXjv.jpg
    7EBZXjv.jpg

    Hier ein Statement von Unity bezüglich der Cloth-Komponente:

    Zitat

    The new Cloth component supports the GPU via CUDA internally, but we’ve decided to release this later in the 5.x cycle for several reasons. Firstly, CUDA only works on Windows on NVIDIA hardware, and we have a big presence on Mac & Linux. Secondly, we really want to focus our bug fixing efforts on core stuff first and move on to integrate fancy things after that.

     

    1. Kuxii

      Kuxii

      Cuda, Naja Amd User schauen dan iwie doof aus der Wäsche aber 90+ FPS das is doch eig noch im Rahmen

    2. Zer0Cool

      Zer0Cool

      Naja, dafür musste ich aber die Solver Iterations von 120 auf 1 herunterschrauben und es frisst immer noch 2ms von 10ms CPU Time ... quasi 1/5 der Prozessorzeit.

  19. So, ich habe mal ein kleines Video erstellt, in welchem man den selbst erstellten Test-Charakter sehen kann und das Unity-Terrain an dem ich gerade arbeite. Das Terrain ist noch komplett ohne Details, d.h. Bäume, Gräser, Steine etc. müssen ich noch ergänzt werden:
    https://streamable.com/bf8ua

    1. Show previous comments  2 more
    2. Kuxii

      Kuxii

      :D Aber das ist schon dein Terrain generator?

    3. Zer0Cool

      Zer0Cool

      Das ist eine Mixtur aus verschiedenen Sachen. Das Terrain ist generiert, wird aber noch über das Unityterrain dargestellt, nur die Shader sind komplett ausgetauscht. Wenn ich alles mal fertig habe, kann ich ja mal einen größeren Post erstellen, wo ich die Techniken alle beschreibe :)

    4. Kuxii

      Kuxii

      Aufjeden Fall sehr interessant die ganze sache:)

  20. Ich bin weiter dabei an meinem Terrain zu arbeiten und habe im Zuge dessen auch mal einen zusammengestellten Charakter von Daz 3d nach Unity portiert.

    Größeres Bild: https://i.imgur.com/LBcBuYm.jpg

    LBcBuYm.jpg


    Größeres Bild:  https://i.imgur.com/ppyuiBl.jpg

    ppyuiBl.jpg


    Das schöne daran ist, er ist voll gerigged und man braucht ihn nur noch mit Animationen zu bestücken. Der Import und Export war nicht ohne Probleme, zudem muss man alle Texturen in Unity korrigieren (ansonsten bekommen sie nur eine Albedotextur) und für die Haare musste ich sogar fix einen eigenen Shader erstellen (hier gibt es Problem mit der Renderqueue bei der Transparenz). Die Shader für Augen und Wimpern mussten zudem extra angepasst werden. Wenn man bei der Laufanimation keinen offenen Mund haben wollte musste man auch etwas am Avatar ändern.

  21. Für alle die sich mit "Massive Crowds" beschäftigen, oder einen Weg suchen viele Skinnedmesh-Renderer in Unity performant darzustellen. Ich fand diesen Thread sehr interessant:
    https://forum.unity3d.com/threads/experiments-with-instancing-and-other-methods-to-render-massive-numbers-of-skinned-meshes.447749/

  22. Hab habe gerade eine Routine geschrieben, die überprüft, in wieweit ein Collider einen anderen Collider eindringt. Unity bietet hier leider keine Standardlösung. Ich benötige diese Information um festzustellen, wie weit ein Schild-Item eines Spielers in einen anderen Collider (z.b. Capsulecollider eines Feindes) eindringt. Über die bestimmte Durchdringungstiefe wird dann bestimmt, wie weit der Spieler sich wieder vom Feind entfernen muss, damit sein Schild nicht mehr in das Mesh des Gegners clippt.
    BVBbwIE.png

    1. Show previous comments  7 more
    2. Zer0Cool

      Zer0Cool

      @JohnnyCash Diese Kontaktpunkte habe ich für die Berechnung schon mit einbezogen, sie  sind aber nur ein Teil der Lösung. Diese Kontaktpunkte sitzen zumeist nur auf der Oberfläche des eintretenden Kolliders, du weißt dann aber immer noch nichts über die genaue Position (Durchdringungstiefe) in Bezug auf den Kollisionspartner. Du kannst die Kontaktpunkte oben im Bild als rote Kugeln sehen (außer die Kugel von der die weiße Line ausgeht, diese ist berechnet)

    3. John

      John

      Ah.. ok jetztert habe ich es gerafft ;)

       

    4. Zer0Cool

      Zer0Cool

      So hier mal die Routine in Aktion. Sobald das Schild des Charakters in den Gegner hineinclipped, fängt der Spieler an automatisch so auszuweichen, bis der korrekte Abstand wieder hergestellt ist und das Schild wieder vor dem Collider des Gegner positioniert ist. Dies ist notwendig, damit der Spieler mit dem Schild ordentlich blocken kann und der Gegner nicht hinter das Schild schlägt:
      https://streamable.com/ukka2

  23. Neues Video von unserem RPG "Twin Destiny":

     

    1. Zer0Cool

      Zer0Cool

      Ist nicht viel oder lang, aber unsere Designerin wollte mal einen Teil ihrer Arbeit präsentieren. ;) Ich hoffe es gefällt Euch.

  24. Ganz netter Vergleich:

    1. Show previous comments  3 more
    2. Tiwaz

      Tiwaz

      Ich find's in Unity ehrlich gesagt hübscher.. aber mir zeigt der Vergleich eigentlich nur, dass man mit Unity in der Lage wäre grafisch mit der UE4 mitzuhalten. Oke UE4 hat höhere FPS, dafür deutlich instabiler und wenn man mal ehrlich ist, ist es für die meisten Entwickler(studios) ohnehin irrelevant, weil man sowieso nicht an solche Qualitäten kommt. Sei es aus mangelndem Können, Geld oder Zeit. Und die Textur-/Lichtqualität ist auch nicht immer alles was bei der Grafik zählt.

    3. Sleepy

      Sleepy

      Man vergleicht ja auch keinen Fiat Polo mit einem Ferrari oder ein Ferrari mit einem Porsche.

       

      Irgend einer ist immer schneller aber zu letzt entschiedet immer der Preis den sonst würde ja jeder Ferrari fahren wenn Ferrari wirklich bessere wäre.

      Ich glaube in Unity ist die Szene einfach sehr Nackt und man muss Shader usw dazu nehmen in der UE4 ist da vieles schon aktiviert und man muss gegeben falls erstmal alles rauskicken was man nicht braucht.

    4. Sleepy

      Sleepy

      Wir haben dieses Jahr auf dem Global Gamejam mit der UE4 entwickelt un wir hatten riesen Probleme bei der Zusammenarbeit und diverse Bugs die es wohl erst seit der Version 14 gibt. Wäre heute der Jam würde ich lieber Unity übernehmen auch wenn Unity keinen Machs geil Button hat.

       

×