Jump to content
Unity Insider Forum

Life Is Good

Members
  • Content count

    671
  • Joined

  • Last visited

  • Days Won

    8

Life Is Good last won the day on March 13

Life Is Good had the most liked content!

Community Reputation

70 Excellent

About Life Is Good

  • Rank
    Advanced Member

Profile Information

  • Gender
    Male
  • Location
    Köln

Recent Profile Visitors

3,887 profile views
  1. Life Is Good

    LOD System - Gedanken

    Klar, jede Menge. Die meisten Studios, die ihr eigenes LOD System implementieren, machen das halt passend zu deren Anforderungen. Ich hab leider weder zu Unity, noch zu UE4 was genaues gefunden. Aber wenn du willst, könntest du ja selber nachschauen wie UE4 das löst, der Code ist schließlich open source. Soweit ich das sehe, gibt es 2 große Ansatzpunkte: - Du hast eine Mesh Funktion, die beim Rendern direkt die Distanz zur Kamera zurückliefert (könnte gut sein, dass Unity das intern macht) - Du nutzt eine Datenstruktur, mit der du deine Welt in Bereiche einteilst, die du dann komprimieren kannst Ersteres ist vermutlich raus, wenn du nicht gerade deine eigene Renderpipeline schreiben willst. Datenstrukturen gibt es jede Menge für sowas. Das Stichwort hier ist: Spatial Data Structures Ein paar Beispiele: - Octree - KD-Tree - B-Tree - Bounding Volume hierarchy etc. Für normale Meshs würde ich das vermutlich nutzen, ja. Um eine andere Lösung würde ich mich erst kümmern, wenn ich damit an die Grenzen komme. Hier eine gute Präsentation, wie die solche Probleme in Infamous: Second Son angegangen sind. https://archive.org/details/GDC2014Bentley
  2. Life Is Good

    LOD System - Gedanken

    Ich hab noch nie mein eigenes LOD-System geschrieben(zumindest nicht für polygon Meshs) aber was du da machst klingt so, als würdest du eher das Gegenteil erreichen. Dass du bei 330 Collidern keine Framedrops hast, bestätigt kein gutes Ergebnis. So eine moderne Engine sollte locker ein paar zehntausend collider ohne probleme handhaben können. Das heißt aber auch nicht, dass was du da machst effektiv ist. Du hast schon allein dadurch einen riesen Overhead, dass jeder dieser Trigger OnTriggerExit und OnTriggerEnter implementiert. Auch in der Innenstadt würde ich mal vermuten, dass der Fall, dass ein Gebäude nicht ganz aber soweit verdeckt ist, dass du ein geringeres Detaillevel anzeigen willst, ziemlich selten ist. Ich gehe davon aus, dass deine Methode nicht wirklich nach oben skaliert. Dein CPU Overhead gleicht vermutlich wieder die gesparte GPU Zeit aus / übersteigt sie. Aber wenn du es genau wissen willst, schalt den Profiler an ¯\_(ツ)_/¯ Klingt übrigens nach dem typischen Indie-Problem. Statt das tatsächliche Spiel zu entwickeln, arbeitet man an Zeug drumherum, das man gar nicht braucht.
  3. Life Is Good

    Bild -> Terrain

    Kommt drauf an. Willst du Unity's Terrain System nutzen, oder einfach bloß ein Mesh draus generieren ? Im 1. Fall willst du daraus vermutlich ne Heightmap machen. Also deine Grafik auslesen, in ne Heightmap schreiben und die aufs Terrain werfen. Im 2. Fall könntest du ein Grid über die Grafik legen und Marching Squares drüber laufen lassen. Ist beides wohl nicht so ohne weiteres
  4. Ich find die Grafiken toll! Sieht gut aus.
  5. Life Is Good

    NavMesh Agent - die Technik dahinter

    Hiermit kannst du mehrere NavMeshs in der selben Szene haben: https://github.com/Unity-Technologies/NavMeshComponents (Falls das noch nicht mit Unity mitkommt, hab das NavMesh schon ne Weile lang nicht mehr benutzt) Es schneidet einfach die Fläche raus, die dein Hinderniss besetzt. Unter Umständen kann das dazu führen, dass es neuberechnet werden muss, ja. Ich glaube aber nicht, dass das gesamte NavMesh neuberechnet wird. (ich hab's aber auch nicht getestet) NavMeshs sind aber generell auch eher weniger für dynamische Umgebungen geeignet. Das letzte was du machen willst, ist 1250 Trigger nur dafür in deiner Szene zu haben Du kannst also entweder einfach das NavMesh nutzen, normale Waypoints selbst überall in deiner Welt verteilen oder du musst dich nun mal mit Pathfinding auseinander setzen. So ein Open World Spiel entwickelt sich nun mal nicht von selbst!
  6. Life Is Good

    Bitselect bei Floats - ComputeShader

    Schon. Aber bei float haben die jeweiligen bits nun mal ne andere Bedeutung. Ich weiß gerad gar nicht, ob es Unions in Unity HLSL gibt (ich glaube schon), aber aus der C Welt wird gerne ein kleiner Trick für sowas angewendet: typedef union { unsigned int i; float f; } u; u.f = 10.5; // Member von Unions teilen sich den selben Speicherort. // u.i greift nun also auf den Speicher von u.f zu. /* bitwise Vergleich von u.i und deinem anderem Zeug. */
  7. Life Is Good

    NavMesh Agent - die Technik dahinter

    https://docs.unity3d.com/Manual/class-NavMeshLink.html Klar. Mach was auch immer du für dein Projekt als angemessen empfindest.
  8. Life Is Good

    First Person Shooter - Zoom Umsetzung

    Ich find die Dual Rendering Methode schicker. Wenn's besser klappt, bleib doch gleich dabei
  9. Life Is Good

    NavMesh Agent - die Technik dahinter

    Das NavMesh ist im Grunde bloß eine Sammlung von ganz normalen Knoten, die anhand der Polygone / Vertices deiner Meshs generiert werden. Und dein Agent läuft die dann ganz normal A* mäßig ab. Und ja. Unity kann mehrere NavMeshs miteinander verbinden. Google doch einfach mal rum, was es so alles rund ums NavMesh gibt
  10. Life Is Good

    Speicheroperationen in C#

    Wenn du riesige Mengen an Gras rendern willst, dann musst du dich vermutlich von dem Gedanken entfernen, jedes einzelne Grasdetail im Speicher zu kennen und einzelnt zu rendern. Ich glaube es ist für Gras ziemlich üblich density maps zu generieren und die dann zum Rendern auszulesen. Das Paper hier sieht ziemlich vielversprechend aus (ich hab's selbst bloß überflogen) http://www.kevinboulanger.net/grass.html und das hier klingt auch ganz interessant http://developer.amd.com/wordpress/media/2012/10/i3dGrassFINAL.pdf Ansonsten, versuch so viel wie möglich zusammen zu fassen. Wenn z.B. 1000 Gras details die selbe Farbe haben, ist es verschwenderisch die Farbe 1000 mal im Speicher zu haben
  11. Life Is Good

    Speicheroperationen in C#

    Deine Ergebnisse sind tatsächlich nicht sonderlich überraschend, wenn man sich mal mit Speicherperformance auseinandersetzt. Obwohl in den vergangenen Jahren CPUs / GPUs deutlich schneller geworden sind, ist die Performance von Speicher im Vergleich bloß minimal angestiegen. (Siehe angehängte Grafik) Nichts davon kann man übrigens wirklich C# Speicheroperationen nennen, denn C# implementiert überhaupt keine Funktionen um Speicher zu kopieren. Das macht in den meisten Fällen der GC (in unserem Fall leider der veraltete Boehm GC, zumindest glaub ich, dass Unity da noch nicht aktualisiert hat) Array.Copy und RtlCopyMem hingegen machen interop, schieben deine Pointer also auf die native Seite und kopieren da (Siehe Kernel32.dll CopyKernel) CopyLong macht da nicht so viel Sinn, da du halt weiter den GC zum Speicherallokieren benutzt. Da macht es auch keinen großen Unterschied, dass du dein Zeug direkt zu Pointer umwandelst. (was intern sowieso passieren würde, würdest du es nicht tun) Du könntest da durchaus einen kleinen Bonus kriegen, aber der ist vernachlässigbar. Ich weiß nicht genau was du da treibt, aber 14mb jeden Frame hin- und her zu schieben ist allgemein nicht so praktisch. Idealerweise willst du soviel Speicher wie möglich zusammenfassen und erst beim Rendern wieder auseinander pflücken.
  12. Life Is Good

    Alternative zu Windows 10

    Antivirensoftware richtet mehr Schaden als Gut an, und manche stehen sogar im Verdacht selbst Viren zu verbreiten (siehe Kaspersky) Wenn dein Rechner „übernommen wird“, trenn halt die Internet Verbindung und formatier, was wollen die dagegen machen ? Wenn du die Vermutung hast, dass dein Pc infiziert wurde ist die einzig sichere Lösung die betroffene Festplatte zu formatieren. Regelmäßige Backups sollten doch heutzutage Standard sein und mit SSDs geht das neuaufsetzen mitlerweile auch innerhalb von ner Stunde. Zu den Windows Updates: Ich hab ja nicht gesagt schalt es aus für immer der Vorteil beim ausschalten ist, dass Windows dich nicht nerven wird und keine Zwangsupdates macht. Wenn du soweit bist und wieder updaten willst aktivierst du es halt wieder, lässt die Updates installieren und schaltest es wieder aus.
  13. Life Is Good

    Alternative zu Windows 10

    Ich hatte vor kurzem nen Windows 10 Bug, bei dem der Windows Updater mal eben +200GB große Log Dateien angelegt hat. Das meine SSD da so missbraucht wird fand ich auch nicht so lustig (Interessanter weise hat mich der Bug sowohl auf meinem PC als auch auf meinem Laptop erwischt) Ja. Und dann hat sich Windows dazu entschieden ein großes Update zu starten. Während ich am Flughafen war. Wenn du zu oft später klickst geht das auch nicht mehr :D, siehe Worauf ich hinaus will: deaktivier Windows Updates komplett. Das wird dein Leben leichter machen. Ich glaube VS ist das einzige Microsoft Programm dass ich aktiv nutze. Das läuft bei mir soweit ziemlich stabil ¯\_(ツ)_/¯
  14. Life Is Good

    Absinken und Aufsteigen

    Schau dir den 2. Abschnitt deines Codes mal genau an. Ich geh mal davon aus du willst, dass dein Gegner wieder smooth aufsteigt ? Du lässt ihn aber nur steigen solange sinking.y < 0 ist. Außerdem setzt du sinking.y = 100 * Time.deltaTime. Time.deltaTime kann niemals negativ sein, also wirst du beim 1. mal direkt sinking.y > 0 haben. Du willst wahrscheinlich inkrementieren (also +=) statt einfach nur zu setzen (=)
  15. Life Is Good

    Inspector Winkel im Script nutzbar machen

    Schwer zu sagen, das meiste von Quaternion ist auf der nativen Seite implementiert. Du arbeitest bei Rotationen ja aber so oder so mit Quaternionen. (eulerAngles ist ja auch eine Property von Quaternion) Die Euler Winkel, die du da reinschiebst, werden dann ja zu Quaternionen umgerechnet. Sollte also denke ich kein Problem sein. Edit: Ich sag's mal so: Er will ja bloß eine Kamera hin- und her schwanken lassen. Da sollte er schon keine Probleme kriegen Edit 2: Ich seh gerade sogar, in der Manual steht knapp erklärt, warum die Winkel sich im Inspector so komisch verhalten. https://docs.unity3d.com/Manual/QuaternionAndEulerRotationsInUnity.html
×