いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

100日で50弾! Day 68/ Bullet34:ライトシェード・コア弾

 100日チャレンジ『100日で50弾!』第34回、ライトシェード・コア弾です。紫の球を挟む2枚の板。これが今回の弾です。「なんだ、そりゃ?」とも言えますが、どっち道、架空の話です。エヴァンゲリオン使徒だって、両手が折り紙みたいに「パタパタッ」と広がったり巨大な目がデザインされた謎の飛行物体だったり、いろいろでした! 遊んでしまいましょう。板の間には動きながら明るさを変えるライトがあり、それが弾と板を照らします(ライト自体は見えません)。動画をどうぞ。

youtu.be

 それなりの雰囲気(気味が悪い?)になっています。ライトが急に明るくなったり場所がいきなり大きく変わったりしないよう、UnityのMathf.PerlinNose()を使っています。前にも使いましたがこの関数は引数を2つ取り、乱数を返します。引数が少し変化すると変える乱数も少し変わる、という性質を持ちます。単純に明るさを描画毎に乱数で決めると、激しく明るくなったり暗くなったりして不自然です。そこでこの関数を使うのです。使い道は多いです。ランダムな地形を自分で作るとき、x座標、y座標が少し変わったらz座標(高さ)も少ししか変わって欲しくないことも多いでしょう。また、弾が飛んでいるとき速さをランダムに変化させるとき、少ししか時間が経っていないなら速さの変化も少しにするのが自然ですよね。
 ライトはUnityのPointLightを使っています。これを球の近くに配置し、明るさと位置を微妙に変化させます。弾が動くと照らされる場所や明るさが変化するのが分かります。

 

 年末です。100日チャレンジも年内はあと1回。年明けもまだ続きますが、これまでなんだかんだで勉強になりました。ネットを検索すると、「100日チャレンジ」って皆さんずいぶんやってらっしゃいますね。勝ち負けじゃないけれど、負けないように頑張ります!