Ho recentemente implementato ombre morbide utilizzando tracciamento cono voxel in OpenGL 4.3 tracciando un cono nella direzione della luce e accumulando valori di opacità. Voxel Cone Tracing Soft Shadows
La cosa fondamentale che sto cercando di risolvere o nascondere è l'effetto molto voxelized shadowing come la superficie occluso si avvicina al occlusore, così come nascondere le macchie chiare in ombra a causa di voxelization superficie. Sto usando voxels a bassa risoluzione 64x64x64; tuttavia, anche se utilizzo voxel ad alta risoluzione, alcuni dei voxel a bassa risoluzione a un livello di mip-map più alto vengono comunque catturati nella traccia.
Ecco la mia prima idea: voglio essere in grado di mantenere le parti più morbide dell'ombra più lontana e sostituire le parti dell'ombra più vicine all'occluder con una mappa delle ombre. La mappa delle ombre svanirà in quanto è più lontana da ciascun occlusore e in qualche modo la mescolerò con le ombre tracciate con cono.
qualcuno può pensare a un modo per sfumare l'ombra di distanza in base alla distanza da ogni oggetto per l'ombra-mappa e quindi far si fondono in maniera armoniosa nella ombra cono-tracciato?
Un'altra idea che avrei sarebbe quella di tracciare ombre in qualche modo su superfici che sono più vicine a un occlusore, ma probabilmente sarebbe troppo costoso.
In alternativa, darei il benvenuto a qualsiasi altra idea per migliorare l'algoritmo di ombreggiatura sfumata.
ho anche messo su un video per mostrare in moto:
https://www.youtube.com/watch?v=SUiUlRojBpM
non hanno ancora trovato un modo per risolvere il problema shadowing.
+1 - finalmente una domanda, non è a livello di principiante e mi fa solleticare il cervello :) Fammi vedere cosa posso pensare ... – datenwolf
Nell'algoritmo del cono traccia, usi il valore alfa del voxel per indicare se il voxel è occupato o no? In tal caso, l'algoritmo di mipmapping predefinito in opengl potrebbe non fornire risultati corretti. Inoltre stai usando una rappresentazione sparsa del voxel octree? – Slicedpan
Per la diffusione indiretta e speculare, campionamento della trama 3D mediante offset in tutte le 6 direzioni di 1 voxel - per ogni livello di mip. Immagino che questo mi dia 2x2x2 "mattoni", se ho capito bene la teoria. Traccio il cono fino a quando il valore di opacità diventa 1 e raggiunge la mia massima distanza definita. Ho notato che il mipmapping di default non è molto fluido, quindi credo che i miei risultati dovrebbero migliorare se avessi usato i mattoncini 3x3x3 - con un costo leggermente più alto delle prestazioni? Non sto usando una struttura ad otto, ma questo è nella lista delle cose da implementare. – gboxentertainment