2013年05月17日

RPGの原点に触れる

こんにちは!
最近、おなか周りが気になってきたゴローですたらーっ(汗)
一年前と比べて体が重くなって来たのを体感できるレベルです...
流石にダイエットをしなくてはと思い、
白ごはんのお替りをひそかに減らしている私です手(グー)

ただ、保温性と水によく浮くという点で考えると
海難事故船には強そうなボディですね。

と、前向きに捉えていきます。

さて話しは変わりますが、少々前にRPGの原点ともいえる
テーブルトークRPG(以下 TRPG)に触れる機会がありました。

ゲームマスター(以下 GM)という役割で参加したので、その時の話を書かせて頂きます。

っとその話の前に、
まずTRPGとは何なのか・・・

TRPGとはゲーム機を使わずに行うRPGです。
GM 1人、プレイヤー数名で始める遊びで
コンピュータRPGならコンピュータが行ってくれるようなゲーム進行を GM が行います。
司会者のようなものでしょうか。
ゲームのシナリオも GM が定め、GM とプレイヤーの会話でゲームが進行していきます。

具体的にTRPGとコンピュータRPGの違いを上げてみます。
・コンピュータRPG
1村人に話しかけると自動で話しだす。
2敵に攻撃すれば勝手にダメージ計算をしてくれる。
3プレイヤーが何か行動を起こすと、自動的にイベントが発生する。

・テーブルトークRPG
1村人に話しかけると、GM(ゲームマスター)が村人になりきって話しだす。
2敵に攻撃する時、プレイヤーがサイコロを振ってダメージを算出する。
3プレイヤーが何か行動を起こすと、GM がその結果どうなるかを想像してイベントを発生させる。

これだけ聞くとただただ面倒なだけに聞こえるかもしれませんふらふら
しかしTRPGには特筆すべき点があります。
「ゲームの展開に明確な縛りがないexclamation×2」という事です。

GM はシナリオを用意しますが、
プレイヤーがどういう行動をとるかに制限はありませんわーい(嬉しい顔)
もしかしたら、GM の想定外の行動をとるかもしれません。
その場合でも GM は、プレイヤーが行動した結果どんなイベントを発生させるかをアドリブで判断し、
プレイヤーをシナリオ的に正しい方向へ導いてい行かなくてはなりません。

そんな大変な GM なのですが、
実際にプレイしてみてとても共感できる部分がありました。

それは、GM の最終目的です。
GM は敵やボスを出現させますが、プレイヤーを全滅させることが目的ではありません。
GM の目的はゲーム終了後にプレイヤーの人たちに「楽しかった!」と言ってもらうことなのです。
この考え方が実際のゲーム作成と同じだと感じました。

今回は、集まった友人全員が初心者という事で、
私も初心者なのに GM をやることになりましたいい気分(温泉)(本来はTRPGに慣れた人がやる方がいいと思います。手(グー))

テーブルトークRGPの GM は、プログラムをしないゲーム制作映画のようなもので、
プレイヤーの楽しませる演出付け、
弱すぎず強すぎない敵を出す難易度調整、
プレイヤーに楽しんでもらおうという意識等
コンピュータゲーム作成にも通じる経験が出来ました手(チョキ)

必要なのは紙、ペン、サイコロ、一緒にプレイする友人のみでするんるん
TRPGをまだやったことの無い方は、是非一度プレイしてみてはいかがでしょうかexclamation&question
代え難い経験が出来るかもしれませんよexclamation



posted by 管理人 at 21:37 | ゲーム

2013年05月16日

インフラで使えるWindowsコマンド

こんにちはexclamation

徐々に暑い日晴れが増えてきており、夏の到来を
近くに感じ始めている よっしーです。

夏が来る前に夏バテしないように注意しなければ・・・ふらふら


早速ですが今回は、これを知っているとインフラ業務の中で
ちょっと役に立つWindowsのコマンドを紹介します。

例えば、

・通信はできるけどその機器がどういった機器なのかわからない
・通信できる機器がどこにある機器なのかがわからない


こういった時は、試しにWindowsのコマンドプロンプト上から

「nbtstat -a IPアドレス」

を実行してみます。

このコマンドは、IPアドレスを指定すると通信する機器がWindowsだった場合に、
Netbios名やMACアドレスなどが取得できます。

