Pack.glsl 658 B

12345678910111213141516171819202122232425262728293031
  1. /**
  2. * Pack 3D normal to 2D vector
  3. */
  4. vec2 packNormal( in vec3 _normal )
  5. {
  6. /*original code:
  7. const float _scale = 1.7777;
  8. vec2 _enc = _normal.xy / (_normal.z+1.0);
  9. _enc /= _scale;
  10. _enc = _enc*0.5 + 0.5;
  11. return _enc;*/
  12. const float _scale = 1.7777;
  13. float scalar1 = (_normal.z+1.0)*(_scale*2.0);
  14. return _normal.xy / scalar1 + 0.5;
  15. }
  16. /**
  17. * Reverse the packNormal
  18. */
  19. vec3 unpackNormal(in vec2 _enc_)
  20. {
  21. const float _scale_ = 1.7777;
  22. vec2 _nn_ = _enc_ * (2.0 * _scale_) - _scale_;
  23. float _g_ = 2.0 / (dot(_nn_.xy, _nn_.xy) + 1.0);
  24. vec3 _normal_;
  25. _normal_.xy = _g_ * _nn_.xy;
  26. _normal_.z = _g_ - 1.0;
  27. return _normal_;
  28. }