音と映像がぴったり同期したオーディオビジュアライザー。Blender 5.2で新たに追加された「音声周波数サンプル(Sound Frequency Sample)」ノードを使えば、従来のグラフエディターを使った面倒な工程を踏むことなく、ジオメトリノード上で直接音楽ファイルを読み込み、音の周波数に合わせたダイナミックなCG波形を作成できます。
本記事では、低音から高音までの音の強さを抽出し、時間経過とともに流れる立体的なオーディオビジュアライザーの作り方をステップバイステップで解説します。
それと参考にして記事にできたのは、サコッシュ伊藤さんの解説動画を見れたからです。
サコッシュ伊藤さん、いつも分かりやすくて最高のチュートリアルをありがとうございます。
Blender 5.2の新機能「音声周波数サンプル」の使い方が一気に理解できました。周波数の割り当てやシミュレーションノードの連携まで丁寧に解説されていて本当に勉強になります。動画を参考に記事として作らせていただきます。
【完成動画】
今回作成するオーディオビジュアライザーの概要
本チュートリアルで作成するノード構成の全体像と処理の流れは以下の通りです。
- 音声数値の取得:「音声周波数サンプル」で音楽データを解析
- 周波数分散:カーブの各ポイント(制御点)に低音〜高音の担当領域を「累乗」ノードで割り当て
- 波形の連続アニメーション:「シミュレーションノード」を使い、前フレームの波形を後方へ流す
- 自動削除:一定距離(Y軸方向)に達した波形を「ジオメトリ削除」で軽量化
- マテリアル・発光:波テクスチャと放射シェーダーでカラフルに発光
ステップ1:下準備とベースとなるカーブラインの作成
まずはジオメトリノードのワークスペースを用意し、波形の土台となる1本の直線カーブを生成します。
- 画面上のワークスペースタブから 「Geometry Nodes」 を選択します。
- デフォルトの立方体(Cube)を選択した状態で、「新規(New)」 ボタンを押してジオメトリノードを割り当てます。
- 初期配置されている 「グループ入力(Group Input)」 ノードは使用しないため、選択して
Xキーで削除します。 Shift + A> 「カーブライン(Curve Line)」 ノードを追加し、「グループ出力(Group Output)」 に接続します。- カーブラインのパラメーターを以下のように設定します。
- 開始 X(Start X):
-60 - 終了 X(End X):
60 - 開始 Z / 終了 Z:
0
- 開始 X(Start X):
これでX軸方向(-60mから60m)に伸びる直線カーブが生成されます。
ステップ2:カーブの細分化と位置設定ノードの配置
滑らかな波形を描くために、カーブ上のポイント(制御点)を増やします。
Shift + A> 「カーブリサンプル(Resample Curve)」 ノードを追加し、カーブラインの後ろに割り込み接続します。- 数(Count) の値を
100に設定します。- ※スプレッドシートの「制御点」項目で、ポイント数が100個に増えていることを確認できます。
Shift + A> 「位置設定(Set Position)」 ノードを追加し、カーブリサンプルの直後に配置します。
この「位置設定」ノードの 「オフセット(Offset)」 のZ軸の値を制御することで、音に合わせてカーブを上下に押し上げます。
ステップ3:「音声周波数サンプル」ノードの設定と音声の読み込み
音声データをノードに取り込み、Z軸方向のみに動く仕組みを構築します。
これでスペースキーを押すとBlender上で音楽が再生されるようになります。
Shift + A> 「音声周波数サンプル(Sound Frequency Sample)」 ノードを追加します。Shift + A> 「XYZ合成(Combine XYZ)」 ノードを追加します。- ノードを以下のように接続します。
- 「音声周波数サンプル」 のアウトプット ➔ 「XYZ合成」 の Z
- 「XYZ合成」 のベクトル ➔ 「位置設定」 の オフセット(Offset)
- ※XYZ合成を挟むことで、X・Y軸に余計な動きが出ず、Z軸(高さ方向)のみに波形が動くようになります。
- 「音声周波数サンプル」ノード内の 「開く(Open)」 ボタンから、使用したい音楽ファイル(WAVやMP3など)を選択して読み込みます。
【解説動画 ①】
作業中に音声を再生する(ビデオシーケンサー設定)
ジオメトリノード側で音声を読み込んだだけでは、スペースキーを押しても音が再生されません。音を聞きながら作業したい場合は、以下の手順で設定します。
- 画面左上のエディタータイプを 「ビデオシーケンサー(Video Sequencer)」 に変更します。
- 上部のシーン一覧アイコンから 「デフォルトのシーン」 を選びます。
Shift + A> 「音声(Sound)」 を選択し、先ほどと同じ音楽ファイルを読み込んで0秒00(1フレーム目)に配置します。- 音量が大きい場合は、画面右の 「プロパティ」 > 「シーン」 > 「オーディオ」 > 「ボリューム」 で調整します(例:
0.1)。
ステップ4:時間経過と周波数(低音〜高音)の割り当て
1. 時間の経過を連動させる(シーンタイム)
音声周波数サンプルの「時間」項目に現在の再生時間を渡す必要があります。
Shift + A> 「シーンタイム(Scene Time)」 ノードを追加します。- 「秒(Seconds)」 ソケットを「音声周波数サンプル」の 「時間(Time)」 ソケットに接続します。
2. ポイントごとに担当する周波数帯を分散させる
全ポイントが同じ周波数に反応すると、カーブ全体が上下に揺れるだけで波形になりません。カーブの端から端にかけて「低音〜高音」を均等に担当させます。
Shift + A> 「スプラインパラメーター(Spline Parameter)」 ノードを追加します。Shift + A> 「範囲マッピング(Map Range)」 ノードを追加します。- 接続と設定:
- 「スプラインパラメーター」 の 「係数(Factor)」(0〜1の値) ➔ 「範囲マッピング」 の 「値(Value)」
- 最初から(From Min):
0 - 最大から(From Max):
1 - 最小へ(To Min):
0 - 最大へ(To Max):
10
3. 「累乗」ノードを使った聴覚特性に合わせた周波数調整
人間の耳は音の高さを対数的に感じ取るため、単純な直線割り当てだと高音域ばかりにポイントが集中してしまいます。そこで 「累乗(Power)」 を使って低音域に十分なポイントを割り当てます。
Shift + A> 「数式(Math)」 ノードを追加し、モードを 「累乗(Power)」 に変更します。- 設定と接続:
- ベース(Base):
2.3(※初期テスト時は2など) - 指数(Exponent):範囲マッピングの出力
- ベース(Base):
Shift + A> 「数式(乗算 / Multiply)」 ノードを追加します。- 接続と調整:
- 累乗の出力を「音声周波数サンプル」の 「ロー(Low)」 に接続します。
- 累乗の出力に 「乗算(値:1.25)」 をかけたものを 「ハイ(High)」 に接続します。
- ※ハイ(High)側の値を少し大きくすることで、各ポイントが担当する周波数に幅を持たせます。
【解説動画 ②】
4. 波形の高さと位置の微調整
- 音声周波数サンプルの出力とXYZ合成の間に
数式(乗算)ノード(値:30前後)を挿入して、波形の振幅を大きくします。 - 必要に応じてその手前に
数式(累乗)ノード(値:0.5)を入れて全体の形状バランスを整えます。
【解説動画 ③】
ステップ5:シミュレーションノードで波形を後ろに流す
生成された波形をフレームごとに後方へ移動させ、流れるようなアニメーションを作ります。
Shift + A> 「シミュレーションゾーン(Simulation Zone)」(入力・出力)を追加します。Shift + A> 「ジオメトリ統合(Join Geometry)」 ノードを追加します。- 接続構成:
- 波形を作成した「位置設定」の出力を 「ジオメトリ統合」 に接続。
- シミュレーション入力からのジオメトリも 「ジオメトリ統合」 に接続。
- ジオメトリ統合の後ろに
位置設定(Set Position)ノードを配置し、オフセット Y(Offset Y) に30(または任意の移動量)を入力。 - その出力を 「シミュレーション出力」 に接続し、最終的に 「グループ出力」 へつなぎます。
これで毎フレーム新しい波形が生成されつつ、前の波形がY軸方向へ押し出されて流れていく仕組みが完成します。
ステップ6:ジオメトリ削除(不要になった遠方の波形を消去)
移動し続けるジオメトリを放置すると処理が重くなるため、一定距離に達した波形を自動的に削除します。
Shift + A> 「ジオメトリ削除(Delete Geometry)」 ノードを追加し、シミュレーションループ内に挿入します。- 削除条件の構築:
Shift + A> 「位置(Position)」 ノードを追加。Shift + A> 「XYZ分離(Separate XYZ)」 ノードを追加し、位置を接続。Shift + A> 「数式(大きい / Greater Than)」 ノードを追加し、Y軸の値をつなぐ。- 閾値(Threshold):
300に設定。 - 「大きい」の判定結果を 「ジオメトリ削除」 の 「選択(Selection)」 ソケットに接続。
これにより、Y軸方向へ300m以上進んだポイント(波形)が自動で消去されます。
【解説動画 ④】
ステップ7:メッシュ化と端部へのオブジェクト配置
1. カーブのメッシュ化(立体化)
Shift + A> 「カーブのメッシュ化(Curve to Mesh)」 ノードを追加します。Shift + A> 「カーブ円(Curve Circle)」 ノードを追加し、「断面カーブ(Profile Curve)」 に接続します。- 解像度(Resolution):
8 - 半径(Radius):
0.25
- 解像度(Resolution):
2. 両端にキューブ(立方体)を配置する
波形の両端にアクセントとして立方体を設置します。
Shift + A> 「ポイントにインスタンス作成(Instance on Points)」 ノードを追加します。Shift + A> 「立方体(Cube)」 ノードを追加し、「インスタンス(Instance)」 に接続(サイズ:5m)。Shift + A> 「端を選択(Select Endpoint)」 ノードを追加し、「選択(Selection)」 に接続(開始/終了の数を1に設定)。Shift + A> 「ジオメトリ統合」 を使って、メッシュ化した波形と両端のキューブを合体させて出力します。
【解説動画 ⑤】
ステップ8:マテリアルとライティングの設定
最後に発光マテリアルを適用してサイバー感のあるグラフィックに仕上げます。
- 3Dビューポートの表示モードを 「レンダープレビュー」 に変更します。
- エディタータイプを 「シェーダーエディター(Shader Editor)」 に変更します。
波形マテリアル(グラデーション発光)
- ジオメトリノード上で
マテリアル設定(Set Material)ノードを配置し、新規マテリアルを割り当てます。 - シェーダーエディターで以下のノードを組みます:
- プリンシプルBSDF:放射の強さ(Emission Strength) を
10に設定。 波テクスチャ(Wave Texture)➔カラーランプ(Color Ramp)➔ 放射カラー(Emission) へ接続。- 波テクスチャの方向を 「Y軸」 に変更。
- カラーランプのカラーモードを 「RGB」から「HSL」、補間を 「反時計回り(Counter-Clockwise)」 に変更し、両端の色を赤とオレンジ等に設定してカラフルなグラデーションを作ります。
- プリンシプルBSDF:放射の強さ(Emission Strength) を
キューブマテリアル
- 別の
マテリアル設定ノードを立方体側へ配置し、新規マテリアル「Cube」を作成します。 - プリンシプルBSDFの 放射の強さ を
3〜5程度に設定します。
【解説動画 ⑥】
ワールド環境
- 画面右の 「ワールドプロパティ」 にて、カラーの 強さ(Strength) を
0に変更し、暗闇の中にオーディオビジュアライザーが浮かび上がるようにします。
まとめ
Blender 5.2で新登場した 「音声周波数サンプル」 ノードを活用することで、複雑なスクリプトや面倒なFカーブの焼き付け(Bake Sound to F-Curve)を行うことなく、ジオメトリノード内だけで完結する直感的なオーディオビジュアライザーが作成できるようになりました。
カーブの長さやシミュレーションの移動速度、周波数の累乗パラメーターを調整することで、曲の雰囲気に合わせた様々なバリエーションを制作可能です。ぜひ好みの楽曲を読み込んで自分だけのビジュアライザーを作ってみてください。
