【MOD紹介】Tree Anarchyのすゝめ

【MOD紹介】Tree Anarchyのすゝめ

こんにちは。ケミカルです。

今回は、MOD「Tree Anarchy 1.2.2」について解説します。

本コラムでは、この革命的なMODの目指す行く先について解説していきます。

なお、MODの使用は自己責任でお願いいたします。

始めに

今回取り上げる本MOD「Tree Anarchy」はベータ版であり、このMODが目指す最終到達点には達していません。

よって本コラムでは、具体的な機能に深くフォーカスせず、あくまでも本MODへの興味・関心を惹くことを重視して執筆いたします。

また、解説の内容は前回投稿のコラム「Network Multitoolのすゝめ」の内容と通ずるものになっておりますので、そちらも是非ご覧ください。

なお、本コラム執筆中の6日8時23分に更新されたバージョン1.2.0にて「Tree AnarchyがProp Painterと非互換になるアップデート」がなされたようです。

Tree AnarchyのMOD更新ページには丁寧にこの経緯が示されています。

Version 1.2.0

Bugfixes and performance enhancements

Prop Painter has been marked as incompatible, as it is causing issues with this mod.

This is an essential release to prep for my Prop Anarchy release. The primary interaction between Prop Anarchy and Tree Anarchy is that together, they will completely replace Prop & Tree Anarchy, Tree Snapping and Prop Snapping. Tree Anarchy and Prop Anarchy will share the same indicator panel.

Optimized random tree rotation quaternion indexing. Speed in fetching a quaternion is sped up by 4 times, which is achieved by just taking calculating the hypotenuse of two points on the XZ plane. Y plane is not considered, thus raising and lowering trees will not rotate the tree. This optimization adds to the rendering speed and is faster than “Quaternion.identity” provided by Unity Engine thus making it faster than vanilla game.

Optimized tree rendering speed, as I’ve replaced all the math functions in the tree rendering framework with faster version, and consolidated the big loop in “EndRenderingImpl”. This shaved off approximately 5ms in the big loop. Now trees render faster than vanilla game

Added tree scale and brightness buffer to pre-calculate these values, instead of during each rendering frame. This can speed up rendering speed dramatically, but will nullify BOB’s tree scaling function. Please use built-in tree scaling function.

Added/updated localization files. Localization files detection has be reworked, and added more routines to check in case of Loading Order Mod creating empty directories and causing issues. If no localization files are found in your system, the default English localization will be used.

Tree LOD fix codes are now included in this mod and optimized, and now you can adjust Tree LOD during runtime, instead of needing reload the game on every change. Thus Tree LOD Fix mod is now incompatible, please use built-in function.

Indicator panel has been separated into it’s own dll file, and this is so my Prop Anarchy mod can use the same indicator panel.

Various re-organization and fixes in patching algorithm(以上原文ママ)

ざっと訳してみると、Tree AnarchyのProp Painterとの非互換性は意図的なものだと分かります。

これは Tree Anarchyと同時進行している「Prop Anarchy」にProp Painterを始め、さまざまなプロップに関するMODを統合する過程において、オリジナルを排除した形でMODを一から設計し直すための前段階としてのものだそうです。

またBOBのツリースケーリング機能も無効にしたり、Tree LOD Fixとの非互換性があったりなど、現状動いているMODとの非互換性が大きくなっているようです。(もちろん演算処理が格段に速くなるなど爆アドとトレードオフなのだが)

まだまだ不安定なMODといえますので、特に、ゴリゴリMOD開発をした既存の街のMODを置き換えてプレイしたい方は、バックアップを作成するなど、本MODの導入には細心の注意を払っての作業をお願い致します。

【12月30日追記】12月18日、Tree Anarchyの作者から、Tree Anarchyと互換性のあるProp Painter Rivisitedがリリースされました。

上述の通り、Tree AnarchyとProp Painter(オリジナル)との非互換性はProp Anarchyの開発に基づいて追加された意図的な非互換性であり、元よりTree Anarchyと Prop Painterの非互換性があった訳ではありません。

つまり、Prop Painter Revisitedの登場により(Prop Anarchy並びにExtended Managers Library非導入環境において)Tree AnarchyとProp Painter(オリジナル)の非互換性は考える必要はなくなったといえます。

