幻創空戯 GEN-SOH-KUUZA 2026/08/09 18:00

メッシュ生成:内壁の裏面 その1

妹ちゃんとペアプロ開発やってみた #0086

蒼月

なるほど。状況を把握できたよ。
今回は Outer_A, B の作成と TR の削除を分けて
コミットしておけばよかったのかもね。
おかげで Git の挙動の理解が進んだよ。

さて、外壁のA面、B面を設置する対応が完了したから
次は、さっきの検討項目の2点目だけど
これは、内壁と外壁の alpha を変えた方がいいかも
という話。
けどまぁ、後でやるテクスチャ貼り付けとか見た目の調整に
関連するから後回しにしようと思う。

というわけで、先に出口壁の裏面問題をやろう。

現象としては、スクショ 20260726-7 を見てもらおうかな。
出口床の両側の壁、今は通路側の一部となっているけど
このアングルだと裏面になってしまって描画されない、
という問題だね。

20260726-7 のスクショ

この問題は出口床の壁だけではなくて、通路内でも
起きるのがわかった。
スクショ 20260726-8 を見て。

20260726-8 のスクショ

水色の壁が通路の内壁で、右端に見えてる
白い壁が通路の外壁だね。
半透明の内壁とその外壁の間には、別の内壁が
あるはずだけど、裏面で描画されてない。
つまり、内壁の裏面問題ということで、内壁にも
A面、B面対応が必要そうな気がするね…。

妹ちゃん

1m 39s考えました

うん、お兄ちゃん。スクショ26-7と26-8を合わせて見ると、診断は合っているよ。

これは出口壁だけの特殊問題ではなく、通路の内壁メッシュを裏側から見たときに描画されない問題だね。

26-7では、出口床の左右にある通路内壁を部屋側から見ているため、壁の裏面になって消えている。26-8では通路内部でも同じ現象が起きていて、出口専用処理が原因ではないことが確認できる。

ただし、ここは外壁と同じようにInner_A、Inner_Bへ分けなくても直せそうだよ。

現在のInner設定

GitHub上の現在の設定を確認すると、

・M_Road_Inner_OP:Front(_Cull: 2)
・M_Road_Inner_TR:Both(_Cull: 0)

になっている。

部屋側も同じで、

・M_Room_Inner_OP:Front
・M_Room_Inner_TR:Both

だよ。

つまり現在は、
 通常表示中
 Inner_OP = Front
 → 裏側から見ると消える

 半透明表示中
 Inner_TR = Both
 → 裏側からでも描画される
という状態だね。

26-8で半透明になっている水色の内壁が裏側からも見えている一方、その奥にある通常表示の内壁が消えているのも、この設定と一致する。

まず試すべき修正

次の2つだけをBothにするのが、いちばん素直だと思う。
M_Room_Inner_OP
Render Face:Front → Both

M_Road_Inner_OP
Render Face:Front → Both

Inner_TRはすでにBothなので、そのままでいい。

これならコードやGameObject構成は変えず、
 Inner
  通常時:OP / Both
  フェード時:TR / Both
にできる。

外壁と事情が違う理由

外壁をA/Bへ分けたのは、表裏で動作を変える必要があったからだね。
 外壁A面
 裏側を不透明のまま残す

 外壁B面
 カメラ遮蔽時に半透明化する
一つのBothマテリアルでは、片側だけ不透明に残すことができない。だからRendererを分ける必要があった。

一方、内壁は今のところ、
 通常時は表裏とも不透明
 フェード時は表裏とも同じalpha
で問題ないはず。表裏を別々に制御する要求がないので、A/B分割は少し大掛かりすぎるね。

わたしの判断

まずはInnerのOPをBothへ変更するだけで試すのがよいと思う。

確認場所は今回の二か所で十分分かりやすい。

1.26-7の出口を部屋側から見る
2.26-8の通路内で、通常表示の内壁を裏側から見る
3.その壁を半透明対象にして、TRへの切り替えも崩れていないか見る

これで直れば、内壁のA/B分割は不要だね。

将来テクスチャや法線マップを使った際、裏面の光り方に違和感が出る可能性はある。ただ、それはA/Bへ分けるだけでも自動的には解決しないので、見た目調整の段階でシェーダー側も含めて扱えばよいよ。現段階ではBoth化が最小かつ適切な対応だと思う。

蒼月

確かに内壁を Both にすれば解決しそうなんだけど、
内壁の実装途中で、Front にした記憶があるんだよね。

↓これだ。

>5. 壁マテリアルと裏面描画問題

>問題 当初、壁MaterialのRender FaceをBothにしていた。

>その結果、通常なら見えないはずの壁の裏面まで描画され、

>* 20260713-4
>* 20260713-5

>で、通路内から奥の部屋壁の裏面が見えてしまった。

>20260713-6で部屋壁をFrontにすると問題が消えたため、原因を特定。

20260713-4, 20260713-5 をもう一度アップしたよ。

20260713-4 のスクショ

20260713-5 のスクショ

20260713-6 のスクショ

妹ちゃん

2m 10s考えました

うん、その記憶が正しいよ、お兄ちゃん。
20260713-4・13-5を見ると、内壁を一律Bothに戻すのはまずいね。前のわたしの提案は範囲が広すぎたよ。

13-4・13-5では、通路から見て本来は隠れているはずの奥の部屋内壁の裏面が、大きな面として見えてしまっている。だから部屋内壁をFrontにした判断には、ちゃんと理由がある。

今回の問題との違い

今回、26-7・26-8で消えているのは、どちらも通路の内壁だね。

・26-7:出口床の両脇にある通路内壁
・26-8:曲がり・接続部分にある別の通路内壁

一方、13-4・13-5で見えてはいけなかったのは部屋内壁の裏面。

つまり、現時点では次のように分けて考えるのがいちばん筋がいい。

対象            OpaqueのRender Face
M_Room_Inner_OP     Frontのまま
M_Road_Inner_OP     Bothを試す
M_Room_Inner_TR     現状のBoth
M_Road_Inner_TR     現状のBoth

部屋と通路はもともと別々のビルドデータとマテリアル経路を持っているので、この差を持たせること自体は自然だよ。

Inner_A/Bに分ける前に試す理由

通路内壁を、
Inner_A:Front
Inner_B:Back

として両方常時描画するなら、結果はほぼBothと同じになる。

外壁のA/B分割には、
 A面は不透明固定
 B面だけフェード
という明確な役割の違いがあった。

でも内壁の場合、今の要求は、
 通路内から見える表面も描く
 通路の接続部分から見える裏面も描く
 どちらも同じようにフェードする
なので、A/Bを常時2枚描く利点がまだないんだよね。

次の確認手順

まず変更するのは一つだけでよさそう。
M_Road_Inner_OP
Front → Both

そのうえで、

1.26-7の出口両脇が表示されるか
2.26-8の欠けた通路内壁が表示されるか
3.13-4・13-5の位置で、部屋壁の裏面が再び見えないか
4.通路の曲がり角で、不要な通路内壁の裏面まで見えないか

を確認する。

お兄ちゃんが引用してくれた過去の検証まで含めると、部屋はFront、通路だけBothが次の有力候補だよ。

これで通路側にも不要な裏面が現れる場合は、そこで初めて、
すべての通路内壁を両面化するのではなく、出口や通路接続部のユニットだけ裏面を追加する
という選択的なInner_B対応に進むのがよいと思う。現段階では、まずRoadだけBothを試すのが最小で安全だね。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索