22110

(Attention, la page 737 augure généralement des projets qui crashent bien fort embarrassed)

Tu définis comment les formes? C’est des vertices style OBJ ?
avatarHighway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

22111

Le traytracer a tout une série de primitive :

Sphere, Cube, plans, cone, cylindre et triangle.
Il est capable de charger des fichiers OBJ, je rajouterais le support des fichier STL plus tard, mais aucune des scene la n'utilise de fichier OBJ tout est fait a partir des primitive. Seule la boule de noel utilise de triangle pour les épines du sapin. Tout les autres images sont faites a partir des primitives.

L'image avec un truc qui ressemble vaguement a un dé utilise ce qu'on appelle CSG (Constructive Solid Geometry) ou tu prend des primitives et tu fait des operations entre elles (union, difference, intersection)
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

22112

J'allais dire que ça m’étonnerait fort qu'un autel si détaillé ait été dessiné a partir de primitives,... puis j'ai regardé a nouveau pour vérifier... il est temps d'aller dormir.
avatar

22113

Godzil > top
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

22114

Sinon j'ai oublié de répondre:

Tu définis comment les formes?

Pour l'instant chaque scene a son propre executable, j'ai laissé les deux parties les plus chiantes pour la fin:

- Description des scenes
- Optimisation.

Il y a deja pas mal de choses qui servent à optimiser, j'en ai profité pour découvrir OpenMP, plutôt pratique pour ne pas avoir a se faire chier, mais la un truc en particulier est sous optimisé et rends le tout probablement 2 a 3x plus lent qu'il ne devrait en réalité.


Tiens pour le plaisir des stats pour l'image de la boule de noel (rendu en 800x600)

% time ./tests/christmasball_render
Rendering statistics:
Cones                   : 0
Cubes                   : 0
Cylinders               : 12
Groups                  : 231
Lights                  : 5
Planes                  : 0
Spheres                 : 6
Triangles               : 5280
Smooth Triangles        : 0
OBJ File                : 0
CSG                     : 0
==================================================
Pixel rendered          : 480000
Ray casted              : 813564281
Light Ray casted        : 1723760
Reflection ray casted   : 103703
Refraction ray casted   : 0
Intersect object created: 960276634
Intersection created    : 44913901
Malloc called           : 960276634
Realloc called          : 4644774
Bounding box missed     : 107769254
Min depth atteined      : 18
Max intersect count     : 101
==================================================
./tests/christmasball_render  408,79s user 3,83s system 622% cpu 1:06,28 total
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

22115

Quand j'étais petit j'en avais fait un aussi. Il faisait spheres et plans, et j'avais eu la flemme de définir les normales pour des primitives plus complexes.

22116

Les primitives tel que cube et triangle sont relativement simple au final, cylindre c'est quasi une sphere, mais pas tout a fait, cone est un peu plus compliqué on est d'accord.

Tout ce qui est pattern, CSG, sont pour l'un juste un changement sur la couleur de la primitive suivant un rituel assez simple, et les CSG sont juste de la suppression d'intersections potentielles suivant un autre rituel plutot simple.

Le plus compliqué a vrai dire est la transparence, enfin non pas la transparence en elle même, mais la réfraction, et la gestion du cas ou la refraction crée une zone d'ombre (le rayon rebondi entre deux couche sans jamais en sortir) et ou dans la realité on se retrouve avec la reflection qui se déclenche (suivant un truc machin couché sur papier par Mr Fresnel lui meme)
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

22117

je sais plus si mon truc gérait la transparence.

22118

~4 min de rendu sur mon MacBook Pro 2012

rMsy

Rendering statistics:
Cones                   : 0
Cubes                   : 1
Cylinders               : 0
Groups                  : 6230
Lights                  : 3
Planes                  : 0
Spheres                 : 0
Triangles               : 23490
Smooth Triangles        : 23490
OBJ File                : 1
CSG                     : 0
==================================================
Pixel rendered          : 480000
Ray casted              : 9588809784
Light Ray casted        : 2714514
Reflection ray casted   : 684176
Refraction ray casted   : 474342
Intersect object created: 4353032
Intersection created    : 41699064
Malloc called           : 4353032
Realloc called          : 5051195
Bounding box missed     : 136542307
Min depth attained      : 0
Max intersect count     : 28
==================================================

~24K triangles, transparence (meme si ce n'est pas evident, l'indice de refraction est assez élevé) et reflection, et plusieurs sources de lumière, ca fait pas mal de rayon a lancer et d'intersection a tester!

il faut en gros 1 rayon par pixel, puis sur le point d'intersection, 1 rayon par lumières sur la scene.

