デジカメ購入

今まで使ってきたデジカメ(Sony DSC-RX100)が壊れたため
新しいデジカメを購入した。

買ったのは先日発売されたばかりのCanon PowerShot G7 X MarkII。

2016-04-23_081709

コンパクトデジカメだが、1.0型サイズ2,010万画素のセンサーを積んでいる。
持ち運びを優先するので、基本的にこのサイズのカメラしか買わない。

 

早速、朝のエルを撮ってみた。

IMG_0013 IMG_0010

毛のディテールもかなりはっきり出ており
背景のボケ味もいい感じ。

噂通り良いカメラだった。

いい買い物をした。

キネシス

以前ブログに書いたキーボード「キネシス」
http://www.serenelight3d.com/blog55/?p=1777

 

自分の場合は通常のキーボードを使っているときに
右手首の痛みがひどくなったため、手首に負担をかけない
エルゴノミクスキーボードを色々試した結果
最後にキネシスに落ち着いた経緯がある。

本日、Houdiniのトレイナー向けのセミナーがあり
講師の方(Houdiniを開発された方)もキネシスを使っているとの話があった。

キネシスでHoudiniを使ってる人がいるのが今日わかって
妙な共感を覚えた(笑)

ただ自分の場合、キネシスに完全対応できたわけではない。
キネシスだとタイプミスも結構あるし、タイプのスピードは以前より遅くなった。
しかし手首の痛みは全くなくなったので今後も使っていく。

ついでに宣伝

Houdiniの書籍の報告ついでに
ちょっと昔に書いたC言語の本の宣伝。

 

「初級C言語 やさしいC」

2016-03-17_155749

 

ポインタと配列の章を担当しました。
こちらの本は、書店やAmazonで一般購入可能です。

大きな書店に行けば、一冊くらいは棚に並んでいる可能性があります(笑)

教科書「Houdini SOP&VEX編」完成

 

教科書「Houdini SOP&VEX編」がついに完成した。

 

2016-03-20_084602

 

1年がかりで執筆していた教科書。
最終的に全522ページ、オールカラー、A4サイズの書籍となった。
持った感じは辞書レベルの重さ。

2016-03-17_144018

2016-03-17_144537  2016-03-17_144154 2016-03-17_144220

 

教科書タイトルにもあるように、この書籍は全編オールSOP&VEXの内容で構成されており
一貫して「プロシージャル」というテーマに沿った内容になっている。
書籍ではSOP4割、VEX6割程度の内容になっている。

また、この書籍は学校で使用する教科書になるため、Houdiniの本質を理解するためにも
シェルフは極力使用せず、オペレーターを一から作成していくスタイルをとっている。

さらに今回、アルゴリズムを解説し、それを実際にVEXを使って実装していく章なども盛り込んだ。
VEXを使用する上で重要になってくる数学理論にもかなりのページを割いて解説している。

2016-03-17_1443372016-03-17_1442372016-03-17_1442512016-03-17_144304

 

SOPを理解するためには本の中でいかに良質なチュートリアルを揃えるかが
重要になってくるため、チュートリアルに関しては今回かなりの分量を準備した。
(計17チュートリアル)

2016-03-17_1441342016-03-21_070259 2016-03-17_144121  2016-03-17_144406 2016-03-17_144505 2016-03-17_1444492016-03-17_1440402016-03-17_151444

 

さらにVEXやSOPの章では使用頻度の高いオペレーターや関数をカテゴリー別に分けて解説した。
その際、わかりやすいサンプルコードやサンプルネットワークを付けて解説するように心がけた。

2016-03-17_1453182016-03-17_144357

 

今回は26部しか作らないらしいが(自分のクラスの学生分)
需要があれば、いずれ外部向けにも出版したいと考えている。

ちなみに、この教科書は4月から日本電子専門学校の
CG研究科2年生の授業で使用していきます。

進級発表会

学科の進級発表会が行われました。

今年は例年以上にプレゼンテーションの質が高かったように
感じられました。

発表者は春休み中に練習を積み重ねて本番に臨みました。

DSC_1810 DSC_1822 DSC_1834

 

投票により上位3名にクリスタルトロフィーが贈られました。
受賞者の皆さんおめでとうございます!

DSC05734 DSC_1890 DSC05743

トロフィーが好評でしたので、来年は全く違うデザインのトロフィーを
用意しようと思います。
来年はブリリアンカットのトロフィーとか面白いかも…

CG研究科作品発表会

3月10日(木)
日本電子専門学校9号館地下1階 メディアホール
10時~12時30分(入場自由)

2016-03-07_054734

お誘い合わせの上、ぜひお越しください。

Houdini L-system

最近またHouidiniのL-systemを触っている。

L-systemを使えば再帰ループよって様々な植物モデルを
文字コードの羅列で作成できる。

文字コードには以下の様なものがある。

F 枝を伸ばす
& 枝のX軸回転
/ 枝のY軸回転
+ 枝のZ軸回転
“ 枝の伸長率
! 枝の太さスケール
; 枝の回転スケール
T 重力
[] 新しい枝に分岐
~ 枝のランダム回転

 

