[B3D]2D-Schatten (3D benötigt!)

Übersicht BlitzBasic Codearchiv

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Neue Antwort erstellen

Xaymar

ehemals "Cgamer"

BeitragDi, Jun 16, 2009 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ich eigentlich sagen wollte ist, das sich die lichter nicht addieren, sonder das hellere gewinnt(außer bei farbigen licht)
Warbseite

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jun 16, 2009 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
PSY, ja, die logische Vorgehensweise ist dann eben: If A>B Then ... kann ja auch nur True=1 oder False=0 sein. Das Ergebnis der Operatoren (hier im Beispiel ''A>B'') kann man somit auch mit in eine Formel rein packen. Man kann auch >, < und = anwenden.

Schatten, bin fesziniert über die bisherig gezeigten Möglichkeiten. Nur eine Frage, könnte man auch mit viel größeren Lichtreichweiten arbeiten, ohne viel Systemrecourcen zu verbraten? Denn eine Faustlanger Radius ist noch etwas wenig um es in ein Spiel einzusetzen.

Achja, zu der Lichtaddition zweiter Lichtquellen. Wie soll man denn bitte ein Pixel dessen Helligkeit 255,255,255 beträgt, durch eine Addition auf dem Monitor mit 510,510,510 anzeigen lassen? Geht doch gar nicht. Wer realistische Lichtaddition haben will, müsste erst Lichtquellen mit nicht mehr als 127,127,127 probieren.

Edit1: An aMul unter mir: Ich bezog mich bei der Lichtaddition nicht an dich, sondern andere Zweifler die sich das nicht vorstellen können, dass Schatten sich überschneiden wenn mehrere Lichtquellen vorhanden sind.
  • Zuletzt bearbeitet von hectic am Mi, Jun 17, 2009 0:21, insgesamt einmal bearbeitet

aMul

Sieger des Minimalist Compo 01/13

BeitragDi, Jun 16, 2009 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
@Tankebuster:
Ja, Licht ist weicher, da es in der Realität Sachen wie Beugung und indirektes Licht gibt.
Und was wird wo überall reflektiert?
Du meinst, dass der Hintergrund weiß ist? Einfach was dahinter zeichnen hilft und funktioniert hervorragend.

@Cgamer:
Jetzt in echt oder in meinem Programm?
Beides wäre übrigens falsch...
Mein Code addiert die einzelnen Lightmaps vor dem endgültigen Rendern und in echt kann ich eine Wand auch im Hochsommer noch mit einer Leuchtdiode heller machen.

@hectic:
Ja, man kann mit größeren Lichtreichweiten arbeiten, wo sollte das Problem sein? Du kannst sie direkt in meinem Code ändern und ich verspreche dir, dass es funktioniert. Genau genommen werden gerade eh alle Schatten, für alle Objekte berechnet, nur der Licht-Hintergrund wird durch eine größere Reichweite verändert.

Zur Helligkeit:
Wenn das an mich gerichtet war: Ja, das stimmt, das ist, was ich mit meinem "ab FF ist Schluss" ausdrücken wollte.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Tankbuster

BeitragDi, Jun 16, 2009 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meinte, in der realität wird das Licht noch von Wänden, ect reflektiert, und je nach Oberfläche noch gestreut Very Happy

Dadurch sieht die Computer-Variante vielleicht etwas ungewohnt aus, ect.......


Natürlich sollst du das jetzt nicht einbauen ^^
Aber wo ich schonmal die Vorzüge des echten Lichts aufgezählt hab, durfste das ja auch nicht fehlen =)
Twitter
Download Jewel Snake!
Windows|Android

Lastmayday

BeitragDi, Jun 16, 2009 23:48
Antworten mit Zitat
Benutzer-Profile anzeigen
man müsste die helligkeit bei allem anpassen: eine taschenlampe wird nachts heller wahrgenommen als tagsüber. (logisch Wink ) also müsste man doch daraus nen HDR ähnlichen effect machen in dem man eben einen spizen wert errechnet in int form. ist der wert eben 510 dann wird aus 255 -> 127. damit das ganze nicht so "stufenhaft" ist solte man einen bloom ähnlichen blend effect machen und dan in 2 sek überblenden.

user posted image

Xaymar

ehemals "Cgamer"

BeitragMi, Jun 17, 2009 7:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
@Cgamer:
Jetzt in echt oder in meinem Programm?
Beides wäre übrigens falsch...
Mein Code addiert die einzelnen Lightmaps vor dem endgültigen Rendern und in echt kann ich eine Wand auch im Hochsommer noch mit einer Leuchtdiode heller machen.


