【UE5】リムライトを描いてみた ポストプロセスマテリアル編 – Unreal Engine 5.6

Unreal Engine

水ノ茉の宣伝

準備中...
ゲームを作る予定なの
水ノ茉こおり

始まり

描画エンジニアになりたい方の入門編にもちょうどよいコンテンツ。

そう、リムライト
(尚主観。異論は認めよう。)

それを幾つかの実装方法で描いていきます。

リムライトとは

読んで字の如く。

物体の縁(リム)に当たる光の表現。

こういう感じ

選択肢:マテリアル / ポストプロセスマテリアル / プラグイン / エンジン改造

特に目を引くのはーー

「………」

何気に、ポストプロセスマテリアルかもしれない。

(恒例行事)

ポストプロセスマテリアルとは

Just a moment...

ポストプロセスマテリアルを作る&カスタムノードを組む

過去に長々と書いたことあるので割愛です。

カスタムノードを書く

リムの計算方法は幾つかあるのですが、今回は先行事例のひとつであるソーベルフィルタを元に描いてみます。

【Unity】Sobel Filterを使ってリムライト表現を実装する|Colorful Palette
はじめに この記事は Colorful Palette アドベントカレンダー 12/22 の記事です。 こんにちは!株式会社Colorful Paletteでクライアントエンジニアをしているとぐちです。 主にグラフィックス・描画関連の担当を...

ノードはこんな感じで配置です。

本家とは書き方が異なりますが、得られる結果は同じです。単純にコピペするだけだと心が満たされないので適当にフェッチ回数を1回減らして直列にしました。本家もUNROLLを指定すれば似たような展開にはなると思います。このあたりは筆者の趣味なので必要以上に気に留めないでください。

// Unlit以外のピクセルにはリムを引かない
BRANCH
if (ShadingModelID != SHADINGMODELID_UNLIT)
{
    return 0.0;
}

// たぶんお空はUnlitだから距離で切り捨てる
BRANCH
if (SceneDepth > 10000.0)
{
    return 0.0;
}

static const uint MaxOffsets = 8;

static const float4 OffsetAndSobels[MaxOffsets] =
{
    float4(-1.0, -1.0, -1.0, -1.0),
    float4(-1.0,  0.0,  0.0, -2.0),
    float4(-1.0,  1.0,  1.0, -1.0),
    float4( 0.0, -1.0, -2.0,  0.0),
    float4( 0.0,  1.0,  2.0,  0.0),
    float4( 1.0, -1.0, -1.0,  1.0),
    float4( 1.0,  0.0,  0.0,  2.0),
    float4( 1.0,  1.0,  1.0,  1.0),
};

#define GetOffset(Index) (OffsetAndSobels[Index].xy)
#define GetSobel(Index)  (OffsetAndSobels[Index].zw)

float2 EdgeXY = float2(0.0, 0.0);

UNROLL
for (uint i = 0; i < MaxOffsets; ++i)
{
    float2 NewUV = UV + Radius * GetOffset(i) * InvSize;
    float2 NewClampedUV = ClampSceneTextureUV(ViewportUVToSceneTextureUV(NewUV, PPI_SceneDepth), PPI_SceneDepth);
    float NewSceneDepth = SceneTextureLookup(NewClampedUV, PPI_SceneDepth, 0).r;
    EdgeXY += NewSceneDepth.rr * GetSobel(i);
}

float EdgeStrength = length(EdgeXY);
EdgeStrength = step(Bias, EdgeStrength);
return EdgeStrength;

こんな感じで太さとリムの出る範囲、色を調整できます。

例外的に天球は距離で除外していますが、Unlitで描いたオブジェクトすべてにリムが発生します。

太さの単位を解像度不変

現状だと太さの単位をピクセルで指定しているため、解像度が変わると太さが変わってしまいます。

オーバーレイな背面法の時に紹介した計算を組み込んで太さが不変になるようにしてみます。

カスタムノードはWorldPosピンを追加して、WorldPositionノードを接続してください。

わかるひとはSceneDepthとUVからWorldPosを復元した方が計算コストが適切です。

あくまで今回は解像度不変な対応だけで、FOVやピクセル単位系に合わせる部分は割愛しています。オーバーレイで記載したコードをいくつかお引越しすれば実現できるとは思うので、必要に応じて各々で拡張してみてくださいな。

最初はコピペで進めるのが正解だけど、慣れてきたら自分で開拓するのも楽しいですよ。少なくともそれができないなら真の意味で習得したとは言えないから、どこかで躓くと思う。ま、この程度の実装ならGPTさんがすぐに答えてくれるんでしょうけどねぇ。便利過ぎるのは良くも悪くも新規さんの学習の機会を奪ってしまうので悩ましいです。

// Unlit以外のピクセルにはリムを引かない
BRANCH
if (ShadingModelID != SHADINGMODELID_UNLIT)
{
    return 0.0;
}

// たぶんお空はUnlitだから距離で切り捨てる
BRANCH
if (SceneDepth > 10000.0)
{
    return 0.0;
}

static const uint MaxOffsets = 8;

