スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

三角関数計算精度の向上(10倍)

前回の弾幕を眺めてどうも汚いと思い、いくらか改良してみた。
どうすれば弾幕が綺麗になるのか、ぱっとでてきた考えは以下のような感じ。

1.弾の方向によるコマ数を増やす。前回ので360を16段階表示。
2.どのコマを表示するかの計算を切り捨てで行っているので、明らかにまちがったコマを表示することがある。

で、これらを改良したのが以下のような画像。
等倍精度より実用性を高めるため、弾数は減らしてあるが、弾を見ただけでその弾がどっちに移動しているかがわかるようになった。今回は16段階(12.5度おき)から72段階(5度おき)にまで向上させている。弾幕の形状も見やすくなった。が、見やすくなったことで今まで隠れていたダメな点も見えてきた。


それは、明らかに軌道を外れている弾があるという点。
弾幕が滑らかな曲線でつながっているのが理想なんですが、どうにもガタガタ。
さらにこの弾幕はある一点をねらって撃っているのですが、その焦点となるべき点をしっかり通らず、誤差があることがわかる。これがこれまで自機狙いをちょん避けしても当たってしまうというのの原因であると考えられる。考えた解決策↓

3.三角関数の計算精度が低い。
これまで内部計算において角度を表すのに整数しか使うことしかできなかった。これをさらに細かくあらわすことで、より正しい照準精度を持たせられる。

まぁ要は軌道を外れているのは1度単位でしか照準を合わせられず、1.4度とかが1度に丸められているためで、あるのではないか、ということ。

FastMathとかはfloatだし、毎回使っていては重いので、起動時に12ビットシフトint化して格納しているので、精度を上げるとなると、この配列の要素数がうなぎのぼりに増えることになる。まぁ仕方ないけど。ちなみに配列の長さは360。配列に角度をいれるだけでそのsin cosの値が引き出せる。

■二倍の精度
二倍精度これが先ほどの二倍の精度。つまり0.5度単位で照準を合わせられる。よくはなっているがまだまだ、といった印象。ただ、焦点を見るとしっかり収束しているので、ちょん避けで交わせる程度の誤差。配列の長さは720。いいんだけど、これ設定しずらい;360度を720と指定するってことですからね;感覚的にすごい違和感。


■十倍の精度
十倍精度0.1度単位で設定できる。これ以下は内部の座標情報を12ビットシフト、すなわち4096倍で持っているため、あまり意味はないと思う。ないことはないと思うけど。配列の長さは3600。大分なめらかになったと思うがまだ1dotずつ程度ズレてるものがある印象。これ以上精度を上げても数値的にはあまり変化はないだろうから根本的な解決にはならないような気がした。


4.内部座標から描画座標に変換するのに、四捨五入してみる。10倍の精度なのに誤差があるのは2で書いたように切り捨てが行われ感覚的に正しい位置に描画されていないという考え。

■十倍の精度+四捨五入
十倍精度四捨五入描画位置を四捨五入して決定してみた。内部座標を4096分の1単位で計算しているのをしっかり画面にも反映するにはこれしかない。中央の弾幕がより滑らかな軌跡を描くようになった。やはり計算は0.1単位で事足りる模様。四捨五入によりこれまで当たり判定が画像よりも右下よりにあったような感じも消えたと思われる。一石二鳥ですなぁ。



結局最後の「十倍の精度+四捨五入」を採用。速度的にはほとんど変化しないので綺麗な方を。
四捨五入が意外にも強力なようで、なんだかいろいろ改善された模様。動きもちょっぴり滑らかになった感じ。とりあえず自機狙いをちょん避けでちゃーんと避けれるSTGになりそうでよかったよかった。

(それにしても同じタイミングでSSをとるのは大変だったなぁ;DirectXなんかは三角関数をテーブル化なんてしなくてもよさげなのかなぁ。それでもはやければ問題なく角度を小数であらわせれるからいいなぁ。)
スポンサーサイト

[耳コピ]稲田姫様に叱られるから[完成?]

