Téléchargez l'application
Tom's Hardware sur l'App Store
Toute l'actu informatique de référence sur votre iPhone
Oui Non

Présentation des précurseurs

par
1/ RenderMan

Comme souvent dans l’industrie les révolutions annoncées à grand renfort de marketing n’en sont jamais véritablement : en général il s’agit de récupérer des recherches universitaires ou d’intégrer dans des produits grands publics des innovations apparues quelques années plus tôt dans le monde professionnel. Le concept de HLSL n’échappe pas à la règle, en effet la notion de langage de shading est apparue initialement avec RenderMan.

RenderMan est une interface de description de scènes 3D créée par Pixar qui a été largement utilisée au cinéma. Cette interface permet essentiellement de définir une scène 3D, d’y placer objets, sources de lumières et caméras mais RenderMan ne s’arrête pas là et a introduit aussi la notion de « shaders ». Les shaders sont en fait des procédures écrites dans un langage appelé RenderMan Shading Language permettant d’adapter le rendu à des besoins spécifiques non pris en compte par l’interface de base.

Les shaders RenderMan sont de trois types :

  • Les shaders de source lumineuse qui calculent la couleur de la lumière émise depuis un point sur la source lumineuse jusqu’à un point sur la surface illuminée.

  • Les shaders de surface, utilisés pour modéliser les propriétés optiques des matériaux de la surface.

  • Les shaders de volume qui modulent la couleur d’un rayon de lumière traversant un volume.
Après cette brève introduction il paraît clair que cette façon de représenter les shaders est bien plus adaptée à un raytracer qu’aux « immediate mode renderer » que sont nos chips 3D. Et si RenderMan a joué le rôle d’inspirateur à n’en pas douter il n’est donc pas étonnant de constater qu’au final le Cg tout comme les autres HLSL n’ont pas grand-chose à voir avec lui. Alors que Pixar a clairement fait le choix d’orienter son langage vers un domaine spécifique, en l’occurrence le shading, en offrant un support natif des types dédiés à ce domaine (color, surface, light, point…) les différents HLSL sont des langages nettement plus génériques inspirés en droite lignée du C.

Les avantages d’un langage dédié sont certes attractifs, mais ne suffisent pas à contrebalancer les défauts dans un environnement temps réel et un langage comme RenderMan n’est adapté ni aux postulats des API, ni au hardware sous jacent, ce qui en soit se comprend tout a fait car il n’a pas été conçu dans cet optique. Sans compter qu’un langage de trop haut niveau rend difficile d’appréhender l’impact d’une opération particulière sur les performances. Enfin l’abstraction offerte par le langage aurait pu être perçue comme bridant les programmeurs, les obligeant à se conformer à un moule ne convenant par forcément à leurs besoins. L’ancêtre des HLSL commerciaux est donc à chercher ailleurs.

2/ Stanford Shading Language

Le véritable inspirateur des HLSL commerciaux tels que nous les connaissons est donc plus le Stanford Shading Language. Ce projet qui a débuté en 1999, donc bien avant l’apparition des shaders dans nos cartes 3D, était initialement conçu pour permettre de mieux tirer profit des possibilités offertes par le rendu multi passes. Il se situe donc comme une couche d’abstraction supplémentaire entre le programmeur et la carte 3D au dessus de l’API (en l’occurrence OpenGL) et en offrant une virtualisation des ressources.

La première version ressemblait à un langage de type Lisp et n’était dédié qu’à la programmation des fragments mais devant les limitations qu’elle présentait elle fut rapidement étendue à plusieurs niveaux de traitement et le langage fut remplacé par une version inspirée du C.

Désormais le langage permet d’opérer au niveau des constantes (évaluées à la compilation), au niveau des groupes de primitives, au niveau des sommets et au niveau des fragments.

La compilation des shaders se fait en deux étapes de la façon suivante :

  • Les shaders de surface et de source lumineuse (en inspiration directe de RenderMan) sont tout d’abord compilés dans un langage intermédiaire offrant une nouvelle forme d’abstraction appelée pipeline programs. Les pipeline programs sont de trois sortes chacun opérant à un niveau de fréquence différent (par groupe de primitives, par sommet, par fragment).

  • Ces pipeline programs sont à leurs tours compilés en un code exécutable par le hardware en fonction de la cible (par exemple les programmes opérant sur les groupes de primitive seront compilés pour être exécutés par le CPU, les programmes opérant sur les sommets seront compilés pour être exécutés soit par le CPU soit par l’unité de vertex shader, les programmes opérant sur les fragments seront compilés pour être exécutés par les Registers Combiners ou par le hardware de multitexturing classique).
Ce système permet une meilleure portabilité, la seule partie à modifier pour s’adapter à des hardware différents est le module en question du back end du compilateur.

Partager:
Soyez le premier à laisser un commentaire !
X
Valider

Commentaires

Les offres du moment

Newsletters


OK