続・透け透けの呪いじゃよ

Kiji-Lab

*2015/12/11 追記です。
透過ヘア派のかたに朗報です。12/04のGet Togetherの事前パッチで一部、透過部分の描画が改善されました。
透明プラムボムが形状、仕様等々が変更され奥に重なったSimGlassシェーダーオブジェクトを描画してくれるようになりました。禿げません!
また、水面に映ったシムの同シェーダーオブジェクトも描画されるようになりました。禿げません!!
でも水中は相変わらず禿げます・・・
**追記ここまでっ

こちらの記事の続きです。
透け透けの呪いじゃよ

先の記事で”SimGlass”シェーダーがどうも他の半透明の物と相性が悪いことを書きました。
そもそも、ゲーム上で半透明を表示するっていうのが結構ややこしいらしいんです。
まず、お断りしておきますが、ワタクシはプログラマーでもないのでこっから先ポンコツのテキトウな解釈や推量がはさまってますので、話半分にお付き合い下さい。

大抵の場合において画面の描画は、ある点(カメラ)から見てフレーム内に収まっているものの距離を収めておいて(深度バッファとかZバッファってやつです)その値を元に、手前にある物だけ描画して奥に隠れてしまう物は描かない、という事をして描画するピクセルを節約してるんだそうです。
リアルタイムにレンダリングしなければならないゲームなんかの場合、こうして負荷を減らすのが一般的な方法のようです。シムズにおいても恐らく例外ではないでしょう。

毛の前後がメタクソな悲しい思い出・・・

毛の前後がメタクソな悲しい思い出・・・

この負荷軽減の一策なのか、どうも”SimGlass”シェーダーは深度情報とは無関係に描画されているんじゃないかと・・・
前に透過ヘアーをテストしてみたときにカメラから見た前後が無視されているーーとぼやいていたあの件です。
半透明を半透明として描画するには、まず後ろにある物を描画してから半透明の重なりをブレンドして描画しなければなりません。
なにをもって前後かというのを見た目に矛盾無くやってくれてるのが、前述の深度バッファ(Zバッファ)です。
ですが、Zバッファは半透明かどうかに関係なく前後をみていますから、半透明の物が手前として先に描かれてしまうと、奥のブレンドされるはずの物が描画されず、ぽっかり欠けてしまいます。Zバッファだけでなく別の前後関係のルールを用いて描画すれば解決するそうですが、まぁとにかく半透明はややこしい・・・と。特に半透明同士となると、どうやって矛盾無く描画してるのかなんてもう理解不能です。
少なくとも他の不透明オブジェクトと”SimGlass”との前後はきちんと深度情報に基づいてブレンドされているように見えます。
ただ、”SimGlass”内のポリゴンや、同シェーダーを持つオブジェクト同士だと、前後がメタクソになります。まぁメタクソ、というか頂点のソートされた順にひたすら描画しているんだと思います。
余談ですが、透過ヘアーを作る際にこの前後メタクソ問題は避けて通れず、本来ならZバッファにやってもらいたい前後のソートを手動でやらないといけません。ですが、カメラはゲーム内で動き回りますから、前後がひっくり返る事なんてざらにある訳です。この前後ひっくり返りをなるべく見えないような髪型にする事でごまかす事は可能ですが、今度は髪型が制限されそうです。拙宅の髪型が透過ヘアーにしにくいのはハネッ毛が多いのでその前後ひっくり返りが起きまくりだからです。・・・えぇ言い訳ですとも。

奥のシムの髪は奥に、手前は手前に。当たり前の事ですが、実はありがたい事だったり。

奥のシムの髪は奥に、手前は手前に。当たり前の事ですが、実はありがたい事だったり。

ところで、”SimGlass”シェーダー同士だと前後メタクソ、なはずですが透過ヘアーのシム同士を見てみるとちゃんと髪も前後関係の破綻なく表示されています。
どうやら、前後関係に関してはシムの位置でもソートされているようです。

ためしに仲良くハグ中のシムを別角度から眺めてみました。

