HardWare.fr


NVIDIA annonce le Cg
Cartes Graphiques
Publié le Jeudi 13 Juin 2002 par Marc Prieur

URL: /news/4909/nvidia-annonce-cg.html


NVIDIA vient d'annoncer le Cg, pour 'C for Graphics'. Jusqu'alors, pour programmer des shader, il fallait travailler avec des instructions de type assembleur assez proche du matériel. Avec le CG? On s'éloigne du matériel puisque le Cg se place au dessus de DirectX ou d'OpenGL, ce qui permet de coder en faisant abstraction du hardware.

Avec le Cg, les développeurs pourront écrire leur shader via le language Cg, qui est plus simple et assez proche du language de shader utilisé par RenderMan de Pixar (mais qui est pour sa part réservé au rendu software). Ce shader pourra ensuite être compilé pour une puce DirectX 8, OpenGL 1.4 puis DirectX 9 et OpenGL 2.0 lorsque ces API arriveront en versions finales.


L'intérêt du Cg est double, puisque d'une part il permet de faciliter la programmation des shader de part un langage plus simple et indépendant de l'API ou de l'OS. D'autre part, il est par exemple possible d'écrire un seul shader Cg puis de le compiler pour DX8, DX9 (voir OGL), le moteur de jeu utilisant ensuite le shader adéquat en fonction du GPU présent sur votre PC !
Fong Shader en assembleur

DP3 R0, c[11].xyzx, c[11].xyzx;
RSQ R0, R0.x;
MUL R0, R0.x, c[11].xyzx;
MOV R1, c[3];
MUL R1, R1.x, c[0].xyzx;
DP3 R2, R1.xyzx, R1.xyzx;
RSQ R2, R2.x;
MUL R1, R2.x, R1.xyzx;
ADD R2, R0.xyzx, R1.xyzx;
DP3 R3, R2.xyzx, R2.xyzx;
RSQ R3, R3.x;
MUL R2, R3.x, R2.xyzx;
DP3 R2, R1.xyzx, R2.xyzx;
MAX R2, c[3].z, R2.x;
MOV R2.z, c[3].y;
MOV R2.w, c[3].y;
LIT R2, R2;

Phong Shader en Cg

COLOR cSpec = pow(max(0, dot(Nf, H)), phongExp).xxx;
COLOR cPlastic = Cd * (cAmbi + cDiff) + Cs * cSpec;

Phong Shader avec RenderMan (rendu software)

color cSpec = phong(Nf,V,phongExp);
Ci = Oi * (FinalColor = DiffuseColor * (AmbientLight + DiffuseLight)) + SpecularColor * cSpec;
De plus, le Cg sera un langage ouvert dans le sens ou ses spécifications seront publiées et qu'une version open source du compilateur sera disponible afin que les autres fabricants de GPU puissent développer leurs propres compilateurs Cg utilisant leurs extensions OpenGL propriétaires.

Voilà donc une très bonne innovation qui devrait en théorie accélérer l'arrivée de jeux utilisant les shaders, tout en permettant d'avoir des shaders qui pourront à la fois fonctionner sur des GPU DX8, DX9 (voir plus) ... mais pas à la même vitesse bien entendu.

La balle est maintenant dans les camps des développeurs puisqu'ils disposent déjà d'une première version du kit de développement Cg téléchargeable sur le site de NVIDIA  avec un compilateur supportant les Pixel et Vertex Shader DirectX 8 ainsi que l'extension OpenGL NV_vertex_program. Une seconde version du kit devrait arriver un peu plus tard. Elle intégrera notamment la version finale du compilateur Cg qui supportera DX9, OpenGL 1.4 (ARB_vertex_program) ainsi que les extensions Vertex & Pixel Shader OGL spécifiques au NV30, sans oublier des plug-in 3ds / Maya / Softimage.

La seule réserve que l'on peu émettre se situe au niveau de l'OpenGL. En effet, 3D Labs a fait la proposition à l'ARB d'un langage similaire mais spécifique à l'OpenGL 2.0 (car intégré à celui-ci) et incompatible avec les GPU existants. Si ce langage est accepté par l'ARB dans l'OpenGL 2.0, la cohabitation avec le Cg devrait être difficile. Pour rappel, l'ARB est un consortium crée en 1992 qui se charge de définir les spécifications et les évolutions de l'API OpenGL. Il est composé de 12 membres ayant le droit de vote : 3Dlabs, Apple, ATI, Dell Computer, Evans & Sutherland, Hewlett-Packard, IBM, Intel, NVIDIA, Microsoft, SGI, Sun. Wait & see donc ...

Copyright © 1997-2024 HardWare.fr. Tous droits réservés.