PHYSX DEFOCUS

PhysX Defocus est une alternative physiquement plausible au zDefocus avec une option de bokeh non uniforme. Cela signifie que si vous entrez des valeurs réelles de longueur focale, d’ouverture et de taille de capteur, vous obtiendrez une taille de défocus physiquement plausible (si votre scène 3D est bien à la bonne échelle bien sûr).

 

Il est également équipé d’une option de bokeh non uniforme pour créer le type de bokeh tourbillonnant que vous pouvez voir dans l’exemple ci-dessus. Le bokeh lui-même est entièrement personnalisable avec un joli préréglage par défaut qui imite une véritable boule de bokeh avec ses imperfections.

 

Une option de lens breathing physiquement plausible est également présente et permet de créer une respiration réaliste basée sur le changement de distance de mise au point et les propriétés anamorphiques.

 

Mais comment ça fonctionne ? Le domaine de l’optique est très complexe mais fascinant, et il existe de nombreuses équations décrivant les multiples interactions de la lumière avec différentes surfaces. Le bokeh est simplement le résultat d’un rayon de lumière qui n’est pas correctement focalisé sur la surface du capteur. Sa forme ronde provient de la forme de la lentille. Le terme optique qui décrit la boule de bokeh est le cercle de confusion, se référant à la zone dans laquelle la lumière n’est pas focalisée. Une équation simple et bien connue permet de décrire le rayon de ce cercle de confusion (CoC) :

 

    CoC(Px) = ((((Profondeur - Distance_Focale) * Longueur_Focale ^ 2) / (Ouverture * (Profondeur * (Distance_Focale - Longueur_Focale))) * Largeur_Image) / Taille_Horizontale_Capteur) / 2

 

(Les distances sont exprimées en mm, les images en pixels.)

 

Cette équation est utilisée dans PhysX Defocus, ainsi que de nombreuses autres, pour générer un bokeh physiquement plausible. Une autre fonctionnalité est le bokeh non uniforme. Comme vous le savez probablement, Nuke ne prend pas en charge nativement les opérations de convolution non uniformes. Pour contourner ce problème, j’ai utilisé la technique de Gilles Vink : Pour obtenir un bokeh non uniforme, il faut découper l’image en X morceaux — disons 25 ici, ce qui correspond au préréglage de qualité Medium — et appliquer un zDefocus différent à chaque tranche, puis les combiner toutes ensemble. Cela devrait normalement être impossible à faire sur une seule image, puisqu’il faut traiter 25 images, mais en tirant parti du système de subframe de Nuke, il est possible de diviser une seule image en 25 sous-images et d’assigner une opération à chacune. Il faut ensuite un système qui scanne les 25 tranches une par une et leur assigne un filtre différent selon leur position dans l’image, puis pour les recombiner, on peut utiliser un nœud frameblend pour réassembler l’image. J’épargnerai ici les nombreux problèmes étranges que vous pouvez rencontrer en cours de route, mais si vous souhaitez une explication plus poussée, n’hésitez pas à me contacter !

 

Un des principaux problèmes que vous rencontrerez est la performance. Nuke étant très inefficace avec les opérations de convolution, et cette méthode nécessitant X opérations par image, vous pouvez vous attendre à ce que ce nœud soit assez lent en mode non uniforme. La seule véritable solution serait de reconstruire un nœud zDefocus depuis zéro. C’est pourquoi, pour vous faciliter la vie, j’ai créé des options de rendu permettant d’activer le mode non uniforme uniquement lors du rendering sur un renderfarm, ainsi que de travailler dans une qualité plus basse tout en passant automatiquement à une qualité supérieure au moment du rendu. Cela vous permet de travailler avec des performances acceptables sans compromettre la qualité finale, et sans avoir à changer ces paramètres avant chaque rendu. Réglez-le une fois, et vous êtes prêt !

 

Le reste du nœud est assez standard, je ne détaillerai donc pas chaque fonctionnalité, mais il faut savoir que du scripting Python a été utilisé pour créer dynamiquement un menu changeant entre les modes 2D et Depth. Le scripting a également été utilisé pour le bouton "Get Selected Camera Data", et une équation similaire à celle mentionnée plus haut a été utilisée pour générer un lens breathing physiquement plausible.

