UnityのShader ScreenSpaceで、イロイロやっておられる方のあれです。スバラシ
なかなか理解出来てないですがメモしておきます
Houdini Tutorial 01 | Plexus from Danil Krivoruchko on Vimeo.
Scene source:
https://dl.dropboxusercontent.com/u/26815/_tutorials/01/houdini_01_plexus.hip
Hey everyone!
After about year and a half after I switched to Houdini from Autodesk Softimage I decided to create series of tutorials with a things I`ve learned so far.
This one is about making Plexus-like effect in Houdini. I hope you`ll find it useful.
And sorry for my English, I`ll try to improve it over time =)
The scene includes more optimized substitute of FOREACH node so now it runs 75 times faster.
SCENE UPDATE:
- new replacement of Plex+Clean pair of nodes is about 2 times faster for big point clouds.
- one more option for splitting polygons added - this one is almost 10 times faster than vex code.
いまだ、3Dの回転が良くわかってない TERAです
エフェクト用のテクスチャを制作するとき、
思い通りに歪ませる事って難しいですね。
機械的にやろうとするとなおさらです。
ひさびさに Substance Designer 5 を
立ち上げてみました。
Verが 5になって、3回目の立ち上げです。
VectorMapが搭載され、
思うように歪ませる事が出来ると思ったのですが、
思うように制御出来ません
VectorMapって RGで処理するん 違うの?
Rを入れると XY 移動するんだけど orz
Normal使うの? って訳が分かりませんでした。
調べるのもおっくうになって来たので、
同じく Ver 5 で搭載された PixelProcessor を使って
制御出来る物を組んでみました
Substance Designer5
グレースケール画像を利用し
画像を指定方向 x,y に向けて歪ませる
組み方
上部に歪ませるカラーマップ、
下に歪みの元となるグレースケールの HeightMapを用意します
ピクセルプロセッサー内の処理です。 あらかじめ二つの変数を用意しておきます。
・ X,Yどちらに移動するかのスイッチ
・ 移動量の調整する値
グレースケール座標の 値を取得
その値に、調整量を掛ける
調整量を掛けた物で、カラー画像を再サンプル
以上です :p
イロイロ凝った事が出来そうですね〜。楽しからずや
ども、大腸がん検診にひっかかって、
尻を掘られたTERAです。
まあ、尻を掘られただけで、
特に問題はなかったのですが、健康大事w
というわけで、
Houdiniネタです。
3D系のツールは何でも
ノードになって来た今日この頃、
便利とは思うのですが、
コードの方が便利なことが多々あります。
というわけで、Houdiniでは、
wrangleノードというのが用意されてます。
なんというか、vop sopが
書いてくれるコードを自分で書けみたいな。
実行速度も、かなり早いようです。
で、調べてみたのですが、
新たな VEX Expressionを覚えないとダメっぽい
チュートリアルを確認すると
c/c++やRenderman Shading Language
と似てるっては書いてありますね。
これは、メンドクサイと思っていたのですが、
どうやらこれ、VertexShaderとほぼ、同じ考え。
入って来たポイント事の処理なようです
Attributeもがんがん加えられるので楽チンチンです
というわけで、平面を太らせる ノードを作ってみました
vector vec,vecY = set(0,1,0),v1,v2; i@fID = (@ptnum - 1) % @Npt; i@bID = (@ptnum + 1) % @Npt; v1 = normalize(point(@OpInput1,"P",i@fID) - @P); v2 = normalize(point(@OpInput1,"P",i@bID) - @P); vec = v1 + v2; if(length(vec) <= 0.001) { vec = cross(v1,vecY); @N = vec; } else { if(dot(cross(v1,v2),vecY) > 0) vec *= -1; v1 = normalize(cross(v1,vecY)); normalize(vec); @N = vec / abs(dot(v1,vec)); } @P += @N * ch("width");
Point Wrangle ノードに "width" の
floatパラメータを追加してます
条件がめんどくさかったので
(@ptnum - 1) % @Npt
を使ったけど下策だとおもわれ
直線に並んだ時の処理が無かったため、
慌てて付け加え
頂点IDに依存してるので、あまり使い勝手は良くないですが、
まあ、手始めの第一歩ということで。
VR勉強会に行って来た オキュ欲しい :p