Demoscene.fr BBS

Articles et discussions techniques => Code => Topic started by: ponce on 25 April 2017 à 13:10:46

Title: Obtenir depth et albedo avec une photo
Post by: ponce on 25 April 2017 à 13:10:46
Je prends pas mal de photos de textures, et je me demande comment avoir une map d'albedo/diffuse et depth (voire shininess?) à partir d'une photo. Internet liste un certain nombres de logiciel mais je me demande comment font les gens de ce forum  :D
Title: Re : Obtenir depth et albedo avec une photo
Post by: Graindolium on 25 April 2017 à 16:28:30
relief d'une image aux ombrage évité :
2 images(photo ou scanne) du même objet avec positionnement de la lumière différent,( 1 photo , lumière-symétrique,  perpendiculaire verte et rouge)
permet de connaitre 2 intensité qui définisse par équation une normal3D de l'objet,

1 photo lumière de face , évité ambiant occlusion

?comment obtenir un indice de profondeur originel avec des photo où l'objet fournie uniquement sont rendu lighté

texture relief par intégral continu des normals (implique une normalisation, planché à 0

visage pris de face et profile ; alternative sans fariné une tête,
positionnement de point de reperd !  corrélation 3D des vus de l'objet,


de méditation première , j'en conclu qu'il y a de multiple façon facile et plus sophistiquer d'obtenir la normal puis la profondeur,

t'en viendra à boue,
en plusse si tu bosse sur ça prochainement ça m'intéressera d'en étudier les retour j'ai pas encore entamé cette aspect , et même pour faire des visages j'ai pas prévus de passé par là mais ça m'intéresse, pour faire quelques mimétisme de phénotype ou exploré des matières, comportement de réalité impressive ...
Title: Re : Obtenir depth et albedo avec une photo
Post by: ponce on 25 April 2017 à 22:58:03
Beaucoup d'idées merci Graindo, j'avais effectivement pas pensé à prendre le même objet en bougeant la lumière. Ca peut marcher après plusieurs images faut les matcher.

En gros jusqu'ici j'utilisais des photos déjà lightées comme texture diffuse. Je m'arrange que la lumière vienne à peu près du même angle que l'éclairage simulé. C'est pratique de tricher mais ça donne une incohérence entre les objets. Je cherche le petit pas supplémentaire pour éviter les ombres et reflets en trop.
Title: Re : Obtenir depth et albedo avec une photo
Post by: Graindolium on 26 April 2017 à 01:49:58
viens à la vip cette année , si tu viens j'amène mon pc ,j'ai pleins de truc à te montré, et ta surement pleins de truc aussi,
Title: Re : Obtenir depth et albedo avec une photo
Post by: Graindolium on 27 April 2017 à 17:40:15
z sais pas si z vais resté long temps en france à subir chaque années 7 mois d'hiver , cette prison naturel,
si je suis revenu du paradis c'est pour partager,
j'aime toujours le monde imaginaire des demoparty, j'y trouve l'information à la source !
bon maintenant si t'est trop schizo pour te reproduire avec ton esprit et que les demoparty réveil une trop grande souffrance émotionnel  ont peut aussi bien aller se faire un feu de bois dans un coin tranquille de forêt aux bord de la Saône, prendre de la bouffe des bières et de quoi tiré des bar en faisant attention à la météo, et si c'est trop alien strange de voir une moustache à la place d'un pseudo et un avatars  ça fait partie des degrés d'illusion ,
Title: Re : Obtenir depth et albedo avec une photo
Post by: ponce on 28 April 2017 à 12:01:27
Non mais Graindo pourquoi pas si je passe à Lyon je te dirais ! Et pareil si tu passes à Grenoble. Mais au niveau budget et vu que je travaille tout le temps je limite beaucoup les voyages, y'a pas un moment où je travaille pas.
Title: Re : Obtenir depth et albedo avec une photo
Post by: Graindolium on 30 April 2017 à 13:47:58
il suffit de croire que venir me voir fait partie de ton travail !  :o



bon ben moi j'te dis quant j'arrive, mais attention  pas tout de suite !   j'ai beaucoup de travail
quant je travail pas je suis occupé, quant je suis pas non plus occupé je m’occupe de moi, et le reste du temps je suis absent  il faut bien pour travaillé,

qui a pas le temps tout le temps en dehors du temps a eu tout le temps,
une maladie très sérieuse , ce n'est pas avec des mots que ça changera  :'(,

et oui !
c'est comme le choux, quant il est bouillie ça donne la choucroute,  mais au stade où ont en es c'est une choucroute confise
Title: Re : Obtenir depth et albedo avec une photo
Post by: Graindolium on 11 May 2017 à 13:15:51
dure de passé l'éternité tout seul avec ces amis
Title: Re : Obtenir depth et albedo avec une photo
Post by: Zavie on 25 May 2017 à 17:03:32
Je prends pas mal de photos de textures, et je me demande comment avoir une map d'albedo/diffuse et depth (voire shininess?) à partir d'une photo. Internet liste un certain nombres de logiciel mais je me demande comment font les gens de ce forum  :D

Le mot clé que tu cherches est "photogrammetry".
C'est à la mode ces dernières années (Starwars Battlefront de Dice, Kite demo de Epic...), donc tu devrais pouvoir trouver pas mal de publications sur le sujet. J'ai des collègues qui bossent là dessus, et apparemment c'est quand même assez complexe pour mettre en place tout le pipeline.
Title: Re : Obtenir depth et albedo avec une photo
Post by: ponce on 15 June 2017 à 13:22:45
Merci Zavie, je vais voir ce qu'il en est (si j'ai le temps un jour)
Title: Re : Obtenir depth et albedo avec une photo
Post by: Saorel on 16 June 2017 à 15:26:32
Salut, salut,

Alors ca depend beaucoup de ce que tu veux :
- Material acquisition :
https://mediatech.aalto.fi/publications/graphics/TwoShotSVBRDF/code_and_data.html (https://mediatech.aalto.fi/publications/graphics/TwoShotSVBRDF/code_and_data.html) (Fonctionne tres bien - sera bientot un produit Nvidia)
Sinon allegorithmic à sortie un truc super cool il ya 1 mois ou deux, je trouev plus l'article original et celui-ci fera l'affaire : http://3dteamz.com/smartphone-as-texture-scanner/ (http://3dteamz.com/smartphone-as-texture-scanner/)

- Photogrammetrie :
https://github.com/openMVG/awesome_3DReconstruction_list (https://github.com/openMVG/awesome_3DReconstruction_list)
( Perso j'aime bcp openMVG et MVE+SMVS. Pour les payants : Photoscan / RealScan / etc etc )

Pour bien prendre tes photos :
- https://www.youtube.com/watch?v=D7Torjkfec4 (https://www.youtube.com/watch?v=D7Torjkfec4)

Si tu utilises un iPhone ou un SmartPhone utilise l'app : Adobe Lightroom ( en mode Pro, tu pourras alors regler la WB, l'iso et le depth of field ). Bonus: à partir de l'iPhone 6S, tu as aces au DNG.

Voili / Voilou Enjoy !

-S-
Title: Re : Obtenir depth et albedo avec une photo
Post by: Graindolium on 17 June 2017 à 22:50:59
merci Saorel , ça aide pas mal , j'ai découvert des trucs,
un drone qui scanne des habitations...
Title: Re : Re : Obtenir depth et albedo avec une photo
Post by: ponce on 20 June 2017 à 11:13:55
Yes merci Saorel ! Pour l'instant je triche avec des photos direct dans la diffuse map mais un jour, un jour ça sera photogrammetré  :D
Title: Re : Obtenir depth et albedo avec une photo
Post by: Saorel on 03 July 2017 à 13:58:18
B'soir,

Je vous en rajoute un sur la photogrammetrie : https://www.youtube.com/watch?v=XkTaCOQ_OjI (https://www.youtube.com/watch?v=XkTaCOQ_OjI)

Si certains veulent taf sur une prod en utilisant ce genre de technique ... Ca me dis bien d'aidé ...
Contacter moi MP ou un post ici ;-)

