2017-11-27 1 views
0

Three.js의 방향 표시등이 켜져 이상한 효과가 나타납니다 (이상하게 보입니다 만 잘 모르겠습니다).Three.js 방향 표시등이 점등처럼 보입니다.

enter image description here

라이트 설치 카메라 단순 부착이다

dirLight = new THREE.DirectionalLight(0xffffff, 1); 
dirLight.position.set(0, 0, 1); 
camera.add(dirLight); 

메쉬 바로 현장에서 원점 위치 (0, 0, 0). 빛의 표적은 동일합니다. 메쉬의 재질은 MTL 파일에서 가져옵니다.

newmtl mat_1 
Ka 0.140196 0.147059 0.171569 
Kd 0.560784 0.588235 0.686275 
Ks 0.950000 0.930000 0.880000 
Ns 750.000000 

음영이 기본값입니다. 물리적으로 올바른 조명 옵션을 사용할 수 있습니다 (그러나 결과는 물론 장애인을위한 동일) 표준 물질과 결과

: 0에서 1

THREE.MeshStandardMaterial({ color: 0x0033ff, roughness: 0.4, metalness: 0.5 }) 

enter image description here

변경 거칠기 (metalness 여기 0) :

나는 빛이 전체 페이지에 걸쳐 균일하게 분포되어야한다고 생각

enter image description here

메쉬 레인. 그러나 그것은 한 지점에 집중되어있는 것처럼 보입니다. 무엇이 잘못 될 수 있습니까? enter image description here

나는 이것에 대한 내 자신의 쉐이더를 작성해야 :

나는 다음과 같은 동작을 얻으려고?

+0

어떤 유형의 재료입니까? 'THREE.MeshStandardMaterial()'이라면'.roughness'와'.metalness' 매개 변수를 재생할 수 있습니다. – prisoner849

+0

@ prisoner849, 첫 번째 자료는 MTL에서 제공되며 OBJ 로더에 추가됩니다. 나는 또한 기본 OBJ 로더 자료 (다른 자료는 설정하지 않았다)와 표준 자료 (그 그림을 게시물에 첨부)로 시도했다. 모든 경우에 표시등이 똑같아 보입니다. – Akdez

+0

절망적 인 옵션으로,'THREE.MeshLambertMaterial()'을 사용하지만, 여러 광원의 그림자 문제가있을 수 있습니다. – prisoner849

답변

0

당신이 투시 투영을한다고 가정하면 정상입니다 : 빛과 표면 벡터가 전체 표면에 대해 일정하더라도, 눈 - 표면 벡터는 항상 변하고 있습니다 (평행 투영으로 일정 할 것입니다). 스펙 큘러 구성 요소는 머티리얼의 주요 구성 요소이며 실제로는 아이 - 서페이스 방향을 사용합니다.