-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[PBR extension] Additional maps (normal maps, displacement, ...?) #699
Comments
Yeah it's clearly missing, why not adding a normal and bump channel ? I guess we only need to decide if we add extra information like normal map coordinate (DX/GL) or if the coordinates must be fixed. |
Agreed - maybe also information about the space of the normals... could make sense to allow for object space and tangent space? |
yeah maybe, I dont see a lot of usage or request for this on our plateform, but it's maybe safer to add this information |
As usual, I'd say "do as three.js does", and they have these - normal maps seem like a minimum since they've been in use well over a decade in interactive apps. Heck, I get requests to add normal maps and specular maps to Mineways, of all things - people do use these. Firms such as Simplygon use these in order to make content work on the Hololens, for example, see this video, they use a normal map to capture fine detail instead of a zillion polys. Three.js goes wild in this area: normal/bump, displacement (vertex shifts), roughness, metalness, alpha, and the IBL (environment map). I do hope you're planning on IBL, that's a must (@cedricpinson I suspect will agree, as Sketchfab uses these a lot). Lighting doesn't get covered in the PBR spec, and unfortunately lighting matters to materials. Again, I'd just steal the three.js model, maybe lopping off some of the more obscure textures for now.
I agree, though have limited knowledge in this area. By the "WW3JS do?" principle, I don't see it there, so let's not include it here. |
Ok here some stats on sketchfab: PBR workflow usage: Channels usage: |
Agreed. Converters can also generate tangent-space versions of input maps in object space, (although that means they will have to generate tangents and binormals on the way). So, let's stick to tangent-space normal maps for now. Looking at the listed maps (here), I am currently wondering if we really The other maps that are mentioned, 'normals', 'emissive' and 'AO', should probably be added, as it seems artists frequently use them (especially AO). I am wondering a bit about 'normals' vs. 'bump': could we just support 'normals' and make tools generate a normal map for a given bump map? The "WW3JSD" approach suggests to support bump maps (https://threejs.org/examples/webgl_materials_bumpmap.html), but it would be nice to facilitate implementation of the PBR spec, given that normal maps / bump maps could be efficiently reduced to a "normal maps only" representation in a conversion tool (similar to object space / tangent space normal maps that would be reduced to a "tangent space only" representation). |
@FslNopper You mentioned f0_metal and f0_nonMetal (#696 (comment)). Can we put both into a single texture and simply use the "metalness" information to decide how those values should be interpreted? |
Bump maps are necessary , because they can be used for lighrning or displacement , so a normal map only representation is not posible |
The f0_metal and f0_nonMetal is an idea to define both the metal and glossy model parameters in one single PBR material. But now I think this would make things too complicated. Now, I just recommend to have two separate PBR materials - both as an extension |
I agree, we should have bump maps as well. But I think we should not put them into PBR directly. So, e.g. phong with geometry would be possible as well. |
I am aware of that! My point is just "if they are mostly used for lighting, to have something very similar to a normal map (compare the threejs example), we may actually cover 95% of the use cases without requiring to support bump maps" |
That is correct, and I believe that we have to make a tradeoff here: The same does actually apply to AO. This is also not a core concept related to PBR / BRDF theory. We already pointed out that PBR support is basically worthless if your renderer does not support normal maps. Therefore, if we now create a separate extension for normal maps / bump maps, it would be interesting to see if we could make the PBR extension require that the normal map / bump map extension is supported as well. This way, you would never get PBR without guaranteed support for normal / bump maps, but you would always be able to use normal maps / bump maps without PBR, if you have any use for that. @pjcozzi Would that be aligned with the basic concepts of glTF? |
The "geometry" parameters are optional for Phong and required for PBR. Maybe we should follow this approach. |
Regarding F0, quoting the current spec draft: Metal-Roughness:
Specular-Glossiness:
We do not employ an explicit F0 texture right now. @jeffdr @cedricpinson Would that work for you? |
I think the original idea was, from where F0 is gathered: If it is the metallic workflow F0 is "sampled" 0.04 for dielectrics and sampled from the base color map for metallic. Furthermore, for the Glossy workflow, F0 would be be sampled from the specular map. This would allow both models as one PBR, but there would be a (complicated) conversion overhead in the rendering engine. So, I agree not to have an explicit F0 texture and keep it like it is. |
Yes, that was the idea - since the typical deviation of F0 among dielectrics seems to marginal (according to the allegorithmic PBR guide, values typically vary between 0.02 and 0.05, also compare the Unity blog post) |
@mlimper Typically if the user provide this data we will want to use it, but it will be out of the spec. So it's probably better to describe extra optionals channels in the specs and recommend how to use it. For this case if we find F0 we use it, else we use 4% Hope it makes sense |
Yes in metalness "mode" you can usually get by without an F0 texture; that just sorta provides an extra degree of control for dielectric materials which is often not needed. |
Well, usually we will try to keep the spec really limited to the parts that are absolutely necessary, to keep the burden on a spec-conformant implementation as low as possible. In this specific case, it might be OK to have an F0 texture for the dielectric materials as an optional component, since it seems that - even if an implementation would ignore that one - the rendered results wouldn't look too different. Just to be clear - that optional texture would only be used to read the F0 values for the non-metallic parts, correct? For the metallic parts, we would still use the base color map. |
Yes the values in F0 texture are only used for non metallic parts |
Has anyone checked these additional proposed channels against Unity and Unreal specs? |
We need to check if / how bump maps / normal maps could be integrated.
The text was updated successfully, but these errors were encountered: