ガラスや水面を通過した光が、床や壁に集光して描き出す独特の模様──コースティクス(Caustics)。
それは偶然性と規則性が入り混じった美しさを持ち、シーン全体の空気感を一気に引き上げてくれます。
質感表現として重要であると同時に、一度は自分の手で表現してみたくなる、どこか芸術的な光の表情だと感じる人も多いと思います。
しかし、Blenderは物理的に正確なコースティクス表現が得意とは言えません。
Cyclesでは計算コストが非常に高くなりがちですし、Eeveeでは原理的に再現できないため、設定をいくら調整してもきれいな集光にはなりません。
そこで本記事では、シェーダー側で疑似的なコースティクスを作る方法を紹介します。
物理的に正しい計算ではありませんが、軽量でコントロールしやすく、見た目として「それっぽい」コースティクスを得ることができます。Blenderのノードを理解している方であれば、応用の幅も広く、演出表現として非常に強力です。
今回は、Procedural Caustics(プロシージャル・コースティクス)として、
ライトパスノードを使った影作りの基本的な考え方と、コースティクス作成の実用的なノード構成を順を追って解説していきます。
この記事は、シェーダーでプロシージャルなコースティクスの作り方を解説している中級~上級者向けの記事です。
難易度
(ものすごく難しいことを言ってるわけではないですが、説明が上級者向けというか、1つ1つのノードについては解説していません。ある程度シェーダーノードの効果をわかっている人向けです。)
光の分散シェーダーの作り方を知りたい方や、ダイヤモンドを作りたい方はまず以下の記事を読んでからこの記事を読むことをオススメします。
レンダリング設定を使ってコースティクスを作りたい方はコチラ↓コースティクスについての簡単な解説などもあります。
コースティクスをシェーダーで作るとは?
さっそくですが、コースティクスをどうやってシェーダーで作るのか説明します。
まず、右図のように、Mix ShaderのFactorにLight Path(ライトパス)ノードのIs Shadow Ray出力をつなぎ、
- 上:オブジェクトのマテリアルのシェーダー(今回はダイヤモンドのシェーダーを接続しています。)
- 下:Transparent BSDF
をつなぎます。
Is Shadow Rayの判定部分で、影を直接シェーディングすることが可能になります。
影の部分は透過として扱う必要があるので、Transparent BSDFを使う必要があります。
つまり、コースティクスに見えるようにシェーディングで影を加工していこうというだけの話です。
ちなみに右図の下側に載せましたが、
NormalとIncoming出力の内積をTransparent BSDFに入れると、オブジェクトの形に沿って光が入ってきた方向から、放射状に白~黒のグラデーションができ、加工しやすい下地になります。(Incomingはカメラレイの移動によって変動しますが、影になると静止します。)

ライトパスノードについての解説記事↓
プロシージャルコースティクスの全体
今回作るノードは右図のようになっています。途中でグループノードがあってその中でいろいろやっていますが、仕組みはシンプルです。
- まず、ライトパス(Light Path)ノードでシャドウレイ(Is Shadow Ray)を使ってコースティクスを作る部分と、ダイヤモンドそのもののマテリアルを分岐させて作っています。
- コースティクス部分を、影の形のコースティクスと放射状のコースティクスにわけて合体させています。
- 影の形のコースティクス:影の中で形に沿って光を作ったコースティクスの部分
- 放射状のコースティクス:球座標を使って、放射状に光が散るような形のコースティクスの部分
- ❸、❹のコースティクスの部分は、Dispersion(光の分散)を作るときのように、RGBで分離させて少しズレを作り、Add Shaderで加算しています。

影の形のコースティクス
影の形のコースティクスは、そのまま、オブジェクトの形に沿ったようなコースティクスを作るための部分です。
NormalとIncomingの内積からの白黒グラデーションをノイズやテクスチャで変形させて、マスクを使ったり掛けたり足したりしていい感じの形を力技で作ってるだけです。あまり効率的だとも思わないので、もっとうまくできるよって人は自分でいい感じのを作ってください。
RGBの色に分割してTransparent BSDFに接続して、Add Shaderで足しています。
色のズレは、真ん中のFigure Causticsっていうノードの中で形を変えてるときにズラしています。IOR OffsetっていうパラメータでR,G,Bごとに0.005ずつズラしたパラメータを入れることで結果的に色の分散を表現しています。

