GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: S!m le 06 Décembre 2010, 18:56:30

Titre: Discussion sur les streamers
Posté par: S!m le 06 Décembre 2010, 18:56:30
Discussion sur les streamers

Je vous invite tous à partager vos idées sur les méthodes que l'on pourrait utiliser dans un streamer, le tout dans le but de créer de nouveaux streamers plus efficaces et qui effectuent mieux le travaille de point de vue du joueur. Soyez imaginatifs. Le but? très simple: créer une nouvelle génération de streamer plus efficaces, plus propres, qui seraient pratiquement invisibles aux yeux des joueurs, sans pour autant monopoliser la machine sur laquelle ils sont exécutés.

Si vous ne savez pas ce qu'est un streamer, veuillez vous abstenir de poster. Ce fil de discussion s'adresse principalement aux scripteurs avancés.

Avant toute chose, la plupart des idées que je vais donner ici proviennent de ce topic: Two Topic by Y_LESS (http://forum.sa-mp.com/showthread.php?t=183071)

Tout comme Y_LESS, je pense qu'il faut séparer le sujet en 3 sous-sujets.



1. Algorithme

L'algorithme, c'est le principe de fonctionnement du streamer. L'idée derrière le script. Par exemple, on peut simplement tester la distance entre un joueur et un objet et décider ainsi si l'on affiche ou non l'objet. On peut aussi regarder la distance de plein d'objets et choisir les objets les plus proches parmi la liste.

Je vais ci dessous présenter quelques algorithmes relativement connus.

Distance de vue simple:

Cet algorithme consiste simplement à regarder si un objets est dans un certains rayon autour d'un joueur. Les streamer utilisant ce principe sont: xobjects, midostream, ...
Ces streamer sont les plus simple, les plus limités et ceux qui comportent le plus de problèmes potentiels quant à ne pas voir certains objets proches quand la densité d'objet d'une zone est grande.
Le code est, à la base, à peu près structuré ainsi:
Stream(playerid)
{
    for(new o = 0; o < MAX_STREAM_OBJECTS; o++)
    {
        if(IsPlayerInRangeOfPoint(playerid, MAX_VIEW_DIST, obj[o][x], obj[o][y], obj[o][z]))
        {
             on affiche l'objet
        }
        else
        {
             on cache l'objet
        }
    }
}

Le principal avantage de cet algorithme, c'est qu'il est simple à coder.

Distance, les plus proches:

Cet algorithme affiche les objets les plus proches d'un joueur, un peu plus difficile à implanter que l'algorithme précédant, il demande un peu plus de calcul mais évite le problème d'objets très proches qui peuvent ne pas apparaitre. De plus la distance de vue n'est plus un paramètre, elle varie en fonction de la densité d'objet de la zone dans laquelle se trouve le joueur. Un exemple de streamer utilisant cette méthode est SuperStream.
Le code est à peu près structuré comme ceci:
Stream(playerid, Float:X, Float:Y, Float:Z)
{
    new array_objects[MAX_STREAM_OBJECTS][2];//on va stocké dans cet array les distances et les ID des objets pour pouvoir les ordonner selon la distance ensuite
    for(new o = 0; o < MAX_STREAM_OBJECTS; o++)
    {
         array_objects[o][0] = o;
         array_objects[o][1] = GetDistance(X, Y, Z, obj[o][x], obj[o][y], obj[o][z]);
    }
    order(array_object);//fonction qui place les objets du plus proche au plus loin
    for(new o = MAX_STREAM_OBJECTS; o >= MAX_OBJETS_VUS; o--)
    {
         on efface les objets qui ne doivent pas être vus  
    }
    for(new o = 0; o < MAX_OBJETS_VUS; o++)
    {
         on crée les objets qui doivent être vus  
    }
}

Cet algorithme, bien que plus difficile à implanter, permet une bonne amélioration de la qualité de l'illusion générée par le streamer et ne comporte pas de problème majeur. Toutefois, il faut faire attention car cette méthode demande plus de calcul et peut donc gérer un moins grand nombre d'objets.

Division de l'espace en zones:

Cette méthode consiste simplement à divisé l'espace en zone, on peut ainsi ne parcourir que les objets qui sont près du joueur, ce qui permet d'augmenter grandement la limite d'objets, surtout s'ils sont bien distribués sur la carte. Cette méthode est utilisé, entre autre, par Simstream et Y_objects. D'ailleurs on peut le remarquer dans la limite du nombre d'objet. Toutefois, je dois admettre que je l'ai plutôt mal implanté dans Simstream...
Le code de ce genre de méthode demande l'ajout de quelques fonctions, comme une fonction pour ajouter/retirer un objet d'une zone, le changer de zone etc... il faut faire attention à la façon dont on les gère. Je ne donnerai pas d'exemple pour cette méthode car plus complexe et longue à coder...

Autres:

Il existe bien sur plusieurs autres méthode. D'ailleurs, c'est le but de ce topic, trouver de nouvelles méthode qui pourraient être plus efficaces que celles déjà utilisées.

Dans une autre catégorie d'algorithme, on peut aussi déterminer la position ou SERA le joueur. Il ne faut pas oublier que la position récupérer est la dernière position connue du serveur, que la position est déjà différente et que le temps que les données soient reçus, le joueurs aura bougé. On peut donc ajuster selon la position probable du joueurs quels objets il verra. C'est ici que la velocity devient utile.


2. Implantation de l'algorithme

Le second défi de la création d'un streamer, est l'implantation de l'algorithme, je ne m'éterniserai pas sur cette section, mais elle est tout de même importante.

Certaines des méthodes présentés sont relativement difficiles à implanter, par exemple, la méthode des objets les plus proches demande une fonction pour classer les objets, cette fonction, afin de la rendre efficace, nécessite l'utilisation de méthodes de classement qui peuvent être relativement compliquées.

ps. concernant la fonction de classement, je recommande d'utiliser QuickSort de Y_Less, modifiée pour un array à 2 dimensions.

En ce qui concerne l'utilisation de zones, le défi vient quant à la gestion des zones elles mêmes, les concevoir de façon à ne pas limiter l'utilisateur. Par exemple, dans SimStream on ne peut ajouter d'objets hors des zones, c'est à dire à une valeur en X ou Y supérieure à 4000 ou inférieure à -4000 (dépendant des paramètres). Une solution est de créer une zone supplémentaire dans laquelle on place tous les objets qui ne sont pas dans les zones normales. De plus, trouver une façon d'ajouter les zones sans pour autant multiplier la quantité de mémoire utilisée par le script est un défi. Je recommande ici l'utilisation de listes.

Cette section est plutôt importante dans la discussion, selon moi.


3. Gestion de l'interaction avec les scripts

Cette section est celle qui pourrait être la plus complexe, si l'on veut une intégration la plus invisible possible.
L'idéal serait de n'avoir qu'à inclure le streamer dans chacun des scripts et que tout fonctionne.
Bien sur, ceci est difficile.

Une méthode proposée par Y_LESS est l'utilisation de son master system. En gros, ce système permet de gérer l'interaction de scripts entre eux. Ils sont tous identiques, ils comportent tous les streamer et la possibilité de communiquer avec les autres, d'être client ou serveur.
Toutefois, le système désigne l'un des script comme le maitre.
Les autres font appel à lui comme serveur, et lui est le streamer.
YSI comporte cette fonction. Toutefois, c'est très difficile à implanter.
Y_LESS admet que son système était rendu très compliqué et lourd à coder, c'est l'une des raisons pourquoi il a arrêté ce projet.

Une autre méthode, qui selon moi est beaucoup plus envisageable pour le moment, est la création d'un filterscript qui sera le serveur, et tous les scripts font appel à lui avec des CallRemoteFunction. Cette méthode est l'une des plus utilisée. SuperStream, SimStream, midostream... utilisent cette méthode.

Dernière méthode et la moins intéressante, Tout mettre ses objets dans un seul filterscript qui est le streamer. Xobject utilise cette méthode.
Cci cause de nombreux inconvénient.
On ne peut mettre les objets que dans un script, limite l'interaction des autres scripts...


Ce que je vous demande


Après avoir lu tout ce texte (et au besoin le monstre de Y_LESS), je vous demande trois petites choses:
partagez vos idées pour des améliorations. Que ce soit dans n'importe quelle des sections présentées, vos idées seront toutes les bienvenues.
Soyez original, essayez d'éviter les idées déjà connus (je ne les ai pas toutes listées).
Soyez précis, donnez autant de détails que possible, afin de facilité la compréhension de votre idée.

Merci de votre attention.

Sim.
Titre: Re : Discussion sur les streamers
Posté par: Ssk le 06 Décembre 2010, 19:04:27
Topic très intéressant moi je n'ai pas grand chose à dire, à par ce que je t'avais déjà dit sur MSN, comme ne pas affiché les objets à côté du joueur, mais plutôt ceux à coté de la camera et les afficher selon où la camera pointe ^^
Titre: Re : Discussion sur les streamers
Posté par: D0os-Nox le 06 Décembre 2010, 19:13:10
Bonjour, Pour répondre à sasuke les effets comme la fumée, flammes, nitro, font perdre des fps seulement quand nous la voyons (Caméra) !

Mais, si vous avez l'occasion de tourner la vue et de cacher les différents effets en positionnant la caméra de façon à ne plus voir la modélisation 3D, vous remarquerez une diminution du CPU (Processeur) et une augmentation des fps ( Certains serveur MTA permet d'afficher le nombre de fps )

