- Configurer son portable pour gagner en autonomie (3ème partie)
- La lecture de films HD sur PC
- Radeon HD 2600 XT et comparatif milieu de gamme : la revanche d'AMD ?
- Tout savoir sur le Computex 2007
- Computex 2007 : premières impressions
- AMD Radeon HD 2900 XT : la carte DirectX10 ultime ?
- GeForce 8600 et comparatif milieu de gamme
- CeBIT 2007 : que faut-il en retenir ?
- Supreme Commander : quelles performances ?
- GeForce 8800 GTS 320 Mo : DirectX 10 démocratisé ?
Source: Presence PC – Mots-clés : moteur, 3D, Carmack
Catégories: Carte graphique
- 1 – Introduction
- 2 – Rage, le jeu
- 3 – id Tech 5, la technologie
- 4 – La concurrence
- 5 – Des objectifs ambitieux
- 6 – La virtualisation de textures
La virtualisation de textures
Le problème de cette première version de la technologie est qu’elle ne pouvait s’appliquer qu’aux terrains, ou plus précisément à toute géométrie pouvant être assimilée à un plan déformé. Avec id Tech 5 John Carmack a poussé plus loin le concept afin de pouvoir l’utiliser sur des géométries arbitraires. Mais concrètement comment ça marche ? Le concept est finalement proche de celui utilisé par la gestion de la RAM sur les CPULe CPU, encore appelé processeur, est l’acronmye de « Central processing unit », en anglais. Ont pourrait traduire ce terme par unité centrale de trai... : une application et ses données ne sont pas chargées en RAM comme un seul bloc, en réalité tout est décomposé en pages de quelques kilo octets et seules les données nécessaires à un instant T sont présentes en RAM, les autres restent sur le disque dur.
Pour gérer tout cela un mécanisme de traduction d’adresses se charge de donner l’illusion à l’application qu’elle dispose d’une zone mémoire contiguë dans laquelle toutes les données sont disponibles alors qu’en pratique les pages sont éparpillées partout en mémoire et sur le disque : c’est le concept de mémoire virtuelleProcédé appliqué par les systèmes d’exploitation consistant à utiliser la capacité disponible sur le disque dur pour y stocker les informations conten..., le CPU ne manipule que des adresses virtuelles qui sont ensuite traduites en adresse physique par une unité dédiée (la MMU : Memory Management Unit). Si la page est présente en mémoire l’adresse virtuelle est remplacée par la véritable adresse dans la RAM, sinon la page est chargée en mémoire depuis le disque dur (on parle de défaut de page). Cette technique permet plusieurs choses : tout d’abord un mécanisme de protection (la MMU qui se charge de la traduction d’adresse ne laisse pas à un processusLe terme Process est un mot anglais habituellement traduit en français, et en langage informatique, par « processus ». Un processus, dans son sens éty... l’accès à une page mémoire qui ne lui appartient pas) et surtout un mécanisme permettant d’utiliser des applications nécessitant plus de mémoire qu’il n’y en a physiquement dans l’ordinateur.
Ainsi sur un système 32 bits, chaque processus dispose de son propre espace d’adressage de 4 Go (en général sous WindowsNom que portent les systèmes d’exploitation avec interface graphique de Microsoft. Windows est apparu dans les années 80. Il s’agissait alors d’une in... 2 Go sont réservés au noyauPartie centrale d’un système d’exploitation qui prend en charge ses fonctions de base et assure les échanges avec le matériel. L’architecture des syst..., le processus ne peut donc utiliser que 2 Go) et tant que sa consommation mémoire reste dans la limite de cette taille il n’y a pas de problème, même si l’ordinateur dispose d’une quantité de mémoire physique nettement plus faible. Il convient de noter qu’aujourd’hui la quantité de mémoire physique flirte dangereusement avec les limites de l’adressage 32 bits accélérant le besoin d’une transition vers un adressage 64 bitsLe 64 bits désigne la capacité d’une puce à utiliser des registres pour les calculs de nombre entiers qui comportent 64 bits. Cela permet de franchir ....
Revenons à id Tech 5. Le problème consistant à placer une texture de plusieurs Go dans une mémoire de quelques centaines de Mo au mieux ne vous rappelle-t-il pas celui que nous venons de décrire ? Et bien la solution est exactement la même : dans les faits cette immense texture n’a jamais besoin d’être présente en mémoire dans son intégralité, par conséquent les textures comme nous l’avons vues sont découpées en tiles et ceux-ci sont chargés en VRAM uniquement selon les besoins, la RAM principale agit comme une zone de stockage intermédiaire, une sorte de mémoire cachePetite quantité de mémoire rattachée à une mémoire principale et plus rapide que cette dernière, destinée à améliorer son efficacité globale. L’accès ... venant tirer parti des principes de localité spatiale et temporelle. En effet lorsque le moteur demande une portion de la MegaTexture pour un frame donné il y a de fortes chances que pour le frame suivant il ait besoin d’une portion proche. Ainsi lorsqu’une partie est ramenée depuis le disque dur puis décompressée, autant en prendre un peu plus que nécessaire afin d’accélérer les accès suivants.
Dans la théorie c’est très beau, dans la pratique toute la difficulté consiste à déterminer quelles pages sont nécessaires pour un frame donné, et ensuite à programmer un shaderProgramme exécuté sur chaque primitive et permettant d’adapter une partie du rendu à ses besoins. Les shaders étaient typiquement écrits dans un langa... permettant de texturer la géométrie avec toutes ses petites pages éparpillées en VRAM. Un des problèmes se posant concerne notamment le filtrage : que se passe-t-il par exemple aux bords des pages ? Si les pages sont chargées sous la forme d’un atlas de textures (plusieurs petites textures compactées dans une grosse texture pour plus d’efficacité) l’unité de texture du GPUGraphical Processing Unit, unité de traitement graphique. Terme utilisé pour désigner les puces 3D.... utilisera des texelsTexture element, point élémentaire d’une texture. Une fois le placage de textures effectué un texel peut couvrir un ou plusieurs pixels.... d’une texture qui n’a rien à voir lors du filtrage, ce n’est donc pas utilisable tel quel.
Soyons clairs, John Carmack n’a pas (encore ?) détaillé le fonctionnement de son algorithme. Il faut dire que sa volonté d’ouvertureC’est l’espace par lequel le diaphragme laisse passer la lumière. Sa taille maximale est une caractéristique capitale d’un objectif, déterminant sa ca... du temps de Doom III a peut être coûté cher à id Software. En effet plusieurs développeurs se sont inspirés de ses travaux pour reprendre certains concepts tout en se dépêchant de sortir leurs jeux en premier, mais plus grave une société comme Creative Labs a menacé id Software de procès sur la base d’un ancien brevet. Malgré cette absence de détails on peut quand même faire quelques suppositions, prévenons toutefois les âmes sensibles : la partie qui suit est assez technique, si vous ne souhaitez pas entrer dans les détails de l’algorithme mais juste avoir une idée des possibilités offertes n’hésitez donc pas à passer directement à la section suivante.
- Page précédente Des objectifs ambitieux
- Page suivante Suppositions sur l’algorithme




