Three.js: Cartes d'ombre - Projection d'ombres sur un plan transparent

Créé le 23 avr. 2012  ·  28Commentaires  ·  Source: mrdoob/three.js

Salut,

J'ai besoin de projeter des ombres sur un plan transparent afin d'obtenir uniquement l'ombre affichée et non le matériau appliqué sur le plan (je le veux totalement transparent). Est-ce possible dans three.js? J'utilise THREE.SpotLight comme source de lumière.

En tant que solution de contournement, je pense que je pourrais appliquer une carte de texture entièrement transparente en tant que matériau et voir si cela fonctionne comme prévu, mais je me demandais si je pouvais réussir à obtenir cet effet en modifiant simplement les propriétés des matériaux standard.

Merci

Question

Commentaire le plus utile

À partir de r77 ShadowMaterial est maintenant dans le noyau.

Tous les 28 commentaires

OK, la solution de contournement essayée n'a pas fonctionné car je ne peux pas projeter d'ombre sur un plan mappé de texture transparente ...

Je ne pense pas que ce soit possible.

Je ne suis pas sûr de comprendre la question, mais les ombres doivent être projetées sur des matériaux transparents.

Ce qui ne devrait pas fonctionner, c'est la lumière qui brille à travers les matériaux transparents. Autrement dit, tout est soit totalement opaque soit totalement transparent pour les ombres, il n'y a pas d'intermédiaire, indépendamment de la transparence du matériau.

Voir aussi discussion dans # 1509

Ce qui ne devrait pas fonctionner, c'est la lumière qui brille à travers les matériaux transparents. Autrement dit, tout est soit totalement opaque soit totalement transparent pour les ombres, il n'y a pas d'intermédiaire, indépendamment de la transparence du matériau.

Ouais, je pense que c'est ce qu'il veut dire.

Pour référence, si quelqu'un en a besoin http://pastie.org/5088640

@skrat Merci

@etx euh, que fait ce shader? : U

Cela me donne juste l'ombre w / alpha et le reste de l'objet avec ce shader est invisible. C'est similaire à un capteur d'ombre dans le logiciel CGI. J'utilise threejs pour rendre un produit sur une photo, c'est donc très utile.

Oh oui. Cela vous donne donc une texture noire avec la visibilité stockée dans le canal alpha. Correct?

Oui!

@etx Comment pouvez-vous accomplir cela en utilisant le shader ci-dessus? ce que je reçois est juste un avion noir ......

J'ai cherché un moyen d'obtenir son effet, cependant, en utilisant l'extrait de code ci-dessus, j'obtiens THREE.WebGLShader: Shader couldn't compile. erreur

@skrat une chance que vous puissiez re-télécharger ce shader? le lien pastie ne fonctionne plus et j'ai rencontré exactement le même problème ... merci d'avance!

@etx @skrat pouvez-vous s'il vous plaît re-télécharger un shader mis à jour? Celui que vous avez posté ne semble plus fonctionner, comme @JosephClay, j'obtiens l'erreur "le shader n'a pas pu compiler" ...

Essayez THREE.ShadowMaterial() . Voir ce post de stackoverflow.

@WestLangley pensez -vous que nous devrions promouvoir ShadowMaterial au cœur?

@WestLangley merci beaucoup - cela a résolu le problème. @mrdoob Je pense que c'est une fonctionnalité super utile que beaucoup connaissent de GCI, donc cela pourrait être une bonne promotion pour le noyau

@WestLangley pensez -vous que nous devrions promouvoir ShadowMaterial au cœur?

Je n'ai pas de sentiment fort dans un sens ou dans l'autre ... Si je ne me trompe pas, il souffre de la même insuffisance que MeshLambertMaterial - un texel à l'ombre d'une lumière ne reçoit aucune lumière d'une autre lumière .

Ouais, c'est un masque. En gros, comment étaient les vieilles ombres.

Salut,

ShadowMaterial ressemble exactement à ce dont j'ai besoin et je suis si heureux que vous l'ayez implémenté - mais je ne peux pas déterminer quelle version de three.js je dois télécharger / lier pour le faire fonctionner. Pouvez-vous m'indiquer la bonne direction?

r74 ou plus récent

Je vous remercie! J'obtiens toujours THREE.ShadowMaterial n'est pas un constructeur cependant.

N'est pas encore inclus dans la construction, c'est dans le dossier des exemples. Vous devez l'inclure séparément:

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

le promouvoirait également au cœur, c'est 4kb

Parfait, merci! J'ai déjà cherché le fichier shadowMaterial et je n'ai pas pu le trouver.
Fonctionne à merveille pour mes besoins.

À partir de r77 ShadowMaterial est maintenant dans le noyau.

@mrdoob grand mouvement merci

Essayez THREE.ShadowMaterial() . Voir ce post de stackoverflow.

Merci.
Ça marche!

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

filharvey picture filharvey  ·  3Commentaires

jack-jun picture jack-jun  ·  3Commentaires

yqrashawn picture yqrashawn  ·  3Commentaires

seep picture seep  ·  3Commentaires

ghost picture ghost  ·  3Commentaires