2016年9月3日土曜日

Freestyleでエッジの分割をコントロールする

Freestyleで描線をきれいにつなげられるようになったら、次は良さげな感じに線を
分割したくなるもの。というわけでFreestyleでのエッジ分割の設定をざっくりメモ。

まずは一番簡単な長さを指定して分割する方法。
これはラインスタイルのストロークで『2D長さ』を指定します。


サンプルとしてこんな感じのシーン(下図左)をつくり、前回の行って設定をしてエッジ
が全部繋がるようにしてレンダするとこんな感じ。(下図右)

 
これに『2D長さ』を左から100、200、300と指定するとこんな感じになります。  

次は角度を指定して分割する方法。
こちらは2D角度で指定します。

こちらもサンプルシーンをつくってエッジが繋がるようにレンダするとこんな感じ。
 
これに『最小2D角度』を90°、100°、110°と設定してみるとこうなります。

  

最後はマテリアルの境界で描線を分割する方法。
こちらは『マテリアル境界』をONにします。


前回のティーポットで試してみるとこんな感じ。
左が前回の設定のまま、右が先端だけ別のマテリアルを指定した場合。


で、マテリアルは内容が同じでも名前が異なってさえいれば境界にエッジが引かれるので
こんな感じに、注ぎ口の端面部分で描線を分割できます。

2016年8月21日日曜日

FreeStyleで描線がつながったきれいなエッジを出す設定

昨日行われたこちらのblenderユーザーのミートアップイベントに行ってきました。
で、内容はさっそくまとめが作られているようなのでこの辺りを見ていただくとして。

今回FreeStyleを実際の作品に使用されている事例についての発表があり、その中で
3Dモデルのエッジが細かく分割されすぎたり、途切れて欠けてしまうことがある。
とのお話が。

そういえば、自分も最初の頃はそんな感じで困ってたような・・・。
じゃあ、どうやって対策したんだっけ?と改めて考えてみると、普段は設定済みの
テンプレを使っているため意外と思い出せないもので。

で、いい機会なので復習ついでに手順をまとめてみました。
それでは以下から。

まずはじめに適当なシーンを用意しました。
プリセットオブジェクトのユタティーポットを追加、Subsurfモディファイヤで
細分化レベルを3にしています。こんな感じ。


で、FreeStyleを有効にして、線の太さの指定だけ絶対→相対的に変更して、
あとはデフォルト設定のままレンダしてみます。とこんな感じに。


早速注ぎ口の下側でラインが一部欠けているところがありますね。
このレンダのエッジがどのように分割されているか分かりやすくするために
線の入り・抜き設定をつけて再度レンダしてみます。


入り抜きはLineStyleの『厚さ』に『Along Stroke』モディファイヤを追加しています。
各項目の数値は画像を参照。で、この状態でレンダするとこんな感じ。


注ぎ口の形状で、上側ラインの本体につながる手前あたりの曲がった部分と、
下側ラインの先端から左下に向かって緩やかにカーブしていく部分のエッジが
描線が細かく分割されているのがわかるかと思います。
また注ぎ口の先端の開口部の稜線もかなり細かく分割されている感じです。

で、ここからが対策です。
まずはFreeStyleのオプションで『面のスムーズさ』をオンにします。


つぎにLineStyleの設定で『ジオメトリ』に『Bezier Curve』モディファイヤを追加。


最初から『Sampling』が追加されているのでその下に『Bezier Curve』がきます。
以上で対策完了。

これでレンダしてみるとこんな感じに。

最初の画像で細かく途切れていたエッジがそれっぽい感じにつながりました。
わかりやすく比較するために入り抜きの太さに加えて、色も変えてみるとこうなります。
まずは対策前のレンダ。


次に対策後のレンダ。


描線の入り側が細く赤く、抜き側が太く青くなるように設定しています。
いい感じにつながったエッジがレンダされるようになりました。

で、実際何がどう変わったのか?といえば、追加した『Bezier Curve』で
3Dデータのメッシュのエッジを直接レンダするのでなく、それらの頂点を含む
ベジェ曲線に近似した上でそのカーブをレンダする、という感じ。

3Dモデルをいじらずともお手軽にそこそこいい感じになるので良さげです。

2016年6月12日日曜日

GTX1070 ベンチマーク Cycles・Luxrender・OpenGL

GTX1070が先日発売されましたが、3DMarkなどゲーム系のベンチマーク結果
見かけるもののCUDAやOpenCLなどGPGPU用途での評価はあまり見かけないので
やってみました。
Cycles、LuxrenderのGPUレンダリングモードで試してみました。

環境は以下のとおりです。
 OS:Windows10 pro
 CPU:Core i7-5820K
 RAM:16GB
 GPUドライバ:GeForce Game Ready Driver 368.39
 GPU:GTX970、GTX1070

ちょうどGTX1070対応の上記バージョンが入手できるようになってたので
ドライバだけ先に更新してから970のベンチマーク、換装、1070のベンチマークという
ながれで実施しました。