26日より耳コピを開始した風神録1面ボス・秋穣子テーマ「稲田姫様に叱られる」が一応完成しました~。45秒しかない短い曲ですが、大体4日かかりました。自身3曲目の耳コピ作品です。(耳コピ始めてもう1ヶ月以上経つのかぁ、はやいねぇ。)
まだ聞き取れてないと音とかあると思いますし、音量設定、エフェクト等の設定もまだまだ未熟;
ってか「信仰は儚き人間のために」よりもずっと難しいよ…

一応の完成を記念してPC用としてのmp3とケータイ用としての3gpを用意しました。
3gpは変換くんで行ったんですが、画像なしに設定するとエラー起きたんでやむを得ず、変換くんのデフォの静止画が付いています。microSDに移動させたりはできるようです。容量は550KB。96kbpsのステレオ、44100Hzという設定してあります。(500KBとかあって聞けない機種あったらモノラル化とかしてもう一個公開するので報告お願いします~。)
着モーションとしても使えるのでよければつかってください~w

■mp3
稲田姫様に叱られるから(PC用・mp3・192kbps・ステレオ・44100Hz・1MB)

■3gp
稲田姫様に叱られるから(ケータイ用・AAC・96kbps・ステレオ・44100Hz・550KB)

↓QRコード
稲田姫様に叱られるからループいれてないので最後ぶちっと切れてさみしいですよね;w今度暇あらば3ループ版作ってきます。mldも公開予定ですが、音量なんかがXGとケータイでは差がありすぎるので、要調整でまだ公開できないです。(トランペットが小さくなったうんです)

人恋し神様もむずいけど仕上げないとな;
信仰もできる寸前で放置中。

[東方アプリ]弾幕テスト

弾幕テストショット系統、弾のスクリプトの動作テストのためココで弾幕テストをやってみた。撃つのはおなじみ穣子さん。ボス周りを作ってないので、とりあえず実験用ということで穣子さんは雑魚敵扱いですwここら辺作ってライフも表示させたら結構ソレっぽいかな。このスクリーンショットはアプリにBMPでスクリーンショット取る機能つけたので、それでとりました。自機が発射する半透過の弾も綺麗にレンダリングされています。(ちなみにこの機能はにふさん作w)

ボスによる弾幕テストはなんと最初期以来w
最初期のものはキャラクターの中心から直線にしか弾を撃つことができない単純な作りのものでしたし、プログラムに直接パターンを書いていたものでしたが、今回は違う!
スクリプトを読み取り弾を発射するのは当たり前として、かなり複雑な撃ち方や回転移動も可能になり、東方原作の弾幕のかなりの数を再現できるようになったと思います。

んで、まずは、穣子さんということで、例のあの通常を再現w
自身を軸に発射位置を徐々に外側に移動させつつ回転しながら3Way自機狙いを撃つ、というアレ。実装的には3Wayではなかったりしますが。

さらにそれだけでは寂しいので回転する青弾も撃ちだして見た。24Wayです。
ただこれには速度調節がしにくいバグがあって改善しなくてはいけない;;


弾数をみると。なんとまぁ255個という;すごい数;60個くらい自機狙いで120くらい自機はずしという大胆な使い方ですが、こういう感じが東方かなぁと。飾り弾はおしみませんw
処理時間が62msと明らかにオーバーしてますが、これはスクリーンショット時の瞬間的な負荷のせい。実際には255発程度では42msくらいで大体やってくれます(N904i。20Hz動作)。20Hzでは50msまでOKなので~…うんまぁギリギリ。

ただ、この弾幕SS用に発射間隔めちゃくちゃせまくしてるからってのもあるせいか、MAXで300発を超えちゃってこの時はさすがに50msオーバーで処理落ちします;比較的早いSH902iでは30Hzではこの画像くらいの250程度で限界。
自弾も同一プリミティブで許容できる範囲であれば処理時間は大して変わらないが、もうひとつプリミティブが増えることを考えると、通常弾数は全部合計で220程度に設定するのがよさそう?ちなみにSHを20Hzモードにするともう+150程度はいけるかとww)
まま、密度がすごいのでこの辺をもう少し薄くしてやると、同じような難易度で弾数を減らすことができるのでまぁ工夫次第でどうとでもなるのかなぁ。(スペカ時は背景が2Dに切り替わるのでまだいけるはず。)


