three.js로 푹신하고 반짝이는 파티클을 만들어 보았습니다!
소개
처음 three.js로 파티클을 만들었으므로 Qiita에서 첫 기사를 게시해 보겠습니다.
three.js를 배우기 시작한 것은 지난 1개월 정도의 초도급 초보자입니다.
경위
위에서 쓴 대로 초도급 초보자의 저입니다만, 배우기 시작해 약 1개월이 지났는데,
지금까지 배운 것의 출력으로 자신이 좋아하는 파티클을 만들었습니다.
파티클 자체는 전문 학생 시절에 졸업 제작의 작품으로, 파티클을 만드는데 특화했다고 하는 라이브러리를 이용하면서 만든 경험이 있어, 모와모와 해 푹신하고, 때로는 샤키샤키로, 어쨌든 시각을 즐긴다 주는 곳을 아주 좋아합니다.
아티팩트
나는 영어를 전혀 할 수 없기 때문에(치명적), 구그라고 나온 「fluff(푹신푹신)」와 「glitter(반짝반짝)」의 단어를 맞추어 「fluffs-glitters」라고 하는 이름을 이 파티클에게 준다 네.
fluffs-glitters
See the Pen fluffs-glitters by Hinano Utsumi ( @UtmHnn ) on CodePen .
파티클의 데이터 구조
- mesh (three.js 메쉬)
- xDirection (메쉬의 가로축 제어 속성)
- yDirection (메쉬의 세로축 제어 속성)
- xMoveSpeed (메쉬의 가로축 방향으로 속도 제어 속성)
- yMoveSpeed (메쉬의 세로축 방향으로 속도 제어 속성)
- lifeCount (메시가 화면에 표시되는 수명)
위에서 쓴 대로 초도급 초보자의 저입니다만, 배우기 시작해 약 1개월이 지났는데,
지금까지 배운 것의 출력으로 자신이 좋아하는 파티클을 만들었습니다.
파티클 자체는 전문 학생 시절에 졸업 제작의 작품으로, 파티클을 만드는데 특화했다고 하는 라이브러리를 이용하면서 만든 경험이 있어, 모와모와 해 푹신하고, 때로는 샤키샤키로, 어쨌든 시각을 즐긴다 주는 곳을 아주 좋아합니다.
아티팩트
나는 영어를 전혀 할 수 없기 때문에(치명적), 구그라고 나온 「fluff(푹신푹신)」와 「glitter(반짝반짝)」의 단어를 맞추어 「fluffs-glitters」라고 하는 이름을 이 파티클에게 준다 네.
fluffs-glitters
See the Pen fluffs-glitters by Hinano Utsumi ( @UtmHnn ) on CodePen .
파티클의 데이터 구조
- mesh (three.js 메쉬)
- xDirection (메쉬의 가로축 제어 속성)
- yDirection (메쉬의 세로축 제어 속성)
- xMoveSpeed (메쉬의 가로축 방향으로 속도 제어 속성)
- yMoveSpeed (메쉬의 세로축 방향으로 속도 제어 속성)
- lifeCount (메시가 화면에 표시되는 수명)
mesh
를 500개 생성하여 화면 중앙에서 상하 좌우 외측 프레임 방향으로 방사상으로 확산합니다.
메쉬의 크기와 속도는 무작위로 배출되며 opacity
의 값은 화면 중앙에서 멀어짐에 따라 낮은 값입니다.
파티클 거동
function updateCircles () {
for (let i = 0; i < circles.length; i++) {
circles[i].mesh.material.opacity -= circles[i].lifeCount
if (circles[i].mesh.material.opacity <= 0) {
circles[i].mesh.position.x = -0.5 + Math.random() * 1
circles[i].mesh.position.y = -0.5 + Math.random() * 1
circles[i].mesh.material.opacity = 1.0
}
circles[i].mesh.position.x += circles[i].xMoveSpeed * (circles[i].xDirection ? 1 : -1)
circles[i].mesh.position.y += circles[i].yMoveSpeed * (circles[i].yDirection ? 1 : -1)
}
}
그리기 프레임마다 메쉬를 투과해 가, opacity
의 값이 0 이 되면, 메쉬의 좌표를 초기치로 해, opacity
를 1 로 되돌립니다. 이와 같이 메쉬의 재이용을 실시하는 것으로, 필요한 최소한의 수의 묘화로 끝납니다.
파티클의 가산 합성
opacity: 0.7,
blending: THREE.AdditiveBlending
메쉬에 opacity
와 blending
를 설정하고, 투과시켜 가산 합성을 실시하는 것으로, 빛 빛을 내고 있습니다.
감상
당신의 자신은, 라고 할까 지금의 자신도, JavaScript의 기초도 배우면서 three.js 를 학습하고 있는 중이므로, 특별 깨끗한 코드를 쓰거나, 기능적인 구조로 되어 있는 프로그램 만드는 것은 여전히 매우 어렵습니다.
자신이 머리 속에서 이미지한 표현과 차이가 없는 아웃풋을 할 수 있게 되는 것을 목표로 앞으로도 학습한 것을 아웃풋하면서 힘을 써 가고 싶습니다.
Reference
이 문제에 관하여(three.js로 푹신하고 반짝이는 파티클을 만들어 보았습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/UtmHnn/items/24413ac3bb9a7d4594a8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)