Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
infinite_loop
2,237 views
VRChatでお酒が注げる飲み物アセットの紹介
【タガヤス その27】わくわくUnity! ~CPUとGPUを酷使しよう~【仙台発信の定期勉強会】 https://tagayas.connpass.com/event/255830/ 発表資料
Software
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 36
2
/ 36
3
/ 36
4
/ 36
5
/ 36
6
/ 36
7
/ 36
8
/ 36
9
/ 36
10
/ 36
11
/ 36
12
/ 36
13
/ 36
14
/ 36
15
/ 36
16
/ 36
17
/ 36
18
/ 36
19
/ 36
20
/ 36
21
/ 36
22
/ 36
23
/ 36
24
/ 36
25
/ 36
Most read
26
/ 36
27
/ 36
28
/ 36
29
/ 36
30
/ 36
Most read
31
/ 36
32
/ 36
33
/ 36
34
/ 36
35
/ 36
36
/ 36
Most read
More Related Content
PDF
GLSLtech2018 レイマーチングで半歩差のつく小技集
by
Kei Mesuda
PDF
多機能ボイチャを簡単に導入する方法
by
Unity Technologies Japan K.K.
PDF
アニメーションとスキニングをBurstで独自実装する.pdf
by
infinite_loop
PDF
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
by
UnityTechnologiesJapan002
PDF
Unityではじめるオープンワールド制作 エンジニア編
by
Unity Technologies Japan K.K.
PPTX
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
by
Takehito Gondo
PDF
シェーダだけで世界を創る!three.jsによるレイマーチング
by
Sho Hosoda
PDF
規格書で読むC++11のスレッド
by
Kohsuke Yuasa
GLSLtech2018 レイマーチングで半歩差のつく小技集
by
Kei Mesuda
多機能ボイチャを簡単に導入する方法
by
Unity Technologies Japan K.K.
アニメーションとスキニングをBurstで独自実装する.pdf
by
infinite_loop
【Unite Tokyo 2019】〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介
by
UnityTechnologiesJapan002
Unityではじめるオープンワールド制作 エンジニア編
by
Unity Technologies Japan K.K.
ガルガンチュア on Oculus Quest - 72FPSへの挑戦 -
by
Takehito Gondo
シェーダだけで世界を創る!three.jsによるレイマーチング
by
Sho Hosoda
規格書で読むC++11のスレッド
by
Kohsuke Yuasa
What's hot
PPTX
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
by
Game Tools & Middleware Forum
PDF
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
PPTX
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
【UE4.25 新機能】ロードの高速化機能「IOStore」について
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
猫でも分かるUMG
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
【Unity道場】新しいPrefabワークフロー入門
by
Unity Technologies Japan K.K.
PDF
UE4で作成するUIと最適化手法
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
by
com044
PDF
Unityとシェーダで描く360度フラクタル
by
Hirotaka Nakayama
PPTX
【Unity道場Houdini編】Houdini Engine とプロシージャル法
by
UnityTechnologiesJapan002
PPTX
RPGにおけるイベント駆動型の設計と実装
by
Koji Morikawa
PDF
Unreal Engine 4を使って地球を衛る方法
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
GPU最適化入門
by
Takahiro KOGUCHI
PDF
コールバックと戦う話
by
torisoup
PDF
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
by
KLab Inc. / Tech
PDF
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
by
小林 信行
PDF
VRM 標準シェーダ MToon の使い方
by
VirtualCast, Inc.
PDF
ゲームシナリオ構成論 The Method for the game sinario writings for multi-ending adventur...
by
小林 信行
PPTX
なぜなにリアルタイムレンダリング
by
Satoshi Kodaira
PDF
【 Unity道場 1月 ~LWRPとシェーダー~】軽量レンダーパイプライン、Light Weight Renderer Pipeline…とは
by
Unity Technologies Japan K.K.
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
by
Game Tools & Middleware Forum
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
by
エピック・ゲームズ・ジャパン Epic Games Japan
【UE4.25 新機能】ロードの高速化機能「IOStore」について
by
エピック・ゲームズ・ジャパン Epic Games Japan
猫でも分かるUMG
by
エピック・ゲームズ・ジャパン Epic Games Japan
【Unity道場】新しいPrefabワークフロー入門
by
Unity Technologies Japan K.K.
UE4で作成するUIと最適化手法
by
エピック・ゲームズ・ジャパン Epic Games Japan
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
by
com044
Unityとシェーダで描く360度フラクタル
by
Hirotaka Nakayama
【Unity道場Houdini編】Houdini Engine とプロシージャル法
by
UnityTechnologiesJapan002
RPGにおけるイベント駆動型の設計と実装
by
Koji Morikawa
Unreal Engine 4を使って地球を衛る方法
by
エピック・ゲームズ・ジャパン Epic Games Japan
GPU最適化入門
by
Takahiro KOGUCHI
コールバックと戦う話
by
torisoup
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
by
KLab Inc. / Tech
ゲームデザイナーのためのキャラクター表現&コンセプトメイキング:抜粋版
by
小林 信行
VRM 標準シェーダ MToon の使い方
by
VirtualCast, Inc.
ゲームシナリオ構成論 The Method for the game sinario writings for multi-ending adventur...
by
小林 信行
なぜなにリアルタイムレンダリング
by
Satoshi Kodaira
【 Unity道場 1月 ~LWRPとシェーダー~】軽量レンダーパイプライン、Light Weight Renderer Pipeline…とは
by
Unity Technologies Japan K.K.
More from infinite_loop
PDF
ChatGPT触ってみた
by
infinite_loop
PDF
社内ソフトスキルを考える
by
infinite_loop
PDF
3Dプリンタって いいね
by
infinite_loop
PDF
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
by
infinite_loop
PDF
500万行のPHPプロジェクトにおけるログ出力の歩み
by
infinite_loop
PDF
ADRという考えを取り入れてみて
by
infinite_loop
PDF
リファクタリングで実装が○○分短縮した話
by
infinite_loop
PDF
ゲームのインフラをAwsで実戦tips全て見せます
by
infinite_loop
PDF
楽しいVR空間を作る技術と支える技術 #osc19do
by
infinite_loop
PDF
Start rl with_unity_machine_learning_agents
by
infinite_loop
PDF
UniRx の1歩目
by
infinite_loop
PDF
がんばれ PHP Fiber
by
infinite_loop
PDF
心に残った名前ランキング
by
infinite_loop
PDF
プログラムと名前にまつわる座談会
by
infinite_loop
PDF
名は体を表していますか
by
infinite_loop
PDF
名前の力
by
infinite_loop
PDF
大切な名前[Intro]公開版
by
infinite_loop
PDF
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
by
infinite_loop
PDF
複数拠点における開発効率の維持・向上
by
infinite_loop
PDF
Unityで意外と簡単・・・だけど難しいVRコンテンツ
by
infinite_loop
ChatGPT触ってみた
by
infinite_loop
社内ソフトスキルを考える
by
infinite_loop
3Dプリンタって いいね
by
infinite_loop
I ❤ Virtual Machines 仮想環境をより便利に使うツールたち
by
infinite_loop
500万行のPHPプロジェクトにおけるログ出力の歩み
by
infinite_loop
ADRという考えを取り入れてみて
by
infinite_loop
リファクタリングで実装が○○分短縮した話
by
infinite_loop
ゲームのインフラをAwsで実戦tips全て見せます
by
infinite_loop
楽しいVR空間を作る技術と支える技術 #osc19do
by
infinite_loop
Start rl with_unity_machine_learning_agents
by
infinite_loop
UniRx の1歩目
by
infinite_loop
がんばれ PHP Fiber
by
infinite_loop
心に残った名前ランキング
by
infinite_loop
プログラムと名前にまつわる座談会
by
infinite_loop
名は体を表していますか
by
infinite_loop
名前の力
by
infinite_loop
大切な名前[Intro]公開版
by
infinite_loop
JupyterNotebookとMySQLでゼロからはじめるデータサイエンス
by
infinite_loop
複数拠点における開発効率の維持・向上
by
infinite_loop
Unityで意外と簡単・・・だけど難しいVRコンテンツ
by
infinite_loop
VRChatでお酒が注げる飲み物アセットの紹介
1.
VRChatでお酒が注げる 飲み物アセットの紹介 myxy
2.
自己紹介 ● myxy ● @3405691582 ●
愛知県出身 大学から仙台在住 ● 30歳 ● 入社3年目 ● 業務は主にUnityでクライアントサイドの開発 ● 最近はVRChatを遊んでいる
3.
VRChat ● VRHMD対応メタバース ● アバター等3Dモデルをアップロードして遊べる ●
制作の自由度が高い ○ スクリプトが使える(ほぼC#で書ける) ○ シェーダが使える(ビルトインレンダーパイプライン)
4.
発表内容:製作物の紹介 VRChat上で動作するグラスとボトルのアセット https://youtu.be/H6QDChcddqY
5.
アセットに用いられている各種技術を ● GPU編 ○ グラスや液体の描画 ●
CPU編 ○ 揺れや体積の物理演算 の2つに分けて解説
6.
GPU編
7.
グラスの描画にはSDF (Signed Distance
Field)を用いる 空間位置から物体表面からの距離を出す関数 物体外側が正、物体内側が負となる 円の距離場 正方形の距離場
8.
複数のSDFを組み合わせることで 様々な形状を作ることができる min(円,正方形) max(円,正方形)
9.
3次元のSDFはレイマーチングという レイトレーシングの手法を用いて描画することができる float sphere(vec3 p,
float r) { return length(p) - r; } float cube(vec3 p, vec3 b) { vec3 q = abs(p) - b; return length(max(q,0.)) + min(max(q.x,max(q.y,q.z)),0.); } float map(vec3 p) { return min(cube(p-.25, vec3(.5)),sphere(p+.25,.5)); }
10.
アセットではグラス本体と内部の液体をSDFで表現し、 レイマーチングを用いてCubeのメッシュに描画している
11.
Q: なんでそんな面倒なことするの?モデリングすれば? A: ● 動作に合わせて傾いたり波が立ったりする 液体の複雑な形状はモデリングでは再現できない 計算したほうが都合が良い ●
パラメータを変更するだけで様々な形状、色のボトルを 生成することができる
12.
描画の流れ 視点からボトル表面にレイを飛ばす →ボトル表面の情報が取れる 内部の水面情報や ボトル裏側の情報も必要 複数回に分けてレイを飛ばすことで 各部の情報を取得
13.
1. 視点からボトルに向けてレイを当てる 視点 描画の流れ 2. レイ方向に十分離れた地点から 視点方向にレイを当てる 2つのレイ衝突地点の中間点が ボトルのガラス部分にあるかどうかで 描画ピクセルにおいて ガラスが重なっているかどうか判定できる
14.
液体部分に対しても同様にレイを飛ばすことで ● 水面を上から見ている ● 水面を下から見ている ●
水面を見ていない 等の状態を判定することができる 視点
15.
● ボトルの表面を見ているか ● 水を見ているか ●
水面を表面/裏面から見ているか ● 見えている水面は ガラスに遮蔽されるか 等の場合分けを行い、 物理的に整合性が取れるような ピクセルの描画内容を決定する
16.
透明度 水部分の視点側と視点の逆側にレイを当てているので 液体の厚みの情報が得られる 液体の厚みに対して 指数関数的に透明度が下がる様子を 表現できる
17.
表面張力の表現
18.
グラス壁面 グラス壁面からの距離d 0 a*exp(-b*d) グラスのSDF=壁面からの距離を適当な関数に入れると 壁面付近で盛り上がる形状を表現できる a
19.
泡 水中に玉を描画 玉を複製 → → 確率で玉を消去 動きも実装する 炭酸飲料のような泡の表現
20.
水流はレイマーチングではなく円柱状メッシュを変形している 体積、速度に応じて水流の太さが変化する 瓶の口付近では水面高さに合わせて形状が変化する 水流
21.
水流 格子状に展開されたUV座標を用いて各頂点を識別している スクリプトから渡される水流の位置情報から頂点位置を計算
22.
CPU編
23.
グラス形状データ グラスは基本的に回転体 半径の配列(長さ32)をテクスチャに記録している スクリプトで処理した上でシェーダに渡す
24.
ボトル側面形状の計算 半径の配列(長さ32)をCatmull-Rom splineで補間している 半径配列から毎フレーム計算するのではなく 3次の多項式の係数をスクリプトで計算し、 Vector4の配列としてシェーダに渡している ax^3+bx^2+cx+d
25.
水面揺れの計算 水面全体の傾き (CPUで計算) 細かい波 (GPUで計算) 最終的な水面形状 + ⇒
26.
水面に接続されたばね - 質点系を計算 質点の逆方向が水面の向きとなる 振り子の計算
27.
振り子が激しく動くほど 水面の細かい波が大きくなる 具体的には振り子の躍度(加速度の 時間微分)に波の大きさが比例する 振り子の計算
28.
グラスは液体の体積を保持している 体積一定であっても水面の傾きによって水面高さは異なる 体積と水面の傾きから水面高さを算出する必要がある 水面高さの計算
29.
目標体積より大きい 水面高さと水面の傾きから液体体積を計算する関数を作り、 目標の体積になるような水面高さを二分探索で求める 目標体積より小さい ・・・
30.
目標体積より大きい 二分探索各ステップ毎の体積計算が重い処理なので 8bit=256段階の水面高さの二分探索を8フレームに分けている 目標体積より小さい ・・・ 1フレーム目 2フレーム目
8フレーム目 ・・・
31.
x π/2+asin(x) +t√(1-t^2) 液体部分の体積は弓形の底面の柱の積み重ねとして 近似的に積分する 弓形面積の式に重い関数があるのでテーブル化している
32.
体積断片を積み重ねていく過程で ● 液体部分の体積の最小値 ● 空気部分の体積の最小値 がそれぞれ増加していく ●
液体体積最小値が目標液体体積を上回る ● 空気体積最小値が目標空気体積を上回る ときに目標体積との大小関係が決定し、 計算を打ち切ることで処理を軽くしている 液体 空気 未計算
33.
水流の計算 ● 水流チューブは水流方向に 64個のセグメントに分割されている ● 各セグメント毎に ○
初期速度 ○ 現在速度 ○ 体積 ○ 水流の側面方向 の情報を持つ ● 水流半径は 開口半径√(初期速度/現在速度) となる
34.
注ぐ処理 ● 水流セグメント毎に レイキャストを行い、 レイが衝突したグラスに セグメントの体積を追加する ● 注ぐ先の液体の色や泡の量を 変化させる
35.
現状の課題 ● GPU・CPU共に重い処理をやっている ○ 特にレイマーチングはループ回数が200回くらい 距離関数等の見直しが必要 ●
ライティング設定によっては見栄えが悪い ○ VRChatで動くシェーダはありとあらゆる ライティング設定で機能する必要がある ○ シェーダ書くのがむずかしい
36.
Boothで販売中 https://usamimi-zakka.booth.pm/items/3636706
Download