Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - h0bby1

Pages: [1] 2 3 ... 6
1
Code / Re : Ultra-violets
« on: 22 February 2013 à 00:57:58  »
sinon a priori je viens de trouver une piste concernant cette histoire d'energie contenue dans un spectre, j'ai trouvé en recherchant des keyword dans l'articles sur la distribution spectrale dans les pixels CIE =)

http://fr.wikipedia.org/wiki/Densit%C3%A9_spectrale_de_puissance , http://en.wikipedia.org/wiki/Spectral_density

densité spectrale de puissance, et c'est apparement basé sur le resultat d'une transformée de fourrier au carré =)

j'avai remarqué ca, j'avai fait un genre d'effet pour les worldchart quand j'etais dans deviance (qui n'est jamais sorti dailleur lol) j'avai fait un genre de tunel qui affichai les amplitude par frequence un peu comme un equalizer basé sur les series de fourrier, et j'avai remarqué que les frequences basse ou aigue je ne sais plus, avait des valeurs beaucoup elevée, qui avait l'air de s'applatir a peu pres en faisant une racine carrée sur le resultat de la transformé de fourrier, apparement la bonne fonction ca a plutot l'air qu'il faut les mettre au carré, mais c'est peut etre pas lié a la densité spectrale

mais ya quand meme un certain rapport de puissance en terme d'energie qui apparait avec les series de fourrier sur un signal, qui n'est pas directement basé sur une integrale de sinus, j'ai regardé plusieur pages, et ca a bien l'air d'etre une fonction qui part de la frequence, meme si au final ca utilise une integrale, c'est pas une integrale de fonction sinus mais d'une fonction qui depend de la frequence/amplitude comme le resultat d'une serie de fourrier, et donc c'est sensé etre independant du type de signal audio ou lumiere

mais j'ai pas l'impression que la fonction pour calculer le pixel CIE en fonction de la distribution spectrale soit l'equivalent d'une serie de fourrier d'un point de vue energetique , ou que ca prenne vraiment en compte l'energie totale du signal composé de plusieur frequence ou comment les operation modifient sa densité spectrale =)  si par example on veut avoir une ampoule de 50W et comment ajouter ou enlever certain spectre modifie cette puissance, le parametre pour calculer le pixel il doit etre normalement en watt/nm qui a a voir a priori a cette densité spectrale

mais si on considere que les valeurs calculée par une transformée de fourrier on a voir avec la densité spectrale de facon plus ou moins directe, ce qui a l'air d'etre le cas ( " Les propriétés de la transformée de Fourier impliquent que la densité spectrale est la transformée de Fourier de l'autocorrélation." ), ca voudrai dire que il faudrait appliquer certains coefficiants a l'amplitude qu'on donne pour ajouter la longueur d'onde au pixel, qui depend de la densité spectrale de la longueur d'onde en question, du meme ordre que la difference qu'il ya entre les valeurs renvoyées par la serie de fourrier, prenant en compte qu'une onde de frequence superieure aura un volume audio ou luminosité/puissance plus important et contribuera de facon plus grande a la puissance spectrale de la source de lumiere

la meilleur facon que je vois pour visualiser c'est considerer que l'onde serait un genre de ficelle, et qu'on etirait la ficelle qui represente le signal sur 1s, la ficelle serait plus longue sur un signal de frequence elevée, en considerant que la repartitions des photons est lineaire sur la longueur de la ficelle, ca veut dire que ya plus de photon/seconde sur une frequence elevée, et qu'il faudrai une ficelle plus longue pour representer 1s d'un signal de frequence plus elevée, ca aurait avoir avec la longueur totale de la courbe sur une periode de temps donnée ou quelque chose du genre, ce qui n'est pas vraiment en correlation avec l'integrale de la fonction sur la meme periode, mais surement plus ou moins proportionel a la frequence, 2 sinus ont une longueur 2 fois plus grande que 1 sinus, donc 2 fois plus de densité spectrale sur une frequence double ou quelque chose comme ca, mais ca doit pas etre tout a fait correct mais ca doit pas etre tres loin non plus conceptuellement

2
Code / Re : Ultra-violets
« on: 21 February 2013 à 22:06:17  »
sinon pour les coordonée chromatiques CIE, d'apres plusieurs sources convergeante, on peut calculer donc un pixel CIE XYZ a partir d'une distribution spectrale avec cet algorythm

