diff --git a/android/filament-android/src/main/cpp/View.cpp b/android/filament-android/src/main/cpp/View.cpp index 68907ee2c1..58ec085f13 100644 --- a/android/filament-android/src/main/cpp/View.cpp +++ b/android/filament-android/src/main/cpp/View.cpp @@ -268,3 +268,12 @@ Java_com_google_android_filament_View_nSetVignetteOptions(JNIEnv*, jclass, jlong view->setVignetteOptions({.midPoint = midPoint, .roundness = roundness, .feather = feather, .color = LinearColorA{r, g, b, a}, .enabled = (bool)enabled}); } + +extern "C" +JNIEXPORT void JNICALL +Java_com_google_android_filament_View_nSetTemporalAntiAliasingOptions(JNIEnv *, jclass, + jlong nativeView, jfloat feedback, jfloat filterWidth, jboolean enabled) { + View* view = (View*) nativeView; + view->setTemporalAntiAliasingOptions({ + .feedback = feedback, .filterWidth = filterWidth, .enabled = (bool) enabled}); +} diff --git a/android/filament-android/src/main/java/com/google/android/filament/View.java b/android/filament-android/src/main/java/com/google/android/filament/View.java index 7ef75e71ae..ce50a4e186 100644 --- a/android/filament-android/src/main/java/com/google/android/filament/View.java +++ b/android/filament-android/src/main/java/com/google/android/filament/View.java @@ -74,6 +74,7 @@ public class View { private DepthOfFieldOptions mDepthOfFieldOptions; private VignetteOptions mVignetteOptions; private ColorGrading mColorGrading; + private TemporalAntiAliasingOptions mTemporalAntiAliasingOptions; /** * Generic quality level. @@ -185,6 +186,21 @@ public class View { public QualityLevel upsampling = QualityLevel.LOW; } + /** + * Options for Temporal Anti-aliasing (TAA) + * @see View#setTemporalAntiAliasingOptions() + */ + public static class TemporalAntiAliasingOptions { + /** reconstruction filter width typically between 0 (sharper, aliased) and 1 (smoother) */ + public float filterWidth = 1.0f; + + /** history feedback, between 0 (maximum temporal AA) and 1 (no temporal AA). */ + public float feedback = 0.04f; + + /** enables or disables temporal anti-aliasing */ + public boolean enabled = false; + }; + /** * Options for controlling the Bloom effect * @@ -209,7 +225,7 @@ public class View { * enabled for the dirt effect to work properly. * dirtStrength: Strength of the dirt texture. * - * @see setBloomOptions + * @see View#setBloomOptions */ public static class BloomOptions { @@ -763,6 +779,30 @@ public class View { return AntiAliasing.values()[nGetAntiAliasing(getNativeObject())]; } + /** + * Enables or disable temporal anti-aliasing (TAA). Disabled by default. + * + * @param options temporal anti-aliasing options + */ + public void setTemporalAntiAliasingOptions(@NonNull TemporalAntiAliasingOptions options) { + mTemporalAntiAliasingOptions = options; + nSetTemporalAntiAliasingOptions(getNativeObject(), + options.feedback, options.filterWidth, options.enabled); + } + + /** + * Returns temporal anti-aliasing options. + * + * @return temporal anti-aliasing options + */ + @NonNull + public TemporalAntiAliasingOptions getTemporalAntiAliasingOptions() { + if (mTemporalAntiAliasingOptions == null) { + mTemporalAntiAliasingOptions = new TemporalAntiAliasingOptions(); + } + return mTemporalAntiAliasingOptions; + } + /** * Enables or disables tone-mapping in the post-processing stage. Enabled by default. * @@ -1172,4 +1212,5 @@ public class View { private static native void nSetBlendMode(long nativeView, int blendMode); private static native void nSetDepthOfFieldOptions(long nativeView, float focusDistance, float blurScale, float maxApertureDiameter, boolean enabled); private static native void nSetVignetteOptions(long nativeView, float midPoint, float roundness, float feather, float r, float g, float b, float a, boolean enabled); + private static native void nSetTemporalAntiAliasingOptions(long nativeView, float feedback, float filterWidth, boolean enabled); }