Pour ma part je suis content de voir J. Carmack revenir dans la course. J'ai toujours admiré son talent (et je suis grand fan de Quake devant l'eternel!) mais j'etais déçu par son travail sur DoomIII.
Deja ... Faire un rendu de la scene dans une texture 1000x1000 est vraiment loin d'etre gratuit !! Surtout si la scene en question est chargée en vertices, si y'a beaucoup d'animations en vertex shader, etc... Ca irait sur une petite demo, mais sur un vrai jeu bien chargé, ca coute (relativement) cher ! Rajoutons à ça qu'il faut dans bien des cas utiliser la texture elle meme pour faire ce rendu (dans le cas d'un alpha test)... Les jeux modernes font deja beaucoup de rendus (ZPass, Shadow maps, Rendu final, etc...), inutile d'en rajouter encore un...
Recuperer la texture sur le CPU ensuite, c'est encore pire... Il faut plusieurs trames de decalages pour ne pas bloquer le CPU... Pas tres pratique... Obligé d'utiliser des double ou triple buffers, etc...
Quant à parcourir et traiter le résultat (4Mo pour une render target en 32bits., vu que les RTs 8 ou 16bits ça ne cours plus vraiment les rues) sur le CPU.. Ca ne serait qu'un gros gaspillage de temps CPU (Sans parler de la memoire cache) !
(Et puis recuperer l'information de la page de texture ne suffit pas.. il faut aussi connaitre le niveau de mipmap à utiliser, et certainement d'autres paramètres..)
Y'a quand meme 1000 fois plus rapide et beaucoup beaucoup plus simple pour faire tout ça, et sans embeter le GPU qui a certainement des choses bien plus interessantes à faire !
Concernant la partie numero 7 (suppositions sur l'algo)... C'est vraiment totalement farfelu...
Cette partie est pourtant basé sur un algo existant (cf lien dans l'article) farfelu peut être mais fonctionnel en tout cas
Comme tu le dis toi même plus bas les jeux modernes font déjà un nombre conséquent de passes (ne serait ce que pour les shadow maps tu fais un rendu Z par source lumineuse, 6 pour les sources omni !) je ne vois pas en quoi en faire une de plus ferait subitement s'écrouler les performances.
Dans le pire des cas en ignorant le test alpha tu ramèneras des pages qu is'avèreront inutiles, ça n'est pas vaiment rédhibitoire.
je vois pas pourquoi : ces dernières années c'est de ce genre de techniques utilisant de multiples rendus que sont venus les algorithmes les plus intéressants. Les GPU deviennent de plus en plus puissants autant les exploiter.
ça c'est effectivement déjà un problème plus sèrieux, mais avec les PBO en OpenGL tu dois pouvoir rapatrier ça de façon asynchrone avec d'assez bonnes perfs surtout que le PCI-Express améliore les performances en readback depuis la VRAM (enfin... en théorie même si on voit que dans la pratique c'est pas encore vraiment le cas). Sur les consoles tu n'as aucun problème : le rendu peut se faire directement en mémoire principale.
ça pourrait occupper un des cores de nos chers CPU au lieu de se tourner les pouces
Comme indiqué il ne s'agit que de suppositions basé sur une implémentation fonctionnelle, après il ya sans doute d'autres façons de faire, peut être plus efficaces, 1000 fois plus rapides par contre j'en doute
1) Je ne dis pas que les performances vont s'ecrouler.. mais juste qu'un rendu supplementaire, c'est toujours du temps perdu.. Il n'est pas rare qu'un rendu prenne plus d'une ou deux milliseconde... c'est quand meme enorme.. Surtout si on vise le 60fps
1.bis) Le truc des alpha test n'est vraiment pas à negliger..
2) Non, les consoles (du moins la Xbox360 ou la PS3) ne peuvent pas faire de rendu dans la RAM principale.. Il faut rappatrier les render target depuis la VRAM.. Et ca prends un certain temps.
3) Occupper un core... ouai, mais y'a quand meme des trucs nettement plus interessant à lui faire faire nan ? ;-)
4) Ben si.. 1000 fois plus rapide... et largement meme... mais je peux pas trop en dire plus... Disons que globalement.. pourquoi s'embeter alors qu'on peut avoir toutes ces infos quasiment gratos ? ;-)
2) Non, les consoles (du moins la Xbox360 ou la PS3) ne peuvent pas faire de rendu dans la RAM principale.. Il faut rappatrier les render target depuis la VRAM.. Et ca prends un certain temps.
Pour la PS3 il faudrait que je revérifie mais il me semble que ça a été spécifiquement mentionné et globalement toutes les puces NVIDIA en sont capables depuis qu'ils ont introduit le Turbocache même si c'est pas exposé par l'API.
Pour la Xbox 360 c'est carrément sûr et certain, enfin ma tournure n'est peut être pas correcte : sur la Xbox 360 le backbuffer est toujours dans l'EDRAM donc certes le rendu ne se fait pas à proprement parler en RAM, mais il y a une copie systématique dans la mémoire principale lors du swap buffers (et effectue un downsample de l'AA par la même occasion si c'est utilisé) et c'est de la RAM que le RAMDAC tire ses données avant de les balancer à l'écran. En fait il doit même y avoir moyen d'utiliser le MEMXPORT pour écrire les données en mémoire directement en économisant une passe et cette discussion m'a permis de me rappeler d'd'une citation de Carmack qui mentionnait quelque chose de similaire sur l'utilisation du MEMEXPORT, après quelques recherches sur Google j'ai retrouvé ce qu'il disait exactement :
John Carmack
En tout cas ça semble bien confirmer qu'il utilise une passe disctincte pour déterminer les pages nécessaires.
Mais c'est pas forcement plus rapide qu'un tracé en EDRAM suivi d'un resolve...
Mais, Carmack ou pas, je ne comprends toujours pas pourquoi s'embeter avec le GPU pour ça alors que toutes les infos sont à portée de main du CPU pour beaucoup moins cher (si on sait s'y prendre) ?!?! O_o
PS : toi aussi t'es du "metier" ?! ;-)
Pour l'écriture du RSX en RAM principale je me souvenais bien que ça avait été indiqué quelque part :
j'suis à la masse de pas avoir retrouvé ça plus tôt : c'est moi qui avais écrit la news
Donc le RSX peut écrire en RAM principale (à 10.6Go/s mesuré deux fois moins que dans la VRAM) mais effectivement ça ne dit pas qu'il peut faire le rendu en RAM directement, ça pourrait être mesuré lors d'une copie de données de la VRAM à la RAM.
Juste une question concernant ces "Megatextures".
Comme je l'ai compris, elles permettent de définir "une partie" des décors, une zone. Mais que se passe t'il lorsque l'on doit afficher une autre zone ? une nouvelle Megatexture est adressée je suppose, mais si l'on souhaite avoir une grande distance d'affichage le moteur ne risque t'il pas de saturer bcp plus rapidement qu'avec un moteur "plus classique" ???
J'imagine un rendu type Oblivion et je me demande comment se type d'algo pourrait supporter cela....
PS : Tres bon site que je re découvre avec grand intérêt avec des articles comme ceux là
chacun son tour, désolé.....
cough cough. Non mais serieux carmack en ce moment il est serieusement overrated.. on fait mieux dans notre boite que sa merde de megatextures... on devrait lui vendre notre tech..
"Après plusieurs années de silence, id Software sort de son mutisme et se relance dans la bataille des moteurs 3D en venant s’attaquer sérieusement à l’Unreal Engine 3"cough cough. Non mais serieux carmack en ce moment il est serieusement overrated.. on fait mieux dans notre boite que sa merde de megatextures... on devrait lui vendre notre tech..
c'est vrai que les megatextures c'est pas forcément l'idéal, surtout que niveau qualité des filtrages on y perds pas mal, en tout cas c'est moins propre que des textures classiques + aniso...