[Bf-committers] Anymated textures in the 3Dview

Ton Roosendaal ton at blender.org
Thu Feb 11 17:25:02 CET 2010


Hi,

I've got glsl texture updates for sequences of images or movie files  
almost work.
Will commit stuff tomorrow probably, it's also related to bringing  
back old code that wasn't ported yet...

-Ton-

------------------------------------------------------------------------
Ton Roosendaal  Blender Foundation   ton at blender.org    www.blender.org
Blender Institute   Entrepotdok 57A  1018AD Amsterdam   The Netherlands

On 11 Feb, 2010, at 11:39, Ton Roosendaal wrote:

> Hi,
>
> The old 'texture face' in blender (90ies playstation1 design) needs
> upgrade. Image pointers there cannot have image users easily. A much
> more modern approach is to go via the glsl shaders, using regular
> Material + Texture, which already supports image users and animation.
>
> -Ton-
>
> ------------------------------------------------------------------------
> Ton Roosendaal  Blender Foundation   ton at blender.org     
> www.blender.org
> Blender Institute   Entrepotdok 57A  1018AD Amsterdam   The  
> Netherlands
>
> On 11 Feb, 2010, at 10:55, Ton Roosendaal wrote:
>
>> Hi Benoit,
>>
>> Thanks for the cool study, one remark though;
>>
>>> It calls the BKE_image_get_ibuf() function to get the image buffer.
>>> It passes NULL as second argument, which means that the last loaded
>>> image from the movie will be returned.
>>
>>
>> The API description is:
>>
>> *BKE_image_get_ibuf(Image *ima, ImageUser *iuser)
>>
>> The ImageUser struct is required if you want to do anything fancier
>> than just a simple image. It's needed for image sequences, movie
>> files, or multilayer. The ImageUser struct sets begin/end, duration,
>> fps, and so on.
>>
>> Now... probably this ImageUser has to be put in Object? Mesh? Will  
>> ask
>> the experts :)
>>
>> -Ton-
>>
>> ------------------------------------------------------------------------
>> Ton Roosendaal  Blender Foundation   ton at blender.org
>> www.blender.org
>> Blender Institute   Entrepotdok 57A  1018AD Amsterdam   The
>> Netherlands
>>
>> On 10 Feb, 2010, at 21:12, Benoit Bolsee wrote:
>>
>>> Hi,
>>>
>>> Recently, based on my status of the VideoTexture module mantainer,
>>> I've
>>> been asked whether video textures could be displayed dynamically in
>>> the
>>> 3D view (based on frame number). Unfortunately, the BGE and Blender
>>> use
>>> a different realtime render engine, so the VideoTexture module is no
>>> use
>>> in Blender.
>>>
>>> Nevertheless, I've studied the question and isolated the places in
>>> the
>>> code that must be changed to allow dynamic textures in the 3D  
>>> view. I
>>> thought I would release this information as some Blender dev might
>>> want
>>> to implement the changes.
>>>
>>> /benoit
>>>
>>>>>>>> Here is the study:
>>>
>>> I finally had the time to look into that. It is not a simple
>>> problem. I
>>> have identified the 2 missing links to get animated texture in the  
>>> 3D
>>> view but I'm not confident to implement them. The affected code is
>>> part
>>> of the Blender UI render engine that I'm not familiar with.
>>>
>>> I can give pointers to the code. Note that the following  
>>> explanations
>>> are applicable to Blender 2.5.
>>>
>>> The function that is not doing the right thing is GPU_verify_image()
>>> in
>>> source/blender/gpu/gpu_draw.c This function is called whenever a
>>> textured face must be rendered in the 3D view. It calls the
>>> BKE_image_get_ibuf() function (line 447) to get the image buffer.
>>> Note
>>> that it uses a Image object, which is the central place in Blender
>>> where
>>> images are stored, including images from movies. It passes NULL as
>>> second argument, which means that the last loaded image from the
>>> movie
>>> will be returned.
>>>
>>> This is not a problem if the image corresponding to the current  
>>> frame
>>> was loaded before this function is called. Unfortunately, there is  
>>> no
>>> proper mechanism in Blender to ensure that. I found that displaying
>>> the
>>> Texture in the Button panel partially works: the frame number is
>>> updated
>>> whenever you modify something on that panel. This could be fixed by
>>> proper notifier/event but has the inconvenient that you have to keep
>>> the
>>> texture panel opened. A better way would be scan all Images (there
>>> is a
>>> global link of such objects) and update those pointing to movies
>>> whenever the frame number is changed. I don't think that is
>>> particularly
>>> difficult to do.
>>>
>>> The second problem is at line 446: if the image was already bound
>>> to a
>>> GPU texture, it simply rebinds and the image is not reloaded.  The
>>> proper load code is below at line 553. The idea would be to keep at
>>> Image level the number of the frame that was last loaded on the GPU
>>> and
>>> if it differs from the frame returned by BKE_image_get_ibuf, reload
>>> the
>>> image. Again I don't think this is complicated to do.
>>>
>>> <<<<<<
>>>
>>> _______________________________________________
>>> 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