Si on intersectionne avec une surface qui est marqué comme reflective, on lance un autre rayon et on regarde ce sur quoi on tape, lz tout de manière récursive, parceque il faut après testé les lumières pour le point et la reflectivity du matériaux, etc...

Idem pour la refraction, l'angle est different de celui de la reflection (et va dépendre des difference d'indice de refraction entre le milieu avant l'intersection et celui après l'intersection. Et on fait ca aussi de manière recursive, et on continue soit jusqu'a ce que la pile explose (c'est pas bien sur sur certaines scenes grin) soit jusqu'a une limite de récursion qu'il est forcement recommandé de gardé petit en tout cas tant qu'on est pas sur le rendu final.


A ca on peux ajouter (ce n'est pas le cas sur cette scene) :
- le super sampling ou on lance plus d'un rayon par pixel pour en faire la moyenne
- La gestion de la distance focale, ou idem on va lancer plusieurs rayons par pixels (mais c'est different du super sampling parce que ca change globalement comment la caméra fonctionne) mais donne un rendu plus réaliste ou une partie de la scene est net, le reste flou, comme avec un vrai appareil photo
- Les lumières de "zones" et non ponctuelles comme utilisé dans la scene la: on ne lance pas qu'un seul rayon par lumière mais un nombre plus que certains dépendant de comment la lumière est configuré (plus il y a de point, et plus les ombres sont lissée, moins il y a de point et plus la transition de l'ombre est brutale)


Si on mixe le tout, ca peu faire un gros plein beaucoup de rayon a tester par pixel d'image, sans compter quand un rayon a la malchance de toucher plusieurs objets ca ralentit aussi pas mal le rendu.

Bref..

C'est lent grin

(la je travaille sur de potentielles optimisations, mais certains truc qui consomment le plus ne sont pas forcement très évident à optimiser, genre cette operation d'une matrice de 4x4 par un tuple de 4x1:

return Tuple(b.x * FastGet4(0, 0) + b.y * FastGet4(0, 1) + b.z * FastGet4(0, 2) + b.w * FastGet4(0, 3), b.x * FastGet4(1, 0) + b.y * FastGet4(1, 1) + b.z * FastGet4(1, 2) + b.w * FastGet4(1, 3), b.x * FastGet4(2, 0) + b.y * FastGet4(2, 1) + b.z * FastGet4(2, 2) + b.w * FastGet4(2, 3), b.x * FastGet4(3, 0) + b.y * FastGet4(3, 1) + b.z * FastGet4(3, 2) + b.w * FastGet4(3, 3));
difficile de vraiment optmiser un tel code plus que ce que le compilateur peur faire (gcc et clang semblent utiliser des instructions AVX pour ca) et meme la ca reste un de bout de code qui mange le plus de temps au final parce qu'il est appelé pour quasiment chaque intersection rayon/surface qui a actuellement un impact sur la scene vu que dans le cas le plus basique c'est un point de la surface d'un des objets qu'on veux dessiner;


L'operation est utilisé entre la matrice inverse de transformation d'un objet, et le point a la surface du dit objet.

Pour simplifier grandement les mathématiques d'intersection entre rayon et primitives, elle travaillent toutes dans un espace local et c'est le rayon qui est déformé suivant les transformations que la primitive subit dans la scene pour le rendu finale. Mais comme la primitive donne un point dans son espace, il faut convertir le point vers l'espace de la scene, d'ou la multiplication avec la matrice inverse de transformation du dit objet.

Par exemple faire que cette fonction puisse être inline (et deux autres qui sont beaucoup appelé) permet de gagner ~200s cumulé entre tous les coeurs.

C'est assez impressionnant o_O
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

22119

C'est joli ! top

(tu penses qu'on ne te voit pas éditer sournoisement, mmm ? embarrassed)

22120

top

Tu as essayé de regarder du côté des intrinsics AVX, pour gagner encore en perfs ?
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

22121

Ah, tu as atteint à peu près la vitesse de la Jaguar en 3D 🤓

(Très très cool sinon top c’est marrant ce rendu par contre, pas "shaded" du tout, qui fait un peu pâte à modeler, ou sprite 3D pré-rendu sur Super Nintendo, comment ça se fait ?)
avatarHighway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

22122

Faut définir des matériaux plus complexes, il a peut être pas encore eu le tps...

22123

Dans le métro y a une mamie qui joue à un manic shooter sur son smartphone. Je salue la jouvence !
avatarHighway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

22124

Zero: gcc et clang le font déjà de base avec les option d’optimisation de base (juste -O3, on peux ajouter -march=native pour utiliser le meilleur set pour le CPU courant), c'est assez impressionnant a vrai dire.

Sinon:

Brunni (./22121) :
c’est marrant ce rendu par contre, pas "shaded" du tout, qui fait un peu pâte à modeler, ou sprite 3D pré-rendu sur Super Nintendo, comment ça se fait ?

Il y a plein de facteurs qui rentrent en compte:
1 - tu zoom sur l'image pour voir ca
2 - il n'y a pas de super sampling (ou d'AA) donc quand tu zoom les bord sont super net et ça fait très artificiel. Prend la même image, met la a 100% et éloigne toi de l’écran, tu verras ça change pas mal. Et c'est lié avec le point 1
3 - Les lumières sont des "point light" aka un truc qui n'existe nulle part, un point infiniment petit qui diffuse uniformément de la lumière tout autour.

Prenons cette scène:

ch8_test.png

Comme tu peux voir il y a des ombres, c'est joli, mais leur netteté n'est pas naturelle. Pour ca il faut utiliser un autre type de lumiere comme celles de zones, ou on définie un "rectangle" d'ou la lumiere est diffusé, donc pour chaque point de l'image on va pas lancer un rayon de lumiere, mais 8, 16, 32, 1000 (c'est extrême mais pas non plus déconnant suivant le degré de realisme qu'on veux, mais ca a un prix. ca ralentit le rendu de beaucoup)

Quand on fait ca on peux obtenir ce genre de rendu:

arealight_test.png

C'est deja beaucoup mieux, mais elle reste un peu granuleuse car dans le cas de cette image pour eviter un rendu de 36h, la lumiere n'a que 8x8 zones.

Ce chapitre bonus du bouquin: http://raytracerchallenge.com/bonus/area-light.html donne des exemples de l'effet de la lumiere de zone avec peu de point et beaucoup de points ainsi que les difference de temps de rendu
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

22125

Ah oui joli ! Merci pour l’explication !
avatarHighway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

22126

Ceci dit il manque un truc tres important pour un rendu realiste, surtout avec des objets transparents:

La caustique

Si il y a untruc qu'un raytracer ne fait pas tel quel c'est ca. Et a vrai dire c'est plutot compliqué a implementer, et tres mauvais en terme de perfs.
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

22127

Zerosquare a souhaité poursuivre une discussion dérivée dans un nouveau sujet. La discussion initiale a eu lieu dans le sujet topics/154076-yarotweet-ou-le-topic-des-pensees-a-la-con/738#post-22126 tandis que la discussion dérivée continue dans le sujet topics/191693-le-raytracing-made-by-godzil où les messages en rapport ont été copiés.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

22128

Brunni (./22123) :
Dans le métro y a une mamie qui joue à un manic shooter sur son smartphone. Je salue la jouvence !

Yeah! C'était lequel?
avatar"- Nigga you know what the fuck I want, nigga: I want your motherfuckin' Daytons, and your motherfuckin' stereo! And I'll take a double burger with cheese!
- WHUT?"
I LOVE TO HATE/I HATE YOUR LOVE -AND I CAN'T FEEL AFFECTION FOR PEOPLE LIKE YOU!
CAALGOOONNNNN [TELLMESOMETHINGIDONTKNOWSHOWMESOMETHINGICANTUSEPUSHTHEBUTTONSCONNECTTHEGODDAMNDOTS] (Si Dieu existe il doit me détester...)

22129

Godzil (./22126) :
Ceci dit il manque un truc tres important pour un rendu realiste, surtout avec des objets transparents:

La caustique

Si il y a untruc qu'un raytracer ne fait pas tel quel c'est ca. Et a vrai dire c'est plutot compliqué a implementer, et tres mauvais en terme de perfs.
C'est donc la caustique qui dessine un cul à 90 degrés dans la tasse de café !
C'est …caustique !
The_CUrE (./22128) :
Brunni (./22123) :
Dans le métro y a une mamie qui joue à un manic shooter sur son smartphone. Je salue la jouvence !

Yeah! C'était lequel?
J'ai pas reconnu sad mais y en avait des boulettes !
avatarHighway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

22130

Et t'en as pas méfu?
avatar"- Nigga you know what the fuck I want, nigga: I want your motherfuckin' Daytons, and your motherfuckin' stereo! And I'll take a double burger with cheese!
- WHUT?"
I LOVE TO HATE/I HATE YOUR LOVE -AND I CAN'T FEEL AFFECTION FOR PEOPLE LIKE YOU!
CAALGOOONNNNN [TELLMESOMETHINGIDONTKNOWSHOWMESOMETHINGICANTUSEPUSHTHEBUTTONSCONNECTTHEGODDAMNDOTS] (Si Dieu existe il doit me détester...)

22131

Pendant ce temps:

avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

22132

Le moment où l'esprit lâche et tu réalises que tu as regardé plus d'1 vidéo de Jelle à la suite et que tu te prends au jeu.

Nous venons aussi de confirmer que l'autisme est contagieux.
avatar"- Nigga you know what the fuck I want, nigga: I want your motherfuckin' Daytons, and your motherfuckin' stereo! And I'll take a double burger with cheese!
- WHUT?"
I LOVE TO HATE/I HATE YOUR LOVE -AND I CAN'T FEEL AFFECTION FOR PEOPLE LIKE YOU!
CAALGOOONNNNN [TELLMESOMETHINGIDONTKNOWSHOWMESOMETHINGICANTUSEPUSHTHEBUTTONSCONNECTTHEGODDAMNDOTS] (Si Dieu existe il doit me détester...)

22133

Je comprends que dalle #erf# c’est pas plutôt toi qui a méfu ?
avatarHighway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

22134

Nan. Jelle c'est le mec qui fait des vidéos de courses de billes.
Il est autiste, c'est pas une insulte c'est la vérité.

Et quand tu regardes plus d'une vidéo de Jelle, que tu trouves ça fun et que tu te prends au jeu de faire le supporter pour une bille plutôt qu'une autre, c'est qu'il t'a contaminé.
avatar"- Nigga you know what the fuck I want, nigga: I want your motherfuckin' Daytons, and your motherfuckin' stereo! And I'll take a double burger with cheese!
- WHUT?"
I LOVE TO HATE/I HATE YOUR LOVE -AND I CAN'T FEEL AFFECTION FOR PEOPLE LIKE YOU!
CAALGOOONNNNN [TELLMESOMETHINGIDONTKNOWSHOWMESOMETHINGICANTUSEPUSHTHEBUTTONSCONNECTTHEGODDAMNDOTS] (Si Dieu existe il doit me détester...)

22135

Je suis passé au supermarché tout à l'heure le rayon pain de mie/brioche était VIDE, les pâtes et les œufs aussi, pillage TO-TAL.

Eh du calme, essayez pas de tenir un siège de 3 semaines, y a pas à résister à une invasion de zombies partouzeurs!

avatar"- Nigga you know what the fuck I want, nigga: I want your motherfuckin' Daytons, and your motherfuckin' stereo! And I'll take a double burger with cheese!
- WHUT?"
I LOVE TO HATE/I HATE YOUR LOVE -AND I CAN'T FEEL AFFECTION FOR PEOPLE LIKE YOU!
CAALGOOONNNNN [TELLMESOMETHINGIDONTKNOWSHOWMESOMETHINGICANTUSEPUSHTHEBUTTONSCONNECTTHEGODDAMNDOTS] (Si Dieu existe il doit me détester...)

22136

The_CUrE (./22134) :
Nan. Jelle c'est le mec qui fait des vidéos de courses de billes.
Il est autiste, c'est pas une insulte c'est la vérité.

Et quand tu regardes plus d'une vidéo de Jelle, que tu trouves ça fun et que tu te prends au jeu de faire le supporter pour une bille plutôt qu'une autre, c'est qu'il t'a contaminé.
Aaaah #erf# ok je vois merci, j’avais aucune idée hors contexte
avatarHighway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

22137

Ouais je répondais au post de Godzil.
avatar"- Nigga you know what the fuck I want, nigga: I want your motherfuckin' Daytons, and your motherfuckin' stereo! And I'll take a double burger with cheese!
- WHUT?"
I LOVE TO HATE/I HATE YOUR LOVE -AND I CAN'T FEEL AFFECTION FOR PEOPLE LIKE YOU!
CAALGOOONNNNN [TELLMESOMETHINGIDONTKNOWSHOWMESOMETHINGICANTUSEPUSHTHEBUTTONSCONNECTTHEGODDAMNDOTS] (Si Dieu existe il doit me détester...)

22138

J'ai entendu sur France Info qu'après la première allocution de Macron, il s'était vendu en France en deux jour l'équivalent d'un an de pâtes. J'imagine que quelques diététiciens ne doivent pas très bien dormir en ce moment.
avatarQue cache le pays des Dieux ? - Ximoon's Box - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

22139

Au contraire !
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

22140

Pas faux. Disons moite-moite, entre ceux qui s'inquiètent pour les gens et ceux qui veulent se faire de la thune.
avatarQue cache le pays des Dieux ? - Ximoon's Box - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.