Implement blurring of VSM shadow maps

This is still somewhat work-in-progress, but good enough to be useful.

Some caveats:
- large blurs don't work well with cascades
- the implementation uses more memory than it could
This commit is contained in:
Mathias Agopian
2021-06-24 15:06:27 -07:00
committed by Mathias Agopian
parent eb0c346969
commit 7bd0b45a2b
13 changed files with 219 additions and 139 deletions

View File

@@ -77,7 +77,7 @@ Java_com_google_android_filament_LightManager_nBuilderShadowOptions(JNIEnv* env,
jlong nativeBuilder, jint mapSize, jint cascades, jfloatArray splitPositions,
jfloat constantBias, jfloat normalBias, jfloat shadowFar, jfloat shadowNearHint,
jfloat shadowFarHint, jboolean stable, jboolean screenSpaceContactShadows, jint stepCount,
jfloat maxShadowDistance, jint vsmMsaaSamples) {
jfloat maxShadowDistance, jint vsmMsaaSamples, jfloat blurStandardDeviation) {
LightManager::Builder *builder = (LightManager::Builder *) nativeBuilder;
LightManager::ShadowOptions shadowOptions {
.mapSize = (uint32_t)mapSize,
@@ -92,7 +92,8 @@ Java_com_google_android_filament_LightManager_nBuilderShadowOptions(JNIEnv* env,
.stepCount = uint8_t(stepCount),
.maxShadowDistance = maxShadowDistance,
.vsm = {
.msaaSamples = (uint8_t) vsmMsaaSamples
.msaaSamples = (uint8_t) vsmMsaaSamples,
.blurStandardDeviation = blurStandardDeviation
}
};
jfloat *nativeSplits = env->GetFloatArrayElements(splitPositions, NULL);