Besoin de conseils pour le moteur graphique basé sur BSP 3D [fermé]


8

Je me suis codé un visualiseur OpenGL BSP pour un ancien format de jeu. Il est très similaire au format de fichier Quake 3. Parce que mon intérêt est de développer des moteurs graphiques, je veux développer tout en utilisant la technologie actuelle. Je me tourne donc vers vous, les experts du sujet, pour savoir sur quoi vous concentrer. Je voudrais que ce soit aussi rapide que possible et étant donné que les anciens formats de fichiers sont très simples et ont peu de polygones, je pense que cela devrait être faisable. Voici mes questions:

  1. Éclairage a. Est-il judicieux pour moi d'apprendre l'éclairage des sommets ou dois-je simplement implémenter l'éclairage par pixel à la place? b. Je sais qu'OpenGL a une limite de 8 lumières. Dois-je en réalité n'utiliser qu'un seul de ceux-ci pour la lumière ambiante et le reste de l'ordinateur via des shaders? Sinon, que dois-je faire?

  2. Tri / élimination a. Quel est l'algorithme le plus couramment utilisé pour trier les surfaces à restituer. La complexité n'est pas vraiment un problème. Je veux savoir ce qui est actuellement utilisé et comment afficher uniquement les choses que je peux voir. J'ai vu un certain nombre d'algorithmes décrits comme l'algorithme du peintre et je me demande ce qui a le plus de sens pour la géométrie basée sur BSP. b. Si j'ai des textures avec des masques alpha, on m'a dit que le tri avait une sorte d'implication dans ce processus. Comment puis-je leur permettre de s'afficher correctement dans l'espace 3D?

  3. Pipeline graphique a. Dois-je envoyer mes données de géométrie via des VBO? Est-ce la norme utilisée aujourd'hui? b. Si j'ai un certain nombre de "régions", peut-être 200-300, dois-je trouver un meilleur moyen de les envoyer au GPU sans envoyer de 200-300 morceaux. Dois-je les combiner en un seul et garder une référence associée à chacun.

D'autres conseils pour le rendu basé sur BSP et des choses de cette nature?

De plus, si j'ai dit quelque chose de incorrect, veuillez me corriger. Je suis cette personne qui préfère être corrigée et légèrement embarrassée qu'ignorante et ignorante.

Merci pour votre temps. J'apprécie vraiment cela.


Envisagez-vous de mettre tous les triangles de votre scène dans le BSP, également dynamiques comme des personnages animés ou des objets en mouvement? Un BSP n'est pas très bon quand il s'agit d'objets dynamiques.
Maik Semder

N'ayez pas le temps pour un commentaire complet pour le moment, mais consultez icculus.org/twilight/darkplaces/technotes.html et n'hésitez pas à sauter sur #darkplaces sur irc.anynet.org et posez vos questions à LordHavoc / autres. .
user_123abc

Réponses:


1

Si vous êtes - comme vous le dites - intéressé par la technologie actuelle :

1) Éclairage: éclairage par pixel, certainement. Si vous voulez regarder le rendu de la génération actuelle, vous allez envisager d'écrire des vertex et des pixelshaders. Aussi simple que cela. Ils offrent une flexibilité presque illimitée et ne sont pas beaucoup plus difficiles à utiliser que le pipeline à fonction fixe, si vous commencez à les apprendre correctement. La limite de 8 lumières d'OpenGL ne s'applique qu'aux anciennes configurations de pipeline à fonction fixe. N'allez pas dans cette voie, apprenez OpenGL Core et oubliez tous les trucs glBegin / glEnd datés.

2) Tri / Culling: Pour commencer: ne triez que si vous avez besoin de transparence. Ne supprimer que les objets qui se trouvent en dehors du tronc de vue.

3) Si vous utilisez OpenGL, utilisez les VBO et les VAO.

-

Unasked: si vous créez une visionneuse pour un format BSP à l'ancienne (je soupçonne quelque chose d'un moteur ould Valve / ID?), Vous devriez pouvoir vous débrouiller avec le dessin du niveau entier sans aucune optimisation (élimination / bsp ) du tout et toujours obtenir une fréquence d'images complète sur du matériel moderne;)

Astuce OpenGL: Obtenez la 5e édition d'OpenGL Superbible. Cela vous apprendra à faire OpenGL moderne et ne troublera pas votre esprit avec des choses que vous découvrirez plus tard comme obsolètes.


-3

1.a L'éclairage par sommet est plus facile que l'éclairage par pixel (l'éclairage par sommet est intégré à OpenGL, l'éclairage perpixel nécessite un shader personnalisé).

1.b Si vous avez huit lampes, utilisez-les! Vous devrez cependant calculer les lumières visibles.

3.a Utilisez VBOS. N'utilisez jamais glBegin / glEnd (sauf si vous utilisez des listes d'affichage, mais dans votre situation, les VBO sont la meilleure solution)

3.b Vous ne devez pas vous soucier des performances pendant que le programme est en cours de développement. Surtout avec le matériel d'aujourd'hui. Alors, envoyez vos morceaux 200-300.

Je ne connais pas suffisamment les cartes BSP pour vous aider avec vos autres questions.


3
-1 pour 3.b. Je déteste le mantra "ne vous inquiétez pas pour les performances" qui est incorrectement appliqué à tout. Il a sa place, car ne passez pas 50% du temps de développement à faire tourner quelque chose 2% plus vite. Mais lors de la conception de systèmes plus grands, il est bon d'avoir un plan efficace. Les données envoyées au GPU en blocs de 200 à 300 feront probablement travailler le processeur et le GPU inutilement plus dur que si elles étaient toutes envoyées en un seul bloc.
AttackingHobo

@AttackingHobo +1
Jonathan Connell
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.