半休業状態
未だコロナ禍の脅威が収まらない為、全都道府県で外出自粛せざるを得ない日々が続いております。私の会社でも多分に漏れず、出勤率の低減を実現するために2,3日単位の交代勤務体制となりました。そのため、週の半分ぐらい自宅に閉じこもっているのですが、そんな中、朝昼のテレビ番組を拝見すると、殆ど毎日同じ顔触れが同じ話題を同じように話しているので、だったらマスコミも交代で休止すればいいのに、と思っている皆さんこんにちは。あんなの毎日楽しみにしている人っているのだろうか?
自宅待機中に
プロジェクトのセキュリティ上、自宅でのテレワークができないので自宅待機中は完全な休みとなっています。
よって自宅で暇を持て余してしまい、以前ブログの記事の為にちょっとだけ作っていたものをアレコレ改造していました。
上の記事の中でRigidbodyを使った公転運動に挑戦し、ボールが螺旋階段を登るような処理を作っていたのですが、それをちょっと改良して・・・
キャラクターがぴょんぴょん跳ねて登るようにしました。
画面をクリックすると力を蓄えて高く遠くへジャンプします。
ここから色々加えてゲーム化出来そうかなー、と思っているのですが、試作段階なので画面がちょっと味気ないです。
なので手始めにキャラクタ-の影を地面に表示してみることにしました。
影を表示する
Unityで3Dモデルに影を投影するには二段階の手順が必要です。
まず、影を落とす側のMeshRendererの設定で「Cast Shadows」の設定をONにします。
次に影が投影される側のMeshRendererの設定で「Receive Shadows」の設定をONにします。
これでキャラクタ-の影が地面に投影されることになります。
早速動かしてみると・・・
・・・お気づきいただけだろうか・・・
透過する影
キャラクターが移動している地面は螺旋階段状になっているのですが、キャラクターの落とした影が二段目の地面と、一段目の地面で二重に投影されています。
どうやらUnityではCastShadowで作られた影はその投影範囲にあるReceiveShadowsが設定されたMesh(3Dモデル)に全て投影されるらしい。
つまりキャラクターと地面の間に他のMeshがあってもその影響は考慮されていない。
なので、地面側もキャラクターと同様に影を落とすよう、「Cast Shadows」をONに設定する必要があると言う事で・・・
上の動画は地面側にも「Cast Shadows」を設定したパターンです。
不自然な影は消えましたが、今度は影ばっかりで画面が暗い、加えてキャラクターのエミッション設定でこっちが不自然に見えるという結果に・・・ん~、一体どうしたものか・・・