LAB

デモプログラム

研究室デモプログラム2013.11.5

【なめらかな曲線補間】-Nonuniform spline-

スプライン曲線とは、通過する時間tと座標を指定することで、それを結ぶなめらかな補間曲線を描く曲線です。
このときに、時間と距離にムラがある場合には滑らかさと均等さを失います。

 
これをNonuniformスプラインで滑らかに生成しよう、というのが今回のお題です。

 
参考書籍は『Game Programming Gems 4 : 2.4 不均一スプライン (P166)』です。

Game Programming Gems 4 日本語版

 
2010-01-21-gems4

 
編者:Andrew Kirmse
監訳:川西 裕幸
翻訳:中本 浩
ISBN:4-939007-90-1
発行・発売: 株式会社ボーンデジタル

この中には3種類のNonuniformスプラインが紹介されています。

 
ひらめき丸み不均一スプライン(Rounded Nonuniform spline)
ひらめき平滑不均一スプライン(Smooth Nonuniform spline)
ひらめき時限不均一スプライン(Timed Nonuniform spline)

 
この中で手書き補間は平滑不均一スプラインが用途として適しています。
せっかくですので丸み不均一スプラインも実験してみました。

 
丸み不均一スプラインは指定した点を通過するのは通常のスプラインと同じです。
特徴は「補間点の移動速度がほぼ均一になるスプライン」で極端に折れ曲がらないスプラインになります。
記述では、レースゲームなどのコースの軌道補間などに適しているようです。

 
下の図が実際に丸み不均一スプラインを計算した結果になります。GPUでリアルタイムで描画しています。

 
2010-01-21-spilne-1

 
緑色の点が通過点、オレンジの丸が補間点になります。
オレンジの丸印が比較的等間隔に並んでいることがわかりますね。
すこし描画に工夫して一般的なGPUのMSAAとは異なる高品質なスムーシングのかかった描画にしています。
階調は256階調出ますので256xMSAA相当の高品質アンチエイリアシングになっています。
実際には256回サンプリングしているわけではなく、衝突判定で遮蔽量を計算しています。

 
2010-01-21-zoom

 
ルーペで拡大してみました。非常に滑らかで品質の高いアンチエイリアシングということがわかると思います。
ピクセルシェーダーでサンプリングしているのですが原理としては次のような仕組みになっています。

 
2010-01-21-line

 
このようにすると普通に矩形で描画するよりも滑らかな丸い角で、綺麗なアンチエイリアスをかけることができます。
シェーダーで処理していますのでポリゴン分割なども発生しませんので頂点が増えたりしないのもメリットになります。

 
この滑らかなボリュームライン描画と前述のNonuniformスプラインを組み合わせて簡易的なペイントツールを作成してみました。
GPUでアクセラレーションがかかりますので応答が高速です。
すべてをGPUに依存していますのでGPUが弱いと逆にレスポンスが低下する可能性もあります。
マウスの軌跡をスプラインで補間していますので、高速にマウスをぐるぐる動かしても滑らかな軌跡を得ることができます。ぴかぴか(新しい)

 
2010-01-21-draw1 2010-01-21-draw2

左】一般的なペイントツール     【右】今回のデモの軌跡補間


 
このデモは以下からダウンロードすることができます。
今回はスプラインのデモとペイントのデモの2種類を同梱しています。

 
◎動作可能な環境

 
<動作条件>

WindowsXP以降、DirectX9.0c
シェーダーモデル3.0以降

 
GeForce 6000シリーズ以降
Radeon HD1000シリーズ以降

 
特殊なレンダリング手法を用いていますのでドライバの不具合などで一部動作しない環境があるかもしれません。
なるべく最新のデバイスドライバで実行してください。

 
Download

HexaSpline.zip (約2.01MB)

【動作確認済ハードウェア】
nVIDIA GeForce9800GT

【操作方法】
■HexaSpline

 
カーソルを動かすと代表点の一つが操作可能です。

■HexaPaint

 
左クリック・・・オレンジでペイント
右クリック・・・黒でペイント
マウスホイール・・・ペン先の太さを変更

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE