diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..be7fcb1b --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +ALab/extras/alab.ply filter=lfs diff=lfs merge=lfs -text +ALab/extras/alab.usdc filter=lfs diff=lfs merge=lfs -text +*.ply filter=lfs diff=lfs merge=lfs -text +*.usdc filter=lfs diff=lfs merge=lfs -text diff --git a/ALab/extras/alab_hdr_splat.ply b/ALab/extras/alab_hdr_splat.ply new file mode 100644 index 00000000..8c1d54e5 --- /dev/null +++ b/ALab/extras/alab_hdr_splat.ply @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63154f18432a8e990a8f1a97622a81cc88a429611d6a96be325b44aca23b7205 +size 401798484 diff --git a/ALab/extras/alab_hdr_splat.usdc b/ALab/extras/alab_hdr_splat.usdc new file mode 100644 index 00000000..6da7a5ec --- /dev/null +++ b/ALab/extras/alab_hdr_splat.usdc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:414b7849f4561d353590f232c866c005a782749c42cc08d5a63da1d4954341d3 +size 382356451 diff --git a/ALab/extras/alab_sdr_splat.ply b/ALab/extras/alab_sdr_splat.ply new file mode 100644 index 00000000..556e1d7a --- /dev/null +++ b/ALab/extras/alab_sdr_splat.ply @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:021692317d127e691928bb5077257722862856e93f94387d0ac372ccbc263d7e +size 564099604 diff --git a/ALab/extras/alab_sdr_splat.usdc b/ALab/extras/alab_sdr_splat.usdc new file mode 100644 index 00000000..27666c05 --- /dev/null +++ b/ALab/extras/alab_sdr_splat.usdc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:183ed110373a59fd23d81f4b6c31e8b27ded28a2ee95c324a276cf51ed26292a +size 536804291 diff --git a/ALab/extras/alab_splat.usda b/ALab/extras/alab_splat.usda new file mode 100644 index 00000000..f9da283c --- /dev/null +++ b/ALab/extras/alab_splat.usda @@ -0,0 +1,71 @@ +#usda 1.0 +( + metersPerUnit = 0.01 + defaultPrim = "root" +) + + +def Xform "root" +{ + + + def Xform "alab_splat_hrc" ( + variants = { + string train_img_colorspace = "sdr-8bit-rec709" + } + prepend variantSets = "train_img_colorspace" + ) + { + matrix4d xformOp:transform:transform1 = ( (156.62323975946586, -14.504396813283966, 14.925925108068377, 0), (13.835221110785671, -12.091359437091958, -156.92796335828334, 0), (15.548228968745558, 156.86752850748252, -10.715926273058074, 0), (68.63612747192383, 139.93829154968262, 112.14171981811523, 1) ) + uniform token[] xformOpOrder = ["xformOp:transform:transform1"] + variantSet "train_img_colorspace" = { + "sdr-8bit-rec709" ( + ) { + def "alab_splat" ( + variants = { + string file_format = "usd" + } + prepend variantSets = "file_format" + ) + { + variantSet "file_format" = { + "usd" ( + payload = @./alab_sdr_splat.usdc@ + ) { + + } + "ply" ( + payload = @./alab_sdr_splat.ply@ + ) { + + } + } + } + } + "hdr-8bit-rec2100" ( + ) { + def "alab_splat" ( + variants = { + string file_format = "usd" + } + prepend variantSets = "file_format" + ) + { + variantSet "file_format" = { + "usd" ( + payload = @./alab_hdr_splat.usdc@ + ) { + + } + "ply" ( + payload = @./alab_hdr_splat.ply@ + ) { + + } + } + } + } + } + } + +} diff --git a/ALab/extras/alab_splat_with_camera.usda b/ALab/extras/alab_splat_with_camera.usda new file mode 100644 index 00000000..72d03f6e --- /dev/null +++ b/ALab/extras/alab_splat_with_camera.usda @@ -0,0 +1,18 @@ +#usda 1.0 +( + endTimeCode = 570 + framesPerSecond = 24 + metersPerUnit = 0.01 + startTimeCode = 1 + timeCodesPerSecond = 24 + upAxis = "Y" + subLayers = [@./alab_splat.usda@] +) + +def "camera" ( + prepend references = @./camera.usda@ +) +{ +} + + diff --git a/ALab/extras/camera.usda b/ALab/extras/camera.usda new file mode 100644 index 00000000..95352c63 --- /dev/null +++ b/ALab/extras/camera.usda @@ -0,0 +1,602 @@ +#usda 1.0 +( + endTimeCode = 570 + framesPerSecond = 24 + metersPerUnit = 0.01 + startTimeCode = 1 + timeCodesPerSecond = 24 + upAxis = "Y" +) + +def Xform "cameras" +{ + def Camera "camera" + { + float2 clippingRange = (1, 1000000) + float exposure = 0 + float focalLength = 0.12 + float focusDistance = 5 + float fStop = 0 + float horizontalAperture = 0.20955 + float horizontalApertureOffset = 0 + token projection = "perspective" + double shutter:close = 0 + double shutter:open = 0 + float verticalAperture = 0.20955 + float verticalApertureOffset = 0 + matrix4d xformOp:transform.timeSamples = { + 1: ( (59.35417272206986, 0, 80.48032169716208, 0), (0, 100, 0, 0), (-80.48032169716208, 0, 59.35417272206986, 0), (152.0358123779297, 50, 378.8997497558594, 1) ), + 2: ( (80.48031379367521, 0, -59.35418343867239, 0), (0, 100, 0, 0), (59.35418343867239, 0, 80.48031379367521, 0), (152.0358123779297, 50, 378.8997497558594, 1) ), + 3: ( (-59.35416200546625, 0, -80.48032960064755, 0), (0, 100, 0, 0), (80.48032960064755, 0, -59.35416200546625, 0), (152.0358123779297, 50, 378.8997497558594, 1) ), + 4: ( (-80.48032960064752, 0, 59.35416200546628, 0), (0, 100, 0, 0), (-59.35416200546628, 0, -80.48032960064752, 0), (152.0358123779297, 50, 378.8997497558594, 1) ), + 5: ( (59.354204871874316, 0, 80.48029798669715, 0), (0, 100, 0, 0), (-80.48029798669715, 0, 59.354204871874316, 0), (176.0579071044922, 50, 361.1834716796875, 1) ), + 6: ( (80.48027822796658, 0, -59.35423166337078, 0), (0, 100, 0, 0), (59.35423166337078, 0, 80.48027822796658, 0), (176.0579071044922, 50, 361.1834716796875, 1) ), + 7: ( (-59.354204871874316, 0, -80.48029798669715, 0), (0, 100, 0, 0), (80.48029798669715, 0, -59.354204871874316, 0), (176.0579071044922, 50, 361.1834716796875, 1) ), + 8: ( (-80.48031379367521, 0, 59.35418343867238, 0), (0, 100, 0, 0), (-59.35418343867238, 0, -80.48031379367521, 0), (176.0579071044922, 50, 361.1834716796875, 1) ), + 9: ( (95.29424159711762, 0, 30.31513678725825, 0), (0, 100, 0, 0), (-30.31513678725825, 0, 95.29424159711762, 0), (200.07998657226562, 50, 343.4671630859375, 1) ), + 10: ( (30.315124098062167, 0, -95.2942456338214, 0), (0, 100, 0, 0), (95.2942456338214, 0, 30.315124098062167, 0), (200.07998657226562, 50, 343.4671630859375, 1) ), + 11: ( (-95.29423756041214, 0, -30.31514947645378, 0), (0, 100, 0, 0), (30.31514947645378, 0, -95.29423756041214, 0), (200.07998657226562, 50, 343.4671630859375, 1) ), + 12: ( (-30.315149476453783, 0, 95.29423756041214, 0), (0, 100, 0, 0), (-95.29423756041214, 0, -30.315149476453783, 0), (200.07998657226562, 50, 343.4671630859375, 1) ), + 13: ( (93.55195959791625, 0, -35.3274801732284, 0), (0, 100, 0, 0), (35.3274801732284, 0, 93.55195959791625, 0), (190.3842315673828, 50, 316.1493225097656, 1) ), + 14: ( (-35.3274739446299, 0, -93.55196194998528, 0), (0, 100, 0, 0), (93.55196194998528, 0, -35.3274739446299, 0), (190.3842315673828, 50, 316.1493225097656, 1) ), + 15: ( (-93.55198076652283, 0, 35.32742411583586, 0), (0, 100, 0, 0), (-35.32742411583586, 0, -93.55198076652283, 0), (190.3842315673828, 50, 316.1493225097656, 1) ), + 16: ( (35.3274614874323, 0, 93.55196665412218, 0), (0, 100, 0, 0), (-93.55196665412218, 0, 35.3274614874323, 0), (190.3842315673828, 50, 316.1493225097656, 1) ), + 17: ( (92.84765842727789, 0, -37.13909428851938, 0), (0, 100, 0, 0), (37.13909428851938, 0, 92.84765842727789, 0), (179.29881286621094, 50, 288.435791015625, 1) ), + 18: ( (-37.13908810681252, 0, -92.84766089996245, 0), (0, 100, 0, 0), (92.84766089996245, 0, -37.13908810681252, 0), (179.29881286621094, 50, 288.435791015625, 1) ), + 19: ( (-92.8476707906966, 0, 37.139063379983405, 0), (0, 100, 0, 0), (-37.139063379983405, 0, -92.8476707906966, 0), (179.29881286621094, 50, 288.435791015625, 1) ), + 20: ( (37.139051016567876, 0, 92.8476757360612, 0), (0, 100, 0, 0), (-92.8476757360612, 0, 37.139051016567876, 0), (179.29881286621094, 50, 288.435791015625, 1) ), + 21: ( (99.35336396000764, 0, -11.35381300842386, 0), (0, 100, 0, 0), (11.35381300842386, 0, 99.35336396000764, 0), (168.21337890625, 50, 260.72222900390625, 1) ), + 22: ( (-11.353819623274136, 0, -99.3533632040816, 0), (0, 100, 0, 0), (99.3533632040816, 0, -11.353819623274136, 0), (168.21337890625, 50, 260.72222900390625, 1) ), + 23: ( (-99.353360180373, 0, 11.353846082674849, 0), (0, 100, 0, 0), (-11.353846082674849, 0, -99.353360180373, 0), (168.21337890625, 50, 260.72222900390625, 1) ), + 24: ( (11.353832852974605, 0, 99.35336169222818, 0), (0, 100, 0, 0), (-99.35336169222818, 0, 11.353832852974605, 0), (168.21337890625, 50, 260.72222900390625, 1) ), + 25: ( (96.82963661272952, 0, 24.980421802818935, 0), (0, 100, 0, 0), (-24.980421802818935, 0, 96.82963661272952, 0), (172.92344665527344, 50, 232.64712524414062, 1) ), + 26: ( (24.980408909172695, 0, -96.82963993907302, 0), (0, 100, 0, 0), (96.82963993907302, 0, 24.980408909172695, 0), (172.92344665527344, 50, 232.64712524414062, 1) ), + 27: ( (-96.82964991809325, 0, -24.980370228231266, 0), (0, 100, 0, 0), (24.980370228231266, 0, -96.82964991809325, 0), (172.92344665527344, 50, 232.64712524414062, 1) ), + 28: ( (-24.98042180281894, 0, 96.82963661272952, 0), (0, 100, 0, 0), (-96.82963661272952, 0, -24.98042180281894, 0), (172.92344665527344, 50, 232.64712524414062, 1) ), + 29: ( (99.99618834729712, 0, -0.8731071021810283, 0), (0, 100, 0, 0), (0.8731071021810283, 0, 99.99618834729712, 0), (182.72927856445312, 50, 204.45538330078125, 1) ), + 30: ( (-0.8733992065249928, 0, -99.99618579638945, 0), (0, 100, 0, 0), (99.99618579638945, 0, -0.8733992065249928, 0), (182.72927856445312, 50, 204.45538330078125, 1) ), + 31: ( (-99.99619439774517, 0, 0.872413874463225, 0), (0, 100, 0, 0), (-0.872413874463225, 0, -99.99619439774517, 0), (182.72927856445312, 50, 204.45538330078125, 1) ), + 32: ( (0.8734391524175431, 0, 99.99618544748107, 0), (0, 100, 0, 0), (-99.99618544748107, 0, 0.8734391524175431, 0), (182.72927856445312, 50, 204.45538330078125, 1) ), + 33: ( (88.12740113892592, 0, -47.260566739077916, 0), (0, 100, 0, 0), (47.260566739077916, 0, 88.12740113892592, 0), (172.45399475097656, 50, 178.88121032714844, 1) ), + 34: ( (-47.260540335610905, 0, -88.1274152984535, 0), (0, 100, 0, 0), (88.1274152984535, 0, -47.260540335610905, 0), (172.45399475097656, 50, 178.88121032714844, 1) ), + 35: ( (-88.1274152984535, 0, 47.2605403356109, 0), (0, 100, 0, 0), (-47.2605403356109, 0, -88.1274152984535, 0), (172.45399475097656, 50, 178.88121032714844, 1) ), + 36: ( (47.26055207048566, 0, 88.1274090053311, 0), (0, 100, 0, 0), (-88.1274090053311, 0, 47.26055207048566, 0), (172.45399475097656, 50, 178.88121032714844, 1) ), + 37: ( (93.34443704147198, 0, -35.87221868536534, 0), (0, 100, 0, 0), (35.87221868536534, 0, 93.34443704147198, 0), (155.74911499023438, 50, 154.14511108398438, 1) ), + 38: ( (-35.87217207449726, 0, -93.34445495399102, 0), (0, 100, 0, 0), (93.34445495399102, 0, -35.87217207449726, 0), (155.74911499023438, 50, 154.14511108398438, 1) ), + 39: ( (-93.34446450732501, 0, 35.872147215363924, 0), (0, 100, 0, 0), (-35.872147215363924, 0, -93.34446450732501, 0), (155.74911499023438, 50, 154.14511108398438, 1) ), + 40: ( (35.87217207449723, 0, 93.34445495399103, 0), (0, 100, 0, 0), (-93.34445495399103, 0, 35.87217207449723, 0), (155.74911499023438, 50, 154.14511108398438, 1) ), + 41: ( (99.15022981509414, 0, -13.008917234497972, 0), (0, 100, 0, 0), (13.008917234497972, 0, 99.15022981509414, 0), (151.78631591796875, 50, 125.10105895996094, 1) ), + 42: ( (-13.008787683466979, 0, -99.1502468126352, 0), (0, 100, 0, 0), (99.1502468126352, 0, -13.008787683466979, 0), (151.78631591796875, 50, 125.10105895996094, 1) ), + 43: ( (-99.1502294902987, 0, 13.008919709995165, 0), (0, 100, 0, 0), (-13.008919709995165, 0, -99.1502294902987, 0), (151.78631591796875, 50, 125.10105895996094, 1) ), + 44: ( (13.008919709995158, 0, 99.1502294902987, 0), (0, 100, 0, 0), (-99.1502294902987, 0, 13.008919709995158, 0), (151.78631591796875, 50, 125.10105895996094, 1) ), + 45: ( (85.45806017089585, 0, -51.931877992496524, 0), (0, 100, 0, 0), (51.931877992496524, 0, 85.45806017089585, 0), (148.16603088378906, 50, 96.3490219116211, 1) ), + 46: ( (-51.931866613067015, 0, -85.45806708604294, 0), (0, 100, 0, 0), (85.45806708604294, 0, -51.931866613067015, 0), (148.16603088378906, 50, 96.3490219116211, 1) ), + 47: ( (-85.45806708604292, 0, 51.931866613067044, 0), (0, 100, 0, 0), (-51.931866613067044, 0, -85.45806708604292, 0), (148.16603088378906, 50, 96.3490219116211, 1) ), + 48: ( (51.9318723027819, 0, 85.45806362846957, 0), (0, 100, 0, 0), (-85.45806362846957, 0, 51.9318723027819, 0), (148.16603088378906, 50, 96.3490219116211, 1) ), + 49: ( (57.85433677876932, 0, -81.56516239111365, 0), (0, 100, 0, 0), (81.56516239111365, 0, 57.85433677876932, 0), (123.82008361816406, 50, 79.08038330078125, 1) ), + 50: ( (-81.56514313168181, 0, -57.85436393141195, 0), (0, 100, 0, 0), (57.85436393141195, 0, -81.56514313168181, 0), (123.82008361816406, 50, 79.08038330078125, 1) ), + 51: ( (-57.85436393141195, 0, 81.56514313168181, 0), (0, 100, 0, 0), (-81.56514313168181, 0, -57.85436393141195, 0), (123.82008361816406, 50, 79.08038330078125, 1) ), + 52: ( (81.56515083545563, 0, 57.85435307035567, 0), (0, 100, 0, 0), (-57.85435307035567, 0, 81.56515083545563, 0), (123.82008361816406, 50, 79.08038330078125, 1) ), + 53: ( (32.41926935428071, 0, -94.59910662651416, 0), (0, 100, 0, 0), (94.59910662651416, 0, 32.41926935428071, 0), (99.47421264648438, 50, 61.811805725097656, 1) ), + 54: ( (-94.5990893589534, 0, -32.419319740808085, 0), (0, 100, 0, 0), (32.419319740808085, 0, -94.5990893589534, 0), (99.47421264648438, 50, 61.811805725097656, 1) ), + 55: ( (-32.419307144177125, 0, 94.5990936758461, 0), (0, 100, 0, 0), (-94.5990936758461, 0, -32.419307144177125, 0), (99.47421264648438, 50, 61.811805725097656, 1) ), + 56: ( (94.59910015118203, 0, 32.41928824922956, 0), (0, 100, 0, 0), (-32.41928824922956, 0, 94.59910015118203, 0), (99.47421264648438, 50, 61.811805725097656, 1) ), + 57: ( (1.5288878442869327, 0, -99.98831182673099, 0), (0, 100, 0, 0), (99.98831182673099, 0, 1.5288878442869327, 0), (70.06639862060547, 50, 60.65889358520508, 1) ), + 58: ( (-99.98832770086884, 0, -1.5278493327765268, 0), (0, 100, 0, 0), (1.5278493327765268, 0, -99.98832770086884, 0), (70.06639862060547, 50, 60.65889358520508, 1) ), + 59: ( (-1.5293005859952489, 0, 99.98830551478345, 0), (0, 100, 0, 0), (-99.98830551478345, 0, -1.5293005859952489, 0), (70.06639862060547, 50, 60.65889358520508, 1) ), + 60: ( (99.98830699270819, 0, 1.5292039536772641, 0), (0, 100, 0, 0), (-1.5292039536772641, 0, 99.98830699270819, 0), (70.06639862060547, 50, 60.65889358520508, 1) ), + 61: ( (0.8816014268735769, 0, -99.99611381910867, 0), (0, 100, 0, 0), (99.99611381910867, 0, 0.8816014268735769, 0), (40.219017028808594, 50, 60.90556716918945, 1) ), + 62: ( (-99.99611311472276, 0, -0.8816813186011246, 0), (0, 100, 0, 0), (0.8816813186011246, 0, -99.99611311472276, 0), (40.219017028808594, 50, 60.90556716918945, 1) ), + 63: ( (-0.8816147421615387, 0, 99.99611370171544, 0), (0, 100, 0, 0), (-99.99611370171544, 0, -0.8816147421615387, 0), (40.219017028808594, 50, 60.90556716918945, 1) ), + 64: ( (99.99611434093674, 0, 0.8815422362573475, 0), (0, 100, 0, 0), (-0.8815422362573475, 0, 99.99611434093674, 0), (40.219017028808594, 50, 60.90556716918945, 1) ), + 65: ( (4.7886222065225095, 0, -99.8852796830604, 0), (0, 100, 0, 0), (99.8852796830604, 0, 4.7886222065225095, 0), (10.403030395507812, 50, 60.13291549682617, 1) ), + 66: ( (-99.88529307318584, 0, -4.788342895383941, 0), (0, 100, 0, 0), (4.788342895383941, 0, -99.88529307318584, 0), (10.403030395507812, 50, 60.13291549682617, 1) ), + 67: ( (-4.788648807581375, 0, 99.88527840776963, 0), (0, 100, 0, 0), (-99.88527840776963, 0, -4.788648807581375, 0), (10.403030395507812, 50, 60.13291549682617, 1) ), + 68: ( (99.88527575753334, 0, 4.788704087905739, 0), (0, 100, 0, 0), (-4.788704087905739, 0, 99.88527575753334, 0), (10.403030395507812, 50, 60.13291549682617, 1) ), + 69: ( (-15.331564635891295, 0, -98.81772677923475, 0), (0, 100, 0, 0), (98.81772677923475, 0, -15.331564635891295, 0), (-19.372478485107422, 50, 58.04862976074219, 1) ), + 70: ( (-98.817734945306, 0, 15.331512002384178, 0), (-0, 100, 0, 0), (-15.331512002384178, 0, -98.817734945306, 0), (-19.372478485107422, 50, 58.04862976074219, 1) ), + 71: ( (15.331498844006694, 0, 98.81773698681944, 0), (0, 100, 0, 0), (-98.81773698681944, 0, 15.331498844006694, 0), (-19.372478485107422, 50, 58.04862976074219, 1) ), + 72: ( (98.81772907594511, 0, -15.331549832717878, 0), (0, 100, 0, 0), (15.331549832717878, 0, 98.81772907594511, 0), (-19.372478485107422, 50, 58.04862976074219, 1) ), + 73: ( (-83.54445400484529, 0, -54.95747633427401, 0), (0, 100, 0, 0), (54.95747633427401, 0, -83.54445400484529, 0), (-39.85139465332031, 50, 67.92987823486328, 1) ), + 74: ( (-54.957498583506, 0, 83.54443936878107, 0), (-0, 100, 0, 0), (-83.54443936878107, 0, -54.957498583506, 0), (-39.85139465332031, 50, 67.92987823486328, 1) ), + 75: ( (83.54445766386041, 0, 54.95747077196542, 0), (0, 100, 0, 0), (-54.95747077196542, 0, 83.54445766386041, 0), (-39.85139465332031, 50, 67.92987823486328, 1) ), + 76: ( (54.95744852272858, 0, -83.54447229991723, 0), (0, 100, 0, 0), (83.54447229991723, 0, 54.95744852272858, 0), (-39.85139465332031, 50, 67.92987823486328, 1) ), + 77: ( (-98.38698823818073, 0, -17.888559064946673, 0), (0, 100, 0, 0), (17.888559064946673, 0, -98.38698823818073, 0), (-45.190834045410156, 50, 97.29681396484375, 1) ), + 78: ( (-17.888493559842985, 0, 98.38700014818754, 0), (-0, 100, 0, 0), (-98.38700014818754, 0, -17.888493559842985, 0), (-45.190834045410156, 50, 97.29681396484375, 1) ), + 79: ( (98.38699151343697, 0, 17.888541051043937, 0), (0, 100, 0, 0), (-17.888541051043937, 0, 98.38699151343697, 0), (-45.190834045410156, 50, 97.29681396484375, 1) ), + 80: ( (17.888572165966437, 0, -98.38698585617415, 0), (0, 100, 0, 0), (98.38698585617415, 0, 17.888572165966437, 0), (-45.190834045410156, 50, 97.29681396484375, 1) ), + 81: ( (-98.38698823818073, 0, -17.888559064946673, 0), (0, 100, 0, 0), (17.888559064946673, 0, -98.38698823818073, 0), (-50.530296325683594, 50, 126.66384887695312, 1) ), + 82: ( (-17.88855906494666, 0, 98.38698823818073, 0), (-0, 100, 0, 0), (-98.38698823818073, 0, -17.88855906494666, 0), (-50.530296325683594, 50, 126.66384887695312, 1) ), + 83: ( (98.38699062018559, 0, 17.888545963926557, 0), (0, 100, 0, 0), (-17.888545963926557, 0, 98.38699062018559, 0), (-50.530296325683594, 50, 126.66384887695312, 1) ), + 84: ( (17.888572165966437, 0, -98.38698585617415, 0), (0, 100, 0, 0), (98.38698585617415, 0, 17.888572165966437, 0), (-50.530296325683594, 50, 126.66384887695312, 1) ), + 85: ( (-99.9373944767612, 0, -3.5379634249409673, 0), (0, 100, 0, 0), (3.5379634249409673, 0, -99.9373944767612, 0), (-55.8697395324707, 50, 156.03079223632812, 1) ), + 86: ( (-3.5377371979585783, 0, 99.9374024853467, 0), (-0, 100, 0, 0), (-99.9374024853467, 0, -3.5377371979585783, 0), (-55.8697395324707, 50, 156.03079223632812, 1) ), + 87: ( (99.93739964412406, 0, 3.537817458636395, 0), (0, 100, 0, 0), (-3.537817458636395, 0, 99.93739964412406, 0), (-55.8697395324707, 50, 156.03079223632812, 1) ), + 88: ( (3.5377105830182747, 0, -99.93740342749956, 0), (0, 100, 0, 0), (99.93740342749956, 0, 3.5377105830182747, 0), (-55.8697395324707, 50, 156.03079223632812, 1) ), + 89: ( (-91.5746518190726, 0, 40.17565362524452, 0), (-0, 100, 0, 0), (-40.17565362524452, 0, -91.5746518190726, 0), (-52.617401123046875, 50, 185.62106323242188, 1) ), + 90: ( (40.175653625244514, 0, 91.5746518190726, 0), (0, 100, 0, 0), (-91.5746518190726, 0, 40.175653625244514, 0), (-52.617401123046875, 50, 185.62106323242188, 1) ), + 91: ( (91.57464379450296, 0, -40.17567191609743, 0), (0, 100, 0, 0), (40.17567191609743, 0, 91.57464379450296, 0), (-52.617401123046875, 50, 185.62106323242188, 1) ), + 92: ( (-40.175604849628925, 0, -91.5746732179071, 0), (0, 100, 0, 0), (91.5746732179071, 0, -40.175604849628925, 0), (-52.617401123046875, 50, 185.62106323242188, 1) ), + 93: ( (-34.06100709944973, 0, 94.02046476895993, 0), (-0, 100, 0, 0), (-94.02046476895993, 0, -34.06100709944973, 0), (-36.02732467651367, 50, 201.2587127685547, 1) ), + 94: ( (94.02046590283423, 0, 34.06100396955416, 0), (0, 100, 0, 0), (-34.06100396955416, 0, 94.02046590283423, 0), (-36.02732467651367, 50, 201.2587127685547, 1) ), + 95: ( (34.06099457986726, 0, -94.02046930445653, 0), (0, 100, 0, 0), (94.02046930445653, 0, 34.06099457986726, 0), (-36.02732467651367, 50, 201.2587127685547, 1) ), + 96: ( (-94.02046476895994, 0, -34.061007099449704, 0), (0, 100, 0, 0), (34.061007099449704, 0, -94.02046476895994, 0), (-36.02732467651367, 50, 201.2587127685547, 1) ), + 97: ( (-30.321468629044546, 0, 95.29222707114084, 0), (-0, 100, 0, 0), (-95.29222707114084, 0, -30.321468629044546, 0), (-6.202140808105469, 50, 202.43601989746094, 1) ), + 98: ( (95.29221798665407, 0, 30.321497179130212, 0), (0, 100, 0, 0), (-30.321497179130212, 0, 95.29221798665407, 0), (-6.202140808105469, 50, 202.43601989746094, 1) ), + 99: ( (30.321481317971845, 0, -95.29222303359222, 0), (0, 100, 0, 0), (95.29222303359222, 0, 30.321481317971845, 0), (-6.202140808105469, 50, 202.43601989746094, 1) ), + 100: ( (-95.2922028458238, 0, -30.321544762600265, 0), (0, 100, 0, 0), (30.321544762600265, 0, -95.2922028458238, 0), (-6.202140808105469, 50, 202.43601989746094, 1) ), + 101: ( (-56.36991131514597, 0, 82.59802115258317, 0), (0, 100, 0, 0), (-82.59802115258317, 0, -56.36991131514597, 0), (18.507904052734375, 50, 218.61154174804688, 1) ), + 102: ( (82.59802115258319, 0, 56.36991131514596, 0), (0, 100, 0, 0), (-56.36991131514596, 0, 82.59802115258319, 0), (18.507904052734375, 50, 218.61154174804688, 1) ), + 103: ( (56.369883818663325, 0, -82.59803991784793, 0), (0, 100, 0, 0), (82.59803991784793, 0, 56.369883818663325, 0), (18.507904052734375, 50, 218.61154174804688, 1) ), + 104: ( (-82.59801364647473, 0, -56.369922313737256, 0), (0, 100, 0, 0), (56.369922313737256, 0, -82.59801364647473, 0), (18.507904052734375, 50, 218.61154174804688, 1) ), + 105: ( (-57.932493517099715, 0, 81.5096693337128, 0), (0, 100, 0, 0), (-81.5096693337128, 0, -57.932493517099715, 0), (42.83725357055664, 50, 235.90347290039062, 1) ), + 106: ( (81.50967319080166, 0, 57.93248809026511, 0), (0, 100, 0, 0), (-57.93248809026511, 0, 81.50967319080166, 0), (42.83725357055664, 50, 235.90347290039062, 1) ), + 107: ( (57.93247723659508, 0, -81.50968090497835, 0), (0, 100, 0, 0), (81.50968090497835, 0, 57.93247723659508, 0), (42.83725357055664, 50, 235.90347290039062, 1) ), + 108: ( (-81.50965390535363, 0, -57.932515224435654, 0), (0, 100, 0, 0), (57.932515224435654, 0, -81.50965390535363, 0), (42.83725357055664, 50, 235.90347290039062, 1) ), + 109: ( (-74.04761014768307, 0, 67.20826907023229, 0), (0, 100, 0, 0), (-67.20826907023229, 0, -74.04761014768307, 0), (67.1666030883789, 50, 253.19540405273438, 1) ), + 110: ( (67.20829372031784, 0, 74.04758777437308, 0), (0, 100, 0, 0), (-74.04758777437308, 0, 67.20829372031784, 0), (67.1666030883789, 50, 253.19540405273438, 1) ), + 111: ( (74.04757882504678, 0, -67.20830358034998, 0), (0, 100, 0, 0), (67.20830358034998, 0, 74.04757882504678, 0), (67.1666030883789, 50, 253.19540405273438, 1) ), + 112: ( (-67.20828879030134, 0, -74.04759224903572, 0), (0, 100, 0, 0), (74.04759224903572, 0, -67.20828879030134, 0), (67.1666030883789, 50, 253.19540405273438, 1) ), + 113: ( (-59.14333484589961, 0, 80.63538890155982, 0), (0, 100, 0, 0), (-80.63538890155982, 0, -59.14333484589961, 0), (81.78009033203125, 50, 278.8092346191406, 1) ), + 114: ( (80.63539283926534, 0, 59.143329477273745, 0), (0, 100, 0, 0), (-59.143329477273745, 0, 80.63539283926534, 0), (81.78009033203125, 50, 278.8092346191406, 1) ), + 115: ( (59.1433241086476, 0, -80.63539677697051, 0), (0, 100, 0, 0), (80.63539677697051, 0, 59.1433241086476, 0), (81.78009033203125, 50, 278.8092346191406, 1) ), + 116: ( (-80.63537315073415, 0, -59.14335632040054, 0), (0, 100, 0, 0), (59.14335632040054, 0, -80.63537315073415, 0), (81.78009033203125, 50, 278.8092346191406, 1) ), + 117: ( (44.417284853636836, 0, 89.59411144841431, 0), (0, 100, 0, 0), (-89.59411144841431, 0, 44.417284853636836, 0), (100.66987609863281, 50, 277.7689208984375, 1) ), + 118: ( (89.59410405526401, 0, -44.41729976635819, 0), (0, 100, 0, 0), (44.41729976635819, 0, 89.59410405526401, 0), (100.66987609863281, 50, 277.7689208984375, 1) ), + 119: ( (-44.41724906310054, 0, -89.59412919196488, 0), (0, 100, 0, 0), (89.59412919196488, 0, -44.41724906310054, 0), (100.66987609863281, 50, 277.7689208984375, 1) ), + 120: ( (-89.59412919196487, 0, 44.41724906310057, 0), (0, 100, 0, 0), (-44.41724906310057, 0, -89.59412919196487, 0), (100.66987609863281, 50, 277.7689208984375, 1) ), + 121: ( (65.3953663703601, 0, 75.65346031270728, 0), (0, 100, 0, 0), (-75.65346031270728, 0, 65.3953663703601, 0), (123.251220703125, 50, 258.24945068359375, 1) ), + 122: ( (75.65345595874723, 0, -65.39537140729375, 0), (0, 100, 0, 0), (65.39537140729375, 0, 75.65345595874723, 0), (123.251220703125, 50, 258.24945068359375, 1) ), + 123: ( (-65.39535125955742, 0, -75.6534733745854, 0), (0, 100, 0, 0), (75.6534733745854, 0, -65.39535125955742, 0), (123.251220703125, 50, 258.24945068359375, 1) ), + 124: ( (-75.6534733745854, 0, 65.39535125955742, 0), (0, 100, 0, 0), (-65.39535125955742, 0, -75.6534733745854, 0), (123.251220703125, 50, 258.24945068359375, 1) ), + 125: ( (40.08184926918842, 0, 91.61574842330363, 0), (0, 100, 0, 0), (-91.61574842330363, 0, 40.08184926918842, 0), (-206.24050903320312, 50, 286.4216003417969, 1) ), + 126: ( (91.61573508024587, 0, -40.08187976762325, 0), (0, 100, 0, 0), (40.08187976762325, 0, 91.61573508024587, 0), (-206.24050903320312, 50, 286.4216003417969, 1) ), + 127: ( (-40.081837069813226, 0, -91.61575376052389, 0), (0, 100, 0, 0), (91.61575376052389, 0, -40.081837069813226, 0), (-206.24050903320312, 50, 286.4216003417969, 1) ), + 128: ( (-91.61574308608174, 0, 40.08186146856288, 0), (-0, 100, 0, 0), (-40.08186146856288, 0, -91.61574308608174, 0), (-206.24050903320312, 50, 286.4216003417969, 1) ), + 129: ( (40.19849155482872, 0, 91.56462896073114, 0), (0, 100, 0, 0), (-91.56462896073114, 0, 40.19849155482872, 0), (-180.79183959960938, 50, 275.2878112792969, 1) ), + 130: ( (91.56462226978871, 0, -40.19850679553797, 0), (0, 100, 0, 0), (40.19850679553797, 0, 91.56462226978871, 0), (-180.79183959960938, 50, 275.2878112792969, 1) ), + 131: ( (-40.19845497712194, 0, -91.56464501898263, 0), (0, 100, 0, 0), (91.56464501898263, 0, -40.19845497712194, 0), (-180.79183959960938, 50, 275.2878112792969, 1) ), + 132: ( (-91.56463431348327, 0, 40.19847936226051, 0), (-0, 100, 0, 0), (-40.19847936226051, 0, -91.56463431348327, 0), (-180.79183959960938, 50, 275.2878112792969, 1) ), + 133: ( (41.75245149812676, 0, 90.86656587489466, 0), (0, 100, 0, 0), (-90.86656587489466, 0, 41.75245149812676, 0), (-155.37261962890625, 50, 264.0896911621094, 1) ), + 134: ( (90.86655614546059, 0, -41.75247267245209, 0), (0, 100, 0, 0), (41.75247267245209, 0, 90.86655614546059, 0), (-155.37261962890625, 50, 264.0896911621094, 1) ), + 135: ( (-41.752415199278005, 0, -90.86658255391306, 0), (0, 100, 0, 0), (90.86658255391306, 0, -41.752415199278005, 0), (-155.37261962890625, 50, 264.0896911621094, 1) ), + 136: ( (-90.86657143456908, 0, 41.75243939851123, 0), (-0, 100, 0, 0), (-41.75243939851123, 0, -90.86657143456908, 0), (-155.37261962890625, 50, 264.0896911621094, 1) ), + 137: ( (43.17948533819106, 0, 90.19718424612235, 0), (0, 100, 0, 0), (-90.19718424612235, 0, 43.17948533819106, 0), (-130.3179931640625, 50, 252.09547424316406, 1) ), + 138: ( (90.19717993384971, 0, -43.179494346052024, 0), (0, 100, 0, 0), (43.179494346052024, 0, 90.19717993384971, 0), (-130.3179931640625, 50, 252.09547424316406, 1) ), + 139: ( (-43.17944930674292, 0, -90.19720149520394, 0), (0, 100, 0, 0), (90.19720149520394, 0, -43.17944930674292, 0), (-130.3179931640625, 50, 252.09547424316406, 1) ), + 140: ( (-90.19718999581782, 0, 43.1794733277091, 0), (-0, 100, 0, 0), (-43.1794733277091, 0, -90.19718999581782, 0), (-130.3179931640625, 50, 252.09547424316406, 1) ), + 141: ( (69.61251764062911, 0, 71.79204264912026, 0), (0, 100, 0, 0), (-71.79204264912026, 0, 69.61251764062911, 0), (-105.26336669921875, 50, 240.10122680664062, 1) ), + 142: ( (71.7920287449177, 0, -69.61253198016081, 0), (0, 100, 0, 0), (69.61253198016081, 0, 71.7920287449177, 0), (-105.26336669921875, 50, 240.10122680664062, 1) ), + 143: ( (-69.61251286078459, 0, -71.7920472838538, 0), (0, 100, 0, 0), (71.7920472838538, 0, -69.61251286078459, 0), (-105.26336669921875, 50, 240.10122680664062, 1) ), + 144: ( (-71.7920472838538, 0, 69.61251286078459, 0), (-0, 100, 0, 0), (-69.61251286078459, 0, -71.7920472838538, 0), (-105.26336669921875, 50, 240.10122680664062, 1) ), + 145: ( (93.46797624482389, 0, 35.549084611239124, 0), (0, 100, 0, 0), (-35.549084611239124, 0, 93.46797624482389, 0), (-93.77804565429688, 50, 216.66482543945312, 1) ), + 146: ( (35.54907527672853, 0, -93.46797979505862, 0), (0, 100, 0, 0), (93.46797979505862, 0, 35.54907527672853, 0), (-93.77804565429688, 50, 216.66482543945312, 1) ), + 147: ( (-93.46796559411405, 0, -35.549112614768745, 0), (0, 100, 0, 0), (35.549112614768745, 0, -93.46796559411405, 0), (-93.77804565429688, 50, 216.66482543945312, 1) ), + 148: ( (-35.54908772274256, 0, 93.4679750614121, 0), (-0, 100, 0, 0), (-93.4679750614121, 0, -35.54908772274256, 0), (-93.77804565429688, 50, 216.66482543945312, 1) ), + 149: ( (80.33977447143441, 0, 59.54427460200565, 0), (0, 100, 0, 0), (-59.54427460200565, 0, 80.33977447143441, 0), (-86.18705749511719, 50, 189.94454956054688, 1) ), + 150: ( (59.544258555172355, 0, -80.33978636463246, 0), (0, 100, 0, 0), (80.33978636463246, 0, 59.544258555172355, 0), (-86.18705749511719, 50, 189.94454956054688, 1) ), + 151: ( (-80.33977050703437, 0, -59.544279950949544, 0), (0, 100, 0, 0), (59.544279950949544, 0, -80.33977050703437, 0), (-86.18705749511719, 50, 189.94454956054688, 1) ), + 152: ( (-59.54429064883655, 0, 80.33976257823318, 0), (-0, 100, 0, 0), (-80.33976257823318, 0, -59.54429064883655, 0), (-86.18705749511719, 50, 189.94454956054688, 1) ), + 153: ( (-99.98767846999438, 0, 1.5697624600628162, 0), (-0, 100, 0, 0), (-1.5697624600628162, 0, -99.98767846999438, 0), (-84.8638687133789, 50, 204.63742065429688, 1) ), + 154: ( (1.5711870755305466, 0, 99.98765609400834, 0), (0, 100, 0, 0), (-99.98765609400834, 0, 1.5711870755305466, 0), (-84.8638687133789, 50, 204.63742065429688, 1) ), + 155: ( (99.98765749800536, 0, -1.5710977250224836, 0), (0, 100, 0, 0), (1.5710977250224836, 0, 99.98765749800536, 0), (-84.8638687133789, 50, 204.63742065429688, 1) ), + 156: ( (-1.5707743365026399, 0, -99.98766257885913, 0), (0, 100, 0, 0), (99.98766257885913, 0, -1.5707743365026399, 0), (-84.8638687133789, 50, 204.63742065429688, 1) ), + 157: ( (-99.97213348939562, 0, -2.360619744571767, 0), (0, 100, 0, 0), (2.360619744571767, 0, -99.97213348939562, 0), (-85.51984405517578, 50, 232.40728759765625, 1) ), + 158: ( (-2.361578215288861, 0, 99.97211085264266, 0), (-0, 100, 0, 0), (-99.97211085264266, 0, -2.361578215288861, 0), (-85.51984405517578, 50, 232.40728759765625, 1) ), + 159: ( (99.97211181076437, 0, 2.3615376550089993, 0), (0, 100, 0, 0), (-2.3615376550089993, 0, 99.97211181076437, 0), (-85.51984405517578, 50, 232.40728759765625, 1) ), + 160: ( (2.3615649031970585, 0, -99.97211116710494, 0), (0, 100, 0, 0), (99.97211116710494, 0, 2.3615649031970585, 0), (-85.51984405517578, 50, 232.40728759765625, 1) ), + 161: ( (-99.99530273647386, 0, 0.9692423024941441, 0), (-0, 100, 0, 0), (-0.9692423024941441, 0, -99.99530273647386, 0), (-86.17582702636719, 50, 260.17718505859375, 1) ), + 162: ( (0.9679640451376755, 0, 99.99531511829602, 0), (0, 100, 0, 0), (-99.99531511829602, 0, 0.9679640451376755, 0), (-86.17582702636719, 50, 260.17718505859375, 1) ), + 163: ( (99.99530382739127, 0, -0.9691297476128254, 0), (0, 100, 0, 0), (0.9691297476128254, 0, 99.99530382739127, 0), (-86.17582702636719, 50, 260.17718505859375, 1) ), + 164: ( (-0.9691624114140065, 0, -99.99530351081646, 0), (0, 100, 0, 0), (99.99530351081646, 0, -0.9691624114140065, 0), (-86.17582702636719, 50, 260.17718505859375, 1) ), + 165: ( (-99.90135735059201, 0, 4.44058549172483, 0), (-0, 100, 0, 0), (-4.44058549172483, 0, -99.90135735059201, 0), (-84.98176574707031, 50, 287.9264831542969, 1) ), + 166: ( (4.440505675701081, 0, 99.90136089835848, 0), (0, 100, 0, 0), (-99.90136089835848, 0, 4.440505675701081, 0), (-84.98176574707031, 50, 287.9264831542969, 1) ), + 167: ( (99.90135186251514, 0, -4.440708957130956, 0), (0, 100, 0, 0), (4.440708957130956, 0, 99.90135186251514, 0), (-84.98176574707031, 50, 287.9264831542969, 1) ), + 168: ( (-4.440479070359245, 0, -99.90136208093313, 0), (0, 100, 0, 0), (99.90136208093313, 0, -4.440479070359245, 0), (-84.98176574707031, 50, 287.9264831542969, 1) ), + 169: ( (-92.57118375421382, 0, 37.822955177293835, 0), (-0, 100, 0, 0), (-37.822955177293835, 0, -92.57118375421382, 0), (-83.70890045166016, 50, 315.6749267578125, 1) ), + 170: ( (37.822955177293835, 0, 92.57118375421382, 0), (0, 100, 0, 0), (-92.57118375421382, 0, 37.822955177293835, 0), (-83.70890045166016, 50, 315.6749267578125, 1) ), + 171: ( (92.57117619956529, 0, -37.82297366719118, 0), (0, 100, 0, 0), (37.82297366719118, 0, 92.57117619956529, 0), (-83.70890045166016, 50, 315.6749267578125, 1) ), + 172: ( (-37.82293052409503, 0, -92.57119382707279, 0), (0, 100, 0, 0), (92.57119382707279, 0, -37.82293052409503, 0), (-83.70890045166016, 50, 315.6749267578125, 1) ), + 173: ( (-36.9847167472146, 0, 92.90926071780092, 0), (-0, 100, 0, 0), (-92.90926071780092, 0, -36.9847167472146, 0), (-67.86772918701172, 50, 329.8128356933594, 1) ), + 174: ( (92.90926318020718, 0, 36.98471056140631, 0), (0, 100, 0, 0), (-36.98471056140631, 0, 92.90926318020718, 0), (-67.86772918701172, 50, 329.8128356933594, 1) ), + 175: ( (36.98470437559787, 0, -92.90926564261301, 0), (0, 100, 0, 0), (92.90926564261301, 0, 36.98470437559787, 0), (-67.86772918701172, 50, 329.8128356933594, 1) ), + 176: ( (-92.90926071780092, 0, -36.98471674721457, 0), (0, 100, 0, 0), (36.98471674721457, 0, -92.90926071780092, 0), (-67.86772918701172, 50, 329.8128356933594, 1) ), + 177: ( (-11.354639864321484, 0, 99.35326946583872, 0), (-0, 100, 0, 0), (-99.35326946583872, 0, -11.354639864321484, 0), (-40.26976776123047, 50, 332.9668884277344, 1) ), + 178: ( (99.35326719789411, 0, 11.35465970885337, 0), (0, 100, 0, 0), (-11.35465970885337, 0, 99.35326719789411, 0), (-40.26976776123047, 50, 332.9668884277344, 1) ), + 179: ( (11.354666323697229, 0, -99.35326644191169, 0), (0, 100, 0, 0), (99.35326644191169, 0, 11.354666323697229, 0), (-40.26976776123047, 50, 332.9668884277344, 1) ), + 180: ( (-99.3532603940365, 0, -11.354719242446281, 0), (0, 100, 0, 0), (11.354719242446281, 0, -99.3532603940365, 0), (-40.26976776123047, 50, 332.9668884277344, 1) ), + 181: ( (59.35417272206986, 0, 80.48032169716208, 0), (0, 100, 0, 0), (-80.48032169716208, 0, 59.35417272206986, 0), (152.0358123779297, 120, 378.8997497558594, 1) ), + 182: ( (80.48031379367521, 0, -59.35418343867239, 0), (0, 100, 0, 0), (59.35418343867239, 0, 80.48031379367521, 0), (152.0358123779297, 120, 378.8997497558594, 1) ), + 183: ( (-59.35416200546625, 0, -80.48032960064755, 0), (0, 100, 0, 0), (80.48032960064755, 0, -59.35416200546625, 0), (152.0358123779297, 120, 378.8997497558594, 1) ), + 184: ( (-80.48032960064752, 0, 59.35416200546628, 0), (0, 100, 0, 0), (-59.35416200546628, 0, -80.48032960064752, 0), (152.0358123779297, 120, 378.8997497558594, 1) ), + 185: ( (59.354204871874316, 0, 80.48029798669715, 0), (0, 100, 0, 0), (-80.48029798669715, 0, 59.354204871874316, 0), (176.0579071044922, 120, 361.1834716796875, 1) ), + 186: ( (80.48027822796658, 0, -59.35423166337078, 0), (0, 100, 0, 0), (59.35423166337078, 0, 80.48027822796658, 0), (176.0579071044922, 120, 361.1834716796875, 1) ), + 187: ( (-59.354204871874316, 0, -80.48029798669715, 0), (0, 100, 0, 0), (80.48029798669715, 0, -59.354204871874316, 0), (176.0579071044922, 120, 361.1834716796875, 1) ), + 188: ( (-80.48031379367521, 0, 59.35418343867238, 0), (0, 100, 0, 0), (-59.35418343867238, 0, -80.48031379367521, 0), (176.0579071044922, 120, 361.1834716796875, 1) ), + 189: ( (95.29424159711762, 0, 30.31513678725825, 0), (0, 100, 0, 0), (-30.31513678725825, 0, 95.29424159711762, 0), (200.07998657226562, 120, 343.4671630859375, 1) ), + 190: ( (30.315124098062167, 0, -95.2942456338214, 0), (0, 100, 0, 0), (95.2942456338214, 0, 30.315124098062167, 0), (200.07998657226562, 120, 343.4671630859375, 1) ), + 191: ( (-95.29423756041214, 0, -30.31514947645378, 0), (0, 100, 0, 0), (30.31514947645378, 0, -95.29423756041214, 0), (200.07998657226562, 120, 343.4671630859375, 1) ), + 192: ( (-30.315149476453783, 0, 95.29423756041214, 0), (0, 100, 0, 0), (-95.29423756041214, 0, -30.315149476453783, 0), (200.07998657226562, 120, 343.4671630859375, 1) ), + 193: ( (93.55195959791625, 0, -35.3274801732284, 0), (0, 100, 0, 0), (35.3274801732284, 0, 93.55195959791625, 0), (190.3842315673828, 120, 316.1493225097656, 1) ), + 194: ( (-35.3274739446299, 0, -93.55196194998528, 0), (0, 100, 0, 0), (93.55196194998528, 0, -35.3274739446299, 0), (190.3842315673828, 120, 316.1493225097656, 1) ), + 195: ( (-93.55198076652283, 0, 35.32742411583586, 0), (0, 100, 0, 0), (-35.32742411583586, 0, -93.55198076652283, 0), (190.3842315673828, 120, 316.1493225097656, 1) ), + 196: ( (35.3274614874323, 0, 93.55196665412218, 0), (0, 100, 0, 0), (-93.55196665412218, 0, 35.3274614874323, 0), (190.3842315673828, 120, 316.1493225097656, 1) ), + 197: ( (92.84765842727789, 0, -37.13909428851938, 0), (0, 100, 0, 0), (37.13909428851938, 0, 92.84765842727789, 0), (179.29881286621094, 120, 288.435791015625, 1) ), + 198: ( (-37.13908810681252, 0, -92.84766089996245, 0), (0, 100, 0, 0), (92.84766089996245, 0, -37.13908810681252, 0), (179.29881286621094, 120, 288.435791015625, 1) ), + 199: ( (-92.8476707906966, 0, 37.139063379983405, 0), (0, 100, 0, 0), (-37.139063379983405, 0, -92.8476707906966, 0), (179.29881286621094, 120, 288.435791015625, 1) ), + 200: ( (37.139051016567876, 0, 92.8476757360612, 0), (0, 100, 0, 0), (-92.8476757360612, 0, 37.139051016567876, 0), (179.29881286621094, 120, 288.435791015625, 1) ), + 201: ( (99.35336396000764, 0, -11.35381300842386, 0), (0, 100, 0, 0), (11.35381300842386, 0, 99.35336396000764, 0), (168.21337890625, 120, 260.72222900390625, 1) ), + 202: ( (-11.353819623274136, 0, -99.3533632040816, 0), (0, 100, 0, 0), (99.3533632040816, 0, -11.353819623274136, 0), (168.21337890625, 120, 260.72222900390625, 1) ), + 203: ( (-99.353360180373, 0, 11.353846082674849, 0), (0, 100, 0, 0), (-11.353846082674849, 0, -99.353360180373, 0), (168.21337890625, 120, 260.72222900390625, 1) ), + 204: ( (11.353832852974605, 0, 99.35336169222818, 0), (0, 100, 0, 0), (-99.35336169222818, 0, 11.353832852974605, 0), (168.21337890625, 120, 260.72222900390625, 1) ), + 205: ( (96.82963661272952, 0, 24.980421802818935, 0), (0, 100, 0, 0), (-24.980421802818935, 0, 96.82963661272952, 0), (172.92344665527344, 120, 232.64712524414062, 1) ), + 206: ( (24.980408909172695, 0, -96.82963993907302, 0), (0, 100, 0, 0), (96.82963993907302, 0, 24.980408909172695, 0), (172.92344665527344, 120, 232.64712524414062, 1) ), + 207: ( (-96.82964991809325, 0, -24.980370228231266, 0), (0, 100, 0, 0), (24.980370228231266, 0, -96.82964991809325, 0), (172.92344665527344, 120, 232.64712524414062, 1) ), + 208: ( (-24.98042180281894, 0, 96.82963661272952, 0), (0, 100, 0, 0), (-96.82963661272952, 0, -24.98042180281894, 0), (172.92344665527344, 120, 232.64712524414062, 1) ), + 209: ( (99.99618834729712, 0, -0.8731071021810283, 0), (0, 100, 0, 0), (0.8731071021810283, 0, 99.99618834729712, 0), (182.72927856445312, 120, 204.45538330078125, 1) ), + 210: ( (-0.8733992065249928, 0, -99.99618579638945, 0), (0, 100, 0, 0), (99.99618579638945, 0, -0.8733992065249928, 0), (182.72927856445312, 120, 204.45538330078125, 1) ), + 211: ( (-99.99619439774517, 0, 0.872413874463225, 0), (0, 100, 0, 0), (-0.872413874463225, 0, -99.99619439774517, 0), (182.72927856445312, 120, 204.45538330078125, 1) ), + 212: ( (0.8734391524175431, 0, 99.99618544748107, 0), (0, 100, 0, 0), (-99.99618544748107, 0, 0.8734391524175431, 0), (182.72927856445312, 120, 204.45538330078125, 1) ), + 213: ( (88.12740113892592, 0, -47.260566739077916, 0), (0, 100, 0, 0), (47.260566739077916, 0, 88.12740113892592, 0), (172.45399475097656, 120, 178.88121032714844, 1) ), + 214: ( (-47.260540335610905, 0, -88.1274152984535, 0), (0, 100, 0, 0), (88.1274152984535, 0, -47.260540335610905, 0), (172.45399475097656, 120, 178.88121032714844, 1) ), + 215: ( (-88.1274152984535, 0, 47.2605403356109, 0), (0, 100, 0, 0), (-47.2605403356109, 0, -88.1274152984535, 0), (172.45399475097656, 120, 178.88121032714844, 1) ), + 216: ( (47.26055207048566, 0, 88.1274090053311, 0), (0, 100, 0, 0), (-88.1274090053311, 0, 47.26055207048566, 0), (172.45399475097656, 120, 178.88121032714844, 1) ), + 217: ( (93.34443704147198, 0, -35.87221868536534, 0), (0, 100, 0, 0), (35.87221868536534, 0, 93.34443704147198, 0), (155.74911499023438, 120, 154.14511108398438, 1) ), + 218: ( (-35.87217207449726, 0, -93.34445495399102, 0), (0, 100, 0, 0), (93.34445495399102, 0, -35.87217207449726, 0), (155.74911499023438, 120, 154.14511108398438, 1) ), + 219: ( (-93.34446450732501, 0, 35.872147215363924, 0), (0, 100, 0, 0), (-35.872147215363924, 0, -93.34446450732501, 0), (155.74911499023438, 120, 154.14511108398438, 1) ), + 220: ( (35.87217207449723, 0, 93.34445495399103, 0), (0, 100, 0, 0), (-93.34445495399103, 0, 35.87217207449723, 0), (155.74911499023438, 120, 154.14511108398438, 1) ), + 221: ( (99.15022981509414, 0, -13.008917234497972, 0), (0, 100, 0, 0), (13.008917234497972, 0, 99.15022981509414, 0), (151.78631591796875, 120, 125.10105895996094, 1) ), + 222: ( (-13.008787683466979, 0, -99.1502468126352, 0), (0, 100, 0, 0), (99.1502468126352, 0, -13.008787683466979, 0), (151.78631591796875, 120, 125.10105895996094, 1) ), + 223: ( (-99.1502294902987, 0, 13.008919709995165, 0), (0, 100, 0, 0), (-13.008919709995165, 0, -99.1502294902987, 0), (151.78631591796875, 120, 125.10105895996094, 1) ), + 224: ( (13.008919709995158, 0, 99.1502294902987, 0), (0, 100, 0, 0), (-99.1502294902987, 0, 13.008919709995158, 0), (151.78631591796875, 120, 125.10105895996094, 1) ), + 225: ( (85.45806017089585, 0, -51.931877992496524, 0), (0, 100, 0, 0), (51.931877992496524, 0, 85.45806017089585, 0), (148.16603088378906, 120, 96.3490219116211, 1) ), + 226: ( (-51.931866613067015, 0, -85.45806708604294, 0), (0, 100, 0, 0), (85.45806708604294, 0, -51.931866613067015, 0), (148.16603088378906, 120, 96.3490219116211, 1) ), + 227: ( (-85.45806708604292, 0, 51.931866613067044, 0), (0, 100, 0, 0), (-51.931866613067044, 0, -85.45806708604292, 0), (148.16603088378906, 120, 96.3490219116211, 1) ), + 228: ( (51.9318723027819, 0, 85.45806362846957, 0), (0, 100, 0, 0), (-85.45806362846957, 0, 51.9318723027819, 0), (148.16603088378906, 120, 96.3490219116211, 1) ), + 229: ( (57.85433677876932, 0, -81.56516239111365, 0), (0, 100, 0, 0), (81.56516239111365, 0, 57.85433677876932, 0), (123.82008361816406, 120, 79.08038330078125, 1) ), + 230: ( (-81.56514313168181, 0, -57.85436393141195, 0), (0, 100, 0, 0), (57.85436393141195, 0, -81.56514313168181, 0), (123.82008361816406, 120, 79.08038330078125, 1) ), + 231: ( (-57.85436393141195, 0, 81.56514313168181, 0), (0, 100, 0, 0), (-81.56514313168181, 0, -57.85436393141195, 0), (123.82008361816406, 120, 79.08038330078125, 1) ), + 232: ( (81.56515083545563, 0, 57.85435307035567, 0), (0, 100, 0, 0), (-57.85435307035567, 0, 81.56515083545563, 0), (123.82008361816406, 120, 79.08038330078125, 1) ), + 233: ( (32.41926935428071, 0, -94.59910662651416, 0), (0, 100, 0, 0), (94.59910662651416, 0, 32.41926935428071, 0), (99.47421264648438, 120, 61.811805725097656, 1) ), + 234: ( (-94.5990893589534, 0, -32.419319740808085, 0), (0, 100, 0, 0), (32.419319740808085, 0, -94.5990893589534, 0), (99.47421264648438, 120, 61.811805725097656, 1) ), + 235: ( (-32.419307144177125, 0, 94.5990936758461, 0), (0, 100, 0, 0), (-94.5990936758461, 0, -32.419307144177125, 0), (99.47421264648438, 120, 61.811805725097656, 1) ), + 236: ( (94.59910015118203, 0, 32.41928824922956, 0), (0, 100, 0, 0), (-32.41928824922956, 0, 94.59910015118203, 0), (99.47421264648438, 120, 61.811805725097656, 1) ), + 237: ( (1.5288878442869327, 0, -99.98831182673099, 0), (0, 100, 0, 0), (99.98831182673099, 0, 1.5288878442869327, 0), (70.06639862060547, 120, 60.65889358520508, 1) ), + 238: ( (-99.98832770086884, 0, -1.5278493327765268, 0), (0, 100, 0, 0), (1.5278493327765268, 0, -99.98832770086884, 0), (70.06639862060547, 120, 60.65889358520508, 1) ), + 239: ( (-1.5293005859952489, 0, 99.98830551478345, 0), (0, 100, 0, 0), (-99.98830551478345, 0, -1.5293005859952489, 0), (70.06639862060547, 120, 60.65889358520508, 1) ), + 240: ( (99.98830699270819, 0, 1.5292039536772641, 0), (0, 100, 0, 0), (-1.5292039536772641, 0, 99.98830699270819, 0), (70.06639862060547, 120, 60.65889358520508, 1) ), + 241: ( (0.8816014268735769, 0, -99.99611381910867, 0), (0, 100, 0, 0), (99.99611381910867, 0, 0.8816014268735769, 0), (40.219017028808594, 120, 60.90556716918945, 1) ), + 242: ( (-99.99611311472276, 0, -0.8816813186011246, 0), (0, 100, 0, 0), (0.8816813186011246, 0, -99.99611311472276, 0), (40.219017028808594, 120, 60.90556716918945, 1) ), + 243: ( (-0.8816147421615387, 0, 99.99611370171544, 0), (0, 100, 0, 0), (-99.99611370171544, 0, -0.8816147421615387, 0), (40.219017028808594, 120, 60.90556716918945, 1) ), + 244: ( (99.99611434093674, 0, 0.8815422362573475, 0), (0, 100, 0, 0), (-0.8815422362573475, 0, 99.99611434093674, 0), (40.219017028808594, 120, 60.90556716918945, 1) ), + 245: ( (4.7886222065225095, 0, -99.8852796830604, 0), (0, 100, 0, 0), (99.8852796830604, 0, 4.7886222065225095, 0), (10.403030395507812, 120, 60.13291549682617, 1) ), + 246: ( (-99.88529307318584, 0, -4.788342895383941, 0), (0, 100, 0, 0), (4.788342895383941, 0, -99.88529307318584, 0), (10.403030395507812, 120, 60.13291549682617, 1) ), + 247: ( (-4.788648807581375, 0, 99.88527840776963, 0), (0, 100, 0, 0), (-99.88527840776963, 0, -4.788648807581375, 0), (10.403030395507812, 120, 60.13291549682617, 1) ), + 248: ( (99.88527575753334, 0, 4.788704087905739, 0), (0, 100, 0, 0), (-4.788704087905739, 0, 99.88527575753334, 0), (10.403030395507812, 120, 60.13291549682617, 1) ), + 249: ( (-15.331564635891295, 0, -98.81772677923475, 0), (0, 100, 0, 0), (98.81772677923475, 0, -15.331564635891295, 0), (-19.372478485107422, 120, 58.04862976074219, 1) ), + 250: ( (-98.817734945306, 0, 15.331512002384178, 0), (-0, 100, 0, 0), (-15.331512002384178, 0, -98.817734945306, 0), (-19.372478485107422, 120, 58.04862976074219, 1) ), + 251: ( (15.331498844006694, 0, 98.81773698681944, 0), (0, 100, 0, 0), (-98.81773698681944, 0, 15.331498844006694, 0), (-19.372478485107422, 120, 58.04862976074219, 1) ), + 252: ( (98.81772907594511, 0, -15.331549832717878, 0), (0, 100, 0, 0), (15.331549832717878, 0, 98.81772907594511, 0), (-19.372478485107422, 120, 58.04862976074219, 1) ), + 253: ( (-83.54445400484529, 0, -54.95747633427401, 0), (0, 100, 0, 0), (54.95747633427401, 0, -83.54445400484529, 0), (-39.85139465332031, 120, 67.92987823486328, 1) ), + 254: ( (-54.957498583506, 0, 83.54443936878107, 0), (-0, 100, 0, 0), (-83.54443936878107, 0, -54.957498583506, 0), (-39.85139465332031, 120, 67.92987823486328, 1) ), + 255: ( (83.54445766386041, 0, 54.95747077196542, 0), (0, 100, 0, 0), (-54.95747077196542, 0, 83.54445766386041, 0), (-39.85139465332031, 120, 67.92987823486328, 1) ), + 256: ( (54.95744852272858, 0, -83.54447229991723, 0), (0, 100, 0, 0), (83.54447229991723, 0, 54.95744852272858, 0), (-39.85139465332031, 120, 67.92987823486328, 1) ), + 257: ( (-98.38698823818073, 0, -17.888559064946673, 0), (0, 100, 0, 0), (17.888559064946673, 0, -98.38698823818073, 0), (-45.190834045410156, 120, 97.29681396484375, 1) ), + 258: ( (-17.888493559842985, 0, 98.38700014818754, 0), (-0, 100, 0, 0), (-98.38700014818754, 0, -17.888493559842985, 0), (-45.190834045410156, 120, 97.29681396484375, 1) ), + 259: ( (98.38699151343697, 0, 17.888541051043937, 0), (0, 100, 0, 0), (-17.888541051043937, 0, 98.38699151343697, 0), (-45.190834045410156, 120, 97.29681396484375, 1) ), + 260: ( (17.888572165966437, 0, -98.38698585617415, 0), (0, 100, 0, 0), (98.38698585617415, 0, 17.888572165966437, 0), (-45.190834045410156, 120, 97.29681396484375, 1) ), + 261: ( (-98.38698823818073, 0, -17.888559064946673, 0), (0, 100, 0, 0), (17.888559064946673, 0, -98.38698823818073, 0), (-50.530296325683594, 120, 126.66384887695312, 1) ), + 262: ( (-17.88855906494666, 0, 98.38698823818073, 0), (-0, 100, 0, 0), (-98.38698823818073, 0, -17.88855906494666, 0), (-50.530296325683594, 120, 126.66384887695312, 1) ), + 263: ( (98.38699062018559, 0, 17.888545963926557, 0), (0, 100, 0, 0), (-17.888545963926557, 0, 98.38699062018559, 0), (-50.530296325683594, 120, 126.66384887695312, 1) ), + 264: ( (17.888572165966437, 0, -98.38698585617415, 0), (0, 100, 0, 0), (98.38698585617415, 0, 17.888572165966437, 0), (-50.530296325683594, 120, 126.66384887695312, 1) ), + 265: ( (-99.9373944767612, 0, -3.5379634249409673, 0), (0, 100, 0, 0), (3.5379634249409673, 0, -99.9373944767612, 0), (-55.8697395324707, 120, 156.03079223632812, 1) ), + 266: ( (-3.5377371979585783, 0, 99.9374024853467, 0), (-0, 100, 0, 0), (-99.9374024853467, 0, -3.5377371979585783, 0), (-55.8697395324707, 120, 156.03079223632812, 1) ), + 267: ( (99.93739964412406, 0, 3.537817458636395, 0), (0, 100, 0, 0), (-3.537817458636395, 0, 99.93739964412406, 0), (-55.8697395324707, 120, 156.03079223632812, 1) ), + 268: ( (3.5377105830182747, 0, -99.93740342749956, 0), (0, 100, 0, 0), (99.93740342749956, 0, 3.5377105830182747, 0), (-55.8697395324707, 120, 156.03079223632812, 1) ), + 269: ( (-91.5746518190726, 0, 40.17565362524452, 0), (-0, 100, 0, 0), (-40.17565362524452, 0, -91.5746518190726, 0), (-52.617401123046875, 120, 185.62106323242188, 1) ), + 270: ( (40.175653625244514, 0, 91.5746518190726, 0), (0, 100, 0, 0), (-91.5746518190726, 0, 40.175653625244514, 0), (-52.617401123046875, 120, 185.62106323242188, 1) ), + 271: ( (91.57464379450296, 0, -40.17567191609743, 0), (0, 100, 0, 0), (40.17567191609743, 0, 91.57464379450296, 0), (-52.617401123046875, 120, 185.62106323242188, 1) ), + 272: ( (-40.175604849628925, 0, -91.5746732179071, 0), (0, 100, 0, 0), (91.5746732179071, 0, -40.175604849628925, 0), (-52.617401123046875, 120, 185.62106323242188, 1) ), + 273: ( (-34.06100709944973, 0, 94.02046476895993, 0), (-0, 100, 0, 0), (-94.02046476895993, 0, -34.06100709944973, 0), (-36.02732467651367, 120, 201.2587127685547, 1) ), + 274: ( (94.02046590283423, 0, 34.06100396955416, 0), (0, 100, 0, 0), (-34.06100396955416, 0, 94.02046590283423, 0), (-36.02732467651367, 120, 201.2587127685547, 1) ), + 275: ( (34.06099457986726, 0, -94.02046930445653, 0), (0, 100, 0, 0), (94.02046930445653, 0, 34.06099457986726, 0), (-36.02732467651367, 120, 201.2587127685547, 1) ), + 276: ( (-94.02046476895994, 0, -34.061007099449704, 0), (0, 100, 0, 0), (34.061007099449704, 0, -94.02046476895994, 0), (-36.02732467651367, 120, 201.2587127685547, 1) ), + 277: ( (-30.321468629044546, 0, 95.29222707114084, 0), (-0, 100, 0, 0), (-95.29222707114084, 0, -30.321468629044546, 0), (-6.202140808105469, 120, 202.43601989746094, 1) ), + 278: ( (95.29221798665407, 0, 30.321497179130212, 0), (0, 100, 0, 0), (-30.321497179130212, 0, 95.29221798665407, 0), (-6.202140808105469, 120, 202.43601989746094, 1) ), + 279: ( (30.321481317971845, 0, -95.29222303359222, 0), (0, 100, 0, 0), (95.29222303359222, 0, 30.321481317971845, 0), (-6.202140808105469, 120, 202.43601989746094, 1) ), + 280: ( (-95.2922028458238, 0, -30.321544762600265, 0), (0, 100, 0, 0), (30.321544762600265, 0, -95.2922028458238, 0), (-6.202140808105469, 120, 202.43601989746094, 1) ), + 281: ( (-56.36991131514597, 0, 82.59802115258317, 0), (0, 100, 0, 0), (-82.59802115258317, 0, -56.36991131514597, 0), (18.507904052734375, 120, 218.61154174804688, 1) ), + 282: ( (82.59802115258319, 0, 56.36991131514596, 0), (0, 100, 0, 0), (-56.36991131514596, 0, 82.59802115258319, 0), (18.507904052734375, 120, 218.61154174804688, 1) ), + 283: ( (56.369883818663325, 0, -82.59803991784793, 0), (0, 100, 0, 0), (82.59803991784793, 0, 56.369883818663325, 0), (18.507904052734375, 120, 218.61154174804688, 1) ), + 284: ( (-82.59801364647473, 0, -56.369922313737256, 0), (0, 100, 0, 0), (56.369922313737256, 0, -82.59801364647473, 0), (18.507904052734375, 120, 218.61154174804688, 1) ), + 285: ( (-57.932493517099715, 0, 81.5096693337128, 0), (0, 100, 0, 0), (-81.5096693337128, 0, -57.932493517099715, 0), (42.83725357055664, 120, 235.90347290039062, 1) ), + 286: ( (81.50967319080166, 0, 57.93248809026511, 0), (0, 100, 0, 0), (-57.93248809026511, 0, 81.50967319080166, 0), (42.83725357055664, 120, 235.90347290039062, 1) ), + 287: ( (57.93247723659508, 0, -81.50968090497835, 0), (0, 100, 0, 0), (81.50968090497835, 0, 57.93247723659508, 0), (42.83725357055664, 120, 235.90347290039062, 1) ), + 288: ( (-81.50965390535363, 0, -57.932515224435654, 0), (0, 100, 0, 0), (57.932515224435654, 0, -81.50965390535363, 0), (42.83725357055664, 120, 235.90347290039062, 1) ), + 289: ( (-74.04761014768307, 0, 67.20826907023229, 0), (0, 100, 0, 0), (-67.20826907023229, 0, -74.04761014768307, 0), (67.1666030883789, 120, 253.19540405273438, 1) ), + 290: ( (67.20829372031784, 0, 74.04758777437308, 0), (0, 100, 0, 0), (-74.04758777437308, 0, 67.20829372031784, 0), (67.1666030883789, 120, 253.19540405273438, 1) ), + 291: ( (74.04757882504678, 0, -67.20830358034998, 0), (0, 100, 0, 0), (67.20830358034998, 0, 74.04757882504678, 0), (67.1666030883789, 120, 253.19540405273438, 1) ), + 292: ( (-67.20828879030134, 0, -74.04759224903572, 0), (0, 100, 0, 0), (74.04759224903572, 0, -67.20828879030134, 0), (67.1666030883789, 120, 253.19540405273438, 1) ), + 293: ( (-59.14333484589961, 0, 80.63538890155982, 0), (0, 100, 0, 0), (-80.63538890155982, 0, -59.14333484589961, 0), (81.78009033203125, 120, 278.8092346191406, 1) ), + 294: ( (80.63539283926534, 0, 59.143329477273745, 0), (0, 100, 0, 0), (-59.143329477273745, 0, 80.63539283926534, 0), (81.78009033203125, 120, 278.8092346191406, 1) ), + 295: ( (59.1433241086476, 0, -80.63539677697051, 0), (0, 100, 0, 0), (80.63539677697051, 0, 59.1433241086476, 0), (81.78009033203125, 120, 278.8092346191406, 1) ), + 296: ( (-80.63537315073415, 0, -59.14335632040054, 0), (0, 100, 0, 0), (59.14335632040054, 0, -80.63537315073415, 0), (81.78009033203125, 120, 278.8092346191406, 1) ), + 297: ( (44.417284853636836, 0, 89.59411144841431, 0), (0, 100, 0, 0), (-89.59411144841431, 0, 44.417284853636836, 0), (100.66987609863281, 120, 277.7689208984375, 1) ), + 298: ( (89.59410405526401, 0, -44.41729976635819, 0), (0, 100, 0, 0), (44.41729976635819, 0, 89.59410405526401, 0), (100.66987609863281, 120, 277.7689208984375, 1) ), + 299: ( (-44.41724906310054, 0, -89.59412919196488, 0), (0, 100, 0, 0), (89.59412919196488, 0, -44.41724906310054, 0), (100.66987609863281, 120, 277.7689208984375, 1) ), + 300: ( (-89.59412919196487, 0, 44.41724906310057, 0), (0, 100, 0, 0), (-44.41724906310057, 0, -89.59412919196487, 0), (100.66987609863281, 120, 277.7689208984375, 1) ), + 301: ( (65.3953663703601, 0, 75.65346031270728, 0), (0, 100, 0, 0), (-75.65346031270728, 0, 65.3953663703601, 0), (123.251220703125, 120, 258.24945068359375, 1) ), + 302: ( (75.65345595874723, 0, -65.39537140729375, 0), (0, 100, 0, 0), (65.39537140729375, 0, 75.65345595874723, 0), (123.251220703125, 120, 258.24945068359375, 1) ), + 303: ( (-65.39535125955742, 0, -75.6534733745854, 0), (0, 100, 0, 0), (75.6534733745854, 0, -65.39535125955742, 0), (123.251220703125, 120, 258.24945068359375, 1) ), + 304: ( (-75.6534733745854, 0, 65.39535125955742, 0), (0, 100, 0, 0), (-65.39535125955742, 0, -75.6534733745854, 0), (123.251220703125, 120, 258.24945068359375, 1) ), + 305: ( (40.08184926918842, 0, 91.61574842330363, 0), (0, 100, 0, 0), (-91.61574842330363, 0, 40.08184926918842, 0), (-206.24050903320312, 120, 286.4216003417969, 1) ), + 306: ( (91.61573508024587, 0, -40.08187976762325, 0), (0, 100, 0, 0), (40.08187976762325, 0, 91.61573508024587, 0), (-206.24050903320312, 120, 286.4216003417969, 1) ), + 307: ( (-40.081837069813226, 0, -91.61575376052389, 0), (0, 100, 0, 0), (91.61575376052389, 0, -40.081837069813226, 0), (-206.24050903320312, 120, 286.4216003417969, 1) ), + 308: ( (-91.61574308608174, 0, 40.08186146856288, 0), (-0, 100, 0, 0), (-40.08186146856288, 0, -91.61574308608174, 0), (-206.24050903320312, 120, 286.4216003417969, 1) ), + 309: ( (40.19849155482872, 0, 91.56462896073114, 0), (0, 100, 0, 0), (-91.56462896073114, 0, 40.19849155482872, 0), (-180.79183959960938, 120, 275.2878112792969, 1) ), + 310: ( (91.56462226978871, 0, -40.19850679553797, 0), (0, 100, 0, 0), (40.19850679553797, 0, 91.56462226978871, 0), (-180.79183959960938, 120, 275.2878112792969, 1) ), + 311: ( (-40.19845497712194, 0, -91.56464501898263, 0), (0, 100, 0, 0), (91.56464501898263, 0, -40.19845497712194, 0), (-180.79183959960938, 120, 275.2878112792969, 1) ), + 312: ( (-91.56463431348327, 0, 40.19847936226051, 0), (-0, 100, 0, 0), (-40.19847936226051, 0, -91.56463431348327, 0), (-180.79183959960938, 120, 275.2878112792969, 1) ), + 313: ( (41.75245149812676, 0, 90.86656587489466, 0), (0, 100, 0, 0), (-90.86656587489466, 0, 41.75245149812676, 0), (-155.37261962890625, 120, 264.0896911621094, 1) ), + 314: ( (90.86655614546059, 0, -41.75247267245209, 0), (0, 100, 0, 0), (41.75247267245209, 0, 90.86655614546059, 0), (-155.37261962890625, 120, 264.0896911621094, 1) ), + 315: ( (-41.752415199278005, 0, -90.86658255391306, 0), (0, 100, 0, 0), (90.86658255391306, 0, -41.752415199278005, 0), (-155.37261962890625, 120, 264.0896911621094, 1) ), + 316: ( (-90.86657143456908, 0, 41.75243939851123, 0), (-0, 100, 0, 0), (-41.75243939851123, 0, -90.86657143456908, 0), (-155.37261962890625, 120, 264.0896911621094, 1) ), + 317: ( (43.17948533819106, 0, 90.19718424612235, 0), (0, 100, 0, 0), (-90.19718424612235, 0, 43.17948533819106, 0), (-130.3179931640625, 120, 252.09547424316406, 1) ), + 318: ( (90.19717993384971, 0, -43.179494346052024, 0), (0, 100, 0, 0), (43.179494346052024, 0, 90.19717993384971, 0), (-130.3179931640625, 120, 252.09547424316406, 1) ), + 319: ( (-43.17944930674292, 0, -90.19720149520394, 0), (0, 100, 0, 0), (90.19720149520394, 0, -43.17944930674292, 0), (-130.3179931640625, 120, 252.09547424316406, 1) ), + 320: ( (-90.19718999581782, 0, 43.1794733277091, 0), (-0, 100, 0, 0), (-43.1794733277091, 0, -90.19718999581782, 0), (-130.3179931640625, 120, 252.09547424316406, 1) ), + 321: ( (69.61251764062911, 0, 71.79204264912026, 0), (0, 100, 0, 0), (-71.79204264912026, 0, 69.61251764062911, 0), (-105.26336669921875, 120, 240.10122680664062, 1) ), + 322: ( (71.7920287449177, 0, -69.61253198016081, 0), (0, 100, 0, 0), (69.61253198016081, 0, 71.7920287449177, 0), (-105.26336669921875, 120, 240.10122680664062, 1) ), + 323: ( (-69.61251286078459, 0, -71.7920472838538, 0), (0, 100, 0, 0), (71.7920472838538, 0, -69.61251286078459, 0), (-105.26336669921875, 120, 240.10122680664062, 1) ), + 324: ( (-71.7920472838538, 0, 69.61251286078459, 0), (-0, 100, 0, 0), (-69.61251286078459, 0, -71.7920472838538, 0), (-105.26336669921875, 120, 240.10122680664062, 1) ), + 325: ( (93.46797624482389, 0, 35.549084611239124, 0), (0, 100, 0, 0), (-35.549084611239124, 0, 93.46797624482389, 0), (-93.77804565429688, 120, 216.66482543945312, 1) ), + 326: ( (35.54907527672853, 0, -93.46797979505862, 0), (0, 100, 0, 0), (93.46797979505862, 0, 35.54907527672853, 0), (-93.77804565429688, 120, 216.66482543945312, 1) ), + 327: ( (-93.46796559411405, 0, -35.549112614768745, 0), (0, 100, 0, 0), (35.549112614768745, 0, -93.46796559411405, 0), (-93.77804565429688, 120, 216.66482543945312, 1) ), + 328: ( (-35.54908772274256, 0, 93.4679750614121, 0), (-0, 100, 0, 0), (-93.4679750614121, 0, -35.54908772274256, 0), (-93.77804565429688, 120, 216.66482543945312, 1) ), + 329: ( (80.33977447143441, 0, 59.54427460200565, 0), (0, 100, 0, 0), (-59.54427460200565, 0, 80.33977447143441, 0), (-86.18705749511719, 120, 189.94454956054688, 1) ), + 330: ( (59.544258555172355, 0, -80.33978636463246, 0), (0, 100, 0, 0), (80.33978636463246, 0, 59.544258555172355, 0), (-86.18705749511719, 120, 189.94454956054688, 1) ), + 331: ( (-80.33977050703437, 0, -59.544279950949544, 0), (0, 100, 0, 0), (59.544279950949544, 0, -80.33977050703437, 0), (-86.18705749511719, 120, 189.94454956054688, 1) ), + 332: ( (-59.54429064883655, 0, 80.33976257823318, 0), (-0, 100, 0, 0), (-80.33976257823318, 0, -59.54429064883655, 0), (-86.18705749511719, 120, 189.94454956054688, 1) ), + 333: ( (-99.98767846999438, 0, 1.5697624600628162, 0), (-0, 100, 0, 0), (-1.5697624600628162, 0, -99.98767846999438, 0), (-84.8638687133789, 120, 204.63742065429688, 1) ), + 334: ( (1.5711870755305466, 0, 99.98765609400834, 0), (0, 100, 0, 0), (-99.98765609400834, 0, 1.5711870755305466, 0), (-84.8638687133789, 120, 204.63742065429688, 1) ), + 335: ( (99.98765749800536, 0, -1.5710977250224836, 0), (0, 100, 0, 0), (1.5710977250224836, 0, 99.98765749800536, 0), (-84.8638687133789, 120, 204.63742065429688, 1) ), + 336: ( (-1.5707743365026399, 0, -99.98766257885913, 0), (0, 100, 0, 0), (99.98766257885913, 0, -1.5707743365026399, 0), (-84.8638687133789, 120, 204.63742065429688, 1) ), + 337: ( (-99.97213348939562, 0, -2.360619744571767, 0), (0, 100, 0, 0), (2.360619744571767, 0, -99.97213348939562, 0), (-85.51984405517578, 120, 232.40728759765625, 1) ), + 338: ( (-2.361578215288861, 0, 99.97211085264266, 0), (-0, 100, 0, 0), (-99.97211085264266, 0, -2.361578215288861, 0), (-85.51984405517578, 120, 232.40728759765625, 1) ), + 339: ( (99.97211181076437, 0, 2.3615376550089993, 0), (0, 100, 0, 0), (-2.3615376550089993, 0, 99.97211181076437, 0), (-85.51984405517578, 120, 232.40728759765625, 1) ), + 340: ( (2.3615649031970585, 0, -99.97211116710494, 0), (0, 100, 0, 0), (99.97211116710494, 0, 2.3615649031970585, 0), (-85.51984405517578, 120, 232.40728759765625, 1) ), + 341: ( (-99.99530273647386, 0, 0.9692423024941441, 0), (-0, 100, 0, 0), (-0.9692423024941441, 0, -99.99530273647386, 0), (-86.17582702636719, 120, 260.17718505859375, 1) ), + 342: ( (0.9679640451376755, 0, 99.99531511829602, 0), (0, 100, 0, 0), (-99.99531511829602, 0, 0.9679640451376755, 0), (-86.17582702636719, 120, 260.17718505859375, 1) ), + 343: ( (99.99530382739127, 0, -0.9691297476128254, 0), (0, 100, 0, 0), (0.9691297476128254, 0, 99.99530382739127, 0), (-86.17582702636719, 120, 260.17718505859375, 1) ), + 344: ( (-0.9691624114140065, 0, -99.99530351081646, 0), (0, 100, 0, 0), (99.99530351081646, 0, -0.9691624114140065, 0), (-86.17582702636719, 120, 260.17718505859375, 1) ), + 345: ( (-99.90135735059201, 0, 4.44058549172483, 0), (-0, 100, 0, 0), (-4.44058549172483, 0, -99.90135735059201, 0), (-84.98176574707031, 120, 287.9264831542969, 1) ), + 346: ( (4.440505675701081, 0, 99.90136089835848, 0), (0, 100, 0, 0), (-99.90136089835848, 0, 4.440505675701081, 0), (-84.98176574707031, 120, 287.9264831542969, 1) ), + 347: ( (99.90135186251514, 0, -4.440708957130956, 0), (0, 100, 0, 0), (4.440708957130956, 0, 99.90135186251514, 0), (-84.98176574707031, 120, 287.9264831542969, 1) ), + 348: ( (-4.440479070359245, 0, -99.90136208093313, 0), (0, 100, 0, 0), (99.90136208093313, 0, -4.440479070359245, 0), (-84.98176574707031, 120, 287.9264831542969, 1) ), + 349: ( (-92.57118375421382, 0, 37.822955177293835, 0), (-0, 100, 0, 0), (-37.822955177293835, 0, -92.57118375421382, 0), (-83.70890045166016, 120, 315.6749267578125, 1) ), + 350: ( (37.822955177293835, 0, 92.57118375421382, 0), (0, 100, 0, 0), (-92.57118375421382, 0, 37.822955177293835, 0), (-83.70890045166016, 120, 315.6749267578125, 1) ), + 351: ( (92.57117619956529, 0, -37.82297366719118, 0), (0, 100, 0, 0), (37.82297366719118, 0, 92.57117619956529, 0), (-83.70890045166016, 120, 315.6749267578125, 1) ), + 352: ( (-37.82293052409503, 0, -92.57119382707279, 0), (0, 100, 0, 0), (92.57119382707279, 0, -37.82293052409503, 0), (-83.70890045166016, 120, 315.6749267578125, 1) ), + 353: ( (-36.9847167472146, 0, 92.90926071780092, 0), (-0, 100, 0, 0), (-92.90926071780092, 0, -36.9847167472146, 0), (-67.86772918701172, 120, 329.8128356933594, 1) ), + 354: ( (92.90926318020718, 0, 36.98471056140631, 0), (0, 100, 0, 0), (-36.98471056140631, 0, 92.90926318020718, 0), (-67.86772918701172, 120, 329.8128356933594, 1) ), + 355: ( (36.98470437559787, 0, -92.90926564261301, 0), (0, 100, 0, 0), (92.90926564261301, 0, 36.98470437559787, 0), (-67.86772918701172, 120, 329.8128356933594, 1) ), + 356: ( (-92.90926071780092, 0, -36.98471674721457, 0), (0, 100, 0, 0), (36.98471674721457, 0, -92.90926071780092, 0), (-67.86772918701172, 120, 329.8128356933594, 1) ), + 357: ( (-11.354639864321484, 0, 99.35326946583872, 0), (-0, 100, 0, 0), (-99.35326946583872, 0, -11.354639864321484, 0), (-40.26976776123047, 120, 332.9668884277344, 1) ), + 358: ( (99.35326719789411, 0, 11.35465970885337, 0), (0, 100, 0, 0), (-11.35465970885337, 0, 99.35326719789411, 0), (-40.26976776123047, 120, 332.9668884277344, 1) ), + 359: ( (11.354666323697229, 0, -99.35326644191169, 0), (0, 100, 0, 0), (99.35326644191169, 0, 11.354666323697229, 0), (-40.26976776123047, 120, 332.9668884277344, 1) ), + 360: ( (-99.3532603940365, 0, -11.354719242446281, 0), (0, 100, 0, 0), (11.354719242446281, 0, -99.3532603940365, 0), (-40.26976776123047, 120, 332.9668884277344, 1) ), + 361: ( (59.35417272206986, 0, 80.48032169716208, 0), (0, 100, 0, 0), (-80.48032169716208, 0, 59.35417272206986, 0), (152.0358123779297, 190, 378.8997497558594, 1) ), + 362: ( (80.48031379367521, 0, -59.35418343867239, 0), (0, 100, 0, 0), (59.35418343867239, 0, 80.48031379367521, 0), (152.0358123779297, 190, 378.8997497558594, 1) ), + 363: ( (-59.35416200546625, 0, -80.48032960064755, 0), (0, 100, 0, 0), (80.48032960064755, 0, -59.35416200546625, 0), (152.0358123779297, 190, 378.8997497558594, 1) ), + 364: ( (-80.48032960064752, 0, 59.35416200546628, 0), (0, 100, 0, 0), (-59.35416200546628, 0, -80.48032960064752, 0), (152.0358123779297, 190, 378.8997497558594, 1) ), + 365: ( (59.354204871874316, 0, 80.48029798669715, 0), (0, 100, 0, 0), (-80.48029798669715, 0, 59.354204871874316, 0), (176.0579071044922, 190, 361.1834716796875, 1) ), + 366: ( (80.48027822796658, 0, -59.35423166337078, 0), (0, 100, 0, 0), (59.35423166337078, 0, 80.48027822796658, 0), (176.0579071044922, 190, 361.1834716796875, 1) ), + 367: ( (-59.354204871874316, 0, -80.48029798669715, 0), (0, 100, 0, 0), (80.48029798669715, 0, -59.354204871874316, 0), (176.0579071044922, 190, 361.1834716796875, 1) ), + 368: ( (-80.48031379367521, 0, 59.35418343867238, 0), (0, 100, 0, 0), (-59.35418343867238, 0, -80.48031379367521, 0), (176.0579071044922, 190, 361.1834716796875, 1) ), + 369: ( (95.29424159711762, 0, 30.31513678725825, 0), (0, 100, 0, 0), (-30.31513678725825, 0, 95.29424159711762, 0), (200.07998657226562, 190, 343.4671630859375, 1) ), + 370: ( (30.315124098062167, 0, -95.2942456338214, 0), (0, 100, 0, 0), (95.2942456338214, 0, 30.315124098062167, 0), (200.07998657226562, 190, 343.4671630859375, 1) ), + 371: ( (-95.29423756041214, 0, -30.31514947645378, 0), (0, 100, 0, 0), (30.31514947645378, 0, -95.29423756041214, 0), (200.07998657226562, 190, 343.4671630859375, 1) ), + 372: ( (-30.315149476453783, 0, 95.29423756041214, 0), (0, 100, 0, 0), (-95.29423756041214, 0, -30.315149476453783, 0), (200.07998657226562, 190, 343.4671630859375, 1) ), + 373: ( (93.55195959791625, 0, -35.3274801732284, 0), (0, 100, 0, 0), (35.3274801732284, 0, 93.55195959791625, 0), (190.3842315673828, 190, 316.1493225097656, 1) ), + 374: ( (-35.3274739446299, 0, -93.55196194998528, 0), (0, 100, 0, 0), (93.55196194998528, 0, -35.3274739446299, 0), (190.3842315673828, 190, 316.1493225097656, 1) ), + 375: ( (-93.55198076652283, 0, 35.32742411583586, 0), (0, 100, 0, 0), (-35.32742411583586, 0, -93.55198076652283, 0), (190.3842315673828, 190, 316.1493225097656, 1) ), + 376: ( (35.3274614874323, 0, 93.55196665412218, 0), (0, 100, 0, 0), (-93.55196665412218, 0, 35.3274614874323, 0), (190.3842315673828, 190, 316.1493225097656, 1) ), + 377: ( (92.84765842727789, 0, -37.13909428851938, 0), (0, 100, 0, 0), (37.13909428851938, 0, 92.84765842727789, 0), (179.29881286621094, 190, 288.435791015625, 1) ), + 378: ( (-37.13908810681252, 0, -92.84766089996245, 0), (0, 100, 0, 0), (92.84766089996245, 0, -37.13908810681252, 0), (179.29881286621094, 190, 288.435791015625, 1) ), + 379: ( (-92.8476707906966, 0, 37.139063379983405, 0), (0, 100, 0, 0), (-37.139063379983405, 0, -92.8476707906966, 0), (179.29881286621094, 190, 288.435791015625, 1) ), + 380: ( (37.139051016567876, 0, 92.8476757360612, 0), (0, 100, 0, 0), (-92.8476757360612, 0, 37.139051016567876, 0), (179.29881286621094, 190, 288.435791015625, 1) ), + 381: ( (99.35336396000764, 0, -11.35381300842386, 0), (0, 100, 0, 0), (11.35381300842386, 0, 99.35336396000764, 0), (168.21337890625, 190, 260.72222900390625, 1) ), + 382: ( (-11.353819623274136, 0, -99.3533632040816, 0), (0, 100, 0, 0), (99.3533632040816, 0, -11.353819623274136, 0), (168.21337890625, 190, 260.72222900390625, 1) ), + 383: ( (-99.353360180373, 0, 11.353846082674849, 0), (0, 100, 0, 0), (-11.353846082674849, 0, -99.353360180373, 0), (168.21337890625, 190, 260.72222900390625, 1) ), + 384: ( (11.353832852974605, 0, 99.35336169222818, 0), (0, 100, 0, 0), (-99.35336169222818, 0, 11.353832852974605, 0), (168.21337890625, 190, 260.72222900390625, 1) ), + 385: ( (96.82963661272952, 0, 24.980421802818935, 0), (0, 100, 0, 0), (-24.980421802818935, 0, 96.82963661272952, 0), (172.92344665527344, 190, 232.64712524414062, 1) ), + 386: ( (24.980408909172695, 0, -96.82963993907302, 0), (0, 100, 0, 0), (96.82963993907302, 0, 24.980408909172695, 0), (172.92344665527344, 190, 232.64712524414062, 1) ), + 387: ( (-96.82964991809325, 0, -24.980370228231266, 0), (0, 100, 0, 0), (24.980370228231266, 0, -96.82964991809325, 0), (172.92344665527344, 190, 232.64712524414062, 1) ), + 388: ( (-24.98042180281894, 0, 96.82963661272952, 0), (0, 100, 0, 0), (-96.82963661272952, 0, -24.98042180281894, 0), (172.92344665527344, 190, 232.64712524414062, 1) ), + 389: ( (99.99618834729712, 0, -0.8731071021810283, 0), (0, 100, 0, 0), (0.8731071021810283, 0, 99.99618834729712, 0), (182.72927856445312, 190, 204.45538330078125, 1) ), + 390: ( (-0.8733992065249928, 0, -99.99618579638945, 0), (0, 100, 0, 0), (99.99618579638945, 0, -0.8733992065249928, 0), (182.72927856445312, 190, 204.45538330078125, 1) ), + 391: ( (-99.99619439774517, 0, 0.872413874463225, 0), (0, 100, 0, 0), (-0.872413874463225, 0, -99.99619439774517, 0), (182.72927856445312, 190, 204.45538330078125, 1) ), + 392: ( (0.8734391524175431, 0, 99.99618544748107, 0), (0, 100, 0, 0), (-99.99618544748107, 0, 0.8734391524175431, 0), (182.72927856445312, 190, 204.45538330078125, 1) ), + 393: ( (88.12740113892592, 0, -47.260566739077916, 0), (0, 100, 0, 0), (47.260566739077916, 0, 88.12740113892592, 0), (172.45399475097656, 190, 178.88121032714844, 1) ), + 394: ( (-47.260540335610905, 0, -88.1274152984535, 0), (0, 100, 0, 0), (88.1274152984535, 0, -47.260540335610905, 0), (172.45399475097656, 190, 178.88121032714844, 1) ), + 395: ( (-88.1274152984535, 0, 47.2605403356109, 0), (0, 100, 0, 0), (-47.2605403356109, 0, -88.1274152984535, 0), (172.45399475097656, 190, 178.88121032714844, 1) ), + 396: ( (47.26055207048566, 0, 88.1274090053311, 0), (0, 100, 0, 0), (-88.1274090053311, 0, 47.26055207048566, 0), (172.45399475097656, 190, 178.88121032714844, 1) ), + 397: ( (93.34443704147198, 0, -35.87221868536534, 0), (0, 100, 0, 0), (35.87221868536534, 0, 93.34443704147198, 0), (155.74911499023438, 190, 154.14511108398438, 1) ), + 398: ( (-35.87217207449726, 0, -93.34445495399102, 0), (0, 100, 0, 0), (93.34445495399102, 0, -35.87217207449726, 0), (155.74911499023438, 190, 154.14511108398438, 1) ), + 399: ( (-93.34446450732501, 0, 35.872147215363924, 0), (0, 100, 0, 0), (-35.872147215363924, 0, -93.34446450732501, 0), (155.74911499023438, 190, 154.14511108398438, 1) ), + 400: ( (35.87217207449723, 0, 93.34445495399103, 0), (0, 100, 0, 0), (-93.34445495399103, 0, 35.87217207449723, 0), (155.74911499023438, 190, 154.14511108398438, 1) ), + 401: ( (99.15022981509414, 0, -13.008917234497972, 0), (0, 100, 0, 0), (13.008917234497972, 0, 99.15022981509414, 0), (151.78631591796875, 190, 125.10105895996094, 1) ), + 402: ( (-13.008787683466979, 0, -99.1502468126352, 0), (0, 100, 0, 0), (99.1502468126352, 0, -13.008787683466979, 0), (151.78631591796875, 190, 125.10105895996094, 1) ), + 403: ( (-99.1502294902987, 0, 13.008919709995165, 0), (0, 100, 0, 0), (-13.008919709995165, 0, -99.1502294902987, 0), (151.78631591796875, 190, 125.10105895996094, 1) ), + 404: ( (13.008919709995158, 0, 99.1502294902987, 0), (0, 100, 0, 0), (-99.1502294902987, 0, 13.008919709995158, 0), (151.78631591796875, 190, 125.10105895996094, 1) ), + 405: ( (85.45806017089585, 0, -51.931877992496524, 0), (0, 100, 0, 0), (51.931877992496524, 0, 85.45806017089585, 0), (148.16603088378906, 190, 96.3490219116211, 1) ), + 406: ( (-51.931866613067015, 0, -85.45806708604294, 0), (0, 100, 0, 0), (85.45806708604294, 0, -51.931866613067015, 0), (148.16603088378906, 190, 96.3490219116211, 1) ), + 407: ( (-85.45806708604292, 0, 51.931866613067044, 0), (0, 100, 0, 0), (-51.931866613067044, 0, -85.45806708604292, 0), (148.16603088378906, 190, 96.3490219116211, 1) ), + 408: ( (51.9318723027819, 0, 85.45806362846957, 0), (0, 100, 0, 0), (-85.45806362846957, 0, 51.9318723027819, 0), (148.16603088378906, 190, 96.3490219116211, 1) ), + 409: ( (57.85433677876932, 0, -81.56516239111365, 0), (0, 100, 0, 0), (81.56516239111365, 0, 57.85433677876932, 0), (123.82008361816406, 190, 79.08038330078125, 1) ), + 410: ( (-81.56514313168181, 0, -57.85436393141195, 0), (0, 100, 0, 0), (57.85436393141195, 0, -81.56514313168181, 0), (123.82008361816406, 190, 79.08038330078125, 1) ), + 411: ( (-57.85436393141195, 0, 81.56514313168181, 0), (0, 100, 0, 0), (-81.56514313168181, 0, -57.85436393141195, 0), (123.82008361816406, 190, 79.08038330078125, 1) ), + 412: ( (81.56515083545563, 0, 57.85435307035567, 0), (0, 100, 0, 0), (-57.85435307035567, 0, 81.56515083545563, 0), (123.82008361816406, 190, 79.08038330078125, 1) ), + 413: ( (32.41926935428071, 0, -94.59910662651416, 0), (0, 100, 0, 0), (94.59910662651416, 0, 32.41926935428071, 0), (99.47421264648438, 190, 61.811805725097656, 1) ), + 414: ( (-94.5990893589534, 0, -32.419319740808085, 0), (0, 100, 0, 0), (32.419319740808085, 0, -94.5990893589534, 0), (99.47421264648438, 190, 61.811805725097656, 1) ), + 415: ( (-32.419307144177125, 0, 94.5990936758461, 0), (0, 100, 0, 0), (-94.5990936758461, 0, -32.419307144177125, 0), (99.47421264648438, 190, 61.811805725097656, 1) ), + 416: ( (94.59910015118203, 0, 32.41928824922956, 0), (0, 100, 0, 0), (-32.41928824922956, 0, 94.59910015118203, 0), (99.47421264648438, 190, 61.811805725097656, 1) ), + 417: ( (1.5288878442869327, 0, -99.98831182673099, 0), (0, 100, 0, 0), (99.98831182673099, 0, 1.5288878442869327, 0), (70.06639862060547, 190, 60.65889358520508, 1) ), + 418: ( (-99.98832770086884, 0, -1.5278493327765268, 0), (0, 100, 0, 0), (1.5278493327765268, 0, -99.98832770086884, 0), (70.06639862060547, 190, 60.65889358520508, 1) ), + 419: ( (-1.5293005859952489, 0, 99.98830551478345, 0), (0, 100, 0, 0), (-99.98830551478345, 0, -1.5293005859952489, 0), (70.06639862060547, 190, 60.65889358520508, 1) ), + 420: ( (99.98830699270819, 0, 1.5292039536772641, 0), (0, 100, 0, 0), (-1.5292039536772641, 0, 99.98830699270819, 0), (70.06639862060547, 190, 60.65889358520508, 1) ), + 421: ( (0.8816014268735769, 0, -99.99611381910867, 0), (0, 100, 0, 0), (99.99611381910867, 0, 0.8816014268735769, 0), (40.219017028808594, 190, 60.90556716918945, 1) ), + 422: ( (-99.99611311472276, 0, -0.8816813186011246, 0), (0, 100, 0, 0), (0.8816813186011246, 0, -99.99611311472276, 0), (40.219017028808594, 190, 60.90556716918945, 1) ), + 423: ( (-0.8816147421615387, 0, 99.99611370171544, 0), (0, 100, 0, 0), (-99.99611370171544, 0, -0.8816147421615387, 0), (40.219017028808594, 190, 60.90556716918945, 1) ), + 424: ( (99.99611434093674, 0, 0.8815422362573475, 0), (0, 100, 0, 0), (-0.8815422362573475, 0, 99.99611434093674, 0), (40.219017028808594, 190, 60.90556716918945, 1) ), + 425: ( (4.7886222065225095, 0, -99.8852796830604, 0), (0, 100, 0, 0), (99.8852796830604, 0, 4.7886222065225095, 0), (10.403030395507812, 190, 60.13291549682617, 1) ), + 426: ( (-99.88529307318584, 0, -4.788342895383941, 0), (0, 100, 0, 0), (4.788342895383941, 0, -99.88529307318584, 0), (10.403030395507812, 190, 60.13291549682617, 1) ), + 427: ( (-4.788648807581375, 0, 99.88527840776963, 0), (0, 100, 0, 0), (-99.88527840776963, 0, -4.788648807581375, 0), (10.403030395507812, 190, 60.13291549682617, 1) ), + 428: ( (99.88527575753334, 0, 4.788704087905739, 0), (0, 100, 0, 0), (-4.788704087905739, 0, 99.88527575753334, 0), (10.403030395507812, 190, 60.13291549682617, 1) ), + 429: ( (-15.331564635891295, 0, -98.81772677923475, 0), (0, 100, 0, 0), (98.81772677923475, 0, -15.331564635891295, 0), (-19.372478485107422, 190, 58.04862976074219, 1) ), + 430: ( (-98.817734945306, 0, 15.331512002384178, 0), (-0, 100, 0, 0), (-15.331512002384178, 0, -98.817734945306, 0), (-19.372478485107422, 190, 58.04862976074219, 1) ), + 431: ( (15.331498844006694, 0, 98.81773698681944, 0), (0, 100, 0, 0), (-98.81773698681944, 0, 15.331498844006694, 0), (-19.372478485107422, 190, 58.04862976074219, 1) ), + 432: ( (98.81772907594511, 0, -15.331549832717878, 0), (0, 100, 0, 0), (15.331549832717878, 0, 98.81772907594511, 0), (-19.372478485107422, 190, 58.04862976074219, 1) ), + 433: ( (-83.54445400484529, 0, -54.95747633427401, 0), (0, 100, 0, 0), (54.95747633427401, 0, -83.54445400484529, 0), (-39.85139465332031, 190, 67.92987823486328, 1) ), + 434: ( (-54.957498583506, 0, 83.54443936878107, 0), (-0, 100, 0, 0), (-83.54443936878107, 0, -54.957498583506, 0), (-39.85139465332031, 190, 67.92987823486328, 1) ), + 435: ( (83.54445766386041, 0, 54.95747077196542, 0), (0, 100, 0, 0), (-54.95747077196542, 0, 83.54445766386041, 0), (-39.85139465332031, 190, 67.92987823486328, 1) ), + 436: ( (54.95744852272858, 0, -83.54447229991723, 0), (0, 100, 0, 0), (83.54447229991723, 0, 54.95744852272858, 0), (-39.85139465332031, 190, 67.92987823486328, 1) ), + 437: ( (-98.38698823818073, 0, -17.888559064946673, 0), (0, 100, 0, 0), (17.888559064946673, 0, -98.38698823818073, 0), (-45.190834045410156, 190, 97.29681396484375, 1) ), + 438: ( (-17.888493559842985, 0, 98.38700014818754, 0), (-0, 100, 0, 0), (-98.38700014818754, 0, -17.888493559842985, 0), (-45.190834045410156, 190, 97.29681396484375, 1) ), + 439: ( (98.38699151343697, 0, 17.888541051043937, 0), (0, 100, 0, 0), (-17.888541051043937, 0, 98.38699151343697, 0), (-45.190834045410156, 190, 97.29681396484375, 1) ), + 440: ( (17.888572165966437, 0, -98.38698585617415, 0), (0, 100, 0, 0), (98.38698585617415, 0, 17.888572165966437, 0), (-45.190834045410156, 190, 97.29681396484375, 1) ), + 441: ( (-98.38698823818073, 0, -17.888559064946673, 0), (0, 100, 0, 0), (17.888559064946673, 0, -98.38698823818073, 0), (-50.530296325683594, 190, 126.66384887695312, 1) ), + 442: ( (-17.88855906494666, 0, 98.38698823818073, 0), (-0, 100, 0, 0), (-98.38698823818073, 0, -17.88855906494666, 0), (-50.530296325683594, 190, 126.66384887695312, 1) ), + 443: ( (98.38699062018559, 0, 17.888545963926557, 0), (0, 100, 0, 0), (-17.888545963926557, 0, 98.38699062018559, 0), (-50.530296325683594, 190, 126.66384887695312, 1) ), + 444: ( (17.888572165966437, 0, -98.38698585617415, 0), (0, 100, 0, 0), (98.38698585617415, 0, 17.888572165966437, 0), (-50.530296325683594, 190, 126.66384887695312, 1) ), + 445: ( (-99.9373944767612, 0, -3.5379634249409673, 0), (0, 100, 0, 0), (3.5379634249409673, 0, -99.9373944767612, 0), (-55.8697395324707, 190, 156.03079223632812, 1) ), + 446: ( (-3.5377371979585783, 0, 99.9374024853467, 0), (-0, 100, 0, 0), (-99.9374024853467, 0, -3.5377371979585783, 0), (-55.8697395324707, 190, 156.03079223632812, 1) ), + 447: ( (99.93739964412406, 0, 3.537817458636395, 0), (0, 100, 0, 0), (-3.537817458636395, 0, 99.93739964412406, 0), (-55.8697395324707, 190, 156.03079223632812, 1) ), + 448: ( (3.5377105830182747, 0, -99.93740342749956, 0), (0, 100, 0, 0), (99.93740342749956, 0, 3.5377105830182747, 0), (-55.8697395324707, 190, 156.03079223632812, 1) ), + 449: ( (-91.5746518190726, 0, 40.17565362524452, 0), (-0, 100, 0, 0), (-40.17565362524452, 0, -91.5746518190726, 0), (-52.617401123046875, 190, 185.62106323242188, 1) ), + 450: ( (40.175653625244514, 0, 91.5746518190726, 0), (0, 100, 0, 0), (-91.5746518190726, 0, 40.175653625244514, 0), (-52.617401123046875, 190, 185.62106323242188, 1) ), + 451: ( (91.57464379450296, 0, -40.17567191609743, 0), (0, 100, 0, 0), (40.17567191609743, 0, 91.57464379450296, 0), (-52.617401123046875, 190, 185.62106323242188, 1) ), + 452: ( (-40.175604849628925, 0, -91.5746732179071, 0), (0, 100, 0, 0), (91.5746732179071, 0, -40.175604849628925, 0), (-52.617401123046875, 190, 185.62106323242188, 1) ), + 453: ( (-34.06100709944973, 0, 94.02046476895993, 0), (-0, 100, 0, 0), (-94.02046476895993, 0, -34.06100709944973, 0), (-36.02732467651367, 190, 201.2587127685547, 1) ), + 454: ( (94.02046590283423, 0, 34.06100396955416, 0), (0, 100, 0, 0), (-34.06100396955416, 0, 94.02046590283423, 0), (-36.02732467651367, 190, 201.2587127685547, 1) ), + 455: ( (34.06099457986726, 0, -94.02046930445653, 0), (0, 100, 0, 0), (94.02046930445653, 0, 34.06099457986726, 0), (-36.02732467651367, 190, 201.2587127685547, 1) ), + 456: ( (-94.02046476895994, 0, -34.061007099449704, 0), (0, 100, 0, 0), (34.061007099449704, 0, -94.02046476895994, 0), (-36.02732467651367, 190, 201.2587127685547, 1) ), + 457: ( (-30.321468629044546, 0, 95.29222707114084, 0), (-0, 100, 0, 0), (-95.29222707114084, 0, -30.321468629044546, 0), (-6.202140808105469, 190, 202.43601989746094, 1) ), + 458: ( (95.29221798665407, 0, 30.321497179130212, 0), (0, 100, 0, 0), (-30.321497179130212, 0, 95.29221798665407, 0), (-6.202140808105469, 190, 202.43601989746094, 1) ), + 459: ( (30.321481317971845, 0, -95.29222303359222, 0), (0, 100, 0, 0), (95.29222303359222, 0, 30.321481317971845, 0), (-6.202140808105469, 190, 202.43601989746094, 1) ), + 460: ( (-95.2922028458238, 0, -30.321544762600265, 0), (0, 100, 0, 0), (30.321544762600265, 0, -95.2922028458238, 0), (-6.202140808105469, 190, 202.43601989746094, 1) ), + 461: ( (-56.36991131514597, 0, 82.59802115258317, 0), (0, 100, 0, 0), (-82.59802115258317, 0, -56.36991131514597, 0), (18.507904052734375, 190, 218.61154174804688, 1) ), + 462: ( (82.59802115258319, 0, 56.36991131514596, 0), (0, 100, 0, 0), (-56.36991131514596, 0, 82.59802115258319, 0), (18.507904052734375, 190, 218.61154174804688, 1) ), + 463: ( (56.369883818663325, 0, -82.59803991784793, 0), (0, 100, 0, 0), (82.59803991784793, 0, 56.369883818663325, 0), (18.507904052734375, 190, 218.61154174804688, 1) ), + 464: ( (-82.59801364647473, 0, -56.369922313737256, 0), (0, 100, 0, 0), (56.369922313737256, 0, -82.59801364647473, 0), (18.507904052734375, 190, 218.61154174804688, 1) ), + 465: ( (-57.932493517099715, 0, 81.5096693337128, 0), (0, 100, 0, 0), (-81.5096693337128, 0, -57.932493517099715, 0), (42.83725357055664, 190, 235.90347290039062, 1) ), + 466: ( (81.50967319080166, 0, 57.93248809026511, 0), (0, 100, 0, 0), (-57.93248809026511, 0, 81.50967319080166, 0), (42.83725357055664, 190, 235.90347290039062, 1) ), + 467: ( (57.93247723659508, 0, -81.50968090497835, 0), (0, 100, 0, 0), (81.50968090497835, 0, 57.93247723659508, 0), (42.83725357055664, 190, 235.90347290039062, 1) ), + 468: ( (-81.50965390535363, 0, -57.932515224435654, 0), (0, 100, 0, 0), (57.932515224435654, 0, -81.50965390535363, 0), (42.83725357055664, 190, 235.90347290039062, 1) ), + 469: ( (-74.04761014768307, 0, 67.20826907023229, 0), (0, 100, 0, 0), (-67.20826907023229, 0, -74.04761014768307, 0), (67.1666030883789, 190, 253.19540405273438, 1) ), + 470: ( (67.20829372031784, 0, 74.04758777437308, 0), (0, 100, 0, 0), (-74.04758777437308, 0, 67.20829372031784, 0), (67.1666030883789, 190, 253.19540405273438, 1) ), + 471: ( (74.04757882504678, 0, -67.20830358034998, 0), (0, 100, 0, 0), (67.20830358034998, 0, 74.04757882504678, 0), (67.1666030883789, 190, 253.19540405273438, 1) ), + 472: ( (-67.20828879030134, 0, -74.04759224903572, 0), (0, 100, 0, 0), (74.04759224903572, 0, -67.20828879030134, 0), (67.1666030883789, 190, 253.19540405273438, 1) ), + 473: ( (-59.14333484589961, 0, 80.63538890155982, 0), (0, 100, 0, 0), (-80.63538890155982, 0, -59.14333484589961, 0), (81.78009033203125, 190, 278.8092346191406, 1) ), + 474: ( (80.63539283926534, 0, 59.143329477273745, 0), (0, 100, 0, 0), (-59.143329477273745, 0, 80.63539283926534, 0), (81.78009033203125, 190, 278.8092346191406, 1) ), + 475: ( (59.1433241086476, 0, -80.63539677697051, 0), (0, 100, 0, 0), (80.63539677697051, 0, 59.1433241086476, 0), (81.78009033203125, 190, 278.8092346191406, 1) ), + 476: ( (-80.63537315073415, 0, -59.14335632040054, 0), (0, 100, 0, 0), (59.14335632040054, 0, -80.63537315073415, 0), (81.78009033203125, 190, 278.8092346191406, 1) ), + 477: ( (44.417284853636836, 0, 89.59411144841431, 0), (0, 100, 0, 0), (-89.59411144841431, 0, 44.417284853636836, 0), (100.66987609863281, 190, 277.7689208984375, 1) ), + 478: ( (89.59410405526401, 0, -44.41729976635819, 0), (0, 100, 0, 0), (44.41729976635819, 0, 89.59410405526401, 0), (100.66987609863281, 190, 277.7689208984375, 1) ), + 479: ( (-44.41724906310054, 0, -89.59412919196488, 0), (0, 100, 0, 0), (89.59412919196488, 0, -44.41724906310054, 0), (100.66987609863281, 190, 277.7689208984375, 1) ), + 480: ( (-89.59412919196487, 0, 44.41724906310057, 0), (0, 100, 0, 0), (-44.41724906310057, 0, -89.59412919196487, 0), (100.66987609863281, 190, 277.7689208984375, 1) ), + 481: ( (65.3953663703601, 0, 75.65346031270728, 0), (0, 100, 0, 0), (-75.65346031270728, 0, 65.3953663703601, 0), (123.251220703125, 190, 258.24945068359375, 1) ), + 482: ( (75.65345595874723, 0, -65.39537140729375, 0), (0, 100, 0, 0), (65.39537140729375, 0, 75.65345595874723, 0), (123.251220703125, 190, 258.24945068359375, 1) ), + 483: ( (-65.39535125955742, 0, -75.6534733745854, 0), (0, 100, 0, 0), (75.6534733745854, 0, -65.39535125955742, 0), (123.251220703125, 190, 258.24945068359375, 1) ), + 484: ( (-75.6534733745854, 0, 65.39535125955742, 0), (0, 100, 0, 0), (-65.39535125955742, 0, -75.6534733745854, 0), (123.251220703125, 190, 258.24945068359375, 1) ), + 485: ( (40.08184926918842, 0, 91.61574842330363, 0), (0, 100, 0, 0), (-91.61574842330363, 0, 40.08184926918842, 0), (-206.24050903320312, 190, 286.4216003417969, 1) ), + 486: ( (91.61573508024587, 0, -40.08187976762325, 0), (0, 100, 0, 0), (40.08187976762325, 0, 91.61573508024587, 0), (-206.24050903320312, 190, 286.4216003417969, 1) ), + 487: ( (-40.081837069813226, 0, -91.61575376052389, 0), (0, 100, 0, 0), (91.61575376052389, 0, -40.081837069813226, 0), (-206.24050903320312, 190, 286.4216003417969, 1) ), + 488: ( (-91.61574308608174, 0, 40.08186146856288, 0), (-0, 100, 0, 0), (-40.08186146856288, 0, -91.61574308608174, 0), (-206.24050903320312, 190, 286.4216003417969, 1) ), + 489: ( (40.19849155482872, 0, 91.56462896073114, 0), (0, 100, 0, 0), (-91.56462896073114, 0, 40.19849155482872, 0), (-180.79183959960938, 190, 275.2878112792969, 1) ), + 490: ( (91.56462226978871, 0, -40.19850679553797, 0), (0, 100, 0, 0), (40.19850679553797, 0, 91.56462226978871, 0), (-180.79183959960938, 190, 275.2878112792969, 1) ), + 491: ( (-40.19845497712194, 0, -91.56464501898263, 0), (0, 100, 0, 0), (91.56464501898263, 0, -40.19845497712194, 0), (-180.79183959960938, 190, 275.2878112792969, 1) ), + 492: ( (-91.56463431348327, 0, 40.19847936226051, 0), (-0, 100, 0, 0), (-40.19847936226051, 0, -91.56463431348327, 0), (-180.79183959960938, 190, 275.2878112792969, 1) ), + 493: ( (41.75245149812676, 0, 90.86656587489466, 0), (0, 100, 0, 0), (-90.86656587489466, 0, 41.75245149812676, 0), (-155.37261962890625, 190, 264.0896911621094, 1) ), + 494: ( (90.86655614546059, 0, -41.75247267245209, 0), (0, 100, 0, 0), (41.75247267245209, 0, 90.86655614546059, 0), (-155.37261962890625, 190, 264.0896911621094, 1) ), + 495: ( (-41.752415199278005, 0, -90.86658255391306, 0), (0, 100, 0, 0), (90.86658255391306, 0, -41.752415199278005, 0), (-155.37261962890625, 190, 264.0896911621094, 1) ), + 496: ( (-90.86657143456908, 0, 41.75243939851123, 0), (-0, 100, 0, 0), (-41.75243939851123, 0, -90.86657143456908, 0), (-155.37261962890625, 190, 264.0896911621094, 1) ), + 497: ( (43.17948533819106, 0, 90.19718424612235, 0), (0, 100, 0, 0), (-90.19718424612235, 0, 43.17948533819106, 0), (-130.3179931640625, 190, 252.09547424316406, 1) ), + 498: ( (90.19717993384971, 0, -43.179494346052024, 0), (0, 100, 0, 0), (43.179494346052024, 0, 90.19717993384971, 0), (-130.3179931640625, 190, 252.09547424316406, 1) ), + 499: ( (-43.17944930674292, 0, -90.19720149520394, 0), (0, 100, 0, 0), (90.19720149520394, 0, -43.17944930674292, 0), (-130.3179931640625, 190, 252.09547424316406, 1) ), + 500: ( (-90.19718999581782, 0, 43.1794733277091, 0), (-0, 100, 0, 0), (-43.1794733277091, 0, -90.19718999581782, 0), (-130.3179931640625, 190, 252.09547424316406, 1) ), + 501: ( (69.61251764062911, 0, 71.79204264912026, 0), (0, 100, 0, 0), (-71.79204264912026, 0, 69.61251764062911, 0), (-105.26336669921875, 190, 240.10122680664062, 1) ), + 502: ( (71.7920287449177, 0, -69.61253198016081, 0), (0, 100, 0, 0), (69.61253198016081, 0, 71.7920287449177, 0), (-105.26336669921875, 190, 240.10122680664062, 1) ), + 503: ( (-69.61251286078459, 0, -71.7920472838538, 0), (0, 100, 0, 0), (71.7920472838538, 0, -69.61251286078459, 0), (-105.26336669921875, 190, 240.10122680664062, 1) ), + 504: ( (-71.7920472838538, 0, 69.61251286078459, 0), (-0, 100, 0, 0), (-69.61251286078459, 0, -71.7920472838538, 0), (-105.26336669921875, 190, 240.10122680664062, 1) ), + 505: ( (93.46797624482389, 0, 35.549084611239124, 0), (0, 100, 0, 0), (-35.549084611239124, 0, 93.46797624482389, 0), (-93.77804565429688, 190, 216.66482543945312, 1) ), + 506: ( (35.54907527672853, 0, -93.46797979505862, 0), (0, 100, 0, 0), (93.46797979505862, 0, 35.54907527672853, 0), (-93.77804565429688, 190, 216.66482543945312, 1) ), + 507: ( (-93.46796559411405, 0, -35.549112614768745, 0), (0, 100, 0, 0), (35.549112614768745, 0, -93.46796559411405, 0), (-93.77804565429688, 190, 216.66482543945312, 1) ), + 508: ( (-35.54908772274256, 0, 93.4679750614121, 0), (-0, 100, 0, 0), (-93.4679750614121, 0, -35.54908772274256, 0), (-93.77804565429688, 190, 216.66482543945312, 1) ), + 509: ( (80.33977447143441, 0, 59.54427460200565, 0), (0, 100, 0, 0), (-59.54427460200565, 0, 80.33977447143441, 0), (-86.18705749511719, 190, 189.94454956054688, 1) ), + 510: ( (59.544258555172355, 0, -80.33978636463246, 0), (0, 100, 0, 0), (80.33978636463246, 0, 59.544258555172355, 0), (-86.18705749511719, 190, 189.94454956054688, 1) ), + 511: ( (-80.33977050703437, 0, -59.544279950949544, 0), (0, 100, 0, 0), (59.544279950949544, 0, -80.33977050703437, 0), (-86.18705749511719, 190, 189.94454956054688, 1) ), + 512: ( (-59.54429064883655, 0, 80.33976257823318, 0), (-0, 100, 0, 0), (-80.33976257823318, 0, -59.54429064883655, 0), (-86.18705749511719, 190, 189.94454956054688, 1) ), + 513: ( (-99.98767846999438, 0, 1.5697624600628162, 0), (-0, 100, 0, 0), (-1.5697624600628162, 0, -99.98767846999438, 0), (-84.8638687133789, 190, 204.63742065429688, 1) ), + 514: ( (1.5711870755305466, 0, 99.98765609400834, 0), (0, 100, 0, 0), (-99.98765609400834, 0, 1.5711870755305466, 0), (-84.8638687133789, 190, 204.63742065429688, 1) ), + 515: ( (99.98765749800536, 0, -1.5710977250224836, 0), (0, 100, 0, 0), (1.5710977250224836, 0, 99.98765749800536, 0), (-84.8638687133789, 190, 204.63742065429688, 1) ), + 516: ( (-1.5707743365026399, 0, -99.98766257885913, 0), (0, 100, 0, 0), (99.98766257885913, 0, -1.5707743365026399, 0), (-84.8638687133789, 190, 204.63742065429688, 1) ), + 517: ( (-99.97213348939562, 0, -2.360619744571767, 0), (0, 100, 0, 0), (2.360619744571767, 0, -99.97213348939562, 0), (-85.51984405517578, 190, 232.40728759765625, 1) ), + 518: ( (-2.361578215288861, 0, 99.97211085264266, 0), (-0, 100, 0, 0), (-99.97211085264266, 0, -2.361578215288861, 0), (-85.51984405517578, 190, 232.40728759765625, 1) ), + 519: ( (99.97211181076437, 0, 2.3615376550089993, 0), (0, 100, 0, 0), (-2.3615376550089993, 0, 99.97211181076437, 0), (-85.51984405517578, 190, 232.40728759765625, 1) ), + 520: ( (2.3615649031970585, 0, -99.97211116710494, 0), (0, 100, 0, 0), (99.97211116710494, 0, 2.3615649031970585, 0), (-85.51984405517578, 190, 232.40728759765625, 1) ), + 521: ( (-99.99530273647386, 0, 0.9692423024941441, 0), (-0, 100, 0, 0), (-0.9692423024941441, 0, -99.99530273647386, 0), (-86.17582702636719, 190, 260.17718505859375, 1) ), + 522: ( (0.9679640451376755, 0, 99.99531511829602, 0), (0, 100, 0, 0), (-99.99531511829602, 0, 0.9679640451376755, 0), (-86.17582702636719, 190, 260.17718505859375, 1) ), + 523: ( (99.99530382739127, 0, -0.9691297476128254, 0), (0, 100, 0, 0), (0.9691297476128254, 0, 99.99530382739127, 0), (-86.17582702636719, 190, 260.17718505859375, 1) ), + 524: ( (-0.9691624114140065, 0, -99.99530351081646, 0), (0, 100, 0, 0), (99.99530351081646, 0, -0.9691624114140065, 0), (-86.17582702636719, 190, 260.17718505859375, 1) ), + 525: ( (-99.90135735059201, 0, 4.44058549172483, 0), (-0, 100, 0, 0), (-4.44058549172483, 0, -99.90135735059201, 0), (-84.98176574707031, 190, 287.9264831542969, 1) ), + 526: ( (4.440505675701081, 0, 99.90136089835848, 0), (0, 100, 0, 0), (-99.90136089835848, 0, 4.440505675701081, 0), (-84.98176574707031, 190, 287.9264831542969, 1) ), + 527: ( (99.90135186251514, 0, -4.440708957130956, 0), (0, 100, 0, 0), (4.440708957130956, 0, 99.90135186251514, 0), (-84.98176574707031, 190, 287.9264831542969, 1) ), + 528: ( (-4.440479070359245, 0, -99.90136208093313, 0), (0, 100, 0, 0), (99.90136208093313, 0, -4.440479070359245, 0), (-84.98176574707031, 190, 287.9264831542969, 1) ), + 529: ( (-92.57118375421382, 0, 37.822955177293835, 0), (-0, 100, 0, 0), (-37.822955177293835, 0, -92.57118375421382, 0), (-83.70890045166016, 190, 315.6749267578125, 1) ), + 530: ( (37.822955177293835, 0, 92.57118375421382, 0), (0, 100, 0, 0), (-92.57118375421382, 0, 37.822955177293835, 0), (-83.70890045166016, 190, 315.6749267578125, 1) ), + 531: ( (92.57117619956529, 0, -37.82297366719118, 0), (0, 100, 0, 0), (37.82297366719118, 0, 92.57117619956529, 0), (-83.70890045166016, 190, 315.6749267578125, 1) ), + 532: ( (-37.82293052409503, 0, -92.57119382707279, 0), (0, 100, 0, 0), (92.57119382707279, 0, -37.82293052409503, 0), (-83.70890045166016, 190, 315.6749267578125, 1) ), + 533: ( (-36.9847167472146, 0, 92.90926071780092, 0), (-0, 100, 0, 0), (-92.90926071780092, 0, -36.9847167472146, 0), (-67.86772918701172, 190, 329.8128356933594, 1) ), + 534: ( (92.90926318020718, 0, 36.98471056140631, 0), (0, 100, 0, 0), (-36.98471056140631, 0, 92.90926318020718, 0), (-67.86772918701172, 190, 329.8128356933594, 1) ), + 535: ( (36.98470437559787, 0, -92.90926564261301, 0), (0, 100, 0, 0), (92.90926564261301, 0, 36.98470437559787, 0), (-67.86772918701172, 190, 329.8128356933594, 1) ), + 536: ( (-92.90926071780092, 0, -36.98471674721457, 0), (0, 100, 0, 0), (36.98471674721457, 0, -92.90926071780092, 0), (-67.86772918701172, 190, 329.8128356933594, 1) ), + 537: ( (-11.354639864321484, 0, 99.35326946583872, 0), (-0, 100, 0, 0), (-99.35326946583872, 0, -11.354639864321484, 0), (-40.26976776123047, 190, 332.9668884277344, 1) ), + 538: ( (99.35326719789411, 0, 11.35465970885337, 0), (0, 100, 0, 0), (-11.35465970885337, 0, 99.35326719789411, 0), (-40.26976776123047, 190, 332.9668884277344, 1) ), + 539: ( (11.354666323697229, 0, -99.35326644191169, 0), (0, 100, 0, 0), (99.35326644191169, 0, 11.354666323697229, 0), (-40.26976776123047, 190, 332.9668884277344, 1) ), + 540: ( (-99.3532603940365, 0, -11.354719242446281, 0), (0, 100, 0, 0), (11.354719242446281, 0, -99.3532603940365, 0), (-40.26976776123047, 190, 332.9668884277344, 1) ), + 541: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (-175.8675994873047, 220, 7, 1) ), + 542: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (-87.2676010131836, 220, 7, 1) ), + 543: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (1.3323974609375, 220, 7, 1) ), + 544: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (89.93238830566406, 220, 7, 1) ), + 545: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (178.5323944091797, 220, 7, 1) ), + 546: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (267.13238525390625, 220, 7, 1) ), + 547: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (-175.8675994873047, 220, 96.5, 1) ), + 548: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (-87.2676010131836, 220, 96.5, 1) ), + 549: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (1.3323974609375, 220, 96.5, 1) ), + 550: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (89.93238830566406, 220, 96.5, 1) ), + 551: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (178.5323944091797, 220, 96.5, 1) ), + 552: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (267.13238525390625, 220, 96.5, 1) ), + 553: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (-175.8675994873047, 220, 186, 1) ), + 554: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (-87.2676010131836, 220, 186, 1) ), + 555: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (1.3323974609375, 220, 186, 1) ), + 556: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (89.93238830566406, 220, 186, 1) ), + 557: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (178.5323944091797, 220, 186, 1) ), + 558: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (267.13238525390625, 220, 186, 1) ), + 559: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (-175.8675994873047, 220, 275.5, 1) ), + 560: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (-87.2676010131836, 220, 275.5, 1) ), + 561: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (1.3323974609375, 220, 275.5, 1) ), + 562: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (89.93238830566406, 220, 275.5, 1) ), + 563: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (178.5323944091797, 220, 275.5, 1) ), + 564: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (267.13238525390625, 220, 275.5, 1) ), + 565: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (-175.8675994873047, 220, 365, 1) ), + 566: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (-87.2676010131836, 220, 365, 1) ), + 567: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (1.3323974609375, 220, 365, 1) ), + 568: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (89.93238830566406, 220, 365, 1) ), + 569: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (178.5323944091797, 220, 365, 1) ), + 570: ( (100, 0, 0, 0), (0, -0.000013315805452146108, -99.99999999999912, 0), (0, 99.99999999999912, -0.000013315805452146108, 0), (267.13238525390625, 220, 365, 1) ), + } + uniform token[] xformOpOrder = ["xformOp:transform"] + } +} + diff --git a/LICENSE.md b/LICENSE.md index 6a929405..c8d8c13a 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,8 +1,8 @@ ASWF Digital Assets License v1.1 -License for Animal Logic ALab (the "Asset Name"). +License for Netflix Animation Studios ALab (the "Asset Name"). -Animal Logic ALab Copyright 2024 Animal Logic Pty Limited. All rights reserved. +Netflix Animation Studios ALab Copyright 2025 Netflix, Inc. All rights reserved. Redistribution and use of these digital assets, with or without modification, solely for education, training, research, software and hardware development, performance benchmarking (including publication of benchmark results and permitting reproducibility of the benchmark results by third parties), or software and hardware product demonstrations, are permitted provided that the following conditions are met: diff --git a/README.md b/README.md index 200c9ad5..14b4f404 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -![Glimpse](docs/public/doc_header.jpg) +![Glimpse](docs/public/doc_header.png) # Introduction -Welcome to Animal Logic's USD [ALab](https://animallogic.com/alab/). +Welcome to Netflix Animation Studios' USD [ALab](https://animallogic.com/alab/). **TL;DR:** [Download ALab](https://dpel.aswf.io/alab/) and open `entry.usda` to get started. @@ -12,7 +12,7 @@ Applications with USD support, such as Maya-2022+, Houdini-18.5+ and many more s For quick preview and inspection, [`USDView`](https://graphics.pixar.com/usd/docs/USD-Toolset.html#USDToolset-usdview) is a great starting point. -| Glimpse (AL proprietary) | Houdini (Karma) | Maya (VP2/render purpose) | UsdView (Storm/render purpose) | +| Glimpse (NAS proprietary) | Houdini (Karma) | Maya (VP2/render purpose) | UsdView (Storm/render purpose) | | ---------------------------- | --------------- | ------------------ | ------------------------ | |![Glimpse](docs/public/glimpse_phase2.png)|![Houdini screenshot](docs/public/houdini_phase2.png)|![Maya 2022 screenshot](docs/public/maya_phase2.png)|![UsdView (render purpose)](docs/public/usdview_phase2.png)| @@ -20,16 +20,16 @@ For quick preview and inspection, [`USDView`](https://graphics.pixar.com/usd/doc # Documentation - [Documentation](docs/src/pages/documentation.md) - File structure layout and asset documentation. -- [AL-specific content](docs/src/pages/alSpecific.md) - Animal Logic specific concepts, which we love, but had to remove from ALab to ensure ease of use and compatibility. +- [NAS-specific content](docs/src/pages/nasSpecific.md) - Netflix Animation Studios specific concepts, which we love, but had to remove from ALab to ensure ease of use and compatibility. - [Changelog](docs/src/pages/changelog.md) - List of all the updates from the latest versions of ALab. # About ALab -The ALab data set is the Animal Logic interpretation and implementation of real-world production and pipeline concepts in USD. +Originally released in 2021 by Animal Logic, the ALab data set is the Netflix Animation Studios interpretation and implementation of real-world production and pipeline concepts in USD. It includes over 300 fully surfaced assets derived from an internally produced project, rather than created from scratch as a "USD reference implementation." It consequently exhibits the complexities (and some of the messiness) of real production assets. If one were to build a USD structure for the sole purpose of showcasing USD, it would lead to a different result. -The `entry.usda` `stage` places you in a shot with a structure similar to how we use it at Animal Logic. Since no shot is complete without animation, included are two animated characters, each with some level of proceduralism. Due to this proceduralism requiring some custom `schemas` for our internal Glimpse renderer, we have provided a hint on what these procedurals create in a separate `baked_procedurals` package. This is the "cached" content that would be sent to the renderer per-frame. +The `entry.usda` `stage` places you in a shot with a structure similar to how we use it at Netflix Animation Studios. Since no shot is complete without animation, included are two animated characters, each with some level of proceduralism. Due to this proceduralism requiring some custom `schemas` for our internal Glimpse renderer, we have provided a hint on what these procedurals create in a separate `baked_procedurals` package. This is the "cached" content that would be sent to the renderer per-frame. For “production style rendering” we also provide an additional package `texture_pack` with multi UDIM, mipmapped 4K OpenEXR textures. @@ -38,7 +38,7 @@ Refer below to the `Available Packages` section for more information on these. We hope that this is the starting point for future contributions to showcase new ideas for discussion, promotion, and hopefully adoption. -## Why did Animal Logic create these assets? +## Why did Netflix Animation Studios create these assets? We created them to be used *internally*, primarily to provide client-free IP data for: - Training of Developers, TDs and Artists - Discussion Reference ("something to point at") @@ -100,7 +100,7 @@ After merging, your contents from the `baked_procedurals` folder should look lik ![replace_texture_pack](docs/public/baked_procedurals.jpg) -Refer to the `Render Procedurals` section from [AL-specific content](docs/src/pages/alSpecific.md) for more details on this. +Refer to the `Render Procedurals` section from [NAS-specific content](docs/src/pages/nasSpecific.md) for more details on this. ## Texture Pack * 4k texture maps, half float mipmapped OpenEXR images in ACEScg colour space. @@ -127,6 +127,19 @@ From the **Camera** > **Select Camera** menu, choose the required shot camera. ![select_cameras](docs/public/multiple_camera_prims.png) +## Splat Pack (WIP) +* This contains the ALab as a single gaussian splat in USD, using the new/upcoming [Lightfields USD schema](https://github.com/PixarAnimationStudios/OpenUSD/pull/3716). It is a WIP, but we wanted to get a test branch out for people to start iterating on and to help push forward collaboration on the schema and refining this DPEL asset. + +Files currently in this pack: +- The original .ply file +- A .usdc file of the ALab Splat +- A .usda file of transformations to make the splat match up with ALab (this is temporary) +- The USD camera for the rendered images used to generate the splat + +In order to successfully view the usdc file you will need to have built usd with [this branch](https://github.com/PixarAnimationStudios/OpenUSD/pull/3716) for the schema and usdview renderer. + +More details on how to test with this at the moment are [here in the docs](docs/src/pages/gaussianSplat.md) + # Contact & Feedback We are proud to have been accepted into the [Academy Software Foundation Digital Production Example Library](https://dpel.aswf.io). As such we have moved further conversations to the [#assets-alab](https://academysoftwarefdn.slack.com/channels/C03S4QB8N04) slack channel. diff --git a/docs/public/ALab_splat_in_usdview.gif b/docs/public/ALab_splat_in_usdview.gif new file mode 100644 index 00000000..e425495c Binary files /dev/null and b/docs/public/ALab_splat_in_usdview.gif differ diff --git a/docs/public/doc_header.jpg b/docs/public/doc_header.jpg deleted file mode 100644 index 6f61a37a..00000000 Binary files a/docs/public/doc_header.jpg and /dev/null differ diff --git a/docs/public/doc_header.png b/docs/public/doc_header.png new file mode 100644 index 00000000..2ce4dfe3 Binary files /dev/null and b/docs/public/doc_header.png differ diff --git a/docs/public/hou_21_sdr.jpg b/docs/public/hou_21_sdr.jpg new file mode 100644 index 00000000..2a6448f2 Binary files /dev/null and b/docs/public/hou_21_sdr.jpg differ diff --git a/docs/public/nuke_17_sdr.jpg b/docs/public/nuke_17_sdr.jpg new file mode 100644 index 00000000..0b58e316 Binary files /dev/null and b/docs/public/nuke_17_sdr.jpg differ diff --git a/docs/public/splat_substance_viewer_screenshot.png b/docs/public/splat_substance_viewer_screenshot.png new file mode 100644 index 00000000..95c17bfd Binary files /dev/null and b/docs/public/splat_substance_viewer_screenshot.png differ diff --git a/docs/src/components/GlobalStyles.astro b/docs/src/components/GlobalStyles.astro new file mode 100644 index 00000000..97c61d29 --- /dev/null +++ b/docs/src/components/GlobalStyles.astro @@ -0,0 +1,218 @@ + diff --git a/docs/src/layouts/BaseLayout.astro b/docs/src/layouts/BaseLayout.astro index cb5387e0..91ea65ab 100644 --- a/docs/src/layouts/BaseLayout.astro +++ b/docs/src/layouts/BaseLayout.astro @@ -1,230 +1,17 @@ +--- +import "../components/GlobalStyles.astro"; +--- + - + + - diff --git a/docs/src/layouts/Changelog.astro b/docs/src/layouts/Changelog.astro new file mode 100644 index 00000000..d7fe34f7 --- /dev/null +++ b/docs/src/layouts/Changelog.astro @@ -0,0 +1,17 @@ +--- +import "../components/GlobalStyles.astro"; +--- + + + + + + + + + + + + + + diff --git a/docs/src/layouts/Documentation.astro b/docs/src/layouts/Documentation.astro new file mode 100644 index 00000000..dd662f30 --- /dev/null +++ b/docs/src/layouts/Documentation.astro @@ -0,0 +1,17 @@ +--- +import "../components/GlobalStyles.astro"; +--- + + + + + + + + + + + + + + diff --git a/docs/src/layouts/NasSpecific.astro b/docs/src/layouts/NasSpecific.astro new file mode 100644 index 00000000..9df53e7c --- /dev/null +++ b/docs/src/layouts/NasSpecific.astro @@ -0,0 +1,17 @@ +--- +import "../components/GlobalStyles.astro"; +--- + + + + + + + + + + + + + + diff --git a/docs/src/pages/changelog.md b/docs/src/pages/changelog.md index 91f73edb..be7b705b 100644 --- a/docs/src/pages/changelog.md +++ b/docs/src/pages/changelog.md @@ -1,5 +1,5 @@ --- -layout: ../layouts/BaseLayout.astro +layout: ../layouts/Changelog.astro --- # Changelog diff --git a/docs/src/pages/documentation.md b/docs/src/pages/documentation.md index d54e759a..ad55e88f 100644 --- a/docs/src/pages/documentation.md +++ b/docs/src/pages/documentation.md @@ -1,18 +1,16 @@ --- -layout: ../layouts/BaseLayout.astro +layout: ../layouts/Documentation.astro --- # Documentation -> New content in [ALab](https://animallogic.com/alab/) **v2.1.0** is marked with a **<NEW>** prefix in the title. - # toc # Documentation ## File / Asset Structure (Entities & Fragments) -At Animal Logic, we organise files into "`Entities` & `Fragments`" Libraries. +At Netflix Animation Studios, we organise files into "`Entities` & `Fragments`" Libraries. > Note: If we weren't using a custom asset resolver internally, we would probably use two `PXR_AR_DEFAULT_SEARCH_PATH`s (pointing to `/entity` and `/fragment`) to make asset identification very simple. @@ -389,7 +387,7 @@ The `point instancers` come with **off** and **render** `variants` under the `va ## USDSkel -[USDSkel](https://graphics.pixar.com/usd/release/api/usd_skel_page_front.html) is a bare-bones rig with simple skeletons and blendshapes. At Animal Logic, `USDSkel` is used for crowd workflows. It works well for this purpose as it is designed to be efficient and scalable, with a lack of shared joint influence and the ability to apply unique animations to `instances` without deinstancing. +[USDSkel](https://graphics.pixar.com/usd/release/api/usd_skel_page_front.html) is a bare-bones rig with simple skeletons and blendshapes. At Netflix Animation Studios, `USDSkel` is used for crowd workflows. It works well for this purpose as it is designed to be efficient and scalable, with a lack of shared joint influence and the ability to apply unique animations to `instances` without deinstancing. This is represented in USD through **skel** `primvars`, which are a part of USD's `SkelBindingAPI`. @@ -451,7 +449,7 @@ When crowd departments use this as an agent, they choose the `skeleton=on` varia `Primvars` are a special attribute that a renderer can associate with a geometric `primitive`. They can vary across the `primitive` they are defined on through various interpolation rules, defined in the [documentation](https://graphics.pixar.com/usd/dev/api/class_usd_geom_primvar.html). -For example, **vertex** defines the value to be interpolated across the vertices on the surface. `Primvars` can also be passed onto children of USD `primitives`. This makes them very flexible, which makes them effective as custom attributes for renderers (such as Animal Logic's Glimpse) to read. You can read more about this in the [AL-Specific documentation](al_specific.html). +For example, **vertex** defines the value to be interpolated across the vertices on the surface. `Primvars` can also be passed onto children of USD `primitives`. This makes them very flexible, which makes them effective as custom attributes for renderers (such as Netflix Animation Studios' Glimpse) to read. You can read more about this in the [NAS-Specific documentation](nasSpecific). As seen in the USD snippet above, the `SkelBindingAPI` uses its **skel** `primvars` to allow joint weights and joint indices to vary across the same primitive with vertex interpolation. @@ -702,7 +700,7 @@ In phase 2, you can also see a `value clip` used for the baked procedurals of Mc ## Assemblies & Native Instancing -At Animal Logic we make heavy use of instancing whenever possible. By default, all `entities` used on an environment are instanced. +At Netflix Animation Studios we make heavy use of instancing whenever possible. By default, all `entities` used on an environment are instanced. This means if we use the same seven windows on a city, they all share the same prototype `prim`. ALab is no exception, these are the most frequently used `entities` (all of which are instanced): @@ -791,13 +789,13 @@ Render procedurals such as hair (Alfro) and cloth (Weave) have been expanded int ![Procedurals in ALab rendered by Houdini's Karma](../../public/character_procedurals_in_karma.png) -These curves are represented by USD overrides and stored in `baked_procedurals.usd`. They overwrite the original Animal Logic procedural data designed for Glimpse with a `prim` `/procedurals/output/curves`. +These curves are represented by USD overrides and stored in `baked_procedurals.usd`. They overwrite the original Netflix Animation Studios procedural data designed for Glimpse with a `prim` `/procedurals/output/curves`. These curves should be visible by switching to a view with display `purpose` **render**. In `USDView`, you can navigate to **View > Display Purposes > Render**. > Note: Textures are not visible on curves in `USDView` - the above image was rendered in Houdini's Karma renderer. -## <NEW> Texture Cards in Draw Mode +## Texture Cards in Draw Mode The ability to set entities draw mode to **card** drastically increases viewport performance. Global entities of `component` `Kind` have textures for "cards" Draw Mode. @@ -812,9 +810,3 @@ For cards Draw Mode to work, we need to have a few `attributes` authored: - **model.drawMode**: This is the Draw Mode that needs to be selected. To use this, set the **drawMode** to **cards**. ![Texture Cards](../../public/texture_cards.png) - -## <NEW> Improved Proxies and Display Textures - -Proxies now more closely match their render purpose geometry. - -![Improved Proxy Topology](../../public/proxies01.png) diff --git a/docs/src/pages/gaussianSplat.md b/docs/src/pages/gaussianSplat.md new file mode 100644 index 00000000..5136440e --- /dev/null +++ b/docs/src/pages/gaussianSplat.md @@ -0,0 +1,89 @@ + +# ALab Splat Pack Documentation + +This is the initial version of the ALab as gaussian splats, to help test and preview of PixarAnimationStudios/OpenUSD#3716 + +It's still a WIP but we wanted to make this available for early testers and hopefully as a tool to help refine the splat schema work. +If you're interested in getting involved with the development of the schema, you should join the [AOUSD Emerging Geometry Interest Group](https://aousd.org/community/interest-groups/#:~:text=VIEW%20CHARTER-,USD%20Emerging%20Geometry,-The%20USD%20Emerging) + +#### Note: you will need to install the adobe usd file format plugins to be able to load .ply files +https://github.com/adobe/USD-Fileformat-plugins + +## Steps to view the ALab usdc splat in usdview + +1. Build USD from the branch PR: APPLE: Add Gaussian Splats API schema PixarAnimationStudios/OpenUSD#3716 + + git clone -b gaussians https://github.com/dgovil/USD.git + +2. Ensure the PXR_PLUGINPATH_NAME is extended to include + + share/usd/examples/plugin/hdParticleField/resources/plugInfo.json + +3. Clone this ALab branch + +4. The alab.usdc will have contents like this: + + def ParticleField_3DGaussianSplat "alab" + { + float3[] extent = [(-4.2353315, -4.928282, -4.960755), (4.912536, 1.9337461, 1.628153)] + float[] opacities = << float[1502196] >> + quatf[] orientations = << GfQuatf[1502196] >> + point3f[] positions = << GfVec3f[1502196] >> + float3[] radiance:sphericalHarmonicsCoefficients = << GfVec3f[24035136] >> ( + elementSize = 16 + interpolation = "vertex" + ) + uniform int radiance:sphericalHarmonicsDegree = 3 + float3[] scales = << GfVec3f[1502196] >> + } + +5. Launch USDView and set the renderer to hdParticleField + + usdview ALab/ALab/extras/gaussian_splats_with_camera.usda + +Now you should be able to open it in usdview like this: + +![gif](../../public/ALab_splat_in_usdview.gif) + +## Here's the SDR Splat in some other DCC + +### Nuke 17 beta +![view](../../public/nuke_17_sdr.jpg) + +### Houdini 21 beta +![view](../../public/hou_21_sdr.jpg) + +## How was the first version of the splat created? + +1. Used Houdini to do a quick ray cast setup test to try and define enough cameras to capture the majority of the scene (ending up with 570~ frames) +2. Rendered 1k*1k squares of the ALab using Glimpse (NAS's proprietary renderer) with those cameras- these files were acescg exrs +3. Converted these into .png (SDR and HDR variants) +4. Fed these into COLMAP to quickly get an input data format that would work with existing gsplat implementations +5. Used nerfstudio/gsplat implementation of 3dgs to splat with pretty standard settings for 30000 steps +6. The result of that training produces the original .ply file + +## Colour Workflows! +Eventually we would like to train the ALab splat on acescg 32 bit exrs. + +For the moment we have included SDR and HDR 8 bit png variants of the splat + +- SDR: sRGB - ACES 2.0 - SDR 100 nits (Rec709) (8 bit png) +- HDR: Rec.2100-PQ - ACES-2.0 HDR 1000 nits (P3 D65 Limited) (8 bit png) + +## Future plans + +1. Train the splat using 32 bit acescg exrs + - Need a gaussian rasterizer to output 32 bit for the training + - Need to adjust/test the ply -> usdc conversion script with 32 bit + - colorspaceAPI hasn't been made part of the schema yet, but it is planned to be + - Apple's splat renderer may need updates to work with 32bit splat values + +2. The lightrig used for this splat isn't the exact same lighting that is publicly available, so we're considering the best way forward. +3. We will be re-rendering and re-splatting at higher resolution once we decide on the lightrig to use +4. COLMAP was just a shortcut at the time, but we will be taking that out of the workflow eventually, which means you wouldn't need the transform adjustments in the usda +5. Ongoing work to decide the best production workflow colorspace to train splats in. +6. Splatting with different shape kernels, e.g. 2dgs, and triangles +7. Splatting with different falloffs besides gaussian +8. Animated Splats of Remi and the Stoat +9. Improve camera coverage for the hard to reach spots in the scene + diff --git a/docs/src/pages/main.md b/docs/src/pages/main.md index 321406e1..467b7148 100644 --- a/docs/src/pages/main.md +++ b/docs/src/pages/main.md @@ -6,7 +6,7 @@ layout: ../layouts/BaseLayout.astro # Introduction -Welcome to Animal Logic's USD [ALab](https://animallogic.com/alab/). +Welcome to Netflix Animation Studios' USD [ALab](https://animallogic.com/alab/). **TL;DR:** [Download ALab](https://dpel.aswf.io/alab/) and open `entry.usda` to get started. @@ -20,17 +20,17 @@ For quick preview and inspection, [`USDView`](https://graphics.pixar.com/usd/doc # Documentation -- [Documentation](ALab/documentation) - File structure layout and asset documentation. -- [AL-specific content](ALab/alSpecific) - Animal Logic specific concepts, which we love, but had to remove from ALab to ensure ease of use and compatibility. -- [Changelog](ALab/changelog) - List of all the updates from the latest versions of ALab. +- [Documentation](../documentation) - File structure layout and asset documentation. +- [NAS-specific content](../nasSpecific) - Netflix Animation Studios specific concepts, which we love, but had to remove from ALab to ensure ease of use and compatibility. +- [Changelog](../changelog) - List of all the updates from the latest versions of ALab. # About ALab -The ALab data set is the Animal Logic interpretation and implementation of real-world production and pipeline concepts in USD. +Originally released in 2021 by Animal Logic, The ALab data set is the Netflix Animation Studios interpretation and implementation of real-world production and pipeline concepts in USD. It includes over 300 fully surfaced assets derived from an internally produced project, rather than created from scratch as a "USD reference implementation." It consequently exhibits the complexities (and some of the messiness) of real production assets. If one were to build a USD structure for the sole purpose of showcasing USD, it would lead to a different result. -The `entry.usda` `stage` places you in a shot with a structure similar to how we use it at Animal Logic. Since no shot is complete without animation, included are two animated characters, each with some level of proceduralism. Due to this proceduralism requiring some custom `schemas` for our internal Glimpse renderer, we have provided a hint on what these procedurals create in a separate `baked_procedurals` package. This is the "cached" content that would be sent to the renderer per-frame. +The `entry.usda` `stage` places you in a shot with a structure similar to how we use it at Netflix Animation Studios. Since no shot is complete without animation, included are two animated characters, each with some level of proceduralism. Due to this proceduralism requiring some custom `schemas` for our internal Glimpse renderer, we have provided a hint on what these procedurals create in a separate `baked_procedurals` package. This is the "cached" content that would be sent to the renderer per-frame. For “production style rendering” we also provide an additional package `texture_pack` with multi UDIM, mipmapped 4K OpenEXR textures. @@ -38,7 +38,7 @@ Refer below to the `Available Packages` section for more information on these. We hope that this is the starting point for future contributions to showcase new ideas for discussion, promotion, and hopefully adoption. -## Why did Animal Logic create these assets? +## Why did Netflix Animation Studios create these assets? We created them to be used _internally_, primarily to provide client-free IP data for: @@ -65,6 +65,15 @@ As the complete data set is heavy and different use cases may consume distinct s *If in doubt, start only with the `Asset Structure` and `Techvar Assets` packages.* +You can use the `install_optional_packages.py` script provided with the ALab repository to automate downloading and/or installing these packages: + +```bash +# install all packages in current directory (will take a while) +python install_optional_packages.py --all +# you can provide a .zip filepath for each package if already downloaded, otherwise the script will download each for you +python install_optional_packages.py --techvar --baked_procedurals --texture_pack texture_pack_download.zip --cameras --output ./repos/ALab/ +``` + ## Asset Structure - Main USD asset structure. No geometry, shaders or lights. @@ -80,7 +89,7 @@ Since there are no geometry, shaders or lights in this pacakge, nothing will be ## Techvar Assets - Geometry, shaders, rigs, lights & 1k textures. -This will allow you to render the ALab *without* fur & cloth. +This will allow you to render the ALab *without* fur & cloth. Unzip and merge the `fragment` folder from this package onto the `ALab/fragment` folder of the `Asset Structure` package overriding all existing files. @@ -90,13 +99,13 @@ You can also view through the shot camera on `prim` path: `/root/camera01/GEO/re ![techvar_assets](../../public/techvar_assets.png) -For more information on "techvar" and other asset-related terminology, check-out the full [documentation](ALab/documentation). +For more information on "techvar" and other asset-related terminology, check-out the full [documentation](../documentation). ## Baked Procedurals - Baked procedurals (mainly in the form of `BasisCurves`) for the fur & cloth of the characters. -Internally we use custom schemas which allow procedural expansion of fur & cloth at render time. Since we can not ship these schemas as they are bound to our internal renderer, we provide their "expanded form as USD caches" separately. +Internally we use custom schemas which allow procedural expansion of fur & cloth at render time. Since we can not ship these schemas as they are bound to our internal renderer, we provide their "expanded form as USD caches" separately. Unzip the contents on top of the default ALab package to merge the `baked_procedurals` folder, overriding the previously empty `baked_procedurals/main.usda` file. @@ -104,7 +113,7 @@ After merging, your contents from the `baked_procedurals` folder should look lik ![replace_texture_pack](../../public/baked_procedurals.jpg) -Refer to the `Render Procedurals` section from [AL-specific content](ALab/alSpecific.md) for more details on this. +Refer to the `Render Procedurals` section from [NAS-specific content](../nasSpecific) for more details on this. ## Texture Pack diff --git a/docs/src/pages/alSpecific.md b/docs/src/pages/nasSpecific.md similarity index 93% rename from docs/src/pages/alSpecific.md rename to docs/src/pages/nasSpecific.md index 5be0247e..9e245200 100644 --- a/docs/src/pages/alSpecific.md +++ b/docs/src/pages/nasSpecific.md @@ -1,16 +1,14 @@ --- -layout: ../layouts/BaseLayout.astro +layout: ../layouts/NasSpecific.astro --- -# Animal Logic +# Netflix Animation Studios This document describes some of the USD concepts, which we love, but had to remove from ALab to ensure ease of use and compatibility. Some of them are more daring and unique than others, but we hope that you find them all interesting. -> New content in [ALab](https://animallogic.com/alab/) **v2.1.0** is marked with a **<NEW>** prefix in the title. - # toc -# Animal Logic +# Netflix Animation Studios ## URIs > Relative Filepaths @@ -154,7 +152,7 @@ static const TfTokenVector distortAttrsTable[numModels] = { ## Prim Schemas -In addition to the Camera `schema`, we use other `schemas` for various use cases at Animal Logic. See below for a few more examples, which we use with the "USD Schema Generator" (as outlined [here](https://graphics.pixar.com/usd/docs/api/_usd__page__generating_schemas.html)). +In addition to the Camera `schema`, we use other `schemas` for various use cases at Netflix Animation Studios. See below for a few more examples, which we use with the "USD Schema Generator" (as outlined [here](https://graphics.pixar.com/usd/docs/api/_usd__page__generating_schemas.html)). ```c++ class ALEditFrameRange "ALEditFrameRange" ( @@ -230,7 +228,7 @@ We use a custom `schema` called `ALMayaReference` to reference Maya data. When s ![Shot](../../public/weave.png) -In the Animal Logic pipeline, we emit some procedural geometry straight into the renderer (Glimpse). +In the Netflix Animation Studios pipeline, we emit some procedural geometry straight into the renderer (Glimpse). - Cloth and Fabric ("[Weave](https://dl.acm.org/doi/abs/10.1145/3214745.3214781)") - Hair and Fur ("Alfro") @@ -241,7 +239,7 @@ In the example below, you can see how the **weave** procedural is configured to > Note: We will replace the "relative path" string attribute with USD relationships soon. -[weave.usda](../../public/weave.usda) +[weave.usda](./public/weave.usda) ```python def "weave_gauze" ( @@ -291,7 +289,7 @@ When downloading the `baked_procedurals` additional package, these `primvars` wi ## "Glimpse" Materials and Bindings -[Glimpse](https://www.fxguide.com/fxfeatured/a-glimpse-at-animal-logic/) is the in-house renderer at Animal Logic. +[Glimpse](https://www.fxguide.com/fxfeatured/a-glimpse-at-animal-logic/) is the in-house renderer at Netflix Animation Studios. Layered assignments underpin two important workflows: @@ -303,7 +301,7 @@ With regards to material composition, we currently leverage referencing in two w - To `reference` materials from a centralised "material library" into "look bindings." - To `reference` "subgraphs" (node graphs) of shaders into materials. Our "triplanar projection" setup is an example of this. -[look_binding.usda](../../public/look_binding.usda) +[look_binding.usda](./public/look_binding.usda) ```c++ over "GEO" @@ -413,7 +411,7 @@ Be aware that there is a fairly strict "grammar" in USD, which needs to be adher ### Register Your Kinds (`pluginInfo.json`) -To register custom `kinds` in your pipeline, define them in a `pluginInfo.json`. This is an excerpt of the one we use at Animal Logic: +To register custom `kinds` in your pipeline, define them in a `pluginInfo.json`. This is an excerpt of the one we use at Netflix Animation Studios: ```json { diff --git a/install_optional_packages.py b/install_optional_packages.py new file mode 100755 index 00000000..d7497e39 --- /dev/null +++ b/install_optional_packages.py @@ -0,0 +1,257 @@ +#!/usr/bin/env python3 + +import argparse +from contextlib import contextmanager +import logging +import os +import tempfile +import urllib.request +import urllib.error +from zipfile import ZipFile + + +logger = logging.getLogger(__name__) + +## CONSTANTS +# You can also manually download via `curl -L -O ` +# and provide the path to the zip file. + +TECHVAR_ZIP_URL = 'https://dpel-assets.aswf.io/usd-alab/alab-techvars.v2.2.0.zip' +BAKED_PROCEDURALS_ZIP_URL = 'https://dpel-assets.aswf.io/usd-alab/alab-procedurals.v2.2.0.zip' +TEXTURE_PACK_ZIP_URL = 'https://aswf-dpel-assets.s3.amazonaws.com/usd-alab/alab-textures.v2.2.0.zip' +CAMERAS_ZIP_URL = 'https://dpel-assets.aswf.io/usd-alab/alab-cameras.v2.2.0.zip' + + +## UTILITY FUNCTIONS + + +@contextmanager +def _get_or_download(url, description, zip_file_path=None): + """Utility function to either use provided zip file path or download from URL. + + Args: + url (str): URL to download from if zip_file_path is None or empty string. + description (str): Description of the file being downloaded, for logging. + zip_file_path (str or None): If provided, path to zip file. If empty + string, download from URL. If None, raise exception. + + Returns: + str: Path to zip file, either provided or downloaded. + """ + if zip_file_path: + if not os.path.isfile(zip_file_path): + raise Exception(f'Provided {description} zip file path does not exist: {zip_file_path}') + logger.info(f'Using provided {description} zip file: {zip_file_path}') + yield zip_file_path + else: + downloaded_tmp_zip = _download(url, description) + try: # delete temp file after use, even in exceptions + yield downloaded_tmp_zip + finally: + os.remove(downloaded_tmp_zip) + + + +def _download(url, description): + """Utility function to download a file from a URL to a temporary file. + + Args: + url (str): URL to download from. + description (str): Description of the file being downloaded, for logging. + + Returns: + str: Path to the temporary file containing the downloaded content. + """ + logger.info(f'Downloading {description} from {url}...') + + try: + with urllib.request.urlopen(url) as response: + if response.getcode() != 200: + raise Exception(f'Failed to download {description} from {url}. Status code: {response.getcode()}') + + tmpfile_path = tempfile.NamedTemporaryFile(delete=False).name + with open(tmpfile_path, 'wb') as tmpfile: + tmpfile.write(response.read()) + except urllib.error.URLError as e: + raise Exception(f'Failed to download {description} from {url}: {e}') + + return tmpfile_path + + +def _unzip(zip_file_path, target_folder, zip_file_folder_name): + """Utility function to unzip zip file into ALab folder. + + Args: + zip_file_path (str): Path to the zip file. + target_folder (str): Target folder to unzip into. + zip_file_folder_name (str): Top-level folder name inside the zip file to extract. + """ + + # assert output folder exists + os.makedirs(target_folder, exist_ok=True) + + with ZipFile(zip_file_path, 'r') as zip_file: + for member in zip_file.namelist(): + if (zip_file_folder_name + os.sep) not in member: + continue + + relative_path = member.split(zip_file_folder_name + os.sep, 1)[1] + if relative_path: + target_path = os.path.join(target_folder, relative_path) + + if member.endswith('/'): # a directory + os.makedirs(target_path, exist_ok=True) + else: # a file + os.makedirs(os.path.dirname(target_path), exist_ok=True) + with open(target_path, 'wb') as f: + f.write(zip_file.read(member)) + logger.debug(f'{member} >> {target_path}') + + +def _parse_args(): + """Parse command line arguments. + + Returns: + argparse.Namespace: Parsed arguments. + """ + parser = argparse.ArgumentParser(description='Build script for assembling ALab packages.') + + default_args = { + 'metavar': 'ZIP_FILE', + 'nargs': '?', # allow optional .zip file + 'const': '', # indicate download default from URL + 'default': None, # indicate no action + } + + parser.add_argument( + '--output', '-o', + help='Output folder for assembled package (defaults to working directory)', + default=os.getcwd() + ) + + group = parser.add_argument_group('Install Options', 'Options to install asset packages into ALab repository. Provide a zip file path, or use without argument to download default online package.') + group.add_argument( + '--all', + action='store_true', + help='Install all asset packages. Individual flags can still be overridden to provide .zip files.' + ) + group.add_argument( + '--techvar', + help='Install Techvar assets', + **default_args, + ) + group.add_argument( + '--baked_procedurals', + help='Install baked procedurals', + **default_args, + ) + group.add_argument( + '--texture_pack', + help='Install texture pack', + **default_args, + ) + group.add_argument( + '--cameras', + help='Install camera assets', + **default_args, + ) + + args = parser.parse_args() + logger.debug(f'Parsed arguments: {args}') + + if not os.path.isdir(args.output): + parser.error(f'Output folder does not exist: {args.output}') + + # if --all is set, set all to default (download) + # but let user override individual options with a .zip file + if args.all: + args.techvar = args.techvar or '' + args.baked_procedurals = args.baked_procedurals or '' + args.texture_pack = args.texture_pack or '' + args.cameras = args.cameras or '' + + if not args.all and not any(arg is not None for arg in [args.techvar, args.baked_procedurals, args.texture_pack, args.cameras]): + parser.error( + 'No action requested. ' + 'Add --all to download all packages, or use individual flags: ' + '--techvar, --baked_procedurals, --texture_pack, --cameras' + ) + + return args + + +## MAIN FUNCTIONS + + +def install_techvar(zip_file, output_folder): + logger.info('Installing Techvar assets...') + fragment_folder = os.path.join(output_folder, 'ALab', 'fragment') + _unzip(zip_file, fragment_folder, 'fragment') + logger.info('Techvar assets installed successfully.') + + +def install_baked_procedurals(zip_file, output_folder): + logger.info('Installing baked procedural assets...') + fragment_folder = os.path.join(output_folder, 'ALab', 'baked_procedurals') + _unzip(zip_file, fragment_folder, 'baked_procedurals') + logger.info('Baked procedurals installed successfully.') + + +def install_texture_pack(zip_file, output_folder): + logger.info('Installing texture pack...') + fragment_folder = os.path.join(output_folder, 'ALab', 'fragment') + _unzip(zip_file, fragment_folder, 'fragment') + logger.info('Texture pack installed successfully.') + + +def install_cameras(zip_file, output_folder): + logger.info('Installing camera asset package...') + fragment_folder = os.path.join(output_folder, 'ALab') + _unzip(zip_file, fragment_folder, 'trailer_cameras') + logger.info('Cameras installed successfully.') + + +def install_all(output_folder, techvar=None, baked_procedurals=None, texture_pack=None, cameras=None): + """Main install function to handle all requested packages. + Args: + + output_folder (str): Output folder for the assembled package, + assumed to be a local clone of the ALab GitHub repository. + techvar (str or None): If provided, path to Techvar .zip file. If + empty string, download default Techvar assets. If None, skip installation. + baked_procedurals (str or None): If provided, path to Baked Procedurals + .zip file. If empty string, download default baked procedurals assets. If None, skip installation. + texture_pack (str or None): If provided, path to texture pack .zip file. If + empty string, download default Texture Pack. If None, skip installation. + cameras (str or None): If provided, path to cameras .zip file. If + empty string, download default camera assets. If None, skip installation. + """ + + if techvar is not None: + with _get_or_download(TECHVAR_ZIP_URL, 'Techvar assets', techvar) as zip_file: + install_techvar(zip_file, output_folder) + + if baked_procedurals is not None: + with _get_or_download(BAKED_PROCEDURALS_ZIP_URL, 'baked procedurals', baked_procedurals) as zip_file: + install_baked_procedurals(zip_file, output_folder) + + if texture_pack is not None: + with _get_or_download(TEXTURE_PACK_ZIP_URL, 'texture pack', texture_pack) as zip_file: + install_texture_pack(zip_file, output_folder) + + if cameras is not None: + with _get_or_download(CAMERAS_ZIP_URL, 'cameras', cameras) as zip_file: + install_cameras(zip_file, output_folder) + + +if __name__ == '__main__': + logging.basicConfig(level=logging.INFO) + + args = _parse_args() + install_all( + output_folder=args.output, + techvar=args.techvar, + baked_procedurals=args.baked_procedurals, + texture_pack=args.texture_pack, + cameras=args.cameras + ) \ No newline at end of file