85284


### 質問内容

Blender でメッシュを作成し、FBX にエクスポート → Unity にインポート。  
その後、Unity 内で **Shader を用いてメッシュの頂点を移動** したところ、  
メッシュのそれぞれの面がつながっておらず、分離してしまいました( **画像の右** の球)。

**エクスポート** および **インポート** の際に、何か必要な設定があるのでしょうか？

メッシュパーティクルに使用する想定でおります。

[![画像の説明をここに入力](https://i.stack.imgur.com/ZUro4.png)](https://i.stack.imgur.com/ZUro4.png)

### 問題の切り分けで行ったこと

Unity の Hierarchy ウインドウから **3D Object** -> **Sphere** の手順で作成したオブジェクトに対し、  
**同じ Shader(Material) を適用** したところ、面が分離せずに繋がったまま頂点が移動しました( **画像の左** の球)。

また、「Unity ゲームエフェクトマスターガイド」という書籍に付属していたメッシュ(FBX)を使用した場合も、想定通り、面が分離しなかったため、
**Blender から FBX エクスポートしたメッシュ** に問題があると見ています。

#### ■ Blender FBX Export 手順

  1. ObjectMode -> Add -> Mesh -> UV Sphere
  2. File -> Export -> FBX(.fbx) 
    * Include: Object Types: **Mesh のみ** 選択
    * Transform: **Apply Transform** にチェック
    * Export FBX

### 環境

  * MacOS 10.15.7
  * Blender 2.93.7
  * Unity 2019.4.11f

### 画像の例の頂点移動に使用している Shader

[code]

    Shader "Custom/VertexTest"
    {
        Properties
        {
            _MainTex ("Texture", 2D) = "white" {}
        }
        SubShader
        {
            Tags { "RenderType"="Opaque" }
            LOD 100
    
            Pass
            {
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
    
                #include "UnityCG.cginc"
    
                struct appdata
                {
                    float4 vertex : POSITION;
                    float3 normal : NORMAL;
                    float2 uv : TEXCOORD0;
                };
    
                struct v2f
                {
                    float2 uv : TEXCOORD0;
                    float4 vertex : SV_POSITION;
                };
    
                sampler2D _MainTex;
                float4 _MainTex_ST;
    
                v2f vert (appdata v)
                {
                    v2f o;
    
                    // 頂点を法線ベクトルの方向に移動
                    float4 vpos = v.vertex;
                    vpos.xyz += v.normal * 2.0f;
                    o.vertex = UnityObjectToClipPos(vpos);
    
                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                    return o;
                }
    
                fixed4 frag (v2f i) : SV_Target
                {
                    return tex2D(_MainTex, i.uv);
                }
                ENDCG
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2021-12-22T05:54:03.707
85271
2022-01-04T05:01:55.237
2021-12-22T06:16:01.987
3060
47940
question
unity3d blender
Blender から Unity にインポートしたメッシュ(FBX)が、頂点アニメーションした際に分離してしまう


法線の向きの問題ではないですか。

「通常は」三角形ポリゴンの法線は、面に垂直に交わるベクトルで設定されます。

そして球のモデルは、実際は球ではなく、「細かい三角形ポリゴンの集合体」です。  
ですので、上記のように法線を求めているのであれば、面によって法線は違います。  
同じ座標にある頂点でも、どの面を構成する頂点かによって法線が違ってきますし、法線の方向に移動すれば、それぞれが違う位置に移動してしまいます。

さて、法線は「通常は」面に垂直に交わるベクトルと言いましたが、決して面に垂直に交わるベクトル「でなければならない」わけではありません。

球に関して言えば、ポリゴンの塊なので表面がカクカクしていますが、法線を球の中心から頂点座標へのベクトルに設定すればなめらかさを出すことができます。  
もしそのような法線設定をすれば、頂点の座標が一緒であれば法線も同じ結果になるはずなので、法線の方向に移動しても同じ位置に移動することになります。  
Unityエディタ上で球を作った場合、「球を作る」という意図がわかっているので、そのような法線設定がされていると思います。

というわけで、そのような法線を設定すればいいのですが、自分はBlenderは使ったことがないので、これ以上は助言できません。  
ただ、要はなめらかさを出せばいいわけで、「Blender 球
なめらか」でググると、[このようなサイト](https://www.jtechsys.jp/2018/01/18/2213/)がでてきたので、試してみてはいかがですか。


CC BY-SA 4.0
2021-12-23T00:12:37.377
85284
2021-12-23T00:12:37.377
15473
85271
answer


[katsuko
様にご回答頂いた方法](https://ja.stackoverflow.com/questions/85271/blender-%e3%81%8b%e3%82%89-unity-%e3%81%ab%e3%82%a4%e3%83%b3%e3%83%9d%e3%83%bc%e3%83%88%e3%81%97%e3%81%9f%e3%83%a1%e3%83%83%e3%82%b7%e3%83%a5fbx%e3%81%8c-%e9%a0%82%e7%82%b9%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%97%e3%81%9f%e9%9a%9b%e3%81%ab%e5%88%86%e9%9b%a2%e3%81%97%e3%81%a6%e3%81%97%e3%81%be%e3%81%86/85284#85284)
で、想定した通りの挙動になりました。

> 同じ座標にある頂点でも、どの面を構成する頂点かによって法線が違ってきますし、法線の方向に移動すれば、それぞれが違う位置に移動してしまいます。

Blender 上のデータとしては **面同士の接続**
状態があるようでして、接続している面に属する頂点はメッシュデータとしても共通になっているものと誤解しておりました。

#### ■ 正しい Blender での FBX Export 手順

  1. ObjectMode 
    * -> Add -> Mesh -> UV Sphere
    * **- > Object -> Shade Smooth (new)**
  2. File -> Export -> FBX(.fbx) 
    * Include: Object Types: **Mesh のみ** 選択
    * Transform: **Apply Transform** にチェック
    * Export FBX


CC BY-SA 4.0
2022-01-04T05:01:55.237
85478
2022-01-04T05:01:55.237
47940
85271
answer