Jump to content
Unity Insider Forum

Unity 3D C#: Minecraft Klon Tutorial


Recommended Posts

Hey,

 

ich bins mal wieder mit einem neuem Tutorial ^^, diesmal zu einem Minecraft Klon mit Unity 3D. Habe mich diesmal sehr viel besser vorbereitet als in meinen älteren Videos: mit grobem Text den ich sage, den Code vorher ausprobiert und Bilder zur Erklärung angefertigt :). 30 Minuten Bug-Suche im Video ist jetzt Geschichte, die Videos sind je um die 15 Minuten lang und ich versuche dabei auch für Anfänger sehr viel zu erklären. Die Folgen sind auch eher für Anfänger gedacht, ich versuche deswegen den Code auch so klein wie möglich zu halten, damit man sich nicht in tausenden von Zeilen verliert ^^. Ich würde mich sehr über Feedback freuen, da ich gerne wissen würde, wo ich noch Kapazitäten habe :).

 

Hier Folge 1:

 

Hier Folge 2:

 

Folge 3 werde ich vielleicht noch heute aufnehmen, wann ich Zeit habe es zu bearbeiten und hochzuladen weiß ich noch nicht ^^.

 

LG Quester

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier mal ein Paar Tipps:

Wenn du Strg drückst kannst du dein Objekt um eine Unit verschieben.

Mit V kannst du deine Blöcke von Vertice zu Vertice bewegen.

Wenn den Textureatlas den Filter Point auswählst müssten keine unschöne Kanten entstehen.

 

So leid es mir tut, aber so wie du das vorhast den Minecraft-Clon zu erstellen wirst du spätestens beim erstellen des Terrains auf die ersten Performanzprobleme stoßen. :/

Das zu wurde vor kurzem erst ein Thema http://forum.unity-c...__fromsearch__1 erstellt.

Zudem ist es ein wenig umständlich jeden einzelnen Block manuel zu modellieren.

 

An der Qualität des Videos kann ich aber nicht meckern.

  • Gute Vorbereitung
  • verständlich erklärt
  • relativ wenige Füllwörter wie „äm“ oder „äh“
  • kaum Sprechpausen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zu der Terraingeneration hatte ich mir noch nicht sooo viel Gedanken gemacht, klar PerlinNoise, aber wie ich dann die Chunks verarbeiten will weiß ich auch noch nicht ganz. Dachte, dass ich das vielleicht mit Octrees machen könnte, ansonsten halt klassisch mit Listen.

 

Ich wollte aber erstmal das grundlegende Zeug wie Bauen, Abbauen machen, damit man gleich am Anfang Fortschritte sieht, meine jetzige Methode mit den Prefabs werde ich dann später wohl ändern.

 

Danke für die Tipps :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Schau dir mal Meshgenerierung und Multithreading an. Voxel natürlich auch. Wenn du dich dort einarbeitest kannst du die Performance enorm steigern.

 

Deinen Weg hab ich auch schon versucht und bin gescheitert. Hier hast du meinen damaligen Beitrag

http://forum.unity-community.de/topic/9186-minecraft-weltengenerator-wie-richtig-erzeugen/page__hl__minecraft__fromsearch__1

 

In meinem Studium hab ich momentan ein Fach belegt wo es um das prozenduale generieren virtueller Welten in Unity geht. Hab ich gedacht ich Blick gar nicht durch aber wenn mann ein paar Sachen bearbeitet hat wird es für einen immer simpler und man bastelt in immer größeren Größenordnungen.

 

Der Kollege sollte dir mit seinem Tutorial dort weiterhelfen können

http://forum.unity3d.com/threads/tutorial-procedural-meshes-and-voxel-terrain-c.198651/

 

Ich hoffe es hilft dir weiter und freu mich wenn du damit weiter kommst

 

MFG

Felix

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Kollege sollte dir mit seinem Tutorial dort weiterhelfen können

http://forum.unity3d...rrain-c.198651/

