Beziex自由曲面バーチャル研究室
(C)1999-2016 EISHIN, All Rights Reserved.

Beziex Ts (Home)
 & ダウンロード


Beziex Pcc
Beziex Pcc C# (New!!)

リンクページ
Eishin's Lab Room
[メールフォーム]




Beziex LG (初代Beziex)

Beziex AT プレリリース版
(改良型Beziex)

        -->[開発中止]



Copyright 1999-2016 EISHIN,

Beziex自由曲面バーチャル研究室
(C)1999-2013 EISHIN, All Rights Reserved.


BeziexLab は、自称 CG理論アーキテクトの EISHIN が運営する私設バーチャル研究室です。この研究室は自由曲面理論の研究を目的としており、本サイトでは現時点までの成果である
「Catmull-Clark → 曲面変換ライブラリ」 & 「確認用ビューワ」
のダウンロード (FREE) などを行っております。
なおこのページでは 「Beziex Pcc」 について説明します。




■■■ Beziex Pcc ■■■



注) 上記キャプチャ画面に表示されている初音ミクは、zima さん作成の3Dモデルを変換したものです。貴重なオリジナルモデルの使用を許可していただいた zima さんに感謝します。
オリジナルモデルの URL:
http://uurou.blog99.fc2.com/blog-entry-149.html

なおこのオリジナルファイルを元に「Beziex Pcc」用に変換したファイル(patchesファイル:独自フォーマットファイル)を、(本ページよりダウンロード可能な)ダウンロードファイル内に付属させています。
また現時点にてBeziex Pccで表示されるこの初音ミクの品質はあまり良くありませんが、これは主にBeziex Pccのバグによるものです。けっしてオリジナルモデルの品質が悪いわけでは無いことをお断りしておきます。


1. 概要

Beziex Pcc は、「Beziex Ts」の "パッチ型Catmull-Clarkサブディビジョン"機能 に特化し、大幅に拡張&高速化した
「Catmull-Clark → 曲面変換ライブラリ」 & 「確認用ビューワ」
である。
「Catmull-Clark サブディビジョン」は現在、数多くの 3DCGソフトで採用されており、これを活用している3Dデザイナーも多い。つまりデザイナーが慣れ親しんだ方法で作成された3Dデータを利用出来るわけである。
ところでダウンロードファイルの中には、そのまま動作可能な実行ファイルは含まれていない。プロジェクトファイル&ソースファイル&DLL という形で入っているので、各自ビルドする必要がある。
また Beziex Ts は開発言語として C# を使用したが、「Beziex Pcc」では高速化のために C++ に戻した。
なおこの Beziex Pcc の内容は、大きく分けると
・  BxPccSDK
・  BxPccWxWithDx
の2種類となる(どちらもフリー)。


2. BxPccSDK

以下の処理を行う DLL形式のプログラムで、Beziex Pccそのものと考えてよい。
1)  「Catmull-Clarkサブディビジョン」の元となるポリゴン(ケージ)を読み込み、内部的に細分割したポリゴン頂点の情報を利用し、境界曲線(ベジェ曲線)と「ソース境界横断導関数(ソースCBD)」を作成する。
2)  境界曲線とソースCBDから「CBD用境界曲線投影平面」を作成する。
3)  境界曲線、ソースCBD、CBD用境界曲線投影平面から「Beziexパッチ(2009版)」用のパラメータを求める。なおこの「Beziexパッチ(2009版)」は2009年に公開した、独自アルゴリズムの自由曲面である。
4)  「Beziexパッチ(2009版)」をテセレーションし、分割したポリゴンとして出力する。

またこれを図式化したものが下図である。




ここでなぜ「Catmull-Clark サブディビジョン」で細分割したポリゴンをそのまま使用しないのかについて、理由を以下に述べる。

a)  Beziex Pccでは現在はまだテセレーション処理をCPU側で行っているが、今後 テセレーション処理の一部(またはほぼ全て)をGPU側に移したいと考えている。これにより今よりかなり高速でテセレーションが可能となるであろう。
それに対しサブディビジョンの手法自体は、現在のGPUで効率的に処理を行うのはかなり難しい。これがサブディビジョンを一旦、Beziexパッチに変換する理由である。
具体的には、Beziexパッチに変換後のデータをファイル化(本プログラムでは "patchesファイル") しておき、データ利用時にそのファイルを読み込むようにすれば、高速で大量のポリゴンを生成出来るわけである。