Ja, das geht, aber bei deinem code kannst du das nicht so nachachen wie im Real Life. DEr rEchenaufwand wäre zu groß
Warbseite

aMul

Sieger des Minimalist Compo 01/13

BeitragMi, Jun 17, 2009 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein Code kann die Realität zu 100% nachahmen...
In den Grenzen die ich meiner Lib bewusst gesetzt habe ist soweit ich weiß alles physikalisch korrekt, und du hast immer noch nicht klar ausgedrückt, was deiner Meinung nach denn falsch ist.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Xaymar

ehemals "Cgamer"

BeitragMi, Jun 17, 2009 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Nen bild davon kann ich leider nich machen Wink

Was ich mein ist,
Das ein Licht was ca 25% stärker(heller) ist als das Licht dahinter, das Licht dahinter verschluckt/auslöscht). Bei farbigen Lichtern ist eine addition ok.
Warbseite

TimBo

BeitragMi, Jun 17, 2009 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

danke aMul nochmal für dienen Erklärung , jetz ist es mir auch klar wie das Ding Worx ^^

Viele Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Tankbuster

BeitragMi, Jun 17, 2009 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
aMul hat Folgendes geschrieben:
Kein Code kann die Realität zu 100% nachahmen...

Kommt auf die Realität an. Wink
Twitter
Download Jewel Snake!
Windows|Android

aMul

Sieger des Minimalist Compo 01/13

BeitragMi, Jun 17, 2009 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, wie gesagt, Cgamer... das ist leider falsch. Licht addiert sich immer, egal welche Wellenlängen.
Es mag vielleicht so aussehen, aber im Raum ist genug Platz für Photonen, dass sie sich nicht drängeln müssen.

@TimBo:
Kein Problem, freu mich dass du es verstehst. Smile
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Xaymar

ehemals "Cgamer"

BeitragMi, Jun 17, 2009 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Naja, wie gesagt, Cgamer... das ist leider falsch. Licht addiert sich immer, egal welche Wellenlängen.
Es mag vielleicht so aussehen, aber im Raum ist genug Platz für Photonen, dass sie sich nicht drängeln müssen.

wir leben in unterschiedlichen welten anscheinend XD
wenn ich bei mir dir taschenlampe geben einen etwas heller angeleuchteten gegenstand halte, gewinnt das eine Licht iwie die oberhand. Kamera hab ich grade nich
Warbseite

Holzchopf

Meisterpacker

BeitragMi, Jun 17, 2009 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Kamera würde da auch nicht viel nützen. Das Phänomen entsteht nämlich erst im menschlichen Auge, weil das Spektrum der erfassten Lichtstärken (Wellenlängen übrigens auch) sehr beschränkt ist, dafür aber ziemlich hochauflösend. Deshalb haben wir ja sowas wie Pupillen, die mal mehr, mal weniger Licht reinlassen. Trotzdem passiert es ab einer gewissen Helligkeit, dass wir noch helleres nicht mehr als noch helleres wahrnehmen können.
That's live...
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

BIG BUG

BeitragMi, Jun 17, 2009 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Die Version mit zwei Lichtern braucht leider immer noch 50ms...
Viel mehr wird aber in Blitz nicht mehr rauszuholen sein


Ich behaupte da sollte schon mehr gehen. Man müsste bei mehreren Lichtern nur den Ansatz ändern und nicht mehr die abgedunkelten Flächen(Schatten) berechnen, sondern eben die von den Lichtern erhellten Flächen(Licht).
Diese könnte man dann einfach additiv übereinanderlegen und mit dem Untergrund multiplizieren, so dass auf langsame Texturbuffer verzichtet werden kann.
Die Berechnung der Lichtflächen gestaltet sich natürlich etwas aufwändiger, aber im Prinzip kann man hier ähnliche Optimierungen wie für die Schattenberechnung verwenden(z.B. nur ganze konvexe Objekte betrachten).
Durch die radiale Ausbreitung des Lichts sollte auch die Triangulierung der Lichtfläche auch recht simpel und fix ausfallen. Außerdem kann man Objekte außer Reichweite des Lichts ignorieren.
Ich bin mir ziemlich sicher, dass man so auf einem halbwegs vernünftigen Rechner bei einer nicht zu komplexen Szene mehrere Lichter flüssig darstellen kann.

Im Moment habe ich allerdings keine Zeit mich selbst daran zu versuchen, aber ihr würdet das sicherlich auch hinkriegen Smile
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Noobody

