ウディタはなんでも作れるので地球も作れます
ウディタ2.0、1280×720で描画した地球(72面体)。ウディタ2.0ではこれが限界だった。
ウディタ3.0Pro版、1920×1080で描画した金星(288面体)。ウディタ3.0の計算能力向上により実現。
■球の表し方
球はたくさんの面の集合で表すことができます。面が多いほど表面はなめらかになりますが、面が少なくとも球っぽさを出すことは可能です。
ウディタには自由変形機能があるので、四角形か三角形の面を描画できます。面は4つの点から構成されるので、点の3次元座標を指定することで、ウディタで球を表現することができます。
3次元座標の管理と2次元座標への変換の具体的な方法はこちらの記事をご覧ください。
一応描画に使ったコモンはありますが可変DBや通常変数に飛んでいるのでそのままだと使えないと思います。ご参考までに。
■多面体の3次元座標の計算
まず球をどのくらいの正確さで描くかを決めます。
30°ずつ線を入れていくと72面体になるので、今回はこれにしました。
次に半径を調べます。地球の半径は6,371kmらしいので637にしました。
あとは気合で手計算しました。※参考:三角比
半径をX座標だとすると、X座標に角度ごとの三角比をかけると、
その角度におけるX座標が出ます。例えば30°だと1/2をかけて319になります。
出てくる数字は4種類なので意外に楽に座標を求められます。
そんな感じで作ったのが下記のCSVです。あらかじめ可変DBの項目を列分開けておくと読み込めます。
なお、15°区切りにした288面体のcsvも作成しました。が、読み込んだところ緑帯が出たのでここで供養します。
■球の陰面消去
各平面の中心XYZ座標を取り、バブルソートします。その上でバブルソート列の半分までしか描画処理の対象としないことで、見えている半分側よりも遠い位置にあるもう半分の各平面は描画しないで済みます。
■テクスチャを貼る
今回の最重要ポイントはここです。地球は地球の表面を描いたもの、すなわち地図がたくさんあるため、テクスチャを得るのが容易です。ここでは舟形の地図を使いたいところですが、南極と北極あたりで三角形になって描画が乱れるので、正距円筒図法(メルカトル図法)の地図を使います。下記が参考HPです。
ここの地図を使っても良かったんですが線が入っていたので下記HPの画像を使いました。
※9月9日追記
違和感あるなと思ったら雲がありません。雲のある画像をNASAからお借りしました。
さらに、月~木星のメルカトル地図を高解像度で公開しているHPがありました。
上記の画像を使った月がこちらです。
※9月14日追記
Creative Commonsの高解像度画像を提供しているHPがありました。
さてここからが最も感動的なポイントなのですが、実は上記のデカい地図画像、分割せずにそのままテクスチャとして使えます。ウディタで動くエフェクト等に使われる画面分割機能を使うと、例えば72面体だと横12、縦6に分割してそのまま貼ってくれます。しかも重さはほとんど感じません。これはマジで感動しました。
つまり、球の表面を平面に描いたようなものを、ウディタ側で勝手に分割してくれるわけです。例えば人の顔とかもいけるかもしれません。夢が広がります!!!!!!
※9月14日追記
高解像度*60枚だとループ切り替えの部分で低速になるので運用は難しそうです。
■邪道:エフェクト化
上記の分割機能を使ってウディタ上で連写した画像をエフェクト化して再生すると60FPSが出ます。
根本的な問題として、「それなら別のソフトで完全な球を撮影した方が良くないか・・・?」というツッコミが入ると思いますが...。さらに言えば今や動画も使えますからね。動画でも問題ないわけです。
以上です。なんかあればDMください。
Comments