各ベンチマークの内容は以下のとおりです

まずはCyclesでのベンチマーク。
定番の下記リンクにあるシーンファイル、BMW27.blendでテストしています。
Cycles benchmark (updated BMW)

ただしGTX1070を含むPascal世代のGPUではシェーダーモデルのバージョンが
6.1となり、現在のblender2.77aのCyclesではこのバージョンに対応していません。
このため通常どおりにインストールしたままの環境ではPascal世代のGPUを使って
CyclesでのGPUレンダはできないのですが、下記のページを参考に対応する
cubinファイルをcyclesのアドオンフォルダに追加することで、とりあえずはGPUレンダ
が動くようになります。

GTX 1080 GPU problem when trying to render in Blender

ただし、詳細は後述しますがあくまでも『とりあえず』といった感じです。


次にLuxrenderでのベンチマーク。
こちらも定番のLuxmarkを使用しました。
今回は最新版となるLuxmark v.3.1がリリースされていたので、Binariesの項に
あるWindows 64bit用のファイルをダウンロードして使用しました。


以上のベンチマークのスコアは下記のようになりました。
スコアはすべて970, 1070の順で記載しています。
スコアのとなり、丸括弧内の値は各ベンチマーク実行時の最高GPU温度です。
温度の取得はSpeedFanで行いました。


Blender 2.7 Cycles Benchmark rev4
 1:24.51 (75℃) 1:56.54 (67℃)


Luxmark v.3.1
 LuxMark OpenCL GPUs LuxBall HDR (Simple Benchmark: 217k triangles)
 11513 (73℃) 16623 (74℃)

 LuxMark OpenCL GPUs NeumannTLM-102 SE (Medium Benchmark: 1769K triangles)
 7450 (76℃)     9516 (70℃)

 LuxMark OpenCL GPUs Hotel lobby (Complex Benchmark: 4973K triangles)
 2508 (80℃)     3517 (78℃)


以上の結果で気になるのはLuxmarkで順当にスコアが伸びているのに対して
Cyclesでの値が逆に悪くなっている点です。これはどうやら追加でインストールした
CUDAの実行ファイルが古いバージョンのSDKで作られている可能性が考えられます。
Pascal世代のGPUに対応した新しいCUDA SDKは現在α版が公開されたようですので
こちらを利用してビルドされたものを使用して、再度評価をしたいところです。

で、CyclesはGPUレンダリングにCUDAを使用しているわけですが、Luxrenderでは
OpenCLをGPGPUのためのフレームワークに使用しています。
そのためCUDAのバージョン依存の影響を受けずGTX970に対して良い結果が出ています。
またスコアは3〜4割向上していますが、ベンチマーク時の最高温度はほぼ同じ程度に
とどまっているので消費電力あたりの性能が改善されていることが感じられます。

またGPU温度に関してはアイドル時の温度が手元の環境では室温28℃において
GTX970が37℃、GTX1070が41℃でした。
これは前者がメーカーオリジナルの開放型クーラーなのに対して
後者はnVidiaリファレンスクーラーという違いが大きいかと思います。

手元のケースではGPUを挿しているスロットがちょうどケース吸気ファンからの冷たい
外気が直接あたる位置にあるため、開放型クーラーではその恩恵をうけられていましたが
筐体外排気のダクト一体となった密閉型のリファレンスクーラーでは外気が当たったと
してもあまり影響はありません。

動作時の騒音としてはGPU換装の前後での違いは自分では感じませんでした。
ベンチの結果をみても冷却に問題はなさそうなので心配ないかと思います。


最後についでにOpenGL関連のベンチマークも行ったので結果を載せておきます。

CINEBENCH R15 OpenGL
156.00 fps 153.18 fps

SPECviewperf12
catia-04    50.85  69.89
creo-01    30.64  44.69
energy-01    5.81   8.74
maya-04   94.56 117.86
medical-01  27.40  41.82
showcase-01 60.94  94.49
snx-02     5.80   6.83
sw-03     45.73   53.96

ゲーム系のDirectX関連の評価結果はよく目にしますがOpenGLの評価結果は
CINEBENCHくらいしかみないので、3DCGや3DCADでの利用も考慮すると
GPUの買い替えなどでの判断材料が少なくていつも悩ましいところです。

SPECviewperfではMaya、catia、creo(旧Pro ENGINEER)、Solidworksなど
の3DCAD、3DCGツールの描画エンジンをベースにベンチマークを行うので、
実際の各アプリケーション、特に3DCADでのOpenGL描画のパフォーマンスが
想定しやすくおすすめです。


結果としては、価格と性能、発熱や消費電力といったバランスがGTX1070の
良いところかなという印象です。発熱や消費電力などを気にしないのであれば
時期的に値段も落ち着いた980Tiも選択としてはありかな、という感じでしょうか。

---------------------------------------------------------------
コメントなどありましたらこちらへ->web拍手