2011年07月

2011年07月29日

うにばな 進捗(し・・しんp

dota4


dota系ゲームのテストリンク


進行中のDota系プロジェクトの進捗(しんちょく)です。 つまり経過報告ですな。
そろそろ中身の方も作り始めねばならないと 試行錯誤中。
基本的にはアクションゲームみたいなもんなのですけど 問題はミニオンと呼ばれる 自動制御のザコ敵の
AIがらみですね。 これが面白さの殆どの部分を占めていたりするみたいなので 悩みどころです。
もっさり重ためですけど スタンドアローンだとけっこう軽いんですよこれが、 ストパンのほうもですが
WEBプレイヤーはかなり重たいです。
そして
Wikiの方にウェイポイントからリンクデータを生成するスクリプトを発見したので 改造してみました。

http://www.unifycommunity.com/wiki/index.php?title=WaypointMaster

とはいえ これだけではゲームにならないので Boidプログラム(群集制御)のスクリプトを足しています
玉の色が状態変化で 赤がリーダー 緑が同調 青が結着 黒が分離 のそれぞれモードを表しています。
これから攻撃時の状態変化を入れていかねばなりません。
ちなみにリーダーはAスターの計算でウェイポイントをつたってランダムに移動しています。

BoidsTest


AIプログラムのテストリンク

一週間ほとんどゲーム作成に明け暮れてましたけど 発表していませんがほかにもUnityで作成中のゲームもあり ブログの記事も書きつつ  そして仕事もあるので

今の状態を的確に表す言葉は

『もう 頭がフットーしそうだよう。。』

tumblr_kvs3yxrZU71qz6zzvo1_500



ということで ちょっとゲームの絵ができて楽になってきたので 来週にかけて『うにばな』ほか講座関連の記事もがんばりますYO

akinow at 19:02|PermalinkComments(0)TrackBack(0) Clip to Evernote 日記 | Unity3d

2011年07月23日

2011年 夏アニメ感想2

また今期の感想も 記事の制限 15000字を越えてしまったようで パート2の記事を書きました
ですがほとんど1話について書かれていますので、奇跡的に2話から面白くなったのもあるかも知れません
あんまり参考にならんかも知れないですがどぞ。


■夏目友人帳 参 
なんですか この安定感は。 3期からテレビのオリジナルはなしでシリーズが作られると聞いて、ちょっっと不安だったんですが 一話から良い最終回を見せられて 満足してしまいました。 今期は霊感をもつ少女タキとの恋愛を描いていくそうです。 作中にあんまり性的な匂いのするものも出てこないんですけどね せいぜい寝不足の夏目を友達がゆうべエッチな本読んでたんだろ と構う程度。 わたしの頭は瞬時に友人帳=遊人帳(漫画評論家の夏目房之介が蒐集したエロ漫画家・遊人の切り抜き帳に違いない)と誤変換をしたのでした。てか遊人とか今の子知らないだろw  3期も製作は安心のブレインズ・ベースです まあ恋愛っていってもいわゆるいい話で終わるんだろうけど 私のお気に入り 沢城みゆき演じるメガネっ娘 笹田純をもっと見たいのよ『ええいホワイトベースはいい 笹田を映せ』と あの人なら言う事でしょう。 今期一番期待してます


■バカとテストと召喚獣にっ! 
瑞希役原田ひとみは一体どこから声を出しているのだろうと 声優さんのすごさを再認識するための本作。
いきなり初回から海水浴という季節物を持ってきました。テストとかやってるより面白いよね と作品のアイデンティティをクズす感想しかでてきません。 とりあえずこの手の作品はタイトルと導入部分は違えど 中味は
海水浴と夏祭りとお風呂とプールと健康診断と風邪の看病と温泉旅行 そんなモノで出来ているのです。
『一族郎党皆殺しよ』『それ姉さんも入ってるから』 ここだけちょっと笑った。
大沼心監督は一期から続投 今年はラノベ原作の『Cキューブ』の監督もやるらしい 実はそっちはちょっと面白いとか言う話。 

■ダンタリアンの書架

キャラと背景美術はちょっとだけ好み 沢城みゆきの起用もあっている。Gosickととても似た匂いを感じる。
この手の作品は ある程度知名度の高い作品を引用して 見側の知識欲を刺激するのが常套なわけだが
絵本の原書とか あまり有名でない作者のあまり有名でない一節を引用するっていうのは 見る側の知識欲を
刺激しない なぜなら知識欲の原動力は誰かにその知識をひけらかしたい であるので 誰かに自慢するときに
相手がその作者も出典もまったく知らないととっかかりがないわけだ。 そうした意味ではあまり成功しそうな作品とは言えない ニッチすぎる。  ダリアンは揚げパンが好きという カノンで言えばタイヤキ シャナで言えばメロンパンのような ようは視聴者が昔馴染んだようなアイテムを出すことでいわば見側に擦り寄ろうとするわけだが 本編は映像以外全く魅力がないので、ある程度売れた作品の構造を模倣しているが 興味を惹かれない。
絵から動物を出すにしても映画ジュマンジのような派手な演出であるとか 皆が馴染みのある昔ものがたりなどから引用であれば もうすこし視聴側との親和性が増したと思う。
 
■いつか天魔の黒ウサギ 
長年アニメを見てきましたが ついに理解不能なアニメに遭遇してしまいました。
長所?あーそうね 女の子のキャラはかわいいわ 男キャラは痛すぎだけど。
躊躇なく殺しまくる死にまくる話ってダメ話だよね
トラックに轢かれてばらばらになって 掛ける言葉が さよなら不死身クーン
いや これ大丈夫なのかね売上とか 富士見くん さよならしちゃうよ?

多分これ感想は書けないので 今後視聴しません

■NO.6
あさのあつこ原作小説のアニメ化。 No.6は海外ドラマのプリズナーNo6 からとったんでないの?と 例のクジラ20さんからの情報があったんだけど どうなんでしょう。 西洋で6っていう数字は未完成を意味するんですよ
7って言うのが神聖な完成された数 で それより1少ないから未完成。ちなみに8は安定。
だから NO.6という都市は成熟できない都市だと勝手に解釈。まあ手錠みたいなリング付けてるし チップ埋めこまれてるし なにかありあそうだけどね。 話は2話から面白くなるらしい。
コンセプトデザインはTOI8さん 背景の描写が卓越したいわゆる味のある絵を描かれる方なんだけど
今回の背景デザインはなにやらアッサリ風味。 家の中に生活臭がしない。手作りケーキをつくっても普通に店で売ってるような個性のないものが出てくる そしてでかいテーブルの真ん中にケーキがのっててケーキだけをモシャモシャ食べてる。食卓なら普通はいろいろ小道具が出るとこだろうけどなんもない。 そんな素っ気無い風景があとでどう効いてくるのかというところが見所かな。 キャラはいいと思います。 ボンズ製作なのでクオリティは安定していそうだし 脚本の苦手なボンズだけど原作あるからなんとかなるだろう。 割と堅実で好きな雰囲気。

■セイクリッドセブン 
ユニコーンガンダムみたいな角が生えちゃったり、ギアスみたいに目が赤くなってなにやら紋章までw  どっかのオペレーションルームなのかメイド服が戦闘服なの?花右京メイド隊みたいじゃん なんていう
嫌な見方しかできないのがアニオタってやつですねw でも主人公のたちの石好き設定って あれだよね
おじゃる丸の主人公カズマを思い出すよね (まだ言うか
で最終的には変身ヒーローみたいな風貌になって怪物を倒すのが目的みたいなんだけど 私の石を上げますって主人公の封印解除のための宝石がハート型してて ポーズが萌え萌えキュンなの なんていうかいろいろ既視感を感じるアニメです。 名前にセブンがつくアニメであたったの観たことないなあ。。

■にゃんぱいあ The Animation
これも5分アニメなのね。 キャラクターを売りたいのが版元だから 消費サイクルの早いこの時代 昔4クールだったアニメが 2クールになり1クールになり5分になりというのは ある意味順当なんだと思う。リスクでかいし。 作画はサムシング吉松(トライガン・ドリキャス子)そういえばバスカッシュ以来のキャラデザじゃないかな
 シリーズ構成 高橋ナツコ(東京マグニチュード・もやしもん)という両方ともベテランクラス。 にゃんぱいあは可愛い アイルー村とか好きな人はいけそう。 でも吸血鬼モノはブレイド、黒ウサギとコレで今期3本ですよ飽きたかな。
■R-15

下半身の蛇とか蜜壺とかエンドウ豆が、なんていう呪文が繰り返しつぶやかれますが意味がわかりません。
日本中から天才を集めた学校で 主人公はポルノ小説作家 というなんでもアニメにすればいいってもんじゃ無いよね っていう言葉が似合いそうなアニメです。 思春期の子は箸が転んでもエロく感じてしまうもの『エロを描くことは人間を描くこと』 そう思っていた時期が私にもありました。そんな若くて痛い性癖をさらけ出す作品です。 これも透過光はいりまくりで肝心なとこが見えなくなってますが、絵づらが購買意欲に全く結びつきません。
日常、黒ウサギ、これと角川アニメは完全に進む方向を見失っている気がします。

■猫神やおよろず 

猫神やおよろず声優

繭:戸松遥
柚子:堀江由衣
メイ子:竹達彩奈
笹鳴:茅野愛衣
しゃも:豊崎愛生
ゴン太:三瓶由布子
芳乃:MAKO
枕木夕楽々:高垣彩陽
クロエ:徳永愛
白崎蓮美:下田麻美
遥:南條愛乃
賀茂雪那:水橋かおり
鎭葉御前:田中涼子
天音:伊藤かな恵
天照大神:田中理恵
ツクヨミ:置鮎龍太郎
灯媛:新井里美
玄:内藤玲
スーパーの店員:小西克幸
テオナナ・カトル:金元寿子

錚々たる流行声優陣で声優オタを釣るアニメかと思ったんだけど これは意外に良い
商業的に東方プロジェクトのリスペクト方向性を目指してるんだろうけど キャラも可愛いしお話もゆるくて
力抜いて見れそう。東方とあとちょっとかみちゅ(神様レーダーのあたり)そして微量のシガタケ成分が入っている。貧乏神(ではないんだが)しゃも が一番可愛いかな エビスビール(ではないんだが)を飲んでるってことはいくつの設定なんか知らんが 赤貧は美しいよね。

■うたの☆プリンスさまっ♪ マジLOVE1000% 
これは 金色のコルダの ニの線ですね。いわゆる乙女ゲーの世界観。コルダでの音楽学校がアイドル育成学校に変わっていますがヒロインのノルマはアイドルの作曲家になることなのでほぼ同じシチュ。
で 例によってイケメンの御曹司のアイドルのタマゴの男達がなぜか中流家庭であまりパッとしないヒロインに群がってくるという。 ギャルゲーとちがうところはヒロインの相棒がわりと美人でお金持ちというところ。男性向けゲームの場合は主人公の気のいいマブダチだけどあまり二枚目ではなく目立たない引き立て役タイプなんですが、こちらは美人の友達をはべらすことで、その美人の友人よりも男達が自分を選ぶというさらなる優越感と達成感を得られるというある意味強欲な仕様ですw リアル婚活話でも取り柄のない女性ほど三高を望みますから そういうひとにはマッチした設定なのかなー なんてね。  まあ一般に男性はココロの美しい女性に惹かれるのが常なので、欲をみせた瞬間にアウトですよw

■ぬらりひょんの孫 千年魔京 
妖怪の総大将ってぬらりひょんなんだ。ストーリーのシステムは『ドロロンえん魔くん』ですね。
主人公が総大将(ぬらりひょん)の孫でお供に河童と雪女もいるあたりー。 で学校が舞台なとこは『地獄先生ぬーベー』主人公の髪が伸びて変身するとこは『うしおととら』かな?いりいろ旧作の影響を感じますが上手くまとめてると思いました。原作未読なので先はわからないのですが 奴良組とかヤクザっぽい色付けをしてるってことは リボーンのようにバトルものなんでしょうか。しばらく視聴してみます。

■だぶるじぇい
ネットさがしまわってようやく見つけたらフラッシュアニメだったのね
クロ高みたいなオチだけどこれ割と面白いw


観終ったー 『アイルー村』ってのは見つかりませんでした

akinow at 15:42|PermalinkComments(4)TrackBack(0) Clip to Evernote 日記 

2011年07月22日

うにばな 講座みたいなもの番外編(高速化について)

講座みたいなもの番外編です。
今回は "Unity3D 高速化" という検索ワードが非常に多かったため 公式サイトなどで確認した手法を
まとめてみます。


■『使用頻度の低いファンクションは削る』

■『FindObjectsOfType, FindGameObjectWithTag, GameObject.Find といったFind系は処理が重い』 出来る限りAwake()、Start()文中などの初期化段階で行いましょう

■『static型を使用してください』静的な変数であるStaticタイプを使用することでメモリは固定され処理効率があがります。 これちょっと訳が正確かわかりません 単純に静的な値の割付け(つまりキャストしなさい)ということかもしれません。 



最近のハードウェアでのフレームあたりのドローコールは500回程度ですが あまり多いポリゴン数とライトの数は処理を低下させます 
対策として

■『モデルをコンバインする』 MeshMergerなどを使用して シーン内のメッシュをまとめてしまいます。
まとめるモデルは なるべく同じマテリアルを使用していて 一枚のテクスチャがはられていることが好ましいです。
これはモデル数が多いとCPUの計算コストがあがりGPUに対して複数オブジェクトを何度もレンダリングコールすると
処理負荷が高いということに基づきます。

■『ライティングはライトマップに焼き付ける』これは3.0以降はビーストライトマップが使用できます。もちろん3Dソフトでライトマップを焼き付けるのも可能です。
 
■『ライトはカリングマスクを使用して必要以上のオブジェクトに照射しない』 レイヤーでカリングマスクを使用することでライトがどのオブジェクトにあたるかを指定することができます。必要以上のライティングは行わないようにするほうが高速です。

■『レイキャストは低速なのでを使用するときはかならずカリングマスクをして必要以外のオブジェクトは対象から外す』  これもやはりレイヤーマスクを使用して レイの判定に必要のないオブジェクトは除外します。

■『配列を使うときは静的な配列を使用する』 これはおそらく 配列の指定で 単にvar=Array(); とするより

var[100」などと配列の個数を静的に割り当ててしまったほうがメモリ効率が良いということだと思われます。
■『OnEnable、OnDisable を使用する』カメラに写っていないオブジェクトの処理をしないようにする 

■『カメラから遠くに存在するようなオブジェクトはUpdate()文中でReturnをする』

■『トリガーを使用してプレーヤーが接近した場合にのみ処理するようにする』 

■『coroutineを使用してUpdateを5秒間隔で行う』 例には5秒間隔と書かれているのですが ようするにYieldを使用してコルーチンにディレイを掛けるということだと思います。 たとえば敵のサーチなどの処理は毎フレーム行わなくても良い処理ですのでUpdate文のなかに書かずに コルーチン化して数秒に一回呼んでやるようにすれば処理が軽くなるということです

■『Math関数のサイクル数の目安』
• Add, subtract, multiplyは同程度のサイクル数
• Divide: 30-40 サイクル
• Square root, sin, cos: 60-100 サイクル

■『ループ内での Sqrt と Normalizeの使用を避ける』
Nomalizeは内部にSqrtを含むため
• if (distance > dif.magnitude)
• if (distance * distance > dif.sqrMagnitude)
などは重たいのでしない

■『Cacheを活用する』

例:
private var myTransform : Transform;
function Awake () {
myTransform = transform;
}


■『JavaScriptに関して』
Static typing をすればC#と同様の速度が得られるらしい 
つまり 型のキャストをしっかり手動で行う。
UnityのJavaはC++の50%程度のスピードで動く これはMozillaの20倍の速度
スクリプト内で#pragma strictを宣言すると 動的な変数割付に対してエラーが帰るので参考にして調整する




とここまでが公式の資料によるものです。

ここから下がリファレンスのオプティマイズに関しての記述の解説です。





■キャラクターデータの高速化

『キャラクタモデルには1つのスキンメッシュレンダラーで構成する』
『マテリアル数は可能な限り多く無いほうがいい シェーダー負荷が高いためで 例えば銃などマテリアルを分けなければならない場合は別モデルにすること』
『可能なかぎりボーン数は減らす 通常のゲームで15-60のボーン数 モバイルマシンなどでは30程度が適切な数値』
『ポリゴン数の目安 300-1500がモバイル 500-6000がデスクトップ
Half Life 2 のキャラクターで 2500-5000 , PS3 or Xbox 360 でだいたい 5000-7000 ぐらいが適当。』
『インバースキネマティックはFKにベイクしておく』
『未使用のリグは消しておく』
『正しく骨を命名してください』



■スクリプトの高速化
前の記述とダブるところがありますので注意して読んでください。

1. Use Static Typing

変数の型を静的に割付け つまり使用するときにきちんと宣言すること
宣言しなくても自動で判別して実行してくれるのですが その分処理がかかります

例:
function Start () {
var foo = GetComponent(MyScript);
foo.DoSomething();
}

  
       ↓ このようにする
      
function Start () {
var foo : MyScript = GetComponent(MyScript);
foo.DoSomething();
}



2. Use #pragma strict
『#pragma strict』を宣言して動的宣言しているところのエラーが返るようにして静的宣言に調整する
ただしですが どうしてもコンパイルエラーが返る場合があるので そういう場合は『#pragma strict』はずしてコンパイラに任せたほうがいいです
特にGetComponent()を使用して値を参照するときのエラーが消えないことが多いようです。

例:
#pragma strict
function Start () {
var foo : MyScript = GetComponent(MyScript) as MyScript;
foo.DoSomething();
}



3. コンポーネントの値のキャッシュ使用

transformをmyTransformと自分が用意した変数で定義します

例:
private var myTransform : Transform;
function Awake () {
myTransform = transform;
}

function Update () {
myTransform.Translate(0, 0, 5);
}


4. Use Builtin arrays
配列はあらかじめ使用する配列の個数を指定してしまうことで効率よくメモリ使用されるようです

例:
private var positions : Vector3[];
function Awake () {
positions = new Vector3[100];
for (var i = 0; i < 100; i++)
positions[i] = Vector3.zero;
}


5. 必要のないUpdateコールは避けましょう。

Update ()文は毎フレームコールされるので できれば必要ない条件でreturn;をはさんで何もさせない処理をするといいです
例はターゲットから遠い時に何もしないよう設定しています
またOnBecameVisible()、OnBecameInvisible ()でカメラに映っているときに処理をするように
指定します

例:

var target : Transform;

function Update () {
// Early out if the player is too far away.
if (Vector3.Distance(transform.position, target.position) > 100)
return;
// perform real work work...
}



例:

function OnBecameVisible () {
enabled = true;
}

function OnBecameInvisible () {
enabled = false;
}



2.トリガを使用するときには一番軽い球型(sphere)のコライダを使用すると高速です。
球の公式を見ればわかるのですが オブジェクトの接する判定はトリガ中心とオブジェクトの距離の判定だけです。
ボックスの場合は6面分の接触判定の計算になりますし カプセルの場合は縦横比分の計算コストがかかります。メッシュコライダはもちろん重いです。
3Dゲームの場合たいてい高速処理のために球型のコリジョンで判定します。 四角い場合などはオブジェクトの形に合わせて小さな球コリジョンをいくつか
並べるなどのやり方もあります。 もっとも最近のハードは高速ですので昔のようなこの手法は特別に処理軽減を狙わなければあまり必要ないと思われます。

例:

function OnTriggerEnter (c : Collider) {
if (c.CompareTag("Player"))
enabled = true;
}

function OnTriggerExit (c : Collider) {
if (c.CompareTag("Player"))
enabled = false;
}



■補足
このほかに有効そうな手法を記述します。

『ウェイトの影響範囲を2本以下に』これは プロジェクトのクオリティ設定でできます
『テクスチャの大きさを調整する』Unityのテクスチャの設定項目でサイズを変更できる箇所がありますので FPSを調べて重たい箇所のテクスチャサイズを小さくします
『シェーダーのパス数に注意 シェーダーはあまり重くしない』 シェーダーのソースをひらくとPASS:という箇所があると思いますが これがレンダラーのコール部分なのでこのPASSの合計数があまり多くなりすぎないようにシェーダーを選択します。
『LODモデルの切り替え』
これは前回の記事で解説しました。予めポリゴン数やテクスチャの小さな複数モデルを用意しておきカメラからの
距離に応じて切り替えることで高速化を期待する技術です。
背景には3.0から搭載されたオクルージョンカリングがありますがこれは カメラからの距離や画角などである程度ポリゴンを非表示にして処理軽減をしてくれる技術ですが、遠くから近づいてくるポリゴン数の大きなモデルなどは突然現れてしまうため見かけが悪い場合があります。 複雑なモデルデータはポリゴン数を減らしたモデルを切り替え表示したほうが良いかもしれません。
昔のはなしですが例えばレースゲームの背景でコーナー付近はポリゴン数が非常に多いため何段階かのLODをもつことがありました
ただあまり多くのオブジェクトに設定すると処理が逆に大きく掛かるので限定した方がいいと思います。

『ライトマップをつかう』 よくやりがちなのがシーン全体をテクスチャベイクしてしまうことですライティング情報として影などをテクスチャとして焼きこんでしまうわけですが当然テクスチャサイズが大きくシーン全体をカバーするには量も膨大になります。
テクスチャはタイリングをうまく活用し それほど解像度の大きくない内蔵のライトマップを使用すればこれは回避できます。 

『パーティクルは内蔵のものを使用する』 大量のアニメーションデータベタもちは当然重いです どうしてもやるならモデル的にマージして切り替えアニメにするほうがいいでしょう。
内蔵パーティクルはビルボード処理やソート処理などもしてくれますので やはり内蔵のものを使用するのがいいと思います。スクリプトで制御できる上にあまり重たくなくて性能的にはかなりいいです

これらをGameウィンドウのStats あるいはProfilerを見ながら調整を繰り返します。




この他に いまのところスタンドアローン版にはC++やObjective_CなどでDLLやプラグインを使うことが可能なようです(プロ版)
それがどのくらいの効果があるかは まだ試していないのでわかりませんが、将来的にはPS3やXBOXなどの
家庭用ゲームのプラットフォームにも拡張されると思います。
処理が必要な部分に局所的に使用すれば効果は高いのではないでしょうか


後述:

先日の某所のセミナーでUnityエンジンはスクリプトが低速で 次世代機で使うのは難しいという評価をしている開発者がいたようです。
まだ発展している段階で 大変バージョンアップの間隔も早いUnityエンジンです。
プラットフォーム自体 パワーがアガるスピードも年々はやまっていますので
現在の処理速度でこのゲームエンジンの評価をしてしまうのは早計だと思います。
他社製品のものに比べて重たいという評ですが 値段的に天と地ほども差がありそうな
高価なエンジンと比べれば多少使い勝手が悪いかも知れませんが この値段でこの性能をたたき出してるのは
むしろ驚愕だと思います。
世界中からの興味をひいているゲームエンジンです。日本にとっても低コストでゲーム開発ができるチャンスだと思いますが、世界中の誰にとってもチャンスなので 現在の研究潜伏期間を経て高いクオリティの作品が
登場するのも時間の問題かと思われます。そうなってしまってからでは日本の開発は更に劣勢に立つことになるわけで、 いまこのエンジンについて使える使えないなどという議論をするのはナンセンスです。
将来登場するさらに高性能のゲームエンジンのための布石としてUnityエンジンに慣れておくのはありだと思います。 そのときになって開発者がゲームエンジンの作法がわからないという状況が訪れはしないかというのが一番の懸念です。
ゲーム業界的にみると国内開発の一番の問題点はプロジェクトの大型化により昔のようにゲームを一人で作成した経験がなく開発全般をコントロールできる開発の人材がいないことがあげられます。海外のように映像系などのモノづくりに特化した教育をうけている開発者がディレクションをしている業界と競争していかなければ勝ち残れないわけで  これからのゲーム開発を考える上でゲーム制作をコントロールできる人材の育成は大変重要なことだと思います。 そういう意味を含めてこのブログではUnityでの開発に関するはなしをしていくつもりなのです。 まあ たいした話もできませんがw


■その他の最適化の関連記事

うにばな 講座みたいなもの番外編(高速化(最適化)について2  自分用のメモ)

うにばな 講座みたいなもの番外編(高速化(最適化)について3 モバイル系

うにばな メモリ使用量の最適化・ヒープメモリ ほか

akinow at 12:00|PermalinkComments(2)TrackBack(0) Clip to Evernote シリーズ講座 | Unity3d