Cafe capybara TECH-BLOG

PHPな会社でゴリゴリしてるあかいいぬの技術ブログです

人生初MAD作品「危険なキバオウさん」投稿しました

私です。Ghost Recon Future Soldierにどっぷりしてしまって、Homefront75%を衝動ポチしてその日にクリアして、MAD作ると決めてから徹夜の10時間で投稿まで至ったあかいいぬです。



REAPERとaviutlを使って最近おおはまりのソードアート・オンラインのMADを作ってみました。伸びるとは思わない。でもなんかうまくいったので今度は危険なアスナさんでも作ろうかな。

(キバオウさんはいまのとこ素材が2話だけなので作りやすかったけど、アスナさんとなると...!!)


意外に簡単に(といっても1分のMADに10時間かかるけど)作れることが判明したので(音はスピードとピッチくらいしか変えてないシンプルさ)、今後も作っていきたいなあ。


とりあえず、寝ます。

Ghost Recon Future Soldier [PC] 日本語環境で稀に起こるセーブデータに関する不具合

あかいいぬです。最近はずっとGRFSをしている次第ですが、Windows7環境で起こらずWindows8にしておこるようになった不具合がありました。


「武器やカスタマイズ、キャンペーンのアンロック情報が保存されず、常に初期の装備しか選べない問題」及び「ブリーフィングにて設定したカスタマイズがゲーム中に反映されない問題」。


このゲームは武器のカスタマイズが非常に細かい(ガスシステムやサイドバレルなども改造可能)のが大きなウリだったので、それが出来ないということでかなり悩んでおりました。


しかもWin7で起動したら出来て、Win8では出来ない。それだけならいいのですが、チームメンバーのかみのぎも同じ現象が起きているとのこと。


OSが問題じゃないなら何が問題なのだろうと数時間いろいろと検証して調べてみました。


まずこのゲームのセーブデータですが、C:\Users\(Winユーザ名)\My Documents\Ubisoft\Tom Clancy's Ghost Recon Future Soldier\profile\(UbiID)\ に保存されています(デフォルト)。

その中にランダムな数字のフォルダが1つまたは複数存在しますが、それがゲームメニュー画面のEXTRAS/ACCOUNTSで作った個々のアカウントのフォルダになります。実際のセーブデータはここに入っています。

さらにキャンペーンのオートセーブはSavedGamesの中に、アンロック情報はdata0, data1, data2というファイルに保存されているようです。
(もちろん、オンラインマルチプレイの部分はセキュリティの関係でサーバ上に保管されています)

uplayのクラウドセーブデータ同期はされているのか微妙なところです。確認はしていません。


さて、ここで不具合が起きる原因です。


簡単にいうと、

セーブデータのあるフォルダのURI(アドレス)に2バイト文字(英数字以外)が含まれていること

がこの不具合の原因となります。


Windows8では、インストール時にMicrosoftのアカウントとローカルPCのアカウントを紐づける(というか、MicrosoftのアカウントでPCにログインする)ようになっています。

なので、新しいアカウントを作る際に名前に2バイト文字を自然に使ってしまったのが今回の原因。

ユーザーフォルダ内はさまざまな(ほとんどの?)アプリが利用するので、海外製のアプリの場合2バイト文字への対応ができていない場合があります。

今回は、オートセーブのデータやオプション設定のデータは保存出来るのに、アンロックデータだけが保存できないバグがあったということで解決まで時間がかかりました。


Windows 転送ツールを使ってユーザープロファイルをコピーする にて、ユーザーフォルダを移行する方法が書かれているので、既に2バイト文字を使っていて不具合が生じているという方は実行してみてください(システムの復元ポイント設定を忘れずに)。
※この方法で何らかの損害が起こった場合、私は責任を持ちませんのであしからず


P.S. IE10ではてなブログプレビュー機能を使うと「XSS防止のため、ページを変更しました」と出て利用出来ない(笑)

