本日は Unity の技術調査枠です。
前回 ParaView で作成したデータを Blender に取り込みました。
bluebirdofoz.hatenablog.com
今回は更に、このデータを Unity 上で可視化します。
Unity ではx3d形式のジオメトリデータをそのまま3Dデータとして取り込むことはできません。
よって一度、Blender でFBX形式のファイルでエクスポートします。

Unity に取り込みます。しかし、テクスチャがないので灰色のオブジェクトとして取り込まれます。

Blender 上での見た目と同じようにするためには頂点カラーを表現する必要があります。
以下の記事を参考に頂点シェーダを作成します。
nn-hokuson.hatenablog.com
記事にある VertexColor.shader を作成し、マテリアルに反映すると以下の通り、色が付きました。

Hierarchy に配置すると、以下のようにシーン上で確認できます。

しかし、よくよく見るとポリゴンがおかしいですね。
どうも面の裏表が正しくないため、一部カラーが描画されていない部分があるようです。
以下を参考にシェーダを変更し、裏表どちらでもカラーが描画されるようにします。
nn-hokuson.hatenablog.com
カリングについて以前、空間に窓を作るシェーダを作成するときに学びました。それを利用します。
VertexColor.shader のコードは以下のようになります。
Shader "Custom/VertexColor" {
SubShader{
Tags{ "RenderType" = "Opaque" }
LOD 200
Cull off
CGPROGRAM
#pragma surface surf Lambert vertex:vert
#pragma target 3.0
struct Input {
float4 vertColor;
};
void vert(inout appdata_full v, out Input o) {
UNITY_INITIALIZE_OUTPUT(Input, o);
o.vertColor = v.color;
}
void surf(Input IN, inout SurfaceOutput o) {
o.Albedo = IN.vertColor.rgb;
}
ENDCG
}
FallBack "Diffuse"
}シェーダを反映すると、以下のようにカラーが表示されました。

ジオメトリデータの Unity への取り込みはこれで成功です。