Optimiser Draw calls personnage
Optimiser Draw calls personnage
Bonjour,
Je sais qu'il existe des scripts pour optimiser le nombre de draw calls dans une scène d'Unity, mais le problème c'est que je n'arrive pas à réduire le nombre de draw calls sur mon personnage.
Mon personnage est exporté de 3Ds max avec 20 bones ( pour avoir un personnage correctement articulé ) et il est en 3 objets, il fait 1800 poly / 3300 tris
Ma scène tourne avec :
55 fps sur smartphones / 25 draw calls
4.5 polys
Textures : 12 - 0.4Mb
VRAM : 10.5 Mnb to 20.6Mb ( of Unknown )
VBO Total : 37 - 9.6 Mb
Visible Skinned Meshes : 12
Animation 1
Donc d'accord mon jeu tourne pas loin des 60 images par secondes, mais le problème c'est qu'au bout d'une dizaine de partie on se retrouve avec 25 images par secondes, des lags.. Donc je voudrais vraiment réduire le nombre de draw calls sur le personnage, car ça devient injouable ! Et le téléphone chauffe pas mal..
Je test mon jeu sur Windows Phone et Android avec 2 cores à 1.5Ghz et 1Go de RAM
PS : si il y a des développeurs expérimenter pour m'aider à connecter mon jeu à Facebook ( récupérer les amis qui jouent à ce jeu ) et faire des achats intégré sous Windows Phone, je suis intéressé.
Sinon le jeu est terminé.
Merci d'avance
Je sais qu'il existe des scripts pour optimiser le nombre de draw calls dans une scène d'Unity, mais le problème c'est que je n'arrive pas à réduire le nombre de draw calls sur mon personnage.
Mon personnage est exporté de 3Ds max avec 20 bones ( pour avoir un personnage correctement articulé ) et il est en 3 objets, il fait 1800 poly / 3300 tris
Ma scène tourne avec :
55 fps sur smartphones / 25 draw calls
4.5 polys
Textures : 12 - 0.4Mb
VRAM : 10.5 Mnb to 20.6Mb ( of Unknown )
VBO Total : 37 - 9.6 Mb
Visible Skinned Meshes : 12
Animation 1
Donc d'accord mon jeu tourne pas loin des 60 images par secondes, mais le problème c'est qu'au bout d'une dizaine de partie on se retrouve avec 25 images par secondes, des lags.. Donc je voudrais vraiment réduire le nombre de draw calls sur le personnage, car ça devient injouable ! Et le téléphone chauffe pas mal..
Je test mon jeu sur Windows Phone et Android avec 2 cores à 1.5Ghz et 1Go de RAM
PS : si il y a des développeurs expérimenter pour m'aider à connecter mon jeu à Facebook ( récupérer les amis qui jouent à ce jeu ) et faire des achats intégré sous Windows Phone, je suis intéressé.
Sinon le jeu est terminé.
Merci d'avance
Re: Optimiser Draw calls personnage
KyDenZ a écrit :Bonjour,
Je sais qu'il existe des scripts pour optimiser le nombre de draw calls dans une scène d'Unity, mais le problème c'est que je n'arrive pas à réduire le nombre de draw calls sur mon personnage.
Mon personnage est exporté de 3Ds max avec 20 bones ( pour avoir un personnage correctement articulé ) et il est en 3 objets, il fait 1800 poly / 3300 tris
Ma scène tourne avec :
55 fps sur smartphones / 25 draw calls
4.5 polys
Textures : 12 - 0.4Mb
VRAM : 10.5 Mnb to 20.6Mb ( of Unknown )
VBO Total : 37 - 9.6 Mb
Visible Skinned Meshes : 12
Animation 1
Donc d'accord mon jeu tourne pas loin des 60 images par secondes, mais le problème c'est qu'au bout d'une dizaine de partie on se retrouve avec 25 images par secondes, des lags.. Donc je voudrais vraiment réduire le nombre de draw calls sur le personnage, car ça devient injouable ! Et le téléphone chauffe pas mal..
Je test mon jeu sur Windows Phone et Android avec 2 cores à 1.5Ghz et 1Go de RAM
PS : si il y a des développeurs expérimenter pour m'aider à connecter mon jeu à Facebook ( récupérer les amis qui jouent à ce jeu ) et faire des achats intégré sous Windows Phone, je suis intéressé.
Sinon le jeu est terminé. !!!
Merci d'avance
Re: Optimiser Draw calls personnage
Bon d'accord il y a encore du travail..
Mais le plus gros est terminé, la partie graphique, les scripts, le parcours, le tableaux des records, la boutique, les succès..
Mais le plus gros est terminé, la partie graphique, les scripts, le parcours, le tableaux des records, la boutique, les succès..
Re: Optimiser Draw calls personnage
rien de tout ça n'est terminé si tu as des problemes de perfs!
donc c'est surement ta façon de coder, c'est ce que sous entend ZJP, on pourra pas t'aider sans en savoir plus.
donc c'est surement ta façon de coder, c'est ce que sous entend ZJP, on pourra pas t'aider sans en savoir plus.
ʕ·͡ᴥ·ʔ ==> Mon Portfolio <== ʕ·͡ᴥ·ʔ
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !
Re: Optimiser Draw calls personnage
Il est vrai que si c'est fluide au début et que ça lag au bout d'un certain nombre de parties, c'est que le problème ne vient surement pas du mesh mais de ton code quelque part...
Re: Optimiser Draw calls personnage
Je dirai la meme chose, probleme de code.
J'ai entre 100 et 200 draws call et ca reste toujours fluide apres 1h de jeu sur Windows Phone.
Tu dois avoir du garbage ou du overhead qui consomme un max.
il ne faut pas creer un nouvel objet dans tes Update(ex componentObject), mais les declarer dans ta Class et les instancier une seule fois dans ton Start ou Update si Null.
J'ai gagné 25% en perf en faisant ca, et diminué les overhead.
J'ai entre 100 et 200 draws call et ca reste toujours fluide apres 1h de jeu sur Windows Phone.
Tu dois avoir du garbage ou du overhead qui consomme un max.
il ne faut pas creer un nouvel objet dans tes Update(ex componentObject), mais les declarer dans ta Class et les instancier une seule fois dans ton Start ou Update si Null.
J'ai gagné 25% en perf en faisant ca, et diminué les overhead.
Moon RTS
Re: Optimiser Draw calls personnage
Le GC créera une perte provisoire de FPS lors de pics, mais si cela est constant c'est évidement pas normal. Un "memory leak"?!
D’où ma remarque. A ce stade, c'est plus du "prototypage" qu'un code prêts a être diffusé. Cela dit, il suffit d'une seule c... dans un script.
D’où ma remarque. A ce stade, c'est plus du "prototypage" qu'un code prêts a être diffusé. Cela dit, il suffit d'une seule c... dans un script.
Re: Optimiser Draw calls personnage
Je pensais pas que le code pouvais ralentir le jeu à ce point.
Je vais essayer de l'optimiser alors.
Voici le code principale du jeu :
Je vais essayer de l'optimiser alors.
Voici le code principale du jeu :
Code : Tout sélectionner
//Public variables
public var GameOver : boolean;
public var GameOver2 : boolean;
public var touch : boolean;
public var rejoue : boolean;
var speed : float;
var speed2 : float;
var speed3 : float;
var gravity : float;
var saut: float;
var other : Transform;
var distance : float;
var distance2 : float;
var scriptB : pause; // Déclaration de la variable
var pos : Vector2 = new Vector2(20,40);
var size : Vector2 = new Vector2(60,20);
var sol : boolean;
var securite : int = 0;
var securite2 : int = 0;
var sauv_z : int = 0;
var sauv_z2 : int = 0;
var sauv_y : int = 0;
var sauv_y2 : int = 0;
var replacement2 : boolean ;
var diffchute : float = 0;
var diffchute2 : boolean ;
var chute : float = 0;
//Private variables
private var controller:CharacterController;
private var moveDirection:Vector3;
private var deltaTime:float;
function Start ()
{
controller = GetComponent('CharacterController');
GameOver = false;
rejoue = true;
scriptB = GameObject.Find("other").GetComponent(pause); // Cherche l'objet nommé patate3 et récupère le script
diffchute2 = false;
}
function OnTriggerStay (others:Collider)
{
touch = true;
}
function Update ()
{
// Cadence du Temps
deltaTime = Time.deltaTime;
// Enregistrement de la distance
distance2 = distance ;
// Augmentation de la vitesse
if ( GameOver == false)
{
speed = speed + speed2 - speed3;
speed3 = speed2;
speed2 = distance / 1500;
}
// Si le perso touche le sol
if(controller.isGrounded )
{
// touche le sol
sol = true;
// Distance dans le jeu
distance = Vector3.Distance(other.position, transform.position);
// Déplacement Droite/Gauche
moveDirection = Vector3(0, 0, 2 * speed);
// Animation courir
if ( distance2 != distance )
{
animation.CrossFade("run",0.2);
}
// Si on clic on saute
if(Input.GetMouseButtonDown(0))
{
moveDirection.y = saut;
animation.CrossFade("jump",0.2);
}
}
// Si on touche pas le sol
else
{
// touche pas le sol
sol = false;
// Animation saut
animation.CrossFade("jump",0.2);
// Distance dans le jeu
distance = Vector3.Distance(other.position, transform.position);
}
// Gravité
moveDirection.y -= gravity * deltaTime;
// Comparaison de la distance
if ( distance2 == distance)
{
animation.CrossFade("repos",0.2);
}
// Déplacement du Personnage
controller.Move(moveDirection*deltaTime);
if (transform.position.y < -4)
{
touch = true;
}
if ( touch == true )
{
GameOver = true;
}
else
{
GameOver = false;
}
replacement2 = scriptB.replacement;
if (replacement2 == true && touch == true && rejoue == true)
{
transform.position.y = sauv_y;
transform.position.z = sauv_z;
rejoue = false;
}
// Test de chute
diffchute = chute - transform.position.y;
diffchute = Mathf.Round(diffchute*1000)/1000;
if ( diffchute > 0.05 || diffchute < (-0.05))
{
diffchute2 = true;
}
else
{
diffchute2 = false;
}
if ( sol == true && touch == false && diffchute2 == false)
{
securite = securite + 1;
if ( securite > 1 )
{
if ( securite2 < 2 ) // 2 boucles avant de sauvegarder la position
{
sauv_z2 = transform.position.z;
sauv_y2 = transform.position.y;
}
securite2 = securite2 + 1;
if ( securite2 > 30) // 30 boucles après avoir sauvegarder la position
{
sauv_z = sauv_z2;
sauv_y = sauv_y2;
securite = 0;
securite2 = 0;
print("Position de sécurité enregistrée");
}
}
}
else
{
securite = 0;
securite2 = 0;
}
chute = transform.position.y;
touch = false;
}
Re: Optimiser Draw calls personnage
En effet si ton code c'est uniquement un script, ton probleme ne vient pas de la.
Moon RTS
Re: Optimiser Draw calls personnage
à premier vue, je ne trouve pas d'élément qui explique tes ralentissements dans le code que tu as posté... en as-tu d'autres ?