# Tests with shadowGenerator usin PCSS filter

**URL:** <https://forum.babylonjs.com/t/tests-with-shadowgenerator-usin-pcss-filter/22708>\
**Category:** Bugs\
**Created:** [July 30, 2021, 2:04am UTC](https://forum.babylonjs.com/t/tests-with-shadowgenerator-usin-pcss-filter/22708 "2021-07-30T02:04:48Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![NHuq](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/nhuq/32/12071_2.png) [@NHuq](https://forum.babylonjs.com/u/NHuq)\
**Post date:** [July 30, 2021, 2:04am UTC](https://forum.babylonjs.com/t/tests-with-shadowgenerator-usin-pcss-filter/22708/1 "2021-07-30T02:04:48Z")

</div>

Hi,  
I have been trying to create shadows and was successful with PCSS and while creating tests i fumbled again. 🙂

**expect(shadowGenerator.useContactHardeningShadow).toBe(SHADOW\_GENERATOR\_PROPERTIES.useContactHardeningShadow);**  
\*\* expect(shadowGenerator.filter).toBe(SHADOW\_GENERATOR\_PROPERTIES.filter);\*\*

**the above 2 fail…**

**when i build and run the code everything seems fine, i can create some good shadows. and inspector shows fine… with all the values being set… but…test fails on these two properties.**

**filter and useContactHardeningShadow**

-------------------------here is code--------------------

const DIRECTIONAL\_LIGHT\_PROPERTIES = {  
name: “abc”,  
direction: new Vector3(0.0, -3, -0.7),  
position: new Vector3(0, 1.076, 0.434),  
intensity: 2.66,  
}

const SHADOW\_GENERATOR\_PROPERTIES = {  
mapSize: 1024,  
useContactHardeningShadow: true,  
darkness: 0.34,  
filter: 7,  
shadowMaxZ: 1,  
shadowMinZ: 0.7,  
contactHardeningLightSizeUVRatio: 0.06,  
}

class DDirectionalLight extends DirectionalLight{  
constructor(params: DirectionalLightInterface) {  
super(params.name, params.direction, params.scene);  
this.position = params.position;  
this.intensity = params.intensity;  
}  
}

const shadowCastLightData: DirectionalLightInterface = {  
name: DIRECTIONAL\_LIGHT\_PROPERTIES.name,  
direction: DIRECTIONAL\_LIGHT\_PROPERTIES.direction,  
scene: PlayerManager.scene,  
position: DIRECTIONAL\_LIGHT\_PROPERTIES.position,  
intensity: DIRECTIONAL\_LIGHT\_PROPERTIES.intensity,  
};

function createShadow(dlight: DirectionalLight):ShadowGenerator {  
if(!dlight){  
return undefined  
}  
const shadowGenerator = new ShadowGenerator(SHADOW\_GENERATOR\_PROPERTIES.mapSize, dlight);

```
shadowGenerator.setDarkness(SHADOW_GENERATOR_PROPERTIES.darkness);
shadowGenerator.filter = SHADOW_GENERATOR_PROPERTIES.filter;
shadowGenerator.useContactHardeningShadow = SHADOW_GENERATOR_PROPERTIES.useContactHardeningShadow;
shadowGenerator.contactHardeningLightSizeUVRatio = SHADOW_GENERATOR_PROPERTIES.contactHardeningLightSizeUVRatio;

dlight.shadowMinZ = SHADOW_GENERATOR_PROPERTIES.shadowMinZ;
dlight.shadowMaxZ = SHADOW_GENERATOR_PROPERTIES.shadowMaxZ;

return shadowGenerator;

```

}

--------------------tests-----------------------  
const engine = new NullEngine();  
const testScene = new Scene(engine); // scene us require because without scene, this test will fail  
shadowCastLightData.scene = testScene;

describe(‘createShadow tests’, () =\> {  
beforeEach(() =\> {  
jest.spyOn(console, ‘error’).mockImplementation();  
});

it(‘should return an object if parameters are met’, () =\> {  
const shadowLightsInput = new DDirectionalLight(shadowCastLightData);  
const shadowGenerator = createShadow(shadowLightsInput);  
expect(shadowGenerator).toBeDefined();  
expect(shadowGenerator.darkness).toBe(SHADOW\_GENERATOR\_PROPERTIES.darkness);  
expect(shadowGenerator.contactHardeningLightSizeUVRatio).toBe(SHADOW\_GENERATOR\_PROPERTIES.contactHardeningLightSizeUVRatio);  
expect(shadowLightsInput.shadowMinZ).toBe(SHADOW\_GENERATOR\_PROPERTIES.shadowMinZ);  
expect(shadowLightsInput.shadowMaxZ).toBe(SHADOW\_GENERATOR\_PROPERTIES.shadowMaxZ);

expect(shadowGenerator.useContactHardeningShadow).toBe(SHADOW\_GENERATOR\_PROPERTIES.useContactHardeningShadow);  
expect(shadowGenerator.filter).toBe(SHADOW\_GENERATOR\_PROPERTIES.filter);  
});

it(‘should return undefined if parameters are undefined’, () =\> {  
expect(createShadow(undefined)).toBeUndefined();  
});  
});

---

<div class="post-metadata">

**Author:** ![Evgeni\_Popov](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/evgeni_popov/32/4432_2.png) [@Evgeni\_Popov](https://forum.babylonjs.com/u/Evgeni_Popov)\
**Post date:** [July 30, 2021, 9:46am UTC](https://forum.babylonjs.com/t/tests-with-shadowgenerator-usin-pcss-filter/22708/2 "2021-07-30T09:46:49Z")

</div>

Have you tried to console.log the two values `shadowGenerator.useContactHardeningShadow` and `SHADOW_GENERATOR_PROPERTIES.useContactHardeningShadow` to see their values?

---

<div class="post-metadata">

**Author:** ![sebavan](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/sebavan/32/57_2.png) [@sebavan](https://forum.babylonjs.com/u/sebavan)\
**Post date:** [July 30, 2021, 2:08pm UTC](https://forum.babylonjs.com/t/tests-with-shadowgenerator-usin-pcss-filter/22708/3 "2021-07-30T14:08:20Z")

</div>

It might be cause in null engine it simulates gl1 so PCSS would not be supported 🙂

---

<div class="post-metadata">

**Author:** ![NHuq](https://sea2.discourse-cdn.com/flex024/user_avatar/forum.babylonjs.com/nhuq/32/12071_2.png) [@NHuq](https://forum.babylonjs.com/u/NHuq)\
**Post date:** [July 30, 2021, 5:12pm UTC](https://forum.babylonjs.com/t/tests-with-shadowgenerator-usin-pcss-filter/22708/4 "2021-07-30T17:12:33Z")

</div>

Perfect @sebavan , that makes sense… Thank you very much and thank you Evgeni, really thank you very much,.
