지오메트리 : 메시의 모양을 정의
모든 지오메트리는 버퍼지오메트리 클래스를 상속받음
어트리뷰트를 가짐
버퍼 지오메트리가 가지는 속성
Position : 형상의 3D차원 정점
Nomal : 모델 면에 대한 수직 벡터
Color : 정점 색상
UV : 텍스터 맵핑을 위한 좌표
Vertex Index : 면 구성을 위한 정점 인덱스
모든 재질은 Matreial class를 상속 받음
점 - Point*Matreial
선 - Line*Matreial
면 - Mesh*Matreial
r3f는 drei 로 별도의 재질 컴포넌트를 제공
meshBasicMaterial
광원의 영향을 전혀 받지않음
meshLambertMaterial
반사 하이라이트가 없고 반짝이지 않는 표면
모델의 단순성으로 그래픽 정확도가 다소 떨어짐
meshDepthMaterial
카메라와의 거리에 따라서 밝기가 달라짐
<Canvas camera={{ near: 3.5, far: 6 }}>
meshMatcapMaterial
하단 참조
meshNormalMaterial
알록달록 RGB 재질
meshToonMaterial
만화 재질 (3~5 컬러만을 이용하여 표현)
<meshBasicMaterial
visible={true}
transparent={true}
opacity={0.5}
depthTest={true}
depthWrite={true}
side={THREE.FontSide}
/>
visible
mesh 출력 여부 결정
$ visible={true}
transparent
재질의 투명 효과 적용 여부
$ transparent={false}
opacity
불투명도 지정
transparent가 true로 되어 있어야지만 적용 가능함
$ opacity={1}
depthTest, depthWrite
depthBuffer 적용
depthBuffer == Z-buffer
카메라와 가까이에 있는 부분(픽셀)은 작음, 멀리 있을 수록 큼
== 작을수록 어둡게, 멀수록 밝게 처리됨
픽셀을 화면에 그릴 때 depthBuffer 값을 통해 검사 유무를 결정
$ depthTest={true}
z값을 depthBuffer에 기록할 것인지 결정
$ depthWrite={true}
side
렌더링 면을 결정
앞면만 렌더링 할 것인지, 뒷면만 렌더링 할 것인지 등을 결정
$ side={THREE.FrontSide}
<meshPhongMaterial
visible={true}
transparent={true}
opacity={1}
depthTest={true}
depthWrite={true}
side={THREE.FrontSide}
color='pink'
emissive={0x666600}
specular={0xfffff}
shininess={1}
flatShading={false}
/>
Three가 아닌 Material에서 제공하는 속성
특정 Material마다 적용 가능한 것이 별도로 있음
wireframe
출력을 와이어 프레임 형태로 적용
$ wireframe={false}
color
재질의 색상값
$ color='#00ff00'
$ color='blue'
$ color={0x00ff00}
emissive
재질 자체에서 방출하는 색상 값
$ emissive={0x666600}
specular
반사하는 색상 값
$ specular={0xfffff}
shineness
반사 효과(specular) 강도 적용
숫자가 클수록 세짐
$ shininess={1}
flatShading
반사를 자연스럽게 할 것인지 깍인대로 할 것인지 여부 결정
$ flatShading={false}
물리 기반 렌더링 (2가지 머테리얼이 있음)
속도면에서는 상대적으로 느림
훨씬 고품질
meshStandardMaterial
meshPhysicalMaterial
meshStandardMaterial을 상속받은 머테리얼
-> 보다 발전됨
코팅효과, 유리와 같은 표현 가능
<meshStandardMaterial
visible={true}
transparent={true}
opacity={1}
depthTest={true}
depthWrite={true}
side={THREE.FrontSide}
color='pink'
emissive={0x666600}
roughness={0}
metalness={0}
/>
roughness={0}
거칠기 (0~1)
0에 가까울수록 매끄러움
metalness={0}
금속성을 나타냄 (0~1)
값이 커질수록 금속성이 강해지며 어두워짐
<meshPhysicalMaterial
visible={true}
transparent={true}
opacity={1}
depthTest={true}
depthWrite={true}
side={THREE.FrontSide}
color='pink'
emissive={0x666600}
roughness={0}
metalness={0}
clearcoat={0}
clearcoatRoughness={0}
transmission={0}
thickness={0}
ior={1.5}
/>
meshPhysicalMaterial
clearcoat={0}
코팅효과 (0~1)
clearcoatRoughness={0}
코딩 거칠기 (0~1)
transmission={0}
투명효과 (0~1)
thickness={0}
유리 두께
ior={1.5}
굴절률 (1 ~ 2.333)
미리 만들어진 쉐이딩 결과 이미지를 사용함
-> 이미지를 텍스쳐로 받아와야 함
별도 광원을 필요로 하지 않음
const matcap = useTexture('./matcap.jpg');
...
<meshMatcapMaterial matcap={matcap} />
flatShading을 통해서 각진 모양을 표현할 수 있음
$ flatShading={true}
※ 쉐이딩 참고 사이트
https://github.com/nidorx/matcaps
[Spring Boot] ERD JPA 코드로 작성하기 (1) | 2023.12.18 |
---|---|
[R3F] Drei, 재질 텍스쳐 매핑 (0) | 2023.10.20 |
[R3F] React Three Fiber 설치 & 기본 개념 정리 (1) | 2023.10.17 |
[Three.js] Three.js 설치 및 기본 사용법 (1) | 2023.09.09 |
[Maven] Mvnrepository 사용법 (with Spring) (0) | 2023.05.06 |