Alphadoの7DTD日記

RWG -Generator- の研究

16 コメント
views
0 フォロー

研究するまでもなく、ここ見ればわかると思うぜ!

Perlin noiseとか知らねーよ!って人はここ見るとパラメータの意味がわかるし、
ここのTutorialを読んで(コードが分からなくても)やってることが分かったら、きっとRWGマスターだぜ!

α16はここから>> 16

7DTD WIKI 共同管理人
作成: 2016/12/14 (水) 17:21:06
最終更新: 2017/09/12 (火) 17:36:12
通報 ...
1
7DTD WIKI 共同管理人 2016/12/14 (水) 17:27:55 修正

とりあえず、私もいろいろ試しましたけど、やっぱりTin大先生のこの投稿は引用しとかないとね

Obligatory: "I am sorry if anything is not quite right". "still learning", reply

Just some more things of note: A15 Terrain generator

Frequency: The lower the freq the smoother (flatter). If your land is starting (or you set it) at height level50 you will need to add or increase the Frequency so the sine wave will dip below (-28) so water will appear. Water will always occur at (-28) height level. The highest point of the world will always stop at (162) (anything beyond will generate a flat top). may be off a block +/-

Power/Roughness/Scale/additional frequencies: will affect the main frequency that is used.

Roughness: is referring to "Octave" min1 - max30 (for all you music ppl)

'Power' in combination with 'Scale' will help in keeping sections of your world at a certain level.

How you structure the module that uses 'Select' can drastically affect how your world is built.

%%{fg:lime}<- as opposed to having "mountains" as the first source%% %%{fg:orange}<- '?' I think.. is cluster size'?' %% %%{fg:orange}<- '?' I think .. is reffering to degree (angle)'?'%%

View the 'Biome generator' as nothing more than a 2d surface that is stretch out over the map that adheres to the top of the Terrain (easiest way I can explain it).

You can add as much dithering effect to the outer edge of the biomes (does not effect sub biome):

<- %%{fg:lime}Refers to the edge of biome just think of the 8 as meters of dither its pretty close.%%

*Note: If you have a lot of dither it will play havoc on the biomes set spectrum and cause a strobe effect as you move between biomes of different spectrum's ( IE wasteland/Burnt/Rainy/Foggy/none).

You can adjust the size of the Biomes as well:

Again these may not be 100% right, they are observations I have made while trying to learn it and experimenting with it.
Quoted by https://7daystodie.com/forums/showthread.php?52259-RGMIXER-XML-Edits/page7

             な い よ ん<<  Tin先生のRWG講座  >>Tin先生のRWG講座(和訳)

2
7DTD WIKI 共同管理人 2016/12/15 (木) 11:06:36 修正

もうね、最初から正直にforumの解析待っておいてこれを和訳してれば
今までパーリンノイズとボロノイの勉強したり、トライアンドエラーしまくった時間の大半は無くてよかったんですけどねー

以下和訳(青は私の補足)

※注意※
「もし間違ってたらごめんなさい」「まだ勉強中なんだ」リプライしてくれ

A15地形生成機:追加で書いておくべきこと
(7DTDの地形生成は改良型パーリンノイズを使用している。知っておくとパラメータが分かりやすい)

Frequency:(=周期)狭めるほど、よりなめらかに(言い換えれば平らに)なる。(あなたが意図して設計したかどうかはともかく、)もし作った地形が標高50以上で生成されたとしよう。水を(≠Waterバイオーム)発生させたいなら、この値を上げる、つまり正弦波を(-28)よりも低い位置に沈ませる必要がある。水は(≠Waterバイオーム)いつも標高(-28)であらわれる。自然生成の最高点は(162)でいつも止まる(それより上に生成される地形は何だろうと平らな頂上になる。)外されてるのかもね、ブロックが、高地も低地も。
(ここでなぜ-28以下は必ず水になるのか、と思った人はbiomes.xmlを見てみてね)

Power/Roughness/Scale/Frequency(2回目以降):これらの値は、おおもとのFrequencyに影響を与える。

