Material은 단어의 의미 그대로, ‘소재, 재질’을 의미한다. 딱 들어맞는 비유는 아니지만 Geometry가 뼈대라면 Material은 살로 비유할 수 있다.
Material의 종류에 따라 재질이 달라지고, 재질은 얼마나 빛을 반사하는지, 빛에 반응하여 어떤 느낌을 내는 지를 주로 결정한다.
빛과의 상호작용 외에도, Texture를 입히지 않은 상태에서는 Material을 통해 물체의 색상을 결정할 수 있다.
//material 인스턴스 생성
const material = new THREE.MeshPhongMaterial({
color: 0xFF0000, // 빨강 (CSS처럼 문자열로 넘겨줄 수도 있음. "#ff0000")
});
//또는
const material = new THREE.MeshPhongMaterial();
material.color.setHSL(0, 1, .5); // 빨강
material.flatShading = true;
//색상설정의 다양한 방법들
material.color.set(0x00FFFF); // CSS의 #RRGGBB 형식
material.color.set(cssString); /* CSS 색상 문자열, 예를 들어 'purple', '#F32',
* 'rgb(255, 127, 64)',
* 'hsl(180, 50%, 25%)' 등
*/
material.color.set(someColor) // THREE.Color에 정의된 static 색상
material.color.setHSL(h, s, l) // hsl 색상, 0부터 1까지
material.color.setRGB(r, g, b) // rgb 색상, 0부터 1까지
MeshBasicMaterial : 광원의 영향을 받지 않음
MeshLambertMaterial : 정점에서만 광원을 계산함
MeshPhongMaterial : 픽셀 하나하나에 전부 광원을 계산함, 반사점 지원
MeshToonMaterial : 부드럽게 쉐이딩(shading)하는 대신, MeshToonMaterial은 그라디언트 맵(gradient map)을 사용함 → 카툰느낌을 줌
MeshStandardMaterial : Phong과 비슷하나 사용 속성이 다름
MeshPhysicalMaterial : Standard와 같지만 추가옵션이 있음
basic → lambert → phong → standart → physical
ShadowMaterial : 그림자로부터 데이터를 가져오는 데 사용
MeshDepthMaterial : 각 픽셀의 깊이를 렌더링함
MeshNormalMateria : 카메라를 기반으로 geometry의 법선을 렌더링함
ShaderMaterial : Three.js의 쉐이더 시스템을 이용해 재질을 커스텀함
RawShaderMaterial : Three.js의 도움을 받지 않고 재질을 커스텀 함
THREE.FrontSide(앞면)
(기본값), THREE.BackSide(뒷면)
, THREE.DoubleSide(양면)