Unityで湖や海を作成する

今回はUnityで湖や海等を作ってみたいと思います。

Unityで水を表現する方法は、テクスチャを張って水のように見せる方法と、スタンダードアセットに入っている水のアセットを使う方法があります。

言わずもがな、スタンダードアセットに入っている水のアセットは、波の表現や水面に反射する物体の表現もされるので非常に綺麗です。

スポンサーリンク

水のテクスチャを張る

Terrainを使っているならテクスチャを張るメニューで水のテクスチャを選択し、それを地面に塗って水の表現をする事が出来ます。

水のテクスチャを張る

↑のようにTerrainのメニューでテクスチャを選択し、Edit Textures…で水のテクスチャを選択し、それをTerrainの地面をドラッグし塗っていきます。

水のテクスチャを張った例

水のテクスチャを張ると↑のような感じになります。

水の表現は出来ますが、テクスチャを塗っているだけなので水は動きません。

スタンダードアセットにあるWaterを使う

スタンダードアセットにある水は平たいメッシュで作成されており波の表現も自動でされているので、さきほど紹介したテクスチャを張るよりも綺麗でよりリアルな表現をする事が出来ます。

Water(Basic)

Assets→StandardAssets→Environment→Water(Basic)→Prefabsの中にあるWaterBasicDaytimeは昼間、WaterBasicNighttimeは夜の水を表現しています。

Water(Basic)の中の水は設定は、そのままヒエラルキー上に設置すると水を表現する事が出来ます。

Scaleを調整し大きさを変える事も出来ます。

↑のように水が揺れているのがわかります。

WaterBasicDaytimeとWaterBasicNighttimeを比較すると

WaterDaytimeとWaterNighttimeの比較

↑のようになります。

Water(Basic)の中の水は水自体は透けておらず、また水の表現をパラメータで変更する事も出来ません。

Water(簡易設定版)

Assets→StandardAssets→Environment→Water→Water→Prefabsの中にあるWaterProDaytimeとWaterProNighttimeはよりリアルな水で透けたり水に反射した物体の表現等がされています。

