[Bf-committers] Bump mapping computation issue
Ton Roosendaal
ton at blender.org
Mon Dec 6 09:56:32 CET 2004
Hi,
I will include the UV textures of course. I've only tested orco's. :)
And yes, all the texture normal code in Blender uses derivates.
-Ton-
On 6 Dec, 2004, at 1:52, Stephane SOPPERA wrote:
> Ton Roosendaal wrote:
>
>> Hi,
>>
>> Here's some results;
>>
>> ...
>>
>> Commit follows.
>
> Ton,
>
> Have you commited all your modifications?
> The problem is still present, here is a new video I've made with the
> last CVS version:
> http://perso.wanadoo.fr/stephane.soppera/blender/bump_bug/videos/
> bug_bump_p235.avi
> As you can see at some camera angles, (ie view angles, since camera is
> orthographic), bump disappears, and it is flipped after that (look at
> the diagonal, its colors switches from light to dark).
>
> I have had a look to what you modified and I don't understand what
> should have corrected the problem in case of UV coordinates defined
> with UV editor. The section where you apply a transformation is only
> executed if:
> mtex->texco==TEXCO_ORCO
> That's typically not the case for other UV mapping types, such as UV
> editor for example, isn't it?
> (In my test, I use an UVMapped rectangle)
>
> The solution used in 3DSMax for bumpmapping is that each texture has a
> function that compute the modification to apply to the normal. To
> compute this modification, vectors dPdu and dPdv (computed as shown in
> the script I put in my last mail) are given, expressed in an
> unspecified coordinates system, and are used by textures to compute a
> vector that will be added to the normal to compute the new normal.
> So if I'm not wrong, textures in blender already returns a vector that
> contains the coordinates in texture space of the vector to add to the
> normal:
>
> tex->nor[0]= (val1-val2);
> tex->nor[1]= (val1-val3);
>
> All that is needed is to compute dPdu and dPdv, and we will have:
> normal[0]=normal[0]+tex->nor[0]*dPdu[0]+tex->nor[1]*dPdv[0]
> normal[1]=normal[1]+tex->nor[0]*dPdu[1]+tex->nor[1]*dPdv[1]
> normal[2]=normal[2]+tex->nor[0]*dPdu[2]+tex->nor[1]*dPdv[2]
>
> Where dPdu and dPdv, considered constant on each triangle, are
> computed by (dPdu, dPdv)=computeTangentSpaceForTriangleOpt(...), with:
>
> def computeTangentSpaceForTriangleOpt(p0, p1, p2, uv0, uv1, uv2):
> (x0, y0, z0)=p0
> (x1, y1, z1)=p1
> (x2, y2, z2)=p2
> (s0, t0)=uv0
> (s1, t1)=uv1
> (s2, t2)=uv2
>
> s01=s0-s1
> s02=s0-s2
> t01=t0-t1
> t02=t0-t2
> x02=x0-x2
> x01=x0-x1
> y02=y0-y2
> y01=y0-y1
> z02=z0-z2
> z01=z0-z1
>
> a=s01*t02-s02*t01
> b0=t01*x02-t02*x01
> c0=-s01*x02+s02*x01
>
> b1=t01*y02-t02*y01
> c1=-s01*y02+s02*y01
>
> b2=t01*z02-t02*z01
> c2=-s01*z02+s02*z01
>
> tangent =(-b0/a, -b1/a, -b2/a)
> binormal=(-c0/a, -c1/a, -c2/a)
> return (normalize(tangent), normalize(binormal))
>
> Sorry if I misunderstood what you've done.
>
> Thanks,
> Stephane
>
> --
> Stephane SOPPERA
> http://perso.wanadoo.fr/stephane.soppera
>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at projects.blender.org
> http://projects.blender.org/mailman/listinfo/bf-committers
>
>
------------------------------------------------------------------------
--
Ton Roosendaal Blender Foundation ton at blender.org
http://www.blender.org
More information about the Bf-committers
mailing list