ポートレートのMOD制作¶
旧バージョンの制作環境
原文はゲームバージョン3.3向けで、アニメーション制作にはAutodesk Maya 2015/2016を用いています。ファイル構造と書式は現行環境で変更されている可能性があります。
Stellarisのポートレートには静止画とアニメーションの2種類があります。
構造¶
素材はすべてgfx/models/portraitsにあります。帝国の種族外見として選ぶ単位をポートレートグループと呼び、1つ以上のポートレートを収録します。
各ポートレートは次を指定します。
entity—gfx/models/portraitsのxxxxxx_portraits.assetで定義し、メッシュとアニメーションを指定します。clothes_selectorとattachment_selector—gfx/portraits/asset_selectorsで定義し、条件別の髪型・衣服を選びます。greeting_sound—sound以下から選ぶ、画面を開いたときの種族音声です。sound/category.assetのコレクションも指定でき、同じ種族の異なる感情を表せます。character_textures—gfx/models/portraitsのDDSテクスチャで、Entityのメッシュへ描画します。
ポートレートグループには6つの用途があります。
| 設定 | 用途 |
|---|---|
default |
指定がない場合に使う既定ポートレート。 |
game_setup |
帝国選択・作成画面で表示するポートレート。 |
species |
ゲーム内の種族タブで表示するポートレート。 |
pop |
惑星タブのPOPに使うポートレート。 |
leader |
各種リーダーに使うポートレート。 |
ruler |
統治者に使うポートレート。 |
他ファイルからの参照¶
MODポートレートの挨拶や侮辱が不適切になる場合があります。グループの状態はcommon/species_classes/00_species_classes.txt、01_base_species_classes.txt、common/scripted_triggers/00_scripted_triggers.txtにも定義されるためです。
00_species_classes.txtのHUMは人型種族を列挙します。ここにないものは人型扱いされません。01_base_species_classes.txtは全ポートレートグループ名と所属種族クラスを定義します。未登録グループはゲームに現れず、クラスに応じた挨拶・侮辱も受けません。00_scripted_triggers.txtのwears_clothes、lithoids_portrait、necroids_portraitは、それぞれ衣服、岩石種族、ネクロイドの判定です。
静止ポートレート¶
背景を透明に切り抜いたDDS画像をgfx以下へ保存し、gfx/portraits/portraits/00_portraits.txtへ追加します。
portraits = {
mam1 = { spriteType = "GFX_portrait_mam1" }
}
またはテクスチャを直接指定します。
portraits = {
mam1 = { texturefile = "gfx/interface/portraits/YOUR_TEXTURE_NAME.dds" }
}
アニメーションポートレート¶
Stellarisのアニメーションポートレートは、テクスチャ上で分割した身体部位を個別のポリゴン平面へ割り当て、Maya内で前後順を整え、スケルトンで動かす2Dキャラクターです。原文ではPhotoshop、Maya 2015/2016、DDS出力プラグイン(NVIDIA Texture Toolsなど)を使用します。
Photoshopでテクスチャを作る¶
菌類11を例にします。動かす身体部位を別レイヤーへ分け、腕・触手・顎・耳などの裏側も描きます。

各レイヤーを数ピクセル離して配置します。

分離レイヤーを複製・結合し、最下部へpaddingとして置きます。これによりアルファ境界の色漏れを防ぎます。選択範囲を約5px拡張し、他の部位へ接続しないことを確認して部位と同色で塗ります。Flaming Pearの無料プラグインSolidify Aでも処理できます。
各レイヤーをCtrl+Shiftで選択し、チャンネルタブの「選択範囲をチャンネルとして保存」でアルファを作ります。PSDを保存後、画像を512×512へ縮小してDXT5のDDSとして保存し、PSDは元サイズへ戻します。
Mayaでリギングする¶
新しいスケルトンを作ります。まずroot、root_center、spine_1を作り、キャラクターに応じて関節を増やします。

マテリアル¶
Photoshopで画像寸法をcm表示にし、その値でMayaのZ軸向きPolygon Planeを作ります。512×512pxの例は18.06×18.06cmです。HypershaderでPhongマテリアルを作り、Diffuseへテクスチャ、NormalmapとSpecularへ黒テクスチャを割り当て、平面へ適用します。正方形でなければUV EditorでUV端をテクスチャ端へ合わせます。
身体部位ごとに平面を複製し、頂点を増やして不要部分を除外します。Move ToolのPreserve UVsを有効にし、正面ビューで正しい位置と前後順へ重ねます。Outlinerでは最背面を上、最前面を下に並べます。

