Mod (v3.11)

Stellarisのファイル構造

StellarisでMod制作する前に、ファイル構造を知る必要があります。

自分の作ろうとしているModがどのファイルを使用もしくは作成すればいいのかわかります。

※書かれていないフォルダはぼくの知らないフォルダ

Stellaris直下の基本的なフォルダ

フォルダ名 備考 common ゲームの各要素 events イベント管理 flags 国旗 gfx グラフィック interface UIに関わる画像の登録など localisation 言語ファイル music 音楽 sound 効果音

common直下の基本的なフォルダ

フォルダ名 備考 armies 地上軍 bombardment_stances 艦船で使用可能な軌道爆撃 buildings 地上建造物 component_sets 艦船の装備セット(component_templatesと一緒に使う) component_slot_templates 艦船の装備スロットのテンプレート(ship_sectionsに関わる) component_tags component_templates 艦船の装備 districts 惑星の区画 edicts 布告 global_ship_designs 危機や没落帝国などが使用する艦船の設計 governments 起源や国是など graphical_culture 艦船セット(定義) megastructures 巨大構造物 on_actions イベントなどに使用 planet_classes 惑星のクラス planet_modifiers 惑星の特性 policies 政策 pop_jobs popの職業 script_values scripted_variables 定数の定義 section_templates 各艦船クラスのセクション(区画) ship_behaviors 艦船コンピュータ関連 ship_sizes 艦船クラス solar_system_initializers 星系 starbase_buildings 星系基地の施設 starbase_modules 星系基地のモジュール static_modifiers モディファイア technology 研究・技術 traits 種族特性

gfx直下の基本的なフォルダ

フォルダ名 備考 interface UI関連 models 3Dモデルなど particles パーティクル(粒子)など portraits ポートレートなど projectiles 艦船の武器の攻撃グラフィックの定義

3Dモデルの作成ついて

◆必要なものと注意点

・3Dモデリングソフト (ここではBlenderを使用)

・GIMP (DDSファイルを作るのに使用)

・PDX tools[github.com] (モデルの出力等に使用する)

・ポリゴンは3角形でなければならない(作るのに満足して忘れやすい)

・ロケータはエンティティを使用する

・スラスターの向きが逆転する場合はスラスターに使用するロケータの向きをZ軸180度にする

◆マテリアル(シェーダー)について

・PDX toolsを使ってマテリアルを作成する (BlenderはPDX Blender Tools、MayaはPDX Maya Tools)

・Material typeはPdxMeshShip

・マテリアルに使う画像にはDDSファイルを使用する

・スペキュラとノーマルマップの色空間は非カラーにする (画像を読み込むとsRGBに戻るため)

◆テクスチャについて

・テクスチャ名は他モデルのものと同じ名前を使わないように注意

・簡易的なノーマルマップを作るのにちょうどいいサイト (作成元はディフューズを使用するのが楽)

NormalMap-Online[cpetry.github.io]

◇上記で作成したノーマルマップを使ってGIMPでStellaris用のモデルのノーマルマップを作成する場合

・色→色要素→チャンネル分解(RGBA)

・フォーラムの投稿[forum.paradoxplaza.com] によるとこんな感じになる。

R - 赤チャンネル

G - 赤チャンネル (赤チャンネルを緑チャンネルにコピー)

B - エミッター(0=黒で無発光、光らせる場合はおそらく1~100=白) (元の青チャンネルは削除)

A - 緑チャンネル (緑チャンネルをアルファにコピー)

・色→色要素→チャンネル合成(RGBA) ※それぞれのチャンネルが上記と同じになってることを確認

・GIMPで出力する場合、DDSの圧縮形式はBC3/DXT5

◇GIMPでスペキュラマップを作成する場合

・色→色要素→チャンネル分解(RGBA)

・銀英伝艦船modの作者さん[lobolabo.blogspot.com] によるとこんな感じになる。

R - 使わない

G - 50(=灰色)

B - 光沢具合 なし(0=黒) <-> 金属光沢 <-> あり(99=白)

A - ざらざら(0=黒) <-> 粗さ <-> つるつる(100=白) ※GIMPだとこうなる

・色→色要素→チャンネル合成(RGBA) ※それぞれのチャンネルが上記と同じになってることを確認

・GIMPで出力する場合、DDSの圧縮形式はBC3/DXT5

◆ロケータについて

・ロケータはタレットの位置やスラスターの噴射の位置、艦船セクションの表示位置などいろいろ使うとても重要なもの