Roughness:これは"オクターブ"を表している(音楽好きならわかるはず!) 1~30の値が指定できる
(どれだけのノイズを重ねるか)

PowerをScaleと合わせて使えば、山や大陸、海などの部品ごとに標高を固定しやすい。

Selectのエフェクターをどう使うかが、大幅に地形がどう生成されるのかに大きく関係してくる。

<module name="finalLand" type="Select">
<property name="controlModule" value="landFilter"/>
<property name="sourceModule1" value="landA"/> <!--逆にmountainsを持ってくると・・・?-->
<property name="sourceModule2" value="mountains"/>
<property name="bounds" value="0,1000"/> <!--?鉱脈のサイズのことかな・・・?--> 
<property name="edgeFalloff" value="4"/> <!--?角度なのか、程度なのか・・・?-->
</module>

バイオームの生成というのはただの平面で、こいつをワールド全体に引き延ばして、地形の上に乗せたものだと思ってくれたらいい。(僕のできる一番簡単な説明だね)

各バイオームの外周にはノイズを加えることができる(sub biomeには影響なし)

<module name="biomeDither" type="FastTurbulence">
<property name="sourceModule" value="biasOutput"/>
<property name="frequency" value="0.25"/>
<property name="power" value="8"/> <!--バイオームの境界から見た時に、ノイズを加える範囲が8メーターですよって事だと思えば、大体あってる-->
<property name="roughness" value="5"/>
</module>

もしも大量のノイズを加えようものなら、spectrumを設定しているバイオームがめちゃくちゃなことになり、違うspectrumの間を移動するときにチカチカするようになる。(たとえば、wasteland/Burnt/Rainy/Foggy/none)

こんな風にバイオームのサイズも変えられる。:

<module name="voronoi" type="Voronoi">
<property name="frequency" value="0.0006"/> <!-- 小さくするとバイオームが広くなる《ちょっと変えるだけでかなり変わる》 -->
<property name="displacement" value="0.5"/> 
</module>

*もう一度*100%の保証はできないかもしれない。これは私が色々試して学ぶ間に観察してきたものっていうだけだ。
Tin先生のRWG講座 <<  Tin先生のRWG講座(和訳)  >> RWGをいじる前に

3
7DTD WIKI 共同管理人 2016/12/15 (木) 14:01:47 修正

はい、閉廷閉廷!

ってのはちょっと乱暴なので、ここからは自分で色々いじって、スクショ貼りながら説明します。

4
7DTD WIKI 共同管理人 2016/12/16 (金) 17:48:03 修正

超簡単な地形生成--TerraGenその1

そもそも何をやってるのか

まずは基本からです。大体のイメージを掴んでいってください。
各moduleはtypeで指定された関数の結果をnameに保存します。

typeは用意された物しか使えませんが、nameのところはわかりやすいように名付けて構いません。

そして、その地形のデータを操作するときは、sourceModuleのvalueに地形のnameを渡してあげましょう。

例えば、下のようなコードをterrain_generatorsに入れてやると、最初にFastBillowを使って作られたデータをSourceに保存します。
続いてClumpOutputではsourceModuleのvalueがSourceになっているので、上で作ったデータをもとにしてできた地形がclumpOutputに保存されます。
そして、最終的な地形のデータは一番下のoutput moduleで指定されたclampOutputになります。

地形のデータがどんなやりとりをされるか、わかりましたか?

moduleの種類

moduleには大体40種類あることがわかっていますが、そのうち、必須なものは以下の3つだけです。

FastBillow

地形の波を-1.50~1.50くらいの範囲で作り出す。

ScaleBiasOutput

受け取った地形を引き伸ばして(縮めて)、位置をずらす。
(振幅が変わります)

ClampOutput

受け取った地形の一部だけを切り取り、はみ出た部分は平らにする。

この3つの使い方が分かれば、(望みの地形が作れるかはともかくとして、)地形の生成が出来るようになります。

地形を作る前に

それではさっそく作っていきましょう。

今回、色々試すにあたって、公式のRWG Previewerだとパット見ただけでは地形がわかりづらかったので、色々改造して見やすくしてみました。よかったら使ってください。

