6
votes

Demandez une ressource sur l'algorithme de traçage rapide

Premièrement, je suis désolé pour cette question difficile, mais je ne veux pas introduire trop de détails, alors je viens de demander des ressources connexes telles que articles , Bibliothèques ou conseils .

Mon programme doit faire un calcul intensif de l'intersection de ray-triangle (il y a des millions de rayons et de triangles), et mon objectif est de le rendre aussi rapide que possible.

Ce que j'ai fait est:

  1. Utilisez le plus rapide Ray-Triangle algorithme que je connais.

  2. Utilisez octree. (de la programmation du jeu GEM 1, 4.10. 4.11)

  3. Utilisez Un algorithme d'intersection efficace et robuste de la boîte à rayons < / a> qui est utilisé dans l'algorithme octree.

    Il est plus rapide qu'avant d'avoir appliqué ces meilleurs algorithmes, mais je pense que cela pourrait être plus rapide, pourriez-vous perdre des lumières sur tous les endroits éventuels pouvant la rendre plus rapide?

    Merci.


1 commentaires

Il y a une étiquette 'raytrasing' au fait;)


5 Réponses :


3
votes

L'endroit où poser ces questions est ompf2.com . Un forum avec des sujets sur le temps réel (bien que non réel Temps) Raytracing


5 commentaires

Les lunettes de protection, elles ne font rien!


J'ai eu une réponse précieuse à ce forum, merci. ompf.org/forum/viewtopic.php?f=4&t=1557


Malheureusement, ompf.org site est mort depuis déc. 2011. Voir par exemple igad2.nhtv.nl/ompf2/ index.php


Le lien IGAD2 est mort aussi maintenant


J'ai mis à jour le lien vers l'emplacement actuel de ompf



1
votes

Il y a plusieurs optimisations que vous pouvez faire, mais toutes dépendent du domaine exact de votre problème. En ce qui concerne les algorithmes généraux, vous êtes sur la bonne voie. Selon le domaine, vous pouvez:

  1. Introduisez un système de portail
  2. Déplacez les calculs sur un GPU et profitez du calcul parallèle
  3. Une tendance assez populaire à Raytracing récemment est Volume de limite Hiérarchies

2 commentaires

Je suis intrigué, pourriez-vous donner une référence à la (2) que vous avez mentionnée? J'aimerais lire à ce sujet (je sais que cela est très certainement possible), vous semblez savoir de quoi vous parlez.


Merci, Kornel, je me suis souvenu qu'il y avait une bibliothèque mise en œuvre par MIT, mais je ne peux tout simplement pas le trouver, connaissez-vous des bibliothèques existantes similaires?



2
votes

Forum OMPF est le bon endroit pour cette question, mais depuis que je suis ici aujourd'hui ...

N'utilisez pas d'intersection Ray / Box pour une traversée OcTreee. Vous pouvez l'utiliser pour le nœud racine de l'arbre, mais c'est tout. Une fois que vous connaissez la distance à l'entrée et à la sortie de la zone racine, vous pouvez calculer les distances des plans de partition X, Y et Z - les plans qui subdivisent la boîte. Si la distance à l'avant et à l'arrière est F et B respectivement, vous pouvez déterminer quels nœuds enfants de la boîte sont touchés en analysant les distances F, B, X, Y, Z. Vous pouvez également déterminer la commande de traverser les nœuds enfants et de rejeter complètement beaucoup d'entre eux.

Au plus 4 des enfants peut être touché puisque le rayon commence dans une octetre et change uniquement des octes lorsqu'il traverse l'un des 3 plans de partition.

En outre, puisqu'il devient récursif, vous aurez besoin de la saisie et de sortie des distances pour les nœuds d'enfants. Ces distances sont choisies dans l'ensemble (F, B, X, Y, Z) que vous avez déjà calculée.

J'ai optimisé cela depuis très longtemps et que vous pouvez dire en toute sécurité que vous avez toujours une commande de performance de magnitude toujours sur la table pour les arbres de nombreux niveaux profonds. J'ai commencé là où tu es maintenant.


0 commentaires

0
votes

Une ressource utile que j'ai vue est la Journal of Graphics Tools . Selon vos scènes, un autre BVH pourrait être plus approprié qu'un octree.

Aussi, si vous n'avez pas examiné votre performance avec un profileur, vous devriez. Shark est super sur OSX et j'ai obtenu de bons résultats avec des fenêtres très somnolentes.


1 commentaires

Oui, merci, j'ai un profileur construit simple qui devrait être suffisant pour que je puisse voir les goulots d'étranglement.



1
votes

Vous avez déjà obtenu un bon départ à l'aide d'un type spatial couplé d'algorithmes d'intersection rapides. Pour avoir traçable les rayons individuels à la fois, l'une des meilleures structures exposées (pour des scènes statiques) est un arbre K-D construit à l'aide de la surface de la surface.

Toutefois, pour le traçage de rayons véritablement à grande vitesse, vous devez profiter de:

  • paquets cohérents de rayons
  • frusta
  • simd

    Je vous suggérerais de commencer par " Ray Tracing Scènes animées à l'aide d'une traversée de grille cohérente ". Il donne un exemple facile à suivre d'une telle approche moderne. Vous pouvez également suivre les références pour voir comment ces idées sont appliquées aux arbres K-D et à BVHS.

    sur la même page, consultez également "l'état de la technique dans les scènes animées de traçage Ray".

    Un autre excellent ensemble de ressources est toutes les publications Siggraphique au fil des ans. Ceci est une conférence très compétitive, de sorte que ces papiers ont tendance à être haut de gamme.

    Enfin, si vous êtes prêt à utiliser le code existant, consultez la page du projet pour OpenRT .


0 commentaires