日本語 | English
VRChatワールドに、歩いて入れる透明な浅瀬と海岸を作るパッケージです。水面の反射、水底に揺れる光の模様(コースティクス)、波音に合わせて寄せては返す波打ち際、潜ったときの水中の見え方までを含みます。元になったWebGLデモはclearwater by Aureliengmz(MIT、© Lumaris、Third Party Notices.md)です。
Clearwater Beach(Build Sceneで作る標準のシーンを公開したワールド)で、VRChatの中で試せます。

| 遠浅の水と光の模様 | 波打ち際(打ち上げと泡) |
|---|---|
![]() | ![]() |
| 水中 | 水中から見上げた空(丸く切り取られて見える) |
![]() | ![]() |
時刻に合わせて、空の色を変えられます。日の出から夕焼け、月夜まで、大気が日光を散らす様子を物理に沿って計算した色です。

時刻は、ワールドの中のパネルからも変えられます。散乱の重い計算はエディターで一度だけ行って表に保存し、実行中は表を引くだけです。そのため、時刻のない空と比べて増える負荷は、VRの片目で0.1〜0.15msに収まります(時刻と空、負荷の目安)。
PC向けです(GPU計算を多用するためQuestでは動きません)。VRChat Worlds SDK 3.10以降が必要で、Unityでワールドを組んでアップロードしたことがある人を想定しています。
初めて使うときは「入れ方」「始める」「海岸を描く」の3章を順に読めば、海岸ができるところまで進めます。それ以降の章は、自分の地形やプールを使いたくなったとき、見た目を調整したいときに引いてください。用語の定義はCONTEXT.mdに、中で何が起きているか(波の計算、水底の描き方、描画順、空と同期など)は、図と一緒にdocs/technical.mdにあります。調整できる数値の初期値とファイルの役割の一覧も、そちらにまとめています。主な仕組みは、動く図解でも見られます。
ALCOM / VCCにこのパッケージのリポジトリを追加し、ワールドのプロジェクトに「Clearwater VRC」を追加します。
ALCOM / VCCの設定(パッケージ)で、リポジトリの追加に次のURLを入れます(配布ページのボタンからでも追加できます)
https://bmbb93.github.io/clearwater-vrc/index.json
プロジェクトの管理画面で「Clearwater VRC」を追加します
リリースのzipを展開してプロジェクトのPackages/に置いても使えます(埋め込みパッケージ)。パッケージ自体を編集しながら使うときは、このリポジトリを手元に置き、プロジェクトのPackages/manifest.jsonのdependenciesにそのフォルダへの参照を書きます(コピーせず、そのフォルダを直接読みます)。パスはPackages/からの相対でも書けます。
"com.vbamboo.clearwater": "file:<このリポジトリのフォルダ>"
Tools > Clearwater > Build Sceneを実行すると、Assets/Clearwater/Scenes/Clearwater.unityに水・浜・太陽・スポーン地点の入ったシーンができ、ビルド設定のシーン一覧がこのシーン1つになります。2回目以降の実行では素材を作り直しますが、シーンに手で置いた物やワールドIDはそのまま残ります。Assets/Clearwater/Generatedの中の、シーンのフォルダーにあるマテリアルで調整した値(波の高さ・明るさ・雲・トーンマッピングの方式など)も残ります。作り直されるのは、テクスチャの参照などClearwaterが決める値だけです。シーンを初めから作り直すときはRecreate Sceneを使います。トーンマッピングはポストプロセス(PPv2)になります(「トーンマッピング」の章)。
ワールドのシーンを開いてTools > Clearwater > Add to Current Sceneを実行します。水一式と、まっすぐな海岸の編集用オブジェクト「Coast (editor only)」が追加されます。最初に「Clearwaterの空と太陽も使うか」を聞かれます。
どちらでも、トーンマッピングはポストプロセス(PPv2)になり(「トーンマッピング」の章)、追加のあとシーンは保存されます。
あとから切り替えるときはTools > Clearwater > Use Clearwater Sky and Sunを使います。水は画面の奥行き情報を使って水底や水中の物を透かすので、影は有効のままにしてください。影を切ると奥行き情報が作られず、水を正しく描けません。ワールドのReference CameraのFar Clipも、海の広さに合わせる必要があります(次章のSea size)。
どちらの始め方でも、次は海岸の形を描いてBakeします。
使い方の例になるシーンを6つ用意しています(VRC Light Volumesがプロジェクトに入っていれば7つ)。Tools > Clearwater > Demo Scenes > Build Demo Scenesを実行すると、Assets/Clearwater/Demoにシーンとその地形・マテリアル・テクスチャが作られます(30秒ほどかかります)。どれもBuild Sceneと同じ新しいシーンで、Beachはそのまま(Clearwaterが作る地面)、ほかはそれに地面を足したものです。開いているシーンは変えません。実行の前に、開いているシーンを保存するかを聞かれます。作り終えるとBeachのデモが開きます。
どのデモでも、空のパネル(「時刻と空」の章)を、VRでは左手のトリガー2回、デスクトップではTabキーを押している間、手元に呼び出せます。どのデモにも、パネルを出す小石は置かず、見た目も当たり判定もない呼び出し役(Sky Panel Caller)だけを置いています。スポーン地点は、どのデモでも海から離れた乾いた地面の上です。どのデモも、トーンマッピングはポストプロセス(PPv2)です。
| シーン | 開くメニュー | 内容 | 詳しい章 |
|---|---|---|---|
| Demo_Beach | Open Beach (Clearwater's own ground) | Build Sceneと同じ、Clearwaterが作る地面の浜(まっすぐな海岸線、既定の断面と起伏)。まず試すならこれです | 海岸を描く |
| Demo_Cove | Open Cove (a mesh as the ground) | メッシュで作った砂の入り江。外側の地面を「Match the user terrain」で同じ砂にしています | 自分の地形を使う |
| Demo_Harbor | Open Harbor (a quay and a pier) | 垂直な岸壁、階段護岸、スロープ、杭で立つ桟橋。杭にはObstacleを付けています | 自分の地形を使う、物を置く |
| Demo_Pool | Open Pool (still water only) | 海のない25mプール。深さは0.5mで、ジャンプすればプールサイドに上がれます。Poolを使わず、線をClosedにして囲み、打ち寄せる波をオフにしています | プールを置く(最初の段落) |
| Demo_Resort | Open Resort (the sea and two pools) | 海辺の建物に、1階の屋内プールと2階のテラスのプール。テラスへは、海に向かって右手の外壁沿いのスロープで上がれます。どちらのプールも深さ0.7mで、ジャンプすれば縁に上がれます | プールを置く |
| Demo_Terrain | Open Terrain (a Unity Terrain) | UnityのTerrainで作った入り江・岬・砂州 | 自分の地形を使う |
| Demo_LightVolumes | Open Light Volumes (VRC Light Volumes) | 夜(21時)の浜をPoint Light Volumeで照らしたもの。砂の上・浅瀬の上・水の中(浅い所と水深1.6m)のランプ、浜を照らすスポット、水際を回りながら色と明るさを変えるランプ(ClearwaterDemoLamp)。VRC Light Volumesが入っているときだけ作られ、メニューにも出ます | VRC Light Volumes |
デモは、メニューのOpen ...からでもProjectウィンドウからでも開けます。ベイクしたデータはシーンごとにあるので(下の「ベイクしたデータはシーンごと」)、デモを開いたり作り直したりしても、自分のシーンは変わりません。
Build Demo Scenesは、どのシーンも使う共有の素材(Assets/Clearwater/Generatedの直下)をBuild Sceneと同じように作り直します。デモが要らなくなったら、Assets/Clearwater/Demoフォルダと、Assets/Clearwater/GeneratedのDemo_で始まるフォルダを消してください。
シーンの「Coast (editor only)」を選ぶと、Sceneビューに波打ち際の線が出ます。線と断面(沖へ向かう地面の高さ)の設定は、InspectorのBakeを押すと、水面・水底・波・歩ける地面・波音の位置のデータになります(ベイク)。設定を変えたらBakeし直してください。し直すまでは、水も地面も前の形のままです。
Sceneビューには四角が3つ出ます。黄色は細かくベイクする範囲(Area Size)、緑は歩ける範囲(Ground Half Sizeはその半分の長さ。端に見えない壁が立ちます)、水色は海の範囲(Sea size)です。
線の形は、次の操作と設定で決めます。
Lineで線の種類を選びます:Straight(点を直線で結ぶ)、Smooth(点を通るなめらかな曲線、初期値)、Handles(Illustratorのパスのように、各点の2本のハンドルで向きと曲がり具合を決める)Closedにすると輪(島・湖)になります断面と波の設定です。
Gentle Beach(遠浅の浜、数値で調整)かCurve(波打ち際からの距離に対する地面の高さを曲線で描く)Presetで選んで「Apply」。遠浅の浜(数値)、急な浜、砂州のある浜、礁湖(広い浅瀬)、湖岸(Shore wavesオフ向け)、磯の急斜面、丘の下の遠浅の浜(遠くからも陸が見える)。遠浅の浜以外はCurveとして入るので、そのまま曲線を手直しできますShore wavesをオフにすると、波打ち際の波と波音がなくなり、岸の水は静かになります(湖や池向け)。なくなるのは、寄せ波・砕波・泡・濡れた砂と、打ち上げ(砕けた波が浜を駆け上がって引いていく水)です。沖の小さな波と、遠くの海の環境音は残ります海の広さはSea size(初期値5000m四方、水のオブジェクトが中心)で変えられます。Bakeすると、水面・遠くまで描く地面・水中の表現がこの広さに合わせて変わり、水面の端は遠くのもやに溶け込みます。ワールドのReference CameraのFar Clipは、Sea sizeの0.8倍(初期値なら4000m)が必要です。足りないとInspectorに警告と「Set ○○ m」ボタンが出て、押すとワールドのReference Cameraに設定されます。
ベイクしたデータと、それを読むマテリアル(水・水底・水中・空など)は、シーンごとのフォルダーAssets/Clearwater/Generated/(シーン名)_(英数字 8 文字)にあります。英数字はシーンのGUIDの先頭で、シーンの名前を変えても同じフォルダーが使われます。同じプロジェクトの複数のシーンでClearwaterを使っても、それぞれのBakeは互いに影響しません。マテリアルで調整した値も、シーンごとに別です。
Assets/Clearwater/Generatedの直下に作ったデータは、最初にBakeしたシーンのフォルダーへ移ります。別のシーンが同じデータを使っていたら、そのシーンのBakeのときに複製されて分かれますAssets/Clearwater/Generatedの直下で共有します波は沖から一方向に寄せ、浜ごとに、その向きへ開けている分だけ届きます。湾の奥には湾口から入る分だけが届き、波が沿って走る壁ぎわではほとんど砕けません。この届き方の違いは、波の高さ・打ち上げ・白波・泡・波音の大きさに表れます。
届くタイミングも向きで変わります。湾の奥には遅れて届き、斜めに寄せる波は浜に沿って順に砕けていきます。波は浅い所ほど遅く進むので、届く時刻もそれに合わせて計算しています。波音は、聞こえてくる浜の波に合わせます。
Swell direction auto(初期値オン):このオブジェクトのまわり約200mの海岸が、平均して向いている正面から寄せますSwell from:autoを外したときの向き(ワールドの+Zから時計回りの角度)Swell spread(初期値25°):広げると、湾の奥や横向きの浜にも波が回り込みますSceneビューの「swell」の矢印が、いまの向きです。
線は歩ける範囲の外まで描けます。遠くに点を置けば、岬・湾・対岸などの形になり、水面・遠景の地面・沖の波がその形に沿います。黄色の四角の外は、海全体(水色の四角)を粗くベイクしたデータで描きます。その間隔はSea size ÷ Outer Resolutionで、初期値では5000m ÷ 1024 ≒ 5mです。海の外では、線はそのまま同じ向きに続きます。
Curveにし、陸側(マイナス側)を高くします水の下から浜までひと続きの地面(Bed)の見た目は、CoastのBed lookで選びます。水の下と浜は同じ見た目になり、変更はBakeなしですぐ反映されます。
Sand | Pebbles |
|---|---|
![]() | ![]() |
Sand(ベージュ〜茶色の砂浜、初期値)/ Pebbles(小石)。CoastのSand / Pebblesボタンで切り替えられますColor(色、必須・タイル状)とHeight(高さ、任意。なければ色の明るさから推定)、1枚が何m四方か(Tile size)を指定しますSand fill)、波紋(Ripple marks。Sand bedをオンにすると底全体に)、藻の色(Weed tint)、色味(Tint・Saturation・Brightness・大きなまだらPatchiness・小石の落ち着いた色調Muted grade)Smoothness(StandardシェーダーのSmoothnessと同じ意味。初期値0 = つやなし)。水より上の乾いた地面に、空の映り込みと太陽のハイライトが付きます。0のときは負荷も増えません歩ける範囲(緑の四角)の地面を、自分で作ったメッシュやUnityのTerrainにできます。岩場の入り江や、岸壁のある港のように、線と断面では作れない形に使います。
| メッシュの入り江 | 岸壁のある港 | UnityのTerrain |
|---|---|---|
![]() | ![]() | ![]() |
Terrain sourceをUserにし、User terrainにその親を指定しますBakeすると、次のようになります。
Closedにしたときは差し替えないので、線を波打ち際に合わせて描いてくださいSeam width(初期値20m)の幅の境目で地形の縁の高さになめらかにつながります外側を同じ見た目にするには、Bed lookの「Match the user terrain」を押します。地形の大部分を覆うマテリアル(Terrainなら一番多く塗られたレイヤー)のテクスチャ・色・1枚の大きさ・SmoothnessからBed lookが作られます(Specular HighlightsとReflectionsが両方オフなら、つやなし)。作られたBed lookはシーンと同じフォルダに「(シーン名) Bed Look」として保存され、Coastに設定されます。境目の外側と遠くの水底が地形と同じ見た目になり、明るさなどはそのBed lookで調整できます。
UnityのTerrainでは、高さをTerrainのデータから直接読みます(メッシュと重なる所は高いほう)。水底の平均の色と「Match the user terrain」は、塗られたレイヤーから取ります。標準のTerrainシェーダー(Standard)はテクスチャのアルファをSmoothnessとして使うので、アルファ付きのテクスチャだと地面が鏡のように光ります。つや消しにしたいときは、Nature/Terrain/DiffuseのマテリアルをTerrainに指定してください。
Bakeで見つかった問題は、CoastのInspectorに番号付きの警告として出ます。Sceneビューには同じ番号の赤い印が出て、「Show」でその場所を映せます。
| 警告 | 何が起きるか | 直し方 |
|---|---|---|
| 歩ける範囲に、地形で覆われていない所がある | そこには立てる地面がなく、落ちる | 地形で覆うか、Ground Half Sizeを小さくする |
| 地形が、ベイクする範囲(歩ける範囲と境目)からはみ出している | はみ出した所に生成地形が重なって見える | 地形を小さくするか、Ground Half SizeかSeam widthを大きくする |
| 境目が急(高低差が境目の幅の0.2倍を超える) | 地形のまわりに土手や溝ができる | Seam widthを広げるか、縁の高さが生成地形に近くなる所まで地形を延ばす |
| Coastの線が、歩ける範囲の端で地形の波打ち際から5m以上離れている | 波打ち際が端でずれる | 線の端を地形の波打ち際に合わせる |
海とは別の高さに水面を置けるプールを、いくつでも追加できます。リゾートの建物なら、1階の屋内プールと2階のテラスにあるプールを、海と一緒に置けます。水面・水中・光の模様・触ったときの波紋は海と同じ仕組みで、打ち寄せる波と波音はありません。
| 1階の屋内プール(部屋が映る) | 2階のテラスのプール | プールの水中 |
|---|---|---|
![]() | ![]() | ![]() |
同じ水面の高さのプールだけで海がないワールドなら、Poolを使わずに前章の「自分の地形」でも作れます。Shore wavesをオフにし、線をClosedにしてプールを囲みます。水は地形が水面より低い所にだけ見えるので、水面の高さが同じなら、プールがいくつあっても使えます。線は全部を囲む輪で構いません(1つだけ囲んでも見た目はほぼ同じです)。
Poolは次の手順で置きます。
Tools > Clearwater > Add Poolで「Pool」を置き、プールの水面の高さに合わせます。オブジェクトの位置が水面です。回転はさせませんSize(水面の範囲、xとz)を水槽の内側より少し大きめにします。水が見えるのは水槽が水面より低い所だけなので、大きめで構いません設定は次のとおりです。
Wave Strength:水面の揺れ(海の波を1として。初期値0.35)。光の模様の濃さも同じだけ弱まりますIndoor:屋内。太陽の光(光の模様・ギラつき・日の当たる底)がなくなり、空の代わりに部屋が映ります。部屋が映るのはリフレクションプローブからなので、プローブを置かないと何も映りません
Fog Distance:水中の見通し(m)Bakeすると、次のようになります。
Pools/に保存されますBakeで見つかった問題は、PoolのInspectorに番号付きの警告として出て、Sceneビューに印が出ます。
| 警告 | 何が起きるか | 直し方 |
|---|---|---|
| 水がない | 水面が描かれない | Poolの位置を水面の高さにする。Basinから天井やカバーを外す |
水槽がSizeの外まで水面下に続いている | その部分で水が途切れる | Sizeを大きくする |
| ほかのプールと同じ高さで重なっている | 水中になるのは一度にどちらか一方だけ | プールの位置か高さをずらす |
| 回転している | 水面は回転せず、ワールドの軸にそろった四角のまま | Poolは回転させず、Basinの中身を回す |
次のことはできません。
海岸の上に置いた物は、ClearwaterStampを付けてからBakeすると、海岸の一部として扱われます。