髪が突き抜けてしまいました。この下で頭蓋がどうかなってるんじゃないかと心配になりますな。

髪が突き抜けてしまいました。この下で頭蓋がどうかなってるんじゃないかと心配になりますな。

ある角度になると、シムの前後が反転したのか、髪が手前のシムにめり込みました。
丸く欠けているのは手前のシムの頭の輪郭でしょう。頭部は”SimSkin”シェーダーなので、ちゃんと深度が破綻無く描かれています。

やはり、前後が上手くいきません。
半透明同士をきちんと描画するには奥の物から順に描いてほしい所ですが、では”SimGlass”以外の半透明同士ならどうなのか?と言うと、

シャワーのガラスは”SimGlass”にも優しい・・・

シャワーのガラスは”SimGlass”にも優しい・・・

シャワーとかに使われている半透明は、”SimGlass”もきちんとブレンドされます。しかもオブジェクトは半透明部分にエフェクトが乗ってもきちんと前後が破綻なく描画されています。
じゃあ、と思って試しにオブジェクトに使われてる”Phong Alpha”(だったけか?すいませんオブ関連疎いです)を髪に使ってみたんですが、案の定表示はされませんでした。やっぱCASパーツ用に用意されたシェーダーじゃないとダメみたいです。

どぼーーん。実は他にも色々な物をプールに沈めて遊んでました。

どぼーーん。実は他にも色々な物をプールに沈めて遊んでました。

ちなみに、透過ヘアーを引っぺがす水面との相性は?と思ってシャワーをプールに沈めてみました。
ガラスが消えてますね。

なんか色々試してみましたが、この半透明の描画に関して、開発側の設計は別に問題ないと思うんです。シムのメガネのレンズが交差するような場面はほとんどないでしょうし、シャワーをプールに沈めて遊んでも意味がないですから。

半透明はその処理のややこしさのせいで負荷が高くなるので、色々負荷軽減のため、はしょられている部分もあるのでしょう。
ちなみに他に負荷の高いものとしては影なんかも重いんだそうです。
頂点数などは今時のスペックのPCで動くゲームなら、よほど間違った事をしなければ、ジオメトリの演算はそれほどの負荷ではないそうです。(なんかポリゴン数盛り盛りな拙宅の髪型の言い訳してるみたいですが・・・)
確かに実際プレイして、あ、フレームレートが落ちた・・・と感じる場面って、シムが大勢いる所よりも、オブジェクトが多く照明を多用している所な気がします。
また、シムズ4ではアンビエントオクルージョンを使用しているんだそうで(とSims Vipの記事にありましたよ)より影も自然にみえるように考慮されてるんだとか。
その他、ノーマルマップ、スペキュラー+キューブマップの効果もより実感できるようになっていると思います。
そんなグラフィック向上と負荷軽減の狭間で切り捨てられた(?)CASパーツの半透明なので、もしイレギュラーにシェーダーを変更した場合、上手く表示されないこともあると思います。そのときにはポンコツのこの記事が何かしら手がかりになれば幸い、と思ったりしてます。

無駄に長い・・・ 最後まで読んで下さった方には、何かしらお礼を差し上げたいくらいです。

