PDA

Voir la version complète : Horizon...



tcamprubi
01/11/2006, 12h18
Bonjour,

Encore un casse tête en Xpresso :
Je calcul régulièrement des images en 440*330 pixels. J'aurais besoin de connaitre pour chaque image la hauteur de l'horizon (en pixels) par rapport au haut de mon image.
Je ne vois pas du tout comment il faudrait s'y prendre. une idée ?

kald01
01/11/2006, 12h26
[solutions à deux balles]Dans le vue éditeur tu peux ou non faire apparaitre ta ligne d'horizon, il te suffit alors de faire un rendu en vue éditeur, puis dans photoshop the gimp, paint, etc...tu regardes à quelle hauteur se trouve ta ligne d'horizon. Ou alors si ta caméra n'a pas de rotation en P, il y a de forte chane que ta ligne d'horizon se trouve à la hauteur de ta caméra.[/solutions à deux balles]

tcamprubi
01/11/2006, 12h57
oui, solution à deux balles j'en conviens, même si je salue le temps pris pour la coucher sur un post... :poucehaut:
Mon problème si tu veux vient du fait que je rends en batch 10 projets par nuit, ce qui impliquerait de recalculer à chaque fois une vue avec la ligne d'horizon. En plus, je cherche une solution "propre" qui fonctionne sans travail supplémentaire.
Je pense que ce doit être possible en Xpresso, puisque c'est bien calculé en interne dans le logiciel.
J'ai essayé quelques idées, mais rien de concluant pour le moment

Jean-Laurent
02/11/2006, 09h32
Juste une idée comme ça, mais à concrétiser.

Un calcul mathématique simple doit pouvoir se faire à partir des données de la caméra.
Angle de prise de vue et position de celle-ci.
Si j'ai un peu de temps j'y jette un oeil.

tcamprubi
02/11/2006, 10h38
Oui, je suppose que c'est possible, mais sincèrement, je n'ai aucune idée de la méthodologie à mettre en place.
Ca fait appel à des notions mathématiques qui sont bien loin derrière... :wink:

Jean-Laurent
02/11/2006, 11h12
Les projections c'est pas vraiment mon domaine non plus mais là, ça semble assez simple.

Les seuls facteurs qui interviennent sont l'angle de la caméra ("field of View", je note f) et la rotation de celle-ci
suivant P.(Je note P). Evidemment, si tu la places de biais... :?
L'horizon étant un plan infini la position (X,Y,Z) n'a pas d'importance, pas plus que les autres rotations.
Quant aux distances focales etc... comme elles sont simulées, c'est sans intérêt également.

La formule qui marche bien est donc simplement: (f/2 + P )/(f/2 - P) = h / (H - h)
h: Ce que tu cherches en Pixel. (Au pixel près pour le calcul). Et H la hauteur de ton image (330).

Le seul hic c'est que les valeurs de "field of View" annoncées par C4D ne correspondent pas à la réalité. :?:
Pire, elles ne sont pas proportionnelles.
Ex: Pour 90° C4D indique 106.398, pour 45° ,57.4 et pour 22.5° C4D affiche 33.5°. :?:
Il faudrait plus de renseignement sur la signification physique de ces valeurs.

En attendant, je peux toujours jetter un oeil sur un modèle expérimental de la courbe correspondante.

Mais il y a peut-être beaucoup plus simple. :oops: :roll:

