mencari teknik pemetaan bayangan yang dapat diterima

8

Baru-baru ini ketika mencari memecahkan masalah jerawat bayangan pemetaan bayangan tradisional saya menerapkan peta bayangan eksponensial. Itu memang berhasil (tidak ada jerawat sama sekali) tetapi pada saat yang sama memperkenalkan kesalahan-kesalahan lain yang tidak dapat diterima.

Untuk kedalaman peta blur saya menggunakan gaussian blur dengan sigma terkecil = 1.

Tes untuk bayangan peta:

float occluder = texture(shadowMap lightCoords.xy).r;
float c = 5000.0;
float receiver = lightCoords.z;
float shadow = exp(c*(occluder-receiver));
shadow = clamp(shadow, 0.0, 1.0);

dengan faktor c kecil c=100.0:

masukkan deskripsi gambar di sini

Pendarahan ringan yang tidak bisa diterima

dengan faktor c tinggi c=5000.0:

masukkan deskripsi gambar di sini

Tidak ada perdarahan ringan tetapi detail frekuensi tinggi tampak "bengkak".

Tidak dapat menemukan pendarahan c - cahaya yang optimal muncul bahkan pada c=3000.0dan bayangan bayangan frekuensi tinggi sudah ada. Tidak mengaburkan peta kedalaman membantu tetapi kemudian aliasing terjadi.

Dan pertanyaan saya adalah - bagaimana saya bisa meningkatkan teknik ini (ESM) atau haruskah saya mencari yang lain? Saya pikir bayangan berkualitas baik dengan kinerja yang bagus sangat mungkin - seperti yang terlihat dalam game modern seperti Witcher 3 atau Fallout 4.

narthex
sumber

Jawaban:

2

Yah tidak apa-apa. Saya melakukan riset dan benar-benar akan:

  • sampel ESM menggunakan pengambilan sampel Poisson dalam mode PCF (terima kasih Bart Wronski untuk aplikasi penghasil Sampel Poisson yang hebat) dan sampaikan ini pada teknik PCSS (penumbra variabel). Jadikan tekstur.
  • opsional sadar kedalaman blur untuk melunak - EDIT tidak begitu cepat opsi ini tidak berfungsi seperti yang diharapkan, terlalu buruk. Sebaliknya memutar kernel PCF tampaknya berfungsi dengan baik.

Dan sayangnya tidak banyak diskusi di sini.

narthex
sumber