SlideShare a Scribd company logo
誘導ミサイル完全マスター
ユニティ・テクノロジーズ・ジャパン
2018/05/08DAY2
安原 祐二
“ ”
問題
Frustum(視錐台)の外側の物体の描画を省略する
やりかたわかりますか?
通常はUnityがやってくれる
〜Frustum Culling〜
平面平面と点の関係
点 x, y, z
平面の式
例
a b cx + y + z+ = 0d
で平面が定まる, , ,a b c d
2x + y + z+ = 03 4 5
左辺は平面からの距離を意味する
「平面からの距離がゼロ」を満たす の集合x, y, z
平面の式とは
ただしこの距離は正規化されていない
2x + y + z+ = 03 4 5
は平面に垂直なベクトル
で両辺を割って正規化
a b cx + y + z+ = 0d
( , , )a b c
p
2 + 2 + 2a b c
例
は平面に垂直なベクトル
で両辺を割って正規化
p
22 + 32 + 42 =
p
29
a b cx + y + z+ = 0d
2x + y + z+ = 03 4 5
( , , )a b c
p
2 + 2 + 2a b c
x + y + z+ = 0
2
p
29
3
p
29
4
p
29
5
p
29
点と平面の距離 平面
距離
点
点と平面の距離
p(5, 6, 7)
平面 x + y + z+ = 0
2
p
29
3
p
29
4
p
29
5
p
29
距離
2
p
29
3
p
29
4
p
29
5
p
29
= ⇥5 + ⇥6 + ⇥7+
距離
点
距離には符号がある
+-
平面の表にあるか裏にあるかがわかる
p(5, 6, 7)
平面
距離
点
表裏
x + y + z+ = 0
2
p
29
3
p
29
4
p
29
5
p
29
球の場合
点と平面の距離が「-r以上」か
+- -r
表裏
視錐台(Frustum)の6つの平面を得るには
プロジェクション行列から取得
void GetPlanesFromFrustum(Vector4[] planes, ref Matrix4x4 p) {
planes[0] = new Vector4(p.m30+p.m00, p.m31+p.m01, p.m32+p.m02, p.m33+p.m03); // left
planes[1] = new Vector4(p.m30-p.m00, p.m31-p.m01, p.m32-p.m02, p.m33-p.m03); // right
planes[2] = new Vector4(p.m30+p.m10, p.m31+p.m11, p.m32+p.m12, p.m33+p.m13); // bottom
planes[3] = new Vector4(p.m30-p.m10, p.m31-p.m11, p.m32-p.m12, p.m33-p.m13); // top
planes[4] = new Vector4(p.m30+p.m20, p.m31+p.m21, p.m32+p.m22, p.m33+p.m23); // near
planes[5] = new Vector4(p.m30-p.m20, p.m31-p.m21, p.m32-p.m22, p.m33-p.m23); // far
}
参考:プロジェクション行列から6平面を取得(正規化は省略)
6平面のひとつでも裏側にあれば、描画の必要ナシ
Frustum Culling 完成
“ ”
誘導ミサイル完全マスター
神は○○○○に宿る
誘導ミサイル
追尾レーザー
追尾レーザー実装例
追尾レーザー実装例その2
誘導ミサイル実装例
https://github.com/Unity-Technologies/MissilesPerfectMaster
“ ”
追尾レーザーの実装
public class Missile : MonoBehaviour {
Vector3 velocity;
Vector3 position;
void Update() {
var acceleration = Vector3.zero;
velocity += acceleration * Time.deltaTime;
position += velocity * Time.deltaTime;
transform.position = position;
}
}
基本:運動方程式の実装例
public class Missile : MonoBehaviour {
Vector3 velocity;
Vector3 position;
void Update() {
var acceleration = Vector3.zero;
/* ここで与えたい外力を記述する(AddForce) */
velocity += acceleration * Time.deltaTime;
position += velocity * Time.deltaTime;
transform.position = position;
}
}
基本:運動方程式の実装例
public class Missile : MonoBehaviour {
Vector3 velocity;
Vector3 position;
void Update() {
var acceleration = Vector3.zero;
acceleration += new Vector3(0f, -9.8f, 0f);
velocity += acceleration * Time.deltaTime;
position += velocity * Time.deltaTime;
transform.position = position;
}
}
ttd v a= 2
+
1
2
加速度・速度・時間・距離の関係
tt
t
d v
v
a= 2
+
1
2
:距離
:速度
:時間
:加速度a
d
加速度・速度・時間・距離の関係
=
2( )d tv
a
t2
ttd v a= 2
+
1
2
速度 の物体が 秒後に 進むための加速度v t d a
public class Missile : MonoBehaviour {
Vector3 velocity;
Vector3 position;
Transform target;
float period;
void Update() {
var acceleration = Vector3.zero;
var diff = target.position - position;
acceleration += (diff - velocity*period)*2f
/(period*period);
period -= Time.deltaTime;
if (period < 0f) {
return;
}
velocity += acceleration * Time.deltaTime;
position += velocity * Time.deltaTime;
transform.position = position;
=
2( )d tv
a
t2
=
2( )d tv
a
t2
v
d
a
目標は動いているので・・
常に加速度を計算しなおす
public class Missile : MonoBehaviour {
Vector3 velocity;
Vector3 position;
Transform target;
float period;
void Update() {
var acceleration = Vector3.zero;
var diff = target.position - position;
acceleration += (diff - velocity*period)*2f
/(period*period);
period -= Time.deltaTime;
if (period < 0f) {
return;
}
velocity += acceleration * Time.deltaTime;
position += velocity * Time.deltaTime;
transform.position = position;
public class Missile : MonoBehaviour {
Vector3 velocity;
Vector3 position;
Transform target;
float period;
void Update() {
var acceleration = Vector3.zero;
var diff = target.position - position;
acceleration += (diff - velocity*period)*2f
/(period*period);
period -= Time.deltaTime;
if (period < 0f) {
return;
}
velocity += acceleration * Time.deltaTime;
position += velocity * Time.deltaTime;
transform.position = position;
必ず命中する
コリジョンはいらない
命中時刻が決まっている
public class Missile : MonoBehaviour {
Vector3 position;
Transform target;
float period;
float total_period;
void Update() {
position = Vector3.Lerp(
target_tfm_.position,
initial_position,
period/total_period);
period -= Time.deltaTime;
if (period < 0f) {
return;
}
非推奨:線形補間(Linear Interpolation)で実装
発射する方向
v
初速を与える
応用:初速を加える
応用2:スクロールを加える
応用3:発射直後に揺らぎを加える
応用4:着弾時刻をずらす
敵が発射する場合
回避不能!
回避可能
public class Missile : MonoBehaviour {
Vector3 velocity;
Vector3 position;
Transform target;
void Update() {
…
if (acceleration.magnitude > 100f) {
acceleration = acceleration.normalized * 100f;
}
…
加速度に上限を設ける
必中とゲーム
・敵が避けると・・
 →ではどうすればよかったのか(不満)
・ロックオンした時点で駆け引きは終わりにしよう
ロックオンは駆け引きになるが
命中でゲームを作るのは難しい
“ ”
誘導ミサイルの実装
角度制御がキモ
前進は等速でもよい
void FixedUpdate() {
var diff = target_position - transform.position;
var target_rot = Quaternion.LookRotation(diff);
transform.rotation = Quaternion.Lerp(transform.rotation,
target_rot, 0.1f);
}
非推奨:Quaternion.Lerp で対応
target_position:目標位置
ほぼ同じ動作を実現できる
が応用が狭い
void FixedUpdate() {
var diff = target_position - transform.position;
var target_rot = Quaternion.LookRotation(diff);
var q = target_rot * Quaternion.Inverse(transform.rotation);
var torque = new Vector3(q.x, q.y, q.z) * ratio;
GetComponent<Rigidbody>().AddTorque(torque);
}
バネトルク
target_position:目標位置
torque:角度差に比例したトルク
(厳密には比例ではない)
ratio:バネ係数
バネトルク
https://www.slideshare.net/UnityTechnologiesJapan/unite-2017-tokyo3d-76689196
https://www.youtube.com/watch?v=6EtTI5xC524&feature=youtu.be
講演資料
講演動画
詳しくは
 [Unite 2017 Tokyo]
 スマートフォンでどこまでできる?
 3Dゲームをぐりぐり動かすテクニック講座
バネトルク適用例
主要パラメータ
バネ係数
角度ドラッグ
速度
【Unite Tokyo 2018】誘導ミサイル完全マスター
“ ”
トレイルの描画
〜便利なテクニック〜
アルファゼロ
アルファゼロ
テクスチャの縁の1ドットは完全透明にする
アルファゼロありアルファゼロなし
トレイルねじれ問題
トレイルねじれが起きやすい条件
根本的な解決はかなり難しい
ノード間の間隔が狭い
トレイルの幅が広い
実装時のメモ
スクリーンに
投影された
2D座標の内積を
折り返し度とみなし
透明度に反映する
スクリーン上の状態を調査
折り返しが発生する度合いで透明度を与える
スクリーン
z
x
射影行列の
理解が必要
トレイルねじれ問題
対策前
対策後
“ ”
昔々、あるところに・・・
厳しい制約のハードウェア
整数しか使えない!
割り算が重すぎる!
厳しい制約のハードウェア
整数しか使えない!
割り算が重すぎる!
4096を1.0として扱う
(固定小数点方式)
掛け算の度に4096で割る
(12bitシフトは高速)
厳しい制約のハードウェア
整数しか使えない!
割り算が重すぎる!
4096を1.0として扱う
(固定小数点方式)
掛け算の度に4096で割る
(12bitシフトは高速)
使わない
public class Missile : MonoBehaviour {
Vector3 velocity;
Vector3 position;
void Update() {
var acceleration = Vector3.zero;
velocity += acceleration * Time.deltaTime;
position += velocity * Time.deltaTime;
transform.position = position;
}
}
基本:運動方程式の実装例
再掲
第一の工夫
Δt は 1 でいい
そのかわり1秒を60とする
第一の工夫
Δt は 1 でいい
そのかわり1秒を60とする
「秒」は地球の自転が基準 どうでもいい!
velocity += acceleration * Time.deltaTime;
position += velocity * Time.deltaTime;
第一の工夫
Δt は 1 でいい
そのかわり1秒を60とする
「秒」は地球の自転が基準
velocity += acceleration;
position += velocity; 足し算のみで運動方程式
どうでもいい!
=
2( )d tv
a
t2
ttd v a= 2
+
1
2
速度 の物体が 秒後に 進むための加速度v t d a
再掲
=
2( )d tv
a
t2
diff = target_position - position;
acceleration += (diff - velocity*period)*2
/(period*period);
我々には知恵がある
割り算の絶望
=
2( )d tv
a
t2
v
d
a
常に加速度を計算しなおす
再掲
は到達までの時間t
時間は1フレームで1変化する
到達時刻現在時刻
32 0
常に加速度を計算しなおす
常に加速度を計算しなおす
第二の工夫
32
到達時刻
0
現在時刻
16 8 4 2 1
加速度を計算しなおすのは2のべき乗時刻のみ
常に加速度を計算しなおす
第二の工夫
32
到達時刻現在時刻
16 8 4 2 1
割り算をシフト演算で実行可能
0
加速度を計算しなおすのは2のべき乗時刻のみ
diff = target_position - position;
acceleration += (diff - velocity*period)*2
/(period*period);
diff = target_position - position;
acceleration += (diff - velocity<<shift)<<1
>>(shift+shift);
シフト演算子で置き換える
命中の直前は同等だが動作は変わっている
32 016 8 4 2 1
追尾性能低 追尾性能高
最適化とは呼べない
毎フレーム計算 間引き計算
神は二階微分に宿る
“ ”
iPhone6で動くデモを作ろう
〜コンピュートシェーダ応用〜
CPU GPU
コンピュートシェーダはGPUにある計算資源
CPU GPU
コンピュートシェーダを実行するふたつの関数
SetData
Dispatch
材料はこれです
実行よろしくです
基本はこれだけ
CPU GPU
よろしく りょうかい
できたよ
ども
まちがった理解
こういう仕組みも作れるが、普通はこうしない
CPU GPU
正しい理解(特にゲームエンジン)
発行 取得 計算命令を発行したら
CPUの仕事は完了
命令を取得して
GPUの仕事開始
CPUはGPUの結果を待たない
CPU GPU
通常のシェーダも同じ流れ
発行 取得
描画
計算
CPUはGPUの結果を待たない
命令を発行したら
CPUの仕事は完了
命令を取得して
GPUの仕事開始
CPU GPU
計算のタイミングはズレている
発行計算 計算
描画
取得
大丈夫なのか?
CPU
CPU
1フレーム
GPU
コンピュートシェーダの実行
SetData
Dispatch
CPUで登録した順番で実行
RenderThread
描画
実行
CPU
CPU
1フレーム
GPU
実行タイミングは通常シェーダの前
SetData
Dispatch
通常シェーダ
描画
実行
CPU
CPU
1フレーム
GPU
CPUで実行しても通常シェーダに渡されるデータは同じ
けっきょくCPUでもGPUでも同じ
描画
通常シェーダ
実行
[numthreads(8, 8, 8)]
void exec()
{
// 処理
}
コンピュートシェーダの記述
8x8x8=512並列で実行される
ややこしい!
for (int x = 0; x < 8; ++x) {
for (int y = 0; y < 8; ++y) {
for (int z = 0; z < 8; ++z) {
// 処理
}
}
}
そもそも、同じ処理の繰り返しを並列化したい
この処理中、x, y, zが使われる「だろう」
[numthreads(8, 8, 8)]
void exec(uint3 id : SV_DispatchThreadID)
{
// 処理
}
登録した関数は並列実行される
x, y, z に相当する情報を引数idから取得できる
[numthreads(512, 1, 1)]
void exec(uint3 id : SV_DispatchThreadID)
{
// id から実行中のスレッドがわかる
}
やりたいことが一重ループなら2番目3番目を1に
並列上限はデバイスによる(iPhoneは512が多い)
GPU
要するにコンピュートシェーダは
関数が512並列で動く
…
512
誘導ミサイルを実装しよう!
GPU
目標:ミサイルの情報をCPUに置かない
…
512
ミサイルバッファ
GPU
ミサイル
512
位置(x, y, z)
姿勢(Quaternion)
角速度(x, y, z)
並列で動作するぶんのデータ
ミサイルごとに
異なる値
ミサイルバッファ
GPU
ミサイル
512
位置(x, y, z)
姿勢(Quaternion)
角速度(x, y, z)
ミサイル(512)
位置(x, y, z)
姿勢(Quaternion)
角速度(x, y, z)
}
並列で動作するぶんのデータ
〜課題その1〜
ターゲットの位置情報が必要
それはCPUで毎フレーム更新される
ターゲットバッファ追加
GPU
ターゲット
256
位置(x, y, z)ミサイル(512)
位置(x, y, z)
姿勢(Quaternion)
角速度(x, y, z) +
NEW!
ターゲットバッファへのIDを追加
GPU
GPUでターゲットの位置がわかる
ミサイル(512)
位置(x, y, z)
姿勢(Quaternion)
角速度(x, y, z)
ターゲットID[0-255]
ターゲット
256
位置(x, y, z)
NEW!
CPU
ターゲットバッファをCPUで更新
SetDataで毎フレームGPUに送る
ターゲット
256 GPSetData
位置(x, y, z)
〜課題その2〜
ミサイルはひとつずつ発射される
が、GPUは常に512並列で計算する
生成処理をGPUで記述する
GPU
SetData
Dispatch
ミサイル生成
SetData
Dispatch
ミサイル運動
NEW!
別プログラムも同じバッファにアクセス可
1
2
ミサイル生成バッファ
GPU
未使用のミサイルIDを渡す
生成
32
初期位置(x, y, z)
初期角度(Quaternion)
ミサイルID[0-511]
CPU
ミサイル状態バッファをCPUで管理
生死はCPUで管理せざるを得ない
ミサイル状態
512
生死
CPU
発射命令が来た
1フレームの最大発射可能数が32
使用可能なIDを検索
512
ミサイル状態
生成
32
生成バッファに充填
生成バッファに無効フラグ
SetData して生成プログラムを Dispatch
生成
有効
有効
無効
無効
無効
無効
無効
無効
無効
32
CPU GPSetData
初期位置
初期角度
ミサイルID[0-511]
有効/無効
〜便利なテクニック〜
生成時に
乱数を格納しておく
さまざまな場面で活躍
生成
初期位置
初期角度
ミサイルID[0-511]
有効/無効
乱数
32
NEW!
〜課題その3〜
ミサイル(Mesh)の描画
情報はGPUにしかない
Graphics.DrawMeshInstancedIndirectで描画
CPU GPSetBuffer
512
ミサイル状態
512
生存ミサイル
15
210
5
33
45
ミサイルバッファをGPUで参照、IDリストのみ送る
Graphics.DrawMeshInstancedIndirectで描画
CPU GPSetData
512
ミサイル状態
512
生存ミサイル
15
210
5
33
45
ミサイルバッファがGPUから参照可能、IDリストのみ送る
注:ここの実装は最終的にソートで置き換えられます
GPU
ミサイルごとに軌跡バッファを保持
ミサイル(512)
位置(x, y, z)
姿勢(Quaternion)
角速度(x, y, z)
軌跡(512)
位置(x, y, z)×32
軌跡インデクス(512)
インデクス[0-31]
NEW!
NEW!
32
トレイルもGraphics.DrawMeshInstancedIndirect
トレイルが完全消滅するまで処理は続く
全期間で「ミサイル生存」とみなす
〜ここらで確認〜
ミサイル×512の運動(含む物理シミュ)を
計測してみた
〜ここらで確認〜
ミサイル×512の運動(含む物理シミュ)を
計測してみた
GPUヤバイ
iPhone6で約50マイクロ秒
コンピュートシェーダの難しさ
最初の動作確認までが長い
簡易シミュレータを作りましょう
〜課題その4〜
ターゲットの消滅
ミサイルよりも先に消滅する可能性
ターゲットバッファに死亡時刻を追加
GPU
(再)ターゲットバッファはCPUからSetDataされる
ターゲット
256
位置(x, y, z)
死亡時刻 NEW!
現在時刻を毎フレーム送る
現在時刻ー死亡時刻=死亡経過時間
ターゲットが死亡時の処理
GPU
死亡経過が正なら加速度を無効にする
ターゲット
256
位置(x, y, z)
死亡時刻 NEW!
〜便利なテクニック〜
絶対時刻で管理する
多くの場面でカウンタよりも便利
class Foo {
float time;
void Update() {
time += Time.deltaTime;
if (time > 10f) {
// 処理
}
}
}
class Foo {
float time;
void Update() {
if (Current - time > 10f) {
// 処理
}
}
}
〜通常の記述〜
〜並列処理向きの記述〜
・最初に現在時刻を入れておく
・現在時刻(Current)を参照する
・現在時刻は毎フレーム更新
 →ReadOnlyにできる
・最初にゼロを入れておく
・増加して処理
・それぞれ更新が必要
 →ReadOnlyにできない
〜課題その5〜
ターゲットに命中を通知
どうしてもCPUにデータを戻す必要がある
データを取得するのはこれ
データを取得するのはこれ
ちょっと待て
CPU
CPU
1フレーム
GPU
(再掲)コンピュートシェーダの実行タイミング
SetData
Dispatch
実行
GPUからデータを取得するGetDataは何をするのか
CPU
CPU
GPU
GPUは前のフレームのコマンドを実行中
CPU
CPU
GPU
GetDataを呼ぶ
GPUは実行中
GetData
CPU
CPU
GPU
GPUが完了するのを待って取得
その間CPUは停止!
GetData
CPU
CPU
GPU
GPUが完了するのを待って取得
GetData
絶望!
その間CPUは停止!
2018.1&Windowsにて(他のプラットフォームは順次)
CPUを止めずに非同期リクエストでバッファを取得
運動プログラムで結果バッファを作成
GPU
死因など必要な情報を格納
ミサイル(512)
位置(x, y, z)
姿勢(Quaternion)
角速度(x, y, z)
軌跡(512)
位置(x, y, z)×32
時刻×32
軌跡インデクス(512)
インデクス[0-31]
結果(512)
packed(4bytes)
NEW!
爆発距離 ターゲットID
ターゲット消失
命中
自然消滅
運動プログラムで結果バッファを作成
GPU
死因など必要な情報を格納
ミサイル(512)
位置(x, y, z)
姿勢(Quaternion)
角速度(x, y, z)
軌跡(512)
位置(x, y, z)×32
時刻×32
軌跡インデクス(512)
インデクス[0-31]
結果(512)
packed(4bytes)
NEW!
爆発距離 ターゲットID
ターゲット消失
命中
自然消滅
カメラからの距離を格納して効果音再生に使用
CPU
結果バッファを使用して状態バッファを更新
死んだミサイルを再利用可能に
ミサイル状態
512
生死
GP
結果
512
結果
NEW!
〜課題その6〜
描画バウンド
どうせ描画がボトルネックになる
ミサイルの総数を16倍の8192発にする
表示は1024発に限定
〜コンピュートシェーダの能力を活かす作戦〜
ミサイルの総数を16倍の8192発にする
表示は1024発に限定
優先度を計算
Frustumの外側の優先度を最低に
近くのミサイルの優先度を高く
〜コンピュートシェーダの能力を活かす作戦〜
優先度に従ってソートする
ミサイルの総数を16倍の8192発にする
表示は1024発に限定
優先度を計算
Frustumの外側の優先度を最低に
近くのミサイルの優先度を高く
〜コンピュートシェーダの能力を活かす作戦〜
GPU処理時間は16倍になる(と予想される)
GPUのnumthreadsは上げられない
ミサイルの総数を16倍にする
cshader.Dispatch(kernel, 16, 1, 1);
Dispatchの引数で16倍に
CPU
軌跡を含むすべての点で
Frustum6平面の内外判定する
GPU
平面 ax + by + cz + d = 0
すべての点が平面の裏側
平面 ax + by + cz + d = 0
すべての点で が負ax + by + cz + d
すべての点が平面の裏側
平面 ax + by + cz + d = 0
すべての点で が負ax + by + cz + d
ax + by + cz + d の最大値が負
すべての点が平面の裏側
平面 ax + by + cz + d = 0
すべての点で が負ax + by + cz + d
ax + by + cz + d の最大値が負
すべての点が平面の裏側
ax + by + cz + d の最大値を出せば良い
平面 ax + by + cz + d = 0
すべての点で が負ax + by + cz + d
ax + by + cz + d の最大値が負
すべての点が平面の裏側
ax + by + cz + d の最大値を出せば良い
ax, by, cz それぞれの最大値を足せば良い
ax + by + cz + d
axxa 0 のとき: の最大値で が最大
axxの最小値で が最大a < 0
axつまり の最大値は
xの最大値)a⇥ の大きい方
のとき:
(
xの最小値)a⇥(
by, czも同様
x
xの最大値xの最小値
内外判定のやりかた
1・点群のxyzの最大値・最小値を調査
xmax, xmin,
ymax, ymin,
zmax, zmin,
2・平面式と乗算して各項の最大値を得る
d = ax + by + cz + plane.w
3・平面との距離の最大値を得る
ax = max(xmax*plane.x, xmin*plane.x);
by = max(ymax*plane.y, ymin*plane.y);
cz = max(zmax*plane.z, zmin*plane.z);
(これが Bounding Box)
ソートバッファを新設
GPU
ミサイル(8192)
位置(x, y, z)
姿勢(Quaternion)
角速度(x, y, z)
軌跡(8192)
位置(x, y, z)×32
時刻×32
軌跡インデクス(8192)
インデクス[0-31]
結果(8192)
packed(4bytes)
NEW!
ソート
優先度
ミサイルID[0-8192]
8192
ソートをGPUで記述する
GPU
SetData
Dispatch
ミサイル生成
SetData
Dispatch
ミサイル運動
NEW!
bitonic sortを使用
Dispatch ソート
1
2
3
#pragma kernel missile_sort
RWStructuredBuffer<SortData> cbuffer_missile_sort_key_list;
#define MISSILE_NUM ( 512*16 ) // must be more than THREAD_X*2
[numthreads(512, 1, 1)]
void missile_sort(uint gidx : SV_GroupIndex) {
for (uint block = 2; block <= MISSILE_NUM; block <<= 1) { // major step
for (uint step = block >> 1; step > 0; step >>= 1) { // minor step
uint maskL = (uint)step - 1;
uint maskH = 0xFFFFFFFF ^ maskL;
for (uint i = gidx; i < MISSILE_NUM >> 1; i += 512) {
uint idx = ((i&maskH)<<1) | (i&maskL);
SortData v1 = cbuffer_missile_sort_key_list[idx];
SortData v2 = cbuffer_missile_sort_key_list[idx + step];
int isAscend = (idx&block) != 0 ? 1 : 0;
int isBigger = (v1.packed_>>16) > (v2.packed_>>16) ? 1 : 0;
if (isAscend ^ isBigger) {
cbuffer_missile_sort_key_list[idx] = v2;
cbuffer_missile_sort_key_list[idx+step] = v1;
}
}
DeviceMemoryBarrierWithGroupSync();
}
}
}
https://shobomaru.wordpress.com/2012/11/27/parallel-processing-of-bitonic-sort/参考:
参考
ソートの高速化
for (uint i = gidx; i < MISSILE_NUM >> 1; i += 512) {
uint idx = ((i&maskH)<<1) | (i&maskL);
SortData v1 = cbuffer_missile_sort_key_list[idx];
SortData v2 = cbuffer_missile_sort_key_list[idx + step];
int isAscend = (idx&block) != 0 ? 1 : 0;
int isBigger = (v1.packed_>>16) > (v2.packed_>>16) ? 1 : 0;
if (isAscend ^ isBigger) { // 条件一致で
cbuffer_missile_sort_key_list[idx] = v2; // 交換
cbuffer_missile_sort_key_list[idx+step] = v1; // 交換
}
メモリアクセスを可能な限り減らす
ソートされたシーン
〜最終課題〜
GetData
おまえiPhone6で動かすゆうたやろ
絶望!
CPU
CPU
GPU
(再掲)GetDataの絶望
我々には知恵がある
GetData
待ちが発生ピッタリ
GetData呼ばない GetData呼ぶ
Instrumentsで調査
ガクガク
CPU
CPU
GPU
GetData
CPU
CPU
GPU
呼び出すタイミングをずらせば・・・
待ちを最小限にできるはず
GetData
絶妙のタイミング!
CPU
CPU
GPU
可能は可能だが、安定させるのは難しい
デモでは2フレーム毎に2フレーム分のデータを取得
GetData
【Unite Tokyo 2018】誘導ミサイル完全マスター
おしまい

More Related Content

What's hot

CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
KLab Inc. / Tech
 
猫でも分かるUMG
猫でも分かるUMG猫でも分かるUMG
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
 
[CEDEC2018] UE4アニメーションシステム総おさらい
[CEDEC2018] UE4アニメーションシステム総おさらい[CEDEC2018] UE4アニメーションシステム総おさらい
[CEDEC2018] UE4アニメーションシステム総おさらい
エピック・ゲームズ・ジャパン Epic Games Japan
 
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
Unity Technologies Japan K.K.
 
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
Unity Technologies Japan K.K.
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
Masahiko Nakamura
 
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
エピック・ゲームズ・ジャパン Epic Games Japan
 
[UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい![UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい!
com044
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
 
背景を作って苦労してみた ~Amplify Impostors~
背景を作って苦労してみた ~Amplify Impostors~背景を作って苦労してみた ~Amplify Impostors~
背景を作って苦労してみた ~Amplify Impostors~
poko ponmaru
 
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
エピック・ゲームズ・ジャパン Epic Games Japan
 
Robo Recallで使われている 最新のVR開発テクニックをご紹介!
Robo Recallで使われている最新のVR開発テクニックをご紹介!Robo Recallで使われている最新のVR開発テクニックをご紹介!
Robo Recallで使われている 最新のVR開発テクニックをご紹介!
エピック・ゲームズ・ジャパン Epic Games Japan
 
わからないまま使っている?UE4 の AI の基本的なこと
わからないまま使っている?UE4 の AI の基本的なことわからないまま使っている?UE4 の AI の基本的なこと
わからないまま使っている?UE4 の AI の基本的なこと
rarihoma
 
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られたNintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編
エピック・ゲームズ・ジャパン Epic Games Japan
 
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
エピック・ゲームズ・ジャパン Epic Games Japan
 
UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた
UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみたUE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた
UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた
com044
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
com044
 

What's hot (20)

CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
 
猫でも分かるUMG
猫でも分かるUMG猫でも分かるUMG
猫でも分かるUMG
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
[CEDEC2018] UE4アニメーションシステム総おさらい
[CEDEC2018] UE4アニメーションシステム総おさらい[CEDEC2018] UE4アニメーションシステム総おさらい
[CEDEC2018] UE4アニメーションシステム総おさらい
 
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
 
【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう【Unity道場 2月】シェーダを書けるプログラマになろう
【Unity道場 2月】シェーダを書けるプログラマになろう
 
UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!UE4のためのより良いゲーム設計を理解しよう!
UE4のためのより良いゲーム設計を理解しよう!
 
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
UE4のライティング解体新書~効果的なNPRのためにライティングの仕組みを理解しよう~
 
[UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい![UE4]自動テストでもっと楽したい!
[UE4]自動テストでもっと楽したい!
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
 
背景を作って苦労してみた ~Amplify Impostors~
背景を作って苦労してみた ~Amplify Impostors~背景を作って苦労してみた ~Amplify Impostors~
背景を作って苦労してみた ~Amplify Impostors~
 
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
 
Robo Recallで使われている 最新のVR開発テクニックをご紹介!
Robo Recallで使われている最新のVR開発テクニックをご紹介!Robo Recallで使われている最新のVR開発テクニックをご紹介!
Robo Recallで使われている 最新のVR開発テクニックをご紹介!
 
わからないまま使っている?UE4 の AI の基本的なこと
わからないまま使っている?UE4 の AI の基本的なことわからないまま使っている?UE4 の AI の基本的なこと
わからないまま使っている?UE4 の AI の基本的なこと
 
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られたNintendo Switch『OCTOPATH TRAVELER』はこうして作られた
Nintendo Switch『OCTOPATH TRAVELER』はこうして作られた
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
 
UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編UE4における大規模背景制作事例 最適化ワークフロー編
UE4における大規模背景制作事例 最適化ワークフロー編
 
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
[CEDEC2017] UE4プロファイリングツール総おさらい(グラフィクス編)
 
UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた
UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみたUE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた
UE4.14.0 Forward Shadingのエンジン改造でセルシェードやってみた
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
 

Similar to 【Unite Tokyo 2018】誘導ミサイル完全マスター

【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
 
【Unity道場スペシャル 2017大阪】クォータニオン完全マスター
【Unity道場スペシャル 2017大阪】クォータニオン完全マスター【Unity道場スペシャル 2017大阪】クォータニオン完全マスター
【Unity道場スペシャル 2017大阪】クォータニオン完全マスター
Unity Technologies Japan K.K.
 
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチングシェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチング
Sho Hosoda
 
181107 06
181107 06181107 06
181107 06
openrtm
 
RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎(解答)
RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎(解答)RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎(解答)
RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎(解答)
Noriaki Ando
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Atsushi Tadokoro
 
Real timeimageprocessing
Real timeimageprocessingReal timeimageprocessing
Real timeimageprocessing
ushiostarfish _
 
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
Toru Tamaki
 
文献紹介:Token Shift Transformer for Video Classification
文献紹介:Token Shift Transformer for Video Classification文献紹介:Token Shift Transformer for Video Classification
文献紹介:Token Shift Transformer for Video Classification
Toru Tamaki
 
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズムMedia Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Atsushi Tadokoro
 
Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化
Katsutoshi Makino
 
introductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysisintroductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysis
Tatsuki SHIMIZU
 
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネルももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
Takashi Yoshinaga
 
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用 2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
Kenta Oono
 
Coqチュートリアル
CoqチュートリアルCoqチュートリアル
Coqチュートリアル
Yoshihiro Mizoguchi
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
 
機械学習と深層学習の数理
機械学習と深層学習の数理機械学習と深層学習の数理
機械学習と深層学習の数理
Ryo Nakamura
 

Similar to 【Unite Tokyo 2018】誘導ミサイル完全マスター (20)

【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
 
【Unity道場スペシャル 2017大阪】クォータニオン完全マスター
【Unity道場スペシャル 2017大阪】クォータニオン完全マスター【Unity道場スペシャル 2017大阪】クォータニオン完全マスター
【Unity道場スペシャル 2017大阪】クォータニオン完全マスター
 
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチングシェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチング
 
181107 06
181107 06181107 06
181107 06
 
kasawaki b
kasawaki bkasawaki b
kasawaki b
 
RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎(解答)
RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎(解答)RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎(解答)
RTミドルウェアによるロボットプログラミング技術 4.ロボットの運動学と制御の基礎(解答)
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
 
Real timeimageprocessing
Real timeimageprocessingReal timeimageprocessing
Real timeimageprocessing
 
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
 
minagawa m
minagawa mminagawa m
minagawa m
 
文献紹介:Token Shift Transformer for Video Classification
文献紹介:Token Shift Transformer for Video Classification文献紹介:Token Shift Transformer for Video Classification
文献紹介:Token Shift Transformer for Video Classification
 
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズムMedia Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
 
Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化Shadow gunのサンプルから学べるモバイル最適化
Shadow gunのサンプルから学べるモバイル最適化
 
introductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysisintroductino to persistent homology and topological data analysis
introductino to persistent homology and topological data analysis
 
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネルももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
 
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用 2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
 
Ssaw08 1125
Ssaw08 1125Ssaw08 1125
Ssaw08 1125
 
Coqチュートリアル
CoqチュートリアルCoqチュートリアル
Coqチュートリアル
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
機械学習と深層学習の数理
機械学習と深層学習の数理機械学習と深層学習の数理
機械学習と深層学習の数理
 

More from Unity Technologies Japan K.K.

建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
Unity Technologies Japan K.K.
 
UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!
Unity Technologies Japan K.K.
 
Unityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクションUnityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクション
Unity Technologies Japan K.K.
 
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしようビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
Unity Technologies Japan K.K.
 
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーションビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
Unity Technologies Japan K.K.
 
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそうビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
Unity Technologies Japan K.K.
 
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
Unity Technologies Japan K.K.
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
Unity Technologies Japan K.K.
 
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しようUnity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity Technologies Japan K.K.
 
「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発
Unity Technologies Japan K.K.
 
FANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えますFANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えます
Unity Technologies Japan K.K.
 
インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021
Unity Technologies Japan K.K.
 
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
Unity Technologies Japan K.K.
 
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Unity Technologies Japan K.K.
 
Cinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作るCinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作る
Unity Technologies Japan K.K.
 
徹底解説 Unity Reflect【開発編 ver2.0】
徹底解説 Unity Reflect【開発編 ver2.0】徹底解説 Unity Reflect【開発編 ver2.0】
徹底解説 Unity Reflect【開発編 ver2.0】
Unity Technologies Japan K.K.
 
徹底解説 Unity Reflect【概要編 ver2.0】
徹底解説 Unity Reflect【概要編 ver2.0】徹底解説 Unity Reflect【概要編 ver2.0】
徹底解説 Unity Reflect【概要編 ver2.0】
Unity Technologies Japan K.K.
 
Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-
Unity Technologies Japan K.K.
 
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unity Technologies Japan K.K.
 
Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-
Unity Technologies Japan K.K.
 

More from Unity Technologies Japan K.K. (20)

建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
 
UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!UnityのクラッシュをBacktraceでデバッグしよう!
UnityのクラッシュをBacktraceでデバッグしよう!
 
Unityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクションUnityで始めるバーチャルプロダクション
Unityで始めるバーチャルプロダクション
 
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしようビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
 
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーションビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
 
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそうビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
 
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
 
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しようUnity教える先生方注目!ティーチャートレーニングデイを体験しよう
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
 
「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発「原神」におけるコンソールプラットフォーム開発
「原神」におけるコンソールプラットフォーム開発
 
FANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えますFANTASIANの明日使えない特殊テクニック教えます
FANTASIANの明日使えない特殊テクニック教えます
 
インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021インディーゲーム開発の現状と未来 2021
インディーゲーム開発の現状と未来 2021
 
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
 
Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話Burstを使ってSHA-256のハッシュ計算を高速に行う話
Burstを使ってSHA-256のハッシュ計算を高速に行う話
 
Cinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作るCinemachineで見下ろし視点のカメラを作る
Cinemachineで見下ろし視点のカメラを作る
 
徹底解説 Unity Reflect【開発編 ver2.0】
徹底解説 Unity Reflect【開発編 ver2.0】徹底解説 Unity Reflect【開発編 ver2.0】
徹底解説 Unity Reflect【開発編 ver2.0】
 
徹底解説 Unity Reflect【概要編 ver2.0】
徹底解説 Unity Reflect【概要編 ver2.0】徹底解説 Unity Reflect【概要編 ver2.0】
徹底解説 Unity Reflect【概要編 ver2.0】
 
Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-Unityティーチャートレーニングデイ -認定プログラマー編-
Unityティーチャートレーニングデイ -認定プログラマー編-
 
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
 
Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-Unityティーチャートレーニングデイ -認定アソシエイト編-
Unityティーチャートレーニングデイ -認定アソシエイト編-
 

Recently uploaded

20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf
Ayachika Kitazaki
 
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ..."ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
たけおか しょうぞう
 
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログLoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
CRI Japan, Inc.
 
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
Toru Tamaki
 
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
Toru Tamaki
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
Takayuki Nakayama
 
Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)
Natsutani Minoru
 
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit IntroductionMatsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo Lab
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
Sony - Neural Network Libraries
 
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
ARISE analytics
 
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
Sony - Neural Network Libraries
 
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit IntroductionMatsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo Lab
 
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
chisatotakane
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo Lab
 

Recently uploaded (14)

20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf20240717_IoTLT_vol113_kitazaki_v1___.pdf
20240717_IoTLT_vol113_kitazaki_v1___.pdf
 
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ..."ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
"ros2rapper", Hardware implimentation of ROS2 communication Protocol without ...
 
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログLoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
LoRaWAN AI Image Sensorエンドデバイス AIG01カタログ
 
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
論文紹介:Task-aligned Part-aware Panoptic Segmentation through Joint Object-Part ...
 
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
論文紹介:BAM-DETR: Boundary-Aligned Moment Detection Transformer for Temporal Sen...
 
Kyndryl Developer Services のご紹介 2024年7月
Kyndryl Developer Services のご紹介  2024年7月Kyndryl Developer Services のご紹介  2024年7月
Kyndryl Developer Services のご紹介 2024年7月
 
Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)Imitation learning for robotics 勉強会資料(20240701)
Imitation learning for robotics 勉強会資料(20240701)
 
Matsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit IntroductionMatsuo-Iwasawa Lab. | Research unit Introduction
Matsuo-Iwasawa Lab. | Research unit Introduction
 
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
【AI論文解説】LLMの事前学習をvisionに適用する手法Autoregressive Image Models
 
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
【JSAI2024】J-NER大規模言語モデルのための固有表現認識における拡張固有表現階層を考慮したベンチマークデータセット.pdf
 
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
【AI論文解説】クラスタリングベースアプローチによる大規模データセット自動キュレーション
 
Matsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit IntroductionMatsuo-Iwasawa Lab. Research unit Introduction
Matsuo-Iwasawa Lab. Research unit Introduction
 
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
最速の組織を目指して全社で大規模スクラムを導入してみた話 #dxd2024 #medicalforce
 
Matsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit IntroductionMatsuo-Iwasawa lab. Research Unit Introduction
Matsuo-Iwasawa lab. Research Unit Introduction
 

【Unite Tokyo 2018】誘導ミサイル完全マスター