apajot / voc

0 stars 0 forks source link

masquage #16

Closed abakleriche closed 6 years ago

abakleriche commented 6 years ago

Le problème original a été signalé par Didier : dans une scène comportant un avion, et un leurre en premier plan (1 m en avant de l'avion environ), le leurre est masqué par l'avion sur l'image SE-FAST-IR. J'ai reproduit le problème en remplaçant le leurre par une simple face au format BDD. Dans le scénario good.scnx, aucun objet n'est en précision étendue et tout se passe bien : le leurre apparaît devant l'avion. Le scénario bad.scnx est le même, mais les objets sont dans des groupes de précision étendue. Le leurre apparaît masqué par l'avion. masquage.zip

apajot commented 6 years ago

On a l'explication du problème : les quads imposteurs d'un groupe en précision étendue sont positionnés à l'avant de la bounding box des objets du groupe. Du coup, dans cette configuration, l'imposteur de l'avion est positionné devant celui du leurre, et cache le leurre.

Seulement on a pas trouvé de solution qui soit à la fois simple et robuste : à partir du moment où les objets à l'intérieur d'un groupe ne sont pas convexes, il peut y avoir des soucis en les représentant par des plans. Par exemple, mettre les imposteurs au milieu des bounding box fonctionnerait dans le cas précis du problème, mais ne fonctionnerait plus si on voyait l'avion depuis le 3/4 avant, l'aile étant cachée par le leurre.

La solution robuste serait de "merger" les groupes dont les boites englobantes s'intersectent. Mais le faire en assurant la précision demandée n'est pas triviale s'il y a contrainte de performance, car il faut pouvoir rendre à des résolutions qui dépendent de la configuration des boites. Hors, ceci nécessiterait de créer des FBOs à la volée, ce qui est relativement coûteux (de l'ordre de la seconde). Si le cadre d'utilisation permet ce genre de surcoûts, on peut examiner cette solution de plus près.

apajot commented 6 years ago

Pour mémoire pour plus tard au cas où, une autre approche possible qui, après discussion avec Lionel, semble prometteuse : Faire que le noeud SubPixelNode rassemble tous les groupes sous-pixelliques. Lors du culling, il passe en revue tous les groupes. Pour un groupe qui doit être rendu via un imposteur, on crée une caméra avec le frustum associé au groupe, comme actuellement, mais on ajoute dans le sous-graphe de la caméra tous les groupes dont la bounding-box intersecte la bounding-box du groupe courant. Ainsi, on est sûr que les objets apparaîtront, même si ce n'est pas à la précision demandée dans tous les cas.

Les choses à examiner : les artefacts quand deux groupes sont accolés l'un à l'autre, et qu'un objet sous-pixellique est alors en parti rendu via son propre imposteur, et pour une autre part via l'imposteur d'un autre groupe, qui n'a pas la même résolution : comme on a de toute facon des résolutions sous-pixelliques, les artefacts devraient être très limités.

Cela ne règle pas le soucis d'un objet rendu en sous-pixellique qui intersecte un objet qui n'a pas à être rendu en sous-pixellique.

abakleriche commented 6 years ago

Et est-ce qu'on ne pourrait pas inclure dans le groupe d'un objet supixellique tous les objets dont la bounding box intersecte la sienne ? A demain chez OKTAL SE. On pourra en rediscuter.

apajot commented 6 years ago

Oui, en effet, bonne idée ! Ca serait la solution idéale pour régler aussi le deuxième soucis d'un coup d'un seul. Le problème que je vois c'est le coût de la combinatoire pour des scènes complexes (qui se fait moins sentir quand on se restreint aux objets qui sont en sous-pixelliques, vu que c'est peu). On pourrait peut-être imaginer une option pour activer ou désactiver ce système.

à demain.

abakleriche commented 6 years ago

Le test VISEO original fonctionne correctement avec la dernière version du workbench. Par contre Didier a toujours le problème dans VHEDAA. Et pourtant la configuration géométrique est très similaire à ce test (à part que le leurre est un vrai leurre au lieu d'une face au format BDD). Je te joins le fichier log issu de VHEDAA et les données associées pour rejouer le scénario avec setk_player. Le zip contient également les quelques images obtenues sous Linux qui mettent le problème en évidence : le leurre est masqué alors qu'il est devant le fuselage de l'avion (cf. plan distance) - le comportement est identique sous Windows) masquage.zip Ci-joint également une version à jour du setk_player: setk_player.zip

apajot commented 6 years ago

J'ai reproduit le problème avec la version envoyée en février. Je te joins le résultat que j'obtiens avec notre version courante (sur laquelle ca fonctionne, on a corrigé des choses, je pensais pas que ca aurait eu un impact mais visiblement si.).

masquage.zip

abakleriche commented 6 years ago

Problème résolu dans la livraison finale du 28/03/2018