さて、7 days to dieのタイトル画面からEditing Toolsを選んで、RWG Previewerを起動させましょう。
ここからはrwgmixer.xmlを編集する度にゲームを終了させる必要はありません。
(ただし、文法エラーを起こすと容赦なくフリーズします)
XMLの保存が終わったら更新🔃ボタンを押すだけで地形を生成し直してくれます。

では、rwgmixer.xmlを開き、下の方にあるコードを探してください。

<terrain_generators>
	<terrain_generator name="vanilla" use_old_final="false">
		[[コード]]
	</terrain_generator>
</terrain_generators>

このコードの部分を書き換えていくことで地形生成をカスタマイズできます。
まずは基本です。上で紹介した3つのmoduleだけで地形生成していきましょう。

Tin先生RWG講座(和訳) <<  RWGをいじる前に  >> TerrainGenの基礎

5
7DTD WIKI 共同管理人 2016/12/17 (土) 12:15:00 修正

実際に作ってみる

Scaleとは何か

以下のコードをterrain_generatorに貼り付けてみてください。FastBillowが作った地形を、ScaleBiasOutputで100倍に引き延ばして、ClampOutputで-50~158の標高に限定しました。

生成結果1
それぞれの色がどの標高を示しているのかは、画像右側に示しています。白~紺色まで全ての色=標高の地点がある、激しい地形が生成されました。

海の部分に至っては紺一色になっているので、-28よりも低地、つまりbiome_generatorに関係なく必ず水没します.

これでは水場だらけでサバイバルになりませんので改善しましょう。次のコードは地形を引き伸ばす倍率を100倍から50倍に減らしたものです。再生成してどうなるか見てみましょう。

生成結果2
二つを比べてみてください。紺色は減りましたが、低地と共に高地が減ったことでかなり平坦な地形になりました。そして、デフォルトでのWaterバイオームがある青い範囲は増えたように見えるかと思います。

TerrainGenの基礎 <<  Scaleとは何か(基礎)  >> Biasとは何か(基礎)

6
7DTD WIKI 共同管理人 2016/12/17 (土) 12:22:18 修正

Biasとは何か

scale(縮小/拡大比)は地形の幅を変えますが、中心点が標高0のままなので広範囲のWaterバイオームが出現してしまいます。そこで、出てくるのがbias(かたより)のパラメータです。

生成結果3
一つ上で生成した地形をそのままbiasで移動させました。Waterの面積が減りましたね。biasは訳すと偏りという意味になりますが、この場合のbiasは単純に標高をずらします。ここで指定した標高が出やすくする。という意味ではなくワールド全体を単純に+10するとか-10するという意味です。

ちなみに、ScaleBiasOutputのmoduleはScaleをかけてからBiasをかけるので、下のコードは結果が同じで処理速度が早いです。

画像4

まとめ的な何か

最後に、今までの知識だけで簡単な地形を作りました。上の地形はプレイするには標高差が激しいので、下の方がストレスなく遊べるでしょう。

生成結果5
今回作ったのはどこもほとんど変わらないような、単調な生成でした。次回は山や谷も生成するようにするにはどうすればよいのか、色々検証していきます。

Scaleとは何か(基礎) <<  Biasとは何か(基礎)  >> まだだよ

7
7DTD WIKI 共同管理人 2016/12/18 (日) 16:27:16 修正

2つの地形の組合わせ--TerraGenその2

前回は、丘と平地からなるなめらかな地形を作りました。今回は標高が高く稜線の入った山脈と、なめらかな低地をミックスします。

moduleの種類

FastNoise

特徴のない波を-1.5~1.5くらいに発生させる

FastRidgedMultifractal

標高が+の地域が稜線のように連なった地形の波を-1.5~1.5くらいに発生させる。

Select

2つの地形を切り貼りして1つの地形にする。

FastTurbulence

地形を歪めて特徴を持たせる。

とりあえず山を作ってみる

