バージョン5.6.1f1でテストしましたが、おそらくご質問者さんのバージョンでも大きな違いはないかと思います。
- シーン内にメインカメラ、パーティクル用カメラ、パーティクルシステム、背景してモデル2つと地面の平面を配置
- パーティクル用のカメラはクリアフラグをSolidColor、背景色をARGBすべて0として、ターゲットテクスチャをRenderTexture(名前はParticle Texture)に設定
- Particle TextureのカラーフォーマットはデフォルトのARGB32のまま、サイズは256だと少々小さい気がしたので512ピクセル四方に設定
- RawImageを画面の中央に配置しParticle Textureを参照、サイズを同じく512ピクセル四方に設定
###配置の様子
これで動かすと、確かにご質問者さんのおっしゃるように、テクスチャの不透明部分にしかパーティクルが描画されず、いまいちでした。
###失敗描画の様子
どうやらパーティクルシステムのデフォルトのシェーダーの動作が原因のようで、パーティクル描画時にアルファ成分を書き換えていないために、透明な部分はそのまま透明になってしまうようです。
新しくシェーダーを作成して、ダウンロードアーカイブにあるビルトインシェーダーをダウンロードし、新しいシェーダーの中身を丸々DefaultResourcesExtraの中のParticle Premultiply Blend.shaderの内容で置き換えたのち、シェーダー名を適当に変え、ColorMaskをRGBAにしてアルファチャンネルにも書き込みを行うようにしました。
ShaderLab
1Shader "Particles/Alpha Blended Premultiply (RGBA)" { // ビルトインシェーダーと区別がつくように名前を変更
2 Properties{
3 _MainTex("Particle Texture", 2D) = "white" {}
4 _InvFade("Soft Particles Factor", Range(0.01,3.0)) = 1.0
5 }
6
7 Category{
8 Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane" }
9 Blend One OneMinusSrcAlpha
10 ColorMask RGBA // ここを「RGB」から「RGBA」に修正
11 Cull Off Lighting Off ZWrite Off
12
13 /* 中略 */
14 }
15}
16
新しくマテリアルを作成し、Shaderを先ほど作ったParticles/Alpha Blended Premultiply (RGBA)に変え、Particle Textureはデフォルトと同じDefault-Particleに設定、このマテリアルをParticle SystemのRendererのMaterialにセットしました。
これでプレイモードにすると、透明部分にも描画されるようになったものの、透明部分に描画されたパーティクルに黒いフリンジが発生してしまいました。
###失敗描画の様子その2
これはアルファ乗算済みイメージをストレートアルファイメージのつもりで合成した時に現れる典型的な症状で(こちらのサイトなどがご参考になるでしょうか?)、今度はRawImageの方のマテリアルを修正する必要があります。
同じ要領でDefaultResourcesExtra/UIの中のUI-Default.shaderを丸写ししてシェーダーを作り、Blendを変更してアルファチャンネル乗算を行わないようにします。
ShaderLab
1Shader "UI/Straight Alpha" // こちらもやはり名前を変更
2{
3 Properties
4 {
5 [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
6 _Color("Tint", Color) = (1,1,1,1)
7
8 _StencilComp("Stencil Comparison", Float) = 8
9 _Stencil("Stencil ID", Float) = 0
10 _StencilOp("Stencil Operation", Float) = 0
11 _StencilWriteMask("Stencil Write Mask", Float) = 255
12 _StencilReadMask("Stencil Read Mask", Float) = 255
13
14 _ColorMask("Color Mask", Float) = 15
15
16 [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) = 0
17 }
18
19 SubShader
20 {
21 Tags
22 {
23 "Queue" = "Transparent"
24 "IgnoreProjector" = "True"
25 "RenderType" = "Transparent"
26 "PreviewType" = "Plane"
27 "CanUseSpriteAtlas" = "True"
28 }
29
30 Stencil
31 {
32 Ref[_Stencil]
33 Comp[_StencilComp]
34 Pass[_StencilOp]
35 ReadMask[_StencilReadMask]
36 WriteMask[_StencilWriteMask]
37 }
38
39 Cull Off
40 Lighting Off
41 ZWrite Off
42 ZTest[unity_GUIZTestMode]
43 Blend One OneMinusSrcAlpha // ここを「Blend SrcAlpha OneMinusSrcAlpha」から「Blend One OneMinusSrcAlpha」に変更
44 ColorMask[_ColorMask]
45
46 /* 中略 */
47 }
48}
新規マテリアルにこのシェーダーをセットし、RawImageのRaw Image (Script)のMaterialにそのマテリアルをセットします。
これで描画するとフリンジが消えました。
###まともな描画の様子
パーティクルシステムを単独のレイヤーに置き、パーティクル撮影用カメラをそのレイヤーだけ描画するようにすれば、パーティクルのみをテクスチャにレンダリングできました。
###パーティクルのみレンダリングした様子
ちょっと設定をいじれば何とかなるかな?と思ったら、何だかんだで手間がかかってしまいました。
正直ここまでするより質問者さんの解決方法の方がシンプルでいいように思います...