À l'aide de PhysX, comment puis-je prédire où je devrai générer des formes de collision de terrain procédurales?

8

Dans cette situation, j'ai des valeurs de hauteur de terrain que je génère de manière procédurale. Pour le rendu, j'utilise la position de la caméra pour générer une carte de hauteur de taille appropriée. Pour la collision, cependant, j'ai besoin de générer des champs de hauteur dans les zones où les objets peuvent se croiser.

Ma solution potentielle actuelle, qui peut être naïve, consiste à parcourir tous les acteurs de la physique "éveillés", à utiliser leurs limites / étendues et vitesses pour générer des sphères dans lesquelles ils peuvent résider après une mise à jour physique, puis à générer des valeurs de hauteur pour des plages englobant des groupes en cluster d'acteurs. Cependant, la plupart de ces données sont probablement déjà calculées par PhysX.

Existe-t-il une API, peut-être un ensemble de requêtes, même des rappels du système spatial, que je pourrais utiliser pour prédire où les valeurs de hauteur du terrain seront nécessaires?

Sion Sheevok
la source
Il me semble que vous avez déjà codé la meilleure solution. Vous ne savez pas comment PhysX fonctionne, vous pouvez peut-être plutôt avoir des déclencheurs en forme de boîte englobante sur vos morceaux de terrain et générer les formes de collision si quelque chose entre (déclenche) cette boîte. Fondamentalement, ce que vous faites, mais dans l'autre sens et avec les calculs de collision PhysX.
aéroson

Réponses:

0

Si vous générez des maillages à partir de vos données pour le rendu, vous pouvez transmettre le maillage à PhysX en tant que maillage de collisionneur. Cela signifie que physX et votre moteur de rendu font référence au même objet coupant les frais généraux.

Ce gars sans-abri
la source
1
Il n'est pas approprié de supposer que le terrain visible est le seul terrain avec lequel les objets peuvent entrer en collision. Le problème consiste à identifier rapidement quelle plage de terrain pourrait être heurtée afin que des formes de collision puissent être générées pour eux à la demande.
Sion Sheevok
1
en.wikipedia.org/wiki/Octree divisant les données mondiales en cubes et en les "découpant" partout où vous avez une entité de collision libre, vous pouvez ensuite appeler les données de terrain dans une très petite zone avec très peu de frais généraux. Voici un exemple utilisant des arbres quadruples pour la collision de particules 2D mais le concept est le même pour Octrees mais avec une dimension supplémentaire. Cela permettrait également à des objets individuels pouvant entrer en collision librement d'entrer en collision les uns avec les autres. youtube.com/watch?v=fuexOsLOfl0 Vous pouvez ensuite générer de très petits collisionneurs à partir des données de terrain à proximité des objets collidables gratuits
That Homeless Guy
1
Je connais bien les octrees et le partitionnement spatial - PhysX le fait déjà en interne. J'ai besoin d'informations de PhysX concernant son système de partitionnement spatial afin de pouvoir générer des formes de collision de terrain là où elles sont nécessaires car le terrain est procédural.
Sion Sheevok
1
Vous manquez le point. Je génère des données pour le terrain. J'échantillonne ces données pour créer un champ de hauteur. J'ai besoin de prédire où les données de terrain sont nécessaires. S'il y a un objet à (-100,0, -100,0), je dois générer un terrain près de (-100,0, -100,0) avant de simuler la physique. J'ai également besoin de générer une région de terrain suffisamment grande, sinon un objet peut se déplacer au-delà d'une région et se retrouver en dessous de l'endroit où le terrain serait s'il avait été généré dans cette région. PhysX doit déjà suivre ces informations afin de prédire les collisions potentielles - j'ai besoin de ces informations. Je ne sais pas si / comment le faire.
Sion Sheevok
1
C'est le travail autour de la méthode que j'ai décrit dans ma question, oui. Je demande si je peux obtenir le travail que PhysX a déjà fait, afin que je ne calcule pas de manière redondante les mêmes résultats. Je n'ai pas encore trouvé de moyen, mais je ne connais pas très bien l'API PhysX sans licence.
Sion Sheevok