なお、Prop Anarchyには以前よりProp Painterの機能が内包されており、Prop Anarchy並びにExtended Managers Library導入環境において、Prop Painter(オリジナル)並びにProp Painter Rivisitedは必要ありません。

簡単な前説

前回コラム「Network Multitoolのすゝめ」でも綴ったように、近年のシティーズスカイラインのMOD開発においては、改良・統合・機能の追加の動きが活発になっています。

この要因となっているのは、このゲームの6年もの歴史の中で失われた人材と、近年起こったある技術革新のためです。

これにより、既存MODの更新が今後行わることがないことや、より軽い処理によって既存のMODの機能を実現できる可能性があることが周知されました。

しかし、MOD開発者さんが引退されていることで、そのMODのコードを理解するために開発者さんに聴くということができません。

そのため、MOD開発者不在の状態でMODを継承して開発するには、リバースエンジニアリング、つまり、MODのコードを全て読んで確認して解析する必要があります。

処理を軽くするためにも、機能を実現するためのメソッドの更新を行った方がよい…それは重々わかっているのだが…というジレンマ。

MODがどのように構成されているのか把握し再構築するためには、知識と技術、なにより凄まじい根気が必要であるのは素人目にも明らかです。

それでも、先人のMODを解析し、それを改良・統合・機能の追加をしていこうというMOD製作者さんの気概は素晴らしいという他ありません。

今回紹介するMOD「Tree Anarchy」は、シティーズのオブジェクトの一つ「樹木(tree)」を司るMODで、樹木に関するさまざまな機能を使うことができますが、このMODも「Node Controller Renewal」「Network Multitool」のように、改良・統合・機能の追加によって開発されたMODで、説明には元となった既存のMODの説明が不可欠です。

本コラムでは、樹木に関するMODの歴史を振り返りながら、今回紹介するMODによってこれらがどのように発展したのか見ていきましょう。

カテゴリごとに発展してきたMOD群

歴史の話をする前に、もう少しだけ説明させてください。シティーズスカイラインでは、オブジェクトは6つのカテゴリ※1に分けられており、樹木はこのカテゴリの一つに割り当てられています。

ここで説明したいのが、シミュレーションにおいて、樹木カテゴリに割り当てられたものの挙動がほかのカテゴリのものの挙動とは全く異なるということ、同時に、ユーザーがそれぞれのカテゴリに追加したいと求める機能もまた全く異なるということです。

例えばオブジェクトの向きです。

バニラ

求められる機能

建物

(ほとんどの場合)
道路ネットワークに垂直

道路ネットワークに
依存しない配置

プロップ

(向きについては)
手動で変更できる

樹木向きは一定
ユーザーが変えられない

向きを手動で変える
向きを自動で変える

 

>図に示すように、バニラ環境※2では(道路ネットワークの敷設は自由度をもってできるので)建物やプロップの向きは手動で変えることが可能です。

それに対して樹木の向きは、手動で変えることはできず、常に一定です。

このような仕様の違いがあるかといえば、何も意地が悪いということではないです。

単純に、あなたは木の向きを気にされますか?

建物やプロップは向きが一つの向きに定まっている必要がありますが、樹木は建物やプロップほどは一つの向きでなくても構わないと思います。

ただ、複数の同じ樹木が同じ方向に並んでいるのがコピペのように見えて気味が悪いと思った人がいたというだけのことだと思います。

つまるところ、樹木の向きがそれぞれ同じでなければよいので、MODで樹木の向きを自動で変えてしまってもよい、ということになります。

このように、MODの対象とするオブジェクトのカテゴリによって、求められるMODの機能の指向性が全く異なるのです。

MODの歴史

前述の通り、Tree Anarchyは樹木に関する既存のMOD群を統合・改良・機能の追加を行ったものであり、樹木に関するMODの開発はCities始まって以来、脈々と受け継がれています。

樹木に求められた機能の拡充は以下の6つです。

