main_stack.glslf 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. #version GLSL_VERSION
  2. /*==============================================================================
  3. VARS
  4. ==============================================================================*/
  5. #var PRECISION highp
  6. #var TEXTURE_NORM_CO TEXTURE_COORDS_NONE
  7. #var TEXTURE_SPEC_CO TEXTURE_COORDS_NONE
  8. #var CAUSTICS 0
  9. #var USE_FOG 0
  10. #var TEXTURE_COLOR0_CO TEXTURE_COORDS_NONE
  11. #var TEXTURE_COLOR1_CO TEXTURE_COORDS_NONE
  12. #var PARALLAX 0
  13. #var CALC_TBN_SPACE 0
  14. #var USE_TBN_SHADING 0
  15. #var REFLECTION_PASS REFL_PASS_PLANE
  16. #var TEXTURE_SPEC 0
  17. #var ALPHA_AS_SPEC 0
  18. #var TEXTURE_STENCIL_ALPHA_MASK 0
  19. #var TEXTURE_STENCIL_ALPHA_MASK_CO TEXTURE_COORDS_NONE
  20. #var NORMAL_TEXCOORD 0
  21. #var USE_REFRACTION_CORRECTION 0
  22. #var DOUBLE_SIDED_LIGHTING 0
  23. #var SHADELESS 0
  24. #var TEXCOORD 0
  25. #var VERTEX_COLOR 0
  26. #var WETTABLE 0
  27. #var CSM_SECTION1 0
  28. #var CSM_SECTION2 0
  29. #var CSM_SECTION3 0
  30. #var NUM_CAST_LAMPS 0
  31. #var NUM_LIGHTS 0
  32. #var WATER_LEVEL 0.0
  33. #var PROCEDURAL_FOG 0
  34. #var TEXTURE_BLEND_TYPE TEXTURE_BLEND_TYPE_MIX
  35. #var SKY_TEXTURE 0
  36. #var SKY_COLOR 0
  37. #var ALPHA 0
  38. #var ALPHA_CLIP 0
  39. #var PARALLAX_LOD_DIST 5.0
  40. #var PARALLAX_STEPS 5.0
  41. #var USE_ENVIRONMENT_LIGHT 0
  42. #var REFLECTION_TYPE REFL_NONE
  43. #var REFRACTIVE 0
  44. #var DISABLE_FOG 0
  45. #var WATER_EFFECTS 0
  46. #var SHADOW_USAGE NO_SHADOWS
  47. #var DYNAMIC_GRASS 0
  48. #var POISSON_DISK_NUM NO_SOFT_SHADOWS
  49. #var SSAO_ONLY 0
  50. /*==============================================================================
  51. INCLUDES
  52. ==============================================================================*/
  53. #include <precision_statement.glslf>
  54. #include <std.glsl>
  55. #include <color_util.glslf>
  56. #include <math.glslv>
  57. #if !SHADELESS
  58. # if CAUSTICS
  59. #include <caustics.glslf>
  60. # endif
  61. #endif
  62. /*==============================================================================
  63. GLOBAL UNIFORMS
  64. ==============================================================================*/
  65. uniform float u_time;
  66. #if USE_ENVIRONMENT_LIGHT && SKY_TEXTURE
  67. uniform samplerCube u_sky_texture;
  68. #elif USE_ENVIRONMENT_LIGHT && SKY_COLOR
  69. uniform vec3 u_horizon_color;
  70. uniform vec3 u_zenith_color;
  71. #endif
  72. uniform float u_environment_energy;
  73. #if !SHADELESS
  74. # if NUM_LIGHTS > 0
  75. // light_factors packed in the w componnets
  76. uniform vec4 u_light_positions[NUM_LIGHTS];
  77. uniform vec3 u_light_directions[NUM_LIGHTS];
  78. uniform vec4 u_light_color_intensities[NUM_LIGHTS];
  79. # endif
  80. # if CAUSTICS
  81. uniform vec4 u_sun_quaternion;
  82. uniform vec3 u_sun_intensity;
  83. uniform vec3 u_sun_direction;
  84. # endif
  85. #endif
  86. #if NORMAL_TEXCOORD || REFLECTION_TYPE == REFL_PLANE || REFRACTIVE
  87. uniform mat3 u_view_tsr_frag;
  88. #endif
  89. #if !DISABLE_FOG
  90. uniform vec4 u_fog_color_density;
  91. # if WATER_EFFECTS
  92. uniform vec4 u_underwater_fog_color_density;
  93. uniform float u_cam_water_depth;
  94. # endif
  95. # if PROCEDURAL_FOG
  96. uniform mat4 u_cube_fog;
  97. # endif
  98. # if USE_FOG
  99. uniform vec4 u_fog_params; // intensity, depth, start, height
  100. # endif
  101. #endif
  102. /*==============================================================================
  103. SAMPLER UNIFORMS
  104. ==============================================================================*/
  105. #if TEXTURE_COLOR0_CO != TEXTURE_COORDS_NONE
  106. uniform sampler2D u_colormap0;
  107. #endif
  108. #if TEXTURE_SPEC && !ALPHA_AS_SPEC
  109. uniform sampler2D u_specmap0;
  110. #endif
  111. #if TEXTURE_NORM_CO != TEXTURE_COORDS_NONE
  112. uniform sampler2D u_normalmap0;
  113. #endif
  114. #if TEXTURE_STENCIL_ALPHA_MASK
  115. uniform sampler2D u_colormap1;
  116. uniform sampler2D u_stencil0;
  117. #endif
  118. #if REFLECTION_TYPE == REFL_PLANE
  119. uniform sampler2D u_plane_reflection;
  120. #elif REFLECTION_TYPE == REFL_CUBE
  121. uniform samplerCube u_cube_reflection;
  122. #elif REFLECTION_TYPE == REFL_MIRRORMAP
  123. uniform samplerCube u_mirrormap;
  124. #endif
  125. #if SHADOW_USAGE == SHADOW_MAPPING_OPAQUE
  126. uniform sampler2D u_shadow_mask;
  127. #elif SHADOW_USAGE == SHADOW_MAPPING_BLEND
  128. # if POISSON_DISK_NUM != NO_SOFT_SHADOWS
  129. uniform vec4 u_pcf_blur_radii;
  130. # endif
  131. uniform vec4 u_csm_center_dists;
  132. uniform PRECISION GLSL_SMPLR2D_SHDW u_shadow_map0;
  133. # if CSM_SECTION1 || NUM_CAST_LAMPS > 1
  134. uniform PRECISION GLSL_SMPLR2D_SHDW u_shadow_map1;
  135. # endif
  136. # if CSM_SECTION2 || NUM_CAST_LAMPS > 2
  137. uniform PRECISION GLSL_SMPLR2D_SHDW u_shadow_map2;
  138. # endif
  139. # if CSM_SECTION3 || NUM_CAST_LAMPS > 3
  140. uniform PRECISION GLSL_SMPLR2D_SHDW u_shadow_map3;
  141. # endif
  142. #endif
  143. #if REFRACTIVE
  144. uniform sampler2D u_refractmap;
  145. #endif
  146. #if REFRACTIVE && USE_REFRACTION_CORRECTION
  147. uniform PRECISION sampler2D u_scene_depth;
  148. #endif
  149. /*==============================================================================
  150. MATERIAL UNIFORMS
  151. ==============================================================================*/
  152. uniform float u_emit;
  153. uniform float u_ambient;
  154. uniform vec4 u_fresnel_params;
  155. uniform float u_specular_alpha;
  156. #if REFLECTION_TYPE == REFL_PLANE || REFLECTION_TYPE == REFL_CUBE
  157. uniform float u_reflect_factor;
  158. #elif REFLECTION_TYPE == REFL_MIRRORMAP
  159. uniform float u_mirror_factor;
  160. #endif
  161. #if REFLECTION_TYPE == REFL_PLANE
  162. uniform vec4 u_refl_plane;
  163. #endif
  164. uniform vec4 u_diffuse_color;
  165. uniform vec2 u_diffuse_params;
  166. uniform float u_diffuse_intensity;
  167. #if TEXTURE_NORM_CO != TEXTURE_COORDS_NONE
  168. uniform float u_normal_factor;
  169. #endif
  170. #if TEXTURE_COLOR0_CO != TEXTURE_COORDS_NONE
  171. uniform float u_diffuse_color_factor;
  172. uniform float u_alpha_factor;
  173. #endif
  174. #if TEXTURE_SPEC
  175. uniform float u_specular_color_factor;
  176. #endif
  177. uniform vec3 u_specular_color;
  178. uniform vec3 u_specular_params;
  179. #if TEXTURE_NORM_CO != TEXTURE_COORDS_NONE && PARALLAX
  180. uniform float u_parallax_scale;
  181. #endif
  182. #if REFRACTIVE
  183. uniform float u_refr_bump;
  184. #endif
  185. /*==============================================================================
  186. SHADER INTERFACE
  187. ==============================================================================*/
  188. GLSL_IN vec3 v_pos_world;
  189. GLSL_IN vec3 v_normal;
  190. #if !DISABLE_FOG || (TEXTURE_NORM_CO != TEXTURE_COORDS_NONE && PARALLAX) \
  191. || (!SHADELESS && CAUSTICS) || SHADOW_USAGE == SHADOW_MASK_GENERATION \
  192. || SHADOW_USAGE == SHADOW_MAPPING_BLEND
  193. GLSL_IN vec4 v_pos_view;
  194. #endif
  195. #if TEXTURE_NORM_CO != TEXTURE_COORDS_NONE || CALC_TBN_SPACE
  196. GLSL_IN vec4 v_tangent;
  197. #endif
  198. GLSL_IN vec3 v_eye_dir;
  199. #if USE_TBN_SHADING
  200. GLSL_IN vec3 v_shade_tang;
  201. #endif
  202. #if TEXCOORD
  203. GLSL_IN vec2 v_texcoord;
  204. #endif
  205. #if VERTEX_COLOR || DYNAMIC_GRASS
  206. GLSL_IN vec3 v_color;
  207. #endif
  208. #if SHADOW_USAGE == SHADOW_MAPPING_BLEND
  209. GLSL_IN vec4 v_shadow_coord0;
  210. # if CSM_SECTION1 || NUM_CAST_LAMPS > 1
  211. GLSL_IN vec4 v_shadow_coord1;
  212. # endif
  213. # if CSM_SECTION2 || NUM_CAST_LAMPS > 2
  214. GLSL_IN vec4 v_shadow_coord2;
  215. # endif
  216. # if CSM_SECTION3 || NUM_CAST_LAMPS > 3
  217. GLSL_IN vec4 v_shadow_coord3;
  218. # endif
  219. #endif
  220. #if REFLECTION_TYPE == REFL_PLANE || SHADOW_USAGE == SHADOW_MAPPING_OPAQUE \
  221. || REFRACTIVE
  222. GLSL_IN vec3 v_tex_pos_clip;
  223. #endif
  224. #if REFRACTIVE
  225. GLSL_IN float v_view_depth;
  226. #endif
  227. //------------------------------------------------------------------------------
  228. GLSL_OUT vec4 GLSL_OUT_FRAG_COLOR;
  229. /*==============================================================================
  230. INCLUDES
  231. ==============================================================================*/
  232. #if !SHADELESS
  233. #include <shadow.glslf>
  234. #endif
  235. #include <mirror.glslf>
  236. #if REFRACTIVE
  237. #include <refraction.glslf>
  238. #endif
  239. #include <environment.glslf>
  240. #if !SHADELESS
  241. #include <lighting_nodes.glslf>
  242. #endif
  243. #if !DISABLE_FOG
  244. #include <fog.glslf>
  245. #endif
  246. /*==============================================================================
  247. MAIN
  248. ==============================================================================*/
  249. void main(void) {
  250. #if !DISABLE_FOG || (TEXTURE_NORM_CO != TEXTURE_COORDS_NONE && PARALLAX) \
  251. || (!SHADELESS && CAUSTICS && WATER_EFFECTS)
  252. float view_dist = length(v_pos_view);
  253. #endif
  254. #if WATER_EFFECTS
  255. float dist_to_water = v_pos_world.z - WATER_LEVEL;
  256. #endif
  257. #if TEXCOORD
  258. vec2 texcoord = v_texcoord;
  259. #endif
  260. vec3 sided_normal = normalize(v_normal);
  261. #if DOUBLE_SIDED_LIGHTING
  262. // NOTE: workaround for some bug with gl_FrontFacing on Intel graphics
  263. // or open-source drivers
  264. #if REFLECTION_PASS == REFL_PASS_PLANE
  265. if (gl_FrontFacing == false)
  266. #else
  267. if (gl_FrontFacing)
  268. #endif
  269. sided_normal = sided_normal;
  270. else
  271. sided_normal = -sided_normal;
  272. #endif
  273. #if TEXTURE_NORM_CO != TEXTURE_COORDS_NONE
  274. vec3 binormal = cross(sided_normal, v_tangent.xyz) * v_tangent.w;
  275. binormal = normalize(binormal);
  276. vec3 tangent = cross(binormal, sided_normal) * v_tangent.w;
  277. mat3 tbn_matrix = mat3(tangent, binormal, sided_normal);
  278. #endif
  279. #if NORMAL_TEXCOORD || REFLECTION_TYPE == REFL_PLANE || REFRACTIVE
  280. mat3 view_tsr = u_view_tsr_frag;
  281. #endif
  282. #if NORMAL_TEXCOORD
  283. vec2 texcoord_norm = normalize(tsr9_transform_dir(view_tsr, v_normal)).st;
  284. texcoord_norm = texcoord_norm * vec2(0.495) + vec2(0.5);
  285. #endif
  286. #if TEXTURE_NORM_CO != TEXTURE_COORDS_NONE && PARALLAX
  287. // parallax relief mapping
  288. // http://steps3d.narod.ru/tutorials/parallax-mapping-tutorial.html
  289. if (view_dist < PARALLAX_LOD_DIST) {
  290. float multiplier = clamp(0.5 * (PARALLAX_LOD_DIST - view_dist), 0.0, 1.0);
  291. float parallax_scale = u_parallax_scale * multiplier;
  292. // transform eye to tangent space
  293. vec3 eye = normalize(v_eye_dir * tbn_matrix);
  294. // distance between checked layers
  295. float pstep = 1.0 / PARALLAX_STEPS;
  296. // adjustment for one layer height of the layer
  297. vec2 dtex = eye.xy * parallax_scale / (PARALLAX_STEPS * eye.z);
  298. float height = 1.0;
  299. float h; // get height
  300. # if TEXTURE_NORM_CO == TEXTURE_COORDS_NORMAL
  301. vec2 parallax_texcoord = texcoord_norm;
  302. # else
  303. vec2 parallax_texcoord = texcoord;
  304. # endif
  305. h = GLSL_TEXTURE(u_normalmap0, parallax_texcoord).a;
  306. for (float i = 1.0; i <= PARALLAX_STEPS; i++)
  307. {
  308. if (h < height) {
  309. height -= pstep;
  310. parallax_texcoord -= dtex;
  311. h = GLSL_TEXTURE(u_normalmap0, parallax_texcoord).a;
  312. }
  313. }
  314. // find point via linear interpolation
  315. vec2 prev = parallax_texcoord + dtex;
  316. float h_prev = GLSL_TEXTURE(u_normalmap0, prev).a - (height + pstep);
  317. float h_current = h - height;
  318. float weight = h_current / (h_current - h_prev);
  319. // interpolate to get tex coords
  320. parallax_texcoord = weight * prev + (1.0 - weight) * parallax_texcoord;
  321. // include parallax offset in other texture coordinates
  322. # if TEXTURE_NORM_CO == TEXTURE_COORDS_NORMAL
  323. # if TEXCOORD
  324. texcoord += parallax_texcoord - texcoord_norm;
  325. # endif
  326. texcoord_norm = parallax_texcoord;
  327. # else // TEXTURE_NORM_CO == TEXTURE_COORDS_NORMAL
  328. # if NORMAL_TEXCOORD
  329. texcoord_norm += parallax_texcoord - texcoord;
  330. # endif
  331. texcoord = parallax_texcoord;
  332. # endif // TEXTURE_NORM_CO == TEXTURE_COORDS_NORMAL
  333. }
  334. #endif // TEXTURE_NORM_CO != TEXTURE_COORDS_NONE && PARALLAX
  335. #if TEXTURE_NORM_CO != TEXTURE_COORDS_NONE
  336. vec4 normalmap;
  337. # if TEXTURE_NORM_CO == TEXTURE_COORDS_NORMAL
  338. normalmap = GLSL_TEXTURE(u_normalmap0, texcoord_norm);
  339. # else
  340. normalmap = GLSL_TEXTURE(u_normalmap0, texcoord);
  341. # endif
  342. vec3 n = normalmap.rgb - 0.5;
  343. n = mix(vec3(0.0, 0.0, 1.0), n, u_normal_factor);
  344. // equivalent to n.x * v_tangent + n.y * v_binormal + n.z * sided_normal
  345. vec3 normal = tbn_matrix * n;
  346. #else
  347. vec3 normal = sided_normal;
  348. #endif
  349. normal = normalize(normal);
  350. // recalculate normal texcoords with parallax and normalmapping applied
  351. #if NORMAL_TEXCOORD
  352. texcoord_norm = normalize(tsr9_transform_dir(view_tsr, normal)).st;
  353. texcoord_norm = texcoord_norm * vec2(0.495) + vec2(0.5);
  354. #endif
  355. vec3 eye_dir = normalize(v_eye_dir);
  356. // material diffuse params (Lambert)
  357. #if VERTEX_COLOR || DYNAMIC_GRASS
  358. vec3 vert_rgb = v_color;
  359. srgb_to_lin(vert_rgb);
  360. #endif
  361. #if VERTEX_COLOR || DYNAMIC_GRASS
  362. vec4 diffuse_color = vec4(vert_rgb, 1.0);
  363. #else
  364. vec4 diffuse_color = u_diffuse_color;
  365. #endif
  366. float spec_alpha = 1.0;
  367. #if TEXTURE_COLOR0_CO == TEXTURE_COORDS_NORMAL
  368. vec4 texture_color = GLSL_TEXTURE(u_colormap0, texcoord_norm);
  369. #elif TEXTURE_COLOR0_CO == TEXTURE_COORDS_UV_ORCO
  370. vec4 texture_color = GLSL_TEXTURE(u_colormap0, texcoord);
  371. #endif
  372. #if TEXTURE_COLOR0_CO != TEXTURE_COORDS_NONE
  373. srgb_to_lin(texture_color.rgb);
  374. # if TEXTURE_STENCIL_ALPHA_MASK
  375. vec4 texture_color1;
  376. # if TEXTURE_COLOR1_CO == TEXTURE_COORDS_NORMAL
  377. texture_color1 = GLSL_TEXTURE(u_colormap1, texcoord_norm);
  378. # else
  379. texture_color1 = GLSL_TEXTURE(u_colormap1, texcoord);
  380. # endif
  381. srgb_to_lin(texture_color1.rgb);
  382. # if TEXTURE_STENCIL_ALPHA_MASK_CO == TEXTURE_COORDS_NORMAL
  383. vec4 texture_stencil = GLSL_TEXTURE(u_stencil0, texcoord_norm);
  384. # else
  385. vec4 texture_stencil = GLSL_TEXTURE(u_stencil0, texcoord);
  386. # endif
  387. texture_color = mix(texture_color, texture_color1, texture_stencil.r);
  388. # endif // TEXTURE_STENCIL_ALPHA_MASK
  389. # if TEXTURE_BLEND_TYPE == TEXTURE_BLEND_TYPE_MIX
  390. diffuse_color.rgb = mix(diffuse_color.rgb, texture_color.rgb, u_diffuse_color_factor);
  391. float texture_alpha = u_alpha_factor * texture_color.a;
  392. texture_alpha += (1.0 - step(0.0, texture_alpha));
  393. diffuse_color.a = mix(texture_alpha, 1.0, u_diffuse_color.a);
  394. spec_alpha = texture_color.a;
  395. # elif TEXTURE_BLEND_TYPE == TEXTURE_BLEND_TYPE_MULTIPLY
  396. diffuse_color.rgb *= mix(vec3(1.0), texture_color.rgb, u_diffuse_color_factor);
  397. diffuse_color.a = texture_color.a;
  398. spec_alpha = texture_color.a;
  399. # endif
  400. #endif // TEXTURE_COLOR0_CO
  401. #if SHADELESS
  402. vec3 color = diffuse_color.rgb;
  403. #else // SHADELESS
  404. vec3 D = u_diffuse_intensity * diffuse_color.rgb;
  405. // ambient
  406. vec3 environment_color = u_environment_energy * get_environment_color(normal);
  407. vec3 A = u_ambient * environment_color;
  408. vec4 shadow_factor = calc_shadow_factor(D);
  409. // emission
  410. vec3 E = u_emit * diffuse_color.rgb;
  411. // material specular params (Phong)
  412. vec3 specular_color = u_specular_color;
  413. # if TEXTURE_SPEC
  414. # if ALPHA_AS_SPEC
  415. vec3 stexture_color = vec3(spec_alpha);
  416. # elif TEXTURE_SPEC_CO == TEXTURE_COORDS_NORMAL
  417. vec3 stexture_color = GLSL_TEXTURE(u_specmap0, texcoord_norm).rgb;
  418. # else
  419. vec3 stexture_color = GLSL_TEXTURE(u_specmap0, texcoord).rgb;
  420. # endif
  421. srgb_to_lin(stexture_color.rgb);
  422. specular_color = mix(specular_color, stexture_color, u_specular_color_factor);
  423. # endif // TEXTURE_SPEC
  424. float specint = u_specular_params[0];
  425. vec2 spec_params = vec2(u_specular_params[1], u_specular_params[2]);
  426. vec3 S = specint * specular_color;
  427. vec3 color;
  428. vec3 specular;
  429. nodes_lighting(E, A, D, S, v_pos_world, normal, eye_dir, spec_params,
  430. u_diffuse_params, shadow_factor, 0.0, vec4(0.0), color, specular);
  431. #endif // SHADELESS
  432. #if REFLECTION_TYPE == REFL_PLANE
  433. apply_mirror(color, eye_dir, normal, u_reflect_factor, view_tsr);
  434. #elif REFLECTION_TYPE == REFL_CUBE
  435. apply_mirror(color, eye_dir, normal, u_reflect_factor, mat3(0.0));
  436. #elif REFLECTION_TYPE == REFL_MIRRORMAP
  437. apply_mirror(color, eye_dir, normal, u_mirror_factor, mat3(0.0));
  438. #endif
  439. #if !SHADELESS
  440. color += specular;
  441. #endif //SHADELESS
  442. float alpha = diffuse_color.a;
  443. #if !SHADELESS && WATER_EFFECTS
  444. # if WETTABLE
  445. //darken slightly to simulate wet surface
  446. color = max(color - sqrt(0.01 * -min(dist_to_water, 0.0)), 0.5 * color);
  447. # endif
  448. # if CAUSTICS
  449. apply_caustics(color, dist_to_water, u_time, shadow_factor, normal,
  450. u_sun_direction, u_sun_intensity, u_sun_quaternion,
  451. v_pos_world, view_dist);
  452. # endif // CAUSTICS
  453. #endif //SHADELESS
  454. #if ALPHA
  455. # if ALPHA_CLIP
  456. if (alpha < 0.5)
  457. discard;
  458. alpha = 1.0; // prevent blending with html content
  459. # else // ALPHA_CLIP
  460. # if !SHADELESS
  461. // make pixels with high specular more opaque; note: only the first channel of S is used
  462. float t = max(max(specular.r, specular.g), specular.b) * u_specular_alpha;
  463. alpha = diffuse_color.a * (1.0 - t) + t;
  464. # endif // SHADELESS
  465. # endif // ALPHA CLIP
  466. #else // ALPHA
  467. alpha = 1.0;
  468. #endif // ALPHA
  469. #if REFRACTIVE
  470. vec2 normal_view = -(tsr9_transform_dir(view_tsr, normal)).xy;
  471. color = mix(material_refraction(v_tex_pos_clip, normal_view * u_refr_bump),
  472. color, alpha);
  473. alpha = 1.0;
  474. #endif
  475. #if !DISABLE_FOG
  476. # if WATER_EFFECTS
  477. fog(color, view_dist, eye_dir, dist_to_water);
  478. # else
  479. fog(color, view_dist, eye_dir, 1.0);
  480. # endif
  481. #endif
  482. #if SSAO_ONLY && SHADOW_USAGE == SHADOW_MAPPING_OPAQUE
  483. float ssao = GLSL_TEXTURE_PROJ(u_shadow_mask, v_tex_pos_clip).a;
  484. color = vec3(ssao);
  485. #endif
  486. lin_to_srgb(color);
  487. #if ALPHA && !ALPHA_CLIP
  488. premultiply_alpha(color, alpha);
  489. #endif
  490. GLSL_OUT_FRAG_COLOR = vec4(color, alpha);
  491. }