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

Reply via email to