幽霊屋敷の首吊り少女 歌わせて頂きました

以前一度Youtubeの方に上げたこの曲ですが、歌い直してみました。


最近全然声出してなかったから、逆にリラックスして歌えたような気がします。いっつも気張りすぎやね。


最初ちょっと走ってるのが気になる。編集の段階でミスがあったような気もしますが一気に投稿まで持って行きたかったので特に気にしないで投稿してしまいました!


自分の曲をiPodに入れるのは、まだ先のはなしだなあ。

Tom Clancy's Ghost Recon : Future Soldier 最適化

ステルスアクションでそこそこ有名なUbisoftGhost Recon最新作、Future SoldierをCo-opゲームで寝れま10メンバーで購入したので、環境に合わせて設定を最適化してみました。

まず、このゲームはまだ発売されて間もないので、(Ubisoftお得意の)バグが多いです。マルチプレイではラグや接続不良などが見られることがあります。

また、ディスプレイドライバ(NVIDIA, AMD)もまだ最適化がなされていないので、GPUの性能を生かし切れていない可能性があります。

このゲームは、DX11を利用した最先端の描画技術を多数使っているので、基本的にかなり重いです。ミドル~ハイエンドのパソコンでないと良好な画質をキープ出来ないでしょう。

スペック紹介

最初に、ワシの環境を紹介したいと思います。この環境での最適基準なので、スペックの上下に合わせて細かい設定をいじってみてください。

ベースマシン
Dospara Primeシリーズ(2011年製・10万くらい)
CPU
Intel Core i7-2600 @ 3.40GHz(8 CPUs)
インメモリ
8192MB
グラフィックスカード
NVIDIA GeForce GTX 560 Ti
OS
Windows 7 Home Premium 64-bit SP1
グラフィックスドライバ
GeForce 301.42 Driver WHQL

大事な所は「グラフィックスドライバ」。

現時点でゲームに最適化したドライバはないので、最新版を使っています。恐らく数ヶ月以内に最適化ドライバが出てパフォーマンスが向上するかと思います。

ちなみにゲームの最低基準スペックは...

CPU
Intel Pentium D 3.0 Ghz or AMD Athlon64 X2 4400+ 2.2Ghz
インメモリ
2GB Windows Vista or Windows 7
グラフィックスカード
512 MB DirectX–compliant, Shader 4.0–enabled video card based on nVidia GeForce 8600 GTS/AMD Radeon HD 4650
OS
Windows Vista® (with Service Pack 2)/ Windows 7® (with Service pack 1), both 32 bit & 64 bit versions.

推奨スペックは...

CPU
Intel Core2 Quad Q9450/ AMD Phenom II X4 940 or higher
インメモリ
3 GB Windows Vista® & 7®
グラフィックスカード
1024 MB DirectX–compliant, Shader 4.0–enabled video card based on nVidia GeForce GTX 460 or AMD/ATi HD 5850 or better.
OS
Windows Vista® (with Service Pack 2)/ Windows 7® (with Service pack 1), both 32 bit & 64 bit versions.

一応推奨スペックをギリギリクリアしているくらいですね。

このゲーム、CPUよりもGPUに負荷がかかるので、もしゲームに合わせてハードウェアの更新を考える場合は、グラフィックスカードを買い換えることを検討しましょう。

NVIDIAドライバの設定

NVIDIAコントロールパネルというものがコントロールパネルにあると思います。ここでは、ゲーム側で設定の出来ない描画関連の項目を手動でいじることが出来ます。

適切な設定を行うことで、画質の向上・パフォーマンスの改善が出来ることになります。

f:id:expert88:20120813062558j:plain

3D設定の管理→プログラム設定→追加 にて、EXEファイルを追加して、機能をいじっていきます。

グラフィックスカードの種類やOSによって機能があったりなかったりしますので、適宜読み替えてください。

