iMackshun

skinnedmodelshader.v.pica

Jan 16th, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. ; Skinned Model Shader
  2.  
  3. ; Constants
  4.  
  5. .constf zeros(0, 0, 0, 0)
  6. .constf ones(1, 1, 1, 1)
  7.  
  8. ; Inputs
  9.  
  10. .alias inpos v0
  11. .alias innrm v1
  12. .alias inclr v2
  13. .alias inuv v3
  14. .alias inbid v4
  15. .alias inbwt v5
  16.  
  17. ; Outputs
  18.  
  19. .out outpos position
  20. .out outclr color
  21. .out outuv texcoord0
  22.  
  23. ; Uniforms
  24.  
  25. .fvec projectionMatrix[4]
  26. .fvec viewMatrix[4]
  27. .fvec modelMatrix[4]
  28. .fvec boneMatrices[64]
  29.  
  30. ; Main Function
  31. .proc main
  32.  
  33. ; Calculate the first transformed position.
  34. mova a0.x, inbwt.x
  35. dp4 r0.x, boneMatrices[a0.x], inpos
  36. dp4 r0.y, boneMatrices[a0.x + 1], inpos
  37. dp4 r0.z, boneMatrices[a0.x + 2], inpos
  38. dp4 r0.w, boneMatrices[a0.x + 3], inpos
  39.  
  40. ; Calculate the second transformed position.
  41. mova a0.x, inbwt.y
  42. dp4 r1.x, boneMatrices[a0.x], inpos
  43. dp4 r1.y, boneMatrices[a0.x + 1], inpos
  44. dp4 r1.z, boneMatrices[a0.x + 2], inpos
  45. dp4 r1.w, boneMatrices[a0.x + 3], inpos
  46.  
  47. ; Calculate the third transformed position.
  48. mova a0.x, inbwt.z
  49. dp4 r2.x, boneMatrices[a0.x], inpos
  50. dp4 r2.y, boneMatrices[a0.x + 1], inpos
  51. dp4 r2.z, boneMatrices[a0.x + 2], inpos
  52. dp4 r2.w, boneMatrices[a0.x + 3], inpos
  53.  
  54. ; Multiply each register by the corresponding weight.
  55. mul r0, r0, inbwt.xxxx
  56. mul r1, r1, inbwt.yyyy
  57. mul r2, r2, inbwt.zzzz
  58.  
  59. ; Add the transformed positions together to get the final model-space position of the vertex.
  60. add r3, zeros, r0
  61. add r3, r3, r1
  62. add r3, r3, r2
  63.  
  64. ; modelMatrix * inpos
  65. dp4 r4.x, modelMatrix[0], r3
  66. dp4 r4.y, modelMatrix[1], r3
  67. dp4 r4.z, modelMatrix[2], r3
  68. dp4 r4.w, modelMatrix[3], r3
  69.  
  70. ; viewMatrix * modelMatrix * inpos
  71. dp4 r5.x, viewMatrix[0], r4
  72. dp4 r5.y, viewMatrix[1], r4
  73. dp4 r5.z, viewMatrix[2], r4
  74. dp4 r5.w, viewMatrix[3], r4
  75.  
  76. ; projectionMatrix * viewMatrix * modelMatrix * inpos
  77. dp4 outpos.x, projectionMatrix[0], r5
  78. dp4 outpos.y, projectionMatrix[1], r5
  79. dp4 outpos.z, projectionMatrix[2], r5
  80. dp4 outpos.w, projectionMatrix[3], r5
  81.  
  82. ; outclr = inclr
  83. mov outclr, inclr
  84.  
  85. ; outuv = inuv
  86. mov outuv, inuv
  87.  
  88. ; Function termination
  89. end
  90. .end
Advertisement
Add Comment
Please, Sign In to add comment