PhysX Defocus est une alternative physiquement plausible au zDefocus avec une option de bokeh non uniforme. Cela signifie que si vous entrez des valeurs réelles de longueur focale, d’ouverture et de taille de capteur, vous obtiendrez une taille de défocus physiquement plausible (si votre scène 3D est bien à la bonne échelle bien sûr).

 

Il est également équipé d’une option de bokeh non uniforme pour créer le type de bokeh tourbillonnant que vous pouvez voir dans l’exemple ci-dessus. Le bokeh lui-même est entièrement personnalisable avec un joli préréglage par défaut qui imite une véritable boule de bokeh avec ses imperfections.

 

Une option de lens breathing physiquement plausible est également présente et permet de créer une respiration réaliste basée sur le changement de distance de mise au point et les propriétés anamorphiques.

 

Mais comment ça fonctionne ? Le domaine de l’optique est très complexe mais fascinant, et il existe de nombreuses équations décrivant les multiples interactions de la lumière avec différentes surfaces. Le bokeh est simplement le résultat d’un rayon de lumière qui n’est pas correctement focalisé sur la surface du capteur. Sa forme ronde provient de la forme de la lentille. Le terme optique qui décrit la boule de bokeh est le cercle de confusion, se référant à la zone dans laquelle la lumière n’est pas focalisée. Une équation simple et bien connue permet de décrire le rayon de ce cercle de confusion (CoC) :

 

    CoC(Px) = ((((Profondeur - Distance_Focale) * Longueur_Focale ^ 2) / (Ouverture * (Profondeur * (Distance_Focale - Longueur_Focale))) * Largeur_Image) / Taille_Horizontale_Capteur) / 2

 

(Les distances sont exprimées en mm, les images en pixels.)

 

Cette équation est utilisée dans PhysX Defocus, ainsi que de nombreuses autres, pour générer un bokeh physiquement plausible. Une autre fonctionnalité est le bokeh non uniforme. Comme vous le savez probablement, Nuke ne prend pas en charge nativement les opérations de convolution non uniformes. Pour contourner ce problème, j’ai utilisé la technique de Gilles Vink : Pour obtenir un bokeh non uniforme, il faut découper l’image en X morceaux — disons 25 ici, ce qui correspond au préréglage de qualité Medium — et appliquer un zDefocus différent à chaque tranche, puis les combiner toutes ensemble. Cela devrait normalement être impossible à faire sur une seule image, puisqu’il faut traiter 25 images, mais en tirant parti du système de subframe de Nuke, il est possible de diviser une seule image en 25 sous-images et d’assigner une opération à chacune. Il faut ensuite un système qui scanne les 25 tranches une par une et leur assigne un filtre différent selon leur position dans l’image, puis pour les recombiner, on peut utiliser un nœud frameblend pour réassembler l’image. J’épargnerai ici les nombreux problèmes étranges que vous pouvez rencontrer en cours de route, mais si vous souhaitez une explication plus poussée, n’hésitez pas à me contacter !

 

Un des principaux problèmes que vous rencontrerez est la performance. Nuke étant très inefficace avec les opérations de convolution, et cette méthode nécessitant X opérations par image, vous pouvez vous attendre à ce que ce nœud soit assez lent en mode non uniforme. La seule véritable solution serait de reconstruire un nœud zDefocus depuis zéro. C’est pourquoi, pour vous faciliter la vie, j’ai créé des options de rendu permettant d’activer le mode non uniforme uniquement lors du rendering sur un renderfarm, ainsi que de travailler dans une qualité plus basse tout en passant automatiquement à une qualité supérieure au moment du rendu. Cela vous permet de travailler avec des performances acceptables sans compromettre la qualité finale, et sans avoir à changer ces paramètres avant chaque rendu. Réglez-le une fois, et vous êtes prêt !

 

Le reste du nœud est assez standard, je ne détaillerai donc pas chaque fonctionnalité, mais il faut savoir que du scripting Python a été utilisé pour créer dynamiquement un menu changeant entre les modes 2D et Depth. Le scripting a également été utilisé pour le bouton "Get Selected Camera Data", et une équation similaire à celle mentionnée plus haut a été utilisée pour générer un lens breathing physiquement plausible.