Hi, wie ihr sicherlich schon bemerkt habt, arbeite ich mal wieder an Shadern (GLSL) die genau das machen (sollen), wozu sie ursprünglich gedacht waren: zum Schattieren
Jetzt habe ich bislang nur mit Point-Light-Shadow-Mapping durch Cube-Maps gearbeitet. Folglich habe ich für die ShadowMap-Samples auch nur
textureCube im Shader Code verwendet.
Jetzt will ich aber auch mal mit Spot-Lights arbeiten. Die sehen auch top aus und haben deutlich weniger over-head.
Für die bisherigen Shadow Maps habe ich immer folgendes Texture Format verwendet: GL_LUMINANCE16 (also nur eine Farbkomponente mit 16 bit floats)
Warum ich nicht Depth-Component nehme? Ich render nicht die Tiefe in die Texture sondern speicher als Farbwert die Distanz (per distance(a, b)) zwischen Pixel und Lightquelle.
Hier sind jetzt meine Fragen:
- Wann genau brauche ich "shadow2D", "texture2D" und "texture2DProj"? Also shadow2D würde ich mal raten ist für "Depth-Component" Texture Formate.
Und "texture2DProj" verstehe ich nicht wie genau der aus der 3D Koordinate eine Texture Koordinate errechnet?!
- Und ist es sinnvoll LUMINANCE zu verwenden für shadow-mapping (ich glaube bei Depth-Component wird der Wert autom. zwischen 0.0 und 1.0 geclampt, daher denke ich passt LUMINANCE für meine Zwecke schon)
- Und ist es
deutlich performanter nur den Z-Wert zu speichern und nicht
distance für jeden Fragment aufzurufen oder nicht?
afaik ist die Technik mit der Distanz seit "FarCry" recht beliebt.
Danke schon mal für eure Antworten