static const float4 OffsetAndSobels[MaxOffsets] =
{
    float4(-1.0, -1.0, -1.0, -1.0),
    float4(-1.0,  0.0,  0.0, -2.0),
    float4(-1.0,  1.0,  1.0, -1.0),
    float4( 0.0, -1.0, -2.0,  0.0),
    float4( 0.0,  1.0,  2.0,  0.0),
    float4( 1.0, -1.0, -1.0,  1.0),
    float4( 1.0,  0.0,  0.0,  2.0),
    float4( 1.0,  1.0,  1.0,  1.0),
};

#define GetOffset(Index) (OffsetAndSobels[Index].xy)
#define GetSobel(Index)  (OffsetAndSobels[Index].zw)

float2 EdgeXY = float2(0.0, 0.0);

UNROLL
for (uint i = 0; i < MaxOffsets; ++i)
{
    float4 ClipPos = mul(float4(WorldPos + LWCHackToFloat(ResolvedView.PreViewTranslation), 1.0), View.TranslatedWorldToClip);
    float2 Offset = mul((float2x2)View.ViewToClip, GetOffset(i) * Radius);
    ClipPos.xy += Offset;
    ClipPos.xy /= ClipPos.w;
    float2 NewUV = ClipPos.xy * float2(0.5, -0.5) + float2(0.5, 0.5);
    float2 NewClampedUV = ClampSceneTextureUV(ViewportUVToSceneTextureUV(NewUV, PPI_SceneDepth), PPI_SceneDepth);
    float NewSceneDepth = SceneTextureLookup(NewClampedUV, PPI_SceneDepth, 0).r;
    EdgeXY += NewSceneDepth.rr * GetSobel(i);
}

float EdgeStrength = length(EdgeXY);
EdgeStrength = step(Bias, EdgeStrength);
return EdgeStrength;

こんな感じで解像度不変になりました。他のアプローチ手法として基準の解像度と現在の解像度を除算、そのスケールを太さに反映というのもあります。たぶんこちらの方が簡単ですね。

この手法の欠陥として頂点座標で太さを計算しているので近づく場合には太さをいい感じに維持してくれますが、カメラを対象から離し過ぎると太さがゼロ値に近づいてしまい、最終的にはクリップされます。クリップ付近に近づいたらリムのカラーを徐々に抑えてフェードアウトっぽく見せたり、オフセットの最小値を設けて常に引かれるようにしたり、要望に合わせて調整するのが良きです。

内側のぼかし表現

UnrealEngine5.5からUserSceneTextureと呼ばれる、所謂中間テクスチャが使用可能になりました。先ほどのリムの計算結果をUserSceneTextureに書き込んで、ガウスぼかしを適用して、内側から外側のフェード表現を作ってみます。

PPM_Rimlight

先ほどのリムライトのポストプロセスマテリアルの出力先をUserSceneTextureに変更します。バッファ名はRimlightとします。

SceneColorと乗算する部分も削除して、Customノードの計算結果を書き込むだけにします。

ぼかし処理の負荷軽減の一環としてカスタムノードも変更します。

Rチャンネルにリムの重み、GチャンネルにそのピクセルがUnlitか否かの情報を入れておきます。このリム計算はUnlit箇所にのみ引く手法なので、それ以外のピクセルはそもそもぼかし処理が不要です。Gチャンネルが0.0の場合はUnlitではないことが確定しているので、早期リターンして負荷軽減といった感じです。

あとUnlit以外を混ぜると外側から内側、内側から外側の両方に対してぼかしが効いてしまうので、その対策も兼ねています。

// Unlit以外のピクセルにはリムを引かない
BRANCH
if (ShadingModelID != SHADINGMODELID_UNLIT)
{
    return float2(0.0, 0.0);
}

// たぶんお空はUnlitだから距離で切り捨てる
BRANCH
if (SceneDepth > 10000.0)
{
    return float2(0.0, 0.0);
}

static const uint MaxOffsets = 8;

static const float4 OffsetAndSobels[MaxOffsets] =
{
    float4(-1.0, -1.0, -1.0, -1.0),
    float4(-1.0,  0.0,  0.0, -2.0),
    float4(-1.0,  1.0,  1.0, -1.0),
    float4( 0.0, -1.0, -2.0,  0.0),
    float4( 0.0,  1.0,  2.0,  0.0),
    float4( 1.0, -1.0, -1.0,  1.0),
    float4( 1.0,  0.0,  0.0,  2.0),
    float4( 1.0,  1.0,  1.0,  1.0),
};

#define GetOffset(Index) (OffsetAndSobels[Index].xy)
#define GetSobel(Index)  (OffsetAndSobels[Index].zw)

float2 EdgeXY = float2(0.0, 0.0);

