Gregory Igehy

Dancing at hemisphere coordinate

Notes of GPU Tessellation

GPU Pro

Notes of Houdini Fracture

Good

Houdini Procedural Destruction Workflow Tutorial, jcmpmjmp

  • 拘束に名前をつける
  • SOP Solver を使って, 一定上の力とトルクで拘束を無効にする
  • 内部の解像度を上げている
  • 高解像度と低解像度をマッピングさせている
  • shelf の debris を利用
Applied Houdini - Introduction to rigid body simulation! Steven Knipping
  • https://vimeo.com/185820853
  • UserList : https://vimeo.com/user10927826
  • Packed Geometry について
  • Packed Geometry と剛体シミュレーションについて
  • 剛体シミュレーション Bullet は Convex を使う
  • 行列を自分で代入して動かす
  • ボロノイ Fracture の仕組み
  • Volume VOP をした後に Scatter する
  • ボロノイのかけらに対して for でループする
Houdini fracture
  • Houdini 公式
  • Shelf で RBD Object -> MakeBreakable で Voronoi Fracture Configure Object を作る
  • Shelf の Model Shatter -> RBD Object -> RBD Fractured Object -> RBD Glued の例


ART DIRECTING YOUR DESTRUCTION IN HOUDINI, fifty-50.uk
VMT 009 - HOUDINI - How To Control Fracture Simulations

  • shatter
  • RBD Fractured Object
  • multi solver
  • 特定の部分だけ active にする
Boolean or not Boolean: Fun with Fracturing | Steven Knipping | Houdini HIVE at SIGGRAPH 2017
  • (A)
    • Boolean Union で豚と球を結合
    • Boolean Shatter で Mountain 入りの平面で切る
  • (B)
    • 細かい破片も作る
    • 決めた断面を中心に, 点を複製してノイズを加えた断面を作る
    • 断面の数が少ないと, 断面がばれやすい
  • (C)
    • 豚付近の平面の断面に色をつける
    • そこに Scatter で点を置いて, そこにノイズ入りの球を置く
    • それを Boolean Shatter の要素として使う
  • (D)
    • 豚を球で近似して, それに Mountain を適用した岩で Shatter する
    • 脆いものが爆発で壊れたような 細かいぎざぎざができる, 重い
  • Sphere -> Mountain (Worley Noise)で岩っぽい形になる
  • vdbtospheres で球で近似して Mountain をかけて, Boolean の Shutter で分解する
  • 壁を少しずつかじるのを, Solver 内で断面を Scatter を繰り返して Boolean で引く
  • Box を Mountain の平面で再帰的に割る ( for loop 内で, for each )
[Houdini] Font Crumble with Smoke and Debris Shards
TRANSFER HIGH RES GEO TO LOW RES SIM
  • Voronoi Fracture Points を使って, 部分的に細かく割る
  • Voronoi Fracture Node をコピーして, High の方は Interior を設定する
  • High の方に結果は DOP Import を使って反映させる
Houdini Voroni Fracture RnD, Toms VFX
  • 短い動画
  • Impact Radius などのパラメータ変更


Realtime VFX for Games (Mike Lyndon) / Houdini ILLUME Webinar

Normal

Houdini - Unity - Rigid Body Fracturing Pipeline, Jona Marklund
  • Fatman という頭が大きい人型モデルを壊す例
  • 頂点カラーで density に色をつけて, 破片のサイズを調整

Houdini to UE4
  • UE4 の SunTemple の像を壊す例
  • 頂点カラーの density で破片サイズを調整



Procedural Fracturing in Houdini, Duane Falconer
  • ボックスと交差する球周りを細かく割る例
  • Cookie ノードの Intersect 後に, FogVolume -> Scatter -> Voronoi Fracture
  • https://vimeo.com/30006381
Houdini RBD RnD - Destruction Overview Technologies
  • いろんな割り方を短く 1:30 で紹介
  • 具体的な手順の説明は少ない

Not good

Houdini to Unity. Extract Objects Asset. Paul Geraskin
  • 球を破壊する例
  • Shelf Tool の Shatter, Glued Packed Object を利用


