[Bf-committers] Shadow buf question

Joe Eagar joeedh at gmail.com
Mon Nov 12 00:33:34 CET 2007


Heh I was considering removing that optimization, but I don't really 
know what it entails.

Joe

Ton Roosendaal wrote:
> Hi,
>
> Blender's renderer uses camera-space coordinates (looking into -Z  
> axis). For (ancient) optimizating reasons all geometry is transformed  
> into this space.
> To make the lamp buffers work, it requres a transform from camera space  
> into lamp. That's why!
>
> -Ton-
>
>
> On 11 Nov, 2007, at 4:35, Jonathan Merritt wrote:
>
>   
>> Hi Joe,
>>
>> I may be wrong, but I think this is because the coordinates used in
>> the rendering pipeline have already been multiplied by re->viewmat for
>> the camera.
>>
>> Some abbreviations:
>>      C = re->viewmat for render camera (not the light source)
>>      O = ob->obmat for the object being rendered (object->world)
>>      L = ob->obmat for the light (light->world)
>>      x_w = world coordinates of object
>>      x_c = coordinates of object during rendering (in render camera
>> coordinates)
>>      x_l = coordinates of object in shadow buffer render
>>      x_o = original object coordinates
>>
>> Now, initially, when objects are prepared for rendering, their
>> coordinates are transformed as follows:
>>      x_c = x_o * O * C
>>      (see, for example, line 1883 of convertblender.c where mesh
>> vertices are transformed)
>> Since x_w = x_o * O, this is equivalent to:
>>      x_c = x_w * C
>>
>> When the shadow buffer is set up, its matrix is:
>>      C^{-1} * L^{-1}
>> Hence, shadow buffer coordinates of the object are given by:
>>      x_l = x_c * C^{-1} * L^{-1}
>>          = (x_o * O * C) * C^{-1} * L^{-1}
>>          = x_o * O * L^{-1}
>> But, x_o * O are just the world coordinates of the object:
>>      x_l = x_w * L{-1}
>> This last line is what you expect.
>>
>> Uh-oh spaghetti-code... :-/
>>
>> Jonathan Merritt.
>>
>> On 11/11/2007, at 1:02 PM, Joe Eagar wrote:
>>
>>     
>>> Hi.  The shadow buffer view matrix is initialized in
>>> source/blender/render/intern/source/convertblender.c in initshadowbuf.
>>> This matrix is used by all the shadow buffer code, including DSM.
>>>
>>> The matrix is initilized by multiplying the inverted camera matrix
>>> with
>>> the inverted lamp orientation matrix.  Anyone know
>>> why this is? I think if I knew the answer to this question, I might be
>>> able to track down why I keep getting crazy zbuffer
>>> behaviour among other things.
>>>
>>> Joe
>>> _______________________________________________
>>> 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
>>
>>
>>     
> ------------------------------------------------------------------------ 
> --
> Ton Roosendaal  Blender Foundation ton at blender.org  
> http://www.blender.org
>
> _______________________________________________
> 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