![見出し画像](https://assets.st-note.com/production/uploads/images/34108757/rectangle_large_type_2_eb030753c1394d93cb9d41e6e84c4243.jpg?width=1200)
Cinema 4Dノードマテリアルでトゥーンの水を作る
Cinema 4Dにノードベースマテリアルが搭載されたときに、トゥーン調の水をプロシージャルで表現したくて、2年くらい前に挑戦したのですが、そのときはあまりできが良くありませんでした。
R20 のノードベースでアニメチックな水シェーダ。アイデアとしては悪くないと思うけど、設定をもう少し水らしくしたい。 pic.twitter.com/WUqLMG6UE1
— Toshihide Miyata (@cr_market) September 16, 2018
アンビエントオクルージョンをマスクに波打ち際を表現したりと方向性としては悪くないのですが、リファレンスをよく見ずどうやったら水らしくなるかわからず作っていたのが丸わかりです。
その後、水の流れはそれなりできたのですが、岸辺の白波を処理はまだできていませんでした。
水の流れマテリアルテスト#cinema4d pic.twitter.com/Dq2NnG6oid
— Toshihide Miyata (@cr_market) October 17, 2019
最近また挑戦しようと思い、いいアイデアがないかと思い「Toon water shader」で検索したところ、Unityでトゥーンの水のシェーダーを作りチュートリアルのページが見つかりました。
これを見て、なんとなくCinema 4Dでも再現したところ、それなりのものができたのでその作り方を紹介します。
水の表現のスタイライズ化
先程のチュートリアル読んでみると、水のトゥーン表現するために3つの要素に分けてスタイライズ化しているのがわかりました。
水の色
波
波打ち際の白波
水の色を作る
Unityのチュートリアルで水の色は、1色で表現のではなく、視点からの水深に合わせてグラデーションで表現されていました。なるほど、言われてみれば現実もそのとおりです。
チュートリアルの方では、「カメラから底までのデプス」と「カメラから水面までのデプス」の内積をとって測っているようでした。
Cinema 4Dでは、ノードマテリアルの「レイをトレース」と「コンテキスト取得」という2つのノードでこの水面からの距離が測れます。
<レイをトレース>の<原点>に<コンテキスト取得ノード>の<位置>を接続して、方向には<レイの向き>を接続します。
<レイをトレース>ノードを選択して、属性マネージャで<最大距離>をグラデーションにした水深までの距離を入力します。今回のシーンでは水深まで300cm程度でしたので300にしました。
<レイをトレース>の<正規化距離>をマテリアルノードの<発光>に接続します。<正規化距離>は、実際の水深の距離を<最大距離>までの間で0-1で再現してくれます。つまり、水深の距離が0なら0、300なら1という値を出力します。
このマテリアルを水面に割り当ててレンダリングすると、下図のようなレンダリング結果になります。
水深のグラデーションが得られたので、これを水の色にします。水の色にするには、<グラデーション>ノードを<レイをトレース>と<マテリアル>ノードの間にはさみます。
波を作る
波は比較的簡単です。<ノイズ>ノードを<グラデーション>ノードの位置に接続して、グラデーションを調整します。グラデーションの補間はステップにして、白と黒をスパッと変化させます。白と黒の境によって並の量が変わります。
また、波はまるではなく少し長さがほしいので、ノイズの全体スケールを20%、スケールのYを500%にしました。これはオブジェクトの大きさや表現したいもの(川、海、湖など)に合わせて調整します。
<レイヤー>ノードで水と<カラー比較(明)>で合成すると、波が出来上がります。
もう少し凝って、波に揺れを作りたい場合は、<ノイズ>ノードのコンテキストに<UV歪み>ノードを接続して、強度5~7%にして、置き換えに別ノイズを接続すると波が真っ直ぐではなく曲がるのでランダム感がでます。
波打ち際の白波
最後に波打ち際の白波を作ります。作り方としては2つ方法があります。
一つは、最初の水深のグラデーションを使って、水深のごく浅いところ白くする方法です。
もう一つは、水面のオブジェクトに一つの頂点カラータグを割り当て、フィールドを使って地面や浮き輪などをフィールドに入れて、交差しているとこに頂点カラーを付けてこれをマスクとして使う方法です。ただし、この方法は以下のような制限があります。
1)水面をポリゴン化しなければならない(頂点カラータグを作るため)
2)ポリゴンがある程度細かく分割されている必要がある
3)水に触れるオブジェクトをすべてフィールドに入れる必要がある
水深のグラデーションと違い側面にも白波をっはっきり出せると言うメリットはありますが、今回はオブジェクト管理の手間が少ない水深のグラデーションを使う方法にします。
ただ、下図のように単純に波打ち際だけを白くすると、波乱れが表現されずあまり自然ではありません。
水深のごく浅い部分を白くして、さらに、もう少し深いところまでを白くしたところまでをマスクとして、ノイズを減算合成して波打ち際の感じを作ります。最後にそれをレイヤーで重ねて完成です。
完成した状態がこちらです。UVやノイズを動かしてアニメーションさせました。
ノイズのサイズやレイをトレースノードの最大距離などを調整する必要がありますが、マテリアルで川も作れます。
細かい設定まで、説明していませんが、ノードの接続方法は紹介しているので、多分再現できると思います。
面倒なことはいいから、シーンファイルがほしいという方が有料になります。有料ページはシーンファイルのみになります。ファイルはR21以降であれば使えるはずです。
ここから先は
¥ 100
この記事が気に入ったらサポートをしてみませんか?