PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lichtberechnung


robinhuehn
29.12.2003, 01:06
Hallo Leute,

aufbauend auf meiner C++ Standardbibliothek "Grundplatte", welche größtenteils schon dokumentiert und implementiert ist, soll ein Raytracer entwickelt werden. Dieser Raytracer soll sowohl die Methoden zur Kamerabildberechnung als auch die zur Lightmapberechnung von Weltkarten beinhalten (die Lichtberechungsmethoden für beide Zwecke dürften ähnlich ausfallen).

Was muss der Raytracer können :
-------------------------------------------
*Berechung der Lichtstrahlung in Spektralform, d.h. alle (internen) Berechungen des Raytracers sollen in der Einheit (Frequenz*Watt)/Sterradiant erfolgen, also streng physikalisch
*allg:Berechnung von Lichtstrahlung anhand punktförmiger Lichtquellen
*allg:Berechnung von Lichtstrahlung anhand polygonaler Lichtquellen
*Berechung von projiizierten Bildern (über eine Kamera)
*Berechung von "lightmaps" der Texturen der Welt (Radiosity)
*beliebig tiefe Reflektion des Lichts
*wenigstens einfach - diffuse Streuung des Lichts
*Schattierung und Beleuchtung volumetrischer Nebel
*Berechnung von wellenlängenabhängiger Refraktion (Dispersion)
*weichmachende Filter (min und mag-filter-ähnliches)
*äusserts flexibles multi-texture-mapping der Texturen , dazu gehört u.a.:
*Verarbeiten von normalen Maps (normale Absorbtion)
*Verarbeiten von Transmissions-maps (Durchscheindedes Licht)
*Verarbeiten von Specular-maps (reflektierendes Licht)
*Verarbeiten von rgb-Bumbmaps (oberflächenrauhe maps)

Was könnte er noch zusätzlich beherrschen :
---------------------------------------------------------
*Beugung und Interferenz (dies denke ich ist ein sehr schwer zu erreichendes Ziel)
*Polarisation (könnte interessant werden)


Das Projekt ist sehr anspruchsvoll und wird wahrscheinlich erst in einem halben Jahr oder so beginnen. Für Sachen wie Dispersion sehe ich im Moment auch keinen sinnvollen Entwurf. Ich bin auch offen für Diskussion über Änderung der primären Zielsetzung.
Vor einigen Jahren hatte ich eine sehr einfache Implementation mit niedrigerer Zielsetzung gehabt (siehe im Anhang einige Bilder dazu). Wer sich für das Projekt interessiert und etwas Erfahrung mit sowas hat, soll sich bei mir melden.

Grüße !!!


Jan Krüger
29.12.2003, 20:45
Solange es nicht allzu physikalisch werden muss, empfehle ich Blender als Basis, der kann irgendwie fast alles.

Beugung/Interferenz halte ich aber tatsächlich für sehr schwierig, immerhin müsstest du dafür die Rays relativ klein (Achtung, Understatement) machen, und das dürfte die Ausführungszeit auf einem herkömmlichen Computer etwas erhöhen (dito). Es wäre vielleicht angebracht, auf den ersten Quantencomputer zu warten.

Dispersion sagt mir nicht wirklich was, ich war in Physik nicht gar so toll. :)

robinhuehn
29.12.2003, 22:11
hi

was genau verstehst du unter einem blender ?
naja , beugung und interferenz sind so sachen, von denen ich noch nicht mal genau weiß, wie ich sie modellieren würde, selbst wenn unendlich rechengeschwindigkeit zur verfügung stehen würde. Darüber nachzudenken schadet aber andererseits nicht.
Vor einigen Monaten hatte ich versucht, einen Entwurf für Dispersion zu entwicklen, der akzeptable Geschwindigkeiten ergeben sollte, und bin gescheitert.
(Dispersion ist grob gesagt die wellenlängenabhängige Lichtberechung an optisch unterschiedlich dichten Medien. Wird ein weißer Lichtstrahl zB durch einen geschliffenen Diamanten geschickt, so spaltet er sich ggf. auf in unendlich viele andere Lichtstrahlen (teilweise monochrom) auf .Dies ist in akzepabler zeit schwer modellierbar. Ein Regenbogen ist auch Dispersion an Wasser - Luft, rotes Licht wird anders reflektiert/gebrochen als blaues Licht).
Polarisation und Dispersion halte ich durchaus für erreichbare Ziele, mit denen man wohl einige Interessante Effekte erreichen kann. Man muss halt irgenwie den Aufwand herunterbrechen können (zB. mit Betrachtungen von ganzen Flächen und Strahlungsvolumen, gerasterte Verfahren mit einfachen Strahlen wären wohl unzureichend (?)).
Am Projekt interessiert? (man muss nicht sooo gut in physik sein finde ich (es soll je auch keine echte Simulation werden), kreative Leute sind gefragt)

