dynamic Lightning

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
Benutzeravatar
oh... well?!
Beiträge: 98
Registriert: 21.07.2010 10:46
Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE

Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)

dynamic Lightning

Beitrag von oh... well?! »

hallo erstmal. Hab ja schon lange nichts mehr von mir höhren lassen...
Bin grad dabei meine Physik-Engine bisschen zu überarbeiten und zum Beispiel die Arrays durch linked Lists zu ersetzten.
Dann wollte ich eine komplett neue Game-Engine aufsetzten.

Momentan bin ich dabei dynamic Lightning einzubauen, weil ich das einfach nen super Grafikeffekt finde, habe aber folgendes Problem:
Ich würde gerne das gesamte Lightrendering auf einem gesonderten Sprite machen. Dies dann für jede Lichtquelle um dann am Ende alle so erzeugten Sprites additiv auf dem Screen zu blenden. Nun hab ich das Ganze aber momentan folgend geregelt:
-erst werden alle Schatten für die Lichtquelle berechnen.
-dann wird die Lichtquelle mit DisplaySprite() auf dem Bildschirm dargestellt (der reiseige sich ausbreitende Lichtpunkt).
Problem 1 : DisplaySprite funktioniert schonmal nicht auf einem anderen Sprite.
-dann werden alle berechneten Schatten mit TransformSprite() und DisplaySprite3d() in schwarz eingezeichnet, sodass die Schattenkegel entstehen
Problem 2 : Sprite3D() Befehle funktionieren erstrecht nicht auf einem Sprite!

Achja: Es funktioniert nur, solange sich die Lichtquelle nicht direkt in einem Objekt befindet, was mich aber bis jetzt nich weiter stört...
Bis jetzt läuft das alles auch super schnell, aber eben nur für eine Lichtquelle und schwarzem Hintergrund. Hoffe mir kann jemand helfen...
Hab trotzdem mal ne kleine Demo meines bisherigen Standes hochgeladen.
Schonmal Danke an alle Beteiligten!

Screenshot:
Bild

Download der Demo:
http://hosting.alexander-n.de/=Njc2LjEzMjMxNjg3NzA=
Zuletzt geändert von oh... well?! am 06.12.2011 12:53, insgesamt 1-mal geändert.
Bild it's Monkey Buissness
Homepage
facebook
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: dynamic Lightning

Beitrag von c4s »

Hm, wenn ich auf Download klicke, wird bei mir leider die Seite blockiert (Avast). Kannst du es eventuell nochmal woanders hochladen? z.B. http://hosting.alexander-n.de/ ist seit längerer Zeit verlässlich und gut. :allright:
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: dynamic Lightning

Beitrag von RSBasic »

Ich habs mal rasch bei mir hochgeladen, da ich nicht weiß, wann er wieder online ist: lightning.zip
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: dynamic Lightning

Beitrag von c4s »

Danke RSBasic. :)
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
oh... well?!
Beiträge: 98
Registriert: 21.07.2010 10:46
Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE

Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)

Re: dynamic Lightning

Beitrag von oh... well?! »

@RSBasic: danke fürs hochladen
@c4s: danke für den Filehoster. Ich find Xup mitlerweile eh total nervig. funtz nicht und bringt die ganze Zeit Werbung. War sowieso auf der Suche nach einem neue Filehoster, also werd ich den jetzt wahrscheinlich dauerhaft benutzten :).

Habs also jetzt neu hochgeladen.

Hat schon jemand Lösungsideen zu meinen Problemen?
Bild it's Monkey Buissness
Homepage
facebook
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: dynamic Lightning

Beitrag von Kukulkan »

Der Effekt ist toll. Schade, dass die Schatten hart sind und kein Ende finden. Wenn die nach ca. 100 Pixeln transparent wären, wäre es besser.

Grüße,

Volker
Benutzeravatar
oh... well?!
Beiträge: 98
Registriert: 21.07.2010 10:46
Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE

Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)

Re: dynamic Lightning

Beitrag von oh... well?! »

@Kukulkan : Das mag sein das es dann besser aussieht, aber das ist nicht das was ich erreichen möchte. Ich möchte ja Echte 2D Schatten erzeugen und die gehen nunmal hart bis ins unendliche.

Um mal etwas genauer zu zeigen was ich eigentlich möchte, habe ich das Ganze mal versucht mit Raycasting zu erreichen (es wird jeder einzelne Lichtstrahl einzeln berechnet und auf dem Bildschirm dargestellt).
Hier werden 160 Rays pro Lichtquelle verwendet.
Vorteile:
1.Mehrer Lichtquellen und Teilschatten sind möglich.
2.Additives Mischen von Licht ist Möglich
3.Schatten sehen weicher an den Kanten aus.
4.Hintergrundbild ist möglich

Nachteile:
1.Um einiges langsamer als das vorherige Verfahren!!!
2. Man benötigt unglaublich viele Rays um eine Lichtquelle nicht nach Diskokugel aussehen zu lassen, was das Ganze noch langsamer macht.

Nun hätte ich gern Vorteil 1,2 und 4 mit der anderen Technik umgesetzten, aber wie?!?!?