Ich will nur mal kurz darauf hinweisen, dass der verlinkte Thread schon sehr alt ist und (wie es auch vom Ersteller angemerkt wird) veraltet ist.

Der Link auf seine aktualisierte Version ist "tot" (man kommt auf seine Homepage aber nicht direkt zum neuen Tutorial), wobei ich die neuere Version im oben verlinkten Thread auch verlinkt habe: (Ich spar mir mal meinen Post mit dem Link zu verlinken und poste mal den direkten Link hier.. Link Link Link)

http://alexstv.com/i.../voxel-tutorial

 

Zu der Terraingeneration hatte ich mir noch nicht sooo viel Gedanken gemacht, klar PerlinNoise, aber wie ich dann die Chunks verarbeiten will weiß ich auch noch nicht ganz. Dachte, dass ich das vielleicht mit Octrees machen könnte, ansonsten halt klassisch mit Listen.

 

Ich wollte aber erstmal das grundlegende Zeug wie Bauen, Abbauen machen, damit man gleich am Anfang Fortschritte sieht, meine jetzige Methode mit den Prefabs werde ich dann später wohl ändern.

Ich würde davon abraten..

Zum einen läufst du Gefahr stuss zu erzählen (hab die Videos nur kurz durchgezapt) und zum anderen verwirrst du deine Zuschauer wahrscheinlich mehr als du ihnen hilfst..

Mach's richtig oder gar nicht.*

 

* Also für dein Projekt kannst du es natürlich machen wie du willst aber als Tutorial würde ich sowas niemals weiterempfehlen..

 

@edit:

Was meinst du eig mit "Chunks verarbeiten"? Und was willst du mit den Octrees machen? ^^

Hast du vor die Chunks in einem Octree zu speichern?

 

Mir stellt sich gerade die Frage warum du Tutorials zu einem Thema machst von dem du offensichtlich noch keine Ahnung hast.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Warum habe ich davon offensichtlich keine Ahnung? Was machst du die Tutorials herunter ohne sie überhaupt ganz gesehen zu haben. Wie ich oben geschrieben habe ist das mit den Prefabs nur für den Anfang und wird später dann alles via Script generiert. Ich habe mehrere Artikel zu Minecraft gelesen, sowohl direkt von Notch als auch verschiedenste andere, die angegebenen Links sind mir alle schon bekannt. Ich kenne verschiedene Algorithmen für die Generierung der Landschaft als auch zur Optimierung, sorry aber das ist für mich alles andere als konstruktiv, sondern nur eine Kritik nach der nächsten.

 

Also noch einmal bevor das hier ausartet, es geht hier nur um die hier gezeigten Videos und nicht um Vermutungen, dass ich später es eventuell so mache, dass es die Performance beeinträchtigt, danke.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Tiwaz

Ich würde davon abraten..

Zum einen läufst du Gefahr stuss zu erzählen (hab die Videos nur kurz durchgezapt) und zum anderen verwirrst du deine Zuschauer wahrscheinlich mehr als du ihnen hilfst..

Mach's richtig oder gar nicht.*

 

* Also für dein Projekt kannst du es natürlich machen wie du willst aber als Tutorial würde ich sowas niemals weiterempfehlen..

Das Motto von Youtube ist (war) „Broadcast Yourself“.

Wenn du die Lust verspürst Videos zu erstellen, dann mach das! Egal wie gut oder schlecht die sind. Auch wenn es um das Thema Programmieren/Scripten geht. Ob das Video für den Zuschauer hilfreich war entscheidet der Zuschauer selbst.

Was bringt es mir, wenn ich mir ein Video anschaue, das vollgestopft mit Fachbegriffen ist und ich nichts verstehe?

 

Zumal sollte man bei einem Tutorial nicht alles 1:1 abtippen, da man irgend wann an den Punkt gelangt etwas einzubauen, zudem man kein Tut findet. Und zack steht man auf dem Schlauch. Man musste sich beim Abtippen keine Gedanken machen und versteht nun nur Bahnhof.

 