Water(簡易設定版)のインスペクタ

  • Water Modeは水のモードを選択し、SimpleはWater(Basic)と同じ、Reflectiveは反射を反映、Refractiveは屈折を反映したモードのようです。
  • Disable Pixel Lightsはオブジェクトに影響を与えるピクセルライトを無効化します。
  • Texture Sizeは水のテクスチャのサイズを指定します。
  • Clip Plane Offsetは反射をどの距離から反映させるか
  • Reflect Layersは反射するゲームオブジェクトのレイヤーを設定します。
  • Refract Layersは屈折するゲームオブジェクトのレイヤーを設定します。
  • 実際に水を設置し設定を変更して水に反射する他のゲームオブジェクト等を見てみます。

    ↑のようになりました。

    Water(パラメータで波の大きさ等が変更出来る)

    Assets→StandardAssets→Environment→Water→Water4→PrefabsにはWater4AdvancedとWater4Simpleがあります。

    この二つの水は反射や屈折する水の色を変更出来たり、波の表現も変更出来ます。

    Water4Advancedでは泡の表現も変更出来ます。

    設定を変更する前に注意してください。

    Water4の水のプレハブの設定はUnityエディターの実行中に行った変更も反映されてしまうので、まずはWater4AdvancedやWater4Simpleを選択中にCtrl+Dキーを押してコピーし、名前を変えてそれをヒエラルキー上にドラッグ&ドロップします。

    コピーし名前を変えた水のプレハブの設定を変更し、お気に入りの設定を探すのがいいと思います。

    万が一設定を変更し戻せなくなってしまった時は元のプレハブをまたコピーしてやり直せます。

    元のプレハブ自体の設定を変えてしまった場合は、UnityのエディタメニューのAssetsからImport Package→EnvironmentまたはAssetsフォルダ内で右クリック→Import PackageでEnvironmentを選択し水のプレハブをインポートし直すしかなさそうです。

    Water4Advancedの設定を見ていきます。

    Water Baseの設定

    Overral Qualityは全体の品質を設定します。
    Qualityは品質の設定です。
    Edge blend?にチェックを入れると水と他のゲームオブジェクトとの接触面をブレンドして目立たなくします。

    Main Colorsは波の反射、屈折の色を設定します。
    Refractionは屈折の色
    Reflectionは反射の色

    Main Textureは波のデコボコと泡のテクスチャを設定します。
    Normalsは波のデコボコのテクスチャ
    Shore & Foamは泡の表現に使うテクスチャを指定します。
    Tilingはテクスチャの繰り返し設定、Directionは方向を設定します。

    Normalsはノーマルマップの光の反射や屈折の変位の設定です。
    Per Vertexは頂点の変位設定
    Per Pixelはピクセル単位での変位設定
    Distortionはねじれの変位設定

    Fresnelはフレネル反射の設定で、反射と屈折の関係性を設定出来るようです。
    Intensityは光の反射や屈折の強度?
    Powerは反射や屈折の強さ
    Biasは傾向?

    Fadingはフェード(衰えさせる)の設定で
    Edge fadeは角のフェードの設定
    Shore fadeは岸部分のフェードの設定
    Extinction fadeは完全に消す時の設定?

    Foamは泡の設定です。
    Intensityは強度
    Cutoffは泡を消す時の設定です。

    以上Water Baseについて見てきましたがわからない設定が多いですな・・・・(^_^;)

    Specular Lighting

    Specular Lightingは鏡面の設定のようです。
    Specular lightは鏡面用のライトを設定します。
    Specularは鏡面の色
    Specular powerは鏡面の強さ

    Specular Lightingの設定は変更してみたもののよくわかりません。

    Planar Reflection

    Planar Reflectionは平面反射に関する設定のようです。

    Reflection layersは反射するレイヤーを設定
    Use skyboxは反射にスカイボックスを使用します。
    Clear Colorは水のReflection用のカメラのClear Colorを設定します。

    Planar Reflectionの設定もよくわかりませんね。

    Gerstner Displace

    Gerstner Displaceはゲルストナー波の設定みたいです。ゲルストナーは人名みたいです・・・(;一_一)

    Amplitudeは振幅の設定です。
    Frequencyは周波数の設定です。
    Steepnessは険しさの設定。
    Speedは速さ。
    Direction scale(Wave 1(X,Y) and 2 (Z,W))は波1、波2の方向のScaleの設定
    Direction scale(Wave 3(X,Y) and 4 (Z,W))は波3、波4の方向のScaleの設定

    ここら辺は実際に値を操作しながら確認するしかないですね。(._.)

    Water4Advancedの設定を変更してみる

    Water4Advancedのスクリプトの設定項目について見てきましたが、実際に操作してみない事にはどのような変化が起きるかわかりませんので、Unity実行中にパラメータを変化させ確認させてみます。

    設定を変えていくので、とりあえず元のプレハブをコピーしてお試し用の水を設置します。

    ↑のようになりました。

    パラメータを変化させることで、海の波のようだったり静かな湖の水の揺らぎだったりを表現出来そうです。

    最後の方でわざと水の中にキャラクターを移動させていますが、水は平面なので水中に入っても水の上と同じようになってしまいます。

    水の中に入ったらちゃんと水の中に入っているような表現にしないとおかしなことになってしまいますので、それらはまた別の対処が必要になります。

    そこら辺は

    UnityのスタンダードアセットにあるWaterを使って水の表現が出来ました。しかしWaterは平面なので水中に入っても地上と同じようにカメラに表示されます。そこで水中に入った時はスクリプトからカメラに映る映像にエフェクトを加え、水中にいるようにしてみます。

    ↑を参照してください。

    スポンサーリンク

    記事をシェアして頂ける方はこちら

    フォローして頂くとやる気が出ます