懐かしいCMの再現(FLIP Fluidsバージョン)

# 0. ねんがんのFLIP Fluidsを手に入れた!

既に終了していますが、先日BlenderのPluginセットが30ドルでお買い得という記事を見た。
どうせ眠らせるだけなので、チラ見したのですが、FLIP Fluidsがあるじゃん！

https://modelinghappy.com/archives/59488

お試し版もあるのですが、過去に使ってみたところWatermarkが入るのか、サイズがかぎられるのかであんまり気が乗らない感じでした。

そういう経緯があり「あのFLIP Fluids、おそらくバージョン限定だとは思うものの$30だったらいいか」ということでつい手を出してしまいました。


# 1. テーマを考える

デモを見ているとチーズのような柔らかさを表現してるものがありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/60892a11-1032-5ee4-a59e-38a1f3690976.png)

Twitterで見たCMの裏側みたいなものを見た後だったこと森、懐かしいCMを作ろうと思いました。
が、パラメータ理解のために、手探りで作ったのにバズってしまい、少し気が引けます。
改めて設定を確認しながら、作り方を残しておきます。

https://x.com/___monta___/status/1850200631593861379

# 2. 素材を取得

## 2.1. りんごの皮 Texture
かなり昔も使ったことがあるのですが、こちらにSubStance Designerを用いて作成したらしいリンゴTextureがあるのでありがたくダウンロードさせてもらいます。

https://www.texturecan.com/details/185/

## 2.2. リンゴのカット面 Texture
作りたい絵にはリンゴの断面が必要なのですが、Freeで使えそうなあまり存在しません。
ネットを探して見つけたものが以下。

https://photo-pot.com/?p=54462
https://photo-room.net/5138

私は結局自分で季節のリンゴ「とき」をカットして、写真を撮りました。(下のリンゴのカット写真はCC0として自由にお使いいただいて大丈夫です)
皮に赤いTextureを使うのであれば赤いリンゴの断面を使う方が良いかもしれませんが、あんまり気にならないでしょう。

![AppleCut.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/8ecc4a68-9d56-1e05-a577-bf997f165c96.jpeg)

# 3. モデリング

# 3.1. リンゴの断面形状を生成する。

# 3.1.1. 参考画像（Emply） の生成
先ほどの「リンゴのカット面 Texture」を3DViewへドラッグ＆ドロップします。
念のためサイズは現物に近くなるように合わせています。（Simulationなどに影響すると嫌なので）

ポイントは以下ですが、大体でいいです。
- リンゴの下がZ軸方向で０となるようにします。（後程、回転させるため）
- X軸方向の中心に芯の中心を合わせます。（CMが6分割したリンゴのため、この後、半月形状を作成するため）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/e01e255d-a84d-51b8-94c5-059720af19ed.png)

# 3.1.2. 1/6断面形状を作成する

手順としては
- Circle Mesh を生成（Shift＋A->Mesh->Circle) *分割数は荒い方があとのSimulationが楽です。
- 90度 x軸回転（r->x->90)
- 半分削除、面生成（Tab→半分頂点を選択→x, fで面生成）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/8d536fd9-7f16-8417-cfe5-ff99006efb27.png)

Tabで編集モードにして、後ろのリファレンスの形状に合わせる。
この時、上のProportional Editingを有効にしておくと近くの頂点も移動して編集しやすいでしょう。
- 形が落ち着いたらCtl+a -> All Transformsで移動や回転を適用してしまいましょう。（これをやらないとグローバルとローカルのScaleや軸がちがって混乱します。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/aad9ce6d-5c1e-d27d-6e59-addae73611be.png)

そののち、ModifierからScrewを適用します（Angleを60°、Step Viewportを4にします）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/4da38afa-2ce2-70aa-b0e4-3bb861a16ba6.png)

Z軸方向に30°回転させ、リンゴの中心とX軸が一致するようにします。
これをしておくとＹ軸方向の回転を与えると、ＣＭのようなリンゴが開くような動きとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/dbc32c99-8756-6085-05fd-7eed893ea6cd.png)

# 3.1.3 テクスチャを適用する。

後は内側（断面）と外側の2種のTextureを生成して割り当てていきます。

このあたりの詳細は割愛しますが、後程Subdivisionで分割をかけるのであれば、Bevel(Segmentを2にしてAngleを角だけにBevelがかかるように)入れてからSubdivisionを適用すると、リンゴの皮のTextureが果実側に回ってくることを防げます。
Bevelを適用することで、皮と果実の間にそれぞれのMaterialの整列したMeshが生成され、領域侵犯されなくなります。
ただ、UVが狂うので、私はBevelのパラメータをいい感じになるように設定したら、一度適用して再度UV展開しました。


| Without Bevel | with Bevel |
|:-:|:-:|
|  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/91851176-aff4-e259-309a-1b862fa508f6.png) | ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/99cfb7d0-d4ed-b915-0be3-0c3234bb472f.png) |

テクスチャを割り当て、Subdivision Surfaceを設定するとこれくらいにはなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/681630d8-a39c-ef0d-bd4d-9b446c54467e.png)

# 3.2. 1/6のリンゴに動きを付ける
この部分、GeometryNodeでやろうかなと思ったんですが、うまくいかず泥臭いことをやっています。
うまいやり方あったら教えてください。

# 3.2.1 最大フレームを設定する
250Frameは時間として長いので、120Frameくらいに設定します

TimeLineの右側のEndを120くらいに変更しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/4da7ebc4-5403-1415-ec99-50585d17e5f5.png)