樹木を回転させる樹木の大きさを
変更させる
樹木を浮かせる
森林地帯に関する
制御
LODに関する制御樹木の配置制限を緩和する
  • 樹木の向きを変える
    前述のとおり。
    バニラでは一定の向きにしか向かない樹木の向きを同じ方向でなくなるように、これを手動・自動で変える機能の実現が求められました。
  • 樹木の大きさを変更する
    リアルな樹木は、大きさが様々あると思います。
    幼い木、成長してきた木、老齢な木など、木のサイズがどれも同じなはずがありませんよね。
    これについて様々な状況に応じた樹木の数々が準備できればよいのですが、そもそも樹木のバリエーションが少なかった初期~中期においてはこれは不可能だったといえます。
    そこで、MODによって樹木のサイズを大きくする・小さくする機能の実現が求められました。
  • 樹木を浮かせる
    2016年10月、BloodyPenguin氏によってProp Snappingがリリースされました。
    これによって、建物の上にプロップを置くことができるようになりました。
    その後Move It※3の登場など、立体的で近代的な都市開発が可能になっていきます。
    ジオラマプレイにおいては、ペデストリアンデッキや建物の上など、現実的な街のディテールアップのためにも、樹木を浮かせる機能の実現が求められました。
  • 森林地帯に関する制御
    バニラ環境では樹木が群生している場所は森林地帯となり、シミュレーション上特別な効果、別の地面テクスチャが与えられることになります。
    詳細は(筆者が詳しくないので)割愛しますが、森林地帯に関する制御を可能にする機能の実現が求められました。
  • LODに関する制御
    これはコンソール版の方も経験されたことがあるかと思いますが、街を遠景にすると樹木にジャギーが増えたり、木々がガリガリになったりしませんか?
    これはLOD※4のしわざです。
    街の美観を遠景になっても維持するため、LODを制御する機能の実現が求められました。
  • 樹木の配置制限を緩和する
    一つのマップに配置できる樹木の本数には上限があります。
    上限数はおよそ26万本で、バニラ環境での常識的な開発の上では、9タイル程度の開発でギリギリになるような本数に設定されています。
    そのため、タイル上限解放系MOD(All 25 Areas Purchasable,81Tilesなど)を前提とした都市開発においては、上限にすぐ達してしまいます。
    それ以外にもジオラマプレイなど一部の特殊な都市開発においても上限にすぐぶち当たってしまいます。
    そのため、樹木の配置数の制限を緩和する機能の実現が求められました。
  • (21/12/13追加)領域の干渉
    バニラにおいては、ネットワークや建物の上に樹木を配置することはできませんでした。また、Move Itでネットワークや建物の上に樹木を移動させたとしても、見た目上は消えてしまいます。
    これを解消するには、ものすごく単純な説明をすると、「既に配置されています!」と赤くなる判定を無効にできるような機能の実現が求められました。

シティーズスカイラインの歴史の中で、これらの機能を実現させるための試みが幾度も積み重ねられてきました。

その歩みを紹介しましょう。

Tree Snapping

このMODは、2017年2月BloodyPenguin氏によってリリースされたMODです。
樹木を浮かせ、配置の際に建物の上などを選んで配置することができるようになりました。
https://steamcommunity.com/sharedfiles/filedetails/?id=869134690

Plant Scaling

このMODは、2017年4月にT​​​P​​​B氏によってリリースされたMODです。
樹木の大きさを強制的に変更できるようになりました。
https://steamcommunity.com/sharedfiles/filedetails/?id=910440715

Tree LOD Fix

このMODは、2018年2月にT​​​P​​​B氏によってリリースされたMODです。
樹木のLODを改善することができるようになりました。
https://steamcommunity.com/sharedfiles/filedetails/?id=1349895184

Unlimited Trees Mod v1.12

このMODは、2015年6月にDRen72氏によってリリースされたMODです。以後にBloodyPenguin氏によってそのコードを書き直されました。
シークバーを使って、樹木の上限数を自由に大幅に拡張することができるようになりましたが、Tree Snappingとの非互換性やコードの難解さがかねがね指摘されていました。
https://steamcommunity.com/sharedfiles/filedetails/?id=455403039

Unlimited Trees: Revisited

このMODは、2021年1月末にkjmci氏によってリリースされたMODです。
Dren72氏の上述のMODからシークバーが廃止され、一部内部処理が改善されましたが、オリジナルのコードの難解さから根本的な部分を変更することはできず、Tree Snappingとの非互換性の問題も解消されませんでした。
https://steamcommunity.com/sharedfiles/filedetails/?id=2378914031

Lock Forestry

このMODは、2019年1月にQuboid氏によってリリースされたMODです。
森林地帯の自由な配置・削除ができるようになりました。
https://steamcommunity.com/sharedfiles/filedetails/?id=1637106958

