Class MPSSVGFDenoiser

  • All Implemented Interfaces:
    NSObject

    public class MPSSVGFDenoiser
    extends NSObject
    A convenience object which uses an MPSSVGF object to manage the denoising process The MPSSVGF object can also be used directly to customize the denoising process. This object keeps track of auxilary textures used by the MPSSVGF object, manages a temporal history, and encodes the entire denoising process into a command buffer. To use this class, first create and customize an MPSSVGF object. This object allows you to tweak various aspect of the denoising process such as temporal reprojection and bilateral blur settings. Then create a texture allocator object which will allocate temporary textures during denoising. This can either be an object conforming to the MPSSVGFTextureAllocator protocol or an instance of the MPSSVGFDefaultTextureAllocator class. Next, create an MPSSVGFDenoiser object. To perform denoising, assign inputs textures to the denoiser object's properties and call encodeToCommandBuffer:. Finally, read the output from the destinationTexture property. Note that this class can denoise up to two independent textures simultaneously, e.g. specular and diffuse, direct and indirect lighting, shadows and AO, etc. [@code] MPSSVGF *svgf = [[MPSSVGF alloc] initWithDevice:device]; // configure svgf properties MPSSVGFDefaultTextureAllocator *allocator = [[MPSSVGFDefaultTextureAllocator alloc] initWithDevice:device]; MPSSVGFDenoiser *denoiser = [[MPSSVGFDenoiser alloc] initWithSVGF:svgf textureAllocator:allocator]; // configure denoiser properties denoiser.sourceTexture = noisyTexture; denoiser.depthNormalTexture = depthNormalTexture; denoiser.previousDepthNormalTexture = depthNormalTextureFromPreviousFrame; denoiser.motionVectorTexture = motionVectorTexture; [denoiser encodeToCommandBuffer:commandBuffer]; id cleanTexture = denoiser.destinationTexture; [@endcode]
    • Constructor Detail

      • MPSSVGFDenoiser

        protected MPSSVGFDenoiser​(org.moe.natj.general.Pointer peer)
    • Method Detail

      • accessInstanceVariablesDirectly

        public static boolean accessInstanceVariablesDirectly()
      • allocWithZone

        public static java.lang.Object allocWithZone​(org.moe.natj.general.ptr.VoidPtr zone)
      • automaticallyNotifiesObserversForKey

        public static boolean automaticallyNotifiesObserversForKey​(java.lang.String key)
      • bilateralFilterIterations

        public long bilateralFilterIterations()
        The number of bilateral filter iterations to run. More iterations will improve quality at the cost of performance. Defaults to 5. Must be at least 1.
      • cancelPreviousPerformRequestsWithTarget

        public static void cancelPreviousPerformRequestsWithTarget​(java.lang.Object aTarget)
      • cancelPreviousPerformRequestsWithTargetSelectorObject

        public static void cancelPreviousPerformRequestsWithTargetSelectorObject​(java.lang.Object aTarget,
                                                                                 org.moe.natj.objc.SEL aSelector,
                                                                                 java.lang.Object anArgument)
      • classFallbacksForKeyedArchiver

        public static NSArray<java.lang.String> classFallbacksForKeyedArchiver()
      • classForKeyedUnarchiver

        public static org.moe.natj.objc.Class classForKeyedUnarchiver()
      • clearTemporalHistory

        public void clearTemporalHistory()
        Clear the temporal history. Reprojection and temporal accumulation will restart on the next call to encodeToCommandBuffer:
      • debugDescription_static

        public static java.lang.String debugDescription_static()
      • description_static

        public static java.lang.String description_static()
      • encodeToCommandBufferSourceTextureDestinationTextureSourceTexture2DestinationTexture2MotionVectorTextureDepthNormalTexturePreviousDepthNormalTexture

        public void encodeToCommandBufferSourceTextureDestinationTextureSourceTexture2DestinationTexture2MotionVectorTextureDepthNormalTexturePreviousDepthNormalTexture​(MTLCommandBuffer commandBuffer,
                                                                                                                                                                         MTLTexture sourceTexture,
                                                                                                                                                                         org.moe.natj.general.ptr.Ptr<org.moe.natj.objc.ObjCObject> destinationTexture,
                                                                                                                                                                         MTLTexture sourceTexture2,
                                                                                                                                                                         org.moe.natj.general.ptr.Ptr<org.moe.natj.objc.ObjCObject> destinationTexture2,
                                                                                                                                                                         MTLTexture motionVectorTexture,
                                                                                                                                                                         MTLTexture depthNormalTexture,
                                                                                                                                                                         MTLTexture previousDepthNormalTexture)
        Encode denoising kernels to a command buffer Simultaneously removes noise from the source texture and optional second source texture, using the additional data in the motion vector, depth/normal, and previous depth/normal textures. Returns the result through the destination texture pointers. The depth/normal texture should be provided as the previous depth/normal texture for the next call to this method. This method will also update an internally managed temporal history to aid the denoising process. To reset this history, call the clearTemporalHistory method. This method will allocate and return several textures from and to the texture allocator the MPSSVGFDenoiser was initialized with. The number of iterations of the bilateral filter is controlled by the bilateralFilterIterations property. Larger numbers of iterations will improve the quality but reduce performance. To configure other parameters of the denoising process, modify the properties of the MPSSVGF object the MPSSVGFDenoiser was initialized with. [@parameter] commandBuffer Command buffer to encode into [@parameter] sourceTexture Source image to denoiser [@parameter] destinationTexture Denoised output image [@parameter] sourceTexture2 Optional second source image to denoise [@parameter] destinationTexture2 Denoised second output image, if there is a second source image [@parameter] motionVectorTexture Motion vector texture describing how much each texel has moved, in texels, since the previous frame. See the MPSSVGF object for more details. [@parameter] depthNormalTexture Texture containing linear depth in the X component and signed normals in the YZW components. See the MPSSVGF object for more details. [@parameter] previousDepthNormalTexture Depth/normal texture from the previous frame. See the MPSSVGF object for more details.
      • encodeToCommandBufferSourceTextureMotionVectorTextureDepthNormalTexturePreviousDepthNormalTexture

        public MTLTexture encodeToCommandBufferSourceTextureMotionVectorTextureDepthNormalTexturePreviousDepthNormalTexture​(MTLCommandBuffer commandBuffer,
                                                                                                                            MTLTexture sourceTexture,
                                                                                                                            MTLTexture motionVectorTexture,
                                                                                                                            MTLTexture depthNormalTexture,
                                                                                                                            MTLTexture previousDepthNormalTexture)
        Encode denoising kernels to a command buffer Removes noise from the source texture, using the additional data in the motion vector, depth/normal, and previous depth/normal textures. Returns the resulting texture. The depth/normal texture should be provided as the previous depth/normal texture for the next call to this method. This method will also update an internally managed temporal history to aid the denoising process. To reset this history, call the clearTemporalHistory method. This method will allocate and return several textures from and to the texture allocator the MPSSVGFDenoiser was initialized with. The number of iterations of the bilateral filter is controlled by the bilateralFilterIterations property. Larger numbers of iterations will improve the quality but reduce performance. To configure other parameters of the denoising process, modify the properties of the MPSSVGF object the MPSSVGFDenoiser was initialized with. [@parameter] commandBuffer Command buffer to encode into [@parameter] sourceTexture Source image to denoiser [@parameter] motionVectorTexture Motion vector texture describing how much each texel has moved, in texels, since the previous frame. See the MPSSVGF object for more details. [@parameter] depthNormalTexture Texture containing linear depth in the X component and signed normals in the YZW components. See the MPSSVGF object for more details. [@parameter] previousDepthNormalTexture Depth/normal texture from the previous frame. See the MPSSVGF object for more details.
      • hash_static

        public static long hash_static()
      • initWithDevice

        public MPSSVGFDenoiser initWithDevice​(MTLDevice device)
        Initialize the MPSSVGFDenoiser object [@parameter] device The Metal device to use for denoising
      • initWithSVGFTextureAllocator

        public MPSSVGFDenoiser initWithSVGFTextureAllocator​(MPSSVGF svgf,
                                                            MPSSVGFTextureAllocator textureAllocator)
        Initialize the MPSSVGFDenoiser object [@parameter] svgf MPSSVGF kernels to use for denoising. This object can be used to configure temporal reprojection, bilateral blur settings, etc. [@parameter] textureAllocator An object conforming to the MPSSVGFTextureAllocator protocol. This object will be used to allocate temporary intermediate and output textures. This can be a custom object or an instance of the MPSSVGFDefaultTextureAllocator class.
      • instanceMethodSignatureForSelector

        public static NSMethodSignature instanceMethodSignatureForSelector​(org.moe.natj.objc.SEL aSelector)
      • instancesRespondToSelector

        public static boolean instancesRespondToSelector​(org.moe.natj.objc.SEL aSelector)
      • isSubclassOfClass

        public static boolean isSubclassOfClass​(org.moe.natj.objc.Class aClass)
      • keyPathsForValuesAffectingValueForKey

        public static NSSet<java.lang.String> keyPathsForValuesAffectingValueForKey​(java.lang.String key)
      • new_objc

        public static java.lang.Object new_objc()
      • releaseTemporaryTextures

        public void releaseTemporaryTextures()
        Return any temporary textures to the texture allocator. Also clears the temporal history. This should be called before resizing the source texture(s).
      • resolveClassMethod

        public static boolean resolveClassMethod​(org.moe.natj.objc.SEL sel)
      • resolveInstanceMethod

        public static boolean resolveInstanceMethod​(org.moe.natj.objc.SEL sel)
      • setBilateralFilterIterations

        public void setBilateralFilterIterations​(long value)
        The number of bilateral filter iterations to run. More iterations will improve quality at the cost of performance. Defaults to 5. Must be at least 1.
      • setVersion_static

        public static void setVersion_static​(long aVersion)
      • superclass_static

        public static org.moe.natj.objc.Class superclass_static()
      • svgf

        public MPSSVGF svgf()
        The underlying MPSSVGF kernels object which will be used for denoising. Use this object to customize the denoising process.
      • textureAllocator

        public MPSSVGFTextureAllocator textureAllocator()
        The object which will be used to allocate intermediate and output textures.
      • version_static

        public static long version_static()