In meinen Augen sollte man ein Tutorial nur als Leitfaden nutzen und sich an dem Lösungsweg des Autors orientier und kritisch hinterfragen.Und wenn @QuesterDesura keinen perfekten Code schreibt kann er sich später immer noch verbessert. Es heißt ja nicht um sonst „Aus Fehlern lernt man.“. Sowohl der Zuschauer, weil dieser sich Gedanken über die Änderung macht, und zum anderen er selbst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mittlerweile bin ich eigentlich schon abgehoben genug zu behaupten ich schreib den perfekten Code, kniet nieder! ;)

 

Da sich mein Tutorial wirklich an Anfänger richten soll, möchte ich die Leute eigentlich nicht direkt in der ersten Folge mit Performanceoptimierung belasten, da fang ich lieber erstmal mit kleinen Dingen an wie C# Namenskonventionen oder nicht genutzte Start und Update Methoden rausnehmen ^^. Ich werde definitiv das ganze nochmal in einem späterem Tutorial optimieren bzw. umschreiben, erstmal geht es darum kleine Erfolge zu haben, dass macht meiner Meinung nach die Spieleprogrammierung aus.

 

Hatte gestern noch den dritten Teil aufgenommen, ihn dann heute 1 Stunde editiert und dann gemerkt, dass es irgendwie qualitativ nicht das wahre ist, werde wohl den dritten Teil nochmal überdenken müssen. Werde den nochmal komplett neuplanen + aufnehmen, dauert also noch paar Tage voraussichtlich ^^.

 

Vor allem ist es noch besser wenn du dann in den Videos auch erklärt warum das nicht gut ist oder warum etwas so nicht läuft und kann somit ein besseres Verständnis vermittelt werden.

 

Ich werde es versuchen ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe mir die Videos auch gerade mal angeschaut und muss sagen das mir nach kurzer Zeit schwindelig wurde von der schnellen hin und her Springerei durch Deine Script-Taps, wie auch im Editor.

Beim zweiten Video hatte ich das Gefühl als ob Du selbst von einem Tutorial abkupferst, obwohl ich Dir da nichts unterstellen will!

 

Was mir fehlt und wohl auch dem Anfänger (an den es ja letzten Endes gerichtet ist!?) ist, die Zielsetzung. Das was wird gemacht und was soll dabei heraus kommen?!

Für mich persönlich war alles zu schnell, nur unzureichend erklärt und es klang als ob Du dich selbst nicht wirklich mit dem Thema auseinander gesetzt hast und weisst wohin Du eigentlich willst! (Deswegen das Gefühl das ich dabei hatte, s.o.)

 

Eher unpassend finde ich auch, das Du hier Kritik einforderst aber wenn Sie nicht Deinen Vostellungen entspricht, wird Dein Ton feindsehlig?!

An dem gesagten von Tiwaz kann ich nichts destruktives feststellen, finde er hat es ziemlich getroffen mit dem was er an Kritik anbringt aber das ist nur meine persönliche unbescheidene Meinung.

 

Lerne doch daraus und denke über die Kritikpunkte nach, mal abgesehen davon das er dich bestimmt nicht "runter machen wollte"..., und "hüstel"- vom "perfekten Code" bist Du ganz weit weg! Den gibbet nicht und zeugt eher von Arroganz!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ähm verstehst du keine Ironie? Das mit dem perfektem Code war wohl deutlich zu sehen, dass das sarkastisch ist.

 

Ich kupfer sicher nicht von irgendeinem Tutorial ab, ich habe das alles selber vorher programmiert und da ich keinen zweiten Monitor habe abfotografiert mit dem Handy und muss dort dann immer hin und herscrollen, deswegen stock ich manchmal kurz.

 

Tiwaz hat gar keine Kritik über die jetzigen Videos angebracht, sondern nur über eventuelle Videos, die ich später machen würde.

 

Ich habe eigentlich auch bei beiden Videos am Anfang gesagt, was ich mache, wenn ich mich nicht täusche.

 

