22sook00 logo
SookDev
🪐

Three.js 텍스트 효과

01_Text typeface

우리가 일반적으로 사용하는 ttf, otf 형식이 아닌, Three.js 에서 제공하는 타입페이스 라는 제이슨 형태이다.
typeface 를 import 하면 꽤 많은 폰트를 json 형태로 지원하는것을 볼 수 있다.
하지만 한글은 지원하지 않아서 우리가 일반적으로 사용하는 폰트를 타입페이스로 변환하는 작업이 필요하다.
Facetype.js 라는 컨버터 라이브러리를 통해 쉽게 변환할 수 있다.
notion image
폰트를 import 하는 방식은 두가지가있다.
fontLoader 만 import 하여 인스턴스를 생성하여 폰트경로를 지정하는 방식과
parse 메소드는 객체 자체를 자바스크립트에서 직접 불러오고 그 객체를 three.js 에서 이해할 수 있는 형식으로 파싱하는 방법이다.

02_텍스트 장면에 추가하기

TextGeometry 의 다양한 속성들에 대해 알아본다.

ExtrudeGeometry

글자의 날카로운 부분을 부드럽게 변경해주는 속성이다.
notion image
ExtrudeGeometry 의 bevelSegments 는 경사진 면을 몇개의 레이어로 나눌것인가를 정하는것인데,
많아질수록 경사진 변이 좀 더 부드럽게 표현이 가능하다.
하지만 무작정 크게 설정하면 성능적으로 문제가 있을 수 있기 떄문에 적절하게 사용 할 필요가 있다.
notion image
 

Texture

구글에 텍스처만 검색해도 상당히 많은 재질의 이미지가 나타나다.
그 중 홀로그램 느낌의 재질로 테스트를 해보려고 한다.
TextureLoader 메소드를 이용하여 텍스처를 load 할 수 있다.

Spotlight

글자의 조명을 비춰주는 손전등 효과가 있는 속성이다.
notion image
spotLightHelper 속성을 이용하여 카메라의 위치를 돌려가며 본다면
하나의 점 형태에서 원뿔형태로 빛이 번져나가는것을 볼 수 있다.
notion image
gui 툴 이용하여 하나씩 조절해보기
 

02_텍스트 애니메이션

마우스 인터렉션에 따라 텍스트 애니메이션 효과주기
js 의 mousemove 메소드를 통해 e.clientX,e.clientY 좌표값을 찍어면 특정 값들이 나온다.
하지만 이는 절대적인 좌표값이기 때문에 three.js 가 받아들이는 위치와 달라져버려서 먼 위치에 좌표계가 위치해버린다.
이 좌표값을 각각 윈도우창의 전체높이와 전체너비에 대한 상대적인 값으로 변경하기 위해
각각 innerWidth 와 innerHeight 으로 나눠준다.

빛에 의한 그림자 추가하기

castShadow() 와 receiveShadow()
그림자는 발생되는 곳에서 보내주는 그림자, 평면(plane)에서 받을 그림자 두개를 지정하면 된다.