[Bf-committers] Shadow buf question

Ton Roosendaal ton at blender.org
Sun Nov 11 15:25:12 CET 2007


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



More information about the Bf-committers mailing list