Si, On reprend m'a supposition, sa pourrai être une idée pour le streamer ?

 :-X D0os-Nox  ;)

Titre: Re : Re : Discussion sur les streamers
Posté par: S!m le 06 Décembre 2010, 19:36:36
Salut,

Bonjour, Pour répondre à sasuke les effets comme la fumée, flammes, nitro, font perdre des fps seulement quand nous la voyons (Caméra) !

Mais, si vous avez l'occasion de tourner la vue et de cacher les différents effets en positionnant la caméra de façon à ne plus voir la modélisation 3D, vous remarquerez une diminution du CPU (Processeur) et une augmentation des fps ( Certains serveur MTA permet d'afficher le nombre de fps )

Si, On reprend m'a supposition, sa pourrai être une idée pour le streamer ?

 :-X D0os-Nox  ;)




malheureusement non, ceci est un effet côté client, le serveur n'as pas à toucher aux modèles.

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 06 Décembre 2010, 19:47:47
Bonsoir,

Tout d'abord merci Sim, d'avoir accepter de parler de ça. :)

Je pense comme Sasuke, il faudrait détecter les objets, en fonction de l'angle de la camera. Le problème c'est que si par exemple on bouge vite la camera avec plus de 400 objets autour de soit, on risques d'avoir de petit problème. Cette idée serais en compléments donc pour dire '' d'actualiser " ou d'initialiser les objets pour ensuite détecter les variations de la caméra.

