The Sims Terrain

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.

The Sims Terrain

Beitragvon Seraph » 19.12.2017, 01:12

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
Seraph
Steffen Engel
Site Admin
 
Beiträge: 1130
Registriert: 18.04.2002, 21:53

Re: The Sims Terrain

Beitragvon Jonathan » 19.12.2017, 23:36

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!
Benutzeravatar
Jonathan
Establishment
 
Beiträge: 1167
Registriert: 04.08.2004, 20:06

Re: The Sims Terrain

Beitragvon Seraph » 22.12.2017, 16:07

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?
Seraph
Steffen Engel
Site Admin
 
Beiträge: 1130
Registriert: 18.04.2002, 21:53

Re: The Sims Terrain

Beitragvon MasterQ32 » 22.12.2017, 18:33

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.
Duct tape is like the force. It has a light side, a dark side, and it holds the world together.
Benutzeravatar
MasterQ32
Felix Queißner
Establishment
 
Beiträge: 1109
Registriert: 07.10.2012, 14:56

Re: The Sims Terrain

Beitragvon Seraph » 22.12.2017, 19:47

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.
Seraph
Steffen Engel
Site Admin
 
Beiträge: 1130
Registriert: 18.04.2002, 21:53


Zurück zu Grafikprogrammierung

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast