Three.js: Mapas de sombra - projetando sombras em um plano transparente

Criado em 23 abr. 2012  ·  28Comentários  ·  Fonte: mrdoob/three.js

Oi,

Preciso projetar sombras em um plano transparente para obter apenas a sombra mostrada e não o material aplicado ao plano (quero que seja totalmente transparente). Isso é possível no three.js? Estou usando THREE.SpotLight como fonte de luz.

Como solução alternativa, acho que poderia aplicar um mapa de textura totalmente transparente como um material e ver se funciona conforme o esperado, mas gostaria de saber se eu conseguiria obter esse efeito apenas ajustando as propriedades do material padrão.

obrigado

Question

Comentários muito úteis

A partir de r77 ShadowMaterial agora está no núcleo.

Todos 28 comentários

OK, a solução alternativa tentada não funcionou, pois não consigo nenhuma sombra projetada em um plano de textura transparente mapeado ...

Não acho que seja possível.

Não tenho certeza se entendi a pergunta, mas as sombras devem ser projetadas em materiais transparentes.

O que não deveria funcionar é a luz brilhando através dos materiais transparentes. Ou seja, tudo é totalmente opaco ou totalmente transparente para sombras, sem nenhum meio-termo, independente da transparência do material.

Veja também a discussão em # 1509

O que não deveria funcionar é a luz brilhando através dos materiais transparentes. Ou seja, tudo é totalmente opaco ou totalmente transparente para sombras, sem nenhum meio-termo, independente da transparência do material.

Sim, acho que é isso que ele quis dizer.

Para referência, se alguém precisar http://pastie.org/5088640

@skrat Muito obrigado por esse shader. Funciona perfeitamente para um apanhador de sombras!

@etx uh, o que esse shader faz? :VOCÊ

Ele apenas me dá a sombra com alfa e o resto do objeto com esse sombreador é invisível. É semelhante a um coletor de sombras em software CGI. Estou usando o threejs para renderizar um produto sobre uma fotografia, então isso é muito útil.

Oh, certo. Portanto, ele fornece textura preta com a visibilidade armazenada no canal alfa. Corrigir?

Sim!

@etx Como você pode fazer isso usando o sombreador acima? o que recebo é apenas um avião preto ......

Tenho procurado uma maneira de obter seu efeito, entretanto, usando o trecho acima, estou recebendo um erro THREE.WebGLShader: Shader couldn't compile. .

@skrat, alguma chance de você reenviar esse shader? o link do pastie não funciona mais e eu encontrei exatamente os mesmos problemas. Obrigado antecipadamente!

@etx @skrat, por favor, recarregue um shader atualizado? O que você postou parece não funcionar mais, como @JosephClay , recebo o erro "shader não pôde compilar" ...

Experimente THREE.ShadowMaterial() . Veja esta postagem stackoverflow.

@WestLangley você acha que devemos promover ShadowMaterial para o núcleo?

@WestLangley muito obrigado - isso resolveu o problema. @mrdoob , acho que é um recurso super útil que muitos conhecem do GCI, então pode ser uma boa promoção para o núcleo

@WestLangley você acha que devemos promover ShadowMaterial para o núcleo?

Não tenho um sentimento forte de uma forma ou de outra ... Se não me engano, sofre a mesma deficiência de MeshLambertMaterial - um texel à sombra de uma luz não recebe luz de nenhuma outra luz .

Sim, é uma máscara. Basicamente, como as velhas sombras costumavam ser.

Oi,

ShadowMaterial soa exatamente como eu preciso e estou muito feliz que você o implementou - mas não consigo descobrir qual versão do three.js preciso baixar / link para fazê-lo funcionar. Você pode me apontar na direção certa?

r74 ou mais recente

Obrigado! Eu ainda recebo THREE.ShadowMaterial não é um construtor.

Ainda não está incluído na construção, está na pasta de exemplos. Você precisa incluí-lo separadamente:

<script src="js/materials/ShadowMaterial.js"></script>

iria promovê-lo ao núcleo também, é 4kb

Perfeito, obrigado! Procurei o arquivo shadowMaterial antes e não consegui encontrar.
Funciona de maneira fantástica para minhas necessidades.

A partir de r77 ShadowMaterial agora está no núcleo.

@mrdoob ótima jogada, obrigado

Experimente THREE.ShadowMaterial() . Veja esta postagem stackoverflow.

Obrigado.
Funciona!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

boyravikumar picture boyravikumar  ·  3Comentários

konijn picture konijn  ·  3Comentários

donmccurdy picture donmccurdy  ·  3Comentários

jlaquinte picture jlaquinte  ·  3Comentários

ghost picture ghost  ·  3Comentários