Pour l'idée avec les zones, ça pourrais être pas mal pour preload les objets en fonction de la distance et du nombre d'objet dans celle ci, puis ensuite de validée les objets en fonction de l'angle de la camera.

Sam. :cheers
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 06 Décembre 2010, 20:04:18
Voila je t'ai fait un petit dessin :)

(( Remarquez la qualité HD de mon oeuvre réalisé sur l'onéreux logiciel " Paint " de WinDaub :D))


Après réflexion, le dessin n'est pas tout à faire correct, il faudrait prendre en compte la distance de la camera au joueur. Et donc reculer la camera derrière le joueur.
Titre: Re : Discussion sur les streamers
Posté par: cristab le 06 Décembre 2010, 20:18:12
moi je penser a une chose peu etre infaisable

Mais voila ce serais de faire comme un .exe (comme pour les npc  par exemple) qui s'execute en meme temps que le server les object serais precharger via un fichier situer dans le meme repertoir et de la il prendrais la fonction non pas par zone mais par section

Enfin voila je pense que on serais obliger de modder le client ce qui est interdit enfin je dit ceci mais j'en sais rien en faite :p
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 06 Décembre 2010, 20:28:19
Ça pourrais être pas mal cristab :)
Je sais que via l'audio plugin les fichiers audio tu dois les mettres à la racine de ton serveur et non dans les scriptfiles. Donc pourquoi pas ? ^^
Titre: Re : Discussion sur les streamers
Posté par: S!m le 06 Décembre 2010, 20:44:43
Salut,

mais il faudrait à ce moment aller chercher les adresses dans le serveur etc... Donc avec un .exe à part, je ne pense pas. Mais ton idée est un peu le principe des plugins.

Pour l'idée de la caméra, avec Sasuke on en a parlé un peu l'autre jour (je ne me rappelle pas la date exacte), la méthode que j'ai pensé la meilleur, c,est de s'en servir pour déplacer la position autour de laquelle on fais le calcul. je vous explique avec du code du streamer que j'ai commencé en intégrant ces idées:

new Float:pl_cam_X, Float:pl_cam_Y, Float:pl_cam_Z;
new Float:pl_adjust_X, Float:pl_adjust_Y, Float:pl_adjust_Z;
new pl_vehicleid, pl_interior, pl_vw;
for(new i = timerid; i < MAX_PLAYERS; i += STREAM_SPLIT_AMOUNT)
{
    if(IsPlayerConnected(i))
    {
        GetPlayerCameraPos(i, pl_cam_X, pl_cam_Y, pl_cam_Z);
        GetPlayerCameraFrontVector(i, pl_adjust_X, pl_adjust_Y, pl_adjust_Z);
        pl_cam_X += pl_adjust_X * CAM_ADJUST_SCALE;
        pl_cam_Y += pl_adjust_Y * CAM_ADJUST_SCALE;
        pl_cam_Z += pl_adjust_Z * CAM_ADJUST_SCALE;
        if((pl_vehicleid = GetPlayerVehicleID(i)))
        {
            GetVehicleVelocity(pl_vehicleid, pl_adjust_X, pl_adjust_Y, pl_adjust_Z);
        }
        else
        {
            GetPlayerVelocity(i, pl_adjust_X, pl_adjust_Y, pl_adjust_Z);
        }
        pl_cam_X += pl_adjust_X * VELOCITY_ADJUST_SCALE;
        pl_cam_Y += pl_adjust_Y * VELOCITY_ADJUST_SCALE;
        pl_cam_Z += pl_adjust_Z * VELOCITY_ADJUST_SCALE;
        pl_interior = GetPlayerInterior(i);
        pl_vw = GetPlayerVirtualWorld(i);
StreamPlayer(i, pl_cam_X, pl_cam_Y, pl_cam_Z, pl_interior, pl_vw);
}
}

En gros, au lieu de streamer où est le joueur, on va chercher un peu plus loin, en fonction d'où il regarde et de la direction de sa vitesse. Toutefois, on aura toujours des objets derrière, par contre il y en aura moins, donc il verra plus loin devant lui, mais s'il se retourne rapidement, il y a tout de même des objets.

PS. les noms des variables c'est pour éviter des incompatibilités

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 06 Décembre 2010, 21:08:02
Ah oui je comprend, donc enfaite il faut réduire le radius de détection, et rajoute la surface enlevé devant le joueur.. Pas mal :)