・ロケータ名は一応なんでもいいんだけど、section_templates等で使うタレット位置などはバニラファイルを書き換えないのであれば指定された名前がいい

part1 ~ 8 #艦船セクションの表示位置(艦船クラスのセクション数による)

target_locator_1 ~ 4

light_locator_01 ~ 06

exhaust #ship_trail(スラスターの排気の線)

engine_large_01 ~ 04 #スラスターの噴射位置(大)

engine_medium_01 ~ 04

engine_small_01 ~ 04

explosion_locator01 ~ 04 #爆発位置(?)

xl_windup_1

xl_windup_side_1

xl_gun_01 ~ 02 #XL兵器のタレット位置

large_gun_01 ~ 04 #Large兵器のタレット位置

medium_gun_01 ~ 04

small_gun_01 ~ 04

・基本的には必要な分だけ

◆PDX Toolsを使用して出力するとき

・オブジェクトデータ名を記録しておく (Stellarisに読み込ませるときに使用する)

・ExportのSave mesh

・メッシュとロケータは基本は一緒に出力 (セクションで分割されない単一モデルのときはロケータだけのものも出力しておく)

3Dモデルの読み込み等 (艦船)

◆ファイルロケーションと構造

/gfx/models/ships/〇〇(フォルダ) ・フォルダ名はgraphical_cultureで登録する名前にするとわかりやすい

〇〇(フォルダ) ┣サブフォルダ ┣〇〇_entities.asset ┗〇〇_meshes.gfx

サブフォルダ #ファイル整理するなら艦船クラスごとに作るとよい (無くてもよい)

〇〇_entities.asset #エンティティやアニメーションを登録するためのファイル

〇〇_meshes.gfx #メッシュファイルを登録するためのファイル

◆meshes.gfxについて

・meshes.gfxでメッシュファイルを登録する

例:)

objectTypes = { #メッシュを読み込む場合 pdxmesh = { name = "test_01_ship_mesh" #メッシュ定義名 (.assetで使用する) file = "gfx/models/ships/test/test_ship.mesh" #メッシュファイル scale = 1.0 #メッシュの大きさの倍率指定 animation = { id = "death" type = "test_01_death_animation" } #assetで登録したアニメーションファイル。ボーンが一致していないとエラー meshsettings = { name = "PDX_test_01_ship_shape" #Blender(おそらくMayaも)でのオブジェクトデータの名称 index = 0 texture_diffuse = "test_01_ship_diff.dds" #ディフューズ texture_normal = "test_01_ship_norm.dds" #ノーマルマップ texture_specular = "test_01_ship_spec.dds" #スペキュラ shader = "PdxMeshShip" } } # ロケータのみ存在するファイルを読み込む場合 pdxmesh = { name = "test_01_ship_locator_mesh" file = "gfx/models/ships/test/test_ship_locator.mesh" scale = 1.0 } } } ・全てのpdxmeshをobjectTypesで囲む

◇pdxmeshで読み込むテクスチャの注意点

・同名のテクスチャを指定しない (同名のテクスチャが存在する場合、先に読み込まれていたテクスチャが優先され、後の同名テクスチャに全て適用される)

◆entities.assetについて

entities.assetではmeshes.gfxで登録したメッシュを、section_templatesやship_sizesで使用できるようにするためのエンティティを登録する。アニメーションもここで登録する。

例:)

