レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
おちゃめくらぶ掲示板
-
プチコン3号、ついに発売!
長らく秋発売となっていた3DSアプリ「プチコン3号」がついに11月19日にダウンロード販売
開始されたにょ。
私も早速先日入手したNew 3DSと旧3DSの2台分のプチコン3号を購入したにょ。
https://twitter.com/ochame_nako/status/535075835300950016
さて、プチコン3号の新機能は気になるところだけど処理速度の向上も気になるところだと
思うにょ。
プチコン3号はmkIIと比べて10倍の速度を目標に開発されてきたけど話半分としても5倍
くらいの高速化は期待できそうな気はしていたにょ。
そもそも3DSはDSiと比べて5〜6倍程度はCPU性能が向上しているからね。
ただし、すでに初代と比べて最適化が進んでいるmkIIと比べると不利になっているけどそれを
JITコンパイラのような仮想マシンコードへの変換があるため5倍を超える高速化も十分に
可能になりそうにょ。
また、プチコン3号はNew 3DSに対応しているためNew 3DSで動作させると高速動作が可能に
なるとのことにょ。
New 3DSはウワサではCPU性能は旧3DSの3倍、メモリは2倍とのことなのでプチコン3号の動作
速度は旧3DSと比べて3倍くらいの向上が期待できそうにょ。
というわけで、まずは旧3DSとNew 3DSとの速度差を見てみるにょ。
これにはプチコン3号にデフォで含まれているサンプルプログラム「EX8TECDEMO」のOTHERの
中にある簡易ベンチマークテスト「SPEED TEST」の値で比較してみたにょ。
SPEED TEST 旧 3DS New 3DS 速度比
たしざん 155888 514264 3.30倍
PRINTぶん 22355 85423 3.82倍
スプライトいどう 71837 261916 3.64倍
ラインびょうが 18734 68016 3.63倍
このベンチの内容を簡単に言うと各項目とも1秒間に実行可能な回数を示していて「たしざん」
ではI=I+1という単純加算、「PRINTぶん」では「A」〜「Z」までの文字を変えながら表示、
「スプライトいどう」では16x16のスプライトのSPOFSの実行回数、「ラインびょうが」では
画面上のランダムな2点をGLINEで描画した回数を示しているにょ。
「1秒」は最大で1フレームの誤差があるため上記のベンチには最大1/60の誤差があることを
頭に入れておいて欲しいにょ。(回数は毎回多少変化する)
結果を見るとNew 3DSと旧3DSでは3.3〜3.8倍程度の動作速度の違いが見られるにょ。
続いてプチコン3号とmkIIとの比較を行ってみるにょ。
ここではこの「SPEED TEST」を私がmkIIに移植したプログラムを元に比較したにょ。
https://twitter.com/ochame_nako/status/536170115557883904
SPEED TEST mkII 旧 3DS速度比 New 3DS速度比
たしざん 12703 12.27倍 40.48倍
PRINTぶん 3663 6.10倍 23.32倍
スプライトいどう 9650 7.44倍 27.14倍
ラインびょうが 5235 3.58倍 12.99倍
この結果を見るとプチコン3号は旧3DSで動作時はmkIIの3.5〜12倍程度(平均で7倍程度)
高速になっていてNew 3DSで動作時には13〜40倍程度(平均で26倍程度)高速になっている
と言えそうにょ。(ラインびょうがに関してはmkIIの方が画面解像度が低い分だけ有利に
なっているため速度向上比が比較的小さくなっている)
もちろん、一概に7倍とか26倍とかになっているわけではなく命令によって速度向上率が
異なるのだけどハードウェアが変わった分だけmkIIと比べると段違いの高速化が行われて
いる感じにょ。
ここまで高速化されると従来のmkIIでは速度面で厳しかったゲームも十分に実現が可能に
なりそうにょ。(私がmkIIで作ったポリゴン表示プログラムもプチコン3号に移植して
New 3DSで動作させれば7000ポリゴン/秒くらいの速度が出ると予想されるため簡単な
3Dゲームならば速度的に十分に作れそうな感じ)
New 3DSだとその恩恵を受けられるというのは良いことだけど問題は旧3DSで作ったゲーム
だとNew 3DSで動作させたら速すぎたり、逆にNew 3DSで作ったゲームだと旧3DSで動作させ
たら遅すぎたりということにもなりそうにょ。
前者に関してはVSYNCを挟んでおけば問題はないにょ。(VSYNC 1ならば60fps固定である
ため旧3DSで60fps出ているゲームがNew 3DSで動作させたら200fpsを超えてしまうなんて
いう心配もない)
厄介なのは後者のケースにょ。
これは作った人が「New 3DS専用」と明示しておけば問題ないけど速度面に余裕があれば
旧3DSで動作させても60fpsで動作するかもしれないからね。
両方の本体を持っている人であれば旧3DSで実行時には表示オブジェクトを減らしたり
とかフレームスキップを行ったりすることでどちらでもプレイ可能にすることができる
ものの問題は動作させている本体がNew 3DSかどうかはプチコン3号からでは分からないと
いう点にょ。
これは速度が3〜4倍違うということを利用すれば簡単に判別が可能にょ。
というわけで、New 3DSで動作させているか否かを調べる関数を作ってみたにょ。
NEW3DS()
DEF NEW3DS()
M=MAINCNT
FOR I=1TO 20000:NEXT
RETURN MAINCNT-M<2
END
これはNEW3DS()がTrue(=1)を返せばNew 3DSで動作中、false(=0)を返せば旧3DSで
動作中というのが分かる関数にょ。
種明かしをするまでもなく単純ループを実行するのにかかるフレーム数を計測してそれが
New 3DS並の速度であれば戻り値を1にしてそうでないときは0にするというだけのすごく
単純なものにょ。
そのため今後プチコン3号がバージョンアップして旧3DSでもこの初期バージョンにおける
New 3DS並の速度で動作可能になったら誤動作してしまうけどその場合はループ回数を
変更してやれば問題ないにょ。
プチコン3号といえばmkIIではできない要素は「立体視」(交差法や平行法を使った立体視は
mkIIでも可能)だけどこれを実際に行うサンプルプログラムを作ってみたにょ。
あくまで初心者向けのサンプルということで各機能の使い方を記したごく簡単なものにょ。
(というか、まだ私自身が高度なサンプルを作れないのだけど)
立体視サンプルプログラム
ACLS:GCLS RGB(100,200,150)
SPSET 0,4095:SPHOME 0,48,16
WHILE 1
STICK OUT X,Y
Z=Y*256
S=1024/(Z+512)
SPSCALE 0,S,S
SPOFS 0,200,120,Z
WEND
これは、スプライトキャラ番号4095のプチコン3号のロゴをスライドパッドを上下に動かす
ことで手前や奥に移動させるというものにょ。
プチコン3号ではmkIIから変わった点といえば、色はパレットではなくRGBで指定が可能に
なったという点にょ。
mkIIでも私が作った簡易RGB指定プログラムを使うことでGRPのみRGB各6階調の指定が可能に
なるけどね。
簡易RGB指定プログラム
http://ochameclub.web.fc2.com/petitcom/1line.htm#24
スプライトの設定も大幅に変わっているのでそれは詳しくはリファレンスマニュアルを
参考して欲しいにょ。
ループは無限ループをWHILE1〜WENDで実現しているにょ。
あとはスライドパッドの値を読み取ってそれを元にSPOFSのZ座標の値を変えてやればいい
だけにょ。
立体視はZ座標を変えるだけで行えるけどそれだと分かりづらいためSPSCALEを使って
近くは大きく表示、遠くは小さく表示しているにょ。
どれくらいが適量の拡大率かは正確に計算するならば両眼間隔、3Dボリュームの設定値、
3DSの画面サイズ、3DSの画面から目までの距離の各値がすべて必要になってくるため
「正確な値」を設定するのは無理なので不自然にならない程度の値にすればいいのではないか
と思うにょ。
プチコン3号といえばジャイロセンサーやモーションセンサーを使えるというのがやはり
興味深い点だと思うにょ。
ジャイロセンサー使用サンプルプログラム
ACLS
XON MOTION:GYROSYNC
SPSET 0,0:SPHOME 0,8,8
WHILE 1
GYROA OUT A,B,C
X=200+B*400/PI()
Y=120-A*240/PI()
SPOFS 0,X,Y
WEND
このサンプルは画面上のスプライトキャラ(番号0のイチゴのキャラ)を本体を傾けることで
上下左右に移動させるというものにょ。
ジャイロセンサーやモーションセンサーを使用するためには「XON MOTION」を実行して使える
状態にする必要があるにょ。
そして、ジャイロセンサー使用プログラムでは重要なのがGYROSYNCにょ。
これを実行時が3DS本体がデフォルトの位置になるにょ。(ここで傾いていたら傾いた状態が
デフォになるためそこから傾けた角度を返すことになる)
ジャイロ情報は誤差がどんどん蓄積されていくため適時このGYROSYNCの実行が必要になって
くるにょ。
ジャイロ情報はX軸、Y軸、Z軸のどの軸方向にどれだけの角度回転させたかという情報なの
だけどここでの座標系は本体の左右方向がX軸、前後方向がY軸、上下方向がZ軸になるにょ。
つまり、X軸を回転させるというのは本体を左右方向に串刺ししてそれを回転させるイメージ
になるため本体を前後に回転させた値を取得できるにょ。(Y軸は前後を串刺しするイメージで
Z軸は下画面の中央に真上もしくは真下から串刺しするイメージ)
このサンプルでは90度傾けた時にちょうど画面端までいくような値に設定しているにょ。
モーションセンサー使用サンプルプログラム
ACLS
XON MOTION
SPSET 0,0:SPHOME 0,8,8
WHILE 1
ACCEL OUT A,B,C
X=200+A*200
Y=120-B*120
SPOFS 0,X,Y
WEND
これは同じくイチゴのスプライトキャラを本体を揺らすことでプルプルと移動させるという
ものにょ。
水平な台の上に置いた状態で本体を適当に滑らせて移動させればその加速度に応じてイチゴが
動くにょ。(1Gの加速度でちょうど画面端まで移動)
モーションセンサーを使用時に注意すべき点は下方向には常に1Gの重力加速度が検出されて
しまうという点にょ。
そのため水平な台の上で動かすのではなく本体を傾けてしまえばその重力加速度が傾けた
角度に分解された大きさを返してしまうにょ。(右方向に30度だとsin 30°=0.5なので
中心と画面右端のちょうど中間地点に移動する)
そんおため本体のZ軸回転を行わないならばジャイロセンサーを使用せず、モーションセンサー
のみで本体を傾けた角度は分かるにょ。(ただし、モーションセンサーは振動を検出するため
ちゃんと角度を取得したいならばジャイロセンサーの方がいい)
逆にいえばそれを使ってジャイロセンサーを使用する際にGYROSYNCを実行時に本体が水平に
なってなくても水平を割り出すことが可能になるにょ。(これについてはプチコン3号講座で
書く予定)
プチコン3号といえば3DS用にすることによってmkIIでは実現不可能な機能アップは主に上記の
ようなものがあるけどそれ以外の要素といえば個人的には自作関数に対応したことが
大きいにょ。
これによって上記のようなNEW3DS()関数を作り出すことが可能になるわけだからね。
ここで関数とサブルーチンは何が違うのかということを気にする人もいるかもしれないにょ。
サブルーチンは端的にいえば処理をまとめたもので何度も使う処理はサブルーチンにする
ことでリストを短く分かりやすくすることが可能にょ。
関数はサブルーチンと比べて利用が簡単になるというのがメリットにょ。
例えばプチコン3号にはない三角形描画命令が欲しい場合にはGLINEを3つ使って三辺を描画する
ルーチンを作れば簡単に実現できるにょ。
@TRI
GLINE X1,Y1,X2,Y2,C
GLINE X2,Y2,X3,Y3,C
GLINE X3,Y3,X1,Y1,C
RETURN
これで3つの頂点座標が(X1,Y1)、(X2,Y2)、(X3,Y3)で描画色がCの三角形を描画する
サブルーチンの完成にょ。
これを使って(200,40)、(350,200)、(50,70)の3点で黄色の三角形を描画したい場合には
X1=200:Y1=40:X2=350:Y2=200:X3=50:Y3=70:C=RGB(255,255,0):GOSUB @TRIで描画可能にょ。
関数を使って同様の処理を行うものを作った場合には次のようになるにょ。
DEF TRI X1,Y1,X2,Y2,X3,Y3,C
GLINE X1,Y1,X2,Y2,C
GLINE X2,Y2,X3,Y3,C
GLINE X3,Y3,X1,Y1,C
END
これだとTRI 200,40,350,200,50,70,RGB(255,255,0)で黄色の三角形が描画されるにょ。
あたかも最初から「TRI」という命令があるかのごとく簡単に使用できるのがメリットにょ。
そして、自作関数の場合には上記のNEW3DS()関数のように戻り値を設定することが可能に
なるにょ。
つまり、既存の命令や関数を組み合わせて新規の命令や関数を作ることができるという
わけにょ。
その際にはその関数内ではローカル変数となっていてDEF〜ENDの外で使われている変数
(グローバル変数)とは異なるものになっているためサブルーチンのように他所で使われて
ない変数名に設定するという必要はないにょ。
ただし、現行バージョンのプチコン3号においてはVARで変数宣言した場合にはローカル変数が
グローバル変数とで名称がバッティングした場合にはエラーを返すという謎の仕様(恐らく
バグ?)になっているのでローカル変数を積極的に使いたい人(つまり、自作関数を積極的に
使いたい人)はVARによる明示的な宣言を避けておいた方がいいにょ。
自作関数は超便利なんだけど速度がサブルーチンよりも遅くなってしまうというのが唯一の
難点といえるにょ。
ある程度速度が許容できるならば関数をあらかじめたくさん作っておけばプログラミングの
効率は飛躍的に高まるにょ。
たくさん関数を作って他者に使ってもらえるようにしておけばその需要はかなり高いものに
なりそうにょ。(要するにライブラリとして公開するということ)
ちなみに上記サンプルはすべて自由に使ってもらって構わないにょ。
といっても、NEW3DS()関数以外は使うことはほぼないと思うけど・・・。
あとmkIIでは32bit固定小数点のみしか使用できなかった(私が作った32bit整数変換
プログラムを使えば擬似的に32bit整数演算が可能)というわけで最大でも524288未満の数
しか扱えなかったけどプチコン3号ではデフォが倍精度浮動小数点となっているにょ。
これは指数部が11bitあるため最大で約10の308乗という大きな数字を扱うことができ
仮数部も52bitで約14桁の精度があるにょ。
プチコン3号の場合は大きな桁の数字を表示した場合にはその桁数分だけ実際に表示される
という点に注意しなくてはならないにょ。
仮にA=POW(10,308):?Aとした場合には画面には1と0が308個の数字が羅列されるにょ。
1e308みたいな指数表記は小学生には分かりにくいためこのような措置が行われているの
だと思われるにょ。(速度重視のプログラムならば32bit整数を使用することも可能)
まだ現時点ではプチコン3号はあまり使い込んでいないためあまり語ることができないけど
近日中にはプチコン3号講座を書く予定にょ。(※近日とは1年先ではない近い将来を示す)
まずはプチコン講座を書く前に講座が書けるレベルまで使い込む必要があるにょ。
でも、来月に入ったら冬コミ用の原稿を書かないと間に合わないのでWeb上のプチコン講座は
年明けになりそうにょ。
それまでには1画面プログラムもいくつか作っておきたいにょ。
プチコン3号には便利なヘルプ機能が付いたため使い方がよく分からない命令や関数を使う
際にはそれを見ればいいのだけどやはりリファレンスマニュアルが欲しいところにょ。
プチコン3号が発売されて2日たった昨晩にようやくそれが公式サイトで公開されたにょ。
プチコン3号 命令表
http://smileboom.com/special/ptcm3/manual/reference/
リファレンスマニュアルはすべての命令を網羅しているものの最低限の説明しか書かれてない
ためプチコン3号で初めてプログラミングを行うような初心者がこれを見て作るというのは
かなり困難にょ。
ニンドリ(Nintendo DREAM)の今月号(2015年1月号)ではプチコン3号の冊子が付録について
いるのでこれを参考にするというのもありにょ。
命令が絞られているもののリファレンスマニュアルよりも詳しい説明に加えて冒頭には
プチコン3号がどんなものかを仙人とデ○スくんが出てくる漫画で説明しているため初心者に
とってはかなり分かりやすいのではないかと思われるにょ。
私はプチコン3号の紙の本ということで早速ニンドリをゲットしたにょ。
https://twitter.com/ochame_nako/status/536167801757511680
プチコン3号の完全ガイドとなる本もニンドリから今冬発売予定になっているためプチコン
3号を使い尽くしたい人はそれを待って買うというのもありにょ。(ガイドが発売の頃には
プチコン3号も下記のバグを改善した修正版が出ている可能性もあるし)
プチコン3号は連日新しいバグが発見されているにょ。
そのため挙動が怪しいものや絶対にあり得ないエラーなどが発生した場合にはプログラムの
ミスではなくバグの可能性が高いという可能性もあるにょ。
すでに発見済みのものに関してはほしけんさんが新しく作った「プチコン3号まとめwiki」に
既知の不具合としてまとめられているためこの中に含まれてないかを確認してみるのがいい
かもしれないにょ。
既知の不具合
http://wiki.hosiken.jp/petc3gou/?Bug
この中に含まれていないものは具体的にどのような問題が発生しているかをtwitterで
ハッシュタグを付けてツイートするか小林社長(@notohoho)宛のツイートを行えば何らかの
対策や改善を行ってくれると思われるにょ。
「バグだらけは嫌だ」という人は数ヶ月後にリリースされるであろうver3.1を待つというのも
1つの選択肢と言えるにょ。
今回のプチコン3号と同時にプチコン大喜利の具体的な内容も発表されたにょ。
第3回 プチコン大喜利
http://smileboom.com/special/ptcm3/ogiri/
今回のお題は「飛び出す(?)プログラム」で締め切りは2015年1月31日となっているにょ。
プチコン3号だけではなくmkIIでの参加も可能になっているにょ。
立体視に限らず「飛び出す」というお題を柔軟に解釈してOKみたいなのでmkIIでも全く問題
ないのではないかと思われるにょ。
mkIIでも参加が可能であるため前回に引き続き海外勢の参加も可能になっているにょ。
恐らく海外版のプチコン3号は5月頃には発売されると思われるので夏休み明け(9月末締め
切りと予想)の第4回プチコン大喜利ではプチコン3号のみが対象になりそうにょ。
|
|
|
掲示板管理者へ連絡
無料レンタル掲示板