Une chose me turlupine  :happy

Citer
De plus, trouver une façon d'ajouter les zones sans pour autant multiplier la quantité de mémoire utilisée par le script est un défi. Je recommande ici l'utilisation de listes.

Tu entend quoi parler par '' listes " ? :)

Bonne nuit, Sam.
Titre: Re : Discussion sur les streamers
Posté par: S!m le 06 Décembre 2010, 21:38:07
Salut,

je vais te donner une petite explication, s'appliquant au cas dont on discute:

Disons que tu crée des zones:
new meszones[zones_X][zones_Y];où:
 - zones_X est le nombre de zones en X
 - zones_Y est le nombre de zones en Y

Ensuite, c'est bien beau un tableau comme ça, mais il faut y insérer des objets. On peut tous les lister directement dans la variable ainsi:
new meszones[zones_X][zones_Y][MAX_OBJETS_PAR_ZONES];où chaque emplacement du tableau contient un objet.
Exemple:
(meszones[2][3][0]) est l'ID du premier objet de la zone 2 en X et 3 en Y (en fait c'est la 3e en X et 4e en Y comme on commence à 0)

C'est ainsi que j'ai procédé dans SimStream.
Cette méthode à 2 désavantages importants:

 - elle limite le nombre d'objet dans chaque zone
 - elle utilise beaucoup de mémoire (car on a beaucoup de zones, et on veut pouvoir mettre un bon nombre d'objet dans chaque zone, si tu as 20 zones par 20 zones, ça fait 400 zones, disons avec la
   possibilité de 250 objets par zones, on monte à 100 000 emplacements à créer)

Donc, cette méthode n'est pas très intéressante, possible, permet d'améliorer l'efficacité du streamer, mais elle est entraine un problème de limitation. La séparation en zones est donc moins intéressante que l'on aurais voulu...

C'est ici que les listes interviennent, elles vont nous permettre de connaitre aisément les objets d'une zone, sans utilisation excessive de mémoire ni limitation.

Il faut par contre ajouter 2 informations pour chaque objet. Niveau mémoire, ça va, la limite globale est facilement ajustable à nos besoin, même si on ajoute 8 octets par objet, on en aura pas un grand nombre inutilisé.

