だらだら〜自由自在〜

インディーゲーム制作チーム GAME GABURI でプログラム担当してます

Metal cocos 4

やはりrenderCommandのcommit前にvertex/index-bufferをreleaseしていたのがabortの原因なようだった。

glのAPIGPU情報を取得しているっぽいところで最大TextureサイズをConfigureに設定していたが、これが動いてないのでTextureが作られない現象が発生していた。
GPU情報の取得とかについてはMetalはきっとサポートしてないと思うので、GLAPIをふっかつせねば。

やっとクラッシュせずに実行するところまで行ったが、HelloWorld.pngが表示されていない。
画面的にはLanchImageが出っぱなしになっているので、FrameBufferがSwapされていないとか?

Metal cocos 3

以下、作業しながらメモしたものなのであしからず…。
======================
EAGLViewのcontextの生成部分のMetal対応が必要で、そこでコンパイルエラーで止まっている。
contextは外部に公開されて使われているうようなので、その用途からMetalで相当するものを見つけるか。
もし相当するものがない場合は、互換レイヤーを今より上げて、GLViewのところでMetalViewを実装する必要があるかもしれない。
というか、どう見ても名前的にそちらのほうが正しいような気がする。

と、思ったが。GLViewはios抽象レイヤーの外なので、ここにMetalを入れるのも違うかも。てなると、今の実装で間違いじゃないのだけど…。
GLView部分にレイヤーを入れるとなると、大工事な気もする、調査してないし分からんけど。

にしても、VisualStudioに慣れきった体にはXcodeがキツイ…。

contextはGLのコンテキストのようだ。Metalでは不要な気がする。ってことでその辺はサクージョ。

実行すると"Metal default library not found"というメッセージでABORT。metalファイル(シェーダファイル)が見つからないためLibraryが作れないということらしく。
libcocos2dの中にいれたあったmetalファイルをtest-cpp-emptyのほう(スタートアッププロジェクト)にいれてやったら解決。

ShaderはとりあえずkShaderType_PositionTextureColor_noMVPだけswichcaseを対応。これ以外を使う場合programが見つからないで落ちるはず。

実行時にrenderEncorder.drawIndexPrimitivesでABORT。VertexBufferとIndexBufferをdraw前にreleaaseしてしまっているのが原因か?そもそも、頂点バッファとIndexBufferは最初に確保してあとは使いまわしたい気もする。それでよければsetupVBOの辺で初期化してやれば良いし、Metalサンプル見て、そういう運用じゃなさそうなら何か考える。

ViewとRenderer周りを整理するために書いたクラス図
f:id:nyakagawan:20141208002027p:plain

OculusRift GameJam 参加してきました。

遅ればせながら…。

去る2014/11/29、30に開催されましたOculusGameJamへ参加してきました。
僕は@yandoさんと2人チームでOculusRift+LeapMotionでチャーハンをひたすらフライパンで炒めてスコアを稼ぐ、という謎ゲームを制作しました!

僕はOculus実機を持ってないどころか、LeapMotion実機も無い状態で参加していたのですが、途中で心優しい他の参加者の方にLeapMotionを貸していただき、Oculusに関する調整は@yandoさん任せという状態で開発を行いました。僕の担当した部分は、チャーハンの注文を追加する部分や、具材を上空から降らせる部分とか、どちらかと言えばガワの部分を担当しました。

個人的に今回参加してよかったなぁという点を上げたいと思います。

  • OculusRiftを活用したゲームを沢山遊ぶことができた
  • LeapMotionについて詳しくなった
  • 1日目にちゃんと家に帰って寝れた
  • 前のGameJamに参加していた人に再会できた
  • GameJam自体おもしろい

などなどあります。この中でも「ちゃんと家に帰って寝た」そしてゲームはちゃんとそれなりに出来上がった。というのはちょっとした体験でした。今まで(といっても2回しかないですが)参加したGameJamではどちらも夜通しの作業だったので、こういう健康的というかw、あまり根を詰め過ぎずにやれたのは良かったです。

これでGameJamへの参加は3つめとなりますが、いつも最後は楽しく終われています。チームメイトに恵まれているというのも大きいと思いますが。今度はGlobalGameJamだと思いますので、それもぜひ参加したいと思っています。

最後に、作ったゲームを開発パートナーの@yandoさんがLeapMotion3DJamというコンテストに応募してくれました。実行ファイルをDownloadできるようですので、ご興味のある方はぜひプレイしていただけたらと、チャーハン作っていただけたらと思います。他にもクオリティ高そうなゲーム上がってますしね!

Leap Motion 3D Jam presented by IndieCade - itch.io

OculusRift GameJam

第3回 Oculus Game Jam in Japan【東京西新宿ニフティ会場】 - OcuJam | Doorkeeper