b)  Catmull-Clarkサブディビジョンは基本的に、1辺を2の階乗(2,4,8,...)でしか分割出来ない。しかし一旦曲面化すれば、任意の分割数でテセレーション可能で、しかも(4角パッチの場合)縦横で分割数を変えることも出来る。
つまり、これにより無駄に多いポリゴンをレンダリングする必要は無くなる。

ちなみに「BxPccSDK」はクローズド・ソースのライブラリ(DLLタイプ)であり、一部のヘッダファイル以外のソースは公開していない。
ただしBeziex Pcc全体を C# に移植したエディションも2013年9月に公開しており、それはすべてオープンソース(GPL)である。このエディションについては、「Beziex Pcc C#」の項で確認してほしい。
なお現状の「BxPccSDK」のライセンスについては、後述する。


3. BxPccWxWithDx

「BxPccSDK」 DLL と動的リンクされており、具体的には以下の処理を行うプログラムである。

a)  「BxPccSDK」によってテセレーションされたポリゴンモデルを表示し、さらにこのモデルに対し回転させたり、分割数を変えたりする。

b)  patchesファイルの読み書き、cageファイルの読み込みを行う。ちなみに現時点では、(ダウンロードファイル内に) cageファイルの添付は行っていない。

なお「BxPccWxWithDx」はオープンソースで、ライセンスは「二条項BSDライセンス (2-clause BSD license)」である。
二条項BSDライセンスの例:
http://www.freebsd.org/copyright/freebsd-license.html

ただしCopyrightは以下の通りであり、また著作権者は EISHIN となる。

Copyright 1999-2013 EISHIN, All Rights Reserved.


4. BxPccSDK テクニカルガイド

本ページには技術的なことはあまり記述されていない。「BxPccSDK」に関する技術的な内容は、下記のリンクにある「BxPccSDK テクニカルガイド」という PDF ファイルに収めてある。




5. 開発/実行環境

5-1. OS/解像度

5-1-1. 稼動OS

Beziex Pcc をビルド&実行できるOSは Windows のみである。Windows のバージョンは「5-3. 開発/実行環境のダウンロード」の環境が動くものであれば大丈夫だと思うが、現在のところ Windows 7 SP1 32bit版 上でしか試していないのでご容赦願いたい。


5-1-2. 解像度

解像度は「1024×768」以上でなければならない(縦横ともこの解像度を下回らないこと)。また色数は「True Color (32 or 24ビット)」以上が望ましい。


5-2. 使用技術

Beziex Pccでは以下のような開発/実行環境を使用している。

1) C++ コンパイラ
「Microsoft Visual C++ 2010 SP1」を使用 。

2) wxWidgets
ユーザーインターフェイス開発/実行用環境で、C++で記述されている。クロスプラットフォームであるが、Beziex Pcc ではそれを特に意識してはいない。
なおwxWindowsは「wxWindowsライセンス」である。ちなみにこのライセンスはGPLライクとなっている。しかし「BxPccSDK」は当ライセンスの EXCEPTION NOTICE (例外事項) を行使し、(BxPccSDKを)クローズドソースのままとする(wxWindowsに手は加えていません)。

3) DirectX(Direct3D)
PC で 3D を表示させる際には、OpenGL もしくは DirectX の技術を用いることが多い。当初は OpenGL を使用するつもりでいて、その場合いまさら ver. 1.x は無いだろうと思い、ver. 2.1 で試してみた(当然、シェーダ言語も使う)。ところが私のPCが非力のためか、ナゼか良く落ちる。そこで枯れた技術を使うことに変更した。
この場合、OpenGL 1.x もしくは DirectX9 を使用するのが普通であろう。またWindowsは DirectX の方が親和性が高く、さらに OpenGL は ver.1 と ver.2 のAPIが違い過ぎるということで、DirectX9 の使用を決定した(今後、もっと高いバージョンのものに変えたいので)。

4) Boost C++ libraries
Boost とは、C++ に対し各種機能拡張を行うためのオープンソースライブラリである。Beziex Pccではその中で、Boost のスマートポインタ・テンプレート機能を多用している。
これは Beziex Pcc はエラー処理を「例外処理」で行っているからで、この場合 new でメモリ確保すると、例外処理により delete がスキップされてしまう可能性が高いためである。また只でさえ「delete 忘れ」によるメモリリークは簡単に発生してしまうので、スマートポインタは必須であろう。
なおスマートポインタは STL より Boost の方が優秀なので、これを使用した。


5-3. 開発/実行環境のダウンロード

5-3-1. Microsoft Visual C++ 2010 SP1

