Ciel sans skybox ou skydome ?
Touriste
Inscrit:
26/04/2011 12:46
Post(s): 17
Bonjour tout le monde !

Je travail sur un petit projet de jeu avec le Blender Game Engine.

Pour matérialiser le ciel et l'environnement lointain, je passe donc par une skybox/skydome. Rien de compliqué là dedans sauf qu'expérimenter sur ce sujet avec BGE m'a soulevé 2 interrogations...

premièrement,Dans BGE un skybox/dome est un mesh. Il est donc possible de l'atteindre si mon personnage arrive en bord de carte, ce qui pose problème. Bien sûr je pourrais augmenter drastiquement l'échelle de la box/dome mais ceci engendre un second problème : La box/dome n'est plus visible. Même en augmentant le end clipping de la camera il y a toujours une "zone morte".

Existe t-il un autre moyen de créer un ciel ?
Comment résoudre ce problème de "zone morte" avec les gros objets ?
Une Idée ?

Contribution le : 11/12/2019 15:58
Créer un fichier PDF de la contribution Imprimer


Re: Ciel sans skybox ou skydome ?
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2371
Hello,
Je suis pas un expert du BGE mais je connais quand même le principe.

Une façon simple (voire simpliste) de copier la location du personnage et de l'appliquer au cube de la skybox.
Ca, c'est le plus basique. Ca marche vite fait (voir post suivant)...


L'autre solution est bien sûr plus complexe et ça dépendra de tes connaissances dans le domaine des shaders... Car une belle skybox comme dans Unity, ça passe par là. Il y a un petit trick mathématique qui fait toute la différence.

Comme c'est peut-être pas quelque chose que tu connais, je t'ai fait un petit blend avec les scripts Python à appliquer sur le cube.
https://drive.google.com/file/d/19fsYOwUC1ZMn_xNSUqPtIMtMx-PIFA7-/view?usp=sharing

Tu peux dé"placer la caméra avec la souris (rotation) et les flèches haut/bas pour avancer/reculer (la caméra ira dans le sens du regard).

Il faut veiller à conserver un cube de taille 1 (la taille par défaut).
J'ai un peu galéré car Blender 2.79b utilise une vieille version d'OpenGL que je connais peu, mais j'y suis arrivé.

Il y a eu une autre chose qui m'a ralenti et que j'ignorais, le BGE discard les objets qui sont en dehors du champ de vue de la caméra. Mon cube, même énorme virtuellement (car sa taille est modifiée dans le shader) disparaissait de façon inexpliquée. J'ai donc "attaché" le cube à la caméra à l'aide d'un script, de façon à copier sa position sur le cube.

Enfin, une petite précision : dans le script ShaderSkyBox.py, j'ai mis une variable (dans le vertex shader) nommée SkyboxScale. Modifie la valeur par rapport au clip de fin de la caméra (ou mieux : récupères-le avec Python, je connais pas assez le BGE pour ça).

PS: j'ai utilisé Blender 2.79b.

Contribution le : 11/12/2019 18:24
Créer un fichier PDF de la contribution Imprimer


Re: Ciel sans skybox ou skydome ?
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2371
Oh, j'oubliais un point important.

La deuxième technique est plus compliquée à première vue sur le plan technique. Par contre, elle te simplifiera la vie pour ton jeu.

Avec cette façon de faire, si tu changes de caméra, par exemple pour une cutscene, tu n'as rien à faire. Le seul truc auquel il faut penser, c'est récupérer la caméra active, celle qui est utilisée pour le rendu (ce que je n'ai pas fait ici, j'ai rentré son nom en dur dans le script FollowCam.py).

Après pour copier la position, on peut le faire avec un script et donc suivre un autre objet... Mais je trouve la méthode du shader bien plus élégante et facile à modifier une fois le shader écrit.

Contribution le : 11/12/2019 18:33
Créer un fichier PDF de la contribution Imprimer


Re: Ciel sans skybox ou skydome ?
Touriste
Inscrit:
26/04/2011 12:46
Post(s): 17
Déjà, merci beaucoup !

Je ne suis pas un utilisateur avancé donc je nage un peu concernant la démo que tu m'as concocté (c'est d'ailleurs très sympa d'avoir pris ce temps pour m'aider!) .
Il va me falloir un peu de temps avant d'intégrer comment ça marche (et pourquoi c'est mieux que la solution 1).

Si je veux faire un jeu avec 2 joueurs ça risque de poser problème par contre non ? A moins de créer une skybox par joueur peut être.

Contribution le : 11/12/2019 19:11
Créer un fichier PDF de la contribution Imprimer


Re: Ciel sans skybox ou skydome ?
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2371
N'hésite pas si tu as des questions sur la démo.

J'ai des connaissances trop basiques sur le BGE, en particulier son fonctionnement interne, pour pouvoir te répondre de façon certaine. Je ne suis pas en mesure, pour le moment de te dire si la solution 1 et/ou la 2 marcheraient en splitscreen.

