Nofrag | Forums | Blogs (jeux)

Reverse engineering (du moins un peu) de Street Fighter IV

J’ai vu hier soir sur la Tribune qu’un bench de SFIV était sorti. C’est la bonne occaze pour regarder comment Capcom a goupiller ce titre.
La 1ere chose qui m’a marqué est que durant ce bench, un seul CPU est utilisé. Chose étonnante puisque MT, le moteur 3D de capcom utilisé dans LostPlanet, Dead Rising,…a été architecturé pour tirer parti du multicore. 2eme chose étonnante, ma config à base de Core2Duo P8600 & GForce 9650M fait tourner le bouzin a 20FPS en 1680×1050 avec rien à fond (ni AA ni rien). C’est la misère.

Et en regardant ce qui se passe dedans, je comprends mieux pourquoi. J’utilise Microsoft PIX pour tracer les appels de rendu DirectX sur certains frames.

La chose qui me choque en 1er lieu est la quantité d’appels vers DX. Pour un frame plutôt simple (gros plan sur Ryu en train de parler), on atteint 10000 appels. Un appel peut changer le mode de blending, dessiner un lot de triangle ou spécifier une constante de shader. C’est énorme. A titre d’exemple (qui vaut ce qu’il vaut), une scène complète dans mon jeu avec post process et ménu ne dépasse pas les 2000appels.

Lié à ca: le nombre de drawcalls. Il y en a plein. plein plein plein. Quelques 100aines de triangles a chaque fois. Mais pour quelques triangles, il y a appels DX pour les constantes de shaders, blending…le cout CPU pour la rasterisation d’un triangle est énorme. Le meilleur moyen pour avoir de bonnes performances sur PC est le batching (regrouper des mesh, merger des vertex arrays). Je ferais d’ailleurs un article sur ca bientôt.
Lié à ca, chaque appel de rasterisation demande à dessiner des triangles strips. Sur PC, ca a peu d’intérêt. L’économie de GPU sont pas suffisament importantes. Pour transposer dans le monde réseau, c’est comme si on envoyait un gros fichier texte par paquet IP de 10 octets mais que chaque packet soit compréssé.
Pourquoi avoir fait ca? Tout simplement parce que sur console, la couche entre le jeu et le GPU est très fin. Sur PS2, on envoyait beaucoup de requêtes DMA pour faire des rendus. A tel point qu’un port brut d’un jeu PS2 sur PC ramait grave même sur un PC récent.
Sur ce jeu, 70-80% du temps CPU doit être perdu dans le driver.

Sur le screen suivant, on voit plusieurs choses:

- les triangles de dégénérescence dus au stripping (pour avoir un mesh correct avec du stripping, on doit rajouter des triangles)
- le nombre assez impressionnant de valeurs a interpoler entre les vertex et les pixels shader. Juste pour un mesh de décor. En avoir trop peut faire ramer le GPU puisqu’il doit interpoler pour chaque pixel.
- pas visible mais je le dis quand même, les normals maps sont encodées dans le GPU en DXT5.

Shot suivant:

Ils font un rendu dans une texture de petite taille (320×240). Je ne sais pas a quoi elle sert. Peut-être pour de l’occlusion, déterminer les vitesses par pixel pour du blur directionnel…. Je dirais quand même que c’est un rendu de normal dans l’espace de vue pour du post process/lighting.
Une chose est sure. Pour chaque appel de rasterisation, il y a des dizaines d’appels DX. Rendement nul à chier.
Chez Epic Games, ils ont un rendu software utilisé pour les occlusions et 2/3 petites choses comme ca. Ca prends peu de temps CPU comparé a tout ce qui est perdu dans le driver.

Pour les grapheux:

Il est moins sexy le père Ryu vu comme ca hein?
512×512. Bon. Les nanas ont au moins 2 textures aussi (tête + corps) dont certaines en 1024×1024.
Dans les textures de menu, il est inscrit la resolution de celle-ci. Ca m’a fait marrer.

En conclusion, que dir de ce jeu? Ben qu’ils ne se sont pas fait chier pour le portage. Avec une passe sur leur renderer, tu doubles (voire plus), les perfs de rendu. J’ai pas regardé leurs shaders mais en ademettant qu’ils soient très gros, au pire, tu limites l’utilisation du CPU.

