» SuperPhysical
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.


effect Shadows PBR IBL dx11
Credits: vux, dottore, catweasel


SuperPhysical is a forward rendering setup and the successor of SuperPhong.
It features cook-torrance shading, physically based rendering and image based lighting.
The implementation is mainly based onhttps://learnopengl.com/#!PBR/Theory
"focusing on the PBR approach as originally explored by Disney and adopted for real-time display by Epic Games".

Some Features:

  • Physical Based Rendering
  • Metalness workflow compatible to Substance Designer etc.
  • Image Based Lighting
  • VSM Shadows
  • Image Based Refraction
  • Parrallax Occlusion Mapping


  • Buffer handling and data handling on the cpu side (in the modules) have great potential for optimization
  • VSM shadow alpha support not working in this revision

This revision has a lot of assets for the diffetent usage scenarios. Might need a different approach to minimize download size.

This version will be used in the workshop at NODE 17.

All feedback welcome! Have fun!


SuperPhysical 1.01.zip
30.06.17 [18:11 UTC] by mburk | 165 downloads
bugfix release
Show 5 older revisions

Older Revisions

22.06.17 [18:18 UTC] by mburk | 123 downloads
08.04.17 [12:00 UTC] by mburk | 283 downloads
Bugfixing / Refactoring Lights Module
28.03.17 [22:52 UTC] by mburk | 73 downloads
new model for light blending; noTile option
SuperPhong 1.1.zip
17.02.17 [17:59 UTC] by mburk | 261 downloads
added VSM Shadows, fixed some spreading issues, fixed alpha
06.11.16 [20:55 UTC] by mburk | 383 downloads

Noir 07/11/2016 - 00:21

Cool man

motzi 08/11/2016 - 00:44

this is beautiful! thanks a lot!

screamer 08/11/2016 - 17:13

wow, amazing shader, well done ;)

boplbopl 13/11/2016 - 00:05

very cool!

catweasel 22/11/2016 - 20:18


evvvvil 06/12/2016 - 03:50

that's fucking sick bruh!

seltzdesign 12/12/2016 - 12:32

Really like it! Is there a way to spread the texture transform? Right now it is always using the first slice of transforms for all instances of an object.

mburk 12/12/2016 - 15:58

the texture transform is currently not spreadable as it should be. will fix this in next update. for now you could use a TransformTexture effect to scale the textures per instance.

matka 09/02/2017 - 20:21

Does this work in 50beta35 64bit or did I miss something on the install?

mburk 09/02/2017 - 21:32

Should be working in 50beta35. The problem is DX11 1.0, because all Dynamic Buffers are set to "Dynamic" now. If you set them back to "Default" in the Inspector it shoud be working. There is a whole bunch in the light module.
Also, new version of Superphong will be out soon.

matka 09/02/2017 - 22:57

Ok, cheers. Looking forward to new version!

vux 10/02/2017 - 00:52

As a side note this has been fixed in 1.0.1 (which is in contrib page already)

mburk 10/02/2017 - 00:58

Cool, thanks for the quick fix!

u7angel 17/02/2017 - 22:22


graphicuserinterface 18/02/2017 - 09:49


Noir 18/02/2017 - 10:50


matka 20/02/2017 - 20:38

massive! thanks

robotanton 17/03/2017 - 16:36

Thank you!

mburk 28/03/2017 - 22:58

Version 1.2
The new version has a couple of changes. The light blending has been overhauled a bit. Now all the lights - image based lighting and phong lights - are treated the same way and reflections are blended with the fresnel term. This means, there is no RimLight anymore, but Global Reflection Color, Global Diffuse Color and Material Color. Also there is only one set of fresnel values for everything reflective. See girlpower for how it works. This should feel a lot more natural.
Also fixed some bugs and spreading problems.
Also new: No tiling mode. This avoids strong repitition of textures by using this code by Inigo Quilez: http://www.iquilezles.org/www/articles/texturerepetition/texturerepetition.htm


No Tiling
matka 08/04/2017 - 13:10

Thanks, great work!

eno 10/04/2017 - 17:43

This is a properly shaded teapot.

xxxlalala 27/05/2017 - 21:06

i am so happy i found this :)

mburk 29/05/2017 - 10:26

Stay tuned for proper PBR update (Unreal Engine implementaion) with cook-torrance, parallax occlusion mapping, you name it..