BeitragMi, Jun 17, 2009 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
BIG BUG hat Folgendes geschrieben:
Diese könnte man dann einfach additiv übereinanderlegen und mit dem Untergrund multiplizieren, so dass auf langsame Texturbuffer verzichtet werden kann.

Genau hier liegt das Problem Razz
Die Lichter mal so eben additiv übereinanderlegen geht nicht so einfach - wenn ein Licht per RenderWorld gezeichnet wird, so wird es gleich mit dem momentanen Bild auf dem Backbuffer verrechnet und nicht zuerst mit den anderen Lichtern und dann das Endergebnis dieses Vorgangs mit dem Backbuffer.
Um die Lichter zuerst untereinander zu addieren, müsste man entweder die Lichter in Texturen rendern und diese mit additivem Blend verrechnen, um das Mesh mit dem Hintergrund zu multiplizieren, oder aber die Lichter separat additiv rendern, das Endergebnis in eine Textur kopieren und dann mit der Szene multiplikativ rendern.
Beides benötigt Texturbuffer, die leider in Blitz relativ langsam sind.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

aMul

Sieger des Minimalist Compo 01/13

BeitragMi, Jun 17, 2009 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Wo liegt das Problem darin, einfach alle Lichter vom selben Mesh darstellen zu lassen?
einfach EntityBlend 3, alle Lichter-Polys erstellen und die addieren sich von ganz alleine.
Das ganze müsste man dann natürlich noch in eine Textur schieben/dorthin rendern und dann wieder mit der Spielwelt multiplizieren.

@Big Bug:
Natürlich ist das in der Theorie eine sehr ansprechende Möglichkeit, aber in der Praxis ist es wohl doch mit einem Haufen Rechenarbeit verbunden. Für mehrere Lichter sollte es dann aber, wie du ja schon gesagt hast deutlich schneller sein.

Wo ich gerade darüber nachdenke, ich habe da eine Idee....
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Noobody

BeitragMi, Jun 17, 2009 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
aMul hat Folgendes geschrieben:
Wo liegt das Problem darin, einfach alle Lichter vom selben Mesh darstellen zu lassen?
einfach EntityBlend 3, alle Lichter-Polys erstellen und die addieren sich von ganz alleine.
Das ganze müsste man dann natürlich noch in eine Textur schieben/dorthin rendern und dann wieder mit der Spielwelt multiplizieren.

Das sagte ich bereits und da liegt ja das Problem. CopyRect im Texturbuffer ist nämlich langsam, was ja schon öfter festgestellt wurde.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Xaymar

ehemals "Cgamer"

BeitragMi, Jun 17, 2009 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
cameramode kann man auf nicht-auto-cls setzen. also sozusagen erst 2d zeug, dann 3d licht drüber
Warbseite
 

BIG BUG

BeitragDo, Jun 18, 2009 0:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau genommen musst Du es genau andersrum machen, aber MultiPassRendering ist hier schon das Stichwort.
Also im ersten Pass die Lichter rendern, dann im zweiten Pass die Texturebene drüber multiplizieren. In einem dritten Pass(oder noch im zweiten) könnte man dann sogar einfach die berechneten Licht-Meshes benutzen um Caustics und Überbelichtung zu erzeugen. Mit dem Brush-Befehl könnte man hier ja dann einfach die Texturen austauschen.

Das Rendern in mehreren Passes ist übrigens nicht nennenswert langsamer als alles auf einmal zu rendern.
Außerdem kann man auf diese Weise dynamische Lichter wunderbar mit Lightmaps vereinen, so dass der einzig sichtbare Unterschied zwischen beiden Lichttypen die Texel-Auflösung der Lightmap ist.
blablup...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Noobody

BeitragDo, Jun 18, 2009 7:55
Antworten mit Zitat
Benutzer-Profile anzeigen
BIG BUG hat Folgendes geschrieben:
Also im ersten Pass die Lichter rendern, dann im zweiten Pass die Texturebene drüber multiplizieren.

Auch hier hast du ein Problem mit dem Multiplizieren. Das funktioniert sehr gut, wenn du ein einzelnes Mesh über das Licht renderst (mit EntityBlend 2), aber es wird dann problematisch, wenn du zwei Meshes übereinander liegen hast. Dann wird zwar das untere mit dem Licht multipliziert, das obere aber wird auf das Ergebnis von der letzten Berechnung draufmultipliziert - es entsteht also eine bunte Mischung zwischen Mesh 1 und Mesh 2, anstatt dass Mesh 2 Mesh 1 verdeckt.
Eventuell könnte man dieses Problem aber mit einem dritten Renderdurchgang und dem Z-Buffer lösen, das werde ich mal ausprobieren.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group