画像の難易度はハードくらいですかね?Lunaまで無事につけれるんだろうかw


■掲示板
意外に管理がめんどうなので消しました。
掲示板を毎日確認するのめんどうくさかった~。
コメントだけで十分そうですしね。

稲田姫に叱られるから耳コピ開始

諸事情によりテスト版のボス・秋穣子戦テーマ「稲田姫に叱られるから」はワタシが作ることになりましたwまぁ前々からにふさんには「今後のためにもほとんど自分で作るべき」と言われていたので、今ではちょうどいい機会だと思ってます。

それにしても難しいんですよ;稲田姫。原曲では混ざり方が凄まじく、ひとつの音を耳で追いきれません;聞きやすい音は確かにあるんですが、それだけでは足りない=聞こえない音が大量にある。と;
自身三作目、ちょっとは完成度をあげなくては!

というわけで、次回公開のテスト版は
プログラム・ミュージック・グラフィックス全部つん、ということですな;
ちょっとくらいクオリティが低くても笑わないことw


■開発状況
昨日今日と耳コピやってたんで、それ以外はあまり触っていませんが、
どうやら弾・敵などのスクリプトコントロール部分は完成したようです。
ショット周りもいろいろ改良して、弾幕バリエーションも比べ物にならないほど増加しました。
ささっと当たり判定も復活させないとなぁ。
当たり判定と自機撃墜、ボムをつければ作り直し以前のものに追いついたことになります。

ってグラッフィクが追いつかんw
霊夢の立ち絵を仕上げて魔理沙の立ち絵もかかないと~。

SSはある程度ステージ構成ができたとき、や、ボスを実装して弾幕をだせるようになったら公開します。

[東方アプリ]更新予定

予定ばかりで申し訳ないんですが、次回公開の完成度目安を考える。
もう一息で作り直し以前のゲーム性まで復活できるので、そろそろ公開の目安でも考えようかな、と。
(ゲーム性意外のグラフィックとプログラムに関しては、すでにこれまでとは比べ物にならないほどパワーアップしてます。)


■次回公開時実装予定表(現在公開中のものと比較して)
○シーン系統
・タイトルメニューの実装
・難易度選択画面の実装
・キャラセレクトの実装
・オプション画面の実装

○シューティング部分
・二種類の自機の実装。(霊夢&魔理沙)
・ボムの実装。(難易度を上げたいので、風神録同様その分パワー消費式にしてボム使用可能回数を増やすかも)
・くらいボムの実装。(最初は割と余裕をもたせています。)
・オプションは最大4つの可変式。
・スクリプトによる敵制御。
・スクリプトによるステージの出現パターンの実装。
・ボスの実装。
・ボス会話シーンの実装。
・スクリプトによるスペルカードおよび複雑な弾幕の実装。
・スペルカードカットインの実装。
・背景3DCGの美麗化。
・スクリプトによる背景動作制御。
・大幅な高速化。(N904iでは標準時26ms→16msと10ms程度高速化。)
・リプレイデータの保存・再生。(まだ容量に余裕があるので、保存個数に制限はないかも。ネイティブ保存?)
・Grazeの実装。
・スクリーンショット機能。(BMP(偽装GIF出力)、JPG。いづれもマイピクチャに保存)
・BGMの再生。

対応機種:DoCoMo FOMA 902iシリーズから。(一部機種を除く)
想定ファイルサイズ⇒本体100KB+SP50KB程度


随分前からこの目標を掲げてますが、作り直したためまだ半分くらい達成できてないかな;;;
シューティング部分の大半は今作ってるスクリプト部分ができればすぐにどんどんできていくと思います。あー大学が始まる4月上旬にはここまでやりたかったんだが、いけるんだろうか…自信がないな…

