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
Submit search
EN
Uploaded by
Unity Technologies Japan K.K.
PPTX, PDF
17,563 views
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
2018/8/22に開催されたCEDEC2018の講演資料です。 講師:黒河 優介(ユニティ・テクノロジーズ・ジャパン合同会社)
Technology
◦
Read more
19
Save
Share
Embed
Embed presentation
Download
Downloaded 41 times
1
/ 89
2
/ 89
3
/ 89
4
/ 89
5
/ 89
6
/ 89
7
/ 89
8
/ 89
9
/ 89
10
/ 89
11
/ 89
12
/ 89
13
/ 89
14
/ 89
15
/ 89
16
/ 89
17
/ 89
18
/ 89
19
/ 89
20
/ 89
21
/ 89
22
/ 89
23
/ 89
24
/ 89
25
/ 89
26
/ 89
27
/ 89
28
/ 89
29
/ 89
30
/ 89
31
/ 89
32
/ 89
33
/ 89
34
/ 89
35
/ 89
36
/ 89
37
/ 89
38
/ 89
39
/ 89
40
/ 89
41
/ 89
42
/ 89
43
/ 89
44
/ 89
45
/ 89
46
/ 89
47
/ 89
48
/ 89
49
/ 89
50
/ 89
51
/ 89
52
/ 89
53
/ 89
54
/ 89
55
/ 89
56
/ 89
57
/ 89
58
/ 89
59
/ 89
60
/ 89
61
/ 89
62
/ 89
63
/ 89
64
/ 89
65
/ 89
66
/ 89
67
/ 89
68
/ 89
69
/ 89
70
/ 89
71
/ 89
72
/ 89
73
/ 89
74
/ 89
75
/ 89
76
/ 89
77
/ 89
78
/ 89
79
/ 89
80
/ 89
81
/ 89
82
/ 89
83
/ 89
84
/ 89
85
/ 89
86
/ 89
87
/ 89
88
/ 89
89
/ 89
More Related Content
PDF
Unityでパフォーマンスの良いUIを作る為のTips
by
Unity Technologies Japan K.K.
PDF
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
by
com044
PDF
Unity2018/2019における最適化事情
by
Unity Technologies Japan K.K.
PPTX
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
by
UnityTechnologiesJapan002
PDF
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
by
Unity Technologies Japan K.K.
PPTX
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
by
Unity Technologies Japan K.K.
PPTX
なぜなにリアルタイムレンダリング
by
Satoshi Kodaira
PDF
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
by
Toshiyasu Miyabe
Unityでパフォーマンスの良いUIを作る為のTips
by
Unity Technologies Japan K.K.
[UE4]マテリアルの注意すべきこと!~テクスチャロードとSwitch~
by
com044
Unity2018/2019における最適化事情
by
Unity Technologies Japan K.K.
【Unity道場Houdini編】UnityとHoudiniで作るRealtimeVFX実践解説 後編
by
UnityTechnologiesJapan002
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
by
Unity Technologies Japan K.K.
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
by
Unity Technologies Japan K.K.
なぜなにリアルタイムレンダリング
by
Satoshi Kodaira
CEDEC2015「加算合成コストが0になる!?すぐに使えるP-MAPブレンドテクニック」発表スライド
by
Toshiyasu Miyabe
What's hot
PPTX
UE4のレイトレで出来ること/出来ないこと
by
Satoshi Kodaira
PDF
Riderはいいぞ!
by
UnityTechnologiesJapan002
PPTX
Unityネイティブプラグインマニアクス #denatechcon
by
DeNA
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
by
モノビット エンジン
PPTX
ゲーム開発とMVC
by
Takashi Komada
PPTX
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
by
DeNA
PDF
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
by
KLab Inc. / Tech
PDF
60fpsアクションを実現する秘訣を伝授 解析編
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
Unityではじめるオープンワールド制作 エンジニア編
by
Unity Technologies Japan K.K.
PDF
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
PDF
コールバックと戦う話
by
torisoup
PDF
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
by
Tatsuya Iwama
PPTX
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
UE4におけるLoadingとGCのProfilingと最適化手法
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
by
UnityTechnologiesJapan002
PDF
UE4におけるレベル制作事例
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
UE4における大規模背景制作事例(コリジョン編)
by
エピック・ゲームズ・ジャパン Epic Games Japan
UE4のレイトレで出来ること/出来ないこと
by
Satoshi Kodaira
Riderはいいぞ!
by
UnityTechnologiesJapan002
Unityネイティブプラグインマニアクス #denatechcon
by
DeNA
ネットワーク ゲームにおけるTCPとUDPの使い分け
by
モノビット エンジン
ゲーム開発とMVC
by
Takashi Komada
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
by
DeNA
CEDEC 2020 - 高品質かつ低負荷な3Dライブを実現するシェーダー開発 ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スク...
by
KLab Inc. / Tech
60fpsアクションを実現する秘訣を伝授 解析編
by
エピック・ゲームズ・ジャパン Epic Games Japan
Unityではじめるオープンワールド制作 エンジニア編
by
Unity Technologies Japan K.K.
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
コールバックと戦う話
by
torisoup
UE4 Hair & Groomでのリアルタイムファーレンダリング (UE4 Character Art Dive Online)
by
エピック・ゲームズ・ジャパン Epic Games Japan
メカアクションゲーム『DAEMON X MACHINA』 信念と血と鋼鉄の開発事例
by
エピック・ゲームズ・ジャパン Epic Games Japan
UE4 コリジョン検証 -HitとOverlapイベントが発生する条件について-
by
Tatsuya Iwama
[CEDEC2018] UE4で多数のキャラクターを生かすためのテクニック
by
エピック・ゲームズ・ジャパン Epic Games Japan
アーティストの為のプロファイル入門!~楽しいRenderDocの使い方~
by
エピック・ゲームズ・ジャパン Epic Games Japan
UE4におけるLoadingとGCのProfilingと最適化手法
by
エピック・ゲームズ・ジャパン Epic Games Japan
【Unite Tokyo 2019】SRPで一から描画フローを作ってみた! ~Unity描画フローからの脱却~
by
UnityTechnologiesJapan002
UE4におけるレベル制作事例
by
エピック・ゲームズ・ジャパン Epic Games Japan
UE4における大規模背景制作事例(コリジョン編)
by
エピック・ゲームズ・ジャパン Epic Games Japan
Similar to 【CEDEC2018】Scriptable Render Pipelineを使ってみよう
PDF
【GTMF2018TOKYO】ScriptableRenderPipelineでアプリに最適な描画をしよう
by
Unity Technologies Japan K.K.
PDF
【GTMF2018OSAKA】ScriptableRenderPipelineでアプリに最適な描画をしよう
by
Unity Technologies Japan K.K.
PPTX
Chainer meetup
by
Taizan Yonetuji
PDF
WebGL and Three.js
by
yomotsu
PDF
Three.jsで3D気分
by
Toshio Ehara
PPTX
Unityのポストエフェクトで遊ぶ!
by
Yamato Honda
PPTX
実行時ライトベイクをShaderでやってみた
by
優介 黒河
PPTX
Nreal Lightハンズオン
by
Takashi Yoshinaga
PDF
UE4.17で入る新機能を一気に紹介・解説!
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
Unity&unreal engineハンズオン資料 unity
by
Seiki Okude
PDF
【 Unity道場 1月 ~LWRPとシェーダー~】軽量レンダーパイプライン、Light Weight Renderer Pipeline…とは
by
Unity Technologies Japan K.K.
PDF
海外ゲーム技術勉強会#1 OGRE3D
by
Kazuhisa Minato
PDF
Gcm#3 アーティストのためのプログラマブルシェーダ講座
by
GREE/Art
KEY
シェーダーしよっ☆ Let's play shaders!
by
Yuichi Higuchi
PDF
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
by
エピック・ゲームズ・ジャパン Epic Games Japan
【GTMF2018TOKYO】ScriptableRenderPipelineでアプリに最適な描画をしよう
by
Unity Technologies Japan K.K.
【GTMF2018OSAKA】ScriptableRenderPipelineでアプリに最適な描画をしよう
by
Unity Technologies Japan K.K.
Chainer meetup
by
Taizan Yonetuji
WebGL and Three.js
by
yomotsu
Three.jsで3D気分
by
Toshio Ehara
Unityのポストエフェクトで遊ぶ!
by
Yamato Honda
実行時ライトベイクをShaderでやってみた
by
優介 黒河
Nreal Lightハンズオン
by
Takashi Yoshinaga
UE4.17で入る新機能を一気に紹介・解説!
by
エピック・ゲームズ・ジャパン Epic Games Japan
Unity&unreal engineハンズオン資料 unity
by
Seiki Okude
【 Unity道場 1月 ~LWRPとシェーダー~】軽量レンダーパイプライン、Light Weight Renderer Pipeline…とは
by
Unity Technologies Japan K.K.
海外ゲーム技術勉強会#1 OGRE3D
by
Kazuhisa Minato
Gcm#3 アーティストのためのプログラマブルシェーダ講座
by
GREE/Art
シェーダーしよっ☆ Let's play shaders!
by
Yuichi Higuchi
CEDEC2016: Unreal Engine 4 のレンダリングフロー総おさらい
by
エピック・ゲームズ・ジャパン Epic Games Japan
More from Unity Technologies Japan K.K.
PDF
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
by
Unity Technologies Japan K.K.
PDF
UnityのクラッシュをBacktraceでデバッグしよう!
by
Unity Technologies Japan K.K.
PDF
Unityで始めるバーチャルプロダクション
by
Unity Technologies Japan K.K.
PDF
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
by
Unity Technologies Japan K.K.
PDF
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
by
Unity Technologies Japan K.K.
PDF
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
by
Unity Technologies Japan K.K.
PDF
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
by
Unity Technologies Japan K.K.
PDF
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
by
Unity Technologies Japan K.K.
PDF
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
by
Unity Technologies Japan K.K.
PDF
「原神」におけるコンソールプラットフォーム開発
by
Unity Technologies Japan K.K.
PDF
FANTASIANの明日使えない特殊テクニック教えます
by
Unity Technologies Japan K.K.
PDF
インディーゲーム開発の現状と未来 2021
by
Unity Technologies Japan K.K.
PDF
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
by
Unity Technologies Japan K.K.
PDF
Burstを使ってSHA-256のハッシュ計算を高速に行う話
by
Unity Technologies Japan K.K.
PDF
Cinemachineで見下ろし視点のカメラを作る
by
Unity Technologies Japan K.K.
PDF
徹底解説 Unity Reflect【開発編 ver2.0】
by
Unity Technologies Japan K.K.
PDF
徹底解説 Unity Reflect【概要編 ver2.0】
by
Unity Technologies Japan K.K.
PDF
Unityティーチャートレーニングデイ -認定プログラマー編-
by
Unity Technologies Japan K.K.
PDF
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
by
Unity Technologies Japan K.K.
PDF
Unityティーチャートレーニングデイ -認定アソシエイト編-
by
Unity Technologies Japan K.K.
建築革命、更に更に進化!便利さ向上【Unity Reflect ver 3.0 】
by
Unity Technologies Japan K.K.
UnityのクラッシュをBacktraceでデバッグしよう!
by
Unity Technologies Japan K.K.
Unityで始めるバーチャルプロダクション
by
Unity Technologies Japan K.K.
ビジュアルスクリプティング (旧:Bolt) で始めるUnity入門3日目 ゲームをカスタマイズしよう
by
Unity Technologies Japan K.K.
ビジュアルスクリプティングで始めるUnity入門2日目 ゴールとスコアの仕組み - Unityステーション
by
Unity Technologies Japan K.K.
ビジュアルスクリプティングで始めるUnity入門1日目 プレイヤーを動かそう
by
Unity Technologies Japan K.K.
PlasticSCMの活用テクニックをハンズオンで一緒に学ぼう!
by
Unity Technologies Japan K.K.
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
by
Unity Technologies Japan K.K.
Unity教える先生方注目!ティーチャートレーニングデイを体験しよう
by
Unity Technologies Japan K.K.
「原神」におけるコンソールプラットフォーム開発
by
Unity Technologies Japan K.K.
FANTASIANの明日使えない特殊テクニック教えます
by
Unity Technologies Japan K.K.
インディーゲーム開発の現状と未来 2021
by
Unity Technologies Japan K.K.
建築革命、更に進化!デジタルツイン基盤の真打ち登場【概要編 Unity Reflect ver 2.1 】
by
Unity Technologies Japan K.K.
Burstを使ってSHA-256のハッシュ計算を高速に行う話
by
Unity Technologies Japan K.K.
Cinemachineで見下ろし視点のカメラを作る
by
Unity Technologies Japan K.K.
徹底解説 Unity Reflect【開発編 ver2.0】
by
Unity Technologies Japan K.K.
徹底解説 Unity Reflect【概要編 ver2.0】
by
Unity Technologies Japan K.K.
Unityティーチャートレーニングデイ -認定プログラマー編-
by
Unity Technologies Japan K.K.
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
by
Unity Technologies Japan K.K.
Unityティーチャートレーニングデイ -認定アソシエイト編-
by
Unity Technologies Japan K.K.
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
1.
2018/8/22 Scriptable Render Pipeline
を使ってみよう
2.
本日のアジェンダ • Scriptable RenderPipelineについて紹介 •
HDRenderPipelineについて紹介 • 独自のRenderPipelineの構築について紹介
3.
Scriptable Render Pipelineの紹介の 前に一旦デフォルトでの描画につい ておさらいします
4.
Unityデフォルトの描画について • 描画順の制御について • ライトの扱いについて •
Shadowの扱いについて
5.
描画順の話 基本的なルール Opaqueなオブジェクト:手前から奥へ → Depth Testで描画面積を減らすため Transparentなオブジェクト:奥から手前へ →描画の破綻を防ぐため
6.
Opaqueは、手前から奥へ
7.
Opaqueは、手前から奥へ
8.
Opaqueは、手前から奥へ
9.
Opaqueは、手前から奥へ Z-Bufferへの書き込み、ZTestを有効にしているので、 出来る限り Z-Testを有効活用して塗るピクセル数を減ら すために手前から奥へ描画するようにしている
10.
Transparentは、奥から手前へ
11.
Transparentは、奥から手前へ
12.
Transparentは、奥から手前へ
13.
Transparentは、奥から手前へ 奥から手前へ書くと 正しく描画されています 手前から奥へ書くと 重なった部分の描画が破綻し ています
14.
もう少し細かく描画順の制御をしたい場合 • 複数のCameraを置いてDepth値で制御 • RendererのsortingLayerNameで制御 •
RendererのsortingOrderで制御 • MeshRendererのsortingOrderで制御 • Material.renderQueueで制御
15.
もう少し描画順の制御をしたい場合 地面の部分は3つのオブジェクトを描画後に描画して、塗るピクセル数を 減らしてほしいが、一番最初に描画されてしまっています。
16.
もう少し描画順の制御をしたい場合 これはRendererのBoundingBoxの中心位置で手前・奥の判定を行ってい るため、地面が一番手前と判定されてしまっています。
17.
理想の描画の形 まず最初に三つのオブジェクトが描画されて…
18.
理想の描画の形 その後に地面が描画されることが理想形です。
19.
Unityのルールを熟知していないと 描画の順番が制御できない…
20.
ライトの扱いについて ポイントライトは、「vertexベースでのライティング」 もしくは「明るい部分の加算合成での処理」を行います
21.
明るい部分の加算合成 このようにポイントライト3つ あるシーンを描画する場合…
22.
明るい部分の加算合成 まず、ポイントライト適応前の状態を描画します
23.
明るい部分の加算合成 その後、ポイントライト一つ一つ当たった状態のオブ ジェクトを描画して加算合成していきます。 そのため余計な描画負荷を伴います
24.
Point Light....
25.
Shadowの扱いについて Shadow周りの処理は、ほとんどブラックボックス QualitySettingsで設定を弄ることは可能
26.
もう少しShadow弄りたい…
27.
これまでのUnityでは、描画に関する 値の設定は出来ました。 が、描画処理自体はエンジン内部で 閉じておりブラックボックスでした。
28.
Scriptable Render Pipeline
では エンジン自体の内部で閉じていた描 画に関する処理をスクリプトで書け るようになりました
29.
SRPの機能紹介 • Unityの内部エンジンで行われていた描画の下記処理の流れをスク リプトでカスタマイズ出来るようになる機能がSRPです • カリング •
オブジェクトのレンダリング • Shadowの処理 • ポストプロセッシング
30.
SRPでは描画の流れをスクリプトで書けます // 描画時にコールバックされます。引数contextに対して描画命令を発行していきます void Render(ScriptableRenderContext
context, Camera[] cameras) { foreach (var camera in cameras){ // まず Camera毎のShader のパラメーターセットアップして… SetupShaderParams(camera); // スクリプトで決めたルールでカリングをして… var res = CullResults.Cull(ref cullingParams, context, ref cull); // そしてカリングして得た Rendererを引数で指定したルールで描画します context.DrawRenderers(res.visibleRenderers, ref settings, filterSettings); } }
31.
LWRPとHDRPについて ここまでSRPの紹介をしてきましたが、すべてを0から設計・構築 するのは敷居が高いです。そのため、Unity側で用意したテンプレー トが二つあります。 ・モバイル等に向けた軽量レンダリングパイプライン LightWeithRenderPipeline(LWRP) ・ハイエンドに特化したレンダリングパイプライン HDRenderPipeline(HDRP)
32.
LWRP と HDRP
33.
LWRP/HDRPの導入について • PackageManagerで取得して取り込む • トラブル少なく導入したい場合はコチラがオススメ •
githubからソースを取得してプロジェクト下に配置 • カスタマイズ等を考えている場合はコチラ https://github.com/Unity-Technologies/ScriptableRenderPipeline
34.
PackageManagerからLWRP/HDRPの導入 PackageManagerよりInstallする だけです
35.
LightWeightRenderPipeline(LWRP)の紹 介 Unityの標準(Built-In)のRenderPipelineのサブセットとし て作成されました。 一部機能を意図的に除外した形となっており、その分パ フォーマンスは標準のよりも良いものになっています。 標準とLWRPの機能比較は下記URLより https://blogs.unity3d.com/jp/2018/02/21/the-lightweight-render- pipeline-optimizing-real-time-performance/
36.
標準パイプラインとLWRPの機 能比較表を公開しています https://blogs.unity3d.com/jp/2018/02/21/the- lightweight-render-pipeline-optimizing-real- time-performance/
37.
HD RenderPipelineの紹介 https://keijiro.github.io/cedec-hdrp-deck
38.
SRPの作成方法 1.RenderPipelineAsset/RenderPipelineを継承したクラスを それぞれ独自に定義します 2. RenderPipelineAssetを継承したクラスのAssetを作成し、 GraphicsSettings.renderPipelineAssetにセットします 3.Shaderを独自のRenderpipelineに合わせて、 LightModeの書き換えます
39.
1.継承したクラスを定義します [ExecuteInEditMode] public class MySRPAsset
: RenderPipelineAsset{ protected override IRenderPipeline InternalCreatePipeline(){ return new MyScriptableRenderPipelineInstance(); } } public class MyScriptableRenderPipelineInstance : RenderPipeline{ // 描画のタイミングでコールバックされます public override void Render(ScriptableRenderContext context, Camera[] cameras){ base.Render(context, cameras); foreach (var camera in cameras){ // 描画処理をここに書いていきます } } }
40.
2-1. GraphicsSettingsで設定 var instance
= ScriptableObject.CreateInstance<MySRPAsset>(); AssetDatabase.CreateAsset(instance, "Assets/MyScriptableRenderPipeline.asset"); 上記のようなEditor拡張で、独自の RenderPipelineAssetのアセットを作成します
41.
2-2. GraphicsSettingsで設定 先ほど作成したRenderPipelineAssetを指定します
42.
3. Shaderの書き換え RenderPipeline側で Rendererを描画するときの設定に、ShaderPassName を渡しています。そうすることで、任意の順番でのPass描画が可能になっ ています。 そのため、Shader側にはPassの名前をLightModeで明示的に指定する必要 があります。
43.
var settings =
new DrawRendererSettings(camera, new ShaderPassName("BasicPass")); settings.sorting.flags = SortFlags.CommonOpaque; var filterSettings = new FilterRenderersSettings(true) { renderQueueRange = RenderQueueRange.opaque, layerMask = 1 << LayerDefine.BG }; context.DrawRenderers(cull.visibleRenderers, ref settings, filterSettings); SubShader{ Tags { "Queue"=“Geometry" "RenderType"=“Opaque"} Pass{ Tags { "LightMode" = "BasicPass"} ....処理等 } } C#側の処理 Shader側
44.
var settings =
new DrawRendererSettings(camera, new ShaderPassName("BasicPass")); settings.sorting.flags = SortFlags.CommonOpaque; var filterSettings = new FilterRenderersSettings(true) { renderQueueRange = RenderQueueRange.opaque, layerMask = 1 << LayerDefine.BG }; context.DrawRenderers(cull.visibleRenderers, ref settings, filterSettings); SubShader{ Tags { "Queue"=“Geometry" "RenderType"=“Opaque"} Pass{ Tags { "LightMode" = "BasicPass"} ....処理等 } } C#側の処理 Shader側 描画設定で指定したShaderPassName と ShaderのLightModeを一致させる必 要があります。
45.
SRP導入に当たっての注意点
46.
SRPの注意点① Cameraのコールバック系は呼び出されなくなります。 そのため、ImageEffect系の実装をし直す必要があります。 public class MyScriptableRenderPipelineInstance
: RenderPipeline{ // 描画のタイミングでコールバックされます public override void Render(ScriptableRenderContext context, Camera[] cameras){ base.Render(context, cameras); foreach (var camera in cameras){ // 描画処理をここに書いていきます } // ImageEffect等の実装はココで実行されるようにする等が必要です } }
47.
SRPの注意点② Surface Shaderは対応していません。 SRPでは、vertex shader
/ fragment shaderもしくは、 2018.1からの新機能ShaderGraphでのShader記述に置き 換える必要があります。
48.
RenderPipeline作成事例 • 0から独自のRenderPipeline自作した話 • LWRPをベースにRenderPipelineをカスタムした話
49.
0から独自のRenderPipelineを自作した話
50.
板ポリゴンで描画しているだけ キャラクターは板ポリゴンに スプライトを貼っただけ
51.
通常のRenderPipelineでは…
52.
通常のRenderPipelineでは… Transparentは奥から手前を 遵守します
53.
通常のRenderPipelineでは… Materialの切り替えを都度しな がら奥から手前へ描画します
54.
通常のRenderPipelineでは… そのため、描画するのに非常に多くの Material切り替えが発生しました
55.
Material切り替え抑えたい… 「奥から手前」 このルール何とかしたい…
56.
Scriptable Render Pipelineなら 「奥から手前」ルールも変更 できます!!
57.
描画するときの設定で… var pass =
new ShaderPassName("BasicPass"); var settings = new DrawRendererSettings(camera, pass); settings.sorting.flags = SortFlags.CommonOpaque; var filterSettings = new FilterRenderersSettings(true){ renderQueueRange = RenderQueueRange.transparent, layerMask = 1 << LayerDefine.BG }; context.DrawRenderers(cull.visibleRenderers, ref settings, filterSettings);
58.
描画するときの設定で… var pass =
new ShaderPassName("BasicPass"); var settings = new DrawRendererSettings(camera, pass); settings.sorting.flags = SortFlags.CommonOpaque; var filterSettings = new FilterRenderersSettings(true){ renderQueueRange = RenderQueueRange.transparent, layerMask = 1 << LayerDefine.BG }; context.DrawRenderers(cull.visibleRenderers, ref settings, filterSettings); 描画する時のShaderのPass名 を指定できます
59.
描画するときの設定で… var pass =
new ShaderPassName("BasicPass"); var settings = new DrawRendererSettings(camera, pass); settings.sorting.flags = SortFlags.CommonOpaque; var filterSettings = new FilterRenderersSettings(true){ renderQueueRange = RenderQueueRange.transparent, layerMask = 1 << LayerDefine.BG }; context.DrawRenderers(cull.visibleRenderers, ref settings, filterSettings); 描画する時のソート順を指 定できます
60.
描画するときの設定で… var pass =
new ShaderPassName("BasicPass"); var settings = new DrawRendererSettings(camera, pass); settings.sorting.flags = SortFlags.CommonOpaque; var filterSettings = new FilterRenderersSettings(true){ renderQueueRange = RenderQueueRange.transparent, layerMask = 1 << LayerDefine.BG }; context.DrawRenderers(cull.visibleRenderers, ref settings, filterSettings); 描画する対象のオブジェクトの Opaque・Transparent等を指定 できます。
61.
描画するときの設定で… var pass =
new ShaderPassName("BasicPass"); var settings = new DrawRendererSettings(camera, pass); settings.sorting.flags = SortFlags.CommonOpaque; var filterSettings = new FilterRenderersSettings(true){ renderQueueRange = RenderQueueRange.transparent, layerMask = 1 << LayerDefine.BG }; context.DrawRenderers(cull.visibleRenderers, ref settings, filterSettings); Layer単位で描画するオブジェクト を切り替えられます。
62.
Z Pre-Passを仕込んでおきます
63.
SubShader{ Tags { "Queue"="Transparent"
"RenderType"="Transparent"} // Z Pre-Pass Pass{ Tags { "LightMode" = "ZPrepass"} ZWrite On ColorMask 0 //...実際の処理 } // 実際の描画用のパス Pass{ Tags { "LightMode" = "BasicPass"} ZWrite Off ZTest Equal Blend SrcAlpha OneMinusSrcAlpha //...実際の処理 } }
64.
C#側にも仕込みを・・ // ZPrepassの描画 var zprepass
= new ShaderPassName("ZPrepass"); /** ZPrepassの描画設定を行う処理... */ context.DrawRenderers(cull.visibleRenderers, ref zPreSettings, zPreFilterSettings); // 実際の描画用のパス var basicpass = new ShaderPassName("BasicPass"); /** 実際の描画設定を行う処理... */ context.DrawRenderers(cull.visibleRenderers, ref basicSettings, basicFilterSettings);
65.
SRPでどう変わったか 見ていただきましょう
66.
先に Depth値だけ書き込みます αが一定値以下の場合はdiscard して描画を行うShader Pass 「ZPrepass」で一旦キャラク ターを描画します。 ※Z
Bufferの様子です
67.
その後床を描きます その後 床を描画します
68.
その後キャラクターを描きます キャラクターを通常のShaderPassで描画します。 この時、マテリアル切り替えを最小に抑える順番になるように sorting.flagに「SortFlags.OptimizeStateChanges」を指定します
69.
その後キャラクターを描きます 最後に影を描画します
70.
Z Pre-Passを導入したので、 その後の描画時に「奥から手前」 を遵守しなくても絵が破綻しない ※αでの半透明がない前提です…
71.
何でソート適当でも絵が破綻しないのか? Z BufferのZ値と一致した部分のピクセルでない と、Zテストを通らず、ピクセルが塗られないた め絵が破綻しません
72.
結果 Material切り替えが減り 描画負荷が激減しました
73.
LWRPをベースにカスタムした話 背景からキャラクター。 キャラクターから背景への影 はリアルタイムShadowで、他 は焼いたShadowです。
74.
LWRPをベースにカスタムした話 わかりやすくするため、 リアルタイムのShadowのみ青 くしました。
75.
つまり… ■事前に焼いたShadowを利用 背景オブジェクト → 背景オブジェクト ■リアルタイムのShadow 背景オブジェクト
→ キャラクター キャラクター → 背景オブジェクト キャラクター → キャラクター
76.
LWRPそのままだと… 焼いたShadowの上からリアル タイムのShadowも描いてしま います
77.
LWRPそのままだと… それを防ごうとすると、 キャラクターへのShadowが なくなってしまいます
78.
何故、そんな事したいの? • キャラクターの周りだけをリアルタイムShadowにして影自体の描 画負荷を少し抑えようというアイディアです • キャラクター周りのみで済むのでShadowの解像度も抑えられる •
背景の影は事前に焼いた影なので高品質を保てる
79.
カスタマイズしたパスについて① 始めにキャラクターだけの ShadowMapを生成します
80.
カスタマイズしたパスについて② キャラクターだけのShadowMapを 適応して背景を描きます
81.
カスタマイズしたパスについて③ キャラクターだけのShadowMapに 背景オブジェクトも描き足します。
82.
カスタマイズしたパスについて④ 最後にキャラクターを描画します。
83.
ざっくりの処理流れ // 描画時にコールバックされます。引数contextに対して描画命令を発行していきます void OnRender(ScriptableRenderContext
context, Camera[] cameras) { foreach (var camera in cameras){ // 「Chara」レイヤーだけ先にShadowを処理します ShadowPass( 1 << Layers.Chara); // 「Chara」レイヤー以外のオブジェクトをレンダリングします DrawObjects( ~( 1<< Layers.Chara) ); // 「Chara」レイヤー以外のShadowを処理します ShadowPass( ~( 1 << Layers.Chara) ); // 「Chara」レイヤーのオブジェクトだけをレンダリングします DrawObjects( 1<< Layers.Chara ); } }
84.
その他 応用例 通常では、SelfShadowが発 生してしまいます 今回の特殊パスを用いれば、 キャラクターのSelfShadowのみオフ に出来ます
85.
GithubからLWRP導入時にハマった事 • GithubからLWRPを導入したときに下記のように Shaderエラーが多発しました。 「ShaderIncludePath」で正しいパスが指定されていな い場合があります。
86.
[ShaderIncludePath]属性について • UnityのShaderのincludeのルートパスを複数指定でき るようになりました。 • これにより「Assetsからの絶対パスを都度書く」
or 「相対パス を気にしながら書く」必要がなくなりました • UnityのLWRP/HDRPはコチラの仕組みを利用して、Includeを省 略して記述しています。
87.
[ShaderIncludePath]属性について public class ShaderIncludePathSetting{ [ShaderIncludePath] public
static string[] GetPaths(){ return new[]{ "Assets/SRP/Core/", "Assets/SRP/LightWeightPipeline/", }; } } Shader内のincludeをコチラからの相対パスで 指定できるようになります。
88.
SRPの登場により、Shadow Pass を自由に制御出来るようになった ので、新しい表現も可能に!
89.
ScriptableRenderPipelineまとめ • 過去の資産との整合性なくなりますので、既存のプロジェクトか らの乗り換えは苦労を伴います。 • スクリプトで描画の制御が出来るようになりましたので、より豊 かな表現、アプリケーションに合わせた描画の最適化も可能にな りました •
Unityからは 「ハイエンド向けのHDRenderPipeline」、 「全デバイス向けの LightWeightRenderPipeline」の二種類テンプ レートを用意しています。
Download