Kontur um das Mesh - "lichthof :-)"
Kontur um das Mesh - "lichthof :-)"
Hallo,
hat von euch schon mal jemand "Left 4 Dead" gespielt?
Man sieht dort die Restenergie der Mitspieler durch so eine Kontur um den Spieler oder zu benutzende Objekte durch eine weiße/blaue Kontur um das Objekt.
Das Spiel selbst nennt den Effekt in Deutsch "Lichthof". Es scheint immer um den Rand des Objekts.
Kann sich jemand vorstellen, wie das realisiert wird?
Gruß,
Domi
hat von euch schon mal jemand "Left 4 Dead" gespielt?
Man sieht dort die Restenergie der Mitspieler durch so eine Kontur um den Spieler oder zu benutzende Objekte durch eine weiße/blaue Kontur um das Objekt.
Das Spiel selbst nennt den Effekt in Deutsch "Lichthof". Es scheint immer um den Rand des Objekts.
Kann sich jemand vorstellen, wie das realisiert wird?
Gruß,
Domi
- Chromanoid
- Moderator
- Beiträge: 4273
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Kontur um das Mesh - "lichthof :-)"
evt. einfach das selbe etwas "verfettete" mesh mit invertierten normalen und einer bestimmten farbe rendern... so hat man das jedenfalls früher gemacht :) weiß nicht ob das immer noch so ist :)
ansonsten schau dir mal bei http://developer.nvidia.com/object/fxc_ ... jects.html die samples an... aber hier sind sicher viele die da noch mehr rat wissen als ich :D
ansonsten schau dir mal bei http://developer.nvidia.com/object/fxc_ ... jects.html die samples an... aber hier sind sicher viele die da noch mehr rat wissen als ich :D
Re: Kontur um das Mesh - "lichthof :-)"
Alternativ kann man das alles ueber ein paar Filter-Operationen in 2D erledigen. Z.B. via Stencil (oder ID-Buffer) beim normalen Rendern das Objekt maskieren, und dann Blur/Dilatation/Was-weiss-ich-noch basierend auf dieser Maske ausfuehren.
- Chromanoid
- Moderator
- Beiträge: 4273
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Kontur um das Mesh - "lichthof :-)"
ich denke, dass die sowas in der art machen. hab mir nochmal gedanken gemacht und bei left4dead ist ja nicht einfach ein cartoon-silhouette zu sehen sondern ein schein nur um die äußeren ränder des meshs.
Re: Kontur um das Mesh - "lichthof :-)"
Diesen Effekt find ich echt ganz interessant und er würde zu einem Projekt passen, welches ich allerdings bisher nur in Gedanken umrissen habe.
Mal sehen ob ich dazu noch mehr finde :-)
Danke für die Antworten.
Mal sehen ob ich dazu noch mehr finde :-)
Danke für die Antworten.
Re: Kontur um das Mesh - "lichthof :-)"
Sieht für mich ganz klar nach einer Dilation und einem (separierbarem) Blur aus.
Re: Kontur um das Mesh - "lichthof :-)"
Ähem... geht das auch ohne Fachbegriff? Was ist eine Dilation? Blur, ja ok, aber inwiefern separierbar?
Re: Kontur um das Mesh - "lichthof :-)"
Also, ich gebe auch mal eine Vermutung ab.
Ist nur ne Idee!
1.) Mesh der "umrandet" werden soll, mittels aktueller Projektsionsmatrix auf einer separaten Fläche rendern
==> es gibt nun ein "Bild" auf der nur dieser Mesh ist
2.) Konturen bestimmen bzw. nur Konturen auf separates Bild zeichnen
3.) bei der finalen Renderung dieses separates Konturen-Bild an entsprechender Stelle zeichnen.
Ist nur ne Idee!
1.) Mesh der "umrandet" werden soll, mittels aktueller Projektsionsmatrix auf einer separaten Fläche rendern
==> es gibt nun ein "Bild" auf der nur dieser Mesh ist
2.) Konturen bestimmen bzw. nur Konturen auf separates Bild zeichnen
3.) bei der finalen Renderung dieses separates Konturen-Bild an entsprechender Stelle zeichnen.
- Chromanoid
- Moderator
- Beiträge: 4273
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Kontur um das Mesh - "lichthof :-)"
Bezügl. Dilitation -> Fachjargon aus dem Bereich Bildverarbeitung http://de.wikipedia.org/wiki/Dilatation ... arbeitung)
Ich bin mir aber nicht sicher ob diese Operation auf der Grafikkarte nicht zu zeitaufwendig (müsste man nicht pro pixel Konturdicke min. einen Pass machen?)...
http://www.flipcode.com/archives/Object_Outlining.shtml ist auch ganz interessant.
vielleicht machen die tatsächlich einfach eine silhouetten-erkennung und rendern die silhouette mit quads in einen buffer der über allen objekten liegt.
am anfang dieses videos http://www.youtube.com/watch?v=VVIdHPG0wYI sieht man aber, dass wahrscheinlich wirklich einfach alle meshes die mit kontur sein sollen in einfarbig gerendert werden (entweder schon an den normalen lokal vergrößert oder dannach eine dilitation). danach wird dann wahrscheinlich einfach ein blur drüber gemacht und das echte mesh wird wieder abgezogen.
also echte meshs in fläche rendern, je nachdem was schneller ist, in eine weitere fläche mit an normalen lokal vergrößerte meshs rendern (einfarbig) oder dilitation auf einfarbig gemachte kopie der erstgenannten fläche, dann blur drüber und alles was in der ersten fläche mit pixeln belegt ist bei der geblurten fläche entfernen.
so in der art:
Ich bin mir aber nicht sicher ob diese Operation auf der Grafikkarte nicht zu zeitaufwendig (müsste man nicht pro pixel Konturdicke min. einen Pass machen?)...
http://www.flipcode.com/archives/Object_Outlining.shtml ist auch ganz interessant.
vielleicht machen die tatsächlich einfach eine silhouetten-erkennung und rendern die silhouette mit quads in einen buffer der über allen objekten liegt.
am anfang dieses videos http://www.youtube.com/watch?v=VVIdHPG0wYI sieht man aber, dass wahrscheinlich wirklich einfach alle meshes die mit kontur sein sollen in einfarbig gerendert werden (entweder schon an den normalen lokal vergrößert oder dannach eine dilitation). danach wird dann wahrscheinlich einfach ein blur drüber gemacht und das echte mesh wird wieder abgezogen.
also echte meshs in fläche rendern, je nachdem was schneller ist, in eine weitere fläche mit an normalen lokal vergrößerte meshs rendern (einfarbig) oder dilitation auf einfarbig gemachte kopie der erstgenannten fläche, dann blur drüber und alles was in der ersten fläche mit pixeln belegt ist bei der geblurten fläche entfernen.
so in der art:
Re: Kontur um das Mesh - "lichthof :-)"
Sorry, dass ich hier bzgl. der Dilatation (deutsch) aka Dilation (englisch) Verwirrung gestiftet hatte. Aber Chromanoid hat das alles richtig erklärt ;). Meiner bescheidenen Meinung nach geht die Dilatation (fast) beliebiger Größe ohne Probleme im Pixel-Shader, und zwar mit zwei verschachtelten for-Schleifen in Größe des zweiten Parameters der Dilatation (dieses wird im Wikipedia-Artikel auch strukturierendes Element genannt). In dieser Schleife überprüft man dann einfach, ob an der aktuell betrachteten Stelle in der Quelltextur ein Pixel gesetzt ist, und falls ja, gibt man sofort aus dem Pixel-Shader die gewünschte Farbe (z.B. Weiß) zurück (d.h. man kann direkt ein return machen). Sollte die Schleife durchlaufen, dann war eben kein Pixel unter dem betrachteten Ausschnitt gesetzt, und man gibt z.B. Schwarz zurück.
Damit sollte man, im Gegensatz zum Normalen-Extruden, eine sehr gleichmäßige Silhouette erhalten. Achja, man dilatiert natürlich mit der doppelten Größe des dann benutzten Glättungskernels, weil dann ja die Glättung direkt an der wirklichen Kante des Objektes aufhört ;)
Nachtrag: Zum separierbaren Blur. Das heißt einfach nur, dass man den Blur (der ja relativ groß ist) in X- und Y-Richtung aufteilen kann, und so von quadratischer Komplexität in einem Pass auf lineare Komplexität in zwei Passes kommt. Eigentlich werden große Blurs immer so berechnet :)
Damit sollte man, im Gegensatz zum Normalen-Extruden, eine sehr gleichmäßige Silhouette erhalten. Achja, man dilatiert natürlich mit der doppelten Größe des dann benutzten Glättungskernels, weil dann ja die Glättung direkt an der wirklichen Kante des Objektes aufhört ;)
Nachtrag: Zum separierbaren Blur. Das heißt einfach nur, dass man den Blur (der ja relativ groß ist) in X- und Y-Richtung aufteilen kann, und so von quadratischer Komplexität in einem Pass auf lineare Komplexität in zwei Passes kommt. Eigentlich werden große Blurs immer so berechnet :)