CUDA - GPU
CUDAとは、GPU上で演算(加減乗除)を行うことが出来る技術です。そのまま(すべて)で問題なし
アンチエイリアシング - FXAA
3Dの境界に現れるギザギザ(エイリアシング)を取り除く手法の1つ。最新の技術でパフォーマンスにほとんど影響なくエイリアシングを取り除くことが出来ます。問題が出なければオンに。
アンチエイリアシング - ガンマ修正
オンのまま
アンチエイリアシング - トランスペアレンシー
半透明テクスチャ上のエイリアシングを取り除く機能です。マルチサンプル(画質重視)またはオフ(パフォーマンス重視)に。
アンチエイリアシング - モード
アンチエイリアシングの手法を選択出来ます。GRFSではゲームでアンチエイリアシングが設定出来ますのでアプリケーションによるコントロールに。
スレッドした最適化
CPUが複数個ある場合に並列で演算を行なってパフォーマンスを上げる機能。CPUによって結構変化があるので、ここは自分の目で確認してオンオフ分けてください。基本はオンでいいはず。
テクスチャフィルタリング - クオリティ
テクスチャをどう処理するかを設定します。よほどスペックが高くなければ、パフォーマンスでも十分な画質です。
テクスチャフィルタリング - トリリニア最適化
フィルタリングの無駄を省いてパフォーマンスを向上させる設定です。オン推奨。
テクスチャフィルタリング - ネガティブ LOD バイアス
パフォーマンス重視は「許可」です。
テクスチャフィルタリング - 異方性サンプル最適化
フィルタリングの無駄を省いてパフォーマンスを向上させる設定です。オン推奨。
トリプルバッファリング
全画面でVSync(後述)をONにする場合はオンにするとパフォーマンスが上がるかもしれません(が逆に不安定になることも)。
レンダリング前最大フレーム数
ここの数値が大きくなると入力動作から実際の画面への反映までに時間がかかるようになります。1に設定することでその状態を回避出来ます。
垂直同期
VSyncのことです。ゲームの描画頻度をディスプレイのフラッシュレート(大抵60Hz=60フレーム毎秒)と合わせます。ゲーム側で設定出来るので「3Dアプリケーション設定を使用する」。
異方性フィルタリング
テクスチャのぼやけを防止します。数値が大きいほどパフォーマンスが悪くなるので、オフでもそこまで気になりません。
テクスチャフィルタリング - 異方性フィルター最適化
当環境だと設定出来なかったので割愛。

ゲームのグラフィック設定

今度はゲーム側の設定を見てみます。

この中にはありませんが、ウィンドウモードでプレイしたい場合は、
C:\ユーザー\○○(ユーザ名)\マイ ドキュメント\Ubisoft\Tom Clancy's Ghost Recon Future Soldier\default.cfg
の中の「Fullscreen True」を「Fullscreen False」に変えて起動するとウィンドウモードで起動します。

f:id:expert88:20120813064513j:plain

