推 cjcat2266: 跟問題本身不知有無關聯,那個object space法向量應該 02/19 00:10
→ cjcat2266: 直接跟UNITY_MATRIX_IT_MV相乘就好,而不用事先從objec 02/19 00:10
→ cjcat2266: t space轉到world space?因為M矩陣本身就是object to 02/19 00:10
→ cjcat2266: world? 02/19 00:10
直接相乘也是沒有區別 剛剛測試含有blendshape的模型也會有相同的情況
→ oopFoo: d3d11, 用renderdoc來debug shader. 02/19 09:34
→ oopFoo: 不太了解你想做什麼?color.rgb是normal?color.a是?如果 02/19 09:35
→ oopFoo: 你能解釋一下流程,資料結構,會比較好。 02/19 09:36
一個點如果含有複數的normal會讓外推的模型裂開
因此我在maya將normal.xyz +1 * 0.5 之後寫入 vertexColor.rgb
vertexColor.a則是外推的程度
之後在shader將vertexColor.rgb * 2 - 1 逆推取代normal
這樣每個點都只會有一個外推的向量vertexColor.rgb而非複數的向量normal
追記 當一個點有複數權重的話就會發生問題 只有一個時不會
推 oopFoo: 我猜color.a的值跑掉了。還有你確定color.rgb在skin後沒變 02/19 14:13
→ oopFoo: +1*0.5然後*2-1還原,有什麼特殊原因嗎? 02/19 14:15
→ oopFoo: 還有一個可能是,skin後,obj的matrix改變影響到normal? 02/19 14:16
→ oopFoo: 我是覺得deferred shading的cel shading比較好控制。 02/19 14:18
我把color.a去除還是一樣
我有找到有人跟我有一樣的問題
https://reurl.cc/Qp0K25
不過我照他做沒成功QQ
→ oopFoo: 那就只有跑debugger,看看是哪個值出問題。 02/19 15:45
我剛剛試著把fixed2 offset = TransformViewToProjection(dir.xy);
改成fixed2 offset = TransformViewToProjection(dir.zx);
攝影機往-Z方向沒問題 +Z線就消失了
而非SkinMeshRender的模型就變成不正常了
推 oopFoo: 感覺就是skinmeshedrenderer怪怪的。谷歌一下好像還蠻多 02/19 19:08
→ oopFoo: 問題的。好像是conversion又好像是unity會duplicate vert 02/19 19:11
→ oopFoo: 的問題。 02/19 19:11
→ oopFoo: 也可能是你計算normal沒有考慮bone transform? 02/19 19:14
真的耶!! 因為我最上層的骨頭軸向跟世界座標不同
我在maya先骨頭轉成跟世界座標相同再進行點上色就成功了
好像是skinmeshedrenderer之後的點會以最上層的骨頭作為世界座標
感謝提點!
※ 編輯: snegi (106.104.165.79 臺灣), 02/20/2020 14:59:43