shadows.c 8.10

Diese Include-Datei enthält ein kleines lite-C-Skript zur Erzeugung von PSSM-Schatten (Parallel Split Shadow Maps) in Außenbereichen. Bei diesem Algorithmus werden mehrere Shadow-Maps zum Rendern von Schatten in unterschiedlichen Auflösungen abhängig von der Entfernung zur Kamera verwendet. Das Skript verwendet fünf View-Stages und zwei Shader aus dem code-Ordner, vp_depth.fx und vp_shadow.fx. Die Shader sind einfach genug, um sie mit einigen Shader-Vorkenntnissen, zum Beispiel durch die Shader Workshops, zu verstehen. Wenn Sie das Skript oder die Shader ändern möchten, editieren Sie bitte eine Kopie in Ihrem Work-Ordner und nicht die Original-Dateien in den include- und code-Ordnern.

Stencil Schatten PSSM Schatten

PSSM Schatten haben einige Vorteile und einige Nachteile im Vergleich zum stencil shadow Algorithmus:

Global parameters

Parameter Default Remarks
pssm_fbias
0.00050
Schatten-Tiefe. Zu kleine Werte führen zu "Flächen-Akne", zu große Werte bewirken einen "Peter-Pan-Effekt" (schwebende Schatten). Verwenden Sie die [Tab]-Konsole, um diese Variable auf den optimalen Wert für Ihr Level anzupassen.
pssm_splitweight
0.5
Split-Aufteilung, 0 .. 1. Ein kleinerer Wert begünstigt eine lineare Aufteilung, ein höherer Wert eine logarithmische Aufteilung. Sie finden Hinweise über Split Systeme in GPU Gems 3, Kapitel 10. Verwenden Sie die [Tab]-Konsole, um diese Variable auf den optimalen Wert für Ihr Level anzupassen.
pssm_res
1024
Shadow-Map Auflösung, 512, 1024, oder 2048. Legen Sie die Auflösung fest, bevor Sie pssm_run aufrufen.
pssm_transparency
0.6
Schattendunkelheit, 0..1.

pssm_run(numsplits)

Aktiviert oder deaktiviert PSSM Schatten.

Parameter

numsplits - Anzahl der Shadow-Maps, 0 .. 4. Jede Shadow-Maps erfordert einen Render-Durchgang. Gute Werte sind 3 für kleine Level und 4 für große Level. Verwenden Sie 0 zur Deaktivierung von PSSM Schatten.

Bemerkungen

Beispiel

#include <default.c>
#include <shadows.c>

function main()
{
  video_mode = 8;
  shadow_stencil = 8; // activate external shadows
  shadow_lod = 2; // works also for PSSM

// set up a level
  level_load("level.wmb");
  def_move();

// all objects get the SHADOW flag
  for(you = ent_next(NULL); you; you = ent_next(you)) 
    set(you,SHADOW);
// adjust camera and bias, activate PSSM camera.clip_far = 3000; camera.clip_near = 30; pssm_fbias = 0.0005; pssm_run(3); }

Siehe auch:

stencil shadows, SHADOW

► latest version online