Code: [Select]
   
 for (i = 0, lambda = 380; lambda < 780.1; i++, lambda += 5) {
        double Me;

        Me = (*spec_intens)(lambda);
        X += Me * cie_colour_match[i][0];
        Y += Me * cie_colour_match[i][1];
        Z += Me * cie_colour_match[i][2];
    }
    XYZ = (X + Y + Z);
    *x = X / XYZ;
    *y = Y / XYZ;
    *z = Z / XYZ;



la fonction spec_intens(lambda) ; renvoi l'amplitude de la frequence lambda, la boucle parcours tout le spectre visible avec la color table, le source complet est ici ( http://www.fourmilab.ch/documents/specrend/specrend.c )


donc par example, si je ne m'abuse, si on enleve la derniere partie

    XYZ = (X + Y + Z);
    *x = X / XYZ;
    *y = Y / XYZ;
    *z = Z / XYZ;

et qu'on garde juste les valeur X Y Z tel qu'en sortie de la boucle, en toute theorie, on devrai pouvoir ajouter ou supprimer une longeur d'onde de la valeur du pixel en faisant l'operation inverse a savoir
Code: [Select]
   
 for (i = 0, lambda = 380; lambda < 780.1; i++, lambda += 5) {
        double Me;
        Me = (*spec_intens)(lambda);
        X -= Me * cie_colour_match[i][0];
        Y -= Me * cie_colour_match[i][1];
        Z -= Me * cie_colour_match[i][2];
}

ou bien juste enlever les valeurs pour la ou les longueurs d'ondes concernée par le materiaux, donc si le materiaux contient deja une valeur XYZ non 'normalisée' , en soustrayants ces 2 valeurs non normalisée et en faisant ensuite a la fin l'operation

    XYZ = (X + Y + Z);
    *x = X / XYZ;
    *y = Y / XYZ;
    *z = Z / XYZ;

pour convertir en RGB, ca devrai donner a peu pres le bon truc non ? ou peut etre un truc m'echape, mais a priori ca l'air de se tenir


mais la 'color matching function' qui est utilisée pour convertir les longeur d'onde elle a l'air limitée au spectre visible par definition et ajustée pour correspondre avec sa perception par les cones de l'oeil, donc pour les uv, a moins d'extrapoler la fonction d'une facon ou d'une autre, ca a pas l'air prevu

http://www.pfk.ff.vu.lt/cie/1931CIE_explanation.htm



la table color_match du code source precedent a priori elle correspond a ces courbes, mais ca a l'air d'arriver proche de zero des qu'on sort du spectre visible, c'est vraiment prevu pour correspondre l'oeil humain, donc les frequences non visible ne sont pas prises en compte

3
Code / Re : Re : Ultra-violets
« on: 21 February 2013 à 21:36:10  »
@h0bby1: il me semble que contrairement aux photons, les ondes sonores de fréquence élevées ont la même énergie à amplitude égale. Ca se vérifie avec l'intégrale du carré d'un sinus.
Disclaimer: je peux me tromper.

le truc c'est que ouais si tu fais une integrale, sur une periode complete t'aura une energie nulle , l'integrale de fonction sinus reviens toujours a zero toute les periodes

mais si par example tu habites a fukushima quand une centrale nucleaire qui explose, les rayons gammas il ont pas une energie nulle, comparé a des spectres electromagnetiques plus basse frequences

dans les calcul de fourrier ya des questions d'energie, meme si j'ai pas vraiment reussi a trouver le fin mot de l'histoire, mais par example j'ai vu que au depart ils refutaient la validité de la transformée de fourrier car il ne peut representer des signaux carrés, mais que en fait ca marche car la difference d'energie entre le signal recomposé a partir d'une serie de fourrier est nulle

donc ya bien des histoires d'energie qui rentre en compte directement dans les series de fourrier, au dela de l'integrale ou d'equation differentielle entre 2 signaux, dans le sens ou tu peux avoir une equation differentielle non nulle entre 2 signaux mais une energie equivalente, donc a priori c'est pas qu'une histoire d'integrale

