[WIP] Sheep ( un mouton pas si stupide)
Re: [WIP] Sheep ( un mouton pas si stupide)
c'est bien sympa tout ça !
Re: [WIP] Sheep ( un mouton pas si stupide)
J'aimerai pouvoir progresser jusqu'à tes chevilles.
Tu donnes des cours ???
Je trouve ton jeu super et j'aime beaucoup.
Bravo
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.
Re: [WIP] Sheep ( un mouton pas si stupide)
Hahaha c'est pas faux, Sheep devait être juste quelque chose de basique à la base, pis bon j’apprends beaucoup en faisant tout ça, et j'ai encore des idées à foison pour le gameplay..etc..
Très bonne idée, je note ça sur mon bloc ! un cube pour la tête, quatres outres pour les pates et hop! merci
Alors le dépliage des UV seraient une formalité, que des faces carrées, séparée, facile à arranger les unes à coté des autre. c'est en effet pour la GI que ça coince..
Admettons j'ai toute mes cases avec ses faces à plat, toutes sur une seul map ( ou 2-3 fonction de la taille). Pour chaque case faire comme un render cubeMap, de 4x4 pixel ( + ou -), j'applique les rendus aux coordonnée correspondante de la case, sur l'unique texture. Et j'utilise mon principe de pseudo GI de la carrosserie de mon WIP Simu .
Après rapide calcul pour un niveau de 35x35 cases : ( déjà pas mal grand)
- 35*35*5faces =>6125 faces
- 6125 * 8x8 pixels par face => 392 000 pixels nécessaire
- sqrt(392 000) => 626 : texture final possible 1024x1024 px
Avec ça limite je peux faire du calcul temps réel
ça serait pas utilisable pour du reflet nette, mais suffisant pour mon shader.
Merci
Merci l'ami.emile121153 a écrit : ↑09 Nov 2018 16:14J'aimerai pouvoir progresser jusqu'à tes chevilles.
Tu donnes des cours ???
Je trouve ton jeu super et j'aime beaucoup.
Bravo
Pour le progression, cela ne tiens qu'a toi
Quand je suis sur mon (mes) projet, je dois passer 3/4 du temps sur la doc d'unity, et quand elle n'est pas assez détaillée ( notamment pour les shader) c'est Google mon amis. Je me fixe pour objectif de ne jamais utiliser d'asset tout fait : je trouve mieux apprendre en cherchant par moi-même plutôt de décortiquer et comprendre ce qui a déjà été fait. ^^
Sur le quart du temps qui reste, j'en repasse encore au moins 1/3 a tester, refaire, modifier, analyser.. etc Et seulement le dernier tiers du dernier quart c'est pour concrètement du nouveau dans le projet.
Pour revenir a nos moutons ( rho elle était facile celle là ^^), je trouvait le rendu avec les shader de base encore un peu fade, alors remis les mains dans le cambouis pour en faire un petit perso :
Avant . . . . . . . . . . . . . . . . . . . Apres
En tout cas merci a tous pour vos retours!
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
Re: [WIP] Sheep ( un mouton pas si stupide)
Pour la GI, je profiterais du filtrage de la texture pour les dégradés, du coup du 4x4 pixels pour chaque face de cube devraient aller.
Par contre il faut aussi prévoir des marges autour, sinon tu vas avoir du bleeding. Donc au moins 2 pixels de marge autour de chaque bloc, ce qui fait bien un total de 8x8 pixels occupés pour chaque face.
Par contre il faut aussi prévoir des marges autour, sinon tu vas avoir du bleeding. Donc au moins 2 pixels de marge autour de chaque bloc, ce qui fait bien un total de 8x8 pixels occupés pour chaque face.
Re: [WIP] Sheep ( un mouton pas si stupide)
Je vois très bien ce que tu veux dire, pour le bleeding une fois le filterMode sur bilinear ou trilinear.
J'ai fait quelques tests, concernant une pseudo ambiantOculsion.
SANS =>
AVEC =>
Pour l'instant je n'ai fait que la face du dessus des cube, ça donne une petite idée.
par contre à base de renderTexture, ça plombe quand même pas mal le frameRate.
Pour le principe :
- une deuxième camera (camera2) avec un SetReplacementShader, dirigée vers le haut.
- j'ai donc fait un shader de substitution, rendant un zDepth : niveau de gris en fonction de la distance des vertex à la camera2
- je déplace la Camera2 de bloc en bloc et fait un rendertexture
- j'assigne le render texture à une portion d'une texture plus grande avec ReadPixels.
- me sert de cette texture pour reduire l'Albedo dans le shader final.
Le problème c'est que le rendertexture se fait en même temps que le framerate du jeux. Si j'active la V-sync c'est donc 1 rendertexture par frame. En gros à 60fps, si j'ai 60 blocs, chacun s'actualise toute les secondes... Et encre la je ne fait qu'une face. si je fait les 6, chaque face d'un bloc s'actualise toute les 6secondes!
J'arrive bien a faire plusieurs rendu par frame avec une coroutine, mais c'est pas encore ça. Sans V-sync, si je fait 10 rendu à la fois, les fps passent de 2000 a 200, ce qui est logique. Ca n'as pas d'incidence sur les fps une fois la v-sync activé, a condition de ne pas trop faire de rendu a la fois.
Enfin bref, c'est un bon début, mais pas encore au point! ^^
Faut je continue de potasser les renderTexture.
J'ai fait quelques tests, concernant une pseudo ambiantOculsion.
SANS =>
AVEC =>
Pour l'instant je n'ai fait que la face du dessus des cube, ça donne une petite idée.
par contre à base de renderTexture, ça plombe quand même pas mal le frameRate.
Pour le principe :
- une deuxième camera (camera2) avec un SetReplacementShader, dirigée vers le haut.
- j'ai donc fait un shader de substitution, rendant un zDepth : niveau de gris en fonction de la distance des vertex à la camera2
- je déplace la Camera2 de bloc en bloc et fait un rendertexture
- j'assigne le render texture à une portion d'une texture plus grande avec ReadPixels.
- me sert de cette texture pour reduire l'Albedo dans le shader final.
Le problème c'est que le rendertexture se fait en même temps que le framerate du jeux. Si j'active la V-sync c'est donc 1 rendertexture par frame. En gros à 60fps, si j'ai 60 blocs, chacun s'actualise toute les secondes... Et encre la je ne fait qu'une face. si je fait les 6, chaque face d'un bloc s'actualise toute les 6secondes!
J'arrive bien a faire plusieurs rendu par frame avec une coroutine, mais c'est pas encore ça. Sans V-sync, si je fait 10 rendu à la fois, les fps passent de 2000 a 200, ce qui est logique. Ca n'as pas d'incidence sur les fps une fois la v-sync activé, a condition de ne pas trop faire de rendu a la fois.
Enfin bref, c'est un bon début, mais pas encore au point! ^^
Faut je continue de potasser les renderTexture.
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
Re: [WIP] Sheep ( un mouton pas si stupide)
Il faudrait ne mettre à jour la texture que sporadiquement, en étalant le calcul sur plusieurs frames.
Et aussi en désactivant le calcul des ombres au moment du rendertotexture, car ça bouffe pas mal de temps.
Et aussi en désactivant le calcul des ombres au moment du rendertotexture, car ça bouffe pas mal de temps.
Re: [WIP] Sheep ( un mouton pas si stupide)
oui je sais bien et c'est ce que je faisais. Mais plus tu fais de façon espacé l'update de la texture, plus tu vois que ça saccade.
Et même, je faisais en gros un rendu par face de cube, ce qui, même sporadiquement, faisait vraiment beaucoup trop!!
Je suis passé par une autre méthode, qui donne un meilleur ( mais pas parfait non plus) résultat, en étant un peu moins gourmand.
J'ai en gros une subdivision de l'espace en hauteur sous forme de plane, pour chaque plan je fais un renderTexture avec une camera vue de dessus en ortho avec un genre de matteShadow : tout le décor en noir, le plan en blanc et que les ombres en noir. J'applique cette texture sur le plan pour la vue camera principale, en tant qu'alpha.
Toute les couches se superposent visuellement obscurcissant les zone d'ombre du décors.
Avant, sans pseudo AO :
Après pseudo AO:
Ici je n'ai que 20 couches, donc autant de rendertexture, l’actualisation se fait quasi en temps réel. (10 par frame)
Comme j'ai dit, pas parfait, mais ça ira très bien pour l'instant
Je vais voir si je peux pas utiliser les instanciation GPU pour afficher mon terrain ^^
Et même, je faisais en gros un rendu par face de cube, ce qui, même sporadiquement, faisait vraiment beaucoup trop!!
Je suis passé par une autre méthode, qui donne un meilleur ( mais pas parfait non plus) résultat, en étant un peu moins gourmand.
J'ai en gros une subdivision de l'espace en hauteur sous forme de plane, pour chaque plan je fais un renderTexture avec une camera vue de dessus en ortho avec un genre de matteShadow : tout le décor en noir, le plan en blanc et que les ombres en noir. J'applique cette texture sur le plan pour la vue camera principale, en tant qu'alpha.
Toute les couches se superposent visuellement obscurcissant les zone d'ombre du décors.
Avant, sans pseudo AO :
Après pseudo AO:
Ici je n'ai que 20 couches, donc autant de rendertexture, l’actualisation se fait quasi en temps réel. (10 par frame)
Comme j'ai dit, pas parfait, mais ça ira très bien pour l'instant
Je vais voir si je peux pas utiliser les instanciation GPU pour afficher mon terrain ^^
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
Re: [WIP] Sheep ( un mouton pas si stupide)
Bon me suis essayé a l'instanciation mais pas de tesselation possible, donc obligé d'avoir un mesh déjà subdivisé dans mon cas..
de plus niveau perf pour la création d'une base de 80x80 cubes :
Instanciation GPU :
-Mesh de base : cube a peine subdivisé (245vertice/360 tri) pour garder l'effet bombé des cubes ( vraiment limite basse en nombre de poly)
- simple instanciation par GPU des 80x80 cubes
- shader de base avec normalMap.
==> visu moyen, on sent le lowpoly de prés. FPS : 200 - 800 ( de l'un a l'autre aléatoirement)
Création simple de mesh
- mesh de base : cube (24 vertices/12 tri)
- avec la limite du nombre de vertex par mesh, : 4parceles de 1600 cubes chacun ( 38400 vert/parcelle)
- tesselation conséquente de tout ça, arrondi du cube bien propre et adaptatif ( plus subdivisé plus on est pres)
- shader avec normalMap
==> visu nikel, super rond de pres. FPS : 200 une petite demi seconde puis 2500-2800 permanent...
Preuve en image:
Conclusion : grosse perte de temps pour un résultat vraiment moyen. J'ai pourtant fait au plus simple dans l'instanciation ( script et shader de la doc unity + simplification). Ou alors j'ai mal configuré quelque chose..
Enfin bref, je voulais juste vous faire un petit retour d'expérience. Du coup je vais rester sur mon principe à base de mesh.
de plus niveau perf pour la création d'une base de 80x80 cubes :
Instanciation GPU :
-Mesh de base : cube a peine subdivisé (245vertice/360 tri) pour garder l'effet bombé des cubes ( vraiment limite basse en nombre de poly)
- simple instanciation par GPU des 80x80 cubes
- shader de base avec normalMap.
==> visu moyen, on sent le lowpoly de prés. FPS : 200 - 800 ( de l'un a l'autre aléatoirement)
Création simple de mesh
- mesh de base : cube (24 vertices/12 tri)
- avec la limite du nombre de vertex par mesh, : 4parceles de 1600 cubes chacun ( 38400 vert/parcelle)
- tesselation conséquente de tout ça, arrondi du cube bien propre et adaptatif ( plus subdivisé plus on est pres)
- shader avec normalMap
==> visu nikel, super rond de pres. FPS : 200 une petite demi seconde puis 2500-2800 permanent...
Preuve en image:
Conclusion : grosse perte de temps pour un résultat vraiment moyen. J'ai pourtant fait au plus simple dans l'instanciation ( script et shader de la doc unity + simplification). Ou alors j'ai mal configuré quelque chose..
Enfin bref, je voulais juste vous faire un petit retour d'expérience. Du coup je vais rester sur mon principe à base de mesh.
______________________________________________________________
\_______________________ Impossible is nothing _______________________/
Re: [WIP] Sheep ( un mouton pas si stupide)
Maintenant au moins, tu sais
Merci pour ce retour !
Merci pour ce retour !
Dernière édition par Alesk le 20 Nov 2018 19:32, édité 1 fois.
Re: [WIP] Sheep ( un mouton pas si stupide)
Et oui, maintenant je sais, et j’espère que d'autres aussi du coup ^^
Aujourd'hui je décide que je vais en rester là pour le moment sur ce projet, qui m'as pris déjà plus de temps que prévu.
Il m'as permis d'aborder/décourvrir pas mal de sujets :
- Utiliser une image comme base de données
- mettre en place la tesselation
- Test sur l'instanciation GPU
- création sous 3dsMax de normalMap et heighMap
- Utilisation de coroutine que je ne connaissait que peu
- moult connaissances supplémentaires en C#
- etc..
J'ai fait un package du projet pour ceux que ça pourrait intéresser, normalement juste à importer dans unity. Pas sur que tout soit forcément simple à comprendre, rien n'est annoté ou décrit. Mais pour ceux qui se risqueraient au package, n'hésitez pas si vous avez des questions
Il comprend aussi une version hexa au lieu de cube, que j'ai voulu tester mais pas forcément concluant. Du coup moins aboutie. ( l'avantage était les 6 directions possibles au lieu de 4)
Je met aussi en lien Le StandAlone Version Cube et aussi Le StandAlone Version Hexa
Voilà voilà, mais je garde quand même le projet sous le coude, m'y remettrai surement un jours.
En tout cas MERCI a tout ceux qui ont participé et m'ont aider
Et à tout bientôt pour de nouvelles aventures !
______________________________________________________________
\_______________________ Impossible is nothing _______________________/