キャンセル待ちで参加登録していたOculusRiftGameJamにどうやら当選したようだ。Riftの実機は会社が購入したものを触ったぐらいで、本格的に、というか遊びでも開発をやったことは無い状態なのだがOculusRift自体に興味があるしGameJamに参加したかったので勢い半分で登録してみた次第だ。
しかし、自信がちょっと無い・・・。他の参加者の方の足をなるべく引っ張らないように、開催まで1週間を切っているが出来るだけの予習をしたいところだ。まずは、Unityのメカニムのことを勉強して、あとUnrealのこともある程度分かるようにしておかねば。どちらを使う事になるかはわからないが、どちらかを使うことになるだろう(といっても、自分の持っているノートPCでは性能が低すぎてUnreal自体動かない可能性もありそう…。Unityで是非お願いしたいw)

Metal cocos 2

ビルドを通して、cpp_empty_testのHelloWorldシーンをSprite, Label描画系をすべてマスクして実行する(すなわち、画面には何も出ない)状態になっている。
ここで、cocosロゴのスプライト描画のみマスクを外す。当面の目標はこのスプライトを描画できるようになるまで。
といっても道のりは長い。シェーダ、テキスチャ、レンダラーが正常に動作していないと動かない。

ShaderごとにRenderPipeLineオブジェクトを用意しておくっぽい。
renderEncorderにたいしてRenderPipelineオブジェクトをセットするので、ShaderUseのときにそうしてやればOKか

Shaderの仕様側であるRendererに着手、こいつがcocosの描画コマンドをrenderEncorderにしてDrawする。
TriangleとQuadでコマンドが分かれているが、SpriteNodeはQuadをつかうのでTriangleは後回し、MeshCommandも後回し。

SurfacePro3

SurfacePro3を勢いで買って数ヶ月。まったく使っていない…。
元は性能的にMainで使えることを期待していたけど、自分の用途だと次の2点が気に入らなかったため売却を検討中。
1つは、解像度が高いせいかニコ動とかで動画を見るとすぐCPUが唸りだして排気を始めるのだけど、その排気音がうるさいという点。
もう1つは、これが決定的なのだけど。外部ディスプレイを使って、本体と併用で2画面出力しているとき本体側の画面と外部ディスプレイ側で描画スケールを別個に設定できないという点。本体側に合わせてスケールをかけていると外部ディスプレイ側では画面が広く使えないし、外部ディスプレイ側に合わせると本体側で文字が小さすぎて読めない…。
あと、タブレットとして使う場合だけど、前述のとおり結構加熱しやすいので手で持つと熱い。
てわけで、売ってしまってmac-miniとでかいディスプレイ買おうかなーと思ってるこの頃。
今はMBA11インチつかってるのだけど、cocos2d-xのビルド待ち時間が結構するし、画面サイズが…。まぁmac-miniのDualCore程度じゃいうほど変わらないかもしれないけど、総ディスプレイ解像度も上がるし。
いつも使っている買い取り屋に査定メールを出してみた。15万ぐらいになったら嬉しいんだが。

Metal cocos

cocos2d-xをMetalに置き換えよう。ということをやっている。まず、OpenGLを外すことから初めて。OpenGL関係のFrameworkを全部はずして、リンクエラーが出たところを全部潰してなんとかビルドを通したところ。
OpenGLがはびこっているので大変だこりゃ。
ちなみに本家のMetal対応は2015年とかどっかでちら見したけど気にしない。

iPhone6は家庭用ゲーム機を超える? iOS8で注目のMetal対応状況|Mac - 週アスPLUS

Swiftでなんかゲームを5

swiftでvoid*でバッファを確保しつつ、任意の構造体にキャストして値を書き込む。ということをやってみた。頂点バッファなどにつかいたい

struct Int3 {
    var x: Int = 1
    var y: Int = 2
    var z: Int = 3
}
var allocSize = sizeof(Int3)*10
var usp = UnsafeMutablePointer<Void>.alloc(allocSize)
for var i:Int=0; i<10; i++ {
    var tmp = Int3()
    tmp.x = i
    tmp.y = i
    tmp.z = i
    var usptmp = UnsafeMutablePointer<Int3>(usp) + i
    memcpy(usptmp, &tmp, UInt(sizeof(Int3)))
}
for var i=0; i<10; i++ {
    var usptmp = UnsafePointer<Int3>(usp) + i
    var i3 = usptmp.memory
    print("\(i) : \(i3.x),\(i3.y),\(i3.z)")
}
usp.dealloc(allocSize)

書き込みで、memcpyつかってるけど、直接 usptmp.memory.x でアクセスしても良い。
てか、はてな記法ってswiftのSyntaxHilight対応してないのか…?