2016-06-04 7 views
2

Schließlich brauche ich einen normalen Schatten. Aber der Einsatz von Punkt-/Richtungsleuchten mit Lambert/Phong Materialien bekommen ich kein richtiges Ergebnis:Lichter mit Materialien in three.js funktioniert nicht richtig

picture with examples

Wenn i-Punkt-Licht verwenden, um mit Lambert Material, dieses Material reagiert nicht auf Licht (. Pic 1, 2) . Wenn ich Spot-Licht mit Phong-Material verwende, bekomme ich Schatten, wie Muster, nicht glatt (Bild 3, 4). Wenn ich gerichtetes Licht mit Lambert/Phong Material verwende, bekomme ich glatten, aber nicht richtigen Schatten (Bild 5 - 8).

Ich verwende diese Einstellungen für Schatten:

renderer.shadowMap.enabled = true; 
renderer.shadowMapSoft = true; 

renderer.shadowCameraNear = 3; 
renderer.shadowCameraFar = camera.far; 
renderer.shadowCameraFov = 50; 

renderer.shadowMapBias = 0.0039; 
renderer.shadowMapDarkness = 0.5; 
renderer.shadowMapWidth = 1024; 
renderer.shadowMapHeight = 1024; 

Und das für Lichter:

var ambientLight =new THREE.AmbientLight(0x555555); 
scene.add(ambientLight); 

und

var spotLight = new THREE.SpotLight(0xffffff); 
spotLight.position.set(12, 22, -25); 
spotLight.castShadow = true; 
scene.add(spotLight); 

und

var directionalLight=new THREE.DirectionalLight(0xffffff, 0.5); 
directionalLight.position.set(12, 22, -25); 
directionalLight.castShadow = true; 
scene.add(directionalLight); 

Auch verwende ich die gleichen castShadow und receiveShadow Eigenschaften für alle diese Beispiele.

Wenn es benötigen, andere Code kann als Quelltext dieser Seite angeschaut werden:

Spot Light, Lambert Material

Dieser Code das gleiche für alle meine Beispiele, ohne Licht - Materialkombinationen.

+0

Jetzt überprüfe ich meine Beispiele auf einem anderen Rechner und stelle fest, dass das Beispiel mit dem Spot Light/Lambert Material genauso funktioniert wie ein Spot Light/Phong Material. Könnte es von der Videokarte abhängen?Aber andere Probleme sind immer noch die gleichen: nicht glatter Schatten mit Punktlicht und nicht richtiger Schatten mit gerichtetem Licht in Kombination mit beiden Arten von Materialien. [neues Beispiel] (http://i.imgur.com/U2GjzxR.png) –

+0

[THIS] (http://Stackoverflow.com/questions/37581812) Frage kann verwandt sein – 2pha

+0

Es ist. @ 2pha, danke. Es löst meine letzten Probleme, aber ich habe eine neue. Alle nicht beleuchteten Gesichter haben keine Farbe: [Beispiel] (https://jsfiddle.net/alisa23a/b3Lquwuw/3/). Soll ich eine neue Frage erstellen oder diese erweitern? –

Antwort

1

Echtzeit-Schatten in Three.js sind im Allgemeinen schwierig. Hier sind einige Grundlagen, um Ihr Beispiel zu verbessern.

Grenze der shadow.camera -frustum:

spotLight.shadow.camera.near = 25; 
spotLight.shadow.camera.far = 50; 
spotLight.shadow.camera.fov = 30; 

Erhöhe die shadow.mapSize:

spotLight.shadow.mapSize.width = 2048; 
spotLight.shadow.mapSize.height = 2048; 

Verwenden shadowBias Artefakte zu reduzieren:

spotLight.shadowBias = -0.003; 

Das Ergebnis ist nicht perfekt, weil jetzt Licht Nähte innen Die Zimmer zeigen sich. Es erfordert mehr Zwicken und Handel ofs, aber vielleicht ist es gut genug für Ihre Bedürfnisse: https://jsfiddle.net/wbrj8uak/8/


einfach einen Kommentar hier zu verlassen, in Bezug auf 2pha's aktualisiert Beispiel und warum in Wiederherstellung es:

die Einstellung Kameraposition führt zu einem verschwindenden Schatten im Raum. Das ist sicher verwirrend für das Poster, das einen Schatten im Inneren haben will, deshalb habe ich seinen Code einfach so hinterlassen, wie er ihn geliefert hat.

+0

Danke, es ist hilfreich. Kannst du auch noch eine Frage beantworten? Warum nur beleuchtete Gesichter Farbe haben und warum ein Material in diesem [Beispiel] (http://jsfiddle.net/alisa23a/b3Lquwuw/4/) lichtundurchlässig ist? –

+0

Die graue Farbe, die Sie auf Flächen sehen, die nicht vom Spot-/Richtungslicht getroffen werden, reflektieren nur das Umgebungslicht (# 555555). Bei halbtransparent sprechen Sie über den hellen Dreiecksfleck an der Schattenseite der Wand? Ich weiß nicht, woher das kommt ... –

+0

Danke für die Erklärung über Umgebungslicht. So, wie man eine realistische Farbe der Gesichter macht, die sich nicht in ein gerichtetes Licht verwandelt haben? Müssen mehr gerichtete Lichtquellen mit unterschiedlichen Richtungen hinzugefügt werden? Ein helles Dreieck ist ein Licht aus dem Fenster. Es geht durch die Wand und den Boden: [Bild] (http://i.imgur.com/XPjAAaK.png). Ein dunkler Bereich um diesen hellen Punkt ist ein Schatten von der Decke und anderen Wänden. Daher sage ich, dass das Material halbdurchsichtig (oder halbtransparent?) Ist, wenn es Licht durchlässt. Weißt du, wie man für Material null Transparenz einstellt? –