まずはワールド全体に山を生成させて、ScaleとFrequencyの調整を行います。標高に関しては合成したときの影響を考える必要はありません。ScaleBiasOutputで目標の高さまで調整してください。
今回は、前回は特に説明していないfrequencyについて詳しく触れていきます。

frequencyを変えながら生成した結果は上段になります。(左から、frequency=0.25、0.5、1です。)下段は、その山を使って作れる最終的な地形です。0.5前後が良さげですね。

mountain

frequencyは地形の波の頻度を変えますが、それは言い換えると標高の緩急を変更するということです。今回は特に山の緩急に関わるパラメータとして出てきます。

同様に平地も作っておきます。

こちらはfrequencyを上げればボコボコと荒れた地形が、下げれば滑らかな地形ができます。
land

8
7DTD WIKI 共同管理人 2016/12/20 (火) 01:36:55 修正

平地と山の合成

ここまでに作った2種類の地形を合成していきます。使うのはSelectのmoduleですが、これがなかなか複雑です。

合成したい2つの地形をsourceMoudule1、sourceModule2にそれぞれ設定し、controllModuleには別の波を設定します。これは処理速度も考えてFastNoiseで作成したものをそのまま入れるのがいいでしょう。このcontrollModuleと次に設定するboundsの組み合わせが、2つのsourceModuleが現れる比率を決めます。controllModuleがboundsの範囲内の時sourceModule2が、範囲外の時sourceModule1が生成結果になります。
Scale

物は試しです。生成してみましょう。continentMixedのmoduleでは、continentControllerが0以下の時にlandScaledが、continentControllerが0以上の時にmountainScaledが生成されるようにしています。(continentControllerが100を超えることはありません。)

RawContinent
生成結果を見ると、平地と山の地域に分かれていることが分かります。ここでboundの左側の値を+方向にずらす、つまりboundsの範囲を狭めると、山が占める割合が減っていきます。(右に行くほどboundsの左側が1.5に近づきます。)

BoundsValue

そして、controllerModuleのfrequencyを増やすことで、ひとつひとつの平地・山両方の面積が減ります。逆に値を減らすことで面積は広くなります。Selectのboundsと、controlModuleのfrequencyを調整することで、大規模な山が時々生成する大陸部や、平地がたまにしか生成されない山脈部といった表情豊かな地形が作れます。

9
7DTD WIKI 共同管理人 2016/12/20 (火) 21:37:24

ただしこのままだと、山と平地の境界線がかなりはっきりしていて、自然な地形ではありません。2つの地形の境界をなめらかにするにはedgeFalloffを使います。これは、2つの地形の境界線になるboundsの両側で、なめらかにぼかす範囲を指定します。

これで境界付近がなめらかになりました。
felloff

山に特徴を付ける

最後は調整です。ここではFastTurbulenceを用いて連なる山脈を作ったり、山肌を荒くしたりします。これについては、文章を読むよりも実行の結果を見て、それぞれのpropertyにどういった効果があるのか知るのが分かりやすいです。

下の画像では、frequencyとpowerを変えた時の地形の変化を表にしています。
freq_pow

どちらも低いと、元の地形から変化はなく、frequencyが高くpowerが低いと、ノイズの入った様な地形になり、
frequencyが低くpowerが高いと、引き延ばされたような地形になり、どちらも高いと、元の地形は失われます。
バランスを見つけるのは難しいですが、これが最終的な地形に大きくかかわるので、しっかりこだわるべき場所です。
間違ってもバニラのような極端な値にするのはやめましょう・・・・。

続いて、roughnessですが、これはfrequencyの違う変形済みの地形をいくつ重ねるか指定します。1~30の整数を指定できますが、これを2倍にすれば処理時間も2倍になります。個人的に1でも良いと思います。下の画像は、左からroughness=1,2,4,8,16の地形です。
rough

10
7DTD WIKI 共同管理人 2016/12/21 (水) 01:55:12

最後に

さて、ここまでで平野と山の地形生成について話してきましたが、実はワールド生成に必要な知識はこれで全てです。
ここまでの方法を使って川、湖、山、平地を作りました。