Beziex Pcc は
Microsoft Visual C++ 2010 Express Edition - 日本語用
を用いてビルドを行なった。このツールは無料でダウンロード可能である。具体的には下記のような操作でインストールすればよい。

1)  開発環境が Windows 7 で且つ、まったく「ISO仮想ドライブソフト」が入っていない時は、何らかの仮想ドライブソフトをインストールしなければならない。
例えば「WinCDEmu」というソフトを使う場合は、下記URLの「Download」ボタンを押し、インストーラをダウンロードする。そしてインストールを行うこと。
http://wincdemu.sysprogs.org/download/

2)  下記URL(直リンク)から "Visual Studio 2010 Express" の「オフライン(DVD)インストール版」をダウンロード。
http://go.microsoft.com/?linkid=9709975

3)  「VS2010ExpressJPN.iso」をダブルクリックして、マウントする。

4)  「setup.hta の実行」を行う。そして途中、「Visual C++ 2010 Express」を選択。

5)  「VS2010ExpressJPN.iso」のインストールを最後まで実行したら、下記URLで Service Pack 1 をダウンロードし、インストールする。
http://www.microsoft.com/ja-jp/download/details.aspx?id=23691

6)  インストール完了。

なお Beziex Pcc は、Visual C++ 2010 だけを用意してもビルドできない。以下の3種類のライブラリを追加ダウンロードする必要がある(有料版 Visual Studio 2010 には、DirectX SDK の方は入っている可能性があるが)。


5-3-2. wxWidgets 2.9.4

「wxWidgets 2.9.4」は以下のサイト
http://sourceforge.net/projects/wxwindows/files/2.9.4/
wxWidgets-2.9.4.zip
をクリックすることで、ダウンロード出来る(英文)。そしてその後は次の操作を行う。

1)  まず適当な場所に任意名のフォルダを作る(ここでは「wxWidgets」というフォルダを作ったものとする)。
そして「wxWidgets」フォルダの中に「wxWidgets-2.9.4.zip」の中身をすべてコピーする。

2)  「Microsoftl Visual C++ 2010 Express」を起動し、
「ファイル」→「開く」→「プロジェクト/ソリューション」で、
wxWidgets\build\msw\wx_vc9.sln
を開く。すると「Visual Studio 変換ウィザード」が起動するので、変換を行う。

3)  「スタートアップ プロジェクト」が、
wxregex
であることを確認。さらに
ソリューション構成を「Debug」、ソリューションプラットフォームを「Win32」
にして、「ソリューションのリビルド」を行う。

4)  Debug版のビルドに成功したら、続いて
ソリューション構成を「Release」
にして、「ソリューションのリビルド」を行う。なおビルドは必ず
「Debug」→「Release」
の順に行うこと。そうしないとなぜか、「Release版のライブラリファイル」の一部が削除されてしまうからである。
そしてRelease版のビルドも成功したら、一旦「Visual C++ 2010」を終了する。

5)  下記のフォルダを作成する。
C:\Program Files\wxWidgets\wxWidgets-2.9.4
そしてビルドを行った「wxWidgets」フォルダ内の
「include」フォルダ
「lib」フォルダ
を「C:\Program Files\wxWidgets\wxWidgets-2.9.4」にコピーする。

ところで、ここでは wxWidgets の環境を
C:\Program Files\wxWidgets\wxWidgets-2.9.4
に作ったが、もしそれ以外の場合は、「BxPccWxWithDx」のプロジェクトファイルの修正が必要である(詳細は後述)。


5-3-3. June 2010 DirectX SDK

「DirectX SDK」は以下のサイト
http://www.microsoft.com/en-us/download/details.aspx?id=6812
からダウンロードすればよい(英文)。「DXSDK_Jun10.exe」というファイルが
赤い「DOWNLOAD」ボタン
から取得出来るので、ここからダウンロードする。なおインストール先が
C:\Program Files\Microsoft DirectX SDK (June 2010)
以外の時は、「BxPccWxWithDx」のプロジェクトファイルの修正が必要である(詳細は後述)。


5-3-4. Boost 1.55.0

「Boost 1.55.0」は以下のサイト
http://sourceforge.net/projects/boost/files/boost-binaries/1.55.0-build2/
boost_1_55_0-msvc-10.0-32.exe
をクリックすることで、ダウンロード出来る(英文)。そしてその後は次の操作を行う。

1)  「boost_1_55_0-msvc-10.0-32.exe」を実行(インストール)する。ここでは、とりあえずデフォルトの
C:\local\boost_1_55_0
にインストールした場合について述べる。

