Aide - Recherche - Membres - Calendrier
Version complète : 3D dynamique et ralentissement
Centre de Formation Director - Forums Adobe Director > Aide sur Director > Shockwave 3D
arnaux
Bonjour,

J'ai une ville reconstituée en 3D que j'affiche dans ma scène.
Une routine me permet de planter des arbres selon une liste de coordonées (x,y).
Celle ci est appelée par un SendAllSprites à chaque enterframe.
Au final j'aimerai obtenir 40000 arbres de cette manière.
Chaque arbre possède 8 faces texturée en png.

Bien évidemment je n'affiche pas tous les arbres en même temps wink.gif

Mon problème est le suivant :

- Cette routine ralenti au fur et à mesure que le nombre d'arbres s'amplifie.
- Dès que je stoppe cette routine mon framerate redevient normal.
- Quand je la redémarre elle reprend sa vitesse de tortue icon_confused.gif

Mon Memory inspector ne m'indique rien d'anormal.

Pourquoi ce ralentissement ?

Merci pour vos remarques et réponses.

A+


jagorochi
salut,

je ne sais pas trop pourquoi ton frame rate ralenti comme ca, surtout si lorsque tu arrete la routine de plantage d'arbre le framerate remonte et redevient fluide....

par contre je ne sais pas combien d'arbre tu veux planter/afficher simultanément, mais en conséderant qu'un Arbre = 1 Modèle = 1 Nud, alors ta scène va très rapidement saturer lamentablement avec disons 500 Nuds, meme si ceux ci ne contiennent que peux de polygones...

il vaut mieux créer UNE seule ressource/modèle/nud contenant tout tes arbres (ou groupe) plutot que de les créer un par un... (ensuite vient le problème des couches Alpha/ transparence, mais s'en est un autre justement)
Matse
yop,

effectivement le nombre de polys et de noeuds (nuds ?) joue un rôle mais là vu les symptômes je pencherai plutôt pour la façon dont sont instanciés les modèles : utiliserais-tu par hasard cloneModel arnaux ?
J'ai remarqué que SW3D avait beaucoup de mal à générer les noms uniques pour les modèles : comme si à chaque fois il reprenait son index à 1, je sais pas si je me fais comprendre mais un bon conseil : toujours utiliser newModel(), et jamais utiliser l'option de génération de noms uniques de loadFile() si vous avez beaucoup de fichiers à charger. L'accroissement du temps que ça prend est tout à fait impressionnant, et y'a pas de limite ! Plus tu utilises clonemodel plus ça va prendre de temps...

Cela dit Jagorochi a tout à fait raison : en terme de perfs il vaut mieux regrouper tout ce qui peut l'être dans une même resource.
arnaux
Bonjour,

Effectivement Matse j'utilisais CloneModel(). Le probleme est résolu maintenant en utilisant NewModel(). icon_razz.gif
Pour les noms unique j'utilise mon propre générateur de nom.

Comment fais tu pour avoir toujours raisons ? icon_wink.gif

Par contre je ne vois pas comment appliquer les conseils de jagorochi à mes arbres. Comment faire pour qu'un ensemble d'environ 300 arbres deviennent 1 seul et même noeud. A part en les attachant dans mon modeleur. J'ai opté pour le plantage dynamique pour éviter un fichier w3d trop lourd (c'est un projet web)

Jusqu'a présent je les plaçais dans différents groupe en fonction de leur zone de plantage pour ensuite les cacher/montrer

Merci de vos réponses
Matse
Salut Arnaux,

pour la petite histoire j'ai eu la chance de bosser pendant 2 ans et demi sur un client SW3D basé sur du streaming de cartographie 3D dynamique, pour un jeu massivement multiutilisateur sorti au Japon et basé sur la géolcalisation de téléphones mobiles : "Mogii : item hunt", c'est en bossant là dessus que j'ai découvert ce "bug" (avec loadFile et le paramètre generateUniqueNames au départ). Plus tard Barry Swann (un développeur anglais) avait un problème avec sa création de niveaux, il utilisait cloneModel, je lui ai parlé du problème avec les noms uniques générés automatiquement et il s'est avéré que c'était ça !

J'utilise aussi SW3D pour mon fun (j'espère pouvoir faire une démo prochainement), mais honnêtement une bonne partie de mes connaissances provient des mailing listes anglophones dir3D-L et dirGames-L ainsi que de tout ce qu'on peut trouver sur le web dans la langue de Shakespeare. Je recommande à tous ceux qui n'ont pas trop de mal avec l'anglais de s'inscrire sur ces mailing-listes : même quand tu n'as pas de problème (j'ai rarement posé de questions), voir ceux des autres et les solutions proposées par de grands noms comme Noisecrime, Lucas Mejier, James Newton etc... est très enrichissant ! Une lecture quotidienne permet d'apprendre plein de trucs sans même y faire attention. C'est également une bonne source de news concernant Director, Flash, MM et le multimédia en général wink.gif

revenons à ton problème effectivement si tu ne peux pas te permettre de regrouper tes arbres en un seul modèle dans ton modeleur c'est un peu plus compliqué car il faut le faire en lingo, en utilisant meshDeform pour "lire" le modèle de l'arbre et newMesh pour construire un modèle regroupant plusieurs arbres. Si tu peux faire ça une fois lors de l'initialisation et utiliser ce nouveau modèle partout ça peut le faire, si tous tes arbres on des positions bien précises ça va être difficilement jouable car créer le mesh à chaque fois va provoquer un bon gros ralentissement icon_mrgreen.gif

Cela dit si tu gères bien l'affichage au moyen de groupes tu peux tout à fait conserver de bonnes performances même avec plein de noeuds dans ta scène (la limite étant le nombre que tu en affiches à la fois).

++
innocent
QUOTE(jagorochi @ Jul 28 2005, 04:03 PM)
salut,

je ne sais pas trop pourquoi ton frame rate ralenti comme ca, surtout si lorsque tu arrete la routine de plantage d'arbre le framerate remonte et redevient fluide....

par contre je ne sais pas combien d'arbre tu veux planter/afficher simultanément, mais en conséderant qu'un Arbre = 1 Modèle = 1 Nud, alors ta scène va très rapidement saturer lamentablement avec disons 500 Nuds, meme si ceux ci ne contiennent que peux de polygones...

il vaut mieux créer UNE seule ressource/modèle/nud contenant tout tes arbres (ou groupe) plutot que de les créer un par un... (ensuite vient le problème des couches Alpha/ transparence, mais s'en est un autre justement)
*


Salut !

Ton explication colle bien avec le phénomène que j'avais décrit dans ce post : http://director.media-box.net/index.php?showtopic=6066 wink.gif

J'avais un temps de lancement pour chaque "play" de plus en plus long, et ce quelle que soit la taille de la playlist (je l'ai forcée pour tester à ne jamais contenir plus de quelques motions via des "removelast").

Sachant que les motions ne sont pas passées en référence mais sont visiblement clonées avant d'être insérées dans une playlist (lorsqu'on insère une motion dans une playlist, et qu'on modifie ensuite cette motion - en la "mapant" par exemple -, celle de la playlist est conforme à l'originale), ton explication me semble expliquer le phénomène et me conforte dans l'idée que je ne vais pas pouvoir faire grand chose pour y remédier directement...




Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.