tcho!
Title: Re : Obtenir depth et albedo avec une photo
Post by: ponce on 03 July 2017 à 21:47:38
Je fais aussi de l'extraction de normales à partir d'un depth-buffer, et heu ça marche pas super bien.
En gros je filtre avec

-1 0 -1
-2 0 2
-1 0 -1

Pour avoir la dérivée de la depth dans un sens, pareil en vertical. Ca me donne une normale mais ça ne survit pas aux bord très bien. Bref je me demandais si on pouvait avoir mieux avec du non-linéaire.
Title: Re : Obtenir depth et albedo avec une photo
Post by: Graindolium on 03 July 2017 à 23:51:54
ah ben le non-rayon c'est mon-linéaire  :D

pour une normal d'un terrain 2D y a dans la même boucle qu'une convolution mais en plus couteux, un calcule de moyenne en cercle , c'est pas comme un blur mais presque ça devrait brisé les verticales et horizontales comme des métaballes qui font l'amours,
même un calcule d'intégrale pour les profondeurs hypothétique est assez linéaire,

Les normals de mes maps chaos en relief j'avais fait simple , juste un plant par un triangle vectoriel, ce qui est déjà  très bon
Code: [Select]
var pic = relief*this.M[r][u][0];
var v1 = v3_( 1, 0, relief*this.M[r+1][u][0] - pic );
var v2 = v3_( 0, 1, relief*this.M[r][u+1][0] - pic );
var vn = v1.VN(v2);
var pp = v3_( r-this.wd, u-this.hd, pic );
 