| モード | 使い方 | 効果 |
|---|---|---|
| Obstacle | 水中に立つ岩・杭・流木など、実際に見える物に付ける | 波がその物に当たって砕け、周りに白波ができる。Receive Causticsで水中部分に光の模様が落ちる(ClearwaterPropsレイヤーに移動) |
| Raise Ground | 形を作るための見えないブラシ(任意のメッシュ) | その上面が地面になる(砂州・岩棚)。水底・歩ける地面・波がすべて追従 |
| Carve Ground | 同上 | その上面まで地面が掘られる(潮だまり・水路) |
ブラシはBakeのあとは見えなくなり、Sceneビューにはワイヤーフレームで出ます(アップロードには含まれません)。スタンプの周りには30°ほどの斜面が自動で付きます。スタンプを動かしたらBakeし直してください。
波・明るさ・雲・音量を変える設定の置き場所です。マテリアルはAssets/Clearwater/Generatedの中の、シーンのフォルダーにあります(「ベイクしたデータはシーンごと」)。
波の大きさ:Water・SeabedマテリアルのBreaker height(砕ける波の高さ)/ Run-up(打ち上げが届く高さ。Breaker heightの倍数)
波が沖のどこから現れるか:WaterマテリアルのSwell start depth(初期値2.6m)。水深がこれより浅い所からうねりが現れ、0.8m浅い所で本来の高さになります。深くするほど沖から見えます(沖ほど波は低い)。海岸の断面の最深部より深くすると海全体にうねりが出て、そのぶん重くなります(範囲0.5〜6m)
波打ち際の白波:Whitewater height(打ち上げる波の先端の盛り上がり、初期値3cm)/ Foam relief(泡の凹凸の陰影。近くで見るとき用、初期値0 = なし)
打ち上げの速さと距離は、Bakeのときに浜の傾きから自動で決まります。坂に投げたボールと同じ動きで、緩い浜ほどゆっくり遠くまで上がります。浜の傾きはCoastのBeach Slope(初期値0.1)です
明るさ:水・Seabed・空・水中のマテリアル(Water・Seabed・Sky・Underwater)のSun intensity / Exposure。4つとも同じ値にします
雲:空のマテリアル(Sky)のClouds
Cover(0 = なし、初期値)、大きさ、流れる速さと向きを決めますGeneratedのシーンのフォルダーのCloudDome)に少しずつ描き直し(約0.2秒で空を一周)、空と水はそれを読むだけです。描き直しの合間も、雲は風に合わせてなめらかに流れます。ドームはBuild Scene、CoastのBake、シーンを開いたときに作られますAs in 1.2をオンにすると、1.2までの雲(空が画素ごとに描く平らな雲)に戻ります。雲の影は出ず、雲のドームも描かないので、負荷も1.2と同じです。1.2で作ったワールドの見た目を変えたくないとき用で、初期値はオフ(新しい雲)です
左が1.2までの雲、右が1.3の雲です(どちらも雲30%、同じ時刻・同じ視点)。1.2までは陰影の少ない平らな雲で、筋のようにちぎれた形でした。1.3では雲を立体の積雲として照らすので、日の当たる側が明るく下面に陰ができ、夕暮れは日の色に染まります。水面にもはっきり映り、海と浜には影を落とします。そのぶん負荷は約0.4ms増えます(「負荷の目安」)
遠景の陸:空のマテリアル(Sky)のDistant land。水平線のどれだけを陸(松林の岬)が占めるかを0〜1で決めます(0 = 一周すべて海、1 = 一周すべて陸、初期値0.5)。陸は海と反対側を中心に広がり、端は海面までなだらかに下がります。どちらが海かは、CoastのBakeがうねりの来る向きから決めます(海岸がなければ+Z側)。海岸があれば、陸は2km先まで地面が続く方角にだけ立ち、海岸線が歩ける浜から離れていく所では、海岸と一緒に海面まで下がります(海の上に山が浮きません。CoastのBakeが空のマテリアルにも海岸を渡します)。Land setbackで山を海岸線から内陸へ下げ(m)、Land heightで高さを変えられます(1 = そのまま、0 = 山なし)。雲と同じく、水面とSeabedのマテリアルにもコピーされます
波紋・波音の音量:シーンの「Clearwater Controller」。Sound Volume(0〜1)は3つの波音をまとめて下げる倍率で、ワールドのU#から変えられます(動画の再生中に下げる、スイッチで消す、など)。建物があるときは、Buildingsに建物の箱(Clearwater SkyのSky Light Volumesと同じもの)を入れると、中では波音が遮られてIndoor Level(初期値0.3)倍になり、床下の波打ち際からは鳴らなくなります
水中の見え方:水中のマテリアル(Underwater)のFog density(見通し。1で水面から見た水と同じ濃さ、小さいほど遠くまで見える。初期値0.2)/ Fog saturation(遠くで行き着く水の色の濃さ。初期値0.7)/ Fog brightness(その色の明るさ。初期値1)。水面から見た水の色は変わりません
空の色は、大気が日光を散らす様子を物理に沿って計算したものです。空気の分子が青い光をよく散らすので昼の空は青く、夕方は赤い光だけが長い距離の空気を抜けて届きます。太陽の周りの白いまぶしさは細かい粒子の散乱、日没後の深い青紫はオゾンの吸収です。この計算はエディターで一度だけ行って表(Assets/Clearwater/Generated/SkyLUT.asset)に保存し、実行中は表を引くだけです。
時刻を変えると、空の色と一緒に、太陽の光の向きと色、アバターやワールドに当たる環境光、空の映り込みも変わります。夜は満月が太陽の反対側から照らし、星と天の川が天の北極の周りを回ります。
Build Sceneで作ったシーンでは、太陽(Sun)に「Clearwater Sky」コンポーネントが付いています。前からあるシーンには、Tools > Clearwater > Use Clearwater Sky and Sunを一度実行すると付きます。ワールドの太陽をそのまま使うシーン(Add to Current Sceneで「使わない」を選んだとき)には付かず、時刻のない空(太陽31°の午後の空)のままです。
時刻の扱いは2通りです。
Cycleオフ、初期値):Time of dayの空のまま変わりませんCycleオン):インスタンスが開いたときにTime of dayから始まり、Day minutes分(初期値24分)で1日が過ぎます。開始の時刻はインスタンスのオーナーが配るので、後から入った人にも同じ時刻の空が見えますInspectorで値を動かすと、SceneビューとGameビューにすぐ映ります。初期値(16:30、北緯35°、夏至)では、太陽の位置と光が時刻のない空と同じになります。
| 項目 | 内容 |
|---|---|
Time of day | 時刻。その土地の太陽の時刻で、12時に太陽が一番高くなる |
Cycle / Day minutes | 時刻を進めるか / 1日にかかる実時間(分) |
Latitude / Day of year | 緯度 / 1月1日から数えた日。太陽の高さ、昼と薄明の長さが決まる |
North | ワールドの中で北がどちらか(+Zから時計回りの角度)。ボタンNorth as the fixed sky'sで初期値に戻る |
Moon | 満月を出す。夜の明かりになる |
Night brightness | 月夜の明るさ(昼に対して。初期値0.05) |
Stars | 星と天の川の明るさ |
Underwater Glow | 日も月も光らない夜に、水中から見て水に残すほのかな青緑の明るさ(初期値1。0で真っ暗、3でかなり明るい) |
Update interval / Probe interval | 時刻を進めるとき、空の光を更新する間隔(初期値0で毎フレーム。間隔を空けても、太陽と月の向きは毎フレーム動く)/映り込みを描き直す間隔(10秒) |
夜の明るさには、目が暗さに慣れる分を入れています。光の量は昼から月夜までに100万分の1ほどになりますが、画面は真っ暗にならず、月夜は昼の5%ほどの明るさで、色が褪せて青みがかって見えます。日の出前と日没後は、暗くなった景色に対して地平線の残照が明るく見えます。
Tools > Clearwater > Add Sky Control Panelを実行すると、空と波のパネルと、スポーン地点の前の砂浜に小石(Sky Stone)が置かれます。パネルの左の「Sky」には、時刻・雲の量・雲の流れる速さ(Cloud drift、0〜60m/s)・1日の長さ(A day in)のスライダーと、時刻を進めるかのトグル(Day goes by)が並びます。右の「Waves」には、岸の波の高さ(Shore waves)・沖のさざ波の強さ(Ripples)・さざ波の速さ(Ripple speed)のスライダーと、全部を初期状態に戻すボタン(Reset all)が並びます。パネルは普段は隠れていて、小石をInteractする(表示はSky & Waves)と、小石の上に、目より少し低い高さでこちらを向いて出ます。小石は好きな場所へ動かしてください。すでに置いてあるときに実行すると、小石を同じ位置に残して作り直します。
Call Anywhereでオフにでき、キー(Desktop Key)、2回の間隔(Double Tap Time)、手の上の大きさ(Hand Size)と手からの距離(Hand Reach)、離れると隠れる距離(Hand Close Distance)、デスクトップで画面を埋める割合(Desktop Fill)、フェードの時間(Show Time・Hide Time)も変えられます。1.3.0までに作ったパネルは、Add Sky Control Panelで作り直すと、フェード(パネルのCanvasGroup)と三人称の案内(Sky Panel Hint (Clearwater))が付きますClose Distance。0にすると離れても隠れません)。置いた場所のまま出すときは、小石のShow Aboveをオフにします。いつも出しておくときは、パネルを有効にして小石を消してくださいShore wavesをオフにしたときと同じ静かな水際になります(泡や濡れた砂も消えます)VRChat/Mobile/Worlds/Supersampled UI)で描くので、VRでも縁がにじみにくくなります。プロジェクトにTextMesh ProのEssential Resourcesがないときは、パネルを作るときに取り込みます(Assets/TextMesh Proができます)自分のUdonから変えるときは、Clearwater SkyのSetHour(時刻)・SetCycle(true/false)・SetDayMinutes(分)・ResetTime()と、Sky & Waves Settings(ClearwaterSettings)のSetClouds(0〜1)・SetCloudDrift(m/s)・SetShoreWaves(m)・SetRipples(0〜1)・SetRippleSpeed(倍率)・ResetAll()を呼びます。どれも全員に同期します。
ワールドに自分で置いたリフレクションプローブとライトマップは、ライトベイクしたときの明るさのままです。夜のシーンで明るく浮くときは、それらを外すか、夜向けにライトベイクし直してください。建物の中に空の光を入れるには、次の節の方法を使います。
ライトマップに空の光をライトベイクすると、時刻を変えても室内はライトベイクしたときの明るさのままです。VRC Light Volumesを入れたワールドでは、空の光だけをAdditiveのLight Volumeにライトベイクすると、Clearwater Skyがその色と強さを時刻に合わせて変えられます。窓から入る空の光が、昼は白く、夕方は橙に、夜は月明かりになります。
Additiveにします。部屋の中だけを覆うものをもう1つ重ねると、室内だけを明るくできます(下のSky Light Gains)Hemispherical(上半分だけ)にし、ほかの光源はすべて切ります。地面からの照り返しが欲しいときは、ライトベイクする間だけ砂や海の色の板を置きますBakeを切り(ライトベイクした空の光が残ります)、ライトマップと残りのLight Volumeを、照明など時刻によらない光だけでライトベイクし直しますSky Light Volumesに、そのLight Volume(LightVolumeInstance)を入れます| 項目 | 内容 |
|---|---|
Sky Light Volumes | 空の光だけでライトベイクしたAdditiveのLight Volume |
Sky Light Gains | Light Volumeごとの倍率(同じ順。なければ1)。室内では目が屋外よりずっと暗い光に慣れるので、部屋の中だけを覆うLight Volumeを3〜4倍にすると、測った明るさではなく見た目の明るさになります |
Sky Light Horizon | 入る光のうち、地平線の近く(窓・軒の下)から来る割合(初期値0.6)。残りは空の高い所から |
Sun Bounce | 地面や床が返す日差しの割合(水平な地面に当たる日差しに対して。初期値0.15)。日の差し込む部屋が、その照り返しで明るくなります |
Sky Reflection Probes / Sky Probe Gain | 空の光だけでライトベイクしたリフレクションプローブ(Custom)と、その強さの倍率。強さが空の光に合わせて変わります。照明だけでライトベイクした同じ範囲のプローブと対にすると、Unityが2つを半分ずつ混ぜるので、映り込みも光と同じく足し合わされます(そのときは、どちらも強さを2倍に) |
Lamp Light Volumes / Lamp Night Gain | 照明だけでライトベイクしたAdditiveのLight Volumeと、夜に足す量(初期値2)。夜が深まるほど強くなり、昼は0です。夜の室内では目が灯りに慣れるので、ライトマップの照明がその分だけ明るく見えます |
VRC Light Volumesをオン。Mochie Standardは初期設定のままで足します)Sky Light Volumesの箱(最初の4つ)を、浜と水は建物として扱います。箱の中の浜と水にはAdditiveのLight Volumeを足しません(空の光は浜がもう受けているので、二重になって箱の形に明るくなるため)。箱の中にあるPoint Light Volume(室内のダウンライトなど)は、どこの浜と水も照らしません(Light Volumeの光は壁で遮られないので、壁を抜けて外の砂に漏れるため)Cloudsのまま)トーンマッピングは、明るすぎる色を画面に出せる範囲へ丸める処理です。Clearwaterには2つの方式があります。
Build Scene・Add to Current Scene・デモシーンは、ポストプロセスにします(Post Processingパッケージがないプロジェクトではシェーダー内)。Tools > Clearwater > Tone Mapping > In Shadersでシェーダー内に、In Post-processing (PPv2, default)でポストプロセスに切り替えます。ポストプロセスにすると、ClearwaterのマテリアルのTone map in shaderがオフになります。グローバルなPost-process Volumeは「PostProcessing」レイヤーに追加されます。このレイヤーがなければ、空いているユーザーレイヤーを「PostProcessing」にします。ワールドのReference CameraにはPost-process Layerが付きます。
プロファイルはAssets/Clearwater/Generated/ClearwaterPost.assetで、中身はシェーダーと同じトーンカーブを書き込んだLUT(ClearwaterToneLut.asset、Color GradingのExternalモード)と、弱いブルーム(強さ0.15、しきい値2。太陽やそのきらめきのような本当に明るい所だけがうっすらにじみます)です。色は、シェーダー内でトーンマップしたときと比べて平均1/255以下の差に収まります。
Post-exposureで、ブルームもプロファイルで調整できます。切り替え直してもプロファイルは上書きしませんExposureを変えたときは、もう一度In Post-processingを選ぶとLUTが作り直されますPPv2に内蔵のACESは使っていません。明るい所の丸め方が違い、水中から太陽を見ると白い範囲が大きく広がるためです。
カメラ(頭・画面・写真カメラ)が水面から60cm以内にあるときは、画素ごとに水の上か下かを決めます。レンズが水面をまたぐと、画面の上側は水上、下側は水中(フォグ付き)に分かれて写ります。この間は水面・水中の処理が少し増えます。
水面は、ほかの半透明の物より先に描かれ、深度を書き込みません。そのため、アバターの半透明の服や髪は、どのレンダーキューでも水に隠れません。服が水中で消えて体が見える、という透けは起きません。
見え方はレンダーキューで変わります。
| アバターのマテリアル | 水中の部分の見え方 |
|---|---|
| 2500以下(lilToonの半透明の既定値2460など) | 水の色を帯び、屈折して見える |
| 2501以上(3000など) | 水の色を帯びず、水の上にあるように見える |
水中から見ると、3050以下は水中のフォグで霞み、3051以上は霞まずに見えます。ワールドに置く半透明の物(泡のパーティクルなど)も同じ扱いです。水面より後に描かれるので、水中にあっても水の上に重なって見えます。
VRC Light Volumes(RED_SIM)を入れたワールドでは、AdditiveにしたLight VolumeとPoint Light Volumeの光が、浜・水底・泡にも当たります。水面には、その光の照り返しが映ります。アバターを照らすのと同じ光なので、夜の浜に置いたランプや焚き火は、そばのアバターと砂を同じように照らします。

