shader入門から一年たったので、Shader周り濃い目で作ったものについてかく


2020年1月28日でshader入門して一年が経ちました
f:id:tonoshake:20200130224311p:plain


3Dモデリングの話もしたいので、そちらも含めて辿っていきます。
作ったものの話を進めるうえで紹介不可欠な人は、こういう記事でどう扱えばいいか分からないため匿名での紹介にとどめます。

12月末~年明け

自作アバターがVRCで使えるということを知ったのと、当時友達がBlenderで遊んでいたという二つの要因が合わさって、Blenderで3Dモデルづくりを始めました。
一番最初に作ったのは、別のゲームで作成したキャラクターです。

大学の図書館で見つけたこの本を見ながら操作を覚えました。

Blender 3Dキャラクター メイキング・テクニック
僕が見たものは、ちょっとバージョンが古かったのとボーン構造がVRC用と違っていたことで苦労しました。

出来たものに納得がいかなかったのでアバターワールドから持ってきたアバターを使って、喋るタイヤとしてVRCパブリックを渡り歩いていました。
日本人とは会えてなかったですが、不思議空間に魅了されていたので気にならなかったです。

確かこれ作った少し後ぐらいに友達から中古で買ったHTC VIVEが届いたはず

1月半ば~末

Blenderでポリゴンを張るのに疲れたのでSteamで販売していたKodonというVRソフトでスカルプトに挑戦しました。

1時間かからないくらいで出来るし、形を気にすれば自動ウェイトでなんとなく動くものになったので2~3日の間は毎日アバター作ってはアップロードしてました。

The Great Pugでとった写真が残ってました。(左の犬)
f:id:tonoshake:20200130233029p:plain

一人で彷徨う中たどり着いた坪倉家で、日本語を話すMさんに会いました。
色んなワールドを見せてもらう中で、Treehouse in the Shadeへ行きました。
そこで出会ったHさんとANさんと、連れてきてくれたMさんの三人の会話の中で"シェーダー"って語が出てきます。
更に聞いていると、Mさんが持っていた虹色のケミカルなサンドウィッチがどうやらそのシェーダーってものによって表現されていることが分かりました。

その時撮った写真 (1月25日)
f:id:tonoshake:20200130234541p:plain

シェーダーが気になったので数日こねくり回してましたがよくわからなかったので資料を購入します。ここが1月28日です。

そして色を時間で変えるシェーダーを作りました。

扇子持って踊りはじめたのもこのころ

二月

大学に向かうバスの中で作ったヒヨコを使って回転を試しました。
何で回したのか覚えてないですが、ポケモン的な混乱状態の表現がしたかったのかなと思います。
アニメーションが分からなかったので回転行列使って実装しました。


こんな感じの格好で扇子持って踊ったりマヨネーズ振り回したり色々してたらJapan TownでAWさんに出会います。
f:id:tonoshake:20200130235503p:plain
めちゃくちゃ面白いアバターを色々見せてもらって爆笑していたのを覚えています。


2月22日の夜に旅行先の鯖江のホテルでレイマーチングを試していました。
当時は距離をどれだけ進めるか決める手法を知らなかったのと、距離関数の扱い方が全然わかっていなかったので、正八面体を表示するために極小の固定長ですすめる方法で実装していました。
正直ぱっとしなかったので、これ以降しばらくレイマーチングから離れます。

3月

実物見ながらモデリングすれば楽にできるって気づいたので、持っていたベースのモデルを作ります。


頭おかしいくらい集中してたので二日で完成させられました。

このころAWさんやODさんに見せてもらったアバターから、ジオメトリーシェーダーというものの存在を知ります。


ちょっとやってみたもののこの時はよくわかりませんでした。


何となく竹を作りたくなります。
Blenderの配列複製モディファイアの利便性を知っていたのでガンガン使って伸ばしてましたが、長さ調整するためにBlenderを起動するのが面倒だと思います。
Unityで完結させるためにどうしたらいいかなって考えた時に、ポリゴン描画を増やせるジオメトリーシェーダーを思い出します。
出来たのがこれ

楽しくなり竹林そのものを好きに作りたくなって、竹林シェーダーというものを作ります。


今見ても結構いい感じだと思います。

このシェーダーを使ってVRChat上に初の自作ワールド「tonoTAKE」をあげました。

このころHさんに見せてもらったシェーダーの状態保持機構が印象的で、いつか使ってみたいなと思い続けるきっかけになりました。

AWさんにもじゃもじゃ毛の生えたアバターを見せてもらい、ファーシェーダーというものがあることを知ります。
楽しそうだなって思ったので、まず毛を生やすためのモデルを作りました。

そしてカビっぽくなったり毛根マップをもらったり色々あって、毛を生やすことに成功します。

得た知識で色々遊んでたら三月は終わりました。
記憶があいまいですが、ODさんの岩みたいなアバターを見せてもらったのもこのころだったかもしれないです。そこからテセレーションの存在を知りました。

4月

AWさんの呟きからパーリンノイズというものを知り、記事を色々見ながらそれっぽいものが作れます。

4月の残りはパーリンノイズを使って遊びます。
固定長レイマーチングで立体感を出してみたり、壁に張ったり、ファーシェーダーの毛根マップをノイズに変えたり。

tonosamaの作成は4月末の一週間で行いました。


作ったファーシェーダーと組み合わせて遊んでました。

5月

AWさんが見せてくれたベースをレンダリングしたものがかっこよかったので、Blender機能であるレンダリングを触り始めます。


