IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Projets Discussion :

LMP3D une nouvelle librairie ! (PS2/DC)


Sujet :

Projets

  1. #1
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 136
    Points
    10 136
    Par défaut LMP3D une nouvelle librairie ! (PS2/DC)
    Ouais je n'ouvre pas de post pour un nouveau jeu (mais ça viendra ^^).

    J'ai donc décidé de me lancer dans une lib 3D multi-plateforme (dans le sens ou elle visera autre chose que du PC) , comme vous le savez j'aime bien les consoles rétro mais recoder pour chaque machine c'est moyen.
    Certe pour les consoles 8/16 bits on peut utilisait du C mais je trouve que cela est plus compliqué a faire du multi-plateforme surtout si on veut exploiter ces machines (ce qui est mon cas ).

    Bref donc c'est une lib qui vise ces machines :
    -PC (Windows/Linux/MAC OS).
    -PlayStation 2
    -Dreamcast
    -PSP

    Si dans le futur j'ai beaucoup de temps :
    -WII
    -GAMECUBE
    -XBOX

    Et si j'ai encore plus de temps :
    -PlayStation 1
    -N64
    (Non pas la Saturn ).

    Pour la Version PC
    J'utilise la SDL 1.2 pour le fenêtrage et les évents , et OpenGL 1
    éventuellement mettre une option pour OpenGL 2 voir 3 , mais mon but n'est pas de pousser la version PC , le but de cette lib c'est pas de faire des jeux 3D Moderne

    Pour la Version Dreamcast
    La version Dreamcast j'avais utilisé un binding OpenGL (que faudra que je m'en passe pour exploiter la machine a 100%).

    Pour la Version PS2
    Actuellement je travaille sur la version PS2 , donc attendez vous a un gros pavé

    Avant de vous parlé Voila quelque truc a savoir :
    La PS2 a un processeur principal le EE (Emotion Engine)
    Et 2 co processeur mathématique le VU0 et VU1 qui possède respectivement 4 et 16ko.
    Et son GPU le GS (Graphic Synthesizer ).

    Niveau info intéressante sur PS2 , ben deja la GS utilise des nombres a firgule fixe ! je trouve ça marrant , enfin ça réduit les transferts la PS2 est une console 64/128 bits sur 64 bits en envoie les coordonnées pour X,Y,Z. (ici Z dans le sens Z Buffer) , 16 bits pour X , 16 bits pour Y et 32 bits pour Z.
    L'affichage de la PS2 se fait sur un "écran virtuelle" (je sais pas comment appeler ce truc) sur 4096x4096 , du coup si on veut avoir des nombres négatif , le mieux c'est d'afficher dans son centre donc 2048 x)
    La PS2 possède 4Mo de VRAM mais cette VRAM prend en compte le Frame Buffer et le Z buffer , et donc ça réduit énormément le nombre de texture mais !
    Si on met le Zbuffer en 16 bits.
    Le Frame Buffer en 16 bits (mais ça réduit le nombre de couleur).
    Le Frame buffer peut être en 640x240 (qui peut être en mode 640x480 en agrandissant par deux la hauteur de l'écran).

    De plus si on utilisent des textures en mode palette de couleur (oui c'est la seul console qui peut le faire de cette génération) , d'ailleurs les jeux squaresoft utilisait cette compression , vu que leur textures faisait moins de 256 couleurs !

    Donc du 640x256 (c'est le mode NTSC) ça prend 1Mo en mode 16 bits le FB et 1,6 Mo le mode 32 bits.
    Une texture peut prendre donc 64ko , donc pour 2Mo on peut avoir 32 texture de 256x256.
    On peut faire des transferts dma RAM/VRAM, la PS2 possède des transferts très rapide et je pense qu'on peut rajouter 4-8 textures en plus sans que les perf soit très altérer.

    Alors comme vous le savez c'est une console extrêmement compliqué et qui même si elle est la console la plus vendu de l'histoire ben la scène hombrew est quasi inexistante.
    Il existe un binding OpenGL fait par des amateurs , je l'ai jamais utilisé mais en regardant son code , il n’afficherait pas plus de 15-20k poly par frame , soit moins 1 millions de poly par seconde
    Et le PS2 SDK lui probablement moins de 10k poly par frame si on l'utilise comme tel.

    Pour expliquer la prog PS2 , si on fait un affichage 3D en Macro code avec le VU0 (en gros un truc pas en parallèle qui s’exécute sur le EE principal), on affiche 9000 poly.
    On peut augmenter a 13000 poly si on fait un Double Buffer !
    Oui on peut faire un double buffer sur les transferts DMA vu qu'ils sont en parallèle (bref non bloquant) on peut faire le calcul suivant en attendant
    Par exemple sur les vielles machines comme la SNES ou la Mega Drive le DMA est bloquant et donc en attend que le DMA finisse son transfert pour reprendre le main.
    J'avais augmenter les perf a 14500 poly en réduisant les transferts DMA.

    A vrai dire mon premier test sur PS2 j'avais remarqué un truc , deja que j’affichais que 25k poly (via VU1) et que le temps de calcul était assez bas.
    La réponse j'ai eu du mal a la trouver le premier est que mon temps de calcul assez bas est sûrement du a la lecture des entrées qui est sûrement un peu longue.
    Le second avec beaucoup de test j'ai remarqué que mes temps de calcul était réparti comme ceci :
    -7% DMA
    -75% le VU1
    -18% GS

    Donc j'ai du retravailler la programmation du VU1,enfaîte c'est un processeur qui ne fait que 1 cycle instruction sous certaine condition , sinon le VU va attendre que l’instruction finisse avant de passer a la suivante (qui dure a peu prés 4 cycle par instruction).

    Et cela devient très compliqué a optimiser croyait moi , parce que ça demande de faire un code comment dire dégueulasse il faut pas organiser forcément son code de façon 'logique' en gros faut faire tjs faire des calculs , par exemple calculer le vertex suivant ou récupérer la valeur du vertex en même temps (oui c'est un processeur Superscalaire et VLIW) ,ah oui le VU1 c'est en asm que ça se code , un assembleur 128 bits et assez difficile a coder, et c'est lui qui fait tout les calculs 3D (et faire de l'asm en 3D sur un processeur aussi compliqué que le VU1 c'est sportif ! ).
    D'un coté ça explique pourquoi la PS2 a mis du temps pour être exploiter (et que en amateur elle ne l'a jamais était exploiter !).

    En gros voila ma version du VU1 que j'avais mis (j'ai mis plusieurs semaine quand même pour comprendre tout ce que je faisais ).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
     		.syntax new
    		.name vu1Triangle		
    		.vu
    		.init_vf_all
    		.init_vi_all
     
    		--enter
    		--endenter
     
     
    		;vf01 matrix
    		;vf02 matrix
    		;vf03 matrix
    		;vf04 matrix
    		;vf05 tmp
    		;vf06 tmp
    		;vf07 arg1
    		;vf11 max
     
    		;vi01 count adress
    		;vi04 n vertices
    		;vi05 max
    		;vi10 z control
     
    		lq		vf01, 0(vi00)
    		lq		vf02, 1(vi00)
    		lq		vf03, 2(vi00)
    		lq		vf04, 3(vi00)
     
    		lq		vf07, 4(vi00)
    		mtir		vi04,vf07[w]
     
    		iaddiu		vi01, vi00, 6
     
     
     
     
    vertexLoop:
     
     
    		;vertex 1
     
    		lq		vf08, (vi01)
    		lq		vf06, 2(vi01)
     
    		mul		acc, vf01, vf06[x]
    		madd		acc, vf02, vf06[y]
    		madd		acc, vf03, vf06[z]
    		madd		vf05, vf04, vf06[w]
     
    		div		q, vf00[w], vf05[w]
    		mul.xyz		vf06, vf05, q
     
     
    		ftoi4		vf06, vf06
     
     
     
    		div		q, vf08[w], vf05[w]
    		mul.xyzw	vf08, vf08, q
     
    		sqi		vf08, (vi01++)
    		sqi		vf06, (vi01++)
    		sqi		vf06, (vi01++)
     
    		;vertex 2
     
    		lq		vf08, (vi01)
    		lq		vf06, 2(vi01)
     
    		mul		acc, vf01, vf06[x]
    		madd		acc, vf02, vf06[y]
    		madd		acc, vf03, vf06[z]
    		madd		vf05, vf04, vf06[w]
     
    		div		q, vf00[w], vf05[w]
    		mul.xyz		vf06, vf05, q
     
     
    		ftoi4		vf06, vf06
     
    		div		q, vf08[w], vf05[w]
    		mul.xyzw	vf08, vf08, q
     
    		sqi		vf08, (vi01++)
    		sqi		vf06, (vi01++)
    		sqi		vf06, (vi01++)
     
    		;vertex 3
     
    		lq		vf08, (vi01)
    		lq		vf06, 2(vi01)
     
    		mul		acc, vf01, vf06[x]
    		madd		acc, vf02, vf06[y]
    		madd		acc, vf03, vf06[z]
    		madd		vf05, vf04, vf06[w]
     
    		div		q, vf00[w], vf05[w]
    		mul.xyz		vf06, vf05, q
     
     
    		ftoi4		vf06, vf06
     
     
     
    		div		q, vf08[w], vf05[w]
    		mul.xyzw	vf08, vf08, q
     
    		sqi		vf08, (vi01++)
    		sqi		vf06, (vi01++)
    		sqi		vf06, (vi01++)
     
     
    		iaddi		vi04, vi04, -3
    		ibne		vi04, vi00, vertexLoop
     
    		iaddiu		vi01, vi00, 5
    		xgkick		vi01
     
     
     
    		--exit
    		--endexit
    Et la certain diront , c'est quand même du code compréhensible , c'est vrai ça reste encore lisible :p

    Voila mon premier set qui optimise le VU1 en prenant compte des spécificités du processeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
                        .global vu1Triangle_CodeStart
                        .global vu1Triangle_CodeEnd
    vu1Triangle_CodeStart:
                        .p2align 8
                        .vu 
     
    		    nop                             lq VF05, 5(VI00)
    		    nop                             lq VF06, 4(VI00)
     
                        nop                             lq VF01, 0(VI00)
                        nop                             lq VF02, 1(VI00)
                        nop                             lq VF03, 2(VI00)
                        nop                             lq VF04, 3(VI00)
     
                        nop                             sq VF05, 511(VI00)
                        nop                             mtir VI04, VF06w
     
                        nop                             iaddiu VI01, VI00, 6
                        nop                             iaddiu VI02, VI00, 512
     
    vertexLoop:
                        nop                             lqi VF08, (VI01++)  ; vt1
    		    nop                             lq  VF09, 0(VI01)   ; v1A
    		    nop				    lq  VF10, 0(VI01)   ; v1B
    	            nop				    lq  VF11, 0(VI01)   ; v1C
    		    nop				    lqi VF12, (VI01++)  ; v1D
     
                        mulax ACC, VF01, VF09x          lqi VF13, (VI01++)  ; vt2
                        madday ACC, VF02, VF10y         lq  VF14, 0(VI01)   ; v2A
                        maddaz ACC, VF03, VF11z         lq  VF15, 0(VI01)   ; v2B
                        maddw VF05, VF04, VF12w         lq  VF16, 0(VI01)   ; v2C
    		    ;3cycle 
    		    nop                             div q, VF00w, VF05w 
     
     
    		    mulax ACC, VF01, VF14x          lqi VF17, (VI01++)  ; v2D
                        madday ACC, VF02, VF15y         lqi VF18, (VI01++)  ; vt3
                        maddaz ACC, VF03, VF16z         lq  VF19, 0(VI01)   ; v3A
                        maddw VF06, VF04, VF17w         lq  VF20, 0(VI01)   ; v3B
    		    nop				    lq  VF21, 0(VI01)   ; v3C
    		    nop				    lqi VF22, (VI01++)  ; v3D
     
                        mulq.xyz VF31, VF05, q          nop
     
    		    nop                             div q, VF00w, VF06w
     
    		    nop                             sqi VF08, (VI02++); st vt1
    		    mulax ACC, VF01, VF19x          nop
    		    ftoi4.xyz VF30, VF31            nop
                        madday ACC, VF02, VF20y         nop
                        maddaz ACC, VF03, VF21z         nop
                        maddw VF07, VF04, VF22w         sqi VF08, (VI02++); st color1
     
    		    mulq.xyz VF28, VF06, q          nop
    		    nop				    sqi VF30, (VI02++)  ; st v1
    		    ;1 cycle
    		    nop                             div q, VF00w, VF07w
     
    		    nop                             sqi VF13, (VI02++) ; st vt2
    		    nop                             sqi VF08, (VI02++) ; st color2
    	            ftoi4.xyz VF27, VF28            nop
    		    ;3cycle
    		    mulq.xyz VF26, VF07, q          waitq
     
     
    		    nop                             sqi VF27, (VI02++) ; st v2
    		    nop                             sqi VF18, (VI02++) ; st vt3
    		    nop                             sqi VF08, (VI02++) ; st color 3
    		    ftoi4.xyz VF25, VF26            nop
    		    nop                             iaddi VI04, VI04, -3
    		    ;2 cycle
    		    nop                             sqi VF25, (VI02++) ; st v3
     
     
     
     
     
     
                        nop                             ibne VI04, VI00, vertexLoop
                        nop                             nop
     
                        nop                             iaddiu VI01, VI00, 511
                        nop                             xgkick VI01
                        nop                             nop
                        nop                             b eclip
                        nop                             nop
    clip3:
    clip2:
    clip1:
    eclip:
                        nop[E]                          nop
                        nop                             nop
    vu1Triangle_CodeEnd:
    Et ce code m'a permis de monter a 37k poly , j’étais content XD
    Vous remarquerez que j'ai mis en commentaire le nombre de cycle (ce sont le nombre de cycle ou le VU attend) , rigolo de compter les cycles x)
    Ensuite j'ai optimiser a droite a gauche 41 puis 45k et la blocage :3

    Vous vous souvenez j'ai dit que le GS prenait a peu près 20% , on peut le faire en parallèle et j'ai gagnait donc les 20% , et je suis montait a 64k poly, ensuite j'ai réduit encore l'utilisation du VU1 en optimisant le code , et je suis monté a 69k poly.
    La première fois que j'ai fait cela (a 64k poly) ça marchait bien mais quand j'ai encore optimiser a 69k poly , ça marchait bien sur l'ému mais pas sur la PS2 réel ou j'avais de gros bug d'affichage , j'ai remarquer en faite que le souci venait du transfert vers le GS (que pendant le transfert je l'écrivait en court de route ), et maintenant dans le code du VU1 je met un double buffer x)

    Voila le résultat sur une PS2 :
    Mes 69k poly : https://img15.hostingpics.net/pics/7...0126055420.jpg
    L'affichage d'un model ici Zack de FF7 : https://img15.hostingpics.net/pics/5...0126055508.jpg
    Nom : sc.jpg
Affichages : 830
Taille : 25,6 Ko

    On faisant des petites optimisation j'ai pu monter encore a 70k poly.
    Si je change pas de technique je peux peut être optimiser encore le VU1 pour monter a 76-77k poly d’après mes calculs théoriques (si vous me dites pas pourquoi je ne le fais pas , parce que ça me prend des heures pour optimiser le VU1 ).
    Et même pas sur que j'y arrive , la dernière optimisation est complexe.
    Après y'a sûrement des spécificités du VU qu je connais pas encore et qu'on peut monter encore monter plus m'enfin bref.

    Mais actuellement je me concentre pas sur l'optimisation du VU1 mais sur un truc que j'ai lu d'assez intéressant c'est les transferts DMA peuvent se faire en parallèle a l’exécution du VU1 , dans mon cas peut être monter le nombre de poly a 85k poly (pas encore réussi du coup).
    Ce qu'il faut savoir c'est qu'on peut utiliser le VU0 en parallèle qui je pense peut permettre encore d’augmenter les perf de 20-30%.
    L'autre technique difficile a mettre en place c'est les index donc la je parle d'une augmentation facile de 100% de poly en plus , je ne détaillerai pas la difficulté de cette technique dans mon cas (non faire un for avec un tableau a la con ça augmente que dalle ).

    Niveau code donc je code en C et en assembleur , tout le code relatif a l'affichage je le fait moi même en tapant directement sur les I/O (la plupart des amateur utilise le PS2 SDK mais mon but et d'avoir un contrôle sur les graphisme a 100%).



    Voila je pense que j'ai fait globalement le tour ,pour la question des collisions 3D et de l'animation par squelette je l'avais deja codait sur un moteur fait maison , quand l'optimisation de l'affichage de la PS2 sera fait je pense les intégrer , et ensuite je passerait sur l'affichage bas niveau Dreamcast

    Pour ma lib si vous voulez savoir a quoi elle ressemble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     
    void game()
    {
        LMP3D_Event event;
     
        LMP3D_Camera camera;
        camera = LMP3D_Camera_Init();
     
        LMP3D_Event_Init(&event);
     
        int touche[10],i;
     
        Vector3 angle;
        angle.x = 5.7;
        angle.y = 2.1;
        angle.z = 3.0;
     
     
        camera.position.x = 7;
        camera.position.y = 0;
        camera.position.z = 100;
     
     
        angle.x = 1.6;
        angle.y = 1.5;
        angle.z = 5.0;
     
     
        LMP3D_Model * model;
        model = LMP3D_Load_Model("DATA/zack/zack.bcm");
     
        while(event.exit == 0)
        {
     
            //evenement
    		LMP3D_Event_Update(&event);
     
     
    		for(i = 0;i < 10;i++)
                touche[i] = 0;
     
    		if(event.key['k'] == 2) touche[0] = 1;
            if(event.key['m'] == 2) touche[0] = 2;
     
            if(event.key['o'] == 2) touche[2] = 2;
            if(event.key['l'] == 2) touche[2] = 1;
     
     
     
            if(event.key['a'] == 2) touche[1] = 1;
            if(event.key['z'] == 2) touche[1] = 2;
     
            //camera
            LMP3D_Camera_Perspective(camera);
            LMP3D_Camera_vue_sub(&camera,&angle,0.1,touche);
     
     
            LMP3D_Camera_LookAt(camera);
            LMP3D_Model_Draw(model);
     
     
            LMP3D_Clear();
     
     
    		LMP3D_VBlank();
     
     
        }
     
     
    }
    Bien sur y'as encore des améliorations a faire
    D'ailleurs même si c'est une lib 3D mais je compte lui mettre des fonctions 2D software , avoir un affichage de 2,4 ou 8bpp (bits par pixel) peut être avantageux sur des vielles machine même sur PS2/DC !


    Je remercie DragonJoker qui m'a bien aidé pour mes questions sur la 3D (et son aide via le code vu que le projet était initialement en C++ pour ma lib).
    Et Yahiko pour sa fonction du sinus optimisé :p

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    Salut Kannagi!

    Alors pour commencer, j'ai rien pipé au code asm que tu as mis (mais je suis une tanche en asm).
    Tu présentes LMP3D, mais elle est dispo sous GitHub, ou un truc du genre ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 136
    Points
    10 136
    Par défaut
    Ouais j'avoue que le code asm n'est pas forcément compréhensible (surtout le deuxième).
    C'est aussi un des assembleurs le plus difficile que j'ai pu rencontrer perso , alors normal d'un coter que du comprenne pas grand chose , c'était plutôt pour donner une image a mes explications.
    Même si on connaît un peu l'asm a vue de nez on penserait que mon deuxieme code est plus long que le premier (ce qui n'est pas le cas ).

    Pour LMP3D non pas de GitHub pour le moment mais le code tu le connais en partie , c'est une version C de ce que tu avait fait

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 288
    Points
    218 288
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    Super projet. Pourquoi LMP3D ?
    Quel utilisateur utilisez-vous ? Il faut hacker sa PS2 pour faire tourner de l'homebrew ? Le processus de compilation est t-il compliqué ? (et quels outils utilisez-vous ?)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 136
    Points
    10 136
    Par défaut
    Ouaw j'ai deja une FAQ a faire xD

    Pourquoi LMP3D ?
    L'inspiration de fou , Librairie Multi-Plateforme 3D x)
    Mais peut être que LMP suffira en faite ^^'

    Quel utilisateur utilisez-vous ?
    Pas compris , utilisateur que je vise non ? Ben toute personne qui veulent faire des jeux rétro , mais deja je me vise moi ce qui est pas mal

    Il faut hacker sa PS2 pour faire tourner de l'homebrew ?
    Question complexe j'ai envie de dire oui et non.
    Il y a 3 méthodes pour exécuter son programme sur PS2 (si j’omets la technique en utilisant un puce ) :

    Utiliser le Swap Magic
    Alors en gros vous achetez le Swap Magic qui sert initialement a lire des jeux étranger ou des jeux gravé.
    Les dernières version peuvent lire le port USB , si vous lisez le port usb vous pouvez exécuter votre exécutable PS2 (formater en Fat32).


    Utiliser une memory card hacker
    C'est la méthode que j'utilise , qui peut exécuter des programmes qui sont sur la memory card , j'utilise un programme homebrew qui est UlaucherElf qui permet d’exécuter des programmes via port USB (ou n'importe quel autre port en faite).
    Ou OPL qui permet d’exécuter des ISO (sur clé USB)

    Creer un CD/DVD PS2 compatible
    Qui ne nécessite pas de hacker sa PS2 , mais faut avoir du matériel je m'explique.
    La PS2 lit des format elf (elle tourne pas sur Linux le format elf est un vieux format assez utilisez au final).
    La PS2 pour ces CD/DVD utilise la norme ISO donc la rien de nouveau.
    Le truc c'est qu'elle possède une protection , cette protection est qu'elle lit le CD ou DVD sur des secteurs qui n'est pas lu initialement par un lecteur CD/DVD classic et qui possède en gros un code qui défini le nom de l’exécutable du CD/DVD .
    Par exemple cette image :http://pristavki.com/wp-content/uplo...12/ps2_614.jpg
    En voit en bas (sur la tranche) SLUS 20228 , le nom de l’exécutable est donc SLUS_202.28

    Si ce secteur est vide ou pas reconnu , la PS2 considère que ce n'est pas un jeu PS2 (et donc ne le lira pas ).
    Pour ceux qui ont pas capté , ce secteur est vide si vous gravez un ISO via un graveur classic donc le but est de trouver un moyen d'écrire sur ce secteur.

    Le processus de compilation est t-il compliqué ? (et quels outils utilisez-vous ?)
    La compilation et la scène amateur ne s'est pas cassé la tête sur ce point la c'est un GCC modifié vu que Emotion Engine possède des instructions MIPS 'Stantard" mais possède quelque instruction en plus du VU en Macro Code par exemple.
    Pour l'IDE je change pas mes habitudes j'utilise Code:Block et PCSX2 comme émulateur.
    (éventuellement je peux rajouter ma PS2 slim, une clé USB et ma carte mémoire modifié ).

    Pour l'elf , la PS2 ne l'utilise que pour lire l’exécutable , en gros quand vous lancez un jeu elle copie le binaire de votre exécutable en RAM et ensuite l’exécute
    (la RAM se trouve a l'adresse 0X100000 et se termine a l’adresse 0x01FFFFFF qui est du coup l'adresse de la Pile ^^).

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 288
    Points
    218 288
    Billets dans le blog
    117
    Par défaut
    Je ne voulais pas dire utilisateur, mais soit compilateur, soit éditeur. En tout cas, vous avez répondu à la question.
    Du coup, si je me rappelle bien de ma première lecture, vous n'utilisez aucun SDK (aucun officiel, ni non officiel). C'est ça ?
    Ca s'apprend où l'assembleur pour l'EE ? J'ai entendu qu'il y avait une doc très importante qui avait leaké. Il existe d'autre (du moins, un autre) émulateur PS2 (possiblement pas complet). L'avez vous testé ? Car de ce dont je me rappelle PSCX2, cest pas ce qu'il y a de plus parfait (même s'il y a une amélioration ces derniers temps).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 136
    Points
    10 136
    Par défaut
    Je trouve les questions intéressantes vu que cela permet d'expliquer quelque détails en plus

    Pour le SDK il offre plusieurs fonction d'affichage du dma etc etc , je n'utilise rien de tout cela.
    Mais je ne peux pas m'en passer complètement , ils offres 3 choses que j'utilise , la lib pad , la lib C et la lib kernel. , même si au long terme je pense refaire la lib pad , j'ai remarqué que sur la machine réel a chaque touche appuyé ben ça bouffait a mon goût un peu trop de perf , c'est un peu gênant (mais pour les test ou un petit jeux cela suffit).

    Pour l'assembleur du EE , le CPU principal c'est du MIPS donc ben ça s'apprend un peu partout :p
    La doc officiel néanmoins explique plus en détails le MIPS sur PS2 , mais pour ma part je n'ai pas fait beaucoup d'asm sur le CPU principal , GCC optimise plutôt bien de je que j'ai pu voir (oui j'ai regardé le code assembleur tout de même).
    Et on peut faire du bas niveau en C (et la lib kernel offre en appelant des syscalls en asm des fonction propres a la PS2)

    Pour la VU0 et VU1 qui sont quasi similaire (le VU1 possède 3 instruction en plus ) .
    Ben je suis obligé de passé par la doc officiel mais c'est un assembleur proche du MIPS niveau mnémonique,par contre je n'ai trouvé aucune doc complète non officiel expliquant le VU0/VU1.
    La doc officiel explique toute les instructions , leur opcodes , et l'optimisation qu'il faut faire (et les truc a éviter) , la première fois je n'avais pas forcément fait attention (et puis c'est pas facile a comprendre a la première lecture de quoi ça parle XD ).

    Pour l'émulateur PCSX2 oui je suis au courant qu'il n'est pas du tout fiable u_u.
    1) sur le temps de cycle , sur PCSX2 j'avais bien 300 Millions instruction par seconde et avec mon code du VU1 non optimisé il m'affichait 230 000 poly...
    Quand j'ai testé sur la PS2 j'ai déchanté , j'avais l'impression que j’étais sur 30 Millions instruction par seconde avec 20-25k poly.
    Au début j'ai pas compris , parce que je trouvais ça anormal que la PS2 avait une telle puissance , mais après avoir posé plein de question et cherché partout j'ai trouvé mes réponses.
    Dans la scène PS2 homebrew personne ne savait me répondre (a croire qu'il ont jamais fait de test de perf XD ).
    La réponse est que la lecture de certain registre sont très long , la seconde comme vous le savez le VU1 ben faut l'optimisez sinon il est assez long si on code de manière 'brut'.

    2) Les Mode Vidéo
    La première chose que j'ai codé c'était ça , et ça m'a pas mal démotivé , en gros c'est le réglage du PAL/NTSC/VEGA avec la résolution , sur PCSX2 bon le résultat diffère beaucoup dans le sens ou sur la machine réel ben ça fait des bugs visuel ou que ça plante la console x)
    Du coup sur ma lib je pense juste proposer des modes d'affichages (genre PAL/NTSC , 640x480,640x240 ou 320x240 ) vu que sur PS2 je galère beaucoup trop sur cette partie.
    Et que sur l'ému j'ai l’impression qu'il n'émule pas complètement les mode vidéo et de manière très mauvaise quand il le fait (je pense qu'ils ont codé correctement que les mode PAL/NTSC correctement avec leur résolution standard) .

    3)Et plein d'autre détails qui est le timing ! ben oui je fait au final beaucoup de calcul parallèle et PCSX2 n'en prend absolument pas compte pour lui tout est instantané !

    Donc quel est le nom de cet émulateur ? si c'est pour faire des test peut être qu'il sera suffisant.

    Sinon je rajouterai ma nouvelle avancé qui m'a fait perdre beaucoup de neurone , je suis monté a .... 115k poly XD
    Ouais de 70k a 115 fallait le fait ^^
    L'exploit et que 1) j'ai pu réduire les transferts DMA en mettant des nombres a virgule fixe , j'ai galérer pour cette partie , outre les bugs , il a fallut que je recode le VU1 pour décompresser avec un coût nul.
    L'autre après de nombreux bug visuel sur machine réel , j'ai pu enfin envoyer le transfert DMA en parallèle a l'exécution du coup ça me fait un transfert DMA gratos a chaque envoie :p

    Du coup sur Gamasutra j'avais lu un article intéressant (Google translate donne un résultat correct donc je met la version traduite ) :
    9. La vitesse concerne tout le bus.
    Cela a été dit plusieurs fois auparavant, mais cela revient à répéter. Les limites de vitesse théoriques de la GS sont pratiquement réalisables, mais seulement en accordant une attention particulière à la vitesse du bus. Le GS peut lancer un triangle de chaque horloge (à l'aide de tri-strips) à 150MHz. Cela nous donne une limite supérieure théorique de:

    150 millions de verts par seconde = 2,5 millions de vert / cadre à 60 Hz

    Étant donné que chacun de ces polygones sera aplati, le résultat n'est pas très intéressant. Nous devrons tenir compte d'une transformation, d'un écrêtage et d'un éclairage en perspective, effectués sur les VU, qui fonctionnent à 300 MHz. La FAQ de PS2 indique que ces opérations peuvent prendre de 15 à 20 cycles par sommet généralement, ce qui nous donne un débit de:

    5 millions de verts / 20 cycles par sommet
    = 250 000 vert par image
    = 15 millions de verts par seconde
    5 millions de verts / 15 cycles par sommet
    = 333 000 vert par cadre
    = 20 millions de verts par seconde

    Notez la différence ici. Juste en supprimant cinq cycles par sommet, nous obtenons une augmentation énorme de la production. C'est la raison pour laquelle nous avons besoin de différents renderers pour chaque situation - chaque représentant peut se déshabiller de précieux cycles par sommet en effectuant uniquement le travail nécessaire.

    C'est aussi la raison pour laquelle nous avons deux VU - souvent VU1 est souvent décrit comme "rendu" VU et VU0 comme le "tout le reste" du rendu, mais ce n'est pas nécessairement le cas. GIF, ce qui explique la mémoire FIFO que vous pouvez configurer: une VU alimente le GS tandis que l'autre remplit le FIFO. Cela explique également pourquoi nous avons deux contextes de rendu dans le GS, un pour chacun des deux flux d'entrée.
    En gros le GS peut fournir 833333 triangle par frame :p
    Mais bon c'est un calcul théorique , et comme l'explique ce bout d'article il faut faire des calcul 3D de la perspective , mais si vous faite un jeu 2D vous avez facilement ces 833 333 sprites
    (Oui la PS2 permet d’avoir comme forme géométrique des Sprites qui prend donc que 2 vertex au lieu de 4 ).

    Mais l'autre calcul est plus intéressant si on a 20 cycle par vertex on a 250k vert soit 83333 triangle , 15 cycle par vertex 111 000 triangles , et donc j'ai atteint un peu la limite du VU1
    Si vous vous posez la question mais pourquoi 69k poly alors que j'avais optimiser deja le VU1 quasi au max.
    Ben avant le transfert DMA a un coût , maintenant que je l'ai mis en parallèle avec le VU1 ben comme dit précédemment ben son coût est gratuit , et comme le premier envoie est maintenant énormément réduit (grâce au virgule fixe).
    ben on a le résultat actuelle

    Mais on peut encore augmenter , deja avec le VU0 qui n'est pas utilisé , il n'est pas aussi performant que le VU1 , donc ça ne sera pas multiplié par deux XD
    Mais si on gratte 30% ça serait deja bien (on irait donc a 150K poly probablement).
    Comme je l'ai dit les index qui évite les calculs des vertex et qui augmente le nombre de poly mais le VU1 n'a que 16ko donc que je recode le VU1 et que j'envoie des packets qui ont les même vertex.

    PS: désolé pour ces longs pavés , mais bon y'a tellement de choses a dire

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 288
    Points
    218 288
    Billets dans le blog
    117
    Par défaut
    Ouf, je l'ai retrouvé : http://purei.org/
    Par contre, jamais testé.

    Sinon, votre pavé était super cool à lire. Pour le moment, pas de nouvelles questions .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Futur Membre du Club Avatar de Medal_
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 8
    Points
    8
    Par défaut
    Wouah! Tu vas me faire regretter d'avoir donné ma PS2 moddé

    J'admire tout le travail d'optimisation derrière
    Ça serait intéressant que tu mettes les liens vers les logiciels/sources utilisées pour compiler. J'aimerais bien tester ... même si c'est toujours en phase "Lumpy3D"

    Est-ce que ton but est de simuler la PS2 pour une compilation vers PC? Ou bien est-il mieux d'utiliser un émulateur existant?

  10. #10
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 136
    Points
    10 136
    Par défaut
    La PS2 ben coûte pas trop chère , ensuite pour la cracker il faut voir sur les forum ou un ami qui possède une carde mémoire hacker , pour ma part c'est je que je fait , je file des cartes mémoire hacker a mes amis :p

    Bref pour ta question j'ai pas trop compris mais La version PC sera similaire a la version PS2 ou Dreamcast
    Si tu veux utiliser compiler pour PS2 il ta faut : https://github.com/ps2dev/ps2toolchain

    Pour Lumpy3D ben faudra attendre demain pour que je fini un peu mon code en faite

  11. #11
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut kannagi sort de l'assemblage de sa coquille.
    J'ai pas eu la force de tout lire,

    mais quand tu disait que tu avait de l'ambition j'y voit de la détermination.

    N'oublie pas mes critiques concernant tes précédentes créations car même si elles ne sont pas toute bonne ça te fait avancer.

    Le plus important pour une library pour moi est la documentation.

    Je peut te conseiller sphinx,

    car doxygen bug quand tu veut faire une recherche et y a pas d'index,

    et Gtk-doc est pour Gtk: dommage cette limitation mais c'est la meilleur doc que je connaisse.

    Continue ne te laisse pas abattre par les critiqueurs malsains quand tu présentera ton projet et parle en le plus possible.

    Ton amis, Luke Spywoker.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  12. #12
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 136
    Points
    10 136
    Par défaut
    Merci pour ton message !
    Et j'adore bien évidemment le titre de ton post (ceux qui comprenne la référence comprendront ).

    Je note pour sphinx qui m'a pas l'air mal.

    Pour mon projet voila le GitHub enfin : https://github.com/Kannagi/LMP3D
    Le code est pas super propre dans certain endroit mais je me suis pressé parce que dans la scène homebrew PS2 ben on voulait mon code.
    Apparemment je suis le premier (en amateur j'entends ) a avoir réussi l'exploit de 330 000 vertex par frame (3 vertex = 1 triangle) :p

    Pour le moment je lis la doc pour le VU0 , le VU0 se code de deux façon en micro ou macro code donc j'hésite pour le moment , le Macro code me semble chaud pour optimiser u_u mais le calcul se fera en parallèle au VU1 donc c'est très intéressant

    NT : mon dernier rendu https://img4.hostingpics.net/pics/99...0202093453.jpg

  13. #13
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Ouaaaa, 330 000 vertex.

    Ca fait beaucoup comparer a mes quelques milliers de polygone, souvent des QUADS, coder en C++.

    Dans le but de créer des polyèdres complexes.

    Pour sphinx tu peut sort utiliser le Mardown (.md) ou le ReST (.rst) et sinon tu a le choix entre la version python2 et python3.

    Le ReST est mieux je pense car ce language de balise textuel est entensible (ce que fait sphinx) et il est normé contrairement aux Markdown.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  14. #14
    Futur Membre du Club Avatar de Medal_
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Kannagi Voir le message
    Pour mon projet voila le GitHub enfin : https://github.com/Kannagi/LMP3D


    Citation Envoyé par Luke spywoker Voir le message
    Ca fait beaucoup comparer a mes quelques milliers de polygone, souvent des QUADS, coder en C++.
    115k poly c'est surprenamment puissant! Par contre c'est sans notion de shader ... je suppose ... ??

    Le SDK ne semble pas très Windows friendly ... de toute façon il me faudrait une ps2
    Sinon, je serais très intéressé par une version Wii pour voir ce qu'elle a dans le ventre.

    En attendant je peux essayer de te faire un portage WebGL

    @Kannagi, peux-tu en faire une Release, comme ça le code ne bougera pas trop si je bosse dessus

  15. #15
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 288
    Points
    218 288
    Billets dans le blog
    117
    Par défaut
    Ok, vous pusher du triangle, mais n'y a t-il pas un impact à avoir regrouper les triangles sur un quart de l'écran. Genre, vous utilisez peu la partie fragment shader.
    Sinon, je me demandais, la scène PS2 est encore active ? On a vu quelques demo sympa sur PS2 (synchro d'un oscillo avec une PS2), mais c'est très rare.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  16. #16
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 136
    Points
    10 136
    Par défaut
    Ca fait beaucoup comparer a mes quelques milliers de polygone, souvent des QUADS, coder en C++.
    Ben si on utilise que le C++ (donc sans utiliser le GPU) oui c'est plutôt long , et je dirais mème peut être plus long qu'une PS2 , je m'explique.
    Un CPU double cœur de 2GHZ a une puissance de 4 GFLOPS et la PS2 a une puissance de 6 GFLOPS !
    Enfin ce n'est pas tout a fait exact les CPU moderne possède des instructions mathématiques donc le CPU a heureusement 16GFLOPS , mais il faut y'aller en assembleur pour les utiliser il me semble.
    Mais le FPU seul est moins puissant qu'une PS2.

    D'ailleurs ça expliquerait sûrement la difficulté de portage de PCSX2 s'il utilise du code asm pour émuler correctement les VU.

    D'ailleurs la PS3 a le même souci , le CELL son CPU est capable de fournir 230 GFLOPS , et je connais pas de CPU intel actuelle fournir autant
    D’après mes calcul un 4 GHZ * 8 coeurs fournit 128 GFLOPS (sur un intel x86) , de plus les émulateurs tourne sur un OS , donc il n'ont qu'une partie de cette puissance disponible.
    (Pour cela que j’étais étonnait que il ne réutilise pas un CELL améliorait pour la PS4 m'enfin bref).
    Et pour l'émulation PS3 ben...

    Oui en ce moment je calcul souvent la puissance en GFLOPS parce que ben depuis je me demande ce que fournit la GameCube , la WII la Dreamcast , la XBOX en terme de vertex.
    Sinon, je serais très intéressé par une version Wii pour voir ce qu'elle a dans le ventre.
    J'ai une WII cracker t'imagine pas mon envie boulimique de tester dessus
    En terme de puissance elle fournit 3 GFLOPS , autant que le VU1
    Mais elle peut fournir plus de vertex si les transfert sont plus rapide (ou moins je n'ai aucune idée).
    Oui vu que pour l'affichage il faut compter 3 choses , les transferts (RAM/GPU) , le calcul de vertex et l'affichage ).

    Le SDK ne semble pas très Windows friendly ... de toute façon il me faudrait une ps2
    Ben il st plus orienté Linux parce que GCC est de base pour Linux et pour être honnête je trouve Linux vraiment bien pour programmer , je code de la Nes jusqu'a la PS2 sans soucis (dans le sens ou niveau outils c'est facile ) :p
    Mais il est possible d'utiliser ce SDK sur Windows mais je ne pourrait pas trop t'aider pour cela.

    @Kannagi, peux-tu en faire une Release, comme ça le code ne bougera pas trop si je bosse dessus
    La seule Release que je peux fournir c'est pour la version PC , et comme normalemment le code sera pareil , ben il marchera normalement sans souci pour la PS2/Dreamcast /autre
    Mais on en reparle dans un mois , malheureusement ce n'est pas ma priorité numéro 1 pour le moment.

    Citation Envoyé par LittleWhite Voir le message
    Sinon, je me demandais, la scène PS2 est encore active ? On a vu quelques demo sympa sur PS2 (synchro d'un oscillo avec une PS2), mais c'est très rare.
    Ben je trouve la scène SNES plus active pour dire
    Enfin si elle est active pour faire du tools (comme lire des vidéo sur sa ps2 , utilisez son hdd , augmenter la compatibilité des iso sur ps2 etc etc).
    Si on parle de de dev , pas vraiment et sa complexité n'aide en rien.
    La plus récente démo que j'ai vu et quelqu'un qui affiche une I also think en HD , bon c'est cool , mais moi perso ça m’intéresse pas :p
    La Version HD de la PS2 dans mon cas n'est pas utilisable donc voila

  17. #17
    Futur Membre du Club Avatar de Medal_
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Kannagi Voir le message
    La seule Release que je peux fournir c'est pour la version PC , et comme normalemment le code sera pareil , ben il marchera normalement sans souci pour la PS2/Dreamcast /autre
    Mais on en reparle dans un mois , malheureusement ce n'est pas ma priorité numéro 1 pour le moment.

    Je n'ai besoin que de la version PC, mais en fait, je parle d'une release Github. Il faut simplement cliquer sur le bouton
    Nom : Release.png
Affichages : 626
Taille : 9,3 Ko

    Ok, vous pusher du triangle, mais n'y a t-il pas un impact à avoir regrouper les triangles sur un quart de l'écran
    J'imagine en effet que la grosseur des triangles à un impact

  18. #18
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 136
    Points
    10 136
    Par défaut
    Ok, vous pusher du triangle, mais n'y a t-il pas un impact à avoir regrouper les triangles sur un quart de l'écran. Genre, vous utilisez peu la partie fragment shader.
    Cela a un impact 'minime' , je peux me rapprocher je n'ai pas de grosse perte , c'est quand c'est vraiment prés que je perd 1000-3000 poly et encore très prés ça devient très lourd en calcul
    Mais pour un jeu 3D les truc hors de l'écran je compte les virer
    Enfin je tenterais de faire une démo plus réaliste pour voir comment ça bouge tout de même

    NT:Voila j'ai mis une version Release.

  19. #19
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 826
    Points : 218 288
    Points
    218 288
    Billets dans le blog
    117
    Par défaut
    Et pour l'émulation PS3 ben...
    C'est en cours et ça fonctionne de mieux en mieux (surtout les progrès de l'année 2017 sont impressionnant) !
    -> https://rpcs3.net/

    Je ne parle pas de voir les modèles de très près. Je parle de pixel coverage. Ce que je veux dire est que votre cas actuel ne couvre pas beaucoup l'écran, du coup, le GPU a moins de travail à faire au niveau du fragment shader, du rasterizer et aussi normalement, du depth test. Habituellement, un jeu (une scène en intérieur) couvre l'intégralité de l'écran. Donc il y a au moins un triangle, ou plus, qui va remplir tous les pixels (pour faire le mur du fond) et donc, demander des calculs aux phases dont j'ai parlé précédemment.
    Ce que je veux dire, c'est que vous arrivez à afficher un grand nombre de triangle, félicitations pour cela, mais j'ai peur que cela ne soit pas représentatif d'un travail réel pour la console, notamment car votre pixel coverage semble faible et donc que les étapes post vertex shader sont peu sollicitées. (peut être je me trompe et elle sont négligeables, mais dans les jeux actuels, avec le nombre de passe de rendu, le nombre de pixels calculés par secondes est énorme, exprès pour gérer ce nombre de passe remplissant l'écran plusieurs fois).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  20. #20
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 136
    Points
    10 136
    Par défaut
    Tu as raison mais je ne peux pas y faire grand chose par contre :

    Je reste tjs au alentour de 110 000 triangle : https://img4.hostingpics.net/pics/74...0203223615.jpg
    Le GS est très efficace mais il fourni par contre pas des triangle de très grande qualité :p

    NT: il n'ya aucun triangle hors de l'écran ,je les superposes sur une ligne cette fois ci.
    Après me reste encore 2 optimisation le VU0 et les index .

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/07/2017, 17h58
  2. VklGraph: Une nouvelle librairie graphique GWT
    Par steeve.vandecappelle dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 21/09/2012, 17h15
  3. Problème d'affichage avec une nouvelle librairie
    Par reito dans le forum Struts 1
    Réponses: 0
    Dernier message: 22/07/2010, 13h22
  4. ou mettre le fichier .jar pour avoir une nouvelle librairie?
    Par nina8 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 25/06/2008, 16h22
  5. Spécifier une nouvelle librairie graphique/jeu
    Par Montaigne dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 20/06/2005, 19h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo