PointShadowMap.hx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package h3d.pass;
  2. class PointShadowMap extends CubeShadowMap {
  3. var pshader : h3d.shader.PointShadow;
  4. public function new( light : h3d.scene.Light, useWorldDist : Bool ) {
  5. super(light, useWorldDist);
  6. shader = pshader = new h3d.shader.PointShadow();
  7. }
  8. override function set_mode(m:Shadows.RenderMode) {
  9. pshader.enable = m != None && enabled;
  10. return mode = m;
  11. }
  12. override function set_enabled(b:Bool) {
  13. pshader.enable = b && mode != None;
  14. return enabled = b;
  15. }
  16. override function getShadowTex() {
  17. return pshader.shadowMap;
  18. }
  19. override function syncShader(texture) {
  20. if( texture == null )
  21. throw "assert";
  22. var pointLight = cast(light, h3d.scene.pbr.PointLight);
  23. pshader.shadowMap = texture;
  24. pshader.shadowBias = bias;
  25. pshader.shadowPower = power;
  26. pshader.lightPos = light.getAbsPos().getPosition();
  27. pshader.zFar = pointLight.range;
  28. // ESM
  29. pshader.USE_ESM = samplingKind == ESM;
  30. pshader.shadowPower = power;
  31. // PCF
  32. pshader.USE_PCF = samplingKind == PCF;
  33. pshader.pcfScale = pcfScale / 100.0;
  34. pshader.pcfQuality = pcfQuality;
  35. }
  36. override function createCollider(light : h3d.scene.Light) {
  37. var absPos = light.getAbsPos();
  38. var pointLight = cast(light, h3d.scene.pbr.PointLight);
  39. return new h3d.col.Sphere(absPos.tx, absPos.ty, absPos.tz, pointLight.range);
  40. }
  41. override function cull(lightCollider : h3d.col.Collider, col : h3d.col.Collider) {
  42. var sphere = cast(lightCollider, h3d.col.Sphere);
  43. return col.inSphere(sphere);
  44. }
  45. override function updateLightCameraNearFar(light : h3d.scene.Light) {
  46. var pointLight = cast(light, h3d.scene.pbr.PointLight);
  47. lightCamera.zFar = pointLight.range;
  48. lightCamera.zNear = pointLight.zNear;
  49. }
  50. }