このころにカサゴのモデルとこの画像を作りました。

カサゴのボーンをアニメーションさせる時に、ボーンをAdd propertyしていくのが苦痛だったので、Unityのスクリプトで自動化させました。



講義でこの動画を見て、光が回るタイプのレーダーが作りたくなります。

途中まで普通に作っていましたが脱線してこうなります。

このころAWさんから視界ジャックに使われるのはGrabPassって話を聞いて、存在を知ります。
画像処理の勉強でやった3x3空間フィルタをGrabPass使ってかけられるようにしたシェーダーと、ドット絵シェーダーを作ります。使い方次第なので同じシェーダーです。

ポスタリゼーションで色をいい感じにする部分でめちゃくちゃ凝りました。
VRChatに「Dotono」という名前のワールドとしてあげてあります。

このあと暫く空間フィルタ系シェーダーをぽつぽつと作ってました。

6月

映画「怪獣の子供」を見て深いプールが作りたくなり、波のシェーダーを作ります。
とりあえず波っぽいものを目指した結果ゲルストナー波にたどり着き、シェーダーに実装しました。


「Y180」って名前でVRCワールドとしてあげてあります。

シェーダー作りが迷走していたので、自分の落書きをもとにカエルの3Dモデルを作り始めます。

7月

出来たカエルがこれ


夏の目標にレイマーチングの習得を掲げて、スフィアトレーシングを使いだします。



8月

落選マーケットの締め切りが近かったので、ブースのモデルをつくりはじめます。


この時は形までできました。

盆でお酒を飲んだときに、団扇の花火が動いたら楽しいなって閃いたので、勢いで花火の団扇を作りました。


良い思い付きでした。

落選マーケットの締め切りまであと数日になったので急いでブースを完成させます。


色塗りが面倒だったので、全部シェーダーで色を塗りました。

僕の作業分が終わった後の待ち時間が暇だったので、紅葉を舞わせて遊んでました。


ひらひらさせるようなものはシェーダーで描いたことないなってだけで書いたので特にこだわりはありません。

9月

季節のシェーダーを描こうと思い、紅葉シェーダーを発展させました。


カメラを使った状態保持と物の検知を行って、積もったり掃除出来たりできるようにしました。
毎度毎度細かくメッシュを割りなおすためにBlender開くのがめんどくさかったので、テセレーションデビューしました。
「Autumn memory」って名前でVRChatにあげてあります。


9月末からレイマーチングをもりもりかき始めます。


帰りの電車とか昼休みとか暇を見つけては書いてたので、数日で大体空でかけるようになりました。

10月

オブジェクトスペースレイマーチングに興味を持ち、少しずつ書きだします。
レイマーチングして出てきた物体の表面に、物体ごとに異なる絵を描く と、物体の位置関係に応じて画を変えるみたいなことをやろうとして頭抱えてました。


出来ました。
空間を駆使した片方の物体だけワールドスペースのものをシェーダーフェスに出展しました。


Gさんに紅葉シェーダーは結構需要ある って言われて、配布を始めました。


配布用に真剣に調整したのでめちゃくちゃ疲れました。


フォントがベジェによって構成されてるってことを知ったので、ベジェ曲線の制御点を抽出すればどこでも文字表示できるのではと思い、フォントから制御点を抜き出してシェーダーにするスクリプト をPythonでかきました。


「パーティクルライブとかで文字メッシュを毎度作らなくても、シェーダー内で文字指定すれば表示できる」というものが理想でしたが、思ったより重かったので服の模様にしました。
結構気に入ってます。

31日からSTYLY Avater Diorama Award 2019に向けて急ピッチでジオラマ制作を始めました。

11月

6日でジオラマを完成させ応募しました。


Audience賞をいただけました。


シェーダーの方向性を見失い、ふて寝してたらゴジラの背中のとげがふと浮かんで、体から水晶はえたら面白いなって思ったので、なんにでも水晶を生やせるシェーダーをかきました。


ジオメトリーシェーダーで四角の板以外を作るのは初めてだったので、下書きしてから実装してました。


セルラーノイズを纏ったアバターをODさんに見せてもらって以降、ずっと気になってたセルラーノイズを実装しました。


今までにない見た目がたのしかったのでこねくり回して遊んでました。

12月

セルラーノイズの生々しい感じに中てられて、生々しいレイマーチングの画を描きたくなりました。


良い具合の気持ち悪さが出て満足してました。


iq氏のHappy jumpingを解説したさやちゃんぐbotさんの記事を見て、ライティング意識したものを描きたくなっていろいろやってました。
sayachang-bot.hateblo.jp

shadowrayという考え方もここから知りました。


fovをいじることの楽しさをこのシェーダーで知りました。

ハートが描きたくて描いたシェーダーです。


レイマーチングのオブジェクト描画位置に移動させた座標を、一部軸成分だけ転用したことが自分のなかでは革新的でした。


人なんだけど細かく見ると不定形なアバターが作りたくて挑戦してました。


めちゃくちゃ重たいのと描画順の問題で没になりましたが、Unityの画面では最高です。


12月21日はxRTechNagoyaでShaderについての話で登壇しました。
人生初登壇でめちゃくちゃ緊張して記憶がほとんどないんですが、登壇者の凄さは理解できました。
docs.google.com
その時の資料です。

1月

序盤は自分の中で方向性がめちゃくちゃになってだいぶ苦しんでました。
自分が一番やばいと思うことをやろう って思い、水槽を作り始めました。


以上が一年ほどでやってきたことの主だったことです。