2)  「C:\Program Files」内に「boost」というフォルダを作る。
そしてこの中に、「C:\local」の「boost_1_55_0」をフォルダごとコピーする。つまり
C:\Program Files\boost\boost_1_55_0
が出来る。なおコピー先がここ以外の時は、「BxPccWxWithDx」のプロジェクトファイルの修正が必要である(詳細は後述)。


5-4. ビルド時の注意事項

開発/実行環境のインストールが終わったら、本ページ下部にある「ダウンロード」リンクから「Beziex Pcc」のダウンロードを行う。その後、
Beziex_Pcc\BxPccWxWithDx\BxPcc_WxWithDx.sln
を開き、以下の操作を行う。

1)  「スタートアップ プロジェクト」を「BxPcc_WxWithDx」にする。

2)  「BxPcc_WxWithDx」の「プロパティ」を開き、
「構成プロパティ」→「デバッグ」→「作業ディレクトリ」
「..\Bin」に変更する(Release版、Debug版とも)。

また「wxWidgets」「DirectX SDK」「Boost」のインストール先(コピー先)が、「5-3. 開発/実行環境のダウンロード」と異なる場合は、下記の操作も行う。

3)  「BxPcc_WxWithDx」の「プロパティ」を開き、
「構成プロパティ」→「VC++ディレクトリ」→「インクルードディレクトリ」
「構成プロパティ」→「VC++ディレクトリ」→「ライブラリディレクトリ」
を実際のインストール先に変更する(Release版、Debug版とも)。

4)  以下のプロジェクト
BxPccDx
BxPccFile
BxPccMan
BxPccMdlDt
BxPccUiUtil
BxPccWxDxSub
の「プロパティ」を開き、
「構成プロパティ」→「VC++ディレクトリ」→「インクルードディレクトリ」
を実際のインストール先に変更する(Release版、Debug版とも)。

後は、ソリューション構成を「Release」もしくは「Debug」にして、ビルドを行えば良い。なお実行ファイルは下記の場所に作成される。
Relase版: Beziex_Pcc\BxPccWxWithDx\Bin\BxPcc_WxWithDx.exe
Debug版: Beziex_Pcc\BxPccWxWithDx\Bin\BxPcc_WxWithDx_D.exe


6. BxPcc_WxWithDx(_D).exe の使い方

BxPcc_WxWithDx(_D).exe の使用方法は、以下の通りである。


6-1. 「全般」タブ

6-1-1. サンプル・オブジェクト

1) リストボックス
サンプルの中から表示したい形状を選択する。

2) 「サンプル表示」ボタン
通常はディセーブルであるが、後述する「カスタム・オブジェクト」の読み込みを行うとイネーブルになる。その時点でこのボタンを押すと、リストボックスのサンプルが表示される。


6-1-2. カスタム・オブジェクト

1) 「読み込み」ボタン
「pachesファイル」「cageファイル」の読み込みを行う。なおダウンロードファイルに添付されているカスタム・オブジェクト(ファイル)は、
Beziex_Pcc\_demo\mikuA.patches
のみである(cageファイルは無し)。

2) 「書き出し」ボタン
「pachesファイル」の書き出しを行う。


6-1-3. 表示種別

1) 「シェーディング」ラジオボタン
形状をシェーディング表示にする。

2) 「ワイヤーフレーム」ラジオボタン
形状をワイヤーフレーム表示にする。なおポリゴンの辺の色は、以下のような意味を持つ。

青: ケージから変換された曲面の境界曲線であり、且つ境界が折れ曲がっているか、片方に面が無い場合
黄: ケージから変換された曲面の境界曲線であり、且つ境界が滑らかに繋がっている場合
赤: 境界曲線では無いポリゴン辺

ただし(後述する)分割数が 1 または 2 の場合は、プログラムの都合上、すべて「赤」になる。
ちなみに「境界を折れ曲げる」ためには、「"BxPccSDK"のAPIをコールしているプログラム」(例:BxPccWxWithDx)上から、(BxPccSDKに対し)明示的に設定してやれば良い。しかし「境界が折れ曲げる」のはそれだけでは無く、「BxPccSDK」内部で "滑らかに繋げたまま曲面化するのは困難" と判断された時も、自動的に「折れ曲がった」状態に設定されることになる。


6-1-4. 「ケージを表示」チェックボックス

ON にすると、ケージ(Catmull-Clark サブディビジョンの元ポリゴン)を表示する。なおケージの色は、以下のような意味を持つ。
緑: 境界が折れ曲がっているか、片方に面が無い場合
白: 境界が滑らかに繋がっている場合


