「元素周期律フラクタル幻想曲」のロジック解説 ― 118元素をどう光と音に翻訳したか

元素周期律フラクタル幻想曲

PLAYGROUND新コンテンツ『元素周期律フラクタル幻想曲』は、周期表の118元素それぞれを、原子番号・分類・電子配置といった実データから、AIを使わずにひとつのフラクタル映像とひとつの生成音楽へと自動的に翻訳するインタラクティブ作品です。ファイルサイズはわずか126KBと、非常に軽量です。

作品ページの「しくみ」パネルには要点だけを短くまとめていますが、ここでは実際に組んでいるロジックをもう少し踏み込んで、数式や具体的な数値まで含めて書き起こしてみます。

土台にある考え方はシンプルです。
すべての「見た目」と「音」は、その元素が持っている数値──原子番号、原子量、族、周期、分類、電子殻の構成──から一意に計算されます。ランダムに見える部分も、実際は元素ごとに決まった種(シード)から生成される疑似乱数で、同じ元素を開けば毎回ほぼ同じ「その元素らしい」表情が再現されます。何かを学習したモデルが生成しているのではなく、全部が数式とルールの組み合わせです。

1. フラクタルの形──マンデルバルブを歪ませる

映像の本体は、WebGL上でレイマーチングして描く「マンデルバルブ」という3次元フラクタルです。球面座標に変換した点を

r = |z|
θ = acos(z.z / r) × power
φ = atan(z.y, z.x) × power
z_new = r^power × (sinθcosφ, sinθsinφ, cosθ) + 元の点 + オフセット

という式で繰り返し変形し、原点付近に収束するかどうかで距離場を作っています。ここで元素ごとに変わるパラメータが二つあります。

一つ目は指数powerです。原子番号Zを0〜1に正規化し((Z-1)/117)、それを2.4〜10.4の範囲に線形に対応させています。つまり水素(Z=1)はpower=2.4のなめらかで単純な形、オガネソン(Z=118)はpower=10.4の非常に複雑でトゲの多い形になります。周期表を軽い元素から重い元素へとたどるにつれて、フラクタルの形そのものがなめらかから複雑へと連続的に変化していく仕組みです。このpowerにはsin(時間×0.05)×0.5というごく緩やかな呼吸と、低音域の音量に応じたわずかな揺らぎも加算されていて、静止画ではなく常にゆっくり脈打つ形になっています。

二つ目はオフセットという、いわばジュリア集合的な摂動ベクトルです。これは3軸それぞれに異なる意味を持たせています。X軸は族番号(1〜18を中心-9.5でずらしたもの)、Y軸は周期(1〜7を中心4でずらしたもの)、Z軸は最も外側の電子殻の電子数(価電子数)です。この3つを合成し、長さが0.11を超えないように正規化してから式に加えています。結果として、族が違えば横方向の歪み方が変わり、周期が違えば縦方向の歪み方が変わり、価電子数が違えば奥行き方向の歪み方が変わるという、3つの独立した軸でフラクタルの「個性」が作られています。同じ分類(例えば遷移金属)でもひとつとして同じ形にならないのはこのためです。

色は各分類(アルカリ金属、遷移金属、貴ガス……)に割り当てた基準色(アクセントカラー)を、シェーダー内のコサインパレット関数palette(t) = 0.52 + 0.48 × cos(2π(t + d))が再現するように、逆算した位相ベクトルdを分類ごとに事前計算しています。表面の輝き方(グロー)と霞み方(フォグ)は常温での状態によって変えていて、気体はグローが強く霧もかかりやすい(=淡く発光して見える)、固体は輪郭がくっきりして霧が薄い、液体はその中間、という対応にしています。さらに全体の自転速度は分類ごとの「反応性」係数(例えばアルカリ金属やハロゲンは1.7〜1.9倍、貴ガスは0.12倍)に比例させていて、反応性の高い元素ほど落ち着きなく回転し、貴ガスはほとんど静止して見えるようにしてあります。

なお、詳細画面の左下に出る電子殻リング図(ボーア・モデル)だけは生成アートではなく、各元素の実際の電子配置データをそのまま円環上に描いています(Z=104以降の超重元素だけは実測データが存在しないため、殻容量の上限(2,8,18,32,32,18,8)に従って理論的に近似しています)。

2. 音楽の生成──分類ごとの音階に乗せた、元素固有のメロディとリズム

