UnityのHDRP環境でTerrainツールを使ってみたまとめ


## 概要

記事執筆時点
2019/03/09

エンジニアがUnityのTerrainツール使って背景っぽいものを作るのにあたって書き残したメモ。
HDRPに途中から切り替えたので、そのとき当たった壁の解消法も残しています。

### 作業環境

|Platform|Unity Version|
|-----------------|------------------|
|Windows|2018.3.8f1|


- Terrainツール
    - UnityTerrainEditor
- RenderPipeline
    - HighDefinition Render-Pipeline
- PostProcess
    - PostProcessStack

**だいたいこんな感じのものが出来あがる想定。**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116607/5b3b8afe-84ff-f2e8-e1d8-c7cb94ccd31b.png)


## なんでUnityのTerrainツール？
なんとなく使ってみたかったので。
RenderPipelineとかShaderGraphとか使うならついでに勉強できるかなという期待

## 参考にしたマニュアル

### [Unity \- Manual: Terrain Engine](https://docs.unity3d.com/Manual/script-Terrain.html)

- 日本語マニュアルも存在するが、バージョンが古いためツールの操作の参考にはならない
    - わからない単語とかTerrainオブジェクト設定のプロパティの確認に使うのがよさそう

- Terrainオブジェクトを新しく作ったり高さ全リセットするとベイクが走る
    - そこそこ時間がかかる
    - とは言え広さと解像度によると思うけど数分で終わる
    - HDRPにすると時間が増えた気がする

### [Unity \- Manual: Terrain Layers](https://docs.unity3d.com/Manual/class-TerrainLayer.html)
TextureのLayerの設定
下記で紹介しているTerrainToolkit使うとほとんどLayerを直接触らなくなった

### [2018\.3 Terrain Update: Getting Started – Unity Blog](https://blogs.unity3d.com/2018/10/10/2018-3-terrain-update-getting-started/?_ga=2.239979786.866903585.1551794952-97609957.1493043322)

2018.3でアップデート、追加されたTerrainの機能。

## AssetStore, Packageでインポートしたアセット

### [Terrain Toolkit 2017 \- Asset Store](https://assetstore.unity.com/packages/tools/terrain/terrain-toolkit-2017-83490?aid=1011lGbg&utm_source=aff)

Terrainのテクスチャとかディティールとか自動で作ったりするツール群
高さに応じたテクスチャのレイヤーのブレンドもやってくれる

### [Post Processing Stack \- Asset Store](https://assetstore.unity.com/packages/essentials/post-processing-stack-83912?aid=1011lGbg&utm_source=aff)
Unity公式のPostProcessアセット。
ポストエフェクト。
レンダリング時に色調補正したりDOFを加えたりするのに使用する
Layer設定でDefaultのままだとパフォーマンスに影響出るかもって警告を出力されるのでとりあえず変えておく


### RenderPipelineの変更