24 commentaires pour “Reverse engineering (du moins un peu) de Street Fighter IV”

  1. BTK dit :

    Ah ben, je comprend pourquoi je trouvais certaines norma maps très pixelisée, si elles tournent autour de ces résos là c’est pas étonnant. Du niveau de doom3, preuve que des bons shaders ça te fait un jeu (visuellement j’entends)

    Sinon méfie toi de pas avoir des prbs avec l’eula…

  2. Holi dit :

    quand on disait qu’ils sont en retard sur le nextgen je me doutais pas que c’était à ce point là :/

  3. skaven dit :

    @Holi
    C’est pas le même moteur que RE5/Lost planet/…

  4. Wiz dit :

    Je me suis jamais penché sur le dév 3d console, et grouper les données ça me parait évident.
    Ça a un intérêt sur console de faire comme ça ou c’est juste par flemme et parce que la console le permet ?

  5. thierry_l'ummite dit :

    Hé ben merde, t’as l’air calé … interessant en tout cas

  6. skaven dit :

    @Wiz
    Sur console, ta jamais beaucoup de cache (cher a fondre). Alors tu traites des lots de datas plus petites. Avec peu de latence (architecture unifiée CPU/GPU). Tu traites les datas au rythme ou elles arrivent. Sur PC, tu as plein de couches a traverser.
    Le PC est un super tanker. La console est un hors-bord.

    @thierry_l’ummite
    Merci :)

  7. GrOCam dit :

    Si tu pouvais faire pareil pour flight simulator X

    Je tourne a 15-20 fps dessus, et ca parait presque normal pour ceux qui ont des gros CPU type i7.
    Alors que tous les autres jeux c’est 30 de plus.

    Optimisé a la pisse ou simu exigeante?

  8. BTK dit :

    Tout le monde sait que c’est parce que c’est des CONSOL’GAEMS !

  9. SrL dit :

    BTK a dit :

    Tout le monde sait que c’est parce que c’est des CONSOL’GAEMS !

    Un peu comme assassin creed :x

  10. kraal dit :

    Et si tu lis l’article et le com de skaven, tu comprends pourquoi, au lieu d’avoir une idée préconçue@lol, c’est pas beau ça ?

  11. SPTX dit :

    est ce que ça veut dire que SFIV tournera pas sur mon PC?

  12. Seita dit :

    Erf ça aurait été marrant que tout cela tourne à la compète de “kikitoudur kialaplusgrosse” à coup de bench.

    Sinon ç’est fort zolie et ça tourne pas mal je trouve, malheureusement je sais que ça va pas me plaire, SC Powaaaaa !

  13. baby dit :

    ils avaient pas dit que toutes les versions, que ca soit console ou PC, seraient les meme ?

  14. Holi dit :

    non rien, 3h c’est un peu juste pour une nuit

  15. ShootingStar dit :

    J’ai testé le bench à 1650×1080 et ça tourne bien. Je trouve le jeu beau pour ma part. J’ai hâte de later des vieilles merdes online !

  16. CameleonTH dit :

    Très intéressant cette petite analyse, rien de telle pour mieux comprendre les rouages sur PC et sur console. :)

  17. MaKsweL dit :

    bon le portage a l’air nickel au niveau perf (merci pour ton post au passage, même si j’ai pas compris la moitié) … reste à voir au niveau réseaux ! Si tout est réuni ça risque de faire une jolie communauté autour du jeu.

  18. KouKaracHa dit :

    Sympa l’article.
    Pour mon vieux PC, P4@2.6Ghz inside
    1280*960 TAF AA2x average 37fps avec jamais une chute en dessous de 30 fps il me dit que mon PC est trop lent, j’ai vraiment besoin d’avoir 80fps pour jouer à un jeu de baston ?

  19. SPTX dit :

    Ok j’ai DL le bench et je suis fluide TAF, donc content, par contre il suporte mal le recording avec fraps, le jeu descend à 30fps, ce qui est sencé être fluide ; il l’est mais tourne au ralenti, assez étrange.

    Autrement j’ai l’impression que le jeu bloque à 60fps.

  20. BTK dit :

    Ok j’ai DL le bench et je suis fluide TAF, donc content, par contre il suporte mal le recording avec fraps, le jeu descend à 30fps, ce qui est sencé être fluide ; il l’est mais tourne au ralenti, assez étrange.

    Autrement j’ai l’impression que le jeu bloque à 60fps.

    Normal. V-synch activée: 60 fps en général, et sans vsynch: synchro sur la vitesse du proc: jeu en accéléré.
    A l’inverse si tu utilises fraps: jeu ralenti car cycles processeurs utilisés ailleurs.

  21. HeLLoWorld dit :

    Intéressants l’article, et le blog.
    Sinon, je suis lourd, mais, “a goupiller”, c’est moche. :)

  22. skaven dit :

    @HeLLoWorld
    Merci.
    Tu dis ca parce que tu n’étais pas encore né au début des années 80.

  23. HeLLoWorld dit :

    Je suis né en 81 :)
    Sinon, les coms ne sont pas un forum, mais je suis à Rennes, j’ignorais qu’il y avait des boites qui faisaient de la 3D temps réel? J’ai pas d’XP malheureusement, mais ça m’intéresse…

  24. HeLLoWorld dit :

    Ah mais il est pas sorti le jeu encore!

Laisser un commentaire

Si vous avez un compte sur WeFrag, connectez-vous pour publier un commentaire.

XHTML: Vous pouvez utiliser ces tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img src="" alt="">