Das Licht - und Schattenspiel [Frage zu Shadowmaps]

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

eizdealer

Betreff: Das Licht - und Schattenspiel [Frage zu Shadowmaps]

BeitragDi, Dez 16, 2003 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Wie manche von euch ja bereits wissen, arbeite ich ja gerade an einer 3D Strategie-Like Engine mit einem Meshterrain.
So weit klappt auch alles gut.
[ ein paar Screns: hier und hier. Bitte keine Kommentare in diesem Thread dazu, das dient nur zur Veranschaulichung - außerdem WIP! ]
Aber: So langsam beschäftige ich mich mit dem Thema Schatten (physikalisch korrekt müsste es Licht heißen, ich weiß). Und deswegen wollte ich euch mal fragen, wie man das ganze angehen könnte.
Noch ein Screen zur Veranschaulichung:
user posted image

Gegeben sind die Höhen der Vertexpunkte sowie der Einfallswinkel der Sonne.
Jetzt soll aber nicht einfach getestet werden, ob ein "Sonnen" Entity eine Oberfläche sieht, denn dann gibt es nur schwarze und weiße Flächen, was ja auch irgendwie langweilig ist.

Das ganze muss nicht physikalisch korrekt berechnet werden (um Gottes Willen!) sondern sollte nur einigermaßen gut aussehen. Geschwindigkeit ist auch kein Problem, denn das ganze wird immer vorberechnet.

MFG eiz

Jan_

Ehemaliger Admin

BeitragDi, Dez 16, 2003 14:50
Antworten mit Zitat
Benutzer-Profile anzeigen
So, stelle ich mir das for, dann hast du aber keine Palmen und ao als schatten.

If Inschicht then color 255,255,255/Ansichtswinkel (deltapitch und yaw)
between angels and insects

eizdealer

BeitragDi, Dez 16, 2003 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
[14:09] <eizdealer> https://www.blitzforum.de/viewtopic.php?p=572 <- wie hat der Jan das denn gemeitn?
[14:10] <@DarkCorner> eine sehr gute frage eiz .. o_O


Meinst du vielleicht
If EntityInView Surface Then Color = 255 / Winkel
und dann eben das Triangle damit zeichnen.

So habe ich mir das auch gedacht. Aber wenn jetzt ein Triangle hinter einem Berg versteckt ist und ein kleiner Teil von der imaginären Sonne "gesehen" wird, dann wird das ganze Triangle u.U. sehr hell...

Jan_

Ehemaliger Admin

BeitragDi, Dez 16, 2003 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du alles als einzelne Meshs, mit Pick moden?

wenn ja, dann müsstest du die sonnen aus 5 Werten erstellen:
SonneY-2,
SonneY-1,
SonneY,
SonneY+1,
SonneY+2,


Aber, ich glaube du hast verstanden wie ich das meinte.
(ich glaube viele mögen es nicht, wenn man aus dem chat Zitiert)
between angels and insects

eizdealer

BeitragDi, Dez 16, 2003 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe jetzt noch ein anderes Problem: Das Terrain besteht wie gesagt aus mehreren Meshes, also muss die Lightmap zerschnitten werden. Der Bilineare Filter (?!) versucht die Texturen beim Rendern aber hübsch kachelbar zu machen - da entsteht ein komischer Effekt (s. Screen). Kann man dagegen etwas machen?

user posted image
 

Gombolo

BeitragMi, Dez 17, 2003 1:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Direct3D ruft bei jedem Mesh die Methode IDirect3DDevice::DrawPrimitive() auf. Deshalb verwendet er bei jedem Mesh den Filter. Was dann auch zu diesem Effekt führt. Du müsstest die Pixel am Rand von einem Mesh an den Rand der Nachbarmesh kopieren damit alle an den Rändern die selben Pixel verwenden. Rolling Eyes
Wie man das mit B3D macht? Keine Ahnung. Ich habe sowas immer mit C gemacht. Kenn mich also mit B3D nicht so gut aus.

TheShadow

Moderator

BeitragMi, Dez 17, 2003 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich hoffe du hast nicht für jeden dreick einen mesch gemacht - sonst bin ich schwer enttäuscht
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

eizdealer

BeitragMi, Dez 17, 2003 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Selbstverständlich nicht!
Schau auf meine Zeichnung ganz oben - alles was man da sieht, steckt in einem mesh. Und die Engine besteht aus mehreren solchen Meshes. Auf dem Screen sieht man das sehr gut - ein Mesh endet dort, wo dieser hässliche Effekt entsteht.

Hat keiner eine Idee, wie man das vermeiden könnte? Also ich mein etwas konkreter *g*

Arcanes

BeitragSa, Dez 20, 2003 2:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Also die Screens sehen schon mal sehr reizend aus!! Freu mich schon drauf, was daraus wohl noch werden wird, ich liebe Strategiespiele!! Very Happy

Weiterhelfen kann ich Dir leider nicht, da ich mich selbst noch nie so sehr damit beshäftig habe. Würd mich aber auch über ein Paar Lösungsvorschläge freuen, da ich mich sicher irgendwann mal wieder selbst an soetwas versuchen werde! 8)
tHey pUt mE iN a rOuNd rOom tO diE
User posted image
http://www.myownmalice.de.vu

