shithub: 3dee

Download patch

ref: 27724b010694549f17cad50158cf73ca035e9cad
parent: ecdeed125c0fe00b6a90f85db44ad37f0913e992
author: rodri <rgl@antares-labs.eu>
date: Thu Jul 4 11:11:40 EDT 2024

med,vis: fix normal map sampling.

recent changes in libgraphics assume every texture
resides in an sRGB color space, which is not the
case for material resources like normals.

--- a/med.c
+++ b/med.c
@@ -283,9 +283,9 @@
 {
 	Color tc, c;
 
-	if(sp->v.mtl != nil && sp->v.mtl->diffusemap != nil && sp->v.uv.w != 0){
+	if(sp->v.mtl != nil && sp->v.mtl->diffusemap != nil && sp->v.uv.w != 0)
 		tc = texture(sp->v.mtl->diffusemap, sp->v.uv, tsampler);
-	}else if(sp->su->entity->mdl->tex != nil && sp->v.uv.w != 0)
+	else if(sp->su->entity->mdl->tex != nil && sp->v.uv.w != 0)
 		tc = texture(sp->su->entity->mdl->tex, sp->v.uv, tsampler);
 	else
 		tc = Pt3(1,1,1,1);
@@ -358,6 +358,7 @@
 	else{
 		/* TODO implement this on the VS instead and apply Gram-Schmidt here */
 		n = texture(sp->v.mtl->normalmap, sp->v.uv, neartexsampler);
+		n = linear2srgb(n);	/* TODO not all textures require color space conversion */
 		n = normvec3(subpt3(mulpt3(n, 2), Vec3(1,1,1)));
 
 		TBN.p = Pt3(0,0,0,1);
--- a/vis.c
+++ b/vis.c
@@ -161,9 +161,9 @@
 {
 	Color tc, c;
 
-	if(sp->v.mtl != nil && sp->v.mtl->diffusemap != nil && sp->v.uv.w != 0){
+	if(sp->v.mtl != nil && sp->v.mtl->diffusemap != nil && sp->v.uv.w != 0)
 		tc = texture(sp->v.mtl->diffusemap, sp->v.uv, tsampler);
-	}else if(sp->su->entity->mdl->tex != nil && sp->v.uv.w != 0)
+	else if(sp->su->entity->mdl->tex != nil && sp->v.uv.w != 0)
 		tc = texture(sp->su->entity->mdl->tex, sp->v.uv, tsampler);
 	else
 		tc = Pt3(1,1,1,1);
@@ -240,6 +240,7 @@
 	else{
 		/* TODO implement this on the VS instead and apply Gram-Schmidt here */
 		n = texture(sp->v.mtl->normalmap, sp->v.uv, neartexsampler);
+		n = linear2srgb(n);	/* TODO not all textures require color space conversion */
 		n = normvec3(subpt3(mulpt3(n, 2), Vec3(1,1,1)));
 
 		TBN.p = Pt3(0,0,0,1);