6-1-5. 分割数

1) 「初期分割数」ボタン
各オブジェクトのデフォルト分割数に戻す。なおこのデフォルト分割数は、各オブジェクトの頂点数によって決まる。

2) スライダ&スピンコントロール
オブジェクトの分割数に変更する。ちなみに最大分割数は、各オブジェクトの頂点数によって決まっており、頂点数がごく少ない場合は 64 である。


6-2. 「回転等」タブ

6-2-1. 「回転」

1) 「横スライダ」
Y軸(縦軸)まわりに回転させる。動かすと「縦スライダ」、「Z軸回転」スライダは中心位置に戻る。

2) 「縦スライダ」
X軸(横軸)まわりに回転させる。動かすと「横スライダ」、「Z軸回転」スライダは中心位置に戻る。

3) 「Z軸回転」スライダ
Z軸(中心軸)まわりに回転させる。動かすと「縦スライダ」、「横スライダ」は中心位置に戻る。

4) 「初期方向」ボタン
最初の向きに戻す。


6-2-2. 「移動」

1) 「横スライダ」
X方向(横方向)に移動する。

2) 「縦スライダ」
Y方向(縦方向)に移動する。

3) 「初期位置」ボタン
最初の位置に戻す。


6-2-3. 「スケール」

1) 「スライダ」
拡大縮小を行なう。

2) 「初期スケール」ボタン
最初の大きさに戻す。


7. 履歴

7-1. 履歴 (プログラム)

2013/06/26
v0.5.0 プレリリース。

2013/07/02
v0.5.1 「BxPccSDK テクニカルガイド」を付属させた。

2013/10/07
v0.5.1c バグをいくつか修正。

2013/10/09
v0.5.1d バグをいくつか修正。

2013/10/14
v0.5.1e バグをいくつか修正。

2013/12/28
v0.5.1f Boostを1.55.0にバージョンアップ。


7-2. 履歴 (BxPccSDK テクニカルガイド)

2013/07/02
v0.5.1 初版。

2013/07/04
v0.5.1a 誤字を修正(ダウンロードファイル内の「BxPccSDK テクニカルガイド」は、古いままです。ゴメンナサイ)。

2013/07/11
v0.5.1b 『6-5-3. 頂点上の微分値の向きの補正』『6-6-3. 「ソース境界横断導関数」の補正』に追記(ダウンロードファイル内の「BxPccSDK テクニカルガイド」は、無修正)。

2014/08/31
v0.5.1c 『9. N 角ケージポリゴンの改良』を追記。
(ダウンロードファイル内の「BxPccSDK テクニカルガイド」は、無修正)


8. ライセンス

8-1. 「BxPccSDK」のライセンス

上で述べた通り「BxPccSDK」はクローズド・ソースのライブラリ(DLLタイプ)である。この「BxPccSDK」のライセンスは下記の通りとする。

Copyright 1999-2013 EISHIN, All Rights Reserved.

本ソフトウェアは、以下の条件を満たす場合に限り、使用および再配布を許可する。

1)  本ソフトウェアの使用は、非商用に限定する。
2)  再配布する場合、配布物に付属するドキュメント等に、上記の著作権表示、本条件一覧、および下記免責条項を含めなければならない。

本ソフトウェアは、著作権者や寄与者によって現状のまま提供されており、明示黙示を問わず、特定の目的に対する適合性に関する暗黙の保証や、それに限定されない如何なる保証もなされない。
また著作権者や寄与者は、事由の如何や損害発生の原因如何を問わず、且つ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、そして仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断、あるいはそれに限定されない)直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとする。


8-2. 「BxPccWxWithDx」のライセンス

前述の通り、「BxPccWxWithDx」はオープンソースで、ライセンスは「二条項BSDライセンス (2-clause BSD license)」である。


9. ダウンロード



[参考]  ダウンロードファイルは "ZIP形式" でアーカイブされている。これをNTFSフォーマットのディスクにダウンロードした場合は、まず最初にZIPファイルを右クリックして「プロパティ」メニューを選択し、「プロパティ」ダイアログを表示させる。そしてダイアログの「全般」タブ内の「ブロックの解除」ボタンをクリックすると良い(その後、「OK」もしくは「適用」ボタンをクリックすること)。
これにより "ZIP解凍時" や "一番最初にslnファイルを開く時" に余計なメッセージが出なくなるので、わずらわしさが減ることになる。
なおFAT32フォーマットのディスクにダウンロードした場合は、この操作は不要である。




(C)1999-2016 EISHIN, All Rights Reserved.