■ [作業履歴][unity]Kinectキャプチャ(7)
DirectX11対応。シェーダーがそのままでは動かず、法線が出力されない問題は0からシェーダーを書き直して順に処理をコピーしたらなぜか動くようになった。o.Normalに出すとエラーになる問題は未解決
ソフトシャドウ。ちょっとずらしてたくさん光源を置いただけ。なぜか影レシーバのブレンドを乗算にするとSSAOがおかしくなるので床を不透明で描画
床をアルファブレンドで合成しようとすると、出力される法線が変になってる気配が。SSAOがおかしくなる。いろいろ設定を変えてみても治らず。
- 今回のハマりポイントのメモ
- シェーダーで使う命令数が増えるとラーが出るので「#pragma target 3.0」が必要になる。
- 「 Tags { "Queue" = "Geometry+10" "RenderType"="Opaque" }」みたいな表記で描画順が制御できる
- o.Normalに即値以外の値を入れようとしたら変なエラーが出る?未解決(法線に値が出てないのはシェーダーを書き直したらなぜか治った。それでもo.Normalはなにも入れずにデフォルトに任せたらいけた。原因不明)
- Cgでシェーダのプロパティにアクセスする
目のスペキュラーを追加、白目が常に明るくなるように、肌のシェーダー調整、髪のスペキュラーマップを一段ぼかして疑似HDR化をやめる、SSAOの調整、背景に影が落ちるように。目のスペキュラーは環境マップの抜き色対応のシェーダーを作るべき、あいかわらず影レシーバがおかしいのは解決せず
目だけは細かい違いでもかなり印象が変わりがち。人間の感覚って不思議。
元々の絵にスペキュラーの模様が描かれてるのでさらに追加で乗せると絵を描いたガラス玉みたいに見えて作り物っぽさが強調される印象も。どうするのがいいだろう?
アルファ抜きやSSAPの影響で白目が狭くなると昆虫っぽい雰囲気になって怖いので、後で専用シェーダーを作りたい
SSAOがおかしくなる件は、原因がわからないので半透明をあきらめて背景をいったんキャプチャして不透明扱いでシェーダー内で合成した方が速そうかも
- 資料
- Unity : Glass Shader ガラスっぽいシェーダーの実装
スクリーン座標系のUVの取り方。自前で計算しなくてもよかったんだ…
o.screenPos = ComputeScreenPos (o.pos);
half4 c = tex2D (_MainTex, IN.screenPos.xy/IN.screenPos.w);