こういったネットワーク経由で情報を取得して、全く不明な機器などについても
少しずつ情報を増やしていくことが可能です。

Netbios名などが返ってくれば機器の情報がわかりますし、
情報が返ってこなければネットワーク機器かも?と機器を
絞り込むことが出来ます。


ちょっとしたコマンドなのですが、知っていると非常に便利で、
思わぬところで役立つことがあります。

こういったコマンドを利用して、インフラ管理やトラブル対応に
役立ててみてはいかがでしょうか。

それではexclamation×2

posted by 管理人 at 14:13 | インフラ

2013年05月15日

企画書の「色」んな話

まいどおおきに!!!!!わーい(嬉しい顔)
安い・早い・うまいがモットーのタカシマヤこと高島です。
暑いですねぇ。暑すぎますねぇ。急に暑くなりましたよね。

昨日なんて最高気温が30℃だったとか。晴れ
このペースだと12月頃には100℃超えてんじゃないかな〜たらーっ(汗)


なんてね…少し涼しくなりましたか?


さて本日は企画書を書く際に、私が気をつけている
「色」に関するお話を書いていこうかと思います。


-------------------------------------------------------

★はじめに
企画書を書く上で、文字やオブジェクトの色を指定する際に、
その色の特性やバランスを戦略的に使用する事ができれば、
資料が格段に見易くなり、相手に内容を伝え易くなります。

まさに「色」は「文字」よりも多くを語ります。


そこで、ここからは「色」を使う際の簡単なテクニックを
ご説明していきたいと思います。



★「色相」を理解しよう。

「色相」とは青や黄や紫などの一般的に言う「色」です。
それら色相をリング状に並べた「色相環」を見ると、
資料を作成する際の、色選びの役に立ちます。(下図)


220px-MunsellColorCircle.png


色相環から「寒色」や「暖色」や「類似色」が理解でき、
企画意図に合った適切な色をチョイスできますね。

ここでもう1つのポイントが「補色」です。
色相環で反対側に位置する色が補色と呼ばれるもので、
2つの色がお互いを引き立て合う効果があります。

例)青空とひまわり


250px-Sunflower_sky_backdrop.jpg


資料で目立たせたい部分には、この補色を使用すると、
より強調する事ができる訳です。



★テーマカラーを決める。
資料を作成する前に、まずはテーマカラーとなる、
ベースカラー、メインカラー、アクセントカラー
の3色を選んでおくと、資料全体に統一感がでます。
メインとアクセントは「補色」にしておくとさらに良いです。


資料内での各カラーの割合は、
ベースカラー:70%
メインカラー:25%
アクセントカラー:5%
が、一般的には良いと言われています。

これらのルールを準拠する様に心がけると、
資料の出来栄えがかなり良くなります。


★その他の注意ポイント

・意外とやってしまう文字色「黒」
資料の文字に「黒」を良く選んでしまいがちですが、
特に「白」をベースにした場合のコントラストが強くなり、
長時間見続けるには目の負担が大きい点に注意が必要です。
「グレー70%」ぐらいを使用する事をオススメします。


・原色をなるべく使用しない。
原色はあまり日常生活でも目にしない色です。
特に注意を要する箇所以外で原色を目にし続けるのは、
資料に対してきつい印象を与えてしまいますので、
なるべく避けた方が良いです。

-----------------------------------------------------

いかがでしょうか。
これから企業に企画書を提出する就活生の皆様に
少しでも役立てばと思います。


posted by 管理人 at 23:13 | いいモノづくり道

2013年05月14日

イロレーティング

お久しぶりです、GWはしまなみ海道をサイクリングダッシュ(走り出すさま)してきた
(2年連続2回目)コウスケです。
天気もよく、スポーツタイプの自転車だったので
とても快適でしたexclamation×2
***


最近、ふとしたきっかけで統計学を勉強しはじめました。
触れてみるととても面白く、ゲーム開発にも応用できそうなトピックも結構ありますぴかぴか(新しい)
今回はその中の一つを紹介しようと思います。

私のようにオンライン対戦系のゲームをプレイしている方は特に馴染み深いか
と思いますが、「レーティング」という概念があります。
簡単にいうと対戦系のゲームで「自分の強さ」が数値化されたもので、
勝てば上がりグッド(上向き矢印)、負ければ下がるバッド(下向き矢印)アレです。
レーティングの高いプレイヤーに勝つと大きく上がり、
低いプレイヤーだと少ししか上がりません。