Random Tree Rotation

このMODは、2015年11月にboformer氏によってリリースされたMODです。
自由に樹木を回転させることができるようになりました。
https://steamcommunity.com/sharedfiles/filedetails/?id=556784825

Tree Movement Control

このMODは、2018年5月ごろにT​​​P​​​B氏によってリリースされたMODです。
前述のRandom Tree Rotationと、Saki7氏のTree Movementに関するコードを組み合わせたもので、Random Tree Rotationとは非互換性があります。
https://steamcommunity.com/sharedfiles/filedetails/?id=1388613752

Random Tree Rotation for Natural Disasters

このMODは、2017年1月にJudazzz氏によってリリースされたMODです。
boformer氏の上述のMODの不具合を修正し、DLC「ナチュラルディザスター」に対応させたバージョンです。
https://steamcommunity.com/sharedfiles/filedetails/?id=842981708

Prop & Tree Anarchy

このMODは、2016年1月にBloodyPenguin氏によってリリースされたMODです。
物体が干渉する領域の制限を無効にし、自由にプロップや樹木を配置できるようにするMODです。
https://steamcommunity.com/sharedfiles/filedetails/?id=593588108

オマケ Tree and Vehicle Propsについて

このMODは、2020年3月にGabrielium氏によってリリースされたMODです。
https://steamcommunity.com/sharedfiles/filedetails/?id=2033714682

シティーズの樹木は、一つのアセットに複数の3Dモデルを仕込むことができ、例えばそれを山に適当に植えても樹木の形や大きさがランダムに決定されることで、大小さまざまな木々が生い茂るリアルな山に作り上げることができます。

ですが、例えば街路樹であれば、逆に等しい大きさの樹木が欲しいですよね?

この場合、バニラでは、欲しい大きさのアセットが出るまでブルドーズ→植え直すの樹木ガチャが始まってしまい、これでは無駄に時間を食ってしまいます。

これを回避するには、ガチャを簡便なものにする、というより、端から同じ大きさの木が生成されるようにしたいですね。

ree and Vehicle Propsは、樹木・乗り物の3Dモデルを複製し、プロップとして生成することができるMODです。

プロップですので、向きを手動で回転させることができますし、Prop Snappingを併用すれば樹木を浮かせることも出来ます。

さらに、このMODの特に大きなメリットが2つあります。

一つが、樹木の形を均一にすることができます。

画像は、同じ樹木アセットを並べた図で、手前の列がこのMODによって生成されたプロップ、奥がオリジナルの樹木です。

手前の木々が全く同じものであることが分かっていただけるかと思います※5

もう一つが、プロップになっているおかげで、樹木をPO化することができることです。PO化に関する詳しい説明は、Procedural Objectsのすゝめをご参照ください。

Tree and Vehicle Propsの問題点としては、冗長なプロップ生成によって、ロード時間やメモリを圧迫することが挙げられます。

そのためTree AnarchyはTree and Vehicle Propsに依存せずTreeに関する操作ができるように開発されました。

しかし筆者は(MODの非互換性がない限りには)どちらも良い機能があるので両MODとも併用する所存ですし、全く特性の違う2つのMODを比較することがおこがましい、とすら思うのですよ。はい。

導入に際してはsway氏からリリースされたパッチ「Tree & Vehicle Props Patch」を併用することを強く推奨します。

TVPとの比較画像

Gleyflame氏のPine Forest Packより「Pine forest tree 1」を使用した比較。

 

Tree Anarchyのちょっとだけ詳細な解説

このMODは、2021年6月にQuistar氏によってリリースされました。

Stable版とBeta版の2つのバージョンがあります。オマケで後述するProp Anarchy,並びにEMLとの併用をしない限りには基本的にはStable版で良いと思います。

現在(21/12/13)、Beta版は非公開です。Stable版が正式版とてリリースされた模様です。

現在(21/12/16)、Beta版は再公開されています※6。また、Stable版でも

このMODの最大に凄い点は、先述したMOD「Unlimited Trees Mod」「Tree Snapping」「Plant Scaling」「Lock Forestry」「Tree LOD Fix」「Tree Anarchy(Prop & Tree Anarchy)」を一つのMODに統合し、コードが書き直されている点です。