Normalement, le rendu est une boîte noire à laquelle on ne peut pas accéder. La logique du jeu est alors exécutée avant ou après le rendu, mais pas pendant. Par exemple pour déplacer un personnage, tu le fais avant le rendu de façon à actualiser sa position à l'écran lors du rendu.
Le rendu en splitscreen est fait d'abord pour le joueur 1 puis le joueur 2, mais tu ne peux pas savoir sur certains moteurs quand il passe de l'un à l'autre. Par exemple, tu ne peux pas savoir quand lancer le script qui va déplacer la skybox pour le rendu pour joueur 2, une fois qu'il a fini le rendu pour joueur 1.

Sur un moteur 3D lambda, je sais que la méthode 2 fonctionne bien.
MAIS ! De tels moteurs incluent de base la notion de skybox, ils savent comment la traiter en gros et tu n'as qu'à mettre la texture. Dans le BGE, c'est à toi de la programmer et surtout... en dehors du moteur 3D, ce qui change tout ! Car là, tu deviens dépendant du fonctionnement du moteur dans sa globalité (il n'est pas en mesure de faire la différence entre une skybox et un objet du décor).

Le BGE a cette fonctionnalité (très utile pour les perfs) où il faut que les objets soient visibles par la caméra pour ne pas disparaître. Ca ajoute une contrainte assez pénible pour la skybox et oblige à la faire suivre la caméra active. Sauf que le script ne s'exécute - a priori - pas pendant le rendu... J'ignore comment le rendu en splitscreen peut se goupiller dans le BGE. Donc comment il s'occupe du rendu de deux joueurs.

J'étudierai la question à partir de ma petite démo pour voir comment ça marche dans le cas du splitscreen.



EDIT: je ne sais pas si mon message te l'a fait comprendre.
La solution 2, dans un moteur 3D "conventionnel", est nickel. Tu n'as pas à t'occuper de savoir si ton joueur est en position (0,0,0) ou (1000000000,0,0). La skybox n'est jamais dépendante de la caméra, donc tu peux passer de l'une à l'autre, ça marchera sans que tu n'aies rien à faire. Vraiment rien d'autre qu'ajouter ta skybox.

Pour parler de quelque chose que je connais bien...
Dans le moteur 3D que j'ai commencé à faire, et qui doit proposer 0.5% des capacités du BGE, je peux déjà faire des choses intéressantes. En utilisation, je crée un cube, je lui donne une texture cubemap et c'est tout. Derrière, c'est le shader du moteur qui fait le boulot. J'ai d'ailleurs repris le code pour la démo que je t'ai partagée.
Par exemple je peux très bien faire un splitscreen à la volée en passant de 1 à 4 joueurs, en cours d'exécution. Aucun souci de skybox pour autant en utilisant la solution 2.

Si tu avais la solution 1 dans un moteur classique, là tu ne pourrais pas avoir cette flexibilité aussi facilement.

Contribution le : 11/12/2019 20:40
Créer un fichier PDF de la contribution Imprimer


Re: Ciel sans skybox ou skydome ?
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1614
Citation :
...Mon cube, même énorme virtuellement (car sa taille est modifiée dans le shader) disparaissait de façon inexpliquée.


Je crois que c'est une question d'optimisation:

J'avais fais un test: quand je suis à la vue 1er personne et que je vois un personnage, qui est fragmenté en plusieurs objets (mains, jambes, tête, torse, ...), j'ai constaté cette disparition mais si 90% du membre est hors écran.

Par contre, si je fusionne tout les membres en un seul mesh, ça ne disparait pas.

Pour ton script shader, bibi09: Je ne comprends pas l'effet que ça dois avoir. Quelle est la différence entre augmenter la taille de la skybox à la main et le faire via ton shader ?

Il me semble aussi que l'on peut faire ce genre de chose en indiquant une autre scène en background, dans le panel "scene".

Il faut alors créer une deuxième scène avec la skybox uniquement. Par contre, l'animer ou la faire déplacer sera impossible.

Contribution le : 12/12/2019 12:59
Créer un fichier PDF de la contribution Imprimer


Re: Ciel sans skybox ou skydome ?
OverdOzed
Inscrit:
28/02/2014 17:26
De Résidence
Post(s): 408
Bonjour,

Pour ton problème, tu peux parenter ta skybox à ton personnage en vertex. Ainsi, elle suivra ton personnage mais ne tournera pas en même temps que lui.
http://pasteall.org/blend/index.php?id=52669

Il est aussi possible de mettre le skydome dans une autre scène et de le faire apparaître en arrière-plan dans la scène principale avec l'actuator "scene" > "add background scene". Ensuite, il faut juste que les caméras dans les 2 scènes aient les mêmes rotations.
http://pasteall.org/blend/index.php?id=52670

Mais normalement, si tu as une skybox gigantesque et que tu augmentes assez le end clipping, tu ne devrais pas avoir de "zone morte".

