pbr.vertex.fx 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. precision highp float;
  2. // Attributes
  3. attribute vec3 position;
  4. #ifdef NORMAL
  5. attribute vec3 normal;
  6. #endif
  7. #ifdef UV1
  8. attribute vec2 uv;
  9. #endif
  10. #ifdef UV2
  11. attribute vec2 uv2;
  12. #endif
  13. #ifdef VERTEXCOLOR
  14. attribute vec4 color;
  15. #endif
  16. #ifdef BONES
  17. attribute vec4 matricesIndices;
  18. attribute vec4 matricesWeights;
  19. #endif
  20. // Uniforms
  21. #ifdef INSTANCES
  22. attribute vec4 world0;
  23. attribute vec4 world1;
  24. attribute vec4 world2;
  25. attribute vec4 world3;
  26. #else
  27. uniform mat4 world;
  28. #endif
  29. uniform mat4 view;
  30. uniform mat4 viewProjection;
  31. #ifdef DIFFUSE
  32. varying vec2 vDiffuseUV;
  33. uniform mat4 diffuseMatrix;
  34. uniform vec2 vDiffuseInfos;
  35. #endif
  36. #ifdef AMBIENT
  37. varying vec2 vAmbientUV;
  38. uniform mat4 ambientMatrix;
  39. uniform vec2 vAmbientInfos;
  40. #endif
  41. #ifdef OPACITY
  42. varying vec2 vOpacityUV;
  43. uniform mat4 opacityMatrix;
  44. uniform vec2 vOpacityInfos;
  45. #endif
  46. #ifdef EMISSIVE
  47. varying vec2 vEmissiveUV;
  48. uniform vec2 vEmissiveInfos;
  49. uniform mat4 emissiveMatrix;
  50. #endif
  51. #ifdef LIGHTMAP
  52. varying vec2 vLightmapUV;
  53. uniform vec2 vLightmapInfos;
  54. uniform mat4 lightmapMatrix;
  55. #endif
  56. #if defined(SPECULAR) && defined(SPECULARTERM)
  57. varying vec2 vSpecularUV;
  58. uniform vec2 vSpecularInfos;
  59. uniform mat4 specularMatrix;
  60. #endif
  61. #ifdef BUMP
  62. varying vec2 vBumpUV;
  63. uniform vec2 vBumpInfos;
  64. uniform mat4 bumpMatrix;
  65. #endif
  66. #ifdef BONES
  67. uniform mat4 mBones[BonesPerMesh];
  68. #endif
  69. #ifdef POINTSIZE
  70. uniform float pointSize;
  71. #endif
  72. // Output
  73. varying vec3 vPositionW;
  74. #ifdef NORMAL
  75. varying vec3 vNormalW;
  76. #endif
  77. #ifdef VERTEXCOLOR
  78. varying vec4 vColor;
  79. #endif
  80. #ifdef CLIPPLANE
  81. uniform vec4 vClipPlane;
  82. varying float fClipDistance;
  83. #endif
  84. #ifdef FOG
  85. varying float fFogDistance;
  86. #endif
  87. #ifdef SHADOWS
  88. #if defined(SPOTLIGHT0) || defined(DIRLIGHT0)
  89. uniform mat4 lightMatrix0;
  90. varying vec4 vPositionFromLight0;
  91. #endif
  92. #if defined(SPOTLIGHT1) || defined(DIRLIGHT1)
  93. uniform mat4 lightMatrix1;
  94. varying vec4 vPositionFromLight1;
  95. #endif
  96. #if defined(SPOTLIGHT2) || defined(DIRLIGHT2)
  97. uniform mat4 lightMatrix2;
  98. varying vec4 vPositionFromLight2;
  99. #endif
  100. #if defined(SPOTLIGHT3) || defined(DIRLIGHT3)
  101. uniform mat4 lightMatrix3;
  102. varying vec4 vPositionFromLight3;
  103. #endif
  104. #endif
  105. #ifdef REFLECTIONMAP_SKYBOX
  106. varying vec3 vPositionUVW;
  107. #endif
  108. #ifdef REFLECTIONMAP_EQUIRECTANGULAR
  109. varying vec3 vDirectionW;
  110. #endif
  111. void main(void) {
  112. mat4 finalWorld;
  113. #ifdef REFLECTIONMAP_SKYBOX
  114. vPositionUVW = position;
  115. #endif
  116. #ifdef INSTANCES
  117. finalWorld = mat4(world0, world1, world2, world3);
  118. #else
  119. finalWorld = world;
  120. #endif
  121. #ifdef BONES
  122. mat4 m0 = mBones[int(matricesIndices.x)] * matricesWeights.x;
  123. mat4 m1 = mBones[int(matricesIndices.y)] * matricesWeights.y;
  124. mat4 m2 = mBones[int(matricesIndices.z)] * matricesWeights.z;
  125. #ifdef BONES4
  126. mat4 m3 = mBones[int(matricesIndices.w)] * matricesWeights.w;
  127. finalWorld = finalWorld * (m0 + m1 + m2 + m3);
  128. #else
  129. finalWorld = finalWorld * (m0 + m1 + m2);
  130. #endif
  131. #endif
  132. gl_Position = viewProjection * finalWorld * vec4(position, 1.0);
  133. vec4 worldPos = finalWorld * vec4(position, 1.0);
  134. vPositionW = vec3(worldPos);
  135. #ifdef NORMAL
  136. vNormalW = normalize(vec3(finalWorld * vec4(normal, 0.0)));
  137. #endif
  138. #ifdef REFLECTIONMAP_EQUIRECTANGULAR
  139. vDirectionW = normalize(vec3(finalWorld * vec4(position, 0.0)));
  140. #endif
  141. // Texture coordinates
  142. #ifndef UV1
  143. vec2 uv = vec2(0., 0.);
  144. #endif
  145. #ifndef UV2
  146. vec2 uv2 = vec2(0., 0.);
  147. #endif
  148. #ifdef DIFFUSE
  149. if (vDiffuseInfos.x == 0.)
  150. {
  151. vDiffuseUV = vec2(diffuseMatrix * vec4(uv, 1.0, 0.0));
  152. }
  153. else
  154. {
  155. vDiffuseUV = vec2(diffuseMatrix * vec4(uv2, 1.0, 0.0));
  156. }
  157. #endif
  158. #ifdef AMBIENT
  159. if (vAmbientInfos.x == 0.)
  160. {
  161. vAmbientUV = vec2(ambientMatrix * vec4(uv, 1.0, 0.0));
  162. }
  163. else
  164. {
  165. vAmbientUV = vec2(ambientMatrix * vec4(uv2, 1.0, 0.0));
  166. }
  167. #endif
  168. #ifdef OPACITY
  169. if (vOpacityInfos.x == 0.)
  170. {
  171. vOpacityUV = vec2(opacityMatrix * vec4(uv, 1.0, 0.0));
  172. }
  173. else
  174. {
  175. vOpacityUV = vec2(opacityMatrix * vec4(uv2, 1.0, 0.0));
  176. }
  177. #endif
  178. #ifdef EMISSIVE
  179. if (vEmissiveInfos.x == 0.)
  180. {
  181. vEmissiveUV = vec2(emissiveMatrix * vec4(uv, 1.0, 0.0));
  182. }
  183. else
  184. {
  185. vEmissiveUV = vec2(emissiveMatrix * vec4(uv2, 1.0, 0.0));
  186. }
  187. #endif
  188. #ifdef LIGHTMAP
  189. if (vLightmapInfos.x == 0.)
  190. {
  191. vLightmapUV = vec2(lightmapMatrix * vec4(uv, 1.0, 0.0));
  192. }
  193. else
  194. {
  195. vLightmapUV = vec2(lightmapMatrix * vec4(uv2, 1.0, 0.0));
  196. }
  197. #endif
  198. #if defined(SPECULAR) && defined(SPECULARTERM)
  199. if (vSpecularInfos.x == 0.)
  200. {
  201. vSpecularUV = vec2(specularMatrix * vec4(uv, 1.0, 0.0));
  202. }
  203. else
  204. {
  205. vSpecularUV = vec2(specularMatrix * vec4(uv2, 1.0, 0.0));
  206. }
  207. #endif
  208. #ifdef BUMP
  209. if (vBumpInfos.x == 0.)
  210. {
  211. vBumpUV = vec2(bumpMatrix * vec4(uv, 1.0, 0.0));
  212. }
  213. else
  214. {
  215. vBumpUV = vec2(bumpMatrix * vec4(uv2, 1.0, 0.0));
  216. }
  217. #endif
  218. // Clip plane
  219. #ifdef CLIPPLANE
  220. fClipDistance = dot(worldPos, vClipPlane);
  221. #endif
  222. // Fog
  223. #ifdef FOG
  224. fFogDistance = (view * worldPos).z;
  225. #endif
  226. // Shadows
  227. #ifdef SHADOWS
  228. #if defined(SPOTLIGHT0) || defined(DIRLIGHT0)
  229. vPositionFromLight0 = lightMatrix0 * worldPos;
  230. #endif
  231. #if defined(SPOTLIGHT1) || defined(DIRLIGHT1)
  232. vPositionFromLight1 = lightMatrix1 * worldPos;
  233. #endif
  234. #if defined(SPOTLIGHT2) || defined(DIRLIGHT2)
  235. vPositionFromLight2 = lightMatrix2 * worldPos;
  236. #endif
  237. #if defined(SPOTLIGHT3) || defined(DIRLIGHT3)
  238. vPositionFromLight3 = lightMatrix3 * worldPos;
  239. #endif
  240. #endif
  241. // Vertex color
  242. #ifdef VERTEXCOLOR
  243. vColor = color;
  244. #endif
  245. // Point size
  246. #ifdef POINTSIZE
  247. gl_PointSize = pointSize;
  248. #endif
  249. }