これまでどういう計算がされているんだろう・・・と漠然とは思っていたのですが、
ふとしたきっかけで調べてみると、統計学が背景に使われている
ということでした。

しかも、レーティングの数値には意味があって、

レーティングに200ポイント差があるプレイヤー同士の対戦では、
76%の勝率で高いほうが勝つ

(100ポイントなら64%, 400ポイントなら91%)
(※この確率は後で出てくる「イロレーティング」に
基づくもので、計算方法は後ほど出てきます。)

となるように設計されているのですexclamation

つまり、予め対戦者間のレーティングによってその対戦における
自分の勝率が推定できてしまう
のです。
レーティングの数値にそんな意味があると知って目からウロコでした。

もちろん、一口にレーティングといっても適用させる対象により様々な計算方法が採用されていますが、
基本となる計算方法は、【イロレーティング
と呼ばれるものになります。

イロレーティングは元々チェスにおけるレーティング計算方法として
開発されたもので、今では将棋、囲碁、スポーツ、各種TVゲームなど
様々な対戦型ゲームにおいても応用され採用されています。

このイロレーティングは背景に統計学の理論があり、
「プレーヤーのパフォーマンス(結果的には勝率)は
正規分布】に従う」
という仮定を置いています。

正規分布とは、いわゆる「誤差」が発生する確率の分布を表したものです。
例えば、10回コイン投げをして表のでる回数を測定するとします。
表が出る確率は1/2なので5回になるのが一番起こりやすい結果ですが、
実際には4回、6回のように、5回を中心としてその周辺の回数になることもありえます。
充分に大きな回数試行を行い、出た回数を横軸に「0〜10の
発生しうる表の回数」、縦軸に「実際にその回数が出た数」をプロットすると、
それが正規分布のグラフになるのです。

blog_iro2.png

実際にエクセルで3000回の試行シミュレーションをしてみました。
正規分布のあの釣鐘の形になっていますね!


さて、今回のイロレーティングの話に戻ると、
プレーヤーのパフォーマンス(結果的には勝率)が正規分布に従うと仮定し、
そのパフォーマンスを予め数値化しておき、その差により勝ち・負けの発生する
確率(勝率)が推定できるように開発されたものが、
イロレーティングの計算式になります。

計算式は意外と簡単で、プログラム実装も簡単です。

プレーヤーA,Bの現在のレートをRa, Rbとしたとき、
次の計算式でそれぞれの勝率Ea, Ebを表すことができます。

Ea = 1/( 1+10^((Rb-Ra)/400) )
Eb = 1/( 1+10^((Ra-Rb)/400) )


blog_iro1.png
実際にこの式を用いて確率分布をグラフにしてみました。
平均0、分散300の正規分布の累積分布関数とほぼ一致するようです。



一試合行った後のレーティングの増減計算は、新たなレートをRa'とすると、

Ra' = Ra + K(Sa-Ea)

(Saは勝ち:1 負け:0 引き分け:0.5
Kはパラメータ定数で32や16が使われます。)

一試合ごとに各プレーヤーのレートを更新していけば、イロレーティングシステムの完成です。

参考までに、他のレーティングシステムも紹介しておきます。

TrueSkill: XboxLiveのランキングシステムで使われているもの

現実のサッカー界の国別ランキングにイロレーティングを適用したもの

こういった基本を理解した上で、自分の開発するゲームにも適切に応用できるように
したいですねexclamationそれでは。


posted by 管理人 at 17:03 | 日記

2013年05月13日

よびだせ!Objectve-C!!

こんにちは。
ゴールデンウィークは遠出しなかったマイキーです猫

普段遠方へ行っている地元の友人がこちらに戻ってくるので……という寸法です。
こんなゴールデンウィークも有りかなぁと、のほほんいい気分(温泉)と過ごしておりましたが、どこかへ出掛けても良かったかなぁという気持ちも少々。
夏はどこかにでかけるぞぉー晴れという野望を密かに抱いておりますが、果たして夏まで持続するのかexclamation&question
ご期待下さいぴかぴか(新しい)
***

