事象
Unityで 頂点アルファが付加されたMeshをAssetBundlleビルドしてロードすると頂点アルファが消えている ,という現象が起こることがあります.
原因
PlayerSettingsの Optimize Mesh Data
オプションがtrueになっているのが原因でした.
https://answer.uwa4d.com/question/5985785a46dafb521451bd85
上記のページによると, Optimize Mesh Data
は以下のような挙動をします.
一般的には、「メッシュデータの最適化」オプションをオンにすることで、エンジンは発行時にすべてのメッシュデータを繰り返し処理して、余分なデータを削除し、データサイズを小さくすることができます。 なお、「冗長な」データとは、レンダリングのためのShaderでは必要のないデータがメッシュデータに含まれていることを意味します。つまり、メッシュデータに位置、uv、法線、色、接線などの頂点データが含まれているが、そのデータが メッシュデータに位置、uv、法線、カラー、タンジェントなどの頂点データが含まれていて、レンダリングに使用するシェーダーには位置、uv、法線しか必要ない場合、メッシュデータのカラーとタンジェントは「冗長」であり、ゲーム公開時にエンジンによって自動的に削除されます。
このオプションをオンにすることは、両刃の剣であることに注意する必要があります。 開発チームは、ランタイムの状況でのシェーダーの変更に特に注意を払うことをお勧めします。 より多くの頂点プロパティへのアクセスを必要とする複雑なシェーダをランタイム中に特定のGameObjectに置き換える必要がある場合は、ランタイムで使用されるメッシュデータをエンジンが削除しないように、これらのシェーダを適切なPrefabにマウントしてからリリースすることをお勧めします
つまり,UnityはこのオプションがONの状態でAssetBundleをビルドするとPrefabで使用されているMesh, Material(Shader)を静的解析し使用していない付加情報をStrippingする,ということだと思われます.
解決
1つのAssetBundleの中に頂点情報を使用するMaterialをアタッチしたPrefabを含むようにして解決しました.
これによりPrefabで使用しているMesh, Shaderが解析され,Shaderで使用している頂点情報がビルド時に残ります.
ただし,こちらの場合でも Prefabに付けたShaderで使用していない頂点情報はStrippingされてしまう ので注意してください.
ランタイムでShaderを切り替えてそれぞれ別の頂点情報を使用する,といった用途だとかなり不便ではあるので必要に応じて Optimize Mesh Data
は無効にするのもアリかと思います.
(というか,トラブルのもとになるかと思うので特に必要なければ無効にしておくのが良いのではないかと思います)