プリセットへ戻る
Mandelbulb-style iterative kernel
Ray marching with a surface hit condition
Finite-difference normal estimation
Diffuse and specular lighting

3D フラクタル

3D フラクタル Volume Shader の「Preset overview」では、Interactive 3D fractal with complex mathematical patterns. を中心に説明します。shader の複雑さ、ブラウザの描画経路、GPU の安定性を読むための内容です。

実測ではブラウザ、プリセット、ウィンドウサイズ、電源状態、熱状態を固定します。動作が重い場合は複雑度を下げるか停止してください。

性能要因

Nested iterations

Volume Shader BM の結果を比較する際は、ブラウザ、プリセット、ウィンドウサイズ、電源状態、熱状態を固定してください。条件が変わると FPS と frame time も変わります。

Normal estimation

Volume Shader BM の結果を比較する際は、ブラウザ、プリセット、ウィンドウサイズ、電源状態、熱状態を固定してください。条件が変わると FPS と frame time も変わります。

Long runs

Volume Shader BM の結果を比較する際は、ブラウザ、プリセット、ウィンドウサイズ、電源状態、熱状態を固定してください。条件が変わると FPS と frame time も変わります。

編集可能なパラメータ

MAXITER

Volume Shader BM の結果を比較する際は、ブラウザ、プリセット、ウィンドウサイズ、電源状態、熱状態を固定してください。条件が変わると FPS と frame time も変わります。

Ray step distance

Volume Shader BM の結果を比較する際は、ブラウザ、プリセット、ウィンドウサイズ、電源状態、熱状態を固定してください。条件が変わると FPS と frame time も変わります。

Lighting samples

Volume Shader BM の結果を比較する際は、ブラウザ、プリセット、ウィンドウサイズ、電源状態、熱状態を固定してください。条件が変わると FPS と frame time も変わります。

#version 300 es
precision highp float;
out vec4 outColor;
in vec2 v_uv;
uniform float u_time;
uniform vec2 u_resolution;

#define PI 3.14159265358979324
#define MAXITER 5
#define MAXDIST 6.0

float fractalKernel(vec3 ver) {
  vec3 a = ver;
  float b, c, d, e;
  
  for(int i = 0; i < MAXITER; i++) {
    b = length(a);
    if(b > MAXDIST) break;
    
    c = atan(a.y, a.x) * 8.0;
    d = acos(clamp(a.z / b, -1.0, 1.0)) * 8.0;
    b = pow(b, 8.0);
    
    a = vec3(