最近ふとしたきっかけでObjective-Cに触れる機会があり、ちょこちょこ勉強をするようになりました。
最初は独特な文法で面食らいましたが、習うより慣れろ精神でゴリゴリサンプルを作ったりして遊んでいます。
個人的に、メソッド呼び出し時に引数にキーワードを記述可能な所に好感が持てますグッド(上向き矢印)おそらく、引数の用途・意図を呼び出す側からも明確にする為の措置でしょうか。
キーワードを記述するとメソッド実行部分のコードが少々読みづらくなる(のは私だけ?)側面もありますが、書き方次第で可読性はいかようにでもなるので、今の所好感触です。
今後とも上手く付き合っていきたい言語ですひらめき

さて、まずはその構文の特異さに面食らったObjective-Cですが、中身も結構C/C++と違っているようです。
一つ例を挙げると、メソッド呼び出し時のジャンプ先アドレスの解決がコンパイル時ではなく、実行時に動的に行われているのだとか目
「あれ、それって遅くない?」と思われた方は正にその通りで、以下のメンバ変数を加算するメソッド「addValue」をそれぞれiPhone4Sで100万回ずつ実行した所

* C++

class Adder_cplusplus
{
public:
Adder_cplusplus(void):_value(0){}

void addValue(void){ _value += 1; }

private:
int _value;
};

void doProc(void)
{
Adder_cplusplus* pAdder = new Adder_cplusplus();
for( int i(0); i < 1000000; ++i ){
pAdder->addValue();
}
delete pAdder;
}


* Objective-C

@interface Adder_objectivec : NSObject
{
@private
int _value;
}

- (void)addValue;

@end

@implementation Adder_objectivec

- (void)addValue
{
_value += 1;
}

@end

void doProc(void)
{
Adder_objectivec* adder = [[Adder_objectivec alloc] init];
for( int i(0); i < 1000000; ++i ){
[adder addValue];
}
[adder release];
}


C++側は平均25ms、Objective-C側は平均84msと、およそ3倍強近い差がありました。
一度の呼出しでは大した差になりませんが、膨大な回数のループの中で何度も呼出される場合を考慮すると少しでもオーバーヘッドをそぎ落としたい所ですたらーっ(汗)
調べてみると、methodForSelectorやinstanceMethodForSelectorというメソッドで関数ポインタを取得出来、そこからメソッドを呼び出すとオーバーヘッドを削る事が出来るとのこと。
よし、じゃあそれやってみようexclamation×2という事で修正したObjective-Cのコードがこちら左斜め下


@interface Adder_objectivec : NSObject
{
@private
int _value;
}

- (void)addValue;

@end

@implementation Adder_objectivec

- (void)addValue
{
_value += 1;
}

@end

void doProc(void)
{
Adder_objectivec* adder = [[Adder_objectivec alloc] init];

SEL selector = @selector(addValue);
// instanceMethodForSelectorの返り値はIMP【id(*)(id, SEL, ...))】型なのでキャストする
void(*func)(id, SEL, ...) = (void(*)(id, SEL, ...))[Adder_objectivec instanceMethodForSelector:selector];

for( int i(0); i < 1000000; ++i ) {
func(adder, selector);
}
[adder release];
}


平均実行速度は平均64msに。25%程、ほんのり高速化する事が出来ました揺れるハート
ループ内で都度つど行われていたジャンプ先の検索を、事前に行うようにする事で処理速度が上昇した、という訳ですね。
メソッド呼び出し時のオーバーヘッドが実行時のボトルネックとなる事は多くありませんが、ほんんんの少しでも良いから速度を上げたい!!という時は使ってみて良いかもしれません。
高速化は細かな改善の積み重ねですので、この高速化が役に立つ日がいつか来るかも?

それではまた手(パー)

posted by 管理人 at 21:26 | プログラミング

2013年05月10日

3次募集を開始しました!

こんにちは〜。
そろそろBBQビール の季節ですね☆業務部しばやんですわーい(嬉しい顔)
この4月でまたBBQ部員が増えたので、今年もたのしくなりそうですっるんるん

さて、本日は2014年度 新卒募集のお知らせですexclamation

ヘキサドライブでは、引き続きゲームプログラマー を募集しています。
今回の応募締切は 5月31日(金)必着 です。