pareil avec les coefficiant d'absorption de la lumiere on dit si t'as un chapeau noir ca garde la chaleur, mais quelle est la fonction qui permet de calculer cette absorption en fonction du spectre absorbé

peut etre le son c'est pas pareil remarque, mais je vois pas pourquoi ce serai different, d'un point de vue fourier et mathematique, si je prend d'un point de naif, ca doit demander plus d'energie a un haut parleur d'osciller at 40khz qu'a 5khz, mais ca doit etre un truc qui depend directement de la frequence sans passer par l'integrale, car l'integrale d'une fonctions sinus elle reste quand meme toujours dans une certaine fourchette, alors que l'energie totale recue augmente plus ou moins lineairement en fonction du temp , ou alors ce serai a base d'integrale de sinus + 1, mais ca explique toujours pas pourquoi une equation differentielle non nulle pourrai representer une difference d'energie nulle

4
Code / Re : Ultra-violets
« on: 21 February 2013 à 18:48:37  »
autre question au sujet de ce colorspace CIE

si j'ai bien compris comment ca marche, ca utilise une fonction pour transformer un certain spectre de lumiere de longueur d'onde donnée a un triplet xyY

admettons qu'un triplet CIE A contienne less valeur qui correspondent a un certain spectre, et qu'on veuille soustraire un autre spectre contenu dans un autre triplet xyY (B), suffit il de soustraire les 2 triplet xyY pour avoir l'equivalent de soustraire le spectre B au spectre A ? par example si je veux diviser l'amplitude de la longueur violette du spectre contenu dans A par un certain cofficient, suffit il d'avoir la bonne valeur de violet dans le triplet xyY B et soustraire ces 2 nombres ?

dans le cas il pourrai etre util de coder les materiaux avec leur absorbance spectrale, et soustraire cette valeur au rayon de lumiere incident pour avoir un algorythm de reflection spectrale correct ?

ou faire des operations a proprement parler spectrale, par example shifter les frequences contenue dans le spectre incident contenu dans le triplet xyY de la lumiere en utilisant des operations sur des triplet xyY  , pour par example faire l'effet fluorescent ou les frequences vont etre shiftée

en gros les operations sur des triplets xyY permettent elles de faire l'equivalent d'operations sur le spectre de lumiere qu'il sont sensé contenir ? et a quoi correspondent les operation addition/multiplication sur les triplet xyY en terme du spectre de lumiere qu'il sont sensé contenir ?

ou voir coder la perte d'energie sur les frequences du spectre que le material est sensé absorber


en gros l'operation de reflection avec de la lumiere spectrale elle devrait etre comme ca :

http://hyperphysics.phy-astr.gsu.edu/hbase/vision/spd.html#c2


l'inverse de la reflectance spetrale etant equivalent a absorption

ce qui est quand meme proche ce qu'on obtiendrait avec des series de fourrier ou en tout cas des operations sur le  domaine de frequence, mais peut etre le CIE permet de bypasser les series de fourrier pour faire ces operations directement dans le color space, comme leur composant chromatique est basé sur la distribution spectrale de lumiere et la composante 'Y' est l'amplitude

peut etre l'operation exacte serait convertir le pixel CIE vers un domaine de frequence, faire l'operation de soustraction spectrale dans ce domaine et reconvertir le resultat en pixel CIE, comme apparement de toute facon les composantes xy de CIE sont deja basée sur la distribution spectrale, les calculs pour passer de l'un a l'autre on pas l'air d'etre trop compliqués


http://en.wikipedia.org/wiki/Dominant_wavelength

5
Code / Re : Ultra-violets
« on: 21 February 2013 à 16:55:50  »
une question aussi que je me suis toujours posé, je sais pas si c'est directement lié a ca, mais c'est quand meme en relation, j'avai essayé de demandé a un ingé son mais il avait pas l'air de vraiment pouvoir me repondre

ca concerne en gros la conservation d'energie, car un rayon de lumiere a amplitude egale n'as pas la meme energie selon sa frequence, un rayon ultra violet contient plus d'energie qu'un rayon infrarouge et moins d'energie que des rayons gamma, a amplitude egale, et la question c'etait comment savoir l'energie qui est contenu dans un rayon selon sa frequence, et pareil pour l'audio pour les calcul par example pour savoir l'energie qu'une frequence contient pour avoir potentiellement des algorythmes realiste pour manipuler les signaux en frequency domain avec la conservation d'energie, meme dans le moteur de rendu, on considere la difference de conservation d'energie avec la partie qui est absorbée et non reflechie, donc perte d'energie qui est non quantifiée pour un rendu classique

