[Module] CausticEffect

Généralités sur la programmation 3D
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

[Module] CausticEffect

Message par falsam »

Sur une idée de Cool Dji, CausticEffect est un module pour PureBasic qui génère un motif caustique animé, avec plusieurs paramètres pour contrôler la sortie.

Image

Préambule.
Le code initial de Cool Dji datait de 2014 et affichait qu'un seul rendu de texture.
Le code n'existe plus mais le sujet se trouve ici
viewtopic.php?t=14928

Le module que je vous présente peut afficher plusieurs rendus de texture caustics.

Pour fonctionner, vous devez avoir un dossier contenant les textures à animer.
Chaque texture commencera par un nom générique suivit d'un tiret puis d'un numéro d'ordre de 1 à n
Exemple : blue_001.bmp, blue_002.bmp, .... blue_064.bmp

:idea: Vous pouvez utiliser un générateur de textures caustics disponible sur ce lien.
https://www.cathalmcnally.com/news/free ... generator/

Help.
:arrow: CreateGroupMaterial(#Material, GenericFile.s, NumberOfFrames.i, Blend.i = 255, Culling.b = #False)

- Description
Crée N nouvelles matières basées sur les textures spécifiées dans la variable GenericFile.

- Arguments
#Material : Groupe des matières générées.
GenericFile.s : Nom générique des textures à traiter.
NumberOfFrames.i : Nombres de textures à traiter.
Blend.i : Niveau de transparence à appliquer. Défaut 255. Pas de transparence.
Culling.b : Voir les faces intérieur. Défaut #False. Pas de face interne visible.

- Exemple

Code : Tout sélectionner

; Chargement des textures de l'effet caustic
Add3DArchive("Data/textures/blue64/", #PB_3DArchive_FileSystem)
BlueWater = CausticWater::CreateGroupMaterial(#PB_Any, "blue*.bmp", 64, 160, #True)

:arrow: SetEntityGroupMaterial(#Entity, #Material)
- Description
Assigne un groupe de matière à une entité.

- Arguments
#Entity : Entité qui va afficher l'effet caustic.
#Material : Groupe de matière à appliquer.


:arrow: UpdateGroupMaterial(#Entity, Timer = 15)
- Description
Met à jour l'entité qui va afficher l'effet caustic.
Cette fonction est à placer dans la boucle de rendu 3D.

- Arguments
#Entity : Entité qui va afficher l'effet caustic.
Timer : Temps d'attente entre chaque texture.

Le code.
Le code de CausticEffect.pbi ainsi que les codes de démonstration sans les médias n'étant pas fonctionnels, le projet est hébergé sur GitHub.
https://github.com/falsam/CausticEffect

Lien de téléchargement direct.
https://github.com/falsam/CausticEffect ... s/main.zip

Le fichier compressé CausticEffect-main.zip contient :
-Le module CausticEffect.pbi,
-Un code simple de démonstration demo.pb (Esc pour quitter)
-Un code de démonstration plus évolué Portal.pb (Fléches et souris pour évoluer, Esc pour quitter)
ATTENTION Tester Portal.pb avec PB 6.01 s'il vous plait.
-Un dossier Data contenant les assets nécessaires aux codes de démonstration.

Enjoy ;)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [Module] CausticEffect

Message par G-Rom »

ca à l'air de "ramé" sur ma config & même problème d'écran que ton autre code.
le timer du module pour l'update est fixé à 15 , c'est bizarre

si tu veut récup le deltatime :

Code : Tout sélectionner

deltatime.f = RenderWorld() / 1000
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [Module] CausticEffect

Message par G-Rom »

je viens de testé portal.pb , intestable, soit mon pc est trop rapide, la caméra est hors de contrôle , et l'effet caustic rame un max ( surement le soucis du timer )
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Module] CausticEffect

Message par falsam »

Bonjour G-Rom. Merci pour ton retour d'expérience.
G-Rom a écrit : ven. 17/févr./2023 1:16 ca à l'air de "ramé" sur ma config
Ca m'embête ce que tu dis la ! Je n'ai pas un pc de gamer puissant comme tu peux le voir dans ma signature et je ne rame absolument pas. Tu pourrais me donner la configuration de ton ordinateur ?
G-Rom a écrit : ven. 17/févr./2023 1:19 la caméra est hors de contrôle
Peut être que tu ne teste pas avec PB 6.01 ?

:arrow: J'avais évoqué un souci de souris sur ce sujet viewtopic.php?t=18863
Pourrais tu jeter un oel ? merci.

Dans le code Portal.pb j'utilise une camera suiveuse sur une entité invisible. J'avoue que la stabilité de la souris est pas top.
G-Rom a écrit : ven. 17/févr./2023 1:19 surement le soucis du timer
Ce timer était dans le code de Cool DJ. il permet de définir un délai d'attente entre deux placages de matériaux. Je ne suis pas certain de son efficacité car il est variable suivant la puissance du processeur.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [Module] CausticEffect

Message par G-Rom »

effectivement , je suis en 6.00 LTS , et je reste dessus pour le moment , car j'utilise PB pour ma boite , j'ai pas envie de breaké le code a cause d'une update.

la config , je ne pense pas que cela vienne de la.

O.S. : W11
Processeur : i912900
Mémoire vive : 32go
Carte vidéo : rtx3090ti

falsam a écrit : ven. 17/févr./2023 15:26 J'avais évoqué un souci de souris sur ce sujet viewtopic.php?t=18863
Pourrais tu jeter un oel ? merci.
J'ai justement répondu hier soir, j'ai du mal appuyé sur envoyer..
je vais y répondre.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Module] CausticEffect

Message par falsam »

Mise à jour des sources :
- demo.pb : Ajout d'un delta time.

- portal.pb : Ajout d'un delta time, modification du comportement de la camera.

:arrow: Download depuis GitHub https://github.com/falsam/CausticEffect ... s/main.zip
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: [Module] CausticEffect

Message par SPH »

Ca tourne impeccablement ici. 😎

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Module] CausticEffect

Message par falsam »

Mise à jour des sources :
- demo.pb : Correction delta time (Merci G-Rom).

- portal.pb : Correction déplacement caméra suiveuse lié au delta time.

:arrow: Download depuis GitHub https://github.com/falsam/CausticEffect ... s/main.zip

@SPH Merci pour ton commentaire. Je pense que tu as du avoir la dernière version.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [Module] CausticEffect

Message par G-Rom »

Obligé de mettre a 1 :

Code : Tout sélectionner

UpdateGroupMaterial(Entity, Timer = 1)
dans le .pbi , sinon l'anim est saccadée , le reste fonctionne parfaitement.
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Re: [Module] CausticEffect

Message par SPH »

falsam a écrit : lun. 20/févr./2023 19:39 @SPH Merci pour ton commentaire. Je pense que tu as du avoir la dernière version.
A l'octet prêt, c'était la même. Mais par acquis de conscience, j'ai retesté et ca marche pareil (nickel) ! 😍

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Module] CausticEffect