Donc un exemple de code avant d'aller plus loin:
enum enum_objets
{
    ....//les infos de l'objet, les trucs normaux
    obj_precedant,
    obj_suivant
};

new objets[MAX_STREAM_OBJETS][enum_objets];//on utilise donc 8 octets * MAX_STREAM_OBJETS en plus

new zones[zones_X][zones_Y];//ceci peut être suffisant
Comme tu peut voir, on n'a très peu de variable de zone. On ajoute une petite quantité de mémoire que l'on peut ajuster avec le nombre total d'objet, facile à faire varier.

Maintenant le principe des listes: la variable zones[2][3] indique l'ID de l'objet qui a été le premier ajouté dans cette zone.
Avec cette valeur, on peut facilement aller trouver cet objet.
Une fois que l'on as cet objet, grâce à la donnée obj_suivant, on retrouve le prochain objet. Ainsi de suite, il est donc facile de parcourir tous les éléments dans la zone, du premier au dernier.

Il faut noter certaines petites particularités, l'utilisation de obj_precedant n'est pas essentiel, mais simplifie grandement le retrait d'un objet au milieu de la liste.
On peut aussi ajouter une valeur indiquant le dernier objet de la zone, pour ajouter un nouvel objet plus facilement.
Comme tu le devine sans doute, cette méthode demande un peu plus de travail. Toutefois, rien ne nous empêche de mettre le nombre d'objet que l'on veut dans chaque zone, ce qui est un très gros avantage.

Suggestion d'optimisation niveau mémoire:
Au lieu d'utiliser 2 variables pour les ID des objets, utiliser la moitié de la variable pour chaque valeur. Toutefois, ceci entraine une limite de 65535 objets (non pas 65536 car on a besoin d'une valeur pour indiquer un objet invalide) et ajoute une petite quantité de calcul. Vu la mémoire dont disposent la majorité des ordinateurs d'aujourd'hui, ce n'est pas quelques ko qui feront une différence...

Si certains points demeurent flous, n'hésite pas à demander des précisions.

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: Ssk le 06 Décembre 2010, 22:11:52
Je trouve tes idées pas mal Sim, mais je déconseille fortement l'utilisation du pawn pour ce genre de chose, le C++ est plus adapté pour ça car tu gère parfaitement la mémoire, par exemple ici pour stocker l'id d'un objet tu utilise 4 octets or on sait très bien que l'on ne dépassera pas les 60 000 objets autant les stocké sur 2 octets, etc ... sans parler de l'avantage de rapidité d'exécution de code ^^

++Sasuke78200
Titre: Re : Re : Discussion sur les streamers
Posté par: S!m le 06 Décembre 2010, 22:39:45
Salut,

Je trouve tes idées pas mal Sim, mais je déconseille fortement l'utilisation du pawn pour ce genre de chose, le C++ est plus adapté pour ça car tu gère parfaitement la mémoire, par exemple ici pour stocker l'id d'un objet tu utilise 4 octets or on sait très bien que l'on ne dépassera pas les 60 000 objets autant les stocké sur 2 octets, etc ... sans parler de l'avantage de rapidité d'exécution de code ^^

++Sasuke78200

Je regrette, mais il est possible de dépasser le 65 535 objets, surtout si on commence à mettre des objets dans différents mondes virtuels, seulement pour 1 joueur etc...
enfin, quand on fait des tests c'est très facile à dépasser.

Enfin, le point du topic est plutôt de trouver de bonnes façon de faire. Avec les bonnes méthodes, on pourrait faire un streamer en PAWN plus efficace qu'un streamer en C++. Malgré le fait que le langage soit plus limité.

