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

1

07.04.2011, 09:11

Z - Buffer Problem

Hallo Community

Ich habe ein Problem mit dem Z - Buffer. Grundsätzlich funktioniert er wunderbar. Das Problem ist nur, je grösser die Objekte in meiner Szene werden, desto "ungenauer" wird das ganze. Wie der Z - Buffer funktioniert etc ist mir alles klar. nur weis ich nicht, wie ich diese unschönheit verhindern kann.

Im Bild cube1_ok.jpg (siehe Anhang) wird alles wunderschön dargestellt, so wie es sein sollte.
Im Bild cube2_false.jpg (siehe Anhang) jedoch, sieht man die hinteren Kanten des Würfels und das Koordinatensystem, welche eigentlich durch den Z - Buffer verdeckt werden sollten.

Der Unterschied zwischen den beiden Bildern ist die Grösse und der Abstand von der Kamera.

Hier noch die Einstellungen die ich vornehme:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
PresentParameters pp = new PresentParameters();
pp.PresentFlag = PresentFlag.LockableBackBuffer;
pp.Windowed = true;
pp.SwapEffect = SwapEffect.Copy;
pp.EnableAutoDepthStencil = true;
pp.AutoDepthStencilFormat = DepthFormat.D16;

device.RenderState.ZBufferEnable = true;
device.RenderState.ZBufferFunction = Compare.Less;

// vor jedem Render - Vorgang
device.Clear(ClearFlags.ZBuffer, Color.White, 2.0f, 0);


Kann mir jemand helfen??

Danke
Master Chief
»Master Chief« hat folgende Bilder angehängt:
  • cube1_ok.jpg
  • cube2_false.jpg

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

07.04.2011, 09:19

Naja, der Z-Buffer hat eben nur begrenzte Genauigkeit. Um die verfügbare Genaugkeit maximal auszunutzen achte drauf dass deine far-Plane möglichst weit weg und deine near-Plane möglichst nah dran ist. Abgesehen davon kannst du einen 24bit DepthBuffer nehmen statt nur 16bit (DepthFormat.D24S8 ).

3

07.04.2011, 09:42

Wow, das ging ja schnell =) hat super funktioniert.

Meine NearPlane war auf 1.0 eingestellt. Klar, dass da irgendwann die Genauigkeit verloren geht.
Danke für deine Hilfe, jetzt funktioniert das Einwandfrei.

Cheers

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

07.04.2011, 09:47

Und auf was sind near- und farplane jetzt gestellt!?

5

07.04.2011, 10:01

jetzt habe ich die NearPlane auf 100 gestellt (vorerst).
Sobald ich dazu komme, werde ich diese dynamisch anpassen, je nach Objekte, welche sich in der Szene befinden und wo die Kamera steht.

Die FarPlane ist auf 200'000 eingestellt.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

07.04.2011, 10:13

Oh ok, du hast so riesige Werte. Gut, die Faustregel kennst du ja jetzt ;)

7

07.04.2011, 10:16

Ja, das Problem ist eben, dass innerhalb der Szene, schnell einmal grosse Werte (der Objekte) entstehen können.
Somit ist es wichtig, dass die FarPlane auch genug weit weg ist, da sonst plözlich etwas ungewollt verschwindet.

Gut, es ist zu überlegen, ob auch diese dynamisch angepasst werden könnte.

Oder ist das keine schlaue Idee?? :D

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

07.04.2011, 10:17

Klar, wenns geht warum nicht^^

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

07.04.2011, 12:32

Naja, der Z-Buffer hat eben nur begrenzte Genauigkeit. Um die verfügbare Genaugkeit maximal auszunutzen achte drauf dass deine far-Plane möglichst weit weg und deine near-Plane möglichst nah dran ist. Abgesehen davon kannst du einen 24bit DepthBuffer nehmen statt nur 16bit (DepthFormat.D24S8 ).

Erm... andersrum. Die Far-Plane möglichst nah dran (an der Szene) und die Near-Plane ebenfalls. Möglichste weite Far-Plane und möglichst nahe Near-Plane bringt ja genau die Ungenauigkeiten erst rein.

Die Far-Plane auf 200.000 und Near auf 100 finde ich z.B. äußerst riesige Werte. Dynamische Anpassung wäre da jedenfalls besser als 100,0 bis 200.000,0 für Planes, wenn das Objekt nur von 3 bis 15 geht.
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]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

07.04.2011, 12:43

Sry da hast du natürlich recht, ich meinte natürlich genau anders rum: Die near-plane möglichst weit weg und die far-plane möglichst nah dran...

Werbeanzeige