UNROLL
for (uint i = 0; i < MaxOffsets; ++i)
{
    float4 ClipPos = mul(float4(WorldPos + LWCHackToFloat(ResolvedView.PreViewTranslation), 1.0), View.TranslatedWorldToClip);
    float2 Offset = mul((float2x2)View.ViewToClip, GetOffset(i) * Radius);
    ClipPos.xy += Offset;
    ClipPos.xy /= ClipPos.w;
    float2 NewUV = ClipPos.xy * float2(0.5, -0.5) + float2(0.5, 0.5);
    float2 NewClampedUV = ClampSceneTextureUV(ViewportUVToSceneTextureUV(NewUV, PPI_SceneDepth), PPI_SceneDepth);
    float NewSceneDepth = SceneTextureLookup(NewClampedUV, PPI_SceneDepth, 0).r;
    EdgeXY += NewSceneDepth.rr * GetSobel(i);
}

float EdgeStrength = length(EdgeXY);
EdgeStrength = step(Bias, EdgeStrength);
return float2(EdgeStrength, 1.0);

PPM_GaussianBlurHorizontal

PPM_GaussianBlurHorizontalSceneColorではなく、先のRimlightを入力とします。

コードも少し変更です。

#define CalcWeight(Value, Sigma) (1.0 / (sqrt(PI * 2.0) * Sigma) * exp(-Pow2(Value) / (2.0 * Pow2(Sigma))))

BRANCH
if (Enabled <= 0.0 || Rimlight.y == 0.0/*このピクセルがUnlitじゃないならブラーする必要ない*/)
{
    return Rimlight;
}

float Weight = CalcWeight(0.0, Sigma);
float Color = Rimlight.x * Weight;

const uint Kernel = max(1, round(InKernel));

LOOP
for (uint i = 1; i < Kernel; i++)
{
    float4 NewUV;
#ifdef HORIZONTAL_PASS
    NewUV.xy = UV + float2( float(i), 0.0) * InvSize;
    NewUV.zw = UV + float2(-float(i), 0.0) * InvSize;
#else
    NewUV.xy = UV + float2(0.0,  float(i)) * InvSize;
    NewUV.zw = UV + float2(0.0, -float(i)) * InvSize;
#endif

    float4 NewClampedUV;
    NewClampedUV.xy = ClampSceneTextureUV(ViewportUVToSceneTextureUV(NewUV.xy, PPI_UserSceneTexture0), PPI_UserSceneTexture0);
    NewClampedUV.zw = ClampSceneTextureUV(ViewportUVToSceneTextureUV(NewUV.zw, PPI_UserSceneTexture0), PPI_UserSceneTexture0);

    float NewWeight = CalcWeight(float(i), Sigma);

    float2 NewColor0 = SceneTextureLookup(NewClampedUV.xy, PPI_UserSceneTexture0, 0).xy;
    float2 NewColor1 = SceneTextureLookup(NewClampedUV.zw, PPI_UserSceneTexture0, 0).xy;
    Color += NewColor0.x * NewWeight * NewColor0.y;
    Color += NewColor1.x * NewWeight * NewColor1.y;
    Weight += NewWeight * NewColor0.y + NewWeight * NewColor1.y;
}

return Color * (1.0 / Weight);

PPM_GaussianBlurVertical

最後のぼかし処理が終わったらリムをコンポジットする感じです。

見た目

内側にぼかしが適用された見た目になりました。

尚ぼかし処理でオフセットしている個所は従来通りピクセル単位なので、カメラ距離や解像度によってぼかし度合いが変わります。必要なら適当に改良してください。

UserSceneTextureってスクリーンパーセンテージ非対応なの?

なんかバグってますね。手続き必要なのかな。

UserSceneTextureノードをそのままOutputしても同じ見た目が再現できるのでCustomノードで使用している関数が悪さしている訳でもなく。

筆者はエンジン改造派なのでわざわざ下位互換であるUserSceneTextureを使うことはないので別にバグってても支障ないので無視します。なんならUserSceneTextureは例のガウス記事振りに触りました。

おわり!!!

たまにはこういう初歩的な表現で遊ぶのも楽しいですね。

余談だけど筆者はアウトラインとリムライトから描画に入門したので懐かしい想い出なのです。

ライムライト・レモネードジャム 感想編

ネタバレ防止

いつも通り、読み上げツールをセットアップして準備完了っと。

共通

日本語よわよわの私よりもReinVisionちゃんの方が識字能力高くて笑うわ。

衛哉もりちか、読めるかぁ?読めるか…はい、私がアホすぎるだけです。

夜間の色塗りのコントラストの使い分け綺麗ですね。

天球に則した肌色って地味に難しいというか調整が面倒だから。

ほんまに基本無料とかクソ過ぎる。

莉々子さんいきなり半角英字使わないで下さい。あなた方は全角文字表記が基本だから半角対応してないのです。識字できねぇ。

Youpipeの設定は引継ぎなのね。

鸞鏡らんけい、読めるかぁ?いや流石に無理だろ。エロゲの登場単語、謎に難しいの。

うちのシナリオ担当も難しい日本語をよく使う。学がない私には難しい。

BGMで多少かき消されていますが環境音が結構凝ってますね。

資本力に見合った仕掛けを作ってくれるのはありがたい。

この構図、生徒会室、ピンクのロング、うっ、あたまが。

声色も猫被ってる時と似たような感じだから余計に。

そのライフハック、都心の駅構内では致命傷になりそう。