EDIT:
La dernière partie de mon message ne me parait pas clair après relecture, je vais donc ajouter ceci:
Ce que j'entends par un streamer plus efficace en PAWN qu'en C++, ce n'est pas que le streamer effectue le même calcul plus rapidement, je serais idiot de penser cela, cependant, les interactions avec sa-mp sont plus efficace directement du PAWN, en trouvant de bonnes solutions pour réduire le volume de calcul, je pense que l'on peut faire un streamer en PAWN qui est plus beau en jeu que ceux qui existent, et même que ceux qui existent en C++ (en l'occurrence, xStreamer et streamer).

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: scott1 le 07 Décembre 2010, 02:42:54
Bon niveau streamer, je ne serais pas d'une grande utilité, mais bon, juste pour dire, que si on faisait un streamer par rapport a l'angle ce serait la mort, imaginez sur un serveur de stunt, avec un bon gros nombre d'objet, quand on tourne la camera pour voir au alentour, les objet disparaitrons, et boom on se retrouverais la tête a terre ^^
Titre: Re : Discussion sur les streamers
Posté par: S!m le 07 Décembre 2010, 03:54:25
Salut,

concernant la méthode que j'ai utilisé pour créer les objets dans un endroit, selon moi, plus intéressant, le résultat des modifications devrait être approximativement l'image en pièce jointe.

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: Xartrick le 07 Décembre 2010, 13:17:16
Je serais plutôt de l'avis de sasuke78200
Titre: Re : Discussion sur les streamers
Posté par: cristab le 07 Décembre 2010, 13:27:47
il y aurais un soucis imaginons un parcour avec des ramps a faire en marche arriere on peu remarquer que la cameras ne se place pas desuite a l'avant du vehicule donc il manqueras des objects
Titre: Re : Discussion sur les streamers
Posté par: Xartrick le 07 Décembre 2010, 13:29:40
Ou alors ajouter une sorte de marge derrière le joueur.
Titre: Re : Discussion sur les streamers
Posté par: cristab le 07 Décembre 2010, 13:36:12
en gros prevoir 30 a 40 mettre apres la cameras donc il y aurais moin d'object au final
Titre: Re : Discussion sur les streamers
Posté par: Ssk le 07 Décembre 2010, 13:45:18
En faite ce qu'il faudrait c'est combiner ma technique et afficher les objets même s'il ne sont pas vu pas la camera sur un certain rayon ^^
Titre: Re : Discussion sur les streamers
Posté par: cristab le 07 Décembre 2010, 13:49:55
en gros on retombe pratiquement sur le systeme de zone sauf que c'est pas rond ni carrer mais oval :lmfao
Titre: Re : Re : Discussion sur les streamers
Posté par: S!m le 07 Décembre 2010, 14:11:24
Salut,

en gros on retombe pratiquement sur le systeme de zone sauf que c'est pas rond ni carrer mais oval :lmfao

tout à fait, sauf qu'un calcul d'ellipse est plus complexe qu'un simple calcul de distance, reste à voir si ça en vaut la peine.
C'est la principale raison pourquoi ma modification ne fait que déplacer le centre.

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: Ssk le 07 Décembre 2010, 14:53:29
Je pense que ton idée est la meilleur Sim ^^
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 07 Décembre 2010, 18:19:41
Salut,
mon idée étais basé justement sur une elipse, je l'ai mal dessiner mais j'ai corriger par écris par la suite. 

Sinon pourquoi pas faire une zone ou les objets autour du joueur par exemple dans un rayon de 20-30 unités ( pour une marge de sécurité ) plus la position ou le joueur regarde. Mais si on différencie un objet affiché d'un autres, ça demanderais du code et des informations en plus.
Titre: Re : Discussion sur les streamers
Posté par: Ssk le 07 Décembre 2010, 18:25:13
Je pense que la méthode de Sim suffit largment
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 07 Décembre 2010, 18:28:27
Oui aussi, j'apporte des idées on sait jamais, si ça donne une idée au docteur Sim :)
Titre: Re : Discussion sur les streamers
Posté par: Karting06 le 07 Décembre 2010, 18:30:57
Salut,
Je n'y connais pas en streamer. Mais je ne vois pas l'interet (ou ne comprends pas l'interet :D) de mettre des " caméras". Vous pourriez m'expliquer s'il vous plaît. Parce que je suis curieux.

Merci,
Karting06
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 07 Décembre 2010, 19:30:37
'' Mettre des cameras ", on ne place pas de cameras ^^
Enfaite on a donner comme idée de tester la position ou le joueur regarde donc la camera, pour afficher des objets.
Tu comprends ?  :happy
Titre: Re : Discussion sur les streamers
Posté par: Xartrick le 07 Décembre 2010, 19:32:21
La caméra est juste l'endroit où on voit, ton écran est la sortie de la caméra (l'image)
Titre: Re : Re : Discussion sur les streamers
Posté par: S!m le 07 Décembre 2010, 19:33:30
Salut,

Oui aussi, j'apporte des idées on sait jamais, si ça donne une idée au docteur Sim :)
Je ne suis pas Docteur, je n'ai pas de doctorat, je ne suis même pas Bachelier (normalement dans 3 ans).

Salut,
Je n'y connais pas en streamer. Mais je ne vois pas l'interet (ou ne comprends pas l'interet :D) de mettre des " caméras". Vous pourriez m'expliquer s'il vous plaît. Parce que je suis curieux.

Merci,
Karting06
je ne vois pas trop ce que tu entend par "mettre des caméras".
Si tu parle des idées d'ajustement dans le choix des objets visibles selon la zone regardée par le joueur, l'intérêt me parait assez évident: pourquoi lui montrer des objets qu'il ne peut pas voir.
Cependant, pour que ce soit vraiment intéressant, il faut que le calcul puisse se faire rapidement. Le mieux demeure un cercle selon moi.

Sinon une idée, qui demanderait beaucoup de recherche (ou une méthode efficace pour aller piger dans les fichiers de gta_sa), serait de faire une liste des distances maximales auxquelles les objets commencent à apparaitre, on pourrait ainsi faire apparaitre chaque objet à une distance optimale, s'il ne peut pas être vu car trop loin (exemple une petite décoration qui n'apparait qu'à 50 mètres), on ne le montre pas avant qu'il puisse être vu.

ps. vous êtes trop rapides...

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 07 Décembre 2010, 19:37:56
Ben, tu veux faire un truc en médecine, et ton savoir m'impressionne :)

Sinon pour ton idée, je la trouve bien, mais c'est pareil, ou veux tu stocker ces données, tu dois faire '' une liste " comme précédemment, et vue le nombre d'objets ^^
Sinon, comment veut tu avoir ces informations ? :o
Titre: Re : Re : Discussion sur les streamers
Posté par: S!m le 07 Décembre 2010, 19:40:13
Salut,

Ben, tu veux faire un truc en médecine, et ton savoir m'impressionne :)

Sinon pour ton idée, je la trouve bien, mais c'est pareil, ou veux tu stocker ces données, tu dois faire '' une liste " comme précédemment, et vue le nombre d'objets ^^
Sinon, comment veut tu avoir ces informations ? :o

Docteur = personne qui a un doctorat
Aucun liens avec la médecine, j'étudie présentement en Physique.

Ces informations sont présentes dans le jeu, il suffit de savoir où les trouver et de coder un petit programme pour les récupérer et en faire une liste.

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 07 Décembre 2010, 19:42:23
Pour ça on pourrais demander à l'expert du cœur du jeux, j'ai nommé : SASUKEE !  :happy
Titre: Re : Discussion sur les streamers
Posté par: Karting06 le 07 Décembre 2010, 20:02:40
Ok, merci de ton aide Sim et chneubeul. C'est vrai que mettre l'objet a distance pourrait être cool. Ca ferait le jeu encore plus reël avec nos objets personnalisé !
Mais à mon avis, ça va te demander beaucoup de travail et je crois que peut-être un développeur sa-mp pourrait le savoir et la tu lui demandes des infos.

PS: J'étais du même avis concernant les études de Sim, Chneubeul. Au moins on est plusieurs "con" :D
Titre: Re : Re : Discussion sur les streamers
Posté par: Ssk le 07 Décembre 2010, 20:46:50
Pour ça on pourrais demander à l'expert du cœur du jeux, j'ai nommé : SASUKEE !  :happy

je suis pas vraiment expert lol je m'y connais juste un peu, pour moi les experts sont ceux de la team MTA, et UZI-I aussi :p

EDIT: Arf j'ai oublié de donner mes explications, les objets sur GTA SA ne sont pas affichés selon une distance statique mais c'est dynamique, cela dépend du drawdistance que vous avez configuré pour votre jeu ^^


Et il faut aussi savoir que certain objet ne prennent pas en compte cette distance ^^
Titre: Re : Discussion sur les streamers
Posté par: S!m le 07 Décembre 2010, 21:33:29
Salut,

ok on peut oublier cette idée, de toute façon ça demanderais beaucoup de travail et un tableau avec toutes ces infos serait relativement gros et "fragile" (si on change une valeur, en retire une, on foire la liste).

Question de partir sur une autre catégorie, je vous demanderais vos idées concernant la façon d'implanter l'algorithme des zones. Principalement en ce qui concerne le cœur du système, au moment de calculer les objets. De quelle façon l'on choisi quelles zones tester ou non. Aussi comment on indique la zone dont il est question, avec une seule variable qui serait un numéro d'identification de la zone, ou 2 variables qui indiquent la coordonnée x et y de la zone.

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 08 Décembre 2010, 07:50:08
Salut :)

Ton idée, d'ID est pas mal. Par exemple

new zoneID[MAX_ZONES] =
{10.0,12.0,30.0},
etc..

 :happy

Puis tester chaque zone pour afficher les objets nécessaire. J'entends par là, qu'il faurait afficher les objets en fonction du nombre d'objet.
                         
Titre: Re : Re : Discussion sur les streamers
Posté par: S!m le 08 Décembre 2010, 15:49:30
Salut,

Salut :)

