Archives par étiquette : cuda

Utilisation de WebCL : calcul d’un écoulement

Nous avons essayé les possibilités du WebCL, un futur standard du Khronos Group. Il s’agit de disposer des performances de calcul de l’openCL dans le navigateur. Etant donné que nous disposons d’ordinateurs avec CUDA installé, nous avons réalisé une démonstration pour vérifier les performances annoncées par Nokia.

Il s’agit d’une diffusion de gaz à travers un trou. Le gaz est modélisé par un ensemble de particules sphériques qui rebondissent elastiquement les unes sur les autres. WebCL se charge de gérer le moteur de collisions, tandis que WebGL affiche le résultat sur une texture.

Pour donner une idée de la différence de performance avec javascript, on a rendu possible d’effectuer le calcul en js, et le rendu sur un canvas en html5. Avec cette dernière technologie, il est difficile de monter à plus de 1000 particules sur mon corei7-2600K. A l’inverse, quand le calcul se déroule sur ma GTX470, le programme commence à ramer à 30 000 particules! Pourtant les implémentations CPU et GPU sont strictement identiques.

La démo est disponible ici : spacegoo.com/particles.php

Si vous n’êtes pas compatible webgl, vous pouvez toujours admirer cette vidéo capture d’écran :

Many particles flow simulation (WebCL)
Runtime
2:01
Compteur de vues
1,496

Nouvelle démo : ambient occlusion

Nous avons programmé une nouvelle démo présentant l’effet d’occlusion ambiante.

C’est un effet classique qui permet d’ajouter du réalisme à une scène 3D sans coûter un centime à l’exécution. Les reliefs sont augmentés et les ombres adoucies, grâce à précalcul ne dépendant que de la géométrie du maillage.

Pour chaque vertex de l’objet, on lance des rayons (92 ici) dans toutes les directions autour de la normale à ce point. On compte alors les rayons qui intersectent l’objet. Ce nombre divisé par le nombre de rayons lancés nous donne une approximation de l’angle solide de « visibilité », qui caractérise la facilité qu’a la lumière pour y accéder.

En multipliant l’éclairement en ce point par le facteur obtenu, on obtient l’effet voulu, et les reliefs sont réhaussés.

Cliquez ici pour afficher la démo.

Vous devez avoir un navigateur récent tel Chrome ou Firefox4 ou + pour afficher cette démonstration, ainsi que des pilotes graphiques à jour.

En cas de non compatibilité, voici la vidéo :