Blender: Cyclesでワープエフェクトその１前編

# Cyclesでノードエディタ使ってやる
### 0. 目次
・1. ごたく
・2. 無駄話
・3. 作ったもの
・3.1 エンジンのエフェクト
    ・ [放射ノード](#放射ノード)
    ・ [カラーランプ](#カラーランプ)
    ・ [BSDFシェーダーノード](#BSDFシェーダーノード)
    ・ [係数をもらってシェーダーミックス](#係数をもらってシェーダーミックス)
    ・ [ノイズテクスチャ](#ノイズテクスチャ)
    ・ [マッピングとベクトル](#マッピングとベクトル)
・ 4. おわりに
### 1. ごたく
Blenderの記事ってめちゃくちゃあるんですがCyclesの記事，
特にノードエディターの情報って少ないので
作ったものの顕示欲も兼ねて製作例を残しておこうと思いました．
よろしくお願いいたします．
### 2.ドラえもんはええぞ
映画ドラえもんってめちゃくちゃSFしてますよね．
個人的には「のび太の宇宙漂流記」とか「のび太のロボット王国」とか
「南極カチコチ」とかおすすめです．アマプラで見れるのでぜひ．
今回はドラえもんに登場するタイムパトロールが時間ワープをするために
お馴染みのタイムマシンのトンネルに入っていく瞬間のエフェクトです．

元ネタの場面としては映画「ドラえもん新・のび太の日本誕生」の
ラスト5分あたりで（~~ネタバレ自重~~）と別れるところになります．

### 3.作ったもの
https://youtu.be/RlRFCwWCqu8

早速説明していきます．

事前準備はレンダーをCyclesにして"ノードを使用"をオンにするくらい．
Blenderで作った奴はマテリアルを選択してノードエディタを開く．
（ノードエディタ何って段階の人までは攫えないからちょっとかじって戻ってきて）

ここ↓のサンプリングの最大サンプル数，
デフォルトで4096とか草ｗな数字になってるけど16くらいで十分と思う．
但し「デノイズ」をオンにしないとノイズが結構乗る．まあこれも味かと．
ビューポートは作業中のレンダリング，レンダーは本番用の設定．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3306514/d2bd8d65-a266-1364-ff72-6935748577a3.png" width="30%">

#### 3.1 エンジン
まず，エンジンの光．これはめちゃくちゃ単純です．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3306514/d3f98732-dbc5-5efb-f441-4da9352c1597.png" width="50%">

エンジンのモデル構造を簡単に書いてみました．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3306514/192ccfb4-9df4-0dcf-15c8-c633a8b17e70.png" width="50%">
まず①がめっちゃ光ります．
②は①の光を歪ませたりするための膜みたいなものです．
③は反射というかガラスっぽくしてます．


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3306514/fc43d9d5-092a-5225-2e93-617c5faeb0bc.png" width="100%">

#### 放射ノード
これが①のノード．
まず左から二番目の「放射」，これめっちゃ使う．
左から色の情報を受け取って， ___その色の光を放つ___ ノード．
これがマテリアルのサーフェス（表面）に出力されている．

発光しているかどうかの情報はちゃんと区別されていて，
後で「光っている面だけブラーをかける」みたいなことをできる．

一番右のマテリアル出力ノードにつなげるのを忘れずに．
ここが処理結果の出口であるので．

「光の減衰」はなんで付けたか覚えてないが，，
このノードからは現在どれだけ光が減衰しているかの数値が出力される．
とおもう．実のところようわからん．

#### カラーランプ
それを「カラーランプ」の係数が受け取っている．
貰った数値が0なら黒，0.5くらいでオレンジ，黄色，1で赤，，
のように， ___貰った数値に応じて色___ を出力する．
決してグラデーションを出力するものではない．

そもそも，黄色の点を持つカラー系ノードは
 ___一つ一つのピクセルに対する処理___ を決めてるので，
グラデーションのような複数の領域に跨った処理をするには
そのピクセルのUV上での位置を取得するベクトル系ノード（紫色の点）
が必要となる．自分はここの理解にかなりかかってしまった．

#### BSDFシェーダーノード

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3306514/cdc577fa-7f42-7a21-5c88-3aaedc39b400.png" width="100%">

これが③のノード．これに関してはたいしていうことはない．
グラスBSDFに関しては結構情報が多くて，「Cycles グラス」見たいに検索すれば
使い方が出てくると思う．やろうとしてることは，プリズム分光みたいなの？たぶん

光沢BSDFも，正直そのまんまの意味なので．シェーダーノード一覧の中にあるよ．

#### 係数をもらってシェーダーミックス
しいて言えば，シェーダー加算とシェーダーミックス．
ここでは加算の方を使っているけど，これは両方の処理結果を採用して重ねたいから．

一方ミックスはミックス具合を係数でコントロールできる．
例えば半透明を作ろうと思ったらディフュージョンBSDFと透明BSDFを0.5，半々でミックスできる．
そして何より強いのは，ピクセルごとに処理されるので，
場所によって係数を変化させられるということ．
一定基準以上赤い透明を1にする，みたいな芸当ができる．

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3306514/c3c925a4-3514-fc47-94b2-d86e47065993.png" width="100%">

こんな感じで．分かりにくいが，口の赤いところが透明になった．
テクスチャからRGB数値を得てRの数値をそのままミックス具合の係数にしてる．

#### ノイズテクスチャ

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3306514/ee9317a9-daeb-58e0-c08c-da55349702d2.png" width="100%">

順番が前後してしまったが，最後に②．
ここではさっき言ったピクセルごとの処理ではなく，
領域に跨るノイズを生成しているのでベクトル系のノードがある．

テクスチャ座標ノードの出力のどれかからいい感じに持ってくる．
この辺よくわかってないけど生成とノーマル（法線のこと），UV，オブジェクトの
どれかを使えば大抵うまくいく．

#### マッピングとベクトル
そしてマッピング．これもめちゃつよい．
なぜかというと，生成したノイズのテクスチャ座標を ___動かせる___ から．
座標が動かなければノイズ貼っても静画でしかないが，
マッピングの座標は ___アニメーションさせられる．___ モーションを付けれるのだ．
つまり，エンジンのそれっぽいノイズを動かして噴射のように見せれる．

そしてノイズテクスチャ，ボロノイテクスチャはテクスチャノード一覧にあるが，
この中にはいろいろ使えそうなテクスチャ生成ノードがあるのでとにかく試してほしい．
大抵の場合左二つのノードにつなげれば動く．
そして屈折．これは熱噴射で生じる揺らぎの表現とかプリズム分光っぽいのに使える．
屈折を使った熱噴射は次回やるかもしれない．

### 4おわりに
うーん長くなりすぎた，終わらなかった，，
肝心のワープの部分は次回に回させて頂きます．