light.effect 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. CCEffect %{
  2. editor:
  3. hide: true
  4. techniques:
  5. - passes:
  6. - vert: light-vs:vert
  7. frag: light-fs:frag
  8. rasterizerState:
  9. cullMode: none
  10. depthStencilState:
  11. depthTest: true
  12. depthWrite: false
  13. blendState:
  14. targets:
  15. - blend: true
  16. blendSrc: src_alpha
  17. blendDst: one_minus_src_alpha
  18. blendDstAlpha: one_minus_src_alpha
  19. }%
  20. CCProgram light-vs %{
  21. precision mediump float;
  22. #include <builtin/uniforms/cc-local>
  23. #include <builtin/uniforms/cc-global>
  24. #include <common/common-define>
  25. in vec3 a_position;
  26. in vec2 a_texCoord;
  27. out vec2 v_uv;
  28. vec4 vert () {
  29. v_uv = a_texCoord;
  30. return cc_matViewProj * cc_matWorld * vec4(a_position, 1.0);
  31. }
  32. }%
  33. CCProgram light-fs %{
  34. precision mediump float;
  35. #include <legacy/output>
  36. uniform Constant {
  37. vec4 mainColor;
  38. vec4 intensitySize; // x: intensity, y: glow
  39. };
  40. in vec2 v_uv;
  41. float sphere(vec3 d, vec3 p) {
  42. return smoothstep(1.0 - intensitySize.y, 1.0, 1.0 / length(cross(d, p)));
  43. }
  44. vec4 frag () {
  45. vec2 uv = v_uv - 0.5;
  46. vec3 R = normalize(vec3(1.0, uv));
  47. // if (any(greaterThan(abs(uv), vec2(0.48)))) return vec4(0.0, 0.0, 0.0, 1.0);
  48. return CCFragOutput(vec4(mainColor.rgb, mix(sphere(R, vec3(5.0, 0.0, 0.0)), 1.0, dot(uv, uv) < 0.0625 ? 1.0 : 0.0)));
  49. // return vec4(color, sphere(R, vec3(4.5, 0.0, 0.0)));
  50. }
  51. }%