Ich schreibe erstmal den Code, und danach erkläre ich ihn, deswegen mache ich es erstmal etwas schneller, ich sage aber auch jedesmal, dass ich es gleich nochmal erklären werde.

 

Ich würde davon abraten..

Zum einen läufst du Gefahr stuss zu erzählen (hab die Videos nur kurz durchgezapt) und zum anderen verwirrst du deine Zuschauer wahrscheinlich mehr als du ihnen hilfst..

Mach's richtig oder gar nicht.*

 

* Also für dein Projekt kannst du es natürlich machen wie du willst aber als Tutorial würde ich sowas niemals weiterempfehlen..

 

@edit:

Was meinst du eig mit "Chunks verarbeiten"? Und was willst du mit den Octrees machen? ^^

Hast du vor die Chunks in einem Octree zu speichern?

 

Mir stellt sich gerade die Frage warum du Tutorials zu einem Thema machst von dem du offensichtlich noch keine Ahnung hast.

 

 

Für mich ist DAS feindselig, einfach nur alles irgendwie aufgreifen und zur Kritik nutzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay wenn das sarkatisch rüber kommen sollte, sorry... hab es falsch aufgefasst. :unsure: In dem Kontext war es eher schwierig zu erkennen.

 

Ehrlich gesagt, habe ich eher gerungen ob ich das Thema anschneiden soll, denn es geht ja im eigentlichen Sinne um dein Tutorial bzw. deine Videos.

 

Nee, wollte Dir auch keinesfalls unterstellen das Du irgendwas abgekupfert hast, es war halt ein Gefühl das mich beim anschauen überkam. Denke aber das so etwas nicht zu unterschätzen ist, denn für den Lernenden ist es wichtig zu spüren das derjenige der mir was beibringen will auch Kompent ist und so bei mir ankommt.

 

Stimmt.., Du hast im ersten Video schon gesagt das Du eine Minecraft Clone machst und über Deine Vererbungslinie der Basisklassen hast Du auch kurz gesprochen. Dennoch wird sich der Anfänger fragen warum mache ich das, welchen Nutzen bringt es im Gesamtkontext. Will sagen: eine kleine Einführung also "Content at a Glance" wäre hilfreich und verschafft eben den Überblick was gerade passiert.

 

Dein zweites Video finde ich schon besser gelungen, erklärt mehr und Du bist etwas ruhiger sowohl in deiner Sprachgeschwindigkeit als auch mit der Klickerei zwischen VS-Tabs und Unity.

Ich glaube das Du mit dem was hier von allen Beteiligten gesagt wurde eine Menge an Anreizen hast um Deine Qualität zu steigern. Darum ging es Dir ja schließlich auch, oder nicht ?!

 

Ich glaube auch.., es ist nichts persönliches drann, wenn mal eine Meinung etwas unangenehm für einen selbst daher kommt. Ob es einem passt oder nicht, es ist und bleibt eine Meinung! Die muss man nicht teilen aber akzeptieren bzw respektieren, besonders wenn darum gebeten wurde.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich finde es ganz gut dass du versuchst Video Tutorials zu machen, aber qualitativ lassen diese noch zu wünschen übrig. Die Erklärung von Quaternion.identity und was Normalen sind waren arg an der Grenze, eine Normale nochmal zu normalisieren weil diese evtl keine Normale ist hat auch nicht wirklich gezeigt dass das Wissen wirklich vorhanden war.

 

Ich zweifle ein wenig daran dass die weiteren Tutorials gut auf Levelgenerierung oder gar Mesherzeugung eingehen werden. Und sobald etwas nicht gut erklärt wird wird es gefährlich für alle die es anwenden wollen. Paradebeispiel: PHP und SQLInjektion kamen nur durch Halbwissen und zu wenig Mühe überhaupt erst großartig in den Umlauf.

 

Ein Sicherheitsrisiko geht hier nicht aus, aber Probleme sind etwas absehbar.

 