Houdini Tutorial - Fracture Objects, Justin Braun
  • 古い, 直方体を Shelf の Shatter で壊す例


Houdini Tutorial - Rigid Body Destruction Creation, FX HIVE
  • 古い, 柱を壊す例
  • Edge Cusp でハードエッジ化, 破壊時にパーティクルを発生させる


Advanced fracture Tutoria
Destruction in Houdini - Part 001/003 FX HIVE
  • 古い, 柱を球で破壊する例
  • Debris も出ている







Notes of Houdini

UE4

UE4 vertex animation

Notes of flipbook shaders

Notes of 2d Fluid simluation

the Little Grashopper

Notes of postprocess with stencil in Unity

Unity 5.6.X のグラフィックスの雑記

OnRenderImage(src,dst) で送られる引数

  • Forward LDR, Deferred LDR
    • src : ARGB_32, depth 24bit with stencil
    • dst : null
  • Forward HDR, Deferred HDR
    • src : ARGBHalf, depth 24bit with stencil
    • dst : null

ポストエフェクトでデフォルトのデプスバッファで EarlyZ は使えるか ?

  • Forward : OK
  • Deferred : NG??

ポストエフェクトでデフォルトのデプスバッファでステンシルテストは使えるか?

  • Forward : NG?
  • Deferred : NG?
  • 自分で RenderTexture (Color + Depth24bit)を用意してそれを使った場合は大丈夫

Forward の CameraDepthNormalTexture について

  • 中身は頂点シェーダで計算した法線
  • 従って, 法線マップが適用されていないのもの
// UnityCG.cginc
#define COMPUTE_VIEW_NORMAL normalize(mul((float3x3)UNITY_MATRIX_IT_MV, v.normal))


// AmbientOccusion.cginc
// https://github.com/Unity-Technologies/PostProcessing/blob/v1/PostProcessing/Resources/Shaders/AmbientOcclusion.cginc
sampler2D _CameraDepthNormalsTexture;

// Depth/normal sampling functions
float SampleDepth(float2 uv)
{
#if defined(SOURCE_GBUFFER) || defined(SOURCE_DEPTH)
    float d = LinearizeDepth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv));
#else
    float4 cdn = tex2D(_CameraDepthNormalsTexture, uv);
    float d = DecodeFloatRG(cdn.zw);
#endif
    return d * _ProjectionParams.z + CheckBounds(uv, d);
}

float3 SampleNormal(float2 uv)
{
#if defined(SOURCE_GBUFFER)
    float3 norm = tex2D(_CameraGBufferTexture2, uv).xyz;
    norm = norm * 2 - any(norm); // gets (0,0,0) when norm == 0
    norm = mul((float3x3)unity_WorldToCamera, norm);
#if defined(VALIDATE_NORMALS)
    norm = normalize(norm);
#endif
    return norm;
#else
    float4 cdn = tex2D(_CameraDepthNormalsTexture, uv);
    return DecodeViewNormalStereo(cdn) * float3(1.0, 1.0, -1.0);
#endif
}

float SampleDepthNormal(float2 uv, out float3 normal)
{
#if defined(SOURCE_GBUFFER) || defined(SOURCE_DEPTH)
    normal = SampleNormal(uv);
    return SampleDepth(uv);
#else
    float4 cdn = tex2D(_CameraDepthNormalsTexture, uv);
    normal = DecodeViewNormalStereo(cdn) * float3(1.0, 1.0, -1.0);
    float d = DecodeFloatRG(cdn.zw);
    return d * _ProjectionParams.z + CheckBounds(uv, d);
#endif
}
// http://unlicense.org/

float4 cdn            = tex2D( _CameraDepthNormalsTexture, uv );
float3 view_normal    = DecodeViewNormalStereo( cdn ) * float3( 1.0f, 1.0f, - 1.0f );
float4 world_normal4  = mul( unity_CameraToWorld, float4( view_normal, 0.0 ) );
float3 world_normal   = normalize( world_normal4.rgb );

float  abs_view_pos_z = DecodeFloatRG( cdn.zw );
float  view_pos_z     = ( - abs_view_pos_z );