募集の詳細は、リクナビ2014ヘキサページに掲載していますので
そちらをご確認ください。

学生のみなさん、ご応募お待ちしています!!

それではまた★

posted by 管理人 at 14:48 | 採用 -お役立ち情報も-

2013年05月09日

続リニアワークフローについて思う事

お久しぶりです。
昨日のブログにおでこと腕だけ写真掲載されました、
隠れた太陽good sun晴れこと山口です。

前回、リニアワークフローに触れた事を切っ掛けに自身の勉強の為と思い立ち、
ノードベースのコンポジットソフト作成を始めてみました。
今回はこの勉強を踏まえてリニアワークフローの話をしたいと思います。

OpenEXRのサンプルの写真データを使って単純な合成テストをしてみました。
この.exrに格納されているデータはリニアなデータになっている為、
プレビュー等で画面出力するときにはディスプレイの逆ガンマ補正をしないと、
↓の様に大きく見た目が異なって見えます。

20130509_02.jpg
20130509_01.jpg

微妙な光の減衰等が消えてしまって見えますね。
リニアではないワークフローでは、
各ノード毎に正しく見える明るさにガンマ補正してその補正したデータ同士を合成することになります。
つまり逆ガンマによって上向きのカーブに底上げされた状態になります。

20130509_03.png

ディスプレイ上では正しく見える画像でも実際のデータでは底上げされている為、
この画像同士を直接加算合成などすれば、必要以上に明るくなってしまいます。
3Dでのシェーディングにおいてもこの部分は非常に重要な要素になっています。
リニアでないテクスチャに対してライティングを行った結果は、
当然求める結果とは異なった情報となってしまいます。
これにはアルベドマップにシェーディング結果が入り込んでいてもNGです。
今月のCGWORLDのコナミさんの記事でテクスチャの作り方が紹介されていますが、凄く徹底されています。


さて話はコンポジットに戻りまして、
リニア対応ついでにレンジも8bitではなく32bit浮動小数に変更してみました。
これによって従来のPhotoshop等で使われている合成の処理の一部は破綻してしまう事が分かりました。
例えばスクリーン合成がそれにあたります。
スクリーン合成の計算は以下のようになっています。
1.0 - (1.0 - src1) * (1.0 - src2)
このため入力値に1.0以上の値を設定すると、
計算結果がマイナスとなってしまい、
想定とは違う結果になってしまいます。

20130509_04.jpg

リニア化する事によってスクリーンでは無く、
加算を利用することで程よく明るくなる合成が出来るようになっています。

さらに当たり前ですが、地味にうれしい効果として1.0をオーバーフローした後に減算しても劣化しません。
従来の8bitデータでは255が上限値となる為、
オーバーフローした値はクランプされてしまい、
そこから値を減算した場合は
残念な感じに情報が失われてしまいます。

20130509_05.jpg

このような画像に対して、減算を行うと

20130509_06.jpg
このように劣化してしまいますが、
32bitデータだと

20130509_07.jpg

このように劣化はありません。
光線等の合成後の色味調整等で絶大な効果を発揮しそうです。


と、まだまだ浅い勉強過程ではありますが、
ノンリニアワークフローでのコンポジットの魅力の一部を紹介させて頂きました。
実際に作ってみると単純な合成だけでも処理負荷が高く、
市販ソフトで1フレームあたりがとても高速なのには改めて感服させられます。
まだまだOpenCLやパラレル化でパフォーマンスの向上も目指していきたいと思います。

このような事もWebCLといった仕様が策定されていたりするため、
将来的にはWeb上のツールでもコンポジットが出来る時代が来るかもしれないですね。

ではまた 手(パー)

posted by 管理人 at 20:49 | 日記

2013年05月08日

5月誕生日会

お久しぶりです。
お土産のきびだんごを1つ渡しては
鬼(バグ)退治をしてもらっている桃太郎さんことタイラですパンチ


ゴールデンウィークいかがお過ごしでしたか。
僕は期間中実家へ帰って日曜大工をしていました。晴れ

普段椅子にずっと座っているためか
何時間も中腰姿勢でペンキ塗りをやっていたら
完成する頃には膝が笑っていました。がく〜(落胆した顔)

