Heliodor 2021/03/17 17:15

少しだけ詳しく水たまりプログラム説明 その1

なんとなく買い溜めていたレトルトカレーの賞味期限やべぇ!と毎食ひたすらカレーを食べていたら、最後の一つで賞味期限が2021年ではなく2022年ということに気が付きました。

……カレー美味しいですよね。ヘリオドールです(挨拶)


今回はカレーとは関係無くプログラムのお話です。
先月の白い液体の水溜まりのプログラム、もう少し詳しく説明していこうと思います。
なんかパッと作ったみたいに見えますが、実際はかなり紆余曲折苦労があったんですよ。


さて、地面にたまった巨大な水たまり(白濁液)の中をバシャバシャ進んでいくというシチュエーションを用意するにあたって、まず真っ先に思いついたのが以前作ったプールの水面プログラムを流用することです。


プール用に作ったコレ

これを元にして水たまりを作るわけですが、水底や側面は水たまりに必要ないので、プールの上面だけを表示するようにします。

本当にただ不要なものが消えただけですね。
この水面を地面の高さまで下げて配置してみれば、とりあえず水たまりにはなりそうです。

今回は白濁液の水たまりですから、水面の模様を削除して白色にし、波もあまり派手に立てないように抑えておきます。


すると次のようなものができました。
分かりやすいようにポリゴンメッシュも一緒に表示してあります

ところでこれ、当たり前なんですが完全な長方形の水たまりなんですよ。
水面計算の時に作る格子メッシュ自体が矩形前提ですからね。
でも水たまりであるからには、もっと不定形で、せめて楕円をいくつか組み合わせた程度の形にしたいですよね。

そこで思いついたのがステンシルを使って水面メッシュを適当な形に切り抜くという方法です。


【補足】ポリゴンを描画するとき、普通はテクスチャ付きのポリゴンを画面に対して描画するわけですが、代わりにステンシルバッファという特別な画面に対して描画して、その結果できた画像をマスクとして使うことができます(お絵描きツールでいうところのクリッピングマスクのようなものです)。
このステンシル(≒クリッピングマスク)を使うことで、特定の部分だけ描画することができるようになります。


まずステンシルバッファを用意して、そこに楕円の形をしたポリゴンを書き込みます。
楕円はこんな感じで配置しておきます。

この状態で、ステンシルをマスクとして設定して水面を描画すると、水面のうち楕円に重なる部分だけが描画されるというわけです。

一応楕円を組み合わせた形の水面ができたわけですが……う、うーん、あんまり水たまりっぽくはないですね?

ステンシルで切り抜くと、切り抜きの境界線がハッキリクッキリしちゃんうんですよね。いかにもで切り抜きましたって感じで。まあ切り抜いたんですけど。


これはさすがにちょっとなあ……。
というわけで、次回は境界線の部分をどうにかしようという話に進みます。

つづく





フォロワー以上特典、Ci-enカードのお話。

フォロワー以上限定無料

まずは無料プランで様子見を。 お気軽にフォローしてみて下さい。

無料

【 500円 】プラン以上限定 支援額:500円

このバックナンバーを購入すると、このプランの2021/03に投稿された限定特典を閲覧できます。 バックナンバーとは?

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索