次に、リンゴを回転させます。
- リンゴを選択して、Frame0でiキー
- Frameを最後の120に進めて、Rotation(私はX0、Y20、Z100としました)を設定してから、再度iキー
- デフォルトでは開始／終了が緩やかになってしまうので、ActiveKeyFrameのInterporationを「Bezier」から「Linear」へ変更

# 3.2.2 リンゴの数を増やす

- 回転させるためのEmpyを生成（CenterofApple01としました）
- 生成したEmptyを1/6のリンゴの親に設定します。(Object→RelationsからParentをCenterofApple01に)
- あとはCenterofApple01とApple01をCtl+dで複製します（5回）
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/7a3476b5-7c90-0789-75e9-d7d04c419a8c.png)


- CenterofApplexxを60度ずつすらします
ここで完了すると以下のような感じになる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/5f4aacc9-cd9f-f579-10bc-5e29f969975a.png)

実際のところ、UVもずらさないとすべての６片で同じ模様になるので気になる方は一つ一つずらしましょう。

# 4. その他設定

# 4.1 背景設定

元々かなり適当に設定していたのですが、HDRIを使って背景を設定します。
ありがたいことにCC0で提供してくるれているサイトがあるのでこの中から適当に庭っぽい画像を選びます。

こんなところでカレー食べたらおいしいかなぁという好きな画像を選びます。私は以下の「HDRIs / Medieval Cafe」にします。

https://polyhaven.com/a/medieval_cafe

これをWorldのSurfaceに設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/856a51f0-b959-90fc-777c-3e1caa6a155b.png)

# 4.2 カメラ設定


絵作りに関しては超ド素人なので、適当です。Previewを見ながら良さそうになるようにカメラパラメータも適当に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/03a94d1c-7265-711d-0751-e8712f77c7b1.png)


# 5. FLIP Fluids設定

ようやく本題。
Blender標準のFluids Sim設定と大きくは変わりません。
設定するのは、シミュレーション領域（Domain）と、液体の流入・流出(InFlow/Outflow)、そして影響を与えるものである障害(Obstacle)です。


## 5.1 ドメイン設定
Simulationを行う範囲をドメインとして設定します。今回はリンゴ＋リンゴの上（はちみつが落ちてくるエリア）のサイズでドメインを設定します。

まずはCUBEのMeshを作成し、CUBE Meshをドメインにするという流れです。
- Shift + a -> Mesh -> Cube
- Mesh名をDomainなどわかりやす名前にしておきます
- Physicsから、FLIP Fluidを設定し、TypeをDomainとします
その他、
- FLIPからAPICへ変更
- Domain Boundary Collisionsをすべてチェックを外す（下にこぼれ落ちて見えなくなったものは演算不要なため）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/547b8b7a-fb63-f9ea-508a-1eadd936cab2.png)


はちみつ風にするために粘度を設定します。
設定はドメインのWorld下にViscosityという設定があります。
また、SurfaceTensionを設定するとよりリアルになったのでこちらも設定しておきます。
パラメータは適当ですが、キャプチャをご参考にどうぞ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/2ee5064b-e061-4aeb-4ddf-c063ee35dfc8.png)

また、Advancedパラメータを見ると、ワーニングが発生していたため、処理が重くなりそうですが、FrameSubstepsの値をワーニングが出なくなるまで大きくします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/30e272d0-4053-43b1-186f-20f74fce4d16.png)


## 5.2. はちみつ流入設定

標準のFluidSimではPlaneからも生成できた気がしますが、FLIP Fluidsはダメでした。
なので、流入用の小さな球体を設定します。

- shift+a -> Mesh -> Sphere 細かすぎても仕方がないのでSegments 16、Ring 16くらいで
- サイズを小さくします。垂れてくるはちみつよりも気持ち小さいくらい
- 移動し、カメラの外側に設定します
- Physicsから、FLIP Fluid選択し、TypeとしてInflowを選びます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/d679ea5d-06af-b50c-9c39-89302d9eb104.png)

## 5.3. リンゴへのObstacle設定

リンゴにはちみつがぶつかったら止まるようにObstacle設定を行います。
- リンゴのMeshを選択
- Pysics -> FLIP Fluidから、TypeにObstacleを設定
- Obstacle PropertiesのFrictionを0.9に設定(リンゴの動きにはちみつが付いてくるように)
- ExpoortAnimatedMeshをチェック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/a386b6b1-828c-6e0c-c001-2b6ad434692f.png)

後はほかのリンゴのMeshへコピーします。(ほとんど設定していないのであまり楽はできませんが…)
- 5つのFLIP Fluid未設定のリンゴMeshを順に選択、Obstacle設定を繰り返す
- 5つのリンゴMeshをすべて選択
- 最後に先ほどFluid設定したリンゴを選択
- FLIP Fluid設定の一番下の「Copy Activate Object Settings to Selected Objects」をクリック

## 5.4. Bake!

あとはFLIPFluidsのBake Simuulations→Bakeです。
細かさによってはとても時間がかかりますが、待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/83516fa5-8664-0311-6347-79e297fa1e32.png)

## 5.5. はちみつMaterial設定

はちみつのマテリアルですが、BlenderKitに良さそうなMaterialがあったのでそちらを使わせていただきました。

https://www.blenderkit.com/


# あとはRendering

一度Bakeが完了すれば後は普通に静止画でも、AnimationでもRenderingで完了です！
（リンゴのジクをあとから追加しました。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/da52db0d-4cb5-6245-fa07-44f60d99c5e8.png)

なお、回転速度が遅かったようで、はちみつもりもりになってしまいます。
うちのマシンだとBakeに時間がかかりすぎるのでやり直せません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/16e1fa86-0c78-286a-501c-d6f8ad7cd02a.png)