オイテカナイデ オイテカナイデ オイテカナイデ オイテカナイデ オイテカナイデ

頭に「お」を付けたところで丁寧な言葉に成らない単語ですわ。

そうね、私は80万した。

マヂで。

なぜか変換できないって元ネタなんだっけ。記憶力。

あ、すくつ、か。思い出せた。いぇい。

いいなー。

今度の技術デモは体育館のアセット使おうかな。

なんかいいなー。

むふふ。

エロゲ楽しい。

わかるー。私もPC起動してソリューション立ち上げると手が止まることあるある。

うんうん。私もエロゲをゆっくりインプットなう。

はっ、遂に気になってたライムカラーな子が出てきた。

見た目が一番好きな子ですが、当然名前知らんです。

えぇ、事前情報の予習をサボっています。

妹かよ、こいつ。

お姉さん系統かと思ってた。

煽り過ぎた結果、道場破り紛いか。誠に草。

うちも休暇中~。

ノルマ3人クリアですね。(呑気)

オープニング映像かな。初めて見た。

ブルームが強いのは今時の編集方法って感じな気がするけど、気のせいかな。

ポストエフェクトは言い方を良くすれば見栄えがいい、悪く言うと下地が適当でも映える、だから使い過ぎはなんか釈然としないんですよね。ゲームでもポストエフェクトを前提とした絵作りとかダサッと思ってしまうタイプ。とはいえ、相変わらずアニメーション頑張っている映像で流石と思いましたわ。個人的にはLampのようなAviutlで再現可能な懐かしさを感じる映像も好きなんですがね。

美玖さん素直で草。

莉々子さんの制服変わってる。かわいい。このカラバリめっちゃ好み。紫のワンポイントがいいです。

小~中規模ブランドならここらへんで共ル終わりそうですが、まだ続くんですね。なげぇです。嬉しいような悲しいような複雑な気持ち。

コオリスクナメ↓

美玖さんの頭黒リボンかわいい。

なんか衣装も相まって幼く見えますね。

やべぇ、こいつ厄介、こいつ。

ほぼリア凸やん。

鸞鏡のカラバリはお淑やかですね。

学生だからこそ一時の感情に流されるべきとは思っちゃうけどねぇ。

基本的には親元の保護下にあるんだし。例外を挙げるとキリがないけども。

私も夏休みなう~。

従姉を足に使う気か。

お、あからさまなルート分岐が出てきた。

言ったそばから群衆に流されてて草。

潔い野郎で安心。

そういえば別荘はピアノの練習とかの口実で借りたんですかね。それとも本当のこといったんですかね。てっきりこの区間はこの子をフォーカスするのかと思っていましたが、割と平和な合宿で終わったから気になった。

気になった矢先にイベント起きたわ。

あ、美玖さんの既視感あれだ。シーラブの子。名前忘れた。攻略途中で積んでる。思い出した。やべ。

アドレナリンやばそう。

「おざなり」と「なおざり」

エロゲで学ぶ言葉の違い。

文化祭は無理でしょ。部活紹介で結果的には荒らしたようなもんなんだし。

お嬢様やからねぇ。一般開放はないでしょうねぇ。

やっぱり却下よね。そりゃそう。

え、却下理由が思ってたんと違う。

あー、キャパ的に危ないからか。

どこにでも現れるな美玖さん。

文化祭で共ル終了か。

約12時間ほどですね。

キャラクター名や括弧などを含めた総文字数が約43万、実際の台詞やナレーション部分だけにすると約36万文字。

ぼりゅーみぃーですねぇ。

陽見恵凪(はるみえな)

女子部屋認定されない莉々子さんに涙。

外干しすると盗られたり覗かれたりする懸念があるから室内干しが基本らしいですね。大変ですよねぇ。

メリーさん方式のメッセージのやり取り面白いな。

手料理は構わんけど、指怪我しないようにね。

顔を見ない癖というか目線を合わせたところであんまり見えてないじゃん。

はっ。大胆。

噂が広がりまくっている状況でその行動は迂闊が過ぎる。

観客居ないのかな。

私なら全力で覗きに行っちゃうわ。

教室の壁に耳当てて澄ましたことしかないけど。

視線と気配って意外と気付くしバレるんよな。

そしてこいつこの期に及んでノンデリ。

商業目線はまた別だからね。小難しいお話なのです。

スポドリよりも経口補水液がおすすめ。

重めの風邪を引いた時はOS-1がマジでうまいぞ。

あれ不思議だよね。

平常時に飲むとクソまじぃのに、重症な時はマジであれ美味しい。

厳密には風邪じゃないのか。だからスポドリ頼んだのかな。なら納得だけど。

体調が悪い時ってネガティブ思考になりがちだからね。

陽見さんは常日頃だから余計にバイアスが掛かるのでしょう。

難儀な性格やなぁ。

ノンデリといい勝負。

エッチする時にテキストウィンドウが下部に寄る仕様っていつからでしたっけ。

CG絵を邪魔しないようにするためなんでしょうが、レイアウトが変わるとうちの子の検出が崩れるという、あまりにも個人的な事情過ぎますが、割と困る仕様なんですよね。ま、対策済ですがね。流石私なのです。

