--------(--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2013-04-16(Tue)

UNITE 2013 レポート(1)[Unity]

Tokyo, April 15-16

レポート書こうと思ったけど、能力の問題で全然無理でした。出来た分だけ。
個人的に、ベース知識の欠如や同時通訳で理解できなかったりのため、ざっくりです。
資料が公開されたりしたら見直して、勉強しなおします、多分。。。

■基調講演
シェンムーで日本語勉強した。

■Unity レンダリングパイプライン(Day1 - Kuba Cupisz)
・Unityの良い点、悪い点
とても柔軟なレンダリングパイプライン、verex lit/forward/defferred
カスタムできるshader、lighting model
柔軟なゆえに設定がむずかしい
・built-in shaderの良い点、悪い点
スタンダードなlight model、全てのプラットフォームで動作する
スタンダードでないlight modelは提供されない、パフォーマンスとサイズ
・カスタム、速度、のために自分で書く、自分のゲームのrenderignは自分が一番知っている

・#pragma multi_compile AAA BBB
#pragma multi_compile DARKEN DIFFERENCE

上記の感じでcompile変数でshaderの定義をマテリアル単位で切り替えれる(Unity4.0から)
マテリアルのcustom inspectorでキーワード設定して、同じshader内で動作を切り替えるdemo
shader自体は複数コンパイルされた状態で、ランタイムでどれかが使われる仕組み
数に制限あり、使えるのは20位
・Shader replace
tag指定でshaderを置き換える、マテリアルはそのまま
Camera.SetReplacementShader (Shader s, string tag)
Camera.RenderWithShader (Shader s, string tag)
・Lit-shader replacementがUnity4.1で入った、scene viewの拡張なんかで使える?
・blockで分けて焼いたlight probes連結、bakedデータは動かせないけど
set Lightmapping.lightProbes
ブロックAからブロックBへのスムースな移行のサンプル
・DX11 tesselation
displacement texture または、Phong tesselationで、geometryを増やす
surface shaderで記述
built-in
・UnityDistanceBasedTess、カメラとの距離で増やす
・UnityEdgeLengthBasedTess、大きなtriangleを分ける
・DX11 rondom writes
RenderTextureとComputeBuffer
出力バッファのピクセル数を数えてグラフ化するサンプル、StructuredBufferにピクセル数を格納している
・DX11 volume texture

http://files.unity3d.com/jcupisz/UnityRenderingPipeline_UniteAsia13.zip

■シーン/メモリ/アセットバンドル(Day1 - 高橋啓次郎さん)
・シーン
どのようにbuildされるのか、どうやってloadされるのか
buildすると、tempディレクトリにarchiveが残っている
main - sharedassets0.assets
level0 - sharedassets1.assets
level1 - sharedassets2.assets
main-level1:オブジェクトをシリアライズ、シーンの階層
sharedassets0.assets:使っているassetsのパック
←若いsceneのassetは、参照されている
Unity/Editor/Data/Tools/binary2text.exeでassetをtextに変換できる
参照されているかの確認

シーンのロード
LoadLevelしてassetをよんでから、前の奴をDestroyする
メモリピークは両方のseneが同時にのっている状態が数フレーム存在する
instrumentsで調査できる
LoadLevelAdditiveAsyncで処理が落ちている場合、大抵はAwakeでの重い処理
debug用のsymbole入れて、instrumentsで調査

・メモリ
(1)system、(2)memory manager(Unity)、(3)mono
3つの世界がある
メモリプロファイラは(2)、loadLevelで取られるのは(2)
(3)はsystem.gc、monoのGC.CollectはBoehmGC

(2)は、自分で開放する
LoadLevelAdditive -> Resources.UnloadUnusedAssets
new Texture2d -> 自分でDestroy
new Mesh -> 自分でDestroy

・アセットバンドル
AssetBundleのデータ構造
[AssetBundle] -> preloadTable + containerMap
[Asset]
[Asset]
...

containerMap - ファイル名とpreloadTableの何番目からいくつまで読むかのmap

AssetBundle同士の依存性
PushAssetBundleDependenciesで依存関係を設定
依存性データを使うと順番がずれた場合に、参照元がずれる
DeterministicAssetBundleを設定すると、32bitのIDで管理されるので、参照がずれない
データの並びはアクセスしやすい順番でなくなるので、diskメディアなどはseekが入るかも

AssetBundelロードする方法
- WWW.LoadFromCacheOrDownload おすすめ
downloadして展開したのをstrageに保存、そっから普通のsceneを読むのとかわらない
- AssetBundle.CreateFromFile おすすめ
展開済みのファイル、普通のsceneを読むのとかわらない、上と似たような感じ
- WWWからdownload
一回メモリにのせて展開するので、元データとメモリが必要

以上
2013-04-15(Mon)

ScriptableObjectでのシリアライズ[Unity]

結局Cube配置用のツールに関して、save/loadできるようにしてみました。
データはScriptableObjectを使ってシリアライズするようにしました。
実行時にパース部分を呼ばずに、そのままデータとしてアクセスできるので、
Unity上でデータを作成する場合、僕は割とこの方法が気に入っています。

大前さんが、メガUnityミートアップ2012で紹介されたものを参考にしています。
というか、割とそのまんま、もうちょっと整理しないと。。。
https://github.com/unity3d-jp/XmlToCustomAsset


※ScriptableObjectに関して、
- long、uintなどシリアライズできないものがある

でも配置情報は作っていない、やっぱり自動生成にすべきか悩みはじめた。
多分、答えは出てて自動生成にすべきだけど、面倒くさいとかそんな感じで、モチベーションがあがらない。
2013-04-09(Tue)

初めてのEditor Scripting[Unity]

本当は初めてではないですが、素人なのは間違いないです。

Cubeの配置情報を作りたいなぁと思いました。
この辺(Tidy Tile Mapper)よさげ、値段もそんな高くない。
でも今回はVector3の配列程度のデータでよいので、もう本当に簡単なやつでいい。
Cubeの配置は、Scene View上でやって、ボタン押したらCubeの位置を適当にアライメントして、
配置情報をprintなんかで表示して、それを手動コピーして、ソースに貼り付ける、もうそんなんでいい。

20130409_editorscr0.png

まずは、ExecuteInEditMode
classの前にExecuteInEditModeのAttributeを付けると、playmodeでなくても
callback関数が呼ばれるらしい。

上記の感じでやってみました、
ボタンは表示されましたが、OnGUIは、playmodeのように常に呼ばれる訳ではないので、
ボタンを押した反応がいい感じのタイミングでとれず、失敗。。。

次は、Inspector上にボタン置いてる奴見たことあるなぁと思って、探してやってみました。
ここを参考にさせてもらいました。

スクリプトはEditorディレクトリに配置


ボタン押したときに、alignmentして位置情報をテキスト表示できるようになりました。
20130409_editorscr1.png

もしかして、これはEditor Scriptingとかいうやつなのでは。。。
とても簡易ですが、今回はここまで。
2013-04-03(Wed)

もう4月

一応リポジトリは作成したけど、まだあんまり進んでいない。
前のプロジェクトから必要そうなところをぶち込む作業は割と楽しいなー。

3月はなにやってたんだろう。。。
・開発環境の見直し、前やった奴の調査不足のところ調べ
・新規リポジトリ作って、新しいの始めた
・Wipes Arrowをamazon appstoreに登録してみた
・入力の取得管理あたりがバグっていたので、書き直した

とりあえず次の目標は、スピード重視でもゲーム部分も頑張ろう!
4月中に片付けるくらいの意気込みだけど、手は遅い方なので、無理だよなー。
2013-04-02(Tue)

outline表示[Unity]

Cubeを選択時に輪郭線を描画するように対応しました。

最初は、toon shader(Unityのstandard assetsの奴)の輪郭線の部分のみを持ってきてみました。
反転したポリゴンを法線方向に押し出し。
やりすぎると、エッジの切れ目が目立ったりします。これはやりすぎ。
2passになるので、draw callはbatchが効かなくなって、増えました。

Screenshot_2013-04-02-01-15-49.png

今回は、選択時のカーソル用なので外側のラインが出ればよい。
反転法線した拡大モデル表示を使わせていただきました。そのまま。
http://elix-jp.sakura.ne.jp/wordpress/?p=794

Screenshot_2013-04-02-04-49-42.png

選択時のマテリアルの切り替えは以下の感じ。

Advertising


カテゴリ
記事一覧
最新記事
最新コメント
最新トラックバック
月別アーカイブ
プロフィール

tasogare66

Author:tasogare66
ひっそり週末プログラム
@tasogare66

【Androidアプリ】


Wipes Arrow
(スワイプアクション)

review site
Uni本
リンク
RSSリンクの表示
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。