Discuss Scratch

Lu_Li_49
Scratcher
500+ posts

Comment faire du ray tracing rapide ?

Bonjour,
J'ai un projet où je voudrais faire beaucoup de 3D, et comme scratch est limité en puissance je me suis demandé si c'est possible de faire un “ray tracing” simple où, pour chaque pixel de l'écran, un rayon est lancé dans la direction de la caméra, et s'il butte sur quelque chose (comme un cube ou une pyramide) il prend la couleur et la dessine sur l'écran en fonction d'une texture prédéfinie de la face.
En théorie c'est plutôt simple mais je ne sais pas par où commencer… J'ai déjà une base de 3D avec la fonction
aller à x:() y:() z:()
ainsi que le script qui dessine l'écran. Il me manque juste le calcul à mettre dans la fonction qui récupère la couleur.
Merci d'avance pour votre aide !

P.-S.: Voici le code :

Last edited by Lu_Li_49 (March 1, 2026 14:33:41)

ma33-ma
Scratcher
500+ posts

Comment faire du ray tracing rapide ?

Lu_Li_49 wrote:

Bonjour,
J'ai un projet où je voudrais faire beaucoup de 3D, et comme scratch est limité en puissance je me suis demandé si c'est possible de faire un “ray tracing” simple où, pour chaque pixel de l'écran, un rayon est lancé dans la direction de la caméra, et s'il butte sur quelque chose (comme un cube ou une pyramide) il prend la couleur et la dessine sur l'écran en fonction d'une texture prédéfinie de la face.
En théorie c'est plutôt simple mais je ne sais pas par où commencer… J'ai déjà une base de 3D avec la fonction
Tu a sans doute du tomber sur des projets de Raycasting, tu remarquera que sur scratch il sont très lents alors maintenant suppose qu'il faut multiplier par la hauteur de ton écran.
Le projet est réalisable mais il risque de ressembles à une grille de couleur de 50x50.Donc pour la 3D c'est généralement plus efficace la 3D ‘'classique’'.
Lu_Li_49
Scratcher
500+ posts

Comment faire du ray tracing rapide ?

Et sur TW ?
J'avais plutôt l'idée de faire une résolution de 240x180. J'ai déjà essayé la 3D classique mais c'est complexe, et quand il y a des milliers de triangles ça doit devenir vite ingérable.
ma33-ma
Scratcher
500+ posts

Comment faire du ray tracing rapide ?

Lu_Li_49 wrote:

Et sur TW ?
J'avais plutôt l'idée de faire une résolution de 240x180. J'ai déjà essayé la 3D classique mais c'est complexe, et quand il y a des milliers de triangles ça doit devenir vite ingérable.
Honnetement ça depend de ton PC essaye de faire tourner a FPS max un raycaster sur TWen res : 2 puis divise le nombre de FPS par 180 tu auras une idée d'à quelle vitesse tourneras le raytracer (y'as des optimisation mais a mon avit pas plus de 80%)
Lu_Li_49
Scratcher
500+ posts

Comment faire du ray tracing rapide ?

J'ai essayé le premier résultat, cela me donne environ 0.16 FPS mais je ne sait pas si le nombre de FPS est bloqué ou non.
Quelqu'un a bien réussi à faire ça
ma33-ma
Scratcher
500+ posts

Comment faire du ray tracing rapide ?

Lu_Li_49 wrote:

J'ai essayé le premier résultat, cela me donne environ 0.16 FPS mais je ne sait pas si le nombre de FPS est bloqué ou non.
Quelqu'un a bien réussi à faire ça
Pour le res=2 c'est a peu près de 0.16 FPS( pour moi)
Lu_Li_49
Scratcher
500+ posts

Comment faire du ray tracing rapide ?

Donc il faudrait six secondes et quart pour effectuer le rendu d'une seule image. Comme je viens de le dire il y a bien des projets qui le font comme celui-ci… Je vois bien qu'il est impossible d'effectuer une telle chose sur scratch mais on peut utiliser TW ainsi que de l'optimisation. J'ai créé ce sujet afin de trouver une idée, si vous en avez une, je suis preneur, même si ça nécessite de baisser la résolution. Voici le projet.
ma33-ma
Scratcher
500+ posts

Comment faire du ray tracing rapide ?

Lu_Li_49 wrote:

Donc il faudrait six secondes et quart pour effectuer le rendu d'une seule image. Comme je viens de le dire il y a bien des projets qui le font comme celui-ci… Je vois bien qu'il est impossible d'effectuer une telle chose sur scratch mais on peut utiliser TW ainsi que de l'optimisation. J'ai créé ce sujet afin de trouver une idée, si vous en avez une, je suis preneur, même si ça nécessite de baisser la résolution. Voici le projet.

En vrai pour le rendu fait de la simplification de couleurs : au lieu de fait 3px verts les uns à cotés des autre fais 1 ligne vert de la couleur moyenne
PS: j'arrive pas a charger ton projet donc jsp trop ou tu en est…
Lu_Li_49
Scratcher
500+ posts

Comment faire du ray tracing rapide ?

Le projet peut pourtant se charger chez moi… c'est juste le projet avec les blocs que j'ai envoyé au premier message

Lu_Li_49 wrote:

Bonjour,
J'ai un projet où je voudrais faire beaucoup de 3D, et comme scratch est limité en puissance je me suis demandé si c'est possible de faire un “ray tracing” simple où, pour chaque pixel de l'écran, un rayon est lancé dans la direction de la caméra, et s'il butte sur quelque chose (comme un cube ou une pyramide) il prend la couleur et la dessine sur l'écran en fonction d'une texture prédéfinie de la face.
En théorie c'est plutôt simple mais je ne sais pas par où commencer… J'ai déjà une base de 3D avec la fonction
aller à x:() y:() z:()
ainsi que le script qui dessine l'écran. Il me manque juste le calcul à mettre dans la fonction qui récupère la couleur.
Merci d'avance pour votre aide !

P.-S.: Voici le code :


Essaie de le charger avec TW. Pour l'instant je veux juste savoir comment ça fonctionne précisément le ray tracing. J'ai déjà une petite idée mais je ne sait pas si c'est la bonne :
définir couleur du pixel à l'écran x:(x) y:(y)::custom
répéter jusqu'à ce que <touche quelque chose::custom>{
aller à x:((position x actuelle::custom) + (calcul complexe pour avancer en 3D en fonction de l'angle de la caméra::custom)) y:(même chose) z:(même chose)::custom
}::control
couleur de la texture de (chose à x:(position x actuelle::custom) y:(position y actuelle::custom) z:(position z actuelle::custom)::custom) à (calcul complexe::custom)::custom
mettre [couleur retournée v] à (couleur de la texture::custom)
En gros c'est à ça que je pense mais j'ignore encore les opération à faire et je ne sait pas si il y a des calculs plus optimisés.

Powered by DjangoBB