比較したい訳じゃないんだけど、所感として、絵のエッチ度合いはオルトロスに軍配が上がりそうな感じがするかも。結局は好みの絵柄とか表現によるものなんだろうけど、なんか、ぱっと見、そう感じた。

ユノスの作品はシナリオが好きだから別にエッチは勝手にして頂ければ十分なんだけどね。

毎回初回はせめてゴムしてくれと思うけど。今回に関しては直前でコンビニ行ってるやんという。

情事をそのまま歌詞にするのはあまりにも生々しいでしょ。

3回したからそろそろイベント起こるかな。あぁ、嫌だ。

当人じゃないパターンか。

うっわぁ。メンタルに来る構成だなぁ。誉め言葉として。

立ち直りが早くてよかった。リドジョ並みに引っ張られたら普通に寝込んでたわ。

美玖さんは相変わらずのご様子で安心です。

想いが重い娘ですわ。重すぎるほど。

物語性がある歌詞っていいよね。分かる。

作業用BGMには向かないけど、聴きたい時には最適解。

下手な安っぽい奇跡を起こして終わるよりも、いい終わり方ですね。

んー、楽しかった。

総数が約28万文字、台詞に絞ると約23万文字、喘ぎ声を含めているので可食部位は更に少ないでしょうが、ブランド名に胡坐をかいていない内容量ですね。流石です。

流石なんだけど、やっぱり大型連休取らないと攻略が難しいブランドだね。

社会人しているとプレイするのにハードルを感じますね。

分割して遊べばいいんでしょうが、そこまでは自制が効かない私なのです。

フローチャートを見返して気付きましたが、美玖さんルートあるじゃん。やった。

二見原莉々子(ふたみはらりりこ)

莉々子さんの浴衣が一番好み。

適度に子どもっぽい感じが合う。

陽見さんは可愛いというより、綺麗なんよな。

調子に乗って自爆して赤面する莉々子さん可愛いです。

実際スイーツは脂質が半端ねぇですからね。

マカロンの原材料であるアーモンドプードル、あれびっくりした記憶がある。

クッキーですらバター1本使うし。

美味しくて可愛いものには秘めたるモノがあるのです。

上手く使えばエネルギー効率が良い食べ物な気もします。健康とは程遠いですが。

Q.E.D証明終了

チカちゃん優秀。

ガチ恋製造機の被害者は誠に草。

鏡の前で笑顔作ってる莉々子さん可愛い。

微笑ましいな。

いま公園にブランコってあるんですかね。

お外でないから公園がどこにあるか分からねぇ。

死なない程度に怪我をさせる環境がないと危機回避能力が微塵もつかないから、かえって危ないと思うんですけどねぇ。皆さん過保護ですよねぇ。運営者は責任問題が問われる可能性が高過ぎて安牌を取らざる得ないだろうし。

えっ、このタイミングでそのカミングアウトはズルくない?

考えながら包丁触ると怪我しやすいぞ。気を付けろ。

思考に耽るのは洗い物がちょうどいい。

鶏ミンチから生まれる新曲とは如何に。

おぉ。仲原さんかっこいい。

企業というのは責任を取ってもらうための箱ですからねぇ。

うんうん。責任を取ってくれるから、こっちは自由にお仕事が出来るというものです。

故意に失敗するのはダメだけど、やってみてダメになることはいつかはあることだからね。

それを恐れずに出来る環境や機会を提供してくれるというのは意外と有り難いものです。

ま、だからといって必要以上に感謝や義理立てすることはないと思うので、いい感じの線引きが必要ですね。

お仕事の悩みがないというのは有り難いことですわ。エロゲのために有給取れるし。流石に申請書に『エロゲしてきます』とかアホなことは書かないけど、私用の2文字で済むのは有り難い。権利があるから当然なんだけど、なんかひと昔前は労働基準法の5文字が存在しない環境ばかりだったらしいですからね。この業界。今も悪しきところはあるところはあるんでしょうが。

告白の返答、随分と淡白ですね。関係性的にそうなんだろうけど。

時間貸部屋で恋バナすな。

さり気なく二人っきりにしてくれるチカちゃんとても気が利く。

話逸れますがスクショ阻害どうやって実装しているんですかね。これ普通に突破できるんですよね。技術的な小細工とかではなく連打で。なんか対策が中途半端です。

自分の部屋を惨状と言うな。

一晩にして惨状が去ったのか。はぇ。

なるほど、勝負下着じゃなければ勝っていたと。

おっぱいのためにソフトボディシミュ作ってみたいんですよね。

あ、設計は終わってるよ。あとはやる気。

ボーンベースな揺れモノだと品質に違和感があったので。

CoffeeLiveを終えて思ったことでした。

水ノ茉こおりの本命プロジェクトはまだ数年先だから、それまでに色々とナレッジを溜めておきたいのです。

うーん、あれだね、おっぱい、でっかい。

雰囲気を変えたら客層が変わるのは当然だし気にし過ぎでしょうねぇ。

評価なんて所詮は受け取り手の好みの問題ですし。