mais par example en utilisant la notation CIE xyY, on pourrait se dire que dans le cas d'objet non emissifs, il pourraient ne pas avoir du tout de composante Y et uniquement les composants chromatiques, car ils n'influeront pas sur la luminosité de la couleur (l'amplitude du signal), et donc juste operer sur les composant chromatiques du rayon de lumiere incident, mais est ce qu'on peut savoir par example la perte d'energie qui s'opere quand on supprime certaine frequence d'un spectre a travers l'operation sur les valeurs chromatique ? ou le changement d'energie qui est operé si on augmente l'amplitude d'un signal d'une certaine frequence, car il doit pas y avoir la meme difference d'energie entre deux rayon d'amplitude differente si ils une frequence differente ?

par example si on doit conserver l'energie d'un signal quand on change sa frequence en changeant son amplitude, si on a un signal de frequence F amplitude A, et qu'on veut conserver l'energie totale du signal en changeant vers une frequence F2 , quelle serait sa nouvelle amplitude ? ou pour l'audio, avoir le meme 'volume' en terme d'energie avec 2 signaux de frequences differente, par example un son aigu devrait avoir une amplitude plus faible pour avoir un niveau energie egal a une frequence basse ? avec des transformée de fourier, j'avais remarqué que l'amplitude des frequences aigues etait plus faible que l'amplitude des basses, et si c'etait lié a des histoire d'energie pour avoir une valeur identique pour toute les frequences a partir de l'amplitude donnée par la serie de fourrier, basé sur la difference d'energie que le signal contient en fonction de sa frequence, soit pour avoir tout les frequences a niveau d'energie egale, ou avoir toutes les amplitudes au meme ordre de grandeur avec des signaux de frequences differente mais d'energie egale

dans le cas d'un moteur de rendu, je pense pas que ca est beaucoup d'importance dans l'absolue dans la plupart des cas la conservation d'energie, mais c'est une question que je me pose depuis un moment et j'ai jamais trouvé vraiment de reponse =)



6
Code / Re : Ultra-violets
« on: 21 February 2013 à 16:04:24  »
c'est sur que la phase sur la lumiere ca doit pas avoir une incidence enorme a part au niveau quantique =) a partpour coder un systeme d'interference lol

apres dans l'absolu ces propriétées prennent du sens dans le cadre ou on veut modiliser un comportement d'une onde pour faire un certain effet etc amplifier un son , ou utiliser le timbre pour modeliser le comportement d'une certaine source audio, pas sur que les propriétés utiles pour modeliser une source sonore soient aussi utiles pour modeliser une source de lumiere , ou que le cerveau accorde autant d'importance aux meme propriétée d'un signal audio et lumineux, ou que ce soit les memes calculs qui donnent des resultats significatifs pour des reverb ou autre effets sur de l'audio ou de la lumiere de facon realiste pour que ce soit util pour modeliser des sources audio/lumineuses et leur comportement et les propriétés significatives pour le cerveau, meme si techniquement a niveau mathematique pure, on peut appliquer des algorythmes de signal audio sur un signal de lumiere, c'est pas dis que les algorythmes soit forcement bien adaptés pour modeliser les propriétés significatives du signal

7
Code / Re : Re : Ultra-violets
« on: 21 February 2013 à 15:41:15  »
Je ne sais pas pourquoi mais je sens que ce site: http://www.brucelindbloom.com/index.html?Equations.html pourra etre utile surtout la partie "Calc"

Sinon un petit peu de brainfuck ....

Postulats de départ :
- la lumiere est une onde comme le son.
- Seul le spectre est entre 400 nm et 750 nm est visible.
- le son se modelise avec :
    - Pitch
    - Loudness
    - Phase
    - direction
    - distance
    - timbre
- Nous ne voyons que ce qui est refletter / emis en dircetion de l'oeil.

Question :

