![見出し画像](https://assets.st-note.com/production/uploads/images/55734152/rectangle_large_type_2_4859b8136152709054aec841dd1c7204.png?width=1200)
シェーダー勉強内容(6月)
はじめに
6月に勉強した内容です。
過去の勉強内容はこちら
NEORT
こちらの曲で出てきたMVの一部をプログラムで再現してみたくなったので作成しました。
fract()での繰り返し表現がどうしてもうまく行かなくてツイッターで質問してみたりネットでプログラムに詳しそうな人に聞いたりして何とか完成させました。
Boxをabs()でつくるとfract()でうまく増やせなかったのでstep()でboxを作ったのがポイントです。
もっといい方法があると思いますが…
float makeThree(vec2 pos, float r)
{
float d = 1e10;
float d1 = 0.0;
float d2 = 0.0;
float d3 = 0.0;
vec2 rotate = rot(pos, r);
pos.xy = rotate;
d1 = box(vec2(pos.x + 0.3, pos.y), vec2(0.1, 0.55)) * (1.0 - box(vec2(pos.x + 0.3, pos.y), vec2(0.07, 0.47)));
d2 = box(vec2(pos.x, pos.y), vec2(0.1, 0.5)) * (1.0 - box(vec2(pos.x, pos.y), vec2(0.07, 0.47)));
d3 = box(vec2(pos.x - 0.3, pos.y), vec2(0.1, 0.55)) * (1.0 - box(vec2(pos.x - 0.3, pos.y), vec2(0.07, 0.47)));
d = d1 + d2 + d3;
return d;
}
=========================================
float switchNum = mod(floor(mulPos.x) + floor(mulPos.y), 2.0) + 1.0;
float three = float(map(pos - 0.5, PI / switchNum));
三つで一つのBoxを升目の偶数奇数で90度ずつ回転させるプログラムです。
戻り値で回転をさせるようにしたのでコードを結構短くできたと思います。
ShaderToy
自分の中で結構うまくできたと思ったので初めてShaderToyに投稿してみました。
ShaderToyに投稿する利点は
・海外のすごいシェーダー書きからもっといいコードできる方法を教えてもらえる可能性がある。
・多くの人に見てもらえる。
があると思います。
そしたら5いいねと5コメントが来ました。
私の渾身のシェーダー(約1400文字)は俺なら305文字で書けるぜ!というコメントとこうすると短くなる的なアドバイスをもらいました。
貰いましたがまだ理解できてないです。
コメントもらえるのすごくうれしいです。あと見られた数も見れるので頑張ろうと思います。
Untiy
自分のゲーム制作で使っていけるようなToonシェーダーを作りたいと思い、制作中。
LambertShaderとHalfLambertShader、Blinn–PhongShaderをWikiを見たり記事を探して理解しつつ製作。
汎用性が多少はあるものを作りたいです。
Toonシェーダー作る解説サイトがあったのでひとまずはこれを見ながら作っています。これをベースに何か自分だけの機能を付けたいです。
解説付きでコードを載せてくれてるのでかなり勉強になります。
手法
flodという方法を勉強しました。
abs()するだけで左右対称にしたりできてかなり面白いです。
あとはToonシェーダーを作るための
・Lambert
・HalfLambert
・スペキュラの作り方
・リムライト
・フレネル
などを勉強しました。
これらはすべて暗記してるわけではないですが何となくわかるといった感じです。
これからの予定
ShaderToyにあるようなレイマーチングをやりたいのでレイマーチングを中心に勉強したいです。
Toonシェーダーの製作もあるのでそっちも勉強します。