せっかくなので、いろいろ遊ぶ。
マウスカーソル直下のピクセルをフレームバッファから取り出して、その場所のテクスチャIDとUV座標から、テクスチャを書き換えて新しいテクスチャを生成する、というデモ。マウスカーソルに連動して丸の位置が変わる。静止画だと何が何やらって感じだけど。。。
レンダリングに時間がかかるのでもっさりしてるけど、ちゃんとカーソルに追従してくる。手前に他のオブジェクトが入り込むと途切れるが、これはしょうがない。
歪んでいるが、これは遠近法の補正の問題。頂点単位で遠近法を適用しているので、画面に占める面積が大きくなると、歪みも大きくなる。
機械的にテセレーションを行うと、かなり良くなる。
テセレーションは、各辺の長さを測って、しきい値以上の長さの辺があれば一番長い辺を2分割(2点間の補間)して、再びテセレータに入れる、という再帰処理。レンダリングステージでなく、モデル作成時に分割を行っているので、レンダリングへの追加コストは不要。ただしデータが増えるデメリットはある。
テセレーションってどんな意味なんだ?と思って画像検索してみたら、想像以上に言い得て妙な感じ。
UV座標を取り出したい場合、フレームバッファに当該ピクセルのノーマルやらUVやらいろいろと記録されてるので、いちいちレイキャストとかをやる必要はない。都度ポリゴンを探したりしなくていいので、スクリーンの任意位置のテクセル座標の取得は簡単につくれる。
例えばTPSで銃を撃ったら壁に弾痕が付く、みたいな処理の場合は、ポリゴンに対してレイキャスティングして着弾点を探す必要があるので大変。FPSであれば、画面中央のピクセルのUVを参照すれば当該のテクセル座標が得られる。
いちいちテクスチャ書き換えてレンダーに注入する処理が冗長だけど、まぁ、これに関してはレイキャストを使ったところで必要な処理なので、しょうがないと割り切る。
今の所、ポリゴンに関する情報は入れてないので、ポリゴンを探したいときは困りそう。ポリゴンに関してはどうやって持てばいいかあまり想像がつかない。ポリ1枚1枚にlongでユニークな番号をつけるとか? 単純にユニークIDを持つだけじゃなく、座標変換前後での連続性とかも必要なので、ちょっと面倒そう。当面使う予定はないので、必要になったら考える。
***
そーいえば、スプラトゥーンのプレイ画面って見たことないな、と思って、youtubeで1本見てみたが、結構ハードコアなゲームなのな。被ダメージのエフェクトが脳内で血に変換されてそう感じるだけかもしれないけど。
***
せっかくなので何かゲーム作ってみたい気もするけど、そうなると処理の遅さがネックだよなぁ。ソフトウェアレンダリングなCGとかもあるし、頑張ればもっと早くなるんだろうけど。
1Mポイントに対する処理で数十ms、位の時間感覚だと、デバッガを使ってもネックが見えてこないのがつらたん。どんな処理してるか想像がつかないから、どこがネックになってるかも想像つかない。
昔遊んでてまた遊びたいゲームだと、無限回廊とか、ネイビーミッションとか。
前者はPS4とか買えばできるっぽいけど、皆さん御存知ワタクシSONY嫌いマンですので。
ネイビーミッションはPCゲーだし今でも多分動くんだろうけどね。
トリノホシとかも思い出深いけど、そんな事言い始めると当時やってたゲームだいたい懐かしいだろうしな。白中探検部とか。
2D画面なら描画楽だろ、と思ってCICから指示出す感じのゲーム作りたいなーとかは思ったこともあったり。3次元の座標の取り扱いとかが面倒だったのでやめてたけど。
今回、3Dのレンダラを作ってみて、3Dの描画は相変わらず大変だけど、少なくとも内部での座標変換はかなり高速に動いてるので、ここだけを取り出して2Dのレーダー画面みたいに表示するゲームくらいなら作れそう。レーダー画面なら飛行機とか船とかのアセット作らなくても、アイコン考えれば済むし、もっと言えばNTDSのアイコンそのままパクってきてもいいわけだし。
2Dは横スクロールSTGとかは作ったことあるけど、シーン管理するの面倒なんだよなぁ。ちゃんとしたエンジン使ったことないのでどうやって管理すると楽なのかみたいなノウハウがわからない。エンジンというか、オブジェクト指向とかの話かもしれないけど。
まぁ、UntiyなりUnrealなり使えるようになれ、って話ですな。。。
***
最近ソフトウェアばっかりなので、そろそろハードウェアで遊びたい。
サニャック効果とか、あれ100年前の実験なんだよね。今なら簡単にそれっぽい実験できるんじゃね?とかちょっと思ったり。youtubeで探してみると、それっぽい動画があるけど、結構大規模なレーザー管使ってて、なかなか大変そう。ただ、レーザー管が必要、というだけの話なら、最近ならレーザー加工機用の樹脂くらい一発で溶かすようなレーザー管も入手できるわけで。怖くて使いたくないけど。
二重スリットの干渉実験とかならレーザーポインタみたいな低出力のレーザーでも肉眼で見えるわけだから、そんなに出力はいらないはずなんだよな。光ファイバー通したり、鏡でループさせたりすると、自遊空間よりは損失はでかいだろうけど。
0 件のコメント:
コメントを投稿