Meine Empfehlung an dich wäre es, ersteinmal ein vollständiges Minecraft Klon projekt abzuschließen, hinter geschlossener Tür und danach die Tutorialserie zu planen, welche dann versucht diesen klon kompakt und richtig zu erklären.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine Normale ist einfach nur der Vektor der orthogonal zur Fläche steht, dass heißt doch nicht, dass diese zwangsläufig den Betrag 1 hat, deswegen dachte ich, dass ich lieber normalized nehme...

 

Meine Empfehlung an dich wäre es, ersteinmal ein vollständiges Minecraft Klon projekt abzuschließen, hinter geschlossener Tür und danach die Tutorialserie zu planen, welche dann versucht diesen klon kompakt und richtig zu erklären.

 

So werde ich es jetzt auch machen ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine Normale ist einfach nur der Vektor der orthogonal zur Fläche steht, dass heißt doch nicht, dass diese zwangsläufig den Betrag 1 hat, deswegen dachte ich, dass ich lieber normalized nehme...

 

Wenn das mal anders sein soll ist dies ein Implementierungsfehler ;)

 

Der einzige mir bekannte Fall in dem eine Normale nicht die Länge 1 hat ist im Fragment/Pixelshader, dies ist da aber erklärbar da der zu bearbeitende Pixel/Fragment das Interpolierte Resultat von X Normalen der Vertexe enthält.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Tiwaz hat gar keine Kritik über die jetzigen Videos angebracht, sondern nur über eventuelle Videos, die ich später machen würde.

Für mich ist DAS feindselig, einfach nur alles irgendwie aufgreifen und zur Kritik nutzen.

Natürlich hab ich mich auf die beiden Videos bezogen und ich hab sie mir gestern auch mehr oder weniger ganz angeschaut und ich ändere meine Meinung nicht.

 

Vor pi * Daumen einem Jahr hab ich angefangen mich hinter VoxelEngines zu klemmen und hab da sehr viele Quellen dazu durchwühlt und mich von einem Algorithmus und Ansatz zum nächsten gehangelt..

Wenn ich da deine beiden Videos angeschaut hätte, hätte ich mich über die halbe Stunde verlorene Zeit aufgeregt oder das Video nach 2min durchzappen beendet.

Und dabei will und habe ich nicht deine Codequalität kritisiert (weswegen ich dein ironisches Statement mit dem perfekten Code nicht verstehe.. Deine Codequalität war bis dato überhaupt kein Thema) und auch über den Stil deiner Tutorials will ich nicht meckern. Du klingst recht sympatisch und ich würd mir deine Tutorials auch anschauen.

Aber inhaltlich finde ich ist das einfach nicht wirklich passend.

Da sich mein Tutorial wirklich an Anfänger richten soll, möchte ich die Leute eigentlich nicht direkt in der ersten Folge mit Performanceoptimierung belasten

Tut mir Leid aber in meinen Augen ist prozedurale Meshgenerierung (was du ja mit einem "Minecraft-Klon" anstrebst) keine Performanceoptimierung gegenüber deines momentanen Ansatzes, sondern ein komplett anderes Verfahren.

Es wird in den beiden Tutorialteilen kein Wissen zu Voxel vermittelt (worauf das ganze ja mal basieren soll) und man sieht nichts von Meshgenerierung per Code (was hier essentiell ist).

Unterm Strich weiß man nach den beiden Videos kein Stück mehr über VoxelEngines als vorher. Und Minecraft identifiziert sich ja über seine VoxelEngine, weil das ganze Gameplay dadurch bestimmt wird, deswegen setze ich Minecraft immer gleich VoxelEngine.

Man kann nach deinen beiden Tutorials Prefabs anlegen, von Klassen erben und Objekte instanzieren. Zwar alles Dinge die man quasi immer gebrauchen kann, die ich aber nicht unbedingt in der Form in einem "Minecraft-Klon Tutorial" erwarten würde.

