Bases des harmoniques sphériques
l
Une telle opération qui peut être effectuée efficacement dans SH est appelée " convolution ", ce qui signifie intégrer le produit de deux fonctions sphériques 2D sur une sphère. Il s'agit d'une opération courante dans les calculs d'éclairage, par exemple une des fonctions pourrait être votre éclairage incident et une fonction le BRDF. Lorsqu'elle est représentée comme SH, cette opération est simplement le produit scalaire de deux vecteurs de coefficient SH.
Une autre opération intéressante est la possibilité d'effectuer un filtrage passe-bas efficace. Parce que SH est représenté dans le domaine fréquentiel, il s'agit simplement de mettre à l'échelle ou de mettre à zéro certains des coefficients SH. Par contre, certaines autres opérations peuvent être difficiles à effectuer dans SH par rapport au domaine spatial, par exemple si vous voulez faire pivoter une fonction représentée comme SH, cela peut devenir assez cher pour SH d'ordre supérieur. Cela dépend donc vraiment du problème s'il peut être exécuté en SH ou non.
SH est généralement utilisé pour représenter uniquement les fonctions à basse fréquence (c'est-à-dire les fonctions changeant en douceur) car les fréquences plus élevées nécessitent d'augmenter la quantité de stockage (coefficients SH) et de traitement. C'est pourquoi vous ne voyez pas SH utilisé par exemple pour remplacer les réflexions spéculaires sur les surfaces brillantes. Il existe également des harmoniques sphériques zonales , qui peuvent être utilisées pour réduire le stockage et le calcul des fonctions 2D qui sont symétriques en rotation autour de l'axe z, en stockant simplement les éléments diagonaux de la matrice de coefficients SH. Les harmoniques hémisphériques peuvent également être utilisées si vous avez uniquement besoin de gérer des fonctions hémisphériques (également courantes en éclairage) avec l'avantage de pouvoir représenter des fréquences similaires à SH avec moins de coefficients.
Une opération que vous devez également effectuer est la "projection SH" pour transformer les données du domaine spatial en SH. Vous pouvez effectuer cette opération en effectuant une convolution de données de domaine spatial avec des fonctions de base SH. Une propriété intéressante de SH est que, contrairement aux représentations de domaine spatial, SH ne souffre pas d'alias, donc vous n'avez pas d'artefacts d'alias même lors de la projection vers SH de très faible ordre.
Sondes lumineuses
Maintenant que vous comprenez les opérations et propriétés de base de SH, nous pouvons penser à comment les appliquer à GI. Une sonde lumineuse enregistre la quantité de lumière provenant de toutes les directions jusqu'au point où se trouve la sonde. Il s'agit d'une fonction 2D sur une sphère et peut être représentée comme SH (ou 3 fonctions SH pour le rouge, le vert et le bleu). Selon la quantité de détails d'éclairage que nous voulons encoder dans les sondes, nous pouvons choisir l'ordre SH.
Pour les sondes lumineuses qui ne sont utilisées que pour un éclairage diffus lambertien, un SH assez faible est suffisant car la convolution est effectuée avec un cosinus-lobe, qui peut être représenté avec un SH d'ordre 2 (9 coefficients). Les coefficients SH pour les sondes lumineuses peuvent être générés simplement en affichant un cubemap au point de la sonde, puis en le projetant sur SH.
Lors du rendu de la géométrie, peu de sondes lumineuses les plus proches sont prises et leurs résultats sont interpolés pour obtenir la fonction d'éclairage incident dans un point de l'espace. Cela peut être fait par exemple en interpolant directement les coefficients SH des sondes proches, puis en effectuant la convolution avec le lobe cosinus orienté normal des pixels dans le domaine SH.
Harmoniques sphériques
Si vous ne savez pas ce qu'est une transformée de Fourier, vous devez savoir avant de comprendre les harmoniques sphériques. La transformée de Fourier vous permet de représenter un signal sous la forme d'une série d'ondes sinus et cosinus, chacune ayant deux fois la fréquence de la dernière. Autrement dit, vous pouvez représenter le signal comme sa moyenne, plus une onde sinusoïdale dont la longueur d'onde est la même que la longueur du signal, plus une onde sinusoïdale deux fois cette longueur d'onde, et ainsi de suite. Parce que la transformée de Fourier vous fixe à ces longueurs d'onde particulières, il vous suffit d'enregistrer l'amplitude de chacune.
Nous utilisons couramment des transformées de Fourier pour représenter des images, qui ne sont que des signaux numériques 2D. C'est utile parce que vous pouvez jeter certaines des ondes sinusoïdales (ou réduire la précision avec laquelle vous stockez leur amplitude) sans changer de manière significative à quoi ressemble l'image aux yeux humains. OTOH, jeter les pixels change beaucoup l'apparence de l'image.
Dans un signal échantillonné comme une image, si vous utilisez le même nombre d'ondes sinusoïdales qu'il y avait d'échantillons (pixels) dans l'image d'origine, vous pouvez reconstruire l'image exactement, donc une fois que vous commencez à éliminer les fréquences, vous faites le l'image prend moins de stockage.
Les harmoniques sphériques sont exactement comme les transformées de Fourier, mais au lieu des ondes sinusoïdales, elles utilisent une fonction sphérique, donc au lieu de fonctions linéaires (telles que les images), elles peuvent représenter des fonctions définies sur la sphère (telles que les cartes d'environnement).
Sondes lumineuses
Tout comme la façon dont une image standard enregistre toute la lumière atteignant un certain point à travers le plan de l'image, une sonde lumineuse enregistre toute la lumière atteignant un certain point de toutes les directions. Ils sont d'abord sortis des effets de film. Si vous souhaitez ajouter un objet généré par ordinateur à une scène du monde réel, vous devez être en mesure d'éclairer l'objet synthétique avec l'éclairage du monde réel. Pour ce faire, vous devez savoir quelle lumière atteint le point de la scène où sera l'objet synthétique. (NB Bien que je dis "éclairage", vous enregistrez une image de toute la lumière, donc elle peut également être utilisée pour les reflets.)
Parce que vous ne pouvez pas avoir un appareil photo avec un objectif sphérique qui enregistre toute la lumière atteignant un seul point de toutes les directions, vous enregistrez cela en prenant des photographies normales d'un miroir sphérique, puis en reprojetant les images sur une sphère.
En dehors des effets de film, il est plus courant d'utiliser des sondes lumineuses générées à partir d'une scène artificielle. Imaginez que vous ayez un algorithme coûteux pour calculer l'illumination globale (GI) dans une scène, et que vous avez également des objets plus petits qui se déplacent dans cette scène (comme un niveau de jeu avec des joueurs). Vous ne pouvez pas exécuter l'intégralité de l'algorithme GI chaque fois qu'un objet se déplace, vous l'exécutez donc une fois avec la scène statique et enregistrez les sondes de lumière prises à différents points du niveau. Ensuite, vous pouvez obtenir une bonne approximation de l'IG en allumant le lecteur avec la sonde de lumière dont il est le plus proche.
Les utiliser ensemble
En règle générale, vous souhaitez filtrer les arêtes vives dans votre éclairage global de toute façon, vous voulez donc un moyen de les représenter qui est compact et vous permet de jeter facilement les hautes fréquences. C'est à cela que les harmoniques sphériques sont vraiment bonnes! C'est pourquoi vous entendrez souvent ces deux termes ensemble.
Vous calculez des sondes lumineuses avec votre algorithme GI coûteux - généralement dans l'outil de conception de niveau, ou peut-être une fois par seconde (au lieu d'une fois par image) si vous souhaitez inclure vos objets dynamiques dans. Vous les stockez à moindre coût avec des harmoniques sphériques - 16 flotteurs suffisent pour un éclairage de assez haute qualité, mais pas de reflets. Ensuite, pour chaque objet dynamique que vous souhaitez éclairer, vous choisissez la sonde de lumière la plus proche (ou interpolez plusieurs linéairement ensemble) et l'utilisez comme entrée uniforme ou constante dans votre shader. Il est également courant d'utiliser des harmoniques sphériques pour représenter les données d'occlusion ambiante, et il est très bon marché de le faire avec la sonde de lumière, bien qu'il y ait une certaine complexité autour des fonctions harmoniques sphériques rotatives.
la source
Harmoniques sphériques
Disons que vous avez des données dans un tableau mais que vous souhaitez représenter ces données avec un nombre d'octets inférieur.
Une façon de le faire pourrait être d'exprimer les données en tant que fonction au lieu des valeurs brutes.
Le problème est qu'une équation linéaire est probablement une mauvaise approximation de vos données.
Nous avons augmenté le stockage en mémoire et également la complexité de calcul du stockage et de la récupération de vos données, par rapport à l'équation linéaire, mais c'est une meilleure approximation de votre tableau de données. Nous pourrions également le porter à une fonction cubique ou supérieure. Augmenter la commande augmente le stockage, le calcul et la précision.
Tout comme dans les exemples ci-dessus, vous pouvez utiliser une fonction d'harmoniques sphériques d'ordre inférieur pour créer quelque chose avec un stockage inférieur et un calcul inférieur pour calculer les données, mais également une précision inférieure.
D'un autre côté, vous pouvez augmenter la commande et obtenir une meilleure approximation de vos données d'origine, mais au prix de plus d'espace de stockage requis et de plus de calculs nécessaires pour calculer un point de données.
À l'extrême, vous pouvez utiliser autant de termes harmoniques sphériques que vous aviez d'échantillons dans votre tableau, puis vous pouvez reconstruire exactement votre tableau d'origine, mais vous passez beaucoup de calculs à le faire et vous utilisez tout autant d'espace de stockage comme vous avez commencé.
Pour cette raison, dans la pratique, les fonctions d'harmoniques sphériques n'offrent pas beaucoup d'avantages si vous devez représenter des détails fins - comme une réflexion nette sur une sphère - mais elles peuvent être bon marché pour des données qui n'ont pas de détails fins (données qui ne pas beaucoup de contenu haute fréquence). Ils sont également utiles pour effectuer des calculs dans le domaine fréquentiel comme l'analyse spectrale ou la convolution.
L'une de ces données qu'ils sont bons à stocker est "l'irradiance" qui est la quantité de lumière atteignant un point provenant d'autres directions. Il a tendance à être un peu flou, ce qui signifie qu'il n'a qu'un contenu à basse fréquence et est un bon candidat pour être stocké dans une fonction d'harmoniques sphériques.
Je vais laisser l'explication des sondes lumineuses à une autre personne: p
la source