ほげたつブログ

プログラムとアニメーションをかじって生きてる

GTX660 から GTX970 へ乗り換えたのでベンチマークを取ってみた

仕事を終えて家に着くのは日付が変わってから。
休日もあったり無かったり無かったり。
そんな生活を半年くらい続け、ようやく落ち着いたので自分へのご褒美として買ってきました。

表題にある通り、GTX660からGTX970への乗り換えです。
個人的にOculusを買っていて、OcuJamにも行っていた時期もあったのですが、GTX660だとコンテンツによっては常時75fpsを維持できずに酔ってしまうといった事態に陥っていたため、ちょっと財布には優しくないですが奮発しました。

みたいに悩んだりもしましたが、まぁ欲しくなったらまた考えればいいかなと。

では本題のベンチマークです。
ド定番ですが 3DMark の FIRE STRIKE でベンチを取ってみました。

GTX660

f:id:hogetatu:20150624174329j:plain

GTX970

f:id:hogetatu:20150624174356j:plain

スコアは 4447 から 9369 に上昇!

乗り換え後はPhysicsが足を引っ張り始めましたね。
そろそろCPUも買い替え時ですかね。
とはいえ大幅上昇で満足です。

Oculus SDK 0.4 (Unity)でUIを表示する

f:id:hogetatu:20140802094302j:plain

ついに買いました。

DK2が出たら買おうとずっと待ってて、予約開始された時は迷わずポチリましたね。
早く届いて良かった。


f:id:hogetatu:20140803105351j:plain

もうこんなんですよ。
こころがぴょんぴょんしました。


では本題です。

こんなことを思い、空いた時間でポチポチ作ってます。

DK2が届いたので組み込み、次はメッセージウィンドウでも出すかなと思ったが、やり方がわからない。
「そういえばスペースを押したらメニュー出てくるなぁ」と思い、流用できないかとソースを眺めてみるも、どうも専用で作られているようで、そのままでは使えそうにない。
仕方がないので作ることにしました。


こんな事でハマりつつも、なんとか完成。



Awakeでクリア設定を書き換えているのは、エディタ上ではDepthOnlyで見たいからです。
(そうしないとUI以外が確認できなくなります)










全然関係ないですが、せっかく撮ったのでおまけ。

f:id:hogetatu:20140803105127j:plain

負けてばかりです。
杏最高。

「名探偵に薔薇を」を読了したので感想

城平京さんの長編ミステリーデビュー作である「名探偵に薔薇を」を読了した。
雨で自転車通勤ができず、通勤電車の中で読もうと思って本屋で手に取ったが、思っていた以上に読みやすく、気付けば夢中になって読んでいた。
以下、多少なりネタバレを含みつつ読後の感想です。



まず自分がこの本を手に取ったきっかけは、城平京さんが絶園のテンペストの作者であった事と、

第一部は良く出来た推理小説
しかし第一部で読むのを止めないでください。
第二部を読み終えた時に、第一部に対する印象が変わります。

という本屋の煽り文句に惹かれたからだ。


第一部は「メルヘン小人地獄」という一つの物語を巡る猟奇的連続殺人の話。
小人達に対して悪行の限りをつくした挙句にあっさりと死んでしまった博士に対し、小人達が抱えていた恨みを晴らすため、ハンナ、ニコラス、フローラの三人を槍玉に挙げて復讐劇を繰り広げるといった内容。
第一部ではそれになぞらえた形で逆さ釣りのまま殺されたり、熱湯で茹で上げられて殺されたりと、猟奇的な殺人劇が繰り広げられる。
しかしその裏側には「小人地獄」という無味無臭で使用後に体内から見つかる事もない完全無欠の毒薬と、それを製造した男と血縁者、それらに関わる者など様々な人間関係が渦巻き、混沌とした中で完全犯罪が囁かれる。
そんな中、名探偵と呼ばれる者が現れ、一つの仮説から心理的な弱みを付き、そこから物証を集めることにより事件を解決へと導くといった内容。
煽り文句で「良く出来た推理小説」と言われるだけあって、素直に楽しんで読み進めることができた。


