Page 1 sur 1

[Module] CausticEffect

Publié : jeu. 16/févr./2023 21:25
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 ;)

Re: [Module] CausticEffect

Publié : ven. 17/févr./2023 1:16
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

Re: [Module] CausticEffect

Publié : ven. 17/févr./2023 1:19
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 )

Re: [Module] CausticEffect

Publié : ven. 17/févr./2023 15:26
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.

Re: [Module] CausticEffect

Publié : ven. 17/févr./2023 16:36
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.

Re: [Module] CausticEffect

Publié : lun. 20/févr./2023 16:47
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

Re: [Module] CausticEffect

Publié : lun. 20/févr./2023 19:24
par SPH
Ca tourne impeccablement ici. 😎

Re: [Module] CausticEffect

Publié : lun. 20/févr./2023 19:39
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.

Re: [Module] CausticEffect

Publié : lun. 20/févr./2023 20:34
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.

Re: [Module] CausticEffect

Publié : lun. 20/févr./2023 21:53
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) ! 😍

Re: [Module] CausticEffect

Publié : mer. 22/févr./2023 12:30
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