Contribution le : 12/12/2019 14:00
_________________
Créer un fichier PDF de la contribution Imprimer


Re: Ciel sans skybox ou skydome ?
OverdOzed
Inscrit:
23/02/2006 18:10
De Alpes-Maritimes
Post(s): 2371
@Redstar: Oui, je connais le frustum culling mais sur le coup je n'ai pas tilté.


Dans un moteur de jeu classique, il propose des caméras et des skybox sans pour autant savoir ce que tu vas en faire. Tout est déjà intégré dans le moteur.

En donnant le farplane distance au shader, tu es sûr que ta skybox est toujours derrière toute la scène. Que tu fasses ensuite un jeu avec un farplane à 10 ou à 1000, ça fonctionne toujours parfaitement bien sans que tu aies à modifier la taille de la skybox à la main.

Il y a aussi une petite optimisation car le GPU ne dessinera que la partie visible de la skybox au lieu de dessiner toute la skybox qui peut ensuite être recouverte totalement par les objets de la scène. C'est minime mais c'est toujours bon à prendre vu que c'est un shader assez "simple".

Le fait qu'elle soit de taille 1x1x1 facilite aussi la récupération des coordonnées de texture sans avoir à connâitre le scale sur le cube de la skybox. Là encore, pour un moteur de rendu c'est jouissif d'avoir un truc totalement automatisé qui marchera quelque soient les paramètres de caméra.


@Azerblue: Pour du splitscreen, attacher le cube à un vertex ne marchera pas. Le joueur 2 verra le ciel bouger si le joueur 1 se déplace... et encore, en supposant qu'ils restent proches l'un de l'autre.

L'autre piste est probablement plus adaptée.

Contribution le : 12/12/2019 14:37
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Questions & Réponses [non résolu] Array circulaire 1 27 Aujourd'hui 19:22:21
Hook 
Questions & Réponses en sculpt mode 0 14 Aujourd'hui 15:39:07
prometheusx 
Moteur de jeu GameBlender et alternatives [WIP] DeadSigns FPS horreur - Première version disponible !    [1][2][3]...[58] 576 97402 Aujourd'hui 11:11:32
Hook 
[WIP] et travaux terminés [WIP] Teeny Tiny - Story    [1][2][3][4] 38 3616 Hier 22:18:36
Bibi09 
Questions & Réponses Addon pour textures procedurales 2 65 Hier 20:11:35
Crocodile_13 
Questions & Réponses avis animation marche :)    [1][2][3][4] 34 451 Hier 20:03:14
prometheusx 
[WIP] et travaux terminés [terminé] court métrage 2020    [1][2] 13 719 Hier 15:28:29
flahaut 
Questions & Réponses [résolu] Générique, sous-titres etc 3 75 Hier 09:18:02
Corpia 
Questions & Réponses [résolu] Scène prend la couleur du fond    [1][2] 11 132 Hier 08:20:32
Arielboid 
Questions & Réponses [non résolu] Problele d'addon 0 43 Hier 01:52:30
nayther 
Questions & Réponses Addon pour textures procedurales 1 42 01/08 12:22:52
moonboots 
Questions & Réponses hair densité sélection de polys 9 170 30/07 23:18:21
lenogre 
Questions & Réponses [résolu] graph editor et location key frame 7 125 30/07 16:41:18
math_ 
Questions & Réponses les graphs editor :/ 4 119 30/07 11:19:07
prometheusx 
[WIP] et travaux terminés [WIP] Tutoriel vidéo et création de mon prochain court métrage 2 119 29/07 20:32:46
Bibi09 
Le coin des geeks pc bas prix    [1][2][3][4] 38 1636 28/07 21:14:56
Bibi09 
Questions & Réponses mesh pas assez smooth 3 152 28/07 15:10:12
Zear 
Questions & Réponses Clignotement de l'interface de blender 8 739 28/07 12:15:27
zezer 
Le coin des geeks carte graphique Intel(R) HD Graphics et OpenGL    [1][2][3][4] 31 2331 28/07 10:35:13
gedru 
Questions & Réponses Problème perso qui bouge des 2 côtés qu'avec 1 coté de l'armature et pas de l'autre    [1][2] 10 1313 27/07 19:14:45
Rimpotche 

Qui est en ligne
95 utilisateur(s) en ligne (dont 79 sur Forums)

Membre(s): 0
Invité(s): 95


plus...
Nouveaux membres
MattDoolit 3/8/2020
BradyHatch 3/8/2020
ChristianV 3/8/2020
TeresaLahe 3/8/2020
nayther 2/8/2020
math_ 30/7/2020

Meltingman2
29/7/2020
cloclaud 29/7/2020
fantalie 26/7/2020
lenogre 25/7/2020
Dernier Ajout
mirages-preview~0.jpg

Evènements à venir
Aou 7
anniversaire Cem47
Aou 13
Anniversaire Siskas
Sep 8
Anniversaire de ang
plus 267 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2020 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445