Home

Awesome

Unit Packing

Build Status Go Report Card Coverage

A library for storing unit vectors in a representnation that lends itself to saving space on disk. You can read more on how some of these methods work here.

API

Currently there are 8 implemented methods for packing and unpacking unit vectors.

PackOct32/UnpackOct32
PackOct24/UnpackOct24
PackOct16/UnpackOct16
PackOctQuad16/UnpackOctQuad16
PackOctQuad24/UnpackOctQuad24
PackOctQuad32/UnpackOctQuad32
PackAlg24/UnpackAlg24
PackCoarse24/UnpackCoarse24

Example

package main

import (
	"math/rand"
	"os"

	"github.com/EliCDavis/vector"
	"github.com/recolude/unitpacking/unitpacking"
)

func main() {
	numOfVectors := 10000000
	unitVectors := make([]vector.Vector3, numOfVectors)

	// Generate a bunch of unit vectors
	for i := 0; i < numOfVectors; i++ {
		unitVectors[i] = vector.NewVector3(
			(rand.Float64()*2.0)-1.0,
			(rand.Float64()*2.0)-1.0,
			(rand.Float64()*2.0)-1.0,
		).Normalized()
	}

	out, err := os.Create("example.data")
	if err != nil {
		panic(err)
	}

	// Write out unit vectors in packed format
	for _, unitVector := range unitVectors {
		out.Write(unitpacking.PackOct24(unitVector))
	}
}

Benchmark

To benchmark the different methods, I took a bunch of common 3D models seen in computer graphics and generated both "smooth" and "flat" normals for them and used the normals as the unit vectors. Also one dataset is just 10 million randomly generated unit vectors. I hope the information present here will let you make an informed decision to pick the best method for your use case.

Lowest Error

If what you are looking for is the lowest introduced error from converting between packed format and unpacked, you will want to go with oct32 format. If you can handle a small bit of error in your calculations and speed is not a concern I would go with octquad24.

Average Error Pt.2

File Size

Just by adopting one of these packing methods, you will see a cut of over half the space needed to store a unit vector as your datasets grow. The image below is a sums the compressed data from all datasets packed by each method. Baseline represents each unit vector being written out plainly as 3 32bit floats. If you want to reduce the filesize as much as possible, I would pick octquad16, as it has the highest amount of precision for all 16bit methods.

Data Used

It appears that the alg24 method lends itself to better compressability than oct24 and oct32 methods in some datasets. This might be a more attractive method if introducing some ammount of error to your program is not a problem.

Compressability

Speed

If your goal is to compress data as fast as possible, I would go with the alg24 method, as it has one of the faster runtimes while having way more precision than coarse24.

Runtime

Why Would I Ever Bother With Coarse?

Even though coarse24 has the highest average error by far, there are still situations where this method might be what you need:

Hard Data

