質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

2923閲覧

Unity URP Fogの影響を受けないアルファ付きシェーダー(Particle用)

Mo_5555

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/10/11 04:49

Unity URPでFogの影響を受けないアルファ付きシェーダー(Particle用)

当方CGデザイナーでシェーダーやプログラミングについては詳しくなく、
かなり当てずっぽうで進めてみたのですが行き詰ってしまったため質問させていただきます。

AR(MagicLeap)で出現を誤魔化すため黒フォグを使っているのですが、
遠景のエフェクトなどは表示させたいです。

fogの影響を受けない設定の記述は見つかったのですが、
テクスチャとカラーのアルファを適用するために
どのような記述をしたら良いのかがわかりません。

Surface ShaderはURPで使えないので、そのあたりも検索の際に混乱してしまっています。
稚拙な質問で恐縮ですが、よろしくお願い致します。

該当のソースコード

Shader "Custom/FogOffEffect" { Properties { _Color ("Color", Color) = (1,1,1,1) //追加した記述 _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "Queue" = "Transparent" //変更した記述 "RenderType"="Transparent"  //変更した記述 } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma nofog //追加した記述 #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; } fixed4 frag (v2f i) : SV_Target { // sample the texture fixed4 col = tex2D(_MainTex, i.uv); return col; } ENDCG } } }

補足情報

Unity 2020.1.17f1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

nofogはサーフェスシェーダー用のオプションですので、#pragma nofogといった使い方をするわけにはいかないかと思います。あの行は削除してしまっていいでしょうね。

ご提示いただいたコードを下記のように改変してみましたが、いかがでしょうか?

ShaderLab

1Shader "Custom/FogOffEffect" 2{ 3 Properties 4 { 5 _Color ("Color", Color) = (1,1,1,1) 6 _MainTex ("Texture", 2D) = "white" {} 7 } 8 SubShader 9 { 10 Tags { 11 12 "Queue" = "Transparent" 13 "RenderType" = "Transparent" 14 15 } 16 LOD 100 17 18 Pass 19 { 20 // Blend設定を追加 21 Blend SrcAlpha OneMinusSrcAlpha 22 23 // 半透明パーティクルなら、一般的にはデプスを書き込まない方がいいだろうと思い 24 // ZWriteもオフにしました 25 ZWrite Off 26 27 CGPROGRAM 28 #pragma vertex vert 29 #pragma fragment frag 30 31 #include "UnityCG.cginc" 32 33 struct appdata 34 { 35 float4 vertex : POSITION; 36 float2 uv : TEXCOORD0; 37 38 // 個々のパーティクルの色は頂点カラーとして表現されているので、 39 // 入力データとして頂点カラーを追加しました 40 fixed4 color : COLOR; 41 }; 42 43 struct v2f 44 { 45 float2 uv : TEXCOORD0; 46 47 // フォグは不要とのことなので、UNITY_FOG_COORDSも必要ないため削除し... 48 //UNITY_FOG_COORDS(1) 49 50 // 代わりに頂点カラー伝達用の変数を追加しました 51 fixed4 color : TEXCOORD1; 52 53 float4 vertex : SV_POSITION; 54 }; 55 56 sampler2D _MainTex; 57 float4 _MainTex_ST; 58 59 v2f vert (appdata v) 60 { 61 v2f o; 62 63 o.vertex = UnityObjectToClipPos(v.vertex); 64 o.uv = TRANSFORM_TEX(v.uv, _MainTex); 65 66 // vert内では入力された頂点カラーをそのまま伝達し... 67 o.color = v.color; 68 69 return o; 70 } 71 72 fixed4 frag (v2f i) : SV_Target 73 { 74 fixed4 col = tex2D(_MainTex, i.uv); 75 76 // frag内ではcolに頂点カラーを掛け合わせることで着色しました 77 col *= i.color; 78 79 // ここまでの過程で、colに対してフォグ色を上乗せするような処理は行っていませんので 80 // あとは単にcolを出力してやればフォグなしの外観になるかと思います 81 return col; 82 } 83 ENDCG 84 } 85 } 86}

投稿2021/10/15 20:51

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問