[HD レンダーパイプライン：アーティストのためのクイックスタートガイド – Unity Blog](https://blogs.unity3d.com/jp/2018/09/24/the-high-definition-render-pipeline-getting-started-guide-for-artists/)

手順は上記UnityBlogの記事が参考になります。
プロジェクトを途中からHDRPに変更する際にやることとしては、下記項目になります。

- PackageManagerでRenderPipelineのパッケージをインストールする
    - Render-PipelineCore
    - HighDefinition RenderPipeline
- ProjectSettingのRenderpipelineアセットにHDRenderpipelineアセットをアサイン
- マテリアルをHDRP対応したものにアップデートする
    - メニューから一括でアップデート出来るようになっているので使う
- 出力するカラースペースをGammaからLinearに変更する

[High Definition Render Pipeline overview · Unity\-Technologies/ScriptableRenderPipeline Wiki](https://github.com/Unity-Technologies/ScriptableRenderPipeline/wiki/High-Definition-Render-Pipeline-overview)
HDRPの機能リファレンス


### 注意点
**パッケージをインストールする順番**
PackageManagerから入れるRenderpipelineは、最初にCoreをインストールしましょう。
.
RenderpipelineCore
↓
HDRenderPipeline
.
の順番になります。

**Consoleに下記のエラーが出力される**
> High Definition Render Pipeline doesn't support Gamma mode, change to Linear mode

[Unity \- Manual: Linear or gamma workflow](https://docs.unity3d.com/Manual/LinearRendering-LinearOrGammaWorkflow.html)

単純にHDRPがガンマ出力をサポートしてないみたいなので、Linear出力するようにプロジェクトの設定を変更しましょう。
プロジェクト作成時にHDRP選択してないとデフォルトはガンマ出力になってるっぽいです。

**作ってたTerrainオブジェクトが表示されなくなる**

マテリアルがピンクになるでもなく、単純に表示されなくなりました。
試しに新規でTerrainオブジェクトを作ってみると表示されます。
新しく作ったところと古いオブジェクトの設定を見比べるとマテリアルに差がありました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/116607/7852fefc-83a6-c3cc-c0e0-679567d9aa40.png)

ということで、HDRP対応のTerrainマテリアルをアサインする必要があります。
上図のようにTerrainのプロパティの設定からMaterialをCustomにしてHDTerrainMaterialを選択。


**AssetStoreの大体のアセットが対応してない**
まだPreview版ですしね。
フォーラムに色々書き込んだらUnityの人とかが対応してくれるかもしれない。

でもRenderPipelineが公式対応されるとアセットストアで配布してる人はRPの対応を迫られるんでしょうか。
疑問。

## ここまでの成果物

### ポストプロセス適用
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116607/5b3b8afe-84ff-f2e8-e1d8-c7cb94ccd31b.png)

### だいたいモデル完成

![image.png](https://qiita-image-store.s3.amazonaws.com/0/116607/925a3846-2001-1f83-666e-da4d2e75b2c8.png)

### モデル作成中
デバッグテクスチャで境目をわかりやすく表示
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116607/a6bba321-86fb-2439-2cff-8dce57aca154.png)


### ラフ絵
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116607/e2972302-2cbc-86fb-d488-6d878c6cf165.png)


## その他メモ

**作業中のメモ書き**
作業のメモ書きにQiitaを使用。
テキストが書ければ何でも良かったけど、WEB上で書いて勝手に下書き保存してくれるのでなんとなく選択。
あとでどうせQiitaに投稿するつもりでいたので最初からそこで書いてしまった方が早いなということで。

WindowsのPCで実作業、MacbookとかiPhoneでQiitaとSlack見て振り返りとかする
ただし資料もだいたいWEBのものを見るのでChromeのタブが無限にできる。
メモリが！足りない！
メインメモリ最低16GBはエンジニアの人権に最低限本当に必要。

**自分との会話**

若干怪しげな単語に見えますが、Qiitaにメモるまでもない思いついたこととかTodoを
Slackの自分だけのグループチャンネルにバンバン投稿してメモっています。
しばらくした後の自分がそのメモったスレッドに返信していく感じ。

何するか、何をしようとしていたか、今の状況のスクショとかをSlackで書いていってます。
後で「なんだっけ・・・」「何しようとしたんだっけ・・・」ってなったときに一応見返せる。
自分用だから文章もかしこまらないでOK。
ちゃんとした作業ログを残すならそういう目的を持った別のサービスを使った方がいいとは思います。

## 参考

[Unity \- Manual: Terrain Engine](https://docs.unity3d.com/Manual/script-Terrain.html)
[UnityのTerrainで大地を創る \- Qiita](https://qiita.com/yando/items/ef76c200bb50005170d5)
[Terrain Toolkit 2017 \- Asset Store](https://assetstore.unity.com/packages/tools/terrain/terrain-toolkit-2017-83490?aid=1011lGbg&utm_source=aff)
[【Unity】HDRPを使ってみる](https://nopitech.com/2018/07/15/post-754/)