こーんな感じです
画像1
画像2
画像3
画像4
画像5
画像6
画像7
画像8

バイオームは調整が必須ですね。

次回からは、バニラの地形生成の検証や、珍しい地形を生成する方法を考えていこうと思います。

11
7DTD WIKI 共同管理人 2016/12/22 (木) 14:42:04

調べててちょっと思ったのは、実際の標高とterrain_generatorの標高が違うんでは?
ということですね。

少し高め、というか、急な形で生成されている気がします。
biasを使えば検証自体は簡単なので、生成限界と一緒に調べてみましょう。

12
7DTD WIKI 共同管理人 2016/12/26 (月) 20:54:25

調べてみました。
Y座標の0~255がElevationの-60~194に対応。
TerrainGeneratorではElevationの値に対応する。
0,255には破壊不可、ブロック設置不可の空間があり、1~3には岩床ブロックがある。

地形生成の限界範囲は0~222.5で、0まで下げた状態だと、水が中空に浮いている。
この状態は、水は不可侵ブロックに支えられているわけではないので、荷重再計算が行われるとワールド中の水が崩落してクラッシュする。(絶対試しちゃダメだぜ!)
(街は32~?)

13
7DTD WIKI 共同管理人 2016/12/30 (金) 09:48:07

さて、このページをWIKIにまとめていきたいわけですが、全部そのままコピペとかすると、文字数制限か行数制限であぼんです。

それぞれのパラメーター説明と、PREVIEWERだけ張り付けていれば、試行錯誤好きな人は自分でできると思います。
でもどうせなら、調べたことは書いておいた方が時間の短縮になると思うんですよね。

とここまで書き連ねて、XML書き換え用WIKIを全く更新してないことにきづく。
あれ使えば良いのでは。

14
7DTD WIKI 共同管理人 2016/12/31 (土) 19:24:42

いつも参加してる放送での一コマ
画像1
私の地形生成を使ってくれてるんですけど、これはひどすぎるw

ちょっとね、さすがにもうちょっとうまくやらないとね・・・、これ結局陸地には上がれませんでした。
山岳地域に川ができると、渓谷みたいになってしまうようです。

川の生成は平野だけ、山岳地域にはたまに崖とかにする方がいいかもしれません。

15
7DTD WIKI 共同管理人 2017/01/02 (月) 21:49:22 修正

いろいろ検証するほどによくわからないことになりますねぇ・・・
まず、rwgmixerで生成された地形は-30されてからbiomes.xmlに送られます。

そして、そこでは0~255の表記を基準に水やら土やら石の配置が行われると。

うーむ、変換がスパゲッティーなことになってるので、いずれきれいにされるんだと思いたいところです。

16
7DTD WIKI 共同管理人 2017/07/30 (日) 01:01:10

ここからα16

α16でも使い方はほぼ同じなものの、地形生成にちょこっと変更が加わりました

まず、Blendを使った時のweightModulecontrolModuleに変更されました
元々Blendを使えていた人は少ないと思うので、ここはあまり関係ないですね

Clampをかませないでも、OutputModuleが限界高度を超えないように、若干修正してくれるようになりました
これははみ出た部分をすりきりで真っ平らにするわけではなく、標高=限界高度の部分はそのままで、標高>限界高度の部分をへこませてるような気がします
でも結局限界高度で平らに見えちゃうので私としてはあまり気に入りませんねぇ
どうにかうまいこと自然にできないものかなぁ・・・

.
.
.

それから、地形生成以外にも、街の形を自由にいじれるようになったので、こっちの方をしばらくやっていこうと思います。
地形生成に関しては、今までの物をα16でうまく動くようにしたら、しばらくはあまり手を加えないかも?

Twitterにも貼ったけど、地形生成は今のところこんな感じです。

画像1
画像2
画像3
↑ちょっと水が生成されやすくなった気がするので、ここは直しときたいところ
画像4
画像5
画像6
↑このくらいの山が個人的にちょうどいい
画像7
↑すごいところに拠点を構えるトレーダー
画像8
↑ちょっと山を険しくしすぎた時の画像
画像9
画像10