React/ReactThreeFiber

Material & Texture

최 수빈 2025. 3. 5. 15:14

 

Material

 

3D 객체의 표면 표현 방식을 정의하는 요소

3D 랜더러가 객체를 그릴 때, 빛의 반사, 색상, 투명도 등 다양한 특성을 결정

 

*Three.js에서 모든 재질(Material)은 Material 클래스를 상속받아 만들어져 있음

 

 

Material의 형태

  • Point Material
    점으로 표현되는 재질
  • Line Material
    선으로 표현되는 재질
  • Mesh Material
    메시 형태로 표현되는 재질 (가장 많이 사용되는 유형), 여러 가지 타입이 있음
    MeshBasicMaterial, MeshStandardMaterial, MeshLambertMaterial, MeshPhongMaterial 등이 존재

Meterial

 

three.js docs

 

threejs.org

 

 

 

Material의 주요 속성

 

 

visible (가시성)

visible={true}
  • true : 렌더링 시 보임
  • false : 렌더링 시 보이지 않음

 

transparent (투명 여부)

transparent={true}
  • true : 투명도를 적용할 수 있음
  • false : 투명도를 무시하고 항상 불투명

 

opacity (불투명도)

opacity={0.5}
  • 0 : 완전히 투명
  • 1 : 완전히 불투명

단, transparent가 true일 때만 적용됨

 

 

wireframe (와이어프레임 모드)

wireframe={true}
  • true : 표면이 와이어 형태로 표현됨
  • false : 일반적인 메시 형태로 표현됨

 

color (색상)

color={0xffff00} // 노란색
  • Mesh의 기본 색상을 설정

 

side (렌더링할 면)

side={THREE.FrontSide}
  • THREE.FrontSide : 앞면만 렌더링
  • THREE.BackSide : 뒷면만 렌더링
  • THREE.DoubleSide : 앞뒤 모두 렌더링

 

 

기본적인 Material 설정

 

meshBasicMaterial

<meshBasicMaterial
  visible={true}
  transparent={false}
  opacity={1}
  color={0xffff00}
  wireframe={false}
  side={THREE.FrontSide}
/>
  • 빛의 영향을 받지 않는 단순한 재질

 

meshStandardMaterial

<meshStandardMaterial color={"white"}/>
  • 빛의 영향을 받아서 더 사실적인 표현이 가능

 

Texture 적용하기

 

useLoader 사용하기

 

Three.js에서는 useLoader를 사용하여 텍스처를 불러올 수 있음

import { useLoader } from "@react-three/fiber";

 

 

texture 설정

const texture = useLoader(THREE.TextureLoader, imageUrl);
  • TextureLoader을 통해 이미지 파일을 불러와서 텍스처로 설정

 

여러 개의 Material 적용

const materials = [
  new THREE.MeshStandardMaterial(), // 오른쪽
  new THREE.MeshStandardMaterial(), // 왼쪽
  new THREE.MeshStandardMaterial(), // 윗면
  new THREE.MeshStandardMaterial(), // 바닥면
  new THREE.MeshStandardMaterial({ map: texture }), // 앞면 (이미지 적용)
  new THREE.MeshStandardMaterial(), // 뒷면
];
  • mat:texture 속성을 추가하면 해당 면에 이미지를 적용 가능

 

P3ColorSpace 또는 SRGBColorSpace 적용

texture.colorSpace = THREE.DisplayP3ColorSpace;
  • 색상을 더 정확하게 표현

 

 

CardComponent 구현

const CardComponent = ({ imageUrl }) => {
  const texture = useLoader(THREE.TextureLoader, imageUrl);
  texture.colorSpace = THREE.DisplayP3ColorSpace;

  const materials = [
    new THREE.MeshStandardMaterial(), // 오른쪽
    new THREE.MeshStandardMaterial(), // 왼쪽
    new THREE.MeshStandardMaterial(), // 윗면
    new THREE.MeshStandardMaterial(), // 바닥면
    new THREE.MeshStandardMaterial({ map: texture }), // 앞면 (이미지 적용)
    new THREE.MeshStandardMaterial(), // 뒷면
  ];

  return (
    <mesh material={materials}>
      <boxGeometry args={[1, 1.6, 0.01]} />
    </mesh>
  );
};
  • useLoader로 이미지 파일을 불러와서 texture로 설정
  • materials 배열을 생성하여 각 면에 적용
  • boxGeometry를 사용해 카드 모양의 3D 오브젝트 생성

 

 

카드에 기본 색상 적용

<meshStandardMaterial color={"white"}/>
  • 흰색 카드로 설정

 

이미지 적용

 

public 폴더에 이미지 저장

  • useLoader를 사용하여 텍스처를 불러와 material에 적용
  • materials 배열을 활용하여 앞면과 뒷면에 텍스처를 입힘

 

 

'React > ReactThreeFiber' 카테고리의 다른 글

Light & Shadow  (0) 2025.03.07
Obj 3D & Transform  (0) 2025.03.06
Geometry  (0) 2025.03.04
GUI Controller  (2) 2025.03.03
3D 개발을 도와주는 도구들 - OrbitControls, AxesHelper, GridHelper  (0) 2025.03.02