When trying to display large-scale point cloud data (LiDAR/LAZ) in a web browser, the browser may crash due to insufficient memory. This article introduces how to display millions of points without stress using Potree’s LOD (Level of Detail) technology.

https://3dtiles-viewer.vercel.app/potree-lod-viewer.html

Data Used

Challenge

Trying to load this data directly with Three.js or similar libraries may cause the browser to freeze.

Solution: Potree

Potree is a WebGL-based viewer for large-scale point cloud data. Through LOD (Level of Detail), it displays areas near the camera in detail and distant areas coarsely, enabling smooth operation even with billions of points.

How It Works

  1. Spatially divide the point cloud using an octree structure
  2. Store data at different levels of detail in each node
  3. Dynamically load only the necessary nodes based on the viewpoint

Procedure

1. Download the LAZ File

cur"lht-tLps://uotbajhe_ccta.pciltoould..lsadzsc\.edu/v1/AUTH_opentopography/www/education/MatlabTopo/Utah_state_capitol.laz"

2. Convert LAZ to Potree Format

Run PotreeConverter using Docker.

#d#dooDccsPokkyoceentkrr$$tre((herprpp3euuwwdClndd/ol))pn:ovs-oteyrdurrnmatetttpeeh\aucr3tod\:n///dpoeaourttttarpe/euruettc\ao\hn_vcearptietrol.lazoutput/utah_capitol

Output:

Ammsc3dAiapo4uBnxan8rB::cv1a:ie5t[[nr1i44gs2o22in45cop:82ano87li190cfn.,,uit8lns144ai9..tsws55ehe11der44de27f71rpeeor++mo00c66de,,isas11ge34od55n08aa..ln45:d27]]33.47881957132points(100%)werewrittentotheoutput.

Converted Size: 54MB

Generated file structure:

utah_csdcloaaoutpuraidc/rt.e/ojsls./jrrs..obhnirnc####

3. Prepare the Potree Library

Download and place Potree 1.8.

#c#um#rrrunvmmmrhzltiP---tporrr-ptfffLspr:oejjjtesss/r_///ge1lllpie.iiiot-8bbbth1sssru.j///eb8sPPPe../ooo-czlttt1oii:rrr.mpbeee8s1eee.p/2___zo1111itM...prB888e///\eped/oxop6iaco4nmstMtprBcleleeos/urdesleases/download/1.8/Potree_1.8.zip

4. Create the Viewer HTML