第二部ではまた「小人地獄」を巡って事件が起こる。
第一部の事件と違うのは動機がないということ。
こちらの事件では殺害方法や犯人は容易に特定できるのだが、果たしてその殺人は罪に問われるべきなのか、という部分において話が繰り広げられる。
第一部もそうだったが、第二部では特に登場人物の心理状況やその背景が念入りに書かれていて、殺害方法や犯人は変わらないのに本当の黒幕が誰なのか、という部分において二転三転する様は読んでいてとても楽しめた。
話の構成的に自分で推理する、ということは難しいかもしれないが、ラスト10ページで大きな「転」が待ち受けているので、最後まで読者を飽きさせない構成になっている。
自分はそこまで本を読む方ではないが、この本だったら自信を持って人に薦められる。



次は同作者による「虚構推理 鋼人七瀬」を読んでみようと思っている。
第12回本格ミステリ大賞も受賞しているようなので期待している。

Visual Studio 2013で可変長テンプレートが対応されたのでdelegateのようなものを作ってみた

カッとなってやった。

template <class T, typename... Args>
class Delegate {
private:
    typedef void (T::*Func)(Args... args);
    std::list<std::tuple<T*, Func> > _funcs;

public:
    void add(T* pObj, Func func) {
        assert(!isExists(pObj, func));
        _funcs.push_back(std::make_tuple(pObj, func));
    }

    void remove(T* pObj, Func func) {
        for (auto it = _funcs.begin(); it != _funcs.end(); ++it) {
            if (pObj == std::get<0>(*it) && func == std::get<1>(*it)) {
                _funcs.erase(it);
                break;
            }
        }
    }

    void clear() {
        _funcs.clear();
    }

    bool isExists(T* pObj, Func func) {
        for (auto it = _funcs.begin(); it != _funcs.end(); ++it) {
            if (pObj == std::get<0>(*it) && func == std::get<1>(*it)) {
                return true;
            }
        }
        return false;
    }

    void call(Args... args) {
        for (auto it = _funcs.begin(); it != _funcs.end(); ++it) {
            auto pObj = std::get<0>(*it);
            auto func = std::get<1>(*it);
            (pObj->*func)(args...);
        }
    }
};

こんな感じに使う。

class Test {
public:
    void foo(int v1, float v2) {}
    void bar(int v1, float v2) {}
};

Test t;
Delegate<Test, int, float> d;
d.add(&t, &Test::foo);
d.add(&t, &Test::bar);
d.call(1, 2.0f);

同じインスタンスの同じメンバ関数は同時に登録できない。
リストの中身はタプルにしたけどもっと良い方法は無いかな?
もちろんお仕事では使えない。(コンパイラが云々かんぬん)

同じ内容でQiitaにも投稿してる。
http://qiita.com/HogeTatu/items/188eadefe191db822823

2014年の目標

明けましておめでとうございます。

簡単に今年の目標を書いておく。

プログラマとしての武器を作る

自分は器用貧乏であり、何でもそこそこできて手を動かすのが早い。
コンシューマ機向けのゲームプログラムを専門にしている弊社において、サーバーサイドやスクリプト、開発環境整備周りの知識も持っていることもあり、重宝されている自覚はある。
が、どの分野においても専門家には到底及ばない知識しか持っておらず、何でもできるが何もできない自分に対して酷くコンプレックスを持っている。
今年は何か自身を持てる分野を見つけ、伸ばしていきたい。
(最近になってコレかな?って思えるものができつつあるので、それはまた別に記事にしたい)

仕事以外でコードを書く時間を増やす

GitHubに草を生やせるようにしたい。
Unity2Dで何か作ってみようかと思ってる。

今まで読んでなかった本やエッセイを読む。

今まで技術書かミステリかライトノベルくらいしか読んでなかったので、もう少し幅を広げたい。
最近は空いた時間でポール・グレアムの日本語訳されたエッセイを読んでる。

プログラマとして前に出ていく