var g = vn.produit( lig.Nc(pp) );
avec :
Code: [Select]
N: function(){//normalise
  var g = Math.sqrt( this.x*this.x + this.y*this.y + this.z*this.z );//this.d(v3_(0,0,0));
  if( g != 0 ){ [this.x,this.y,this.z] = [this.x/g,this.y/g,this.z/g] }
 },
VN: function(b){// calcule de la Normal d'un plan défini par 2 vect3, soit une face
  //var [X1,Y1,Z1, X2,Y2,Z2, X3,Y3,Z3] =
  //[0,0,0, this.x,this.y,this.z, b.x,b.y,b.z];
  //[a.x,a.y,a.z,b.x,b.y,b.z,c.x,c.y,c.z];
  /*var v1 = this.new(),//v3_( X2-X1 , Y2-Y1 , Z2-Z1 );
      v2 = b.new();//v3_( X3-X1 , Y3-Y1 , Z3-Z1 );
  var asx = v1.y*v2.z - v1.z*v2.y;
  var bsx = v1.z*v2.x - v1.x*v2.z;
  var csx = v1.x*v2.y - v1.y*v2.x;
  //dsx = -v1.y*v2.z*X1 -v1.z*v2.x*Y1 -v1.x*v2.y*Z1 +v1.y*v2.x*Z1 +v1.z*v2.y*X1 +v1.x*v2.z*Y1;
  var vn = v3_(asx ,bsx ,csx);*/
  var vn = new vect3(
    this.y*b.z - this.z*b.y ,
    this.z*b.x - this.x*b.z ,
    this.x*b.y - this.y*b.x );
  vn.N();
  return vn
 },


