はじめに
Houdiniを利用した旗の作成
必要なパラメータの洗い出し
- 柱の高さ (Height )
- 旗の大きさ (Field Scale X, Field Scale Z)
- 柱のてっぺんのすき間 (Field Margin Top)
パラメータを定義し、モデルの形状として利用したい場合、
HoudiniではSubnetworkを利用するのが定番です。
Subnetworkはフォルダみたいなもので、内部にノードを持つことができます。
Subnetworkの作成
Subnetworkの名前はFlagにします。
Subnetworkへパラメータ登録
Subnetworkの歯車アイコンをクリックします。
Edit Parameter Interfaces… を選択します。
以下のようなパラメータ編集画面が出現します。
パラメータ追加方法
左側のリストからFloatを選択した状態で矢印をクリックすることでFloatパラメータ(実数を扱うパラメータ)を追加することができます。
画面右側からはパラメータの範囲やパラメータ初期値を設定できます。
以下はパラメータ名がheight、ウィンドウ上に表示されるラベルがHeight、
値の範囲 0 ~ 10、初期値3のFloatパラメータを追加する手順をキャプチャしたGIF動画です。
追加するパラメータ
今回は height, field_margin_top, field_size_x, field_size_yを定義します。
今回は以下のような数値を設定しました。
パラメータの設定が終わったらSubnetworkを選択した状態でIキーを押し、中に入ります。
今回作成したSubnetworkの中身
柱を作成する
Boxノード
ch(“../height”)について
Transformノード
Groupノード
旗を作成する
Gridノード
旗をそのまま重ねると位置がずれてしまう
旗の位置修正
Gridノード(動かす前の旗)
旗のX方向の位置を合わせる
ch("../field_size_x")/2
柱の高さに合わせる
ch("../height")
旗のY方向の位置を合わせる
-ch("../field_size_y")/2
旗のマージンだけ動かす
-ch("../field_margin_top")
グループ設定
OBJ出力
Unity上の作業
シェーダー・マテリアルの設定
Shader "Unlit/UnlitFlag"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Color ("Color", Color) = (1, 1, 1, 1) _WaveSpeed ("WaveSpeed", Float) = 8.0 _WaveFreq("Wave Frequency", Float) = 1.0 _WaveAmp("Wave Amplitude", Float) = 0.25 } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Cull Off Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_fog #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; #define PI 3.14159265358979 sampler2D _MainTex; float4 _Color; float4 _MainTex_ST; float _WaveFreq; float _WaveSpeed; float _WaveAmp; v2f vert (appdata v) { v2f o; float wave = sin(v.vertex.x * _WaveFreq * 2.0 * PI + _Time.y * _WaveSpeed) * _WaveAmp; // sin wave wave *= v.vertex.x; v.vertex.z += wave; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv) * _Color; UNITY_APPLY_FOG(i.fogCoord, col); return col; } ENDCG } }}
STYLYにPrefabをアップロードする方法
STYLYにPrefabをアップロードする方法については下記リンクをご覧ください

