Ton idée, d'ID est pas mal.

C'est aussi l'impression que j'ai eu, mais au moment de l'implantation, ça devient plus difficile que ça en a l'air, surtout quand tu arrive sur les bords de tes zones, il te faut une façon de gérer facilement les cas "hors bordures", c'est là que ça se complique. Je vais passer le système que j'ai commencé en coordonnée. Par contre, la version que je développe utilise des cubes au lieu de zones.

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 08 Décembre 2010, 19:34:57
Salut, pour les bords, en il suffirait de tester si l'objet est dans la zone, sinon il est en dehors. non ?  :happy
Titre: Re : Discussion sur les streamers
Posté par: S!m le 08 Décembre 2010, 20:17:34
Salut,

oui, mais au moment de faire le calcul autour du joueur, en regardant quelles zones sont autour du joueur, les choses sont un peu plus complexes. On se retrouve avec un numéro qui est quand même valide, mais qui se trouve à l'autre bout de la carte. Enfin, on peut toujours ajuster un peu, je vais continuer à y penser et je verrai comment faire. Mon principal problème c'est que j'ai une fonction très longue pour faire ce petit boulot, je cherche une façon simple de rendre ce code plus court.

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 08 Décembre 2010, 20:50:09
Ça te déranger, d'expliquer cette fonction ? Pour essayer de '' sauter " des étapes.
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 28 Décembre 2010, 00:14:35
Bonsoir Bonsoir,