améliorable selon moi ( pas testé encore ) (http://pixeljoint.com/files/icons/snow_alien.png)
avec un algo comme décrit plus haut
Code: [Select]
vec4 moyen_img(vec2 v){
   float t,r;
   vec4 s,k;
   vec2 a;
   
   for(int i=0; i<5; i++){
    t = float(i)/5.*PI2;
    for(int u=1; u<=5; u++){
     r = float(u)/5.;
     a = vec2(v.x+cos(t)*r/textureSize.x,
              v.y+sin(t)*r/textureSize.y);
     s = texture2D(img, a);

     k.xyz+=s.xyz*r;
    }
   }// k/(iter*(iter+1)/2)
   return vec4(k.xyz/15.,s.w);
 }
en prenant des points dans la zone interne du pixel, .5 pr être rapide
ou encore en faisant un bouquet(randomisation) de triangle qui donne un ensemble de normal approximative , puis reste juste à faire la moyenne de toute ces normals...   ça peut soigné l'apparence dérivative de la surface ,

évidement  texture2D( shader return des valeurs déjà interpoler vite fait ce qui améliore l’efficacité ,
sur CPU je passais aussi par une sous interpolation seulement linéaire c'était potable ,
Code: [Select]
moyen_carre: function(v,M,iter){
   var t,k = 0,r,vi, a,x,y,x2,y2,x1;
   var li = v_(M.length-1,M[0].length-1);

   for(var i=0; i<iter; i++){//calcule un cercle de point de brouillar
    t  = i/iter*PI2;
    for(var u=1; u<=iter; u++){
     r = u/iter;
     //k += this.carre(  v_( v.x+Math.cos(t)*r , v.y+Math.sin(t)*r )  ,M)*r;
     a = new vect2(cadr(v.x+Math.cos(t)*r,0,li.x),//encadrement
                   cadr(v.y+Math.sin(t)*r,0,li.y));
     x = Math.floor(a.x); x2 = Math.min(x+1,li.x);
     y = Math.floor(a.y); y2 = Math.min(y+1,li.y);
     a.x-=x; a.y-=y;
     x1= 1-a.x;
     k += ((M[x][y] *x1 + M[x2][y] *a.x)*(1-a.y) +
           (M[x][y2]*x1 + M[x2][y2]*a.x)*a.y )*r;
    }
   }
   return k/(iter*(iter+1)/2)
 },
que des barycentres à la tarzan ,

si c'est bien là ce que tu cherchais , par ce que pour ça faut partir d'une map de profondeur ,
Title: Re : Obtenir depth et albedo avec une photo
Post by: Saorel on 10 July 2017 à 18:49:04
Actualité oblige : https://github.com/Unity-Technologies/DeLightingTool
( Probablement ce dont parlait Zavie ;-) )
Title: Re : Obtenir depth et albedo avec une photo
Post by: Zavie on 11 July 2017 à 14:06:48
Wow, ça envoie du pâté ! Merci pour le lien, j'avais vu passer un extrait de la vidéo, mais je n'avais pas regardé plus en détail. Impressionnant de simplicité.

Bon par contre ça résout un segment du pipeline, mais il reste tout un tas de problèmes, dont la capture avec calibration des couleurs. Il me semble qu'en général pendant la prise de vue on essaie également d'avoir l'éclairage ambiant, mais j'imagine que leur outil doit faire une analyse statistique grâce à la normal map pour en déduire une approximation. Beau résultat en tout cas !
Title: Re : Obtenir depth et albedo avec une photo
Post by: Saorel on 11 July 2017 à 16:36:13
Pour la partie photogrammetrie ? Capture de l'ambient ? Je n'ai jamais vu ... Apres je suis peut-etre passé à coté ...

Je sais que Colmap et OpenMVP supportent les images spheriques genre Ricoh ( et openMVG à un script pour les prendre en comptes ) cela etant je n'ai vu aucun pipeline de photogrammetry qui utilise :
- des EXR en entrée
- les images spheriques pour estimer l'ambient et l'utiliser dans la reconstruction.

Si j'ai raté quelque chose je veux bien des liens :-)

Dans les comparatifs sympas : https://pfalkingham.wordpress.com/2017/05/26/photogrammetry-testing-11-visualsfm-openmvs/ (https://pfalkingham.wordpress.com/2017/05/26/photogrammetry-testing-11-visualsfm-openmvs/) ( regardez les 11 posts )
Et en recherche https://storage.googleapis.com/t2-data/paper/tanks-and-temples.pdf (https://storage.googleapis.com/t2-data/paper/tanks-and-temples.pdf)
Une video qui teste tout ca : https://www.youtube.com/watch?v=ELHOjC_V-FE (https://www.youtube.com/watch?v=ELHOjC_V-FE)

Edit : Pour un comparatif sur les soft pro : http://3dscanexpert.com/3df-zephyr-photogrammetry-software-review/ (http://3dscanexpert.com/3df-zephyr-photogrammetry-software-review/)
Title: Re : Obtenir depth et albedo avec une photo
Post by: Saorel on 17 August 2017 à 09:51:34
Unity a encore frappé en publiant un ebook expliquant le workflow complet pour ce genre d'application : https://unity3d.com/files/solutions/photogrammetry/Unity-Photogrammetry-Workflow_2017-07_v2.pdf