Und für mich als Zuschauer, der dich nicht kennt und der nicht weiß was du dir da konkret überlegt hast und nicht weiß, dass du später noch auf prozedurale Meshgenerierung eingehst, wirkt das mit dem Ansatz einfach so, als hättest du keine Ahnung und tut mir Leid aber das ist nicht zwingend meine Schuld, dass dieser Anschein erweckt wird, also schieb mir nicht den schwarzen Peter zu.

Was bringt es mir, wenn ich mir ein Video anschaue, das vollgestopft mit Fachbegriffen ist und ich nichts verstehe?

Sry aber sowas beinhaltet nun mal Fachbegriffe und wenn einem das Tutorial nichts erklärt ist es entweder schlecht oder es richtet sich an "fortgeschrittenere" Entwickler ich muss mich hald darum bemühen die Fachbegriffe durch andere Quellen erklärt zu bekommen.

Man kann Unity nicht wirklich verstehen ohne zu wissen was ein GameObject oder ein Transform ist und genau so wenig kann man VoxelEngines verstehen ohne zu wissen was Vertices, Triangles und Voxel sind und in welchem Zusammenhang sie stehen.

 

In meinen Augen sollte man ein Tutorial nur als Leitfaden nutzen und sich an dem Lösungsweg des Autors orientier und kritisch hinterfragen.Und wenn @QuesterDesura keinen perfekten Code schreibt kann er sich später immer noch verbessert. Es heißt ja nicht um sonst „Aus Fehlern lernt man.“. Sowohl der Zuschauer, weil dieser sich Gedanken über die Änderung macht, und zum anderen er selbst.

Wie ich oben schon geschrieben hab, hab ich nie die Codequalität kritisiert, keine Ahnung warum alle auf der Codequalität rumhacken.. Ich kritisiere eben genau den Lösungsweg.

Ein Lösungsweg ist für mich kein Lösungsweg, wenn er später durch einen komplett neuen ersetzt wird (werden muss).

Ich werde definitiv das ganze nochmal in einem späterem Tutorial optimieren bzw. umschreiben, erstmal geht es darum kleine Erfolge zu haben, dass macht meiner Meinung nach die Spieleprogrammierung aus.

Wie gesagt.. Mach es so wenn's dir Spaß macht aber meine Kritik daran ist, dass so ein Vorgehen nicht Stoff eines Tutorials sein sollte und es ist meiner Meinung nach qualitativ kein schlechtes Tutorial, ich würde den gezeigten Inhalt lediglich nicht unter diesem Titel erwarten, weswegen ich nicht davon begeistert wäre, würde ich einen Minecraft-Klon bauen wollen und mir dazu Informationen besorgen.

Klar gibt's auch andere Leute die das bestimmt supi toll finden aber wenn ich keine negative Kritik ausüben darf, nur weil es auch Gegenpositionen gibt, dann macht das ganze Unterforum hier keinen Sinn.

@edit:

Auch negative Kritik kann konstruktiv sein und ich sehe meine Kritik als konstruktiv, weil ich dir sage was ich schlecht finde und warum ich es schlecht finde. Daraus ist ersichtlich was ich mir wünschen würde damit es in meinen Augen besser werden würde.

Auch will ich noch anfügen, dass ich hier nicht in den Thread maschiere und sage "Mach es so oder so, sonst ist es schlecht", ich sage nur meine Meinung, ob du sie beachtest und in deine Tutorialgestaltung aufnimmst ist wieder ein ganz anderes Thema.. Man kann es nicht jedem Recht machen also wenn dir meine Kritik so gegen den Strich geht ignorier sie einfach und wir belassen's dabei.

 

Eine Normale ist einfach nur der Vektor der orthogonal zur Fläche steht, dass heißt doch nicht, dass diese zwangsläufig den Betrag 1 hat, deswegen dachte ich, dass ich lieber normalized nehme...