自分で満足する出来ならそれ以上気にすることないでしょう。

え、マジが?マジか。うっそでしょ。

このシーンは茉優先輩を思い出しますね。

美玖さんの場合マジで凸って解説という名の説教をかましそうで怖いわ。

だってほら、身内にすらこの通り喧嘩腰じゃん。可愛らしいけども。

お前が『厄介な人』とかいうな。代表格やろがいっ。

美玖さん言語化ありがとうございました。

あなた挨拶しに行かなくても十分に厄介だと思いますよ、はい。

礫川兄妹のやり取りは空気がほっこりしていい中和剤ですね。

いい女過ぎる。ほんとうに。

仲原さんもいいひとです。

大先輩である那優花さんは流石ですね。

見透かしてますわ。

ご自身もまだ休業中でしたっけ。

わかるー。私も煮詰まるとメモ帳に書き出して俯瞰整理することあるある。

話し相手は居ないから自問自答して終わるけど。

那優花さんマジでいい従姉。

うんうん、自己評価なんて正直自信過剰なくらいでいいのよ。

他人に迷惑を掛け過ぎなければ。少しくらいの迷惑は許してくれ。

仲原さんも一安心ですね。

もー。本番前に惚気んといてくださいなー。微笑ましいなー。

たしかに。顔真っ赤で草とか返したら一瞬で食いつきそう。

まだ2人目だけど一番好き。

最終的な順番はこの後の美玖さんと那優花さん次第ですね。

やっぱりプロレスが出来ると会話が弾むから見ていて楽しんですよね。

お淑やかな子はエッチの時に弾けるというシーンが限定されるのに対して、こういう子は全体を通して楽しめるからなのかな。

込々約26万、台詞約22万、概ね同じですね。

ローカルでGpt使えるらしいですし、台詞と喘ぎ声の分類でもして可食部位の文字数だけ抽出とかしても面白そうですね。

隠杏珠(なばりあんじゅ)

ソロ音源かっこいいな。

分かる。話が通じない相手って結構いる。

素面でも通じないやつは通じない。

思ったけど隠さんは恋愛してる暇あるのかね。

テストで狂った数字取ってる優等生だし。

甘々な計画に調子を乗る隠さん可愛いですね。

本人は気が気じゃないでしょうが。

幸運は大事。故に気ままにやるしかないの。

自己評価が低いに関してはあなたが言えたことじゃないでしょ。

『それはそう!』うーん。このノンデリ。

殿山さん、忌憚がないにも程がある。

那優花さんクラスでもやっぱり目の前で褒められるとドヤリたくなるものなんですねぇ。

あぁ、分かる。私も一応めっちゃ気を付けてる。最終的に上からの指示通りに熟すという安牌ムーブを選ぶようにした。思うことあっても求められなければ意見しないのが一番平和でオンスケ通りに進むからね。結果として表現の幅が狭まり過ぎて欲求不満になって個人活動始めた訳だけど。

デビル杏珠とエンジェル杏珠の語呂の良さよ。

美玖さんは素直でいい子ですよね。

今更だけどANOTHER VIEWのレイヤーとメインレイヤーとのアルファブレンド粗くない?

解像度の問題なのかな。エッジが目立つんだけど。前処理したものをAlphaに格納してブレンドすれば綺麗に出来るんだけどね。エロゲのエンジンとゲームのエンジンは違うから知らんけど。とはいってもDX12で動いてるだろうし。根本は変わらんか。知らんけど。

告白の返答が奇声を上げてその場から逃げ出すとかトラウマになりそう。

おうこいつまじか。自分だけデート楽しんでるやんけ。まじか。

記憶にある限りだとホワイトクリスマス1回しか見たことないわ。

雪が降らなさ過ぎる。

交通機関が死ぬから降らなくてもいいんだけど、なんか風情がないよね。

あーやっぱそうよな。スカウトされるなら隠さんが適任よな。

月望さんは界隈では十分に有名人では。

ED一番好きかも。透き通る感じやべぇ。

込々約21万、台詞約19万。数字で見ると低い方ですが、付き合い始めるまでのパートが多かったので体感的にはむしろ長く感じましたね。実数と体感の乖離というやつですね。

嶌越月望(しまこしつきみ)

『ぁぁーだめだめッ、えっち過ぎます!』の効果音を発する方です。

ハムスターみたいな頬っぺ。

月見と月望。

莉々子さん、雪鷹を刺すつもりで陽見さんを刺すの、誠に草。

これは罠過ぎる。

へぇ。ピアノソロめっちゃ好きかも。

イカレたメンバーとして紹介されているのにノリノリで乗っかる陽見さん。お友達ですねぇ。

言い回しも悪いけど、頭ピンク過ぎるのも悪い、五分五分。

生成ツール、開発者としては工数及び人件費削減の観点からとてもいいと思うんだけどね。

まだユーザーが過剰反応するから難しいよね。しかもネガティブな意見は目立つ。

生成ツールはあくまで制作補助の立ち位置にあるんだから、そこまで拒絶反応を示さなくてもとは思うんですよね。

