Skip to content

Commit

Permalink
Merge branch 'release/v2.3.0'
Browse files Browse the repository at this point in the history
# Conflicts:
#	Runtime/CityImport/Load/Convert/ConvertedMeshData.cs
  • Loading branch information
linoal committed Dec 26, 2023
2 parents 024f9e5 + e7d78a9 commit 85f1b47
Show file tree
Hide file tree
Showing 266 changed files with 3,151 additions and 1,422 deletions.
50 changes: 34 additions & 16 deletions Documentation~/manual/ChangeColorByAttrs.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
# 属性情報によって色分けする
![](../resources/manual/changeColorByAttrs/screenShot.png)
このサンプルでは、土地計画決定情報および建物の水害時の想定浸水高に関する属性情報を読み取り、それに応じてランタイムで色を変えます。
上図は土地計画の区分を色分けするサンプルです。

![](../resources/manual/changeColorByAttrs/screenShot2.png)
上図は水害リスクを色分けするサンプルです。

このサンプルでは、土地計画決定情報および水害時の想定浸水高に関する属性情報を読み取り、それに応じてランタイムで色を変えます。

## サンプルを開く
このサンプルは次の場所にあります:
```(PLATEAU SDKのサンプルディレクトリ)/AttributesColorSample/AttributesSample.unity```
サンプルシーンを開き、Unityの再生ボタンを押すと地域ごとに色が付きます。
また、左上のボタンから色分けする区分を変更できます。
なお、実行には時間がかかる場合があります。

属性情報を読み取り、色を変えるスクリプトは次の場所にあります:
Expand All @@ -17,8 +23,6 @@
属性情報に応じて色分けするサンプルコード、`AttributesColorSample.cs`の内容は以下のとおりです。

```csharp
using System.Collections;
using System.Collections.Generic;
using PLATEAU.CityInfo;
using UnityEngine;

Expand All @@ -29,7 +33,7 @@ public class AttributesColorSample : MonoBehaviour
{
/// <summary> 色分けしたいターゲットを指定します。 </summary>
[SerializeField] private Transform targetParent;
private void Start()
private void Awake()
{
// PLATEAUCityObjectGroupコンポーネントに属性情報が格納されており、ランタイムで読み込むことができます。
var cityObjGroups = targetParent.GetComponentsInChildren<PLATEAUCityObjectGroup>();
Expand All @@ -50,12 +54,12 @@ public class AttributesColorSample : MonoBehaviour
}

// 属性情報のうち、水害時の想定浸水高さを取得します。
if (attributes.TryGetValue("uro:buildingDisasterRiskAttribute", out var disasterRiskAttr))
if (attributes.TryGetValue("uro:floodingRiskAttribute", out var disasterRiskAttr))
{
if (disasterRiskAttr.AttributesMapValue.TryGetValue("uro:depth", out var depthValue))
if (disasterRiskAttr.AttributesMapValue.TryGetValue("uro:rank", out var depthValue))
{
var depth = depthValue.DoubleValue;
var color = ColorByDepth(depth);
var rank = depthValue.StringValue;
var color = ColorByFloodingRank(rank);
ChangeMaterialByColor(target, color);
}
}
Expand Down Expand Up @@ -100,10 +104,23 @@ public class AttributesColorSample : MonoBehaviour
return matColor;
}

private Color ColorByDepth(double depth)
private Color ColorByFloodingRank(string rank)
{
float t = (float)depth / 3f;
return Color.Lerp(Color.blue, Color.red, t);
Color matColor = Color.white;
if (rank == "0.5m未満")
{
matColor = new Color(0f, 0f, 1f);
}
else if (rank == "0.5m以上3m未満")
{
matColor = new Color(1.0f, 1.0f, 0f);
}
else if (rank == "3m以上5m未満")
{
matColor = new Color(1.0f, 0f, 0f);
}

return matColor;
}

private void ChangeMaterialByColor(Transform target, Color color)
Expand All @@ -120,6 +137,7 @@ public class AttributesColorSample : MonoBehaviour

}


```

