The best way to explain the noselfshadows keyword is an example:
The lion in the screenshots has noselfshadow defined in his material. This means, that
- other surfaces without noselfshadows can cast shadows on the lion (e.g. the pillar can cast on lion).
- the lion cannot cast shadows on other surfaces with noselfshadows. This trivially includes the lion itself and the other lion in the right screen.
- the lion can cast shadows on other materials without noselfshadows (e.g. the pillar in the background).
In other words, noselfshadow inhibits casting shadows if
originMaterial.noSelfShadows == true && targetMaterial.noSelfShadows == true
From the view of the renderer, the noselfshadow keyword is handled like this (quoted from iddevnet):
01/06/05 What noSelfShadow does The way the renderer handles noSelfShadow is it: 1. Renders all selfShadow objects shadows to the stencil buffer 2. Renders all noSelfShadow objects with lighting 3. Renders all noSelfShadow objects shadows to the stencil buffer 4. Renders all selfShadow objects with lighting So basically what happens is when 'noSelfShadow' objects are rendered, their shadows haven't been rendered to the stencil buffer yet. But by the time 'selfShadow' objects are rendered, all shadows have been rendered (self and otherwise). This means an object with 'noSelfShadow' will not cast a shadow onto a different object with 'noSelfShadow' In other news, we're back from the holidays :)