VFX Forge - v1.0.0
    Preparing search index...

    Effet de Glace avec Parallax Occlusion Mapping

    Crée un effet de glace photoréaliste avec fissures internes, bulles d'air emprisonnées, réflexions et réfractions basées sur l'environnement. Utilise la technique de Parallax Occlusion Mapping (POM) pour simuler la profondeur et les structures internes sans géométrie supplémentaire.

    Technique principale :

    • Raymarching dans le fragment shader pour la profondeur 3D
    • Height map procédural en espace monde (sans UVs)
    • Perturbation de normales basée sur le gradient de hauteur
    • Effets optiques : Fresnel, réflexion, réfraction, caustiques
    • Illumination directe optionnelle avec subsurface scattering
    Index

    Constructors

    • Crée une instance de IceEffect

      Initialise tous les paramètres de l'effet, les uniforms par défaut, les presets de types de glace et la configuration du mapping UI. Configure automatiquement les dépendances si environmentManager est fourni.

      Parameters

      • environmentManager: EnvironmentManager

        Gestionnaire d'environnement

      Returns IceEffect

    Properties

    bubbleIntensity: number
    bubbleScale: number
    bubbleSize: number
    causticsEnabled: number
    causticsIntensity: number
    causticsScale: number
    causticsSpeed: number
    clearness: number
    crackIntensity: number
    crackScale: number
    currentPreset: string
    deepColor: any
    defaultUniforms: {
        uBubbleIntensity: { value: number };
        uBubbleScale: { value: number };
        uBubbleSize: { value: number };
        uCameraPosition: { value: any };
        uCausticsEnabled: { value: number };
        uCausticsIntensity: { value: number };
        uCausticsScale: { value: number };
        uCausticsSpeed: { value: number };
        uClearness: { value: number };
        uCrackIntensity: { value: number };
        uCrackScale: { value: number };
        uCubeMap: { value: any };
        uDeepColor: { value: any };
        uDirectLightEnabled: { value: number };
        uEnvironmentIntensity: { value: number };
        uFresnelIntensity: { value: number };
        uFresnelPower: { value: number };
        uHighlightColor: { value: any };
        uIceColor: { value: any };
        uIceThickness: { value: number };
        uMainLightColor: { value: any };
        uMainLightIntensity: { value: number };
        uMainLightPosition: { value: any };
        uPomDepth: { value: number };
        uPomLayers: { value: number };
        uPomMinLayers: { value: number };
        uReflectionIntensity: { value: number };
        uRefractiveIndex: { value: number };
        uRoughness: { value: number };
        uTime: { value: number };
        uTransparency: { value: number };
    }
    directLightEnabled: number
    displayName: string
    environmentIntensity: number
    environmentManager: EnvironmentManager
    fresnelIntensity: number
    fresnelPower: number
    globalTime: number
    highlightColor: any
    iceColor: any
    icePresets: {
        blue_ice: {
            bubbleIntensity: number;
            clearness: number;
            crackIntensity: number;
            deepColor: any;
            iceColor: any;
            reflectionIntensity: number;
            roughness: number;
            transparency: number;
        };
        clear_ice: {
            bubbleIntensity: number;
            clearness: number;
            crackIntensity: number;
            deepColor: any;
            iceColor: any;
            reflectionIntensity: number;
            roughness: number;
            transparency: number;
        };
        frost: {
            bubbleIntensity: number;
            clearness: number;
            crackIntensity: number;
            deepColor: any;
            iceColor: any;
            reflectionIntensity: number;
            roughness: number;
            transparency: number;
        };
        frozen_water: {
            bubbleIntensity: number;
            clearness: number;
            crackIntensity: number;
            deepColor: any;
            iceColor: any;
            reflectionIntensity: number;
            roughness: number;
            transparency: number;
        };
        glacier: {
            bubbleIntensity: number;
            clearness: number;
            crackIntensity: number;
            deepColor: any;
            iceColor: any;
            reflectionIntensity: number;
            roughness: number;
            transparency: number;
        };
    }
    iceThickness: number
    lightsManager: any
    material: any
    name: string
    pomDepth: number
    pomLayers: number
    pomMinLayers: number
    reflectionIntensity: number
    refractiveIndex: number
    roughness: number
    scene: any
    sceneManager: any
    shaders: { fragment: any; vertex: any }
    textureCube: any
    transparency: number
    uiMapping: {
        "bubble-intensity": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "bubble-scale": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "bubble-size": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "caustics-intensity": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "caustics-scale": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "caustics-speed": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        clearness: {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "crack-intensity": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "crack-scale": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "direct-light-enabled": {
            isCheckbox: boolean;
            param: string;
            transform: (checked: any) => 0 | 1;
            uniform: string;
        };
        "environment-intensity": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "fresnel-power": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "ice-preset": {
            custom: boolean;
            param: string;
            transform: (value: any) => any;
        };
        "ice-thickness": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "pom-depth": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "pom-quality": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        "reflection-intensity": {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        roughness: {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
        transparency: {
            param: string;
            transform: (value: any) => number;
            uniform: string;
        };
    }
    dependencies: string[] = ...
    displayName: string = "Ice"
    effectName: string = "ice"

    Methods

    • Configure les propriétés du matériau shader

      Définit les paramètres Three.js nécessaires pour le rendu correct de l'effet de glace :

      • Transparence activée pour l'alpha
      • Face avant uniquement (optimisation)
      • Depth write et test pour l'ordre de rendu
      • Extensions shader (derivatives pour normales)
      • Cubemap d'environnement initial

      Parameters

      • material: ShaderMaterial

        Matériau à configurer

      • Optionaloptions: any = {}

        Options de configuration additionnelles

      Returns ShaderMaterial

      Matériau configuré

    • Nettoie les ressources de l'effet

      Libère les références au matériau pour permettre le garbage collection. Appelé lors de la destruction de l'effet ou du changement d'effet.

      Returns void

    • Retourne les uniforms par défaut de l'effet

      Crée un clone des uniforms par défaut pour éviter les modifications par référence. Utilisé par le ShaderManager lors de la création du matériau shader.

      Returns any

      Clone des uniforms par défaut

    • Retourne les shaders vertex et fragment

      Fournit les sources GLSL des shaders au ShaderManager pour la création du matériau.

      Returns any

      Objet contenant vertex et fragment shaders

    • Appelé lors de l'application de l'effet à un objet

      Hook du cycle de vie déclenché par le ShaderManager quand l'effet est appliqué. Stocke la référence au matériau, réinitialise le temps global et applique le preset actuel.

      Parameters

      • object: Object3D

        Objet 3D cible

      • material: ShaderMaterial

        Matériau shader créé pour l'effet

      Returns void

    • Appelé lors du retrait de l'effet

      Hook du cycle de vie déclenché par le ShaderManager quand l'effet est retiré de l'objet. Nettoie la référence au matériau.

      Parameters

      • object: Object3D

        Objet 3D dont l'effet est retiré

      Returns void

    • Réinitialise l'effet à son état initial

      Remet à zéro le temps global de l'effet. Utile pour redémarrer les animations temporelles ou réinitialiser l'état visuel.

      Returns void

    • Configure les dépendances après construction

      Permet d'injecter ou de mettre à jour les dépendances après l'instanciation de l'effet. Réinitialise automatiquement les références internes si environmentManager est fourni.

      Parameters

      • deps: { environmentManager: EnvironmentManager }

        Objet contenant les dépendances

        • environmentManager: EnvironmentManager

          Gestionnaire d'environnement

      Returns void

    • Change le preset de type de glace

      Applique une configuration prédéfinie de paramètres pour simuler différents types de glace : glace claire, eau gelée, glacier, givre ou glace bleue. Met à jour instantanément le matériau actif si l'effet est déjà appliqué.

      Presets disponibles :

      • clear_ice : Glace cristalline transparente
      • frozen_water : Eau gelée naturelle avec bulles
      • glacier : Glace bleue profonde avec fissures
      • frost : Givre opaque
      • blue_ice : Glace arctique translucide

      Parameters

      • preset: string

        Nom du preset (clear_ice, frozen_water, glacier, frost, blue_ice)

      Returns void

    • Affiche un aperçu de l'effet

      Réservé pour une implémentation future. Pourrait afficher une prévisualisation de l'effet dans l'interface utilisateur avant l'application.

      Returns void

    • Mise à jour par frame de l'effet

      Fonction principale du cycle de rendu, appelée à chaque frame. Met à jour :

      • Le temps global (uTime) pour les animations
      • La position de la caméra (uCameraPosition) pour les effets de vue
      • Le cubemap d'environnement (uCubeMap) si changé
      • Les lumières de la scène via updateLights()

      Parameters

      • material: ShaderMaterial

        Matériau shader à mettre à jour

      • deltaTime: number

        Temps écoulé depuis la dernière frame (en secondes)

      Returns void

    • Mise à jour depuis l'interface utilisateur

      Gère les changements de paramètres depuis les contrôles UI (sliders, pills, checkboxes). Applique les transformations définies dans uiMapping, met à jour les propriétés internes et les uniforms du shader.

      Gestion spéciale :

      • Presets : Appelle setIcePreset() au lieu de mettre à jour directement
      • Checkboxes : Transforme boolean en 0.0/1.0 pour les uniforms
      • Sliders : Applique les transformations de plage (0-100 → min-max)

      Parameters

      • material: ShaderMaterial

        Matériau shader à mettre à jour

      • controlId: string

        ID du contrôle UI (ex: "pom-depth", "ice-preset")

      • value: string | number | boolean

        Nouvelle valeur du contrôle

      Returns void

    • Synchronise les uniforms de lumière avec le LightsManager

      Récupère la lumière directionnelle principale depuis le LightsManager et met à jour les uniforms correspondants dans le matériau shader. Cette fonction est appelée à chaque frame pour maintenir la cohérence avec les changements de lumière (intensité, couleur, position).

      Met à jour :

      • uMainLightPosition : Position/direction de la lumière
      • uMainLightColor : Couleur de la lumière
      • uMainLightIntensity : Intensité de la lumière

      Parameters

      • material: ShaderMaterial

        Matériau shader actif

      Returns void