nodeforum 22/06/2017 - 19:19


Noir 22/06/2017 - 21:45


hrovac 23/06/2017 - 08:23

great thx!!

small Thing:
i have to use an old Version (34.2) - and maybe that is why in the directionalLight-module is a red node(select transform is missing..) what needs to be connected to have it working? - it is connected to the ViewProjection Shadow.

mburk 23/06/2017 - 09:13

Hi hrovac,
simply replace the node with a Select(Node). This should be it!

idab 27/06/2017 - 11:30

Great contribution guys!

One question from a shader primer: is there a way to handle the alpha of the shader? I want to hide/make visible some geometries.


mburk 29/06/2017 - 14:41

Hi idab,
the alpha channel got a bit neglected.
I will bring all features back as soon as possible.
It should all work same as the standard shaders then.

letoast 01/07/2017 - 09:45

wooooo!!! this is exactly what i was looking for!!

letoast 03/07/2017 - 00:37

Noticed a problem with the lighting function - it behaves very badly on low poly flat geometry, you can notice the warping as the highlight goes from polygon to polygon.

low poly:

low poly wire:

high poly:

high poly wire:

mburk 04/07/2017 - 18:22

Hi letoast, that's a known limitation. I think it's due to calculating some stuff per vertex. As this improves performance I might not change this, but thanks for reporting!

andresc4 08/07/2017 - 20:38

Wow men this looks amazing!
Can I use 360 HDR images for global ilumination ?

mburk 10/07/2017 - 11:46

Well, you can use them for the image based lighting, yes. I would recommend using this toolhttps://github.com/dariomanesku/cmftStudio for creating Radiance and Irradiance cube maps. See the IBL example for usage scenario.

letoast 18/07/2017 - 14:00

Is there something wrong with the metallic part of the lighting function, because setting the "metallic" to "1.0" and "Global Reflection Color" even to "0.01" of a Value in HSV picker, sets the reflection color to a constantly white lit.
Like this:

mburk 19/07/2017 - 11:07

Yep, there is something wrong - I explained this in the workshop also:
The "Global Reflection Color" is not really a correct part of the lighting equation, but somethin additional. i didn't combine this correctly yet, so that's were this bug comes from. If you do your lighting only with IBL and dynamic lights everything should be correct.

If you are brave enough go to superphysical.tfx and replace Line 271 with this Line:

IBL += (saturate(GlobalReflectionColor.rgb * (kS * envBRDF.x + envBRDF.y)) * iridescenceColor);

This will also be fixed in next release.

letoast 19/07/2017 - 17:29

Oh lord, I never thought it would be that simple. I wanted to fix it so at first I started replacing variables one by one with constants to see what each one does. Then I was thinking that something might be wrong in the CookTorrance implementation, so I cross referenced an opengl implementation of it with yours, but I saw yours was ok and after that I kind of gave up... Didn't know it was the kD causing the problems, but going through all of the code out of nothing, just to remember what all of the variables stand for was also not something I was prepared to do :D

As far as I understood it you just wanted to colorize the cubemap with the global reflection color?

Thanks for the quick reply, though!

mburk 20/07/2017 - 11:52

Yeah, sorry for sending you on a bughunt there.
Actually this fix works for now, but is not totally correct, as any reflections of a metal surface should be colored as the material is. So e.g. only blue is reflected. I will integrate this in the next version.

anonymous user login


~2h ago

mrboni: how to convert between shared memory name (ie SharedMemory ex9) and handle (dx11 FromSharedTexture) ?

~8h ago

cyper: moin v4 friends i would like to take part at the V4 summercource i found a sponder , ,so pls let me know, where to subcribe. lg cyper

~10h ago

joreg: @okvrdz, ah..i didn't know that..please try again now!

~12h ago

okvrdz: @joreg (See message below)

~12h ago

okvrdz: When sending a message to a user using "send message" I get "You are not a verified user yet, please come back later".

~1d ago

joreg: @okvrdz where exactly do you get "not verified"?

~1d ago

okvrdz: How long does it take to verify a new user? I cannot contact anybody because i'm not "verified" :'(

~2d ago

mino: interview to Sebastian Oschatz at node17. about MESO, vvvv, and more! https://soundcloud.com/takramcast