### サンプルコード解説
Expand Down Expand Up @@ -170,15 +188,15 @@ if (attributes.TryGetValue("urf:function", out var landFuncAttr))
```

下は、属性情報が入れ子になっているパターン(バリューがキーバリューセットである)ときに値を取得する例です。
`uro:buildingDisasterRiskAttribute`をキーとする入れ子で、キー`uro:depth`の値を取得しています。
`uro:floodingRiskAttribute`をキーとする入れ子で、キー`uro:rank`の値を取得しています。
```csharp
// 属性情報のうち、水害時の想定浸水高さを取得します。
if (attributes.TryGetValue("uro:buildingDisasterRiskAttribute", out var disasterRiskAttr))
if (attributes.TryGetValue("uro:floodingRiskAttribute", out var disasterRiskAttr))
{
if (disasterRiskAttr.AttributesMapValue.TryGetValue("uro:depth", out var depthValue))
if (disasterRiskAttr.AttributesMapValue.TryGetValue("uro:rank", out var depthValue))
{
var depth = depthValue.DoubleValue; // stringをdoubleにパースした値を取得します。
var color = ColorByDepth(depth);
var rank = depthValue.StringValue;
var color = ColorByFloodingRank(rank);
ChangeMaterialByColor(target, color);
}
}
Expand Down
9 changes: 8 additions & 1 deletion Documentation~/manual/ExportCityModels.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,11 @@ Unityのシーンに都市モデルがインポートされていることが前
- 指定のフォルダに3Dモデルファイルが出力されます。

![](../resources/manual/exportCityModels/tokyoBlender.png)
上図はエクスポートしたobjファイルを Blender で読み込んだものです。
上図はエクスポートしたobjファイルを Blender で読み込んだものです。

>[!NOTE]
> **エクスポートした3Dモデルを再度Unityに取り込む場合**
>
> テクスチャ込みでエクスポートしたものを再度Unityにインポートする場合は、
> 3Dモデルファイルとそれに対応するテクスチャフォルダを複数選択して
> Unityのプロジェクトビューにドラッグ&ドロップしてインポートしてください。
58 changes: 16 additions & 42 deletions Documentation~/manual/ImportCityModels.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,22 @@
その場合はチェックを外した時と同様にデフォルトマテリアルが適用されます。
- `テクスチャを結合する`
- テクスチャを含める場合、テクスチャを結合するかしないかを設定します。
- PLATEAUのデータはテクスチャの枚数が多い傾向にあり、結合しないと描画負荷が高くなる傾向にあります。
結合機能を有効にすると、複数のテクスチャを1枚の画像にまとめ、3DモデルのUVも合わせて調整されます。それによって描画負荷を改善できます。

>[!NOTE]
> **テクスチャ結合すると描画負荷が良くなります**
>
> PLATEAUのデータはテクスチャの枚数が多い傾向にあり、
> 結合しないと描画負荷が高くなる傾向にあります。
>
> 結合機能を有効にすると、複数のテクスチャを1枚の画像にまとめ、
> 3DモデルのUVも合わせて調整されます。
> それによって描画負荷を改善できます。
>
> 例えば、新宿区の2km×2kmのデータについて
> テクスチャ結合して4096×4096のテクスチャサイズにまとめたとき、
> ドローコール数は4160から483に向上し、
> あるPCではFPSが70から90に向上しました。
- `テクスチャ解像度`
- テクスチャを結合する場合の、結合後のテクスチャの大きさを指定します。
- `Mesh Collider をセットする`
Expand Down Expand Up @@ -242,46 +256,6 @@
このインスペクタから緯度、経度などの情報を確認できます。
![](../resources/manual/importCityModels/InstancedCityModelInspector.png)

### デフォルトマテリアルの見た目を変えたいとき
PLATEAU SDKでは地物タイプごとにデフォルトマテリアルが用意されています。
例えば、下図の建物には建築物のデフォルトマテリアルが適用されています。
![](../resources/manual/importCityModels/defaultBuilding.png)
このマテリアルは独自のPlateauTriplanarシェーダーを利用しているため、UVのない地物にもテクスチャを投影できます。
PLATEAUのモデルにはUVが**ない**場合があります。
そのため、ご自分で見た目をカスタマイズする場合でも、SDK付属のPlateauTriplanarシェーダー、またはそれと同様のTriplanar機能を有したシェーダーを利用することを推奨します。
以下に同シェーダーを使ったマテリアルの作成方法を説明します。
#### SDK付属のシェーダーについて
PLATEAU SDKには以下の3つのシェーダーが付属しています。
どれもUVなしでテクスチャを投影できるのが特徴です。
- `PlateauTriplanarShader(Opaque)`
- 通常のTriplanarシェーダーです。
- `PlateauTriplanarShader(Transparent)`
- 半透明なTriplanarシェーダーです。
- `PlateauTriplanarShader(DualTextures)`
- 上下を向いた面と横を向いた面で異なる見た目を表現するTriplanarシェーダーです。
- 利用例:建築物の上を向いた面をコンクリートの屋根に、側面を窓付きの壁にしたい場合などに利用できます。