Grüße!

Schaf
29.12.2003, 22:56
blender (eigenname) ist ein open-source raytracer/modeller mit integrierter game-engine. die url ist http://www.blender3d.org, aber da gabs probleme mit der erreichbarkeit, und ich glaube, die sind auch umgezogen ... ach, guck einfach dort oder bei google, du wirst ihn schon finden ;)

robinhuehn
29.12.2003, 23:39
ja ok, wollte aber ein eigenes Projekt starten. Deshalb hab ich das Thema hier eröffnet !

Schaf
30.12.2003, 00:24
klar ;) ich glaub jan meinte mit "blender als basis", dass du dir etwas code abguckst/die raytracing-engine "ausbaust" und modifizierst. blender steht unter der gpl, und da ist sowas erlaubt, solange du nachher dein projekt auch unter der gpl (open source) veröffentlichst, und du sagst, dass du etwas von blender benutzt hast.

robinhuehn
30.12.2003, 01:29
Danke für die Erläuterungen und Bemühungen.

Aber ich ziehe es vor, nur selbstentworfenen Kram zu verwenden. (oder den von Teamkollegen, wenn ich welche hätte).
und andererseits : Findest du es leichter, einen fremden code zu interpretieren als ein eigenes Konzept zu entwerfen? Ich denke da ist letzteres doch wesentlich angenehmer, sauberer und aussichtsreicher! Erfahrungsgemäß!

Ein Konzept aus einem fremden Code abzuleiten, ist sehr mühsam.
Ein Code aus einem eigenen Konzept abzuleiten, ist sehr einfach.
Was denkst du?

Grüße!

Jan Krüger
30.12.2003, 11:33
Das stimmt, solange das Konzept nicht gar zu umfangreich ist...
Blender war mal ein kommerzielles Projekt, wurde also zu großen Teilen von hauptberuflichen Programmierern entwickelt, und die haben schon ziemlich lange dafür gebraucht.
Grundsätzlich finde ich es ja nicht schlecht, wenn jemand sein eigenes Projekt startet (im Gegenteil - so kommen erst tolle neue Sachen zustande), aber bei so umfangreichen Sachen kann es, denke ich, nicht schaden, wenn man bei anderen Projekten anleiht. Selbst, wenn man die Hälfte davon wieder umschreibt, hat man immerhin eine Basis, von der man weiß, dass sie funktioniert. :)

Scavi
30.12.2003, 16:48
Nur so als Tipp: Wenn du einen Echtzeit-Raytracer bauen willst, solltest du einige Features von deiner Liste streichen, ansonsten kannste dir auch mal PovRay angucken !

robinhuehn
30.12.2003, 20:27
hallo scavi und jan,

ist natürlich nicht für Echtzeit gedacht.
naja, wie auch immer....
die Hauptschleife der Entwicklung lautet:

do{
entwerfe();
implementiere();
teste();
dokumentiere();
}while(!fertig);

Meinen alten Raytracer hatte ich innerhalb von einem Monat fertig. Der neue wird wohl nicht länger als 1-2 Jahre dauern ... Jedenfalls bringt mich keiner dazu, fremden Code zu interpretieren und daraus ein Konzept abzuleiten. Das ist nur was für Leute, die sich keine eigene Gedanken dazu machen wollen/können. Wenn die dann von mir aus das Fundament von PovRay oder Blender eingebaut bzw. übernommen haben, stehen sie dann dumm da, wenn fundamentale Entwürfe geändert werden müssen und scheitern zwangsweise.

Grüße!