Panda3D/Manual/Light ramps

Light Ramps

Na iluminação padrão OpengL e DirectX, os seguintes cálculos são efetuados:

   * O valor da iluminação é calculado
   * Ele é reduzido ao alcance 0-1
   * ele é combinado com texturas
   * ele é reduzido ao alcance 0-1 novamente
   * ele é rescrito para o frame buffer

Esse processo contem duas reduções. O LightRampAttrib é um meio para especificar que voce deseja substituir esses dois operadores de redução por algo mais inteligente. Isso é particularmente relevante para dois algoritmos principais de graficos: mapeamento de tom HDR e shading cartoon.

Deve ser enfatizado que light ramps não possui efeito até iluminação per-pixel ser habilitada atraves do gerador de shader.

Mapeamento de tom HDR

No mapeamento de tom HDR, a primeira redução e removida inteiramente, e a segunda é substituida por um operador de mapeamento de tom. O operador de mapeamento de tom mapeia os vlaores de luminosidade no campo 0-infinito para novos valores de luminosidade no campo 0-1, contudo, ele o faz sem redução. Para ligar o mapeamento de tom HDR, use um dos seguintes:

np.setAttrib(LightRampAttrib.makeHdr0()) np.setAttrib(LightRampAttrib.makeHdr1()) np.setAttrib(LightRampAttrib.makeHdr2())

o operador de mapeamento de tom HDR2 é um operador familiar usado em muitos sistemas. Ele tem o contra de tender a reduzir bastante o contraste:

   * FINAL_RGB = (RGB) / (RGB + 1) 

O operador de mapeamento de tom HDR1 é similar, mas aloca mais do campo de contraste para brilho com 0-1, e menos brilho no campo 1-infinito. Isso dá uma cena de maior contraste, mas mais lavada.


   * FINAL_RGB = (RGB^2 + RGB) / (RGB^2 + RGB + 1) 

O operador de mapeamento de tom HDR0 aloca ainda mis do campo de contraste para brilho com campo 0-1. Esse é muito mais ocntraste, mas com um resultado final mais lavado ainda:

   * FINAL_RGB = (RGB^3 + RGB^2 + RGB) / (RGB^3 + RGB^2 + RGB + 1) 

Shading Cartoon ( Iluminação Quantizada )

No shading cartoon, o primeiro clamp é removido inteiramente, e o segundo é substituido por uma função de quantitização. Isso substitui um gradiente continuo de valores de brilho por um set discreto de niveis de luz. Essa função de quantitização é aplicado á luzes direcionais apenas, não ambientais.

Para habilitar iluminação quantizada, use um dos seguintes:

np.setAttrib(LightRampAttrib.makeSingleThreshold(t0, l0)) np.setAttrib(LightRampAttrib.makeDoubleThreshold(t0, l0, t1, l1))

Em um sistema de threshold unico, a contribuição do brilho da iluminação difusa é comparado ao threshold t0. Se o threshold não for conseguido, a contribuição da luz difusa é eliminada. Se for conseguido, o brilho do pixel é normalizado para o nivel especificado l0

Em um sistema de threshold duplo, a contribuição do brilho da iluminação difusa é comparado ao threshold t0 e t1. Se nenhum for conseguido, contribuição da luz difusa é eliminada. Se for conseguido, o brilho do pixel é normalizado para ou l0 ou l1, dependendo de qual threshold foi passada.

Light Ramps futuras

Nós estamos interessandos em saber se existe algum outro tipo de light ramps que voce gostaria de ver. Se sim, por favor nos notifique nos forums.