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

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

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

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

意見交換

クローズ

2回答

1689閲覧

Unityで紙が燃えているような表現を作るには

YUTO_IT

総合スコア20

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2023/12/15 12:49

0

0

Unityでゲームを開発しており、紙(画像)が燃えているような表現をシェーダー等で実装したいです。
様々なサイトを検索いたしましたが、思っているような表現を見つけられずにいます。

実現したいこと

下図のように、紙(画像)が時間経過とともに上から下へ燃える様な表現を、シェーダー等を活用して実装したいです。

イメージは下記サイトを参考にしています。
https://baba-s.hatenablog.com/entry/2018/10/11/130000
イメージ説明

恐れ入りますがご意見をいただきたく、ヒントでもいただけると幸いです。
よろしくお願いします。

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

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

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

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

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

回答2

#1

Bongo

総合スコア10816

投稿2023/12/15 17:33

ご提示のBurningPaperにちょっと手を加えて半透明に対応させ...

ShaderLab

1Shader "Custom/BurningPaper" 2{ 3 Properties { 4 _MainTex ("Main texture", 2D) = "white" {} 5 _DissolveTex ("Dissolution texture", 2D) = "gray" {} 6 _Threshold ("Threshold", Range(0, 1.1)) = 0 7 } 8 9 SubShader { 10 // 透明キューに変更 11 Tags { "RenderType"="Transparent" "Queue"="Transparent" } 12 13 Pass { 14 // ブレンドその他を設定 15 Blend SrcAlpha OneMinusSrcAlpha 16 ZWrite Off 17 Cull Off 18 19 // 以降は変更なし 20 CGPROGRAM 21 #pragma vertex vert 22 #pragma fragment frag 23 24 #include "UnityCG.cginc" 25 26 struct v2f { 27 float4 pos : SV_POSITION; 28 float2 uv : TEXCOORD0; 29 }; 30 31 sampler2D _MainTex; 32 float4 _MainTex_ST; 33 34 v2f vert(appdata_base v) { 35 v2f o; 36 o.pos = UnityObjectToClipPos(v.vertex); 37 o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); 38 return o; 39 } 40 41 sampler2D _DissolveTex; 42 float _Threshold; 43 44 fixed4 frag(v2f i) : SV_Target { 45 fixed4 c = tex2D(_MainTex, i.uv); 46 fixed val = 1 - tex2D(_DissolveTex, i.uv).r; 47 if(val < _Threshold - 0.04) 48 { 49 discard; 50 } 51 52 bool b = val < _Threshold; 53 return lerp(c, c * fixed4(lerp(1, 0, 1 - saturate(abs(_Threshold - val) / 0.04)), 0, 0, 1), b); 54 } 55 56 ENDCG 57 58 } 59 60 } 61 FallBack "Diffuse" 62}

「Dissolution texture」は下記のように作ってはいかがでしょうか。

  • ノイズパターンを作る(たとえばPhotoshopの「雲模様 1」)

図1

  • 明度を適当に落とす(仮に0.2倍とする)

図2

  • 垂直方向のグラデーションを作る(グラデーションの下端は0、ノイズの明度を0.2倍にしたので上端は0.8とでもする)

図3

  • ノイズパターンとグラデーションを加算合成する

図4

この場合、描画結果は下図のようになるかと思います。

図5

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

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

#2

YUTO_IT

総合スコア20

投稿2023/12/16 23:42

Bongo様

ご回答くださりありがとうございます。
まさに私が求めていた表現でした。

今後は時間経過とともに紙が燃えたり、何かをきっかけに復活したり、実装していきたいと思います。

アドバイス下さりありがとうございました。

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

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

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問