はじめに
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をアップロードする方法については下記リンクをご覧ください