VRChatではClearwater VRCLV demoで試せます。下の「デモで試す」のデモを公開したワールドです。
LightVolumes.cginc、MIT)を同梱しているためです。Light Volumeのないワールドでは、見た目も負荷も変わりませんLight Volumesを入れたプロジェクトでは、Build Demo Scenes(「デモシーンで試す」)が、上の画像のデモ「Demo_LightVolumes」も作ります。Tools > Clearwater > Demo Scenes > Open Light Volumes (VRC Light Volumes)で開けます。夜21時の浜に、Point Light Volumeで次の光を置いています。
| 光 | 見どころ |
|---|---|
| 砂の上のランプ(暖色) | 砂と、打ち上げた泡が照らされる |
| 浅瀬の上のランプ(暖色) | 水の中の底が照らされ、水面に照り返しの道ができる |
| 水の中のランプ2つ(青。浅い所と水深1.6m) | 水の中から底を照らす。水の上からも、水の中からも見える |
| 浜を照らすスポット | 上から下に向けたスポットライトの光の輪 |
| 動くランプ | 水際をまたぐ半径4mの円を24秒で回り、色と明るさを変え続ける。砂・泡・水の中の底の光が付いていき、深い所では水面の下に潜る(ClearwaterDemoLamp。速さや範囲はInspectorで変えられます) |
どのランプにも、場所が分かるように小さな光る球を付けています。時刻は空のパネル(Tabキーか左手のトリガー2回)で変えられるので、昼と夜で見比べることもできます。
パッケージ1.0.0をRTX 4070 Ti SUPERで測った値です。Unityエディターで、VRの片目に近い2048×2048・視野90°に同じ視点を繰り返し描き、GPUの完了を待って測りました(Unityのウィンドウは最前面)。シーンはBuild Sceneのもの(16時、雲30%)で、ポストプロセスは含みません。VRの両目では、ほぼこの2倍になります。
| 視点 | 負荷(片目) |
|---|---|
| 浅瀬で足元を見る | 約5.7ms |
| 水上から沖を見下ろす(水が画面いっぱい) | 約4.8ms |
| 浜から沖を見る | 約2.8ms |
| 水中から水面を見上げる | 約2.6ms |
次の条件では、上の値に加えて負荷が増えます。どれも、その条件だけを入れた場合と切った場合を交互に測った差です。
| 条件 | 増える負荷(片目) |
|---|---|
| プールの水が画面の大半を占める(水を描かない場合と比べて。画面に映っていないプールは負荷なし) | +1.3〜1.7ms |
Foam reliefを2cmにして、波打ち際を近くで見る | +0.45〜0.9ms(その時の泡の量による) |
| トーンマッピングをポストプロセスで(シェーダー内と比べて。ブルーム込み) | +0.35〜0.5ms |
| 雲(Coverが0より大きいとき。パッケージ1.3.0で測定。雲のドームを描き直す分で、画面の大きさや両目によらず1フレームに1回) | +0.4ms |
| 時刻の空(Clearwater Sky。時刻のない空と比べて) | 昼に空を見上げて+0.1ms、夜空を見上げて+0.15ms |
| 太陽の影(影を描く分と、浜と水底がそれを読む分。水が奥行き情報を使うので切れません) | +0.1〜0.15ms |
| 自分の地形(Projectorの分) | +0.15ms以下 |
| スタンプがある | +0.05ms以下 |
| VRC Light VolumesのPoint Light Volume 2つの近くを見る(Light Volumeのないワールドでは増えません) | +0.1〜0.4ms |
Tools~/(Unityには読み込まれないフォルダ)に、波音の加工手順があります。ffmpegが必要です。
Tools~/make_wave_audio.sh <元の録音.flac>:元録音から3種類のループ(Runtime/Audio/*.ogg)を作るnode Tools~/detect_wave_breaks.js:波打ち際の音から波が砕ける瞬間を探し、波の時刻表(Runtime/Audio/WavesShore_breaks.json)を作る。波音を差し替えたら必ず実行するMIT License(LICENSE、© 2026 bmbb93 (vbamboo))。水の表現はclearwater by Aureliengmz(MIT、© Lumaris、Third Party Notices.md)を移植したものです。VRC Light Volumesのシェーダーの部品(Runtime/Shaders/ThirdParty/LightVolumes.cginc)はRED_SIMによるもので、MIT Licenseです。
tools/make_pebbles.py、砂はTools~/make_sand.py)com.vbamboo.clearwater
https://github.com/bmbb93/clearwater-vrc#readme
1.3.1 (Changelog)
2022.3 or later
No dependencies
No legacy packages