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


effect IBL Shadows dx11 PBR
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

Update 2.0:

  • Completely overhauled material and light setup powered by custom VL datatypes
  • New shadow mapping techniques: Exponential Shadow Maps (ESM) and Postfiltered VSM with varying penumbra size
  • Integrated volumetrics
  • Lot's of fixes and performance improvements

Put the contribution into packs. Check out SuperPhysical help patch for usage scenario.
Compatible from Beta 36!
All feedback welcome! Have fun!



SuperPhysical 2.01.zip
04.02.18 [17:29 UTC] by mburk | 835 downloads
compatibility with alpha 35.18
Show 7 older revisions

Older Revisions

SuperPhysical 2.0.zip
28.01.18 [23:04 UTC] by mburk | 165 downloads
SuperPhysical 1.01.zip
30.06.17 [18:11 UTC] by mburk | 635 downloads
bugfix release
22.06.17 [18:18 UTC] by mburk | 170 downloads
08.04.17 [12:00 UTC] by mburk | 357 downloads
Bugfixing / Refactoring Lights Module
28.03.17 [22:52 UTC] by mburk | 115 downloads
new model for light blending; noTile option
SuperPhong 1.1.zip
17.02.17 [17:59 UTC] by mburk | 319 downloads
added VSM Shadows, fixed some spreading issues, fixed alpha
06.11.16 [20:55 UTC] by mburk | 448 downloads

Noir 06/11/2016 - 23:21

Cool man

motzi 07/11/2016 - 23:44

this is beautiful! thanks a lot!

screamer 08/11/2016 - 16:13

wow, amazing shader, well done ;)

boplbopl 12/11/2016 - 23:05

very cool!

catweasel 22/11/2016 - 19:18


evvvvil 06/12/2016 - 02:50

that's fucking sick bruh!

seltzdesign 12/12/2016 - 11: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 - 14: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 - 19:21

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

mburk 09/02/2017 - 20: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 - 21:57

Ok, cheers. Looking forward to new version!

vux 09/02/2017 - 23:52

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

mburk 09/02/2017 - 23:58

Cool, thanks for the quick fix!

u7angel 17/02/2017 - 21:22


graphicuserinterface 18/02/2017 - 08:49


Noir 18/02/2017 - 09:50


matka 20/02/2017 - 19:38

massive! thanks

robotanton 17/03/2017 - 15:36

Thank you!

mburk 28/03/2017 - 21: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 - 12:10

Thanks, great work!

eno 10/04/2017 - 16:43

This is a properly shaded teapot.

xxxlalala 27/05/2017 - 20:06

i am so happy i found this :)

mburk 29/05/2017 - 09:26

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

nodeforum 22/06/2017 - 18:19


Noir 22/06/2017 - 20:45


hrovac 23/06/2017 - 07: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 - 08:13

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

idab 27/06/2017 - 10: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 - 13: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 - 08:45

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

letoast 02/07/2017 - 23: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 - 17: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 - 19:38

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

mburk 10/07/2017 - 10: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 - 13: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 - 10: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 - 16: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 - 10: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.

guest 10/08/2017 - 11:46

Hello guys,

A link to my question on the forum about using multiple assets in SuperPhysical


guest 05/09/2017 - 17:34

First attempt to make an Assets Manager for SuperPhysical here:

StiX 08/11/2017 - 12:35

i really miss emission in here, i am making it by blending another pass into the pipeline but it would be great to have it as a base feature

mburk 08/11/2017 - 17:09

Good call, already implemented this in my dev version.

StiX 17/11/2017 - 15:57

thoughts and prayers with you!

seltzdesign 19/12/2017 - 15:25

Trying to understand the IAtt values in Superphysical and why white lights increase saturation and not brightness: https://discourse.vvvv.org/t/superphysical-lights-increase-saturation-not-brightness/15940

veevee 29/01/2018 - 12:44

Hi Mr. Burk, awesome stuff, really! Wouldn't it make sense to also save a name for each material in the new VL (yay!) object? In case you have a lot of materials that you want to use in different places..

mburk 29/01/2018 - 18:50

thanks and yes, that's definitely on my list. will be especially important for instancing to have a name or an ID.

matka 29/01/2018 - 19:34

Wow, mburk, the update looks amazing and comes right in time. Thanks for your massive work!

seltzdesign 31/01/2018 - 13:55

mburk the update looks great and from the new image I can tell that you solved the saturation issue already. Will give it a spin and integrate into our patch once I get the chance. Just instancing left now, but seems like that's on the horizon.

tgd 02/02/2018 - 20:47

for me this works with vvvv_50alpha35.15_x64 but i get a red error about craftlie when trying to start with the newest alpha vvvv_50alpha35.16_x64. looks great btw! cheers :)


tonfilm 02/02/2018 - 23:27

hello @tgd and @mburk

the nodes seem to reference the old CraftLie ones, they have moved into the CoreLib and are now called ToBufferDescription. Please update accordingly, thx!

andresc4 03/02/2018 - 03:09

@tgd try a clean install with beta36-release-candidate
I had the same problem, that solved

mburk 04/02/2018 - 17:30

uploaded the fix for alpha 35.18

tonfilm 04/02/2018 - 18:27

great, thanks a lot!

StiX 05/02/2018 - 12:48

i cant run it, its crashing every time i try to open help file 35.8, clean install not helping

mburk 05/02/2018 - 14:50

hey @StiX. it's only working with latest alpha because of new VL features atm.

StiX 05/02/2018 - 15:17

ah i overlooked that, runs maxed 120 even with volumetrics and multiple lights, really good

andresc4 07/02/2018 - 14:43

