エフェクト
ray-marching

Ray-marching


デモ

ソースコード

import gsap from "gsap";

// ダイナミックインポートされるため拡張子あり、相対パスで指定
// Specified with a relative path and with an extension because it is dynamically imported.
import frag from "./fragment.glsl";
import vert from "./vertex.glsl";
import { viewport, utils, Ob } from "negl";

export default class extends Ob {
  setupMaterial() {
    const material = super.setupMaterial();
    material.precision = utils.isTouchDevices() ? "highp" : "lowp";
    return material;
  }

  setupUniforms() {
    const uniforms = super.setupUniforms();
    // uniforms.uLoop = { value: 15 }; // 2023/5/5 WebGL1.0対応 uLoopはシェーダ内で定数で定義に変更
    uniforms.uProgress = { value: 1 };
    uniforms.uDPR = { value: viewport.devicePixelRatio };
    return uniforms;
  }

  setupFragment() {
    return frag;
  }
  setupVertex() {
    return vert;
  }

  debug(folder) {
    folder
      .add(this.uniforms.uProgress, "value", 0, 1, 0.1)
      .name("progress")
      .listen();
    const datObj = { next: !!this.uniforms.uProgress.value };
    folder
      .add(datObj, "next")
      .name("Animate")
      .onChange(() => {
        gsap.to(this.uniforms.uProgress, {
          value: +datObj.next,
          duration: 1.0,
          ease: "power4.inOut",
        });
      });
  }
}

利用方法

⚠️

ダウンロードしたコードをプロジェクトに配置し、以下のコードを記述してください。

index.html

<img class="screen" data-webgl="ray-marching" data-tex-1="/sample1.jpg" />

使用画像・動画

  • こちらを参考にダウンロードした各ファイルを配置してください。