トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

全天周画像を貼り付ける球を複数おくときの描画の話【Unity】

Skybox/Cubemap

 ここでやったCubemapシェーダーをSphereに適用したやつを2つ使うときの話。

bibinbaleo.hatenablog.com

 このSphereを二つ置くと、描画順の関係で奥にあるものも前面に表示される。

f:id:bibinbaleo:20200916155519p:plain

中に入ると、外にある球が見えてしまう。

f:id:bibinbaleo:20200916155523p:plain

どうしたものか。まあ本当はSkyboxに使うものを無理やり球に使ってるからな。

VRChatとかでよく複数360度画像の球があるときあるけど、あれってどうやってるんだろう?

ちなみにSkybox/Cubemapのシェーダーはこちらに載っていた。

teratail.com

内側にしか法線のない球を使う

そもそも外側から画像が表示されなければいい。

ということで内側にしか法線のない球を使うとどうだろう?

こちらをお借りした。

特に変わらない。 外から内側が見える><

f:id:bibinbaleo:20200916160657p:plain

と思ったら、普通のシェーダー使ったらいい感じになった。

f:id:bibinbaleo:20200916161036p:plain

f:id:bibinbaleo:20200916161040p:plain

つまり内側に法線がある球ならCubemapのシェーダーを使わなくても内側に360度できれいに表示される!!

知らなかった><

Sphere+UniGLTF

UniGLTFというVRMのSDKを入れたらついてくるシェーダーを使うと、普通のUnityのSphereでも内側が表示される!

f:id:bibinbaleo:20200916162224p:plain

CullModeをオフにすると内側も表示される。内側も表示されているというか、外側の表示が内側からも見えるというか

ちゃんと外にある球も表示されない

f:id:bibinbaleo:20200916162539p:plain

左右逆問題

でも問題があって、UniGLTFも内側法線球も、写真が左右逆になってる

f:id:bibinbaleo:20200916163856p:plain

Skybox/Cubemapシェーダーで表示したやつが正しい↓

f:id:bibinbaleo:20200916163900p:plain

解決

こちらのシェーダーを使えば、内側描画で左右反転してくれる。同じ悩みだった

qiita.com

これでシェーダー作れば、UniGLTFも内側法線球も使わなくて良さそう。

f:id:bibinbaleo:20200918124402p:plain

球の種類

球にもメッシュの形がいろいろあるんだ

shinrinmusic.com

ICO球というメッシュの形がゆがまずにいいらしい。

catlikecoding.com

外側から完全に見えないシェーダー

内側に入らないと見えないシェーダーってないのかな?

外側からは見えないやつ。

Skybox/Cubemapはそのシェーダー同士だと手前に見えるけど、基本的にそれ以外の全てのオブジェクトの一番後ろに表示される。

最後に

Shaderでも球のメッシュでも、内側を描画さえできれば360度画像はきれいに表示されるんだ~

 

この記事書きなおそう

bibinbaleo.hatenab