このシェーダーを使ってマテリアルを作成する手順は次のとおりです:
- 新しいマテリアルを新規作成し、そのシェーダーを PlateauTriplanarShader/PlateauTriplanarShader(Opaque, Transparent, DualTexturesのいずれか)にします。
- マテリアルにテクスチャを割り当て、設定します。設定項目は次のとおりです:
- `MainTexture` : メインのテクスチャです。
- `NormalMap` : ノーマルマップです。
- `NormalMapStrength` : ノーマルマップの強さです。
- `Tiling` : テクスチャをタイリングさせる大きさです。
- `Blend` : ポリゴンの向きに応じてテクスチャをブレンドさせる程度です。
- `Metallic` : メタリック(金属感の強さ)です。
- `MetallicTexture` : メタリックを表現するテクスチャです。
- `Roughness` : ラフネス(ざらざら感の強さ)です。
- `RoughnessTexture` : ラフネスを表現する強さです。
- `AmbientOcclusion` : アンビエントオクルージョン(環境光の影響を受ける程度)です。
- `AmbientOcclusionTex` : アンビエントオクルージョンを表現するテクスチャです。
- `EmissionColor` : エミッション(発光)の色です。
- `EmissionTexture` : エミッションを表現するテクスチャです。
- `Opacity`(Transparentシェーダーのみ) : 不透明度です。

DualTextureシェーダーでは、上記の設定値がそれぞれ`Top``Side`の2つに分かれます。Topは上下面、Sideは側面の見た目を設定します。

- 自作したマテリアルは、インポート後にドラッグ&ドロップ等で適用できるほか、インポートの設定項目として「デフォルトマテリアル」に指定できます。

### エラーログの確認

Expand Down
22 changes: 22 additions & 0 deletions Documentation~/manual/ModelAdjust.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ PLATEAUウィンドウの`モデル修正`では、インポートした都市
次の機能があります。
- ゲームオブジェクトON/OFF
- 条件指定で一括でアクティブ化・非アクティブ化します。
- マテリアル分け
- 地物型に応じてマテリアルを分けます。
- 結合・分離
- モデルを結合・分離し、ゲームオブジェクトの粒度を変更します。

Expand Down Expand Up @@ -35,6 +37,26 @@ PLATEAUウィンドウの`モデル修正`では、インポートした都市
> 分類指定のチェックマークは入れ子構造になっていますが、第1階層の「建築物」「道路」といった分類は結合単位によらず必ず動作し、
> 第2階層の「窓」「屋根面」といった細かい分類はインポート時に「最小値物単位」にした場合のみ動作します。
## マテリアル分け機能
![](../resources/manual/cityAdjust/materialByType.png)
### できること
- 地物型に応じてマテリアルを設定できます。
- 例えば上図は、建築物の屋根面を緑色のマテリアルに設定した例です。

### 操作方法
- `選択オブジェクト`には、現在選択中のゲームオブジェクトが表示されます。これが処理の対象になります。複数選択可能です。
- 対象は、コンポーネント`PLATEAUCityObjectGroup`が付与されているゲームオブジェクト、またはその親である必要があります。
- 対象に`PLATEAUCityObjectGroup`がない場合、インポート時に属性情報を含める設定にしたことを確認してください。
- `マテリアル分類`には`地物型`と表示され、地物型に応じてマテリアルを張り替えることを示しています。
- 今は地物型しか選べませんが、今後は属性情報で分けるモードも追加予定です。
- `検索`ボタンを押すと、選択対象に含まれる地物型が検索され、ボタン下に列挙されます。
- このあとで対象オブジェクトを変更したい場合は、`再選択`ボタンを押します。
- `粒度`では、処理後に3Dモデルがどの粒度でゲームオブジェクトに分けられるかを選択します。
- 処理前のゲームオブジェクトを削除するか、残すかを選択します。
- 地物型ごとにマテリアルを選択します。
- 画面には、選択した地物に含まれる地物型が列挙されています。
- それぞれの地物型について、マテリアルを変更するか、変更する場合はどのマテリアルにするかを指定します。
- 実行ボタンを押すと、処理を実行します。

## 結合/分離機能
![](../resources/manual/cityAdjust/splitCombineWindow.png)
Expand Down
Loading

0 comments on commit 85f1b47

Please sign in to comment.