<<<<!hh/b//Dte<<<<<<<<<<<<<<<<<<<<ho<<bhOmamt!sssssssssss!lllls/edds/otCldei-ccccccccccc-iiiith#sayiccvvvvccP}sdmT>tt-rrrrrrrrrrr-nnnnytptd>vroiiiiooo)cylYlaliiiiiiiiiiikkkklmoy>ineeeenntcpppvv;r>>PaePpppppppppppPeltlipswwwwUssrooooiiiEnc>otttttttttttorrrr>,redtteeeeRtteniiieepghPtteeeee>=>rrrrLesnnnwwth=aorsssssssssssrllllbe"v....pd.ttttee>t"rierrrrrrrrrrre====o_pissssaalcccrrmjsneccccccccccce""""dcoeeeeertoplll..laet===========ssssyotwttttaaaoooosf>"td"""""""""""CttttnreEFPBmPdiuuuci>=CejjjjjjjjjjjSyyyy{terDOoasaPndddet"lpsssssssssssSllllaeLVictot...nTUoe///////////eeeewi_=E(nk=hicmmmeoTunlllllllllllssssincn6tgnlaaa.SFddiiiiiiiiiiihhhhdeona0Brn=totttac-ebbbbbbbbbbbeeeetrneb)uoeCueeedr8Vnssssssssssseeeehtwl;duwpldrrrde"ic///////////tttt:{aegnaoiiiPe>eiPPPPPPPPPPP""""iPdedUru=aaaonweooooooooooo1pno(t(Radllli(esttttttttttthhhh0oett("Lm(e...n)rrrrrrrrrrrrrrrr0srrr3gSsd.spst;eeeeeeeeeeeeeee%i"eu_re.apiohC(eeeeeeeeeeeffff;t>ee0aagtozialP___________====i<.)0dreaienpoo11111111111""""ho/V;0ictPnteut...........jjjjendi_eh(at=Sdr88888888888ssssi:ie0nP'tci=(e///////////////gvw0tadhl1zpellllllllllbllllha>e0"ra,o;ePo)iiiiiiiiiiuiiiitbr))atuToi<bbbbbbbbbbibbbb:s(;;ma"dytn/sssssssssslssssods'p;prtt/////////d////1lo()oeecijsjttdpij/PPPP0ucwieltqpqhtw3r1spoooo0tuin=.olueurhe/o8totttt%emntPueeceeeedjnrtrrrr;;edcPod>rtrern34eereeeeno'loi)yry.//./xeeeeeemwtwfotn;/u-jBtjpte____ai.E.iurtjmusiwsrj/1111rdgylldeSq/ine"isp....gteeoe"ehusbae>j1to8888iht-cs,.aepjurn<48rt////n:EDa/Ppreqiy./.nerlllb:lotufoeyculHmsjeeeiiiu1emitui.-tedeicsx.ebbbi00meoannC3rr/anr"tj.sssl;0enhctI.uytp.i>.sj///d%nL._tSR1m-h.jp<j"ssjj/;tisciiC..urjst/s>"pqspvBgeaozL1jies">s"<>eutoehyhapneE.s.e">c>/<certreItri(T;m"m.><r<s/trerfidicteyi>im<i/csryeelg(nho)pn<nispsrcu-/eoh"g)le./.nsctcirmut/wtp;/{.jsj.cr>rpi/ihp::ocAscsjriitps/eotlD"r"sipp>tpjmth1roA>i>"ptt>eqeri0euP<p<>t>>cused0edT/t/<>te/ed%_.Is>s/rrm.e;cjVccsuyicnosErrcm-xs;}n';iir.uest;ppicid"}attps./>i>>tsmsn>"ite>nyr.l"ce)s.)sc;"s>s">

5. Deploy

Push to GitHub and publish on Vercel/GitHub Pages.

gggiiitttacpdoudmsmhdiotocrs-i/mgpio"ntArdmedaei-Pnlootdr-eveieLwOeDr.photimnltdcolcosu/djs/ileiwbesr/PwoittrheeU_t1a.h8Cdaopcist/oflildeast/au"tah_capitol

Results

Demo URL: https://3dtiles-viewer.vercel.app/potree-lod-viewer.html?data=files/utah_capitol/cloud.js

ItemValue
Data SourceOpenTopography
LAZ Size15MB
Converted Size54MB
Total Points3,481,512
Point Budget3,000,000
PerformanceSmooth

When zooming the camera, detailed nodes are automatically loaded.

Performance Tips

  1. Point Budget: Limit the number of points drawn at once with viewer.setPointBudget(3_000_000)
  2. Adaptive Point Size: Automatically adjust point size based on distance
  3. EDL (Eye-Dome Lighting): Enhance depth perception for improved visibility

Integration with IIIF Presentation API 3.0

To attach metadata (title, source, license, etc.) to point cloud data, we leverage IIIF Presentation API 3.0.

Creating the IIIF Manifest