- Pourquoi ne pas modeliser la lumiere comme le son ?
- Pourquoi ne pas assimiler les surfaces comme une reponse fonctionnelle de type "filtre" ?

c'est des truc de psycho accoustique apres, je sais pas si au niveau cognitif le cerveau interprete les ondes de lumiere de la meme facon que le son et si les propriété psycho accoustique audio sont pertinante pour la lumiere

8
Code / Re : Re : Ultra-violets
« on: 21 February 2013 à 15:40:01  »
@Hobby1 : RGB => XYZ et inversement, c'est des combinaisons linéaires via des matrices donc oui, interpoler 2 XYZ donnera la même chose qu'interpoler 2 RGB.

et ca correspond au comportement physique ?

par example, si j'ai un material qui est rouge, je converti le rouge RGB vers XYZ, et le comportement de la lumiere incidente sur le pixel qui doit reflechir uniquement le rouge va etre modeliser correctement en interpolant entre le XYZ de la lumiere et la veleur XYZ du rouge ? ou y aurait il une methode plus sioux pour modeliser le filtrage de certaines frequences de lumiere reflechie par le material?

9
Code / Re : Ultra-violets
« on: 21 February 2013 à 15:32:20  »
a priori ca le meme nombre de dimension CIE c'est XYZ aussi donc 3 composentes, mais je me demande pour faire l'interpolation entre 2 couleurs si ca marche pareil, si t'as un rayon de lumiere couleur X1,Y1,Z1, et un texel couleur X2,Y2,Z2, pour avoir la couleur finale, suffi d'interpoler entre les 2 triplets ? ou ya une meilleur methode pour modeliser l'interaction de la lumiere avec un material de facon plus proche de la physique ou une bete interpolation comme un pixel blending ca donne le bon resultat ?

10
Code / Re : Ultra-violets
« on: 21 February 2013 à 15:08:24  »
et si pour utiliser un texture mapping avec ce systeme, du coup c'est plus du tout la meme facon de proceder si je ne me trompe pas, car du coup chaque texel doit etre une operation sur la rayon de lumiere incidente ? chaque texel doit etre par example une series de cofficients pour savoir comment l'objet interagis avec la lumiere a chaque pixel

11
Code / Re : Ultra-violets
« on: 21 February 2013 à 14:54:45  »
http://www.fourmilab.ch/documents/specrend/ yes :) pas besoin de fourrier apparement

12
Code / Re : Ultra-violets
« on: 21 February 2013 à 14:45:12  »
ha oui ca doit etre fluorescent, phosphorescent c'est quand l'objet continue a emettre de la lumiere meme quand il est plus eclairé

13
Code / Re : Ultra-violets
« on: 21 February 2013 à 14:12:34  »
tu veux faire ca avec des series de fourrier ?

pour les t shirt en discotheque, c'est un materiaux phosphorescent, cad qu'il emet de la lumiere quand il est percuté par des uv, ca doit correspondre a une propriété emission ou luminositée dans un raytracer, c'est pasque le materiaux absobe un certain spectre et le restitue sur une autre frequence visible, donc on a l'impression que uniquement certain objets sont 'eclairé' par cette lumiere

pour faire des operations spectrale sur les frequences normalement il faut utiliser des series de fourrier, si tu trouve les frequence du r g et b, avec une serrie de fourrier tu dois pouvoir composer assez facilement le signal final en spectral

ca peut valoir le coup d'utiliser les spectres 'non visible' si certain materiaux le reflechisse en lumiere visible,et tu peux supprimer ces frequences non visibles au moment de repasser en rgb, si aucun materiaux la reflechi en lumiere visible, elle sera inutile, si certain materiaux la reflechisse en lumiere visible, ca a un interet

avec des series de fourrier, shiter les frequence c'est assez simple, suffi de copier le tableau de frequence sur la gauche, on peut faire des ressampling audio assez efficace avec ca, suffi de transformer les samples en frequency domain, shifter le tableau de valeur sur la gauche, et retransformer en time domain,ca permet aussi de filtrer efficacement des frequences comme un equalizer

14
c'est le code que j'avais d'origine ça... et justement ça ne marchait pas... du moment que j'avais une rotation sur 2 axes
(ce code qui ajoutait l'angle relatif à l'angle absolue avant de tout passer aux quaternions...)

