[Bf-committers] Blender tangent space calculation

Eugene Minov minov.eug at gmail.com
Fri Nov 18 19:48:24 CET 2011


Hi!

I think that I've finished this.

>
> >Don't forget to look in do_multires_bake() in object_bake.c
> >It shows you how to add the tangent layer:
>

Yes, I've figured out how to create DerivedMesh object by Mesh object.
And then I've created the tangent layer in this way.

>
> >// get pointer to the already generated tangents
> >pvtangent= DM_get_face_data_layer(dm, CD_TANGENT);
>

But if mesh don't have a tex-coords, 'pvtangent' anyway is NULL
For this case I weld normals only.

I tried to export a mesh with tangents and normals into my app
and seems that normal map looking correct.

const int iGetNrVerts= data->mface[face_num].v4!=0 ? 4 : 3;

On Thu, Nov 17, 2011 at 8:33 PM, Morten Mikkelsen <mikkelsen7 at gmail.com>wrote:

> And flush_pixel() shows you how to traverse the buffer.
> Essentially the way it works in blender is there's always 4 of them
> per face whether it's a triangle or a quad.
>
>
>
>
>
> On Thu, Nov 17, 2011 at 9:31 AM, Morten Mikkelsen <mikkelsen7 at gmail.com
> >wrote:
>
> > Don't forget to look in do_multires_bake() in object_bake.c
> > It shows you how to add the tangent layer:
> >
> > float *pvtangent= NULL;
> >
> > // create tangent vectors if not already created
> > if(CustomData_get_layer_index(&dm->faceData, CD_TANGENT) == -1)
> >       DM_add_tangent_layer(dm);
> >
> > // get pointer to the already generated tangents
> > pvtangent= DM_get_face_data_layer(dm, CD_TANGENT);
> >
> >
> >
> >
> >
> > On Thu, Nov 17, 2011 at 8:49 AM, Eugene Minov <minov.eug at gmail.com>
> wrote:
> >
> >> >
> >> > >The proper way to get the tangent layer can be seen in:
> >> > >
> >> > >
> >>
> >>
> https://svn.blender.org/svnroot/bf-blender/trunk/blender/source/blender/editors/object/object_bake.c
> >> >
> >>
> >> Okay, I've found a 'multiresbake_get_normal' function for correct
> normals
> >> calculation.
> >> I also looked into 'DM_add_tangent_layer' function in:
> >>
> >>
> https://svn.blender.org/svnroot/bf-blender/trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
> >> According to it, the tangent layer is filling by tangents when created.
> So
> >> I do
> >> need only to access and welding them and normals?
> >> That's good if so.
> >>
> >> Today I had time to try understand how RNA's works.
> >> And I almost create and test python interface with collections for faces
> >> and
> >> indexed vertices with normals and tangents in it.
> >> Hopefully soon I'll start welding.
> >>
> >> >
> >> > >If you need a free ultra simple welder there's one here -->
> >> > >http://jbit.net/~sparky/academic/welder/
> >> > >You specify how many floats you have per vertex and it will weld for
> >> you.
> >> >
> >>
> >> Okay, good one, I think I'll use it :)
> >>
> >> Thanks!
> >>
> >> On Wed, Nov 16, 2011 at 8:43 PM, Morten Mikkelsen <mikkelsen7 at gmail.com
> >> >wrote:
> >>
> >> > Sorry for confusing you here but I think I found a better reference
> for
> >> you
> >> > since
> >> > you'll be needing the tangents too and you are not supposed to be
> >> building
> >> > them yourself.
> >> >
> >> > The proper way to get the tangent layer can be seen in:
> >> >
> >> >
> >> >
> >>
> https://svn.blender.org/svnroot/bf-blender/trunk/blender/source/blender/editors/object/object_bake.c
> >> >
> >> > do_multires_bake()
> >> >
> >> > These are being fetched after the line:
> >> >
> >> > float *pvtangent= NULL;
> >> >
> >> >
> >> > These are then read in the function flush_pixel() including the normal
> >> > which is fetched from there using multiresbake_get_normal()
> >> > which as you can see looks a lot like the GetNormal() function
> >> > I pointed you to in DerivedMesh.c.
> >> > Anyway, definitely use this file as your reference. I should have
> shown
> >> you
> >> > this one from the beginning.
> >> >
> >> > If you need a free ultra simple welder there's one here -->
> >> > http://jbit.net/~sparky/academic/welder/
> >> > You specify how many floats you have per vertex and it will weld for
> >> you.
> >> >
> >> >
> >> >
> >> > On Wed, Nov 16, 2011 at 5:32 AM, Eugene Minov <minov.eug at gmail.com>
> >> wrote:
> >> >
> >> > > >
> >> > > > >If you can get hold of the dm
> >> > > > >(DerivedMesh)
> >> > > > >on the c side of things then I can show you how to get the
> correct
> >> > > normals
> >> > > > >and tangents
> >> > > > >and even help you get them welded should you want this.
> >> > > >
> >> > >
> >> > > Ok! Sounds good to me :)
> >> > >
> >> > > So right now I in progress of checkout latest svn sources and
> compile
> >> > > blender. (had problems with net)
> >> > > Then first of I'll try to create test version of python/C interface.
> >> I've
> >> > > not decided yet what names I'll use for it.
> >> > > And finally will be trying to implement it looking in DerivedMesh.c,
> >> > > I think that it's realy are a good example.
> >> > >
> >> > > If or when I have a problem, I'll be glad to use your help :)
> >> > > Many thanks for your kind cooperation!
> >> > >
> >> > >
> >> > >
> >> > > On Tue, Nov 15, 2011 at 10:41 PM, Morten Mikkelsen <
> >> mikkelsen7 at gmail.com
> >> > > >wrote:
> >> > >
> >> > > > I don't know anything about Python but if you can get hold of the
> dm
> >> > > > (DerivedMesh)
> >> > > > on the c side of things then I can show you how to get the correct
> >> > > normals
> >> > > > and tangents
> >> > > > and even help you get them welded should you want this.
> >> > > >
> >> > > >
> >> > > >
> >> > > >
> >> > > > On Tue, Nov 15, 2011 at 10:43 AM, Eugene Minov <
> minov.eug at gmail.com
> >> >
> >> > > > wrote:
> >> > > >
> >> > > > > Yes, I absolutely agree, hard faces obviously must be exported
> in
> >> the
> >> > > > same
> >> > > > > way how they seen in render.
> >> > > > > I think they can welds along with tangents.
> >> > > > >
> >> > > > > On Tue, Nov 15, 2011 at 9:01 PM, Morten Mikkelsen <
> >> > > mikkelsen7 at gmail.com
> >> > > > > >wrote:
> >> > > > >
> >> > > > > > There is no point in doing this unless you export the correct
> >> > > tangents
> >> > > > > and
> >> > > > > > normals. That is the ones
> >> > > > > > that were used to bake the normal map.
> >> > > > > >
> >> > > > > > I realize it blows that there is no API function to get the
> >> render
> >> > > > > normal.
> >> > > > > > So what you have to do is produce it yourself
> >> > > > > > like is done in
> >> > > > > > DerivedMesh.c<
> >> > > > > >
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> https://svn.blender.org/svnroot/bf-blender/trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
> >> > > > > > >
> >> > > > > > and
> >> > > > > > many other places as well.
> >> > > > > > An example in this file is the static function GetNormal()
> >> which is
> >> > > > used
> >> > > > > as
> >> > > > > >  a call-back function by mikktspace.c
> >> > > > > > and you can see how it uses the averaged normal if the face is
> >> set
> >> > to
> >> > > > > > smooth and it uses
> >> > > > > > the face normal which it calculates itself if the face is set
> to
> >> > > flat.
> >> > > > > >
> >> > > > > > If you are going to make an api to export tangents I for one
> >> cannot
> >> > > > > > emphasize enough
> >> > > > > > that I prefer an all or nothing solution. Either do it right
> or
> >> > don't
> >> > > > do
> >> > > > > it
> >> > > > > > at all.
> >> > > > > > The last thing we need is to introduce a new tangent space
> >> standard
> >> > > > > within
> >> > > > > > blender.
> >> > > > > > Either export the correct basis that was used for baking (this
> >> > > includes
> >> > > > > the
> >> > > > > > normal)
> >> > > > > > or don't try to do it at all.
> >> > > > > > _______________________________________________
> >> > > > > > Bf-committers mailing list
> >> > > > > > Bf-committers at blender.org
> >> > > > > > http://lists.blender.org/mailman/listinfo/bf-committers
> >> > > > > >
> >> > > > > _______________________________________________
> >> > > > > Bf-committers mailing list
> >> > > > > Bf-committers at blender.org
> >> > > > > http://lists.blender.org/mailman/listinfo/bf-committers
> >> > > > >
> >> > > > _______________________________________________
> >> > > > Bf-committers mailing list
> >> > > > Bf-committers at blender.org
> >> > > > http://lists.blender.org/mailman/listinfo/bf-committers
> >> > > >
> >> > > _______________________________________________
> >> > > Bf-committers mailing list
> >> > > Bf-committers at blender.org
> >> > > http://lists.blender.org/mailman/listinfo/bf-committers
> >> > >
> >> > _______________________________________________
> >> > Bf-committers mailing list
> >> > Bf-committers at blender.org
> >> > http://lists.blender.org/mailman/listinfo/bf-committers
> >> >
> >> _______________________________________________
> >> Bf-committers mailing list
> >> Bf-committers at blender.org
> >> http://lists.blender.org/mailman/listinfo/bf-committers
> >>
> >
> >
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>


More information about the Bf-committers mailing list