見出し画像

シェーダーを始めて三か月経った

はじめに

どうしてシェーダーをやり始めたのか、三か月何したのか、などを書きたかったから書きます。

シェーダーを始めるキッカケ

VRChat(以後VRC)界隈でよくシェーダーの話が出るし、せっかくプログラミングを勉強してるのだからいつかやってみようと思っていました。2020年まではそう思ってました。

その後、2021年の1月5日にある人から『今年の抱負は何ですか?』と聞かれて
・アバター製作(残念ながら諦めた)
・シェーダー
と何人かいる前で答え、宣言した以上はやらないといけない状況を自分で作りました。

そうでもしないとやらない気がしたので。

でも2021年の1月6日にすぐに作業し始めませんでした。

それから2、3日してTwitterを眺めてたら、とあるアバター製作者さんが雪を積もらせることができるシェーダー自作したとツイートしてるのを見ました。
これが自分には大ダメージでして、このアバター作者さんは
・アバターを作れる
・シェーダーをプログラミングできる
の両刀だと感じました。

人から聞いた話ですがCGやってる人はソフトの機能に満足できなくてツールを自分で作ると聞きました。

学校でプログラムを勉強している自分はプログラミングしかできないのにCGの人は両刀でシェーダー書けるのかと。
なんというか、勝手に負けた感じがして熱が入ってその日からシェーダーを始めました。

最初の1か月ぐらい

シェーダーが何かわかっていませんでしたが前提知識として以下を持っていました。

・線形代数学が必須。これは大学数学らしい。
・高校の数学もバキバキに使う。
・とにかくシェーダー書くには数学がいる。
・頭良くないとダメ。

私は大学生ではないので線形代数学はわからないです。でも大した問題ではないと思っていて、検索したら公式出てくるでしょ。と思ってました。
二番目も三番目も検索したらどうにかなると思っていて、独学でどうにかなるかなと1月は思ってました。

とにかく全部やる気でどうにかなるんじゃないかなと思ってました。
こんなにもポジティブに考えれるのは何もわからない無の状態から始めたBlenderでのモデリングがBoothで販売できるレベルまで独学ができたからです。

これと同じ感じでできるんじゃないかなと思いました。

最初に見たサイト

シェーダーを作るにあたって方法は3つある気がして(Unityでの話)

・ShaderLabを使う
・Surface Shaderを使う
・UnlitShaderを使う

ShaderLabは自分でコードを書くわけではないのでプログラミングの学校に行ってるのに書かないのはカッコ悪いと思い使う気はありませんでした。Surface ShaderよりUnlitShaderで全部書くほうがカッコイイ気がしたのでいきなりこれを勉強し始めました。

このサイトを2日ぐらい眺めてシェーダーが何をしているのか何となく理解した後に

こちらでシェーダーの写経(書いてあるプログラムを自分でも描いてみる)をしました。

こちらではほとんどSurface Shaderの解説がされてますが数学的な内容はUnlitShaderでも同じなので1月の間はひたすらここでシェーダーを勉強していました。

ここでの勉強のおかげで

・シェーダーでどうやって影を作ってるのか
・視点によって見え方がわかるものはどうやって作られているのか
・半透明のシェーダーの危険性

などを多く学べた気がします。

そして模様が動くシェーダーを作りました。

サイバーな感じになってる服を見たことがあって欲しかったので作りました。

2か月目ぐらい

シェーダーを書いていたらだんだんとグラフィック関係に興味を持ち始めたのでこちらの本を購入しました。

まだ全部読めてませんがグラフィックの手法とか多く書いてあっていい感じです。

レンダリングパイプラインを少し勉強して、頂点シェーダーとフラグメントシェーダーの間にジオメトリーシェーダーというものがあることを知りました。

ジオメトリーシェーダーを使えばポリゴンが存在していなくてもシェーダーで計算してポリゴンを作れるというのが大変魅力的に感じたので

全部シェーダーで作られたアクセサリーを2か月目は作ってみました。

ジオメトリーシェーダーの解説記事は頂点シェーダーやフラグメントシェーダーに比べるとあまり存在してなくて、思い通りな感じにするのに相当時間がかかりました。

2か月目は『行列』が何やってるのか知りたかったので調べたりしてました。

2か月目ではもうSurface Shaderは使わなくなっていて、UnlitShaderを使っていました。
理由としてはジオメトリーシェーダーをSurface Shaderで使えるかわからなかったのでUnlitShaderを使うようになりました。

3か月目

3か月目が大きくいろんなことをしました。

最初のうちはUnityだけで通用するシェーダーを書いていたのですがだんだん検索しているうちにシェーダーで絵を描いていたり、いろんなシェーダー作品が集まっているサイトがあることを知り、自分も絵を描いて誰かに見てもらいたいと思いました。

有名なShaderToyというサイトを使ってみることにしました。

ここでいろんな作品を見て自分も絵を描きたいと思いました。

シェーダーを始めた最初のころはUnityで使える便利そうなシェーダーを作るのが目標だったのに今では数学を駆使して絵を描きたいという目標に代わってます。

なので3か月目は距離関数や数学を使って図形を書く方法を結構勉強していました。

ここにいっぱい書いてあります。

たった20行のプログラムが行ってることを理解するのに5時間以上かかったりしたのですがすごく勉強している気がして楽しいです。

シェーダーのライブコーディングを見てみたりもしました。MIDIデータに合わせて動くシェーダーを作ってみたくなりました。

3月の終わりから1週間でテーマに沿ったシェーダー作品を作るというイベントがあったので参加しました。

NEORTというサイトに公開したのですがこれが結構使いやすく、ShaderToyもいいけどNEORTだとShaderToyよりも自分の作品一覧を出した時の見た目がよくて、ShaderToyも使うけどこれからはNEORTで作品を作っていこうかなと考えています。

シェーダー書き始めて思ったこと

もともと美術部で絵を描いていて、アナログで細かな絵を描くのを得意としていたがそれをデジタルでやろうとすると誰でも描ける(拡大すればいいから)という理由で絵を描くことが嫌いになってしまいました。

でもシェーダーで絵を描くってのが意外と楽しくてこうやってプログラムで絵を描くのが自分にあってるのかなと絵を描くのが好きだったのを取り戻しました。

デジタルアーティストとか、メディアアーティストとかかっこいいなと思っていましたが今こうやってシェーダーで作品出しているので自分もデジタルなアートを発信することは不可能ではないと感じました。

シェーダーを書くという新しい趣味ができてとても嬉しいです。

理系だけど公式を覚えることができなくて点数が低くて大学進学できませんでしたが、好きな理系教科の知識を使って好きなことできるのがすごく楽しいです。

何に使うのか分からず高校数学でsinを学ぶよりシェーダー動かしたいからsinを学ぶ方がすごく効率もいいし楽しいです。

大学落ちて嫌いになった教科のことがもう一度好きになりました。

この記事が気に入ったらサポートをしてみませんか?