Resolution
1920x1080(フルHD)だと当環境だと重すぎたので、1600x900でやっています。
Vsync
全画面でプレイする場合はON推奨。
Antialiasing
上でFXAAをONにしている場合はパフォーマンスの影響小さくアンチエイリアシングが出来る(はずな)のでON推奨。
Detail objects
マップ中の置き物や銃の細かさ(未検証)。パフォーマンスへの影響はそれほど大きくない。
Shadows
Highにするとソフトシャドウ(やわらかい陰影)になりますが、負荷急上昇。見た目も大きく変わりますが、影をまじまじ見ることは少ないのでMediumかLowで十分かと。
Volumetric light
明るい部分の空気が光っているように見える(家の中から外を見た時など、現実的にいえば雲の切れ間から見える太陽光)設定。ゲームの雰囲気に大きく影響するので出来るだけHighでやりたい(もちろん光って見えづらくなるのがイヤな場合は下げる)。
Ambient occlusion
周囲に隠蔽物があって隠れている部分を暗くすることで、見た目をとてもリアリティにする設定。ある程度のグラフィックスカードならそれほどパフォーマンスに影響なくONにすることが出来ます。
Parallax mapping
視差マップ。テクスチャのデコボコをよりリアルに表現する設定。ある程度パフォーマンスに影響するが、OFFにすると壁や地面が平べったく見える。
Motion blur
視点の移動などで視界がブレて見えるようにする設定。映像作品っぽく見たいならON、ぼやけてよく分からないのはダメって場合はOFF。
Improved physics
物理表現をより正確にする設定(未検証)。CPUへの負荷が上がるが元々それほどでもないのでON推奨。
Gamma correction
ガンマ値を設定可能。
Stereoscopic 3D
3Dディスプレイを使っている場合はこれをONにすると立体視が可能になる。
DirectX 11
DirectX11の機能を使ってTesselation(後述)とGlobal Illumination(後述)を行うかどうかの設定。ON/OFFで負荷と描画が大きく変わる。
Tesselation
近くに見えるオブジェクトをより細かく分割することで、輪郭のガタガタを減らしたり細かい部分を表現する設定。パフォーマンスに大きく影響するが、動いていたら正直分からないレベルなのでLowで良いかも。
Global Illumination
太陽光だけでなく、周りのオブジェクトからの光の反射も計算して、例えば青い布の近くの物が青く光ったりするような表現をする設定。陰影表現に大きく影響。


このくらいの設定で、大体大台の30FPSがギリギリ出たり出なかったりというくらいです。もうちょっと設定を下げた方がいいのですが、Volumetric lightとGlobal Illuminationは雰囲気に大きく影響するから下げたくないというのが印象。どうトレードオフつけるかが難しい所です。

もちろん、「画質なんてどうでもいいぜ!ゲームを快適にプレイ出来ればいいぜ!」な方は設定がん下げで行っちゃいましょう。

小樽商科大学講義「ソフトウェア科学」について

半分愚痴みたいなものですが、これが現状です。大学に関する問題は数多く存在しますが、これもその大きなものの1つではないかと感じます。



今回対象となるのは、小樽商科大学社会情報学科発展科目(3年生~)、「ソフトウェア科学」について。

つまりC言語を利用してプログラミングのアルゴリズムについて学ぶ講義です。

1講にアルゴリズムについての説明をOHPを利用して受け、2講に実習としてそのアルゴリズムを実装して提出、添削してOKをもらうというものです。





その講義が、ありえない。