tcamprubi
02/11/2006, 12h12
Euh, oui, j'espère qu'il y a plus simple... :oops:
parce que là, moi, je nage un peu à vrai dire (mon amour propre m'invite à effacer cette phrase, mais une certaine probité m'oblige à la laisser... :wink:
Je cherche toujours de mon côté, si jamais je trouve une solution (ce qui m'étonnerait) je post...
merci pour ton aide

Jean-Laurent
02/11/2006, 12h41
Le seul hic c'est que les valeurs de "field of View" annoncées par C4D ne correspondent pas à la réalité. :?:
Pire, elles ne sont pas proportionnelles.
Ex: Pour 90° C4D indique 106.398, pour 45° ,57.4 et pour 22.5° C4D affiche 33.5°. :?:
Il faudrait plus de renseignement sur la signification physique de ces valeurs.



C'est tout simple. :oops:
Le field of view correspond à l'angle horizontal, pas à l'angle vertical qui nous intéresse pour la formule.
Comme le format est 4/3, on peut calculer f sans problème.

f= 2*atan (tan("field"/2) *(3/4))

Je finalise tout ça et je t'envoi la méthode finale.

paspas
02/11/2006, 13h06
salut


si ta caméra n'a pas de rotation en P, il y a de forte chane que ta ligne d'horizon se trouve à la hauteur de ta caméra

pour citer kald

et donc si angle = 0 la ligne d horizon doit etre une proportionelle entre la hauteur de camera et la taille de l'image

si l angle p <> de zero attention jean-laurent une tangante 90 ou pi/2 est egale a l' infini si mes souvenir trigonometrique sont exacte
et je pense pas que c4d vas apprecier

paspas

Jean-Laurent
02/11/2006, 14h11
salut


si ta caméra n'a pas de rotation en P, il y a de forte chane que ta ligne d'horizon se trouve à la hauteur de ta caméra

pour citer kald

et donc si angle = 0 la ligne d horizon doit etre une proportionelle entre la hauteur de camera et la taille de l'image



Je n'en suis pas certain. :wink:
C'est un plan infini, donc la hauteur de la caméra n'a pas d'importance.
Si P=0, la ligne d'horizon sera toujours au milieu, enfin il me semble.

Voilà l'idée:
http://cinema4d.chez-alice.fr/angles.jpg

Ca marche pas trop mal, mais à 5 pixels près. :o
Peut-être un arrondi de calcul, il faut que je vois ça avec Xpresso.

Edit: Des erreurs dans mon image :oops:, je corrige dans les posts suivants.

paspas
02/11/2006, 14h42
C'est un plan infini, donc la hauteur de la caméra n'a pas d'importance.

la ligne dhorizon se situe tj au niveau de l' oeil non ????

c4d ne suivrait pas les regle de la perspective ?? :D

paspas

Jean-Laurent
02/11/2006, 15h00
la ligne dhorizon se situe tj au niveau de l' oeil non ????

c4d ne suivrait pas les regle de la perspective ?? :D

paspas


C4d suit bien les règles de la perspective, mais la ligne d'horizon est toujours "horizontale". :D
Quelque soit la hauteur à laquelle on se place.

Si P=0, elle sera donc toujours au niveau de l'oeil, c'est à dire au milieu de l'écran, quelque soit la hauteur.

paspas
02/11/2006, 15h12
mais la ligne d'horizon est toujours "horizontale" jai jamais dit le contraire :lol:

j ai pas c4d ici* sais pas verifier moi meme



Si P=0, elle sera donc toujours au niveau de l'oeil, c'est à dire au milieu de l'écran, quelque soit la hauteur.

de l' ecran mais pas de l'image ??

et meme si le cone de vision de la camera* traverse le sol ????

Jean-Laurent
02/11/2006, 16h26
Sans C4D sous les yeux, c'est sûr, c'est difficile à imaginer. :coup:
Mais effectivement, le cone de vision peut traverser le sol, la ligne
restera au milieu.
Si on est en dessous du sol, le sol devient plafond. :D

J'ai fais un Xpresso, mais je tombe à 4 pixels près avec une image de 800*600.
Je pense que dans mon modèle ci-dessus, j'ai oublié un détail, le sinus de l'angle
entre la caméra et le sol qui doit jouer sur la projection.

Je corrige ça, quand j'aurai le temps, ça devrait marcher.

Jean-Laurent
02/11/2006, 17h47
Voilà, ça marche. (Au pixel près, il n'y a plus qu'à arrondir).
C'était une grossière erreur de calcul. :oops:

f= 2*atan (tan("field"/2) *(3/4))

Et le fichier avec l'Xpresso:
http://cinema4d.chez-alice.fr/angles.c4d

J'ai fais ça pour une image 800*600 mais évidemment ça marche pour tous les formats.
Il suffit de modifier la valeur 600 dans la formule Xpresso, voir mieux de rajouter un
petit noeud.

Curieux de savoir, ce que tu vas faire de ça. :?:

Edit: :oops: Ca ne marche pas encore tout à fait. Je me suis un peu emballé là,
Ca marche aux limites, encore quelques corrections et ça devrait le faire. :mrgreen:

Reedit: Ca y est, ça marche au poil. :boss:
La formule est : h = H*(1/2-tanP/(2*tan (f/2)))
Je me fais vieux. :wink:

kilian
02/11/2006, 22h29
Moi quand je me pose en haut d'une colline, l'horizon ça me fait rêver : les courbes, les nuances du ciel, les brumes qui estompent cette ligne imaginaire où le regard se perd ...
Savoir que je comptemple H*(1/2-tanP/(2*tan (f/2))), comment dire ... Ca casse un poil l'ambiance ! :)

Voilà ! C'était juste une petite parenthèse, qui n'a rien à faire ici d'ailleurs :wink:

Bon boulot Jean-Laurent ! :poucehaut:

Aurety
02/11/2006, 22h46
pffff.... mort de rire patrice !! :lol: :lol:

Jean-Laurent, tu arrêtes ca tout de suite ou je te bannis à vie ! C'est pas normal d'être aussi balaise ! :arg:

tcamprubi
02/11/2006, 22h50
Excellent jean-laurent !!
franchement, j'aurais jamais trouvé çà tout seul, une question par contre : le fichier, c'est le bon ou il y a quelqueschose à remplacer genre une formule qui serait mauvaise ?
Celle qui est bonne h = H*(1/2-tanP/(2*tan (f/2))), je ne la vois pas dans les noeuds de formules... ?

Non a priori, ca a l'air de fonctionner... Je suis épaté !! mille merci et franchement BRAVO !! :prie:

Jean-Laurent
02/11/2006, 23h42
Moi quand je me pose en haut d'une colline, l'horizon ça me fait rêver : les courbes, les nuances du ciel, les brumes qui estompent cette ligne imaginaire où le regard se perd ...



Je vois ce que tu veux dire.
Effectivement la rotondité de la Terre entraîne un calcul un poil plus compliqué.
La hauteur est à prendre en compte, plus on est haut, plus on voit loin.
Pour les nuances du ciel, liées au phénomène de diffusion un dégradé exponentiel devrait faire l'affaire.
Le phénomène de condensation ou de liquéfaction devrait pouvoir être simulé.
Mais "imaginaire"??? C'est quoi?



pffff.... mort de rire patrice !! :lol: :lol:

Jean-Laurent, tu arrêtes ca tout de suite ou je te bannis à vie ! C'est pas normal d'être aussi balaise ! :arg:



C'est des maths de collège. :oops: Mais merci quand même. :poucehaut:
Pour le bannissement c'est toi qui vois, vu qu'en plus c'est toi qui m'a sorti du bac.




Celle qui est bonne h = H*(1/2-tanP/(2*tan (f/2))), je ne la vois pas dans les noeuds de formules... ?

Non a priori, ca a l'air de fonctionner... Je suis épaté !! mille merci et franchement BRAVO !! :prie:


Je n'écris pas toujours ce que je voudrais écrire.
Mais le fichier est à jour.

Aurety
02/11/2006, 23h56
:cry2: des maths de collège... Dire que j'ai un bac scientifique... :cry2: :cry2: