
この記事は Simutrans Advent Calendar 2022 の2日目の記事です。 アドカレのリンクはこちら→ https://adventar.org/calendars/7489 こんにちは。毎度お世話になっております。きたすみです。 この記事では私流の鉄道車両アドオンの制作方法について、乗算レイヤーの軽い解説と一緒に紹介します。
アドオンの作画法やその考え方は無数に存在します。この記事はあくまでもきたすみの考え方について述べたものです。 レイヤー機能及び乗算レイヤー機能のある画像編集ソフトを前提に解説します。 各種用語はソフトによって表記揺れがある場合があります。 レイヤーそのものについての解説は割愛します。
正直なところ、他の解説サイト等を見たほうが早い気がしますが、一応ここでも解説しておきます。 ここに2枚のレイヤーがあります。1枚は青一色(RGB=0,0,255、不透明)、もう1枚は白(RGB=255,255,255、不透明)と灰色(RGB=128,128,128、不透明)の市松模様です。


市松模様のレイヤーの上に青一色のレイヤーを通常レイヤーとして重ねます(画像編集ソフトで特に操作をしなければ通常レイヤーとなると思います)。上にあるレイヤーが不透明なので、重ねた結果は青一色になります。

では、上にある青一色のレイヤーを「乗算レイヤー」に設定します。

下のレイヤーの市松模様が透けて見えるようになりました。 乗算レイヤーの各画素のRGBの計算式は次の通りです。 任意の画素について、 上のレイヤー(乗算レイヤー)は RGB=( R1 , G1 , B1 )、 下のレイヤー(通常レイヤー)は RGB=( R2 , G2 , B2 )とする。 乗算結果は RGB=( R1×R2/255 , G1×G2/255 , B1×B2/255 ) 今回の例では、 上のレイヤー(乗算レイヤー)は RGB=( 0 , 0 , 255 )、 下のレイヤー(通常レイヤー)は RGB=( 128 , 128 , 128 )or( 255 , 255 , 255 )。 乗算結果は RGB=( 0×128/255 , 0×128/255 , 255×128/255 )=( 0 , 0 , 128 )or( 0×255/255 , 0×128/255 , 255×255/255 )=( 0 , 0 , 255 ) 下のレイヤーに、上のレイヤーの255を分母としたときの割合を掛け算していることになります。上か下のどちらかor両方が黒( RGB=( 0 , 0, 0 ))だと乗算結果も黒になります。 また、計算式から察した方もいると思いますが、上下のレイヤーを交換しても結果は同じになります(上のレイヤーを乗算レイヤーに、下のレイヤーを通常レイヤーに置き換えることをお忘れなく…)。 下の画像は、先ほどの青一色(乗算レイヤー)の下にグラデーション(左端はRGB=(255,255,255)、右端はRGB=(0,0,0)、通常レイヤー)を組み合わせた例です。 左端はRGB=(0,0,255)の鮮やかな青、右端はRGB=(0,0,0)の真っ黒、その間はグラデーションになっています。


と、ここまで長々と乗算レイヤーの解説をしましたが、ここからようやく本題です。
きたすみの鉄道車両アドオンの多くは、モノクロで車体の陰影を描いたレイヤー(通常レイヤー)の上に、陰影を無視して車体の塗装を描いたレイヤー(乗算レイヤー)を重ねて作られています。さらに上にレイヤーを重ねていることが多いですが詳しくは後述。 画像は上から順に100系の車体形状レイヤー(通常レイヤー)、100系の塗装レイヤー(乗算レイヤー)、両者を重ねたレイヤーです。 車体形状レイヤーの色ですが、100系の場合は 屋根の一番上はRGB=(240,240,240) 南向き側面・前面はRGB=(224,224,224) 東向き側面・前面はRGB=(160,160,160)としています。128系のアドオンとしては明暗差がきつめの設定です。



a.塗り分け線と陰影の線を分けて考えられる 車体形状による陰影を描く際には塗り分け線を無視でき、塗り分け線を考える際には車体形状による陰影を無視できます。一度に塗り分け線と陰影の線を同時に考える必要がなくなります。 b.カラーバリエーションを作る時に省力化できる 塗装のレイヤーを差し替えるだけでカラバリを制作できます。 b.の長所を生かした例です。先ほどの100系の塗装レイヤーだけを差し替えてフレッシュグリーンにしてみました。車体形状が複雑なほど、この工法での作業量の削減効果が大きいですね。


a.レイヤーが増えて管理が面倒 この作画法の場合、最低でも2レイヤーが必要です。ドットを打つ作業量もファイルサイズも当然増加します。また、pak化に使うのはpngファイルですが、これはレイヤーに非対応であるので、レイヤーに対応したファイル形式からpngファイルへのエクスポートも必要です。 b.予約色との相性が悪い 窓や灯火の色やプレイヤーカラーなどの予約色を通常レイヤーと乗算レイヤーの2レイヤーのみで作る場合、乗算結果が予約色のRGBと一致するように計算する必要があります。しかし流石に面倒なので、別の通常レイヤーを上に重ねてそこに特殊色のみを描き込んで対処しています。
国鉄100系です。 上から順に 車体形状レイヤー(通常レイヤー) エアコンレイヤー(乗算レイヤー) 塗装レイヤー(乗算レイヤー) 窓・前照灯レイヤー(通常レイヤー) パンタグラフレイヤー(通常レイヤー) 以上を全て重ねた完成画像 となっています。






国鉄マニ36 2001号車です。 上から順に 車体形状レイヤー(通常レイヤー) 荷物室扉レイヤー(通常レイヤー) 塗装レイヤー(乗算レイヤー) 窓・尾灯レイヤー(通常レイヤー) 屋上機器レイヤー(通常レイヤー) 以上を全て重ねた完成画像 となっています。






以上、私流のアドオン作画法について長々と解説しました。皆様のアドオン作成のヒントとなれば幸いです。 ここまでご覧いただきまして、ありがとうございました。 以上

主にpak128用のアドオンを作っていましたがpak64に転向 主に日本語化wikiに投稿しますが、たまにこちらにも投稿するかもしれません