ワシなんて一応プログラミング歴6年はあると言って良いくらい(ほとんどC#だけど)なので、C言語のポインタだとかソートだとかっていうのはまあ商学部の学生ランクはもちろん持っています。

1講の実習に関する説明を全く聞いていなくとも、課せられた問題(これも講義の内容を聞いていないと書けないような大雑把なもの)を解くのは簡単です。

んなもんで、自分なりに解釈して自分なりにコーディングして恐らく試されているであろう部分に関しては完璧にこなしているつもりで提出。



「んー、ここ講義で言ったところと違うねー。ちゃんとわかってやってるんならいいんだけどねー。」などとひとりごとを呟きながら採点。既にイライラ。

「ここさー、こういうことをやってほしいわけじゃないんだわー。講義出てないならわからないかもしれないけど。」ごめんなさい。去年同じ内容の講義に参加した結果のコードです。

「講義出てない部分は自分で解決してね。はいやり直し。」



みたいなことを毎回言われるわけですね。去年も同様だったので途中でキレて講義参加やめたんですけど、どうしても単位が足りないから受けるはめになったわけなんですよ。


どうやらあの講義、ワシの思っていた目的とは違う目的でやっているみたいですね。



C言語という比較的シンプルな言語を用いて、実際プログラムのアルゴリズムがどう動いているのかを実感し、その感覚を身につける」


のが目的だと思っていたんですけど、実は、


「1講で紹介したソースコードや先生のありがたいお話をちゃんと聞いて、そのソースコードやお話を覚えて実習で応用する」


ことが目的みたいです。先生の態度を見ると(ありがたいお話は論点がずれてるし不足しているので応用は出来ませんが)。


まあ、それなら仕方ないわな。1講で使った変数名と違ったらそれは怒られるだろうし、話したことと違う処理を行なっている行があればその部分は消されるわな。



今週のアルゴリズムは、「ポインタのみを使った値の交換」で、もうちょっと解説すると「ヒープ領域にメモリを確保(mallocですね)して、そこに数値を代入し、ポインタの実体(*aで出る値)をポインタを使って交換した後にメモリを解放する(free関数だ)」という所をやる感じだったらしい。


まず前回以前でポインタの学習をおこなっていない。この講義の下位科目(履修済み推奨科目)に「情報処理」があるが、そっちのポインタの学習でちゃんと意味を理解した学生は(うちは文系だから)ほとんどいないんじゃないかなあと思う。


ということでポインタすらまだわかってない状況で、ヒープ領域を利用して交換を行わせるとか狂気の沙汰である。

しかも講義を受けた人に聞けば、どうやらスタック領域とヒープ領域の話は全く聞かされていないそうで、さらにmallocについては「関数だ」としか言われず説明は行われなかったらしい。プログラミングの最初期の#includeという魔法の言葉と同じレベル。「まろっく」ってなに?ってレベル。


今回のコードは実際15行程度でかなり見た目は薄いはずなのだが、裏では結構難しめのことをやっているのでちゃんと理解してコードを書き、課題2つ目の「上記の処理をわかりやすいように図示しなさい」という「上記」ってどこを指すの、とかどういう形で図示すんの、とか色々文句をつけたくなる課題を一発でクリアした人は見たところほとんどいなかったらしく、この講義の1講の説明レベルの低さが伺える。

まあ、図示については1講中に全部書いたからその通りにかけばいいだけなので学生がその図の意味を理解出来る可能性はほぼゼロ。

実際答えの例を見せてもらったら、スタック領域とヒープ領域に分けて(もちろん「スタック」とか「ヒープ」なんて言葉はそこに存在しない)その処理をフロー形式で書くらしい。


まあ、自分もまだ知識不足なところがあって、宣言したポインタ変数はメモリ上のどこにおかれるの、とか、メモリ確保ってどこを確保するの、とかは自分で調べて今回のアルゴリズム(というよりもC言語の基礎知識)の意味を理解したわけだが(普通は先生が教える部分)、ほとんどの学生はチンプンカンプンなまま帰っていったのだろう。



これだけ文章を叩き書いてつまり何が言いたいかっていうと...





「あの講義は、ありえない」!






あんな講義がうちの学校に存在することが恥ずかしい。きっと他にもあるんだろうなあ、こんな講義。

シラバスに書かれている目的と違う目的を持って平然とそれを学生に押し付ける。そして説明の下手さ。さらに実習中の態度の悪さ(みんなわかんないと思うけど、これって凄い簡単なんだよ?という上から目線的雰囲気を常にかもしだしている)



事実影響しているのかどうかは不明だが、その月曜の講義後の火曜日は常に体調を壊し活動できていない状態である。そのストレスが原因かと思われる。




大学には自分にとって有意義と思える講義もあれば、まったくトンチンカンなものもあって、それを見分けてうまく知識を蓄えつつ所要単位をうまくとって卒業する力が、今の大学生には求められている。



P.S. 今の自分にとって有意義と思える講義だけでは、卒業所要単位まで全く届かないので、つまらないとしか思えない単位も取らなければならない。ここには個人差があるのだろうが、私にとってこの大学が適切であったかどうかというのには疑問が残るといえる。