{}"]"""}"}"]""}"]"]@,itl,s,m,rr,p,ic"{}dya""u""e{}{}{}ie""r{}t{}oh"pbejmejt,,gqlvoent""":eenamnaa""""""huaav""""]m"""]ttpcp"l""a""dlvlvlvtibliitlhsitiepolo":"::r::aaaaaaasreuddyao{}"dyt{}x:toih:ytblblbl"elee"pbm:"pet/runt"[["[[aeueueu:d""r:eee""":em"""]"/edttM{"":"""leleleS::""lpitf["siti:ieUCpaUL:"""""""t:":"adyo":"dyt{}i"rosnt{i::::::ha{{h:g"prh:"pe[i:lu:iaD[tt[t"e:emt":em""""}"f"n/fhA{{{{{{te""tA{""atS["sitmb,t.":t/eRpmeepg:":tpc":"dyoo"""""aih"esS""""""sennse"h"seh:"ptditfcprot":xtt"peeeeee:n"":ne[t"::nt":eiydyolog/tpa"a]oLnnnnnn/t::/tntT/etA["v""proieapo"m,tii""""""/"/""pe"/"pn":a::emuntpstppenD::::::c:[[o,:sxte,snht"adt"i:roltAr""p:tex:t"i{":tUC://eteCR[[[[[[e{ADe[/"xattAoh"rop/er.ac""""""atan"/,tm/apnnt":lu"rp:ecplFPP3LSttttOo/petsn"tM"nheoceoioooo,oairaopphlxi::po":ttstl:mturti4clvipeeteaotsda"terop/odmrn8atebponnm.mn/a":ep":pneuoil"aet1tcurgTtlcpPetp/lphstedii"o]te,iLotoroo"olaxia/"lt3:a.Uni]f"C5oamivappmegaoie,it4/tgrtf,]1o1nkmoipoo/.emnnxcp8/iilC/t.u2"eondhggic"p"taas1eot"ouh}7n"]n"eyrrio,l,imt:5xnh,ute,"t]Cs]d.aaimenpi1a/una]"}i.oppf/.gl/2m3bthU]},to}brhh/ic"enep/."_t}yr,ygyyuio,./xlcica},g/".timcjaeooah,/O"]oaf/osm.n/pUlp,rh/imopctniStie}g_ui/nloesttacn,/ctif"emx#oaheT"aafi,./t"lt,no,ph/lci.,/espi_ueoijmUeotctsmisaCSsgoaa//fonaA/rlphuf/nip"ba/i_tiu"fi]ypmtcalt,et/haoaheaso}4ynlp_shtl."i/ic/_.0]fmtaucjb/eaoptasu"}snliapoi,ti/thinl.fmo_t"djealco,issn/alnoticp/gn.flim"/jeota]sssuon,cotdlien../fn/jjceeassls/no"ot1nn,u."o/dj,ta.sanjotnsnio"/ot,snac-tepinaoegn/e/1/1"1"",,

Key Manifest Properties

PropertyDescription
labelTitle (multilingual support)
summaryDescription text
metadataMetadata such as format, point count, location
rightsLicense URL
requiredStatementRequired attribution statement
providerData provider information
items[].body.cloudUrlURL to Potree cloud.js

Loading the Manifest in the Viewer

cfoent..}sctt)thhhcdi}cl;(eeoofoommnnnccdnaaa((su(oosdnnrmtmmnc`tPUiieaeasu<oRffsntnntmaciLeeiitielnss=ft.flnhottt>elgeitrUuCUUseesc.eRdlrrrtttegfLUolle=E.ne=ru)s=lrst"ld=.>meieE$(jamgNl{=c's{nehaemliointmmamoinftseenaui(eB)nindf)sy=tfiU/)tI{Befru.dmyseltl(aIts)aa'nd.t;hbti(r._eif'iicltelgta?lsihep.etctmij'.essta)rn}[o?.is"0l.tge>]/[eh'$.m0xt){ia]ts.ltnC.iieiincmfnnnesetcen[smelrs0tanuHe].ntdTN.jieMaisf=sLmtoe(eenst'=}m'tib<s;.ty/[ll/a0ae4>]b;.`.e0;bl'o?)d.ye?.nc?'l.Co[Cu0d]BU;Yrl4;.0':'License';

Usage

#p#poottrreeee--lloodd--vviieewweerr..hhttmmll??mdaantiaf=efsitl=eisi/iuft/auht_acha_pciatpoilt/ocll/omuadn.ijfsest.json

Benefits of Using IIIF

  1. Standardized metadata format - Compatibility with other IIIF-compatible tools
  2. Multilingual support - Support for multiple languages in label and summary
  3. License and attribution clarity - Legal information provided through rights and requiredStatement
  4. Data provider information - Clear data provenance through provider
  5. Extensibility - Custom contexts allow adding Potree-specific properties

Summary

  • LOD is essential for displaying large-scale point clouds
  • PotreeConverter (Docker) makes conversion easy
  • Potree 1.8 smoothly displays millions of points or more
  • IIIF Presentation API 3.0 standardizes metadata
  • Additional data can be loaded via ?manifest=path/to/manifest.json