「EGSR 2022: The 33rd Eurographics Symposium on Rendering」にて発表された論文「GPU-Driven Real-Time Mesh Contour Vectorization」を使い実装されたGPUを活用したリアルタイム輪郭線描画手法「StrokeGen: Realtime Contour Curve Generation」のGithubページが公開されています。
StrokeGen: Realtime Contour Curve Generation
既存のGPUベースのNPR手法(逆ハル、ポストプロセスなど)では、表現力豊かな線画に不可欠なストロークカーブを生成することはできません。
EGSR2022で発表した論文「GPU-Driven Real-Time Mesh Contour Vectorization」のプロトタイプとして実装した、3Dメッシュの輪郭から2D曲線を生成するリアルタイム手法「StrokeGen」を紹介します。
・CPUベースのオフライン代替ツール(Pencil+4、Line Art、Freestyle、Active Strokes)と比較して最大800倍の高速化を実現。
・高効率:画面解像度1920×1080で、300kトライのメッシュにかかる時間はわずか1msです。
・これらのCPUベースのアプローチに匹敵するストロークカーブを生成します。
StrokeGen は研究用プロトタイプで、Unity Engine の Universal Render Pipeline で開発されました。すべての実行時処理は、HLSLを使用してGPUに実装されています(主にコンピュートシェーダ)。このプロジェクトを実行するには
ハードウェアがDX12とHLSL Shader Model 6.0をサポートしていることを確認してください。
Unity Editor 2021.2.11f1 をダウンロードし、インストールします(Unity Hub またはここから)。
プロジェクトを開くには、以下のパッケージが必要です。
オフィシャル:Core RP Library、Universal RP、Unity UI、Mathematics;
サードパーティ:Odin Inspector
Assets/Scenes/SampleScene.unity “を開く。
画面解像度を1920×1080に設定する。
Play “をクリックする。
GPU-Driven Real-Time Mesh Contour Vectorization
3次元メッシュの輪郭をレンダリングすることは、幅広い応用が可能である。これまでの CPU ベースの輪郭線レンダリングアルゴリズムは、高度な定型化効果をサポートしていますが、リアルタイム性能を達成することはできません。一方、GPUを用いたリアルタイムアルゴリズムでは、輪郭要素をストローク曲線にリンクさせることが困難なため、高度な定型化効果を犠牲にしなければなりません。本論文では、以下のステップを含むGPUベースのメッシュ輪郭レンダリング手法を提案する。
GPU-Driven Real-Time Mesh Contour Vectorization
(1) レンダリング前に,前処理段階として,3D メッシュモデルから隣接性と幾何学的情報を解析する.
(2) 実行時に,まず抽出段階として,3D メッシュモデルから輪郭エッジを選択し,並列化したブレセンハムアルゴリズムにより,輪郭エッジを配向した輪郭ピクセルにラスタライズする.
(3) 次に、Potrace を並列化し、輪郭画素から(画素)エッジループを抽出する。
(4) 続いて、エッジループをストロークに分割するための新しいセグメント化手順を設計する。前処理を除くすべての処理はGPU上で並列に実行されます。これにより、高密度メッシュモデルの高解像度レンダリングにおいて、リアルタイム性能を実現することができます。
興味深いプロジェクトです。公開されている情報が少ないのですが、スクリーンショットを見た感じは中々良さそうな予感がします。私は現在直ぐに試せるような環境を持っていないので、Unity開発環境をお持ちの方…誰か触ってみてほしいなぁ…。という思いを込めて紹介させていただきました。
コメント