# Simple shadow mapping example

**URL:** <https://forum.defold.com/t/simple-shadow-mapping-example/47628>\
**Category:** The Defoldmine\
**Created:** [March 28, 2019, 12:50pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628 "2019-03-28T12:50:34Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![jhonny.goransson](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/jhonny.goransson/32/3864_2.png) [@jhonny.goransson](https://forum.defold.com/u/jhonny.goransson)\
**Post date:** [March 28, 2019, 12:50pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/1 "2019-03-28T12:50:34Z")

</div>

Here’s a (very) simple shadow mapping example that might get you started. Ask here if you have questions and I’ll do my best to answer them. I’ve annotated the code a little bit, but my intensions are to improve it more at some later time.

Code: [my-public-defold-examples/shadow-mapping at master · jhonnyking/my-public-defold-examples · GitHub](https://github.com/jhonnyking/my-public-defold-examples/tree/master/shadow-mapping)  
HTML5 build: [shadow-mapping-example 0.0](https://jhonnyking.github.io/my-public-defold-examples/shadow-mapping/)

---

<div class="post-metadata">

**Author:** ![COCO](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/coco/32/38692_2.png) [@COCO](https://forum.defold.com/u/COCO)\
**Post date:** [March 28, 2019, 1:06pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/2 "2019-03-28T13:06:18Z")

</div>

When Defold editor can be a 3D editor?

---

<div class="post-metadata">

**Author:** ![dmitriy](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/dmitriy/32/18452_2.png) [@dmitriy](https://forum.defold.com/u/dmitriy)\
**Post date:** [March 28, 2019, 1:06pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/3 "2019-03-28T13:06:47Z")

</div>

Don’t you think that you (as Defold engeneer) should use in examples render.set\_render\_target (introduced in 1.2.139) instead of old and deprecated enable/disable\_render\_target?

---

<div class="post-metadata">

**Author:** ![Pawel](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/pawel/32/24623_2.png) [@Pawel](https://forum.defold.com/u/Pawel)\
**Post date:** [March 28, 2019, 2:00pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/4 "2019-03-28T14:00:54Z")

</div>

Wow, the shadow is even casted on the other object 😃 Do this method allows to cast self shadows? On the object itself?

---

<div class="post-metadata">

**Author:** ![jhonny.goransson](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/jhonny.goransson/32/3864_2.png) [@jhonny.goransson](https://forum.defold.com/u/jhonny.goransson)\
**Post date:** [March 28, 2019, 2:19pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/5 "2019-03-28T14:19:35Z")

</div>

Yeah you are right, totally forgot about that change 🙂

---

<div class="post-metadata">

**Author:** ![jhonny.goransson](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/jhonny.goransson/32/3864_2.png) [@jhonny.goransson](https://forum.defold.com/u/jhonny.goransson)\
**Post date:** [March 28, 2019, 2:22pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/6 "2019-03-28T14:22:32Z")

</div>

Yeah, it does self-shadow, look at the shadow side of the sphere to see the effect. It looks a “bit” strange now due to the bias value, but it’s a common issue with shadow mapping. There’s fixes and improvements to add that will make it better 🙂

---

<div class="post-metadata">

**Author:** ![jhonny.goransson](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/jhonny.goransson/32/3864_2.png) [@jhonny.goransson](https://forum.defold.com/u/jhonny.goransson)\
**Post date:** [November 10, 2019, 8:50pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/7 "2019-11-10T20:50:49Z")

</div>

Implemented cascaded shadow maps this weekend, I’ll clean up the code and put the source online later this week 🙂

[https://forum.defold.com/uploads/default/original/3X/a/3/a3eece3ce0031c1ebe7857c209c96d8bffdd9c8b.mp4](https://forum.defold.com/uploads/default/original/3X/a/3/a3eece3ce0031c1ebe7857c209c96d8bffdd9c8b.mp4)

---

<div class="post-metadata">

**Author:** ![Pkeod](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/pkeod/32/606_2.png) [@Pkeod](https://forum.defold.com/u/Pkeod)\
**Post date:** [March 8, 2021, 3:25am UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/8 "2021-03-08T03:25:48Z")

</div>

Did this ever go live?

---

<div class="post-metadata">

**Author:** ![Pkeod](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/pkeod/32/606_2.png) [@Pkeod](https://forum.defold.com/u/Pkeod)\
**Post date:** [March 8, 2021, 4:22am UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/9 "2021-03-08T04:22:13Z")

</div>

I’m studying your original example now and I have some questions.

Is it cheaply possible to improve the quality of shadows like this? Smoothing the shadow or something?

 ![2021-03-07%2020_17_13-shadow-mapping-example](https://forum-defold.b-cdn.net/uploads/default/original/3X/2/5/2599d7e488d567709cc7e098247daf92af34539f.png)

Percentage-closer filtering as mentioned here?

> [LearnOpenGL - Shadow Mapping](https://learnopengl.com/Advanced-Lighting/Shadows/Shadow-Mapping)

What is the best way to allow some objects to cast shadows but not to receive shadows? So in the below it would be nice looking to allow the voxel character to cast a shadow but to be shaded in its own way.

 ![2021-03-07%2020_17_28-shadow-mapping-example](https://forum-defold.b-cdn.net/uploads/default/original/3X/1/f/1f1bbfa6028ff4efa63d6bf4ac4c7fef3c0f3c48.png) ![2021-03-07%2020_18_09-shadow-mapping-example](https://forum-defold.b-cdn.net/uploads/default/original/3X/b/9/b9f3f9ed9e95815e23fae821be64b39b3e5204b0.png)

Would it be possible to check if an object is inside of a shadow (a point is “standing” on top of a shadow) to change its shading? So like from lit to more shaded. Some games do this. I can imagine how this is done but I don’t know how it would probably be done.

---

<div class="post-metadata">

**Author:** ![Pkeod](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/pkeod/32/606_2.png) [@Pkeod](https://forum.defold.com/u/Pkeod)\
**Post date:** [March 29, 2021, 6:11pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/10 "2021-03-29T18:11:46Z")

</div>

> [@Pkeod](#):
>
> What is the best way to allow some objects to cast shadows but not to receive shadows?

What I’m thinking is 1. draw shadows to target 2. draw objects with shadow catching enabled 3. draw shadows 4. draw objects without shadow catching enabled.

---

<div class="post-metadata">

**Author:** ![dlannan](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/dlannan/32/39440_2.png) [@dlannan](https://forum.defold.com/u/dlannan)\
**Post date:** [March 30, 2021, 11:47am UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/11 "2021-03-30T11:47:45Z")

</div>

One way is to have an object mask. So when you render depth for your shadow mask, you can lookup the object mask and see its shadowing ‘capabilities’, its very useful for other things like heat maps.. etc..  
This way you can enable/disable on a per object basis. Im assuming you are doing a projected shadow map pass for multiple shadow levels.

---

<div class="post-metadata">

**Author:** ![jhonny.goransson](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/jhonny.goransson/32/3864_2.png) [@jhonny.goransson](https://forum.defold.com/u/jhonny.goransson)\
**Post date:** [April 12, 2021, 7:06am UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/12 "2021-04-12T07:06:22Z")

</div>

Hm there should be a branch with the cascade code in the original repo, but I’ll check again

---

<div class="post-metadata">

**Author:** ![Pkeod](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/pkeod/32/606_2.png) [@Pkeod](https://forum.defold.com/u/Pkeod)\
**Post date:** [April 12, 2021, 2:50pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/13 "2021-04-12T14:50:19Z")

</div>

[GitHub - jhonnyking/my-public-defold-examples at shadow-mapping-cascades · GitHub](https://github.com/jhonnyking/my-public-defold-examples/tree/shadow-mapping-cascades) There is!

---

<div class="post-metadata">

**Author:** ![dlannan](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/dlannan/32/39440_2.png) [@dlannan](https://forum.defold.com/u/dlannan)\
**Post date:** [April 17, 2021, 2:43pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/14 "2021-04-17T14:43:48Z")

</div>

Should that work? I tried the one of the examples (on Linux Debian 10) - shadow-mapping-cascades-example:

```lua
INFO:ENGINE: Engine service started on port 39857
INFO:ENGINE: Defold Engine 1.2.181 (ff5b94e)
INFO:ENGINE: Loading data from: build/default
INFO:ENGINE: Initialised sound device 'default'
DEBUG:SCRIPT: Listening for debugger on 0.0.0.0
DEBUG:SCRIPT: Debugger connected from 127.0.0.1
ERROR:GRAPHICS: gl error 36054: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
dmengine: ../src/opengl/graphics_opengl.cpp:2019: dmGraphics::HRenderTarget dmGraphics::OpenGLNewRenderTarget(dmGraphics::HContext, uint32_t, const dmGraphics::TextureCreationParams *, const dmGraphics::TextureParams *): Assertion `false' failed.
INFO:CRASH: Using libunwind.a

```

Hardware support issue? Not sure.  
\< edit \> The shadow-mapping-example seems to work fine.

---

<div class="post-metadata">

**Author:** ![Pkeod](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/pkeod/32/606_2.png) [@Pkeod](https://forum.defold.com/u/Pkeod)\
**Post date:** [April 17, 2021, 8:02pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/15 "2021-04-17T20:02:47Z")

</div>

I didn’t test before yet and tested now, seeing similar issue on Windows 10

```lua
INFO:DLIB: Log server started on port 63486
INFO:ENGINE: Engine service started on port 63487
INFO:ENGINE: Defold Engine 1.2.181 (ff5b94e)
INFO:ENGINE: Loading data from: build/default
INFO:ENGINE: Initialised sound device 'default'
ERROR:GRAPHICS: gl error 36054: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
Assertion failed: false, file ..\src\opengl\graphics_opengl.cpp, line 2019
INFO:CRASH: Successfully wrote Crashdump to file: C:\Users\subso\AppData\Roaming\Defold/_crash
ERROR:CRASH: CALL STACK:

 0 0x7FF6C4EF30CA _scwprintf <unknown>:0
 1 0x7FF6C4EF30CA _scwprintf <unknown>:0
 2 0x7FF6C4EF30CA _scwprintf <unknown>:0
 3 0x7FF6C4EF30CA _scwprintf <unknown>:0
 4 0x7FF6C4EF30CA _scwprintf <unknown>:0
 5 0x7FF6C4EF30CA _scwprintf <unknown>:0
 6 0x7FF6C4EF30CA _scwprintf <unknown>:0
 7 0x7FF6C4EF30CA _scwprintf <unknown>:0
 8 0x7FF6C4EF30CA _scwprintf <unknown>:0
 9 0x7FF6C4EF30CA _scwprintf <unknown>:0
10 0x7FF6C4EF30CA _scwprintf <unknown>:0
11 0x7FF6C4EF30CA _scwprintf <unknown>:0
12 0x7FF6C4EF30CA _scwprintf <unknown>:0
13 0x7FF6C4EF30CA _scwprintf <unknown>:0
14 0x7FF6C4EF30CA _scwprintf <unknown>:0
15 0x7FF6C4EF30CA _scwprintf <unknown>:0
16 0x7FFFAD527020 BaseThreadInitThunk <unknown>:0
17 0x7FFFAEDC2630 RtlUserThreadStart <unknown>:0
Lua Callstack:
  /render/cascades.lua:182: in function create
  /render/default.render_script:39: in function </render/default.render_script:12>

```

Tested on working Vulkan build and it seems to get a bit further

 ![2021-04-17%2012_58_12-Window](https://forum-defold.b-cdn.net/uploads/default/original/3X/7/9/79112f68416de208027e041628923a5a08081f51.png)

I deleted mtx\_view from one of them and mtx\_worldview from another (both were unused in the actual respective vp) and then it would build although it does not look right.

 ![2021-04-17%2013_01_51-Window](https://forum-defold.b-cdn.net/uploads/default/original/3X/6/2/622d27326e3975d1229509487e762723923c4c4d.png)

---

<div class="post-metadata">

**Author:** ![dlannan](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/dlannan/32/39440_2.png) [@dlannan](https://forum.defold.com/u/dlannan)\
**Post date:** [April 18, 2021, 3:45am UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/16 "2021-04-18T03:45:46Z")

</div>

Thanks for having a look at this. I’ll investigate further next week.

---

<div class="post-metadata">

**Author:** ![Dragosha](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/dragosha/32/5103_2.png) [@Dragosha](https://forum.defold.com/u/Dragosha)\
**Post date:** [April 18, 2021, 6:10am UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/17 "2021-04-18T06:10:58Z")

</div>

![2020-06-14_18-03-44](https://forum-defold.b-cdn.net/uploads/default/original/3X/e/3/e33b58d4ad44361dffa11f1225914194330a617f.jpeg)  
I’ve tried to build this shadow mapping example, a bit modified in summer 2020 and also have an error.

```lua
INFO:ENGINE: Defold Engine 1.2.181 (ff5b94e)
INFO:ENGINE: Loading data from: build/default
INFO:ENGINE: Initialised sound device 'default'
ERROR:GRAPHICS: 0(45) : error C7011: implicit cast from "float" to "vec3"

WARNING:RESOURCE: Unable to create resource: /assets/materials/diffuse.fpc: FORMAT_ERROR
WARNING:RESOURCE: Unable to create resource: /assets/materials/diffuse.materialc: FORMAT_ERROR
INFO:CRASH: Successfully wrote Crashdump to file: C:\Users\isunt\AppData\Roaming\Defold/_crash
ERROR:CRASH: CALL STACK:

 0 0x7FF6C5DE0800 dmCrash::GenerateCallstack D:\a\defold\defold\engine\crash\src\backtrace_win32.cpp:142
 1 0x7FF6C5EBC4AC _seh_filter_exe minkernel\crts\ucrt\src\appcrt\misc\exception_filter.cpp:219
 2 0x7FF6C5F036BF `__scrt_common_main_seh'::`1'::filt$0 d:\agent\_work\4\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:304
 3 0x7FF6C5E4FBE0 __C_specific_handler d:\agent\_work\4\s\src\vctools\crt\vcruntime\src\eh\riscchandler.cpp:290
 4 0x7FF8B79F1F60 __chkstk <unknown>:0
 5 0x7FF8B79A1020 RtlRaiseException <unknown>:0
 6 0x7FF8B79F0B80 KiUserExceptionDispatcher <unknown>:0
 7 0x7FF6C5B0A810 dmGameSystem::ResMeshCreate D:\a\defold\defold\engine\gamesys\src\gamesys\resources\res_mesh.cpp:356
 8 0x7FF6C5ADE920 dmResource::DoGet D:\a\defold\defold\engine\resource\src\resource.cpp:1136
 9 0x7FF6C5AE05E0 dmResource::Get D:\a\defold\defold\engine\resource\src\resource.cpp:1234
10 0x7FF6C5AA5C60 dmGameObject::AcquireResources D:\a\defold\defold\engine\gameobject\src\gameobject\res_gameobject.cpp:64
11 0x7FF6C5AA62A0 dmGameObject::ResGameObjectCreate D:\a\defold\defold\engine\gameobject\src\gameobject\res_gameobject.cpp:161
12 0x7FF6C5ADE920 dmResource::DoGet D:\a\defold\defold\engine\resource\src\resource.cpp:1136
13 0x7FF6C5AE05E0 dmResource::Get D:\a\defold\defold\engine\resource\src\resource.cpp:1234
14 0x7FF6C5AA6A10 dmGameObject::AcquireResources D:\a\defold\defold\engine\gameobject\src\gameobject\res_collection.cpp:60
15 0x7FF6C5AA75E0 dmGameObject::ResCollectionCreate D:\a\defold\defold\engine\gameobject\src\gameobject\res_collection.cpp:259
16 0x7FF6C5ADE920 dmResource::DoGet D:\a\defold\defold\engine\resource\src\resource.cpp:1136
17 0x7FF6C5AE05E0 dmResource::Get D:\a\defold\defold\engine\resource\src\resource.cpp:1234
18 0x7FF6C5A8EEF0 dmEngine::Init D:\a\defold\defold\engine\engine\src\engine.cpp:1164
19 0x7FF6C5A935B0 dmEngineCreate D:\a\defold\defold\engine\engine\src\engine.cpp:1927
20 0x7FF6C5A93990 dmEngine::RunLoop D:\a\defold\defold\engine\engine\src\engine_loop.cpp:54
21 0x7FF6C5A8C600 engine_main D:\a\defold\defold\engine\engine\src\engine_main.cpp:127
22 0x7FF6C5E4A304 __scrt_common_main_seh d:\agent\_work\4\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
23 0x7FF8B7867020 BaseThreadInitThunk <unknown>:0
24 0x7FF8B79A2630 RtlUserThreadStart <unknown>:0

INFO:CRASH: Successfully wrote Crashdump to file: C:\Users\isunt\AppData\Roaming\Defold/_crash
ERROR:CRASH: CALL STACK:

 0 0x7FF6C5B0A810 dmGameSystem::ResMeshCreate D:\a\defold\defold\engine\gamesys\src\gamesys\resources\res_mesh.cpp:356
 1 0x7FF6C5ADE920 dmResource::DoGet D:\a\defold\defold\engine\resource\src\resource.cpp:1136
 2 0x7FF6C5AE05E0 dmResource::Get D:\a\defold\defold\engine\resource\src\resource.cpp:1234
 3 0x7FF6C5AA5C60 dmGameObject::AcquireResources D:\a\defold\defold\engine\gameobject\src\gameobject\res_gameobject.cpp:64
 4 0x7FF6C5AA62A0 dmGameObject::ResGameObjectCreate D:\a\defold\defold\engine\gameobject\src\gameobject\res_gameobject.cpp:161
 5 0x7FF6C5ADE920 dmResource::DoGet D:\a\defold\defold\engine\resource\src\resource.cpp:1136
 6 0x7FF6C5AE05E0 dmResource::Get D:\a\defold\defold\engine\resource\src\resource.cpp:1234
 7 0x7FF6C5AA6A10 dmGameObject::AcquireResources D:\a\defold\defold\engine\gameobject\src\gameobject\res_collection.cpp:60
 8 0x7FF6C5AA75E0 dmGameObject::ResCollectionCreate D:\a\defold\defold\engine\gameobject\src\gameobject\res_collection.cpp:259
 9 0x7FF6C5ADE920 dmResource::DoGet D:\a\defold\defold\engine\resource\src\resource.cpp:1136
10 0x7FF6C5AE05E0 dmResource::Get D:\a\defold\defold\engine\resource\src\resource.cpp:1234
11 0x7FF6C5A8EEF0 dmEngine::Init D:\a\defold\defold\engine\engine\src\engine.cpp:1164
12 0x7FF6C5A935B0 dmEngineCreate D:\a\defold\defold\engine\engine\src\engine.cpp:1927
13 0x7FF6C5A93990 dmEngine::RunLoop D:\a\defold\defold\engine\engine\src\engine_loop.cpp:54
14 0x7FF6C5A8C600 engine_main D:\a\defold\defold\engine\engine\src\engine_main.cpp:127
15 0x7FF6C5E4A304 __scrt_common_main_seh d:\agent\_work\4\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
16 0x7FF8B7867020 BaseThreadInitThunk <unknown>:0
17 0x7FF8B79A2630 RtlUserThreadStart <unknown>:0

INFO:CRASH: Successfully wrote MiniDump to file: C:\Users\isunt\AppData\Roaming\Defold/_crash.dmp

```

(1.2.181, Windows 10, GTX1060)

---

<div class="post-metadata">

**Author:** ![Mathias\_Westerdahl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/mathias_westerdahl/32/228_2.png) [@Mathias\_Westerdahl](https://forum.defold.com/u/Mathias_Westerdahl)\
**Post date:** [April 18, 2021, 6:22am UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/18 "2021-04-18T06:22:35Z")

</div>

Perhaps it’s related to OpenGL version? (I’m guessing here)  
Which version did you get? (enable `display.device_info` in game.project)

---

<div class="post-metadata">

**Author:** ![jhonny.goransson](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/jhonny.goransson/32/3864_2.png) [@jhonny.goransson](https://forum.defold.com/u/jhonny.goransson)\
**Post date:** [April 18, 2021, 3:44pm UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/19 "2021-04-18T15:44:26Z")

</div>

Yeah something must have changed since I made that example, I can take a look during the week aswell!

---

<div class="post-metadata">

**Author:** ![jhonny.goransson](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/jhonny.goransson/32/3864_2.png) [@jhonny.goransson](https://forum.defold.com/u/jhonny.goransson)\
**Post date:** [April 19, 2021, 7:48am UTC](https://forum.defold.com/t/simple-shadow-mapping-example/47628/20 "2021-04-19T07:48:54Z")

</div>

Alright I think I’ve patched that example here:

> **[my-public-defold-examples/shadow-mapping-cascades at master ·...](https://github.com/Jhonnyg/my-public-defold-examples/tree/master/shadow-mapping-cascades)**
>
> Contribute to Jhonnyg/my-public-defold-examples development by creating an account on GitHub.

(Note that I’ve moved/forked the examples repo into my private account from my king account)

[Next page](https://forum.defold.com/t/simple-shadow-mapping-example/47628.md?page=2)