ハッカソンとかGameJamとかに出て、モノづくりに貪欲な人達と話してみたい。

運動する時間を増やす

数ヶ月やってないけどボルダリングを再開するか、自転車を始めるか。
フットサルとランニングは継続したい。
地域のマラソン大会に出ようかなって思ってる。


とりあえずソシャゲと無駄遣いを辞めて色々と余裕ができつつあるので、実りのある一年にしたいと思ってる。
あと彼女とかできればもっと楽しくなるのかなー。

Havok製モバイル向けゲームエンジン「Project Anarchy」を動かしてみた

Intel傘下Havokの完全無料の3Dエンジンが供用を開始, Unityと並ぶ選択肢に | TechCrunch Japan

HavokがUnityに対抗してゲームエンジンの提供を始めたという事で、チュートリアルをやってみた。

Project Anarchyとは?

以下、公式より抜粋。

Project Anarchyはモバイル端末向けの総合的なゲームエンジンおよび最先端なツールセットです。 また、Project Anarchyユーザーの活発なゲームデベロッパーコミュニティがあり、www.projectanarchy.com/jpにて誰でも参加できます。 Project Anarchyには、iOSAndroid、およびTizenプラットフォーム向けにゲームをリリースできる完全無償ライセンスが付いています。

無料なのに、なんだか凄そう(小並感)

Windowsで開発して、iOSでパブリッシュする時にMacを使うって感じなのか。
個人的にはVisual Studioが使い慣れているので歓迎ですが、若干の面倒臭さは感じますね。
とはいえ無料版でも部分的にソースコードを公開しているようなので、それを見るのも勉強になりそう。
あとUnityと違ってC++で書ける。
(C#でも書けるので、パフォーマンスと開発効率を天秤にかける感じかな)

とりあえずインストールしてみる。

インストール

Download | Project Anarchy
上記のページからインストーラを落とし、手順に従ってインストールを行う。
今回は以下の項目にチェックを入れてインストールした。

Windows

  • Havok Anarchy SDK for Windows
  • Havok Anarchy SDK for Android and Tizen
  • Havok Anarchy Samples for Windows
  • Havok Anarchy Samples for Android and Tizen
  • Havok Animation Studio
  • Scaleform GFx - Windows
  • Scaleform GFx - Android ARM
  • Scaleform GFx - Android x86

Mac

  • Havok Anarchy iOS SDK
  • Havok Anarchy iOS Samples


ひとまず色々と入れてみたけど、結構時間かかった…。
Androidはadt-bundleとかndkとかインストールしておく必要がある(それの手順は省略)

とりあえず動かしてみた

サンプルのソリューションをVS2010で起動。

\AnarchySDK\Workspace\Win32_VS2010_anarchy_DX9_C++\HavokVision_Samples_Win32_VS2010_anarchy_DX9_C++.sln

Totorial01DX9をスタートアッププロジェクトに設定して、ビルド→実行!

Error !

Unable to connect to vForge! Please ensure that vForge is running. (Please refer to the documentation for further information.)

ふむふむ。
vForgeってのを起動しておけばいいのね。

以下のディレクトリにあった。

\AnarchySDK\Bin\win32_vs2010_anarchy\dev_dll\DX9\vForge.exe

vForgeを起動して、再度実行!

f:id:hogetatu:20131223015057j:plain

動いた!

Tutorial01.cpp を見てみると、シーンの読み込みは以下のようになっている。

virtual void Init() HKV_OVERRIDE
{
    LoadScene(VisAppLoadSettings("ViewerMap.vscene", ":havok_sdk/Data/Vision/Samples/Engine/Maps/ViewerMap"));
}


ちなみにViewerMap.vsceneをvForgeで見てみると、

f:id:hogetatu:20131223021904j:plain

まだほとんど見れてないけど、デバッグ機能でリソースのリロードがあったので、VS2010で実行しつつ、vForgeで編集してリロード・確認って感じなのかな。


意外とさっくりサンプルの実行まではいけた。
年末年始と忙しいけど、もうちょっとじっくり見ていきたい。