スキニングとアニメーション¶
変形部分へ分割を増やし、ポリゴン密度を上げます。Rigging > Skin > Bind Skinでメッシュをスケルトンへ結び、最大Influencesを4、Remove unused influencesをオフにします。

Paint Skin Weights Toolで調整後、ルート関節へアニメーション属性を追加します。Exporterで正しいプロジェクトを選びadd animation attr.を押します。最低でもnoneと任意名のアニメーションが必要です。なければModify > Edit AttributeからEnum Namesへnoneを追加します。各アニメーション開始点にidleなどを、終了区間にnoneをキー設定します。

シェーダーと出力¶
身体にはPdxMeshPortraitを使います。Hypershaderでマテリアルを選び、Maya ExporterのStellaris設定からadd shader attr.を押します。候補にない場合はDocuments/Paradox Interactive/PdxExporter/settings/clausewitz.txtへ追加して先頭の件数を増やすか、Modify > Edit Attributeで追加します。衣服はPdxMeshPortraitClothes、髪はPdxMeshPortraitHairです。
ExporterでSkip Mergeを有効にして名前と出力先を指定し、出力します。

ゲームへの追加¶
出力した各アニメーションを同じフォルダの.assetへ登録します。
animation = {
name = "molluscoid_14_portrait_happy_animation"
file = "molluscoid_14_portrait_happy.anim"
}
animation = {
name = "molluscoid_14_portrait_happy_2_animation"
file = "molluscoid_14_portrait_happy_2.anim"
}
.gfxへメッシュとアニメーションIDを登録し、.assetのEntityで状態を割り当てます。同じidle状態を複数置き、chanceを2.0と1.0にすれば前者が2倍選ばれやすくなります。
objectTypes = {
pdxmesh = {
name = "portrait_molluscoid_14_mesh"
file = "gfx/models/portraits/molluscoid/molluscoid_14_portrait.mesh"
animation = { id = "idle" type = "molluscoid_14_portrait_happy_animation" }
animation = { id = "idle2" type = "molluscoid_14_portrait_happy_2_animation" }
scale = 1.0
}
}
entity = {
name = "portrait_molluscoid_14_entity"
pdxmesh = "portrait_molluscoid_14_mesh"
default_state = "idle"
state = { name = "idle" animation = "idle" chance = 2.0 looping = no next_state = idle }
state = { name = "idle" animation = "idle2" chance = 1.0 looping = no next_state = idle }
scale = 1.12
}
gfx/portraits/portraits/[##]_portraits_[phenotype].txtのportraitsへ、Entity、衣服、髪、挨拶音、1つ以上のテクスチャを登録します。次にcommon/species_classes/00_species_classes.txtの該当表現型へポートレート名を追加します。衣服・髪がある場合はgfx/portraits/asset_selectors/[phenotype]_[size]_clothes_[##].txt等を複製・編集し、そのセレクター名でno_textureを置き換えます。正しければキャラクターデザイナーへ現れます。
非侵襲的な置換方法¶
既存グループを条件付きで置換すれば、チェックサムを変えず実績を維持し、既存とMODポートレートを同じゲーム内で共存させられます。
- 上の手順を行いますが、
commonフォルダは変更しません。 - 置換対象(例: Humanoid 2)を選び、
gfx/portraits/portraits/09_portraits_humanoid.txtをMODへコピーします。 portrait_groups内のhumanoid_02全体をコメントアウトします。単純なrep2などグループを持たない対象では不要です。- 独自ポートレートファイルのグループへ、種族名などを判定するトリガーを追加します。
game_setupは帝国デザイナー専用、speciesは種族画面で表示する1枚、popはPOP生成時の候補、leaderとrulerは各リーダー生成時の候補です。speciesへ複数書いても通常は最初の1枚が使われ、ゲーム内で種族テンプレートを作るとpop候補から再選択されます。
たとえばis_species = "Batarian"なら専用の男女ポートレート、それ以外なら元のmol14を返すよう各スコープへaddを並べます。これによりBatarianとMolluscoid 14が共存できます。
特定帝国だけを置換する場合は種族名の代わりに国旗フラグを判定します。
trigger = {
owner = { has_country_flag = "me_cerberus" }
NOT = { is_species = "Husk" }
}
プリセット帝国へ次を追加すれば、そこから保存した帝国もフラグを継承し置換条件を満たします。
flags = { "me_cerberus" }
関連項目¶
出典: Stellaris Wiki — Portrait modding(原文更新日: 2025年5月14日、版ID 106250)
翻訳日: 2026年8月31日 / 対応バージョン: 3.3
本ページは原文Wiki(CC BY-SA 3.0)の内容を翻訳した非公式ファン翻訳です。