音はWeb Audio APIだけで作っていて、サンプル音源は一切使っていません。構造は大きく「常時鳴っているドローン(持続音)」「元素ごとに生成されるメロディ」「元素ごとに生成されるパーカッション」の三層です。

ドローン(背景の持続音)

ルート音・5度上・1オクターブ下のサブベースという3つのサイン波(金属元素は三角波)を重ね、緩やかなローパスフィルターを通しています。振幅には周期約24秒の「呼吸」LFOと周期約154秒の「潮汐」LFOという、周期の異なる2つのゆらぎを重ねていて、短い周期では気づかれず、長く聴いていると確かに音量が満ち引きしていると感じられるようにしています。ドローンの音高はメロディと同じ計算式から求めつつ、常に65〜130Hzのオクターブに折りたたんでいます。これは、族や分類によって大きく変わるメロディの音域と違い、背景の持続音だけは常に低く落ち着いた帯域に固定しておくことで、長時間聴いても疲れにくくするための意図的な設計です。

音の高さ──族・周期・分類の三重の対応

メロディとドローンの基準周波数は次の式で決まります。

オクターブ = (周期 - 3) + 分類バイアス + (族 - 1) × (9半音 / 17) / 12
周波数 = 130.81Hz(C3) × 2^オクターブ

18ある族のすべてに別々の音の高さを割り当てているため、周期表を横に1列たどるだけで音がなめらかに上がっていくのが聴き取れます。そこに周期(重い元素ほど高いオクターブへ)と、分類ごとの音域バイアス(貴ガスは軽やかに高く、アクチノイドは重く低く、というように)を足し合わせています。

音階(モード)──分類ごとに響きの性格を変える

10ある分類にはそれぞれ専用の音階(モード)を割り当てています。アルカリ金属は明るい長調ペンタトニック、遷移金属はやや複雑なドリアン、貴ガスは3度を含まない開いた5度だけ、非金属は自然的短音階、アクチノイドは重く落ち着いた短調ペンタトニック、といった具合です。すべて「アンビエント/ヒーリング」として不快な響きが出ないよう、半音のぶつかりやトライトーンを含む音階は意図的に除外しています。

メロディ──ランダムな音符ではなく、元素ごとの「モチーフ」

メロディは毎回ランダムな音を鳴らしているのではなく、元素ごとに一度だけ生成される4〜19音程度の短いフレーズ(モチーフ)をループさせています。生成は完全なランダムではなく「バイアスのかかったランダムウォーク」で、直前の音から±1〜2度ずつ動きながら音階内を歩くため、跳躍しすぎない自然な旋律線になります。音域の広さ(何オクターブ移動できるか)は電子殻の数で決まり、殻の多い重い元素ほど広い音域を動きます。

このモチーフに対してさらに「休符パターン」を重ねています。どの拍を鳴らし、どの拍を休むかは分類ごとの確率(例えばアルカリ金属は8%しか休まない忙しない鼓動、貴ガスは46%も休む間隔の空いた旋律)で一度だけ決めて、以後はそれを繰り返します。加えて、テンポにはサイン波状の緩やかな「ルバート」(揺らぎ)を、元素ごとに異なる周期と位相で重ねているため、一定の機械的なテンポにはなりません。さらに、モチーフを一周するたびに35%の確率で1音だけ音階内の別の音に書き換える処理も入っていて、長時間聴き続けても少しずつ表情が変化していきます。

和音(コード)は分類ごとの音階そのものから2つの音度を抜き出して構成しており、遷移金属・ランタノイド・アクチノイドは42%、貴ガスは12%、それ以外は28%の確率で、メロディの音に和音を重ねます。

音色──金属元素だけが持つ「FM合成」の響き

遷移金属・卑金属・ランタノイド・アクチノイドの4分類には、通常のサイン波/三角波ではなく、周波数変調(FM)合成による金属的な音色を使っています。搬送波を、整数比ではない比率(インハーモニック比、例えば遷移金属は1.41倍)の変調波で揺らし、その変調の深さを音の立ち上がりから徐々に減衰させることで、鐘を叩いたときのように「最初は複雑に響き、次第に純音へ落ち着く」音になります。この比率や深さ、減衰の速さは分類ごとに異なり(遷移金属は明るく澄んだ響き、卑金属は鈍く短い響き、ランタノイドは高く煌めく響き、アクチノイドは重く低く唸る響き)、さらに原子番号から導いた微小なズレを一元素ずつに加えているため、同じ遷移金属でも鉄とコバルトでは微妙に音色が違って聴こえます。それ以外の分類(非金属・半金属・ハロゲン・貴ガス)は素直なサイン波/三角波のままで、澄んだオルゴールのような単音を保っています。

