color_id.glslf 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. #version GLSL_VERSION
  2. /*==============================================================================
  3. VARS
  4. ==============================================================================*/
  5. #var PRECISION highp
  6. #var NODES 0
  7. #var USE_TBN_SHADING 0
  8. #var ALPHA 0
  9. #var ALPHA_CLIP 0
  10. #var TEXTURE_COLOR 0
  11. #var SHADOW_USAGE NO_SHADOWS
  12. #var USE_OUTLINE 0
  13. #var USE_VIEW_TSR 0
  14. #var USE_VIEW_TSR_INVERSE 0
  15. #var USE_MODEL_TSR 0
  16. #var USE_MODEL_TSR_INVERSE 0
  17. #var CALC_TBN_SPACE 0
  18. #var CAMERA_TYPE CAM_TYPE_PERSP
  19. #var USE_POSITION_CLIP 0
  20. #var USE_REFRACTION 0
  21. #var USE_REFRACTION_CORRECTION 0
  22. #var USE_ENVIRONMENT_LIGHT 0
  23. #var TEXTURE_BLEND_TYPE TEXTURE_BLEND_TYPE_MIX
  24. #var NUM_LIGHTS 0
  25. #var NUM_LAMP_LIGHTS 0
  26. #var SKY_TEXTURE 0
  27. #var SKY_COLOR 0
  28. #var NUM_VALUES 0
  29. #var NUM_RGBS 0
  30. #var REFLECTION_TYPE REFL_NONE
  31. #var POISSON_DISK_NUM NO_SOFT_SHADOWS
  32. #var USE_DERIVATIVES_EXT 0
  33. # if USE_DERIVATIVES_EXT
  34. #extension GL_OES_standard_derivatives: enable
  35. # endif
  36. /*==============================================================================
  37. INCLUDES
  38. ==============================================================================*/
  39. #include <precision_statement.glslf>
  40. #include <std.glsl>
  41. #if NODES && ALPHA
  42. #include <math.glslv>
  43. #endif
  44. /*==============================================================================
  45. GLOBAL UNIFORMS
  46. ==============================================================================*/
  47. #if NODES && ALPHA
  48. uniform float u_time;
  49. uniform float u_environment_energy;
  50. # if NUM_LIGHTS > 0
  51. // light_factors packed in the w componnets
  52. uniform vec4 u_light_positions[NUM_LIGHTS];
  53. uniform vec3 u_light_directions[NUM_LIGHTS];
  54. uniform vec4 u_light_color_intensities[NUM_LIGHTS];
  55. # endif
  56. uniform vec3 u_camera_eye_frag;
  57. #if (USE_NODE_FRESNEL || USE_NODE_LAYER_WEIGHT) && CAMERA_TYPE == CAM_TYPE_ORTHO
  58. uniform vec3 u_camera_direction;
  59. #endif
  60. # if REFLECTION_TYPE == REFL_PLANE || USE_VIEW_TSR
  61. uniform mat3 u_view_tsr_frag;
  62. # endif
  63. #if USE_VIEW_TSR_INVERSE
  64. uniform mat3 u_view_tsr_inverse;
  65. #endif
  66. #if USE_MODEL_TSR
  67. // it's always dynamic object
  68. uniform mat3 u_model_tsr;
  69. #endif
  70. #if USE_MODEL_TSR_INVERSE
  71. uniform mat3 u_model_tsr_inverse;
  72. #endif
  73. # if USE_ENVIRONMENT_LIGHT && SKY_TEXTURE
  74. uniform samplerCube u_sky_texture;
  75. # elif USE_ENVIRONMENT_LIGHT && SKY_COLOR
  76. uniform vec3 u_horizon_color;
  77. uniform vec3 u_zenith_color;
  78. # endif
  79. #else // NODES && ALPHA
  80. uniform vec4 u_diffuse_color;
  81. # if TEXTURE_COLOR
  82. uniform sampler2D u_sampler;
  83. uniform float u_alpha_factor;
  84. # endif
  85. #endif // NODES && ALPHA
  86. #if !USE_OUTLINE
  87. uniform vec3 u_color_id;
  88. #endif
  89. #if USE_NODE_CURVE_VEC || USE_NODE_CURVE_RGB || USE_NODE_VALTORGB
  90. uniform sampler2D u_nodes_texture;
  91. #endif
  92. /*==============================================================================
  93. UNIFORMS
  94. ==============================================================================*/
  95. #if NODES && ALPHA
  96. # if REFLECTION_TYPE == REFL_PLANE
  97. uniform sampler2D u_plane_reflection;
  98. # elif REFLECTION_TYPE == REFL_CUBE
  99. uniform samplerCube u_cube_reflection;
  100. # elif REFLECTION_TYPE == REFL_MIRRORMAP
  101. uniform samplerCube u_mirrormap;
  102. # endif
  103. # if USE_NODE_B4W_REFRACTION
  104. uniform sampler2D u_refractmap;
  105. # if USE_REFRACTION && USE_REFRACTION_CORRECTION
  106. uniform PRECISION sampler2D u_scene_depth;
  107. # endif
  108. # endif
  109. uniform float u_emit;
  110. uniform float u_ambient;
  111. uniform vec4 u_fresnel_params;
  112. # if REFLECTION_TYPE == REFL_MIRRORMAP
  113. uniform float u_mirror_factor;
  114. # elif REFLECTION_TYPE == REFL_PLANE
  115. uniform vec4 u_refl_plane;
  116. # endif
  117. # if USE_NODE_LAMP
  118. uniform vec3 u_lamp_light_positions[NUM_LAMP_LIGHTS];
  119. uniform vec3 u_lamp_light_directions[NUM_LAMP_LIGHTS];
  120. uniform vec3 u_lamp_light_color_intensities[NUM_LAMP_LIGHTS];
  121. # endif
  122. # if USE_NODE_VALUE
  123. uniform float u_node_values[NUM_VALUES];
  124. # endif
  125. # if USE_NODE_RGB
  126. uniform vec3 u_node_rgbs[NUM_RGBS];
  127. # endif
  128. # if SHADOW_USAGE == SHADOW_MASK_GENERATION
  129. # if POISSON_DISK_NUM != NO_SOFT_SHADOWS
  130. uniform vec4 u_pcf_blur_radii;
  131. # endif
  132. uniform vec4 u_csm_center_dists;
  133. uniform GLSL_SMPLR2D_SHDW u_shadow_map0;
  134. uniform GLSL_SMPLR2D_SHDW u_shadow_map1;
  135. uniform GLSL_SMPLR2D_SHDW u_shadow_map2;
  136. uniform GLSL_SMPLR2D_SHDW u_shadow_map3;
  137. uniform sampler2D u_shadow_mask;
  138. # endif
  139. #endif // NODES && ALPHA
  140. # if USE_OUTLINE
  141. uniform float u_outline_intensity;
  142. # endif
  143. #if USE_NODE_OBJECT_INFO
  144. uniform vec3 u_obj_info;
  145. #endif
  146. /*==============================================================================
  147. SHADER INTERFACE
  148. ==============================================================================*/
  149. #if NODES && ALPHA
  150. GLSL_IN vec3 v_pos_world;
  151. GLSL_IN vec4 v_pos_view;
  152. GLSL_IN vec3 v_normal;
  153. # if CALC_TBN_SPACE
  154. GLSL_IN vec4 v_tangent;
  155. # endif
  156. #if REFLECTION_TYPE == REFL_PLANE || USE_POSITION_CLIP
  157. GLSL_IN vec3 v_tex_pos_clip;
  158. # endif
  159. # if USE_NODE_B4W_REFRACTION && USE_REFRACTION
  160. GLSL_IN float v_view_depth;
  161. # endif
  162. // NOTE: impossible case, needed for shader validator
  163. # if SHADOW_USAGE == SHADOW_MASK_GENERATION
  164. GLSL_IN vec4 v_shadow_coord0;
  165. GLSL_IN vec4 v_shadow_coord1;
  166. GLSL_IN vec4 v_shadow_coord2;
  167. GLSL_IN vec4 v_shadow_coord3;
  168. # endif
  169. #else // NODES && ALPHA
  170. # if TEXTURE_COLOR
  171. GLSL_IN vec2 v_texcoord;
  172. # endif
  173. #endif // NODES && ALPHA
  174. #if USE_TBN_SHADING
  175. GLSL_IN vec3 v_shade_tang;
  176. #endif
  177. //------------------------------------------------------------------------------
  178. GLSL_OUT vec4 GLSL_OUT_FRAG_COLOR;
  179. /*==============================================================================
  180. FUNCTIONS
  181. ==============================================================================*/
  182. #if NODES && ALPHA
  183. #include <nodes.glslf>
  184. #endif
  185. /*==============================================================================
  186. MAIN
  187. ==============================================================================*/
  188. void main(void) {
  189. #if ALPHA
  190. # if NODES
  191. vec3 eye_dir = normalize(u_camera_eye_frag - v_pos_world);
  192. vec3 nout_color;
  193. vec3 nout_specular_color;
  194. vec3 nout_normal;
  195. vec4 nout_shadow_factor;
  196. float nout_alpha;
  197. nodes_main(eye_dir,
  198. nout_color,
  199. nout_specular_color,
  200. nout_normal,
  201. nout_shadow_factor,
  202. nout_alpha);
  203. float alpha = nout_alpha;
  204. # else // NODES
  205. # if TEXTURE_COLOR
  206. float alpha = (GLSL_TEXTURE(u_sampler, v_texcoord)).a;
  207. # if TEXTURE_BLEND_TYPE == TEXTURE_BLEND_TYPE_MIX
  208. float texture_alpha = u_alpha_factor * alpha;
  209. texture_alpha += (1.0 - step(0.0, texture_alpha));
  210. alpha = mix(texture_alpha, 1.0, u_diffuse_color.a);
  211. # endif
  212. # else
  213. float alpha = u_diffuse_color.a;
  214. # endif
  215. # endif // NODES
  216. # if ALPHA_CLIP
  217. if (alpha < 0.5)
  218. discard;
  219. alpha = 1.0;
  220. # endif
  221. #endif
  222. #if USE_OUTLINE
  223. GLSL_OUT_FRAG_COLOR = vec4(1.0, 1.0, 1.0, u_outline_intensity);
  224. #else
  225. GLSL_OUT_FRAG_COLOR = vec4(u_color_id, 1.0);
  226. #endif
  227. }