Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

15.01.2011, 22:59

Bei Google findet man das hier:
http://developer.amd.com/documentation/p…StarCraftII.pdf

Das war aber nicht, an was ich mich erinnere, denn da scheint auch nix über Terrain-Blending auch nur erwähnt zu werden.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (15.01.2011, 23:06)


BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

12

16.01.2011, 11:43

Mehrere Draw-Calls? Ich habe für mein Terrain-Mesh mit mehreren LODs genau 2 DrawCalls: 1 für den Patch und 1 für die Skirts.
Das heißt, es muss alles im PixelShader abgedrückt werden.

Was mir noch einfällt (auf PCShadow's Idee aufbauend): Texture-Arrays. Also alle Ground-Texturen in ein Array packen.
Dann noch eine 2 BlendMaps mit:
1: Indices der Groundtextures
2: Mischfaktoren der Groundtextures
Die Indices-Groundmap müsste dann denke ich "point"-gesampelt werden. Das macht bei 8-Bit Farbtiefe für den Index ganze 256 Ground-Texturen.
Ich bleibe mal an dem Ansatz dran.

Im Anhang habe ich mal 1 Bilde:
Mein Terrain-Mesh derzeit (Frustumculling und LOD-Calculation gelockt und dann Camera woanders geparkt, 2 Screenshots gemacht (Wireframe an/aus) und dann per GIMP etwas geblendet. Die Textur, die drüber liegt ist die HeightMap)
Jedenfalls soll hier der PixelShader etwas zaubern.
»BlazeX« hat folgendes Bild angehängt:
  • TerrainSkirts.jpg

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

13

16.01.2011, 12:10

Die einfachste Möglichkeit ist wohl wie beschrieben eine Kombination von Texture Splatting und Texture Arrays oder einem texture Atlas, oder die Verwendung von Tilesets (nutzt das nicht sogar SC2? WC3 hat diese Variante zumindest noch verwendet).

Megatexturing wäre auch eine Möglichkeit, klingt aber nach einen sehr gewagten Schritt. Persönlich würde ich daher zur ersten Variante tendieren.

1 Blendtextur
1 Materialtextur
1 Texture Array oder Texture Atlas

Pseudocode:

Quellcode

1
2
3
4
5
6
vec4 blendValues = texture2D(blendTexture, texUV);
vec4 materialIds = texture2D(materialIdTexture, texUV);
outColor = texture2DArray(materials, texUV, 0);

for (int i = 0; i < 4; ++i)
  outColor = lerp(outColor, texture2DArray(materials, texUV, materialIds[i]), blendValues[i]);


Bietet zwar auch nur 5 Maximale Texturen, diese allerdings pro Pixel, was bedeutet das jeder Pixel theoretisch ganz andere Texturen verwenden kann. Und 5 verschiedene Texturen für ein Pixel ist schon verdammt viel und mehr als man eigentlich brauchen wird.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

16.01.2011, 12:11

Von mehreren Draw-Calls habe ich eigentlich nicht geredet.
Und wozu Du Indices benötigen solltest, das is mir irgendwie auch unklar.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

15

16.01.2011, 12:24

@BlueCobold: Die Indices beschreiben die IDs der Texturen im GroundTexture-Array.
@DerMark: So meinte ich das. Du hast es auf den Punkt gebracht.

Ich werde mich demnächst mal ransetzen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

16.01.2011, 13:18

Die Indices sind meiner Meinung nach überflüssig. Denn das kannst du prima durch eine 0 für den Alpha-Anteil der jeweiligen Textur in der Blendmap darstellen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

DerMark

Treue Seele

Beiträge: 324

Wohnort: Emsdetten

Beruf: Softwareentwickler

  • Private Nachricht senden

17

16.01.2011, 14:36

Die Indices sind meiner Meinung nach überflüssig. Denn das kannst du prima durch eine 0 für den Alpha-Anteil der jeweiligen Textur in der Blendmap darstellen.
Wenn er es denn genauso machen möchte wie in meinem Pseudocode Beispiel kann er das eben nicht. Ich vermute dir schwebt da eine andere Technik im Kopf vor.

Wenn du allerdings das selbe meinst verstehe ich nicht genau was du dann mit dem Alpha Anteil der Blendmap meinst, dieser wird genau wie alle anderen Farbkanäle als Blendvalue verwendet und hat mit der Auswahl der zu verwendenen Bodentextur im TextureArray nur wenig zu tun.

Eventuell könntest du das was dir vorschwebt etwas erklären.

mfg Mark

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

18

17.01.2011, 20:37

Ich habe mir das mit dem Blending nochmal überlegt. Eigentlich brauch ich das garnicht. Wenn ich pro "Quad" eine GroundTextur habe, die dann mit den daneben schön geschmeidig verläuft (wie bei SH Legends), ist das genau das, was ich suche.

Ich habe jetzt meinen Pixelshader soweit, dass er aus einer 8-Bit Textur, die "IndexMap", den Index einer GroundTextur sampelt (Point-Sampler). Die GroundTexturen liegen in einem TextureArray, wo ich sie bequem anhand des Index (und natürlich der normalen UV-Koordinaten) sampeln kann. Ein Bild davon ist im Anhang.
Jetzt muss ich nur noch den Verlauf hinbekommen, aber das sollte kein Problem darstellen (mach ich morgen).
Das tolle ist, dass der Shader an sich mit 2^32 verschiedenen GroundTexturen klarkommt! Nur die Graka setzt da noch Grenzen. Wie viele Texturen gehen in ein Texture2DArray auf DX10.0-Hardware?
»BlazeX« hat folgendes Bild angehängt:
  • Terrain_1st_Textures.jpg

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

19

17.01.2011, 20:52

Interessant werden die Punkte, wo mehr als zwei Texturen aneinander stoßen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

BlazeX

Alter Hase

  • »BlazeX« ist der Autor dieses Themas

Beiträge: 478

Wohnort: DD

Beruf: Maschinenbau-Student

  • Private Nachricht senden

20

17.01.2011, 21:46

Das sollte keine Rolle spielen: An jedem Punkt können nicht mehr als 4 Texturen gleichzeitig "wirken". Also alle 4, die Einfluss nehmen sampeln und dann bilinear zwischen den Sampels interpolieren. Nur hab ich jetzt nicht wirklich Lust mir heute noch eine Rechnung einfallen zu lassen.

Werbeanzeige