MsGeneric.ankiprog 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <!--
  2. Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
  3. All rights reserved.
  4. Code licensed under the BSD License.
  5. http://www.anki3d.org/LICENSE
  6. -->
  7. <shaderProgram>
  8. <mutators>
  9. <mutator name="INSTANCE_COUNT" values="1 2 4 8 16 32 64" instanced="1"/>
  10. <mutator name="LOD" values="0 1 2"/>
  11. <mutator name="PASS" values="0 1"/>
  12. <mutator name="DIFFUSE_TEX" values="0 1"/>
  13. <mutator name="SPECULAR_TEX" values="0 1"/>
  14. <mutator name="ROUGHNESS_TEX" values="0 1"/>
  15. <mutator name="METAL_TEX" values="0 1"/>
  16. <mutator name="NORMAL_TEX" values="0 1"/>
  17. <mutator name="PARALLAX" values="0 1"/>
  18. <mutator name="EMISSIVE_TEX" values="0 1"/>
  19. </mutators>
  20. <shaders>
  21. <shader type="vert">
  22. <inputs>
  23. <input name="mvp" type="mat4" instanced="1"/>
  24. <input name="normalMat" type="mat3" instanced="1">
  25. <mutators>
  26. <mutator name="PASS" values="0"/>
  27. </mutators>
  28. </input>
  29. <input name="modelViewMat" type="mat4" instanced="1">
  30. <mutators>
  31. <mutator name="PASS" values="0"/>
  32. <mutator name="PARALLAX" values="1"/>
  33. </mutators>
  34. </input>
  35. </inputs>
  36. <source><![CDATA[#include "shaders/MsCommonVert.glsl"
  37. void main()
  38. {
  39. #if PASS == 0
  40. positionUvNormalTangent(mvp, normalMat);
  41. #if PARALLAX
  42. parallax(modelViewMat);
  43. #endif
  44. #else
  45. ANKI_WRITE_POSITION(mvp * vec4(in_position, 1.0));
  46. #endif
  47. }
  48. ]]>
  49. </source>
  50. </shader>
  51. <shader type="frag">
  52. <inputs>
  53. <!-- Consts -->
  54. <input name="diffColor" type="vec3" const="1">
  55. <mutators>
  56. <mutator name="DIFFUSE_TEX" values="0"/>
  57. <mutator name="PASS" values="0"/>
  58. </mutators>
  59. </input>
  60. <input name="specColor" type="vec3" const="1">
  61. <mutators>
  62. <mutator name="SPECULAR_TEX" values="0"/>
  63. <mutator name="PASS" values="0"/>
  64. </mutators>
  65. </input>
  66. <input name="roughness" type="float" const="1">
  67. <mutators>
  68. <mutator name="ROUGHNESS_TEX" values="0"/>
  69. <mutator name="PASS" values="0"/>
  70. </mutators>
  71. </input>
  72. <input name="metallic" type="float" const="1">
  73. <mutators>
  74. <mutator name="METAL_TEX" values="0"/>
  75. <mutator name="PASS" values="0"/>
  76. </mutators>
  77. </input>
  78. <input name="emission" type="vec3" const="1">
  79. <mutators>
  80. <mutator name="EMISSIVE_TEX" values="0"/>
  81. <mutator name="PASS" values="0"/>
  82. </mutators>
  83. </input>
  84. <input name="heightMapScale" type="float" const="1">
  85. <mutators>
  86. <mutator name="PARALLAX" values="1"/>
  87. <mutator name="PASS" values="0"/>
  88. <mutator name="LOD" values="0"/>
  89. </mutators>
  90. </input>
  91. <input name="subsurface" type="float" const="1">
  92. <mutators>
  93. <mutator name="PASS" values="0"/>
  94. </mutators>
  95. </input>
  96. <!-- Textures -->
  97. <input name="diffTex" type="sampler2D">
  98. <mutators>
  99. <mutator name="DIFFUSE_TEX" values="1"/>
  100. <mutator name="PASS" values="0"/>
  101. </mutators>
  102. </input>
  103. <input name="specTex" type="sampler2D">
  104. <mutators>
  105. <mutator name="SPECULAR_TEX" values="1"/>
  106. <mutator name="PASS" values="0"/>
  107. </mutators>
  108. </input>
  109. <input name="roughnessTex" type="sampler2D">
  110. <mutators>
  111. <mutator name="ROUGHNESS_TEX" values="1"/>
  112. <mutator name="PASS" values="0"/>
  113. </mutators>
  114. </input>
  115. <input name="metalTex" type="sampler2D">
  116. <mutators>
  117. <mutator name="METAL_TEX" values="1"/>
  118. <mutator name="PASS" values="0"/>
  119. </mutators>
  120. </input>
  121. <input name="normalTex" type="sampler2D">
  122. <mutators>
  123. <mutator name="NORMAL_TEX" values="1"/>
  124. <mutator name="PASS" values="0"/>
  125. <mutator name="LOD" values="0 1"/>
  126. </mutators>
  127. </input>
  128. <input name="heightTex" type="sampler2D">
  129. <mutators>
  130. <mutator name="PARALLAX" values="1"/>
  131. <mutator name="PASS" values="0"/>
  132. <mutator name="LOD" values="0"/>
  133. </mutators>
  134. </input>
  135. <input name="emissiveTex" type="sampler2D">
  136. <mutators>
  137. <mutator name="EMISSIVE_TEX" values="1"/>
  138. <mutator name="PASS" values="0"/>
  139. </mutators>
  140. </input>
  141. </inputs>
  142. <source><![CDATA[#include "shaders/MsCommonFrag.glsl"
  143. void main()
  144. {
  145. #if PASS == 0
  146. #if heightTex_DEFINED
  147. vec2 uv = computeTextureCoordParallax(heightTex, in_uv, heightMapScale);
  148. #else
  149. vec2 uv = in_uv;
  150. #endif
  151. #if diffTex_DEFINED
  152. vec3 diffColor = texture(diffTex, uv).rgb;
  153. #endif
  154. #if specTex_DEFINED
  155. vec3 specColor = texture(specTex, uv).rgb;
  156. #endif
  157. #if roughnessTex_DEFINED
  158. float roughness = texture(roughnessTex, uv).r;
  159. #endif
  160. #if metalTex_DEFINED
  161. float metallic = texture(metalTex, uv).r;
  162. #endif
  163. #if normalTex_DEFINED
  164. vec3 normal = readNormalFromTexture(normalTex, uv);
  165. #else
  166. vec3 normal = normalize(in_normal);
  167. #endif
  168. #if emissiveTex_DEFINED
  169. vec3 emission = texture(emissiveTex, uv).rgb;
  170. #endif
  171. writeRts(diffColor, normal, specColor, roughness, subsurface, emission, metallic);
  172. #endif
  173. }
  174. ]]></source>
  175. </shader>
  176. </shaders>
  177. </shaderProgram>