2010-10-04 5 views
3

Pouvez-vous rendre NURBS sur le GPU avec DirectX 11? J'ai lu des tendances actuelles sur les surfaces de rendu comme celles-ci, mais je ne vois rien sur NURBS.NURBS sur DirectX 11?

J'ai trouvé quelques références connexes, mais rien de solide ... comme «Surfaces de subdivision Catmull-Clark avec des patches bicubiques» par Charles Loop et Scott Schaefer.

    -

Répondre

2

Il y a 2 démos dans le DirectX SDK; SubD10, SubD11 pour les implémentations de DirectX 10/11 respectivement des techniques décrites dans cet article.

0

La réponse rapide est non. Les NURBS sont assez complexes, et il serait difficile d'écrire un shader efficace qui peut les rendre sur le GPU. Je pense que c'est possible, mais ce n'est généralement pas fait parce qu'il y a un meilleur moyen. Le meilleur moyen est de rendre les patchs de Bézier directement sur le GPU, car n'importe quel NURBS peut être converti en un ensemble de patchs de Bézier. Pour générer les patches, vous effectuez une insertion de nœud à chaque nœud jusqu'à ce qu'il atteigne la même multiplicité que le degré; par exemple. sur un NURBS cubique, vous devez effectuer une insertion de nœud à chaque nœud jusqu'à ce que chaque nœud soit un triple nœud. Les points de contrôle des NURBS peuvent alors être traités comme un maillage de Bézier connecté. Il y a un problème avec ceci, spécifique aux shaders: Quand vous triangulez vos patchs de Bézier, il est critique que les patchs partageant une limite partagent aussi exactement les mêmes paramètres de tessellation, sinon il y aura des fissures dans votre surface NURBS en raison de la tessellation décalage. Si vous utilisez des paramètres de tessellation fixes, cela ne pose pas de problème, mais si vous utilisez la tessellation dépendante de la vue, vous devez vous assurer que chaque tessellation dépend de la vue, calculée indépendamment, afin que les rustines adjacentes correspondent.