パーカッション──元素・族ごとに繰り返す「決まった拍」

初期のバージョンでは、拍を鳴らすかどうかを毎回コイントスのように決めていたため、いつまで経っても同じパターンが繰り返されず、リズムとして認識できませんでした。現在のバージョンでは、8ステップの固定パターンを元素ごとに一度だけ生成し、それをそのままループさせています。各ステップが鳴りやすいかどうかは分類ごとの重みテーブルで決まっていて、アルカリ金属・アルカリ土類金属は1拍目と5拍目を強く打つ四つ打ちのような単純で規則的なパターン、遷移金属・ハロゲン・ランタノイドは裏拍にアクセントが散らばるシンコペーションの効いたパターン、貴ガス・アクチノイドはほぼ1拍目しか鳴らないごく間引かれたパターンになります。

さらに元素ごとに0〜1の「賑やかさ」の値を持たせていて、これがパターンの密度(埋まっているステップの割合)と、拍そのものが進む速さ(最大で通常の4倍速)の両方を左右します。賑やかな元素は、パターン中の必ず「鳴る」ステップの一つに、2〜7回連打するロール(フィル)が固定で入り、さらに元のパターンを回転させただけの別テンバーのパターンを最大2つ重ねて、複数の音色が絡み合う小さなアンサンブルのように響かせます。打音の質感自体は常温での状態が決めていて、気体はフィルターの効いた柔らかい息のようなスウェル、液体は小さな水滴のような響き、固体は短く乾いたブラシ音になっています。

メロディとパーカッションの同期──ひとつの共有クロック

以前は、メロディとパーカッションがそれぞれ独立したタイマーで自分のペースを刻んでいたため、二つの層が徐々にずれていき、「一つの曲」として聴こえにくいという課題がありました。現在はパーカッション側の拍を刻む単一のクロックだけがマスターとして存在し、メロディは「次の音符まで何ミリ秒欲しいか」という希望値をそのクロックに申告する形に変えています。クロックはその希望値を、自分の拍の整数倍に丸め込んでからメロディを鳴らすため、メロディが持っていたランダム性(どの音か、休むかどうか、テンポの揺らぎ)はそのまま保たれつつ、実際に音が鳴る瞬間だけは必ずパーカッションの拍のどこかに揃うようになっています。これによって、ランダム性を犠牲にせずに「拍が感じられる」音楽になっています。

3. すべては元素固有の「種」から──決定論的な疑似乱数

ここまでに出てきた「ランダム」は、実はすべて元素ごとに一意に決まる種(シード)から生成される疑似乱数です。シードは原子番号と原子量から

seed = (Z × 2654435761) XOR round(原子量 × 97)

という式で一つの整数に変換し、mulberry32という軽量な疑似乱数生成器に渡しています。この生成器は同じ種を与えれば毎回まったく同じ数列を返すため、モチーフも、休符パターンも、パーカッションのパターンも、ルバートの周期も、フラクタルの微妙な形も、同じ元素を何度開いても再現されます。ページを開くたびに違う何かが生成される「都度ランダム」ではなく、「その元素の指紋」を毎回同じように描き出している、という点がこの作品の生成ロジックの核になっています。

おわりに──技術的な特徴のまとめ

映像はWebGL1(GLSL ES 1.00)によるレイマーチングのマンデルバルブ、音はWeb Audio APIだけによる完全なブラウザ内蔵の生成音楽で、外部のサンプル音源や3Dモデル、そして生成AIも一切使っていません。フォント以外の外部リソースを持たない単一のHTMLファイルとして完結していて、ファイルサイズは126KB弱、これで118元素すべての映像と音楽をまかなっています。原子番号・分類・周期・族・電子殻構成という実在するデータの読み替えとして映像と音を組み立てているため、正確性を主張できるのは電子殻リングの構成くらいのものですが、逆に言えば「周期表の数字が持っている構造」を、目と耳で辿り直すためのひとつの翻訳の試みとして作っています。

元素周期律フラクタル幻想曲 サンプル動画

元素周期律フラクタル幻想曲

元素周期律フラクタル幻想曲
Follow Música Terra