おまけに翌日も筋肉痛でした。
やはり普段使わない筋肉を一度に使うとダメですね。
ここはやはり僕もフットサル部に。。。


さてさて、今日は毎月恒例の全体報告会&誕生日会&ゲーム大会です。
一ヶ月間の研修を終えた新人達も戻ってきて
オフィスがまた少し賑やかになりました。

20130508_01.jpg

毎月のケーキに加え、今日はゲーム大会なのでピザもあります。

20130508_02.jpg

お腹が満たされた後は
みんなでボードゲームです。

20130508_03.jpg

交流も深まった事ですし、
また明日から頑張っていきたいと思います。わーい(嬉しい顔)

ではexclamation

posted by 管理人 at 22:36 | 日記

2013年05月07日

おみやげラッシュ☆

こんにちは〜。
ゴールデンウィークは人波かき分け話題のグランフロント大阪に行ってきました☆
業務部しばやんですわーい(嬉しい顔)
人の多さに圧倒されつつも、新しいものとの出会いを楽しんで帰ってきましたぴかぴか(新しい)

さて、長期お休みの後は「あ〜ぁ、お休み終わっちゃったなぁ・・」と
ちょっとガッカリした気分になってしまうものですが、ヘキサには
お休み明けならではのお楽しみがあります手(チョキ)

ハイ、コレっexclamation×2

20130507.jpg

お休み中に各地へ出かけたヘキサメンバーからの
有り難〜ぃおみやげたち〜るんるん

今回は過去に例を見ないほど多く集結したので、
うれしくなって思わずデジカメで撮ってしまいましたカメラ

おやつの時間に早速頂きましたが、どれもとってもおいしくて
「よし、後もう少しがんばろう!!」という気持ちにさせてくれました。
どこに行ってきたのか等々スタッフ同士の会話も盛り上がるので一石二鳥です!
本当にごちそうさまでした(^人^)

ヘキサには決しておみやげルールはありませんょ!!
もちろん大々的におみやげの催促をしてるわけでもないです・・w
一度にこれだけ多くのおみやげを頂く機会に恵まれて
純粋にうれしかったものでexclamation

グラフロまんじゅう、売ってたらよかったのにな〜ふらふら
また夏休みにどこかにお出かけして、みんなに楽しい思い出を
おすそ分けし返したいと思います。

それではまた★

posted by 管理人 at 17:46 | 日記

2013年05月02日

アジャイル開発

お久しぶりです藤原です。晴れ


いきなりですがアジャイル開発やってますか?!

そもそもアジャイルとは英語で agile[機敏な] とありますが
ではアジャイル開発とはなんでしょうか?
簡潔に言うと数あるソフトウェア開発手法を機敏に適応的に取り組む考え方だと思います。

はい、今回はアジャイル開発について少し語りたいと思います。


アジャイルではその開発手法のそれぞれをプラクティスと呼びます。
プラクティスの構成によってスクラムやXPなどが挙げられます。
プラクティスの一部を挙げてみると

 考える事に関してのプラクティス
  ペアプログラミング
  振り返りミーティング

 リリースに関してのプラクティス
  継続的インテグレーション
  バージョン管理

 計画に関してのプラクティス
  リスク管理
  見積もり

 開発に関してのプラクティス
  リファクタリング
  パフォーマンスアップ

などがあります。

次にプロジェクトのライフサイクルに関してですが
 計画>分析>設計>実装>テスト>導入
を一方通行に取り組むウォーターフォール開発

上記の工程をプロジェクトの1サイクルとして短い期間(2週間〜1か月)
で反復させるイテレーティブ開発

などが挙がりますがアジャイルでは後者寄りのライフサイクルになりますね。
また反復期間をもっと短く一週間単位と区切り
週の頭に計画、週末に導入、間の期間は 分析、設計、実装、テスト
が平行して行われる XPライフサイクル などがあります。


その他チームの役割分担やバックログの導入などがありますが
続きはまたの機会にしたいと思います。ひらめき

今回参考にしたのは以下の書籍になります。
興味がある方は一緒に勉強しませんか?!
XP開発メインにアジャイルについて一通り詰まっていていい感じです。

アート・オブ・アジャイル デベロップメント――組織を成功に導くエクストリームプログラミング


それではではまた〜。手(パー)

posted by 管理人 at 12:22 | いいモノづくり道