il a fallut que je fasse comme on a dit juste au dessus (call de quaternion relatif) et de multiplier par le quaternion final (absolue) pour obtenir le nouveau quaternion absolue pour que cela marche avec 2 axes de rotations
 bon je me couche
a l'origine t'avais des multiplications de l'angle par les valeurs de l'axe ce qui ne doit pas etre le cas, a aucun moment tu doit avoir v * options._axis[0], et normalement ta pas besoin de mutliplier 3 quaternions pour faire une rotation d'un angle autour d'un axe, c'est bizarre

mais bon si ca marche tant mieux hin lol bonne nuit :D



mais ca c'est
quat.rotateX(quat,quat, degToRad(v* options._axis[0] ));
quat.rotateY(quat,quat, degToRad(v* options._axis[1] ));
quat.rotateZ(quat,quat, degToRad(v* options._axis[2] ));
 
est entierement different de ca

setAngleAxis(quat,options._axis, degToRad(v));

=)

15
c'est normal que tmp3 soit different, mais normalement t'as aucun besoin de multiplier l'angle par les composantes de l'axe

normalement ca

        quat.setAxisAngle(quaternionX,[1,0,0],degToRad(v));
   quat.setAxisAngle(quaternionY,[0,1,0],degToRad(v));
   quat.setAxisAngle(quaternionZ,[0,0,1],degToRad(v));
   
   var tmp = quat.create();
   quat.multiply(tmp,quaternionX,quaternionY);
   quat.multiply(entity._private.quaternion,tmp,quaternionZ);

ca doit etre pareil que

 var tmp2 = quat.create();

quat.rotateX(tmp2,tmp2, degToRad(v ));
quat.rotateY(tmp2,tmp2, degToRad(v ));
quat.rotateZ(tmp2,tmp2, degToRad(v ));

en gros c'est 3 rotations successive de v sur les 3 axes [1,0,0],[0,1,0],[0,0,1]

 quat.setAxisAngle(quaternion,[1,0,0],degToRad(v)); ==  quat.rotateX(quaternion,quaternion, degToRad(v ));
 quat.setAxisAngle(quaternion,[0,1,0],degToRad(v)); ==  quat.rotateY(quaternion,quaternion, degToRad(v ));
 quat.setAxisAngle(quaternion,[0,0,1],degToRad(v)); ==  quat.rotateZ(quaternion,quaternion, degToRad(v ));


mais normalement la bonne fonction pour calculer la rotation d'angle v autour de l'axe options._axes c'est

quat.setAxisAngle(tmp3,options._axes,degToRad(v));

qui est normalement la meme chose que ca :

quat.fromValues(options._axes[0]*sin(degToRad(v)/2),
                           options._axes[1]*sin(degToRad(v)/2),
                           options._axes[2]*sin(degToRad(v)/2),
                           cos(degToRad(v)/2) );



si tu doit calculer 3 rotations differentes autour des 3 axes X,Y,Z , il te faut 3 valeurs comme v separées pour faire les rotations respectives du bon angle autour de chaque axe

et donc avoir

var v1 += (90 * gametime) / 1000.0;
var v2 += (90 * gametime) / 2000.0;
var v3 += (90 * gametime) / 4000.0;

quat.rotateX(tmp2,tmp2, degToRad(v1 ));
quat.rotateY(tmp2,tmp2, degToRad(v2 ));
quat.rotateZ(tmp2,tmp2, degToRad(v3 ));

v1 est l'angle pour la rotation autour de l'axe X,  v2 est l'angle pour la rotation autour de l'axe Y, v3 est l'angle pour la rotation autour de l'axe Z ,mais les modeleurs n'utilisent pas toujours angles[0] pour l'axe X, angles[1] pour l'axe Y et angles[2] pour l'axe Z, ni meme cet ordre de rotation

donc tu peux aussi bien avoir

quat.rotateY(tmp2,tmp2, degToRad(v3 ));
quat.rotateZ(tmp2,tmp2, degToRad(v1 ));
quat.rotateX(tmp2,tmp2, degToRad(v2 ));

qui ne sont pas equivalents, d'ou l'interet normalement d'utiliser un quaternion au lieu de 3 angles

Pages: [1] 2 3 ... 6