Figure Causticsの中身
ここもNormalとIncomingの内積での出力をいじっているだけです。ノイズテクスチャ使って変形してます。
あとはAddやMultiplyなどで明るさを調整しているだけです。
この内容はテクスチャを変えてみたり、各自で好きなように変形させて、オリジナルなコースティクスを作れます。

放射状のコースティクス
放射状のコースティクスでは、色や光が放射状に分散していくようなコースティクスの形を作っていく部分です。
ほぼSpherical Dispersionというノードの中でいろいろやってて、これも同じように少し形をズラして、RGBごとに分離しています。
Transparent BSDFに接続して、Add Shaderで足しているところなども同じです。
ライトの位置
ライトの位置が結構重要で、オブジェクトの中におくことで、影に強い放射状の光が出現します。
つまり、
- 影の形を強調する、外側からのライト
- 放射状の形を強調する内側からのライト
が必要になってきます。

Spherical Dispersionの中身
長かったので、左側・右側でわけました。
左側
放射状のパターンは、Blender5.0から導入された球座標のノード(Separate/Combine Spherical)を使っています。
この球座標のR, Phi, Thetaにズレを足したり、調節用のノードを挿入して外からパラメータとして制御しています。
Menu Switchがあるのはテクスチャでの色ズレを作るか、ただ数値を入れてズラすかを切り替えるためです。(いらないかもしれません。)

右側
球座標からのベクターからボロノイテクスチャで放射状のコースティクスの形を出します。
そのときにノイズテクスチャで歪めたりホワイトノイズテクスチャでぼかしたりしてるだけです。

これらのパラメータは内容わかってないとなかなか自分の思い通りの形ってできないです…。
レンダリング設定など
以前ダイヤモンドを作る記事でも書いたんですが、分散とかコースティクス関係のレンダリングをしたいときはレンダープロパティのLight Pathsなどの設定を調整した方がいい場合が多いです。(どんな物質かにもよりますが…)
- Max BouncesのGlossyとTransmissionを上げる
- Filter Glossyを下げる
など。
光の調整
- 影の形を作るようのライト(弱め)
- 放射状のコースティクスを作るようのライト(オブジェクトの中から照らす)
など複数のライトを使うと効果が出やすいです。あまり大きさやアングルでも形が変化しますので、ライトの設定も重要になります。
また、あんまりやりすぎるとおかしくなるかもしれませんが、欲しい光沢とか、消したい影やコースティクスを調整するためにライトリンキングとか使ったりして調整もできます。
コンポジット
仕上げではコンポジットでGlare効果を複数使うと、キラキラするかなーと思いました。
- Streaks…星みたいなとげとげしたキラキラ感(ライトを本当に極小にする必要あり)
- Ghosts…フレアのような光の線が出たり、全体的に画像がボケて明るくなる。かなり弱く使ったほうがいいかも

まとめ
今回ダイヤモンドでのコースティクスのことしか言ってないですが、放射状コースティクスも形を歪めたりもできるので、その他の形にも使えます。
やっぱり本物の画像とか、本物を見てどんなコースティクスが出るんだろうというのを知っといた方が作りやすいかもしれません。または、本当に自分の好きなように表現として、綺麗なコースティクスを作りまくってみるのもいいんじゃないでしょうか。
今回あんまり細かく説明してないので作りたいのにわからなかったぞと言う人もいたかもしれません。まず、コースティクスの原理と、レンダリング設定、光の分散、球座標についてなどを理解してから読むとできるようになると思います。以下の関連記事など読んで作ってみたりしてください。
球座標についてはまだ解説してないので、いつか解説したいとは思っています。数学分野にある概念なので、youtubeなどにわかりやすいチュートリアル動画があると思います。
関連記事
光の分散シェーダーの作り方の解説
レンダリング設定を使ってコースティクスを作りたい方はコチラ↓コースティクスについての簡単な解説などもあります。
ライトパスノードについての解説記事
シェーダーでマテリアルを作るときのガイド記事。シェーダーの記事まとめです





コメント