Physically Based Rendering¶
float3 color = (1-metallic) * diffuse + metallic * specular;
ということでよさそう。
Diffuse¶
正規化Lambert¶
https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/glTF-WebGL-PBR/shaders/pbr-frag.glsl
// Basic Lambertian diffuse
// Implementation from Lambert's Photometria https://archive.org/details/lambertsphotome00lambgoog
// See also [1], Equation 1
vec3 diffuse(PBRInfo pbrInputs)
{
return pbrInputs.diffuseColor / M_PI;
}
// irradiance x BRDF
dot(S, N) * diffuse(pbrInputs);
という具合にに PI
で割る。
正規化Lambert
というらしい。
Albedo¶
ここで pbrInputs.diffuseColor
が color
とちょっと違うので Albedo
と名付けたぽい?
sRGB
でなくてlinear
で扱うPI で割ることをあらかじめ加味しておく
Specular: 鏡面反射モデル¶
D |
G |
F |
|
---|---|---|---|