Registriert: Di Sep 06, 2005 18:34 Beiträge: 362 Wohnort: Hamburg
Hi ...
Ich bin jetzt gerade dabei in meinem Projekt ein paar Feinheiten einzubauen und bissl was zu verbessern.
Da ist mir aufgefallen, dass mein Terrain sich zwar selbst beschattet (Schatten in der Textur), aber ich möchte gerne die Objekte (ausschließlich bewegliche) in dem Terrain auch von dem Terrain beschattet haben.
Die Objekte selber werfen Schatten durch Stencil-Shadow-Volumes.
Nun dachte ich mir, so ein Volumen kann man doch sicher auch für eine Heightmap erstellen, das wäre aber sicherlich zu viel Aufwand (außerdem ist mir nicht ganz klar wie ich das bei einer Heithmap anstellen sollte).
Dann habe ich daran gedacht, dass ich die Shadow-Map, die ich mit der Textur verknüpfe doch auch irgendwie dafür verwenden kann die Objekte zu beschatten, d.h. irgendwie auf die komplette Scene projezieren...
Aber wie mach ich das?
Und ist das überhaupt möglich?
Hoffe mir kann da jemand Tips geben
Gruß
Shai
_________________ Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)
Dann habe ich daran gedacht, dass ich die Shadow-Map, die ich mit der Textur verknüpfe doch auch irgendwie dafür verwenden kann die Objekte zu beschatten, d.h. irgendwie auf die komplette Scene projezieren...
Kommt drauf an, ob die Teile fliegen können, und wie groß sie sind. Wenn sie fliegen können brauchste ne 3D-Textur.
Für ShadowVolumes würde mir so in den sinn kommen, vorher alle Kanten zu berechnen, die nach oben zeigen (also wo die Normalen auseinander gehen), denn nur die können Schatten werfen. Damit müssteste die Anzahl schon mal ganz gut reduzieren können. Dadurch dürfte das "Normale" vorgehen (Silluette berechnen, ...) wieder in absehbarer zeit funzen. Wenn sich die Sonne nicht bewegt, wovon ich mal ausgehe, dann kannste die Volumes in Displaylisten packen. Evtl. in mehrere und dann in den Octree (oder was du so nutzt) einbauen.
Wenn nur das Terrain Schatten auf die Objekte werfen soll, und die Objekte kein Selfshadowing brauchen, wegen ShadowVolumes, dann kannste auch über Shadowmaps nachdenken. Das müssteste bei fester Sonne auch nur einmal berechnen.
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
Registriert: So Feb 06, 2005 17:29 Beiträge: 187
Programmiersprache: C, C++
Erstmal Danke an Shaijan, du hast mir eine vergessene Idee wiedergebracht, was ich mal ausprobieren wollte: Der Spieler hat ne Helmleuchte, die einen Lichtkegel auf die Objekte vor ihm wirft.
Wenn ich dich richtig verstanden hab, ist das Grundproblem das gleiche, nur du willst ne Schattentextur auf deine Objekte schmeissen und ich ne Lichttextur Leider hab ich keine Ahnung wie das geht
Vielleicht geht das irgendwie mit Spheremapping oder Cubemapping, welches man dann für alle Objekte aktiviert? Dazu müsste ich erstmal etwas Zeit finden und mich jetzt im Wiki schlau machen ...
-> Bin auch an der Lösung dieses Problems interessiert
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Mit Projektiven Texturen könntest du was reißen. Nennt sich auf Schatten bezogen glaub ich Shadow-Mapping. Im Wiki steht dazu glaub ich wies geht. Also quasi von der Lichtquelle aus eine Tiefentextur rendern und die dann benutzen um zu bestimmen, was angeläuchtet wird und was nicht.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Sep 06, 2005 18:34 Beiträge: 362 Wohnort: Hamburg
Hi ...
Erstmal danke für die Antworten.
Hab mich in Bezug auf Shadow-Mapping n bissl Schlau gemacht in letzter Zeit.
Ich erstelle derzeit in meinem Textur-Generator für Heightmaps eine Shadow-Map, die ich mit der Heightmap-Textur verbinde um Schatten auf dem Terrain zu haben, das is ja eigentlich nix anderes, als die Shadow-Map über das komplette Terrain zu blenden, da wos dunkel ist wird die Terrain-Textur dunkler, da wos hell ist bleibt sie so.
Wenn ich jetzt genau diese Shadow-Map benutzen möchte um sie über das 3D-Terrain zu legen (zu projezieren) hab ich aber ein verständnis-Problem.
Die Textur wurde ja nicht aus Sicht der Lichtquelle sondern genau von Oben erstellt.
Wenn ich die Textur jetzt aber von Oben auf die Szene projezieren würde hätte ich unter den (fliegenden) Objekten weiße Flächen oder?
Oder (fällt mir jetzt grad ein)
Ich zeichne die Szene einmal komplett im Schatten, projeziere dann die Shadow-Map drauf, so, dass die nicht im Schatten liegenden Flächen heller werden, dann müsste es klappen.
Hmm ... nur wie das mit dem Projezieren funktioniert habe ich noch nicht verstanden.
Ich habe die Textur und muss jetzt irgendwie mit glTexGen Texturkoordinaten dafür erstellen lassen, aber irgendwie blick ich durch die komplette Technik nicht durch, kann mir da evtl jemand helfen?
Gruß
Shai
_________________ Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)
Da die Objekte Fliegen, wirst du mit dem für die Landschaft erstellten Lightmap nicht viel Freude haben, da es immer nur die Helligkeit am Boden angibt. D.h. entweder ShadowVolumes oder Shadowmaps.
Zitat:
Ich erstelle derzeit in meinem Textur-Generator für Heightmaps eine Shadow-Map, die ich mit der Heightmap-Textur verbinde um Schatten auf dem Terrain zu haben, das is ja eigentlich nix anderes, als die Shadow-Map über das komplette Terrain zu blenden, da wos dunkel ist wird die Terrain-Textur dunkler, da wos hell ist bleibt sie so.
Das ist Lightmapping, nicht Shadowmapping. Beim Shadowmapping wird, wie Flash schon beschrieben hat, die Szene aus Sicht der Lichtquelle gerendert, wobei allergings nur der Depthbuffer benötigt wird. Der wird in eine Textur gepackt, und hinterher beim eigentlichen Renderpass über die Landschaft projeziert. Dann vergleicht man die durch die Textur gegebenen z-Werte mit dem Abstand zur Lichtquelle, und wenn der Abstand größer ist, dann muss es irgendwas davor geben, womit das Fragment im Schatten ist.
Das Projezieren is auch ganz einfach. Hängt jetzt davon ab, ob du für deine Objekte Vertexprogramms nutzt, oder nicht.
Wenn ja, dann kannstes einfach in das Vertexprog reinpacken. Du kannst es dann wie die normale OGL-Vertex-Projektion aufziehen, also ne Projektionsmatrix erstellen (mit ModelviewMat drin), die auf den 0..1 Bereich der Texturen anpassen, und ins Vertexprog reinreichen. Da dann die Vertexkoordinaten mit der Matrix multiplizieren, und die Textureunit damit füttern. Die Projektionsmatrix kannste sogar mit den normalen Befehlen wie gluPerspective erstellen.
Wenn du keine Vertexprogs nutzt, dann musst du so weit ich mich erinnern kann mit glTexGen arbeiten. Weiß gerade nicht mehr, ob es GL_OBJECT_LINEAR oder GL_EYE_LINEAR war, aber der Trick war, dass du 4 Parameter angeben kannst, die geometrisch gesehen eine Ebene bilden, so dass der Abstand zu dieser Ebene die Koordinate ist (welche kannste einstellen, musst du dann ein mal für s und einmal für t machen). Das reicht für orthogonale Projektionen auch aus (Sonne). Für Perspektivische (Helmleuchte, um da auch etwas weiter zu helfen) muss man das allerdings perspektivisch machen. Mathematisch gesehen Bildet OGL das DP4 des angegebenen Vektors mit der Vertex-Position. Wenn man also TexGen für alle 4 Komponenten einschaltet (GL_S, GL_T, GL_R, GL_Q) dann kann man 4 Vektoren angeben, die Praktisch eine 4x4 Matrix beilden. Die gleiche wie für die VertexProgs. Nur dass die Matrix-Vektor Multiplikation nicht in einem Vertexprog abläuft, sondern über glTexGen.
Wichtig für das Verständnis der beiden Wege ist, dass OGL alle Koordinaten immer durch die 4. Komponente teilt. Bei den Vertices ist das am Ende des Projektionsschritts die w-Komponennte, bei den Texturkoordinaten die 4. Komponennte Q. Da Q Normalerweise immer 1 ist, fällts nicht auf, aber über die Matrixmultiplikation ist dies der einzige Weg, eine perspektivische Projektion zu erzeugen.
Hoffe es war halbwegs verständlich....
Edit: @AI: wenn du ne gute Taschenlampen-Textur findest, oder ne Ahnung, wie man eine schöne malen kann, dann immer her damit ^^
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
@Taschenlampentextur: Wie wäre es mit Beamshots? Einfach eine weiße Wand nehmen und draufleuchten. Das Ergebnis mit einer Kamera auf einem Stativ aufnehmen. Nachbearbeiten und fertig ist es
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
hmm, dann kann ich meine gruselig-dunklen, mit Zombies überschwemmten Hölen mit meiner Aldi-Taschenlampe untersuchen - da wirds gleich noch gruseliger. Nein, Scherz bei Seite, die Idee ist gut. Muss ich mal ausprobieren - sobals es dunkel ist...
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
*gg*
Aldi-Taschenlampe... goldig da musst du dann richtig lange belichten, sonst ist das Bild zu verrauscht Ich mach aber bald auch solche Beamshots, nur mit deutlich größeren "Taschen"-Lampen Die leuchten schon ein bis zwei Kilometer weit
*Spotlight raushol*
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Und wenn du ne Railgun hast, meine Mini-Maglight leuchtet weiter, denn Lights[0].Radius kann verdammt große Zahlen annehmen ^^
Wäre warscheinlich zu OffTopic, hier Bilder zu posten, aber es sieht gar nicht mal so schlecht aus. Besser als das alte Coder-Art Licht. Hätte nicht gedacht, dass es überhaupt klappt, bei meiner Digicam. Auf jeden Fall danke für den Tipp.
Zitat:
Was haltet ihr eigentlich davon eure Antworten ein einem Wiki-Artikel festzuhalten?
Joa, der Artikel Projezierte_Textur fehlt noch. Aber wenn ich das schreibe wirds total wirsch....
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
Registriert: Di Sep 06, 2005 18:34 Beiträge: 362 Wohnort: Hamburg
Hi ...
Also ich habe jetzt noch den kompletten Tag rumprobiert und rumgesucht.
Das einzige was wohl anständige Ergebnisse geben wird ist Shadow-Mapping (ich kriegs einfach nicht hin n Shadow-Volume für n Terrain zu erstellen, und auch wenn ich das hätte bräuchte ich immer noch die Caps, un da hab ich nichmal nen Ansatz *g*)...
Ich denke die Technik verstehe ich jetzt auch (hab auch schon bissl rumprojeziert (mit meiner Textur-Shadow-Map, was auch fast gut aussah)). Allerdings weiß ich nicht wie ich die Kamera-Sicht darstellen soll.
Durch ne Ortho-Sicht, aber wie krieg ich sie dann in die Richtung in die ich sie haben will?
Irgendwie sollte das ganz einfach sein, aber mein Kopf scheint einfach zu voll von andrem "Mist" zu sein, so, dass ich das einfach nich hinkriege ...
Würd mich über n paar Schupser in die richtige Richtung freuen...
Hab auch diese schöne Seite hier gefunden:
http://www.gpwiki.org/index.php/Generat ... ing_OpenGL Frage mich aber ob das der richtige Ansatz für mein Problem ist, da es da ja darum geht das Terrain von Gegenständen beschatten zu lassen... Aber kann man das evtl so modifizieren, dass alles alles beschattet?
Gruß
Shai
_________________ Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)
Habs nur überflogen, aber es scheint ehr dafür zu sein, dass die Objekte nen Schatten auf die Landschaft werfen und nicht umgekehrt. Außerdem verstehe ich die nicht ganz. Sie legen nen Extrapass fürs Licht aus der Sicht der Lichtquelle an, rendern dafür auch das komplette Mesh (Bäume, Terrain, ...) sie kopieren es in eine Textur, die sie dann im eigentlichen Pass auf das Mesh projezieren. Warum benutzen sie dann nicht gleich richtige Shadowmaps?!? Der gleiche Aufwand, fast die gleichen Schritte, nur es Funzt besser...
Egal, ich würde dir auf jeden Fall zu richtigem Shadowmapping raten, also das mir dem zBuffer.
Zitat:
Allerdings weiß ich nicht wie ich die Kamera-Sicht darstellen soll. Durch ne Ortho-Sicht, aber wie krieg ich sie dann in die Richtung in die ich sie haben will?
Falls du die Lichtquellensicht meinst: glRotate + glTranslate + ausgeschlafener Kopf
_________________ [18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay
hi, i'm a signature viruz, plz set me as your signature and help me spread
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.