Hypothetische Frage zu einem Shader
- starcow
- Establishment
- Beiträge: 575
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Wohnort: Zürich
- Kontaktdaten:
Hypothetische Frage zu einem Shader
Eine Frage an die Grafikexperten hier.
Wäre es mit einem vertretbaren Aufwand möglich einen Shader zu programmieren, welcher - anstatt der eigentlichen Textur - die Texel des Polymeshes mit einer Farbe nach folgedem Konzept coloriert?
Das Konzept sieht folgendes vor:
Der Shader schaut sich an, wie gross der dargestellte Texel im final gerenderten Bild ist, und färbt ihn entsprechend der Grösse ein. Ist die Fläche auf welcher der Texel sitzt der Kamera stark abgewandt, soll das die Coloration nicht beeinflussen.
Ist der Texel 1 Pixel oder kleiner, wird er weiss dargestellt.
Ist der Texel zwischen 1 Pixel und 2 Pixel, wird er als Gradient (je nach genauem Wert) zwischen Weiss und Grün dargestellt
Ist der Texel zwischen 2 Pixel und 4 Pixel, wird er als Gradient (je nach genauem Wert) zwischen Grün und Rot dargestellt
Ist der Texel zwischen 4 Pixel und 8 Pixel, wird er als Gradient (je nach genauem Wert) zwischen Rot und Blau dargestellt
Gruss starcow
Wäre es mit einem vertretbaren Aufwand möglich einen Shader zu programmieren, welcher - anstatt der eigentlichen Textur - die Texel des Polymeshes mit einer Farbe nach folgedem Konzept coloriert?
Das Konzept sieht folgendes vor:
Der Shader schaut sich an, wie gross der dargestellte Texel im final gerenderten Bild ist, und färbt ihn entsprechend der Grösse ein. Ist die Fläche auf welcher der Texel sitzt der Kamera stark abgewandt, soll das die Coloration nicht beeinflussen.
Ist der Texel 1 Pixel oder kleiner, wird er weiss dargestellt.
Ist der Texel zwischen 1 Pixel und 2 Pixel, wird er als Gradient (je nach genauem Wert) zwischen Weiss und Grün dargestellt
Ist der Texel zwischen 2 Pixel und 4 Pixel, wird er als Gradient (je nach genauem Wert) zwischen Grün und Rot dargestellt
Ist der Texel zwischen 4 Pixel und 8 Pixel, wird er als Gradient (je nach genauem Wert) zwischen Rot und Blau dargestellt
Gruss starcow
Zuletzt geändert von starcow am 25.02.2016, 13:35, insgesamt 1-mal geändert.
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Hypothetische Frage zu seinem Shader
ddx() & ddy() geben den Gradienten der Texturkoordinate an, nach dem das Mip-Level berechnet wird :)
Re: Hypothetische Frage zu einem Shader
Oder du samplest normal mit einem linearen Filter aber machst eine Textur mit miplevel 0 komplett weiss, miplevel 1 grün, miplevel 2 rot etc.
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Hypothetische Frage zu einem Shader
Falls mit „stark abgewandt“ eigentlich „in sehr flachem Winkel“ gemeint ist, wird das schwer, weil ein linearer Filter dann ungewollt in niedrigere Mip-Levels runterschaltet. Klingt für mich wirklich danach, als sei max(length(ddx(uv)), length(ddy(uv))), was er braucht.starcow hat geschrieben:Der Shader schaut sich an, wie gross der dargestellte Texel im final gerenderten Bild ist, und färbt ihn entsprechend der Grösse ein. Ist die Fläche auf welcher der Texel sitzt der Kamera stark abgewandt, soll das die Coloration nicht beeinflussen.
- starcow
- Establishment
- Beiträge: 575
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Wohnort: Zürich
- Kontaktdaten:
Re: Hypothetische Frage zu einem Shader
Ich danke euch für die wertvollen Antworten. :-)
Der Ansatz, das ganze einfach per MIP-Map zu lösen erscheint sehr einfach und praktisch - nur sehe ich neben deinem Einwand noch den Umstand, dass mit einer vorbereiteten MIP-Map der Farbverlauf fehlen würde.
Ist dein Vorschlag auch unter OpenGL oder Vulcan realisierbar?
Edit:
Oder sind das gar keine DirectX Funktionen, die du gepostet hast? :>
Gruss starcow
Ja, genau, das war so gemeint! Anders formuliert: Die Entfernung hat Einfluss, nicht aber die Polygon-Normale.Krishty hat geschrieben:Falls mit „stark abgewandt“ eigentlich „in sehr flachem Winkel“ gemeint ist, wird das schwer, weil ein linearer Filter dann ungewollt in niedrigere Mip-Levels runterschaltet. Klingt für mich wirklich danach, als sei max(length(ddx(uv)), length(ddy(uv))), was er braucht.
Der Ansatz, das ganze einfach per MIP-Map zu lösen erscheint sehr einfach und praktisch - nur sehe ich neben deinem Einwand noch den Umstand, dass mit einer vorbereiteten MIP-Map der Farbverlauf fehlen würde.
Ist dein Vorschlag auch unter OpenGL oder Vulcan realisierbar?
Edit:
Oder sind das gar keine DirectX Funktionen, die du gepostet hast? :>
Gruss starcow
- Schrompf
- Moderator
- Beiträge: 5161
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Hypothetische Frage zu einem Shader
ddx/ddy gibt es sowohl unter DirectX / HLSL als auch unter OpenGL / GLSL. Vulkan benutzt auch eine Art GLSL, und ich bin ziemlich sicher, dass es so grundlegende Funktionen wie ddx/ddy da auch gibt. Ich bezweifle aber, dass Du Vulkan bereits benutzen kannst. Selber schreiben wäre ein mehrtägiges Unterfangen, und fertige Engines mit Vulkan gibt es sicher noch nicht.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Hypothetische Frage zu einem Shader
Der Übergang wäre mit Mip-Levels schon weich, wenn der Filter trilinear ist (also zwischen Mips interpoliert). Aber wie gesagt, Mip-Maps hängen von der Neigung der Fläche ab. Mit ddx() / ddy() kannst du halbwegs drum herum bauen.
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Hypothetische Frage zu einem Shader
Wie genau funktioniert das, ddx()/ddy() der Texcoords hängen doch genauso von der Neigung der Fläche ab!? Deine obige Formel mir max(length(ddx(uv)), length(ddy(uv))) ist doch exakt, was die Mip-Map Selection macht!?Krishty hat geschrieben:Aber wie gesagt, Mip-Maps hängen von der Neigung der Fläche ab. Mit ddx() / ddy() kannst du halbwegs drum herum bauen.
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Hypothetische Frage zu einem Shader
Die Mip-Selection nimmt doch min(), oder? Mom ich male was
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Hypothetische Frage zu einem Shader
Nope, nimmt das hier:
\($\rho = \max\left\{\sqrt{\left(\frac{\partial u}{\partial x}\right)^2 + \left(\frac{\partial v}{\partial x}\right)^2}, \sqrt{\left(\frac{\partial u}{\partial y}\right)^2 + \left(\frac{\partial v}{\partial y}\right)^2}\right\}$\)
Edit: LaTeX wieder mal kaputt?
\($\rho = \max\left\{\sqrt{\left(\frac{\partial u}{\partial x}\right)^2 + \left(\frac{\partial v}{\partial x}\right)^2}, \sqrt{\left(\frac{\partial u}{\partial y}\right)^2 + \left(\frac{\partial v}{\partial y}\right)^2}\right\}$\)
Edit: LaTeX wieder mal kaputt?
Zuletzt geändert von Chromanoid am 26.02.2016, 20:17, insgesamt 1-mal geändert.
Grund: $ um Inline-Mathe-Umgebung aufzumachen
Grund: $ um Inline-Mathe-Umgebung aufzumachen
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Hypothetische Frage zu einem Shader
Ja; ist wieder kaputt :(
Mein Denkfehler war, dass ich vergessen hatte, dass dd größer wird, wenn die Textur gestaucht wird (nicht kleiner). Da muss man sich an min() halten, da hast du völlig recht :)
Beispiel von hier (weil’s so scheiße schwer ist, solche Screenshots als was anderes als JPG zu finden); ddx() und ddy() stark überhöht reingemalt:
Mein Denkfehler war, dass ich vergessen hatte, dass dd größer wird, wenn die Textur gestaucht wird (nicht kleiner). Da muss man sich an min() halten, da hast du völlig recht :)
Beispiel von hier (weil’s so scheiße schwer ist, solche Screenshots als was anderes als JPG zu finden); ddx() und ddy() stark überhöht reingemalt:
- der problemlose Fall
- der gestauchte Fall
- Chromanoid
- Moderator
- Beiträge: 4286
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Hypothetische Frage zu einem Shader
Nee, man muss es nur richtig benutzen :P ich hab mal einen Hinweis in den Tooltip gepackt.Krishty hat geschrieben:Ja; ist wieder kaputt :(
- starcow
- Establishment
- Beiträge: 575
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Wohnort: Zürich
- Kontaktdaten:
Re: Hypothetische Frage zu einem Shader
Super, danke für deine Zeichnung Krishty :-) So wird sofort klar was gemeint ist!
Ich versuche das nun entsprechend euren Tipps umzusetzen.
Vielen Dank und Gruss! :)
starcow
Ich versuche das nun entsprechend euren Tipps umzusetzen.
Vielen Dank und Gruss! :)
starcow