Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

08.01.2013, 22:29

Leuchtstoffröhre simulieren

Hallo. Jeder kennt doch diese Deckenleuchten von Büros mit 2 Leuchtstoffröhren und einem Gitter davor. Jetzt ist die Frage, wie kann ich einen Pixel Shader schreiben der Leuchtstoffröhren-Licht simulieren kann. Bisher hab eich nur welche für Point,Dir,Spot. Und ich habe absolut keinen Plan wie ich ein Licht machen soll, was länglich ist.
Bild: http://www.biobay.de/assets/images/stock/14231/250.jpg

Danke für Antworten

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

2

09.01.2013, 00:59

Genau so wie ein punk-licht, nur die abstandsfunktion wird angepasst: du nimmst nicht den Abstand zwischen punk und punkt, sondern punkt und linie. Dazu im Wiki mehr (unter kollisionserkennung)
Also:
Sei die Leuchtstoffröhre zwischen a und b; für einen punkt m is der quadratische abstand l zur röhre gegeben durch:
§\boldsymbol{x}=\boldsymbol{b}-\boldsymbol{a}§
§\boldsymbol{y}=\boldsymbol{m}-\boldsymbol{a}§
§t=\frac{\langle \boldsymbol{x},\boldsymbol{y}\rangle}{\langle \boldsymbol{x},\boldsymbol{x}\rangle}§
§d=\boldsymbol{x}+\boldsymbol{a}\cdot t§
§l=\|d-m\|^2§

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »CBenni::O« (09.01.2013, 01:10)


FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

3

09.01.2013, 01:10

Doch so leicht. Ach ja die Momente wenn man auf der Leitung steht. Ich teste es und melde mich nochmal :D
Edit: Habe deine Formel nicht gesehen. Moment ich gucke drüber ;) Danke schon mal.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

09.01.2013, 08:34

Habe ich ein Déjà vu? Genau die selbe Frage hatten wir doch erst vor erst ein paar Monaten mit dem selben Titel.

Edit:
Ah, das war auch von dir, es ging aber um das Flackern.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

09.01.2013, 10:34

Ohne mich damit richtig beschäftigt zu haben mal ein paar Gedanken von mir:

Punkt- und Richtungslichter haben den Vorteil, dass das Licht genau aus einer Richtung kommt (Spotlight dann natürlich auch). Beim Punktlicht ist das so, weil es unendlich klein ist, beim Richtungslicht ist es so, weil die gedachte, unendlich Große Ebene nur paralleles Licht aussendet und man damit nur Licht von einem Punkt der Ebene bekommen kann.

Aber eine Röhre sendet von sehr vielen Stellen Licht in jede Richtung. Bei diffuser Beleuchtung hätte man also bei einer Lampe Licht aus unendlich vielen Richtungen, und jede davon ist unterschiedlich stark, weil der Winkel zum Normalvektor des Objektes ja unterschiedlich ist. Das klingt zunächst verflixt kompliziert.

Bei der Lösung von Benni bekommt man dann, wenn man eine Ebene Beleuchtung statt des normalen Runden Lichtflecks eine Art gestreckten Fleck. Das wird vermutlich schon ziemlich cool aussehen, die Frage ist nur, in wie weit sich das von der exakten Lösung unterscheidet.

Ich meine, nicht dass in der Computergrafik irgendwas wirklich exakt wäre. Ich wollte nur deutlich machen, dass in meinen Augen die Lösung doch nicht so einfach ist. Wenn man schon schummelt, sollte man sich dessen auch irgendwie bewusst sein. Aber wenn es dann trotzdem gut aussieht, gibt es natürlich absolut keinen Grund, es nicht zu tun.
Lieber dumm fragen, als dumm bleiben!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

09.01.2013, 10:45

Aber eine Röhre sendet von sehr vielen Stellen Licht in jede Richtung.


Allgemein läuft das unter "area light". Leuchtstoffröhren können z.B. auch einfach über eine Reihe von kleinen Punktlichtern "approximiert" werden.
@D13_Dreinig

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

7

09.01.2013, 11:37

Schatten für das Ding wird jedenfalls spannend. In 2D hab ich das hinbekommen, aber manche Leute meinen da schon, dass es Irrsinn sei, eine GPU für sowas zu verbraten. In 3D - nuja, aktuell kenne ich dazu keine Herangehensweise außer genau dem schlichten "Reihe von Punktlichtern", die David genannt hat. Die neue Methode über Cone Tracing durch Sparse Voxel Trees funktioniert nicht für so schmale Integrationsvolumen, die funktioniert besser für Lichtquellen mit größerer gleichmäßiger Ausdehnung in allen Dimensionen.

Man könnte wahrscheinlich eine Art perspektivische Ausgleichsformel finden, so dass man z.B. entlang der Leuchtstoffröhre an x Punkten einen ShadowCube berechnet und auf jeden davon y Samples verteilt, so dass die Samples wirken wie entlang der Leuchtstoffröhe platziert. Das läuft nach meinem Verständnis aber für alle Samples außer dem zentralen auf einen Raycast durch die ShadowMap hinaus. Hm. Wobei ja Standard-PCF schon eine Verballhornung ist und man da für größere Abweichungen eigentlich auch raycasten müsste. Gut, das müsste man ausprobieren.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

8

09.01.2013, 15:26

Mein Beitrag drehte sich nur um diffuse beleuchtung. Die Schatten geben tatsächlich ein Interessantes problem, alledrings denke ich, dass es am einfachsten ist, eine reihe von punktlichetern herzunehmen und einen soft shadowing algorithmus zu verwenden (welchen auch immer)
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

9

09.01.2013, 17:23

Wie ich das mit den Schatten mache weiß ich auch noch nicht so ganz. Ich Spiele aber auch noch mit dem Gedanken wirklich nur ein Punktlicht zu benutzen. Den Rest kann man dann ja mit Texturen lösen.
Danke für die Antworten.

PS: @BC: Mein Thread vor ein paar Monaten hatte aber nichts mit einem länglichen Licht zutun.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

09.01.2013, 18:59

Selbst für simple diffuse Beleuchtung ist das aber nicht korrekt, auch wenn es vermutlich gut genug aussieht.

Um es "korrekt" zu bekommen, müsste man über die Lichtquelle integrieren. Genau darum verwendet man ja so gern Punktlichtquellen. Da die keine Ausdehnung haben, verschwindet das Integral in der Renderinggleichgung dann nämlich einfach. Im Falle eines perfekten diffusen Körpers, beleuchtet durch eine linienförmige Lichtquelle, ließe sich das Ganze aber vermutlich auch noch analytisch lösen, auch wenn ich grad keine Lösung parat hab... ;)

Werbeanzeige