perf.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. import type { Scene } from 'three'
  2. import type { TresObject } from './../types'
  3. export function calculateMemoryUsage(object: TresObject | Scene) {
  4. let totalMemory = 0
  5. object.traverse((node: TresObject) => {
  6. if (node.isMesh && node.geometry) {
  7. const geometry = node.geometry
  8. const verticesMemory = geometry.attributes.position.count * 3 * Float32Array.BYTES_PER_ELEMENT
  9. const facesMemory = geometry.index ? geometry.index.count * Uint32Array.BYTES_PER_ELEMENT : 0
  10. const normalsMemory
  11. = geometry.attributes.normal ? geometry.attributes.normal.count * 3 * Float32Array.BYTES_PER_ELEMENT : 0
  12. const uvsMemory = geometry.attributes.uv ? geometry.attributes.uv.count * 2 * Float32Array.BYTES_PER_ELEMENT : 0
  13. const geometryMemory = verticesMemory + facesMemory + normalsMemory + uvsMemory
  14. totalMemory += geometryMemory
  15. }
  16. })
  17. return totalMemory
  18. }
  19. export function bytesToKB(bytes: number): string {
  20. return (bytes / 1024).toFixed(2)
  21. }
  22. export function bytesToMB(bytes: number): string {
  23. return (bytes / 1024 / 1024).toFixed(2)
  24. }
  25. export function bytesToGB(bytes: number): string {
  26. return (bytes / 1024 / 1024 / 1024).toFixed(2)
  27. }