From 83e45996f4479fdeedd4ed5c18140f67a2c0e58e Mon Sep 17 00:00:00 2001 From: Matt Pharr Date: Sun, 17 Sep 2023 07:06:27 +0100 Subject: [PATCH] Fix bug in NormalMap() When computing the local basis, it's important to keep the +x axis consistently oriented with dpdu. Fixes #381. --- src/pbrt/materials.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pbrt/materials.h b/src/pbrt/materials.h index 2665c4a46..5cc1df28c 100644 --- a/src/pbrt/materials.h +++ b/src/pbrt/materials.h @@ -95,7 +95,7 @@ inline PBRT_CPU_GPU void NormalMap(const Image &normalMap, ns = Normalize(ns); // Transform tangent-space normal to rendering space - Frame frame = Frame::FromZ(ctx.shading.n); + Frame frame = Frame::FromXZ(Normalize(ctx.shading.dpdu), Vector3f(ctx.shading.n)); ns = frame.FromLocal(ns); // Find $\dpdu$ and $\dpdv$ that give shading normal