Normalenvektoren sind in der Computergrafik fast immer nicht nur orthogonal, sondern sogar orthonormal, also sind sie auch immer direkt normiert. Nur als kleine Anmerkung (und ich hoffe du nimmst das nach meinen Kommentaren nicht gleich feindselig auf)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe mir die Videos auch gleich am ersten Tag angeschaut. Kann daher sein, dass ich manches wieder vergessen hab ^^.

Mir ist auch wie viele hier aufgefallen, dass du auf dem falschen Weg bist diesen Tutorial zu machen.

 

Du sagst ja hier, dass es ein anfängerfreundliches Video sein soll. Jetzt frag dich mal was die Anfänger gerne bei einem Tutorial anfangen wollen. Wahrscheinlich denkst du dir die Antwort gerade. Natürlich lernen und anwenden.

Und deswegen sollte man richtig anfangen und nicht den Start mit falschen Dingen beginnen.

 

Z.B.: Erklären wie eine Minecraftwelt aufgebaut ist, warum eine Minecraftwelt so aufgebaut werden muss.

 

@Tiwaz

 

Das Motto von Youtube ist (war) „Broadcast Yourself“.

Wenn du die Lust verspürst Videos zu erstellen, dann mach das! Egal wie gut oder schlecht die sind. Auch wenn es um das Thema Programmieren/Scripten geht. Ob das Video für den Zuschauer hilfreich war entscheidet der Zuschauer selbst.

Was bringt es mir, wenn ich mir ein Video anschaue, das vollgestopft mit Fachbegriffen ist und ich nichts verstehe?

Ich kann dir da nicht zu stimmen.

Dazu ein Zitat von mir.

 

Sucht nicht "dumme" bzw. unwissende Leute als Zielgruppe aus, um "dummes" beizubringen.

 

Es wurde hier geschrieben ein Tutorial für Anfänger. Und man erklärt Dinge in einem Tutorial.

Guck mal mein Intent Share Tutorial an. Ist vllt nicht das beste Tutorial ever, aber ist auch anfänger-freundlich und da wird jedes Wort fast erklärt.

 

Wenn es darum geht, warum ein Zuschauer ein Fachbegriff nicht versteht liegt, aber dann darin, dass er wenig mit Programmierung zu tun hat. Da sag ich nur PP, weil sie die Schritte vorspringen, weil sie einfach nicht das Eigentliche lernen wollen.

 

Ohne Addition und Subtraktion kann ich nicht multiplizieren und teilen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So benutze jetzt (Open)SimplexNoise und es werden nur die Flächen angezeigt, die man potenziell sehen kann ^^. Meine Chunk(16x16x16) Generierungszeit liegt bei 20 ms(1 Thread für ein Chunk), kann mir da jemand bitte einen Referenzwert geben? Kann mir jemand Algorithmen empfehlen(zur Optimierung), die man sich mal anschauen sollte zum Thema Voxelengine, habe mir in der letzen Woche sehr viele Artikel dazu durchgelesen, und werde erstmal schauen, ob ich Occlusion Culling irgendwie da rein bekomme ^^.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So benutze jetzt (Open)SimplexNoise und es werden nur die Flächen angezeigt, die man potenziell sehen kann ^^. Meine Chunk(16x16x16) Generierungszeit liegt bei 20 ms(1 Thread für ein Chunk), kann mir da jemand bitte einen Referenzwert geben? Kann mir jemand Algorithmen empfehlen(zur Optimierung), die man sich mal anschauen sollte zum Thema Voxelengine, habe mir in der letzen Woche sehr viele Artikel dazu durchgelesen, und werde erstmal schauen, ob ich Occlusion Culling irgendwie da rein bekomme ^^.

Also ich brauche Singlethreaded für 1 chunk (ebenfalls 16³ Voxel) ca. 5ms im Unity Editor. Im Build sind es 2.45ms pro Chunk (es werden insgesamt 766 Chunks generiert)

Ich muss aber dazu sagen, dass ich komplexere Berechnungen anstelle als bei einem Minecraft-Like Terrain nötig sind, weil ich das Terrain noch "smoothe" also ist es nicht mehr Blocky, sondern realistischer.

