KhronosGroup/glTF

Converting Metallic Roughness and Albedo to traditional DiffSpecNorm?

VinnyVicious opened this issue · 6 comments

I'm working on loading gltf models on an older engine that does not support PBR rendering, and I've been struggling on how to use the following texture maps:

https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/DamagedHelmet/glTF

I undestand that Diffuse could be the result of Albedo + AO with a "burn" blend mode, but what about metalRoughness? How can that be used as a traditional grayscale specular map?

There is an appendix in an (archived!) extension that might be helpful. It points to some utility functions that are supposed to do this conversion. (I won't be able to help any further, but maybe the implementors or PBR experts will chime in here).

I don't know what DiffSpecNorm means, but the appendix that @javagl pointed to is for a different PBR model with specular/glossiness maps. Since you say this older engine doesn't support PBR rendering, it will likely not translate well. That said, if you translate baseColor/metallic+roughness into diffuse/specular+glossiness as written in the code from the appendix, it will at least be closer to a traditional model (e.g., BlinnPhong).

Here is a live version of the appendix for Babylon.js: https://bghgary.github.io/glTF/convert-between-workflows-bjs/

Sorry for the lack of detail. By DiffSpecNormal, I mean the traditional old-gen workflow, popular in UDK, Unreal Engine 2, Unity 2, id Tech 4 and others:

image

Sorry, without documentation on what lighting model this uses, I don't know if it's clearer :-/

This article might be helpful. https://marmoset.co/posts/pbr-texture-conversion/#metaltospec

However as bhgary indicated, pre-PBR lighting models are likely not easy to convert to.

As I recall there was often an avoidance of performing lighting calculations in linear color space, which led artists to overcompensate with blue specular textures, to achieve neutral specular response on skin tones.

There was also no standardization for lighting values, leading to ad-hoc texture values based on specific lighting conditions.