2012年9月30日日曜日

Computer Graphics GemsJP2012感想

略してCGGJP2012を読み終えました。
本の内容はamazonの紹介文を読んで下さい。
CG関係の最新技術とかについて解説されている本です。

すっごいいい本です。
章の構成は順番に読んでいくことを想定しているようです。
実装の仕方まで載っている内容があるので、読み終わったら実装してみるといいです。
CCDIKはやってみました。画像変形と他IKもやってみるつもりです。

後半のシミュレーションの章になると数学力が必要になってきて、数式が読めなくて混乱したり、概念の理解ができなくて読み込んだりしてました。
偏微分方程式とか変分原理とか流体シミュレーションとかの考え方が解説されてるので
割りと知識無しで読んでも何とかなります。まだ実装できる気はしませんが。

グラフィック関係のプログラマだったり興味あったりする人なら必読かなと思います。


第8回Unity勉強会に参加してきました

TechBuzzさんが開いてる?第8回Unity勉強会に参加してきました。
http://atnd.org/events/31433
公式なレポートtogetter

以下個人的発表感想

1.山村氏「Unity開発におけるアンチパターンの提案」
アンチパターン、こういう手段で開発してたら最終的にとんでもない失敗になるよね。といったパターンのお話のようです。
Unity開発で特にありがちなパターンをピックアップして幾つか紹介されていました。
ある程度の経験を積んでいれば自然と回避しているので、パターンの内容を聞いたら、あぁそうなるよねぇ気をつけていかないとねという感想を抱くぐらい。
私はアンチパターンが一般的で皆知ってるという名前では無いと思うので、デザインパターンを学んでるといいのではという考えです。
Unityに限らずこの知識は必要ですし。


2.田中孝氏「Unityサウンド入門編」と「サウンドワークショップ事例」
Unityでサウンド鳴らすにはどうするの?どう管理してるといいの?という話から
CEDEC2012でCRI・ミドルウェア社が行ってたワークショップの話。
サウンド入門編は福島GameJamで作られたiOSゲーム「駆け上がれ馬ども」というゲームを元に
解説されていました。
slideshareで公開されています。
「Unityサウンド入門編」と「サウンドワークショップ事例」
記憶に残ったものとしては
SoundManagerを作成してAudioSourceは全てそこで管理して鳴らすようにしてるとか。
常に鳴らすBGMはUpdateでAudioSourceの存在を監視して消えてたら再び鳴らすとか。
α版からサウンド鳴ってたらヤル気沸く!とか。
効果音とかBGMとか重なり合って鳴るときのチェック用にデバッグ機能を作成しておきましょうとか。
コイン獲得音など半音上げていって気持ちよくするとか
...etc

スライド目を通して駆け上がれ馬どもをダウンロードしましょう。

3.伊藤周氏「Unity開発における50のTipsのいくつか」
こちらの内容から幾つかピックアップして紹介されていました。
ひとまずは全部読んだらいいと思います。
注意 Unityとして公式なものではないので、問い合わせたりしないでね!


2012年9月26日水曜日

CCDIK見直し:改

球体で関節だけ更新してたので、ボーンないとわかりづらいなということで
ちょっとCheetah3Dで球体と立方体でボーンっぽいの作って入れ替えました。
ローカル座標の位置成分を回転させていたのを、ローカル座標の回転成分を回転させるようにもしてみました。
CCDIK_BONE

拘束位置とルートの距離がボーンの最大距離を超えると荒ぶる様子。
荒ぶっていたCCDIKを直しました。
transform.localRotation *= Quaternion.AngleAxis(miki, love);
としていたのですが
transform.rotation = Quaternion.AngleAxis(miki, love) * transform.rotation;
のようですね。
ローカルの回転だけ直せばいいよなーとか、クォータニオンの順番意識してなかったので
荒ぶってしまっていました。

コードはこのぐらい

Transform[] childlen = skeletonList.transform.GetComponentsInChildren<Transform>();
for(int i = 0 ; i < numIteratrions ; i++){
  for(int j = childlen.Length - 1 ; j >= 0 ; j--){
    Transform child = childlen[j];
    Vector3 effectorDir = Vector3.zero;
    Vector3 targetDir = Vector3.zero;
    effectorDir = ( effector.transform.position - child.position).normalized;
    targetDir = (target.transform.position - child.position).normalized;
    float dot = Vector3.Dot (effectorDir, targetDir);
    if(dot < 1.0f - 1.0e-6f){
      float rotAngle = Mathf.Acos(dot);
      Vector3 rotAxis = Vector3.Cross(effectorDir, targetDir).normalized;
      if(child.tag == "Bone"){
        child.rotation = (Quaternion.AngleAxis(rotAngle, rotAxis)) * child.rotation;
      }
    }
  }
}

2012年9月16日日曜日

CCDIKを実装しました

先月CEDEC2012に参加しまして、CEDEC書房で先行販売されていた
ComputerGraphicsGemsJP2012を購入しました。

通勤がてら読み進めていて、いくつか実装してみたいものが溜まったので、この休暇にまずCCDIKをUnity上で実装しました。
CCDIK in Unity
カーソルキーで上下左右に拘束位置である赤い球体が移動し、他の関節を表す球体が追随していきます。

アルゴリズムや他のIKについても詳しくはここを参照下さい。
http://www.tmps.org/index.php?CCD-IK%20and%20Particle-IK


実装は3時間ほどでしょうか。IK楽しいですね。エフェクタや対象関節の指定ミスでちょっとあれこれしました。

闇鍋勉強会#2に参加してきました

闇鍋勉強会#2に参加してきました。
闇鍋勉強会ってなんぞやとは、なんかいろんな人達が好きなこと話すごちゃまぜな勉強会。

前日に色々あって2時間近く遅刻して参加しました。
聞けた発表は
ATLの黒魔術
VisualC++付属でCOM扱うActive Template Libraryのreinterpret_castをしたら
同じオブジェクトが元でも別の仮想関数呼べるとかなんとか。

Fortran
私はさっぱり専門外なので名前は聞いたことあるわー
科学技術計算かーへぇーと聞いてました。

Unity x Node x MMD
UnityとNodeとMMDでMMOっぽいことできるんじゃね?ってことで挑戦された結果どうだったかな話。
MMDによってちゃんと表示されるか様々で対応は大変そうですね。
私も過去MMD x XNAのときにLat式ミクを表示させてみましたが、なんか描画うまくいかなくて
悩んでたのを思い出しました。
後、node.jsに興味湧いたのでインストールしてこんにちは世界まで動かしてみました。
刺激を受けて新しいことに手を出すきっかけになっていいですね。

LT枠は聞き流しながらUnity触っていました。
クイックソートの最悪計算量O(n^2)だから、これを利用してサーバーに攻撃して落とそうぜ!って話が面白かった。

boostjpで有名なcpp_akiraさんの集合知の話もタメになりました。
ネットに転がってる情報って、転がってるんじゃなくて誰かが書いてくれているんだぞっと。
http://d.hatena.ne.jp/faith_and_brave/

久々に勉強会に参加してみて思いますが、外に出て刺激を受けるっていいですね。新しいことに挑戦したり気持ちが引き締まったり。
会社に住んでデスマこなしても技術力あがらんし、刺激も無いしでいいことあんまないです。時間あるうちにどんどん外に出ていきたいですね。

このガジェットでエラーが発生しました