$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
URP の 2D Renderer と たわむれる
Search
ruccho
July 11, 2025
0
10
URP の 2D Renderer と たわむれる
https://unity-fully-understood.connpass.com/event/358068/
ruccho
July 11, 2025
Tweet
Share
More Decks by ruccho
See All by ruccho
WebAssemblyインタプリタを書く ~Component Modelを添えて~
ruccho
1
1.1k
Colonies
ruccho
0
650
タイルマップ拡張のススメ / Recommendation of Unity Tilemap Gotanda.unity #14
ruccho
0
3.6k
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Bash Introduction
62gerente
615
210k
4 Signs Your Business is Dying
shpigford
186
22k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Writing Fast Ruby
sferik
630
62k
Transcript
URP の 2D Renderer と たわむれる るっちょ @ruccho_vector
およそ1年前…… • 『5年モノの個人開発2Dゲーム、そろそろURPに移行したいな~』 ◦ VFX Graphを使いたい ◦ BiRP廃止の影がちらつき始めた
やってみた URP 17.0.3 BiRP
URP移行でやったことを 紹介していきます
① 2Dライト
2Dライト • BiRPの頃のライト手法 ◦ スプライトにSurface Shaderを適用し、ノーマルマップを描いて3Dライトを当てていた ◦ 3Dのライティングを2Dに応用した形 • URPでは
◦ 2Dライトが標準サポートされている ◦ 専用の 2D Rendererを使う必要がある
2D Rendererのパイプライン • 先に画面全体のNormalと陰影を計算してから合成する手法 ◦ Deferred Rendering的ともいえる ◦ BiRPではForward Renderingのライト数制限がきつかったが、それも緩和された
② GrabPassがなくなった
GrabPassとは • 任意のシェーダー内で描画直前の画面をテクスチャとして 取得するBiRPの機能 • 画面をぼかしたり、歪ませるのに便利 • URPでは非対応だが、2D Renderer限定で Camera
Sorting Layer Texture という代替機能がある
Camera Sorting Layer Texture • URPで特定のSorting Layerの直後の画面をシェーダーから参照できる機能 • GrabPassのようにRenderer単位のキャプチャはできない レイヤーA
レイヤーB レイヤーC レイヤーD キャプチャ 参照 描画順
URP改造でGrabPassを再現する? • 残念ながら、SRPでは任意のRendererの直前や直後でバッチを切れない • 結論 SRPでGrabPassは(たぶん)無理 • 詳細が気になる人はこれを読んでください ◦ 各バッチに含めるRendererはRenderQueue,
LayerMask, SortingLayerなどで フィルタできるが、「特定のRendererの前後」ではフィルタする方法がない ◦ 作成したバッチにRendererListというデータが含まれているが、内容はC++側にあって C#からはアクセスできない
対応策 • URPを改造してこうする レイヤーA レイヤーB レイヤーC レイヤーD キャプチャ キャプチャ キャプチャ
キャプチャ 描画順
対応策 • GrabPassよりは単位が荒いが、概ね事足りた • Sorting Layerごとにバッチが切れるので性能は多少下がる • Sorting Layer数を増やしすぎないように レイヤーA
レイヤーB レイヤーC レイヤーD キャプチャ キャプチャ キャプチャ キャプチャ 描画順
③ Bloomの見た目が変わった
URPのBloom • BiRP (PostProcessing Stack v2) から実装が刷新されてルックも 変わり、パラメータをいじっても元のルックが再現できず BiRP (PPSv2)
URP標準
対応 • 旧実装をカスタムポストプロセッシングとしてURPに移植した BiRP (PPSv2) 移植後
④ RenderGraph対応
RenderGraph • URP 17 (Unity 6) で導入された新機能 ◦ ざっくりいうと、レンダリングパスの依存関係をもとに高度な最適化を行う機能 •
カスタムパス(Renderer Feature)の作り方が大きく変わっている • まだあまり情報がなく、手探りで対応 • (2D特有の事情は特になし)
まとめ
まとめ • GrabPassなど一部機能に不足はあるが、概ね問題なく移行できた • ライティングはむしろ進化した ◦ ライト数制限が緩和されてうれしい • URP改造するとURPに詳しくなれます