ホント遅れていて申し訳ないですm(_ _)m

難読化・最適化によるバグ

十字キーを押すともれなくアプリが落ちるというなんとも不可解な現象に襲われました。
久々の実機テストだったので、何か問題があるのかと思ってトレースをオンにしても特にエラーはでないで落ちているようだった。
さらに敵出現時にも落ちることが判明し、かなりテンパりましたw;

原因は、なんとまぁ難読化と最適化処理によるものでした。
なんかabstract voidで宣言したメソッドをpublic void とオーバーロードすると、通常のコンパイルでは正常動作するものの、最適化後はこれがうまいことオーバーロードがなされないようで、これを呼ぶとなぜかエラーも出さずに終了するようです。public abstract void と同じ修飾子publicをつけることでコレは解決されました。修飾子によってできるコードもかなり変わるということなんですね;

それにしても原因がプログラムじゃなくてホントよかった…
最近いじったようなところがずーっと怪しくて怪しくて、困り果ててました;
あるとき最適化をしないで動かしてみたら普通だったので、あぁ、もしや、となってなんとか解決。
そのオーバーロードしたメソッドもわかりやすいところでしかつかってなかったからよかったものの、こういうのが大量にあったら、もう鬱になっていたにちがいないw

[ヘタ絵]霊夢を描いてみた。

霊夢さてさて、そろそろグラフィック周りも作らないと。鬼門なのが立ち絵だろうか。ドットは根性でなんとかなるもののコチラは露骨に画力がw

立ち絵は想像以上に他のファイル類が小さく収まりそうなので、全身描くことに。(HSVでの変換で弾は一種類分のみいれればいいので。)カットインも原作同様全身がでる仕様で。
ってなわけで霊夢全身像。

ってなわけで霊夢の全身を描いてみました。コレでいくかはわからないので、とりあえずな線ととりあえずな色です。はぁ、絵師さん並の画力があったらな~とつくづく思いますなぁ…
まぁアプリで使うときには高さを240~256程度にするので、ちょっとはごまかせるはずだw

それにしてもなんだか随分前に描いた穣子の立ち絵と随分と絵の雰囲気が違うような気がする。あーーー、穣子も書き直しだw


■プログラム
背景プリミティブ作戦を実行しました。結果は予想通りの-3ms程度の高速化に成功。レンダリング2回も省略したのでもうちょっと早くなると思いきや、そうでもなくd4d自体はかなりレンダリングは速い様子。ただ、容量は大幅軽減。-5KB以上の省略に成功しています。なんたって圧縮率の高い64x64のBMP一枚構成ですからねw
ちなみに副産物な感じなんですが、スクリプトからプリミティブを生成できるようになった。ちょっと変えればメタセコのファイル読めそうな感じwそのうちケータイ用3DCGモデラーつくった時につかえそうだなぁwUVマッピングとかもできるし。
そんなこんなでN904iで現在公開中の延長バージョンのものよりも常時8ms高速というかなりな進化を遂げることができました。自弾も透けるし、いい感じになってきましたなぁ。
(弾幕テスト早くできるようにしないと;)
Go To 物置。
プロフィール

書いてる人:つん

まったりのんびり。書いてる人の息抜きブログです。

多分連絡先↓
metal_tsun@yahoo.co.jp

カテゴリー
リンク
月別アーカイブ
バロメーター
Java歴:2005年2月から今まで。
3DCG歴:2005年8月から数年。
C歴:2006年4月から今まで。
VB歴:2007年3月からちょっと。
Delphi歴:2007年3月からちょっと。
PIC歴:2007年5月から数年。
イラスト歴:2007年12月から今まで。
DTM歴2008年2月からちょっと。
PHP歴2008年4月からちょっと。
C++歴2008年4月から今まで。
C#歴2009年1月から今まで。
Objective-C歴2009年4月から今まで。
CSS歴2012年5月から今まで。

ブログ開始日2005/10/11


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。