Message par falsam »

Comment se passer du module CausticEffect.pbi ?
Je viens de découvrir avec PB 6.0 qu'il était possible nativement dans PureBasic de créer une matière animée à l'aide de textures spécifiées !

■ Comment faire ?
-Indiquez à votre code ou se trouve les textures.

Code : Tout sélectionner

Add3DArchive("Data/textures/blue64/", #PB_3DArchive_FileSystem)
-Dans une boucle, charger les textures dans un tableaux.
Exemple : 64 textures numérotés blue_001.bmp à blue_064.bmp

Code : Tout sélectionner

BlueWater, Dim Textures(63), n
For n = 1 To 64
  Textures(n-1) = TextureID(LoadTexture(#PB_Any, "blue_" + RSet(Str(n), 3, "0") + ".bmp"))
Next
-Crée une nouvelle matière animée à l'aide des textures spécifiées.

Code : Tout sélectionner

BlueWater = CreateAnimatedMaterial(#PB_Any, Textures(), 2.5)

Le dernier paramètre correspond à la durée de l'animation en secondes.

-Et enfin appliquer la matière à une entité.

Code : Tout sélectionner

Mesh = CreateCube(#PB_Any, 20)
Cube = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(BlueWater))
:arrow: Contrairement au module CausticEffect.pbi, il y a aucune mise à jour à faire dans la boucle 3D.

Voici le code complet fonctionnel si vous avez chargé le pack de démonstration figurant dans le premier message.

Code : Tout sélectionner

; Effet Caustic
; 
; PureBasic  6.0

EnableExplicit

; DPI Resolution
Global drx.f, dry.f

; Cameras
Global Camera, Rot.f

; Entites
Global Mesh, Cube, BlueWater, Dim Textures(63), n

; Delta Time
Global dt.f

; Initialisatio environnement 3D
drx = DesktopResolutionX()
dry = DesktopResolutionY()
ExamineDesktops()
InitEngine3D(#PB_Engine3D_DebugLog) : InitSprite() : InitKeyboard() : InitMouse()
OpenWindow(0, 0, 0, DesktopWidth(0), DesktopHeight(0), "", #PB_Window_Maximize | #PB_Window_BorderLess)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0)*drx , WindowHeight(0)*dry) 

; Un peu de lumiere
CreateLight(#PB_Any, RGB(255, 255, 255), 10, 10, 10)

; Ciel
Add3DArchive("data/skybox/Early_morning.zip", #PB_3DArchive_Zip) 
SkyBox("Early_morning.jpg")

; Camera
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)

; Chargement des textures
; 64 textures numérotés de blue_001.bmp à blue_064.bmp 
Add3DArchive("Data/textures/blue64/", #PB_3DArchive_FileSystem)
For n = 1 To 64
  Textures(n-1) = TextureID(LoadTexture(#PB_Any, "blue_" + RSet(Str(n), 3, "0") + ".bmp"))
Next
BlueWater = CreateAnimatedMaterial(#PB_Any, Textures(), 2.5)

; Une entité sur lequel sera appliquee les textures caustiques
Mesh = CreateCube(#PB_Any, 20)
Cube = CreateEntity(#PB_Any, MeshID(Mesh), MaterialID(BlueWater))

; Boucle 3D
Repeat
  While WindowEvent() : Wend
  ExamineKeyboard()
  ExamineMouse()
    
  ; Rotation des entités
  RotateEntity(Cube, 20*dt, 20*dt, 20*dt, #PB_Relative)
  
  ; Rotation de la camera principale
  Rot + 0.2 * dt
  MoveCamera(Camera, Cos(Rot)*50, 15, Sin(Rot)*50, #PB_Absolute)
  CameraLookAt(Camera, 0, 0, 0)
      
  ; Rendering
  dt = RenderWorld()/1000
  FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Middle)

:idea: Retrouvez un autre exemple de code avec les assets se trouvant dans le dossier d'installation de PureBasic
viewtopic.php?t=18874
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre