吹き付ける風、漂う霧
- 吹き付ける風、漂う霧(アセットとサンプルワールド個人向け)Digital2,000 JPY
- 吹き付ける風、漂う霧(アセットとサンプルワールド企業向け)Digital10,000 JPY

吹き付ける風、漂う煙、流れる風(それぞれ6バリエーション以上)のアセットです。基本的に置くだけで行けます。 vrc対応。 朝もや、ライヴ演出、廃墟、早朝の山の霧などにどうぞ。 サンプルワールド(作例): https://vrch.at/ngm3pz0v サンプル動画 https://www.youtube.com/watch?v=nJm_n8h3mfg 最終更新日:2025/05/023 2025/5\23 Light Volumeに対応しました。画像あり (機能していることは確認しましたが詳細は未検証) mist_lv_beta.zip にシェーダーが入っているので入れ替えてください。 詳細は下の方に ( ライトボリューム で検索してください ) 5/30 ・directional lightをno shadowにすると見えなくなる不具合が見つかりました。soft edge(他のオブジェクトとの接触部分を透明にする機能)をオフにすると直ります。近いうちにこの不具合は修正予定です。 -> (23/8/28)対応しました。シャドウをオフにすると霧は消えるのは変わらないですが、その場合は mist/prefab/min_depthTexture というプリファブをヒエラルキーに置くと治ります。 (原理)ディレクショナルライトでシャドウを落とすことでdepthTextureというものが生成され、これを利用することでオブジェクトとの接触部分を透明にすることができます。このアセットはその機能を使っているのでシャドウをオフにすると消えてしまいます。なので適用先が一つもないライトを作ってシャドウを落とす設定にすれば負荷をかけずにdepthTextureを生成できる(というヒントを教えてもらった)のです。それを設定したのが上記のmin_depthTextureです。たぶんこれで軽くなるはず。複雑なシーンでは試してないので不具合が起こる可能性はありますがその場合はこのmin_depthTextureを消してください。 (クエストだとdepth textureが存在できないためこの機能は使えません。デフォだとオンになっているのでクエストで使う場合はオフにしてください。 ・パーティクルでできているのでhmd使用時に霧の中で頭を動かすと霧が歪んで見えます。これは直りませんが近距離部分を薄めにすると緩和できると思います(それ用のパラメータがあります)。 ・シェーダーで使用されているフェイクのライティングについて パーティクル発生範囲をボックスで、フェイクライトの位置とサイズをスフィアで制御可能でリアルタイムに確認できるようになってます。(パーティクルの寿命が長い場合は更新が確認できるまで5秒くらいかかります。)制御用のスフィアとボックスはそれぞれのパーティクルの中にあります。ヒエラルキーから選択してください。使い方は解説動画を見てください。 パーティクルソースのカスタムオブジェクトも使用可能です。この場合こちらで用意したエミット範囲指定ボックスは無視されます。 ・陰影の量を調整できるパラメータを追加しました(v3)。diffuseというものが追加されてます。1だと陰影あり、0にすると完全に陰影が消えて白くなります。(カラー調整は可能です。) 用法: mist_v3.zipを解凍するとunitypackageがあるので必要なシーンファイルに突っ込んでプリファブのフォルダからシーンに配置してください。 すべてパーティクルでつくられていて必要な部分は設定済みです。 好みに応じて透明度や色、サイズや範囲を調整してください。 いくつかバージョンがありますが v3 を使用してください。 以下のカスタムシェーダーが用意されてます。 custom / mist / mist_fakeLights (フェイクライトが使えます) custom / mist / mist_useLights (リアルライトが使えます) custom / mist / mist_notUseLights +mist_fakeLights_lv , mist_useLights_lv , mist_notUseLights_lv(ライトボリュームに対応してます。) 各パラメータ説明 soft edge on contact ほかのオブジェクトとの接触部分を透明にします。数字が大きいほど透明幅が広がります。 less alpha near camera 自分の周囲だけ透明にします。 nearが完全に透明になる距離、farが不透明になる距離です。 distance color 距離が離れたときに色を付けられます。透明にすることも可能。 distance color rateは適用量です。 use particle original color パーティクルで設定した色を使います。ただしここのオンオフに関わらずアルファは常にパーティクルで設定した値に影響を受けます。 multiply color 色を付けます。 lights ライトを使います。 mist_useLightsの場合はリアルライトを、mist_fakeLightsの場合はフェイクライトを使います。 リアルライトはポイントライトだけ対応してます。ポイントライトのrangeから外れるとバグります。不安定です。 フェイクライトはワールド座標で設定します。こちらで確認した限りバグは特にないです。ライトは最大三つでそれぞれオンオフできます。パーティクルの子オブジェクトにあるスフィアで位置と範囲が設定できます。 attenuation はライトの影響範囲です。 light volume ライトボリュームを使用します。 デフォではオフ ライトボリュームで明るさを上書きするモードと加算するモードがあります。 加算するモードはuse additiveをオンにしてください。 上書きモードも加算モードもそれぞれ乗算ができます。(ライトボリュームの明るさをまるごと倍にしたりできます。個別に倍にはできません) blend rate light volume ライトボリュームの適用量を設定します。 ライトボリュームは詳細が未検証なので何らかの条件下でうまくいかない可能性があります。その場合は lv じゃない方に切り替えてください。 ライトボリューム実装に関してはこちら。 https://github.com/REDSIM/VRCLightVolumes/blob/main/README.md 要点だけで実装の説明すると 1 lightvolumeのパッケージを読み込み、 2 ヒエラルキの右クリックでlightvolumeをつくって適用範囲を設定、 3 ライトとかstandardshaderのエミッションとかで光源を置いてから 4 window / rendering / lightingでbake これでうまくいくはず。無理だったらわからないので適当なサイトで調べてください。きかれてもわからないです。教えてほしいくらいですので。 カスタムシェーダーは重くないと思いますが重かったら以下の純正のものを使うと改善できるかもしれません。 mobile/particles/alphaBlended (ライティング非対応) mobile/particles/vertexLitBlended (ライティング対応) プリファブはそれぞれの種類でたくさんありますが同じフォルダに入ってるものは向きかテクスチャが違うだけで他は全部同じです。 mist_world__について 解凍するとunitypackageがあり読み込むとワールドのデータが見れます。プレビューモードにするとすべてのアセットが再生されるので一望するのに便利です。プレビューの際、udonが無いというエラーが出るのでその場合はmist_world/udon を消してください。カメラとかはないので神視点で見てください。 音楽は3つあってそれぞれメインbgm、ボツbgm,風の音が入っていてそれぞれ2-3分のループになってます。風の音は割と汎用性が高いと思います。 (付録) ライトボリュームのシェーダーへの実装についての備忘録 ( #pragmaのあとに ) #include "UnityCG.cginc" #include "Packages/red.sim.lightvolumes/Shaders/LightVolumes.cginc" ( struct appdata の中に) float3 normal : NORMAL; ( struct v2f の中に) float3 worldNormal : TEXCOORD2; float3 worldPos : TEXCOORD3; (texcoordがすでに別のもので埋まっている場合は数字を繰り上げる) (v2f vert (appdata v)の中に) o.worldNormal = UnityObjectToWorldNormal(v.normal) ;//lv o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz ;//lv (fixed4 frag (v2f i) : SV_Target のラストの方に) float3 L0, L1r, L1g, L1b; LightVolumeSH(i.worldPos, L0, L1r, L1g, L1b); float3 lightingColor = LightVolumeEvaluate(normalize(i.worldNormal), L0, L1r, L1g, L1b); col.rgb *= lightingColor ; (加算の場合はこっちを)col.rgb += lightingColor* _lv_intensity_additive_ ; // これで動くはずですが無理だったらわからないです。 利用規約: ・アセットに関しては基本的にどのように使っても大丈夫です。ワールドへの配置やゲームでの使用、アバターへの仕込みでもご自由に。 ・ワールドに関してはそのまま又は一部改変して上げることは禁止します。モデルやアセットを部分的にちぎって使うのはありです。 ・ワールドに入っている音楽は好きに使っていただいて大丈夫です。 ・シェーダーのコードを部分的に持っていくのはアリです。そのまま2次配布等は禁止です。パラメータ名とかシェーダ名だけ変更とかコードの記述順の変更とかの微妙すぎる変更を加えた上での2次配布もダメです。 ・テクスチャ、アセット、音楽を含む素材単位の2次配布、2次販売は禁止です。 ・また年商千万円以上の企業(個人は含まない)での使用は企業向けのバージョンのご購入をお願いします。(ご対応の内容は同じです) ・this asset can be used in Quest but you need to set " soft edge on contact" off to make it visible. regulation: basically free except secondary distribution. private version is not for company that earns more than 10m$ annually. //