hamZta

Administrator

Betreff: hm

BeitragSa, Dez 20, 2003 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
ich versteh nich ganz, warum du meshes nimmst und nich einfach ein terrain lädst?
oder versteh ich da was falsch?
Blog.

eizdealer

BeitragSa, Dez 20, 2003 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Der eigentliche Grund, warum ich mir überhaupt so viel Arbeit gemacht hab ein Meshterrain zu erstellen, war, dass ich mehrere Texturen nebeneinander und unabhängig voneinander haben kann. Mit einem normalen Terrain geht das eigentlich nur mit einer Detailtextur und einer Colormap, was mir aber nicht so gut gefällt.

hamZta

Administrator

Betreff: hm

BeitragSa, Dez 20, 2003 11:54
Antworten mit Zitat
Benutzer-Profile anzeigen
und da sinkt dein speed überhaupt nich? was ich so auf den screens sehe hast du 190 fps oder so....
wenn ich terrain mach, texturier, kamera von oben draufschaun lass, dann hab ich nurmehr 43 fps...
Blog.

eizdealer

BeitragSa, Dez 20, 2003 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hängt natürlich auch von deinem PC ab und vor allem von der Größe des Terrains.
Bei mir hab ich das so gemacht: Immer wenn sich die Kamera bewegt, wird diese Funktion aufgerufen:

Code: [AUSKLAPPEN]
Function EntityHide()

For X=0 To (LevelSize-1)/4
   For Y=0 To (LevelSize-1)/4
      HideEntity Terrain(X,Y)
      If EntityInView(terrain(x,y),camera) Then ShowEntity terrain(x,y)
   Next
Next


End Function


Damit kann ich relativ große Maps machen. Aber beachte, dass dein Terrain aus mehreren Meshes bestehten muss, die nicht zu groß sind!

Das ist natürlich absolut unoptimiert und soll nur der Veranschaulichung dienen.

hamZta

Administrator

Betreff: hm

BeitragSa, Dez 20, 2003 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaub ich sollte auch auf meshes umsteigen Very Happy
das wird aber kompliziert
Blog.

Arcanes

BeitragSo, Dez 21, 2003 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Eizdealer!

Dein Projekt hat mich sehr dazu animiert, mir auch wieder um dieses Thema Gedanken zu machen, und so habe ich mir gestern Nacht noch eine kleine 3D-TileEngine zusammengebastelt! Very Happy Ich habe dabei ein paar sehr interessante Entdeckungen gemacht, die ich bei Zeiten vielleicht auch mal ins Codearchiv posten werde (hab zum Beispiel 'ne Möglichkeit gefunden, das BB3D-Kolisionssystem auszutricksen! - da gabs ja auch schon oft Threads zu, und nun denke ich, habe ich _die_ Lösung dazu gefunden!! *hrhrhr*). Na jedenfalls habe ich auch eine Lösung für Dein Problem gefunden:

LoadTexture "myTexture.bmp", 16 + 32

Mit diesen Flags bekommst Du die unschönen Texturübergänge weg!! 8)
(war zumindest bei mir so, hehe)


mFG
+ Arca +
tHey pUt mE iN a rOuNd rOom tO diE
User posted image
http://www.myownmalice.de.vu

eizdealer

BeitragSo, Dez 21, 2003 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
In der Tat, es funktioniert!
Mann echt vielen dank, du bist mein Retter Smile

Wenn du mir jetzt noch einen Denkanstoß gibst, wie ich das mit der Schattenberechnung machen könnte, dann darfst du dir alles von mir wünschen was du willst Smile
 

darkshadow

BeitragSo, Dez 21, 2003 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
eizdealer: Wie meinst du das mit Denkanstoß für die Schattenberechnung?? Du hast doch eine Routine dazu.

eizdealer

BeitragMo, Dez 22, 2003 12:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, hab ich. Aber die Routine berechnet die Schatten von Objekten auf dem Untergrund und nicht den Schatten vom Untergrund selber. Außerdem ist das ganze "zu scharf". Aber sonst gut *g*

Arcanes

BeitragMo, Dez 22, 2003 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Für die Lichtverhältnisse am Untergrund habe ich von jedem Vertex aus eine imaginäre Linie zu jeder vorhandenen Lichtquelle gezogen, und dann die Entfernung mit LightRange, LightIntensity und LightColor (den Eigenschaften meiner eigenen Lichtquellen) verrechnet. Die Ergebnisse habe ich an VertexColor übergeben. Wenn Du es vernünftig codest, dann läuft das auch locker Echtzeit... (das ändert sich jedoch leider, sobald Du noch eine EntityVisible() Routine mit einbeziehst!)

Oder hast Du etwas anderes gemeint mit Deiner Frage?
tHey pUt mE iN a rOuNd rOom tO diE
User posted image
http://www.myownmalice.de.vu
 

darkshadow

BeitragMo, Dez 22, 2003 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn das mit der Routine von dir geht, dann geht das sicherlich auch mit dem Terrain. Du musst doch einfach nur dein eigenes Terrain in den Pickmode setzen, oder irre ich mich da gerade?

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group