VRChat想定 雲海シェーダー「AyRaymarch_CloudSea」
- ダウンロード商品¥ 2,200
VRChatでの使用を想定した雲海シェーダーです。 VRChatで一般的に許容される程度の負荷に抑えることと雲に潜れることを両立しつつ、見た目の品質も落とさないよう調整しています。 ただしレイマーチングという高負荷な手法を用いて広範囲の描画を行うことには変わりないため、本シェーダーの購入および利用については以下の例を参考にご検討ください。 またデフォルト状態のシーンでは正しく表示されず、各種設定の変更が必要ですので使用上の注意に目を通してからご購入ください。 本シェーダーの利用を推奨できるケース ・VRChatワールドにおいて潜れる雲海が必要な場合 ・雲海のすぐ上に足場があり、雲海が景観のメインとなりそれに負荷を割いても良い場合 →本シェーダーを使用したワールドをVRChatにて公開していますので、負荷や見た目について参考にしてください。 下記ワールドおよび商品サムネイルでは、PPSv2のBloomおよびUnity標準のFogを使用して他オブジェクトとの色味を合わせています。 「Limit of the troposphere」 https://vrchat.com/home/world/wrld_03bc9c70-3808-423c-8b8a-09d190aa859d 他の方法で表現することを推奨するケース ・足場が雲海から離れた高い位置にあり、雲海はあくまで遠景である場合 →遠景で動く必要がそれほどなければ、skybox画像などで表現する方が良いかもしれません。 ・下から見る普通の雲を動かしたい場合 →普通の雲としての見た目の品質はそれほど良くないため、潜れる必要がなければskybox用の動く雲のシェーダーを別途使う方が良いかもしれません。
使用上の注意
・Quest版VRChatには対応していません。 ・本シェーダーは_CameraDepthTextureおよび_WorldSpaceLightPos0を利用しているため、シーン上にShadowがONでリアルタイムのDirectional Lightが1つ必要です。置いていない場合は雲が表示されないためご注意ください。なおライトの色や強さは利用しておらず、雲の陰影のみDirectional Lightの方向の影響を受けます。 ・_CameraDepthTextureを利用しているため、VRChatのミラー内では正しく描画されません。 ・半透明オブジェクトとの前後関係が正しく表示されないケースがあります。例えば雲海の中から外にある半透明オブジェクトを見た場合に見えないケースがあります。 ・平面を中心に広がる雲を描画するためのシェーダーですので、球状などにすることはできません。 ・あらゆるシーンでの動作を保証するものではありません。 ・Unity2019.4.31f1で作成と動作確認を行っています。 ・サンプルとして同梱しているPrefabはCubeのScaleが5000となっているため、 シーンのClipFarがデフォルトの1000となっている場合は正しく描画されません。(雲の一部が途切れて見える) VRChatにおける使用ではVRCWorldのRefarenceCameraに何らかのCameraオブジェクトを登録し、 そのCameraのClipping PlanesのFarを5000以上にしてください。 もしくはPrefabのScaleを小さくしてください。
機能紹介
・雲海のボリュームレンダリング(立体的な描画)を行うシェーダーです。 ・雲は風に流れるように動きます。また、潜ることができます。 ・Depth書き込みのあるオブジェクト(大抵の不透明オブジェクト)が雲の中にある場合、距離に応じ雲が透過されます。 ・Directional Lightの方向を取得し、Light方向との間にある雲の濃さに応じて雲の色を決定します。(最も明るい部分と暗い部分の二色をInspector上で指定します) ・雲の厚みや起伏の大きさを調整可能です。
更新履歴
2022/02/10 v1.0 販売開始
内容物
・シェーダー本体(AyRaymarch_CloudSea.shader) ・サンプルマテリアル2種 ・2Dノイズテクスチャ2種、3Dノイズテクスチャ1種
パラメータの説明
・NoiseTex1,2 雲の高さを調整する2Dノイズテクスチャです。基本的に同梱の画像のままで問題ありませんが、 変更することで雲の形状を大きく変えることができます。 タイリング可能なノイズテクスチャを使用してください。 ・NoiseTex3D 雲の濃さを調整する3Dノイズテクスチャです。基本的に同梱の画像のままで問題ありません。 タイリング可能な3Dノイズテクスチャを使用してください。 ・NoiseIntensity1,2 NoiseTex1,2に乗算する値です。雲の起伏を強くしたい場合は大きくしてください。 この値を大きくした場合は雲が薄くなるため、厚さを保ちたい場合は併せて後述のCloudRangeも大きくしてください。 ・NoiseScale1,2 NoiseTex1,2のスケールを決める値です。雲の起伏の幅を変更したい場合に少しずつ調整してください。 通常のシェーダーでいえばTilingにあたる値です。 1.0のとき1m四方ごとにノイズテクスチャを繰り返すため、本シェーダーでは非常に小さい値となります。 (0.001であれば1000m四方ごとにノイズテクスチャがタイリングされる) ・3DNoiseScale NoiseTex3Dのスケールを決める値です。雲表面のモコモコ感を調整したい場合に少しずつ調整してください。 ・NoiseScroll1,2 NoiseTex1,2のスクロール方向と速度を決める値です。 雲が流れつつ形を変えることを表現するため、同じ方向で異なる速度にすることをお勧めします。 zとwは使用していません。 ・3DNoiseScroll NoiseTex3Dのスクロール方向と速度を決める値です。 NoiseScroll1,2と同じ方向で異なる速度にすることをお勧めします。 wは使用していません。zは一応使用していますが縦方向にスクロールしたいケースはほとんど無いでしょう。 ・Absorption 雲が光を吸収する際の係数です。 値を小さくすると雲が光を吸収しなくなっていくため輝いて見えるようになります。 Opacityと同じくらいの値で小さくしていくと徐々に透明に近い薄い雲になっていきます。 ・Opacity 雲の不透明度の係数です。基本的に変更する必要はありません。 Absorptionと同じくらいの値で小さくしていくと徐々に透明に近い薄い雲になっていきます。 ・CloudThreshold 雲の内側と外側を分ける閾値です。 基本的に調整不要ですが、より境界の薄い部分を表現したい場合は後述のMaxDensityと併せて小さくしてください。 ・StepDist レイマーチングのステップ長を決める値です。 近景の雲の描画品質と雲の描画できる距離のバランスを調整する値です。 小さいほど描画品質が上がりますが、レイが遠くに届かなくなるため雲が描画される距離が短くなっていきます。 大きいほど雲の濃さを取得する間隔が離れるため、描画品質が下がります。 ・StepEnhanceRate レイマーチングのステップ1回ごとにStepDistに乗算していく値です。 遠景の雲の描画品質と雲の描画できる距離のバランスを調整する値です。 最小の1.0にすると遠景の雲も近景の雲と同じ品質で描画します。 値を大きくすると遠いほど描画品質が下がりますがレイが遠くまで届くため雲が描画される距離が長くなっていきます。 描画品質が下がると雲に横向きの縞模様(アーティファクト)が見えるようになっていきます。 ・lightStepDist 明るさを取得するため雲からLight方向に飛ばすレイのステップ長を決める値です。 陰影の付き方を調整することができます。 ・BrightColor 雲の最も明るい部分の色です。1.0以上の色にすることで太陽光で光っているような表現になります。 ・ShadeColor 雲の最も暗い部分の色です。 ・MaxDensity 雲の濃さの係数です。 ・CloudCenter 雲をオブジェクト原点から上下に移動させる場合に調整する値です。 ・CloudRange 雲の厚みを決める値です。ここからNoiseTex*NoiseIntensityの値を引いてその位置の雲の厚みが決まります。 ・rayStartOffset 最適化のための値です。この値の分、レイの開始点をCloudRangeから内側に移動しています。 大きくしすぎると雲の上端が描画されません。 小さくしすぎるとレイマーチングの無駄になるステップ数が多くなり描画品質や描画距離が下がります。 水平方向に見て雲の上端が切れないギリギリの値に調整してください。 ・ClipFar 水平方向の距離がこの値より離れている場合は雲を描画しません。 この値より近い場合でもレイマーチングのステップ数が一定(80回)を超えた場合は雲は描画されません。
利用規約
製作者 AYANO_TFT Twitter @AYANO_TFT ・本商品を購入された時点で本利用規約に同意したものとさせていただきます。 ・本利用規約の内容は変更される場合があり、変更された場合は最新のものが適応されます。 ・著作権は製作者に帰属します。 ・解析、改変は自由に行っていただけます。 ・データの再配付、及び販売は解析・改変の有無を問わず禁止します。取り出し可能な状態での他商品への同梱も禁止します。 ・Unityでのビルド後(容易に取り出せない状態)であれば、商用・非商用問わず利用可能です。 例)自作ゲーム、VRChatのワールド制作・公開など ・本製品を使って発生した問題に対しては製作者は一切の責任を負いません。ご了承ください。 ・不具合などがあった場合についてはboothのメッセージ機能もしくは上記TwitterアカウントへのリプライまたはDMにてご報告ください。 商品の主な機能を損なう重大な不具合があった場合は必要な対応を行います。 その他の要望についてもご連絡頂いて問題ありませんが、個人に可能な範囲での対応となること(全ての要望にはお答えできないこと)をご了承ください。 ・問合せへの対応は基本的に日本語となります。英語で問合せ頂いた場合も可能な限りは対応いたしますが、回答が遅くなることをご了承ください。 ・ドキュメントについても利用規約以外は日本語のみとなります。
Terms of Use
Author AYANO_TFT Twitter @AYANO_TFT You will be deemed to have agreed to these Terms of Use when you purchase this product. The content of these terms of use is subject to change, and the latest version will be applied when it is changed. The copyright belongs to the AYANO_TFT. Analysis and modification can be done freely. Do not distribute the data again or sell it, regardless of whether it has been analyzed or modified. It is also prohibited to include the data in other products in a removable form. After building with Unity (Asset cannot be retrieved easily), the data can be used for both commercial and non-commercial purposes.(e.g.) Creating and publishing your own games, VRChat worlds, etc. AYANO_TFT is not responsible for any problems that may occur when using this product. If you find any problems with this product, please report to author via the message function of the booth or reply or DM to the above Twitter account. If there is a serious problem that impairs the main function of this product, author will take necessary measures. If you have any other requests, please feel free to contact author, but please understand that will only respond to the extent that is possible for author personally (cannot respond to all requests). If you have any questions in English, author will try own best to respond to them, but please understand that the response may be delayed. Documentation, except for the Terms of Use, is only available in Japanese.