KhronosGroup / 3DC-Asset-Creation

Asset creation guidelines and workflows to streamline the creation of 3D digital content for use in e-commerce
Other
73 stars 16 forks source link

How reduce reflection in PBR materials? #4

Open echadwick-artist opened 4 years ago

echadwick-artist commented 4 years ago

This question was asked recently: "How do I kill reflection in a PBR material?"

You can't. If you increase Roughness in a dieletric, it will appear less reflective. However, zero reflection is mathematically inaccurate. In a PBR system all energy must be conserved. If a surface was zero-reflective, where would the incoming light energy go? It could possibly be expressed as heat, but I don't think the PBR material takes this into account; it's only visual,

There are exceptions such as Vantablack (nano-tech material with 99.97% absorption). For that you would use a non-PBR material.

We should probably add some clarification about this to the Guidelines, perhaps in the Roughness section.

Thoughts?

vanlicht commented 4 years ago

That's a good idea to point that out! There are several times I ran into this issue too. Does it mean if we want the zero-reflective, then will have to use the KHR unlit extension then?

echadwick-artist commented 4 years ago

If you need zero reflectance, then most likely it's not physically-based any more. So a PBR material wouldn't work.

Can you share an example e-commerce material that requires zero reflection? Vantablack is really the only example I can think of.

vanlicht commented 4 years ago

Here's an example using cards and say make the leafy part with PBR, but want to make sure the rest cutouts are clean. In glb it seems works better but in usdz, there's a "film" that can't seem to be removed.

leaf.zip

Image from iOS IMG_20201106_103526

echadwick-artist commented 4 years ago

Ah. That seems to be the fault of Apple's renderer and/or shader then.

You're using Alpha Test here, which should cut out the clear bits completely.

Even if you used Alpha Blend you should still get complete transparency where the Base Color alpha is zero-black.