ν”Όλ“œλ‘œ λŒμ•„κ°€κΈ°
πŸ•ΉοΈ SOLSTICE: Hold the Light Until Dawn - A 3D Browser Game for the June Solstice Jam
Dev.toDev.to
Frontend

단일 HTML 파일 λ‚΄ Three.js 기반 3D μ—”μ§„ 및 λŸ°νƒ€μž„ μ˜€λ””μ˜€ ν•©μ„± κ΅¬ν˜„

πŸ•ΉοΈ SOLSTICE: Hold the Light Until Dawn - A 3D Browser Game for the June Solstice Jam

Minh Long2026λ…„ 6μ›” 14일7λΆ„intermediate

Context

λ²ˆλ“€λŸ¬μ™€ μ™ΈλΆ€ 에셋 없이 λΈŒλΌμš°μ €μ—μ„œ μ¦‰μ‹œ μ‹€ν–‰ κ°€λŠ₯ν•œ κ³ μ„±λŠ₯ 3D κ²Œμž„ κ΅¬ν˜„μ΄λΌλŠ” 극단적 μ œμ•½ 상황 직면. 기쑴의 정적 에셋 λ‘œλ”© 방식은 초기 λ‘œλ”© 속도λ₯Ό μ €ν•˜μ‹œν‚€κ³  배포 λ³΅μž‘λ„λ₯Ό μ¦κ°€μ‹œν‚€λŠ” ν•œκ³„ 쑴재.

Technical Solution

  • native importmap을 ν™œμš©ν•œ Three.js r160 동적 λ‘œλ”©μœΌλ‘œ λΉŒλ“œ 단계 제거 및 λŸ°νƒ€μž„ μ˜μ‘΄μ„± ν•΄κ²°
  • Web Audio API 기반의 μ‹€μ‹œκ°„ μ‚¬μš΄λ“œ ν•©μ„± μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜μ—¬ μ˜€λ””μ˜€ 파일 없이 λͺ¨λ“  효과음 생성
  • Procedural canvas texture 생성 방식을 ν†΅ν•œ 이미지 에셋 μ˜μ‘΄μ„± 제거 및 λ©”λͺ¨λ¦¬ 효율 μ΅œμ ν™”
  • Dawn meter(0.0 ~ 1.0) 값을 기반으둜 Sky color, Fog, Sun angle λ“± ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„ ν˜• 보간(lerp)ν•˜λŠ” 톡합 μƒνƒœ μ œμ–΄ ꡬ쑰 섀계
  • try/catch 블둝 λ‚΄ Postprocessing 동적 λ‘œλ“œ ꡬ쑰λ₯Ό 톡해 GPU ν˜Έν™˜μ„± 문제 λ°œμƒ μ‹œ κΈ°λ³Έ λ Œλ”λ§μœΌλ‘œ 폴백(fallback) 처리
  • Sprite particle pool μž¬μ‚¬μš© 및 Device Pixel Ratio 캑핑을 ν†΅ν•œ 저사양 λ…ΈνŠΈλΆ ν™˜κ²½μ˜ ν”„λ ˆμž„ λ“œλž λ°©μ§€

- μ™ΈλΆ€ 에셋 μ˜μ‘΄μ„±μ„ μ œκ±°ν•˜κΈ° μœ„ν•œ Procedural Generation 및 Runtime Synthesis λ„μž… κ²€ν†  - λ³΅μž‘ν•œ UI μƒνƒœλ₯Ό 단일 μ •κ·œν™”λœ 수치(0~1)둜 λ³€ν™˜ν•˜μ—¬ ν™˜κ²½ μ „λ°˜μ— μ „νŒŒν•˜λŠ” μƒνƒœ 동기화 방식 적용 - WebGL ν™˜κ²½μ—μ„œ ν•˜λ“œμ›¨μ–΄ νŒŒνŽΈν™” λŒ€μ‘μ„ μœ„ν•œ Post-processing λ‹¨κ³„μ˜ μ˜ˆμ™Έ 처리 및 폴백 μ „λž΅ 수립

원문 읽기