I have this problem that is not contribution related, but maybe you can help me out
Im would like to animate the light rotation as if they were a DMX moving head, but the rotation point of the light is not the light source
Its rotating from the X, what would be the best way to fix that ?

mburk 08/02/2018 - 15:50

I think you have to set distance to 0. Can't check atm.

andresc4 19/02/2018 - 04:54

@mburk you were right thanks
Did you saw the GGX shader that flux posted here https://discourse.vvvv.org/t/community-coding-the-new-vvvv-standard-shader/15188/34 ?
That way of dealing with Ligths buffers looks awesome.
Will you add DOF on the next release?

nilsfrid 20/02/2018 - 13:56

Thanks! Awesome!

Johannes Merkt 25/04/2018 - 15:05

Thanks for this great Shader!

Unfortunatly I have a Problem with it. Every Light Source casts a black dot on the my objects.


It always occures in the center of the light spot. How can I fix this?

mburk 27/04/2018 - 14:53

Are you using a custom model? Looks like the normals are inverted.

Johannes Merkt 03/05/2018 - 14:55

No, this is the Default Sphere out of vvvv, but with custom models i have the same Problem too, no matter what i Change with the normals.

mburk 04/05/2018 - 20:00

strange..can't reproduce this here. make sure to use the latest version of the contribution from github. if the problem persists, please open a forum thread and share your patch.

io 06/05/2018 - 13:05

Hallo, would it be possible to use a Dynamic Buffers to feed the transformations of the objects instead of CPU transforms?

nissidis 06/05/2018 - 17:58

@io absolutely, combine this great contr with another great contr known as "instance noodles" ;)

mburk 06/05/2018 - 18:15

@io the easiest way would probably be to use instance noodles, do all the geometry magic and then use "Merge Geometry" to create a single mesh out of it. Deferred version of superphysical that also has a module for instancing is coming up, but using instance noodles like that will probably also do the job.

io 06/05/2018 - 18:50

Yes, ok I was taking the wrong approach (trying to work with the transformation input to the shader), of course it is way easier to multiply the geometry and then feed it, thanks.

KT100_ 23/05/2018 - 11:34
Red nodes
Preview window

I got these red nodes. Is there a way for fixing them? Also my preview window is like tinted grey. I'm working on 50beta36_x64 version.

mburk 24/05/2018 - 10:34

Hi, seems like the volumetrics isn't quite working for you. That's probably why the preview looks tinted..the blend node is just adding white. You could just not use the volumetrics and everything shoudld be fine. You can also try the newest version on github and see if that fixes it for you. Proper update to upload here is still in the making..


io 05/06/2018 - 16:48

Ok now that I have merged the geometries, how do can I set a single color per instance? Got lost there..

mburk 05/06/2018 - 19:46

hey. that's not really possible in that workflow. once you have merged it, you can only assign a single material. you could check out the WIP deferred version with instancing on github. but it's not quite ready for release yet. will upload it here, as soon as it is usable. that version will allow you to assign different materials to single instances.

Radion 24/06/2018 - 19:56

My problems already start by opening fbx and collada files in the SuperPhysical help patch. The geometry always seems to be invisible. The only change happens in the background from file to file it gets brighter oder darker. (The geometry was created in blender and works fine with the dx9 geometry setup)

mburk 25/06/2018 - 09:14

hey @Radion, please open a forum thread and share your patch and fbx file if possible. Generally there is no show-stopper here. I'm using imported geometry all the time.

io 04/07/2018 - 17:57

I have tried https://github.com/michael-burk/SuperPhysical/tree/Deferred , spreading either ALbedo Color or Textures (thus creating multiple materials) does not allow to index the color of each instance. Is that the right approach?

mburk 04/07/2018 - 22:00

hey. have a look in the subpatch "GBUFFER - from instanced geometry". there you will find a material ID buffer, which specifies what material to use per instance. sorry - not really documented at all - yet. The material IDs buffer VL module is just an experimental feature at the moment. it allows you to select a material in the material visualizer when pressing "m" and then applying that material to any object in the active renderer by again pressing "m". but as I said, that's just some playful experimentation..just use the buffer directly.

mburk 04/07/2018 - 22:03

Also make sure to use this branch: https://github.com/michael-burk/SuperPhysical/tree/Deferred+Forward

io 05/07/2018 - 15:52

Which version of DX11 are you using?

mburk 05/07/2018 - 15:53

latest one. please open forum thread, that would make discussion easier.

ggml 07/08/2018 - 12:53

@mburk regarding the deferred branch, is the getslice(texturearray to array) somewhere to be found ? thanks

mburk 07/08/2018 - 13:36

hey. it should be in the latest dx11 version.

anonymous user login


~2d ago

ravazquez: @catweasel it was late when I wrote that, it's probably not the case, will test and report

~2d ago

catweasel: @ravazquez in separate instances of vvvv? Awesome if so!

~4d ago

ravazquez: @karistouf you can use my Global S&R contribution for this purpose

~5d ago

joreg: yes, no S/R. OSC is one way to communicate btw. instnces.

~5d ago

karistouf: @joreg: between 2 differents instances of VVVV on same computer,no S and R (values) possible ? only OSC way ?

~7d ago

tonfilm: glad to share the second update on the #vl #xenko #3d library: #vvvv #visualprogramming #creativecoding vl-xenko-3d-engine-update-2

~9d ago

joreg: rather toot then tweet? follow the hype and us on mastodon: https://mastodon.xyz/@vvvv #vvvv

~9d ago

ggml: any recommendation for renting visuals-grade pcs in berlin ?

~9d ago

metrowave: Structure Sensor Core now for Windows: https://store.structure.io/buy/structure-core cool features, could be useful in vvvv