[請益] Unity Skin影響了VertexColor!?

看板GameDesign作者 (  ̄灬 ̄)時間4年前 (2020/02/18 21:46), 4年前編輯推噓4(4013)
留言17則, 2人參與, 4年前最新討論串1/1
我的shader是向外擠出輪廓線 但為了避免非相同法線所形成的Gaps 我將法線資訊另存在VertexColor上 shader如下 v2f vert(appdata v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); //fixed3 dir = normalize(v.normal); fixed3 dir = UnityObjectToWorldNormal((v.color.rgb * 2.0) - 1.0); dir = mul((fixed3x3)UNITY_MATRIX_IT_MV, dir); fixed2 offset = TransformViewToProjection(dir.xy); offset = normalize(offset); o.pos.xy += offset * v.color.a * _LineWidth; return o; } 直到模型綁上skin後出現了奇怪的現象 邊線往預想外的方向偏移 左邊skin後 右邊skin前 https://i.imgur.com/libCqfs.png
我把fbx丟回maya也沒發現VertexColor的變動 到底發生什麼事了QQ -- ╭───╮ ◢██◣李組長眉頭一皺, \ ㄟˇㄏ / ㄧ..ㄧ + 覺得案情並不單純。 /︷\ $snegi ▅▅▆ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.52.190.211 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1582033597.A.A7E.html

02/19 00:10, 4年前 , 1F
跟問題本身不知有無關聯,那個object space法向量應該
02/19 00:10, 1F

02/19 00:10, 4年前 , 2F
直接跟UNITY_MATRIX_IT_MV相乘就好,而不用事先從objec
02/19 00:10, 2F

02/19 00:10, 4年前 , 3F
t space轉到world space?因為M矩陣本身就是object to
02/19 00:10, 3F

02/19 00:10, 4年前 , 4F
world?
02/19 00:10, 4F
直接相乘也是沒有區別 剛剛測試含有blendshape的模型也會有相同的情況

02/19 09:33, 4年前 , 5F
02/19 09:33, 5F

02/19 09:34, 4年前 , 6F
d3d11, 用renderdoc來debug shader.
02/19 09:34, 6F

02/19 09:35, 4年前 , 7F
不太了解你想做什麼?color.rgb是normal?color.a是?如果
02/19 09:35, 7F

02/19 09:36, 4年前 , 8F
你能解釋一下流程,資料結構,會比較好。
02/19 09:36, 8F
一個點如果含有複數的normal會讓外推的模型裂開 因此我在maya將normal.xyz +1 * 0.5 之後寫入 vertexColor.rgb vertexColor.a則是外推的程度 之後在shader將vertexColor.rgb * 2 - 1 逆推取代normal 這樣每個點都只會有一個外推的向量vertexColor.rgb而非複數的向量normal 追記 當一個點有複數權重的話就會發生問題 只有一個時不會

02/19 14:13, 4年前 , 9F
我猜color.a的值跑掉了。還有你確定color.rgb在skin後沒變
02/19 14:13, 9F

02/19 14:15, 4年前 , 10F
+1*0.5然後*2-1還原,有什麼特殊原因嗎?
02/19 14:15, 10F

02/19 14:16, 4年前 , 11F
還有一個可能是,skin後,obj的matrix改變影響到normal?
02/19 14:16, 11F

02/19 14:18, 4年前 , 12F
我是覺得deferred shading的cel shading比較好控制。
02/19 14:18, 12F
我把color.a去除還是一樣 我有找到有人跟我有一樣的問題 https://reurl.cc/Qp0K25 不過我照他做沒成功QQ

02/19 15:45, 4年前 , 13F
那就只有跑debugger,看看是哪個值出問題。
02/19 15:45, 13F
我剛剛試著把fixed2 offset = TransformViewToProjection(dir.xy); 改成fixed2 offset = TransformViewToProjection(dir.zx); 攝影機往-Z方向沒問題 +Z線就消失了 而非SkinMeshRender的模型就變成不正常了

02/19 19:08, 4年前 , 14F
感覺就是skinmeshedrenderer怪怪的。谷歌一下好像還蠻多
02/19 19:08, 14F

02/19 19:11, 4年前 , 15F
問題的。好像是conversion又好像是unity會duplicate vert
02/19 19:11, 15F

02/19 19:11, 4年前 , 16F
的問題。
02/19 19:11, 16F

02/19 19:14, 4年前 , 17F
也可能是你計算normal沒有考慮bone transform?
02/19 19:14, 17F
真的耶!! 因為我最上層的骨頭軸向跟世界座標不同 我在maya先骨頭轉成跟世界座標相同再進行點上色就成功了 好像是skinmeshedrenderer之後的點會以最上層的骨頭作為世界座標 感謝提點! ※ 編輯: snegi (106.104.165.79 臺灣), 02/20/2020 14:59:43
文章代碼(AID): #1UI-gzf- (GameDesign)