#アニメーションファイルの登録 animation = { name = "test_01_death_animation" file = "test_01_death.anim" } #エンティティの登録 entity = { name = "test_01_ship_entity" #登録するエンティティ名 pdxmesh = "test_01_ship_mesh" #meshes.gfxで定義した名前 default_state = "idle" #通常の状態(State) #艦船静止状態 state = { name = "idle" state_time = 5 event = { time = 0 node = "engine_small_01" particle = "generic_035_exhaust_circle_idle" trigger_once = yes keep_particle = yes } event = { time = 0 node = "engine_medium_01" particle = "generic_05_exhaust_circle_idle" trigger_once = yes keep_particle = yes } event = { time = 0 node = "light_locator_01" particle = "ship_light_blue_effect" trigger_once = yes keep_particle = yes } } #艦船移動時 state = { name = "moving" state_time = 5 event = { time = 0 node = "engine_small_01" particle = "generic_05_exhaust_circle_moving" trigger_once = yes keep_particle = yes } event = { time = 0 node = "engine_medium_01" particle = "generic_075_exhaust_circle_moving" trigger_once = yes keep_particle = yes } event = { time = 0 node = "light_locator_01" particle = "ship_light_blue_effect" trigger_once = yes keep_particle = yes } } #艦船破壊時 state = { name = "death" animation = "death" looping = no event = { time = 2.5 node = "explosion_locator_01" particle = "ship_explosion_particle" keep_particle = yes trigger_once = yes sound = { soundeffect = "ship_explosion" } } event = { time = 7.5 node = "explosion_locator_04" particle = "ship_explosion_particle" keep_particle = yes trigger_once = yes sound = { soundeffect = "ship_explosion" } } event = { time = 9.5 node = "explosion_locator_05" particle = "ship_explosion_particle" keep_particle = yes trigger_once = yes sound = { soundeffect = "ship_explosion" } } } game_data = { size = 20.0 #これがframeであれば艦船設計画面のカメラ距離に影響を与える #uv_animation_speed = 0.17 #uv_animation_direction = { 0.3 0.0 } trail_locators = { "engine_medium_01" = { width = 25 lenght = 150 } "engine_small_01" = { width = 10 lenght = 60 } } emissive_recolor_crunch = 0.0 } scale = 1.0 #meshes.gfxで指定したサイズ倍率と重ね掛け }

・emissive_recolor_crunchを0にすることで発光箇所を帝国カラーではなくテクスチャカラーで光らせることができるものと思われる。しかしながらgraphical_cultureが関わっている可能性もある。

・stateのeventについて

event #ここでのイベントはそのState時にどのタイミングでパーティクルを発生させるか設定する

time #State開始時からの発生タイミング (?)

node #パーティクルの発生場所のロケータ (通常はメッシュファイルに含まれる)

particle #発生させるパーティクルの名前

keep_particle #パーティクルを継続して発生させ続けるか(?) (イベントの間)

trigger_once #一回きりの発生にするかどうか(?) (イベントの間)

sound #発生させる音

・船のスラスターの炎を描画する場合

event = { time = 0 node = "engine_small_01" particle = "generic_035_exhaust_circle_idle" trigger_once = yes keep_particle = yes }

node ロケータ名を入力する。モデル作成時のengine_size_xxなどのエンティティ。

trigger_once keep_particleと併用して再生成せずに利用する。

スラスターの炎が必要ない場合はevent自体記述しなくてもよい。

3Dモデルのボーンについて

◇砲塔の初期状態などをアニメーションで制御する場合の備考

アーマチュア(ボーン)の作成

エンプティ->アーマチュアの順に選択し、ctrl+Pからボーンの親子関係を設定

オブジェクトに「アーマチュア」モディファイアを追加し、オブジェクトに先ほど作成したアーマチュアを設定

「ウェイトペイント」モードにしてグラデーションで真っ赤に塗る

「Save mesh」で保存して、「Load mesh」で読み込む

「Animation」に移動

24フレーム

「ポーズモード」でボーンを選択してIで位置・回転・スケールを選択

Wで調整する

「Save animation」で保存、エラーが発生するが無視

◇メッシュとボーンの関係

メッシュにボーンを含める場合は、全ての頂点に対してウェイトを設定しないといけないっぽい。

なのでrootボーンに対して非可動部の全ての頂点のウェイトを1にして、あとは可動部のそれぞれのボーンと頂点の組み合わせでウェイトを設定すればいい。

ボーンが含まれているメッシュでウェイトが設定されていない部分は描画してもらえないみたい。

◇アニメーションファイルをassetファイルで読み込む時

アニメーションを読み込むassetファイルは、対象のアニメーションファイルと同じフォルダに入れておかなければいけないっぽい?

複数のフォルダで分ける場合はそれぞれのフォルダごとにアニメーション読み込み用のassetファイルを作る感じ

※少なくとも正常に動作したのを確認

その他 雑多

・edictのlengthを0にすると評議会画面でクラッシュするみたい...?1だと大丈夫。-1は永続。

・現在の艦隊指揮上限を超える艦種サイズの艦船をcreate_ship(create_fleet)すると、毎日新しい艦隊に分割しようとして艦隊一覧が大変なことになる。初期の指揮上限は20なので、基本的には艦種サイズは20以下にすることが推奨される。ジャガーノートといった艦種は艦隊とは別物扱いになるので問題ないはず。

Source: https://steamcommunity.com/sharedfiles/filedetails/?id=2881846252					

More Stellaris guilds