Three.js: Schattenkarten - Schatten auf transparente Ebene werfen

Erstellt am 23. Apr. 2012  Â·  28Kommentare  Â·  Quelle: mrdoob/three.js

Hallo,

Ich muss Schatten auf eine transparente Ebene werfen, damit nur der Schatten angezeigt wird und nicht das Material, das auf die Ebene angewendet wird (ich möchte, dass es vollstÀndig transparent ist). Ist das in three.js möglich? Ich benutze THREE.SpotLight als Lichtquelle.

Als Problemumgehungslösung denke ich, ich könnte eine vollstĂ€ndig transparente Texturkarte als Material anwenden und prĂŒfen, ob sie wie erwartet funktioniert, aber ich habe mich gefragt, ob ich diesen Effekt erzielen kann, indem ich nur die Standardmaterialeigenschaften optimiere.

Vielen Dank

Question

Hilfreichster Kommentar

Ab r77 ShadowMaterial ist jetzt im Kern.

Alle 28 Kommentare

OK, versuchte Problemumgehung hat nicht funktioniert, da ich keinen Schatten auf eine Ebene mit transparenter Texturabbildung werfen kann ...

Ich denke nicht, dass das möglich ist.

Ich bin mir nicht sicher, ob ich die Frage verstehe, aber Schatten sollten auf transparente Materialien geworfen werden.

Was nicht funktionieren sollte, ist Licht, das durch die transparenten Materialien scheint. Das heißt, alles ist entweder vollstĂ€ndig undurchsichtig oder fĂŒr Schatten vollstĂ€ndig transparent, dazwischen gibt es keine, unabhĂ€ngig von der materiellen Transparenz.

Siehe auch Diskussion in # 1509

Was nicht funktionieren sollte, ist Licht, das durch die transparenten Materialien scheint. Das heißt, alles ist entweder vollstĂ€ndig undurchsichtig oder fĂŒr Schatten vollstĂ€ndig transparent, dazwischen gibt es keine, unabhĂ€ngig von der materiellen Transparenz.

Ja, ich denke das meint er.

Als Referenz, wenn jemand es braucht http://pastie.org/5088640

@skrat Vielen Dank fĂŒr diesen Shader. Funktioniert perfekt fĂŒr einen SchattenfĂ€nger!

@etx uh, was macht dieser Shader? : U.

Es gibt mir nur den Schatten mit Alpha und der Rest des Objekts mit diesem Shader ist unsichtbar. Es Ă€hnelt einem SchattenfĂ€nger in CGI-Software. Ich verwende threejs, um ein Produkt ĂŒber einem Foto zu rendern, daher ist dies sehr nĂŒtzlich.

Oh, richtig. So erhalten Sie eine schwarze Textur mit der im Alphakanal gespeicherten Sichtbarkeit. Richtig?

Ja!

@etx Wie können Sie dies mit dem obigen Shader erreichen? Was ich bekomme, ist nur ein schwarzes Flugzeug ......

Ich habe nach einer Möglichkeit gesucht, seinen Effekt zu erzielen. Wenn ich jedoch das obige Snippet verwende, wird ein THREE.WebGLShader: Shader couldn't compile. -Fehler angezeigt.

@skrat Gibt es eine Chance, dass du diesen Shader erneut hochladen kannst? Der Pastie-Link funktioniert nicht mehr und ich bin auf genau das gleiche Problem gestoßen. Danke im Voraus!

@etx @skrat Könnten Sie bitte einen aktualisierten Shader erneut hochladen? Der von Ihnen gepostete scheint nicht mehr zu funktionieren, wie @JosephClay. Ich erhalte den Fehler "Shader konnte nicht kompilieren" ...

Versuchen Sie THREE.ShadowMaterial() . Siehe diesen Stackoverflow-Beitrag.

@WestLangley denkst du, wir sollten ShadowMaterial zum Kern befördern?

@ WestLangley vielen Dank - das hat es gelöst. @mrdoob Ich denke, es ist eine super nĂŒtzliche Funktion, die viele von GCI kennen, also könnte es eine gute Werbung fĂŒr den Kern sein

@WestLangley Denkst du, wir sollten ShadowMaterial bis ins

Ich habe auf die eine oder andere Weise kein starkes GefĂŒhl ... Wenn ich mich nicht irre, leidet es unter dem gleichen Mangel wie MeshLambertMaterial - ein Texel im Schatten eines Lichts bekommt kein Licht von irgendeinem anderen Licht .

Ja, es ist eine Maske. GrundsĂ€tzlich wie die alten Schatten frĂŒher waren.

Hallo,

ShadowMaterial klingt genau so, wie ich es brauche, und ich bin so froh, dass Sie es implementiert haben - aber ich kann nicht herausfinden, auf welche Version von three.js ich herunterladen / verlinken muss, damit es funktioniert. Kannst du mich in die richtige Richtung weisen?

r74 oder neuer

Vielen Dank! Ich bekomme immer noch THREE.ShadowMaterial ist allerdings kein Konstruktor.

Ist noch nicht im Build enthalten, befindet es sich im Beispielordner. Sie mĂŒssen es separat einschließen:

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

wĂŒrde es auch zum Kern fördern, es ist 4kb

Perfekt, danke! Ich habe vorher nach der shadowMaterial-Datei gesucht und konnte sie nicht finden.
Funktioniert fantastisch fĂŒr meine BedĂŒrfnisse.

Ab r77 ShadowMaterial ist jetzt im Kern.

@mrdoob toller Zug danke

Versuchen Sie THREE.ShadowMaterial() . Siehe diesen Stackoverflow-Beitrag.

Vielen Dank.
Es klappt!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen