The Sims Terrain

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Seraph
Site Admin
Beiträge: 1184
Registriert: 18.04.2002, 21:53

The Sims Terrain

Beitrag von Seraph »

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:
Sims 4 Terrain.jpg
Benutzeravatar
Jonathan
Establishment
Beiträge: 2547
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: The Sims Terrain

Beitrag von Jonathan »

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.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Seraph
Site Admin
Beiträge: 1184
Registriert: 18.04.2002, 21:53

Re: The Sims Terrain

Beitrag von Seraph »

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?
Benutzeravatar
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

Beitrag von xq »

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.
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…

Programmiert viel in ⚡️Zig⚡️ und nervt Leute damit.
Seraph
Site Admin
Beiträge: 1184
Registriert: 18.04.2002, 21:53

Re: The Sims Terrain

Beitrag von Seraph »

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.
Antworten