Comments

  1. Lugosi says:

    こんにちわ、はじめまして。
    Kijikoさんの髪型を何キャラかで使用させて頂いております。

    記事とても参考になりました、3の時から透明の処理はどのゲームでも
    非常に重くて、どの程度重いかFPSで計測した所、透明の所は数値が
    大幅に増えてました。だからこの辺は、しょうがないですね。

    創っている身としては、そう言う細かい部分が凄く気になるんだと
    思いますが、人様の物を使わせて頂いている身としては、余り気にならない
    と言うか・・・見ている時間が長い部分が綺麗になってると、良いと
    思うのかもしれませんね(すいません、巧く言えません)。

    Kijikoさんの髪は通過も通過じゃない方も使わせて頂いてますが、私的には
    HAGEても良いので軽い通過は好み、だったりします。

    色々書きたい事はあるのですが、長くなりそうなので今回はこの辺で。
    また伺いたいと思います、丁寧な解説ありがとうございました。

  2. Avatar photo Kijiko says:

    はじめまして!髪型使って下さってありがとうございます!

    いやー、実はこれを書こうかどうか悩んだんですよ。コイツ透過ヘアにダメ出ししてやがるっ・・・って誤解されたらどうしようかと(汗)
    ぐだぐだといっぱい書きましたが、実は自分が透過ヘアに手を出し渋ってる言い訳だったりします (;´Д`A
    なんかいろいろ上手くはいかないなー・・・と。
    むしろ、あまり気にならないと言ってくださると、安心して透過ヘアを配布できますw
    なにをもって綺麗かというのも、人それぞれホントに好みの問題だと思います。好きな物を選んで入れるのがMODの楽しい所!と思っております。

    実は、ここに書ききれなかったんですが、この透過用のシェーダーだと4で強化されたポストエフェクトやらスペキュラーやらの効果の恩恵があまり受けられなくて、個人的には髪の透過にこだわるのは勿体ないなーと感じていました。もちろん、透過できるっていうのは最大のアドバンテージだとも思います。
    なにかとちょっと癖の強い4の仕様ですが、どちらかにこだわってしまうのが一番勿体ないな、と思うのでこれからも欲張ってどっちも手を出していこうと思ってますw
    また、お待ちしてます!

    • Lugosi says:

      > コイツ透過ヘアにダメ出ししてやがるっ・・・って誤解されたらどうしようかと(汗)

      いやそんな風には自分は受け取りませんでしたよ。
      色々と細かい部分を見てらっしゃるんだなって逆に思いました。
      どこの奴だったか忘れちゃいましたが、区画に遊びに来ている間は正常に
      MESHが表示されるけど、区画を離れてジョギングできる所に行くと
      ズラが上下にカクカク落ちる奴があって(汗)、流石にそこまで行くと気に
      なりましたが、まぁそれでも使ってたし大半の人は気にしてないのかも。

      ただMODを大量に入れるのが嫌な方もいらっしゃるので、デフォルトと
      馴染みやすい通過なしのKijikoさんの髪を愛用する人もいると思いますよ。

      私は髪はこんなに綺麗に作れないので、やっぱり配布して下さる方がいる
      のは有り難いですけどね^-^。でわでわ。

      • Avatar photo Kijiko says:

        うぅっ。゚(゚´Д`゚)゜。 ありがとうございます!励みになります!

  3. めろーね says:

    透過ヘアーそんなに人気なんでしょうかね~
    どうも こんばんは(*´∀`*)めろーねです
    海外だとなんか知らないですが透過ヘア多いですね
    自分はサングラスなどのアクセサリーを頭に乗せるために改造をしているんですが
    この透過のせいでレンズがまるごとなくなるので透過じゃない方が好きです
    重なった部分だけ消えるので違和感がすごいし
    頭に乗せたらフレームだけになっちゃうし お手上げ状態でした(^_^;)
    最終的にレンズを不透明にするしかなかったり
    CC作り無駄に時間だけが過ぎることも多いでしょうが根を詰めずに頑張ってください✩
    新しい髪もいただきました(*´∀`*)
    キャラへの愛着が髪のおかげで100万倍に増えるんですよね~

    駄文失礼いたしました。

    • Avatar photo Kijiko says:

      こんばんはー!
      そうですねー、海外の3からの髪職人の方々はやはり透過ヘアメインでやっておられるような気がします。作風を変える事無く作れるのも(作る側にも)人気なところなのだと思います。

      >頭に乗せたらフレームだけになっちゃうし お手上げ状態でした(^_^;)
      最終的にレンズを不透明にするしかなかったり

      やはりSimGlassシェーダー同士はどうにも前後関係が上手くいかないですよね。むしろレンズの方を不透明に、というのはいいアイデアですね!
      サングラスだとあまり気にならないと思いますし。

      髪型お持ち帰り、ありがとうございます!
      またよろしくお願いします!!