Würde man das für Blocky-Terrain optimieren könnte man denke ich unter 2ms kommen, wobei auch meine Implementierung noch nicht übermäßig optimiert ist.

Ich würde an deiner Stelle auch direkt aufpassen, dass du es Multithreadingfähig machst, da es im Nachhinein teilweise echt ätzend ist Code umzuschreiben, wenn man durch irgendwelche Kleinigkeiten an den Mainthread gebunden ist.

Ich hab 2 Generate-Methoden (1 für die Chunks mit den Densityvalues und 1 für das Mesh) und beide sind Multithreadingfähig.

Da kann ich dann mit einem bool zwischen Singlethread und Multithreading hin und herschalten.

Ist zum Entwickeln super, weil man Singlethreaded weeeesentlich besser debuggen kann aber auch ziemlich easy überprüfen kann, ob Multithreaded auch noch alles korrekt läuft.

 

Optimierungen, die wirklich viel bewirken aber keine besonders tollen Algorithmen erfordern sind zum Beispiel nicht nur die Voxel die man nicht sieht zu cullen, sondern auch die Chunks.

Wenn du 3D Terrain generiern willst (was du whs willst) wird das ganze ein bisschen komplexer als bei 2D (Heighmap)

@edit1:

Ich mache das beispielsweise so, dass ich die Densities des Chunks (mit reduzierter Auflösung, also nicht Voxel für Voxel) evaluiere und sofern überhaupt kein Vorzeichenwechsel im Chunk vorkommt, brauche ich auch den Octree nicht generieren.

Die Densities können gecached werden und sollte der Chunk doch generiert werden, können die Densities wiederbenutzt werden, wodurch lediglich ein kleiner Overhead durch den Vergleich der Densities entsteht.

Der Overhead steht aber in keinem Verhältnis zur der Zeit die man durch das Nicht-Generieren des Octrees einsparen kann.. Solltest du Octrees benutzen wollen ^^

@endedit1

 

Außerdem solltest du so viel wie möglich während deiner Berechnungen cachen.

Vorallem Vertices und Densities..

Die Daten kannst du nach der Berechnung wieder wegschmeißen, dann sparst du dir RAM.. Das Meshing dauert ja dann whs sowieso nur noch eine halbe Millisekunde oder so (der Großteil geht meistens beim Generieren des Chunks mit den Densities drauf), also kannst du das auch easy on the fly berechnen, wenn der Spieler etwas baut und es kommt zu keinen Framerateeinbrüchen.

Da musst du einfach mal schauen wenn du dein Terrain schon komplett generieren kannst, ob man irgendwo unnötige Berechnungen einsparen kann.

Meistens muss man einen kleinen Aufwand treiben, um etwas zu cachen oder unnötige Berechnungen zu erkennen und zu verhindern aber das ist es meistens wert.

Vor allem, ob ein Chunk einen Teil des Surface enthält oder nicht.

 

@edit2

Eins hab ich vergessen ^^

Einer der wohl wichtigsten Optimierungsalgorithmen bei Blocky-Voxel Terrain ist das "Greedy Meshing".

Angenommen du hast eine große Fläche wie ein Plateau oder eine große Wand eines Hauses, dann wäre das eine große Fläche mit vielen Triangles/Quads, die eine 1x1m große Fläche abdecken.

Das ist sehr ineffizient und es werden in Minecraft-ähnliche unglaublich viele unnötige Faces generiert.. Beim Greedy Meshing sollen solche Faces erkannt und zusammen gefasst werden.

Hier mal ein Video das den Algorithmus sehr schön visualisiert:

 

Kann dir aber leider auf Anhieb keine Tips dazu geben, weil ich mich nicht in die Materie eingearbeitet hab.. Hab es nie auf Blocky-Terrain abgesehen und bin dann auch gleich zu Marching Cubes und Dual Contouring übergegangen

@endedit2

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...