Da ich schon einige Zeit nicht mehr viel mit Grafikentwicklung gemacht habe, versuche ich mir nun mal hier Rat einzuholen.
Ich habe mir vor einigen Jahren mal Sims 3 angesehen und nun vor kurzem Sims 4. Was mich nun dabei interessiert ist, wie sie genau das Terrrain und die 'Paints' und Kacheln darauf rendern. Man kann das (vorgegebene) Terrain frei bemalen und zudem auch noch quadratische 'Kacheln' drauf setzen.
Meine Vermutung waere nun, dass das Terrain selbst simples Texture-Splatting nutzt.
Bei den Kacheln denke ich, ist es ein zweites Layer ueber/auf dem Terrain, bei den Paints bin ich mir jedoch unsicher, wie ich da viele verschiedene Texturen gleichzeitig blenden kann.
Kann mir bitte jemand erklaeren, wie das funktioniert?
Ich habe zur Demonstration mal einen Screenshot angehaengt:
The Sims Terrain
Re: The Sims Terrain
Ich bin auch nicht auf dem ganz aktuellen Stand, aber ich denke es gibt da einige Möglichkeiten. Man sollte heutzutage echt viele Texturen in einem Shader aktiv haben können. Wenn man nicht ein Gewicht pro Typ speichern will (was in den meisten Fällen Speicherverschwendung sein dürfte), könnte man auch z.B: 4 Gewichte + Indexe speichern. Damit könnte man immer noch dutzende Materialien gleichzeitig haben, aber eben immer nur z.B. 4 pro Kachel.
Alternativ kann man natürlich auch ein Multipass-Rendering benutzen. Man muss ja auch nicht jedesmal das komplette Terrain zeichnen, sondern kann für jedes Material eine eigene Dreiecksliste speichern.
Alternativ kann man natürlich auch ein Multipass-Rendering benutzen. Man muss ja auch nicht jedesmal das komplette Terrain zeichnen, sondern kann für jedes Material eine eigene Dreiecksliste speichern.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
Re: The Sims Terrain
Ich bin mir leider gerade nicht ganz sicher, was du mit 'Gewicht pro Typ', '4 Gewichte + Indexe speichern' und '4 pro Kachel' meinst. Was meinst du mit 'Gewicht', 'Typ', 'Kachel' und welche Art von 'Indexe'?
'Frueher' :D war es afair mal so, dass man z.B. 4 Color-Textures + eine Blend-Texture genutzt hat, um die Staerke (Gewichtung?) der einzelnen Textures anzugeben. Aber das ist mein Wissensstand von ... kA wie lange das schon her ist. Ich vermute mal heute geht da ein wenig mehr, meinst du das damit?
'Frueher' :D war es afair mal so, dass man z.B. 4 Color-Textures + eine Blend-Texture genutzt hat, um die Staerke (Gewichtung?) der einzelnen Textures anzugeben. Aber das ist mein Wissensstand von ... kA wie lange das schon her ist. Ich vermute mal heute geht da ein wenig mehr, meinst du das damit?
- xq
- Establishment
- Beiträge: 1590
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: The Sims Terrain
Ich schweife auch mal aus zu dem Thema:
Imho sind es zwei separate Systeme, eines für die Kacheln und eines für das Blending der Terrainoberfläche. Die beiden Systeme können in einem Shader sein, oder aber in zwei getrennten Drawcalls gemacht werden. Zweiteres wäre wahrscheinlich mit passendem Depth Test sogar flexibler...
Zum Blending denke ich, dass es so ähnlich funktioniert, wie Jonathan gesagt hat:
Wir haben pro bemalbarem Oberflächenpunkt (sei das jetzt Vertices oder ne Textur ist ja wurst) vier Texturangaben (Indizes in einem Array) sowie dazugehörige Blendweights (also quasi Alpha). Über ein Texturarray können wir dann durch die Indexes die passenden Texturen samplen und mit den Alphawerten zusammenmischen.
Damit sind dann beliebig viele Texturen auf dem Terrain möglich, aber eben max. 4 Texturen an einer Stelle.
Imho sind es zwei separate Systeme, eines für die Kacheln und eines für das Blending der Terrainoberfläche. Die beiden Systeme können in einem Shader sein, oder aber in zwei getrennten Drawcalls gemacht werden. Zweiteres wäre wahrscheinlich mit passendem Depth Test sogar flexibler...
Zum Blending denke ich, dass es so ähnlich funktioniert, wie Jonathan gesagt hat:
Wir haben pro bemalbarem Oberflächenpunkt (sei das jetzt Vertices oder ne Textur ist ja wurst) vier Texturangaben (Indizes in einem Array) sowie dazugehörige Blendweights (also quasi Alpha). Über ein Texturarray können wir dann durch die Indexes die passenden Texturen samplen und mit den Alphawerten zusammenmischen.
Damit sind dann beliebig viele Texturen auf dem Terrain möglich, aber eben max. 4 Texturen an einer Stelle.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in Zig und nervt Leute damit.
Programmiert viel in Zig und nervt Leute damit.
Re: The Sims Terrain
Danke fuer deine Erklaerung, welche ich auch verstehe. Ich habe nun gleich mal noch ein wenig weiter ueber TextureArrays (insbesondere im Zusammenhang mit Unity) nachgeforscht und es scheint tatsaechlich gleich mehrere meiner Probleme zu loesen. Ich werde mal versuchen ein wenig damit rumzuexperimentieren.