Added https://github.com/OpenImageIO/oiio/issues/3873


On 6/8/2023 7:12 PM, Larry Gritz wrote:
Yes, I am convinced that IBA::normalize() would be useful to add.

🎣 Mackerel!

(somebody should start by filing an issue so we don't forget about this potential enhancement)


On Thu, Jun 8, 2023 at 7:08 PM Vladlen Erium <shaam...@icloud.com> wrote:

    Thanx Larry!

    I definitely will check ImageBuf::Iterator. And do my best.
    Common or not, but if you'll check some of 3D format parsers, you
    can find that they are by default normalize vertices normals. And
    even if most 3D DCC apps do the same with normal maps inputs, and
    most normal maps generator output normalized data, it still a good
    to have this function in openimageio, well, just in case. :D

    Hi, Vlad.

    That's probably the simplest approach with the existing set of
    IBA functions, yes. Maybe there is some optimizing you can do
    around the edges -- like, `mul(img,img)` may be faster than
    `pow(img,2.0)`, I'm not sure, and definitely you want to use the
    variety of IBA functions that takes a destination image rather
    than returning an ImageBuf, in order to minimize needless buffer
    copying. But those obvious tricks will only get you so far.

    If you're doing this a lot and it's performance critical, a
    better way would be to write it as a single function that uses
    ImageBuf::Iterator to traverse the image and do all the
    operations at once for each pixel, with no extra buffer copies.
    Looking at the source code to any of the usual IBA functions that
    take one input image and produce one output image will provide
    you with a good example to copy and change the guts to make your
    new function.

    I don't recall anybody asking for this particular thing before,
    but if you think it is a commonly needed operation, then by all
    means propose a PR to add this new function after you've
    implemented it.



    On Sun, Jun 4, 2023 at 6:28 PM Vladlen Erium <v...@hdri.xyz> wrote:

        What should be most efficient way to implement normalizing
        vector data images (normals) using ImageBuffAlgo?

        For this moment I only see the way to do this in four steps.
        ImageBuffAlgo::madd for [0.0,1.0] -> [-1.0,1.0]
        ImageBuffAlgo::pow for power of 2
        ImageBuffAlgo::sum_channels for vector magnitude
        ImageBuffAlgo::div (sec and magnitude) to normalize vector
        length
        ImageBuffAlgo::madd for normalize to [0.0, 1.0] range.

        This not only required to make so many steps but also
        required a lot of temporary buffers, that for huge textures
        can required lot of memory. When all steps can be done per
        pixel and perfectly parallelized (shaders, cuda).

        Maybe I missed some OIIO functions? 🤔

        Best regards:
        Vlad

        PS: btw, looks like Google completely filter out all Larry
        messages if Gmail used for subscription to this mailing list.
        They even not in spam folder, where mail list messages quite
        often can be moved 😒
        _______________________________________________
        Oiio-dev mailing list
        Oiio-dev@lists.openimageio.org
        http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org



-- Larry Gritz
    l...@imageworks.com
    _______________________________________________
    Oiio-dev mailing list
    Oiio-dev@lists.openimageio.org
    http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org



    _______________________________________________
    Oiio-dev mailing list
    Oiio-dev@lists.openimageio.org
    http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org



--
Larry Gritz
l...@imageworks.com

_______________________________________________
Oiio-dev mailing list
Oiio-dev@lists.openimageio.org
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
_______________________________________________
Oiio-dev mailing list
Oiio-dev@lists.openimageio.org
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to