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

スポンサーサイト

上記の広告は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
一回メモリにのせて展開するので、元データとメモリが必要

以上

コメントの投稿

管理者にだけ表示を許可する

コメント

Advertising


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

tasogare66

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

【Androidアプリ】


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

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