とはいえ、生成技術に親しんだ世代が多くなればこれらの問題は勝手に鎮静化するはずなので、時間が解決してくれると思っています。

ちなみに私の場合は、自分でコードを書いた方が正確で早いから、結局は設定資料の調べものぐらいでしか使いこなせていません。

Claude Codeとか使いこなせるひとは凄いです。こういうのは次の世代の子、若い子が強いんでしょうね。

私も全然若いけど。

ん?これ、個別ルートって異なるシナリオさんが書いてるの?

調べるほどの興味はないんだけど、『ただ、』『あとは、』とかの句点で終わるような書き方、今までなかったと思うんだけど。

差別化のために意図的なのかな。分からん。そんなに興味もないし。

うっわ。いきなりロリ時代出てきた。かわいっ。

子どもの頃から結構しっかり自分の意見がある子なんですね。

嶌越さん親衛隊らしき存在、絶対にこの先邪魔してくるじゃん。頼む。消えてくれ。

そんな裏でおそらく同人誌でも受けっているんだろうな。この子は。呑気だ。

私は電子でしか買わないからこの感覚が変わらん。リアルは人混み無理だからこの先も縁ないだろうし。

『ニィ』ぃ?なんだこの強烈なキャラ付けは。

語尾と視覚が狂ってるけど、鋭いですね。なんか癪だわ。

無意識の影響はなぁ。どうすればいいんだろうね。私にも答えが分からない。

私の場合は見ている世界が狭すぎてそもそも心配してないから答えを作ってないだけなんだけど。

ポケモンもドラクエもFFも最近のアニメもなにもしらねぇ。

エロゲと昔のアニメだけは少しだけ知ってるよ。

あと常識も持ち合わせないわ。えっへん。

うっわ。きっまず。

どのみち軽音部でカスタネットうんたんはしねぇだろ。あれは創作だ。

ピアノの先生の過去大変そう。ご愁傷様です。

おう。演奏中は静かにしろや。

え、嶌越さん、怖いっす。いやあの親に対抗できるだけのメンタルを搭載しているからその返しはそうなんでしょうが、怖いです。

えぇ。。。学院内のパソコンでえっちな作品を検索してたんですか。。。えぇ。。リテラシぃ。。。

マジでピンクマのひと元気やな。傍から見たら面白い。

仲原さん出てくると手のひらくるくるするし。面白い。

ノーパンノーブラのひとに流石にキモイって言われたら凹みそうだね。

お前じゃいッていう。

おいクソおやじ、菌ばら撒いたろ。すぞ。

角生やしてる美玖さん可愛い。

ハロウィンなのに髪色と相まってクリスマスカラーですね。

礫川兄弟にまんまと嵌められてて草。

合宿メンバーほぼ全滅とは。流行り病にはご注意です。

ゆずソフトの作品の中でゆずソフトご存知ですかというやり取り。

なんかシュール。

やべぇ。V事情も盗作被害も知らねぇ。

作品世界以外に無関心な弊害。

なんというか、いいですね。

言語化むずい。

え、これ個チャじゃないの。

浮かれ過ぎでしょ。

嫉妬な陽見さん。

やっぱそうだよね。

衛哉もりちか、読めないよねっ。

当人がそう言ってるならそうだ。

私がバカなことが問題ではないのだ。ふふん。

大人対応な隠さんです。クールです。

別れ際にキスとかしなくてよかった。3バカに見られるところだった。

あれ、クールな隠さんが、おバカに。

これで4バカですね。

まぁこれに関しては未だにグルチャで待ち合わせしているのが悪いよな。

校長室襲撃事件?!?!?!

武闘派にも程があるだろ。

陽見さん、カレシにマウントを取ったところで、勝ち目ないですよ。

可愛らしいから続けてほしいですが。

10年スランプに比べれば、か。

おっも。

おいぃぃ。教室でなに広げてんねんコイツ。

おっと。ピアノ少女は海外留学な予感。そういえばピアノ弾いている子ってそういう物語だよねぇ。懐かし。

陽見さん嘘付くのいくらなんでも下手過ぎるわ。

えぇ。バカですよ。悪いか。

いやそもそもとしてコスプレモノとして売ってるんだからすぐに脱ぐのはそりゃ違うでしょっていう。

本当に外れしかなさそうな闇タコパやんけ。

え、お母様の意外なムーブ。

意外と素直に感謝するんね。

そういうの最後まで認めないのかと思ってた。

ライブのたびに帰国できるのはなんというか、流石にお嬢様ですねぇ。お金もちめっ。

あー、それを認めてくれる背景としてあれがあるのか。

確かに義理を通させるという意味では現実的なところか。はえー。良き展開。

バイタリティ無限バグ、うん、ちがいねぇ。

え、君たちも少し行くんかいっ?!

許可取りはお母様に協力させたんかい。

7年前。。。

インディーズで8,000万再生のコンテンツを保持しているって、インディーズってなに。。。

込々約27万、台詞約22万、他のルートに比べると細かく改行を使っている印象でしたね。二人っきりの合宿のシーンが一番好きでした。あとは特段趣味に刺さらなかったかな。合宿のワンシーンはマジで好きだけど。いいよね。熱中している時間って。