En feuilletant de la docs, sur de la programmation, je réfléchissais à un streamer et pourquoi ne pas complémenter la fonction CreateObject avec la fonction CreatePlayerObject, car c'est deux système d'objet distinct et donc on pourrais monter à 800 objets par joueur visible.
Mon idée consisterais à afficher les objets autour de joueur par CreateObject (dans une ellipse parallèle à l'angle du joueur) , et ensuite d'afficher les objets ou là camera regarde via les CreatePlayerObject. Ce qui serais pas mal, c'est de prendre en compte un paramètre de réglage, pour que les objets afficher par la camera, soit en nombre limités ou non, pour question de bug niveau client à l'affichage des objets, car, si un joueurs à un pc pas terrible terrible et qu'on lui affiche plein d'objet d'un coups il risque d'avoir de petit lags. Je ne pense pas que cela gênerais par ces des objets complémentaires, pour améliorer l'affichage des objets.

A+, Sam.
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 02 Janvier 2011, 13:47:13
Petit UP, j'aimerais savoir si mon idée est bonne ^^
Titre: Re : Discussion sur les streamers
Posté par: S!m le 02 Janvier 2011, 16:52:08
Salut,

faudrait vérifier, mais je doute qu'un joueur puisse voir 800 objets ainsi à un instant donné.
Ensuite, ça marche très bien à un joueur cette petite manipulation, mais quand tu as 10 - 20 joueurs (ou encore 200?), ce nombre d'objet est limité, les 400 objets doivent être répartis entre les joueurs. Si on en a seulement 20, ce n'est plus très utile...

Je pense que la meilleure méthode est vraiment la méthode que j'ai décrite, en décalant simplement la position où l'on vérifie la position du joueur. Une modification qui pourrait être bien serait de modifier la forme de la zone testé à une ellipse. Toutefois, cette modification demande un certains volume de calcul, je ne suis pas sur qu'elle en vaille la peine.

N'hésitez pas à poster si vous avez d'autres idées.

++Sim++
Titre: Re : Discussion sur les streamers
Posté par: chneubeul le 02 Janvier 2011, 17:13:05
Salut Sim.

J'oubliais qu'il fallait répartir les " CreateObjects", mais pour les CreatePlayerObject on pourrait alors avoir 400 objets.