実現したいこと
写真のような雲の上のステージを雲の動きも付けて作りたいです。
試したこと
skyboxを回してみたが太陽も回ってしまいダメだった。skyboxを雲と空、二つ適応することはできなかった。
試そうとしてること
雲と空を分けてskyboxのような感じで表示したい。
###教えていただきたいこと
どうすれば、写真のようなステージを作れるか。
試そうとしていることはどうすればできるか。
初心者なので、どんな回答でもありがたいです。よろしくお願いします。
###途中経過
Bongoさんから教えていただいた方法で上空の雲を動かすことができました。ありがとうございます。
下の雲はパーティクルで作ってみようと思います。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
ベストアンサー
私からも一案として、ご質問者さんの「空と雲の2つのスカイボックス」のアイディアを検討してみました。
以前見かけました他の方のご質問に「Unityのシェーダーで、透明部分が黒く表示されてしまう。」というものがあり、この時と同様に2つのカメラを用意してやって、それぞれが空背景・雲背景を担当するようにできるかもしれないと考えました。
まず、雲担当のスカイボックスは半透明に対応する必要があるでしょうが、デフォルトのスカイボックス用シェーダーはアルファを無視するようです。そこでビルトインシェーダーをコピーして一部改変したものを用意することにしました。
DefaultResourcesExtra/Skybox-Cubed.shader
をベースに、ファイル名をSkybox-Alpha.shader
として下記部分を変更しました(コード中にコメントを入れた部分)。
ShaderLab
1// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt) 2 3// 区別がつくようにシェーダー名を変更 4Shader "Skybox/Cubemap (Alpha)" { 5Properties { 6 // アルファも利用するようにしたのに合わせ、_Tintのデフォルトのアルファを1に変更 7 _Tint ("Tint Color", Color) = (.5, .5, .5, 1) 8 [Gamma] _Exposure ("Exposure", Range(0, 8)) = 1.0 9 _Rotation ("Rotation", Range(0, 360)) = 0 10 [NoScaleOffset] _Tex ("Cubemap (HDR)", Cube) = "grey" {} 11} 12 13SubShader { 14 Tags { "Queue"="Background" "RenderType"="Background" "PreviewType"="Skybox" } 15 Cull Off ZWrite Off 16 17 Pass { 18 // Blend指定を追加 19 Blend SrcAlpha OneMinusSrcAlpha 20 21 CGPROGRAM 22 #pragma vertex vert 23 #pragma fragment frag 24 #pragma target 2.0 25 26 #include "UnityCG.cginc" 27 28 samplerCUBE _Tex; 29 half4 _Tex_HDR; 30 half4 _Tint; 31 half _Exposure; 32 float _Rotation; 33 34 float3 RotateAroundYInDegrees (float3 vertex, float degrees) 35 { 36 float alpha = degrees * UNITY_PI / 180.0; 37 float sina, cosa; 38 sincos(alpha, sina, cosa); 39 float2x2 m = float2x2(cosa, -sina, sina, cosa); 40 return float3(mul(m, vertex.xz), vertex.y).xzy; 41 } 42 43 struct appdata_t { 44 float4 vertex : POSITION; 45 UNITY_VERTEX_INPUT_INSTANCE_ID 46 }; 47 48 struct v2f { 49 float4 vertex : SV_POSITION; 50 float3 texcoord : TEXCOORD0; 51 UNITY_VERTEX_OUTPUT_STEREO 52 }; 53 54 v2f vert (appdata_t v) 55 { 56 v2f o; 57 UNITY_SETUP_INSTANCE_ID(v); 58 UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); 59 float3 rotated = RotateAroundYInDegrees(v.vertex, _Rotation); 60 o.vertex = UnityObjectToClipPos(rotated); 61 o.texcoord = v.vertex.xyz; 62 return o; 63 } 64 65 half4 frag (v2f i) : SV_Target 66 { 67 half4 tex = texCUBE (_Tex, i.texcoord); 68 half3 c = DecodeHDR (tex, _Tex_HDR); 69 c = c * _Tint.rgb * unity_ColorSpaceDouble.rgb; 70 c *= _Exposure; 71 72 // 出力する色のアルファ成分を_Texと_Tintの積にする 73 return half4(c, tex.a * _Tint.a); 74 } 75 ENDCG 76 } 77} 78 79 80Fallback Off 81 82}
メインカメラの子としてもう一つカメラを作り、子カメラはCulling MaskをNothing、Depthを-2とし、これにベースとなる背景を担当させることにしました。Audio Listenerも削除しています。
一方、メインカメラのCameraコンポーネント自体の設定は特にいじらず、Skyboxコンポーネントを追加して、これに上記の半透明キューブマップシェーダーを使ったマテリアルをセットしました。
この状態で前景側(背景なのに前景というのは変ですが、つまり雲側です)のマテリアルのRotationを操作して回してみると、下図のような描画結果になりました。前景だけが回っていることをアピールするため、テクスチャは派手なタイル模様にしています。
ですがこの方式だと雲は無限遠にあるようなものですので、立体感には乏しいかもしれません。ha_wnさんやnskydivingさんの案のように三次元の雲にすればリアリティがありそうですし、雲を突き抜けて飛ぶような表現も可能そうですね。
投稿2020/01/28 22:00
総合スコア10816
0
標準機能であれば他の方の回答が良い方法だと思いますが、優れたアセットがある場合、それに頼るのも手です。
雲の場合、私はMassive Cloudsをお勧めしてます。有料アセットですが30ドルてすし、セールなら半額近くに下がることも。
レイマーチングによる高品質なボリュームシャドウが、古いものから最新のUniversal RPまでUnityのレンダリングシステムにきちんと対応してます。
お尋ねの動く雲は標準で備わってますし、雲のレイヤー積み重ねたり、擬似的な大気表現などにも使えます。また負荷と品質のバランスがとりやすく、モバイルでも十分動きます。
作者が日本人なので、日本語で質問投げられるのも気軽で良いです。
投稿2020/02/03 23:22
編集2020/02/03 23:24総合スコア47
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
あまり難しく考えず、Terrain やポリゴンモデルでは実現できないでしょうか。
投稿2020/01/28 08:48
総合スコア6500
0
1.パーティクルで雲を発生させて敷き詰める
2.ボリュームレンダリングを使って雲を作る
初心者であれば1が良いかと思います。
投稿2020/01/28 08:23
編集2020/01/28 08:26総合スコア1222
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/28 22:40