前説の通り、筆者はQuistar氏とその共同開発者の皆様には、コードが書き直してくれるだけで本当に頭が上がりません。ありがとうございます。

そして統合によって、ユーザビリティの高い設計・多言語対応・パフォーマンスの向上・軽量化など素晴らしい効果が得られました。Unlimited Trees Modのシークバーも復活しました。ヤベェヨヤベェヨ

そして何より素晴らしすぎるのが、Tree SnappingとUnlimited Trees Modの非互換性を解消したことです。貴方方は神ですか?そうですね神に違いない(自決市長)

多言語というのは、もちろん日本語にも対応されていますし、インジケーターが追加され、押すと「Tree Anarchy」「Tree Snapping」「Lock Forestry」をオンオフすることができるようになりました。(画像あり)

機能の内容や意義は前述の通りで、工程こそ違うものの、オリジナルの機能が維持されています。

Harmonyを前提MODとして処理ロジックを現代風に再構築し直し、Random Tree Rotationに関しても、360度の1度ごとのパラメーターを事前にストアしておくことによって、逐次回転のための計算を行わないようになり、パフォーマンスの軽量化が見込まれます。

このMOD唯一の問題は、それらオリジナルMODとの非互換性はもとより、Prop Painterとの意図的な非互換性をはじめとした、MOD「Prop Anarchy」との併用前提で設計されているにも拘わらず、オリジナルMODで制作された既存開発のマップから移行した際に(現状)不具合が発生してしまう点です。

ただしこの唯一の問題というのも、この年末には改善に向けて開発が続けられているそうで、この問題が解消されれば、名実共に樹木アセットを無秩序に操作できるようになるはずです。

年末ごろに引継ぎに関する対応が行われるとか。嬉しい限りですね。

需要ゲージの右、DLC「Snow Fall」で追加される温度計の左に各種インジケーターがある。

 

終わりに

これは筆者のプレイ環境での話ですので、普遍的な話ではないのかもしれませんが、Prop Anarchy・Tree Anarchy、並びにEML併用導入環境を制作して実際に街を作ってみました。

感動すら覚える程、動作が軽かったのです。

ゲーム速度3速でも60fps出ていましたから。

素晴らしすぎる。(マップのものがそもそも少ないということもあるが、加味しても明らかに軽い)

新規マップで制作される方は、これを機に乗り換えてしまうことをおススメします。

もしまたコラム書かせていただく機会があればProp Anarchyのコラム書きたいなというお気持ちを表明して、結びとします。

いつにも増して長文でしたが、最後まで閲覧いただき誠にありがとうございました。

注釈

※1 内訳は、建物(building)、プロップ、樹木、ネットワーク、乗り物(vehicle)、市民(citizen)の6つ。

※2 MOD・カスタムアセットなどが一切組み込まれていない状態のこと。DLC/CCPはこれらに含まない。

※3 MOD「Move It」の操作に関する詳細な解説はMove Itのすゝめ、Move Itの歴史に関する解説はNetwork MultitoolのすゝめのMove Itの項をご覧ください。

※4 Level of Detail.
遠景になるほど1つ1つのオブジェクトに対して詳細な描画が必要なくなることから、カメラとオブジェクトまでの距離が一定以上になると、解像度の低いオブジェクトに置き換えることで、描画処理を軽減することを目的とする仕組み。
本来はGPU君が爆音を上げずとも街を遠景から眺められるようなありがたい機能なのだが、シティーズのLODはシステム上2つまでしかレベルを設定できないため、LOD切り替えの境界付近でガクンと見た目が変わってしまいがちだったり、自動生成されるLODが貧弱だったりと、旧来から問題の温床であった。

※5 ところで奥の列の一番左、同じ見た目のランダムな樹木が生えていることがお分かりだろうか。
Tree and Vehicle Propsは、ランダムな樹木のうち一つの3Dモデルを選出して、プロップとして生成されているのだ。
よって、ランダム樹木の中から好みの大きさ、形を選んで扱うことはできない。
それを多少なりとも改善するためにも、Procedural Objectsとの併用が美しいように感じる。

※6 なんでも最新(21/12/16)バージョンではLoad Order Modが必要なくなる…とか(ちょっと何を言っているのかわからない)(←分かれや)。
さすがに時間がないので検証はしません。各々自力で確認してください。