これらを再帰ループのメカニズムの中で使用していくと
様々な様相の木々が作成できる。

今回L-systemを使って様々なテストをしてみた。
まずはスタンダートな木の作成。

lsystem03

 

次にタイプの異なる木を作ってみる。
まずは幹、太枝を生成して…

2016-02-07_195931

 

さらに小枝を生やして…

2016-02-07_195953

 

最後にランダム要素を追加してメッシュを生成。

2016-02-07_200005

 

さらにL-systemの文字コードを細かく調整。

lsystem02

 

Houdiniを使えばコピースタンプを使って
バリエーション増やすことも簡単。
これぞプロシージャル。

lsystem01

Houdini -> Maya Vray

よく忘れるので、HoudiniのデータをMayaへエクスポートして
VRayでレンダリングするやり方を書いておく。

 

1.RopOutputDriverなどでジオメトリを連番OBJファイルへエクスポート

 

2.以下のバッチを実行。

for %%T in (*.obj) do ply2vrmesh “%%T” “%%~nT.vrmesh”

これで連番objファイルを連番のVRayメッシュへコンバートしてくれる。
Alembicであれば.objの部分を.abcへ書き換える。
(ちなみにbgeoファイルはエラーが出てコンバート不可だった)

ply2vrmeshはVRayに付属するコンバーター。
事前に環境変数のパスを通しておくこと。

 

3.MayaからVRayProxyを作成し、2で吐き出したvrmeshを読み込む。
その際ファイル名を次のように設定するとパディング4の連番vrmeshを読み込んでくれる。

パス\ファイル名.<frame04>.vrmesh

2016-02-01_055445

2016-02-01_060358

 

4.VRayでレンダリング
vein

Houdini 血管アニメーション ver2

以前作った血管アニメーションのバージョン2。

今回は全てをSOPのWrangleで実装しておりDOPは使用していない。
通常POPを使うような部分もSolver SOPで代用している。

Wrangleにおけるポイントクラウドの扱いや、
動的なグループの組み換えがわかるようになれば
SOPでできることが格段に増えると実感した。

 

Houdini Vein Test ver02 from shuichi sakuma on Vimeo.

 

血管が広がる開始点は自由に設定でき、かなりのパラメータをUI上に公開してるので
パラメータからWangleのVEXが制御できるようになっている。

Houdini AttributeWrangleについて

Houdini備忘録

AttributeWrangleについて

2016-01-24_213346

 

AttributeWrangleをダブルクリックして中に入るとAttributeVopがある。

2016-01-24_213358

 

さらにAttributeVopをダブルクリックして中に入るとSnippetがあるが、
AttributeWrangleに書いたコードは実際にはこのSnippetに記述されるように
なっている。

2016-01-24_213437

2016-01-24_213500

肝要なのはこのSnippetがCVEXコンテキストで実行され
特定のコンテキスト内で実行されるわけではないこと。
よって、以下のグループ系関数を
AttributeWrangleに記述するとエラーとなる。

// pop,sopコンテキストのみで有効な関数
void addgroup(string group_name, int point_number)
int ingroup(string group_name, int point_number)
void newgroup(string group_name)
void removegroup(string group_name, int point_number)

 

 

ついでにCVEXコンテキストで有効なグループ系の関数をまとめてみた。

// stringには0-10や@Cd.x>0.5のような一時的なグループを使用することができる
// 空の文字列の場合すべてのポイント(プリミティブ)に相当する
int [] expandpointgroup(string filename, string groupname)
int [] expandpointgroup(int input, string groupname)
int [] expandprimgroup(string filename, string groupname)
int [] expandprimgroup(int input, string groupname)

// ポイント番号で指定したポイントが指定したグループ内にあれば1を返す
int inpointgroup(string filename, string groupname, int pointnum)
int inpointgroup(int input, string groupname, int pointnum)
int inprimgroup(string filename, string groupname, int primnum)
int inprimgroup(int input, string groupname, int primnum)

// ジオメトリの指定したグループ内のポイントの数を返す
int npointsgroup(string filename, string groupname)
int npointsgroup(int input, string groupname)

// ジオメトリの指定したグループ内のプリミティブの数を返す
int nprimitives(string filename, string groupname)
int nprimitives(int input, string groupname)

// 指定グループにポイント(プリミティブ)を含める
// その際valueには0以外の値を設定する
// 0を設定した場合にはグループからの除外を意味する
// グループが存在しなかった場合は【グループが作成される】
int setpointgroup(int geohandle, string name, int pt, int value, string mode=”set”)
int setprimgroup(int geohandle, string name, int prim, int value, string mode=”set”)

// 現在のポイント/エッジ/プリミティブ/パーティクルが指定グループ内にあるかは以下のやり方で判定可能
if(@group_グループ名 == 1)

// グループへの追加、グループからの解除
@group_グループ名 = 1;// グループへエレメントを追加
@group_グループ名 = 0;// グループからエレメントを削除