Je joue avec la modélisation 3D procédurale simple pour créer de minuscules bâtiments pour l'impression 3D. Un exemple:
Pour rendre les modèles plus lisibles à l'écran, j'ai mis en œuvre un mappage d'ombres de base pour une seule lumière directionnelle. Étant donné que ma scène ne change pas, je rend juste la carte d'ombre une fois à l'aide d'une boîte alignée sur l'axe de la scène pour déterminer quelles devraient être les limites de la carte d'ombre. Les ombres et les limites semblent avoir toutes les matrices correctes, mais se rapprocher un peu semble terrible:
D'après la lecture que j'ai faite, je comprends le panoramique de Peter et ce que je pourrais faire à ce sujet, mais les bords irréguliers, qui je crois est une forme d'alias projectif, semblent si mauvais que je pense que quelque chose ne va pas dans mon implémentation de base.
J'ai piraté le pixel shader pour montrer les limites du texel d'ombre:
J'ai un filtrage bilinéaire dans la texture (sans cela, je reçois une sérieuse acné d'ombre). Malheureusement, ma tentative de PCF a également échoué - elle semble tout aussi irrégulière:
Voici le cas d'échantillon unique avec filtrage bilinéaire désactivé:
Cela ressemble-t-il à un aliasing projectif "typique"? Le rendu dynamique de la carte d'ombre, en utilisant le tronc de vue coupé à la scène, éventuellement en cascade, pourrait-il résoudre le problème?
Edit: Ajout d'un gros plan de filtrage bilinéaire, comparaison post-ombre, juste pour montrer ce que j'obtiens. L'acné de mauvaise ombre apparaît en raison des bords intérieurs; Je modélise avec des blocs virtuels empilés et ne fais pas une opération d'union appropriée. D'après ma lecture, la mise en œuvre d'opérations booléennes sur les polyèdres n'est pas anodine, mais me permettra également d'implémenter des volumes d'ombre statiques ainsi que de nettoyer certains logiciels d'impression 3D.
la source
Vous avez dit que "... filtrage bilinéaire dans la texture ...". Il semble que vous interpoliez les valeurs de profondeur de la carte d'ombre. La bonne façon d'utiliser l'interpolation avec la carte d'ombre est de l'appliquer sur les résultats des tests d'ombre (pour autant que je m'en souvienne, OpenGL prend cela en charge). Vous pouvez même combiner l'interpolation des résultats des tests fantômes avec PCF, ce qui fournira de bien meilleurs résultats. Cependant, comme vous l'avez peut-être remarqué, l'aliasing est un fléau qui poursuit toujours le mapping d'ombre :)
Bien que je comprenne que vous cherchez des solutions concernant le mappage d'ombres (même parce qu'il est assez simple à mettre en œuvre), avez-vous déjà envisagé l'utilisation de volumes d'ombres? Il est beaucoup plus complexe à implémenter, mais ne souffre pas du tout d'alias, et je pense qu'il conviendrait parfaitement à vos besoins.
la source