礫川美玖(こいしかわみく)

美玖さん初手からストーカームーブ止めてください。

そのひとの知り合いからスケジュールを確認して抑えるのはやべぇです。

あなた私の推しなんです。

もう少し常識的な行動をしてください。

お兄さんがちょっかい掛けるのも分かる。反応が可愛い。面白い。

嶌越さん、あなたが一番辛辣です。

隠さん、頼むから肉に釣られないでくれ。

美玖さん、真面目過ぎて重すぎるな。

この時間に楽器弾いたら近所迷惑ですよ。

めっちゃ挨拶に殺意こもってるじゃん。

仲原さんはいいひとです。

失礼極まりない子という点については微妙に手遅れだと思うぞ。

受け取り手が比較的高評価しているからマシだろうけど。

いいお兄さんたちです。気付いてるのかな?

おー、大胆。

シスコンこえぇ。

んー、やっぱり瞳綺麗ですね。

こういうレイヤー構成な瞳好きなんですよね。

参考資料になりそう。

美玖さんのSD絵が可愛過ぎる。天使過ぎる。

髪を結んでいない時のビジュがストライク過ぎる。かわいっ。

ドローか。今までの流れ的に先方が勝つと思ったけど、最初の曲で同情票でも集まったのかな。

おぉ、ちゃんとED映像用意されてるんだ。すげ。

込々約11万、台詞約9万。

茶園那優花(さえんなゆか)

代休あるだろと思ったけど、フリーランスか。

ほんま、要望書、依頼書、この辺りはちゃんとするべき。

今はリテイク酷ければ法令違反で刺せるから前よりはいい時代になったんでしょうね。

パブリッシャーが強いことに変わりはないですが、お上には逆らえませんからね。

クリエイティブなことをするのは大変なんだな。

原材料にそういう部分を使ってたらそりゃ削れるよね。お疲れ。

そりゃヤキモキする理由が通話相手ならため息のひとつぐらい出ますわな。

いま従姉弟の3文字は地雷ですね。

那優花さん、やばいです。いいです。とてもいいです。

でっか。おっぱい、でっか。

ちなみに創作とはいえガチの兄妹・姉弟設定は苦手です。

なんかねぇ。倫理観のセーフティが邪魔する。

那優花さんは少し離れているのと後発性だから特に嫌悪感なかったけど。

隠さんのようにカレシできたから自信が付くほど軽い症状でもないのか。

そりゃそうか。

久々に夜更かししてしまった。眠い。寝よう。楽しかった。

込々約14万、台詞約11万。

振り返り

共通と個別、アフターとエンド、すべてを込々にすると約180万文字、6.7万行。

プレイ時間は共ル以外は測っていないので日数になりますが、1日8~12時間ほどバラつきがありつつ約5日ほど。

ボリュームに関しては文句なしでしたね。というか、最後にユノスの作品を全攻略したのがリドジョですが、こんなに内容量多かったっけ。これだけ遊べて1万円なら十分過ぎるほど優秀なコンテンツですね。課金とかいう資本主義設計がないし。店舗特典とかグッズは例外としてね。というか安すぎる気もする。大手で売り上げがある程度担保されているから吊り上げてないんですかね。分からんけど、安いわ。

好きな順としては、美玖さん、莉々子さん・那優花さん、隠さん、陽見さん・嶌越さん、この順番ですね。

美玖さんはビジュアルが最初から好きだったから揺るぎないのですが、予想外なのは莉々子さんですね。幼馴染って立ち回りを間違えるとなんかウザったい話の構成になるので、そこまで好かないのですが、めっちゃよかった。マジで好みの問題だけど、ビジュアルが刺さってたら堂々の一位ですわ。あ、十分に好きなビジュだけどね。美玖さんの次に。

全体的にいい意味で心に負担のない物語でした。

陽見さんルートが少しだけ怪しいくらいですね。

その他は極端な浮き沈みがなくて安牌です。

尖っていない丸くて優しいシナリオです。

んー、楽しかった。

挿入歌や曲に関しては好みの問題だから刺さるひとには刺さるんじゃないかな。

私はライブエディションよりも那優花さんが投稿しているような感じの曲をよく聴くのでそこまで刺さらなかったかな。ソロ音源は好きだったけど。

それにしても、ボリュームがやっぱ他の追随を許さないですね。

おそらく相応の資本がある、まどのセレオブですら文字数は約90万、約3万行。

セレオブはアフター未プレイなのでそこで若干不利ですが、だとしてもダブルスコア近い差です。

個人的には美玖さんと那優花さんぐらいコンパクトで早い展開の方が手軽に遊べるので好み。

色々と書いたけど楽しかった。

『感想』という単語を使うにはあまりにも好き勝手に書き過ぎですが、未来の私が記憶を掘り起こすための鍵みたいなものなので、そういう仕様だと思ってくださいな。

こんなものでも、数か月後に読み返すと『楽しかったんだなー』って思い返すものなのよ。

そう、エロゲは楽しいの。ふふん。