Achja : Auf Leertaste kann man Kisten hinzufügen!

Raycasting:
Bild

download Raycasting demo:
http://hosting.alexander-n.de/=Njc3LjEzMjMxODg2ODA=
Bild it's Monkey Buissness
Homepage
facebook
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: dynamic Lightning

Beitrag von STARGÅTE »

Was du machen kannst ist nicht immer äquidistante Schritte zu gehen sonden von "Ecke zu Ecke".

Das heißt, mit Hilfe von ClipSprite3D() und TransformSprite3D() beim durchlaufen des Vollwinkels immer genau die Ecken anzulaufen wo sie etwas ändert.

Im Endeffekt musst du dann nur immer berechnen welcher Bereich des Lichts im Sprite3D geclippt werden soll und dann mit TransformSprite3D() immer ein Dreieck bauen (Sprite3D besteht ja eh aus 2 Dreiecken).

Hier mal n Beispiel:
Bild

Feststeht, dass du leider nicht schnell genaug auf einere Sprites/Images dein Licht vorrändern kannst, eben weil UseBuffer eh unter DX9 nicht mehr geht.


Was noch gehen würde wäre: wenn du erst mal alles durch den Lichtkreis aufhellst (exakte addition, anderen blendingmode) und dann die schatten wieder exakt abziehst (subtraktion, anderer blendingmode). dann würde dort wieder der normale Hintergrund sein.

Aber ich würde an deiner Stelle erst mal die Idee von mir ausprobieren, funktionieren sollte es zumindest so, da deine Lichter ja eh keine echte Textur haben, sonden nur ein Farbverlauf.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Re: dynamic Lightning

Beitrag von Kukulkan »

Hallo,

evtl. laber ich ja auch nur Mist, aber wäre es nicht besser die Schatten zu zeichnen statt die Lichter? Ich meine, Du malst Licht und schneidest es an den Objekten weg (=Schatten). Sollte es nicht eher so sein, dass Du eine Lichtreduktion (zB blending mit Schwarz) auf bestehenden Hintergrund malst? Ich denke Du verfolgst den Raytracing/Raycasting Ansatz. Aber das könnte für deine Zwecke ja auch nicht so optimal sein, oder? Du könntest Alternativ ein Schatten-Bild mit Alphakanal nehmen und für jeden Schatten nur passend verzerren. Dann könntest Du je Lichtquelle mit genau so wenig Sprites für den Schatten auskommen wie für die Objekte. Und das verwendete Schatten-Image könnte an den Rändern leicht auslaufen und den Schatten auf die Entfernung reduzieren. Weiterhin würde es auch dahinter stehende Objekte weiter abdunkeln.

Nur so als Idee... Wenn's nicht in's Konzept passt, dann bitte ignorieren :wink:

Kukulkan
Benutzeravatar
oh... well?!
Beiträge: 98
Registriert: 21.07.2010 10:46
Computerausstattung: Intel Pentium D 2,8 GHz
2 GB RAM
ATI RADEON X700 SE

Zweitrechner :
Intel Pentium M 1,6 GHz
1 GB RAM
Intel 82852/82855 GM/GME Graphics Controller (64 MB)

Re: dynamic Lightning

Beitrag von oh... well?! »

@Kukulkan:
Kukulkan hat geschrieben:Ich denke Du verfolgst den Raytracing/Raycasting Ansatz
Der Raytracing Ansatzt wird von mir nicht wirklich weiter verfolgt, da es (wie schon beschrieben) zu rechenaufwändig ist, auch wenn es das gewünschte Resultat bringt. Ich hatte nur sowieso Raycasting in meiner PhysikEngine integriert und wollte mit der Raycasting-Demo zeigen wie das Ganze etwa aussehen soll.

Wenn ich nun deine Idee richtig verstanden hab, ist es inetwa das was ich in meiner ersten Demo mache. Ich mal erst das Licht un schneide dann den Schatten wieder weg. Funktioniert soweit auch super, solange man nur eine Lichtquelle hat, das Problem ist eben das ich das direkt auf dem Bildschirm machen muss (weil DisplaySprte3d anders nich funktioniert) und ich damit nicht mehrere Lichtquellen mit ausgeschnittenem Schatten übereinanderlegen kann. Wenn ich den Schatten für die 2te Lichtquelle über den Bildschirm lege, mache ich ja die Stellen auch wieder dunkel auf die durch Lichtquelle Nr.1 eigentlich schon Licht hinkam. Das ist ja mein größtes Problem.

@Stargate:
Ich glaube ich habe deine Idee noch nich so richtig verstanden. Wenn ich quasi die Dreiecke berechne an die Licht hinkommt und dann da eine Textur drüberlege, hätte ich zwat das Problem gelöst, das ich mehrere Lichtquellen benutzen kann. Die so entstanden Lichtkegel würden aber vom Farbverlauf total verzerrt sein und es würde ziemlich hässlich und nicht wirklich nach Licht aussehen.
Bild it's Monkey Buissness
Homepage
facebook
Antworten