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

DaiFei

Frischling

  • »DaiFei« ist der Autor dieses Themas

Beiträge: 28

Wohnort: München

  • Private Nachricht senden

1

25.05.2014, 16:38

Probleme mit dem SkyDome in Kombination mit "runder Textur" (spherical map)

Hallo zusammen!

Ich habe da folgendes Problem mit meinem SkyDome in Kombination mit einer runden Textur wie sie zum Beispiel hier zu finden sind: http://www.tutorialsforblender3d.com/Tex…ud-Few-Noon.png

Nach dem Erstellen der Halbkugel und dem zuweisen der Texturkoordinaten bekomme ich in Abhängigkeit der Ringanzahl der Halbkugel am
Rand stellenweise seltsame Ausschläge in der Farbe des Randes (normalerweise schwarz). Je mehr Vertices ich verwende, also je mehr Ringe bzw. Segmente die Halbkugel hat, desto extremer werden sie (siehe Anhänge). Ist die Ringanzahl sehr niedrig gewählt (z.B. 4), so treten zwar keine solchen Fehler auf, jedoch erscheint falsch ausgerichtet bzw. verrutscht. Könnte an der Formel für die Texturkoordinaten liegen?

Hier ist der Code für die Koordinatenberechnung:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
for (int i = 0; i < Ringe /* In horizontaler Richtung (0° bis 90°)*/; i++)
{
  for (int j = 0; j <= Segmente /* In vertikaler Richtung (0° bis 360°)*/; j++)
  {
    TU = (sinf(j * DeltaAngleSegments) * cosf(i * DeltaAngleRings) + 1.0f) * 0.5f;
    TV = (cosf(j * DeltaAngleSegments) * cosf(i * DeltaAngleRings) + 1.0f) * 0.5f;
  }
}


Eine Lösung wäre natürlich, ausschließlich Texturen zu verwenden, welche keinen derart „harten“ Rand wie hier das Schwarz besitzen. Jedoch
wäre das Ergebnis dann immer noch suboptimal und ich würde gerne verstehen, was hier schief läuft. Habt ihr da eine Idee woran das liegen könnte? Vielen Dank!
»DaiFei« hat folgende Bilder angehängt:
  • SkyDome (4 Ringe).jpg
  • SkyDome (16 Ringe).jpg
  • SkyDome (128 Ringe).jpg

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DaiFei« (26.05.2014, 13:01)


2

25.05.2014, 17:43

Hm, man sieht auf jeden Fall dass die Textur am Rand zu stark gestreckt wird wie werden denn die jeweiligen DeltaAngels genau berechnet?

DaiFei

Frischling

  • »DaiFei« ist der Autor dieses Themas

Beiträge: 28

Wohnort: München

  • Private Nachricht senden

3

25.05.2014, 17:53

Die entsprechen jeweils "90° / Ringe" (DeltaAngleRings) bzw. "360° / Segmente" (DeltaAngleSegments).

C-/C++-Quelltext

1
2
3
const int Segmente = 2 * Ringe;  // 'Ringe' ist ein Parameter der Funktion
const float DeltaAngleRings = HALF_OF_PI / Ringe;
const float DeltaAngleSegments = 2PI / Segmente;

4

25.05.2014, 18:29

Sieht mir nach einem Sampling Fehler aus, der auf einer Rechenungenauigkeit beruht.

Probier doch mal mit Double zu rechnen und das erst das Ergebnis nach Float zu casten ;)

Ansonsten ist möglicherweise ein Logikfehler in deinem Shader.
EnvisionGame(); EnableGame(); AchieveGame(); - Visionen kann man viele haben. Sie umzusetzen und auf das Ergebnis stolz zu sein ist die eigentliche Kunst.

DaiFei

Frischling

  • »DaiFei« ist der Autor dieses Themas

Beiträge: 28

Wohnort: München

  • Private Nachricht senden

5

25.05.2014, 18:53

Die höhere Genauigkeit hat leider keine Besserung gebracht und einen eigenen Shader habe ich nicht geschrieben. Oder gehst Du eher von einem Hardwaredefekt bzw. einer Hardwareungenauigkeit aus?
Gibt's da eventuell irgendwelche Tricks oder Einstellungen durch das Direct3D-Device, welche beim Rendern hilfreich wären?

6

25.05.2014, 20:48

Ich glaube, dass der schwarze Rand schlicht und einfach "reinblutet". Abhilfe könnte ein etwas kleinerer Kreis für die Erstellung der Texturkoordinaten schaffen.

Allerdings frage ich mich, ob sich solche "spherical maps" für sky domes überhaupt eignen. Du hast nämlich genau dort wenig Texturauflösung wo Du "meistens hinkuckst" (kuckst Du eher hoch oder Richtung Horizont?).

Benutz lieber sowas: Using a Skydome Tutorial. Oder Cubemaps, dazu brauchts aber einen speziellen shader.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

7

25.05.2014, 21:06

Ich würde Cube Maps empfehlen. Ich habe damit sehr gute Erfahrungen gemacht. Das geht damit los, das man nicht etwa ¼ der Pixel verschwendet werden. Es ist einfacher ein Mesh dafür zu erzeugen, es kommt zu sehr sehr schwachen bis keinen Verzerrungen. Auch sind sie leichter zu beschaffen. Mit jeden x-beliebigen 3D-Programm kann man einfach die 6 Seiten selbst rendern.

Shader brauchst man dafür nicht mehr als für die anderen Methoden.

8

26.05.2014, 08:46

Das geht damit los, das man nicht etwa ¼ der Pixel verschwendet werden.
Auch wenn ich den Cube Map-Vorschlag völlig unterstütze – die Auflösungsschwankungen sind bei Texturwürfeln noch ungünstiger als bei Polar-Maps (sie sind an den Problemstellen bei selber Pixelzahl ungefähr 10 % niedriger aufgelöst) :(

9

26.05.2014, 11:06

Das geht damit los, das man nicht etwa ¼ der Pixel verschwendet werden.
Auch wenn ich den Cube Map-Vorschlag völlig unterstütze – die Auflösungsschwankungen sind bei Texturwürfeln noch ungünstiger als bei Polar-Maps (sie sind an den Problemstellen bei selber Pixelzahl ungefähr 10 % niedriger aufgelöst) :(
aber dadurch dass ein Würfel weniger Speicher braucht als eine Kugel kann man dann ruhig eine etwas hochauflösendere Textur nehmen und hat dann trotzdem gute Ergebnisse

10

26.05.2014, 11:20

Die Geometrie hat damit nichts zu tun weil sie keine zwingende Voraussetzung ist: Man kann einfach ein Fullscreen-Quad zeichnen und via Pixelposition, Betrachterorientierung und Kameraeinstellungen zurückrechnen, in welche Richtung des Hintergrunds ein Pixel auf dem Bildschirm zeigt. Dann verbrauchen sowohl Würfel als auch Kugel ähnlich viel Platz (nämlich vier Vertices für ein Quad und um die 100 Bytes für den Pixel Shader).

Dann bleibt für Polartextur und Würfeltextur gleich viel Platz, aber Würfel werden nunmal bei selber Pixelzahl leicht pixeliger ausfallen. Dafür haben sie andere Vorteile.

P.S.: Ich würde wegen den schwarzen Rändern auch prüfen, ob alle Mip-Levels korrekt gefüllt sind.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Krishty« (26.05.2014, 11:26)


Werbeanzeige