DatasetMethodRuntimeAverage ErrorUncompressedCompressedCompression Ratio
10 million randomBaselineN/AN/A117187 KB107717 KB1.0879
10 million randomalg24398.3702ms0.00070429296 KB29305 KB<div style="color:red">0.9997</div>
10 million randomcoarse24342.3312ms0.00393729296 KB29234 KB1.0021
10 million randomoct161.5117462s0.00402019531 KB19267 KB1.0137
10 million randomoct241.543465s0.00027629296 KB29305 KB<div style="color:red">0.9997</div>
10 million randomoct321.5763905s0.00001239062 KB39074 KB<div style="color:red">0.9997</div>
10 million randomoctquad164.1228513s0.00311019531 KB19480 KB1.0026
10 million randomoctquad245.5927954s0.00019429296 KB29305 KB<div style="color:red">0.9997</div>
10 million randomoctquad326.5853774s0.00001239062 KB39074 KB<div style="color:red">0.9997</div>
armadillo flatBaselineN/AN/A585 KB436 KB1.3415
armadillo flatalg241.9746ms0.000799146 KB146 KB1.0013
armadillo flatcoarse24999.6µs0.003943146 KB146 KB1.0030
armadillo flatoct167.9898ms0.00375697 KB96 KB1.0105
armadillo flatoct247.1822ms0.000254146 KB146 KB1.0015
armadillo flatoct327.0001ms0.000011195 KB172 KB1.1347
armadillo flatoctquad1620.0286ms0.00292397 KB97 KB1.0016
armadillo flatoctquad2424.9657ms0.000182146 KB146 KB1.0029
armadillo flatoctquad3232.0289ms0.000011195 KB172 KB1.1350
armadillo smoothBaselineN/AN/A585 KB540 KB1.0836
armadillo smoothalg243.0001ms0.000805146 KB146 KB<div style="color:red">0.9996</div>
armadillo smoothcoarse24996.8µs0.003932146 KB146 KB1.0003
armadillo smoothoct166.9461ms0.00394497 KB96 KB1.0141
armadillo smoothoct247.0004ms0.000265146 KB146 KB<div style="color:red">0.9996</div>
armadillo smoothoct328.009ms0.000011195 KB195 KB<div style="color:red">0.9997</div>
armadillo smoothoctquad1619.9521ms0.00291197 KB97 KB1.0018
armadillo smoothoctquad2426.032ms0.000182146 KB146 KB<div style="color:red">0.9996</div>
armadillo smoothoctquad3237.0339ms0.000011195 KB195 KB<div style="color:red">0.9997</div>
beetle-alt flatBaselineN/AN/A233 KB189 KB1.2318
beetle-alt flatalg24984.5µs0.00121758 KB56 KB1.0225
beetle-alt flatcoarse240s0.00395458 KB54 KB1.0611
beetle-alt flatoct163.0045ms0.00375138 KB36 KB1.0509
beetle-alt flatoct243.0001ms0.00025758 KB57 KB1.0102
beetle-alt flatoct323.0001ms0.00001077 KB74 KB1.0432
beetle-alt flatoctquad168.9721ms0.00270338 KB37 KB1.0483
beetle-alt flatoctquad2414.4702ms0.00017058 KB56 KB1.0353
beetle-alt flatoctquad3214.004ms0.00001177 KB73 KB1.0536
beetle-alt smoothBaselineN/AN/A233 KB212 KB1.0965
beetle-alt smoothalg24997.8µs0.00086558 KB57 KB1.0138
beetle-alt smoothcoarse241.0189ms0.00395058 KB56 KB1.0402
beetle-alt smoothoct163.0235ms0.00428138 KB35 KB1.0809
beetle-alt smoothoct243.0305ms0.00028958 KB57 KB1.0141
beetle-alt smoothoct322.9986ms0.00001177 KB76 KB1.0102
beetle-alt smoothoctquad167.0219ms0.00291738 KB36 KB1.0587
beetle-alt smoothoctquad2412.0015ms0.00018358 KB56 KB1.0251
beetle-alt smoothoctquad3213.9682ms0.00001177 KB76 KB1.0130
beetle flatBaselineN/AN/A13 KB11 KB1.1814
beetle flatalg240s0.0012733 KB3 KB1.0053
beetle flatcoarse240s0.0037693 KB3 KB1.0214
beetle flatoct160s0.0037352 KB2 KB1.0061
beetle flatoct240s0.0002463 KB3 KB<div style="color:red">0.9977</div>
beetle flatoct320s0.0000104 KB4 KB1.0227
beetle flatoctquad160s0.0027762 KB2 KB<div style="color:red">0.9970</div>
beetle flatoctquad24999.2µs0.0001683 KB3 KB<div style="color:red">0.9994</div>
beetle flatoctquad321.0094ms0.0000114 KB4 KB1.0229
beetle smoothBaselineN/AN/A13 KB12 KB1.0984
beetle smoothalg240s0.0008513 KB3 KB<div style="color:red">0.9971</div>
beetle smoothcoarse240s0.0039593 KB3 KB1.0106
beetle smoothoct160s0.0044482 KB2 KB1.0333
beetle smoothoct240s0.0003043 KB3 KB<div style="color:red">0.9980</div>
beetle smoothoct320s0.0000124 KB4 KB1.0002
beetle smoothoctquad160s0.0029712 KB2 KB1.0048
beetle smoothoctquad240s0.0001903 KB3 KB<div style="color:red">0.9991</div>
beetle smoothoctquad321ms0.0000124 KB4 KB<div style="color:red">0.9991</div>
cheburashka flatBaselineN/AN/A78 KB43 KB1.7861
cheburashka flatalg240s0.00064219 KB14 KB1.3377
cheburashka flatcoarse240s0.00396019 KB14 KB1.3455
cheburashka flatoct16978.9µs0.00350013 KB9 KB1.3199
cheburashka flatoct24999.1µs0.00023419 KB14 KB1.3358
cheburashka flatoct322.0027ms0.00001126 KB16 KB1.5822
cheburashka flatoctquad162.0003ms0.00277613 KB9 KB1.3089
cheburashka flatoctquad244.0007ms0.00017419 KB14 KB1.3369
cheburashka flatoctquad324.9972ms0.00001126 KB16 KB1.5831
cheburashka smoothBaselineN/AN/A78 KB72 KB1.0831
cheburashka smoothalg240s0.00061619 KB19 KB<div style="color:red">0.9993</div>
cheburashka smoothcoarse240s0.00396519 KB19 KB1.0033
cheburashka smoothoct161.0045ms0.00391113 KB12 KB1.0200
cheburashka smoothoct241.0003ms0.00025219 KB19 KB<div style="color:red">0.9993</div>
cheburashka smoothoct321.0001ms0.00001126 KB26 KB<div style="color:red">0.9994</div>
cheburashka smoothoctquad162.0263ms0.00283013 KB12 KB1.0064
cheburashka smoothoctquad245.0267ms0.00017919 KB19 KB1.0001
cheburashka smoothoctquad323.9715ms0.00001126 KB26 KB<div style="color:red">0.9994</div>
cow flatBaselineN/AN/A34 KB23 KB1.4391
cow flatalg240s0.0007358 KB8 KB1.0099
cow flatcoarse24986.1µs0.0039668 KB8 KB1.0188
cow flatoct160s0.0034995 KB5 KB1.0126
cow flatoct240s0.0002308 KB8 KB1.0080
cow flatoct321.9669ms0.00001111 KB10 KB1.1074
cow flatoctquad161.9994ms0.0028065 KB5 KB1.0069
cow flatoctquad241.9997ms0.0001728 KB8 KB1.0129
cow flatoctquad322ms0.00001111 KB10 KB1.1089
cow smoothBaselineN/AN/A34 KB31 KB1.0812
cow smoothalg240s0.0006088 KB8 KB<div style="color:red">0.9989</div>
cow smoothcoarse240s0.0039398 KB8 KB1.0036
cow smoothoct16998.7µs0.0039175 KB5 KB1.0117
cow smoothoct24994.7µs0.0002558 KB8 KB<div style="color:red">0.9989</div>
cow smoothoct321.0001ms0.00001111 KB11 KB<div style="color:red">0.9991</div>
cow smoothoctquad162.001ms0.0028165 KB5 KB1.0000
cow smoothoctquad242.0055ms0.0001778 KB8 KB<div style="color:red">0.9989</div>
cow smoothoctquad321.9996ms0.00001111 KB11 KB<div style="color:red">0.9991</div>
fandisk flatBaselineN/AN/A75 KB43 KB1.7632
fandisk flatalg240s0.00123018 KB7 KB2.4786
fandisk flatcoarse24999.7µs0.00281818 KB6 KB2.9539
fandisk flatoct16983.3µs0.00148012 KB4 KB2.7636
fandisk flatoct24951.5µs0.00010818 KB9 KB2.0428
fandisk flatoct321.0003ms0.00000525 KB14 KB1.7644
fandisk flatoctquad161.9998ms0.00243712 KB4 KB2.6934
fandisk flatoctquad242.9673ms0.00014518 KB9 KB2.0705
fandisk flatoctquad323.7969ms0.00000925 KB14 KB1.7893
fandisk smoothBaselineN/AN/A75 KB48 KB1.5731
fandisk smoothalg240s0.00114718 KB9 KB1.9277
fandisk smoothcoarse240s0.00427418 KB8 KB2.2281
fandisk smoothoct16999.2µs0.00264612 KB5 KB2.2110
fandisk smoothoct241.0305ms0.00021518 KB10 KB1.8308
fandisk smoothoct321.0321ms0.00000925 KB15 KB1.5819
fandisk smoothoctquad163.0186ms0.00265512 KB5 KB2.2510
fandisk smoothoctquad242.9989ms0.00013818 KB10 KB1.8703
fandisk smoothoctquad322.993ms0.00001125 KB15 KB1.6154
happy flatBaselineN/AN/A577 KB496 KB1.1628
happy flatalg241.9974ms0.000865144 KB143 KB1.0029
happy flatcoarse24999.1µs0.003936144 KB142 KB1.0102
happy flatoct167.9676ms0.00359796 KB93 KB1.0264
happy flatoct247.004ms0.000241144 KB143 KB1.0033
happy flatoct327.9984ms0.000011192 KB183 KB1.0503
happy flatoctquad1620.9845ms0.00282296 KB95 KB1.0120
happy flatoctquad2427.9652ms0.000176144 KB143 KB1.0063
happy flatoctquad3232.996ms0.000011192 KB183 KB1.0503
happy smoothBaselineN/AN/A577 KB531 KB1.0851
happy smoothalg241.9762ms0.000711144 KB144 KB1.0015
happy smoothcoarse242.2757ms0.003931144 KB143 KB1.0081
happy smoothoct167.0308ms0.00391296 KB92 KB1.0380
happy smoothoct246.986ms0.000255144 KB143 KB1.0033
happy smoothoct327.0159ms0.000011192 KB191 KB1.0025
happy smoothoctquad1622.0264ms0.00288396 KB94 KB1.0169
happy smoothoctquad2429.0003ms0.000181144 KB143 KB1.0051
happy smoothoctquad3234.0173ms0.000011192 KB192 KB1.0015
horse flatBaselineN/AN/A568 KB523 KB1.0848
horse flatalg241.9998ms0.001013142 KB140 KB1.0076
horse flatcoarse24999.8µs0.003928142 KB138 KB1.0266
horse flatoct166.9994ms0.00354994 KB92 KB1.0257
horse flatoct247.0053ms0.000237142 KB141 KB1.0047
horse flatoct326.9769ms0.000011189 KB188 KB1.0044
horse flatoctquad1618.9652ms0.00274994 KB91 KB1.0305
horse flatoctquad2427.9848ms0.000172142 KB140 KB1.0135
horse flatoctquad3233.1514ms0.000011189 KB187 KB1.0076
horse smoothBaselineN/AN/A568 KB523 KB1.0863
horse smoothalg241.999ms0.000968142 KB141 KB1.0069
horse smoothcoarse24999.7µs0.003948142 KB138 KB1.0272
horse smoothoct165.998ms0.00378094 KB90 KB1.0420
horse smoothoct245.9989ms0.000248142 KB141 KB1.0062
horse smoothoct326.9996ms0.000011189 KB188 KB1.0051
horse smoothoctquad1620.0356ms0.00280194 KB91 KB1.0406
horse smoothoctquad2428.9667ms0.000175142 KB139 KB1.0162
horse smoothoctquad3233.9999ms0.000011189 KB187 KB1.0096
igea flatBaselineN/AN/A1574 KB1306 KB1.2051
igea flatalg245.9704ms0.000781393 KB379 KB1.0384
igea flatcoarse245.0045ms0.003924393 KB368 KB1.0685
igea flatoct1620.9955ms0.003640262 KB243 KB1.0758
igea flatoct2421.9314ms0.000247393 KB381 KB1.0327
igea flatoct3223.975ms0.000011524 KB485 KB1.0816
igea flatoctquad1651.0072ms0.002846262 KB243 KB1.0789
igea flatoctquad2468.0317ms0.000178393 KB367 KB1.0724
igea flatoctquad3283.3463ms0.000011524 KB477 KB1.0986
igea smoothBaselineN/AN/A1574 KB1445 KB1.0892
igea smoothalg245ms0.000931393 KB385 KB1.0202
igea smoothcoarse243.9998ms0.003938393 KB374 KB1.0516
igea smoothoct1618.003ms0.003782262 KB243 KB1.0782
igea smoothoct2418.997ms0.000249393 KB387 KB1.0162
igea smoothoct3217.9998ms0.000011524 KB520 KB1.0086
igea smoothoctquad1647ms0.002797262 KB244 KB1.0729
igea smoothoctquad2470.0391ms0.000175393 KB382 KB1.0278
igea smoothoctquad3287.5491ms0.000011524 KB515 KB1.0177
lucy flatBaselineN/AN/A585 KB425 KB1.3773
lucy flatalg242.9993ms0.001102146 KB145 KB1.0067
lucy flatcoarse241ms0.003923146 KB144 KB1.0106
lucy flatoct166.9978ms0.00375297 KB95 KB1.0269
lucy flatoct247.9994ms0.000258146 KB145 KB1.0072
lucy flatoct326.9964ms0.000011195 KB165 KB1.1777
lucy flatoctquad1619.9692ms0.00286097 KB95 KB1.0207
lucy flatoctquad2429.0452ms0.000179146 KB143 KB1.0187
lucy flatoctquad3232.0333ms0.000011195 KB165 KB1.1803
lucy smoothBaselineN/AN/A585 KB539 KB1.0868
lucy smoothalg242.0083ms0.001102146 KB145 KB1.0033
lucy smoothcoarse241.0003ms0.003938146 KB145 KB1.0075
lucy smoothoct166.9975ms0.00394597 KB94 KB1.0325
lucy smoothoct245.9735ms0.000264146 KB145 KB1.0036
lucy smoothoct327.0005ms0.000011195 KB194 KB1.0025
lucy smoothoctquad1621.5069ms0.00290497 KB95 KB1.0232
lucy smoothoctquad2430.27ms0.000181146 KB144 KB1.0104
lucy smoothoctquad3234.037ms0.000011195 KB194 KB1.0053
max-planck flatBaselineN/AN/A586 KB519 KB1.1289
max-planck flatalg242.0012ms0.000718146 KB145 KB1.0075
max-planck flatcoarse241.966ms0.003942146 KB145 KB1.0095
max-planck flatoct167.0286ms0.00360997 KB96 KB1.0185
max-planck flatoct245.9986ms0.000247146 KB145 KB1.0055
max-planck flatoct326.9976ms0.000011195 KB190 KB1.0277
max-planck flatoctquad1619.9998ms0.00287297 KB95 KB1.0196
max-planck flatoctquad2427.9984ms0.000180146 KB144 KB1.0178
max-planck flatoctquad3230.9965ms0.000011195 KB189 KB1.0325
max-planck smoothBaselineN/AN/A586 KB540 KB1.0866
max-planck smoothalg242.9894ms0.000703146 KB145 KB1.0062
max-planck smoothcoarse241.0109ms0.003940146 KB145 KB1.0086
max-planck smoothoct167.0068ms0.00379897 KB95 KB1.0210
max-planck smoothoct249.7555ms0.000256146 KB146 KB1.0040
max-planck smoothoct326.9987ms0.000011195 KB195 KB1.0026
max-planck smoothoctquad1621.632ms0.00286497 KB95 KB1.0192
max-planck smoothoctquad2428.0268ms0.000179146 KB145 KB1.0095
max-planck smoothoctquad3235.9722ms0.000011195 KB194 KB1.0053
nefertiti flatBaselineN/AN/A585 KB424 KB1.3788
nefertiti flatalg24999.9µs0.000848146 KB138 KB1.0563
nefertiti flatcoarse242.001ms0.003932146 KB135 KB1.0818
nefertiti flatoct165.9874ms0.00365797 KB90 KB1.0765
nefertiti flatoct246.999ms0.000245146 KB139 KB1.0491
nefertiti flatoct327.0007ms0.000011195 KB166 KB1.1747
nefertiti flatoctquad1621.3695ms0.00281497 KB88 KB1.1015
nefertiti flatoctquad2425.9725ms0.000176146 KB134 KB1.0924
nefertiti flatoctquad3229.9629ms0.000011195 KB163 KB1.1950
nefertiti smoothBaselineN/AN/A585 KB534 KB1.0964
nefertiti smoothalg242.0007ms0.000806146 KB140 KB1.0417
nefertiti smoothcoarse241.9596ms0.003948146 KB135 KB1.0793
nefertiti smoothoct167.0233ms0.00393697 KB89 KB1.0861
nefertiti smoothoct249.0006ms0.000260146 KB141 KB1.0364
nefertiti smoothoct326.9925ms0.000011195 KB191 KB1.0214
nefertiti smoothoctquad1619.9863ms0.00288197 KB87 KB1.1134
nefertiti smoothoctquad2427.0145ms0.000180146 KB137 KB1.0612
nefertiti smoothoctquad3234.9973ms0.000011195 KB187 KB1.0406
ogre flatBaselineN/AN/A728 KB521 KB1.3967
ogre flatalg241.9898ms0.000786182 KB177 KB1.0248
ogre flatcoarse242.0344ms0.003829182 KB175 KB1.0397
ogre flatoct169.0339ms0.003447121 KB118 KB1.0293
ogre flatoct249.0201ms0.000230182 KB178 KB1.0230
ogre flatoct3210.0341ms0.000010242 KB214 KB1.1348
ogre flatoctquad1624.3084ms0.002704121 KB118 KB1.0225
ogre flatoctquad2435.9854ms0.000171182 KB175 KB1.0363
ogre flatoctquad3241.9872ms0.000011242 KB212 KB1.1418
ogre smoothBaselineN/AN/A728 KB663 KB1.0981
ogre smoothalg242.9991ms0.000838182 KB180 KB1.0078
ogre smoothcoarse242.0001ms0.003944182 KB178 KB1.0183
ogre smoothoct169.9979ms0.003844121 KB118 KB1.0293
ogre smoothoct249.0022ms0.000251182 KB181 KB1.0066
ogre smoothoct327.9807ms0.000011242 KB240 KB1.0094
ogre smoothoctquad1627.9908ms0.002808121 KB119 KB1.0149
ogre smoothoctquad2439.0314ms0.000176182 KB180 KB1.0098
ogre smoothoctquad3244.0336ms0.000011242 KB240 KB1.0102
rocker-arm flatBaselineN/AN/A117 KB92 KB1.2751
rocker-arm flatalg240s0.00118629 KB29 KB1.0086
rocker-arm flatcoarse240s0.00393229 KB28 KB1.0248
rocker-arm flatoct162.0004ms0.00325719 KB19 KB1.0091
rocker-arm flatoct242.0375ms0.00022229 KB29 KB<div style="color:red">0.9998</div>
rocker-arm flatoct321.0022ms0.00001039 KB35 KB1.1120
rocker-arm flatoctquad165.0551ms0.00266319 KB19 KB1.0078
rocker-arm flatoctquad247.0301ms0.00016629 KB29 KB1.0045
rocker-arm flatoctquad326.9669ms0.00001039 KB35 KB1.1134
rocker-arm smoothBaselineN/AN/A117 KB108 KB1.0832
rocker-arm smoothalg240s0.00097029 KB29 KB1.0037
rocker-arm smoothcoarse240s0.00393829 KB29 KB1.0125
rocker-arm smoothoct162.0005ms0.00359319 KB19 KB1.0151
rocker-arm smoothoct24999.1µs0.00023829 KB29 KB1.0000
rocker-arm smoothoct322.0319ms0.00001139 KB39 KB<div style="color:red">0.9995</div>
rocker-arm smoothoctquad164.0264ms0.00278219 KB19 KB1.0092
rocker-arm smoothoctquad246.0005ms0.00017329 KB29 KB1.0028
rocker-arm smoothoctquad326.9746ms0.00001139 KB39 KB1.0004
spot flatBaselineN/AN/A34 KB20 KB1.6768
spot flatalg240s0.0009418 KB8 KB1.0150
spot flatcoarse240s0.0039288 KB8 KB1.0301
spot flatoct160s0.0037315 KB5 KB1.0202
spot flatoct240s0.0002408 KB8 KB1.0123
spot flatoct322.0022ms0.00001111 KB10 KB1.1365
spot flatoctquad161.0001ms0.0027335 KB5 KB1.0103
spot flatoctquad24999.7µs0.0001698 KB8 KB1.0245
spot flatoctquad322.0304ms0.00001111 KB10 KB1.1376
spot smoothBaselineN/AN/A34 KB31 KB1.0866
spot smoothalg240s0.0008088 KB8 KB<div style="color:red">0.9989</div>
spot smoothcoarse240s0.0039548 KB8 KB1.0047
spot smoothoct16999.5µs0.0039435 KB5 KB1.0123
spot smoothoct240s0.0002578 KB8 KB<div style="color:red">0.9989</div>
spot smoothoct320s0.00001111 KB11 KB<div style="color:red">0.9991</div>
spot smoothoctquad162.0263ms0.0028265 KB5 KB<div style="color:red">0.9993</div>
spot smoothoctquad241.9999ms0.0001788 KB8 KB<div style="color:red">0.9989</div>
spot smoothoctquad32999.4µs0.00001111 KB11 KB<div style="color:red">0.9991</div>
stanford-bunny flatBaselineN/AN/A421 KB317 KB1.3285
stanford-bunny flatalg24998.6µs0.000913105 KB100 KB1.0492
stanford-bunny flatcoarse241.0001ms0.003875105 KB97 KB1.0855
stanford-bunny flatoct165.0051ms0.00425870 KB64 KB1.0842
stanford-bunny flatoct245.0053ms0.000244105 KB101 KB1.0413
stanford-bunny flatoct324.9996ms0.000011140 KB123 KB1.1342
stanford-bunny flatoctquad1614ms0.00281870 KB65 KB1.0731
stanford-bunny flatoctquad2420ms0.000176105 KB98 KB1.0726
stanford-bunny flatoctquad3230.998ms0.000011140 KB122 KB1.1426
stanford-bunny smoothBaselineN/AN/A421 KB376 KB1.1186
stanford-bunny smoothalg242.0276ms0.000712105 KB102 KB1.0228
stanford-bunny smoothcoarse24972.4µs0.003903105 KB99 KB1.0543
stanford-bunny smoothoct164.9999ms0.00464470 KB65 KB1.0759
stanford-bunny smoothoct246.0005ms0.000265105 KB102 KB1.0242
stanford-bunny smoothoct324.9996ms0.000012140 KB137 KB1.0245
stanford-bunny smoothoctquad1615.9985ms0.00290070 KB66 KB1.0625
stanford-bunny smoothoctquad2421.9964ms0.000183105 KB101 KB1.0375
stanford-bunny smoothoctquad3224.03ms0.000011140 KB136 KB1.0293
teapot flatBaselineN/AN/A42 KB30 KB1.4060
teapot flatalg240s0.00104010 KB10 KB1.0319
teapot flatcoarse240s0.00384210 KB10 KB1.0600
teapot flatoct160s0.0034867 KB6 KB1.0240
teapot flatoct240s0.00024610 KB10 KB1.0145
teapot flatoct320s0.00001114 KB13 KB1.0664
teapot flatoctquad162.0002ms0.0027837 KB6 KB1.0209
teapot flatoctquad242.0471ms0.00016910 KB10 KB1.0205
teapot flatoctquad321.9984ms0.00001114 KB13 KB1.0707
teapot smoothBaselineN/AN/A42 KB39 KB1.0864
teapot smoothalg240s0.00097210 KB10 KB1.0016
teapot smoothcoarse24998.9µs0.00395310 KB10 KB1.0189
teapot smoothoct160s0.0039847 KB6 KB1.0297
teapot smoothoct240s0.00025710 KB10 KB1.0003
teapot smoothoct32999.6µs0.00001114 KB14 KB1.0003
teapot smoothoctquad161.9707ms0.0029027 KB7 KB1.0162
teapot smoothoctquad241.9999ms0.00018110 KB10 KB1.0011
teapot smoothoctquad323.0001ms0.00001114 KB14 KB<div style="color:red">0.9994</div>
xyzrgb_dragon flatBaselineN/AN/A1465 KB1250 KB1.1722
xyzrgb_dragon flatalg244.9662ms0.000775366 KB364 KB1.0049
xyzrgb_dragon flatcoarse244.9695ms0.003935366 KB363 KB1.0090
xyzrgb_dragon flatoct1618.0339ms0.003774244 KB239 KB1.0185
xyzrgb_dragon flatoct2418.9996ms0.000255366 KB364 KB1.0050
xyzrgb_dragon flatoct3217.9738ms0.000011488 KB465 KB1.0504
xyzrgb_dragon flatoctquad1649.9681ms0.002920244 KB240 KB1.0171
xyzrgb_dragon flatoctquad2474.8258ms0.000182366 KB361 KB1.0137
xyzrgb_dragon flatoctquad3280.9937ms0.000011488 KB463 KB1.0533
xyzrgb_dragon smoothBaselineN/AN/A1465 KB1343 KB1.0906
xyzrgb_dragon smoothalg244.9987ms0.000733366 KB364 KB1.0042
xyzrgb_dragon smoothcoarse245.0232ms0.003942366 KB362 KB1.0102
xyzrgb_dragon smoothoct1620.9674ms0.004083244 KB237 KB1.0301
xyzrgb_dragon smoothoct2418.032ms0.000273366 KB364 KB1.0056
xyzrgb_dragon smoothoct3218.9857ms0.000011488 KB486 KB1.0046
xyzrgb_dragon smoothoctquad1650.999ms0.002980244 KB238 KB1.0263
xyzrgb_dragon smoothoctquad2473.0343ms0.000187366 KB361 KB1.0128
xyzrgb_dragon smoothoctquad3288.036ms0.000012488 KB484 KB1.0079

Resources