Hiho. Ich würde gerne einmal ein 2.5D-Adventure basteln mit 2D-Hintergründen und 3D-Protagonisten. Das ist alles paletti und krieg ich hin (ich nehm wahrscheinlich die Irrlichtengine). Weswegen ich jetzt hier poste, ist ein technisches Detail, das zwar kein "must have" ist, aber eben doch irgendwie fast, zumindest also ein "very very nice to have".
Ich weiß nicht, wer von euch Alone In The Dark 4 gespielt hat:
Das sehr tolle daran ist dieses dynamische Vertexbeleuchtung-Spotlight für die Taschenlampe. Es ist ein sehr simples Vertexlicht (also beleuchtet auch nur pro 3DDreieck was bei zu starkem Lowpoly auffällt, ich denke, ihr wisst, was ich meine), ohne Schattenwurf, es scheint auch durch Wände durch etc., eben ein Standard-OpenGL/DirectX dynamisches hardwareberechnetes Licht.
Nun ist meine Frage, wie man das am Besten realisiert. Ich möchte ein wenig meine Gedankengänge notieren, um euch eine Basis zu bieten von dem, das ich schon erarbeitet habe.
Ein 2DHintergrund hat ja erstmal keine Tiefeninformation. Auch mit Vorne-/Hintendranlayer wie AGS kann man ja erstmal nicht sehr viel mehr machen als Dinge vorne oder hintendran anzuzeigen, für Lighting reicht das nicht. Außerdem: das Licht wird wohl kaum anders zu realisieren sein, als eben genau ein solches in einer echten 3DSzene zu realisieren.
Meine Idee war daraufhin, die Szene, die aus einem Mix aus 3DModellen (für das Haus) und Fotomontagen (eigentlich für alles sonst: Wiesen, Bäume, Gegenstände (bis auf vllt. Dinge wie ein Tisch, aber die Stühle werd ich wahrscheins auch "reinkleben") besteht, als stark vereinfachtes 3DModell anzufertigen, oder eher: Erst das simple 3DModell zu machen, dann einen Screenshot im Modeler in der Perspektive, die ich will, und das dann als Mal-/Montiervorlage nehmen.
Das entstandene 2DBild könnte ich auf das Model genau so draufspannen, dass man aus genau dem ausgewählten Winkel keinen Unterschied sieht. Dieser Punkt ist etwas schwer verständlich, und zugleich der Knackpunkt: Ich will das UV-Mapping also so haben, dass man genau aus dem richtigen Winkel das selbe Bild sieht, wie als ob es einfach als 2D angezeigt würde. Nur dass es eben eine genial texturierte 3DSzene ist.
Wings3D bietet eine sehr tolle Texturierfunktion: Man selektiert alle gewünschten Flächen, dreht die Kamera entsprechend, und kann dann halbtransparent die Textur gekachelt über den ganzen Schirm anzeigen. Sie lässt sich dann bequem passend hinschieben, und mit einem Klick landet sie wie draufgepresst genau so auf allen selektierten Flächen.
Ich hoffe, ihr könnt mir in der Technik folgen: Man geht in den richtigen Winkel, die Textur wird wie auf den Bildschirm gespannt ganz 2Dplatt angezeigt, und per Klick landet sie so auf den selektierten 3DFlächen, dass genau aus dem Winkel das ganze eben so aussieht wie die über den Bildschirm gespannte Textur.
Das wäre ja schon alles, aber der Teufel steckt im Detail:
Dieser Vorgang in Wings3D geschieht freihand. Und die 2DTextur muss pixelgenau sitzen. Denn wenn eine Kante des 2DBildes nicht exakt auf der Kante des 3DModelles liegt, dann ist alles falsch: Die Beleuchtung, die Kollision und das Clipping (wenn die 3DEcke ein Stück weiter links ist, würde natürlich als Folge früher geklippt werden, wenn die Figur hinter die Ecke läuft, sodass sie praktisch ein paar Pixel zu früh abgeschnitten wird).
Und pixelgenau ist kaum möglich, es wird immer minimal danebenlanden (ich hab schon genug Probleme, beim Erstellen eines Hauses in 3D die Backsteine an zusammentreffenden Textur"nahtstellen" ungefähr plausibel auf die passende Höhe zu kriegen, damit kein zu sichtbarer Schnitt da ist).
Was ich mir als Antwort vorstellen würde: Die Lösung für das obige Problem gibt es vielleicht nicht (oder doch?), mich würde vorrangig als Antwort interessieren, wie ihr das umsetzen würdet. Also dass ihr meinen Ansatz vllt. auch erstmal liegen lasst und ausführt, wie ihr euch das vorstellt, wie so ein Taschenlampenlicht in der Szene möglich ist.
Oder am Ende weiß jemand, wie das in Alone in the dark realisiert wurde, das wäre auch sehr spannend zu wissen.
Letztendlich gibt es vielleicht eine Lösung für meine Sache: Die Backgrounds in viel höherer Auflösung erstellen und runterrechnen. Dank dem natürlichen Antialiasing werden die Kanten so "ungenau", dass eine minimal falsche Platzierung nicht auffallen würde. Aber ich würde vor allem gerne wissen, ob es denn dazu noch eine Alternative gibt.
Technische Realisation von Leuchteffekten (Theorie)
-
- Hobby-Archäologe
- Beiträge: 155
- Registriert: 18.07.2006, 17:12
- Kontaktdaten:
- Mac (Bullshit Softworx)
- Verpackungs-Wegwerfer
- Beiträge: 53
- Registriert: 16.02.2006, 20:13
- Wohnort: Duisburg
- Kontaktdaten:
Hi,
hast du dir schon mal die Wintermute Engine angesehen? Ich weiß nicht, wie weit du jetzt schon mit der Entwicklung einer eigenen Engine bist, aber WME bietet eine Unterstützung für 3D-Charaktere in einer vorgerenderten 2D-Umgebung inklusive Schatten und auch die Möglichkeit die Beleuchtung über 3D-Lichtquellen. Ich selbst habe bis jetzt noch nicht mit der 3D-Unterstützung gearbeitet, aber ich weiß, daß einige Alone in the dark-/Resident Evil-Style-Spiele unter WME in der Entwicklung sind. Ist also eventuell eine Alternative ohne das Rad neu zu erfinden.
MfG
Mac
hast du dir schon mal die Wintermute Engine angesehen? Ich weiß nicht, wie weit du jetzt schon mit der Entwicklung einer eigenen Engine bist, aber WME bietet eine Unterstützung für 3D-Charaktere in einer vorgerenderten 2D-Umgebung inklusive Schatten und auch die Möglichkeit die Beleuchtung über 3D-Lichtquellen. Ich selbst habe bis jetzt noch nicht mit der 3D-Unterstützung gearbeitet, aber ich weiß, daß einige Alone in the dark-/Resident Evil-Style-Spiele unter WME in der Entwicklung sind. Ist also eventuell eine Alternative ohne das Rad neu zu erfinden.
MfG
Mac
Entwickler des 3D-Cartoon-Point&Click-Adventures: Wormventures - Barrier 51
-
- Hobby-Archäologe
- Beiträge: 155
- Registriert: 18.07.2006, 17:12
- Kontaktdaten:
Ich brauche eine 100% linuxkompatible technische Basis (hab kein windows). Ich werd mal gucken, ob die Wintermute unter Linux geht.
Wie macht die Wintermuteengine das denn?? Also für die Berechnung vom Licht braucht die ja auch irgendeine Tiefeninformation, die aufs Pixel genau hinhauen muss. Aber ich bezweifle, dass man für all die Hintergründe ein 3DModell erstellen muss
Wie macht die Wintermuteengine das denn?? Also für die Berechnung vom Licht braucht die ja auch irgendeine Tiefeninformation, die aufs Pixel genau hinhauen muss. Aber ich bezweifle, dass man für all die Hintergründe ein 3DModell erstellen muss
- Mac (Bullshit Softworx)
- Verpackungs-Wegwerfer
- Beiträge: 53
- Registriert: 16.02.2006, 20:13
- Wohnort: Duisburg
- Kontaktdaten:
Oh, das mit Linux könnte ein Problem werden. 2D-Spiele können meines Wissens unter Linux emuliert werden, aber ich vermute, daß das bei den 3D-Sachen nicht klappt (wissen tue ich es aber nicht).
Technisch funktioniert das ganze mit Hilfe einer sogenannten "Hidden geometry". Die Szene, stark abgespeckt was die Polygonzahlen angeht und untexturiert, liegt unsichtbar im Hintergrund und verarbeitet Schattenwurf, Beleuchtung und Kollisionen. Sehen kann man nur das gerenderte Bild der Szene. Eine "Hidden geometry" kann z.B. als *.3ds oder *.ms3d (und ich glaube auch *.x) eingeladen werden.
MfG
Mac
Technisch funktioniert das ganze mit Hilfe einer sogenannten "Hidden geometry". Die Szene, stark abgespeckt was die Polygonzahlen angeht und untexturiert, liegt unsichtbar im Hintergrund und verarbeitet Schattenwurf, Beleuchtung und Kollisionen. Sehen kann man nur das gerenderte Bild der Szene. Eine "Hidden geometry" kann z.B. als *.3ds oder *.ms3d (und ich glaube auch *.x) eingeladen werden.
MfG
Mac
Entwickler des 3D-Cartoon-Point&Click-Adventures: Wormventures - Barrier 51
-
- Frischling
- Beiträge: 7
- Registriert: 22.05.2007, 22:41
- Kontaktdaten:
-
- Hobby-Archäologe
- Beiträge: 155
- Registriert: 18.07.2006, 17:12
- Kontaktdaten:
Dann macht die Wintermute also genau das, das ich mir mit meiner Irrlicht überlegt habe. Somit kann ich eigentlich auch gut auf Wintermute verzichten.
Anscheinend funktioniert das Prinzip genau so, wie ich es mir im ersten Post überlegt habe...
Wenn ich aus dem Urlaub zurück bin, muss ich das mal ausprobieren!
Anscheinend funktioniert das Prinzip genau so, wie ich es mir im ersten Post überlegt habe...
Wenn ich aus dem Urlaub zurück bin, muss ich das mal ausprobieren!