diff --git a/CMakeLists.txt b/CMakeLists.txt index b5cc674..886c0b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,13 @@ if(NOT pxr_FOUND) find_package(pxr REQUIRED) endif() +# Skip hdMoonray if USD is less than 0.25.5 +if(PXR_VERSION VERSION_LESS 2505) + message(STATUS "Skipping hdMoonray build because USD version is less than 0.25.5") + install(CODE " # Empty install action ") + return() +endif() + # This is needed for linking against the USD 0.25.5 libraries # as they depend on OpenGL but don't specify it in # their cmake config. @@ -135,9 +142,4 @@ install(FILES ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}-${PROJECT_VERSION} ) -install( - DIRECTORY testSuite - DESTINATION . - USE_SOURCE_PERMISSIONS -) diff --git a/cmake/HatsTest.cmake b/cmake/HatsTest.cmake index 91d83f0..4dd4bd1 100644 --- a/cmake/HatsTest.cmake +++ b/cmake/HatsTest.cmake @@ -23,9 +23,13 @@ function(add_hats_test test_basename) # test_basename: basename of tests. By convention includes relative folder structure, example: geometry_basis_curves - cmake_parse_arguments(ARG "" "CAMERA" "" ${ARGN}) + set(oneValueArgs CAMERA RENDER_SETTINGS) + cmake_parse_arguments(ARG "" "${oneValueArgs}" "" ${ARGN}) if (DEFINED ARG_CAMERA) - set(camera_opt -camera "${ARG_CAMERA}") + set(camera_opt "cam=${ARG_CAMERA}") + endif() + if (DEFINED ARG_RENDER_SETTINGS) + set(rs_opt "rs=${ARG_RENDER_SETTINGS}") endif() set(input_usd ${CMAKE_CURRENT_SOURCE_DIR}/${test_basename}.usd) @@ -33,11 +37,13 @@ function(add_hats_test test_basename) set(canonical_rdl ${CMAKE_CURRENT_SOURCE_DIR}/${test_basename}.canonical.rdla) set(generated_exr ${CMAKE_CURRENT_BINARY_DIR}/${test_basename}.exr) set(canonical_exr ${CMAKE_CURRENT_BINARY_DIR}/${test_basename}.canonical.exr) - + set(dummy_exr /tmp/${test_basename}_dummy.exr) + set(generate_test_name hats_generate_${test_basename}) + add_test(NAME ${generate_test_name} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - COMMAND hd_usd2rdl -in "${input_usd}" -out "${generated_rdl}" ${camera_opt} + COMMAND python "${CMAKE_SOURCE_DIR}/cmake/generate_rdla.py" "${input_usd}" "${generated_rdl}" ${rs_opt} ${camera_opt} ) set_tests_properties(${generate_test_name} PROPERTIES LABELS "generate" @@ -68,4 +74,12 @@ function(add_hats_test test_basename) LABELS "render" DEPENDS ${generate_test_name} ) + + set(rendercanonical_test_name hats_rendercanonical_${test_basename}) + add_test(NAME ${rendercanonical_test_name} + COMMAND moonray -in "${canonical_rdl}" -out "${canonical_exr}" + ) + set_tests_properties(${rendercanonical_test_name} PROPERTIES + LABELS "rendercanonical" + ) endfunction() diff --git a/cmake/generate_rdla.py b/cmake/generate_rdla.py new file mode 100644 index 0000000..0d9da9a --- /dev/null +++ b/cmake/generate_rdla.py @@ -0,0 +1,57 @@ + +# Script to generate rdla from usd using usdrecord. +# It fixes up elements that vary between runs, like hex ids, to enable stable comparison + +import os +import sys +import re + +if len(sys.argv) < 3: + print("Usage: generate_rdla.py [rs=] [cam=]") + sys.exit(1) +input_path = sys.argv[1] +output_path = sys.argv[2] +tmp_path = "/tmp/generate_tmp.rdla" +if os.path.exists(output_path): + os.remove(output_path) +if os.path.exists(tmp_path): + os.remove(tmp_path) + +camera_arg = "" +rs_arg = "" +for i in range(3, len(sys.argv)): + if sys.argv[i].startswith("cam="): + camera_arg = "-cam " + sys.argv[i].split("=")[1] + elif sys.argv[i].startswith("rs="): + rs_arg = "-rs " + sys.argv[i].split("=")[1] + else: + print("Unknown argument: ", sys.argv[i]) + sys.exit(1) + +os.environ["HDMOONRAY_DISABLE_RENDER"] = "1" +os.environ["HDMOONRAY_RDLA_OUTPUT"] = tmp_path +os.environ["HDMOONRAY_SIMPLIFY_PATHS"] = "1" +os.environ["USDIMAGINGGL_ENGINE_ENABLE_SCENE_INDEX"] = "1" + +cmd = f"usdrecord -r Moonray -c medium --disableCameraLight {camera_arg} {rs_arg} {input_path} /tmp/dummy.exr" +print("Running command: ", cmd) +ret = os.system(cmd) +if ret: + sys.exit(ret) + +if not os.path.exists(tmp_path): + print("Error: tmp file not created: ", tmp_path) + sys.exit(1) + +# replace sequences of 16 hex digits with "H16X" +reps = [ (re.compile(r'_UsdImaging_HdMoonrayRendererPlugin_0x[0-9a-fA-F]{2,16}') , "_UsdImaging_HdMoonrayRendererPlugin_0xID") +] + +with open(tmp_path, "r") as f: + data = f.read() + +for regex, replacement in reps: + data = re.sub(regex, replacement, data) + +with open(output_path, "w") as f: + f.write(data) diff --git a/cmd/CMakeLists.txt b/cmd/CMakeLists.txt index 4192a9d..20c6f37 100644 --- a/cmd/CMakeLists.txt +++ b/cmd/CMakeLists.txt @@ -1,6 +1,4 @@ # Copyright 2023-2024 DreamWorks Animation LLC # SPDX-License-Identifier: Apache-2.0 - -add_subdirectory(hd_cmd) add_subdirectory(usd_mipmap_images) diff --git a/cmd/hd_cmd/CMakeLists.txt b/cmd/hd_cmd/CMakeLists.txt deleted file mode 100644 index 2a72492..0000000 --- a/cmd/hd_cmd/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright 2023-2024 DreamWorks Animation LLC -# SPDX-License-Identifier: Apache-2.0 - -add_subdirectory(hd_render) -add_subdirectory(hd_usd2rdl) diff --git a/cmd/hd_cmd/hd_render/CMakeLists.txt b/cmd/hd_cmd/hd_render/CMakeLists.txt deleted file mode 100644 index 6ac48cb..0000000 --- a/cmd/hd_cmd/hd_render/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright 2023-2024 DreamWorks Animation LLC -# SPDX-License-Identifier: Apache-2.0 - -set(target hd_render) - -add_executable(${target}) - -target_sources(${target} - PRIVATE - FreeCamera.cc - hd_render.cc - OutputFile.cc - RenderOptions.cc - RenderSettings.cc - SceneDelegate.cc -) - -if (NOT IsDarwinPlatform) - set(PlatformSpecificLibs atomic) -endif() - -target_link_libraries(${target} - PRIVATE - SceneRdl2::scene_rdl2 - OpenImageIO::OpenImageIO - JPEG::JPEG - - # pxr libs - gf tf trace vt work # base - cameraUtil hd hdx hf # imaging - sdf usd usdGeom # usd - usdImaging - - TBB::tbb - Python::Python - Boost::${BOOST_PYTHON_COMPONENT_NAME} - ${PlatformSpecificLibs} - ${MKL} -) - -# Set standard compile/link options -HdMoonray_cxx_compile_definitions(${target}) -HdMoonray_cxx_compile_features(${target}) -HdMoonray_cxx_compile_options(${target}) -HdMoonray_link_options(${target}) - -install(TARGETS ${target} - RUNTIME DESTINATION bin) diff --git a/cmd/hd_cmd/hd_render/FreeCamera.cc b/cmd/hd_cmd/hd_render/FreeCamera.cc deleted file mode 100644 index 5ad33ed..0000000 --- a/cmd/hd_cmd/hd_render/FreeCamera.cc +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file FreeCamera.cc - -#include "FreeCamera.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace hd_render { - -FreeCamera::FreeCamera(const pxr::UsdStageRefPtr stage, - float aspectRatio, - pxr::UsdTimeCode timeCode, - const pxr::TfTokenVector &includedPurposes) -{ - // Generate a camera that defines a decent default view of the stage's - // renderable primitives. - // - // This is mostly lifted from pxr/usdImaging/usdAppUtils/frameRecorder.cpp so - // it should closely match the default view in tools such as usdview. - // - // The main difference is that we lock the vertical aperture so the - // render window aspect matches the viewport. - - // Start with a default (50mm) perspective GfCamera. - // Set the vertical aperture based on the viewport aspectRatio (height / width) - mCamera.SetVerticalAperture(mCamera.GetHorizontalAperture() * aspectRatio); - pxr::UsdGeomBBoxCache bboxCache(timeCode, includedPurposes, - /* useExtentsHint = */ true); - pxr::GfBBox3d bbox = bboxCache.ComputeWorldBound(stage->GetPseudoRoot()); - pxr::GfVec3d center = bbox.ComputeCentroid(); - pxr::GfRange3d range = bbox.ComputeAlignedRange(); - pxr::GfVec3d dim = range.GetSize(); - pxr::TfToken upAxis = pxr::UsdGeomGetStageUpAxis(stage); - // Find corner of bbox in the focal plane. - pxr::GfVec2d planeCorner; - if (upAxis == pxr::UsdGeomTokens->y) { - planeCorner = pxr::GfVec2d(dim[0], dim[1]) / 2; - } else { - planeCorner = pxr::GfVec2d(dim[0], dim[2]) / 2; - } - float planeRadius = sqrt(pxr::GfDot(planeCorner, planeCorner)); - // Compute distance to focal plane. - float halfFov = mCamera.GetFieldOfView(pxr::GfCamera::FOVHorizontal) / 2.0; - float distance = planeRadius / tan(pxr::GfDegreesToRadians(halfFov)); - // Back up to frame the front face of the bbox. - if (upAxis == pxr::UsdGeomTokens->y) { - distance += dim[2] / 2; - } else { - distance += dim[1] / 2; - } - // Compute local-to-world transform for camera filmback. - pxr::GfMatrix4d xf; - if (upAxis == pxr::UsdGeomTokens->y) { - xf.SetTranslate(center + pxr::GfVec3d(0, 0, distance)); - } else { - xf.SetRotate(pxr::GfRotation(pxr::GfVec3d(1, 0, 0), 90)); - xf.SetTranslateOnly(center + pxr::GfVec3d(0, -distance, 0)); - } - mCamera.SetTransform(xf); -} - -pxr::VtValue -FreeCamera::getParam(pxr::TfToken const& key) const -{ -#if PXR_VERSION >= 2108 - if (key == pxr::HdCameraTokens->projection) { - if (mCamera.GetProjection() == pxr::GfCamera::Projection::Orthographic) { - return pxr::VtValue(pxr::HdCamera::Orthographic); - } - return pxr::VtValue(pxr::HdCamera::Perspective); - } else if (key == pxr::HdCameraTokens->horizontalAperture) { - // Several camera parameters are specified in tenths of a - // world unit (e.g., focalLength = 50mm) - // Hydra's camera expects these parameters to be expressed in world - // units. (e.g., if cm is the world unit, focalLength = 5cm) - return pxr::VtValue(mCamera.GetHorizontalAperture() * float(pxr::GfCamera::APERTURE_UNIT)); - } else if (key == pxr::HdCameraTokens->verticalAperture) { - return pxr::VtValue(mCamera.GetVerticalAperture() * float(pxr::GfCamera::APERTURE_UNIT)); - } else if (key == pxr::HdCameraTokens->horizontalApertureOffset) { - return pxr::VtValue(mCamera.GetHorizontalApertureOffset() * float(pxr::GfCamera::APERTURE_UNIT)); - } else if (key == pxr::HdCameraTokens->verticalApertureOffset) { - return pxr::VtValue(mCamera.GetVerticalApertureOffset() * float(pxr::GfCamera::APERTURE_UNIT)); - } else if (key == pxr::HdCameraTokens->focalLength) { - return pxr::VtValue(mCamera.GetFocalLength() * float(pxr::GfCamera::FOCAL_LENGTH_UNIT)); - } else if (key == pxr::HdCameraTokens->clippingRange) { - return pxr::VtValue(mCamera.GetClippingRange()); - } else if (key == pxr::HdCameraTokens->clipPlanes) { - // GfCamera clip planes are vector but Hydra - // expects vector - const std::vector& fPlanes = mCamera.GetClippingPlanes(); - std::vector dPlanes; - dPlanes.reserve(fPlanes.size()); - dPlanes.assign(fPlanes.cbegin(), fPlanes.cend()); - return pxr::VtValue(dPlanes); - } else if (key == pxr::HdCameraTokens->fStop) { - return pxr::VtValue(mCamera.GetFStop()); - } else if (key == pxr::HdCameraTokens->focusDistance) { - return pxr::VtValue((mCamera.GetFocusDistance())); - } else if (key == pxr::HdCameraTokens->shutterOpen) { - return pxr::VtValue(mShutterOpen); - } else if (key == pxr::HdCameraTokens->shutterClose) { - return pxr::VtValue(mShutterClose); - } else if (key == pxr::HdCameraTokens->exposure) { - return pxr::VtValue(mExposure); - } else -#endif - if (key == pxr::TfToken("worldToViewMatrix")) { - // only used pre-0.22.3 - return pxr::VtValue(mCamera.GetFrustum().ComputeViewMatrix()); - } else if (key == pxr::TfToken("projectionMatrix")) { - // only used pre-0.22.3 - return pxr::VtValue(mCamera.GetFrustum().ComputeProjectionMatrix()); - } else if (key == pxr::HdCameraTokens->windowPolicy) { - return pxr::VtValue(pxr::CameraUtilFit); - } - - return pxr::VtValue(); -} -pxr::GfMatrix4d -FreeCamera::getTransform() const -{ - return mCamera.GetFrustum().ComputeViewMatrix().GetInverse(); -} - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_render/FreeCamera.h b/cmd/hd_cmd/hd_render/FreeCamera.h deleted file mode 100644 index b12c5f6..0000000 --- a/cmd/hd_cmd/hd_render/FreeCamera.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file FreeCamera.h - -#pragma once - -#include -#include -#include -#include - -namespace hd_render { - -class FreeCamera -{ - public: - FreeCamera() : mCamera() {} - FreeCamera(const pxr::UsdStageRefPtr stage, - float aspectRatio, - pxr::UsdTimeCode timeCode, - const pxr::TfTokenVector &includedPurposes); - - pxr::VtValue getParam(pxr::TfToken const& key) const; - pxr::GfMatrix4d getTransform() const; - - const pxr::GfCamera& camera() const { return mCamera; } - private: - pxr::GfCamera mCamera; - double mShutterOpen = 0; - double mShutterClose = 0; - float mExposure = 0; -}; - - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_render/MapGuard.h b/cmd/hd_cmd/hd_render/MapGuard.h deleted file mode 100644 index 3347737..0000000 --- a/cmd/hd_cmd/hd_render/MapGuard.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file MapGuard.h - -#pragma once - -#include - -namespace hd_render { - -// RAII proctection for render buffer mapping/unmapping -// Upon construction, the render buffer is mapped and pixels -// are made available. Upon deletion, the render buffer is -// unmapped. -class MapGuard -{ -public: - MapGuard(pxr::HdRenderBuffer *renderBuffer): - mRenderBuffer(renderBuffer) - { - mPixels = mRenderBuffer->Map(); - } - - ~MapGuard() - { - mRenderBuffer->Unmap(); - } - - MapGuard(const MapGuard &) = delete; - MapGuard &operator=(const MapGuard &) = delete; - - void *getPixels() const { return mPixels; } - -private: - void *mPixels; - pxr::HdRenderBuffer *mRenderBuffer; -}; - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_render/OutputFile.cc b/cmd/hd_cmd/hd_render/OutputFile.cc deleted file mode 100644 index 8f366cf..0000000 --- a/cmd/hd_cmd/hd_render/OutputFile.cc +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file OutputFile.cc - -#include "OutputFile.h" - -#include "MapGuard.h" - -#include -#include -#include - -#include -#include - -//#define DEBUG_MSG - -namespace hd_render { - -OutputFile::OutputFile(pxr::HdRenderBuffer *renderBuffer): - mRenderBuffer(renderBuffer) -{ -} - -int -OutputFile::write(const std::string &filename) const -{ -#ifdef DEBUG_MSG - std::cerr << ">> OutputFile.cc write() start\n"; -#endif // end DEBUG_MSG - - mRenderBuffer->Resolve(); - MapGuard mapGuard(mRenderBuffer); - void *pixelData = mapGuard.getPixels(); - const unsigned int width = mRenderBuffer->GetWidth(); - const unsigned int height = mRenderBuffer->GetHeight(); - const pxr::HdFormat format = mRenderBuffer->GetFormat(); - - // TODO: support other formats - int numChannels; - OIIO::TypeDesc typeDesc; - int sizeOfPixel; // in bytes - - switch (format) { - case pxr::HdFormatFloat32: - numChannels = 1; - typeDesc = OIIO::TypeDesc::FLOAT; - sizeOfPixel = numChannels * sizeof(float); - break; - case pxr::HdFormatFloat32Vec2: - numChannels = 2; - typeDesc = OIIO::TypeDesc::FLOAT; - sizeOfPixel = numChannels * sizeof(float); - break; - case pxr::HdFormatFloat32Vec3: - numChannels = 3; - typeDesc = OIIO::TypeDesc::FLOAT; - sizeOfPixel = numChannels * sizeof(float); - break; - case pxr::HdFormatFloat32Vec4: - numChannels = 4; - typeDesc = OIIO::TypeDesc::FLOAT; - sizeOfPixel = numChannels * sizeof(float); - break; - case pxr::HdFormatInt32: - // OpenEXR doesn't support signed 32 bit int output channels, and - // openimageio will try to store the result using 16-bit half, - // which is probably not what we want. So we'll output as - // unsigned 32 bit int and hope for the best. - numChannels = 1; - typeDesc = OIIO::TypeDesc::UINT32; - sizeOfPixel = numChannels * sizeof(unsigned int); - break; - case pxr::HdFormatUNorm8Vec4: - numChannels = 4; - typeDesc = OIIO::TypeDesc::UINT8; - sizeOfPixel = numChannels; - break; - default: - std::cerr << "Don't know how to write format\t:" << format << '\n'; - return -1; - }; - - void *buf = const_cast(pixelData); - - std::unique_ptr out(OIIO::ImageOutput::create(filename.c_str())); - if (!out) { - return -1; - } - - // oiio is top down - we want bottom up. so a flip is needed. - OIIO::ImageSpec srcSpec(width, height, numChannels, typeDesc); - OIIO::ImageBuf srcBuffer(filename, srcSpec, buf); - OIIO::ImageBuf flippedBuffer(filename, srcSpec); - OIIO::ImageBufAlgo::flip(flippedBuffer, srcBuffer); - OIIO::ImageSpec destSpec(srcSpec); - OIIO::ImageBuf destBuffer(filename, destSpec); - std::vector buf2(width * height * sizeOfPixel); - flippedBuffer.get_pixels(OIIO::get_roi(srcSpec), typeDesc, &buf2[0]); - destBuffer.set_pixels(OIIO::get_roi(destSpec), typeDesc, &buf2[0]); - - if (!out->open(filename.c_str(), destSpec)) { - return -1; - } - destBuffer.write(out.get()); - out->close(); - - return 0; -} - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_render/OutputFile.h b/cmd/hd_cmd/hd_render/OutputFile.h deleted file mode 100644 index cc403d1..0000000 --- a/cmd/hd_cmd/hd_render/OutputFile.h +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file OutputFile.h - -#pragma once - -#include - -#include - -namespace hd_render { - -// Output pixel data using openimageio -class OutputFile -{ -public: - OutputFile(pxr::HdRenderBuffer *renderBuffer); - int write(const std::string &filename) const; - -private: - pxr::HdRenderBuffer *mRenderBuffer; -}; - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_render/README.md b/cmd/hd_cmd/hd_render/README.md deleted file mode 100644 index d7bad27..0000000 --- a/cmd/hd_cmd/hd_render/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# hd_render -Renders a usd scene using hydra. - -# Usage -## Setup your environment to include hdMoonray and any other renderers you may want to use (Embree in this case) - rez2 - rez-env hdMoonray usd_embree_plugin - -## To see all options - hd_render -h - -## To render a usd file using Moonray - hd_render -in file.usd -out file.exr - -## To render a usd file using an alternate renderer - hd_render -renderer Embree -in file.usd -out file.exr - -## To see a list of available renderers - hd_render -renderer - -## To set a renderer setting - hd_render -renderer Embree -set "Samples To Convergence" 16 -in file.usd -out file.exr - -## To see a list of all render settings for a particular renderer - hd_render -renderer Embree -set - -## To render a particular aov (normal in this example) - hd_render -aov normal -in file.usd -out file.exr diff --git a/cmd/hd_cmd/hd_render/RenderOptions.cc b/cmd/hd_cmd/hd_render/RenderOptions.cc deleted file mode 100644 index e6dd030..0000000 --- a/cmd/hd_cmd/hd_render/RenderOptions.cc +++ /dev/null @@ -1,305 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file RenderOptions.cc - -#include "RenderOptions.h" - -#include -#include - -#include -#include -#include - -namespace hd_render { - -// default values -const bool RenderOptions::sHelpRequested = false; - -const char * const RenderOptions::sRenderer = "Moonray"; - -const char * const RenderOptions::sInputSceneFile = "scene.usd"; -const char * const RenderOptions::sOutputExrFile = "scene.exr"; - -const char * const RenderOptions::sCamera = ""; - -const char * const RenderOptions::sSamplingCamera = ""; - -const unsigned int RenderOptions::sWidth = 1920; -const unsigned int RenderOptions::sHeight = 1080; -const float RenderOptions::sRes = 1.0f; -const unsigned int RenderOptions::sRefineLevel = 1; // "Complexity/Medium" -const TimeType RenderOptions::sTimeType = TimeType::Earliest; - -const char * const RenderOptions::sAov = "color"; - -const bool RenderOptions::sPrintRenderSettingsRequested = false; - -const char * const RenderOptions::sDeltaInputSceneFile = ""; -const char * const RenderOptions::sDeltaOutputExrFile = ""; - -const bool RenderOptions::sUseChromeTraceFormat = false; - -const bool RenderOptions::sEnableTiming = false; - -RenderOptions::RenderOptions(int argc, char *argv[]): - // initialize defaults - mHelpRequested(sHelpRequested), - mRenderer(sRenderer), - mDisableRender(false), - mInputSceneFile(sInputSceneFile), - mOutputExrFile(sOutputExrFile), - mCamera(sCamera), - mWidth(sWidth), - mHeight(sHeight), - mRes(sRes), - mRefineLevel(sRefineLevel), - mTimeType(sTimeType), - mAov(sAov), - mPrintRenderSettingsRequested(sPrintRenderSettingsRequested), - mDeltaInputSceneFile(sDeltaInputSceneFile), - mDeltaOutputExrFile(sDeltaOutputExrFile), - mUseChromeTraceFormat(sUseChromeTraceFormat), - mEnableTiming(sEnableTiming), - mAllFlagsValid(true) -{ - using scene_rdl2::util::Args; - - Args args(argc, argv); - Args::StringArray values; - std::vector validFlags; - - validFlags.push_back("-h"); - validFlags.push_back("-help"); - if (argc <= 1 || - args.getFlagValues("-h", 0, values) >= 0 || - args.getFlagValues("-help", 0, values) >= 0) { - mHelpRequested = true; - } - - // required flags -in and -out - validFlags.push_back("-in"); - if (args.getFlagValues("-in", 1, values) >= 0) { - mInputSceneFile = values[0]; - } else { - mMissingRequiredFlags.push_back("-in"); - } - - // optional flags - validFlags.push_back("-aov"); - if (args.getFlagValues("-aov", 1, values) >= 0) { - mAov = values[0]; - } - - validFlags.push_back("-camera"); - if (args.getFlagValues("-camera", 1, values) >= 0) { - mCamera = values[0]; - } - - validFlags.push_back("-delta_in"); - if (args.getFlagValues("-delta_in", 1, values) >= 0) { - mDeltaInputSceneFile = values[0]; - } - - validFlags.push_back("-delta_out"); - if (args.getFlagValues("-delta_out", 1, values) >= 0) { - mDeltaOutputExrFile = values[0]; - } - - validFlags.push_back("-delta_set"); - int foundAtIndex = args.getFlagValues("-delta_set", 2, values); - while (foundAtIndex >= 0) { - mDeltaRenderSettings.push_back(RenderSetting(values[0], values[1])); - foundAtIndex = args.getFlagValues("-delta_set", 2, values, foundAtIndex + 1); - } - - validFlags.push_back("-renderer"); - if (args.getFlagValues("-renderer", -1, values) >= 0) { - if (values.size() == 1) { - mRenderer = values[0]; - } else { - mRenderer = ""; // will cause a list of renderers to be printed - } - } - - validFlags.push_back("-translate-only"); - if (args.getFlagValues("-translate-only",-1,values) >= 0) { - mDisableRender = true; - if (values.size() == 1) { - mRdlOutput = values[0]; - } - } - - validFlags.push_back("-out"); - if (args.getFlagValues("-out", 1, values) >= 0) { - mOutputExrFile = values[0]; - } else if (!mDisableRender) { - mMissingRequiredFlags.push_back("-out"); - } - - validFlags.push_back("-purpose"); - foundAtIndex = args.getFlagValues("-purpose", 1, values); - while (foundAtIndex >= 0) { - // we are responsible for removing duplicates - if (std::find(mPurposes.begin(), mPurposes.end(), values[0]) == mPurposes.end()) { - mPurposes.push_back(values[0]); - } - foundAtIndex = args.getFlagValues("-purpose", 1, values, foundAtIndex + 1); - } - - validFlags.push_back("-res"); - if (args.getFlagValues("-res", 1, values) >= 0) { - mRes = atof(values[0].c_str()); - } - - validFlags.push_back("-refine-level"); - if (args.getFlagValues("-refine-level", 1, values) >= 0) { - mRefineLevel = std::max(0,std::min(8,atoi(values[0].c_str()))); - } - - validFlags.push_back("-time"); - if (args.getFlagValues("-time",1,values) >= 0) { - mTimeType = TimeType::DoubleValue; - mTime = atof(values[0].c_str()); - } - - validFlags.push_back("-set"); - foundAtIndex = args.getFlagValues("-set", -1, values); - while (foundAtIndex >= 0) { - // If we have 2 values, assume it is a key/value pair. - // Anything else interpret as a request to print the list - // of available settings and exit. - if (values.size() == 2) { - mRenderSettings.push_back(RenderSetting(values[0], values[1])); - } else { - mPrintRenderSettingsRequested = true; - } - foundAtIndex = args.getFlagValues("-set", -1, values, foundAtIndex + 1); - } - - validFlags.push_back("-size"); - if (args.getFlagValues("-size", 2, values) >= 0) { - mWidth = atoi(values[0].c_str()); - mHeight = atoi(values[1].c_str()); - } - - validFlags.push_back("-trace"); - foundAtIndex = args.getFlagValues("-trace", -1, values); - while (foundAtIndex >= 0) { - if (values.size() == 1) { - mTraceFiles[values[0]] = "/tmp/trace_"+values[0]; - } else if (values.size() == 2) { - mTraceFiles[values[0]] = values[1]; - } - foundAtIndex = args.getFlagValues("-trace", -1, values,foundAtIndex+1); - } - - validFlags.push_back("-chrome_trace_format"); - if (args.getFlagValues("-chrome_trace_format", 0, values) >= 0) { - mUseChromeTraceFormat = true; - } - - validFlags.push_back("-timing"); - if (args.getFlagValues("-timing",-1,values)) { - mEnableTiming = true; - if (values.size() > 0) { - mTimingFile = values[0]; - } - } - - mAllFlagsValid = args.allFlagsValid(validFlags); -} - -std::string -RenderOptions::usage(const char *argv0) const -{ - using scene_rdl2::util::buildString; - - return buildString("Usage: ", argv0, " [Flags]\n" - "-h|-help\n" - " Print this message.\n" - "\n" - "Required:\n" - "-in scene.usd{a}\n" - " Input USD scene data.\n" - "\n" - "-out scene.exr\n" - " Output image name and type. Required unless\n" - " --translate-only is specified.\n" - "\n" - "Optional:\n" - "-aov color\n" - " Name or aov (color, depth, normal, etc...)\n" - "\n" - "-camera \n" - " Name of the rendering camera. If not specified, a default\n" - " camera is created that frames the scene geometry.\n" - "\n" - "-sampling_camera \n" - " Use this camera's shutter:open and shutter:close to\n" - " define the motion blur sample steps\n" - "\n" - "-renderer Moonray\n" - " Which hydra render delegate plugin to use.\n" - " Use '-renderer' to see a list of available renderers.\n" - "\n" - "-delta_in .usd\n" - " After finishing the main render, apply the contents of\n" - " .usd to the scene and re-render the result into\n" - " the file specified with the -delta_out option.\n" - "\n" - "-delta_out .exr\n" - " Specifies the output delta file.\n" - "\n" - "-delta_set \n" - " After finishing the main render, apply this render setting\n" - " and re-render the result into the file specified with the -delta_out\n" - " option. This option can appear multiple times.\n" - "\n" - "-purpose \n" - " Specifies a UsdGeomImageable purpose to include in the render.\n" - " can be one of 'render', 'proxy', or 'guide'. This option\n" - " can appear multiple times in order to select multiple purposes.\n" - " The 'default' purpose is implicity set.\n" - "\n" - "-refine-level \n" - " Set geometry refine level fallback to N. Tessellation rate is\n" - " 2^N. 0 disables subdivision, 1 is the default.\n" - "\n" - "-res 1.0\n" - " Resolution divisor for frame dimensions.\n" - "\n" - "-set .\n" - " Sets the render setting to . This\n" - " option can appear multiple times.\n" - " Use '-set' to see a list of available settings.\n" - "\n" - "-size 1920 1080\n" - " Canonical frame width and height (in pixels).\n" - "\n" - "-time \n" - " Set timecode (i.e. frame) to render at. If not set, uses the special\n" - " value 'Earliest' (see pxr::UsdTimeCode)\n" - "\n" - "-timing []\n" - " Write elapsed time in seconds for each step to the given file in simple\n" - " text format. If no file is specified, write timing to stdout\n" - "\n" - "-trace []\n" - " Use the Pixar trace library to trace function calls for the given\n" - " step. Supported step names are: load_plugin, open_stage, populate, render,\n" - " open_delta_stage and delta_render. Writes log to the specified file, or to\n" - " /tmp/trace_ if no file is specified. Can appear multiple times\n" - "\n" - "-translate-only []\n" - " Translate the scene to RDL, but do not render it. is an (optional)\n" - " RDL file to write the scene to. If has a .rdla or .rdlb extension,\n" - " the corresponding format is used. Otherwise the output is split between\n" - " .rdla and .rdlb files, with large vector attributes written to .rdlb.\n" - "\n" - ); -} - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_render/RenderOptions.h b/cmd/hd_cmd/hd_render/RenderOptions.h deleted file mode 100644 index e0a7b15..0000000 --- a/cmd/hd_cmd/hd_render/RenderOptions.h +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file RenderOptions.h - -#pragma once - -#include -#include -#include -#include - -namespace hd_render { - -enum class TimeType -{ - // ways that UsdTimeCode can specify time - Earliest, Default, DoubleValue -}; - -// RenderOptions: command line parsing, default values -class RenderOptions -{ -public: - typedef std::pair RenderSetting; - - // Construct render options from command line. Check for user - // input errors with the allFlagsValid method. - RenderOptions(int argc, char *argv[]); - - // Was help requested? - bool helpRequested() const { return mHelpRequested; } - - // Were all input flags valid? - bool allFlagsValid() const { return mAllFlagsValid; } - - // Were we mising required flags? - const std::vector &getMissingRequiredFlags() const { return mMissingRequiredFlags; } - - // Return a formatted usage message suitable for printing on - // stderr or stdout - std::string usage(const char *argv0) const; - - const std::string &getRenderer() const { return mRenderer; } - - bool getDisableRender() const { return mDisableRender; } - const std::string &getRdlOutput() const { return mRdlOutput; } - - const std::string &getInputSceneFile() const { return mInputSceneFile; } - const std::string getOutputExrFile() const { return mOutputExrFile; } - - const std::string getCamera() const { return mCamera; } - - - unsigned int getWidth() const { return mWidth; } - unsigned int getHeight() const { return mHeight; } - float getRes() const { return mRes; } - - unsigned int getRefineLevel() const { return mRefineLevel; } - - TimeType getTimeType() const { return mTimeType; } - double getTime() const { return mTime; } - - std::string getAov() const { return mAov; } - - bool getPrintRenderSettingsRequested() const { return mPrintRenderSettingsRequested; } - const std::vector &getRenderSettings() const { return mRenderSettings; } - - std::string getDeltaInputSceneFile() const { return mDeltaInputSceneFile; } - std::string getDeltaOutputExrFile() const { return mDeltaOutputExrFile; } - const std::vector &getDeltaRenderSettings() const { return mDeltaRenderSettings; } - - // This is the hydra "purpose" it can be one or more of render, proxy, and guide - const std::vector &getPurposes() const { return mPurposes; } - - bool hasTraceOpt(const std::string& opt) const { return mTraceFiles.count(opt) > 0; } - const std::string& getTraceFile(const std::string& opt) const { return mTraceFiles.at(opt); } - - bool useChromeTraceFormat() const { return mUseChromeTraceFormat; } - - bool isTimingEnabled() const { return mEnableTiming; } - std::string getTimingFile() const { return mTimingFile; } - -private: - // default options - static const bool sHelpRequested; - - static const char * const sRenderer; - - static const char * const sInputSceneFile; - static const char * const sOutputExrFile; - - static const char * const sCamera; - - static const char * const sSamplingCamera; - - static const unsigned int sWidth; - static const unsigned int sHeight; - static const float sRes; - static const unsigned int sRefineLevel; - - static const TimeType sTimeType; - - static const char * const sAov; - - static const bool sPrintRenderSettingsRequested; - - static const char * const sDeltaInputSceneFile; - static const char * const sDeltaOutputExrFile; - - static const bool sUseChromeTraceFormat; - - static const bool sEnableTiming; - - // parsed results - bool mHelpRequested; - - std::string mRenderer; - - bool mDisableRender; - std::string mRdlOutput; - - std::string mInputSceneFile; - std::string mOutputExrFile; - - std::string mCamera; - - unsigned int mWidth; - unsigned int mHeight; - float mRes; - unsigned int mRefineLevel; - - TimeType mTimeType; - double mTime; // interesting if mTimeType = DoubleValue - - std::string mAov; - - std::vector mRenderSettings; - bool mPrintRenderSettingsRequested; - - std::string mDeltaInputSceneFile; - std::string mDeltaOutputExrFile; - std::vector mDeltaRenderSettings; - - std::vector mPurposes; - - std::map mTraceFiles; - bool mUseChromeTraceFormat; - - bool mEnableTiming; - std::string mTimingFile; - - // Indicates a user input error - bool mAllFlagsValid; - std::vector mMissingRequiredFlags; -}; - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_render/RenderSettings.cc b/cmd/hd_cmd/hd_render/RenderSettings.cc deleted file mode 100644 index 34c05ed..0000000 --- a/cmd/hd_cmd/hd_render/RenderSettings.cc +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file RenderSettings.cc - -#include "RenderSettings.h" - -#include -#include - -namespace hd_render { - -RenderSettings::RenderSettings(pxr::HdRenderDelegate *renderDelegate): - mRenderDelegate(renderDelegate) -{ - mRenderSettings = mRenderDelegate->GetRenderSettingDescriptors(); -} - -int -RenderSettings::setRenderSetting(const std::string &key, const std::string &value) -{ - // Probably should figure out the data type from SceneVariable Attribute, but - // this version uses the text to guess at the type. - pxr::VtValue v; - char* endptr = nullptr; - if (value.empty()) - return -1; - else if (value.find('.') != value.npos) - v = strtof(value.c_str(), &endptr); - else if (not strcasecmp(value.c_str(), "false")) - v = false; - else if (not strcasecmp(value.c_str(), "true")) - v = true; - else - v = int(strtol(value.c_str(), &endptr, 0)); - - if (endptr && *endptr) v = value; // text after the number - - if (!v.IsEmpty()) { - mRenderDelegate->SetRenderSetting(pxr::TfToken(key), v); - return 0; - } - - return -1; // probably hit a type we don't know how to parse -} - -std::string -RenderSettings::printAvailableSettings() const -{ - std::ostringstream ostr; - for (const pxr::HdRenderSettingDescriptor &desc : mRenderSettings) { - ostr << '\t' << "\"" << desc.key << "\" [default = " - << desc.defaultValue << "] (type = " - << desc.defaultValue.GetType() << ")\n"; - } - ostr << "\t\"sceneVariable:xxxx\" Use 'rdl2_print SceneVariables' for a list.\n"; - return ostr.str(); -} - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_render/RenderSettings.h b/cmd/hd_cmd/hd_render/RenderSettings.h deleted file mode 100644 index e383f8d..0000000 --- a/cmd/hd_cmd/hd_render/RenderSettings.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file RenderSettings.h - -#pragma once - -#include - -#include - -namespace hd_render { - -class RenderSettings -{ -public: - explicit RenderSettings(pxr::HdRenderDelegate *renderDelegate); - int setRenderSetting(const std::string &key, const std::string &value); - std::string printAvailableSettings() const; - -private: - pxr::HdRenderDelegate *mRenderDelegate; - pxr::HdRenderSettingDescriptorList mRenderSettings; -}; - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_render/SConscript b/cmd/hd_cmd/hd_render/SConscript deleted file mode 100644 index 4c2fd9e..0000000 --- a/cmd/hd_cmd/hd_render/SConscript +++ /dev/null @@ -1,16 +0,0 @@ -Import('env') - -env.DWAUseComponents([ - 'mkl', - 'OpenImageIO', - 'usd_imaging', - 'scene_rdl2', - 'tbb' -]) - -prog = env.DWAProgram( - 'hd_render', - env.DWAGlob('*.cc') -) - -env.DWAInstallBin(prog) diff --git a/cmd/hd_cmd/hd_render/SceneDelegate.cc b/cmd/hd_cmd/hd_render/SceneDelegate.cc deleted file mode 100644 index 70b2c54..0000000 --- a/cmd/hd_cmd/hd_render/SceneDelegate.cc +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file SceneDelegate.cc - -#include "SceneDelegate.h" - -#include -#include -#include -#include -#include -#include - -namespace hd_render { - -SceneDelegate::SceneDelegate(pxr::HdRenderIndex *parentIndex, const pxr::SdfPath &delegateId): - pxr::HdSceneDelegate(parentIndex, delegateId) -{ -} - -void -SceneDelegate::populate(const FreeCamera &freeCam, unsigned int width, unsigned int height, - const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc) -{ - createFreeCam(freeCam); - createRenderBuffer(width, height, aovDesc); - createTask(rprimCollection, purposes, aov, aovDesc, mFreeCamId); -} - - -void -SceneDelegate::populate(const pxr::SdfPath &cameraId, unsigned int width, unsigned int height, - const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc) -{ - createRenderBuffer(width, height, aovDesc); - createTask(rprimCollection, purposes, aov, aovDesc, cameraId); -} - -void -SceneDelegate::createFreeCam(const FreeCamera& freeCam) -{ - mFreeCamId = GetDelegateID().AppendChild(pxr::TfToken("free_cam")); - GetRenderIndex().InsertSprim(pxr::HdPrimTypeTokens->camera, this, mFreeCamId); - mFreeCam = freeCam; - GetRenderIndex().GetChangeTracker().MarkSprimDirty(mFreeCamId, pxr::HdChangeTracker::AllDirty); -} - -void -SceneDelegate::createRenderBuffer(unsigned int width, unsigned int height, - const pxr::HdAovDescriptor &aovDesc) -{ - mRenderBufferId = GetDelegateID().AppendChild(pxr::TfToken("render_buffer")); - GetRenderIndex().InsertBprim(pxr::HdPrimTypeTokens->renderBuffer, this, mRenderBufferId); - mRenderBufferDesc = { pxr::GfVec3i(width, height, 1), aovDesc.format, aovDesc.multiSampled }; - GetRenderIndex().GetChangeTracker().MarkBprimDirty(mRenderBufferId, pxr::HdChangeTracker::AllDirty); -} - -void -SceneDelegate::createTask(const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc, const pxr::SdfPath &cameraId) -{ - MNRY_ASSERT_REQUIRE(!mRenderBufferId.IsEmpty()); // call createRenderBuffer() before this method - - mTaskId = GetDelegateID().AppendChild(pxr::TfToken("render_task")); - GetRenderIndex().InsertTask(this, mTaskId); - - // caller should alredy have checked this - MNRY_ASSERT_REQUIRE(mRenderBufferDesc.format != pxr::HdFormatInvalid); - pxr::HdRenderPassAovBinding aovBinding; - aovBinding.renderBufferId = mRenderBufferId; - aovBinding.aovName = aov; - aovBinding.clearValue = aovDesc.clearValue; - pxr::HdxRenderTaskParams params; - params.aovBindings.push_back(aovBinding); - params.camera = cameraId; -#if PXR_VERSION >= 2102 - params.framing = pxr::CameraUtilFraming( - pxr::GfRect2i(pxr::GfVec2i(0,0), mRenderBufferDesc.dimensions[0], mRenderBufferDesc.dimensions[1])); -#else - params.viewport = pxr::GfVec4f(0, 0, mRenderBufferDesc.dimensions[0], mRenderBufferDesc.dimensions[1]); -#endif - mTaskParams[pxr::HdTokens->params] = pxr::VtValue(params); - GetRenderIndex().GetChangeTracker().MarkTaskDirty(mTaskId, pxr::HdChangeTracker::DirtyParams); - mTaskParams[pxr::HdTokens->collection] = pxr::VtValue(rprimCollection); - GetRenderIndex().GetChangeTracker().MarkTaskDirty(mTaskId, pxr::HdChangeTracker::DirtyCollection); - - // create the hydra render tags from the included purposes - // I may not fully understand how this is supposed to work. If we have only - // the default_ purpose, then leave the render tags empty. Otherwise, we - // should add the geometry tag and any tag that corresponds to render, guide, or proxy. - // I'm not sure why we need to convert from UsdGeom purpose tags to hydra purpose tags - mTaskRenderTags.clear(); - MNRY_ASSERT(purposes.size() >= 1 && purposes[0] == pxr::UsdGeomTokens->default_); - if (purposes.size() > 1) { - mTaskRenderTags.push_back(pxr::HdRenderTagTokens->geometry); - for (const pxr::TfToken &p : purposes) { - if (p == pxr::UsdGeomTokens->render) { - mTaskRenderTags.push_back(pxr::HdRenderTagTokens->render); - } else if (p == pxr::UsdGeomTokens->guide) { - mTaskRenderTags.push_back(pxr::HdRenderTagTokens->guide); - } else if (p == pxr::UsdGeomTokens->proxy) { - mTaskRenderTags.push_back(pxr::HdRenderTagTokens->proxy); - } - } - } -} - -pxr::VtValue -SceneDelegate::Get(const pxr::SdfPath &id, const pxr::TfToken &key) -{ - if (id == mTaskId) { - if (mTaskParams.find(key) != mTaskParams.end()) { - return mTaskParams[key]; - } - } - return GetCameraParamValue(id,key); - -} - -pxr::VtValue -SceneDelegate::GetCameraParamValue(const pxr::SdfPath &id, const pxr::TfToken &key) -{ - if (id == mFreeCamId) { - - pxr::VtValue val = mFreeCam.getParam(key); - return val; - } - - return pxr::VtValue(); -} - -pxr::GfMatrix4d -SceneDelegate::GetTransform(pxr::SdfPath const & id) -{ - if (id == mFreeCamId) { - // this is used to get the view inverse matrix in USD 22.3 on - return mFreeCam.getTransform(); - } - return pxr::GfMatrix4d(); -} - -pxr::HdRenderBufferDescriptor -SceneDelegate::GetRenderBufferDescriptor(const pxr::SdfPath &id) -{ - if (id == mRenderBufferId) { - return mRenderBufferDesc; - } - return pxr::HdRenderBufferDescriptor(); -} - -pxr::TfTokenVector -SceneDelegate::GetTaskRenderTags(const pxr::SdfPath &taskId) -{ - if (taskId == mTaskId) { - return mTaskRenderTags; - } - - // maybe the base class knows? - return pxr::HdSceneDelegate::GetTaskRenderTags(taskId); -} - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_render/SceneDelegate.h b/cmd/hd_cmd/hd_render/SceneDelegate.h deleted file mode 100644 index deaf2a3..0000000 --- a/cmd/hd_cmd/hd_render/SceneDelegate.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file SceneDelegate.h - -#pragma once - -#include "FreeCamera.h" -#include -namespace hd_render { - -// A scene delegate class that manages application -// specific scene data such as render tasks, free cameras, and -// render buffers -class SceneDelegate : public pxr::HdSceneDelegate -{ -public: - SceneDelegate(pxr::HdRenderIndex *parentIndex, const pxr::SdfPath &delegateId); - - // Create a scene with a task that renders rprimCollection from the camera - // into a width x height viewport - void populate(const FreeCamera &camera, unsigned int width, unsigned int height, - const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc); - - // Create a scene with a task that renders rprimCollection from cameraId - // into a width x height viewport. The caller is responsible for ensuring - // that cameraId references a valid camera. - void populate(const pxr::SdfPath &cameraId, unsigned int width, unsigned int height, - const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc); - - const pxr::SdfPath &getFreeCamId() const { return mFreeCamId; } - - const pxr::SdfPath &getRenderBufferId() const { return mRenderBufferId; } - unsigned int getRenderBufferWidth() const { return mRenderBufferDesc.dimensions[0]; } - unsigned int getRenderBufferHeight() const { return mRenderBufferDesc.dimensions[1]; } - pxr::HdFormat getRenderBufferFormat() const { return mRenderBufferDesc.format; } - - const pxr::SdfPath &getTaskId() const { return mTaskId; } - - // HdSceneDelegate Overrides - pxr::VtValue Get(const pxr::SdfPath &id, const pxr::TfToken &key) override; - pxr::VtValue GetCameraParamValue(const pxr::SdfPath &id, const pxr::TfToken &key) override; - pxr::HdRenderBufferDescriptor GetRenderBufferDescriptor(const pxr::SdfPath &id) override; - pxr::TfTokenVector GetTaskRenderTags(const pxr::SdfPath &taskId) override; - pxr::GfMatrix4d GetTransform(pxr::SdfPath const & id) override; - -private: - void createFreeCam(const FreeCamera &camera); - void createRenderBuffer(unsigned int width, unsigned int height, - const pxr::HdAovDescriptor &aovDesc); - void createTask(const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc, const pxr::SdfPath &cameraId); - - // assumes a single render task - pxr::SdfPath mTaskId; - pxr::VtDictionary mTaskParams; - pxr::TfTokenVector mTaskRenderTags; - - // assumes a single free camera - pxr::SdfPath mFreeCamId; - FreeCamera mFreeCam; - - // assumes a single render buffer - pxr::SdfPath mRenderBufferId; - pxr::HdRenderBufferDescriptor mRenderBufferDesc; -}; - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_render/hd_render.cc b/cmd/hd_cmd/hd_render/hd_render.cc deleted file mode 100644 index 593f4aa..0000000 --- a/cmd/hd_cmd/hd_render/hd_render.cc +++ /dev/null @@ -1,376 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file hd_render.cc - -// render usd scene using hydra - -#include "FreeCamera.h" -#include "OutputFile.h" -#include "RenderOptions.h" -#include "RenderSettings.h" -#include "SceneDelegate.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include - -//#define DEBUG_MSG - -scene_rdl2::rec_time::RecTime recTime; -std::vector> stepTimes; - -// Begins a code section that can be traced -// using "-trace name" -void beginTrace(const hd_render::RenderOptions opts, - const std::string& name) -{ - recTime.start(); - if (opts.hasTraceOpt(name)) { - pxr::TraceCollector::GetInstance().SetEnabled(true); - } -} - -// Ends a code section that can be traced -void endTrace(const hd_render::RenderOptions opts, - const std::string& name) -{ - stepTimes.emplace_back(name, recTime.end()); - - if (opts.hasTraceOpt(name)) { - pxr::TraceCollector::GetInstance().SetEnabled(false); - std::cout << "Writing " << name << " trace to " - << opts.getTraceFile(name) << " ..." << std::endl; - std::ofstream report(opts.getTraceFile(name)); - if (opts.useChromeTraceFormat()) { - pxr::TraceReporter::GetGlobalReporter()->ReportChromeTracing(report); - } else { - pxr::TraceReporter::GetGlobalReporter()->Report(report); - } - std::cout << "...done" << std::endl; - pxr::TraceCollector::GetInstance().Clear(); - pxr::TraceReporter::GetGlobalReporter()->ClearTree(); - } -} - -void writeTiming(std::ostream &out) -{ - -} - -int -main(int argc, char *argv[]) -{ - // Parse arguments - hd_render::RenderOptions options(argc, argv); - if (options.helpRequested()) { - std::cout << options.usage(argv[0]); - return 0; - } else if (!options.allFlagsValid()){ - std::cerr << "Invalid option\n"; - std::cerr << options.usage(argv[0]); - return -1; - } - - // Load the hydra renderer plugin and create the render delegate - pxr::TfToken rendererId; - pxr::HfPluginDescVector pluginDescriptors; - pxr::HdRendererPluginRegistry ®istry(pxr::HdRendererPluginRegistry::GetInstance()); - registry.GetPluginDescs(&pluginDescriptors); - for (const pxr::HfPluginDesc &pluginDesc : pluginDescriptors) { - // skip "GL" since we don't have OpenGL setup - if (pluginDesc.displayName == "GL") continue; - if (pluginDesc.displayName == options.getRenderer() || - pluginDesc.id == pxr::TfToken(options.getRenderer())) { - rendererId = pluginDesc.id; - } - } - if (rendererId.IsEmpty()) { - const bool helpRequested = options.getRenderer().empty(); - std::ostream &ost = helpRequested ? std::cout : std::cerr; - if (!helpRequested) { - std::cerr << "Unable to load the requested renderer \"" << options.getRenderer() << "\"\n"; - } - ost << "Available renderers include:\n"; - for (const pxr::HfPluginDesc &pluginDesc : pluginDescriptors) { - // skip "GL" since we don't have OpenGL setup - if (pluginDesc.displayName == "GL") continue; - ost << "\t" << pluginDesc.displayName << '\n'; - } - return options.getRenderer().empty() ? 0 : -1; - } - auto releasePlugin = [&](pxr::HdRendererPlugin *plugin) { - registry.ReleasePlugin(plugin); - }; - - beginTrace(options,"load_plugin"); - Py_Initialize(); // HDM-133: plugin loader assumes this has been done - pxr::HdRenderSettingsMap initialSettings; - if (options.getDisableRender()) { - initialSettings[pxr::TfToken("disableRender")] = true; - } - if (!options.getRdlOutput().empty()) { - initialSettings[pxr::TfToken("rdlOutput")] = options.getRdlOutput(); - } - std::unique_ptr - rendererPlugin(registry.GetRendererPlugin(rendererId), releasePlugin); - MNRY_ASSERT_REQUIRE(rendererPlugin); - std::unique_ptr - renderDelegate(rendererPlugin->CreateRenderDelegate(initialSettings)); - MNRY_ASSERT_REQUIRE(renderDelegate); - endTrace(options,"load_plugin"); - - // Create the hydra render index and tie the render delegate to it. - // There is a 1-1 relationship between render delegate and render index. - std::unique_ptr -#if PXR_VERSION >= 2005 - renderIndex(pxr::HdRenderIndex::New(renderDelegate.get(), {})); -#else - renderIndex(pxr::HdRenderIndex::New(renderDelegate.get())); -#endif - MNRY_ASSERT_REQUIRE(renderIndex); - - // Does the renderer know how to render the requested aov? - const pxr::TfToken aov(options.getAov()); - const pxr::HdAovDescriptor aovDesc = renderDelegate->GetDefaultAovDescriptor(aov); - if (aovDesc.format == pxr::HdFormatInvalid) { - std::cerr << options.getRenderer() << " can't render aov " << aov << '\n'; - return -1; - } - - // Get the available render settings - hd_render::RenderSettings renderSettings(renderDelegate.get()); - if (options.getPrintRenderSettingsRequested()) { - std::cout << "Avaiable " << options.getRenderer() << " render settings:\n"; - std::cout << renderSettings.printAvailableSettings(); - return -1; - } - for (const hd_render::RenderOptions::RenderSetting &setting : options.getRenderSettings()) { - if (renderSettings.setRenderSetting(setting.first, setting.second)) { - std::cerr << "Unable to set \"" << setting.first << "\" to \"" << setting.second << "\"\n"; - return -1; - } - } - - // At this point, we can check if all required options were passed - if (!options.getMissingRequiredFlags().empty()) { - for (const std::string &flag : options.getMissingRequiredFlags()) { - std::cerr << flag << " is a required option\n"; - } - std::cerr << options.usage(argv[0]); - return -1; - } - - // Fill out the hydra "purpose". We always include the default purpose. We support 3 - // other purposes: "render", "proxy", and "guide" - pxr::TfTokenVector purposes = { pxr::UsdGeomTokens->default_ }; - for (const std::string& p : options.getPurposes()) { - const pxr::TfToken tp = pxr::TfToken(p); - if (tp == pxr::UsdGeomTokens->render || - tp == pxr::UsdGeomTokens->proxy || - tp == pxr::UsdGeomTokens->guide) { - purposes.push_back(tp); - } else { - std::cerr << "Unsupported purpose " << p << '\n'; - return -1; - } - } - - // In hydra, there can be a many to one relationship between - // scene delegates and the render index. The only restriction is that - // any primitive in the render index can be backed by only a single - // scene delegate. For the primitives that are in the input usd - // file, we'll use a UsdImaging scene delegate. We'll root - // everything in the usd file at the path "/" - const pxr::SdfPath usdSceneDelegateId = pxr::SdfPath::AbsoluteRootPath(); - pxr::UsdImagingDelegate usdSceneDelegate(renderIndex.get(), usdSceneDelegateId); - - pxr::UsdTimeCode timeCode = pxr::UsdTimeCode::Default(); - if (options.getTimeType() == hd_render::TimeType::Earliest) { - timeCode = pxr::UsdTimeCode::EarliestTime(); - } else if (options.getTimeType() == hd_render::TimeType::DoubleValue) { - timeCode = options.getTime(); - } - usdSceneDelegate.SetTime(timeCode); - - // This is the value set by "Complexity/Medium" in usdview: - usdSceneDelegate.SetRefineLevelFallback(options.getRefineLevel()); - - usdSceneDelegate.SetWindowPolicy(pxr::CameraUtilMatchHorizontally); - - beginTrace(options,"open_stage"); - pxr::UsdStageRefPtr stage = pxr::UsdStage::Open(options.getInputSceneFile()); - endTrace(options,"open_stage"); - - if (!stage) { - std::cerr << "Unable to open " << options.getInputSceneFile() << '\n'; - return -1; - } - const pxr::UsdPrim &pseudoRoot = stage->GetPseudoRoot(); - - beginTrace(options,"populate"); - usdSceneDelegate.Populate(pseudoRoot); - endTrace(options,"populate"); - - // Build an Rprim collection of the primitives we want to render - // For now, we'll just grab all the rprims in the usd scene - const pxr::TfToken collectionName(pxr::HdTokens->geometry); // collection name is "geometry" - const pxr::HdReprSelector reprSelector(pxr::HdReprTokens->refined); - pxr::HdRprimCollection collection(collectionName, reprSelector); - collection.SetRootPath(pseudoRoot.GetPath()); - - // Build a second scene delegate to manage the free camera, - // render buffer and render task. We'll root - // everything that is app specific at "/app_scene" - const pxr::SdfPath appSceneDelegateId = - pxr::SdfPath::AbsoluteRootPath().AppendChild(pxr::TfToken("app_scene")); - hd_render::SceneDelegate appSceneDelegate(renderIndex.get(), appSceneDelegateId); - - // image size is size / res - const unsigned int resWidth = static_cast( - static_cast(options.getWidth()) / options.getRes()); - const unsigned int resHeight = static_cast( - static_cast(options.getHeight()) / options.getRes()); - - if (options.getCamera().empty()) { - // Define a viewing frustum for the free camera - // and populate the app scene delegate. - hd_render::FreeCamera camera(stage, - float(options.getHeight()) / float(options.getWidth()), - timeCode, - purposes); - appSceneDelegate.populate(camera, - resWidth, resHeight, - collection, - purposes, - aov, aovDesc); - } else { - // Verify that the camera exists in hydra, then populate the app scene delegate - // using this camera. - const pxr::SdfPath hdCameraId = usdSceneDelegateId.AppendPath(pxr::SdfPath(options.getCamera())); - if (!renderIndex->GetSprim(pxr::HdPrimTypeTokens->camera, hdCameraId)) { - std::cerr << "Could not find camera " << options.getCamera() << " in " << stage << '\n'; - return -1; - } - appSceneDelegate.populate(hdCameraId, - resWidth, resHeight, - collection, - purposes, - aov, aovDesc); - - // Set the sampling camera for motion blur - usdSceneDelegate.SetCameraForSampling(hdCameraId); - } - - // Render - pxr::HdEngine engine; - pxr::HdTaskSharedPtrVector tasks = { renderIndex->GetTask(appSceneDelegate.getTaskId()) }; - pxr::HdxRenderTask *renderTask = static_cast(tasks[0].get()); - MNRY_ASSERT_REQUIRE(renderTask != nullptr); - - beginTrace(options,"render"); - - do { - engine.Execute(renderIndex.get(), &tasks); - } while (!renderTask->IsConverged()); - - endTrace(options,"render"); - - // Image output - - pxr::HdRenderBuffer *renderBuffer = dynamic_cast - (renderIndex->GetBprim(pxr::HdPrimTypeTokens->renderBuffer, appSceneDelegate.getRenderBufferId())); - - hd_render::OutputFile outputFile(renderBuffer); - if (!options.getDisableRender()) { - if (outputFile.write(options.getOutputExrFile())) { - std::cerr << "Failed to write " << options.getOutputExrFile() << '\n'; - return -1; - } - std::cout << "Wrote " << options.getOutputExrFile() << '\n'; - } - - // Now handle deltas, if requested. If the delta usd file is non-empty - // or the delta set options are non-empty, then the output delta file - // must be non-empty, and we should process the requested delta. - const bool doDelta = !options.getDeltaInputSceneFile().empty() - || !options.getDeltaRenderSettings().empty(); - - if (doDelta) { - // First handle render settings - for (hd_render::RenderOptions::RenderSetting setting : options.getDeltaRenderSettings()) { - if (renderSettings.setRenderSetting(setting.first, setting.second)) { - std::cerr << "Unable to set \"" << setting.first << "\" to \"" << setting.second << "\"\n"; - return -1; - } - } - - // Update the USD scene - if (!options.getDeltaInputSceneFile().empty()) { - // verify that we can open this file without error - { - pxr::UsdStageRefPtr deltaStage = pxr::UsdStage::Open(options.getDeltaInputSceneFile()); - if (!deltaStage) { - std::cerr << "Unable to open " << options.getDeltaInputSceneFile() << '\n'; - return -1; - } - } - beginTrace(options,"open_delta_stage"); - stage->GetSessionLayer()->InsertSubLayerPath(options.getDeltaInputSceneFile(), 0); - usdSceneDelegate.ApplyPendingUpdates(); - endTrace(options,"open_delta_stage"); - } - - // Render - beginTrace(options,"delta_render"); - do { - engine.Execute(renderIndex.get(), &tasks); - } while (!renderTask->IsConverged()); - endTrace(options,"delta_render"); - - if (!options.getDisableRender() && !options.getDeltaOutputExrFile().empty()) { - - if (outputFile.write(options.getDeltaOutputExrFile())) { - std::cerr << "Failed to write " << options.getDeltaOutputExrFile() << '\n'; - return -1; - } - std::cout << "Wrote " << options.getDeltaOutputExrFile() << '\n'; - } - } - - if (options.isTimingEnabled()) { - std::ostream* out; - std::string timingFile = options.getTimingFile(); - if (timingFile.empty()) { - out = &std::cout; - } else { - std::cout << "Writing timing to " << timingFile << std::endl; - out = new std::ofstream(timingFile); - } - for (const auto& entry : stepTimes) { - (*out) << entry.first << " " << entry.second << std::endl; - } - if (!timingFile.empty()) delete out; - } - return 0; -} - diff --git a/cmd/hd_cmd/hd_usd2rdl/CMakeLists.txt b/cmd/hd_cmd/hd_usd2rdl/CMakeLists.txt deleted file mode 100644 index 83d5456..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/CMakeLists.txt +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright 2023-2024 DreamWorks Animation LLC -# SPDX-License-Identifier: Apache-2.0 - -set(target hd_usd2rdl) - -add_executable(${target}) - -target_sources(${target} - PRIVATE - FreeCamera.cc - hd_usd2rdl.cc - RenderOptions.cc - RenderSettings.cc - SceneDelegate.cc -) - -if (NOT IsDarwinPlatform) - set(PlatformSpecificLibs atomic) -endif() - -target_link_libraries(${target} - PRIVATE - SceneRdl2::scene_rdl2 - - # pxr libs - gf tf trace vt work # base - cameraUtil hd hdx hf # imaging - sdf usd usdGeom # usd - usdImaging - - TBB::tbb - Python::Python - Boost::${BOOST_PYTHON_COMPONENT_NAME} - ${PlatformSpecificLibs} - ${MKL} -) - -# Set standard compile/link options -HdMoonray_cxx_compile_definitions(${target}) -HdMoonray_cxx_compile_features(${target}) -HdMoonray_cxx_compile_options(${target}) -HdMoonray_link_options(${target}) - -install(TARGETS ${target} - RUNTIME DESTINATION bin) diff --git a/cmd/hd_cmd/hd_usd2rdl/FreeCamera.cc b/cmd/hd_cmd/hd_usd2rdl/FreeCamera.cc deleted file mode 100644 index dd8cebd..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/FreeCamera.cc +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file FreeCamera.cc - -#include "FreeCamera.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace hd_usd2rdl { - -FreeCamera::FreeCamera(const pxr::UsdStageRefPtr stage, - float aspectRatio, - pxr::UsdTimeCode timeCode, - const pxr::TfTokenVector &includedPurposes) -{ - // Generate a camera that defines a decent default view of the stage's - // renderable primitives. - // - // This is mostly lifted from pxr/usdImaging/usdAppUtils/frameRecorder.cpp so - // it should closely match the default view in tools such as usdview. - // - // The main difference is that we lock the vertical aperture so the - // render window aspect matches the viewport. - - // Start with a default (50mm) perspective GfCamera. - // Set the vertical aperture based on the viewport aspectRatio (height / width) - mCamera.SetVerticalAperture(mCamera.GetHorizontalAperture() * aspectRatio); - pxr::UsdGeomBBoxCache bboxCache(timeCode, includedPurposes, - /* useExtentsHint = */ true); - pxr::GfBBox3d bbox = bboxCache.ComputeWorldBound(stage->GetPseudoRoot()); - pxr::GfVec3d center = bbox.ComputeCentroid(); - pxr::GfRange3d range = bbox.ComputeAlignedRange(); - pxr::GfVec3d dim = range.GetSize(); - pxr::TfToken upAxis = pxr::UsdGeomGetStageUpAxis(stage); - // Find corner of bbox in the focal plane. - pxr::GfVec2d planeCorner; - if (upAxis == pxr::UsdGeomTokens->y) { - planeCorner = pxr::GfVec2d(dim[0], dim[1]) / 2; - } else { - planeCorner = pxr::GfVec2d(dim[0], dim[2]) / 2; - } - float planeRadius = sqrt(pxr::GfDot(planeCorner, planeCorner)); - // Compute distance to focal plane. - float halfFov = mCamera.GetFieldOfView(pxr::GfCamera::FOVHorizontal) / 2.0; - float distance = planeRadius / tan(pxr::GfDegreesToRadians(halfFov)); - // Back up to frame the front face of the bbox. - if (upAxis == pxr::UsdGeomTokens->y) { - distance += dim[2] / 2; - } else { - distance += dim[1] / 2; - } - // Compute local-to-world transform for camera filmback. - pxr::GfMatrix4d xf; - if (upAxis == pxr::UsdGeomTokens->y) { - xf.SetTranslate(center + pxr::GfVec3d(0, 0, distance)); - } else { - xf.SetRotate(pxr::GfRotation(pxr::GfVec3d(1, 0, 0), 90)); - xf.SetTranslateOnly(center + pxr::GfVec3d(0, -distance, 0)); - } - mCamera.SetTransform(xf); -} - -pxr::VtValue -FreeCamera::getParam(pxr::TfToken const& key) const -{ -#if PXR_VERSION >= 2108 - if (key == pxr::HdCameraTokens->projection) { - if (mCamera.GetProjection() == pxr::GfCamera::Projection::Orthographic) { - return pxr::VtValue(pxr::HdCamera::Orthographic); - } - return pxr::VtValue(pxr::HdCamera::Perspective); - } else if (key == pxr::HdCameraTokens->horizontalAperture) { - // Several camera parameters are specified in tenths of a - // world unit (e.g., focalLength = 50mm) - // Hydra's camera expects these parameters to be expressed in world - // units. (e.g., if cm is the world unit, focalLength = 5cm) - return pxr::VtValue(mCamera.GetHorizontalAperture() * float(pxr::GfCamera::APERTURE_UNIT)); - } else if (key == pxr::HdCameraTokens->verticalAperture) { - return pxr::VtValue(mCamera.GetVerticalAperture() * float(pxr::GfCamera::APERTURE_UNIT)); - } else if (key == pxr::HdCameraTokens->horizontalApertureOffset) { - return pxr::VtValue(mCamera.GetHorizontalApertureOffset() * float(pxr::GfCamera::APERTURE_UNIT)); - } else if (key == pxr::HdCameraTokens->verticalApertureOffset) { - return pxr::VtValue(mCamera.GetVerticalApertureOffset() * float(pxr::GfCamera::APERTURE_UNIT)); - } else if (key == pxr::HdCameraTokens->focalLength) { - return pxr::VtValue(mCamera.GetFocalLength() * float(pxr::GfCamera::FOCAL_LENGTH_UNIT)); - } else if (key == pxr::HdCameraTokens->clippingRange) { - return pxr::VtValue(mCamera.GetClippingRange()); - } else if (key == pxr::HdCameraTokens->clipPlanes) { - // GfCamera clip planes are vector but Hydra - // expects vector - const std::vector& fPlanes = mCamera.GetClippingPlanes(); - std::vector dPlanes; - dPlanes.reserve(fPlanes.size()); - dPlanes.assign(fPlanes.cbegin(), fPlanes.cend()); - return pxr::VtValue(dPlanes); - } else if (key == pxr::HdCameraTokens->fStop) { - return pxr::VtValue(mCamera.GetFStop()); - } else if (key == pxr::HdCameraTokens->focusDistance) { - return pxr::VtValue((mCamera.GetFocusDistance())); - } else if (key == pxr::HdCameraTokens->shutterOpen) { - return pxr::VtValue(mShutterOpen); - } else if (key == pxr::HdCameraTokens->shutterClose) { - return pxr::VtValue(mShutterClose); - } else if (key == pxr::HdCameraTokens->exposure) { - return pxr::VtValue(mExposure); - } else -#endif - if (key == pxr::TfToken("worldToViewMatrix")) { - // only used pre-0.22.3 - return pxr::VtValue(mCamera.GetFrustum().ComputeViewMatrix()); - } else if (key == pxr::TfToken("projectionMatrix")) { - // only used pre-0.22.3 - return pxr::VtValue(mCamera.GetFrustum().ComputeProjectionMatrix()); - } else if (key == pxr::HdCameraTokens->windowPolicy) { - return pxr::VtValue(pxr::CameraUtilFit); - } - - return pxr::VtValue(); -} -pxr::GfMatrix4d -FreeCamera::getTransform() const -{ - return mCamera.GetFrustum().ComputeViewMatrix().GetInverse(); -} - -} // namespace hd_usd2rdl - diff --git a/cmd/hd_cmd/hd_usd2rdl/FreeCamera.h b/cmd/hd_cmd/hd_usd2rdl/FreeCamera.h deleted file mode 100644 index 57c61d6..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/FreeCamera.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file FreeCamera.h - -#pragma once - -#include -#include -#include -#include - -namespace hd_usd2rdl { - -class FreeCamera -{ - public: - FreeCamera() : mCamera() {} - FreeCamera(const pxr::UsdStageRefPtr stage, - float aspectRatio, - pxr::UsdTimeCode timeCode, - const pxr::TfTokenVector &includedPurposes); - - pxr::VtValue getParam(pxr::TfToken const& key) const; - pxr::GfMatrix4d getTransform() const; - - const pxr::GfCamera& camera() const { return mCamera; } - private: - pxr::GfCamera mCamera; - double mShutterOpen = 0; - double mShutterClose = 0; - float mExposure = 0; -}; - - -} // namespace hd_usd2rdl - diff --git a/cmd/hd_cmd/hd_usd2rdl/MapGuard.h b/cmd/hd_cmd/hd_usd2rdl/MapGuard.h deleted file mode 100644 index 3347737..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/MapGuard.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file MapGuard.h - -#pragma once - -#include - -namespace hd_render { - -// RAII proctection for render buffer mapping/unmapping -// Upon construction, the render buffer is mapped and pixels -// are made available. Upon deletion, the render buffer is -// unmapped. -class MapGuard -{ -public: - MapGuard(pxr::HdRenderBuffer *renderBuffer): - mRenderBuffer(renderBuffer) - { - mPixels = mRenderBuffer->Map(); - } - - ~MapGuard() - { - mRenderBuffer->Unmap(); - } - - MapGuard(const MapGuard &) = delete; - MapGuard &operator=(const MapGuard &) = delete; - - void *getPixels() const { return mPixels; } - -private: - void *mPixels; - pxr::HdRenderBuffer *mRenderBuffer; -}; - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_usd2rdl/README.md b/cmd/hd_cmd/hd_usd2rdl/README.md deleted file mode 100644 index 0f6515d..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# hd_usd2rdl - -Converts a usd file to .rdla and/or .rdlb using Hydra. - -hd_usd2rdl works by performing a Hydra render using the Moonray render delegate. The code is based on hd_render. - -You can specify render settings via -set exactly as with hd_render. However, hd_usd2rdl automatically -sets 'rdlaOuput' and 'disableRender', so setting these on the commandline will have no effect. - -Hydra needs a camera to render, even though it should not affect the output. If you don't specify a camera on the -commandline, hd_usd2rdl will add a dummy camera called "/app_scene/free_cam" (exactly as hd_render does), and this -camera will be present in the RDL output file. -# Usage - -hd_usd2rdl -in -out .rdl[a|b] - -If you specify an extension (.rdla or .rdlb) on the output parameter, the extension will determine the output type. -You can also specify a name with no extension : then hd_usd2rdl will generate both .rdla and .rdlb files, placing large -attributes like mesh data in the .rdlb file, everything else in the .rdla. - diff --git a/cmd/hd_cmd/hd_usd2rdl/RenderOptions.cc b/cmd/hd_cmd/hd_usd2rdl/RenderOptions.cc deleted file mode 100644 index 7ea2623..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/RenderOptions.cc +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file RenderOptions.cc - -#include "RenderOptions.h" - -#include -#include - -#include -#include -#include - -namespace hd_usd2rdl { - -// default values -const bool RenderOptions::sHelpRequested = false; - -const char * const RenderOptions::sInputSceneFile = "scene.usd"; -const char * const RenderOptions::sOutputRdlFile = "scene.rdl"; - -const char * const RenderOptions::sCamera = ""; - -const unsigned int RenderOptions::sWidth = 1920; -const unsigned int RenderOptions::sHeight = 1080; -const unsigned int RenderOptions::sRefineLevel = 1; // "Complexity/Medium" -const TimeType RenderOptions::sTimeType = TimeType::Earliest; - -const bool RenderOptions::sPrintRenderSettingsRequested = false; - -RenderOptions::RenderOptions(int argc, char *argv[]): - // initialize defaults - mHelpRequested(sHelpRequested), - mInputSceneFile(sInputSceneFile), - mOutputRdlFile(sOutputRdlFile), - mCamera(sCamera), - mWidth(sWidth), - mHeight(sHeight), - mRefineLevel(sRefineLevel), - mTimeType(sTimeType), - mPrintRenderSettingsRequested(sPrintRenderSettingsRequested), - mAllFlagsValid(true) -{ - using scene_rdl2::util::Args; - - Args args(argc, argv); - Args::StringArray values; - std::vector validFlags; - - validFlags.push_back("-h"); - validFlags.push_back("-help"); - if (argc <= 1 || - args.getFlagValues("-h", 0, values) >= 0 || - args.getFlagValues("-help", 0, values) >= 0) { - mHelpRequested = true; - } - - // required flags -in and -out - validFlags.push_back("-in"); - if (args.getFlagValues("-in", 1, values) >= 0) { - mInputSceneFile = values[0]; - } else { - mMissingRequiredFlags.push_back("-in"); - } - - validFlags.push_back("-out"); - if (args.getFlagValues("-out", 1, values) >= 0) { - mOutputRdlFile = values[0]; - } else { - mMissingRequiredFlags.push_back("-out"); - } - - validFlags.push_back("-camera"); - if (args.getFlagValues("-camera", 1, values) >= 0) { - mCamera = values[0]; - } - - validFlags.push_back("-purpose"); - int foundAtIndex = args.getFlagValues("-purpose", 1, values); - while (foundAtIndex >= 0) { - // we are responsible for removing duplicates - if (std::find(mPurposes.begin(), mPurposes.end(), values[0]) == mPurposes.end()) { - mPurposes.push_back(values[0]); - } - foundAtIndex = args.getFlagValues("-purpose", 1, values, foundAtIndex + 1); - } - - validFlags.push_back("-refine-level"); - if (args.getFlagValues("-refine-level", 1, values) >= 0) { - mRefineLevel = std::max(0,std::min(8,atoi(values[0].c_str()))); - } - - validFlags.push_back("-time"); - if (args.getFlagValues("-time",1,values) >= 0) { - mTimeType = TimeType::DoubleValue; - mTime = atof(values[0].c_str()); - } - - validFlags.push_back("-set"); - foundAtIndex = args.getFlagValues("-set", -1, values); - while (foundAtIndex >= 0) { - // If we have 2 values, assume it is a key/value pair. - // Anything else interpret as a request to print the list - // of available settings and exit. - if (values.size() == 2) { - mRenderSettings.push_back(RenderSetting(values[0], values[1])); - } else { - mPrintRenderSettingsRequested = true; - } - foundAtIndex = args.getFlagValues("-set", -1, values, foundAtIndex + 1); - } - - validFlags.push_back("-size"); - if (args.getFlagValues("-size", 2, values) >= 0) { - mWidth = atoi(values[0].c_str()); - mHeight = atoi(values[1].c_str()); - } - - mAllFlagsValid = args.allFlagsValid(validFlags); -} - -std::string -RenderOptions::usage(const char *argv0) const -{ - using scene_rdl2::util::buildString; - - return buildString("Usage: ", argv0, " [Flags]\n" - "-h|-help\n" - " Print this message.\n" - "\n" - "Required:\n" - "-in scene.usd{a}\n" - " Input USD scene data.\n" - "\n" - "-out scene.rdl[a|b]\n" - " Output RDL file. Extension (.rdla or .rdlb) determines type.\n" - " If you specify a filename with no extension, both .rdla and .rdlb\n" - " will be output, with large array attributes placed in the .rdlb and\n" - " everything else in the .rdla\n" - "\n" - "Optional:\n" - "-camera \n" - " Name of the rendering camera. If not specified, a default\n" - " camera is created that frames the scene geometry.\n" - "\n" - "-purpose \n" - " Specifies a UsdGeomImageable purpose to include in the render.\n" - " can be one of 'render', 'proxy', or 'guide'. This option\n" - " can appear multiple times in order to select multiple purposes.\n" - " The 'default' purpose is implicity set.\n" - "\n" - "-refine-level \n" - " Set geometry refine level fallback to N. Tessellation rate is\n" - " 2^N. 0 disables subdivision, 1 is the default.\n" - "\n" - "-set .\n" - " Sets the render setting to . This\n" - " option can appear multiple times.\n" - " Use '-set' to see a list of available settings.\n" - "\n" - "-size 1920 1080\n" - " Canonical frame width and height (in pixels).\n" - "\n" - "-time \n" - " Set timecode (i.e. frame) to render at. If not set, uses the special\n" - " value 'Earliest' (see pxr::UsdTimeCode)\n" - "\n" - ); -} - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_usd2rdl/RenderOptions.h b/cmd/hd_cmd/hd_usd2rdl/RenderOptions.h deleted file mode 100644 index c3a5072..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/RenderOptions.h +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file RenderOptions.h - -#pragma once - -#include -#include -#include -#include - -namespace hd_usd2rdl { - -enum class TimeType -{ - // ways that UsdTimeCode can specify time - Earliest, Default, DoubleValue -}; - -// RenderOptions: command line parsing, default values -class RenderOptions -{ -public: - typedef std::pair RenderSetting; - - // Construct render options from command line. Check for user - // input errors with the allFlagsValid method. - RenderOptions(int argc, char *argv[]); - - // Was help requested? - bool helpRequested() const { return mHelpRequested; } - - // Were all input flags valid? - bool allFlagsValid() const { return mAllFlagsValid; } - - // Were we mising required flags? - const std::vector &getMissingRequiredFlags() const { return mMissingRequiredFlags; } - - // Return a formatted usage message suitable for printing on - // stderr or stdout - std::string usage(const char *argv0) const; - - const std::string &getInputSceneFile() const { return mInputSceneFile; } - const std::string getOutputRdlFile() const { return mOutputRdlFile; } - - const std::string getCamera() const { return mCamera; } - - unsigned int getWidth() const { return mWidth; } - unsigned int getHeight() const { return mHeight; } - - unsigned int getRefineLevel() const { return mRefineLevel; } - - TimeType getTimeType() const { return mTimeType; } - double getTime() const { return mTime; } - - bool getPrintRenderSettingsRequested() const { return mPrintRenderSettingsRequested; } - const std::vector &getRenderSettings() const { return mRenderSettings; } - - // This is the hydra "purpose" it can be one or more of render, proxy, and guide - const std::vector &getPurposes() const { return mPurposes; } - - -private: - // default options - static const bool sHelpRequested; - - static const char * const sInputSceneFile; - static const char * const sOutputRdlFile; - - static const char * const sCamera; - - - static const unsigned int sWidth; - static const unsigned int sHeight; - static const unsigned int sRefineLevel; - - static const TimeType sTimeType; - - - static const bool sPrintRenderSettingsRequested; - - // parsed results - bool mHelpRequested; - - std::string mInputSceneFile; - std::string mOutputRdlFile; - - std::string mCamera; - - - unsigned int mWidth; - unsigned int mHeight; - unsigned int mRefineLevel; - - TimeType mTimeType; - double mTime; // interesting if mTimeType = DoubleValue - - std::vector mRenderSettings; - bool mPrintRenderSettingsRequested; - - std::vector mPurposes; - - - // Indicates a user input error - bool mAllFlagsValid; - std::vector mMissingRequiredFlags; -}; - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_usd2rdl/RenderSettings.cc b/cmd/hd_cmd/hd_usd2rdl/RenderSettings.cc deleted file mode 100644 index 5a620ff..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/RenderSettings.cc +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file RenderSettings.cc - -#include "RenderSettings.h" - -#include -#include - -namespace hd_usd2rdl { - -RenderSettings::RenderSettings(pxr::HdRenderDelegate *renderDelegate): - mRenderDelegate(renderDelegate) -{ - mRenderSettings = mRenderDelegate->GetRenderSettingDescriptors(); -} - -int -RenderSettings::setRenderSetting(const std::string &key, const std::string &value) -{ - // Probably should figure out the data type from SceneVariable Attribute, but - // this version uses the text to guess at the type. - pxr::VtValue v; - char* endptr = nullptr; - if (value.empty()) - return -1; - else if (value.find('.') != value.npos) - v = strtof(value.c_str(), &endptr); - else if (not strcasecmp(value.c_str(), "false")) - v = false; - else if (not strcasecmp(value.c_str(), "true")) - v = true; - else - v = int(strtol(value.c_str(), &endptr, 0)); - - if (endptr && *endptr) v = value; // text after the number - - if (!v.IsEmpty()) { - mRenderDelegate->SetRenderSetting(pxr::TfToken(key), v); - return 0; - } - - return -1; // probably hit a type we don't know how to parse -} - -std::string -RenderSettings::printAvailableSettings() const -{ - std::ostringstream ostr; - for (const pxr::HdRenderSettingDescriptor &desc : mRenderSettings) { - ostr << '\t' << "\"" << desc.key << "\" [default = " - << desc.defaultValue << "] (type = " - << desc.defaultValue.GetType() << ")\n"; - } - ostr << "\t\"sceneVariable:xxxx\" Use 'rdl2_print SceneVariables' for a list.\n"; - return ostr.str(); -} - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_usd2rdl/RenderSettings.h b/cmd/hd_cmd/hd_usd2rdl/RenderSettings.h deleted file mode 100644 index 538a494..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/RenderSettings.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file RenderSettings.h - -#pragma once - -#include - -#include - -namespace hd_usd2rdl { - -class RenderSettings -{ -public: - explicit RenderSettings(pxr::HdRenderDelegate *renderDelegate); - int setRenderSetting(const std::string &key, const std::string &value); - std::string printAvailableSettings() const; - -private: - pxr::HdRenderDelegate *mRenderDelegate; - pxr::HdRenderSettingDescriptorList mRenderSettings; -}; - -} // namespace hd_render - diff --git a/cmd/hd_cmd/hd_usd2rdl/SConscript b/cmd/hd_cmd/hd_usd2rdl/SConscript deleted file mode 100644 index f5cce25..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/SConscript +++ /dev/null @@ -1,15 +0,0 @@ -Import('env') - -env.DWAUseComponents([ - 'mkl', - 'usd_imaging', - 'scene_rdl2', - 'tbb' -]) - -prog = env.DWAProgram( - 'hd_usd2rdla', - env.DWAGlob('*.cc') -) - -env.DWAInstallBin(prog) diff --git a/cmd/hd_cmd/hd_usd2rdl/SceneDelegate.cc b/cmd/hd_cmd/hd_usd2rdl/SceneDelegate.cc deleted file mode 100644 index a61bb77..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/SceneDelegate.cc +++ /dev/null @@ -1,166 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file SceneDelegate.cc - -#include "SceneDelegate.h" - -#include -#include -#include -#include -#include -#include - -namespace hd_usd2rdl { - -SceneDelegate::SceneDelegate(pxr::HdRenderIndex *parentIndex, const pxr::SdfPath &delegateId): - pxr::HdSceneDelegate(parentIndex, delegateId) -{ -} - -void -SceneDelegate::populate(const FreeCamera &freeCam, unsigned int width, unsigned int height, - const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc) -{ - createFreeCam(freeCam); - createRenderBuffer(width, height, aovDesc); - createTask(rprimCollection, purposes, aov, aovDesc, mFreeCamId); -} - - -void -SceneDelegate::populate(const pxr::SdfPath &cameraId, unsigned int width, unsigned int height, - const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc) -{ - createRenderBuffer(width, height, aovDesc); - createTask(rprimCollection, purposes, aov, aovDesc, cameraId); -} - -void -SceneDelegate::createFreeCam(const FreeCamera& freeCam) -{ - mFreeCamId = GetDelegateID().AppendChild(pxr::TfToken("free_cam")); - GetRenderIndex().InsertSprim(pxr::HdPrimTypeTokens->camera, this, mFreeCamId); - mFreeCam = freeCam; - GetRenderIndex().GetChangeTracker().MarkSprimDirty(mFreeCamId, pxr::HdChangeTracker::AllDirty); -} - -void -SceneDelegate::createRenderBuffer(unsigned int width, unsigned int height, - const pxr::HdAovDescriptor &aovDesc) -{ - mRenderBufferId = GetDelegateID().AppendChild(pxr::TfToken("render_buffer")); - GetRenderIndex().InsertBprim(pxr::HdPrimTypeTokens->renderBuffer, this, mRenderBufferId); - mRenderBufferDesc = { pxr::GfVec3i(width, height, 1), aovDesc.format, aovDesc.multiSampled }; - GetRenderIndex().GetChangeTracker().MarkBprimDirty(mRenderBufferId, pxr::HdChangeTracker::AllDirty); -} - -void -SceneDelegate::createTask(const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc, const pxr::SdfPath &cameraId) -{ - MNRY_ASSERT_REQUIRE(!mRenderBufferId.IsEmpty()); // call createRenderBuffer() before this method - - mTaskId = GetDelegateID().AppendChild(pxr::TfToken("render_task")); - GetRenderIndex().InsertTask(this, mTaskId); - - // caller should alredy have checked this - MNRY_ASSERT_REQUIRE(mRenderBufferDesc.format != pxr::HdFormatInvalid); - pxr::HdRenderPassAovBinding aovBinding; - aovBinding.renderBufferId = mRenderBufferId; - aovBinding.aovName = aov; - aovBinding.clearValue = aovDesc.clearValue; - pxr::HdxRenderTaskParams params; - params.aovBindings.push_back(aovBinding); - params.camera = cameraId; -#if PXR_VERSION >= 2102 - params.framing = pxr::CameraUtilFraming( - pxr::GfRect2i(pxr::GfVec2i(0,0), mRenderBufferDesc.dimensions[0], mRenderBufferDesc.dimensions[1])); -#else - params.viewport = pxr::GfVec4f(0, 0, mRenderBufferDesc.dimensions[0], mRenderBufferDesc.dimensions[1]); -#endif - mTaskParams[pxr::HdTokens->params] = pxr::VtValue(params); - GetRenderIndex().GetChangeTracker().MarkTaskDirty(mTaskId, pxr::HdChangeTracker::DirtyParams); - mTaskParams[pxr::HdTokens->collection] = pxr::VtValue(rprimCollection); - GetRenderIndex().GetChangeTracker().MarkTaskDirty(mTaskId, pxr::HdChangeTracker::DirtyCollection); - - // create the hydra render tags from the included purposes - // I may not fully understand how this is supposed to work. If we have only - // the default_ purpose, then leave the render tags empty. Otherwise, we - // should add the geometry tag and any tag that corresponds to render, guide, or proxy. - // I'm not sure why we need to convert from UsdGeom purpose tags to hydra purpose tags - mTaskRenderTags.clear(); - MNRY_ASSERT(purposes.size() >= 1 && purposes[0] == pxr::UsdGeomTokens->default_); - if (purposes.size() > 1) { - mTaskRenderTags.push_back(pxr::HdRenderTagTokens->geometry); - for (const pxr::TfToken &p : purposes) { - if (p == pxr::UsdGeomTokens->render) { - mTaskRenderTags.push_back(pxr::HdRenderTagTokens->render); - } else if (p == pxr::UsdGeomTokens->guide) { - mTaskRenderTags.push_back(pxr::HdRenderTagTokens->guide); - } else if (p == pxr::UsdGeomTokens->proxy) { - mTaskRenderTags.push_back(pxr::HdRenderTagTokens->proxy); - } - } - } -} - -pxr::VtValue -SceneDelegate::Get(const pxr::SdfPath &id, const pxr::TfToken &key) -{ - if (id == mTaskId) { - if (mTaskParams.find(key) != mTaskParams.end()) { - return mTaskParams[key]; - } - } - return GetCameraParamValue(id,key); - -} - -pxr::VtValue -SceneDelegate::GetCameraParamValue(const pxr::SdfPath &id, const pxr::TfToken &key) -{ - if (id == mFreeCamId) { - - pxr::VtValue val = mFreeCam.getParam(key); - return val; - } - - return pxr::VtValue(); -} - -pxr::GfMatrix4d -SceneDelegate::GetTransform(pxr::SdfPath const & id) -{ - if (id == mFreeCamId) { - // this is used to get the view inverse matrix in USD 22.3 on - return mFreeCam.getTransform(); - } - return pxr::GfMatrix4d(); -} - -pxr::HdRenderBufferDescriptor -SceneDelegate::GetRenderBufferDescriptor(const pxr::SdfPath &id) -{ - if (id == mRenderBufferId) { - return mRenderBufferDesc; - } - return pxr::HdRenderBufferDescriptor(); -} - -pxr::TfTokenVector -SceneDelegate::GetTaskRenderTags(const pxr::SdfPath &taskId) -{ - if (taskId == mTaskId) { - return mTaskRenderTags; - } - - // maybe the base class knows? - return pxr::HdSceneDelegate::GetTaskRenderTags(taskId); -} - -} // namespace hd_usd2rdl - diff --git a/cmd/hd_cmd/hd_usd2rdl/SceneDelegate.h b/cmd/hd_cmd/hd_usd2rdl/SceneDelegate.h deleted file mode 100644 index 39301ed..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/SceneDelegate.h +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file SceneDelegate.h - -#pragma once - -#include "FreeCamera.h" -#include -namespace hd_usd2rdl { - -// A scene delegate class that manages application -// specific scene data such as render tasks, free cameras, and -// render buffers -class SceneDelegate : public pxr::HdSceneDelegate -{ -public: - SceneDelegate(pxr::HdRenderIndex *parentIndex, const pxr::SdfPath &delegateId); - - // Create a scene with a task that renders rprimCollection from the camera - // into a width x height viewport - void populate(const FreeCamera &camera, unsigned int width, unsigned int height, - const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc); - - // Create a scene with a task that renders rprimCollection from cameraId - // into a width x height viewport. The caller is responsible for ensuring - // that cameraId references a valid camera. - void populate(const pxr::SdfPath &cameraId, unsigned int width, unsigned int height, - const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc); - - const pxr::SdfPath &getFreeCamId() const { return mFreeCamId; } - - const pxr::SdfPath &getRenderBufferId() const { return mRenderBufferId; } - unsigned int getRenderBufferWidth() const { return mRenderBufferDesc.dimensions[0]; } - unsigned int getRenderBufferHeight() const { return mRenderBufferDesc.dimensions[1]; } - pxr::HdFormat getRenderBufferFormat() const { return mRenderBufferDesc.format; } - - const pxr::SdfPath &getTaskId() const { return mTaskId; } - - // HdSceneDelegate Overrides - pxr::VtValue Get(const pxr::SdfPath &id, const pxr::TfToken &key) override; - pxr::VtValue GetCameraParamValue(const pxr::SdfPath &id, const pxr::TfToken &key) override; - pxr::HdRenderBufferDescriptor GetRenderBufferDescriptor(const pxr::SdfPath &id) override; - pxr::TfTokenVector GetTaskRenderTags(const pxr::SdfPath &taskId) override; - pxr::GfMatrix4d GetTransform(pxr::SdfPath const & id) override; - -private: - void createFreeCam(const FreeCamera &camera); - void createRenderBuffer(unsigned int width, unsigned int height, - const pxr::HdAovDescriptor &aovDesc); - void createTask(const pxr::HdRprimCollection &rprimCollection, const pxr::TfTokenVector &purposes, - const pxr::TfToken &aov, const pxr::HdAovDescriptor &aovDesc, const pxr::SdfPath &cameraId); - - // assumes a single render task - pxr::SdfPath mTaskId; - pxr::VtDictionary mTaskParams; - pxr::TfTokenVector mTaskRenderTags; - - // assumes a single free camera - pxr::SdfPath mFreeCamId; - FreeCamera mFreeCam; - - // assumes a single render buffer - pxr::SdfPath mRenderBufferId; - pxr::HdRenderBufferDescriptor mRenderBufferDesc; -}; - -} // namespace hd_usd2rdl - diff --git a/cmd/hd_cmd/hd_usd2rdl/hd_usd2rdl.cc b/cmd/hd_cmd/hd_usd2rdl/hd_usd2rdl.cc deleted file mode 100644 index 03a3506..0000000 --- a/cmd/hd_cmd/hd_usd2rdl/hd_usd2rdl.cc +++ /dev/null @@ -1,205 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -/// @file hd_usd2rdl.cc - -// convert usd scene to rdl using hydra - -#include "FreeCamera.h" -#include "RenderOptions.h" -#include "RenderSettings.h" -#include "SceneDelegate.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include - -pxr::TfToken sRendererId("HdMoonrayRendererDebugPlugin"); -const char * const sAov = "color"; - -pxr::GfFrustum -computeFrustumToFrameStage(const pxr::UsdStageRefPtr stage, float aspectRatio, - pxr::UsdTimeCode timeCode, const pxr::TfTokenVector &includedPurposes); - -int -main(int argc, char *argv[]) -{ - // Parse arguments - hd_usd2rdl::RenderOptions options(argc, argv); - if (options.helpRequested()) { - std::cout << options.usage(argv[0]); - return 0; - } else if (!options.allFlagsValid()){ - std::cerr << "Invalid option\n"; - std::cerr << options.usage(argv[0]); - return -1; - } else if (!options.getMissingRequiredFlags().empty()) { - for (const std::string &flag : options.getMissingRequiredFlags()) { - std::cerr << flag << " is a required option\n"; - } - std::cerr << options.usage(argv[0]); - return -1; - } - - // Load the hydra renderer plugin and create the render delegate - pxr::HdRendererPluginRegistry ®istry(pxr::HdRendererPluginRegistry::GetInstance()); - - auto releasePlugin = [&](pxr::HdRendererPlugin *plugin) { - registry.ReleasePlugin(plugin); - }; - - Py_Initialize(); // HDM-133: plugin loader assumes this has been done - pxr::HdRenderSettingsMap initialSettings; - initialSettings[pxr::TfToken("disableRender")] = true; - initialSettings[pxr::TfToken("rdlOutput")] = options.getOutputRdlFile(); - - std::unique_ptr - rendererPlugin(registry.GetRendererPlugin(sRendererId), releasePlugin); - MNRY_ASSERT_REQUIRE(rendererPlugin); - std::unique_ptr - renderDelegate(rendererPlugin->CreateRenderDelegate(initialSettings)); - MNRY_ASSERT_REQUIRE(renderDelegate); - - std::unique_ptr -#if PXR_VERSION >= 2005 - renderIndex(pxr::HdRenderIndex::New(renderDelegate.get(), {})); -#else - renderIndex(pxr::HdRenderIndex::New(renderDelegate.get())); -#endif - MNRY_ASSERT_REQUIRE(renderIndex); - - const pxr::TfToken aov(sAov); - const pxr::HdAovDescriptor aovDesc = renderDelegate->GetDefaultAovDescriptor(aov); - if (aovDesc.format == pxr::HdFormatInvalid) { - std::cerr << "Can't render aov " << aov << '\n'; - return -1; - } - - // Get the available render settings - hd_usd2rdl::RenderSettings renderSettings(renderDelegate.get()); - if (options.getPrintRenderSettingsRequested()) { - std::cout << "Available render settings:\n"; - std::cout << renderSettings.printAvailableSettings(); - return -1; - } - for (const hd_usd2rdl::RenderOptions::RenderSetting &setting : options.getRenderSettings()) { - if (renderSettings.setRenderSetting(setting.first, setting.second)) { - std::cerr << "Unable to set \"" << setting.first << "\" to \"" << setting.second << "\"\n"; - return -1; - } - } - renderSettings.setRenderSetting("disableRender","true"); - renderSettings.setRenderSetting("rdlaOutput",options.getOutputRdlFile()); - - pxr::TfTokenVector purposes = { pxr::UsdGeomTokens->default_ }; - for (const std::string& p : options.getPurposes()) { - const pxr::TfToken tp = pxr::TfToken(p); - if (tp == pxr::UsdGeomTokens->render || - tp == pxr::UsdGeomTokens->proxy || - tp == pxr::UsdGeomTokens->guide) { - purposes.push_back(tp); - } else { - std::cerr << "Unsupported purpose " << p << '\n'; - return -1; - } - } - - const pxr::SdfPath usdSceneDelegateId = pxr::SdfPath::AbsoluteRootPath(); - pxr::UsdImagingDelegate usdSceneDelegate(renderIndex.get(), usdSceneDelegateId); - - pxr::UsdTimeCode timeCode = pxr::UsdTimeCode::Default(); - if (options.getTimeType() == hd_usd2rdl::TimeType::Earliest) { - timeCode = pxr::UsdTimeCode::EarliestTime(); - } else if (options.getTimeType() == hd_usd2rdl::TimeType::DoubleValue) { - timeCode = options.getTime(); - } - usdSceneDelegate.SetTime(timeCode); - - // This is the value set by "Complexity/Medium" in usdview: - usdSceneDelegate.SetRefineLevelFallback(options.getRefineLevel()); - - usdSceneDelegate.SetWindowPolicy(pxr::CameraUtilMatchHorizontally); - - pxr::UsdStageRefPtr stage = pxr::UsdStage::Open(options.getInputSceneFile()); - - if (!stage) { - std::cerr << "Unable to open " << options.getInputSceneFile() << '\n'; - return -1; - } - const pxr::UsdPrim &pseudoRoot = stage->GetPseudoRoot(); - - usdSceneDelegate.Populate(pseudoRoot); - - const pxr::TfToken collectionName(pxr::HdTokens->geometry); // collection name is "geometry" - const pxr::HdReprSelector reprSelector(pxr::HdReprTokens->refined); - pxr::HdRprimCollection collection(collectionName, reprSelector); - collection.SetRootPath(pseudoRoot.GetPath()); - - const pxr::SdfPath appSceneDelegateId = - pxr::SdfPath::AbsoluteRootPath().AppendChild(pxr::TfToken("app_scene")); - hd_usd2rdl::SceneDelegate appSceneDelegate(renderIndex.get(), appSceneDelegateId); - - if (options.getCamera().empty()) { - // Define a free camera - // and populate the app scene delegate. - hd_usd2rdl::FreeCamera camera(stage, - float(options.getHeight()) / float(options.getWidth()), - timeCode, - purposes); - appSceneDelegate.populate(camera, - options.getWidth(), options.getHeight(), - collection, - purposes, - aov, aovDesc); - } else { - const pxr::SdfPath hdCameraId = usdSceneDelegateId.AppendPath(pxr::SdfPath(options.getCamera())); - - // Set the sampling camera for motion blur - usdSceneDelegate.SetCameraForSampling(hdCameraId); - - // Verify that the camera exists in hydra, then populate the app scene delegate - // using this camera. - if (!renderIndex->GetSprim(pxr::HdPrimTypeTokens->camera, hdCameraId)) { - std::cerr << "Could not find camera " << options.getCamera() << " in " << stage << '\n'; - return -1; - } - appSceneDelegate.populate(hdCameraId, - options.getWidth(), options.getHeight(), - collection, - purposes, - aov, aovDesc); - } - - // Render - pxr::HdEngine engine; - pxr::HdTaskSharedPtrVector tasks = { renderIndex->GetTask(appSceneDelegate.getTaskId()) }; - pxr::HdxRenderTask *renderTask = static_cast(tasks[0].get()); - MNRY_ASSERT_REQUIRE(renderTask != nullptr); - - do { - engine.Execute(renderIndex.get(), &tasks); - } while (!renderTask->IsConverged()); - - return 0; -} - diff --git a/hats/CMakeLists.txt b/hats/CMakeLists.txt index d2c99b3..9a87571 100644 --- a/hats/CMakeLists.txt +++ b/hats/CMakeLists.txt @@ -4,6 +4,7 @@ include(CTest) include(HatsTest) +add_subdirectory(aov) add_subdirectory(camera) add_subdirectory(geometry) add_subdirectory(light) diff --git a/hats/aov/CMakeLists.txt b/hats/aov/CMakeLists.txt new file mode 100644 index 0000000..2a707dc --- /dev/null +++ b/hats/aov/CMakeLists.txt @@ -0,0 +1,4 @@ +# Copyright 2023 DreamWorks Animation LLC +# SPDX-License-Identifier: Apache-2.0 + +add_hats_test(aov_basic RENDER_SETTINGS /Render/rendersettings) diff --git a/hats/light/light_spot.canonical.rdla b/hats/aov/aov_basic.canonical.rdla similarity index 58% rename from hats/light/light_spot.canonical.rdla rename to hats/aov/aov_basic.canonical.rdla index 1edf303..6dd6aef 100644 --- a/hats/light/light_spot.canonical.rdla +++ b/hats/aov/aov_basic.canonical.rdla @@ -1,123 +1,85 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["max_frame"] = 200, + ["frame"] = 179, + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 500, + ["image_height"] = 500, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { - ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), +AttributeMap("/DEFAULT/displayColorMap") { + ["default_value"] = Rgb(0.5, 0.5, 0.5), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } -RdlMeshGeometry("/floor") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1), Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/floor.primvars:displayColor"), UserData("/floor.primvars:primId")}, -} - RdlMeshGeometry("/shape") { - ["node_xform"] = blur(Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1), Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1)), + ["node_xform"] = Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1), ["face_vertex_count"] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, ["vertices_by_index"] = { 2, 1, 0, 3, 2, 0, 4, 3, 0, 5, 4, 0, 6, 5, 0, 7, 6, 0, 8, 7, 0, 9, 8, 0, 10, 9, 0, 1, 10, 0, 1, 2, 12, 11, 2, 3, 13, 12, 3, 4, 14, 13, 4, 5, 15, 14, 5, 6, 16, 15, 6, 7, 17, 16, 7, 8, 18, 17, 8, 9, 19, 18, 9, 10, 20, 19, 10, 1, 11, 20, 11, 12, 22, 21, 12, 13, 23, 22, 13, 14, 24, 23, 14, 15, 25, 24, 15, 16, 26, 25, 16, 17, 27, 26, 17, 18, 28, 27, 18, 19, 29, 28, 19, 20, 30, 29, 20, 11, 21, 30, 21, 22, 32, 31, 22, 23, 33, 32, 23, 24, 34, 33, 24, 25, 35, 34, 25, 26, 36, 35, 26, 27, 37, 36, 27, 28, 38, 37, 28, 29, 39, 38, 29, 30, 40, 39, 30, 21, 31, 40, 31, 32, 42, 41, 32, 33, 43, 42, 33, 34, 44, 43, 34, 35, 45, 44, 35, 36, 46, 45, 36, 37, 47, 46, 37, 38, 48, 47, 38, 39, 49, 48, 39, 40, 50, 49, 40, 31, 41, 50, 41, 42, 52, 51, 42, 43, 53, 52, 43, 44, 54, 53, 44, 45, 55, 54, 45, 46, 56, 55, 46, 47, 57, 56, 47, 48, 58, 57, 48, 49, 59, 58, 49, 50, 60, 59, 50, 41, 51, 60, 51, 52, 62, 61, 52, 53, 63, 62, 53, 54, 64, 63, 54, 55, 65, 64, 55, 56, 66, 65, 56, 57, 67, 66, 57, 58, 68, 67, 58, 59, 69, 68, 59, 60, 70, 69, 60, 51, 61, 70, 61, 62, 72, 71, 62, 63, 73, 72, 63, 64, 74, 73, 64, 65, 75, 74, 65, 66, 76, 75, 66, 67, 77, 76, 67, 68, 78, 77, 68, 69, 79, 78, 69, 70, 80, 79, 70, 61, 71, 80, 71, 72, 81, 72, 73, 81, 73, 74, 81, 74, 75, 81, 75, 76, 81, 76, 77, 81, 77, 78, 81, 78, 79, 81, 79, 80, 81, 80, 71, 81}, ["vertex_list_0"] = { Vec3(0, 0, -1), Vec3(0.191341713, 0, -0.961939752), Vec3(0.154798701, 0.112467833, -0.961939752), Vec3(0.0591278374, 0.18197678, -0.961939752), Vec3(-0.0591278709, 0.18197678, -0.961939752), Vec3(-0.154798716, 0.112467825, -0.961939752), Vec3(-0.191341713, -1.67276237e-08, -0.961939752), Vec3(-0.154798657, -0.112467892, -0.961939752), Vec3(-0.0591278598, -0.18197678, -0.961939752), Vec3(0.0591278672, -0.18197678, -0.961939752), Vec3(0.154798687, -0.112467848, -0.961939752), Vec3(0.353553385, 0, -0.853553414), Vec3(0.28603071, 0.207813457, -0.853553414), Vec3(0.109253995, 0.336249262, -0.853553414), Vec3(-0.109254062, 0.336249232, -0.853553414), Vec3(-0.28603071, 0.207813442, -0.853553414), Vec3(-0.353553385, -3.09086197e-08, -0.853553414), Vec3(-0.28603062, -0.207813561, -0.853553414), Vec3(-0.10925404, -0.336249232, -0.853553414), Vec3(0.109254047, -0.336249232, -0.853553414), Vec3(0.28603068, -0.207813486, -0.853553414), Vec3(0.461939752, 0, -0.691341758), Vec3(0.373717099, 0.27152136, -0.691341758), Vec3(0.142747223, 0.439330816, -0.691341758), Vec3(-0.142747313, 0.439330786, -0.691341758), Vec3(-0.373717129, 0.27152133, -0.691341758), Vec3(-0.461939752, -4.03840552e-08, -0.691341758), Vec3(-0.37371701, -0.271521509, -0.691341758), Vec3(-0.142747283, -0.439330786, -0.691341758), Vec3(0.142747298, -0.439330786, -0.691341758), Vec3(0.373717099, -0.271521389, -0.691341758), Vec3(0.5, 0, -0.5), Vec3(0.404508501, 0.293892622, -0.5), Vec3(0.154508486, 0.47552827, -0.5), Vec3(-0.154508576, 0.47552824, -0.5), Vec3(-0.404508531, 0.293892592, -0.5), Vec3(-0.5, -4.37113883e-08, -0.5), Vec3(-0.404508382, -0.293892771, -0.5), Vec3(-0.154508546, -0.47552824, -0.5), Vec3(0.154508561, -0.47552824, -0.5), Vec3(0.404508471, -0.293892652, -0.5), Vec3(0.5, 0, 0.5), Vec3(0.404508501, 0.293892622, 0.5), Vec3(0.154508486, 0.47552827, 0.5), Vec3(-0.154508576, 0.47552824, 0.5), Vec3(-0.404508531, 0.293892592, 0.5), Vec3(-0.5, -4.37113883e-08, 0.5), Vec3(-0.404508382, -0.293892771, 0.5), Vec3(-0.154508546, -0.47552824, 0.5), Vec3(0.154508561, -0.47552824, 0.5), Vec3(0.404508471, -0.293892652, 0.5), Vec3(0.461939752, 0, 0.691341758), Vec3(0.373717099, 0.27152136, 0.691341758), Vec3(0.142747223, 0.439330816, 0.691341758), Vec3(-0.142747313, 0.439330786, 0.691341758), Vec3(-0.373717129, 0.27152133, 0.691341758), Vec3(-0.461939752, -4.03840552e-08, 0.691341758), Vec3(-0.37371701, -0.271521509, 0.691341758), Vec3(-0.142747283, -0.439330786, 0.691341758), Vec3(0.142747298, -0.439330786, 0.691341758), Vec3(0.373717099, -0.271521389, 0.691341758), Vec3(0.353553385, 0, 0.853553414), Vec3(0.28603071, 0.207813457, 0.853553414), Vec3(0.109253995, 0.336249262, 0.853553414), Vec3(-0.109254062, 0.336249232, 0.853553414), Vec3(-0.28603071, 0.207813442, 0.853553414), Vec3(-0.353553385, -3.09086197e-08, 0.853553414), Vec3(-0.28603062, -0.207813561, 0.853553414), Vec3(-0.10925404, -0.336249232, 0.853553414), Vec3(0.109254047, -0.336249232, 0.853553414), Vec3(0.28603068, -0.207813486, 0.853553414), Vec3(0.191341713, 0, 0.961939752), Vec3(0.154798701, 0.112467833, 0.961939752), Vec3(0.0591278374, 0.18197678, 0.961939752), Vec3(-0.0591278709, 0.18197678, 0.961939752), Vec3(-0.154798716, 0.112467825, 0.961939752), Vec3(-0.191341713, -1.67276237e-08, 0.961939752), Vec3(-0.154798657, -0.112467892, 0.961939752), Vec3(-0.0591278598, -0.18197678, 0.961939752), Vec3(0.0591278672, -0.18197678, 0.961939752), Vec3(0.154798687, -0.112467848, 0.961939752), Vec3(0, 0, 1)}, ["primitive_attributes"] = { UserData("/shape.primvars:primId")}, } -RdlMeshGeometry("/wall") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1), Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/wall.primvars:displayColor"), UserData("/wall.primvars:primId")}, -} - -GeometrySet("allGeometry") { - RdlMeshGeometry("/floor"), +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/shape"), - RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet164831"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/shape"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet164831"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet164831"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/shape"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet27B5A4"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), - ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), + ["roughness"] = 0.300000012, + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } -SpotLight("/spot") { - ["node_xform"] = blur(Mat4(-0.029195599999999999, 0, 0.99957300000000004, 0, 0.99957300000000004, -4.3711400000000002e-08, 0.029195599999999999, 0, 4.3692800000000002e-08, 1, 1.27618e-09, 0, 0, 9, -8, 1), Mat4(-0.029195599999999999, 0, 0.99957300000000004, 0, 0.99957300000000004, -4.3711400000000002e-08, 0.029195599999999999, 0, 4.3692800000000002e-08, 1, 1.27618e-09, 0, 0, 9, -8, 1)), - ["visible_in_camera"] = "force on", - ["intensity"] = 10, +DistantLight("/distantLight") { + ["node_xform"] = Mat4(0.78677399999999997, 0.019432000000000001, -0.61693600000000004, 0, -0.52516399999999996, 0.546265, -0.65253099999999997, 0, 0.32433099999999998, 0.83738699999999999, 0.43999199999999999, 0, 13.723800000000001, 7, 2.8143099999999999, 1), + ["color"] = Rgb(0.800000012, 0.800000012, 0.600000024), + ["exposure"] = 9, ["normalized"] = false, - ["lens_radius"] = 1.39999998, - ["inner_cone_angle"] = 0, - ["angle_falloff_type"] = "ease out", + ["angular_extent"] = 5, } -LightSet("LightSet164831") { - SpotLight("/spot"), +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -PerspectiveCamera("/camera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 0.99925600000000003, -0.038579099999999998, 0, 0, 0.038579099999999998, 0.99925600000000003, 0, 0, 4.7645900000000001, 18.748100000000001, 1), Mat4(1, 0, 0, 0, 0, 0.99925600000000003, -0.038579099999999998, 0, 0, 0.038579099999999998, 0.99925600000000003, 0, 0, 4.7645900000000001, 18.748100000000001, 1)), +LightSet("LightSet27B5A4") { + DistantLight("/distantLight"), +} + +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = Mat4(0.97038000000000002, 0, 0.24158499999999999, 0, 0.098203799999999994, 0.91365200000000002, -0.394457, 0, -0.220725, 0.40649800000000003, 0.88658899999999996, 0, -2.2919900000000002, 5.33596, 9.4201800000000002, 1), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), + ["focal"] = 300, ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 0.99925600000000003, -0.038579099999999998, 0, 0, 0.038579099999999998, 0.99925600000000003, 0, 0, 4.7645900000000001, 18.748100000000001, 1), Mat4(1, 0, 0, 0, 0, 0.99925600000000003, -0.038579099999999998, 0, 0, 0.038579099999999998, 0.99925600000000003, 0, 0, 4.7645900000000001, 18.748100000000001, 1)), +PerspectiveCamera("/camera") { + ["node_xform"] = Mat4(0.97038000000000002, 0, 0.24158499999999999, 0, 0.098203799999999994, 0.91365200000000002, -0.394457, 0, -0.220725, 0.40649800000000003, 0.88658899999999996, 0, -2.2919900000000002, 5.33596, 9.4201800000000002, 1), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), + ["focal"] = 300, ["film_width_aperture"] = 240, } -UserData("/floor.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", -} - UserData("/shape.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 0}, ["rate"] = "constant", } -UserData("/floor.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", -} - -UserData("/wall.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", -} - -UserData("/wall.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 2}, - ["rate"] = "constant", +RenderOutput("/_outputs/normal") { + ["result"] = "state variable", + ["file_name"] = "/tmp/rp_normal.exr", } diff --git a/hats/aov/aov_basic.usd b/hats/aov/aov_basic.usd new file mode 100644 index 0000000..801be07 --- /dev/null +++ b/hats/aov/aov_basic.usd @@ -0,0 +1,76 @@ +#usda 1.0 +( + endTimeCode = 179 + metersPerUnit = 1 + startTimeCode = 179 + upAxis = "Y" +) + +def Camera "camera" +{ + matrix4d xformOp:transform = ( (0.97038, 0, 0.241585, 0), + (0.0982038, 0.913652, -0.394457, 0), + (-0.220725, 0.406498, 0.886589, 0), + (-2.29199, 5.33596, 9.42018, 1) ) + + uniform token[] xformOpOrder = ["xformOp:transform"] + + float focalLength = 300; + float horizontalAperture = 240; + float verticalAperture = 135; + float2 clippingRange = (0.01, 10000) +} + +def Capsule "shape" +{ + matrix4d xformOp:transform = ( (3, 0, 0, 0), + (0, 3, 0, 0), + (0, 0, 3, 0), + (0, 1, -5, 1) ) + uniform token[] xformOpOrder = ["xformOp:transform"] +} + +def DistantLight "distantLight" +{ + matrix4d xformOp:transform = ( (0.786774, 0.019432, -0.616936, 0), + (-0.525164, 0.546265, -0.652531, 0), + (0.324331, 0.837387, 0.439992, 0), + (13.7238, 7, 2.81431, 1) ) + uniform token[] xformOpOrder = ["xformOp:transform"] + + color3f inputs:color = (0.8, 0.8, 0.6) + float inputs:intensity = 1 + float inputs:exposure = 9 + float inputs:angle = 5 +} + +def Scope "Render" +{ + def Scope "Products" + { + def Scope "Vars" + { + def RenderVar "rv_normal" + { + token dataType = "float3" + string sourceName = "normal" + } + } + + def RenderProduct "rp_normal" + { + rel orderedVars = [ + + ] + token productName = "/tmp/rp_normal.exr" + } + } + + def RenderSettings "rendersettings" + { + rel products = + rel camera = + int2 resolution = (500, 500) + custom int moonray:sceneVariable:max_frame = 200 + } +} \ No newline at end of file diff --git a/hats/camera/camera_anim_focal.canonical.rdla b/hats/camera/camera_anim_focal.canonical.rdla index 6b823b1..a39dedd 100644 --- a/hats/camera/camera_anim_focal.canonical.rdla +++ b/hats/camera/camera_anim_focal.canonical.rdla @@ -1,6 +1,9 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["frame"] = 101, + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -12,16 +15,16 @@ RdlMeshGeometry("/sphere") { ["primitive_attributes"] = { UserData("/sphere.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/sphere"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/sphere"), "", BaseMaterial("/surfacing_sphere/baseMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/sphere"), "", DwaBaseMaterial("/surfacing_sphere/baseMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -BaseMaterial("/surfacing_sphere/baseMtl") { - ["diffuse_color"] = bind(undef(), Rgb(0.319000006, 0.0599999987, 0)), +DwaBaseMaterial("/surfacing_sphere/baseMtl") { + ["albedo"] = bind(undef(), Rgb(0.319000006, 0.0599999987, 0)), } EnvLight("/env") { @@ -37,6 +40,9 @@ RectLight("/key") { ["height"] = 5, } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet227AF2") { EnvLight("/env"), RectLight("/key"), @@ -50,7 +56,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 10, 10, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 10, 10, 1)), ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, @@ -58,8 +64,41 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + UserData("/sphere.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 0}, ["rate"] = "constant", } + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} diff --git a/hats/camera/camera_anim_focal.usd b/hats/camera/camera_anim_focal.usd index 5a0d61c..5fd82b0 100644 --- a/hats/camera/camera_anim_focal.usd +++ b/hats/camera/camera_anim_focal.usd @@ -19,28 +19,21 @@ def Camera "camera" def DomeLight "env" { - float intensity = 0.5 float inputs:intensity = 0.5 - asset texture:file = "/work/gshad/moonshine_test/rats_data/motion_blur/common/med/gld_dusk_GI_HS_PF_hdr.exr" asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/motion_blur/common/med/gld_dusk_GI_HS_PF_hdr.exr" } def RectLight "key" { - float intensity = 12 float inputs:intensity = 12 - color3f color = (0.855, 0.77, 0.535) color3f inputs:color = (0.855, 0.77, 0.535) - float width = 5 float inputs:width = 5 - float height = 5 float inputs:height = 5 } -def Sphere "sphere" +def Sphere "sphere" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (0, 10, 0) - float radius = 0.5 uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } @@ -51,8 +44,8 @@ def Material "surfacing_sphere" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface - color3f inputs:diffuse_color = (0.319, 0.06, 0.0) + color3f inputs:albedo = (0.319, 0.06, 0.0) } } \ No newline at end of file diff --git a/hats/camera/camera_anim_transform.canonical.rdla b/hats/camera/camera_anim_transform.canonical.rdla index 62bf663..c867c2c 100644 --- a/hats/camera/camera_anim_transform.canonical.rdla +++ b/hats/camera/camera_anim_transform.canonical.rdla @@ -1,6 +1,9 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["frame"] = 101, + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -12,16 +15,16 @@ RdlMeshGeometry("/sphere") { ["primitive_attributes"] = { UserData("/sphere.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/sphere"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/sphere"), "", BaseMaterial("/surfacing_sphere/baseMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/sphere"), "", DwaBaseMaterial("/surfacing_sphere/baseMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -BaseMaterial("/surfacing_sphere/baseMtl") { - ["diffuse_color"] = bind(undef(), Rgb(0.319000006, 0.0599999987, 0)), +DwaBaseMaterial("/surfacing_sphere/baseMtl") { + ["albedo"] = bind(undef(), Rgb(0.319000006, 0.0599999987, 0)), } EnvLight("/env") { @@ -37,6 +40,9 @@ RectLight("/key") { ["height"] = 5, } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet227AF2") { EnvLight("/env"), RectLight("/key"), @@ -50,7 +56,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(-1, 1.2246467991473532e-16, 0, 0, -1.2246467991473532e-16, -1, 0, 0, 0, 0, 1, 0, -3, 8.5, 20, 1), Mat4(-1, 1.2246467991473532e-16, 0, 0, -1.2246467991473532e-16, -1, 0, 0, 0, 0, 1, 0, -3, 8.5, 20, 1)), ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, @@ -58,8 +64,41 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + UserData("/sphere.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 0}, ["rate"] = "constant", } + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} diff --git a/hats/camera/camera_anim_transform.usd b/hats/camera/camera_anim_transform.usd index b77148c..8be288d 100644 --- a/hats/camera/camera_anim_transform.usd +++ b/hats/camera/camera_anim_transform.usd @@ -23,28 +23,21 @@ def Camera "camera" def DomeLight "env" { - float intensity = 0.5 float inputs:intensity = 0.5 - asset texture:file = "/work/gshad/moonshine_test/rats_data/motion_blur/common/med/gld_dusk_GI_HS_PF_hdr.exr" asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/motion_blur/common/med/gld_dusk_GI_HS_PF_hdr.exr" } def RectLight "key" { - float intensity = 12 float inputs:intensity = 12 - color3f color = (0.855, 0.77, 0.535) color3f inputs:color = (0.855, 0.77, 0.535) - float width = 5 float inputs:width = 5 - float height = 5 float inputs:height = 5 } -def Sphere "sphere" +def Sphere "sphere" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (0, 10, 0) - float radius = 0.5 uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } @@ -55,8 +48,8 @@ def Material "surfacing_sphere" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface - color3f inputs:diffuse_color = (0.319, 0.06, 0.0) + color3f inputs:albedo = (0.319, 0.06, 0.0) } } \ No newline at end of file diff --git a/hats/camera/camera_clipping.canonical.rdla b/hats/camera/camera_clipping.canonical.rdla index 1a2b08a..8e0bf82 100644 --- a/hats/camera/camera_clipping.canonical.rdla +++ b/hats/camera/camera_clipping.canonical.rdla @@ -1,89 +1,99 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 1467, ["enable_motion_blur"] = false, } -ImageMap("/surfacing_floor/floorMap.out") { +ImageMap("/surfacing_floor/floorMap") { ["wrap_around"] = false, ["texture"] = "/work/gshad/moonshine_test/rats_data/camera/perspective/clipping/misc/rgb_checker.tx", ["gamma"] = "on", } RdlMeshGeometry("/box0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4375, -0.4375, 0.9375, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4375, -0.4375, 0.9375, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4375, -0.4375, 0.9375, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box0.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box1") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.3125, -0.4375, 0.8125, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.3125, -0.4375, 0.8125, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.3125, -0.4375, 0.8125, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box1.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box2") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.1875, -0.4375, 0.6875, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.1875, -0.4375, 0.6875, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.1875, -0.4375, 0.6875, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box2.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box3") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0625, -0.4375, 0.5625, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0625, -0.4375, 0.5625, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0625, -0.4375, 0.5625, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box3.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box4") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0625, -0.4375, 0.4375, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0625, -0.4375, 0.4375, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0625, -0.4375, 0.4375, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box4.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box5") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.1875, -0.4375, 0.3125, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.1875, -0.4375, 0.3125, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.1875, -0.4375, 0.3125, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box5.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box6") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.3125, -0.4375, 0.1875, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.3125, -0.4375, 0.1875, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.3125, -0.4375, 0.1875, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box6.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box7") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.4375, -0.4375, 0.0625, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.4375, -0.4375, 0.0625, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.4375, -0.4375, 0.0625, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box7.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/floorGeom/_") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.5, 0.5, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.5, 0.5, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.5, 0.5, 1), ["face_vertex_count"] = { 4}, ["vertices_by_index"] = { 0, 1, 3, 2}, ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, @@ -93,7 +103,7 @@ RdlMeshGeometry("/floorGeom/_") { } RdlMeshGeometry("/wallGeom/_") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 2.2204460492503131e-16, 1, 0, 0, -1, 2.2204460492503131e-16, 0, 0, 0, 0, 1), Mat4(1, 0, 0, 0, 0, 2.2204460492503131e-16, 1, 0, 0, -1, 2.2204460492503131e-16, 0, 0, 0, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 2.2204460492503131e-16, 1, 0, 0, -1, 2.2204460492503131e-16, 0, 0, 0, 0, 1), ["face_vertex_count"] = { 4}, ["vertices_by_index"] = { 0, 1, 3, 2}, ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, @@ -102,7 +112,7 @@ RdlMeshGeometry("/wallGeom/_") { ["primitive_attributes"] = { UserData("/wallGeom/_.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/box0"), RdlMeshGeometry("/box1"), RdlMeshGeometry("/box2"), @@ -115,52 +125,60 @@ GeometrySet("allGeometry") { RdlMeshGeometry("/wallGeom/_"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/box0"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box1"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box2"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box3"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box4"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box5"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box6"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box7"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/floorGeom/_"), "", BaseMaterial("/surfacing_floor/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/wallGeom/_"), "", BaseMaterial("/surfacing_floor/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/box0"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box1"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box2"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box3"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box4"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box5"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box6"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box7"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/floorGeom/_"), "", DwaBaseMaterial("/surfacing_floor/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/wallGeom/_"), "", DwaBaseMaterial("/surfacing_floor/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -BaseMaterial("/surfacing_box/baseMtl") { +DwaBaseMaterial("/surfacing_box/baseMtl") { } -BaseMaterial("/surfacing_floor/baseMtl") { - ["diffuse_color"] = bind(ImageMap("/surfacing_floor/floorMap.out"), Rgb(1, 1, 1)), - ["specular_factor"] = 0, +DwaBaseMaterial("/surfacing_floor/baseMtl") { + ["albedo"] = bind(ImageMap("/surfacing_floor/floorMap"), Rgb(1, 1, 1)), } EnvLight("/l0") { } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet0C05F3") { EnvLight("/l0"), } -PerspectiveCamera("/camera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1)), +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1), ["near"] = 1.25, ["far"] = 1.875, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, - ["focal"] = blur(10, 10), - ["film_width_aperture"] = 10, + ["focal"] = 10, + ["film_width_aperture"] = 10.0062494, } -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1)), +PerspectiveCamera("/camera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1), ["near"] = 1.25, ["far"] = 1.875, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, - ["focal"] = blur(10, 10), - ["film_width_aperture"] = 10, + ["focal"] = 10, + ["film_width_aperture"] = 10.0062494, +} + +UserData("/floorGeom/_.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 0}, + ["rate"] = "constant", } UserData("/box5.primvars:primId") { @@ -169,9 +187,9 @@ UserData("/box5.primvars:primId") { ["rate"] = "constant", } -UserData("/box7.primvars:primId") { +UserData("/box2.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 9}, + ["float_values_0"] = { 4}, ["rate"] = "constant", } @@ -181,27 +199,47 @@ UserData("/box3.primvars:primId") { ["rate"] = "constant", } -UserData("/box0.primvars:primId") { +UserData("/box4.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 2}, + ["float_values_0"] = { 6}, ["rate"] = "constant", } -UserData("/floorGeom/_.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, - ["rate"] = "constant", +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } -UserData("/wallGeom/_.primvars:primId") { +UserData("/box0.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 1}, + ["float_values_0"] = { 2}, ["rate"] = "constant", } -UserData("/box4.primvars:primId") { +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +UserData("/wallGeom/_.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 6}, + ["float_values_0"] = { 1}, ["rate"] = "constant", } @@ -217,8 +255,15 @@ UserData("/box6.primvars:primId") { ["rate"] = "constant", } -UserData("/box2.primvars:primId") { +UserData("/box7.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 4}, + ["float_values_0"] = { 9}, ["rate"] = "constant", } + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/camera/camera_clipping.usd b/hats/camera/camera_clipping.usd index 440dbfd..c51ef50 100644 --- a/hats/camera/camera_clipping.usd +++ b/hats/camera/camera_clipping.usd @@ -13,70 +13,72 @@ def DomeLight "l0" { } -def "floorGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) +def "floorGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ + prepend apiSchemas = ["MaterialBindingAPI"] ) { float3 xformOp:translate = (0, -0.5, 0.5) uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } -def "wallGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) +def "wallGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ + prepend apiSchemas = ["MaterialBindingAPI"]) { float xformOp:rotateX = 90 uniform token[] xformOpOrder = ["xformOp:rotateX"] rel material:binding = } -def Cube "box0" +def Cube "box0" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (-0.4375, -0.4375, 0.9375) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box1" +def Cube "box1" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (-0.3125, -0.4375, 0.8125) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box2" +def Cube "box2" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (-0.1875, -0.4375, 0.6875) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box3" +def Cube "box3" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (-0.0625, -0.4375, 0.5625) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box4" +def Cube "box4" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (0.0625, -0.4375, 0.4375) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box5" +def Cube "box5" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (0.1875, -0.4375, 0.3125) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box6" +def Cube "box6" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (0.3125, -0.4375, 0.1875) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box7" +def Cube "box7" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (0.4375, -0.4375, 0.0625) uniform token[] xformOpOrder = ["xformOp:translate"] @@ -90,10 +92,9 @@ def Material "surfacing_floor" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface - color3f inputs:diffuse_color.connect = <../floorMap.outputs:out> - float inputs:specular_factor = 0 + color3f inputs:albedo.connect = <../floorMap.outputs:out> } def Shader "floorMap" @@ -112,7 +113,7 @@ def Material "surfacing_box" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/camera/camera_dof.canonical.rdla b/hats/camera/camera_dof.canonical.rdla index 2c238e4..dd9c207 100644 --- a/hats/camera/camera_dof.canonical.rdla +++ b/hats/camera/camera_dof.canonical.rdla @@ -1,89 +1,99 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 1467, ["enable_motion_blur"] = false, } -ImageMap("/surfacing_floor/floorMap.out") { +ImageMap("/surfacing_floor/floorMap") { ["wrap_around"] = false, ["texture"] = "/work/gshad/moonshine_test/rats_data/camera/perspective/clipping/misc/rgb_checker.tx", ["gamma"] = "on", } RdlMeshGeometry("/box0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4375, -0.4375, 0.9375, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4375, -0.4375, 0.9375, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.4375, -0.4375, 0.9375, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box0.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box1") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.3125, -0.4375, 0.8125, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.3125, -0.4375, 0.8125, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.3125, -0.4375, 0.8125, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box1.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box2") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.1875, -0.4375, 0.6875, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.1875, -0.4375, 0.6875, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.1875, -0.4375, 0.6875, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box2.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box3") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0625, -0.4375, 0.5625, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0625, -0.4375, 0.5625, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -0.0625, -0.4375, 0.5625, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box3.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box4") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0625, -0.4375, 0.4375, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0625, -0.4375, 0.4375, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.0625, -0.4375, 0.4375, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box4.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box5") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.1875, -0.4375, 0.3125, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.1875, -0.4375, 0.3125, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.1875, -0.4375, 0.3125, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box5.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box6") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.3125, -0.4375, 0.1875, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.3125, -0.4375, 0.1875, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.3125, -0.4375, 0.1875, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box6.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/box7") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.4375, -0.4375, 0.0625, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.4375, -0.4375, 0.0625, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.4375, -0.4375, 0.0625, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 0, 6, 5, 1, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5}, ["vertex_list_0"] = { Vec3(0.0625, 0.0625, 0.0625), Vec3(-0.0625, 0.0625, 0.0625), Vec3(-0.0625, -0.0625, 0.0625), Vec3(0.0625, -0.0625, 0.0625), Vec3(-0.0625, -0.0625, -0.0625), Vec3(-0.0625, 0.0625, -0.0625), Vec3(0.0625, 0.0625, -0.0625), Vec3(0.0625, -0.0625, -0.0625)}, ["subd_scheme"] = "bilinear", ["primitive_attributes"] = { UserData("/box7.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/floorGeom/_") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.5, 0.5, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.5, 0.5, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -0.5, 0.5, 1), ["face_vertex_count"] = { 4}, ["vertices_by_index"] = { 0, 1, 3, 2}, ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, @@ -93,7 +103,7 @@ RdlMeshGeometry("/floorGeom/_") { } RdlMeshGeometry("/wallGeom/_") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 2.2204460492503131e-16, 1, 0, 0, -1, 2.2204460492503131e-16, 0, 0, 0, 0, 1), Mat4(1, 0, 0, 0, 0, 2.2204460492503131e-16, 1, 0, 0, -1, 2.2204460492503131e-16, 0, 0, 0, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 2.2204460492503131e-16, 1, 0, 0, -1, 2.2204460492503131e-16, 0, 0, 0, 0, 1), ["face_vertex_count"] = { 4}, ["vertices_by_index"] = { 0, 1, 3, 2}, ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, @@ -102,7 +112,7 @@ RdlMeshGeometry("/wallGeom/_") { ["primitive_attributes"] = { UserData("/wallGeom/_.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/box0"), RdlMeshGeometry("/box1"), RdlMeshGeometry("/box2"), @@ -115,67 +125,75 @@ GeometrySet("allGeometry") { RdlMeshGeometry("/wallGeom/_"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/box0"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box1"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box2"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box3"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box4"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box5"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box6"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/box7"), "", BaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/floorGeom/_"), "", BaseMaterial("/surfacing_floor/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/wallGeom/_"), "", BaseMaterial("/surfacing_floor/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/box0"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box1"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box2"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box3"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box4"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box5"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box6"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box7"), "", DwaBaseMaterial("/surfacing_box/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/floorGeom/_"), "", DwaBaseMaterial("/surfacing_floor/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/wallGeom/_"), "", DwaBaseMaterial("/surfacing_floor/baseMtl"), LightSet("LightSet0C05F3"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -BaseMaterial("/surfacing_box/baseMtl") { +DwaBaseMaterial("/surfacing_box/baseMtl") { } -BaseMaterial("/surfacing_floor/baseMtl") { - ["diffuse_color"] = bind(ImageMap("/surfacing_floor/floorMap.out"), Rgb(1, 1, 1)), - ["specular_factor"] = 0, +DwaBaseMaterial("/surfacing_floor/baseMtl") { + ["albedo"] = bind(ImageMap("/surfacing_floor/floorMap"), Rgb(1, 1, 1)), } EnvLight("/l0") { } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet0C05F3") { EnvLight("/l0"), } -PerspectiveCamera("/camera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1)), +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1), ["near"] = 0.100000001, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, - ["focal"] = blur(10, 10), - ["film_width_aperture"] = 10, + ["focal"] = 10, + ["film_width_aperture"] = 10.0062494, ["dof"] = true, ["dof_aperture"] = 4, ["dof_focus_distance"] = 1, } -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1)), +PerspectiveCamera("/camera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1), ["near"] = 0.100000001, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, - ["focal"] = blur(10, 10), - ["film_width_aperture"] = 10, + ["focal"] = 10, + ["film_width_aperture"] = 10.0062494, ["dof"] = true, ["dof_aperture"] = 4, ["dof_focus_distance"] = 1, } +UserData("/floorGeom/_.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 0}, + ["rate"] = "constant", +} + UserData("/box5.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 7}, ["rate"] = "constant", } -UserData("/box7.primvars:primId") { +UserData("/box2.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 9}, + ["float_values_0"] = { 4}, ["rate"] = "constant", } @@ -185,27 +203,47 @@ UserData("/box3.primvars:primId") { ["rate"] = "constant", } -UserData("/box0.primvars:primId") { +UserData("/box4.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 2}, + ["float_values_0"] = { 6}, ["rate"] = "constant", } -UserData("/floorGeom/_.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, - ["rate"] = "constant", +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } -UserData("/wallGeom/_.primvars:primId") { +UserData("/box0.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 1}, + ["float_values_0"] = { 2}, ["rate"] = "constant", } -UserData("/box4.primvars:primId") { +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +UserData("/wallGeom/_.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 6}, + ["float_values_0"] = { 1}, ["rate"] = "constant", } @@ -221,8 +259,15 @@ UserData("/box6.primvars:primId") { ["rate"] = "constant", } -UserData("/box2.primvars:primId") { +UserData("/box7.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 4}, + ["float_values_0"] = { 9}, ["rate"] = "constant", } + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/camera/camera_dof.usd b/hats/camera/camera_dof.usd index d06c522..62988d0 100644 --- a/hats/camera/camera_dof.usd +++ b/hats/camera/camera_dof.usd @@ -15,70 +15,72 @@ def DomeLight "l0" { } -def "floorGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) +def "floorGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ + prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (0, -0.5, 0.5) uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } -def "wallGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) +def "wallGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ + prepend apiSchemas = ["MaterialBindingAPI"]) { float xformOp:rotateX = 90 uniform token[] xformOpOrder = ["xformOp:rotateX"] rel material:binding = } -def Cube "box0" +def Cube "box0" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (-0.4375, -0.4375, 0.9375) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box1" +def Cube "box1" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (-0.3125, -0.4375, 0.8125) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box2" +def Cube "box2" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (-0.1875, -0.4375, 0.6875) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box3" +def Cube "box3" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (-0.0625, -0.4375, 0.5625) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box4" +def Cube "box4" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (0.0625, -0.4375, 0.4375) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box5" +def Cube "box5" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (0.1875, -0.4375, 0.3125) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box6" +def Cube "box6" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (0.3125, -0.4375, 0.1875) uniform token[] xformOpOrder = ["xformOp:translate"] double size = 0.125 rel material:binding = } -def Cube "box7" +def Cube "box7" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3 xformOp:translate = (0.4375, -0.4375, 0.0625) uniform token[] xformOpOrder = ["xformOp:translate"] @@ -92,10 +94,9 @@ def Material "surfacing_floor" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface - color3f inputs:diffuse_color.connect = <../floorMap.outputs:out> - float inputs:specular_factor = 0 + color3f inputs:albedo.connect = <../floorMap.outputs:out> } def Shader "floorMap" @@ -114,7 +115,7 @@ def Material "surfacing_box" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/camera/camera_motion_blur.canonical.rdla b/hats/camera/camera_motion_blur.canonical.rdla index 040f94e..23ee97a 100644 --- a/hats/camera/camera_motion_blur.canonical.rdla +++ b/hats/camera/camera_motion_blur.canonical.rdla @@ -1,7 +1,9 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), - ["enable_motion_blur"] = false, + ["frame"] = 4, + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 540, } RdlMeshGeometry("/grid/mesh_0") { @@ -15,12 +17,12 @@ RdlMeshGeometry("/grid/mesh_0") { ["smooth_normal"] = false, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/grid/mesh_0"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/grid/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/grid/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1") { @@ -28,28 +30,63 @@ UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1") { ["emissiveColor"] = bind(undef(), Rgb(1, 1, 1)), } -EnvLight("defaultLight") { - ["max_shadow_distance"] = 100, +EnvLight("/defaultLight") { } -LightSet("LightSet0E11AB") { - EnvLight("defaultLight"), +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + +LightSet("LightSet3AC404") { + EnvLight("/defaultLight"), } PerspectiveCamera("/camera") { - ["node_xform"] = blur(Mat4(0.44838321609003223, 0.89384142415126377, 0, 0, -0.89384142415126377, 0.44838321609003223, 0, 0, 0, 0, 1, 0, 0, 0.59200000000000041, 10, 1), Mat4(0.44838321609003223, 0.89384142415126377, 0, 0, -0.89384142415126377, 0.44838321609003223, 0, 0, 0, 0, 1, 0, 0, 0.59200000000000041, 10, 1)), + ["node_xform"] = blur(Mat4(0.44838321609003218, 0.89384142415126366, -0, 0, -0.89384142415126366, 0.44838321609003218, 0, 0, 0, -0, 1, 0, 0, 0.59200000000000041, 10, 1), Mat4(0.34318784763569554, 0.93926678916864648, -0, 0, -0.93926678916864648, 0.34318784763569554, 0, 0, 0, -0, 1, 0, -2.7755575615628914e-17, 0.44400000000000028, 10, 1)), ["far"] = 1000000, ["focal"] = blur(0.5, 0.5), ["film_width_aperture"] = 0.209549993, } -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(0.44838321609003223, 0.89384142415126377, 0, 0, -0.89384142415126377, 0.44838321609003223, 0, 0, 0, 0, 1, 0, 0, 0.59200000000000041, 10, 1), Mat4(0.44838321609003223, 0.89384142415126377, 0, 0, -0.89384142415126377, 0.44838321609003223, 0, 0, 0, 0, 1, 0, 0, 0.59200000000000041, 10, 1)), +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = blur(Mat4(0.44838321609003218, 0.89384142415126366, -0, 0, -0.89384142415126366, 0.44838321609003218, 0, 0, 0, -0, 1, 0, 0, 0.59200000000000041, 10, 1), Mat4(0.34318784763569554, 0.93926678916864648, -0, 0, -0.93926678916864648, 0.34318784763569554, 0, 0, 0, -0, 1, 0, -2.7755575615628914e-17, 0.44400000000000028, 10, 1)), ["far"] = 1000000, ["focal"] = blur(0.5, 0.5), ["film_width_aperture"] = 0.209549993, } +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/grid/mesh_0.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 0}, diff --git a/hats/camera/camera_motion_blur.usd b/hats/camera/camera_motion_blur.usd index 9609084..2f57202 100644 --- a/hats/camera/camera_motion_blur.usd +++ b/hats/camera/camera_motion_blur.usd @@ -90,3 +90,5 @@ def Camera "camera" ( uniform token[] xformOpOrder = ["xformOp:transform"] } +def DomeLight "defaultLight" { +} diff --git a/hats/geometry/geometry_anim_points.usd b/hats/geometry/geometry_anim_points.usd new file mode 100644 index 0000000..5af89c0 --- /dev/null +++ b/hats/geometry/geometry_anim_points.usd @@ -0,0 +1,26 @@ +#usda 1.0 +( + startTimeCode = 1 + endTimeCode = 10 +) + +def Plane "plane" +{ + double width = 13 + double width.timeSamples = { + 1: 1, + 10: 10 + } +} + +def Camera "camera" +{ + uniform token[] xformOpOrder = ["xformOp:translate"] + float3 xformOp:translate = (0, 0, 50) + double shutter:open = -0.25 + double shutter:close = 0.25 +} + +def DomeLight "defaultLight" +{ +} \ No newline at end of file diff --git a/hats/geometry/geometry_basis_curves.canonical.rdla b/hats/geometry/geometry_basis_curves.canonical.rdla index f6c01e9..39ed33b 100644 --- a/hats/geometry/geometry_basis_curves.canonical.rdla +++ b/hats/geometry/geometry_basis_curves.canonical.rdla @@ -1,15 +1,17 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } @@ -39,27 +41,30 @@ RdlCurveGeometry("/linear") { ["primitive_attributes"] = { UserData("/linear.primvars:displayColor"), UserData("/linear.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlCurveGeometry("/bezier"), RdlCurveGeometry("/bspline"), RdlCurveGeometry("/linear"), } -Layer("defaultLayer") { - {RdlCurveGeometry("/bezier"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet011CB2"), undef(), undef(), undef(), undef(), undef()}, - {RdlCurveGeometry("/bspline"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet011CB2"), undef(), undef(), undef(), undef(), undef()}, - {RdlCurveGeometry("/linear"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet011CB2"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlCurveGeometry("/bezier"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet011CB2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlCurveGeometry("/bspline"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet011CB2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlCurveGeometry("/linear"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet011CB2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } EnvLight("/dome") { } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet011CB2") { EnvLight("/dome"), } @@ -70,21 +75,28 @@ PerspectiveCamera("/camera") { ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 3, 30, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 3, 30, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, } -UserData("/bspline.primvars:primId") { +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/bezier.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 1}, + ["float_values_0"] = { 2}, ["rate"] = "constant", } @@ -94,21 +106,41 @@ UserData("/linear.primvars:displayColor") { ["rate"] = "constant", } -UserData("/bezier.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(0, 0, 1), Rgb(0, 1, 0), Rgb(0, 1, 1), Rgb(1, 0, 0), Rgb(1, 0, 1), Rgb(1, 1, 0), Rgb(1, 1, 1)}, - ["rate"] = "vertex", +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } -UserData("/bspline.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(0, 1, 0)}, +UserData("/bspline.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, ["rate"] = "constant", } -UserData("/bezier.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 2}, +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/bspline.primvars:displayColor") { + ["color_key"] = "displayColor", + ["color_values_0"] = { Rgb(0, 1, 0)}, ["rate"] = "constant", } @@ -117,3 +149,9 @@ UserData("/linear.primvars:primId") { ["float_values_0"] = { 0}, ["rate"] = "constant", } + +UserData("/bezier.primvars:displayColor") { + ["color_key"] = "displayColor", + ["color_values_0"] = { Rgb(0, 0, 1), Rgb(0, 1, 0), Rgb(0, 1, 1), Rgb(1, 0, 0), Rgb(1, 0, 1), Rgb(1, 1, 0), Rgb(1, 1, 1)}, + ["rate"] = "vertex", +} diff --git a/hats/geometry/geometry_instances.canonical.rdla b/hats/geometry/geometry_instances.canonical.rdla index 27ae289..67a7fe3 100644 --- a/hats/geometry/geometry_instances.canonical.rdla +++ b/hats/geometry/geometry_instances.canonical.rdla @@ -1,117 +1,154 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { - ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), +AttributeMap("/DEFAULT/displayColorMap") { + ["default_value"] = Rgb(0.5, 0.5, 0.5), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } -RdlMeshGeometry("/__Prototype_1/pointInstancer/proto0_prototype_id0") { +RdlInstancerGeometry("pointInstancer/Instancer_592803668218626318") { + ["references"] = { RdlInstancerGeometry("pointInstancer/prototype/Instancer")}, + ["method"] = "xform list", + ["xform_list"] = { Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 5, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 15, 1), Mat4(0.49999999999999989, 0.5, -0.70710678118654757, 0, -0.14644660940672621, 0.85355339059327373, 0.5, 0, 0.85355339059327384, -0.14644660940672621, 0.49999999999999989, 0, 0, 0, 20, 1)}, + ["primitive_attributes"] = { UserData("pointInstancer/instanceId_592803668218626318"), UserData("pointInstancer/Instancer.primvars:prim_id_592803668218626318")}, + ["use_reference_xforms"] = true, +} + +RdlMeshGeometry("pointInstancer/prototype") { ["face_vertex_count"] = { 4, 3, 3, 3, 3}, ["vertices_by_index"] = { 0, 1, 2, 3, 1, 0, 4, 2, 1, 4, 3, 2, 4, 0, 3, 4}, ["vertex_list_0"] = { Vec3(1, 0, 1), Vec3(-1, 0, 1), Vec3(-1, 0, -1), Vec3(1, 0, -1), Vec3(0, 2, 0)}, ["normal_list"] = { Vec3(0, -1, 0), Vec3(0, 0.449999988, 0.889999986), Vec3(-0.889999986, 0.449999988, 0), Vec3(0, 0.449999988, -0.889999986), Vec3(0.889999986, 0.449999988, 0)}, ["is_subd"] = false, ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0.primvars:primId")}, + ["primitive_attributes"] = { UserData("pointInstancer/prototype.primvars:primId")}, ["smooth_normal"] = false, } -RdlInstancerGeometry("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer") { - ["references"] = { RdlMeshGeometry("/__Prototype_1/pointInstancer/proto0_prototype_id0")}, +RdlInstancerGeometry("pointInstancer/prototype/Instancer") { + ["references"] = { RdlMeshGeometry("pointInstancer/prototype")}, ["positions"] = { Vec3(0, 0, 0), Vec3(5, 0, 0), Vec3(10, 0, 0), Vec3(0, 5, 0), Vec3(5, 5, 0), Vec3(10, 5, 0), Vec3(0, 10, 0), Vec3(5, 10, 0), Vec3(10, 10, 0), Vec3(0, 15, 0), Vec3(5, 15, 0), Vec3(10, 15, 0)}, ["orientations"] = { Vec4(0, 0, 1, 0), Vec4(0, 0, 0.70703125, 0.70703125), Vec4(0.70703125, 0, 0.70703125, 0), Vec4(0, 0.70703125, 0.70703125, 0), Vec4(0, 0, 1, 0), Vec4(0.577148438, 0.577148438, 0.577148438, 0), Vec4(0, 0.577148438, 0.577148438, 0.577148438), Vec4(0.577148438, 0, 0.577148438, 0.577148438), Vec4(0, 0, 1, 0), Vec4(0.5, 0.5, 0.5, 0.5), Vec4(0.5, 0.5, 0.5, -0.5), Vec4(0.5, 0.5, -0.5, -0.5)}, - ["primitive_attributes"] = { UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0/instanceId"), UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer.primvars:prim_id"), UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer.primvars:displayColor")}, + ["primitive_attributes"] = { UserData("pointInstancer/prototype/instanceId"), UserData("pointInstancer/prototype/Instancer.primvars:prim_id"), UserData("pointInstancer/prototype/Instancer.primvars:displayColor")}, ["use_reference_xforms"] = true, } -RdlInstancerGeometry("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer/Instancer") { - ["references"] = { RdlInstancerGeometry("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer")}, - ["method"] = "xform list", - ["xform_list"] = { Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 5, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 15, 1), Mat4(0.49999999999999989, 0.5, -0.70710678118654757, 0, -0.14644660940672621, 0.85355339059327373, 0.5, 0, 0.85355339059327384, -0.14644660940672621, 0.49999999999999989, 0, 0, 0, 20, 1)}, - ["primitive_attributes"] = { UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer/instanceId"), UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer/Instancer.primvars:prim_id")}, - ["use_reference_xforms"] = true, +GeometrySet("/DEFAULT/allGeometry") { + RdlInstancerGeometry("pointInstancer/Instancer_592803668218626318"), + RdlMeshGeometry("pointInstancer/prototype"), + RdlInstancerGeometry("pointInstancer/prototype/Instancer"), } -GeometrySet("allGeometry") { - RdlMeshGeometry("/__Prototype_1/pointInstancer/proto0_prototype_id0"), - RdlInstancerGeometry("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer"), - RdlInstancerGeometry("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer/Instancer"), +Layer("/DEFAULT/defaultLayer") { + {RdlInstancerGeometry("pointInstancer/Instancer_592803668218626318"), "", undef(), undef(), undef(), undef(), undef(), undef(), undef()}, + {RdlMeshGeometry("pointInstancer/prototype"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlInstancerGeometry("pointInstancer/prototype/Instancer"), "", undef(), undef(), undef(), undef(), undef(), undef(), undef()}, } -Layer("defaultLayer") { - {RdlMeshGeometry("/__Prototype_1/pointInstancer/proto0_prototype_id0"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlInstancerGeometry("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer"), "", undef(), undef(), undef(), undef(), undef(), undef(), undef()}, - {RdlInstancerGeometry("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer/Instancer"), "", undef(), undef(), undef(), undef(), undef(), undef(), undef()}, +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), + ["roughness"] = 0.300000012, + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), - ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), +EnvLight("/defaultLight") { } -EnvLight("defaultLight") { - ["max_shadow_distance"] = 100, +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -LightSet("LightSet0E11AB") { - EnvLight("defaultLight"), +LightSet("LightSet3AC404") { + EnvLight("/defaultLight"), } -PerspectiveCamera("/app_scene/free_cam") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3.5576245314246431, 8.4505342142633246, 100.46759816942536, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3.5576245314246431, 8.4505342142633246, 100.46759816942536, 1)), +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3.5576245314246431, 8.4505342142633246, 100.46759816942536, 1), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, - ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["focal"] = 50, + ["film_width_aperture"] = 20.9702396, } -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3.5576245314246431, 8.4505342142633246, 100.46759816942536, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3.5576245314246431, 8.4505342142633246, 100.46759816942536, 1)), +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3.5576245314246431, 8.4505342142633246, 100.46759816942536, 1), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, - ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["focal"] = 50, + ["film_width_aperture"] = 20.9702396, } -UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer/instanceId") { - ["float_key"] = "instanceIdA", - ["float_values_0"] = { 0, 12, 24, 36, 48}, +UserData("pointInstancer/prototype.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } -UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer.primvars:displayColor") { +UserData("pointInstancer/prototype/Instancer.primvars:displayColor") { ["color_key"] = "displayColor", ["color_values_0"] = { Rgb(0, 0, 1), Rgb(0, 1, 0), Rgb(0, 1, 1), Rgb(1, 0, 0), Rgb(1, 0, 1), Rgb(1, 1, 0), Rgb(1, 1, 1), Rgb(0.5, 0.5, 1), Rgb(0.5, 1, 0.5), Rgb(0.5, 1, 1), Rgb(1, 0.5, 0.5), Rgb(1, 0.5, 1)}, } -UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer/Instancer.primvars:prim_id") { - ["float_key"] = "prim_id", - ["float_values_0"] = { -2.31807195e-12}, +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } -UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0/Instancer.primvars:prim_id") { +UserData("pointInstancer/Instancer.primvars:prim_id_592803668218626318") { ["float_key"] = "prim_id", - ["float_values_0"] = { -4297.25195}, + ["float_values_0"] = { -482422.125}, +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", } -UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0/instanceId") { +UserData("pointInstancer/prototype/instanceId") { ["float_key"] = "instanceId", ["float_values_0"] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, } -UserData("/__Prototype_1/pointInstancer/proto0_prototype_id0.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, - ["rate"] = "constant", +UserData("pointInstancer/instanceId_592803668218626318") { + ["float_key"] = "instanceIdA", + ["float_values_0"] = { 0, 12, 24, 36, 48}, +} + +UserData("pointInstancer/prototype/Instancer.primvars:prim_id") { + ["float_key"] = "prim_id", + ["float_values_0"] = { 4.5702277e-32}, } diff --git a/hats/geometry/geometry_instances.usd b/hats/geometry/geometry_instances.usd index 18a27e5..42f51c9 100644 --- a/hats/geometry/geometry_instances.usd +++ b/hats/geometry/geometry_instances.usd @@ -73,3 +73,6 @@ def Xform "Points5" ( double3 xformOp:rotateXYZ = (45, 45, 45) } +def DomeLight "defaultLight" +{ +} \ No newline at end of file diff --git a/hats/geometry/geometry_mb_points.usd b/hats/geometry/geometry_mb_points.usd new file mode 100644 index 0000000..e25d4ee --- /dev/null +++ b/hats/geometry/geometry_mb_points.usd @@ -0,0 +1,53 @@ +#usda 1.0 +( + startTimeCode = 1 + endTimeCode = 8 +) + +def Points "p0" +{ + point3f[] points = [(-2, 0, 0)] ( + interpolation = "vertex" + ) + float[] widths = [1] ( + interpolation = "vertex" + ) + +} +def Points "p1" +{ + point3f[] points = [(2, 0, 0)] ( + interpolation = "vertex" + ) + float[] widths = [1] ( + interpolation = "vertex" + ) +} + +def Points "p" +{ + # at frame 4, with open=-0.25 and close=+0.25, blur should start at (-2,0,0) and go to (+2,0,0) + point3f[] points ( + interpolation = "vertex" + ) + point3f[] points.timeSamples = { + 3: [(-8, 0, 0)], + 4: [(0, 0, 0)], + 5: [(8, 0, 0)], + } + + float[] widths = [1] ( + interpolation = "vertex" + ) +} +def Camera "camera" +{ + uniform token[] xformOpOrder = ["xformOp:translate"] + float3 xformOp:translate = (0, 0, 50) + double shutter:open = -0.25 + double shutter:close = 0.25 +} + +def DomeLight "defaultLight" +{ +} \ No newline at end of file diff --git a/hats/geometry/geometry_mb_xform.usd b/hats/geometry/geometry_mb_xform.usd new file mode 100644 index 0000000..f35c212 --- /dev/null +++ b/hats/geometry/geometry_mb_xform.usd @@ -0,0 +1,39 @@ +#usda 1.0 +( + startTimeCode = 1 + endTimeCode = 8 +) + +def Sphere "s0" +{ + float3 xformOp:translate = (-2, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] + +} +def Sphere "s1" +{ + float3 xformOp:translate = (2, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] +} + +def Sphere "s" +{ + # at frame 4, with open=-0.25 and close=+0.25, blur should start at (-2,0,0) and go to (+2,0,0) + float3 xformOp:translate.timeSamples = { + 3: (-8, 0, 0), + 4: (0, 0, 0), + 5: (8, 0, 0), + } + uniform token[] xformOpOrder = ["xformOp:translate"] +} +def Camera "camera" +{ + uniform token[] xformOpOrder = ["xformOp:translate"] + float3 xformOp:translate = (0, 0, 50) + double shutter:open = -0.25 + double shutter:close = 0.25 +} + +def DomeLight "defaultLight" +{ +} \ No newline at end of file diff --git a/hats/geometry/geometry_motion_blur.canonical.rdla b/hats/geometry/geometry_motion_blur.canonical.rdla index e5687fd..9f678e7 100644 --- a/hats/geometry/geometry_motion_blur.canonical.rdla +++ b/hats/geometry/geometry_motion_blur.canonical.rdla @@ -1,15 +1,17 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), - ["enable_motion_blur"] = false, + ["frame"] = 4, + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 540, } -UsdPrimvarReader_float3("/materials/usdpreviewsurface1/usdprimvarreader1.result") { +UsdPrimvarReader_float3("/materials/usdpreviewsurface1/usdprimvarreader1") { ["varname"] = "displayColor", } RdlCurveGeometry("/curves_acceleration/curve_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1), ["curves_vertex_count"] = { 10, 10, 10, 10, 10}, ["vertex_list_0"] = { Vec3(-0.600000024, -0.5, 0), Vec3(-0.600000024, -0.5, 0), Vec3(-0.600000024, -0.5, 0), Vec3(-0.800000012, -0.300000012, 0), Vec3(-0.400000036, -0.099999994, 0), Vec3(-0.800000012, 0.100000024, 0), Vec3(-0.400000036, 0.300000012, 0), Vec3(-0.800000012, 0.5, 0), Vec3(-0.800000012, 0.5, 0), Vec3(-0.800000012, 0.5, 0), Vec3(-0.300000012, -0.649999976, 0), Vec3(-0.300000012, -0.649999976, 0), Vec3(-0.300000012, -0.649999976, 0), Vec3(-0.560000002, -0.390000015, 0), Vec3(-0.0400000215, -0.130000025, 0), Vec3(-0.560000002, 0.129999995, 0), Vec3(-0.0400000215, 0.389999986, 0), Vec3(-0.560000002, 0.649999976, 0), Vec3(-0.560000002, 0.649999976, 0), Vec3(-0.560000002, 0.649999976, 0), Vec3(0, -0.845000029, 0), Vec3(0, -0.845000029, 0), Vec3(0, -0.845000029, 0), Vec3(-0.338000029, -0.506999969, 0), Vec3(0.338000059, -0.16899994, 0), Vec3(-0.338000029, 0.16900003, 0), Vec3(0.338000059, 0.507000089, 0), Vec3(-0.338000029, 0.845000029, 0), Vec3(-0.338000029, 0.845000029, 0), Vec3(-0.338000029, 0.845000029, 0), Vec3(0.299999952, -1.09850001, 0), Vec3(0.299999952, -1.09850001, 0), Vec3(0.299999952, -1.09850001, 0), Vec3(-0.139400065, -0.659099996, 0), Vec3(0.739400029, -0.219699979, 0), Vec3(-0.139400065, 0.219700098, 0), Vec3(0.739400029, 0.659100056, 0), Vec3(-0.139400065, 1.09850001, 0), Vec3(-0.139400065, 1.09850001, 0), Vec3(-0.139400065, 1.09850001, 0), Vec3(0.600000024, -1.42805004, 0), Vec3(0.600000024, -1.42805004, 0), Vec3(0.600000024, -1.42805004, 0), Vec3(0.0287799835, -0.856829941, 0), Vec3(1.17122006, -0.285609901, 0), Vec3(0.0287799835, 0.285610139, 0), Vec3(1.17122006, 0.85683012, 0), Vec3(0.0287799835, 1.42805004, 0), Vec3(0.0287799835, 1.42805004, 0), Vec3(0.0287799835, 1.42805004, 0)}, ["velocity_list_0"] = { Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0)}, @@ -20,7 +22,7 @@ RdlCurveGeometry("/curves_acceleration/curve_0") { } RdlCurveGeometry("/curves_frame_delta/curve_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 7, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 7, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 7, 0, 1), ["curves_vertex_count"] = { 10, 10, 10, 10, 10}, ["vertex_list_0"] = { Vec3(0.759526491, -0.181987703, 0), Vec3(0.759526491, -0.181987703, 0), Vec3(0.759526491, -0.181987703, 0), Vec3(0.718794107, -0.461882085, 0), Vec3(0.319318712, -0.260836333, 0), Vec3(0.398167282, -0.701044083, 0), Vec3(-0.00130808353, -0.499998331, 0), Vec3(0.0775405169, -0.940206051, 0), Vec3(0.0775405169, -0.940206051, 0), Vec3(0.0775405169, -0.940206051, 0), Vec3(0.700389981, 0.148168132, 0), Vec3(0.700389981, 0.148168132, 0), Vec3(0.700389981, 0.148168132, 0), Vec3(0.64743793, -0.215694562, 0), Vec3(0.128119931, 0.0456649661, 0), Vec3(0.230623096, -0.526605129, 0), Vec3(-0.288694888, -0.265245616, 0), Vec3(-0.186191708, -0.837515712, 0), Vec3(-0.186191708, -0.837515712, 0), Vec3(-0.186191708, -0.837515712, 0), Vec3(0.677324116, 0.505229712, 0), Vec3(0.677324116, 0.505229712, 0), Vec3(0.677324116, 0.505229712, 0), Vec3(0.608486295, 0.0322081447, 0), Vec3(-0.0666271448, 0.371975601, 0), Vec3(0.0666270554, -0.371975631, 0), Vec3(-0.608486414, -0.0322081745, 0), Vec3(-0.475232214, -0.776159406, 0), Vec3(-0.475232214, -0.776159406, 0), Vec3(-0.475232214, -0.776159406, 0), Vec3(0.701149821, 0.897268653, 0), Vec3(0.701149821, 0.897268653, 0), Vec3(0.701149821, 0.897268653, 0), Vec3(0.611660779, 0.282340705, 0), Vec3(-0.265986711, 0.724038303, 0), Vec3(-0.0927563459, -0.243098274, 0), Vec3(-0.97040379, 0.198599398, 0), Vec3(-0.797173321, -0.768537104, 0), Vec3(-0.797173321, -0.768537104, 0), Vec3(-0.797173321, -0.768537104, 0), Vec3(0.785934746, 1.33477843, 0), Vec3(0.785934746, 1.33477843, 0), Vec3(0.785934746, 1.33477843, 0), Vec3(0.669598877, 0.535371959, 0), Vec3(-0.471342802, 1.10957885, 0), Vec3(-0.246143341, -0.147698641, 0), Vec3(-1.38708496, 0.426508307, 0), Vec3(-1.1618855, -0.830769122, 0), Vec3(-1.1618855, -0.830769122, 0), Vec3(-1.1618855, -0.830769122, 0)}, ["radius_list"] = { 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004}, @@ -29,7 +31,7 @@ RdlCurveGeometry("/curves_frame_delta/curve_0") { } RdlCurveGeometry("/curves_hermite/curve_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -2, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -2, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, -2, 0, 1), ["curves_vertex_count"] = { 10, 10, 10, 10, 10}, ["vertex_list_0"] = { Vec3(0.759526491, -0.181987703, 0), Vec3(0.759526491, -0.181987703, 0), Vec3(0.759526491, -0.181987703, 0), Vec3(0.718794107, -0.461882085, 0), Vec3(0.319318712, -0.260836333, 0), Vec3(0.398167282, -0.701044083, 0), Vec3(-0.00130808353, -0.499998331, 0), Vec3(0.0775405169, -0.940206051, 0), Vec3(0.0775405169, -0.940206051, 0), Vec3(0.0775405169, -0.940206051, 0), Vec3(0.700389981, 0.148168132, 0), Vec3(0.700389981, 0.148168132, 0), Vec3(0.700389981, 0.148168132, 0), Vec3(0.64743793, -0.215694562, 0), Vec3(0.128119931, 0.0456649661, 0), Vec3(0.230623096, -0.526605129, 0), Vec3(-0.288694888, -0.265245616, 0), Vec3(-0.186191708, -0.837515712, 0), Vec3(-0.186191708, -0.837515712, 0), Vec3(-0.186191708, -0.837515712, 0), Vec3(0.677324116, 0.505229712, 0), Vec3(0.677324116, 0.505229712, 0), Vec3(0.677324116, 0.505229712, 0), Vec3(0.608486295, 0.0322081447, 0), Vec3(-0.0666271448, 0.371975601, 0), Vec3(0.0666270554, -0.371975631, 0), Vec3(-0.608486414, -0.0322081745, 0), Vec3(-0.475232214, -0.776159406, 0), Vec3(-0.475232214, -0.776159406, 0), Vec3(-0.475232214, -0.776159406, 0), Vec3(0.701149821, 0.897268653, 0), Vec3(0.701149821, 0.897268653, 0), Vec3(0.701149821, 0.897268653, 0), Vec3(0.611660779, 0.282340705, 0), Vec3(-0.265986711, 0.724038303, 0), Vec3(-0.0927563459, -0.243098274, 0), Vec3(-0.97040379, 0.198599398, 0), Vec3(-0.797173321, -0.768537104, 0), Vec3(-0.797173321, -0.768537104, 0), Vec3(-0.797173321, -0.768537104, 0), Vec3(0.785934746, 1.33477843, 0), Vec3(0.785934746, 1.33477843, 0), Vec3(0.785934746, 1.33477843, 0), Vec3(0.669598877, 0.535371959, 0), Vec3(-0.471342802, 1.10957885, 0), Vec3(-0.246143341, -0.147698641, 0), Vec3(-1.38708496, 0.426508307, 0), Vec3(-1.1618855, -0.830769122, 0), Vec3(-1.1618855, -0.830769122, 0), Vec3(-1.1618855, -0.830769122, 0)}, ["velocity_list_0"] = { Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0)}, @@ -39,7 +41,7 @@ RdlCurveGeometry("/curves_hermite/curve_0") { } RdlCurveGeometry("/curves_node_xform/curve_0") { - ["node_xform"] = blur(Mat4(-0.59790498305751894, 0.80156698487087652, 0, 0, -0.80156698487087652, -0.59790498305751894, 0, 0, 0, 0, 1, 0, 0, 10, 0, 1), Mat4(-0.59790498305751894, 0.80156698487087652, 0, 0, -0.80156698487087652, -0.59790498305751894, 0, 0, 0, 0, 1, 0, 0, 10, 0, 1)), + ["node_xform"] = Mat4(-0.59790498305751894, 0.80156698487087652, 0, 0, -0.80156698487087652, -0.59790498305751894, 0, 0, 0, 0, 1, 0, 0, 10, 0, 1), ["curves_vertex_count"] = { 10, 10, 10, 10, 10}, ["vertex_list_0"] = { Vec3(-0.600000024, -0.5, 0), Vec3(-0.600000024, -0.5, 0), Vec3(-0.600000024, -0.5, 0), Vec3(-0.800000012, -0.300000012, 0), Vec3(-0.400000036, -0.099999994, 0), Vec3(-0.800000012, 0.100000024, 0), Vec3(-0.400000036, 0.300000012, 0), Vec3(-0.800000012, 0.5, 0), Vec3(-0.800000012, 0.5, 0), Vec3(-0.800000012, 0.5, 0), Vec3(-0.300000012, -0.649999976, 0), Vec3(-0.300000012, -0.649999976, 0), Vec3(-0.300000012, -0.649999976, 0), Vec3(-0.560000002, -0.390000015, 0), Vec3(-0.0400000215, -0.130000025, 0), Vec3(-0.560000002, 0.129999995, 0), Vec3(-0.0400000215, 0.389999986, 0), Vec3(-0.560000002, 0.649999976, 0), Vec3(-0.560000002, 0.649999976, 0), Vec3(-0.560000002, 0.649999976, 0), Vec3(0, -0.845000029, 0), Vec3(0, -0.845000029, 0), Vec3(0, -0.845000029, 0), Vec3(-0.338000029, -0.506999969, 0), Vec3(0.338000059, -0.16899994, 0), Vec3(-0.338000029, 0.16900003, 0), Vec3(0.338000059, 0.507000089, 0), Vec3(-0.338000029, 0.845000029, 0), Vec3(-0.338000029, 0.845000029, 0), Vec3(-0.338000029, 0.845000029, 0), Vec3(0.299999952, -1.09850001, 0), Vec3(0.299999952, -1.09850001, 0), Vec3(0.299999952, -1.09850001, 0), Vec3(-0.139400065, -0.659099996, 0), Vec3(0.739400029, -0.219699979, 0), Vec3(-0.139400065, 0.219700098, 0), Vec3(0.739400029, 0.659100056, 0), Vec3(-0.139400065, 1.09850001, 0), Vec3(-0.139400065, 1.09850001, 0), Vec3(-0.139400065, 1.09850001, 0), Vec3(0.600000024, -1.42805004, 0), Vec3(0.600000024, -1.42805004, 0), Vec3(0.600000024, -1.42805004, 0), Vec3(0.0287799835, -0.856829941, 0), Vec3(1.17122006, -0.285609901, 0), Vec3(0.0287799835, 0.285610139, 0), Vec3(1.17122006, 0.85683012, 0), Vec3(0.0287799835, 1.42805004, 0), Vec3(0.0287799835, 1.42805004, 0), Vec3(0.0287799835, 1.42805004, 0)}, ["radius_list"] = { 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004, 0.0250000004}, @@ -48,7 +50,7 @@ RdlCurveGeometry("/curves_node_xform/curve_0") { } RdlCurveGeometry("/curves_velocity/curve_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4, 0, 1), ["curves_vertex_count"] = { 10, 10, 10, 10, 10}, ["vertex_list_0"] = { Vec3(-0.600000024, -0.5, 0), Vec3(-0.600000024, -0.5, 0), Vec3(-0.600000024, -0.5, 0), Vec3(-0.800000012, -0.300000012, 0), Vec3(-0.400000036, -0.099999994, 0), Vec3(-0.800000012, 0.100000024, 0), Vec3(-0.400000036, 0.300000012, 0), Vec3(-0.800000012, 0.5, 0), Vec3(-0.800000012, 0.5, 0), Vec3(-0.800000012, 0.5, 0), Vec3(-0.300000012, -0.649999976, 0), Vec3(-0.300000012, -0.649999976, 0), Vec3(-0.300000012, -0.649999976, 0), Vec3(-0.560000002, -0.390000015, 0), Vec3(-0.0400000215, -0.130000025, 0), Vec3(-0.560000002, 0.129999995, 0), Vec3(-0.0400000215, 0.389999986, 0), Vec3(-0.560000002, 0.649999976, 0), Vec3(-0.560000002, 0.649999976, 0), Vec3(-0.560000002, 0.649999976, 0), Vec3(0, -0.845000029, 0), Vec3(0, -0.845000029, 0), Vec3(0, -0.845000029, 0), Vec3(-0.338000029, -0.506999969, 0), Vec3(0.338000059, -0.16899994, 0), Vec3(-0.338000029, 0.16900003, 0), Vec3(0.338000059, 0.507000089, 0), Vec3(-0.338000029, 0.845000029, 0), Vec3(-0.338000029, 0.845000029, 0), Vec3(-0.338000029, 0.845000029, 0), Vec3(0.299999952, -1.09850001, 0), Vec3(0.299999952, -1.09850001, 0), Vec3(0.299999952, -1.09850001, 0), Vec3(-0.139400065, -0.659099996, 0), Vec3(0.739400029, -0.219699979, 0), Vec3(-0.139400065, 0.219700098, 0), Vec3(0.739400029, 0.659100056, 0), Vec3(-0.139400065, 1.09850001, 0), Vec3(-0.139400065, 1.09850001, 0), Vec3(-0.139400065, 1.09850001, 0), Vec3(0.600000024, -1.42805004, 0), Vec3(0.600000024, -1.42805004, 0), Vec3(0.600000024, -1.42805004, 0), Vec3(0.0287799835, -0.856829941, 0), Vec3(1.17122006, -0.285609901, 0), Vec3(0.0287799835, 0.285610139, 0), Vec3(1.17122006, 0.85683012, 0), Vec3(0.0287799835, 1.42805004, 0), Vec3(0.0287799835, 1.42805004, 0), Vec3(0.0287799835, 1.42805004, 0)}, ["velocity_list_0"] = { Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0)}, @@ -58,7 +60,7 @@ RdlCurveGeometry("/curves_velocity/curve_0") { } RdlMeshGeometry("/grid_acceleration/mesh_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, 1, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, 1, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, 1, 0, 1), ["face_vertex_count"] = { 4}, ["vertices_by_index"] = { 0, 1, 3, 2}, ["vertex_list_0"] = { Vec3(-1, -1, 0), Vec3(1, -1, 0), Vec3(-1, 1, 0), Vec3(1, 1, 0)}, @@ -72,7 +74,7 @@ RdlMeshGeometry("/grid_acceleration/mesh_0") { } RdlMeshGeometry("/grid_frame_delta/mesh_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, 7, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, 7, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, 7, 0, 1), ["face_vertex_count"] = { 4}, ["vertices_by_index"] = { 0, 1, 3, 2}, ["vertex_list_0"] = { Vec3(1.399472, -0.203661978, 0), Vec3(0.203661978, 1.399472, 0), Vec3(-0.203661978, -1.399472, 0), Vec3(-1.399472, 0.203661978, 0)}, @@ -84,7 +86,7 @@ RdlMeshGeometry("/grid_frame_delta/mesh_0") { } RdlMeshGeometry("/grid_hermite/mesh_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, -2, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, -2, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, -2, 0, 1), ["face_vertex_count"] = { 4}, ["vertices_by_index"] = { 0, 1, 3, 2}, ["vertex_list_0"] = { Vec3(1.399472, -0.203661978, 0), Vec3(0.203661978, 1.399472, 0), Vec3(-0.203661978, -1.399472, 0), Vec3(-1.399472, 0.203661978, 0)}, @@ -97,7 +99,7 @@ RdlMeshGeometry("/grid_hermite/mesh_0") { } RdlMeshGeometry("/grid_node_xform/mesh_0") { - ["node_xform"] = blur(Mat4(-0.59790498305751894, 0.80156698487087652, 0, 0, -0.80156698487087652, -0.59790498305751894, 0, 0, 0, 0, 1, 0, -7, 10, 0, 1), Mat4(-0.59790498305751894, 0.80156698487087652, 0, 0, -0.80156698487087652, -0.59790498305751894, 0, 0, 0, 0, 1, 0, -7, 10, 0, 1)), + ["node_xform"] = Mat4(-0.59790498305751894, 0.80156698487087652, 0, 0, -0.80156698487087652, -0.59790498305751894, 0, 0, 0, 0, 1, 0, -7, 10, 0, 1), ["face_vertex_count"] = { 4}, ["vertices_by_index"] = { 0, 1, 3, 2}, ["vertex_list_0"] = { Vec3(-1, -1, 0), Vec3(1, -1, 0), Vec3(-1, 1, 0), Vec3(1, 1, 0)}, @@ -109,7 +111,7 @@ RdlMeshGeometry("/grid_node_xform/mesh_0") { } RdlMeshGeometry("/grid_velocity/mesh_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, 4, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, 4, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -7, 4, 0, 1), ["face_vertex_count"] = { 4}, ["vertices_by_index"] = { 0, 1, 3, 2}, ["vertex_list_0"] = { Vec3(-1, -1, 0), Vec3(1, -1, 0), Vec3(-1, 1, 0), Vec3(1, 1, 0)}, @@ -122,7 +124,7 @@ RdlMeshGeometry("/grid_velocity/mesh_0") { } RdlPointGeometry("/points_acceleration/points_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 1, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 1, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 1, 0, 1), ["vertex_list_0"] = { Vec3(0.387303978, -0.887907028, -0.782470107), Vec3(0.378884345, -0.565015733, -1.03142393), Vec3(-0.52649951, 1.09936202, -0.242881835), Vec3(-0.894420147, -0.603374541, -0.611997247), Vec3(0.678459108, 0.845717251, 0.603026628), Vec3(-0.189820111, 1.0898279, -0.573179066), Vec3(0.0391029604, -0.407733202, -1.16737854), Vec3(1.21954882, -0.101408921, -0.129890993), Vec3(0.214253709, -0.308527678, 1.18117452), Vec3(-0.53159976, -0.806997061, -0.770396411), Vec3(-0.813126683, 0.0610060841, -0.928140104), Vec3(-0.859454632, -0.637562692, 0.627277076), Vec3(0.567616582, -0.639841199, 0.903048754), Vec3(0.963347793, 0.504186571, 0.589081168), Vec3(0.217361808, 0.563327372, -1.0794611), Vec3(-0.467473596, 0.786298633, -0.83524549), Vec3(-0.0734438598, -0.749625206, -0.977234364), Vec3(0.62659049, -0.170921326, 1.05319047), Vec3(0.0903237239, -1.15858996, -0.429488033), Vec3(-0.165687531, 0.990702868, 0.722860515), Vec3(0.684280396, 0.829390466, -0.615843534), Vec3(-0.751830935, -0.357322425, -0.914487839), Vec3(0.935417593, 0.0785537064, 0.799880028), Vec3(-1.08206713, -0.2209806, -0.550749183), Vec3(-0.0992521793, 0.317633778, -1.19511592), Vec3(-1.09782171, 0.315506756, 0.480473191), Vec3(-1.14103746, 0.456126273, 0.0869257227), Vec3(1.2097702, 0.286554068, -0.0190215576), Vec3(0.0764295533, -0.0367452987, -1.23510027), Vec3(-0.800103009, -0.893349528, -0.326358855), Vec3(-0.536652982, -0.493046403, 0.998064756), Vec3(-0.476546377, 0.298360467, 1.10187066), Vec3(0.54138732, -1.03811336, -0.406618297), Vec3(0.261073887, 0.952126563, 0.744943202), Vec3(-0.50729084, 1.02896106, 0.470479339), Vec3(0.954914212, -0.646663964, 0.456156999), Vec3(-0.869338274, 0.308302462, 0.836735249), Vec3(1.01480865, 0.676075578, 0.216717005), Vec3(0.425129533, 0.164352283, 1.14210105), Vec3(-0.378353864, -0.472166747, -1.07291567), Vec3(1.08790064, -0.163094595, -0.556409776), Vec3(-0.853479862, 0.542777658, -0.706230164), Vec3(-0.412973613, -0.0537230447, -1.16276598), Vec3(-0.686005294, 0.897179663, -0.517275631), Vec3(0.0239714719, 0.25597012, 1.2131449), Vec3(1.08726931, -0.185710862, 0.550219953), Vec3(-1.04584157, -0.147010028, 0.641294599), Vec3(0.500078738, -0.157732546, -1.11199129), Vec3(0.466363639, 1.12409973, -0.233336106), Vec3(-0.949382544, 0.764738858, -0.196910948), Vec3(0.509353817, 0.241861194, -1.09626365), Vec3(1.16249883, 0.198632106, 0.364192724), Vec3(-1.21492195, -0.0145808682, 0.251863658), Vec3(0.878417492, -0.0464306474, -0.880438685), Vec3(-1.22300029, -0.0549168773, -0.150166139), Vec3(0.882749975, 0.4068124, -0.759806573), Vec3(-1.12833047, -0.433143497, 0.255755395), Vec3(0.762869477, -0.490661532, -0.836996198), Vec3(-0.123398274, 0.668372452, 1.03300512), Vec3(0.844857752, -0.75175035, -0.503601074), Vec3(-0.755948246, -0.138761535, 0.95922184), Vec3(-0.907100081, 0.704029202, 0.457550406), Vec3(1.1130116, 0.274201393, -0.457890153), Vec3(-1.05610514, 0.172827274, -0.622383595), Vec3(0.383568525, 0.617058516, 1.0063504), Vec3(1.05585372, 0.617544711, -0.226095781), Vec3(0.865089118, -0.38702786, 0.796169281), Vec3(-0.520665228, 0.397791386, -1.04702866), Vec3(-0.918212473, -0.808347464, 0.179501504), Vec3(-0.601765871, 0.698412776, 0.820679724), Vec3(1.18448317, -0.294928938, 0.202720165), Vec3(1.09750867, -0.483165026, -0.307178259), Vec3(-1.13559508, 0.385869592, -0.319640428), Vec3(-0.270810813, -0.120729633, 1.19845259), Vec3(-1.09263813, -0.539147139, -0.193349972), Vec3(-0.0716302916, -0.621380448, 1.0746007), Vec3(-0.0956842825, 0.765151978, -0.962392271), Vec3(1.00131369, -0.727458656, 0.0197395422), Vec3(-0.375412583, -0.861170769, 0.811725438), Vec3(0.54648, 0.64231652, -0.916893899), Vec3(0.632642746, -0.947597206, 0.479809493), Vec3(0.353601664, 1.14871204, 0.296857476), Vec3(-0.21501781, -1.22127151, 0.0242799222), Vec3(0.724383295, 0.991747379, 0.143781334), Vec3(0.233414993, -0.896549821, 0.834125757), Vec3(0.252944976, 0.997406244, -0.68498522), Vec3(-0.54499644, -1.02645421, 0.426661134), Vec3(-0.768470526, 0.958932996, 0.133734941), Vec3(-0.0905322284, -0.998311698, -0.722838938), Vec3(-0.0460142866, 1.20127296, 0.332275361), Vec3(-0.627687335, -1.07999671, 0.00468153926), Vec3(0.83318758, 0.882238984, -0.281715393), Vec3(0.731933296, 0.400658488, 0.90732348), Vec3(0.68632561, -1.03454411, 0.00921402685), Vec3(-0.107053503, -1.10871196, 0.547701538), Vec3(-0.396487206, -1.10129774, -0.42020312), Vec3(0.063850753, 1.22316658, -0.192277297), Vec3(0.239661023, -1.21742284, -0.0591490529), Vec3(-0.32234621, 1.20559824, 0.0421173833), Vec3(0.250624567, -1.16160321, 0.35018459)}, ["velocity_list_0"] = { Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0)}, ["accleration_list"] = { Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0), Vec3(0, 2500, 0)}, @@ -131,14 +133,14 @@ RdlPointGeometry("/points_acceleration/points_0") { } RdlPointGeometry("/points_frame_delta/points_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 7, 0, 1), ["vertex_list_0"] = { Vec3(0.480145991, 0.841334105, -0.782470107), Vec3(0.226361096, 0.641526878, -1.03142393), Vec3(-0.566415608, -1.07933855, -0.242881835), Vec3(1.01842332, -0.356177032, -0.611997247), Vec3(-1.08355308, 0.0381718278, 0.603026628), Vec3(-0.760075629, -0.803767085, -0.573179066), Vec3(0.303445607, 0.275129348, -1.16737854), Vec3(-0.647888303, 1.03818297, -0.129890993), Vec3(0.119202226, 0.35620892, 1.18117452), Vec3(0.964708328, 0.0563947558, -0.770396411), Vec3(0.437272042, -0.688251317, -0.928140104), Vec3(1.02492142, -0.307708502, 0.627277076), Vec3(0.173494786, 0.837546945, 0.903048754), Vec3(-0.980129719, 0.470732123, 0.589081168), Vec3(-0.581506312, -0.162586212, -1.0794611), Vec3(-0.350766212, -0.844843268, -0.83524549), Vec3(0.644787252, 0.38933447, -0.977234364), Vec3(-0.237636685, 0.604448974, 1.05319047), Vec3(0.874682426, 0.765127242, -0.429488033), Vec3(-0.695049286, -0.72515583, 0.722860515), Vec3(-1.0739466, 0.0525998473, -0.615843534), Vec3(0.735941291, -0.388997972, -0.914487839), Vec3(-0.622256875, 0.702832222, 0.799880028), Vec3(0.824104071, -0.735223889, -0.550749183), Vec3(-0.195261359, -0.269472092, -1.19511592), Vec3(0.403493255, -1.06862068, 0.480473191), Vec3(0.316616207, -1.18733811, 0.0869257227), Vec3(-0.953019917, 0.798379719, -0.0190215576), Vec3(-0.0162437931, 0.0832336023, -1.23510027), Vec3(1.19446504, -0.107198, -0.326358855), Vec3(0.716077209, -0.135368407, 0.998064756), Vec3(0.0457735658, -0.560375035, 1.10187066), Vec3(0.508419216, 1.05465126, -0.406618297), Vec3(-0.919290543, -0.360013008, 0.744943202), Vec3(-0.521469474, -1.02184856, 0.470479339), Vec3(-0.0526034832, 1.15207136, 0.456156999), Vec3(0.27265662, -0.881168425, 0.836735249), Vec3(-1.14867902, 0.409208149, 0.216717005), Vec3(-0.385926425, 0.242502749, 1.14210105), Vec3(0.604692936, -0.0209650993, -1.07291567), Vec3(-0.519729972, 0.969540238, -0.556409776), Vec3(0.0752272308, -1.00865078, -0.706230164), Vec3(0.289981604, -0.298904717, -1.16276598), Vec3(-0.308983594, -1.08630741, -0.517275631), Vec3(-0.219509855, -0.133831069, 1.2131449), Vec3(-0.501224041, 0.982556581, 0.550219953), Vec3(0.743152261, -0.750414014, 0.641294599), Vec3(-0.172566384, 0.495155692, -1.11199129), Vec3(-1.17988229, -0.29828316, -0.233336106), Vec3(-0.0453488827, -1.21823478, -0.196910948), Vec3(-0.498413146, 0.26367116, -1.09626365), Vec3(-0.85428077, 0.813057482, 0.364192724), Vec3(0.738095403, -0.965123355, 0.251863658), Vec3(-0.487992942, 0.731871545, -0.880438685), Vec3(0.775257528, -0.947481573, -0.150166139), Vec3(-0.853888035, 0.464348018, -0.759806573), Vec3(1.02182794, -0.645453751, 0.255755395), Vec3(-0.0628254116, 0.9048599, -0.836996198), Vec3(-0.461964816, -0.498535186, 1.03300512), Vec3(0.097433567, 1.12668538, -0.503601074), Vec3(0.563211858, -0.522976935, 0.95922184), Vec3(-0.0219668746, -1.14804399, 0.457550406), Vec3(-0.885265946, 0.728206933, -0.457890153), Vec3(0.492917895, -0.949873269, -0.622383595), Vec3(-0.723951221, -0.0614864826, 1.0063504), Vec3(-1.12630367, 0.477104366, -0.226095781), Vec3(-0.207012385, 0.924832702, 0.796169281), Vec3(-0.0075480938, -0.655189514, -1.04702866), Vec3(1.19694853, -0.252693802, 0.179501504), Vec3(-0.200025767, -0.899940133, 0.820679724), Vec3(-0.471803069, 1.12578201, 0.202720165), Vec3(-0.268916786, 1.16861343, -0.307178259), Vec3(0.369677663, -1.1409688, -0.319640428), Vec3(0.258692026, -0.144888148, 1.19845259), Vec3(1.08545637, -0.553463817, -0.193349972), Vec3(0.540906131, 0.314109981, 1.0746007), Vec3(-0.556110442, -0.534185529, -0.962392271), Vec3(-0.0155836344, 1.23757112, 0.0197395422), Vec3(0.914747119, 0.213979989, 0.811725438), Vec3(-0.841602802, 0.0539960563, -0.916893899), Vec3(0.381302357, 1.07367861, 0.479809493), Vec3(-1.13218987, -0.403385222, 0.296857476), Vec3(1.10749114, 0.557853162, 0.0242799222), Vec3(-1.2280643, -0.0123289824, 0.143781334), Vec3(0.579084754, 0.723149359, 0.834125757), Vec3(-0.950724959, -0.393601835, -0.68498522), Vec3(1.14862788, 0.176870942, 0.426661134), Vec3(-0.309176624, -1.18933129, 0.133734941), Vec3(0.854343355, 0.524327874, -0.722838938), Vec3(-0.935388505, -0.755130649, 0.332275361), Vec3(1.24098706, 0.142601967, 0.00468153926), Vec3(-1.20534062, 0.140360534, -0.281715393), Vec3(-0.758781195, 0.347137809, 0.90732348), Vec3(0.418898851, 1.16869497, 0.00921402685), Vec3(0.952714682, 0.57709384, 0.547701538), Vec3(1.1198256, 0.340660363, -0.42020312), Vec3(-1.01862657, -0.680156708, -0.192277297), Vec3(0.83255142, 0.920007527, -0.0591490529), Vec3(-0.773635328, -0.979215264, 0.0421173833), Vec3(0.781253099, 0.89542073, 0.35018459)}, ["radius_list"] = { 0.0208615903, 0.00014625788, 0.0406716131, 0.0131190242, 0.00011241436, 0.00947468914, 0.00580982585, 0.0308887959, 0.0458105579, 0.0259958394, 0.00468409061, 0.00599134574, 0.0487247296, 0.0461185053, 0.00745538482, 0.00431152014, 0.0402376167, 0.0434553921, 0.0438131206, 0.00124756701, 0.037407238, 0.0187281258, 0.00847924966, 0.0177668221, 0.0336175077, 0.047125306, 0.030012602, 0.0195533987, 0.0427534096, 0.00262792711, 0.0496456809, 0.0361152999, 0.0475085638, 0.0465119779, 0.0286056399, 0.0497624092, 0.0108690439, 0.0469097085, 0.016892219, 0.0497402251, 0.014058888, 0.0106424512, 0.039822638, 0.0171564054, 0.0291247498, 0.0431191921, 0.0407053418, 0.00823298749, 0.0324708335, 0.0195820816, 0.0179466847, 0.0151046282, 0.0467688143, 0.0482148714, 0.0371795706, 0.0348375998, 0.0438593812, 0.0223811865, 0.0071413219, 0.00398523221, 0.0267130565, 0.000204169759, 0.00182374718, 0.0414188802, 0.0055410685, 0.0215422399, 0.0109271947, 0.00643515587, 0.035317596, 0.0327642262, 0.0293363091, 0.00120755436, 0.037101239, 0.0434503965, 0.0190964285, 0.0430896282, 0.0427215584, 0.0339196809, 0.0376422405, 0.0256735329, 0.0160318743, 0.0315314345, 0.0287739038, 4.98473637e-05, 0.00388543005, 0.0202828534, 0.0197439846, 0.013411588, 0.0327139981, 0.0331937782, 0.00060737133, 0.023645062, 0.0374345891, 0.040502727, 0.0252878554, 0.0357000194, 0.0172397252, 0.0490692519, 0.0265029967, 0.0371618532}, ["primitive_attributes"] = { UserData("/points_frame_delta/points_0.primvars:displayColor"), UserData("/points_frame_delta/points_0.primvars:primId")}, } RdlPointGeometry("/points_hermite/points_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, -2, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, -2, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, -2, 0, 1), ["vertex_list_0"] = { Vec3(0.480145991, 0.841334105, -0.782470107), Vec3(0.226361096, 0.641526878, -1.03142393), Vec3(-0.566415608, -1.07933855, -0.242881835), Vec3(1.01842332, -0.356177032, -0.611997247), Vec3(-1.08355308, 0.0381718278, 0.603026628), Vec3(-0.760075629, -0.803767085, -0.573179066), Vec3(0.303445607, 0.275129348, -1.16737854), Vec3(-0.647888303, 1.03818297, -0.129890993), Vec3(0.119202226, 0.35620892, 1.18117452), Vec3(0.964708328, 0.0563947558, -0.770396411), Vec3(0.437272042, -0.688251317, -0.928140104), Vec3(1.02492142, -0.307708502, 0.627277076), Vec3(0.173494786, 0.837546945, 0.903048754), Vec3(-0.980129719, 0.470732123, 0.589081168), Vec3(-0.581506312, -0.162586212, -1.0794611), Vec3(-0.350766212, -0.844843268, -0.83524549), Vec3(0.644787252, 0.38933447, -0.977234364), Vec3(-0.237636685, 0.604448974, 1.05319047), Vec3(0.874682426, 0.765127242, -0.429488033), Vec3(-0.695049286, -0.72515583, 0.722860515), Vec3(-1.0739466, 0.0525998473, -0.615843534), Vec3(0.735941291, -0.388997972, -0.914487839), Vec3(-0.622256875, 0.702832222, 0.799880028), Vec3(0.824104071, -0.735223889, -0.550749183), Vec3(-0.195261359, -0.269472092, -1.19511592), Vec3(0.403493255, -1.06862068, 0.480473191), Vec3(0.316616207, -1.18733811, 0.0869257227), Vec3(-0.953019917, 0.798379719, -0.0190215576), Vec3(-0.0162437931, 0.0832336023, -1.23510027), Vec3(1.19446504, -0.107198, -0.326358855), Vec3(0.716077209, -0.135368407, 0.998064756), Vec3(0.0457735658, -0.560375035, 1.10187066), Vec3(0.508419216, 1.05465126, -0.406618297), Vec3(-0.919290543, -0.360013008, 0.744943202), Vec3(-0.521469474, -1.02184856, 0.470479339), Vec3(-0.0526034832, 1.15207136, 0.456156999), Vec3(0.27265662, -0.881168425, 0.836735249), Vec3(-1.14867902, 0.409208149, 0.216717005), Vec3(-0.385926425, 0.242502749, 1.14210105), Vec3(0.604692936, -0.0209650993, -1.07291567), Vec3(-0.519729972, 0.969540238, -0.556409776), Vec3(0.0752272308, -1.00865078, -0.706230164), Vec3(0.289981604, -0.298904717, -1.16276598), Vec3(-0.308983594, -1.08630741, -0.517275631), Vec3(-0.219509855, -0.133831069, 1.2131449), Vec3(-0.501224041, 0.982556581, 0.550219953), Vec3(0.743152261, -0.750414014, 0.641294599), Vec3(-0.172566384, 0.495155692, -1.11199129), Vec3(-1.17988229, -0.29828316, -0.233336106), Vec3(-0.0453488827, -1.21823478, -0.196910948), Vec3(-0.498413146, 0.26367116, -1.09626365), Vec3(-0.85428077, 0.813057482, 0.364192724), Vec3(0.738095403, -0.965123355, 0.251863658), Vec3(-0.487992942, 0.731871545, -0.880438685), Vec3(0.775257528, -0.947481573, -0.150166139), Vec3(-0.853888035, 0.464348018, -0.759806573), Vec3(1.02182794, -0.645453751, 0.255755395), Vec3(-0.0628254116, 0.9048599, -0.836996198), Vec3(-0.461964816, -0.498535186, 1.03300512), Vec3(0.097433567, 1.12668538, -0.503601074), Vec3(0.563211858, -0.522976935, 0.95922184), Vec3(-0.0219668746, -1.14804399, 0.457550406), Vec3(-0.885265946, 0.728206933, -0.457890153), Vec3(0.492917895, -0.949873269, -0.622383595), Vec3(-0.723951221, -0.0614864826, 1.0063504), Vec3(-1.12630367, 0.477104366, -0.226095781), Vec3(-0.207012385, 0.924832702, 0.796169281), Vec3(-0.0075480938, -0.655189514, -1.04702866), Vec3(1.19694853, -0.252693802, 0.179501504), Vec3(-0.200025767, -0.899940133, 0.820679724), Vec3(-0.471803069, 1.12578201, 0.202720165), Vec3(-0.268916786, 1.16861343, -0.307178259), Vec3(0.369677663, -1.1409688, -0.319640428), Vec3(0.258692026, -0.144888148, 1.19845259), Vec3(1.08545637, -0.553463817, -0.193349972), Vec3(0.540906131, 0.314109981, 1.0746007), Vec3(-0.556110442, -0.534185529, -0.962392271), Vec3(-0.0155836344, 1.23757112, 0.0197395422), Vec3(0.914747119, 0.213979989, 0.811725438), Vec3(-0.841602802, 0.0539960563, -0.916893899), Vec3(0.381302357, 1.07367861, 0.479809493), Vec3(-1.13218987, -0.403385222, 0.296857476), Vec3(1.10749114, 0.557853162, 0.0242799222), Vec3(-1.2280643, -0.0123289824, 0.143781334), Vec3(0.579084754, 0.723149359, 0.834125757), Vec3(-0.950724959, -0.393601835, -0.68498522), Vec3(1.14862788, 0.176870942, 0.426661134), Vec3(-0.309176624, -1.18933129, 0.133734941), Vec3(0.854343355, 0.524327874, -0.722838938), Vec3(-0.935388505, -0.755130649, 0.332275361), Vec3(1.24098706, 0.142601967, 0.00468153926), Vec3(-1.20534062, 0.140360534, -0.281715393), Vec3(-0.758781195, 0.347137809, 0.90732348), Vec3(0.418898851, 1.16869497, 0.00921402685), Vec3(0.952714682, 0.57709384, 0.547701538), Vec3(1.1198256, 0.340660363, -0.42020312), Vec3(-1.01862657, -0.680156708, -0.192277297), Vec3(0.83255142, 0.920007527, -0.0591490529), Vec3(-0.773635328, -0.979215264, 0.0421173833), Vec3(0.781253099, 0.89542073, 0.35018459)}, ["velocity_list_0"] = { Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0)}, ["radius_list"] = { 0.0208615903, 0.00014625788, 0.0406716131, 0.0131190242, 0.00011241436, 0.00947468914, 0.00580982585, 0.0308887959, 0.0458105579, 0.0259958394, 0.00468409061, 0.00599134574, 0.0487247296, 0.0461185053, 0.00745538482, 0.00431152014, 0.0402376167, 0.0434553921, 0.0438131206, 0.00124756701, 0.037407238, 0.0187281258, 0.00847924966, 0.0177668221, 0.0336175077, 0.047125306, 0.030012602, 0.0195533987, 0.0427534096, 0.00262792711, 0.0496456809, 0.0361152999, 0.0475085638, 0.0465119779, 0.0286056399, 0.0497624092, 0.0108690439, 0.0469097085, 0.016892219, 0.0497402251, 0.014058888, 0.0106424512, 0.039822638, 0.0171564054, 0.0291247498, 0.0431191921, 0.0407053418, 0.00823298749, 0.0324708335, 0.0195820816, 0.0179466847, 0.0151046282, 0.0467688143, 0.0482148714, 0.0371795706, 0.0348375998, 0.0438593812, 0.0223811865, 0.0071413219, 0.00398523221, 0.0267130565, 0.000204169759, 0.00182374718, 0.0414188802, 0.0055410685, 0.0215422399, 0.0109271947, 0.00643515587, 0.035317596, 0.0327642262, 0.0293363091, 0.00120755436, 0.037101239, 0.0434503965, 0.0190964285, 0.0430896282, 0.0427215584, 0.0339196809, 0.0376422405, 0.0256735329, 0.0160318743, 0.0315314345, 0.0287739038, 4.98473637e-05, 0.00388543005, 0.0202828534, 0.0197439846, 0.013411588, 0.0327139981, 0.0331937782, 0.00060737133, 0.023645062, 0.0374345891, 0.040502727, 0.0252878554, 0.0357000194, 0.0172397252, 0.0490692519, 0.0265029967, 0.0371618532}, @@ -146,21 +148,21 @@ RdlPointGeometry("/points_hermite/points_0") { } RdlPointGeometry("/points_node_xform/points_0") { - ["node_xform"] = blur(Mat4(-0.59790498305751894, 0.80156698487087652, 0, 0, -0.80156698487087652, -0.59790498305751894, 0, 0, 0, 0, 1, 0, 7, 10, 0, 1), Mat4(-0.59790498305751894, 0.80156698487087652, 0, 0, -0.80156698487087652, -0.59790498305751894, 0, 0, 0, 0, 1, 0, 7, 10, 0, 1)), + ["node_xform"] = Mat4(-0.59790498305751894, 0.80156698487087652, 0, 0, -0.80156698487087652, -0.59790498305751894, 0, 0, 0, 0, 1, 0, 7, 10, 0, 1), ["vertex_list_0"] = { Vec3(0.387303978, -0.887907028, -0.782470107), Vec3(0.378884345, -0.565015733, -1.03142393), Vec3(-0.52649951, 1.09936202, -0.242881835), Vec3(-0.894420147, -0.603374541, -0.611997247), Vec3(0.678459108, 0.845717251, 0.603026628), Vec3(-0.189820111, 1.0898279, -0.573179066), Vec3(0.0391029604, -0.407733202, -1.16737854), Vec3(1.21954882, -0.101408921, -0.129890993), Vec3(0.214253709, -0.308527678, 1.18117452), Vec3(-0.53159976, -0.806997061, -0.770396411), Vec3(-0.813126683, 0.0610060841, -0.928140104), Vec3(-0.859454632, -0.637562692, 0.627277076), Vec3(0.567616582, -0.639841199, 0.903048754), Vec3(0.963347793, 0.504186571, 0.589081168), Vec3(0.217361808, 0.563327372, -1.0794611), Vec3(-0.467473596, 0.786298633, -0.83524549), Vec3(-0.0734438598, -0.749625206, -0.977234364), Vec3(0.62659049, -0.170921326, 1.05319047), Vec3(0.0903237239, -1.15858996, -0.429488033), Vec3(-0.165687531, 0.990702868, 0.722860515), Vec3(0.684280396, 0.829390466, -0.615843534), Vec3(-0.751830935, -0.357322425, -0.914487839), Vec3(0.935417593, 0.0785537064, 0.799880028), Vec3(-1.08206713, -0.2209806, -0.550749183), Vec3(-0.0992521793, 0.317633778, -1.19511592), Vec3(-1.09782171, 0.315506756, 0.480473191), Vec3(-1.14103746, 0.456126273, 0.0869257227), Vec3(1.2097702, 0.286554068, -0.0190215576), Vec3(0.0764295533, -0.0367452987, -1.23510027), Vec3(-0.800103009, -0.893349528, -0.326358855), Vec3(-0.536652982, -0.493046403, 0.998064756), Vec3(-0.476546377, 0.298360467, 1.10187066), Vec3(0.54138732, -1.03811336, -0.406618297), Vec3(0.261073887, 0.952126563, 0.744943202), Vec3(-0.50729084, 1.02896106, 0.470479339), Vec3(0.954914212, -0.646663964, 0.456156999), Vec3(-0.869338274, 0.308302462, 0.836735249), Vec3(1.01480865, 0.676075578, 0.216717005), Vec3(0.425129533, 0.164352283, 1.14210105), Vec3(-0.378353864, -0.472166747, -1.07291567), Vec3(1.08790064, -0.163094595, -0.556409776), Vec3(-0.853479862, 0.542777658, -0.706230164), Vec3(-0.412973613, -0.0537230447, -1.16276598), Vec3(-0.686005294, 0.897179663, -0.517275631), Vec3(0.0239714719, 0.25597012, 1.2131449), Vec3(1.08726931, -0.185710862, 0.550219953), Vec3(-1.04584157, -0.147010028, 0.641294599), Vec3(0.500078738, -0.157732546, -1.11199129), Vec3(0.466363639, 1.12409973, -0.233336106), Vec3(-0.949382544, 0.764738858, -0.196910948), Vec3(0.509353817, 0.241861194, -1.09626365), Vec3(1.16249883, 0.198632106, 0.364192724), Vec3(-1.21492195, -0.0145808682, 0.251863658), Vec3(0.878417492, -0.0464306474, -0.880438685), Vec3(-1.22300029, -0.0549168773, -0.150166139), Vec3(0.882749975, 0.4068124, -0.759806573), Vec3(-1.12833047, -0.433143497, 0.255755395), Vec3(0.762869477, -0.490661532, -0.836996198), Vec3(-0.123398274, 0.668372452, 1.03300512), Vec3(0.844857752, -0.75175035, -0.503601074), Vec3(-0.755948246, -0.138761535, 0.95922184), Vec3(-0.907100081, 0.704029202, 0.457550406), Vec3(1.1130116, 0.274201393, -0.457890153), Vec3(-1.05610514, 0.172827274, -0.622383595), Vec3(0.383568525, 0.617058516, 1.0063504), Vec3(1.05585372, 0.617544711, -0.226095781), Vec3(0.865089118, -0.38702786, 0.796169281), Vec3(-0.520665228, 0.397791386, -1.04702866), Vec3(-0.918212473, -0.808347464, 0.179501504), Vec3(-0.601765871, 0.698412776, 0.820679724), Vec3(1.18448317, -0.294928938, 0.202720165), Vec3(1.09750867, -0.483165026, -0.307178259), Vec3(-1.13559508, 0.385869592, -0.319640428), Vec3(-0.270810813, -0.120729633, 1.19845259), Vec3(-1.09263813, -0.539147139, -0.193349972), Vec3(-0.0716302916, -0.621380448, 1.0746007), Vec3(-0.0956842825, 0.765151978, -0.962392271), Vec3(1.00131369, -0.727458656, 0.0197395422), Vec3(-0.375412583, -0.861170769, 0.811725438), Vec3(0.54648, 0.64231652, -0.916893899), Vec3(0.632642746, -0.947597206, 0.479809493), Vec3(0.353601664, 1.14871204, 0.296857476), Vec3(-0.21501781, -1.22127151, 0.0242799222), Vec3(0.724383295, 0.991747379, 0.143781334), Vec3(0.233414993, -0.896549821, 0.834125757), Vec3(0.252944976, 0.997406244, -0.68498522), Vec3(-0.54499644, -1.02645421, 0.426661134), Vec3(-0.768470526, 0.958932996, 0.133734941), Vec3(-0.0905322284, -0.998311698, -0.722838938), Vec3(-0.0460142866, 1.20127296, 0.332275361), Vec3(-0.627687335, -1.07999671, 0.00468153926), Vec3(0.83318758, 0.882238984, -0.281715393), Vec3(0.731933296, 0.400658488, 0.90732348), Vec3(0.68632561, -1.03454411, 0.00921402685), Vec3(-0.107053503, -1.10871196, 0.547701538), Vec3(-0.396487206, -1.10129774, -0.42020312), Vec3(0.063850753, 1.22316658, -0.192277297), Vec3(0.239661023, -1.21742284, -0.0591490529), Vec3(-0.32234621, 1.20559824, 0.0421173833), Vec3(0.250624567, -1.16160321, 0.35018459)}, ["radius_list"] = { 0.0208615903, 0.00014625788, 0.0406716131, 0.0131190242, 0.00011241436, 0.00947468914, 0.00580982585, 0.0308887959, 0.0458105579, 0.0259958394, 0.00468409061, 0.00599134574, 0.0487247296, 0.0461185053, 0.00745538482, 0.00431152014, 0.0402376167, 0.0434553921, 0.0438131206, 0.00124756701, 0.037407238, 0.0187281258, 0.00847924966, 0.0177668221, 0.0336175077, 0.047125306, 0.030012602, 0.0195533987, 0.0427534096, 0.00262792711, 0.0496456809, 0.0361152999, 0.0475085638, 0.0465119779, 0.0286056399, 0.0497624092, 0.0108690439, 0.0469097085, 0.016892219, 0.0497402251, 0.014058888, 0.0106424512, 0.039822638, 0.0171564054, 0.0291247498, 0.0431191921, 0.0407053418, 0.00823298749, 0.0324708335, 0.0195820816, 0.0179466847, 0.0151046282, 0.0467688143, 0.0482148714, 0.0371795706, 0.0348375998, 0.0438593812, 0.0223811865, 0.0071413219, 0.00398523221, 0.0267130565, 0.000204169759, 0.00182374718, 0.0414188802, 0.0055410685, 0.0215422399, 0.0109271947, 0.00643515587, 0.035317596, 0.0327642262, 0.0293363091, 0.00120755436, 0.037101239, 0.0434503965, 0.0190964285, 0.0430896282, 0.0427215584, 0.0339196809, 0.0376422405, 0.0256735329, 0.0160318743, 0.0315314345, 0.0287739038, 4.98473637e-05, 0.00388543005, 0.0202828534, 0.0197439846, 0.013411588, 0.0327139981, 0.0331937782, 0.00060737133, 0.023645062, 0.0374345891, 0.040502727, 0.0252878554, 0.0357000194, 0.0172397252, 0.0490692519, 0.0265029967, 0.0371618532}, ["primitive_attributes"] = { UserData("/points_node_xform/points_0.primvars:displayColor"), UserData("/points_node_xform/points_0.primvars:primId")}, } RdlPointGeometry("/points_velocity/points_0") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 4, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 4, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7, 4, 0, 1), ["vertex_list_0"] = { Vec3(0.387303978, -0.887907028, -0.782470107), Vec3(0.378884345, -0.565015733, -1.03142393), Vec3(-0.52649951, 1.09936202, -0.242881835), Vec3(-0.894420147, -0.603374541, -0.611997247), Vec3(0.678459108, 0.845717251, 0.603026628), Vec3(-0.189820111, 1.0898279, -0.573179066), Vec3(0.0391029604, -0.407733202, -1.16737854), Vec3(1.21954882, -0.101408921, -0.129890993), Vec3(0.214253709, -0.308527678, 1.18117452), Vec3(-0.53159976, -0.806997061, -0.770396411), Vec3(-0.813126683, 0.0610060841, -0.928140104), Vec3(-0.859454632, -0.637562692, 0.627277076), Vec3(0.567616582, -0.639841199, 0.903048754), Vec3(0.963347793, 0.504186571, 0.589081168), Vec3(0.217361808, 0.563327372, -1.0794611), Vec3(-0.467473596, 0.786298633, -0.83524549), Vec3(-0.0734438598, -0.749625206, -0.977234364), Vec3(0.62659049, -0.170921326, 1.05319047), Vec3(0.0903237239, -1.15858996, -0.429488033), Vec3(-0.165687531, 0.990702868, 0.722860515), Vec3(0.684280396, 0.829390466, -0.615843534), Vec3(-0.751830935, -0.357322425, -0.914487839), Vec3(0.935417593, 0.0785537064, 0.799880028), Vec3(-1.08206713, -0.2209806, -0.550749183), Vec3(-0.0992521793, 0.317633778, -1.19511592), Vec3(-1.09782171, 0.315506756, 0.480473191), Vec3(-1.14103746, 0.456126273, 0.0869257227), Vec3(1.2097702, 0.286554068, -0.0190215576), Vec3(0.0764295533, -0.0367452987, -1.23510027), Vec3(-0.800103009, -0.893349528, -0.326358855), Vec3(-0.536652982, -0.493046403, 0.998064756), Vec3(-0.476546377, 0.298360467, 1.10187066), Vec3(0.54138732, -1.03811336, -0.406618297), Vec3(0.261073887, 0.952126563, 0.744943202), Vec3(-0.50729084, 1.02896106, 0.470479339), Vec3(0.954914212, -0.646663964, 0.456156999), Vec3(-0.869338274, 0.308302462, 0.836735249), Vec3(1.01480865, 0.676075578, 0.216717005), Vec3(0.425129533, 0.164352283, 1.14210105), Vec3(-0.378353864, -0.472166747, -1.07291567), Vec3(1.08790064, -0.163094595, -0.556409776), Vec3(-0.853479862, 0.542777658, -0.706230164), Vec3(-0.412973613, -0.0537230447, -1.16276598), Vec3(-0.686005294, 0.897179663, -0.517275631), Vec3(0.0239714719, 0.25597012, 1.2131449), Vec3(1.08726931, -0.185710862, 0.550219953), Vec3(-1.04584157, -0.147010028, 0.641294599), Vec3(0.500078738, -0.157732546, -1.11199129), Vec3(0.466363639, 1.12409973, -0.233336106), Vec3(-0.949382544, 0.764738858, -0.196910948), Vec3(0.509353817, 0.241861194, -1.09626365), Vec3(1.16249883, 0.198632106, 0.364192724), Vec3(-1.21492195, -0.0145808682, 0.251863658), Vec3(0.878417492, -0.0464306474, -0.880438685), Vec3(-1.22300029, -0.0549168773, -0.150166139), Vec3(0.882749975, 0.4068124, -0.759806573), Vec3(-1.12833047, -0.433143497, 0.255755395), Vec3(0.762869477, -0.490661532, -0.836996198), Vec3(-0.123398274, 0.668372452, 1.03300512), Vec3(0.844857752, -0.75175035, -0.503601074), Vec3(-0.755948246, -0.138761535, 0.95922184), Vec3(-0.907100081, 0.704029202, 0.457550406), Vec3(1.1130116, 0.274201393, -0.457890153), Vec3(-1.05610514, 0.172827274, -0.622383595), Vec3(0.383568525, 0.617058516, 1.0063504), Vec3(1.05585372, 0.617544711, -0.226095781), Vec3(0.865089118, -0.38702786, 0.796169281), Vec3(-0.520665228, 0.397791386, -1.04702866), Vec3(-0.918212473, -0.808347464, 0.179501504), Vec3(-0.601765871, 0.698412776, 0.820679724), Vec3(1.18448317, -0.294928938, 0.202720165), Vec3(1.09750867, -0.483165026, -0.307178259), Vec3(-1.13559508, 0.385869592, -0.319640428), Vec3(-0.270810813, -0.120729633, 1.19845259), Vec3(-1.09263813, -0.539147139, -0.193349972), Vec3(-0.0716302916, -0.621380448, 1.0746007), Vec3(-0.0956842825, 0.765151978, -0.962392271), Vec3(1.00131369, -0.727458656, 0.0197395422), Vec3(-0.375412583, -0.861170769, 0.811725438), Vec3(0.54648, 0.64231652, -0.916893899), Vec3(0.632642746, -0.947597206, 0.479809493), Vec3(0.353601664, 1.14871204, 0.296857476), Vec3(-0.21501781, -1.22127151, 0.0242799222), Vec3(0.724383295, 0.991747379, 0.143781334), Vec3(0.233414993, -0.896549821, 0.834125757), Vec3(0.252944976, 0.997406244, -0.68498522), Vec3(-0.54499644, -1.02645421, 0.426661134), Vec3(-0.768470526, 0.958932996, 0.133734941), Vec3(-0.0905322284, -0.998311698, -0.722838938), Vec3(-0.0460142866, 1.20127296, 0.332275361), Vec3(-0.627687335, -1.07999671, 0.00468153926), Vec3(0.83318758, 0.882238984, -0.281715393), Vec3(0.731933296, 0.400658488, 0.90732348), Vec3(0.68632561, -1.03454411, 0.00921402685), Vec3(-0.107053503, -1.10871196, 0.547701538), Vec3(-0.396487206, -1.10129774, -0.42020312), Vec3(0.063850753, 1.22316658, -0.192277297), Vec3(0.239661023, -1.21742284, -0.0591490529), Vec3(-0.32234621, 1.20559824, 0.0421173833), Vec3(0.250624567, -1.16160321, 0.35018459)}, ["velocity_list_0"] = { Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0), Vec3(100, 0, 0)}, ["radius_list"] = { 0.0208615903, 0.00014625788, 0.0406716131, 0.0131190242, 0.00011241436, 0.00947468914, 0.00580982585, 0.0308887959, 0.0458105579, 0.0259958394, 0.00468409061, 0.00599134574, 0.0487247296, 0.0461185053, 0.00745538482, 0.00431152014, 0.0402376167, 0.0434553921, 0.0438131206, 0.00124756701, 0.037407238, 0.0187281258, 0.00847924966, 0.0177668221, 0.0336175077, 0.047125306, 0.030012602, 0.0195533987, 0.0427534096, 0.00262792711, 0.0496456809, 0.0361152999, 0.0475085638, 0.0465119779, 0.0286056399, 0.0497624092, 0.0108690439, 0.0469097085, 0.016892219, 0.0497402251, 0.014058888, 0.0106424512, 0.039822638, 0.0171564054, 0.0291247498, 0.0431191921, 0.0407053418, 0.00823298749, 0.0324708335, 0.0195820816, 0.0179466847, 0.0151046282, 0.0467688143, 0.0482148714, 0.0371795706, 0.0348375998, 0.0438593812, 0.0223811865, 0.0071413219, 0.00398523221, 0.0267130565, 0.000204169759, 0.00182374718, 0.0414188802, 0.0055410685, 0.0215422399, 0.0109271947, 0.00643515587, 0.035317596, 0.0327642262, 0.0293363091, 0.00120755436, 0.037101239, 0.0434503965, 0.0190964285, 0.0430896282, 0.0427215584, 0.0339196809, 0.0376422405, 0.0256735329, 0.0160318743, 0.0315314345, 0.0287739038, 4.98473637e-05, 0.00388543005, 0.0202828534, 0.0197439846, 0.013411588, 0.0327139981, 0.0331937782, 0.00060737133, 0.023645062, 0.0374345891, 0.040502727, 0.0252878554, 0.0357000194, 0.0172397252, 0.0490692519, 0.0265029967, 0.0371618532}, ["primitive_attributes"] = { UserData("/points_velocity/points_0.primvars:displayColor"), UserData("/points_velocity/points_0.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlCurveGeometry("/curves_acceleration/curve_0"), RdlCurveGeometry("/curves_frame_delta/curve_0"), RdlCurveGeometry("/curves_hermite/curve_0"), @@ -178,59 +180,73 @@ GeometrySet("allGeometry") { RdlPointGeometry("/points_velocity/points_0"), } -Layer("defaultLayer") { - {RdlCurveGeometry("/curves_acceleration/curve_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlCurveGeometry("/curves_frame_delta/curve_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlCurveGeometry("/curves_hermite/curve_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlCurveGeometry("/curves_node_xform/curve_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlCurveGeometry("/curves_velocity/curve_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/grid_acceleration/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/grid_frame_delta/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/grid_hermite/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/grid_node_xform/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/grid_velocity/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlPointGeometry("/points_acceleration/points_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlPointGeometry("/points_frame_delta/points_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlPointGeometry("/points_hermite/points_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlPointGeometry("/points_node_xform/points_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlPointGeometry("/points_velocity/points_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlCurveGeometry("/curves_acceleration/curve_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlCurveGeometry("/curves_frame_delta/curve_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlCurveGeometry("/curves_hermite/curve_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlCurveGeometry("/curves_node_xform/curve_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlCurveGeometry("/curves_velocity/curve_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/grid_acceleration/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/grid_frame_delta/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/grid_hermite/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/grid_node_xform/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/grid_velocity/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlPointGeometry("/points_acceleration/points_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlPointGeometry("/points_frame_delta/points_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlPointGeometry("/points_hermite/points_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlPointGeometry("/points_node_xform/points_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlPointGeometry("/points_velocity/points_0"), "", UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } UsdPreviewSurface("/materials/usdpreviewsurface1/usdpreviewsurface1") { - ["diffuseColor"] = bind(undef(), Rgb(0, 0, 0)), - ["emissiveColor"] = bind(UsdPrimvarReader_float3("/materials/usdpreviewsurface1/usdprimvarreader1.result"), Rgb(1, 1, 1)), + ["diffuseColor"] = Rgb(0, 0, 0), + ["emissiveColor"] = bind(UsdPrimvarReader_float3("/materials/usdpreviewsurface1/usdprimvarreader1"), Rgb(1, 1, 1)), } -EnvLight("defaultLight") { - ["max_shadow_distance"] = 100, +EnvLight("/defaultLight") { } -LightSet("LightSet0E11AB") { - EnvLight("defaultLight"), +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -PerspectiveCamera("/camera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4, 65, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4, 65, 1)), +LightSet("LightSet3AC404") { + EnvLight("/defaultLight"), +} + +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4, 65, 1), ["far"] = 1000000, ["mb_shutter_open"] = -0.5, ["mb_shutter_close"] = 0.5, - ["focal"] = blur(0.5, 0.5), + ["focal"] = 0.5, ["film_width_aperture"] = 0.209549993, } -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4, 65, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4, 65, 1)), +PerspectiveCamera("/camera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 4, 65, 1), ["far"] = 1000000, ["mb_shutter_open"] = -0.5, ["mb_shutter_close"] = 0.5, - ["focal"] = blur(0.5, 0.5), + ["focal"] = 0.5, ["film_width_aperture"] = 0.209549993, } -UserData("/grid_acceleration/mesh_0.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1)}, - ["rate"] = "vertex", +UserData("/grid_hermite/mesh_0.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 4}, + ["rate"] = "constant", +} + +UserData("/grid_acceleration/mesh_0.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 3}, + ["rate"] = "constant", +} + +UserData("/curves_node_xform/curve_0.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 5}, + ["rate"] = "constant", } UserData("/curves_frame_delta/curve_0.primvars:displayColor") { @@ -239,10 +255,17 @@ UserData("/curves_frame_delta/curve_0.primvars:displayColor") { ["rate"] = "vertex", } -UserData("/curves_node_xform/curve_0.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0)}, - ["rate"] = "vertex", +UserData("/grid_velocity/mesh_0.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 2}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/grid_node_xform/mesh_0.primvars:displayColor") { @@ -251,22 +274,16 @@ UserData("/grid_node_xform/mesh_0.primvars:displayColor") { ["rate"] = "vertex", } -UserData("/grid_hermite/mesh_0.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 4}, - ["rate"] = "constant", -} - UserData("/curves_hermite/curve_0.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 9}, ["rate"] = "constant", } -UserData("/grid_velocity/mesh_0.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 2}, - ["rate"] = "constant", +UserData("/curves_node_xform/curve_0.primvars:displayColor") { + ["color_key"] = "displayColor", + ["color_values_0"] = { Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0)}, + ["rate"] = "vertex", } UserData("/points_hermite/points_0.primvars:displayColor") { @@ -281,16 +298,16 @@ UserData("/curves_hermite/curve_0.primvars:displayColor") { ["rate"] = "vertex", } -UserData("/points_acceleration/points_0.primvars:displayColor") { +UserData("/points_node_xform/points_0.primvars:displayColor") { ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1)}, + ["color_values_0"] = { Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0)}, ["rate"] = "vertex", } -UserData("/grid_frame_delta/mesh_0.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", +UserData("/points_acceleration/points_0.primvars:displayColor") { + ["color_key"] = "displayColor", + ["color_values_0"] = { Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1)}, + ["rate"] = "vertex", } UserData("/curves_acceleration/curve_0.primvars:displayColor") { @@ -299,10 +316,16 @@ UserData("/curves_acceleration/curve_0.primvars:displayColor") { ["rate"] = "vertex", } -UserData("/points_node_xform/points_0.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0), Rgb(1, 1, 0)}, - ["rate"] = "vertex", +UserData("/points_velocity/points_0.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 12}, + ["rate"] = "constant", +} + +UserData("/curves_acceleration/curve_0.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 8}, + ["rate"] = "constant", } UserData("/curves_velocity/curve_0.primvars:primId") { @@ -311,9 +334,9 @@ UserData("/curves_velocity/curve_0.primvars:primId") { ["rate"] = "constant", } -UserData("/curves_acceleration/curve_0.primvars:primId") { +UserData("/grid_frame_delta/mesh_0.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 8}, + ["float_values_0"] = { 1}, ["rate"] = "constant", } @@ -329,24 +352,37 @@ UserData("/grid_frame_delta/mesh_0.primvars:displayColor") { ["rate"] = "vertex", } -UserData("/grid_acceleration/mesh_0.primvars:primId") { +UserData("/curves_frame_delta/curve_0.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 3}, + ["float_values_0"] = { 6}, ["rate"] = "constant", } +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + UserData("/points_frame_delta/points_0.primvars:displayColor") { ["color_key"] = "displayColor", ["color_values_0"] = { Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0)}, ["rate"] = "vertex", } -UserData("/curves_frame_delta/curve_0.primvars:primId") { +UserData("/points_acceleration/points_0.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 6}, + ["float_values_0"] = { 13}, ["rate"] = "constant", } +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/curves_velocity/curve_0.primvars:displayColor") { ["color_key"] = "displayColor", ["color_values_0"] = { Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0)}, @@ -359,22 +395,23 @@ UserData("/points_hermite/points_0.primvars:primId") { ["rate"] = "constant", } -UserData("/points_acceleration/points_0.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 13}, - ["rate"] = "constant", -} - UserData("/points_velocity/points_0.primvars:displayColor") { ["color_key"] = "displayColor", ["color_values_0"] = { Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0), Rgb(0, 1, 0)}, ["rate"] = "vertex", } -UserData("/curves_node_xform/curve_0.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 5}, - ["rate"] = "constant", +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/grid_acceleration/mesh_0.primvars:displayColor") { + ["color_key"] = "displayColor", + ["color_values_0"] = { Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1)}, + ["rate"] = "vertex", } UserData("/grid_node_xform/mesh_0.primvars:primId") { @@ -383,10 +420,10 @@ UserData("/grid_node_xform/mesh_0.primvars:primId") { ["rate"] = "constant", } -UserData("/points_node_xform/points_0.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 10}, - ["rate"] = "constant", +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", } UserData("/grid_hermite/mesh_0.primvars:displayColor") { @@ -401,8 +438,8 @@ UserData("/points_frame_delta/points_0.primvars:primId") { ["rate"] = "constant", } -UserData("/points_velocity/points_0.primvars:primId") { +UserData("/points_node_xform/points_0.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 12}, + ["float_values_0"] = { 10}, ["rate"] = "constant", } diff --git a/hats/geometry/geometry_motion_blur.usd b/hats/geometry/geometry_motion_blur.usd index 7d004a2..8535e96 100644 --- a/hats/geometry/geometry_motion_blur.usd +++ b/hats/geometry/geometry_motion_blur.usd @@ -720,3 +720,6 @@ def Camera "camera" ( uniform token[] xformOpOrder = ["xformOp:transform"] } +def DomeLight "defaultLight" +{ +} \ No newline at end of file diff --git a/hats/geometry/geometry_primvar_interpolation.canonical.rdla b/hats/geometry/geometry_primvar_interpolation.canonical.rdla index 9323524..565760b 100644 --- a/hats/geometry/geometry_primvar_interpolation.canonical.rdla +++ b/hats/geometry/geometry_primvar_interpolation.canonical.rdla @@ -1,15 +1,17 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } @@ -80,7 +82,7 @@ RdlMeshGeometry("/vertex") { ["smooth_normal"] = false, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/constant"), RdlMeshGeometry("/faceVarying"), RdlMeshGeometry("/invalid"), @@ -89,45 +91,66 @@ GeometrySet("allGeometry") { RdlMeshGeometry("/vertex"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/constant"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/faceVarying"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/invalid"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/uniform"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/varying"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/vertex"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/constant"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/faceVarying"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/invalid"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/uniform"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/varying"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/vertex"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } -EnvLight("defaultLight") { - ["max_shadow_distance"] = 100, +EnvLight("/defaultLight") { } -LightSet("LightSet0E11AB") { - EnvLight("defaultLight"), +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -PerspectiveCamera("/app_scene/free_cam") { +LightSet("LightSet3AC404") { + EnvLight("/defaultLight"), +} + +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2, 14.188564300537109, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2, 14.188564300537109, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2, 14.188564300537109, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 2, 14.188564300537109, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, +} + +UserData("/vertex.primvars:displayColor") { + ["color_key"] = "displayColor", + ["color_values_0"] = { Rgb(1, 0, 0), Rgb(0, 1, 0), Rgb(0, 0, 1), Rgb(1, 0, 1)}, + ["rate"] = "vertex", +} + +UserData("/faceVarying.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 4}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/varying.primvars:displayColor") { @@ -142,6 +165,19 @@ UserData("/faceVarying.primvars:displayColor") { ["rate"] = "face varying", } +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + UserData("/uniform.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 1}, @@ -154,27 +190,21 @@ UserData("/constant.primvars:displayColor") { ["rate"] = "constant", } -UserData("/faceVarying.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 4}, - ["rate"] = "constant", -} - -UserData("/vertex.primvars:displayColor") { +UserData("/invalid.primvars:displayColor") { ["color_key"] = "displayColor", ["color_values_0"] = { Rgb(1, 0, 0), Rgb(0, 1, 0), Rgb(0, 0, 1), Rgb(1, 0, 1)}, - ["rate"] = "vertex", + ["rate"] = "face varying", } -UserData("/vertex.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 3}, - ["rate"] = "constant", +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", } -UserData("/varying.primvars:primId") { +UserData("/invalid.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 2}, + ["float_values_0"] = { 5}, ["rate"] = "constant", } @@ -184,16 +214,23 @@ UserData("/constant.primvars:primId") { ["rate"] = "constant", } -UserData("/invalid.primvars:primId") { +UserData("/varying.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 5}, + ["float_values_0"] = { 2}, ["rate"] = "constant", } -UserData("/invalid.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 0, 0), Rgb(0, 1, 0), Rgb(0, 0, 1), Rgb(1, 0, 1)}, - ["rate"] = "face varying", +UserData("/vertex.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 3}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/uniform.primvars:displayColor") { diff --git a/hats/geometry/geometry_primvar_interpolation.usd b/hats/geometry/geometry_primvar_interpolation.usd index 65869d5..0cc762d 100644 --- a/hats/geometry/geometry_primvar_interpolation.usd +++ b/hats/geometry/geometry_primvar_interpolation.usd @@ -105,4 +105,8 @@ def Mesh "invalid" interpolation = "faceVarying" ) uniform token subdivisionScheme = "none" +} + +def DomeLight "defaultLight" +{ } \ No newline at end of file diff --git a/hats/geometry/geometry_primvars.canonical.rdla b/hats/geometry/geometry_primvars.canonical.rdla index f84219f..1fc01cf 100644 --- a/hats/geometry/geometry_primvars.canonical.rdla +++ b/hats/geometry/geometry_primvars.canonical.rdla @@ -1,30 +1,32 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, ["enable_motion_blur"] = false, } -AttributeMap("/mat/PrimvarColorMoonray.result") { +AttributeMap("/mat/PrimvarColorMoonray") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -UsdPrimvarReader_float("/mat/PrimvarOpacity.result") { +UsdPrimvarReader_float("/mat/PrimvarOpacity") { ["fallback"] = bind(undef(), 1), ["varname"] = "displayOpacity", } -UsdPrimvarReader_float("/mat/PrimvarRoughness.result") { +UsdPrimvarReader_float("/mat/PrimvarRoughness") { ["fallback"] = bind(undef(), 0.5), ["varname"] = "roughness", } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } @@ -188,7 +190,7 @@ RdlMeshGeometry("/World/x1/s13") { ["mesh_resolution"] = 4, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/World/plane"), RdlMeshGeometry("/World/s00"), RdlMeshGeometry("/World/s01"), @@ -208,62 +210,64 @@ GeometrySet("allGeometry") { RdlMeshGeometry("/World/x1/s13"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/World/plane"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s00"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s01"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s02"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s03"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s20"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s21"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s22"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s23"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s30"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s31"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s32"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/s33"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/x1/s10"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/x1/s11"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/x1/s12"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/World/x1/s13"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/World/plane"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s00"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s01"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s02"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s03"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s20"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s21"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s22"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s23"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s30"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s31"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s32"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/s33"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/x1/s10"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/x1/s11"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/x1/s12"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/World/x1/s13"), "", UsdPreviewSurface("/mat/MoonrayMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } UsdPreviewSurface("/mat/MoonrayMtl") { - ["diffuseColor"] = bind(AttributeMap("/mat/PrimvarColorMoonray.result"), Rgb(1, 1, 1)), - ["roughness"] = bind(UsdPrimvarReader_float("/mat/PrimvarRoughness.result"), 1), - ["opacity"] = bind(UsdPrimvarReader_float("/mat/PrimvarOpacity.result"), 1), + ["diffuseColor"] = bind(AttributeMap("/mat/PrimvarColorMoonray"), Rgb(1, 1, 1)), + ["roughness"] = bind(UsdPrimvarReader_float("/mat/PrimvarRoughness"), 1), + ["opacity"] = bind(UsdPrimvarReader_float("/mat/PrimvarOpacity"), 1), } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } -EnvLight("defaultLight") { - ["max_shadow_distance"] = 100, +EnvLight("/defaultLight") { } -LightSet("LightSet0E11AB") { - EnvLight("defaultLight"), +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -PerspectiveCamera("/app_scene/free_cam") { +LightSet("LightSet3AC404") { + EnvLight("/defaultLight"), +} + +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 29.995246887207031, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 29.995246887207031, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 29.995246887207031, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 29.995246887207031, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, } UserData("/World/s20.primvars:roughness") { @@ -278,6 +282,13 @@ UserData("/World/s20.primvars:primId") { ["rate"] = "constant", } +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/World/x1/s11.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 5}, @@ -428,6 +439,13 @@ UserData("/World/x1/s10.primvars:roughness") { ["rate"] = "constant", } +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/World/s22.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 10}, @@ -440,6 +458,13 @@ UserData("/World/s32.primvars:primId") { ["rate"] = "constant", } +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/World/s30.primvars:displayColor") { ["vec3f_key"] = "displayColor", ["vec3f_values_0"] = { Vec3(0.5, 0.5, 0.5)}, @@ -452,6 +477,12 @@ UserData("/World/s20.primvars:displayColor") { ["rate"] = "constant", } +UserData("/World/s00.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 0}, + ["rate"] = "constant", +} + UserData("/World/s02.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 2}, @@ -470,9 +501,9 @@ UserData("/World/s31.primvars:roughness") { ["rate"] = "constant", } -UserData("/World/s00.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, +UserData("/World/s23.primvars:displayColor") { + ["vec3f_key"] = "displayColor", + ["vec3f_values_0"] = { Vec3(0.5, 0.5, 0.5)}, ["rate"] = "constant", } @@ -488,6 +519,12 @@ UserData("/World/x1/s10.primvars:displayColor") { ["rate"] = "constant", } +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + UserData("/World/x1/s13.primvars:displayColor") { ["vec3f_key"] = "displayColor", ["vec3f_values_0"] = { Vec3(0.5, 0.5, 0.5)}, @@ -512,10 +549,10 @@ UserData("/World/x1/s13.primvars:roughness") { ["rate"] = "constant", } -UserData("/World/s23.primvars:displayColor") { - ["vec3f_key"] = "displayColor", - ["vec3f_values_0"] = { Vec3(0.5, 0.5, 0.5)}, - ["rate"] = "constant", +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", } UserData("/World/s22.primvars:roughness") { diff --git a/hats/geometry/geometry_primvars.usd b/hats/geometry/geometry_primvars.usd index be4ad20..4df7e80 100644 --- a/hats/geometry/geometry_primvars.usd +++ b/hats/geometry/geometry_primvars.usd @@ -63,7 +63,7 @@ def Xform "World" float[] primvars:roughness = [0] float primvars:moonray:mesh_resolution = 4 - def Sphere "s00" + def Sphere "s00" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (-3, -3, 2) uniform token[] xformOpOrder = ["xformOp:translate"] @@ -71,21 +71,21 @@ def Xform "World" rel material:binding = } - def Sphere "s01" + def Sphere "s01" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (-1, -3, 2) uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } - def Sphere "s02" + def Sphere "s02" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (1, -3, 2) uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } - def Sphere "s03" + def Sphere "s03" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (3, -3, 2) uniform token[] xformOpOrder = ["xformOp:translate"] @@ -96,14 +96,14 @@ def Xform "World" def Xform "x1" { bool primvars:moonray:visible_in_camera = False - def Sphere "s10" + def Sphere "s10" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (-3, -1, 2) uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } - def Sphere "s11" + def Sphere "s11" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (-1, -1, 2) uniform token[] xformOpOrder = ["xformOp:translate"] @@ -111,14 +111,14 @@ def Xform "World" rel material:binding = } - def Sphere "s12" + def Sphere "s12" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (1, -1, 2) uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } - def Sphere "s13" + def Sphere "s13" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (3, -1, 2) uniform token[] xformOpOrder = ["xformOp:translate"] @@ -126,21 +126,21 @@ def Xform "World" } } - def Sphere "s20" + def Sphere "s20" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (-3, 1, 2) uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } - def Sphere "s21" + def Sphere "s21" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (-1, 1, 2) uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } - def Sphere "s22" + def Sphere "s22" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (1, 1, 2) uniform token[] xformOpOrder = ["xformOp:translate"] @@ -148,14 +148,14 @@ def Xform "World" float[] primvars:displayOpacity = [0] } - def Sphere "s23" + def Sphere "s23" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (3, 1, 2) uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } - def Sphere "s30" + def Sphere "s30" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (-3, 3, 2) uniform token[] xformOpOrder = ["xformOp:translate"] @@ -163,21 +163,21 @@ def Xform "World" float primvars:moonray:mesh_resolution = 1 } - def Sphere "s31" + def Sphere "s31" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (-1, 3, 2) uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } - def Sphere "s32" + def Sphere "s32" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (1, 3, 2) uniform token[] xformOpOrder = ["xformOp:translate"] rel material:binding = } - def Sphere "s33" + def Sphere "s33" (prepend apiSchemas = ["MaterialBindingAPI"]) { double3 xformOp:translate = (3, 3, 2) uniform token[] xformOpOrder = ["xformOp:translate"] @@ -285,3 +285,6 @@ def Xform "World" } } +def DomeLight "defaultLight" +{ +} \ No newline at end of file diff --git a/hats/geometry/geometry_procedural.canonical.rdla b/hats/geometry/geometry_procedural.canonical.rdla index 168b2c2..e5d5a8d 100644 --- a/hats/geometry/geometry_procedural.canonical.rdla +++ b/hats/geometry/geometry_procedural.canonical.rdla @@ -1,15 +1,17 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } @@ -118,7 +120,7 @@ SphereGeometry("/world/sphere9") { ["phi_max"] = 180, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/world/plane"), SphereGeometry("/world/sphere"), SphereGeometry("/world/sphere10"), @@ -138,24 +140,24 @@ GeometrySet("allGeometry") { SphereGeometry("/world/sphere9"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/world/plane"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere"), "", DwaBaseMaterial("/world/sphere/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere10"), "", DwaBaseMaterial("/world/sphere10/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere11"), "", DwaBaseMaterial("/world/sphere11/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere12"), "", DwaBaseMaterial("/world/sphere12/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere13"), "", DwaBaseMaterial("/world/sphere13/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere14"), "", DwaBaseMaterial("/world/sphere14/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere15"), "", DwaBaseMaterial("/world/sphere15/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere16"), "", DwaBaseMaterial("/world/sphere16/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere2"), "", DwaBaseMaterial("/world/sphere2/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere3"), "", DwaBaseMaterial("/world/sphere3/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere4"), "", DwaBaseMaterial("/world/sphere4/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere5"), "", DwaBaseMaterial("/world/sphere5/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere6"), "", DwaBaseMaterial("/world/sphere6/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere7"), "", DwaBaseMaterial("/world/sphere7/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere8"), "", DwaBaseMaterial("/world/sphere8/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {SphereGeometry("/world/sphere9"), "", DwaBaseMaterial("/world/sphere9/surfacing/baseMtl"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/world/plane"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere"), "", DwaBaseMaterial("/world/sphere/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere10"), "", DwaBaseMaterial("/world/sphere10/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere11"), "", DwaBaseMaterial("/world/sphere11/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere12"), "", DwaBaseMaterial("/world/sphere12/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere13"), "", DwaBaseMaterial("/world/sphere13/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere14"), "", DwaBaseMaterial("/world/sphere14/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere15"), "", DwaBaseMaterial("/world/sphere15/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere16"), "", DwaBaseMaterial("/world/sphere16/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere2"), "", DwaBaseMaterial("/world/sphere2/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere3"), "", DwaBaseMaterial("/world/sphere3/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere4"), "", DwaBaseMaterial("/world/sphere4/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere5"), "", DwaBaseMaterial("/world/sphere5/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere6"), "", DwaBaseMaterial("/world/sphere6/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere7"), "", DwaBaseMaterial("/world/sphere7/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere8"), "", DwaBaseMaterial("/world/sphere8/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {SphereGeometry("/world/sphere9"), "", DwaBaseMaterial("/world/sphere9/surfacing/baseMtl"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } DwaBaseMaterial("/world/sphere/surfacing/baseMtl") { @@ -238,36 +240,38 @@ DwaBaseMaterial("/world/sphere9/surfacing/baseMtl") { ["albedo"] = bind(undef(), Rgb(0.100000001, 0.200000003, 0.300000012)), } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } -EnvLight("defaultLight") { - ["max_shadow_distance"] = 100, +EnvLight("/defaultLight") { } -LightSet("LightSet0E11AB") { - EnvLight("defaultLight"), +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -PerspectiveCamera("/app_scene/free_cam") { +LightSet("LightSet3AC404") { + EnvLight("/defaultLight"), +} + +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3, 3.5355339059327386, 43.242023467114137, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3, 3.5355339059327386, 43.242023467114137, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3, 3.5355339059327386, 43.242023467114137, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3, 3.5355339059327386, 43.242023467114137, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, } UserData("/world/plane.primvars:displayColor") { @@ -276,6 +280,39 @@ UserData("/world/plane.primvars:displayColor") { ["rate"] = "vertex", } +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/world/plane.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 16}, diff --git a/hats/geometry/geometry_procedural.usd b/hats/geometry/geometry_procedural.usd index cd220cc..dcad147 100644 --- a/hats/geometry/geometry_procedural.usd +++ b/hats/geometry/geometry_procedural.usd @@ -6,7 +6,7 @@ def Xform "world" uniform token[] xformOpOrder = ["xformOp:rotateX"] float3 xformOp:rotate = (0,1,0) -def Procedural "sphere" +def Procedural "sphere" (prepend apiSchemas = ["MaterialBindingAPI"]) { token procedural:class = "SphereGeometry" matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-1.5, 0, 0, 1) ) @@ -149,3 +149,6 @@ def Mesh "plane" } +def DomeLight "defaultLight" +{ +} \ No newline at end of file diff --git a/hats/geometry/geometry_skel.canonical.rdla b/hats/geometry/geometry_skel.canonical.rdla index 6f22013..aa449fe 100644 --- a/hats/geometry/geometry_skel.canonical.rdla +++ b/hats/geometry/geometry_skel.canonical.rdla @@ -1,15 +1,18 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["frame"] = 1, + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } @@ -18,89 +21,106 @@ RdlMeshGeometry("/group1/cylinder") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 2.2204460492503131e-16, -1, 0, 0, 1, 2.2204460492503131e-16, 0, 0, 0, 0, 1), Mat4(1, 0, 0, 0, 0, 2.2204460492503131e-16, -1, 0, 0, 1, 2.2204460492503131e-16, 0, 0, 0, 0, 1)), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 5, 4, 1, 2, 6, 5, 2, 3, 7, 6, 3, 0, 4, 7, 4, 5, 9, 8, 5, 6, 10, 9, 6, 7, 11, 10, 7, 4, 8, 11, 8, 9, 13, 12, 9, 10, 14, 13, 10, 11, 15, 14, 11, 8, 12, 15, 12, 13, 17, 16, 13, 14, 18, 17, 14, 15, 19, 18, 15, 12, 16, 19}, - ["vertex_list_0"] = { Vec3(-1, 0, -6), Vec3(0, -1, -6), Vec3(1, 0, -6), Vec3(0, 1, -6), Vec3(-1, 0, -0.200015426), Vec3(-0.399992317, -1, -0.600007713), Vec3(0.200015426, 0, -1), Vec3(-0.399992317, 1, -0.600007713), Vec3(-0.500009656, 0, 0.499990374), Vec3(0, -1, 0), Vec3(0.500009656, 0, -0.499990374), Vec3(0, 1, 0), Vec3(0.199976891, 0, 1), Vec3(0.599988461, -1, 0.400011569), Vec3(1, 0, -0.199976891), Vec3(0.599988461, 1, 0.400011569), Vec3(5.99986553, 0, 1.00009632), Vec3(5.99988461, -1, 0.000115513802), Vec3(5.99990368, 0, -0.999865234), Vec3(5.99988461, 1, 0.000115513802)}, + ["vertex_list_0"] = { Vec3(-1, 0, -6), Vec3(0, -1, -6), Vec3(1, 0, -6), Vec3(0, 1, -6), Vec3(-1.05764878, 0, -0.2675111), Vec3(-0.395068854, -1, -0.662579954), Vec3(0.2675111, 0, -1.05764878), Vec3(-0.395068854, 1, -0.662579954), Vec3(-0.578224897, 0, 0.493836045), Vec3(0, -1, 0), Vec3(0.578224897, 0, -0.493836045), Vec3(0, 1, 0), Vec3(0.0987333953, 0, 1.08647311), Vec3(0.592603266, -1, 0.493869901), Vec3(1.08647311, 0, -0.0987333953), Vec3(0.592603266, 1, 0.493869901), Vec3(5.76958275, 0, 1.92637086), Vec3(5.92603254, -1, 0.938698769), Vec3(6.08248234, 0, -0.0489733219), Vec3(5.92603254, 1, 0.938698769)}, ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/group1/cylinder.primvars:displayColor"), UserData("/group1/cylinder.primvars:primId")}, + ["primitive_attributes"] = { UserData("/group1/cylinder.primvars:displayColor"), UserData("/group1/cylinder.primvars:primId"), UserData("/group1/cylinder.primvars:skel:jointIndices"), UserData("/group1/cylinder.primvars:skel:jointWeights")}, } -RdlMeshGeometry("/group1/skeleton") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 2.2204460492503131e-16, -1, 0, 0, 1, 2.2204460492503131e-16, 0, 0, 0, 0, 1), Mat4(1, 0, 0, 0, 0, 2.2204460492503131e-16, -1, 0, 0, 1, 2.2204460492503131e-16, 0, 0, 0, 0, 1)), - ["face_vertex_count"] = { 3, 3, 3, 3, 3, 3, 3, 3}, - ["vertices_by_index"] = { 0, 2, 1, 0, 3, 2, 0, 4, 3, 0, 1, 4, 5, 7, 6, 5, 8, 7, 5, 9, 8, 5, 6, 9}, - ["vertex_list_0"] = { Vec3(0, 0, 0), Vec3(0.600000024, 0.600000024, -6), Vec3(0.600000024, -0.600000024, -6), Vec3(-0.600000024, -0.600000024, -6), Vec3(-0.600000024, 0.600000024, -6), Vec3(5.99988461, 0, 0.000115513802), Vec3(1.15513803e-05, 0.600000024, -0.599988461), Vec3(1.15513803e-05, -0.600000024, -0.599988461), Vec3(-1.15513803e-05, -0.600000024, 0.599988461), Vec3(-1.15513803e-05, 0.600000024, 0.599988461)}, - ["is_subd"] = false, - ["primitive_attributes"] = { UserData("/group1/skeleton.primvars:displayColor"), UserData("/group1/skeleton.primvars:displayOpacity"), UserData("/group1/skeleton.primvars:primId")}, - ["smooth_normal"] = false, -} - -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/group1/cylinder"), - RdlMeshGeometry("/group1/skeleton"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/group1/cylinder"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/group1/skeleton"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/group1/cylinder"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), +} + +EnvLight("/defaultLight") { } -EnvLight("defaultLight") { - ["max_shadow_distance"] = 100, +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -LightSet("LightSet0E11AB") { - EnvLight("defaultLight"), +LightSet("LightSet3AC404") { + EnvLight("/defaultLight"), } -PerspectiveCamera("/app_scene/free_cam") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2.9999423027038574, -2.9999422430992126, 27.995246887207031, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2.9999423027038574, -2.9999422430992126, 27.995246887207031, 1)), +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { + ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2.9630162715911865, -2.5306506156921387, 29.505474090576172, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2.9630162715911865, -2.5306506156921387, 29.505474090576172, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, } -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2.9999423027038574, -2.9999422430992126, 27.995246887207031, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2.9999423027038574, -2.9999422430992126, 27.995246887207031, 1)), +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2.9630162715911865, -2.5306506156921387, 29.505474090576172, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2.9630162715911865, -2.5306506156921387, 29.505474090576172, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, } -UserData("/group1/cylinder.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(0.600000024, 0, 0.400000006), Rgb(0.600000024, 0, 0.400000006), Rgb(0.600000024, 0, 0.400000006), Rgb(0.600000024, 0, 0.400000006), Rgb(0.5, 0, 0.5), Rgb(0.5, 0, 0.5), Rgb(0.5, 0, 0.5), Rgb(0.5, 0, 0.5), Rgb(0.400000006, 0, 0.600000024), Rgb(0.400000006, 0, 0.600000024), Rgb(0.400000006, 0, 0.600000024), Rgb(0.400000006, 0, 0.600000024), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1)}, - ["rate"] = "vertex", +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/group1/cylinder.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 0}, + ["float_values_0"] = { 1}, ["rate"] = "constant", } -UserData("/group1/skeleton.primvars:displayColor") { +UserData("/group1/cylinder.primvars:skel:jointWeights") { + ["float_key"] = "skel:jointWeights", + ["float_values_0"] = { 1, 0, 1, 0, 1, 0, 1, 0, 0.400000006, 0.600000024, 0.400000006, 0.600000024, 0.400000006, 0.600000024, 0.400000006, 0.600000024, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.600000024, 0.400000006, 0.600000024, 0.400000006, 0.600000024, 0.400000006, 0.600000024, 0.400000006, 1, 0, 1, 0, 1, 0, 1, 0}, + ["rate"] = "vertex", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/group1/cylinder.primvars:displayColor") { ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(0.5, 0.5, 0.5)}, - ["rate"] = "constant", + ["color_values_0"] = { Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(1, 0, 0), Rgb(0.600000024, 0, 0.400000006), Rgb(0.600000024, 0, 0.400000006), Rgb(0.600000024, 0, 0.400000006), Rgb(0.600000024, 0, 0.400000006), Rgb(0.5, 0, 0.5), Rgb(0.5, 0, 0.5), Rgb(0.5, 0, 0.5), Rgb(0.5, 0, 0.5), Rgb(0.400000006, 0, 0.600000024), Rgb(0.400000006, 0, 0.600000024), Rgb(0.400000006, 0, 0.600000024), Rgb(0.400000006, 0, 0.600000024), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1), Rgb(0, 0, 1)}, + ["rate"] = "vertex", } -UserData("/group1/skeleton.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", } -UserData("/group1/skeleton.primvars:displayOpacity") { - ["float_key"] = "displayOpacity", - ["float_values_0"] = { 1}, - ["rate"] = "constant", +UserData("/group1/cylinder.primvars:skel:jointIndices") { + ["float_key"] = "skel:jointIndices", + ["float_values_0"] = { 0, 0, 0, 0, 0, 0, 0, 0, 1.40129846e-45, 0, 1.40129846e-45, 0, 1.40129846e-45, 0, 1.40129846e-45, 0, 1.40129846e-45, 0, 1.40129846e-45, 0, 1.40129846e-45, 0, 1.40129846e-45, 0, 1.40129846e-45, 0, 1.40129846e-45, 0, 1.40129846e-45, 0, 1.40129846e-45, 0, 1.40129846e-45, 1.40129846e-45, 1.40129846e-45, 1.40129846e-45, 1.40129846e-45, 1.40129846e-45, 1.40129846e-45, 1.40129846e-45}, + ["rate"] = "vertex", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } diff --git a/hats/geometry/geometry_skel.usd b/hats/geometry/geometry_skel.usd index a6b9114..e43a7f1 100644 --- a/hats/geometry/geometry_skel.usd +++ b/hats/geometry/geometry_skel.usd @@ -168,3 +168,6 @@ def SkelRoot "group1" ( } } +def DomeLight "defaultLight" +{ +} \ No newline at end of file diff --git a/hats/geometry/geometry_subdivision.canonical.rdla b/hats/geometry/geometry_subdivision.canonical.rdla index 3f7779f..ed4c71d 100644 --- a/hats/geometry/geometry_subdivision.canonical.rdla +++ b/hats/geometry/geometry_subdivision.canonical.rdla @@ -1,21 +1,23 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { - ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), +AttributeMap("/DEFAULT/displayColorMap") { + ["default_value"] = Rgb(0.5, 0.5, 0.5), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } RdlMeshGeometry("/cube") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.5, 0, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.5, 0, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.5, 0, 0, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5, 6, 5, 1, 0}, ["vertex_list_0"] = { Vec3(1, 1, 1), Vec3(-1, 1, 1), Vec3(-1, -1, 1), Vec3(1, -1, 1), Vec3(-1, -1, -1), Vec3(-1, 1, -1), Vec3(1, 1, -1), Vec3(1, -1, -1)}, @@ -26,17 +28,18 @@ RdlMeshGeometry("/cube") { } RdlMeshGeometry("/cubeBilinear") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.5, 0, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.5, 0, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.5, 0, 0, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5, 6, 5, 1, 0}, ["vertex_list_0"] = { Vec3(1, 1, 1), Vec3(-1, 1, 1), Vec3(-1, -1, 1), Vec3(1, -1, 1), Vec3(-1, -1, -1), Vec3(-1, 1, -1), Vec3(1, 1, -1), Vec3(1, -1, -1)}, ["subd_scheme"] = "bilinear", ["subd_fvar_linear"] = "corners plus1", ["primitive_attributes"] = { UserData("/cubeBilinear.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/cubeCatmull") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.5, 0, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.5, 0, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.5, 0, 0, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5, 6, 5, 1, 0}, ["vertex_list_0"] = { Vec3(1, 1, 1), Vec3(-1, 1, 1), Vec3(-1, -1, 1), Vec3(1, -1, 1), Vec3(-1, -1, -1), Vec3(-1, 1, -1), Vec3(1, 1, -1), Vec3(1, -1, -1)}, @@ -45,7 +48,7 @@ RdlMeshGeometry("/cubeCatmull") { } RdlMeshGeometry("/cubeCatmullCreases") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.5, 6, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.5, 6, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.5, 6, 0, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5, 6, 5, 1, 0}, ["vertex_list_0"] = { Vec3(1, 1, 1), Vec3(-1, 1, 1), Vec3(-1, -1, 1), Vec3(1, -1, 1), Vec3(-1, -1, -1), Vec3(-1, 1, -1), Vec3(1, 1, -1), Vec3(1, -1, -1)}, @@ -56,7 +59,7 @@ RdlMeshGeometry("/cubeCatmullCreases") { } RdlMeshGeometry("/cubeCatmullFaceVaryingAll") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.5, 3, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.5, 3, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1.5, 3, 0, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5, 6, 5, 1, 0}, ["vertex_list_0"] = { Vec3(1, 1, 1), Vec3(-1, 1, 1), Vec3(-1, -1, 1), Vec3(1, -1, 1), Vec3(-1, -1, -1), Vec3(-1, 1, -1), Vec3(1, 1, -1), Vec3(1, -1, -1)}, @@ -65,7 +68,7 @@ RdlMeshGeometry("/cubeCatmullFaceVaryingAll") { } RdlMeshGeometry("/cubeCatmullSharpCorners") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.5, 3, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.5, 3, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 7.5, 3, 0, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5, 6, 5, 1, 0}, ["vertex_list_0"] = { Vec3(1, 1, 1), Vec3(-1, 1, 1), Vec3(-1, -1, 1), Vec3(1, -1, 1), Vec3(-1, -1, -1), Vec3(-1, 1, -1), Vec3(1, 1, -1), Vec3(1, -1, -1)}, @@ -76,7 +79,7 @@ RdlMeshGeometry("/cubeCatmullSharpCorners") { } RdlMeshGeometry("/cubeCatmullTriangleSmooth") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.5, 3, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.5, 3, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.5, 3, 0, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5, 6, 5, 1, 0}, ["vertex_list_0"] = { Vec3(1, 1, 1), Vec3(-1, 1, 1), Vec3(-1, -1, 1), Vec3(1, -1, 1), Vec3(-1, -1, -1), Vec3(-1, 1, -1), Vec3(1, 1, -1), Vec3(1, -1, -1)}, @@ -85,7 +88,7 @@ RdlMeshGeometry("/cubeCatmullTriangleSmooth") { } RdlMeshGeometry("/cubeFaceVaryingAll") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.5, 3, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.5, 3, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.5, 3, 0, 1), ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4}, ["vertices_by_index"] = { 0, 1, 2, 3, 4, 5, 6, 7, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5, 6, 5, 1, 0}, ["vertex_list_0"] = { Vec3(1, 1, 1), Vec3(-1, 1, 1), Vec3(-1, -1, 1), Vec3(1, -1, 1), Vec3(-1, -1, -1), Vec3(-1, 1, -1), Vec3(1, 1, -1), Vec3(1, -1, -1)}, @@ -96,12 +99,13 @@ RdlMeshGeometry("/cubeFaceVaryingAll") { } RdlMeshGeometry("/cubeLoop") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.5, 0, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.5, 0, 0, 1)), + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.5, 0, 0, 1), ["face_vertex_count"] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, ["vertices_by_index"] = { 0, 1, 2, 2, 3, 0, 4, 5, 6, 6, 7, 4, 4, 7, 3, 3, 2, 4, 0, 3, 7, 7, 6, 0, 4, 2, 1, 1, 5, 4, 6, 5, 1, 1, 0, 6}, ["vertex_list_0"] = { Vec3(1, 1, 1), Vec3(-1, 1, 1), Vec3(-1, -1, 1), Vec3(1, -1, 1), Vec3(-1, -1, -1), Vec3(-1, 1, -1), Vec3(1, 1, -1), Vec3(1, -1, -1)}, ["subd_fvar_linear"] = "corners plus1", ["primitive_attributes"] = { UserData("/cubeLoop.primvars:primId")}, + ["smooth_normal"] = false, } RdlMeshGeometry("/plane") { @@ -114,7 +118,7 @@ RdlMeshGeometry("/plane") { ["smooth_normal"] = false, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/cube"), RdlMeshGeometry("/cubeBilinear"), RdlMeshGeometry("/cubeCatmull"), @@ -127,49 +131,51 @@ GeometrySet("allGeometry") { RdlMeshGeometry("/plane"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/cube"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/cubeBilinear"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/cubeCatmull"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/cubeCatmullCreases"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/cubeCatmullFaceVaryingAll"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/cubeCatmullSharpCorners"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/cubeCatmullTriangleSmooth"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/cubeFaceVaryingAll"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/cubeLoop"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/plane"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/cube"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/cubeBilinear"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/cubeCatmull"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/cubeCatmullCreases"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/cubeCatmullFaceVaryingAll"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/cubeCatmullSharpCorners"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/cubeCatmullTriangleSmooth"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/cubeFaceVaryingAll"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/cubeLoop"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/plane"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, +} + +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), + ["roughness"] = 0.300000012, + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), - ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), +EnvLight("/defaultLight") { } -EnvLight("defaultLight") { - ["max_shadow_distance"] = 100, +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -LightSet("LightSet0E11AB") { - EnvLight("defaultLight"), +LightSet("LightSet3AC404") { + EnvLight("/defaultLight"), } -PerspectiveCamera("/app_scene/free_cam") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3, 2.949999988079071, 36.045249938964844, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3, 2.949999988079071, 36.045249938964844, 1)), +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3, 2.949999988079071, 36.045249938964844, 1), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, - ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["focal"] = 50, + ["film_width_aperture"] = 20.9702396, } -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3, 2.949999988079071, 36.045249938964844, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3, 2.949999988079071, 36.045249938964844, 1)), +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 3, 2.949999988079071, 36.045249938964844, 1), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, - ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["focal"] = 50, + ["film_width_aperture"] = 20.9702396, } UserData("/cubeCatmullTriangleSmooth.primvars:primId") { @@ -178,45 +184,72 @@ UserData("/cubeCatmullTriangleSmooth.primvars:primId") { ["rate"] = "constant", } +UserData("/cubeCatmullCreases.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 8}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + UserData("/cubeLoop.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 2}, ["rate"] = "constant", } +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/plane.primvars:displayColor") { ["color_key"] = "displayColor", ["color_values_0"] = { Rgb(1, 0, 0), Rgb(1, 0, 1), Rgb(1, 0, 0), Rgb(1, 0, 1)}, ["rate"] = "vertex", } -UserData("/cubeFaceVaryingAll.primvars:primId") { +UserData("/cube.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 4}, + ["float_values_0"] = { 0}, ["rate"] = "constant", } -UserData("/cubeCatmull.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } -UserData("/cubeCatmullFaceVaryingAll.primvars:primId") { +UserData("/cubeFaceVaryingAll.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 5}, + ["float_values_0"] = { 4}, ["rate"] = "constant", } -UserData("/cubeCatmullSharpCorners.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 7}, - ["rate"] = "constant", +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", } -UserData("/cubeCatmullCreases.primvars:primId") { +UserData("/cubeCatmullSharpCorners.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 8}, + ["float_values_0"] = { 7}, ["rate"] = "constant", } @@ -226,9 +259,9 @@ UserData("/plane.primvars:primId") { ["rate"] = "constant", } -UserData("/cube.primvars:primId") { +UserData("/cubeCatmullFaceVaryingAll.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 0}, + ["float_values_0"] = { 5}, ["rate"] = "constant", } @@ -237,3 +270,9 @@ UserData("/cubeBilinear.primvars:primId") { ["float_values_0"] = { 3}, ["rate"] = "constant", } + +UserData("/cubeCatmull.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, + ["rate"] = "constant", +} diff --git a/hats/geometry/geometry_subdivision.usd b/hats/geometry/geometry_subdivision.usd index 3fa6861..ab4a2b2 100644 --- a/hats/geometry/geometry_subdivision.usd +++ b/hats/geometry/geometry_subdivision.usd @@ -100,3 +100,7 @@ def Mesh "plane" ) uniform token subdivisionScheme = "none" } + +def DomeLight "defaultLight" +{ +} \ No newline at end of file diff --git a/hats/geometry/geometry_two_triangles.canonical.rdla b/hats/geometry/geometry_two_triangles.canonical.rdla index 84af560..79365f0 100644 --- a/hats/geometry/geometry_two_triangles.canonical.rdla +++ b/hats/geometry/geometry_two_triangles.canonical.rdla @@ -1,15 +1,17 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } @@ -24,44 +26,66 @@ RdlMeshGeometry("/two_triangles") { ["smooth_normal"] = false, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/two_triangles"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/two_triangles"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/two_triangles"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } -EnvLight("defaultLight") { - ["max_shadow_distance"] = 100, +EnvLight("/defaultLight") { } -LightSet("LightSet0E11AB") { - EnvLight("defaultLight"), +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -PerspectiveCamera("/app_scene/free_cam") { +LightSet("LightSet3AC404") { + EnvLight("/defaultLight"), +} + +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.5, 5.3354043960571289, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.5, 5.3354043960571289, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.5, 5.3354043960571289, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.5, 5.3354043960571289, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/two_triangles.primvars:displayColor") { @@ -70,12 +94,25 @@ UserData("/two_triangles.primvars:displayColor") { ["rate"] = "uniform", } +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + UserData("/two_triangles.primvars:displayOpacity") { ["float_key"] = "displayOpacity", ["float_values_0"] = { 1}, ["rate"] = "uniform", } +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/two_triangles.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 0}, diff --git a/hats/geometry/geometry_two_triangles.usd b/hats/geometry/geometry_two_triangles.usd index 14e4905..3f06b39 100644 --- a/hats/geometry/geometry_two_triangles.usd +++ b/hats/geometry/geometry_two_triangles.usd @@ -21,3 +21,7 @@ def Mesh "two_triangles" ) uniform token subdivisionScheme = "none" } + +def DomeLight "defaultLight" +{ +} \ No newline at end of file diff --git a/hats/geometry/geometry_volume.canonical.rdla b/hats/geometry/geometry_volume.canonical.rdla index da83737..277181f 100644 --- a/hats/geometry/geometry_volume.canonical.rdla +++ b/hats/geometry/geometry_volume.canonical.rdla @@ -1,15 +1,17 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } @@ -29,50 +31,48 @@ RdlMeshGeometry("/box") { ["smooth_normal"] = false, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { VdbGeometry("/Volume"), RdlMeshGeometry("/box"), } -Layer("defaultLayer") { - {VdbGeometry("/Volume"), "", undef(), LightSet("LightSet0E11AB"), undef(), VdbVolume("/Material/shader"), undef(), undef(), undef()}, - {RdlMeshGeometry("/box"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0E11AB"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {VdbGeometry("/Volume"), "", undef(), LightSet("LightSet3AC404"), undef(), VdbVolume("/Material/shader"), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/box"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet3AC404"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } -EnvLight("defaultLight") { - ["max_shadow_distance"] = 100, +EnvLight("/defaultLight") { } -LightSet("LightSet0E11AB") { - EnvLight("defaultLight"), +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -PerspectiveCamera("/app_scene/free_cam") { +LightSet("LightSet3AC404") { + EnvLight("/defaultLight"), +} + +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.1999998092651367, 20.199999952316286, 170.99950542449952, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.1999998092651367, 20.199999952316286, 170.99950542449952, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, + ["film_width_aperture"] = 20.9702396, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.1999998092651367, 20.199999952316286, 170.99950542449952, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1.1999998092651367, 20.199999952316286, 170.99950542449952, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, ["focal"] = blur(50, 50), - ["film_width_aperture"] = 20.9549999, -} - -VdbVolume("/Material/shader") { - ["color_mult"] = bind(undef(), Rgb(1, 0.800000012, 0.800000012)), + ["film_width_aperture"] = 20.9702396, } UserData("/box.primvars:displayColor") { @@ -81,6 +81,43 @@ UserData("/box.primvars:displayColor") { ["rate"] = "uniform", } +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +VdbVolume("/Material/shader") { + ["color_mult"] = bind(undef(), Rgb(1, 0.800000012, 0.800000012)), +} + UserData("/box.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 1}, diff --git a/hats/geometry/geometry_volume.usd b/hats/geometry/geometry_volume.usd index ec877f0..600fe79 100644 --- a/hats/geometry/geometry_volume.usd +++ b/hats/geometry/geometry_volume.usd @@ -3,7 +3,7 @@ defaultPrim = "Volume" ) -def Volume "Volume" +def Volume "Volume" (prepend apiSchemas = ["MaterialBindingAPI"]) { rel field:density = double3 xformOp:scale = (1, 1, 1) @@ -43,3 +43,6 @@ def Mesh "box" uniform token subdivisionScheme = "none" } +def DomeLight "defaultLight" +{ +} \ No newline at end of file diff --git a/hats/light/CMakeLists.txt b/hats/light/CMakeLists.txt index ad7dca6..876cf56 100644 --- a/hats/light/CMakeLists.txt +++ b/hats/light/CMakeLists.txt @@ -1,15 +1,13 @@ # Copyright 2023 DreamWorks Animation LLC # SPDX-License-Identifier: Apache-2.0 -add_hats_test(light_cylinder CAMERA camera) -add_hats_test(light_disk CAMERA camera) -add_hats_test(light_env CAMERA camera) -add_hats_test(light_rect CAMERA camera) -add_hats_test(light_sphere CAMERA camera) -add_hats_test(light_spot CAMERA camera) -add_hats_test(light_sun CAMERA camera) -add_hats_test(light_env_textured CAMERA camera) -add_hats_test(light_rect_textured CAMERA camera) +add_hats_test(light_shapes) +add_hats_test(light_dome CAMERA camera) +add_hats_test(light_distant CAMERA camera) +add_hats_test(light_mesh CAMERA camera) add_hats_test(light_linking CAMERA camera) add_hats_test(light_shadow CAMERA camera) add_hats_test(light_motion_blur CAMERA camera) +add_hats_test(light_instances) +add_hats_test(light_linking_subsets) +add_hats_test(light_custom_attrs) diff --git a/hats/light/light_custom_attrs.canonical.rdla b/hats/light/light_custom_attrs.canonical.rdla new file mode 100644 index 0000000..dd7936a --- /dev/null +++ b/hats/light/light_custom_attrs.canonical.rdla @@ -0,0 +1,115 @@ +SceneVariables { + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, + ["enable_motion_blur"] = false, +} + +AttributeMap("/DEFAULT/displayColorMap") { + ["default_value"] = Rgb(0.5, 0.5, 0.5), + ["primitive_attribute_name"] = "displayColor", +} + +AttributeMap("/DEFAULT/displayOpacityMap") { + ["primitive_attribute_name"] = "displayOpacity", + ["primitive_attribute_type"] = "float", +} + +RdlMeshGeometry("/wall") { + ["face_vertex_count"] = { 4}, + ["vertices_by_index"] = { 0, 1, 2, 3}, + ["vertex_list_0"] = { Vec3(10, 4, 0), Vec3(-10, 4, 0), Vec3(-10, -4, 0), Vec3(10, -4, 0)}, + ["subd_scheme"] = "bilinear", + ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, + ["smooth_normal"] = false, +} + +GeometrySet("/DEFAULT/allGeometry") { + RdlMeshGeometry("/wall"), +} + +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/wall"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet30D5DD"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, +} + +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), + ["roughness"] = 0.300000012, + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), +} + +RectLight("/rectLight") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -6, -1, 0.20000000298023224, 1), + ["color"] = Rgb(1, 0.25, 0.25), + ["texture"] = "/work/gshad/moonshine_test/rats_data/light/rect_textured/env_maps/burning_man-med.exr", + ["contrast"] = Rgb(0.5, 0.600000024, 0.699999988), + ["texture_translation"] = Vec2(0.100000001, 0.150000006), + ["normalized"] = false, + ["width"] = 3, + ["height"] = 5, +} + +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + +LightSet("LightSet30D5DD") { + RectLight("/rectLight"), +} + +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 51.597417451441288, 1), + ["far"] = 1000000, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = 50, + ["film_width_aperture"] = 20.9702396, +} + +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 51.597417451441288, 1), + ["far"] = 1000000, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = 50, + ["film_width_aperture"] = 20.9702396, +} + +UserData("/wall.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 0}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} diff --git a/hats/light/light_custom_attrs.usd b/hats/light/light_custom_attrs.usd new file mode 100644 index 0000000..be44212 --- /dev/null +++ b/hats/light/light_custom_attrs.usd @@ -0,0 +1,24 @@ +#usda 1.0 + +def Plane "wall" +{ + float3[] extent = [(-10, -4, 0), (10, 4, 0)] + double length = 8 + double width = 20 +} + +def RectLight "rectLight" +{ + color3f inputs:color = (1, 0.25, 0.25) + float inputs:height = 5 + float inputs:width = 3 + asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/light/rect_textured/env_maps/burning_man-med.exr" + float3 xformOp:translate = (-6, -1, 0.2) + uniform token[] xformOpOrder = ["xformOp:translate"] + # this is the correct method moving forward + color3f inputs:moonray:contrast = (0.5, 0.6, 0.7) + # backwards compatibility + float2 moonray:texture_translation = (0.1,0.15) +} + + diff --git a/hats/light/light_disk.canonical.rdla b/hats/light/light_disk.canonical.rdla deleted file mode 100644 index 684e67c..0000000 --- a/hats/light/light_disk.canonical.rdla +++ /dev/null @@ -1,105 +0,0 @@ -SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), - ["enable_motion_blur"] = false, -} - -RdlMeshGeometry("/floor/_") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1), Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/floor/_.primvars:primId")}, -} - -RdlMeshGeometry("/shape") { - ["node_xform"] = blur(Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1), Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1)), - ["face_vertex_count"] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - ["vertices_by_index"] = { 2, 1, 0, 3, 2, 0, 4, 3, 0, 5, 4, 0, 6, 5, 0, 7, 6, 0, 8, 7, 0, 9, 8, 0, 10, 9, 0, 1, 10, 0, 1, 2, 12, 11, 2, 3, 13, 12, 3, 4, 14, 13, 4, 5, 15, 14, 5, 6, 16, 15, 6, 7, 17, 16, 7, 8, 18, 17, 8, 9, 19, 18, 9, 10, 20, 19, 10, 1, 11, 20, 11, 12, 22, 21, 12, 13, 23, 22, 13, 14, 24, 23, 14, 15, 25, 24, 15, 16, 26, 25, 16, 17, 27, 26, 17, 18, 28, 27, 18, 19, 29, 28, 19, 20, 30, 29, 20, 11, 21, 30, 21, 22, 32, 31, 22, 23, 33, 32, 23, 24, 34, 33, 24, 25, 35, 34, 25, 26, 36, 35, 26, 27, 37, 36, 27, 28, 38, 37, 28, 29, 39, 38, 29, 30, 40, 39, 30, 21, 31, 40, 31, 32, 42, 41, 32, 33, 43, 42, 33, 34, 44, 43, 34, 35, 45, 44, 35, 36, 46, 45, 36, 37, 47, 46, 37, 38, 48, 47, 38, 39, 49, 48, 39, 40, 50, 49, 40, 31, 41, 50, 41, 42, 52, 51, 42, 43, 53, 52, 43, 44, 54, 53, 44, 45, 55, 54, 45, 46, 56, 55, 46, 47, 57, 56, 47, 48, 58, 57, 48, 49, 59, 58, 49, 50, 60, 59, 50, 41, 51, 60, 51, 52, 62, 61, 52, 53, 63, 62, 53, 54, 64, 63, 54, 55, 65, 64, 55, 56, 66, 65, 56, 57, 67, 66, 57, 58, 68, 67, 58, 59, 69, 68, 59, 60, 70, 69, 60, 51, 61, 70, 61, 62, 72, 71, 62, 63, 73, 72, 63, 64, 74, 73, 64, 65, 75, 74, 65, 66, 76, 75, 66, 67, 77, 76, 67, 68, 78, 77, 68, 69, 79, 78, 69, 70, 80, 79, 70, 61, 71, 80, 71, 72, 81, 72, 73, 81, 73, 74, 81, 74, 75, 81, 75, 76, 81, 76, 77, 81, 77, 78, 81, 78, 79, 81, 79, 80, 81, 80, 71, 81}, - ["vertex_list_0"] = { Vec3(0, 0, -1), Vec3(0.191341713, 0, -0.961939752), Vec3(0.154798701, 0.112467833, -0.961939752), Vec3(0.0591278374, 0.18197678, -0.961939752), Vec3(-0.0591278709, 0.18197678, -0.961939752), Vec3(-0.154798716, 0.112467825, -0.961939752), Vec3(-0.191341713, -1.67276237e-08, -0.961939752), Vec3(-0.154798657, -0.112467892, -0.961939752), Vec3(-0.0591278598, -0.18197678, -0.961939752), Vec3(0.0591278672, -0.18197678, -0.961939752), Vec3(0.154798687, -0.112467848, -0.961939752), Vec3(0.353553385, 0, -0.853553414), Vec3(0.28603071, 0.207813457, -0.853553414), Vec3(0.109253995, 0.336249262, -0.853553414), Vec3(-0.109254062, 0.336249232, -0.853553414), Vec3(-0.28603071, 0.207813442, -0.853553414), Vec3(-0.353553385, -3.09086197e-08, -0.853553414), Vec3(-0.28603062, -0.207813561, -0.853553414), Vec3(-0.10925404, -0.336249232, -0.853553414), Vec3(0.109254047, -0.336249232, -0.853553414), Vec3(0.28603068, -0.207813486, -0.853553414), Vec3(0.461939752, 0, -0.691341758), Vec3(0.373717099, 0.27152136, -0.691341758), Vec3(0.142747223, 0.439330816, -0.691341758), Vec3(-0.142747313, 0.439330786, -0.691341758), Vec3(-0.373717129, 0.27152133, -0.691341758), Vec3(-0.461939752, -4.03840552e-08, -0.691341758), Vec3(-0.37371701, -0.271521509, -0.691341758), Vec3(-0.142747283, -0.439330786, -0.691341758), Vec3(0.142747298, -0.439330786, -0.691341758), Vec3(0.373717099, -0.271521389, -0.691341758), Vec3(0.5, 0, -0.5), Vec3(0.404508501, 0.293892622, -0.5), Vec3(0.154508486, 0.47552827, -0.5), Vec3(-0.154508576, 0.47552824, -0.5), Vec3(-0.404508531, 0.293892592, -0.5), Vec3(-0.5, -4.37113883e-08, -0.5), Vec3(-0.404508382, -0.293892771, -0.5), Vec3(-0.154508546, -0.47552824, -0.5), Vec3(0.154508561, -0.47552824, -0.5), Vec3(0.404508471, -0.293892652, -0.5), Vec3(0.5, 0, 0.5), Vec3(0.404508501, 0.293892622, 0.5), Vec3(0.154508486, 0.47552827, 0.5), Vec3(-0.154508576, 0.47552824, 0.5), Vec3(-0.404508531, 0.293892592, 0.5), Vec3(-0.5, -4.37113883e-08, 0.5), Vec3(-0.404508382, -0.293892771, 0.5), Vec3(-0.154508546, -0.47552824, 0.5), Vec3(0.154508561, -0.47552824, 0.5), Vec3(0.404508471, -0.293892652, 0.5), Vec3(0.461939752, 0, 0.691341758), Vec3(0.373717099, 0.27152136, 0.691341758), Vec3(0.142747223, 0.439330816, 0.691341758), Vec3(-0.142747313, 0.439330786, 0.691341758), Vec3(-0.373717129, 0.27152133, 0.691341758), Vec3(-0.461939752, -4.03840552e-08, 0.691341758), Vec3(-0.37371701, -0.271521509, 0.691341758), Vec3(-0.142747283, -0.439330786, 0.691341758), Vec3(0.142747298, -0.439330786, 0.691341758), Vec3(0.373717099, -0.271521389, 0.691341758), Vec3(0.353553385, 0, 0.853553414), Vec3(0.28603071, 0.207813457, 0.853553414), Vec3(0.109253995, 0.336249262, 0.853553414), Vec3(-0.109254062, 0.336249232, 0.853553414), Vec3(-0.28603071, 0.207813442, 0.853553414), Vec3(-0.353553385, -3.09086197e-08, 0.853553414), Vec3(-0.28603062, -0.207813561, 0.853553414), Vec3(-0.10925404, -0.336249232, 0.853553414), Vec3(0.109254047, -0.336249232, 0.853553414), Vec3(0.28603068, -0.207813486, 0.853553414), Vec3(0.191341713, 0, 0.961939752), Vec3(0.154798701, 0.112467833, 0.961939752), Vec3(0.0591278374, 0.18197678, 0.961939752), Vec3(-0.0591278709, 0.18197678, 0.961939752), Vec3(-0.154798716, 0.112467825, 0.961939752), Vec3(-0.191341713, -1.67276237e-08, 0.961939752), Vec3(-0.154798657, -0.112467892, 0.961939752), Vec3(-0.0591278598, -0.18197678, 0.961939752), Vec3(0.0591278672, -0.18197678, 0.961939752), Vec3(0.154798687, -0.112467848, 0.961939752), Vec3(0, 0, 1)}, - ["primitive_attributes"] = { UserData("/shape.primvars:primId")}, -} - -RdlMeshGeometry("/wall/_") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1), Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/wall/_.primvars:primId")}, -} - -GeometrySet("allGeometry") { - RdlMeshGeometry("/floor/_"), - RdlMeshGeometry("/shape"), - RdlMeshGeometry("/wall/_"), -} - -Layer("defaultLayer") { - {RdlMeshGeometry("/floor/_"), "", BaseMaterial("/surfacing_floor/baseMtl"), LightSet("LightSet041FAC"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/shape"), "", BaseMaterial("/surfacing_shape/baseMtl"), LightSet("LightSet041FAC"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/wall/_"), "", BaseMaterial("/surfacing_floor/baseMtl"), LightSet("LightSet041FAC"), undef(), undef(), undef(), undef(), undef()}, -} - -BaseMaterial("/surfacing_floor/baseMtl") { - ["specular_roughness"] = bind(undef(), 0.316228002), - ["directional_diffuse_roughness"] = bind(undef(), 0.547722995), -} - -BaseMaterial("/surfacing_shape/baseMtl") { - ["diffuse_color"] = bind(undef(), Rgb(0.200000003, 0.200000003, 0.200000003)), - ["specular_roughness"] = bind(undef(), 0.141421363), - ["directional_diffuse_color"] = bind(undef(), Rgb(1, 0.5, 0.5)), - ["directional_diffuse_factor"] = 0.400000006, - ["directional_diffuse_roughness"] = bind(undef(), 0.774596691), -} - -DiskLight("/disk") { - ["node_xform"] = blur(Mat4(-0.029195599999999999, 0, 0.99957300000000004, 0, 0.99957300000000004, -4.3711400000000002e-08, 0.029195599999999999, 0, 4.3692800000000002e-08, 1, 1.27618e-09, 0, 0, 4, -8, 1), Mat4(-0.029195599999999999, 0, 0.99957300000000004, 0, 0.99957300000000004, -4.3711400000000002e-08, 0.029195599999999999, 0, 4.3692800000000002e-08, 1, 1.27618e-09, 0, 0, 4, -8, 1)), - ["visible_in_camera"] = "force on", - ["normalized"] = false, - ["radius"] = 2, -} - -LightSet("LightSet041FAC") { - DiskLight("/disk"), -} - -PerspectiveCamera("/camera") { - ["node_xform"] = blur(Mat4(0.55702200000000002, 0, -0.83049799999999996, 0, 0.070823800000000006, 0.99635700000000005, 0.047502099999999998, 0, 0.82747199999999999, -0.085278699999999999, 0.55499299999999996, 0, 10.648300000000001, 1.03694, -0.33220899999999998, 1), Mat4(0.55702200000000002, 0, -0.83049799999999996, 0, 0.070823800000000006, 0.99635700000000005, 0.047502099999999998, 0, 0.82747199999999999, -0.085278699999999999, 0.55499299999999996, 0, 10.648300000000001, 1.03694, -0.33220899999999998, 1)), - ["near"] = 0.00999999978, - ["mb_shutter_open"] = 0, - ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), - ["film_width_aperture"] = 240, -} - -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(0.55702200000000002, 0, -0.83049799999999996, 0, 0.070823800000000006, 0.99635700000000005, 0.047502099999999998, 0, 0.82747199999999999, -0.085278699999999999, 0.55499299999999996, 0, 10.648300000000001, 1.03694, -0.33220899999999998, 1), Mat4(0.55702200000000002, 0, -0.83049799999999996, 0, 0.070823800000000006, 0.99635700000000005, 0.047502099999999998, 0, 0.82747199999999999, -0.085278699999999999, 0.55499299999999996, 0, 10.648300000000001, 1.03694, -0.33220899999999998, 1)), - ["near"] = 0.00999999978, - ["mb_shutter_open"] = 0, - ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), - ["film_width_aperture"] = 240, -} - -UserData("/wall/_.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 2}, - ["rate"] = "constant", -} - -UserData("/shape.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, - ["rate"] = "constant", -} - -UserData("/floor/_.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", -} diff --git a/hats/light/light_disk.usd b/hats/light/light_disk.usd deleted file mode 100644 index 40db7bf..0000000 --- a/hats/light/light_disk.usd +++ /dev/null @@ -1,100 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (0.557022, 0, -0.830498, 0), - (0.0708238, 0.996357, 0.0475021, 0), - (0.827472, -0.0852787, 0.554993, 0), - (10.6483, 1.03694, -0.332209, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def Capsule "shape" -{ - matrix4d xformOp:transform = ( (3, 0, 0, 0), - (0, 3, 0, 0), - (0, 0, 3, 0), - (0, 1, -5, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def "floor" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def "wall" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_floor" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color = (1, 1, 1) - bool inputs:diffuse = true - float inputs:diffuse_factor = 1 - float inputs:directional_diffuse_roughness = 0.547723 - float inputs:specular_roughness = 0.316228 - } -} - -def Material "surfacing_shape" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color = (0.2, 0.2, 0.2) - bool inputs:diffuse = true - float inputs:diffuse_factor = 1 - color3f inputs:directional_diffuse_color = (1, 0.5, 0.5) - bool inputs:directional_diffuse = true - float inputs:directional_diffuse_factor = 0.4 - float inputs:directional_diffuse_roughness = 0.77459666924148 - color3f inputs:specular_color = (1, 1, 1) - bool inputs:specular = true - float inputs:specular_factor = 0.1 - float inputs:specular_roughness = 0.14142135623731 - } -} - -def DiskLight "disk" -{ - uniform token moonray:class = "DiskLight" - matrix4d xformOp:transform = ( (-0.0291956, 0, 0.999573, 0), - (0.999573, -4.37114e-08, 0.0291956, 0), - (4.36928e-08, 1, 1.27618e-09, 0), - (0, 4, -8, 1) ) - token moonray:visible_in_camera = "force on" - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1,1,1) - color3f inputs:color = (1,1,1) - float intensity = 1 - float inputs:intensity = 1 - float radius = 2 - float inputs:radius = 2 -} diff --git a/hats/light/light_sun.canonical.rdla b/hats/light/light_distant.canonical.rdla similarity index 73% rename from hats/light/light_sun.canonical.rdla rename to hats/light/light_distant.canonical.rdla index bab3f93..6ac5be3 100644 --- a/hats/light/light_sun.canonical.rdla +++ b/hats/light/light_distant.canonical.rdla @@ -1,29 +1,21 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 540, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } -RdlMeshGeometry("/floor") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1), Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/floor.primvars:displayColor"), UserData("/floor.primvars:primId")}, -} - RdlMeshGeometry("/shape") { ["node_xform"] = blur(Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1), Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1)), ["face_vertex_count"] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, @@ -32,48 +24,36 @@ RdlMeshGeometry("/shape") { ["primitive_attributes"] = { UserData("/shape.primvars:primId")}, } -RdlMeshGeometry("/wall") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1), Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/wall.primvars:displayColor"), UserData("/wall.primvars:primId")}, -} - -GeometrySet("allGeometry") { - RdlMeshGeometry("/floor"), +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/shape"), - RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0B2943"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/shape"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0B2943"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0B2943"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/shape"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet27B5A4"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } -DistantLight("/sun") { +DistantLight("/distantLight") { ["node_xform"] = blur(Mat4(0.78677399999999997, 0.019432000000000001, -0.61693600000000004, 0, -0.52516399999999996, 0.546265, -0.65253099999999997, 0, 0.32433099999999998, 0.83738699999999999, 0.43999199999999999, 0, 13.723800000000001, 7, 2.8143099999999999, 1), Mat4(0.78677399999999997, 0.019432000000000001, -0.61693600000000004, 0, -0.52516399999999996, 0.546265, -0.65253099999999997, 0, 0.32433099999999998, 0.83738699999999999, 0.43999199999999999, 0, 13.723800000000001, 7, 2.8143099999999999, 1)), - ["visible_in_camera"] = "force on", - ["color"] = Rgb(0.748000026, 0.748000026, 0.677999973), + ["color"] = Rgb(0.800000012, 0.800000012, 0.600000024), ["exposure"] = 9, ["normalized"] = false, ["angular_extent"] = 5, } -LightSet("LightSet0B2943") { - DistantLight("/sun"), +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -PerspectiveCamera("/camera") { +LightSet("LightSet27B5A4") { + DistantLight("/distantLight"), +} + +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(0.97038000000000002, 0, 0.24158499999999999, 0, 0.098203799999999994, 0.91365200000000002, -0.394457, 0, -0.220725, 0.40649800000000003, 0.88658899999999996, 0, -2.2919900000000002, 5.33596, 9.4201800000000002, 1), Mat4(0.97038000000000002, 0, 0.24158499999999999, 0, 0.098203799999999994, 0.91365200000000002, -0.394457, 0, -0.220725, 0.40649800000000003, 0.88658899999999996, 0, -2.2919900000000002, 5.33596, 9.4201800000000002, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -82,7 +62,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/camera") { ["node_xform"] = blur(Mat4(0.97038000000000002, 0, 0.24158499999999999, 0, 0.098203799999999994, 0.91365200000000002, -0.394457, 0, -0.220725, 0.40649800000000003, 0.88658899999999996, 0, -2.2919900000000002, 5.33596, 9.4201800000000002, 1), Mat4(0.97038000000000002, 0, 0.24158499999999999, 0, 0.098203799999999994, 0.91365200000000002, -0.394457, 0, -0.220725, 0.40649800000000003, 0.88658899999999996, 0, -2.2919900000000002, 5.33596, 9.4201800000000002, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -91,32 +71,41 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } -UserData("/floor.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } -UserData("/shape.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, - ["rate"] = "constant", +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", } -UserData("/floor.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } -UserData("/wall.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", } -UserData("/wall.primvars:primId") { +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/shape.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 2}, + ["float_values_0"] = { 0}, ["rate"] = "constant", } diff --git a/hats/light/light_distant.usd b/hats/light/light_distant.usd new file mode 100644 index 0000000..abf4faa --- /dev/null +++ b/hats/light/light_distant.usd @@ -0,0 +1,39 @@ +#usda 1.0 + +def Camera "camera" +{ + matrix4d xformOp:transform = ( (0.97038, 0, 0.241585, 0), + (0.0982038, 0.913652, -0.394457, 0), + (-0.220725, 0.406498, 0.886589, 0), + (-2.29199, 5.33596, 9.42018, 1) ) + + uniform token[] xformOpOrder = ["xformOp:transform"] + + float focalLength = 300; + float horizontalAperture = 240; + float verticalAperture = 135; + float2 clippingRange = (0.01, 10000) +} + +def Capsule "shape" +{ + matrix4d xformOp:transform = ( (3, 0, 0, 0), + (0, 3, 0, 0), + (0, 0, 3, 0), + (0, 1, -5, 1) ) + uniform token[] xformOpOrder = ["xformOp:transform"] +} + +def DistantLight "distantLight" +{ + matrix4d xformOp:transform = ( (0.786774, 0.019432, -0.616936, 0), + (-0.525164, 0.546265, -0.652531, 0), + (0.324331, 0.837387, 0.439992, 0), + (13.7238, 7, 2.81431, 1) ) + uniform token[] xformOpOrder = ["xformOp:transform"] + + color3f inputs:color = (0.8, 0.8, 0.6) + float inputs:intensity = 1 + float inputs:exposure = 9 + float inputs:angle = 5 +} diff --git a/hats/light/light_env_textured.canonical.rdla b/hats/light/light_dome.canonical.rdla similarity index 82% rename from hats/light/light_env_textured.canonical.rdla rename to hats/light/light_dome.canonical.rdla index 67952d3..388d8d4 100644 --- a/hats/light/light_env_textured.canonical.rdla +++ b/hats/light/light_dome.canonical.rdla @@ -1,15 +1,17 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } @@ -22,31 +24,33 @@ RdlMeshGeometry("/shape") { ["primitive_attributes"] = { UserData("/shape.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/shape"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/shape"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet011CB2"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/shape"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet011CB2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } EnvLight("/dome") { ["node_xform"] = blur(Mat4(-0.45929700000000001, 0, 0.88828200000000002, 0, 0.74292800000000003, 0.54817300000000002, 0.38413999999999998, 0, -0.486933, 0.836364, -0.25177500000000003, 0, -4.4943999999999997, 8.7855600000000003, -9.4904299999999999, 1), Mat4(-0.45929700000000001, 0, 0.88828200000000002, 0, 0.74292800000000003, 0.54817300000000002, 0.38413999999999998, 0, -0.486933, 0.836364, -0.25177500000000003, 0, -4.4943999999999997, 8.7855600000000003, -9.4904299999999999, 1)), - ["visible_in_camera"] = "force on", ["texture"] = "/work/gshad/moonshine_test/rats_data/light/env_textured/env_maps/burning_man-med.exr", } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet011CB2") { EnvLight("/dome"), } -PerspectiveCamera("/camera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(0.92717300000000002, 0, 0.37463299999999999, 0, 0.0972581, 0.96571399999999996, -0.240702, 0, -0.361788, 0.25960899999999998, 0.89538399999999996, 0, -2.0532599999999999, 2.95242, 0.34849200000000002, 1), Mat4(0.92717300000000002, 0, 0.37463299999999999, 0, 0.0972581, 0.96571399999999996, -0.240702, 0, -0.361788, 0.25960899999999998, 0.89538399999999996, 0, -2.0532599999999999, 2.95242, 0.34849200000000002, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -55,7 +59,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/camera") { ["node_xform"] = blur(Mat4(0.92717300000000002, 0, 0.37463299999999999, 0, 0.0972581, 0.96571399999999996, -0.240702, 0, -0.361788, 0.25960899999999998, 0.89538399999999996, 0, -2.0532599999999999, 2.95242, 0.34849200000000002, 1), Mat4(0.92717300000000002, 0, 0.37463299999999999, 0, 0.0972581, 0.96571399999999996, -0.240702, 0, -0.361788, 0.25960899999999998, 0.89538399999999996, 0, -2.0532599999999999, 2.95242, 0.34849200000000002, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -64,8 +68,41 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/shape.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 0}, ["rate"] = "constant", } + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/light/light_env_textured.usd b/hats/light/light_dome.usd similarity index 83% rename from hats/light/light_env_textured.usd rename to hats/light/light_dome.usd index af4328f..d3ed2bd 100644 --- a/hats/light/light_env_textured.usd +++ b/hats/light/light_dome.usd @@ -29,13 +29,9 @@ def DomeLight "dome" (0.742928, 0.548173, 0.38414, 0), (-0.486933, 0.836364, -0.251775, 0), (-4.4944, 8.78556, -9.49043, 1) ) - token moonray:visible_in_camera = "force on" uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1, 1, 1) + color3f inputs:color = (1, 1, 1) - float intensity = 1 float inputs:intensity = 1 - asset texture:file = "/work/gshad/moonshine_test/rats_data/light/env_textured/env_maps/burning_man-med.exr" asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/light/env_textured/env_maps/burning_man-med.exr" - bool moonray:sample_upper_hemisphere_only = false } diff --git a/hats/light/light_env.canonical.rdla b/hats/light/light_env.canonical.rdla deleted file mode 100644 index f179d03..0000000 --- a/hats/light/light_env.canonical.rdla +++ /dev/null @@ -1,118 +0,0 @@ -SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), - ["enable_motion_blur"] = false, -} - -AttributeMap("displayColor") { - ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), - ["primitive_attribute_name"] = "displayColor", -} - -AttributeMap("displayOpacity") { - ["primitive_attribute_name"] = "displayOpacity", - ["primitive_attribute_type"] = "float", -} - -RdlMeshGeometry("/floor") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1), Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/floor.primvars:displayColor"), UserData("/floor.primvars:primId")}, -} - -RdlMeshGeometry("/shape") { - ["node_xform"] = blur(Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1), Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1)), - ["face_vertex_count"] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - ["vertices_by_index"] = { 2, 1, 0, 3, 2, 0, 4, 3, 0, 5, 4, 0, 6, 5, 0, 7, 6, 0, 8, 7, 0, 9, 8, 0, 10, 9, 0, 1, 10, 0, 1, 2, 12, 11, 2, 3, 13, 12, 3, 4, 14, 13, 4, 5, 15, 14, 5, 6, 16, 15, 6, 7, 17, 16, 7, 8, 18, 17, 8, 9, 19, 18, 9, 10, 20, 19, 10, 1, 11, 20, 11, 12, 22, 21, 12, 13, 23, 22, 13, 14, 24, 23, 14, 15, 25, 24, 15, 16, 26, 25, 16, 17, 27, 26, 17, 18, 28, 27, 18, 19, 29, 28, 19, 20, 30, 29, 20, 11, 21, 30, 21, 22, 32, 31, 22, 23, 33, 32, 23, 24, 34, 33, 24, 25, 35, 34, 25, 26, 36, 35, 26, 27, 37, 36, 27, 28, 38, 37, 28, 29, 39, 38, 29, 30, 40, 39, 30, 21, 31, 40, 31, 32, 42, 41, 32, 33, 43, 42, 33, 34, 44, 43, 34, 35, 45, 44, 35, 36, 46, 45, 36, 37, 47, 46, 37, 38, 48, 47, 38, 39, 49, 48, 39, 40, 50, 49, 40, 31, 41, 50, 41, 42, 52, 51, 42, 43, 53, 52, 43, 44, 54, 53, 44, 45, 55, 54, 45, 46, 56, 55, 46, 47, 57, 56, 47, 48, 58, 57, 48, 49, 59, 58, 49, 50, 60, 59, 50, 41, 51, 60, 51, 52, 62, 61, 52, 53, 63, 62, 53, 54, 64, 63, 54, 55, 65, 64, 55, 56, 66, 65, 56, 57, 67, 66, 57, 58, 68, 67, 58, 59, 69, 68, 59, 60, 70, 69, 60, 51, 61, 70, 61, 62, 72, 71, 62, 63, 73, 72, 63, 64, 74, 73, 64, 65, 75, 74, 65, 66, 76, 75, 66, 67, 77, 76, 67, 68, 78, 77, 68, 69, 79, 78, 69, 70, 80, 79, 70, 61, 71, 80, 71, 72, 81, 72, 73, 81, 73, 74, 81, 74, 75, 81, 75, 76, 81, 76, 77, 81, 77, 78, 81, 78, 79, 81, 79, 80, 81, 80, 71, 81}, - ["vertex_list_0"] = { Vec3(0, 0, -1), Vec3(0.191341713, 0, -0.961939752), Vec3(0.154798701, 0.112467833, -0.961939752), Vec3(0.0591278374, 0.18197678, -0.961939752), Vec3(-0.0591278709, 0.18197678, -0.961939752), Vec3(-0.154798716, 0.112467825, -0.961939752), Vec3(-0.191341713, -1.67276237e-08, -0.961939752), Vec3(-0.154798657, -0.112467892, -0.961939752), Vec3(-0.0591278598, -0.18197678, -0.961939752), Vec3(0.0591278672, -0.18197678, -0.961939752), Vec3(0.154798687, -0.112467848, -0.961939752), Vec3(0.353553385, 0, -0.853553414), Vec3(0.28603071, 0.207813457, -0.853553414), Vec3(0.109253995, 0.336249262, -0.853553414), Vec3(-0.109254062, 0.336249232, -0.853553414), Vec3(-0.28603071, 0.207813442, -0.853553414), Vec3(-0.353553385, -3.09086197e-08, -0.853553414), Vec3(-0.28603062, -0.207813561, -0.853553414), Vec3(-0.10925404, -0.336249232, -0.853553414), Vec3(0.109254047, -0.336249232, -0.853553414), Vec3(0.28603068, -0.207813486, -0.853553414), Vec3(0.461939752, 0, -0.691341758), Vec3(0.373717099, 0.27152136, -0.691341758), Vec3(0.142747223, 0.439330816, -0.691341758), Vec3(-0.142747313, 0.439330786, -0.691341758), Vec3(-0.373717129, 0.27152133, -0.691341758), Vec3(-0.461939752, -4.03840552e-08, -0.691341758), Vec3(-0.37371701, -0.271521509, -0.691341758), Vec3(-0.142747283, -0.439330786, -0.691341758), Vec3(0.142747298, -0.439330786, -0.691341758), Vec3(0.373717099, -0.271521389, -0.691341758), Vec3(0.5, 0, -0.5), Vec3(0.404508501, 0.293892622, -0.5), Vec3(0.154508486, 0.47552827, -0.5), Vec3(-0.154508576, 0.47552824, -0.5), Vec3(-0.404508531, 0.293892592, -0.5), Vec3(-0.5, -4.37113883e-08, -0.5), Vec3(-0.404508382, -0.293892771, -0.5), Vec3(-0.154508546, -0.47552824, -0.5), Vec3(0.154508561, -0.47552824, -0.5), Vec3(0.404508471, -0.293892652, -0.5), Vec3(0.5, 0, 0.5), Vec3(0.404508501, 0.293892622, 0.5), Vec3(0.154508486, 0.47552827, 0.5), Vec3(-0.154508576, 0.47552824, 0.5), Vec3(-0.404508531, 0.293892592, 0.5), Vec3(-0.5, -4.37113883e-08, 0.5), Vec3(-0.404508382, -0.293892771, 0.5), Vec3(-0.154508546, -0.47552824, 0.5), Vec3(0.154508561, -0.47552824, 0.5), Vec3(0.404508471, -0.293892652, 0.5), Vec3(0.461939752, 0, 0.691341758), Vec3(0.373717099, 0.27152136, 0.691341758), Vec3(0.142747223, 0.439330816, 0.691341758), Vec3(-0.142747313, 0.439330786, 0.691341758), Vec3(-0.373717129, 0.27152133, 0.691341758), Vec3(-0.461939752, -4.03840552e-08, 0.691341758), Vec3(-0.37371701, -0.271521509, 0.691341758), Vec3(-0.142747283, -0.439330786, 0.691341758), Vec3(0.142747298, -0.439330786, 0.691341758), Vec3(0.373717099, -0.271521389, 0.691341758), Vec3(0.353553385, 0, 0.853553414), Vec3(0.28603071, 0.207813457, 0.853553414), Vec3(0.109253995, 0.336249262, 0.853553414), Vec3(-0.109254062, 0.336249232, 0.853553414), Vec3(-0.28603071, 0.207813442, 0.853553414), Vec3(-0.353553385, -3.09086197e-08, 0.853553414), Vec3(-0.28603062, -0.207813561, 0.853553414), Vec3(-0.10925404, -0.336249232, 0.853553414), Vec3(0.109254047, -0.336249232, 0.853553414), Vec3(0.28603068, -0.207813486, 0.853553414), Vec3(0.191341713, 0, 0.961939752), Vec3(0.154798701, 0.112467833, 0.961939752), Vec3(0.0591278374, 0.18197678, 0.961939752), Vec3(-0.0591278709, 0.18197678, 0.961939752), Vec3(-0.154798716, 0.112467825, 0.961939752), Vec3(-0.191341713, -1.67276237e-08, 0.961939752), Vec3(-0.154798657, -0.112467892, 0.961939752), Vec3(-0.0591278598, -0.18197678, 0.961939752), Vec3(0.0591278672, -0.18197678, 0.961939752), Vec3(0.154798687, -0.112467848, 0.961939752), Vec3(0, 0, 1)}, - ["primitive_attributes"] = { UserData("/shape.primvars:primId")}, -} - -RdlMeshGeometry("/wall") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1), Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/wall.primvars:displayColor"), UserData("/wall.primvars:primId")}, -} - -GeometrySet("allGeometry") { - RdlMeshGeometry("/floor"), - RdlMeshGeometry("/shape"), - RdlMeshGeometry("/wall"), -} - -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet011CB2"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/shape"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet011CB2"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet011CB2"), undef(), undef(), undef(), undef(), undef()}, -} - -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), - ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), -} - -EnvLight("/dome") { - ["node_xform"] = blur(Mat4(-0.45929700000000001, 0, 0.88828200000000002, 0, 0.74292800000000003, 0.54817300000000002, 0.38413999999999998, 0, -0.486933, 0.836364, -0.25177500000000003, 0, -4.4943999999999997, 8.7855600000000003, -9.4904299999999999, 1), Mat4(-0.45929700000000001, 0, 0.88828200000000002, 0, 0.74292800000000003, 0.54817300000000002, 0.38413999999999998, 0, -0.486933, 0.836364, -0.25177500000000003, 0, -4.4943999999999997, 8.7855600000000003, -9.4904299999999999, 1)), - ["visible_in_camera"] = "force on", -} - -LightSet("LightSet011CB2") { - EnvLight("/dome"), -} - -PerspectiveCamera("/camera") { - ["node_xform"] = blur(Mat4(0.92717300000000002, 0, 0.37463299999999999, 0, 0.0972581, 0.96571399999999996, -0.240702, 0, -0.361788, 0.25960899999999998, 0.89538399999999996, 0, -2.0532599999999999, 2.95242, 0.34849200000000002, 1), Mat4(0.92717300000000002, 0, 0.37463299999999999, 0, 0.0972581, 0.96571399999999996, -0.240702, 0, -0.361788, 0.25960899999999998, 0.89538399999999996, 0, -2.0532599999999999, 2.95242, 0.34849200000000002, 1)), - ["near"] = 0.00999999978, - ["mb_shutter_open"] = 0, - ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), - ["film_width_aperture"] = 240, -} - -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(0.92717300000000002, 0, 0.37463299999999999, 0, 0.0972581, 0.96571399999999996, -0.240702, 0, -0.361788, 0.25960899999999998, 0.89538399999999996, 0, -2.0532599999999999, 2.95242, 0.34849200000000002, 1), Mat4(0.92717300000000002, 0, 0.37463299999999999, 0, 0.0972581, 0.96571399999999996, -0.240702, 0, -0.361788, 0.25960899999999998, 0.89538399999999996, 0, -2.0532599999999999, 2.95242, 0.34849200000000002, 1)), - ["near"] = 0.00999999978, - ["mb_shutter_open"] = 0, - ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), - ["film_width_aperture"] = 240, -} - -UserData("/floor.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", -} - -UserData("/shape.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, - ["rate"] = "constant", -} - -UserData("/floor.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", -} - -UserData("/wall.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", -} - -UserData("/wall.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 2}, - ["rate"] = "constant", -} diff --git a/hats/light/light_env.usd b/hats/light/light_env.usd deleted file mode 100644 index 629cc34..0000000 --- a/hats/light/light_env.usd +++ /dev/null @@ -1,70 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (0.927173, 0, 0.374633, 0), - (0.0972581, 0.965714, -0.240702, 0), - (-0.361788, 0.259609, 0.895384, 0), - (-2.05326, 2.95242, 0.348492, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def Capsule "shape" -{ - matrix4d xformOp:transform = ( (3, 0, 0, 0), - (0, 3, 0, 0), - (0, 0, 3, 0), - (0, 1, -5, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def DomeLight "dome" -{ - matrix4d xformOp:transform = ( (-0.459297, 0, 0.888282, 0), - (0.742928, 0.548173, 0.38414, 0), - (-0.486933, 0.836364, -0.251775, 0), - (-4.4944, 8.78556, -9.49043, 1) ) - token moonray:visible_in_camera = "force on" - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1, 1, 1) - color3f inputs:color = (1, 1, 1) - float intensity = 1 - float inputs:intensity = 1 - bool moonray:sample_upper_hemisphere_only = false -} diff --git a/hats/light/light_instances.canonical.rdla b/hats/light/light_instances.canonical.rdla new file mode 100644 index 0000000..ce30e82 --- /dev/null +++ b/hats/light/light_instances.canonical.rdla @@ -0,0 +1,183 @@ +SceneVariables { + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, + ["enable_motion_blur"] = false, +} + +AttributeMap("/DEFAULT/displayColorMap") { + ["default_value"] = Rgb(0.5, 0.5, 0.5), + ["primitive_attribute_name"] = "displayColor", +} + +AttributeMap("/DEFAULT/displayOpacityMap") { + ["primitive_attribute_name"] = "displayOpacity", + ["primitive_attribute_type"] = "float", +} + +RdlMeshGeometry("/mesh") { + ["face_vertex_count"] = { 4, 3, 3, 3, 3}, + ["vertices_by_index"] = { 0, 1, 2, 3, 1, 0, 4, 2, 1, 4, 3, 2, 4, 0, 3, 4}, + ["vertex_list_0"] = { Vec3(1, 0, 1), Vec3(-1, 0, 1), Vec3(-1, 0, -1), Vec3(1, 0, -1), Vec3(0, 2, 0)}, + ["normal_list"] = { Vec3(0, -1, 0), Vec3(0, 0.449999988, 0.889999986), Vec3(-0.889999986, 0.449999988, 0), Vec3(0, 0.449999988, -0.889999986), Vec3(0.889999986, 0.449999988, 0)}, + ["is_subd"] = false, + ["subd_fvar_linear"] = "corners plus1", + ["primitive_attributes"] = { UserData("/mesh.primvars:primId")}, + ["smooth_normal"] = false, +} + +GeometrySet("/DEFAULT/allGeometry") { + RdlMeshGeometry("/mesh"), +} + +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/mesh"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSetFE626A"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, +} + +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), + ["roughness"] = 0.300000012, + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), +} + +SphereLight("/p/s/sphere") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -10, 0, 0, 1), + ["visible_in_camera"] = "force on", + ["color"] = Rgb(0, 1, 0), + ["intensity"] = 3, + ["normalized"] = false, + ["radius"] = 1.5, +} + +SphereLight("/pn/sn/pointInstancer/prototype/sphere") { + ["visible_in_camera"] = "force on", + ["color"] = Rgb(1, 0, 0), + ["intensity"] = 3, + ["normalized"] = false, + ["radius"] = 1.5, +} + +SphereLight("/pn/sn/pointInstancer/prototype/sphere_i0") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 10, 0, 0, 1), + ["visible_in_camera"] = "force on", + ["color"] = Rgb(1, 0, 0), + ["intensity"] = 3, + ["normalized"] = false, + ["radius"] = 1.5, +} + +SphereLight("/pn/sn/pointInstancer/prototype/sphere_i1") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 15, 0, 0, 1), + ["visible_in_camera"] = "force on", + ["color"] = Rgb(1, 0, 0), + ["intensity"] = 3, + ["normalized"] = false, + ["radius"] = 1.5, +} + +SphereLight("/pn/sn/pointInstancer/prototype/sphere_i2") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 20, 0, 0, 1), + ["visible_in_camera"] = "force on", + ["color"] = Rgb(1, 0, 0), + ["intensity"] = 3, + ["normalized"] = false, + ["radius"] = 1.5, +} + +SphereLight("sphere") { + ["visible_in_camera"] = "force on", + ["color"] = Rgb(0, 1, 0), + ["intensity"] = 3, + ["normalized"] = false, + ["radius"] = 1.5, +} + +SphereLight("sphere_i0") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4, 0, 0, 1), + ["visible_in_camera"] = "force on", + ["color"] = Rgb(0, 1, 0), + ["intensity"] = 3, + ["normalized"] = false, + ["radius"] = 1.5, +} + +SphereLight("sphere_i1") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -3, 0, 0, 1), + ["visible_in_camera"] = "force on", + ["color"] = Rgb(0, 1, 0), + ["intensity"] = 3, + ["normalized"] = false, + ["radius"] = 1.5, +} + +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + +LightSet("LightSetFE626A") { + SphereLight("/p/s/sphere"), + SphereLight("/pn/sn/pointInstancer/prototype/sphere"), + SphereLight("/pn/sn/pointInstancer/prototype/sphere_i0"), + SphereLight("/pn/sn/pointInstancer/prototype/sphere_i1"), + SphereLight("/pn/sn/pointInstancer/prototype/sphere_i2"), + SphereLight("sphere"), + SphereLight("sphere_i0"), + SphereLight("sphere_i1"), +} + +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 5, 0.25, 80.681777954101562, 1), + ["far"] = 1000000, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = 50, + ["film_width_aperture"] = 20.9702396, +} + +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, -0, 1, 0, 5, 0.25, 80.681777954101562, 1), + ["far"] = 1000000, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = 50, + ["film_width_aperture"] = 20.9702396, +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/mesh.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 0}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} diff --git a/hats/light/light_instances.usd b/hats/light/light_instances.usd new file mode 100644 index 0000000..9432427 --- /dev/null +++ b/hats/light/light_instances.usd @@ -0,0 +1,67 @@ +#usda 1.0 + +# Moonray doesn't appear to render lights if no geometry present +def Mesh "mesh" { + float3[] extent = [(-1, 0, -1), (1, 2, 1)] + float3[] points = [(1, 0, 1), (-1, 0, 1), (-1, 0, -1), (1, 0, -1), (0, 2, 0)] + int[] faceVertexCounts = [4, 3, 3, 3, 3] + int[] faceVertexIndices = [0, 1, 2, 3, 1, 0, 4, 2, 1, 4, 3, 2, 4, 0, 3, 4] + normal3f[] primvars:normals = [ + (0, -1, 0), (0, 0.45, 0.89), (-0.89, 0.45, 0), (0, 0.45, -0.89), (0.89, 0.45, 0) + ] ( interpolation = "uniform") + uniform token subdivisionScheme = "none" +} + +def Xform "pn" +{ + def Xform "sn" (instanceable = true) + { + float3 xformOp:translate = (10, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] + def PointInstancer "pointInstancer" { + point3f[] positions = [ + (0, 0, 0), (5, 0, 0), (10, 0, 0) + ] + int[] protoIndices = [0, 0, 0] + add rel prototypes = [ ] + def Xform "prototype" { + def SphereLight "sphere" + { + token moonray:visible_in_camera = "force on" + color3f inputs:color = (1, 0, 0) + float inputs:intensity = 3 + float inputs:radius = 1.5 + } + } + } + } +} + +def Xform "p" +{ + def Xform "s" (instanceable = true) + { + float3 xformOp:translate = (-10, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate"] + def SphereLight "sphere" + { + color3f inputs:color = (0, 1, 0) + float inputs:intensity = 3 + float inputs:radius = 1.5 + + token moonray:visible_in_camera = "force on" + } + } +} + +def Xform "p2" ( + append references =

+) { + double3 xformOp:translate = (4, 0, 0) +} + +def Xform "p3" ( + append references =

+) { + double3 xformOp:translate = (-3, 0, 0) +} \ No newline at end of file diff --git a/hats/light/light_linking.canonical.rdla b/hats/light/light_linking.canonical.rdla index fe47386..6409843 100644 --- a/hats/light/light_linking.canonical.rdla +++ b/hats/light/light_linking.canonical.rdla @@ -1,15 +1,17 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } @@ -37,22 +39,22 @@ RdlMeshGeometry("/sphere3") { ["primitive_attributes"] = { UserData("/sphere3.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/sphere1"), RdlMeshGeometry("/sphere2"), RdlMeshGeometry("/sphere3"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/sphere1"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet071701"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/sphere2"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet0BB081"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/sphere3"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet049980"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/sphere1"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet071701"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/sphere2"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet0BB081"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/sphere3"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet049980"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } EnvLight("/dome1") { @@ -63,6 +65,9 @@ EnvLight("/dome2") { ["color"] = Rgb(0, 1, 0), } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet049980") { EnvLight("/dome2"), } @@ -85,7 +90,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 16, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 16, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -94,20 +99,53 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/sphere2.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 1}, ["rate"] = "constant", } -UserData("/sphere1.primvars:primId") { +UserData("/sphere3.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 0}, + ["float_values_0"] = { 2}, ["rate"] = "constant", } -UserData("/sphere3.primvars:primId") { +UserData("/sphere1.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 2}, + ["float_values_0"] = { 0}, ["rate"] = "constant", } + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/light/light_linking.usd b/hats/light/light_linking.usd index fd09e2c..70d9e58 100644 --- a/hats/light/light_linking.usd +++ b/hats/light/light_linking.usd @@ -14,7 +14,7 @@ def Camera "camera" float2 clippingRange = (0.01, 10000) } -def Sphere "sphere1" +def Sphere "sphere1" (prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), @@ -23,7 +23,7 @@ def Sphere "sphere1" uniform token[] xformOpOrder = ["xformOp:transform"] } -def Sphere "sphere2" +def Sphere "sphere2" (prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), @@ -32,7 +32,7 @@ def Sphere "sphere2" uniform token[] xformOpOrder = ["xformOp:transform"] } -def Sphere "sphere3" +def Sphere "sphere3" (prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), @@ -43,20 +43,18 @@ def Sphere "sphere3" def DomeLight "dome1" { - color3f color = (1, 0, 0) color3f inputs:color = (1, 0, 0) - float intensity = 1 float inputs:intensity = 1 + bool collection:lightLink:includeRoot = false rel collection:lightLink:includes = [,] } def DomeLight "dome2" { - color3f color = (0, 1, 0) color3f inputs:color = (0, 1, 0) - float intensity = 1 float inputs:intensity = 1 + bool collection:lightLink:includeRoot = false rel collection:lightLink:includes = [,] } diff --git a/hats/light/light_linking_subsets.canonical.rdla b/hats/light/light_linking_subsets.canonical.rdla new file mode 100644 index 0000000..6e6ac49 --- /dev/null +++ b/hats/light/light_linking_subsets.canonical.rdla @@ -0,0 +1,128 @@ +SceneVariables { + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, + ["enable_motion_blur"] = false, +} + +AttributeMap("/DEFAULT/displayColorMap") { + ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), + ["primitive_attribute_name"] = "displayColor", +} + +AttributeMap("/DEFAULT/displayOpacityMap") { + ["primitive_attribute_name"] = "displayOpacity", + ["primitive_attribute_type"] = "float", +} + +RdlMeshGeometry("/two_triangles") { + ["face_vertex_count"] = { 3, 3}, + ["vertices_by_index"] = { 0, 1, 2, 0, 2, 3}, + ["vertex_list_0"] = { Vec3(-1, 0, 0), Vec3(1, 0, 0), Vec3(1, 1, 0), Vec3(-1, 1, 0)}, + ["part_list"] = { "set1", "set2"}, + ["part_face_count_list"] = { 1, 1}, + ["part_face_indices"] = { 0, 1}, + ["is_subd"] = false, + ["subd_fvar_linear"] = "corners plus1", + ["primitive_attributes"] = { UserData("/two_triangles.primvars:primId")}, + ["smooth_normal"] = false, +} + +GeometrySet("/DEFAULT/allGeometry") { + RdlMeshGeometry("/two_triangles"), +} + +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/two_triangles"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("/DEFAULT/emptyLightSet"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/two_triangles"), "set1", DwaBaseMaterial("/mat/mtl"), LightSet("LightSet071701"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/two_triangles"), "set2", DwaBaseMaterial("/mat/mtl"), LightSet("LightSet049980"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, +} + +DwaBaseMaterial("/mat/mtl") { +} + +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), + ["roughness"] = bind(undef(), 0.300000012), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), +} + +EnvLight("/dome1") { + ["color"] = Rgb(0, 0, 1), +} + +EnvLight("/dome2") { + ["color"] = Rgb(0, 1, 0), +} + +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + +LightSet("LightSet049980") { + EnvLight("/dome2"), +} + +LightSet("LightSet071701") { + EnvLight("/dome1"), +} + +LightSet("/DEFAULT/emptyLightSet") { +} + +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { + ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.5, 5.3354043960571289, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.5, 5.3354043960571289, 1)), + ["far"] = 1000000, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = blur(50, 50), + ["film_width_aperture"] = 20.9702396, +} + +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.5, 5.3354043960571289, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0.5, 5.3354043960571289, 1)), + ["far"] = 1000000, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = blur(50, 50), + ["film_width_aperture"] = 20.9702396, +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/two_triangles.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 0}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/light/light_linking_subsets.usd b/hats/light/light_linking_subsets.usd new file mode 100644 index 0000000..6ff5897 --- /dev/null +++ b/hats/light/light_linking_subsets.usd @@ -0,0 +1,55 @@ +#usda 1.0 + +def Camera "shot_cam" +{ + matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.5, 10, 1) ) + uniform token[] xformOpOrder = ["xformOp:transform"] +} + +def Mesh "two_triangles" +{ + int[] faceVertexCounts = [3, 3] + int[] faceVertexIndices = [0, 1, 2, 0, 2, 3] + point3f[] points = [(-1, 0, 0), (1, 0, 0), (1, 1, 0), (-1, 1, 0)] ( + interpolation = "vertex" + ) + uniform token subdivisionScheme = "none" + def GeomSubset "set1" (prepend apiSchemas = ["MaterialBindingAPI"]) + { + int[] indices = [0] + rel material:binding = + } + def GeomSubset "set2" (prepend apiSchemas = ["MaterialBindingAPI"]) + { + int[] indices = [1] + rel material:binding = + } +} + +def DomeLight "dome1" +{ + bool collection:lightLink:includeRoot = false + color3f inputs:color = (0, 0, 1) + rel collection:lightLink:includes = [] +} + +def DomeLight "dome2" +{ + bool collection:lightLink:includeRoot = false + color3f inputs:color = (0, 1, 0) + rel collection:lightLink:includes = [] +} + +def Material "mat" +{ + color4f outputs:moonray:surface.connect = + + def Shader "mtl" + { + uniform token info:id = "DwaBaseMaterial" + color4f outputs:surface + } +} + + + diff --git a/hats/light/light_cylinder.canonical.rdla b/hats/light/light_mesh.canonical.rdla similarity index 79% rename from hats/light/light_cylinder.canonical.rdla rename to hats/light/light_mesh.canonical.rdla index 11f1cdd..650e205 100644 --- a/hats/light/light_cylinder.canonical.rdla +++ b/hats/light/light_mesh.canonical.rdla @@ -1,15 +1,17 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } @@ -26,6 +28,15 @@ RdlMeshGeometry("/floor") { RdlMeshGeometry("/shape") { ["node_xform"] = blur(Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1), Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1)), + ["visible_in_camera"] = false, + ["visible_shadow"] = false, + ["visible_diffuse_reflection"] = false, + ["visible_diffuse_transmission"] = false, + ["visible_glossy_reflection"] = false, + ["visible_glossy_transmission"] = false, + ["visible_mirror_reflection"] = false, + ["visible_mirror_transmission"] = false, + ["visible_volume"] = false, ["face_vertex_count"] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, ["vertices_by_index"] = { 2, 1, 0, 3, 2, 0, 4, 3, 0, 5, 4, 0, 6, 5, 0, 7, 6, 0, 8, 7, 0, 9, 8, 0, 10, 9, 0, 1, 10, 0, 1, 2, 12, 11, 2, 3, 13, 12, 3, 4, 14, 13, 4, 5, 15, 14, 5, 6, 16, 15, 6, 7, 17, 16, 7, 8, 18, 17, 8, 9, 19, 18, 9, 10, 20, 19, 10, 1, 11, 20, 11, 12, 22, 21, 12, 13, 23, 22, 13, 14, 24, 23, 14, 15, 25, 24, 15, 16, 26, 25, 16, 17, 27, 26, 17, 18, 28, 27, 18, 19, 29, 28, 19, 20, 30, 29, 20, 11, 21, 30, 21, 22, 32, 31, 22, 23, 33, 32, 23, 24, 34, 33, 24, 25, 35, 34, 25, 26, 36, 35, 26, 27, 37, 36, 27, 28, 38, 37, 28, 29, 39, 38, 29, 30, 40, 39, 30, 21, 31, 40, 31, 32, 42, 41, 32, 33, 43, 42, 33, 34, 44, 43, 34, 35, 45, 44, 35, 36, 46, 45, 36, 37, 47, 46, 37, 38, 48, 47, 38, 39, 49, 48, 39, 40, 50, 49, 40, 31, 41, 50, 41, 42, 52, 51, 42, 43, 53, 52, 43, 44, 54, 53, 44, 45, 55, 54, 45, 46, 56, 55, 46, 47, 57, 56, 47, 48, 58, 57, 48, 49, 59, 58, 49, 50, 60, 59, 50, 41, 51, 60, 51, 52, 62, 61, 52, 53, 63, 62, 53, 54, 64, 63, 54, 55, 65, 64, 55, 56, 66, 65, 56, 57, 67, 66, 57, 58, 68, 67, 58, 59, 69, 68, 59, 60, 70, 69, 60, 51, 61, 70, 61, 62, 72, 71, 62, 63, 73, 72, 63, 64, 74, 73, 64, 65, 75, 74, 65, 66, 76, 75, 66, 67, 77, 76, 67, 68, 78, 77, 68, 69, 79, 78, 69, 70, 80, 79, 70, 61, 71, 80, 71, 72, 81, 72, 73, 81, 73, 74, 81, 74, 75, 81, 75, 76, 81, 76, 77, 81, 77, 78, 81, 78, 79, 81, 79, 80, 81, 80, 71, 81}, ["vertex_list_0"] = { Vec3(0, 0, -1), Vec3(0.191341713, 0, -0.961939752), Vec3(0.154798701, 0.112467833, -0.961939752), Vec3(0.0591278374, 0.18197678, -0.961939752), Vec3(-0.0591278709, 0.18197678, -0.961939752), Vec3(-0.154798716, 0.112467825, -0.961939752), Vec3(-0.191341713, -1.67276237e-08, -0.961939752), Vec3(-0.154798657, -0.112467892, -0.961939752), Vec3(-0.0591278598, -0.18197678, -0.961939752), Vec3(0.0591278672, -0.18197678, -0.961939752), Vec3(0.154798687, -0.112467848, -0.961939752), Vec3(0.353553385, 0, -0.853553414), Vec3(0.28603071, 0.207813457, -0.853553414), Vec3(0.109253995, 0.336249262, -0.853553414), Vec3(-0.109254062, 0.336249232, -0.853553414), Vec3(-0.28603071, 0.207813442, -0.853553414), Vec3(-0.353553385, -3.09086197e-08, -0.853553414), Vec3(-0.28603062, -0.207813561, -0.853553414), Vec3(-0.10925404, -0.336249232, -0.853553414), Vec3(0.109254047, -0.336249232, -0.853553414), Vec3(0.28603068, -0.207813486, -0.853553414), Vec3(0.461939752, 0, -0.691341758), Vec3(0.373717099, 0.27152136, -0.691341758), Vec3(0.142747223, 0.439330816, -0.691341758), Vec3(-0.142747313, 0.439330786, -0.691341758), Vec3(-0.373717129, 0.27152133, -0.691341758), Vec3(-0.461939752, -4.03840552e-08, -0.691341758), Vec3(-0.37371701, -0.271521509, -0.691341758), Vec3(-0.142747283, -0.439330786, -0.691341758), Vec3(0.142747298, -0.439330786, -0.691341758), Vec3(0.373717099, -0.271521389, -0.691341758), Vec3(0.5, 0, -0.5), Vec3(0.404508501, 0.293892622, -0.5), Vec3(0.154508486, 0.47552827, -0.5), Vec3(-0.154508576, 0.47552824, -0.5), Vec3(-0.404508531, 0.293892592, -0.5), Vec3(-0.5, -4.37113883e-08, -0.5), Vec3(-0.404508382, -0.293892771, -0.5), Vec3(-0.154508546, -0.47552824, -0.5), Vec3(0.154508561, -0.47552824, -0.5), Vec3(0.404508471, -0.293892652, -0.5), Vec3(0.5, 0, 0.5), Vec3(0.404508501, 0.293892622, 0.5), Vec3(0.154508486, 0.47552827, 0.5), Vec3(-0.154508576, 0.47552824, 0.5), Vec3(-0.404508531, 0.293892592, 0.5), Vec3(-0.5, -4.37113883e-08, 0.5), Vec3(-0.404508382, -0.293892771, 0.5), Vec3(-0.154508546, -0.47552824, 0.5), Vec3(0.154508561, -0.47552824, 0.5), Vec3(0.404508471, -0.293892652, 0.5), Vec3(0.461939752, 0, 0.691341758), Vec3(0.373717099, 0.27152136, 0.691341758), Vec3(0.142747223, 0.439330816, 0.691341758), Vec3(-0.142747313, 0.439330786, 0.691341758), Vec3(-0.373717129, 0.27152133, 0.691341758), Vec3(-0.461939752, -4.03840552e-08, 0.691341758), Vec3(-0.37371701, -0.271521509, 0.691341758), Vec3(-0.142747283, -0.439330786, 0.691341758), Vec3(0.142747298, -0.439330786, 0.691341758), Vec3(0.373717099, -0.271521389, 0.691341758), Vec3(0.353553385, 0, 0.853553414), Vec3(0.28603071, 0.207813457, 0.853553414), Vec3(0.109253995, 0.336249262, 0.853553414), Vec3(-0.109254062, 0.336249232, 0.853553414), Vec3(-0.28603071, 0.207813442, 0.853553414), Vec3(-0.353553385, -3.09086197e-08, 0.853553414), Vec3(-0.28603062, -0.207813561, 0.853553414), Vec3(-0.10925404, -0.336249232, 0.853553414), Vec3(0.109254047, -0.336249232, 0.853553414), Vec3(0.28603068, -0.207813486, 0.853553414), Vec3(0.191341713, 0, 0.961939752), Vec3(0.154798701, 0.112467833, 0.961939752), Vec3(0.0591278374, 0.18197678, 0.961939752), Vec3(-0.0591278709, 0.18197678, 0.961939752), Vec3(-0.154798716, 0.112467825, 0.961939752), Vec3(-0.191341713, -1.67276237e-08, 0.961939752), Vec3(-0.154798657, -0.112467892, 0.961939752), Vec3(-0.0591278598, -0.18197678, 0.961939752), Vec3(0.0591278672, -0.18197678, 0.961939752), Vec3(0.154798687, -0.112467848, 0.961939752), Vec3(0, 0, 1)}, @@ -42,39 +53,37 @@ RdlMeshGeometry("/wall") { ["primitive_attributes"] = { UserData("/wall.primvars:displayColor"), UserData("/wall.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/floor"), RdlMeshGeometry("/shape"), RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet398945"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/shape"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet398945"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet398945"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet035326"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet035326"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } -CylinderLight("/cylinder") { - ["node_xform"] = blur(Mat4(-0.029195599999999999, -0, 0.99957300000000004, -0, 0.99957300000000004, -4.3711400000000002e-08, 0.029195599999999999, 0, 4.3692800000000002e-08, 1, 1.27618e-09, 0, 0, 4, -8, 1), Mat4(-0.029195599999999999, -0, 0.99957300000000004, -0, 0.99957300000000004, -4.3711400000000002e-08, 0.029195599999999999, 0, 4.3692800000000002e-08, 1, 1.27618e-09, 0, 0, 4, -8, 1)), +MeshLight("/meshlight") { ["visible_in_camera"] = "force on", - ["color"] = Rgb(1, 0.996510267, 0.980556607), - ["intensity"] = 5, ["normalized"] = false, - ["radius"] = 0.300000012, - ["height"] = 10, + ["geometry"] = RdlMeshGeometry("/shape"), } -LightSet("LightSet398945") { - CylinderLight("/cylinder"), +LightFilterSet("/DEFAULT/emptyLightFilterSet") { } -PerspectiveCamera("/camera") { +LightSet("LightSet035326") { + MeshLight("/meshlight"), +} + +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(0.65816300000000005, 0.0116603, -0.75278500000000004, 0, -0.20785999999999999, 0.96383099999999999, -0.16680300000000001, 0, 0.72361299999999995, 0.26625700000000002, 0.63678199999999996, 0, 11.6274, 5.8310399999999998, 1.1933199999999999, 1), Mat4(0.65816300000000005, 0.0116603, -0.75278500000000004, 0, -0.20785999999999999, 0.96383099999999999, -0.16680300000000001, 0, 0.72361299999999995, 0.26625700000000002, 0.63678199999999996, 0, 11.6274, 5.8310399999999998, 1.1933199999999999, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -83,7 +92,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/camera") { ["node_xform"] = blur(Mat4(0.65816300000000005, 0.0116603, -0.75278500000000004, 0, -0.20785999999999999, 0.96383099999999999, -0.16680300000000001, 0, 0.72361299999999995, 0.26625700000000002, 0.63678199999999996, 0, 11.6274, 5.8310399999999998, 1.1933199999999999, 1), Mat4(0.65816300000000005, 0.0116603, -0.75278500000000004, 0, -0.20785999999999999, 0.96383099999999999, -0.16680300000000001, 0, 0.72361299999999995, 0.26625700000000002, 0.63678199999999996, 0, 11.6274, 5.8310399999999998, 1.1933199999999999, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -92,7 +101,7 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } -UserData("/floor.primvars:displayColor") { +UserData("/wall.primvars:displayColor") { ["color_key"] = "displayColor", ["color_values_0"] = { Rgb(1, 1, 1)}, ["rate"] = "uniform", @@ -110,12 +119,45 @@ UserData("/shape.primvars:primId") { ["rate"] = "constant", } -UserData("/wall.primvars:displayColor") { +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/floor.primvars:displayColor") { ["color_key"] = "displayColor", ["color_values_0"] = { Rgb(1, 1, 1)}, ["rate"] = "uniform", } +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/wall.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 2}, diff --git a/hats/light/light_cylinder.usd b/hats/light/light_mesh.usd similarity index 75% rename from hats/light/light_cylinder.usd rename to hats/light/light_mesh.usd index 7645a84..03d9459 100644 --- a/hats/light/light_cylinder.usd +++ b/hats/light/light_mesh.usd @@ -21,6 +21,7 @@ def Capsule "shape" (0, 0, 3, 0), (0, 1, -5, 1) ) uniform token[] xformOpOrder = ["xformOp:transform"] + token visibility = "invisible" } @@ -54,23 +55,11 @@ def Mesh "wall" color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) } -def CylinderLight "cylinder" +def MoonrayMeshLight "meshlight" { - # uniform token moonray:class = "CylinderLight" - matrix4d xformOp:transform = ( ( 0.999573, -4.37114e-08, 0.0291956, 0), - (0.0291956, 0, -0.999573, 0), - (4.36928e-08, 1, 1.27618e-09, 0), - (0, 4, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] + uniform token moonray:class = "MeshLight" + rel moonray:geometry = + float inputs:intensity = 1 token moonray:visible_in_camera = "force on" - bool enableColorTemperature = true - bool inputs:enableColorTemperature = true - float colorTemperature = 6500 - float inputs:colorTemperature = 6500 - float intensity = 5 - float inputs:intensity = 5 - float radius = 0.3 - float inputs:radius = 0.3 - float length = 10 - float inputs:length = 10 } + diff --git a/hats/light/light_motion_blur.canonical.rdla b/hats/light/light_motion_blur.canonical.rdla index 65a037e..136f2e8 100644 --- a/hats/light/light_motion_blur.canonical.rdla +++ b/hats/light/light_motion_blur.canonical.rdla @@ -1,11 +1,13 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), - ["enable_motion_blur"] = false, + ["frame"] = 4, + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 540, } RdlMeshGeometry("/ground/mesh_0") { - ["node_xform"] = blur(Mat4(100, 0, 0, 0, 0, 100, 0, 0, 0, 0, 100, 0, 0, -1, 0, 1), Mat4(100, 0, 0, 0, 0, 100, 0, 0, 0, 0, 100, 0, 0, -1, 0, 1)), + ["node_xform"] = Mat4(100, 0, 0, 0, 0, 100, 0, 0, 0, 0, 100, 0, 0, -1, 0, 1), ["face_vertex_count"] = { 4}, ["vertices_by_index"] = { 0, 1, 3, 2}, ["vertex_list_0"] = { Vec3(-5, 0, -5), Vec3(5, 0, -5), Vec3(-5, 0, 5), Vec3(5, 0, 5)}, @@ -16,40 +18,43 @@ RdlMeshGeometry("/ground/mesh_0") { ["smooth_normal"] = false, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/ground/mesh_0"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/ground/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurfaceground/usdpreviewsurfaceground"), LightSet("LightSet30AD42"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/ground/mesh_0"), "", UsdPreviewSurface("/materials/usdpreviewsurfaceground/usdpreviewsurfaceground"), LightSet("LightSet30AD42"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } UsdPreviewSurface("/materials/usdpreviewsurfaceground/usdpreviewsurfaceground") { } RectLight("/lights/light1") { - ["node_xform"] = blur(Mat4(0.49999999999999978, -0.86602540378443871, 0, 0, -0.86602540378443871, -0.49999999999999978, 0, 0, 0, 0, -1, 0, -1.666666666666667, 0, 0, 1), Mat4(0.49999999999999978, -0.86602540378443871, 0, 0, -0.86602540378443871, -0.49999999999999978, 0, 0, 0, 0, -1, 0, -1.666666666666667, 0, 0, 1)), + ["node_xform"] = Mat4(0.49999999999999978, -0.86602540378443871, 0, 0, -0.86602540378443871, -0.49999999999999978, 0, 0, 0, 0, -1, 0, -1.666666666666667, 0, 0, 1), ["mb"] = true, ["visible_in_camera"] = "force on", ["intensity"] = 5, ["normalized"] = false, } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet30AD42") { RectLight("/lights/light1"), } -PerspectiveCamera("/camera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1)), +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1), ["far"] = 1000000, - ["focal"] = blur(0.5, 0.5), + ["focal"] = 0.5, ["film_width_aperture"] = 0.209549993, } -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1)), +PerspectiveCamera("/camera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1), ["far"] = 1000000, - ["focal"] = blur(0.5, 0.5), + ["focal"] = 0.5, ["film_width_aperture"] = 0.209549993, } @@ -58,3 +63,36 @@ UserData("/ground/mesh_0.primvars:primId") { ["float_values_0"] = { 0}, ["rate"] = "constant", } + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/light/light_rect.canonical.rdla b/hats/light/light_rect.canonical.rdla deleted file mode 100644 index f3feabd..0000000 --- a/hats/light/light_rect.canonical.rdla +++ /dev/null @@ -1,121 +0,0 @@ -SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), - ["enable_motion_blur"] = false, -} - -AttributeMap("displayColor") { - ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), - ["primitive_attribute_name"] = "displayColor", -} - -AttributeMap("displayOpacity") { - ["primitive_attribute_name"] = "displayOpacity", - ["primitive_attribute_type"] = "float", -} - -RdlMeshGeometry("/floor") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1), Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/floor.primvars:displayColor"), UserData("/floor.primvars:primId")}, -} - -RdlMeshGeometry("/shape") { - ["node_xform"] = blur(Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1), Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1)), - ["face_vertex_count"] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - ["vertices_by_index"] = { 2, 1, 0, 3, 2, 0, 4, 3, 0, 5, 4, 0, 6, 5, 0, 7, 6, 0, 8, 7, 0, 9, 8, 0, 10, 9, 0, 1, 10, 0, 1, 2, 12, 11, 2, 3, 13, 12, 3, 4, 14, 13, 4, 5, 15, 14, 5, 6, 16, 15, 6, 7, 17, 16, 7, 8, 18, 17, 8, 9, 19, 18, 9, 10, 20, 19, 10, 1, 11, 20, 11, 12, 22, 21, 12, 13, 23, 22, 13, 14, 24, 23, 14, 15, 25, 24, 15, 16, 26, 25, 16, 17, 27, 26, 17, 18, 28, 27, 18, 19, 29, 28, 19, 20, 30, 29, 20, 11, 21, 30, 21, 22, 32, 31, 22, 23, 33, 32, 23, 24, 34, 33, 24, 25, 35, 34, 25, 26, 36, 35, 26, 27, 37, 36, 27, 28, 38, 37, 28, 29, 39, 38, 29, 30, 40, 39, 30, 21, 31, 40, 31, 32, 42, 41, 32, 33, 43, 42, 33, 34, 44, 43, 34, 35, 45, 44, 35, 36, 46, 45, 36, 37, 47, 46, 37, 38, 48, 47, 38, 39, 49, 48, 39, 40, 50, 49, 40, 31, 41, 50, 41, 42, 52, 51, 42, 43, 53, 52, 43, 44, 54, 53, 44, 45, 55, 54, 45, 46, 56, 55, 46, 47, 57, 56, 47, 48, 58, 57, 48, 49, 59, 58, 49, 50, 60, 59, 50, 41, 51, 60, 51, 52, 62, 61, 52, 53, 63, 62, 53, 54, 64, 63, 54, 55, 65, 64, 55, 56, 66, 65, 56, 57, 67, 66, 57, 58, 68, 67, 58, 59, 69, 68, 59, 60, 70, 69, 60, 51, 61, 70, 61, 62, 72, 71, 62, 63, 73, 72, 63, 64, 74, 73, 64, 65, 75, 74, 65, 66, 76, 75, 66, 67, 77, 76, 67, 68, 78, 77, 68, 69, 79, 78, 69, 70, 80, 79, 70, 61, 71, 80, 71, 72, 81, 72, 73, 81, 73, 74, 81, 74, 75, 81, 75, 76, 81, 76, 77, 81, 77, 78, 81, 78, 79, 81, 79, 80, 81, 80, 71, 81}, - ["vertex_list_0"] = { Vec3(0, 0, -1), Vec3(0.191341713, 0, -0.961939752), Vec3(0.154798701, 0.112467833, -0.961939752), Vec3(0.0591278374, 0.18197678, -0.961939752), Vec3(-0.0591278709, 0.18197678, -0.961939752), Vec3(-0.154798716, 0.112467825, -0.961939752), Vec3(-0.191341713, -1.67276237e-08, -0.961939752), Vec3(-0.154798657, -0.112467892, -0.961939752), Vec3(-0.0591278598, -0.18197678, -0.961939752), Vec3(0.0591278672, -0.18197678, -0.961939752), Vec3(0.154798687, -0.112467848, -0.961939752), Vec3(0.353553385, 0, -0.853553414), Vec3(0.28603071, 0.207813457, -0.853553414), Vec3(0.109253995, 0.336249262, -0.853553414), Vec3(-0.109254062, 0.336249232, -0.853553414), Vec3(-0.28603071, 0.207813442, -0.853553414), Vec3(-0.353553385, -3.09086197e-08, -0.853553414), Vec3(-0.28603062, -0.207813561, -0.853553414), Vec3(-0.10925404, -0.336249232, -0.853553414), Vec3(0.109254047, -0.336249232, -0.853553414), Vec3(0.28603068, -0.207813486, -0.853553414), Vec3(0.461939752, 0, -0.691341758), Vec3(0.373717099, 0.27152136, -0.691341758), Vec3(0.142747223, 0.439330816, -0.691341758), Vec3(-0.142747313, 0.439330786, -0.691341758), Vec3(-0.373717129, 0.27152133, -0.691341758), Vec3(-0.461939752, -4.03840552e-08, -0.691341758), Vec3(-0.37371701, -0.271521509, -0.691341758), Vec3(-0.142747283, -0.439330786, -0.691341758), Vec3(0.142747298, -0.439330786, -0.691341758), Vec3(0.373717099, -0.271521389, -0.691341758), Vec3(0.5, 0, -0.5), Vec3(0.404508501, 0.293892622, -0.5), Vec3(0.154508486, 0.47552827, -0.5), Vec3(-0.154508576, 0.47552824, -0.5), Vec3(-0.404508531, 0.293892592, -0.5), Vec3(-0.5, -4.37113883e-08, -0.5), Vec3(-0.404508382, -0.293892771, -0.5), Vec3(-0.154508546, -0.47552824, -0.5), Vec3(0.154508561, -0.47552824, -0.5), Vec3(0.404508471, -0.293892652, -0.5), Vec3(0.5, 0, 0.5), Vec3(0.404508501, 0.293892622, 0.5), Vec3(0.154508486, 0.47552827, 0.5), Vec3(-0.154508576, 0.47552824, 0.5), Vec3(-0.404508531, 0.293892592, 0.5), Vec3(-0.5, -4.37113883e-08, 0.5), Vec3(-0.404508382, -0.293892771, 0.5), Vec3(-0.154508546, -0.47552824, 0.5), Vec3(0.154508561, -0.47552824, 0.5), Vec3(0.404508471, -0.293892652, 0.5), Vec3(0.461939752, 0, 0.691341758), Vec3(0.373717099, 0.27152136, 0.691341758), Vec3(0.142747223, 0.439330816, 0.691341758), Vec3(-0.142747313, 0.439330786, 0.691341758), Vec3(-0.373717129, 0.27152133, 0.691341758), Vec3(-0.461939752, -4.03840552e-08, 0.691341758), Vec3(-0.37371701, -0.271521509, 0.691341758), Vec3(-0.142747283, -0.439330786, 0.691341758), Vec3(0.142747298, -0.439330786, 0.691341758), Vec3(0.373717099, -0.271521389, 0.691341758), Vec3(0.353553385, 0, 0.853553414), Vec3(0.28603071, 0.207813457, 0.853553414), Vec3(0.109253995, 0.336249262, 0.853553414), Vec3(-0.109254062, 0.336249232, 0.853553414), Vec3(-0.28603071, 0.207813442, 0.853553414), Vec3(-0.353553385, -3.09086197e-08, 0.853553414), Vec3(-0.28603062, -0.207813561, 0.853553414), Vec3(-0.10925404, -0.336249232, 0.853553414), Vec3(0.109254047, -0.336249232, 0.853553414), Vec3(0.28603068, -0.207813486, 0.853553414), Vec3(0.191341713, 0, 0.961939752), Vec3(0.154798701, 0.112467833, 0.961939752), Vec3(0.0591278374, 0.18197678, 0.961939752), Vec3(-0.0591278709, 0.18197678, 0.961939752), Vec3(-0.154798716, 0.112467825, 0.961939752), Vec3(-0.191341713, -1.67276237e-08, 0.961939752), Vec3(-0.154798657, -0.112467892, 0.961939752), Vec3(-0.0591278598, -0.18197678, 0.961939752), Vec3(0.0591278672, -0.18197678, 0.961939752), Vec3(0.154798687, -0.112467848, 0.961939752), Vec3(0, 0, 1)}, - ["primitive_attributes"] = { UserData("/shape.primvars:primId")}, -} - -RdlMeshGeometry("/wall") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1), Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/wall.primvars:displayColor"), UserData("/wall.primvars:primId")}, -} - -GeometrySet("allGeometry") { - RdlMeshGeometry("/floor"), - RdlMeshGeometry("/shape"), - RdlMeshGeometry("/wall"), -} - -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet1C80B3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/shape"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet1C80B3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet1C80B3"), undef(), undef(), undef(), undef(), undef()}, -} - -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), - ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), -} - -RectLight("/rect") { - ["node_xform"] = blur(Mat4(-0.029195599999999999, 0, 0.99957300000000004, 0, 0.99957300000000004, -4.3711400000000002e-08, 0.029195599999999999, 0, 4.3692800000000002e-08, 1, 1.27618e-09, 0, 0, 4, -8, 1), Mat4(-0.029195599999999999, 0, 0.99957300000000004, 0, 0.99957300000000004, -4.3711400000000002e-08, 0.029195599999999999, 0, 4.3692800000000002e-08, 1, 1.27618e-09, 0, 0, 4, -8, 1)), - ["visible_in_camera"] = "force on", - ["intensity"] = 3, - ["normalized"] = false, - ["height"] = 10, -} - -LightSet("LightSet1C80B3") { - RectLight("/rect"), -} - -PerspectiveCamera("/camera") { - ["node_xform"] = blur(Mat4(0.80447800000000003, 0, 0.59398200000000001, 0, -0.019824700000000001, 0.99944299999999997, 0.026850200000000001, 0, -0.59365199999999996, -0.033376000000000003, 0.80403000000000002, 0, -8.9227299999999996, 1.6022700000000001, 2.7082199999999998, 1), Mat4(0.80447800000000003, 0, 0.59398200000000001, 0, -0.019824700000000001, 0.99944299999999997, 0.026850200000000001, 0, -0.59365199999999996, -0.033376000000000003, 0.80403000000000002, 0, -8.9227299999999996, 1.6022700000000001, 2.7082199999999998, 1)), - ["near"] = 0.00999999978, - ["mb_shutter_open"] = 0, - ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), - ["film_width_aperture"] = 240, -} - -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(0.80447800000000003, 0, 0.59398200000000001, 0, -0.019824700000000001, 0.99944299999999997, 0.026850200000000001, 0, -0.59365199999999996, -0.033376000000000003, 0.80403000000000002, 0, -8.9227299999999996, 1.6022700000000001, 2.7082199999999998, 1), Mat4(0.80447800000000003, 0, 0.59398200000000001, 0, -0.019824700000000001, 0.99944299999999997, 0.026850200000000001, 0, -0.59365199999999996, -0.033376000000000003, 0.80403000000000002, 0, -8.9227299999999996, 1.6022700000000001, 2.7082199999999998, 1)), - ["near"] = 0.00999999978, - ["mb_shutter_open"] = 0, - ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), - ["film_width_aperture"] = 240, -} - -UserData("/floor.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", -} - -UserData("/shape.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, - ["rate"] = "constant", -} - -UserData("/wall.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", -} - -UserData("/floor.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", -} - -UserData("/wall.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 2}, - ["rate"] = "constant", -} diff --git a/hats/light/light_rect.usd b/hats/light/light_rect.usd deleted file mode 100644 index 66fc0ee..0000000 --- a/hats/light/light_rect.usd +++ /dev/null @@ -1,72 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( ( 0.804478, 0, 0.593982, 0), - ( -0.0198247, 0.999443, 0.0268502, 0), - ( -0.593652, -0.033376, 0.80403, 0), - ( -8.92273, 1.60227, 2.70822, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def Capsule "shape" -{ - matrix4d xformOp:transform = ( (3, 0, 0, 0), - (0, 3, 0, 0), - (0, 0, 3, 0), - (0, 1, -5, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def RectLight "rect" -{ - matrix4d xformOp:transform = ( (-0.0291956, 0, 0.999573, 0), - (0.999573, -4.37114e-08, 0.0291956, 0), - (4.36928e-08, 1, 1.27618e-09, 0), - (0, 4, -8, 1) ) - int moonray:visible_in_camera = 1 - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1,1,1) - color3f inputs:color = (1,1,1) - float intensity = 3 - float inputs:intensity = 3 - float width = 1 - float inputs:width = 1 - float height = 10 - float inputs:height = 10 -} diff --git a/hats/light/light_rect_textured.canonical.rdla b/hats/light/light_rect_textured.canonical.rdla deleted file mode 100644 index 4c7c490..0000000 --- a/hats/light/light_rect_textured.canonical.rdla +++ /dev/null @@ -1,122 +0,0 @@ -SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), - ["enable_motion_blur"] = false, -} - -AttributeMap("displayColor") { - ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), - ["primitive_attribute_name"] = "displayColor", -} - -AttributeMap("displayOpacity") { - ["primitive_attribute_name"] = "displayOpacity", - ["primitive_attribute_type"] = "float", -} - -RdlMeshGeometry("/floor") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1), Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/floor.primvars:displayColor"), UserData("/floor.primvars:primId")}, -} - -RdlMeshGeometry("/shape") { - ["node_xform"] = blur(Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1), Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1)), - ["face_vertex_count"] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - ["vertices_by_index"] = { 2, 1, 0, 3, 2, 0, 4, 3, 0, 5, 4, 0, 6, 5, 0, 7, 6, 0, 8, 7, 0, 9, 8, 0, 10, 9, 0, 1, 10, 0, 1, 2, 12, 11, 2, 3, 13, 12, 3, 4, 14, 13, 4, 5, 15, 14, 5, 6, 16, 15, 6, 7, 17, 16, 7, 8, 18, 17, 8, 9, 19, 18, 9, 10, 20, 19, 10, 1, 11, 20, 11, 12, 22, 21, 12, 13, 23, 22, 13, 14, 24, 23, 14, 15, 25, 24, 15, 16, 26, 25, 16, 17, 27, 26, 17, 18, 28, 27, 18, 19, 29, 28, 19, 20, 30, 29, 20, 11, 21, 30, 21, 22, 32, 31, 22, 23, 33, 32, 23, 24, 34, 33, 24, 25, 35, 34, 25, 26, 36, 35, 26, 27, 37, 36, 27, 28, 38, 37, 28, 29, 39, 38, 29, 30, 40, 39, 30, 21, 31, 40, 31, 32, 42, 41, 32, 33, 43, 42, 33, 34, 44, 43, 34, 35, 45, 44, 35, 36, 46, 45, 36, 37, 47, 46, 37, 38, 48, 47, 38, 39, 49, 48, 39, 40, 50, 49, 40, 31, 41, 50, 41, 42, 52, 51, 42, 43, 53, 52, 43, 44, 54, 53, 44, 45, 55, 54, 45, 46, 56, 55, 46, 47, 57, 56, 47, 48, 58, 57, 48, 49, 59, 58, 49, 50, 60, 59, 50, 41, 51, 60, 51, 52, 62, 61, 52, 53, 63, 62, 53, 54, 64, 63, 54, 55, 65, 64, 55, 56, 66, 65, 56, 57, 67, 66, 57, 58, 68, 67, 58, 59, 69, 68, 59, 60, 70, 69, 60, 51, 61, 70, 61, 62, 72, 71, 62, 63, 73, 72, 63, 64, 74, 73, 64, 65, 75, 74, 65, 66, 76, 75, 66, 67, 77, 76, 67, 68, 78, 77, 68, 69, 79, 78, 69, 70, 80, 79, 70, 61, 71, 80, 71, 72, 81, 72, 73, 81, 73, 74, 81, 74, 75, 81, 75, 76, 81, 76, 77, 81, 77, 78, 81, 78, 79, 81, 79, 80, 81, 80, 71, 81}, - ["vertex_list_0"] = { Vec3(0, 0, -1), Vec3(0.191341713, 0, -0.961939752), Vec3(0.154798701, 0.112467833, -0.961939752), Vec3(0.0591278374, 0.18197678, -0.961939752), Vec3(-0.0591278709, 0.18197678, -0.961939752), Vec3(-0.154798716, 0.112467825, -0.961939752), Vec3(-0.191341713, -1.67276237e-08, -0.961939752), Vec3(-0.154798657, -0.112467892, -0.961939752), Vec3(-0.0591278598, -0.18197678, -0.961939752), Vec3(0.0591278672, -0.18197678, -0.961939752), Vec3(0.154798687, -0.112467848, -0.961939752), Vec3(0.353553385, 0, -0.853553414), Vec3(0.28603071, 0.207813457, -0.853553414), Vec3(0.109253995, 0.336249262, -0.853553414), Vec3(-0.109254062, 0.336249232, -0.853553414), Vec3(-0.28603071, 0.207813442, -0.853553414), Vec3(-0.353553385, -3.09086197e-08, -0.853553414), Vec3(-0.28603062, -0.207813561, -0.853553414), Vec3(-0.10925404, -0.336249232, -0.853553414), Vec3(0.109254047, -0.336249232, -0.853553414), Vec3(0.28603068, -0.207813486, -0.853553414), Vec3(0.461939752, 0, -0.691341758), Vec3(0.373717099, 0.27152136, -0.691341758), Vec3(0.142747223, 0.439330816, -0.691341758), Vec3(-0.142747313, 0.439330786, -0.691341758), Vec3(-0.373717129, 0.27152133, -0.691341758), Vec3(-0.461939752, -4.03840552e-08, -0.691341758), Vec3(-0.37371701, -0.271521509, -0.691341758), Vec3(-0.142747283, -0.439330786, -0.691341758), Vec3(0.142747298, -0.439330786, -0.691341758), Vec3(0.373717099, -0.271521389, -0.691341758), Vec3(0.5, 0, -0.5), Vec3(0.404508501, 0.293892622, -0.5), Vec3(0.154508486, 0.47552827, -0.5), Vec3(-0.154508576, 0.47552824, -0.5), Vec3(-0.404508531, 0.293892592, -0.5), Vec3(-0.5, -4.37113883e-08, -0.5), Vec3(-0.404508382, -0.293892771, -0.5), Vec3(-0.154508546, -0.47552824, -0.5), Vec3(0.154508561, -0.47552824, -0.5), Vec3(0.404508471, -0.293892652, -0.5), Vec3(0.5, 0, 0.5), Vec3(0.404508501, 0.293892622, 0.5), Vec3(0.154508486, 0.47552827, 0.5), Vec3(-0.154508576, 0.47552824, 0.5), Vec3(-0.404508531, 0.293892592, 0.5), Vec3(-0.5, -4.37113883e-08, 0.5), Vec3(-0.404508382, -0.293892771, 0.5), Vec3(-0.154508546, -0.47552824, 0.5), Vec3(0.154508561, -0.47552824, 0.5), Vec3(0.404508471, -0.293892652, 0.5), Vec3(0.461939752, 0, 0.691341758), Vec3(0.373717099, 0.27152136, 0.691341758), Vec3(0.142747223, 0.439330816, 0.691341758), Vec3(-0.142747313, 0.439330786, 0.691341758), Vec3(-0.373717129, 0.27152133, 0.691341758), Vec3(-0.461939752, -4.03840552e-08, 0.691341758), Vec3(-0.37371701, -0.271521509, 0.691341758), Vec3(-0.142747283, -0.439330786, 0.691341758), Vec3(0.142747298, -0.439330786, 0.691341758), Vec3(0.373717099, -0.271521389, 0.691341758), Vec3(0.353553385, 0, 0.853553414), Vec3(0.28603071, 0.207813457, 0.853553414), Vec3(0.109253995, 0.336249262, 0.853553414), Vec3(-0.109254062, 0.336249232, 0.853553414), Vec3(-0.28603071, 0.207813442, 0.853553414), Vec3(-0.353553385, -3.09086197e-08, 0.853553414), Vec3(-0.28603062, -0.207813561, 0.853553414), Vec3(-0.10925404, -0.336249232, 0.853553414), Vec3(0.109254047, -0.336249232, 0.853553414), Vec3(0.28603068, -0.207813486, 0.853553414), Vec3(0.191341713, 0, 0.961939752), Vec3(0.154798701, 0.112467833, 0.961939752), Vec3(0.0591278374, 0.18197678, 0.961939752), Vec3(-0.0591278709, 0.18197678, 0.961939752), Vec3(-0.154798716, 0.112467825, 0.961939752), Vec3(-0.191341713, -1.67276237e-08, 0.961939752), Vec3(-0.154798657, -0.112467892, 0.961939752), Vec3(-0.0591278598, -0.18197678, 0.961939752), Vec3(0.0591278672, -0.18197678, 0.961939752), Vec3(0.154798687, -0.112467848, 0.961939752), Vec3(0, 0, 1)}, - ["primitive_attributes"] = { UserData("/shape.primvars:primId")}, -} - -RdlMeshGeometry("/wall") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1), Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/wall.primvars:displayColor"), UserData("/wall.primvars:primId")}, -} - -GeometrySet("allGeometry") { - RdlMeshGeometry("/floor"), - RdlMeshGeometry("/shape"), - RdlMeshGeometry("/wall"), -} - -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet1C80B3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/shape"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet1C80B3"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet1C80B3"), undef(), undef(), undef(), undef(), undef()}, -} - -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), - ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), -} - -RectLight("/rect") { - ["node_xform"] = blur(Mat4(-0.029195599999999999, 0, 0.99957300000000004, 0, 0.99957300000000004, -4.3711400000000002e-08, 0.029195599999999999, 0, 4.3692800000000002e-08, 1, 1.27618e-09, 0, 0, 4, -8, 1), Mat4(-0.029195599999999999, 0, 0.99957300000000004, 0, 0.99957300000000004, -4.3711400000000002e-08, 0.029195599999999999, 0, 4.3692800000000002e-08, 1, 1.27618e-09, 0, 0, 4, -8, 1)), - ["visible_in_camera"] = "force on", - ["intensity"] = 5, - ["texture"] = "/work/gshad/moonshine_test/rats_data/light/rect_textured/env_maps/burning_man-med.exr", - ["normalized"] = false, - ["height"] = 10, -} - -LightSet("LightSet1C80B3") { - RectLight("/rect"), -} - -PerspectiveCamera("/camera") { - ["node_xform"] = blur(Mat4(0.80447800000000003, 0, 0.59398200000000001, 0, -0.019824700000000001, 0.99944299999999997, 0.026850200000000001, 0, -0.59365199999999996, -0.033376000000000003, 0.80403000000000002, 0, -8.9227299999999996, 1.6022700000000001, 2.7082199999999998, 1), Mat4(0.80447800000000003, 0, 0.59398200000000001, 0, -0.019824700000000001, 0.99944299999999997, 0.026850200000000001, 0, -0.59365199999999996, -0.033376000000000003, 0.80403000000000002, 0, -8.9227299999999996, 1.6022700000000001, 2.7082199999999998, 1)), - ["near"] = 0.00999999978, - ["mb_shutter_open"] = 0, - ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), - ["film_width_aperture"] = 240, -} - -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(0.80447800000000003, 0, 0.59398200000000001, 0, -0.019824700000000001, 0.99944299999999997, 0.026850200000000001, 0, -0.59365199999999996, -0.033376000000000003, 0.80403000000000002, 0, -8.9227299999999996, 1.6022700000000001, 2.7082199999999998, 1), Mat4(0.80447800000000003, 0, 0.59398200000000001, 0, -0.019824700000000001, 0.99944299999999997, 0.026850200000000001, 0, -0.59365199999999996, -0.033376000000000003, 0.80403000000000002, 0, -8.9227299999999996, 1.6022700000000001, 2.7082199999999998, 1)), - ["near"] = 0.00999999978, - ["mb_shutter_open"] = 0, - ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), - ["film_width_aperture"] = 240, -} - -UserData("/floor.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", -} - -UserData("/floor.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", -} - -UserData("/wall.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", -} - -UserData("/shape.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, - ["rate"] = "constant", -} - -UserData("/wall.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 2}, - ["rate"] = "constant", -} diff --git a/hats/light/light_rect_textured.usd b/hats/light/light_rect_textured.usd deleted file mode 100644 index ac610f2..0000000 --- a/hats/light/light_rect_textured.usd +++ /dev/null @@ -1,75 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( ( 0.804478, 0, 0.593982, 0), - ( -0.0198247, 0.999443, 0.0268502, 0), - ( -0.593652, -0.033376, 0.80403, 0), - ( -8.92273, 1.60227, 2.70822, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def Capsule "shape" -{ - matrix4d xformOp:transform = ( (3, 0, 0, 0), - (0, 3, 0, 0), - (0, 0, 3, 0), - (0, 1, -5, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def RectLight "rect" -{ - matrix4d xformOp:transform = ( (-0.0291956, 0, 0.999573, 0), - (0.999573, -4.37114e-08, 0.0291956, 0), - (4.36928e-08, 1, 1.27618e-09, 0), - (0, 4, -8, 1) ) - token moonray:visible_in_camera = "force on" - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1,1,1) - color3f inputs:color = (1,1,1) - float intensity = 5 - float inputs:intensity = 5 - float width = 1 - float inputs:width = 1 - float height = 10 - float inputs:height = 10 - asset texture:file = "/work/gshad/moonshine_test/rats_data/light/rect_textured/env_maps/burning_man-med.exr" - asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/light/rect_textured/env_maps/burning_man-med.exr" -} diff --git a/hats/light/light_shadow.canonical.rdla b/hats/light/light_shadow.canonical.rdla index 641f22d..b9e7405 100644 --- a/hats/light/light_shadow.canonical.rdla +++ b/hats/light/light_shadow.canonical.rdla @@ -1,15 +1,17 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } -AttributeMap("displayColor") { +AttributeMap("/DEFAULT/displayColorMap") { ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), ["primitive_attribute_name"] = "displayColor", } -AttributeMap("displayOpacity") { +AttributeMap("/DEFAULT/displayOpacityMap") { ["primitive_attribute_name"] = "displayOpacity", ["primitive_attribute_type"] = "float", } @@ -88,7 +90,7 @@ RdlMeshGeometry("/top") { ["primitive_attributes"] = { UserData("/top.primvars:displayColor"), UserData("/top.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/back"), RdlMeshGeometry("/bottom"), RdlMeshGeometry("/left"), @@ -99,21 +101,21 @@ GeometrySet("allGeometry") { RdlMeshGeometry("/top"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/back"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), undef(), ShadowSet("ShadowSet4189D5"), undef()}, - {RdlMeshGeometry("/bottom"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), undef(), ShadowSet("ShadowSet4189D5"), undef()}, - {RdlMeshGeometry("/left"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), undef(), ShadowSet("ShadowSet4189D5"), undef()}, - {RdlMeshGeometry("/right"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), undef(), ShadowSet("ShadowSet4189D5"), undef()}, - {RdlMeshGeometry("/sphere1"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), undef(), ShadowSet("ShadowSet1EE66A"), undef()}, - {RdlMeshGeometry("/sphere2"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), undef(), ShadowSet("ShadowSet4189D5"), undef()}, - {RdlMeshGeometry("/sphere3"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), undef(), ShadowSet("ShadowSet22A36B"), undef()}, - {RdlMeshGeometry("/top"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), undef(), ShadowSet("ShadowSet4189D5"), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/back"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), ShadowSet("ShadowSet4189D5"), undef()}, + {RdlMeshGeometry("/bottom"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), ShadowSet("ShadowSet4189D5"), undef()}, + {RdlMeshGeometry("/left"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), ShadowSet("ShadowSet4189D5"), undef()}, + {RdlMeshGeometry("/right"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), ShadowSet("ShadowSet4189D5"), undef()}, + {RdlMeshGeometry("/sphere1"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), ShadowSet("ShadowSet1EE66A"), undef()}, + {RdlMeshGeometry("/sphere2"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), ShadowSet("ShadowSet4189D5"), undef()}, + {RdlMeshGeometry("/sphere3"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), ShadowSet("ShadowSet22A36B"), undef()}, + {RdlMeshGeometry("/top"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet4189D5"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), ShadowSet("ShadowSet4189D5"), undef()}, } -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), } SphereLight("/light1") { @@ -132,6 +134,9 @@ SphereLight("/light2") { ["radius"] = 0.5, } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet4189D5") { SphereLight("/light1"), SphereLight("/light2"), @@ -159,7 +164,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, -50, 50, -145, 1), Mat4(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, -50, 50, -145, 1)), ["far"] = 1000000, ["mb_shutter_open"] = 0, @@ -174,6 +179,20 @@ UserData("/sphere1.primvars:displayColor") { ["rate"] = "constant", } +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/left.primvars:displayColor") { ["color_key"] = "displayColor", ["color_values_0"] = { Rgb(0.699999988, 0.100000001, 0.0799999982)}, @@ -186,16 +205,23 @@ UserData("/sphere3.primvars:primId") { ["rate"] = "constant", } +UserData("/right.primvars:displayColor") { + ["color_key"] = "displayColor", + ["color_values_0"] = { Rgb(0.200000003, 0.699999988, 0.200000003)}, + ["rate"] = "constant", +} + UserData("/top.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 4}, ["rate"] = "constant", } -UserData("/right.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(0.200000003, 0.699999988, 0.200000003)}, - ["rate"] = "constant", +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/sphere1.primvars:primId") { @@ -222,12 +248,24 @@ UserData("/back.primvars:displayColor") { ["rate"] = "constant", } +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + UserData("/sphere3.primvars:displayColor") { ["color_key"] = "displayColor", ["color_values_0"] = { Rgb(0, 0, 1)}, ["rate"] = "constant", } +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + UserData("/bottom.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 1}, diff --git a/hats/light/light_shadow.usd b/hats/light/light_shadow.usd index a9eb220..27cc9b8 100644 --- a/hats/light/light_shadow.usd +++ b/hats/light/light_shadow.usd @@ -20,11 +20,13 @@ def SphereLight "light1" (0, 1, 0, 0), (0, 0, 1, 0), (-20, 60, 50, 1) ) - float exposure = 10 - float inputs:exposure = 10 uniform token[] xformOpOrder = ["xformOp:transform"] + + float inputs:exposure = 10 + bool collection:shadowLink:includeRoot = false rel collection:shadowLink:includes = [] + int moonray:visible_in_camera = 1 } @@ -34,15 +36,17 @@ def SphereLight "light2" (0, 1, 0, 0), (0, 0, 1, 0), (-80, 60, 50, 1) ) - float exposure = 10 - float inputs:exposure = 10 uniform token[] xformOpOrder = ["xformOp:transform"] + + float inputs:exposure = 10 + bool collection:shadowLink:includeRoot = false rel collection:shadowLink:includes = [] + int moonray:visible_in_camera = 1 } -def Mesh "back" +def Mesh "back" (prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (0, -100, 0, 0), (0, 0, -100, 0), @@ -57,7 +61,7 @@ def Mesh "back" color3f[] primvars:displayColor = [(0.6,0.55,0.4)] ( interpolation = "constant" ) } -def Mesh "bottom" +def Mesh "bottom" (prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (100, 0, 0, 0), (0, 100, 0, 0), @@ -72,7 +76,7 @@ def Mesh "bottom" color3f[] primvars:displayColor = [(0.6,0.55,0.4)] ( interpolation = "constant" ) } -def Mesh "left" +def Mesh "left" (prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (0, 100, 0, 0), (-100, 0, 0, 0), @@ -87,7 +91,7 @@ def Mesh "left" color3f[] primvars:displayColor = [(0.7,0.1,0.08)] ( interpolation = "constant" ) } -def Mesh "right" +def Mesh "right" (prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (0, -100, 0, 0), (100, 0, 0, 0), @@ -102,7 +106,7 @@ def Mesh "right" color3f[] primvars:displayColor = [(0.2,0.7,0.2)] ( interpolation = "constant" ) } -def Mesh "top" +def Mesh "top" (prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (-100, 0, 0, 0), (0, -100, 0, 0), @@ -117,7 +121,7 @@ def Mesh "top" color3f[] primvars:displayColor = [(0.6,0.55,0.4)] ( interpolation = "constant" ) } -def Sphere "sphere1" +def Sphere "sphere1" (prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (-10, 0, 0, 0), (0, -10, 0, 0), @@ -127,7 +131,7 @@ def Sphere "sphere1" color3f[] primvars:displayColor = [(1,0,0)] ( interpolation = "constant" ) } -def Sphere "sphere2" +def Sphere "sphere2" (prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (-14, 0, 0, 0), (0, -14, 0, 0), @@ -137,7 +141,7 @@ def Sphere "sphere2" color3f[] primvars:displayColor = [(0,1,0)] ( interpolation = "constant" ) } -def Sphere "sphere3" +def Sphere "sphere3" (prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (-10, 0, 0, 0), (0, -10, 0, 0), diff --git a/hats/light/light_shapes.canonical.rdla b/hats/light/light_shapes.canonical.rdla new file mode 100644 index 0000000..615ae07 --- /dev/null +++ b/hats/light/light_shapes.canonical.rdla @@ -0,0 +1,159 @@ +SceneVariables { + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, + ["enable_motion_blur"] = false, +} + +AttributeMap("/DEFAULT/displayColorMap") { + ["default_value"] = Rgb(0.5, 0.5, 0.5), + ["primitive_attribute_name"] = "displayColor", +} + +AttributeMap("/DEFAULT/displayOpacityMap") { + ["primitive_attribute_name"] = "displayOpacity", + ["primitive_attribute_type"] = "float", +} + +RdlMeshGeometry("/wall") { + ["face_vertex_count"] = { 4}, + ["vertices_by_index"] = { 0, 1, 2, 3}, + ["vertex_list_0"] = { Vec3(10, 4, 0), Vec3(-10, 4, 0), Vec3(-10, -4, 0), Vec3(10, -4, 0)}, + ["subd_scheme"] = "bilinear", + ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, + ["smooth_normal"] = false, +} + +GeometrySet("/DEFAULT/allGeometry") { + RdlMeshGeometry("/wall"), +} + +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/wall"), "", UsdPreviewSurface("/DEFAULT/defaultMaterial"), LightSet("LightSet880F79"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, +} + +UsdPreviewSurface("/DEFAULT/defaultMaterial") { + ["diffuseColor"] = bind(AttributeMap("/DEFAULT/displayColorMap"), Rgb(1, 1, 1)), + ["roughness"] = 0.300000012, + ["opacity"] = bind(AttributeMap("/DEFAULT/displayOpacityMap"), 1), +} + +CylinderLight("/cylinderlight") { + ["node_xform"] = Mat4(-0, -1, -0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 2, -1, 1, 1), + ["color"] = Rgb(0.25, 1, 0.25), + ["normalized"] = false, + ["radius"] = 1.20000005, + ["height"] = 2.5, +} + +DiskLight("/diskLight") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -2, -1, 0.20000000298023224, 1), + ["color"] = Rgb(1, 1, 0.25), + ["normalized"] = false, + ["radius"] = 2, +} + +RectLight("/rectLight") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -6, -1, 0.20000000298023224, 1), + ["color"] = Rgb(1, 0.25, 0.25), + ["texture"] = "/work/gshad/moonshine_test/rats_data/light/rect_textured/env_maps/burning_man-med.exr", + ["normalized"] = false, + ["width"] = 3, + ["height"] = 5, +} + +RectLight("/shapedRect") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -6, -1, 0.20000000298023224, 1), + ["color"] = Rgb(0.25, 1, 1), + ["normalized"] = false, + ["width"] = 3, + ["height"] = 3, + ["spread"] = 0.5, +} + +SphereLight("/sphereLight") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 6, -1, 1, 1), + ["color"] = Rgb(0.25, 0.25, 1), + ["intensity"] = 4, + ["normalized"] = false, + ["radius"] = 1.5, +} + +SpotLight("/spotLight") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 8, -1, 0.5, 1), + ["color"] = Rgb(1, 0.25, 1), + ["intensity"] = 10, + ["normalized"] = false, + ["lens_radius"] = 2, + ["inner_cone_angle"] = 0, +} + +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + +LightSet("LightSet880F79") { + CylinderLight("/cylinderlight"), + DiskLight("/diskLight"), + RectLight("/rectLight"), + RectLight("/shapedRect"), + SphereLight("/sphereLight"), + SpotLight("/spotLight"), +} + +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 53.897418975830078, 1), + ["far"] = 1000000, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = 50, + ["film_width_aperture"] = 20.9702396, +} + +PerspectiveCamera("/_UsdImaging_HdMoonrayRendererPlugin_0xID/camera") { + ["node_xform"] = Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 53.897418975830078, 1), + ["far"] = 1000000, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = 50, + ["film_width_aperture"] = 20.9702396, +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/wall.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 0}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/light/light_shapes.usd b/hats/light/light_shapes.usd new file mode 100644 index 0000000..d5223b7 --- /dev/null +++ b/hats/light/light_shapes.usd @@ -0,0 +1,71 @@ +#usda 1.0 + +def Plane "wall" +{ + float3[] extent = [(-10, -4, 0), (10, 4, 0)] + double length = 8 + double width = 20 +} + +def RectLight "rectLight" +{ + color3f inputs:color = (1, 0.25, 0.25) + float inputs:height = 5 + float inputs:width = 3 + asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/light/rect_textured/env_maps/burning_man-med.exr" + float3 xformOp:translate = (-6, -1, 0.2) + uniform token[] xformOpOrder = ["xformOp:translate"] +} + +def DiskLight "diskLight" +{ + color3f inputs:color = (1, 1, 0.25) + float inputs:radius = 2 + float3 xformOp:translate = (-2, -1, 0.2) + uniform token[] xformOpOrder = ["xformOp:translate"] +} + +def CylinderLight "cylinderlight" +{ + color3f inputs:color = (0.25, 1, 0.25) + float inputs:length = 2.5 + float inputs:radius = 1.2 + float3 xformOp:translate = (2, -1, 1) + uniform token[] xformOpOrder = ["xformOp:translate"] +} + +def SphereLight "sphereLight" +{ + color3f inputs:color = (0.25, 0.25, 1) + float inputs:intensity = 4 + float inputs:radius = 1.5 + float3 xformOp:translate = (6, -1, 1) + uniform token[] xformOpOrder = ["xformOp:translate"] +} + +def DiskLight "spotLight" +{ + color3f inputs:color = (1, 0.25, 1) + float inputs:radius = 2 + float inputs:intensity = 10 + + # these should cause hdm to generate a spotlight + float inputs:shaping:cone:angle = 30 + float inputs:shaping:cone:softness = 1 + + float3 xformOp:translate = (8, -1, 0.5) + uniform token[] xformOpOrder = ["xformOp:translate"] +} + +def RectLight "shapedRect" +{ + color3f inputs:color = (0.25, 1, 1) + float inputs:height = 3 + float inputs:width = 3 + + # this should cause hdm to set the "spread" attribute + float inputs:shaping:cone:angle = 45 + + float3 xformOp:translate = (-6, -1, 0.2) + uniform token[] xformOpOrder = ["xformOp:translate"] +} diff --git a/hats/light/light_sphere.canonical.rdla b/hats/light/light_sphere.canonical.rdla deleted file mode 100644 index 40ff20a..0000000 --- a/hats/light/light_sphere.canonical.rdla +++ /dev/null @@ -1,122 +0,0 @@ -SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), - ["enable_motion_blur"] = false, -} - -AttributeMap("displayColor") { - ["default_value"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), - ["primitive_attribute_name"] = "displayColor", -} - -AttributeMap("displayOpacity") { - ["primitive_attribute_name"] = "displayOpacity", - ["primitive_attribute_type"] = "float", -} - -RdlMeshGeometry("/floor") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1), Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/floor.primvars:displayColor"), UserData("/floor.primvars:primId")}, -} - -RdlMeshGeometry("/shape") { - ["node_xform"] = blur(Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1), Mat4(3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 3, 0, 0, 1, -5, 1)), - ["face_vertex_count"] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, - ["vertices_by_index"] = { 2, 1, 0, 3, 2, 0, 4, 3, 0, 5, 4, 0, 6, 5, 0, 7, 6, 0, 8, 7, 0, 9, 8, 0, 10, 9, 0, 1, 10, 0, 1, 2, 12, 11, 2, 3, 13, 12, 3, 4, 14, 13, 4, 5, 15, 14, 5, 6, 16, 15, 6, 7, 17, 16, 7, 8, 18, 17, 8, 9, 19, 18, 9, 10, 20, 19, 10, 1, 11, 20, 11, 12, 22, 21, 12, 13, 23, 22, 13, 14, 24, 23, 14, 15, 25, 24, 15, 16, 26, 25, 16, 17, 27, 26, 17, 18, 28, 27, 18, 19, 29, 28, 19, 20, 30, 29, 20, 11, 21, 30, 21, 22, 32, 31, 22, 23, 33, 32, 23, 24, 34, 33, 24, 25, 35, 34, 25, 26, 36, 35, 26, 27, 37, 36, 27, 28, 38, 37, 28, 29, 39, 38, 29, 30, 40, 39, 30, 21, 31, 40, 31, 32, 42, 41, 32, 33, 43, 42, 33, 34, 44, 43, 34, 35, 45, 44, 35, 36, 46, 45, 36, 37, 47, 46, 37, 38, 48, 47, 38, 39, 49, 48, 39, 40, 50, 49, 40, 31, 41, 50, 41, 42, 52, 51, 42, 43, 53, 52, 43, 44, 54, 53, 44, 45, 55, 54, 45, 46, 56, 55, 46, 47, 57, 56, 47, 48, 58, 57, 48, 49, 59, 58, 49, 50, 60, 59, 50, 41, 51, 60, 51, 52, 62, 61, 52, 53, 63, 62, 53, 54, 64, 63, 54, 55, 65, 64, 55, 56, 66, 65, 56, 57, 67, 66, 57, 58, 68, 67, 58, 59, 69, 68, 59, 60, 70, 69, 60, 51, 61, 70, 61, 62, 72, 71, 62, 63, 73, 72, 63, 64, 74, 73, 64, 65, 75, 74, 65, 66, 76, 75, 66, 67, 77, 76, 67, 68, 78, 77, 68, 69, 79, 78, 69, 70, 80, 79, 70, 61, 71, 80, 71, 72, 81, 72, 73, 81, 73, 74, 81, 74, 75, 81, 75, 76, 81, 76, 77, 81, 77, 78, 81, 78, 79, 81, 79, 80, 81, 80, 71, 81}, - ["vertex_list_0"] = { Vec3(0, 0, -1), Vec3(0.191341713, 0, -0.961939752), Vec3(0.154798701, 0.112467833, -0.961939752), Vec3(0.0591278374, 0.18197678, -0.961939752), Vec3(-0.0591278709, 0.18197678, -0.961939752), Vec3(-0.154798716, 0.112467825, -0.961939752), Vec3(-0.191341713, -1.67276237e-08, -0.961939752), Vec3(-0.154798657, -0.112467892, -0.961939752), Vec3(-0.0591278598, -0.18197678, -0.961939752), Vec3(0.0591278672, -0.18197678, -0.961939752), Vec3(0.154798687, -0.112467848, -0.961939752), Vec3(0.353553385, 0, -0.853553414), Vec3(0.28603071, 0.207813457, -0.853553414), Vec3(0.109253995, 0.336249262, -0.853553414), Vec3(-0.109254062, 0.336249232, -0.853553414), Vec3(-0.28603071, 0.207813442, -0.853553414), Vec3(-0.353553385, -3.09086197e-08, -0.853553414), Vec3(-0.28603062, -0.207813561, -0.853553414), Vec3(-0.10925404, -0.336249232, -0.853553414), Vec3(0.109254047, -0.336249232, -0.853553414), Vec3(0.28603068, -0.207813486, -0.853553414), Vec3(0.461939752, 0, -0.691341758), Vec3(0.373717099, 0.27152136, -0.691341758), Vec3(0.142747223, 0.439330816, -0.691341758), Vec3(-0.142747313, 0.439330786, -0.691341758), Vec3(-0.373717129, 0.27152133, -0.691341758), Vec3(-0.461939752, -4.03840552e-08, -0.691341758), Vec3(-0.37371701, -0.271521509, -0.691341758), Vec3(-0.142747283, -0.439330786, -0.691341758), Vec3(0.142747298, -0.439330786, -0.691341758), Vec3(0.373717099, -0.271521389, -0.691341758), Vec3(0.5, 0, -0.5), Vec3(0.404508501, 0.293892622, -0.5), Vec3(0.154508486, 0.47552827, -0.5), Vec3(-0.154508576, 0.47552824, -0.5), Vec3(-0.404508531, 0.293892592, -0.5), Vec3(-0.5, -4.37113883e-08, -0.5), Vec3(-0.404508382, -0.293892771, -0.5), Vec3(-0.154508546, -0.47552824, -0.5), Vec3(0.154508561, -0.47552824, -0.5), Vec3(0.404508471, -0.293892652, -0.5), Vec3(0.5, 0, 0.5), Vec3(0.404508501, 0.293892622, 0.5), Vec3(0.154508486, 0.47552827, 0.5), Vec3(-0.154508576, 0.47552824, 0.5), Vec3(-0.404508531, 0.293892592, 0.5), Vec3(-0.5, -4.37113883e-08, 0.5), Vec3(-0.404508382, -0.293892771, 0.5), Vec3(-0.154508546, -0.47552824, 0.5), Vec3(0.154508561, -0.47552824, 0.5), Vec3(0.404508471, -0.293892652, 0.5), Vec3(0.461939752, 0, 0.691341758), Vec3(0.373717099, 0.27152136, 0.691341758), Vec3(0.142747223, 0.439330816, 0.691341758), Vec3(-0.142747313, 0.439330786, 0.691341758), Vec3(-0.373717129, 0.27152133, 0.691341758), Vec3(-0.461939752, -4.03840552e-08, 0.691341758), Vec3(-0.37371701, -0.271521509, 0.691341758), Vec3(-0.142747283, -0.439330786, 0.691341758), Vec3(0.142747298, -0.439330786, 0.691341758), Vec3(0.373717099, -0.271521389, 0.691341758), Vec3(0.353553385, 0, 0.853553414), Vec3(0.28603071, 0.207813457, 0.853553414), Vec3(0.109253995, 0.336249262, 0.853553414), Vec3(-0.109254062, 0.336249232, 0.853553414), Vec3(-0.28603071, 0.207813442, 0.853553414), Vec3(-0.353553385, -3.09086197e-08, 0.853553414), Vec3(-0.28603062, -0.207813561, 0.853553414), Vec3(-0.10925404, -0.336249232, 0.853553414), Vec3(0.109254047, -0.336249232, 0.853553414), Vec3(0.28603068, -0.207813486, 0.853553414), Vec3(0.191341713, 0, 0.961939752), Vec3(0.154798701, 0.112467833, 0.961939752), Vec3(0.0591278374, 0.18197678, 0.961939752), Vec3(-0.0591278709, 0.18197678, 0.961939752), Vec3(-0.154798716, 0.112467825, 0.961939752), Vec3(-0.191341713, -1.67276237e-08, 0.961939752), Vec3(-0.154798657, -0.112467892, 0.961939752), Vec3(-0.0591278598, -0.18197678, 0.961939752), Vec3(0.0591278672, -0.18197678, 0.961939752), Vec3(0.154798687, -0.112467848, 0.961939752), Vec3(0, 0, 1)}, - ["primitive_attributes"] = { UserData("/shape.primvars:primId")}, -} - -RdlMeshGeometry("/wall") { - ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1), Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1)), - ["face_vertex_count"] = { 4}, - ["vertices_by_index"] = { 0, 1, 3, 2}, - ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, - ["uv_list"] = { Vec2(0, 0), Vec2(1, 0), Vec2(1, 1), Vec2(0, 1)}, - ["subd_fvar_linear"] = "corners plus1", - ["primitive_attributes"] = { UserData("/wall.primvars:displayColor"), UserData("/wall.primvars:primId")}, -} - -GeometrySet("allGeometry") { - RdlMeshGeometry("/floor"), - RdlMeshGeometry("/shape"), - RdlMeshGeometry("/wall"), -} - -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet02C99C"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/shape"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet02C99C"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", UsdPreviewSurface("defaultMaterial"), LightSet("LightSet02C99C"), undef(), undef(), undef(), undef(), undef()}, -} - -UsdPreviewSurface("defaultMaterial") { - ["diffuseColor"] = bind(AttributeMap("displayColor"), Rgb(1, 1, 1)), - ["roughness"] = bind(undef(), 0.300000012), - ["opacity"] = bind(AttributeMap("displayOpacity"), 1), -} - -SphereLight("/sphere") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1, 1.8, -8, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -1, 1.8, -8, 1)), - ["visible_in_camera"] = "force on", - ["color"] = Rgb(1, 0.899999976, 0.600000024), - ["intensity"] = 3, - ["normalized"] = false, - ["radius"] = 0.300000012, -} - -LightSet("LightSet02C99C") { - SphereLight("/sphere"), -} - -PerspectiveCamera("/camera") { - ["node_xform"] = blur(Mat4(-0.72648999999999997, 0, -0.68717600000000001, 0, -0.064921499999999993, 0.99552700000000005, 0.068635699999999994, 0, 0.68410300000000002, 0.094475699999999996, -0.72324100000000002, 0, 0.63597599999999999, 1.9145000000000001, -9.5104299999999995, 1), Mat4(-0.72648999999999997, 0, -0.68717600000000001, 0, -0.064921499999999993, 0.99552700000000005, 0.068635699999999994, 0, 0.68410300000000002, 0.094475699999999996, -0.72324100000000002, 0, 0.63597599999999999, 1.9145000000000001, -9.5104299999999995, 1)), - ["near"] = 0.00999999978, - ["mb_shutter_open"] = 0, - ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), - ["film_width_aperture"] = 240, -} - -PerspectiveCamera("primaryCamera") { - ["node_xform"] = blur(Mat4(-0.72648999999999997, 0, -0.68717600000000001, 0, -0.064921499999999993, 0.99552700000000005, 0.068635699999999994, 0, 0.68410300000000002, 0.094475699999999996, -0.72324100000000002, 0, 0.63597599999999999, 1.9145000000000001, -9.5104299999999995, 1), Mat4(-0.72648999999999997, 0, -0.68717600000000001, 0, -0.064921499999999993, 0.99552700000000005, 0.068635699999999994, 0, 0.68410300000000002, 0.094475699999999996, -0.72324100000000002, 0, 0.63597599999999999, 1.9145000000000001, -9.5104299999999995, 1)), - ["near"] = 0.00999999978, - ["mb_shutter_open"] = 0, - ["mb_shutter_close"] = 0, - ["focal"] = blur(300, 300), - ["film_width_aperture"] = 240, -} - -UserData("/floor.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", -} - -UserData("/floor.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", -} - -UserData("/wall.primvars:displayColor") { - ["color_key"] = "displayColor", - ["color_values_0"] = { Rgb(1, 1, 1)}, - ["rate"] = "uniform", -} - -UserData("/wall.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 2}, - ["rate"] = "constant", -} - -UserData("/shape.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, - ["rate"] = "constant", -} diff --git a/hats/light/light_sphere.usd b/hats/light/light_sphere.usd deleted file mode 100644 index 76b7b96..0000000 --- a/hats/light/light_sphere.usd +++ /dev/null @@ -1,70 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (-0.72649, 0, -0.687176, 0), - (-0.0649215, 0.995527, 0.0686357, 0), - (0.684103, 0.0944757, -0.723241, 0), - (0.635976, 1.9145, -9.51043, 1 ) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def Capsule "shape" -{ - matrix4d xformOp:transform = ( (3, 0, 0, 0), - (0, 3, 0, 0), - (0, 0, 3, 0), - (0, 1, -5, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def SphereLight "sphere" -{ - matrix4d xformOp:transform = ( (1, 0, -0, 0), - (0, 1, 0, 0), - (0, -0, 1, 0), - (-1, 1.8, -8, 1) ) - token moonray:visible_in_camera = "force on" - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1, 0.9, 0.6) - color3f inputs:color = (1, 0.9, 0.6) - float intensity = 3 - float inputs:intensity = 3 - float radius = 0.3 - float inputs:radius = 0.3 -} diff --git a/hats/light/light_spot.usd b/hats/light/light_spot.usd deleted file mode 100644 index dd76c8e..0000000 --- a/hats/light/light_spot.usd +++ /dev/null @@ -1,79 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 0.999256, -0.0385791, 0), - (0, 0.0385791, 0.999256, 0), - (0, 4.76459, 18.7481, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def Capsule "shape" -{ - matrix4d xformOp:transform = ( (3, 0, 0, 0), - (0, 3, 0, 0), - (0, 0, 3, 0), - (0, 1, -5, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def DiskLight "spot" -{ -# uniform token moonray:class = "SpotLight" - matrix4d xformOp:transform = ( (-0.0291956, 0, 0.999573, 0), - (0.999573, -4.37114e-08, 0.0291956, 0), - (4.36928e-08, 1, 1.27618e-09, 0), - (0, 9, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - int moonray:visible_in_camera = 1 - color3f color = (1,1,1) - color3f inputs:color = (1,1,1) - float intensity = 10 - float inputs:intensity = 10 - float radius = 1.4 - float inputs:radius = 1.4 - float shaping:cone:angle = 30 - float inputs:shaping:cone:angle = 30 - float shaping:cone:softness = 1 - float inputs:shaping:cone:softness = 1 -# float moonray:outer_cone_angle = 60 -# float moonray:inner_cone_angle = 0 - int moonray:angle_falloff_type = 3 -} diff --git a/hats/light/light_sun.usd b/hats/light/light_sun.usd deleted file mode 100644 index 0bf10ee..0000000 --- a/hats/light/light_sun.usd +++ /dev/null @@ -1,74 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (0.97038, 0, 0.241585, 0), - (0.0982038, 0.913652, -0.394457, 0), - (-0.220725, 0.406498, 0.886589, 0), - (-2.29199, 5.33596, 9.42018, 1) ) - - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 135; - float2 clippingRange = (0.01, 10000) -} - -def Capsule "shape" -{ - matrix4d xformOp:transform = ( (3, 0, 0, 0), - (0, 3, 0, 0), - (0, 0, 3, 0), - (0, 1, -5, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def DistantLight "sun" -{ - matrix4d xformOp:transform = ( (0.786774, 0.019432, -0.616936, 0), - (-0.525164, 0.546265, -0.652531, 0), - (0.324331, 0.837387, 0.439992, 0), - (13.7238, 7, 2.81431, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - token moonray:visible_in_camera = "force on" - color3f color = (0.748, 0.748, 0.678) - color3f inputs:color = (0.748, 0.748, 0.678) - float intensity = 1 # default is 50000.0 - float inputs:intensity = 1 - float exposure = 9 - float inputs:exposure = 9 - float angle = 5 # default is 0.53 - float inputs:angle = 5 -} diff --git a/hats/lightfilter/CMakeLists.txt b/hats/lightfilter/CMakeLists.txt index 29d3391..88f071f 100644 --- a/hats/lightfilter/CMakeLists.txt +++ b/hats/lightfilter/CMakeLists.txt @@ -9,7 +9,7 @@ add_hats_test(lightfilter_cookie_projector CAMERA camera) add_hats_test(lightfilter_cookie_v2 CAMERA camera) add_hats_test(lightfilter_decay CAMERA camera) add_hats_test(lightfilter_intensity CAMERA camera) +add_hats_test(lightfilter_linking CAMERA camera) add_hats_test(lightfilter_rod CAMERA camera) add_hats_test(lightfilter_vdb CAMERA camera) - diff --git a/hats/lightfilter/lightfilter_barn_door.canonical.rdla b/hats/lightfilter/lightfilter_barn_door.canonical.rdla index 686a9d2..07cd8e5 100644 --- a/hats/lightfilter/lightfilter_barn_door.canonical.rdla +++ b/hats/lightfilter/lightfilter_barn_door.canonical.rdla @@ -1,6 +1,8 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -22,17 +24,17 @@ RdlMeshGeometry("/wall") { ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/floor"), RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet13F8D"), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet13F8D"), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet13F8D"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet13F8D"), undef(), undef()}, } -BaseMaterial("/surface/baseMtl") { +DwaBaseMaterial("/surface/baseMtl") { } SpotLight("/spot") { @@ -61,7 +63,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -70,6 +72,32 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +UserData("/wall.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, + ["rate"] = "constant", +} + BarnDoorLightFilter("/barnDoor") { ["projector_focal_distance"] = 9, ["projector_height"] = 0.5, @@ -91,8 +119,15 @@ UserData("/floor.primvars:primId") { ["rate"] = "constant", } -UserData("/wall.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", } diff --git a/hats/lightfilter/lightfilter_barn_door.usd b/hats/lightfilter/lightfilter_barn_door.usd index af8872c..1a3c641 100644 --- a/hats/lightfilter/lightfilter_barn_door.usd +++ b/hats/lightfilter/lightfilter_barn_door.usd @@ -13,7 +13,7 @@ def Camera "camera" float verticalAperture = 240 float2 clippingRange = (0.01, 10000) } -def Mesh "floor" +def Mesh "floor" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -28,7 +28,7 @@ def Mesh "floor" rel material:binding = } -def Mesh "wall" +def Mesh "wall" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -49,7 +49,7 @@ def Material "surface" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/lightfilter/lightfilter_color_ramp.canonical.rdla b/hats/lightfilter/lightfilter_color_ramp.canonical.rdla index 052a2de..2c32525 100644 --- a/hats/lightfilter/lightfilter_color_ramp.canonical.rdla +++ b/hats/lightfilter/lightfilter_color_ramp.canonical.rdla @@ -1,6 +1,8 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -22,17 +24,17 @@ RdlMeshGeometry("/wall") { ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/floor"), RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet36C4B"), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet36C4B"), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet36C4B"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet36C4B"), undef(), undef()}, } -BaseMaterial("/surface/baseMtl") { +DwaBaseMaterial("/surface/baseMtl") { } SpotLight("/spot") { @@ -61,7 +63,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -70,10 +72,18 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } -ColorRampLightFilter("/colorRamp") { - ["colors"] = { Rgb(0, 0, 1), Rgb(1, 0, 0)}, - ["distances"] = { 4, 8}, - ["interpolation_types"] = { 0, 0}, +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/floor.primvars:primId") { @@ -87,3 +97,28 @@ UserData("/wall.primvars:primId") { ["float_values_0"] = { 1}, ["rate"] = "constant", } + +ColorRampLightFilter("/colorRamp") { + ["colors"] = { Rgb(0, 0, 1), Rgb(1, 0, 0)}, + ["distances"] = { 4, 8}, + ["interpolation_types"] = { 0, 0}, +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} diff --git a/hats/lightfilter/lightfilter_color_ramp.usd b/hats/lightfilter/lightfilter_color_ramp.usd index d414a28..fff9c2c 100644 --- a/hats/lightfilter/lightfilter_color_ramp.usd +++ b/hats/lightfilter/lightfilter_color_ramp.usd @@ -13,7 +13,7 @@ def Camera "camera" float verticalAperture = 240 float2 clippingRange = (0.01, 10000) } -def Mesh "floor" +def Mesh "floor" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -28,7 +28,7 @@ def Mesh "floor" rel material:binding = } -def Mesh "wall" +def Mesh "wall" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -49,7 +49,7 @@ def Material "surface" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/lightfilter/lightfilter_combine.canonical.rdla b/hats/lightfilter/lightfilter_combine.canonical.rdla index d0c6650..47ad311 100644 --- a/hats/lightfilter/lightfilter_combine.canonical.rdla +++ b/hats/lightfilter/lightfilter_combine.canonical.rdla @@ -1,6 +1,8 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -22,17 +24,17 @@ RdlMeshGeometry("/wall") { ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/floor"), RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet5779C"), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet5779C"), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet5779C"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet5779C"), undef(), undef()}, } -BaseMaterial("/surface/baseMtl") { +DwaBaseMaterial("/surface/baseMtl") { } SpotLight("/spot") { @@ -63,7 +65,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -72,20 +74,31 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } -UserData("/wall.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", -} - UserData("/floor.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 0}, ["rate"] = "constant", } -CombineLightFilter("/combine") { - ["light_filters"] = { RodLightFilter("/rod1"), RodLightFilter("/rod2")}, +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } RodLightFilter("/rod2") { @@ -97,6 +110,28 @@ RodLightFilter("/rod2") { ["color"] = Rgb(0, 1, 1), } +UserData("/wall.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +CombineLightFilter("/combine") { + ["light_filters"] = { RodLightFilter("/rod1"), RodLightFilter("/rod2")}, +} + RodLightFilter("/rod1") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2, 11, -6, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 2, 11, -6, 1)), ["width"] = 4, diff --git a/hats/lightfilter/lightfilter_combine.usd b/hats/lightfilter/lightfilter_combine.usd index 192ddd5..1b6593d 100644 --- a/hats/lightfilter/lightfilter_combine.usd +++ b/hats/lightfilter/lightfilter_combine.usd @@ -13,7 +13,7 @@ def Camera "camera" float verticalAperture = 240 float2 clippingRange = (0.01, 10000) } -def Mesh "floor" +def Mesh "floor" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -28,7 +28,7 @@ def Mesh "floor" rel material:binding = } -def Mesh "wall" +def Mesh "wall" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -49,7 +49,7 @@ def Material "surface" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/lightfilter/lightfilter_cookie.canonical.rdla b/hats/lightfilter/lightfilter_cookie.canonical.rdla index 1b4bfed..26fdc48 100644 --- a/hats/lightfilter/lightfilter_cookie.canonical.rdla +++ b/hats/lightfilter/lightfilter_cookie.canonical.rdla @@ -1,6 +1,8 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -26,17 +28,17 @@ RdlMeshGeometry("/wall") { ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/floor"), RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet3CAAB"), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet3CAAB"), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet3CAAB"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet3CAAB"), undef(), undef()}, } -BaseMaterial("/surface/baseMtl") { +DwaBaseMaterial("/surface/baseMtl") { } SpotLight("/spot") { @@ -65,7 +67,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -74,10 +76,24 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } -UserData("/floor.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, - ["rate"] = "constant", +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/wall.primvars:primId") { @@ -86,8 +102,27 @@ UserData("/wall.primvars:primId") { ["rate"] = "constant", } +UserData("/floor.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 0}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + CookieLightFilter("/cookie") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3, 5, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3, 5, 0, 1)), ["projector_focal"] = 50, ["texture_map"] = ImageMap("/cookie/imagemap"), } + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/lightfilter/lightfilter_cookie.usd b/hats/lightfilter/lightfilter_cookie.usd index 19c7343..8927226 100644 --- a/hats/lightfilter/lightfilter_cookie.usd +++ b/hats/lightfilter/lightfilter_cookie.usd @@ -13,7 +13,7 @@ def Camera "camera" float verticalAperture = 240 float2 clippingRange = (0.01, 10000) } -def Mesh "floor" +def Mesh "floor" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -28,7 +28,7 @@ def Mesh "floor" rel material:binding = } -def Mesh "wall" +def Mesh "wall" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -49,7 +49,7 @@ def Material "surface" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/lightfilter/lightfilter_cookie_projector.canonical.rdla b/hats/lightfilter/lightfilter_cookie_projector.canonical.rdla index c0482f8..8bc7d93 100644 --- a/hats/lightfilter/lightfilter_cookie_projector.canonical.rdla +++ b/hats/lightfilter/lightfilter_cookie_projector.canonical.rdla @@ -1,6 +1,8 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -26,17 +28,17 @@ RdlMeshGeometry("/wall") { ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/floor"), RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet3CAAB"), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet3CAAB"), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet3CAAB"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet3CAAB"), undef(), undef()}, } -BaseMaterial("/surface/baseMtl") { +DwaBaseMaterial("/surface/baseMtl") { } SpotLight("/spot") { @@ -74,7 +76,7 @@ PerspectiveCamera("/cookie_projector") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -83,19 +85,52 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +CookieLightFilter("/cookie") { + ["projector"] = PerspectiveCamera("/cookie_projector"), + ["texture_map"] = ImageMap("/cookie/imagemap"), +} + UserData("/floor.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 0}, ["rate"] = "constant", } +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + UserData("/wall.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 1}, ["rate"] = "constant", } -CookieLightFilter("/cookie") { - ["projector"] = PerspectiveCamera("/cookie_projector"), - ["texture_map"] = ImageMap("/cookie/imagemap"), +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } diff --git a/hats/lightfilter/lightfilter_cookie_projector.usd b/hats/lightfilter/lightfilter_cookie_projector.usd index a05de8a..b4fde35 100644 --- a/hats/lightfilter/lightfilter_cookie_projector.usd +++ b/hats/lightfilter/lightfilter_cookie_projector.usd @@ -13,7 +13,7 @@ def Camera "camera" float verticalAperture = 240 float2 clippingRange = (0.01, 10000) } -def Mesh "floor" +def Mesh "floor" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -28,7 +28,7 @@ def Mesh "floor" rel material:binding = } -def Mesh "wall" +def Mesh "wall" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -49,7 +49,7 @@ def Material "surface" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/lightfilter/lightfilter_cookie_v2.canonical.rdla b/hats/lightfilter/lightfilter_cookie_v2.canonical.rdla index 8af03a9..77946af 100644 --- a/hats/lightfilter/lightfilter_cookie_v2.canonical.rdla +++ b/hats/lightfilter/lightfilter_cookie_v2.canonical.rdla @@ -1,6 +1,8 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -22,17 +24,17 @@ RdlMeshGeometry("/wall") { ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/floor"), RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet22401"), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet22401"), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet22401"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet22401"), undef(), undef()}, } -BaseMaterial("/surface/baseMtl") { +DwaBaseMaterial("/surface/baseMtl") { } SpotLight("/spot") { @@ -61,7 +63,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -70,10 +72,18 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } -CookieLightFilter_v2("/cookie_v2") { - ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3, 5, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3, 5, 0, 1)), - ["projector_focal"] = 50, - ["texture"] = "/work/gshad/moonshine_test/rats_data/light/filter/cookie/maps/dapple.tx", +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/floor.primvars:primId") { @@ -82,8 +92,33 @@ UserData("/floor.primvars:primId") { ["rate"] = "constant", } +CookieLightFilter_v2("/cookie_v2") { + ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3, 5, 0, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 3, 5, 0, 1)), + ["projector_focal"] = 50, + ["texture"] = "/work/gshad/moonshine_test/rats_data/light/filter/cookie/maps/dapple.tx", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + UserData("/wall.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 1}, ["rate"] = "constant", } + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/lightfilter/lightfilter_cookie_v2.usd b/hats/lightfilter/lightfilter_cookie_v2.usd index ad3ad41..f5892fe 100644 --- a/hats/lightfilter/lightfilter_cookie_v2.usd +++ b/hats/lightfilter/lightfilter_cookie_v2.usd @@ -13,7 +13,7 @@ def Camera "camera" float verticalAperture = 240 float2 clippingRange = (0.01, 10000) } -def Mesh "floor" +def Mesh "floor" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -28,7 +28,7 @@ def Mesh "floor" rel material:binding = } -def Mesh "wall" +def Mesh "wall" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -49,7 +49,7 @@ def Material "surface" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/lightfilter/lightfilter_decay.canonical.rdla b/hats/lightfilter/lightfilter_decay.canonical.rdla index d1cffc3..0251754 100644 --- a/hats/lightfilter/lightfilter_decay.canonical.rdla +++ b/hats/lightfilter/lightfilter_decay.canonical.rdla @@ -1,6 +1,8 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -22,17 +24,17 @@ RdlMeshGeometry("/wall") { ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/floor"), RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet12CDB"), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet12CDB"), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet12CDB"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet12CDB"), undef(), undef()}, } -BaseMaterial("/surface/baseMtl") { +DwaBaseMaterial("/surface/baseMtl") { } SpotLight("/spot") { @@ -61,7 +63,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -70,15 +72,23 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } -UserData("/floor.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 0}, - ["rate"] = "constant", +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } -UserData("/wall.primvars:primId") { +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/floor.primvars:primId") { ["float_key"] = "primId", - ["float_values_0"] = { 1}, + ["float_values_0"] = { 0}, ["rate"] = "constant", } @@ -90,3 +100,28 @@ DecayLightFilter("/decay") { ["far_start"] = 7, ["far_end"] = 9, } + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +UserData("/wall.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, + ["rate"] = "constant", +} diff --git a/hats/lightfilter/lightfilter_decay.usd b/hats/lightfilter/lightfilter_decay.usd index 7ba7311..9bb4f68 100644 --- a/hats/lightfilter/lightfilter_decay.usd +++ b/hats/lightfilter/lightfilter_decay.usd @@ -13,7 +13,7 @@ def Camera "camera" float verticalAperture = 240 float2 clippingRange = (0.01, 10000) } -def Mesh "floor" +def Mesh "floor" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -28,7 +28,7 @@ def Mesh "floor" rel material:binding = } -def Mesh "wall" +def Mesh "wall" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -49,7 +49,7 @@ def Material "surface" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/lightfilter/lightfilter_intensity.canonical.rdla b/hats/lightfilter/lightfilter_intensity.canonical.rdla index c9d7f46..33febc4 100644 --- a/hats/lightfilter/lightfilter_intensity.canonical.rdla +++ b/hats/lightfilter/lightfilter_intensity.canonical.rdla @@ -1,6 +1,8 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -22,17 +24,17 @@ RdlMeshGeometry("/wall") { ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/floor"), RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet1D243"), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet1D243"), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet1D243"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet1D243"), undef(), undef()}, } -BaseMaterial("/surface/baseMtl") { +DwaBaseMaterial("/surface/baseMtl") { } SpotLight("/spot") { @@ -61,7 +63,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -76,6 +78,20 @@ UserData("/floor.primvars:primId") { ["rate"] = "constant", } +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + IntensityLightFilter("/intensity") { ["intensity"] = 10, ["color"] = Rgb(0.300000012, 0.800000012, 0.800000012), @@ -87,3 +103,22 @@ UserData("/wall.primvars:primId") { ["float_values_0"] = { 1}, ["rate"] = "constant", } + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/lightfilter/lightfilter_intensity.usd b/hats/lightfilter/lightfilter_intensity.usd index b691d6d..da323e2 100644 --- a/hats/lightfilter/lightfilter_intensity.usd +++ b/hats/lightfilter/lightfilter_intensity.usd @@ -13,7 +13,7 @@ def Camera "camera" float verticalAperture = 240 float2 clippingRange = (0.01, 10000) } -def Mesh "floor" +def Mesh "floor" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -28,7 +28,7 @@ def Mesh "floor" rel material:binding = } -def Mesh "wall" +def Mesh "wall" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -49,7 +49,7 @@ def Material "surface" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/lightfilter/lightfilter_linking.canonical.rdla b/hats/lightfilter/lightfilter_linking.canonical.rdla new file mode 100644 index 0000000..46eae42 --- /dev/null +++ b/hats/lightfilter/lightfilter_linking.canonical.rdla @@ -0,0 +1,250 @@ +SceneVariables { + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, + ["enable_motion_blur"] = false, +} + +RdlMeshGeometry("/floor") { + ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1), Mat4(20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 20, 0, 0, 0, 0, 1)), + ["face_vertex_count"] = { 4}, + ["vertices_by_index"] = { 0, 1, 3, 2}, + ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, + ["subd_fvar_linear"] = "corners plus1", + ["primitive_attributes"] = { UserData("/floor.primvars:primId")}, +} + +RdlMeshGeometry("/sphere1/sphere") { + ["node_xform"] = blur(Mat4(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, -2, 2, -6, 1), Mat4(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, -2, 2, -6, 1)), + ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + ["vertices_by_index"] = { 3, 2, 1, 0, 2, 5, 4, 1, 7, 6, 5, 2, 8, 7, 2, 3, 5, 10, 9, 4, 10, 12, 11, 9, 14, 13, 12, 10, 6, 14, 10, 5, 16, 15, 14, 6, 15, 17, 13, 14, 19, 18, 17, 15, 20, 19, 15, 16, 22, 21, 7, 8, 21, 16, 6, 7, 23, 20, 16, 21, 24, 23, 21, 22, 12, 26, 25, 11, 26, 28, 27, 25, 30, 29, 28, 26, 13, 30, 26, 12, 28, 32, 31, 27, 32, 34, 33, 31, 36, 35, 34, 32, 29, 36, 32, 28, 38, 37, 36, 29, 37, 39, 35, 36, 41, 40, 39, 37, 42, 41, 37, 38, 17, 43, 30, 13, 43, 38, 29, 30, 44, 42, 38, 43, 18, 44, 43, 17, 46, 45, 44, 18, 45, 47, 42, 44, 49, 48, 47, 45, 50, 49, 45, 46, 47, 51, 41, 42, 51, 52, 40, 41, 54, 53, 52, 51, 48, 54, 51, 47, 56, 55, 54, 48, 55, 57, 53, 54, 59, 58, 57, 55, 60, 59, 55, 56, 62, 61, 49, 50, 61, 56, 48, 49, 63, 60, 56, 61, 64, 63, 61, 62, 66, 65, 23, 24, 65, 67, 20, 23, 69, 68, 67, 65, 70, 69, 65, 66, 67, 71, 19, 20, 71, 46, 18, 19, 72, 50, 46, 71, 68, 72, 71, 67, 74, 73, 72, 68, 73, 62, 50, 72, 75, 64, 62, 73, 76, 75, 73, 74, 78, 77, 69, 70, 77, 74, 68, 69, 79, 76, 74, 77, 80, 79, 77, 78, 34, 82, 81, 33, 82, 84, 83, 81, 86, 85, 84, 82, 35, 86, 82, 34, 84, 88, 87, 83, 88, 90, 89, 87, 92, 91, 90, 88, 85, 92, 88, 84, 94, 93, 92, 85, 93, 95, 91, 92, 97, 96, 95, 93, 98, 97, 93, 94, 39, 99, 86, 35, 99, 94, 85, 86, 100, 98, 94, 99, 40, 100, 99, 39, 90, 102, 101, 89, 102, 104, 103, 101, 106, 105, 104, 102, 91, 106, 102, 90, 104, 108, 107, 103, 108, 110, 109, 107, 112, 111, 110, 108, 105, 112, 108, 104, 114, 113, 112, 105, 113, 115, 111, 112, 117, 116, 115, 113, 118, 117, 113, 114, 95, 119, 106, 91, 119, 114, 105, 106, 120, 118, 114, 119, 96, 120, 119, 95, 122, 121, 120, 96, 121, 123, 118, 120, 125, 124, 123, 121, 126, 125, 121, 122, 123, 127, 117, 118, 127, 128, 116, 117, 130, 129, 128, 127, 124, 130, 127, 123, 132, 131, 130, 124, 131, 133, 129, 130, 135, 134, 133, 131, 136, 135, 131, 132, 138, 137, 125, 126, 137, 132, 124, 125, 139, 136, 132, 137, 140, 139, 137, 138, 52, 141, 100, 40, 141, 142, 98, 100, 144, 143, 142, 141, 53, 144, 141, 52, 142, 145, 97, 98, 145, 122, 96, 97, 146, 126, 122, 145, 143, 146, 145, 142, 148, 147, 146, 143, 147, 138, 126, 146, 149, 140, 138, 147, 150, 149, 147, 148, 57, 151, 144, 53, 151, 148, 143, 144, 152, 150, 148, 151, 58, 152, 151, 57, 154, 153, 152, 58, 153, 155, 150, 152, 157, 156, 155, 153, 158, 157, 153, 154, 155, 159, 149, 150, 159, 160, 140, 149, 162, 161, 160, 159, 156, 162, 159, 155, 164, 163, 162, 156, 163, 165, 161, 162, 167, 166, 165, 163, 168, 167, 163, 164, 170, 169, 157, 158, 169, 164, 156, 157, 171, 168, 164, 169, 172, 171, 169, 170, 160, 173, 139, 140, 173, 174, 136, 139, 176, 175, 174, 173, 161, 176, 173, 160, 174, 177, 135, 136, 177, 178, 134, 135, 180, 179, 178, 177, 175, 180, 177, 174, 182, 181, 180, 175, 181, 183, 179, 180, 185, 184, 183, 181, 186, 185, 181, 182, 165, 187, 176, 161, 187, 182, 175, 176, 188, 186, 182, 187, 166, 188, 187, 165, 190, 189, 188, 166, 189, 191, 186, 188, 193, 192, 191, 189, 194, 193, 189, 190, 191, 195, 185, 186, 195, 196, 184, 185, 198, 197, 196, 195, 192, 198, 195, 191, 200, 199, 198, 192, 199, 201, 197, 198, 203, 202, 201, 199, 204, 203, 199, 200, 206, 205, 193, 194, 205, 200, 192, 193, 207, 204, 200, 205, 208, 207, 205, 206, 210, 209, 171, 172, 209, 211, 168, 171, 213, 212, 211, 209, 214, 213, 209, 210, 211, 215, 167, 168, 215, 190, 166, 167, 216, 194, 190, 215, 212, 216, 215, 211, 218, 217, 216, 212, 217, 206, 194, 216, 219, 208, 206, 217, 220, 219, 217, 218, 222, 221, 213, 214, 221, 218, 212, 213, 223, 220, 218, 221, 224, 223, 221, 222, 226, 225, 79, 80, 225, 227, 76, 79, 229, 228, 227, 225, 230, 229, 225, 226, 227, 231, 75, 76, 231, 232, 64, 75, 234, 233, 232, 231, 228, 234, 231, 227, 236, 235, 234, 228, 235, 237, 233, 234, 239, 238, 237, 235, 240, 239, 235, 236, 242, 241, 229, 230, 241, 236, 228, 229, 243, 240, 236, 241, 244, 243, 241, 242, 232, 245, 63, 64, 245, 246, 60, 63, 248, 247, 246, 245, 233, 248, 245, 232, 246, 249, 59, 60, 249, 154, 58, 59, 250, 158, 154, 249, 247, 250, 249, 246, 252, 251, 250, 247, 251, 170, 158, 250, 253, 172, 170, 251, 254, 253, 251, 252, 237, 255, 248, 233, 255, 252, 247, 248, 256, 254, 252, 255, 238, 256, 255, 237, 258, 257, 256, 238, 257, 259, 254, 256, 261, 260, 259, 257, 262, 261, 257, 258, 259, 263, 253, 254, 263, 210, 172, 253, 264, 214, 210, 263, 260, 264, 263, 259, 266, 265, 264, 260, 265, 222, 214, 264, 267, 224, 222, 265, 268, 267, 265, 266, 270, 269, 261, 262, 269, 266, 260, 261, 271, 268, 266, 269, 272, 271, 269, 270, 274, 273, 243, 244, 273, 275, 240, 243, 277, 276, 275, 273, 278, 277, 273, 274, 275, 279, 239, 240, 279, 258, 238, 239, 280, 262, 258, 279, 276, 280, 279, 275, 282, 281, 280, 276, 281, 270, 262, 280, 283, 272, 270, 281, 284, 283, 281, 282, 286, 285, 277, 278, 285, 282, 276, 277, 287, 284, 282, 285, 288, 287, 285, 286, 290, 289, 107, 109, 289, 291, 103, 107, 293, 292, 291, 289, 294, 293, 289, 290, 291, 295, 101, 103, 295, 296, 89, 101, 298, 297, 296, 295, 292, 298, 295, 291, 300, 299, 298, 292, 299, 301, 297, 298, 303, 302, 301, 299, 304, 303, 299, 300, 306, 305, 293, 294, 305, 300, 292, 293, 307, 304, 300, 305, 308, 307, 305, 306, 296, 309, 87, 89, 309, 310, 83, 87, 312, 311, 310, 309, 297, 312, 309, 296, 310, 313, 81, 83, 313, 314, 33, 81, 316, 315, 314, 313, 311, 316, 313, 310, 318, 317, 316, 311, 317, 319, 315, 316, 321, 320, 319, 317, 322, 321, 317, 318, 301, 323, 312, 297, 323, 318, 311, 312, 324, 322, 318, 323, 302, 324, 323, 301, 326, 325, 324, 302, 325, 327, 322, 324, 329, 328, 327, 325, 330, 329, 325, 326, 327, 331, 321, 322, 331, 332, 320, 321, 334, 333, 332, 331, 328, 334, 331, 327, 336, 335, 334, 328, 335, 337, 333, 334, 339, 338, 337, 335, 340, 339, 335, 336, 342, 341, 329, 330, 341, 336, 328, 329, 343, 340, 336, 341, 344, 343, 341, 342, 346, 345, 307, 308, 345, 347, 304, 307, 349, 348, 347, 345, 350, 349, 345, 346, 347, 351, 303, 304, 351, 326, 302, 303, 352, 330, 326, 351, 348, 352, 351, 347, 354, 353, 352, 348, 353, 342, 330, 352, 355, 344, 342, 353, 356, 355, 353, 354, 358, 357, 349, 350, 357, 354, 348, 349, 359, 356, 354, 357, 360, 359, 357, 358, 314, 361, 31, 33, 361, 362, 27, 31, 364, 363, 362, 361, 315, 364, 361, 314, 362, 365, 25, 27, 365, 366, 11, 25, 368, 367, 366, 365, 363, 368, 365, 362, 370, 369, 368, 363, 369, 371, 367, 368, 373, 372, 371, 369, 374, 373, 369, 370, 319, 375, 364, 315, 375, 370, 363, 364, 376, 374, 370, 375, 320, 376, 375, 319, 366, 377, 9, 11, 377, 378, 4, 9, 380, 379, 378, 377, 367, 380, 377, 366, 378, 381, 1, 4, 381, 382, 0, 1, 384, 383, 382, 381, 379, 384, 381, 378, 386, 385, 384, 379, 385, 387, 383, 384, 389, 388, 387, 385, 390, 389, 385, 386, 371, 391, 380, 367, 391, 386, 379, 380, 392, 390, 386, 391, 372, 392, 391, 371, 394, 393, 392, 372, 393, 395, 390, 392, 397, 396, 395, 393, 398, 397, 393, 394, 395, 399, 389, 390, 399, 400, 388, 389, 402, 401, 400, 399, 396, 402, 399, 395, 404, 403, 402, 396, 403, 405, 401, 402, 407, 406, 405, 403, 408, 407, 403, 404, 410, 409, 397, 398, 409, 404, 396, 397, 411, 408, 404, 409, 412, 411, 409, 410, 332, 413, 376, 320, 413, 414, 374, 376, 416, 415, 414, 413, 333, 416, 413, 332, 414, 417, 373, 374, 417, 394, 372, 373, 418, 398, 394, 417, 415, 418, 417, 414, 420, 419, 418, 415, 419, 410, 398, 418, 421, 412, 410, 419, 422, 421, 419, 420, 337, 423, 416, 333, 423, 420, 415, 416, 424, 422, 420, 423, 338, 424, 423, 337, 426, 425, 424, 338, 425, 427, 422, 424, 429, 428, 427, 425, 430, 429, 425, 426, 427, 431, 421, 422, 431, 432, 412, 421, 434, 433, 432, 431, 428, 434, 431, 427, 436, 435, 434, 428, 435, 437, 433, 434, 439, 438, 437, 435, 440, 439, 435, 436, 442, 441, 429, 430, 441, 436, 428, 429, 443, 440, 436, 441, 444, 443, 441, 442, 432, 445, 411, 412, 445, 446, 408, 411, 448, 447, 446, 445, 433, 448, 445, 432, 446, 449, 407, 408, 449, 450, 406, 407, 452, 451, 450, 449, 447, 452, 449, 446, 454, 453, 452, 447, 453, 455, 451, 452, 457, 456, 455, 453, 458, 457, 453, 454, 437, 459, 448, 433, 459, 454, 447, 448, 460, 458, 454, 459, 438, 460, 459, 437, 462, 461, 460, 438, 461, 463, 458, 460, 465, 464, 463, 461, 466, 465, 461, 462, 463, 467, 457, 458, 467, 468, 456, 457, 470, 469, 468, 467, 464, 470, 467, 463, 472, 471, 470, 464, 471, 473, 469, 470, 475, 474, 473, 471, 476, 475, 471, 472, 478, 477, 465, 466, 477, 472, 464, 465, 479, 476, 472, 477, 480, 479, 477, 478, 482, 481, 443, 444, 481, 483, 440, 443, 485, 484, 483, 481, 486, 485, 481, 482, 483, 487, 439, 440, 487, 462, 438, 439, 488, 466, 462, 487, 484, 488, 487, 483, 490, 489, 488, 484, 489, 478, 466, 488, 491, 480, 478, 489, 492, 491, 489, 490, 494, 493, 485, 486, 493, 490, 484, 485, 495, 492, 490, 493, 496, 495, 493, 494, 498, 497, 359, 360, 497, 499, 356, 359, 501, 500, 499, 497, 502, 501, 497, 498, 499, 503, 355, 356, 503, 504, 344, 355, 506, 505, 504, 503, 500, 506, 503, 499, 508, 507, 506, 500, 507, 509, 505, 506, 511, 510, 509, 507, 512, 511, 507, 508, 514, 513, 501, 502, 513, 508, 500, 501, 515, 512, 508, 513, 516, 515, 513, 514, 504, 517, 343, 344, 517, 518, 340, 343, 520, 519, 518, 517, 505, 520, 517, 504, 518, 521, 339, 340, 521, 426, 338, 339, 522, 430, 426, 521, 519, 522, 521, 518, 524, 523, 522, 519, 523, 442, 430, 522, 525, 444, 442, 523, 526, 525, 523, 524, 509, 527, 520, 505, 527, 524, 519, 520, 528, 526, 524, 527, 510, 528, 527, 509, 530, 529, 528, 510, 529, 531, 526, 528, 533, 532, 531, 529, 534, 533, 529, 530, 531, 535, 525, 526, 535, 482, 444, 525, 536, 486, 482, 535, 532, 536, 535, 531, 538, 537, 536, 532, 537, 494, 486, 536, 539, 496, 494, 537, 540, 539, 537, 538, 542, 541, 533, 534, 541, 538, 532, 533, 543, 540, 538, 541, 544, 543, 541, 542, 546, 545, 515, 516, 545, 547, 512, 515, 549, 548, 547, 545, 550, 549, 545, 546, 547, 551, 511, 512, 551, 530, 510, 511, 552, 534, 530, 551, 548, 552, 551, 547, 554, 553, 552, 548, 553, 542, 534, 552, 555, 544, 542, 553, 556, 555, 553, 554, 558, 557, 549, 550, 557, 554, 548, 549, 559, 556, 554, 557, 560, 559, 557, 558, 562, 561, 559, 560, 561, 563, 556, 559, 565, 564, 563, 561, 566, 565, 561, 562, 563, 567, 555, 556, 567, 568, 544, 555, 570, 569, 568, 567, 564, 570, 567, 563, 572, 571, 570, 564, 571, 573, 569, 570, 575, 574, 573, 571, 576, 575, 571, 572, 578, 577, 565, 566, 577, 572, 564, 565, 579, 576, 572, 577, 580, 579, 577, 578, 568, 581, 543, 544, 581, 582, 540, 543, 584, 583, 582, 581, 569, 584, 581, 568, 582, 585, 539, 540, 585, 586, 496, 539, 588, 587, 586, 585, 583, 588, 585, 582, 590, 589, 588, 583, 589, 591, 587, 588, 593, 592, 591, 589, 594, 593, 589, 590, 573, 595, 584, 569, 595, 590, 583, 584, 596, 594, 590, 595, 574, 596, 595, 573, 598, 597, 596, 574, 597, 599, 594, 596, 601, 600, 599, 597, 602, 601, 597, 598, 599, 603, 593, 594, 603, 604, 592, 593, 606, 605, 604, 603, 600, 606, 603, 599, 608, 607, 606, 600, 607, 609, 605, 606, 611, 610, 609, 607, 612, 611, 607, 608, 614, 613, 601, 602, 613, 608, 600, 601, 615, 612, 608, 613, 616, 615, 613, 614, 618, 617, 579, 580, 617, 619, 576, 579, 621, 620, 619, 617, 622, 621, 617, 618, 619, 623, 575, 576, 623, 598, 574, 575, 624, 602, 598, 623, 620, 624, 623, 619, 626, 625, 624, 620, 625, 614, 602, 624, 627, 616, 614, 625, 628, 627, 625, 626, 630, 629, 621, 622, 629, 626, 620, 621, 631, 628, 626, 629, 632, 631, 629, 630, 586, 633, 495, 496, 633, 634, 492, 495, 636, 635, 634, 633, 587, 636, 633, 586, 634, 637, 491, 492, 637, 638, 480, 491, 640, 639, 638, 637, 635, 640, 637, 634, 642, 641, 640, 635, 641, 643, 639, 640, 645, 644, 643, 641, 646, 645, 641, 642, 591, 647, 636, 587, 647, 642, 635, 636, 648, 646, 642, 647, 592, 648, 647, 591, 638, 649, 479, 480, 649, 650, 476, 479, 652, 651, 650, 649, 639, 652, 649, 638, 650, 653, 475, 476, 653, 654, 474, 475, 656, 655, 654, 653, 651, 656, 653, 650, 658, 657, 656, 651, 657, 659, 655, 656, 661, 660, 659, 657, 662, 661, 657, 658, 643, 663, 652, 639, 663, 658, 651, 652, 664, 662, 658, 663, 644, 664, 663, 643, 666, 665, 664, 644, 665, 667, 662, 664, 669, 668, 667, 665, 670, 669, 665, 666, 667, 671, 661, 662, 671, 672, 660, 661, 674, 673, 672, 671, 668, 674, 671, 667, 676, 675, 674, 668, 675, 677, 673, 674, 679, 678, 677, 675, 680, 679, 675, 676, 682, 681, 669, 670, 681, 676, 668, 669, 683, 680, 676, 681, 684, 683, 681, 682, 604, 685, 648, 592, 685, 686, 646, 648, 688, 687, 686, 685, 605, 688, 685, 604, 686, 689, 645, 646, 689, 666, 644, 645, 690, 670, 666, 689, 687, 690, 689, 686, 692, 691, 690, 687, 691, 682, 670, 690, 693, 684, 682, 691, 694, 693, 691, 692, 609, 695, 688, 605, 695, 692, 687, 688, 696, 694, 692, 695, 610, 696, 695, 609, 698, 697, 696, 610, 697, 699, 694, 696, 701, 700, 699, 697, 702, 701, 697, 698, 699, 703, 693, 694, 703, 704, 684, 693, 706, 705, 704, 703, 700, 706, 703, 699, 708, 707, 706, 700, 707, 709, 705, 706, 711, 710, 709, 707, 712, 711, 707, 708, 714, 713, 701, 702, 713, 708, 700, 701, 715, 712, 708, 713, 716, 715, 713, 714, 704, 717, 683, 684, 717, 718, 680, 683, 720, 719, 718, 717, 705, 720, 717, 704, 718, 721, 679, 680, 721, 722, 678, 679, 724, 723, 722, 721, 719, 724, 721, 718, 726, 725, 724, 719, 725, 727, 723, 724, 729, 728, 727, 725, 730, 729, 725, 726, 709, 731, 720, 705, 731, 726, 719, 720, 732, 730, 726, 731, 710, 732, 731, 709, 734, 733, 732, 710, 733, 735, 730, 732, 737, 736, 735, 733, 738, 737, 733, 734, 735, 739, 729, 730, 739, 740, 728, 729, 742, 741, 740, 739, 736, 742, 739, 735, 744, 743, 742, 736, 743, 745, 741, 742, 747, 746, 745, 743, 748, 747, 743, 744, 750, 749, 737, 738, 749, 744, 736, 737, 751, 748, 744, 749, 752, 751, 749, 750, 754, 753, 715, 716, 753, 755, 712, 715, 757, 756, 755, 753, 758, 757, 753, 754, 755, 759, 711, 712, 759, 734, 710, 711, 760, 738, 734, 759, 756, 760, 759, 755, 762, 761, 760, 756, 761, 750, 738, 760, 763, 752, 750, 761, 764, 763, 761, 762, 766, 765, 757, 758, 765, 762, 756, 757, 767, 764, 762, 765, 768, 767, 765, 766, 770, 769, 631, 632, 769, 771, 628, 631, 773, 772, 771, 769, 774, 773, 769, 770, 771, 775, 627, 628, 775, 776, 616, 627, 778, 777, 776, 775, 772, 778, 775, 771, 780, 779, 778, 772, 779, 781, 777, 778, 783, 782, 781, 779, 784, 783, 779, 780, 786, 785, 773, 774, 785, 780, 772, 773, 787, 784, 780, 785, 788, 787, 785, 786, 776, 789, 615, 616, 789, 790, 612, 615, 792, 791, 790, 789, 777, 792, 789, 776, 790, 793, 611, 612, 793, 698, 610, 611, 794, 702, 698, 793, 791, 794, 793, 790, 796, 795, 794, 791, 795, 714, 702, 794, 797, 716, 714, 795, 798, 797, 795, 796, 781, 799, 792, 777, 799, 796, 791, 792, 800, 798, 796, 799, 782, 800, 799, 781, 802, 801, 800, 782, 801, 803, 798, 800, 805, 804, 803, 801, 806, 805, 801, 802, 803, 807, 797, 798, 807, 754, 716, 797, 808, 758, 754, 807, 804, 808, 807, 803, 810, 809, 808, 804, 809, 766, 758, 808, 811, 768, 766, 809, 812, 811, 809, 810, 814, 813, 805, 806, 813, 810, 804, 805, 815, 812, 810, 813, 816, 815, 813, 814, 818, 817, 787, 788, 817, 819, 784, 787, 821, 820, 819, 817, 822, 821, 817, 818, 819, 823, 783, 784, 823, 802, 782, 783, 824, 806, 802, 823, 820, 824, 823, 819, 826, 825, 824, 820, 825, 814, 806, 824, 827, 816, 814, 825, 828, 827, 825, 826, 830, 829, 821, 822, 829, 826, 820, 821, 831, 828, 826, 829, 832, 831, 829, 830, 834, 833, 201, 202, 833, 835, 197, 201, 837, 836, 835, 833, 838, 837, 833, 834, 835, 839, 196, 197, 839, 840, 184, 196, 842, 841, 840, 839, 836, 842, 839, 835, 844, 843, 842, 836, 843, 845, 841, 842, 847, 846, 845, 843, 848, 847, 843, 844, 850, 849, 837, 838, 849, 844, 836, 837, 851, 848, 844, 849, 852, 851, 849, 850, 840, 853, 183, 184, 853, 854, 179, 183, 856, 855, 854, 853, 841, 856, 853, 840, 854, 857, 178, 179, 857, 858, 134, 178, 860, 859, 858, 857, 855, 860, 857, 854, 862, 861, 860, 855, 861, 863, 859, 860, 865, 864, 863, 861, 866, 865, 861, 862, 845, 867, 856, 841, 867, 862, 855, 856, 868, 866, 862, 867, 846, 868, 867, 845, 870, 869, 868, 846, 869, 871, 866, 868, 873, 872, 871, 869, 874, 873, 869, 870, 871, 875, 865, 866, 875, 876, 864, 865, 878, 877, 876, 875, 872, 878, 875, 871, 880, 879, 878, 872, 879, 881, 877, 878, 883, 882, 881, 879, 884, 883, 879, 880, 886, 885, 873, 874, 885, 880, 872, 873, 887, 884, 880, 885, 888, 887, 885, 886, 890, 889, 851, 852, 889, 891, 848, 851, 893, 892, 891, 889, 894, 893, 889, 890, 891, 895, 847, 848, 895, 870, 846, 847, 896, 874, 870, 895, 892, 896, 895, 891, 898, 897, 896, 892, 897, 886, 874, 896, 899, 888, 886, 897, 900, 899, 897, 898, 902, 901, 893, 894, 901, 898, 892, 893, 903, 900, 898, 901, 904, 903, 901, 902, 858, 905, 133, 134, 905, 906, 129, 133, 908, 907, 906, 905, 859, 908, 905, 858, 906, 909, 128, 129, 909, 910, 116, 128, 912, 911, 910, 909, 907, 912, 909, 906, 914, 913, 912, 907, 913, 915, 911, 912, 917, 916, 915, 913, 918, 917, 913, 914, 863, 919, 908, 859, 919, 914, 907, 908, 920, 918, 914, 919, 864, 920, 919, 863, 910, 921, 115, 116, 921, 922, 111, 115, 924, 923, 922, 921, 911, 924, 921, 910, 922, 925, 110, 111, 925, 290, 109, 110, 926, 294, 290, 925, 923, 926, 925, 922, 928, 927, 926, 923, 927, 306, 294, 926, 929, 308, 306, 927, 930, 929, 927, 928, 915, 931, 924, 911, 931, 928, 923, 924, 932, 930, 928, 931, 916, 932, 931, 915, 934, 933, 932, 916, 933, 935, 930, 932, 937, 936, 935, 933, 938, 937, 933, 934, 935, 939, 929, 930, 939, 346, 308, 929, 940, 350, 346, 939, 936, 940, 939, 935, 942, 941, 940, 936, 941, 358, 350, 940, 943, 360, 358, 941, 944, 943, 941, 942, 946, 945, 937, 938, 945, 942, 936, 937, 947, 944, 942, 945, 948, 947, 945, 946, 876, 949, 920, 864, 949, 950, 918, 920, 952, 951, 950, 949, 877, 952, 949, 876, 950, 953, 917, 918, 953, 934, 916, 917, 954, 938, 934, 953, 951, 954, 953, 950, 956, 955, 954, 951, 955, 946, 938, 954, 957, 948, 946, 955, 958, 957, 955, 956, 881, 959, 952, 877, 959, 956, 951, 952, 960, 958, 956, 959, 882, 960, 959, 881, 962, 961, 960, 882, 961, 963, 958, 960, 965, 964, 963, 961, 966, 965, 961, 962, 963, 967, 957, 958, 967, 968, 948, 957, 970, 969, 968, 967, 964, 970, 967, 963, 972, 971, 970, 964, 971, 973, 969, 970, 975, 974, 973, 971, 976, 975, 971, 972, 978, 977, 965, 966, 977, 972, 964, 965, 979, 976, 972, 977, 980, 979, 977, 978, 968, 981, 947, 948, 981, 982, 944, 947, 984, 983, 982, 981, 969, 984, 981, 968, 982, 985, 943, 944, 985, 498, 360, 943, 986, 502, 498, 985, 983, 986, 985, 982, 988, 987, 986, 983, 987, 514, 502, 986, 989, 516, 514, 987, 990, 989, 987, 988, 973, 991, 984, 969, 991, 988, 983, 984, 992, 990, 988, 991, 974, 992, 991, 973, 994, 993, 992, 974, 993, 995, 990, 992, 997, 996, 995, 993, 998, 997, 993, 994, 995, 999, 989, 990, 999, 546, 516, 989, 1000, 550, 546, 999, 996, 1000, 999, 995, 1002, 1001, 1000, 996, 1001, 558, 550, 1000, 562, 560, 558, 1001, 566, 562, 1001, 1002, 1004, 1003, 997, 998, 1003, 1002, 996, 997, 578, 566, 1002, 1003, 580, 578, 1003, 1004, 1006, 1005, 979, 980, 1005, 1007, 976, 979, 1009, 1008, 1007, 1005, 1010, 1009, 1005, 1006, 1007, 1011, 975, 976, 1011, 994, 974, 975, 1012, 998, 994, 1011, 1008, 1012, 1011, 1007, 1014, 1013, 1012, 1008, 1013, 1004, 998, 1012, 618, 580, 1004, 1013, 622, 618, 1013, 1014, 1016, 1015, 1009, 1010, 1015, 1014, 1008, 1009, 630, 622, 1014, 1015, 632, 630, 1015, 1016, 1018, 1017, 903, 904, 1017, 1019, 900, 903, 1021, 1020, 1019, 1017, 1022, 1021, 1017, 1018, 1019, 1023, 899, 900, 1023, 1024, 888, 899, 1026, 1025, 1024, 1023, 1020, 1026, 1023, 1019, 1028, 1027, 1026, 1020, 1027, 1029, 1025, 1026, 1031, 1030, 1029, 1027, 1032, 1031, 1027, 1028, 1034, 1033, 1021, 1022, 1033, 1028, 1020, 1021, 1035, 1032, 1028, 1033, 1036, 1035, 1033, 1034, 1024, 1037, 887, 888, 1037, 1038, 884, 887, 1040, 1039, 1038, 1037, 1025, 1040, 1037, 1024, 1038, 1041, 883, 884, 1041, 962, 882, 883, 1042, 966, 962, 1041, 1039, 1042, 1041, 1038, 1044, 1043, 1042, 1039, 1043, 978, 966, 1042, 1045, 980, 978, 1043, 1046, 1045, 1043, 1044, 1029, 1047, 1040, 1025, 1047, 1044, 1039, 1040, 1048, 1046, 1044, 1047, 1030, 1048, 1047, 1029, 1050, 1049, 1048, 1030, 1049, 1051, 1046, 1048, 1053, 1052, 1051, 1049, 1054, 1053, 1049, 1050, 1051, 1055, 1045, 1046, 1055, 1006, 980, 1045, 1056, 1010, 1006, 1055, 1052, 1056, 1055, 1051, 1058, 1057, 1056, 1052, 1057, 1016, 1010, 1056, 770, 632, 1016, 1057, 774, 770, 1057, 1058, 1060, 1059, 1053, 1054, 1059, 1058, 1052, 1053, 786, 774, 1058, 1059, 788, 786, 1059, 1060, 1062, 1061, 1035, 1036, 1061, 1063, 1032, 1035, 1065, 1064, 1063, 1061, 1066, 1065, 1061, 1062, 1063, 1067, 1031, 1032, 1067, 1050, 1030, 1031, 1068, 1054, 1050, 1067, 1064, 1068, 1067, 1063, 1070, 1069, 1068, 1064, 1069, 1060, 1054, 1068, 818, 788, 1060, 1069, 822, 818, 1069, 1070, 1072, 1071, 1065, 1066, 1071, 1070, 1064, 1065, 830, 822, 1070, 1071, 832, 830, 1071, 1072, 1074, 1073, 287, 288, 1073, 1075, 284, 287, 1077, 1076, 1075, 1073, 1078, 1077, 1073, 1074, 1075, 1079, 283, 284, 1079, 1080, 272, 283, 1082, 1081, 1080, 1079, 1076, 1082, 1079, 1075, 1084, 1083, 1082, 1076, 1083, 1085, 1081, 1082, 1087, 1086, 1085, 1083, 1088, 1087, 1083, 1084, 1090, 1089, 1077, 1078, 1089, 1084, 1076, 1077, 1091, 1088, 1084, 1089, 1092, 1091, 1089, 1090, 1080, 1093, 271, 272, 1093, 1094, 268, 271, 1096, 1095, 1094, 1093, 1081, 1096, 1093, 1080, 1094, 1097, 267, 268, 1097, 1098, 224, 267, 1100, 1099, 1098, 1097, 1095, 1100, 1097, 1094, 1102, 1101, 1100, 1095, 1101, 1103, 1099, 1100, 1105, 1104, 1103, 1101, 1106, 1105, 1101, 1102, 1085, 1107, 1096, 1081, 1107, 1102, 1095, 1096, 1108, 1106, 1102, 1107, 1086, 1108, 1107, 1085, 1110, 1109, 1108, 1086, 1109, 1111, 1106, 1108, 1113, 1112, 1111, 1109, 1114, 1113, 1109, 1110, 1111, 1115, 1105, 1106, 1115, 1116, 1104, 1105, 1118, 1117, 1116, 1115, 1112, 1118, 1115, 1111, 1120, 1119, 1118, 1112, 1119, 1121, 1117, 1118, 1123, 1122, 1121, 1119, 1124, 1123, 1119, 1120, 1126, 1125, 1113, 1114, 1125, 1120, 1112, 1113, 1127, 1124, 1120, 1125, 1128, 1127, 1125, 1126, 1130, 1129, 1091, 1092, 1129, 1131, 1088, 1091, 1133, 1132, 1131, 1129, 1134, 1133, 1129, 1130, 1131, 1135, 1087, 1088, 1135, 1110, 1086, 1087, 1136, 1114, 1110, 1135, 1132, 1136, 1135, 1131, 1138, 1137, 1136, 1132, 1137, 1126, 1114, 1136, 1139, 1128, 1126, 1137, 1140, 1139, 1137, 1138, 1142, 1141, 1133, 1134, 1141, 1138, 1132, 1133, 1143, 1140, 1138, 1141, 1144, 1143, 1141, 1142, 1098, 1145, 223, 224, 1145, 1146, 220, 223, 1148, 1147, 1146, 1145, 1099, 1148, 1145, 1098, 1146, 1149, 219, 220, 1149, 1150, 208, 219, 1152, 1151, 1150, 1149, 1147, 1152, 1149, 1146, 1154, 1153, 1152, 1147, 1153, 1155, 1151, 1152, 1157, 1156, 1155, 1153, 1158, 1157, 1153, 1154, 1103, 1159, 1148, 1099, 1159, 1154, 1147, 1148, 1160, 1158, 1154, 1159, 1104, 1160, 1159, 1103, 1150, 1161, 207, 208, 1161, 1162, 204, 207, 1164, 1163, 1162, 1161, 1151, 1164, 1161, 1150, 1162, 1165, 203, 204, 1165, 834, 202, 203, 1166, 838, 834, 1165, 1163, 1166, 1165, 1162, 1168, 1167, 1166, 1163, 1167, 850, 838, 1166, 1169, 852, 850, 1167, 1170, 1169, 1167, 1168, 1155, 1171, 1164, 1151, 1171, 1168, 1163, 1164, 1172, 1170, 1168, 1171, 1156, 1172, 1171, 1155, 1174, 1173, 1172, 1156, 1173, 1175, 1170, 1172, 1177, 1176, 1175, 1173, 1178, 1177, 1173, 1174, 1175, 1179, 1169, 1170, 1179, 890, 852, 1169, 1180, 894, 890, 1179, 1176, 1180, 1179, 1175, 1182, 1181, 1180, 1176, 1181, 902, 894, 1180, 1183, 904, 902, 1181, 1184, 1183, 1181, 1182, 1186, 1185, 1177, 1178, 1185, 1182, 1176, 1177, 1187, 1184, 1182, 1185, 1188, 1187, 1185, 1186, 1116, 1189, 1160, 1104, 1189, 1190, 1158, 1160, 1192, 1191, 1190, 1189, 1117, 1192, 1189, 1116, 1190, 1193, 1157, 1158, 1193, 1174, 1156, 1157, 1194, 1178, 1174, 1193, 1191, 1194, 1193, 1190, 1196, 1195, 1194, 1191, 1195, 1186, 1178, 1194, 1197, 1188, 1186, 1195, 1198, 1197, 1195, 1196, 1121, 1199, 1192, 1117, 1199, 1196, 1191, 1192, 1200, 1198, 1196, 1199, 1122, 1200, 1199, 1121, 1202, 1201, 1200, 1122, 1201, 1203, 1198, 1200, 1205, 1204, 1203, 1201, 1206, 1205, 1201, 1202, 1203, 1207, 1197, 1198, 1207, 1208, 1188, 1197, 1210, 1209, 1208, 1207, 1204, 1210, 1207, 1203, 1212, 1211, 1210, 1204, 1211, 1213, 1209, 1210, 1215, 1214, 1213, 1211, 1216, 1215, 1211, 1212, 1218, 1217, 1205, 1206, 1217, 1212, 1204, 1205, 1219, 1216, 1212, 1217, 1220, 1219, 1217, 1218, 1208, 1221, 1187, 1188, 1221, 1222, 1184, 1187, 1224, 1223, 1222, 1221, 1209, 1224, 1221, 1208, 1222, 1225, 1183, 1184, 1225, 1018, 904, 1183, 1226, 1022, 1018, 1225, 1223, 1226, 1225, 1222, 1228, 1227, 1226, 1223, 1227, 1034, 1022, 1226, 1229, 1036, 1034, 1227, 1230, 1229, 1227, 1228, 1213, 1231, 1224, 1209, 1231, 1228, 1223, 1224, 1232, 1230, 1228, 1231, 1214, 1232, 1231, 1213, 1234, 1233, 1232, 1214, 1233, 1235, 1230, 1232, 1237, 1236, 1235, 1233, 1238, 1237, 1233, 1234, 1235, 1239, 1229, 1230, 1239, 1062, 1036, 1229, 1240, 1066, 1062, 1239, 1236, 1240, 1239, 1235, 1242, 1241, 1240, 1236, 1241, 1072, 1066, 1240, 831, 832, 1072, 1241, 828, 831, 1241, 1242, 1244, 1243, 1237, 1238, 1243, 1242, 1236, 1237, 827, 828, 1242, 1243, 816, 827, 1243, 1244, 1246, 1245, 1219, 1220, 1245, 1247, 1216, 1219, 1249, 1248, 1247, 1245, 1250, 1249, 1245, 1246, 1247, 1251, 1215, 1216, 1251, 1234, 1214, 1215, 1252, 1238, 1234, 1251, 1248, 1252, 1251, 1247, 1254, 1253, 1252, 1248, 1253, 1244, 1238, 1252, 815, 816, 1244, 1253, 812, 815, 1253, 1254, 1256, 1255, 1249, 1250, 1255, 1254, 1248, 1249, 811, 812, 1254, 1255, 768, 811, 1255, 1256, 1258, 1257, 1143, 1144, 1257, 1259, 1140, 1143, 1261, 1260, 1259, 1257, 1262, 1261, 1257, 1258, 1259, 1263, 1139, 1140, 1263, 1264, 1128, 1139, 1266, 1265, 1264, 1263, 1260, 1266, 1263, 1259, 1268, 1267, 1266, 1260, 1267, 1269, 1265, 1266, 1271, 1270, 1269, 1267, 1272, 1271, 1267, 1268, 1274, 1273, 1261, 1262, 1273, 1268, 1260, 1261, 1275, 1272, 1268, 1273, 1276, 1275, 1273, 1274, 1264, 1277, 1127, 1128, 1277, 1278, 1124, 1127, 1280, 1279, 1278, 1277, 1265, 1280, 1277, 1264, 1278, 1281, 1123, 1124, 1281, 1202, 1122, 1123, 1282, 1206, 1202, 1281, 1279, 1282, 1281, 1278, 1284, 1283, 1282, 1279, 1283, 1218, 1206, 1282, 1285, 1220, 1218, 1283, 1286, 1285, 1283, 1284, 1269, 1287, 1280, 1265, 1287, 1284, 1279, 1280, 1288, 1286, 1284, 1287, 1270, 1288, 1287, 1269, 1290, 1289, 1288, 1270, 1289, 1291, 1286, 1288, 1293, 1292, 1291, 1289, 1294, 1293, 1289, 1290, 1291, 1295, 1285, 1286, 1295, 1246, 1220, 1285, 1296, 1250, 1246, 1295, 1292, 1296, 1295, 1291, 1298, 1297, 1296, 1292, 1297, 1256, 1250, 1296, 767, 768, 1256, 1297, 764, 767, 1297, 1298, 1300, 1299, 1293, 1294, 1299, 1298, 1292, 1293, 763, 764, 1298, 1299, 752, 763, 1299, 1300, 1302, 1301, 1275, 1276, 1301, 1303, 1272, 1275, 1305, 1304, 1303, 1301, 1306, 1305, 1301, 1302, 1303, 1307, 1271, 1272, 1307, 1290, 1270, 1271, 1308, 1294, 1290, 1307, 1304, 1308, 1307, 1303, 1310, 1309, 1308, 1304, 1309, 1300, 1294, 1308, 751, 752, 1300, 1309, 748, 751, 1309, 1310, 1312, 1311, 1305, 1306, 1311, 1310, 1304, 1305, 747, 748, 1310, 1311, 746, 747, 1311, 1312, 286, 1313, 1074, 288, 1313, 1314, 1078, 1074, 1316, 1315, 1314, 1313, 278, 1316, 1313, 286, 1314, 1317, 1090, 1078, 1317, 1318, 1092, 1090, 1320, 1319, 1318, 1317, 1315, 1320, 1317, 1314, 1322, 1321, 1320, 1315, 1321, 1323, 1319, 1320, 1325, 1324, 1323, 1321, 1326, 1325, 1321, 1322, 274, 1327, 1316, 278, 1327, 1322, 1315, 1316, 1328, 1326, 1322, 1327, 244, 1328, 1327, 274, 1318, 1329, 1130, 1092, 1329, 1330, 1134, 1130, 1332, 1331, 1330, 1329, 1319, 1332, 1329, 1318, 1330, 1333, 1142, 1134, 1333, 1334, 1144, 1142, 1336, 1335, 1334, 1333, 1331, 1336, 1333, 1330, 1338, 1337, 1336, 1331, 1337, 1339, 1335, 1336, 1341, 1340, 1339, 1337, 1342, 1341, 1337, 1338, 1323, 1343, 1332, 1319, 1343, 1338, 1331, 1332, 1344, 1342, 1338, 1343, 1324, 1344, 1343, 1323, 1346, 1345, 1344, 1324, 1345, 1347, 1342, 1344, 1349, 1348, 1347, 1345, 1350, 1349, 1345, 1346, 1347, 1351, 1341, 1342, 1351, 1352, 1340, 1341, 1354, 1353, 1352, 1351, 1348, 1354, 1351, 1347, 1356, 1355, 1354, 1348, 1355, 1357, 1353, 1354, 1359, 1358, 1357, 1355, 1360, 1359, 1355, 1356, 1362, 1361, 1349, 1350, 1361, 1356, 1348, 1349, 1363, 1360, 1356, 1361, 1364, 1363, 1361, 1362, 242, 1365, 1328, 244, 1365, 1366, 1326, 1328, 1368, 1367, 1366, 1365, 230, 1368, 1365, 242, 1366, 1369, 1325, 1326, 1369, 1346, 1324, 1325, 1370, 1350, 1346, 1369, 1367, 1370, 1369, 1366, 1372, 1371, 1370, 1367, 1371, 1362, 1350, 1370, 1373, 1364, 1362, 1371, 1374, 1373, 1371, 1372, 226, 1375, 1368, 230, 1375, 1372, 1367, 1368, 1376, 1374, 1372, 1375, 80, 1376, 1375, 226, 1334, 1377, 1258, 1144, 1377, 1378, 1262, 1258, 1380, 1379, 1378, 1377, 1335, 1380, 1377, 1334, 1378, 1381, 1274, 1262, 1381, 1382, 1276, 1274, 1384, 1383, 1382, 1381, 1379, 1384, 1381, 1378, 1386, 1385, 1384, 1379, 1385, 1387, 1383, 1384, 1389, 1388, 1387, 1385, 1390, 1389, 1385, 1386, 1339, 1391, 1380, 1335, 1391, 1386, 1379, 1380, 1392, 1390, 1386, 1391, 1340, 1392, 1391, 1339, 1382, 1393, 1302, 1276, 1393, 1394, 1306, 1302, 1396, 1395, 1394, 1393, 1383, 1396, 1393, 1382, 1394, 1397, 1312, 1306, 1397, 745, 746, 1312, 1398, 741, 745, 1397, 1395, 1398, 1397, 1394, 1400, 1399, 1398, 1395, 1399, 740, 741, 1398, 1401, 728, 740, 1399, 1402, 1401, 1399, 1400, 1387, 1403, 1396, 1383, 1403, 1400, 1395, 1396, 1404, 1402, 1400, 1403, 1388, 1404, 1403, 1387, 1406, 1405, 1404, 1388, 1405, 1407, 1402, 1404, 1409, 1408, 1407, 1405, 1410, 1409, 1405, 1406, 1407, 1411, 1401, 1402, 1411, 727, 728, 1401, 1412, 723, 727, 1411, 1408, 1412, 1411, 1407, 1414, 1413, 1412, 1408, 1413, 722, 723, 1412, 1415, 678, 722, 1413, 1416, 1415, 1413, 1414, 1418, 1417, 1409, 1410, 1417, 1414, 1408, 1409, 1419, 1416, 1414, 1417, 1420, 1419, 1417, 1418, 1352, 1421, 1392, 1340, 1421, 1422, 1390, 1392, 1424, 1423, 1422, 1421, 1353, 1424, 1421, 1352, 1422, 1425, 1389, 1390, 1425, 1406, 1388, 1389, 1426, 1410, 1406, 1425, 1423, 1426, 1425, 1422, 1428, 1427, 1426, 1423, 1427, 1418, 1410, 1426, 1429, 1420, 1418, 1427, 1430, 1429, 1427, 1428, 1357, 1431, 1424, 1353, 1431, 1428, 1423, 1424, 1432, 1430, 1428, 1431, 1358, 1432, 1431, 1357, 1434, 1433, 1432, 1358, 1433, 1435, 1430, 1432, 1437, 1436, 1435, 1433, 1438, 1437, 1433, 1434, 1435, 1439, 1429, 1430, 1439, 1440, 1420, 1429, 1442, 1441, 1440, 1439, 1436, 1442, 1439, 1435, 1444, 1443, 1442, 1436, 1443, 1445, 1441, 1442, 1447, 1446, 1445, 1443, 1448, 1447, 1443, 1444, 1450, 1449, 1437, 1438, 1449, 1444, 1436, 1437, 1451, 1448, 1444, 1449, 1452, 1451, 1449, 1450, 1440, 1453, 1419, 1420, 1453, 1454, 1416, 1419, 1456, 1455, 1454, 1453, 1441, 1456, 1453, 1440, 1454, 1457, 1415, 1416, 1457, 677, 678, 1415, 1458, 673, 677, 1457, 1455, 1458, 1457, 1454, 1460, 1459, 1458, 1455, 1459, 672, 673, 1458, 1461, 660, 672, 1459, 1462, 1461, 1459, 1460, 1445, 1463, 1456, 1441, 1463, 1460, 1455, 1456, 1464, 1462, 1460, 1463, 1446, 1464, 1463, 1445, 1466, 1465, 1464, 1446, 1465, 1467, 1462, 1464, 1469, 1468, 1467, 1465, 1470, 1469, 1465, 1466, 1467, 1471, 1461, 1462, 1471, 659, 660, 1461, 1472, 655, 659, 1471, 1468, 1472, 1471, 1467, 1474, 1473, 1472, 1468, 1473, 654, 655, 1472, 473, 474, 654, 1473, 469, 473, 1473, 1474, 1476, 1475, 1469, 1470, 1475, 1474, 1468, 1469, 468, 469, 1474, 1475, 456, 468, 1475, 1476, 1478, 1477, 1451, 1452, 1477, 1479, 1448, 1451, 1481, 1480, 1479, 1477, 1482, 1481, 1477, 1478, 1479, 1483, 1447, 1448, 1483, 1466, 1446, 1447, 1484, 1470, 1466, 1483, 1480, 1484, 1483, 1479, 1486, 1485, 1484, 1480, 1485, 1476, 1470, 1484, 455, 456, 1476, 1485, 451, 455, 1485, 1486, 1488, 1487, 1481, 1482, 1487, 1486, 1480, 1481, 450, 451, 1486, 1487, 406, 450, 1487, 1488, 78, 1489, 1376, 80, 1489, 1490, 1374, 1376, 1492, 1491, 1490, 1489, 70, 1492, 1489, 78, 1490, 1493, 1373, 1374, 1493, 1494, 1364, 1373, 1496, 1495, 1494, 1493, 1491, 1496, 1493, 1490, 1498, 1497, 1496, 1491, 1497, 1499, 1495, 1496, 1501, 1500, 1499, 1497, 1502, 1501, 1497, 1498, 66, 1503, 1492, 70, 1503, 1498, 1491, 1492, 1504, 1502, 1498, 1503, 24, 1504, 1503, 66, 1494, 1505, 1363, 1364, 1505, 1506, 1360, 1363, 1508, 1507, 1506, 1505, 1495, 1508, 1505, 1494, 1506, 1509, 1359, 1360, 1509, 1434, 1358, 1359, 1510, 1438, 1434, 1509, 1507, 1510, 1509, 1506, 1512, 1511, 1510, 1507, 1511, 1450, 1438, 1510, 1513, 1452, 1450, 1511, 1514, 1513, 1511, 1512, 1499, 1515, 1508, 1495, 1515, 1512, 1507, 1508, 1516, 1514, 1512, 1515, 1500, 1516, 1515, 1499, 1518, 1517, 1516, 1500, 1517, 1519, 1514, 1516, 1521, 1520, 1519, 1517, 1522, 1521, 1517, 1518, 1519, 1523, 1513, 1514, 1523, 1478, 1452, 1513, 1524, 1482, 1478, 1523, 1520, 1524, 1523, 1519, 1526, 1525, 1524, 1520, 1525, 1488, 1482, 1524, 405, 406, 1488, 1525, 401, 405, 1525, 1526, 1528, 1527, 1521, 1522, 1527, 1526, 1520, 1521, 400, 401, 1526, 1527, 388, 400, 1527, 1528, 22, 1529, 1504, 24, 1529, 1530, 1502, 1504, 1532, 1531, 1530, 1529, 8, 1532, 1529, 22, 1530, 1533, 1501, 1502, 1533, 1518, 1500, 1501, 1534, 1522, 1518, 1533, 1531, 1534, 1533, 1530, 1536, 1535, 1534, 1531, 1535, 1528, 1522, 1534, 387, 388, 1528, 1535, 383, 387, 1535, 1536, 3, 1537, 1532, 8, 1537, 1536, 1531, 1532, 382, 383, 1536, 1537, 0, 382, 1537, 3}, + ["vertex_list_0"] = { Vec3(0.579348564, -0.579348981, -0.579348385), Vec3(0.596732914, -0.54291594, -0.596732557), Vec3(0.63434422, -0.549794436, -0.54979378), Vec3(0.596732855, -0.596733212, -0.542915344), Vec3(0.620292306, -0.487256616, -0.620291829), Vec3(0.667616367, -0.491493762, -0.565391183), Vec3(0.708671987, -0.502360821, -0.502360284), Vec3(0.667616248, -0.565391779, -0.491493225), Vec3(0.620292008, -0.620292485, -0.48725608), Vec3(0.644162357, -0.420784384, -0.644161999), Vec3(0.697528541, -0.423737824, -0.58382374), Vec3(0.666017115, -0.346116602, -0.666016579), Vec3(0.723508716, -0.348251581, -0.601838231), Vec3(0.774297893, -0.354056209, -0.531092048), Vec3(0.744235635, -0.431635082, -0.516483486), Vec3(0.784516275, -0.442427874, -0.442427486), Vec3(0.744235456, -0.516483963, -0.431634724), Vec3(0.818292201, -0.362190068, -0.454053998), Vec3(0.855216682, -0.371180326, -0.371180207), Vec3(0.81829226, -0.454054296, -0.362189889), Vec3(0.774297655, -0.531092465, -0.35405609), Vec3(0.697528243, -0.583824277, -0.423737466), Vec3(0.644162059, -0.644162595, -0.420783937), Vec3(0.723508298, -0.601838648, -0.348251283), Vec3(0.666016638, -0.666017175, -0.346116245), Vec3(0.684359193, -0.265069962, -0.684358478), Vec3(0.744725943, -0.266581923, -0.617472708), Vec3(0.698144972, -0.179295748, -0.698144138), Vec3(0.760417521, -0.180270016, -0.62946409), Vec3(0.816099763, -0.182947308, -0.554494321), Vec3(0.798436761, -0.270720929, -0.544206679), Vec3(0.706678092, -0.090409331, -0.706677675), Vec3(0.770023227, -0.0908876285, -0.636995018), Vec3(0.709564328, -3.10169987e-08, -0.709563732), Vec3(0.773250937, -1.55084994e-08, -0.639564753), Vec3(0.830428481, 0, -0.563331544), Vec3(0.826835215, -0.0922052264, -0.561065972), Vec3(0.87669909, -0.0940981954, -0.479050994), Vec3(0.864822745, -0.186774924, -0.47343722), Vec3(0.880668521, 0, -0.481007814), Vec3(0.923328996, 1.55084994e-08, -0.392938048), Vec3(0.918992639, -0.0962664708, -0.391308814), Vec3(0.9060269, -0.191126719, -0.38668409), Vec3(0.845220864, -0.276593149, -0.464806527), Vec3(0.884631991, -0.283191711, -0.379697651), Vec3(0.916101098, -0.289564282, -0.289564282), Vec3(0.884631872, -0.379697829, -0.283191681), Vec3(0.939039052, -0.195391074, -0.294890076), Vec3(0.963182211, -0.199005798, -0.199005842), Vec3(0.939038992, -0.294890106, -0.195391178), Vec3(0.90602684, -0.386684269, -0.191126764), Vec3(0.952974856, -0.0984107032, -0.298469096), Vec3(0.95764482, 4.65254999e-08, -0.299741089), Vec3(0.982842922, 6.20339975e-08, -0.202340767), Vec3(0.977899373, -0.100244105, -0.201462179), Vec3(0.993134081, -0.101498291, -0.101498388), Vec3(0.977899373, -0.201462135, -0.100244232), Vec3(0.998260677, 7.75425022e-08, -0.101948649), Vec3(1.00345218, 9.30509998e-08, -3.10169987e-08), Vec3(0.998260677, -0.101948552, -4.65254999e-08), Vec3(0.982842922, -0.202340722, -6.20339975e-08), Vec3(0.952974737, -0.298469186, -0.0984108299), Vec3(0.918992519, -0.391309083, -0.0962665975), Vec3(0.95764482, -0.299741149, -7.75425022e-08), Vec3(0.923328876, -0.392938346, -9.30509998e-08), Vec3(0.744725466, -0.617473304, -0.266581744), Vec3(0.684358537, -0.684359193, -0.265069693), Vec3(0.798436582, -0.544207096, -0.270720869), Vec3(0.816099346, -0.554494798, -0.182947293), Vec3(0.760417104, -0.629464567, -0.180269986), Vec3(0.698144317, -0.698144794, -0.179295674), Vec3(0.845220745, -0.464806795, -0.276593119), Vec3(0.864822567, -0.473437458, -0.186775029), Vec3(0.876698971, -0.479051292, -0.0940983072), Vec3(0.826835096, -0.56106621, -0.0922053233), Vec3(0.880668283, -0.481008321, -1.08559497e-07), Vec3(0.830428183, -0.563331902, -1.08559497e-07), Vec3(0.77002275, -0.636995494, -0.0908876732), Vec3(0.706677675, -0.706678212, -0.0904093757), Vec3(0.77325052, -0.639565229, -1.24067995e-07), Vec3(0.709563851, -0.709564269, -1.395765e-07), Vec3(0.706678212, 0.0904092491, -0.706677675), Vec3(0.770023227, 0.0908875614, -0.636995018), Vec3(0.698144853, 0.179295629, -0.698144376), Vec3(0.760417461, 0.180269867, -0.629464149), Vec3(0.816099703, 0.182947189, -0.554494262), Vec3(0.826835275, 0.0922051966, -0.561065912), Vec3(0.684359193, 0.265069664, -0.684358478), Vec3(0.744726002, 0.266581744, -0.617472708), Vec3(0.666017234, 0.346116304, -0.666016579), Vec3(0.723508894, 0.348251313, -0.601838171), Vec3(0.774298072, 0.35405606, -0.531091988), Vec3(0.79843694, 0.27072072, -0.54420656), Vec3(0.845221043, 0.27659297, -0.464806318), Vec3(0.864822805, 0.186774924, -0.473437071), Vec3(0.818292499, 0.362189829, -0.454053849), Vec3(0.85521692, 0.371180117, -0.371180028), Vec3(0.884632111, 0.283191532, -0.379697472), Vec3(0.906026959, 0.191126704, -0.386683911), Vec3(0.87669915, 0.0940981954, -0.479050905), Vec3(0.918992639, 0.0962665007, -0.391308814), Vec3(0.644162476, 0.420784116, -0.644162059), Vec3(0.69752878, 0.423737556, -0.58382374), Vec3(0.620292306, 0.487256318, -0.620291948), Vec3(0.667616606, 0.491493464, -0.565391123), Vec3(0.708672285, 0.502360404, -0.502360225), Vec3(0.744235814, 0.431634784, -0.516483486), Vec3(0.596733153, 0.542915642, -0.596732676), Vec3(0.634344518, 0.549794078, -0.54979378), Vec3(0.579348922, 0.579348564, -0.579348505), Vec3(0.596733212, 0.596732795, -0.542915463), Vec3(0.620292366, 0.620292008, -0.487256199), Vec3(0.667616546, 0.565391302, -0.491493255), Vec3(0.69752866, 0.583823919, -0.423737407), Vec3(0.744235814, 0.516483605, -0.431634665), Vec3(0.644162476, 0.644162178, -0.420784026), Vec3(0.666017234, 0.666016638, -0.346116155), Vec3(0.723508894, 0.601838231, -0.348251313), Vec3(0.774298131, 0.531091928, -0.354055911), Vec3(0.784516573, 0.442427397, -0.442427337), Vec3(0.818292499, 0.454053938, -0.36218968), Vec3(0.845220983, 0.464806467, -0.27659291), Vec3(0.884632111, 0.379697502, -0.283191442), Vec3(0.79843688, 0.544206679, -0.270720661), Vec3(0.816099823, 0.554494321, -0.182947174), Vec3(0.864822805, 0.47343722, -0.186774805), Vec3(0.9060269, 0.38668409, -0.191126645), Vec3(0.744726002, 0.617472827, -0.266581625), Vec3(0.684359252, 0.684358597, -0.265069604), Vec3(0.698144913, 0.698144376, -0.17929554), Vec3(0.76041764, 0.62946409, -0.180269808), Vec3(0.770023167, 0.636995077, -0.090887472), Vec3(0.826835215, 0.561066031, -0.092205137), Vec3(0.706678152, 0.706677735, -0.0904091597), Vec3(0.709564328, 0.709563732, 9.30509998e-08), Vec3(0.773250818, 0.639564812, 7.75425022e-08), Vec3(0.830428481, 0.563331664, 6.20339975e-08), Vec3(0.87669909, 0.479051024, -0.0940981209), Vec3(0.918992579, 0.391308874, -0.0962664261), Vec3(0.880668461, 0.481007993, 6.20339975e-08), Vec3(0.923328936, 0.392938137, 3.10169987e-08), Vec3(0.952974796, 0.0984107703, -0.298469096), Vec3(0.939038992, 0.195391163, -0.294890046), Vec3(0.963182271, 0.199005887, -0.199005768), Vec3(0.977899373, 0.100244246, -0.20146215), Vec3(0.916101277, 0.289564252, -0.289564043), Vec3(0.939038992, 0.294890076, -0.195391029), Vec3(0.952974796, 0.298469156, -0.0984106883), Vec3(0.977899373, 0.201462224, -0.10024415), Vec3(0.95764488, 0.299741209, 1.55084994e-08), Vec3(0.982842922, 0.202340826, 0), Vec3(0.993134201, 0.101498418, -0.101498358), Vec3(0.998260498, 0.101948723, 0), Vec3(0.993134201, 0.101498447, 0.101498343), Vec3(0.998260677, 1.24067995e-07, 0.101948597), Vec3(0.977899432, 0.201462209, 0.100244217), Vec3(0.963182211, 0.199005961, 0.199005842), Vec3(0.977899373, 0.100244306, 0.201462224), Vec3(0.982842922, 1.395765e-07, 0.202340767), Vec3(0.952974737, 0.298469216, 0.0984107703), Vec3(0.918992519, 0.391309023, 0.0962665603), Vec3(0.90602684, 0.386684179, 0.191126823), Vec3(0.939038992, 0.294890195, 0.195391178), Vec3(0.916101158, 0.289564312, 0.289564312), Vec3(0.939038932, 0.195391253, 0.294890136), Vec3(0.884631932, 0.37969774, 0.28319177), Vec3(0.855216682, 0.371180236, 0.371180445), Vec3(0.884631872, 0.28319177, 0.379697889), Vec3(0.906026781, 0.191126883, 0.386684299), Vec3(0.952974737, 0.0984109119, 0.298469216), Vec3(0.95764488, 1.55085004e-07, 0.299741209), Vec3(0.91899246, 0.0962666869, 0.391309142), Vec3(0.923328817, 1.86102e-07, 0.392938405), Vec3(0.87669909, 0.479050994, 0.094098255), Vec3(0.826835155, 0.561066031, 0.0922053084), Vec3(0.816099524, 0.5544945, 0.182947323), Vec3(0.864822686, 0.47343725, 0.186775029), Vec3(0.770023227, 0.636995018, 0.0908876732), Vec3(0.706678152, 0.706677675, 0.0904093906), Vec3(0.698144794, 0.698144317, 0.179295778), Vec3(0.760417521, 0.62946403, 0.180270046), Vec3(0.744725883, 0.617472887, 0.266581893), Vec3(0.798436761, 0.544206738, 0.270721018), Vec3(0.684359014, 0.684358597, 0.265069932), Vec3(0.666016936, 0.666016638, 0.346116632), Vec3(0.723508656, 0.601838291, 0.348251611), Vec3(0.774297833, 0.531092048, 0.354056329), Vec3(0.845220745, 0.464806527, 0.276593179), Vec3(0.81829232, 0.454054058, 0.362190098), Vec3(0.784516215, 0.442427576, 0.442427844), Vec3(0.818292141, 0.362189919, 0.454054356), Vec3(0.744235575, 0.516483605, 0.431635141), Vec3(0.708671927, 0.502360463, 0.502360821), Vec3(0.744235456, 0.431634873, 0.516483963), Vec3(0.774297595, 0.35405615, 0.531092525), Vec3(0.697528481, 0.58382386, 0.423737824), Vec3(0.644162297, 0.64416194, 0.420784533), Vec3(0.620292127, 0.620291829, 0.487256825), Vec3(0.667616308, 0.565391183, 0.491493762), Vec3(0.634344161, 0.54979378, 0.549794495), Vec3(0.667616129, 0.491493285, 0.565391779), Vec3(0.596732855, 0.596732616, 0.542916059), Vec3(0.579348505, 0.579348266, 0.579349041), Vec3(0.596732736, 0.542915344, 0.596733212), Vec3(0.620291948, 0.487256169, 0.620292425), Vec3(0.697528243, 0.423737615, 0.583824277), Vec3(0.723508358, 0.348251373, 0.601838708), Vec3(0.64416194, 0.420784086, 0.644162595), Vec3(0.666016579, 0.346116334, 0.666017175), Vec3(0.876698911, 0.0940983966, 0.479051352), Vec3(0.880668283, 2.01610504e-07, 0.481008321), Vec3(0.864822447, 0.186775044, 0.473437607), Vec3(0.816099405, 0.182947397, 0.554494858), Vec3(0.826835036, 0.0922053978, 0.561066329), Vec3(0.830428123, 2.17118995e-07, 0.563332021), Vec3(0.845220685, 0.276593149, 0.464806825), Vec3(0.798436522, 0.270720899, 0.544207156), Vec3(0.744725406, 0.266581863, 0.617473364), Vec3(0.760417044, 0.180270046, 0.629464626), Vec3(0.684358537, 0.265069813, 0.684359193), Vec3(0.698144197, 0.179295748, 0.698144913), Vec3(0.77002275, 0.090887785, 0.636995614), Vec3(0.773250341, 2.32627499e-07, 0.639565289), Vec3(0.706677675, 0.0904094651, 0.706678212), Vec3(0.709563732, 2.32627499e-07, 0.709564328), Vec3(0.77002275, -0.636995554, 0.0908874422), Vec3(0.706677675, -0.706678152, 0.0904090926), Vec3(0.826835036, -0.56106627, 0.0922050923), Vec3(0.816099524, -0.554494739, 0.182947144), Vec3(0.760417283, -0.629464507, 0.180269778), Vec3(0.698144376, -0.698144794, 0.179295495), Vec3(0.876698971, -0.479051322, 0.094098106), Vec3(0.918992519, -0.391309053, 0.0962664261), Vec3(0.90602684, -0.386684179, 0.191126645), Vec3(0.864822686, -0.473437369, 0.186774835), Vec3(0.845220804, -0.464806676, 0.276593059), Vec3(0.798436701, -0.544206917, 0.27072075), Vec3(0.884632051, -0.37969774, 0.283191621), Vec3(0.855216682, -0.371180236, 0.371180266), Vec3(0.81829232, -0.454054147, 0.362189889), Vec3(0.774297774, -0.531092227, 0.35405609), Vec3(0.744725645, -0.617473245, 0.266581625), Vec3(0.684358776, -0.684359133, 0.265069574), Vec3(0.723508537, -0.601838589, 0.348251343), Vec3(0.666016698, -0.666017115, 0.346116245), Vec3(0.952974796, -0.298469186, 0.0984106734), Vec3(0.977899373, -0.201462135, 0.10024412), Vec3(0.963182271, -0.199005723, 0.199005798), Vec3(0.939038992, -0.294890076, 0.195391148), Vec3(0.993134201, -0.101498231, 0.101498291), Vec3(0.977899432, -0.100244045, 0.201462165), Vec3(0.952974796, -0.098410584, 0.298469245), Vec3(0.939038932, -0.195390999, 0.294890106), Vec3(0.918992579, -0.0962663144, 0.391309053), Vec3(0.90602684, -0.1911266, 0.386684209), Vec3(0.916101098, -0.289564282, 0.289564312), Vec3(0.884632051, -0.283191562, 0.379697859), Vec3(0.845220804, -0.27659294, 0.464806736), Vec3(0.81829232, -0.362189829, 0.454054207), Vec3(0.864822745, -0.186774746, 0.473437518), Vec3(0.816099584, -0.182947055, 0.554494739), Vec3(0.798436642, -0.270720631, 0.544207036), Vec3(0.774297833, -0.354055971, 0.531092286), Vec3(0.876698971, -0.0940979943, 0.479051322), Vec3(0.826835036, -0.0922049806, 0.561066329), Vec3(0.77002275, -0.0908873305, 0.636995554), Vec3(0.760417163, -0.180269673, 0.629464626), Vec3(0.706677675, -0.0904090181, 0.706678152), Vec3(0.698144436, -0.179295361, 0.698144853), Vec3(0.744725585, -0.266581506, 0.617473304), Vec3(0.723508537, -0.348251224, 0.601838589), Vec3(0.684358776, -0.265069485, 0.684359193), Vec3(0.666016757, -0.346116185, 0.666017175), Vec3(0.697528303, -0.583824158, 0.423737615), Vec3(0.644162178, -0.644162416, 0.420784056), Vec3(0.744235575, -0.516483724, 0.431634963), Vec3(0.708671868, -0.502360582, 0.502360702), Vec3(0.667616189, -0.5653916, 0.491493523), Vec3(0.620292068, -0.620292246, 0.487256259), Vec3(0.784516335, -0.442427546, 0.442427576), Vec3(0.744235456, -0.431634814, 0.516483903), Vec3(0.697528243, -0.423737556, 0.583824217), Vec3(0.667616189, -0.491493493, 0.56539166), Vec3(0.644162118, -0.420784056, 0.644162476), Vec3(0.620292068, -0.487256318, 0.620292127), Vec3(0.634344041, -0.549794137, 0.549794197), Vec3(0.596732795, -0.596733034, 0.542915702), Vec3(0.596732736, -0.542915702, 0.596732974), Vec3(0.579348505, -0.579348624, 0.579348683), Vec3(0.549794436, 0.549794137, -0.634343982), Vec3(0.542915821, 0.596732914, -0.596732795), Vec3(0.56539166, 0.491493493, -0.667616129), Vec3(0.502360761, 0.502360582, -0.708671808), Vec3(0.491493732, 0.565391541, -0.667616129), Vec3(0.487256616, 0.620292008, -0.620292008), Vec3(0.583824337, 0.423737645, -0.697528183), Vec3(0.601838708, 0.348251402, -0.723508358), Vec3(0.531092465, 0.35405612, -0.774297595), Vec3(0.516483963, 0.431634963, -0.744235337), Vec3(0.442427844, 0.442427635, -0.784516156), Vec3(0.431635082, 0.516483843, -0.744235337), Vec3(0.454054385, 0.362190008, -0.818292022), Vec3(0.371180505, 0.371180475, -0.855216503), Vec3(0.362190098, 0.454054266, -0.818292081), Vec3(0.354056299, 0.531092405, -0.774297655), Vec3(0.423737854, 0.583824039, -0.697528243), Vec3(0.420784324, 0.644162238, -0.644162118), Vec3(0.348251522, 0.60183847, -0.723508477), Vec3(0.346116513, 0.666016817, -0.666016817), Vec3(0.617473364, 0.266581744, -0.744725406), Vec3(0.629464746, 0.180269927, -0.760416985), Vec3(0.554494917, 0.182947248, -0.816099286), Vec3(0.544207156, 0.270720869, -0.798436522), Vec3(0.636995614, 0.0908875614, -0.77002269), Vec3(0.639565349, -3.10169987e-08, -0.773250401), Vec3(0.56333214, -4.65254999e-08, -0.830428064), Vec3(0.561066508, 0.0922052115, -0.826834917), Vec3(0.47905162, 0.0940982103, -0.876698732), Vec3(0.473437697, 0.186774954, -0.864822447), Vec3(0.481008559, -6.20339975e-08, -0.880668163), Vec3(0.392938614, -6.20339975e-08, -0.923328698), Vec3(0.391309351, 0.0962665007, -0.9189924), Vec3(0.386684537, 0.191126794, -0.906026721), Vec3(0.464806944, 0.276593119, -0.845220566), Vec3(0.379697978, 0.28319177, -0.884631813), Vec3(0.28956458, 0.28956449, -0.916101038), Vec3(0.28319186, 0.379697889, -0.884631813), Vec3(0.294890344, 0.195391238, -0.939038873), Vec3(0.199006036, 0.199005991, -0.963182211), Vec3(0.195391312, 0.294890344, -0.939038932), Vec3(0.191126883, 0.386684388, -0.906026781), Vec3(0.298469514, 0.0984107703, -0.952974677), Vec3(0.299741477, -6.20339975e-08, -0.957644701), Vec3(0.202340946, -7.75425022e-08, -0.982842922), Vec3(0.201462418, 0.100244217, -0.977899313), Vec3(0.101498447, 0.101498388, -0.993134081), Vec3(0.100244276, 0.201462284, -0.977899373), Vec3(0.101948723, -7.75425022e-08, -0.998260498), Vec3(-3.10169987e-08, -7.75425022e-08, -1.00345218), Vec3(-1.55084994e-08, 0.101948664, -0.998260677), Vec3(-3.10169987e-08, 0.202340871, -0.982842922), Vec3(0.098410815, 0.298469394, -0.952974677), Vec3(0.0962665826, 0.391309261, -0.91899246), Vec3(-3.10169987e-08, 0.299741328, -0.957644761), Vec3(-3.10169987e-08, 0.392938465, -0.923328817), Vec3(0.266581893, 0.617473125, -0.744725645), Vec3(0.265069902, 0.684358835, -0.684358835), Vec3(0.270721018, 0.544206977, -0.798436582), Vec3(0.182947323, 0.554494739, -0.816099405), Vec3(0.180270001, 0.629464447, -0.760417283), Vec3(0.179295719, 0.698144615, -0.698144555), Vec3(0.276593238, 0.464806765, -0.845220625), Vec3(0.186775088, 0.473437577, -0.864822447), Vec3(0.094098255, 0.479051411, -0.876698852), Vec3(0.0922052413, 0.56106627, -0.826835096), Vec3(-3.10169987e-08, 0.481008351, -0.880668223), Vec3(-3.10169987e-08, 0.563331902, -0.830428243), Vec3(0.0908876136, 0.636995435, -0.770022869), Vec3(0.0904092789, 0.706677914, -0.706677914), Vec3(-3.10169987e-08, 0.639565229, -0.77325052), Vec3(-3.10169987e-08, 0.70956403, -0.709563971), Vec3(0.636995673, -0.0908876732, -0.77002269), Vec3(0.629464746, -0.180270061, -0.760416925), Vec3(0.554494917, -0.182947397, -0.816099226), Vec3(0.561066508, -0.0922053531, -0.826834917), Vec3(0.617473304, -0.266581982, -0.744725406), Vec3(0.601838648, -0.3482517, -0.723508239), Vec3(0.531092405, -0.354056418, -0.774297535), Vec3(0.544207156, -0.270721078, -0.798436463), Vec3(0.464806944, -0.276593328, -0.845220566), Vec3(0.473437726, -0.186775163, -0.864822447), Vec3(0.454054385, -0.362190276, -0.818291903), Vec3(0.371180475, -0.371180713, -0.855216384), Vec3(0.379697978, -0.283192009, -0.884631813), Vec3(0.386684448, -0.191126972, -0.906026661), Vec3(0.47905159, -0.0940983519, -0.876698792), Vec3(0.391309321, -0.096266672, -0.9189924), Vec3(0.583824158, -0.423737973, -0.697528124), Vec3(0.5653916, -0.491493762, -0.66761601), Vec3(0.502360642, -0.502361, -0.708671629), Vec3(0.516483903, -0.431635261, -0.744235277), Vec3(0.549794137, -0.549794555, -0.634343863), Vec3(0.542915463, -0.596733272, -0.596732557), Vec3(0.487256259, -0.620292604, -0.62029165), Vec3(0.491493523, -0.565391958, -0.667615891), Vec3(0.423737615, -0.583824337, -0.697528124), Vec3(0.431634963, -0.516484201, -0.744235277), Vec3(0.420784116, -0.644162714, -0.64416182), Vec3(0.346116334, -0.666017413, -0.6660164), Vec3(0.348251402, -0.601839006, -0.72350812), Vec3(0.35405618, -0.531092763, -0.774297416), Vec3(0.442427784, -0.442428052, -0.784516096), Vec3(0.362190068, -0.454054564, -0.818291903), Vec3(0.276593208, -0.464807153, -0.845220447), Vec3(0.28319183, -0.379698128, -0.884631693), Vec3(0.270720869, -0.544207335, -0.798436344), Vec3(0.182947293, -0.554495156, -0.816099226), Vec3(0.186775029, -0.473438025, -0.864822268), Vec3(0.191126853, -0.386684716, -0.906026602), Vec3(0.266581804, -0.617473602, -0.744725287), Vec3(0.265069693, -0.684359431, -0.684358358), Vec3(0.179295585, -0.698145151, -0.698144019), Vec3(0.180269927, -0.629464924, -0.760416925), Vec3(0.0908875465, -0.636995971, -0.770022452), Vec3(0.0922052115, -0.561066806, -0.826834679), Vec3(0.0904092044, -0.706678569, -0.706677377), Vec3(-3.10169987e-08, -0.709564626, -0.709563434), Vec3(-1.55084994e-08, -0.639565766, -0.773250043), Vec3(-3.10169987e-08, -0.563332438, -0.830427825), Vec3(0.0940982252, -0.479051828, -0.876698613), Vec3(0.0962665305, -0.39130953, -0.918992281), Vec3(-3.10169987e-08, -0.481008708, -0.880668044), Vec3(-3.10169987e-08, -0.392938763, -0.923328638), Vec3(0.298469454, -0.0984109119, -0.952974677), Vec3(0.294890344, -0.195391402, -0.939038813), Vec3(0.199006081, -0.19900623, -0.963182092), Vec3(0.201462343, -0.100244373, -0.977899373), Vec3(0.28956458, -0.289564699, -0.916100979), Vec3(0.195391282, -0.294890523, -0.939038813), Vec3(0.0984108299, -0.298469603, -0.952974617), Vec3(0.100244276, -0.201462492, -0.977899313), Vec3(-3.10169987e-08, -0.299741685, -0.957644761), Vec3(-3.10169987e-08, -0.202341124, -0.982842863), Vec3(0.101498432, -0.101498574, -0.993134081), Vec3(-3.10169987e-08, -0.10194885, -0.998260498), Vec3(-0.101498529, -0.101498559, -0.993134081), Vec3(-0.101948768, -6.20339975e-08, -0.998260677), Vec3(-0.100244336, -0.201462507, -0.977899373), Vec3(-0.19900614, -0.1990062, -0.963182092), Vec3(-0.201462492, -0.100244388, -0.977899313), Vec3(-0.202340975, -7.75425022e-08, -0.982842922), Vec3(-0.0984109119, -0.298469603, -0.952974617), Vec3(-0.0962666422, -0.3913095, -0.918992281), Vec3(-0.191126928, -0.386684775, -0.906026602), Vec3(-0.195391387, -0.294890523, -0.939038694), Vec3(-0.289564669, -0.289564699, -0.916100979), Vec3(-0.294890493, -0.195391446, -0.939038813), Vec3(-0.283191919, -0.379698187, -0.884631693), Vec3(-0.371180534, -0.371180683, -0.855216444), Vec3(-0.379697978, -0.283192009, -0.884631693), Vec3(-0.386684537, -0.191127017, -0.906026661), Vec3(-0.298469603, -0.0984109566, -0.952974617), Vec3(-0.299741566, -7.75425022e-08, -0.957644761), Vec3(-0.39130941, -0.0962666571, -0.9189924), Vec3(-0.392938703, -6.20339975e-08, -0.923328638), Vec3(-0.0940983221, -0.479051888, -0.876698673), Vec3(-0.0922052786, -0.561066806, -0.826834679), Vec3(-0.182947397, -0.554495275, -0.816099167), Vec3(-0.186775118, -0.473437995, -0.864822268), Vec3(-0.0908876136, -0.636995971, -0.770022452), Vec3(-0.0904092789, -0.706678569, -0.706677318), Vec3(-0.179295659, -0.698145211, -0.698143959), Vec3(-0.180270001, -0.629465044, -0.760416746), Vec3(-0.266581804, -0.617473602, -0.744725227), Vec3(-0.270721018, -0.544207394, -0.798436284), Vec3(-0.265069783, -0.684359431, -0.684358299), Vec3(-0.346116394, -0.666017354, -0.6660164), Vec3(-0.348251522, -0.601838827, -0.723508179), Vec3(-0.354056299, -0.531092763, -0.774297357), Vec3(-0.276593298, -0.464807212, -0.845220387), Vec3(-0.362190187, -0.454054564, -0.818291903), Vec3(-0.442427903, -0.442428023, -0.784515977), Vec3(-0.454054445, -0.362190276, -0.818291903), Vec3(-0.431635112, -0.516484201, -0.744235218), Vec3(-0.502360761, -0.502361, -0.708671629), Vec3(-0.516484022, -0.431635231, -0.744235218), Vec3(-0.531092465, -0.354056418, -0.774297476), Vec3(-0.423737764, -0.583824396, -0.697528005), Vec3(-0.420784116, -0.644162714, -0.64416182), Vec3(-0.487256378, -0.620292604, -0.62029165), Vec3(-0.491493583, -0.565391958, -0.667615831), Vec3(-0.549794257, -0.549794495, -0.634343743), Vec3(-0.56539166, -0.491493821, -0.667615891), Vec3(-0.542915702, -0.596733212, -0.596732557), Vec3(-0.579348683, -0.579348862, -0.579348266), Vec3(-0.596732974, -0.542915821, -0.596732616), Vec3(-0.620292246, -0.487256676, -0.62029171), Vec3(-0.583824277, -0.423737943, -0.697528064), Vec3(-0.601838648, -0.348251611, -0.723508179), Vec3(-0.644162416, -0.420784414, -0.64416182), Vec3(-0.666017115, -0.346116543, -0.666016519), Vec3(-0.47905165, -0.094098337, -0.876698732), Vec3(-0.481008559, -6.20339975e-08, -0.880668104), Vec3(-0.473437756, -0.186775133, -0.864822447), Vec3(-0.554495096, -0.182947442, -0.816099226), Vec3(-0.561066449, -0.0922053382, -0.826834917), Vec3(-0.5633322, -4.65254999e-08, -0.830428064), Vec3(-0.464807004, -0.276593328, -0.845220566), Vec3(-0.544207156, -0.270721048, -0.798436403), Vec3(-0.617473423, -0.266581982, -0.744725347), Vec3(-0.629464746, -0.180270046, -0.760416925), Vec3(-0.684359193, -0.265069902, -0.684358537), Vec3(-0.698144972, -0.179295719, -0.698144197), Vec3(-0.636995614, -0.0908876583, -0.77002269), Vec3(-0.639565408, -3.10169987e-08, -0.773250341), Vec3(-0.706678212, -0.0904093161, -0.706677616), Vec3(-0.709564388, -1.55084994e-08, -0.709563732), Vec3(-0.0908876732, 0.636995435, -0.770022869), Vec3(-0.0904093459, 0.706677854, -0.706677854), Vec3(-0.0922053233, 0.56106621, -0.826835096), Vec3(-0.182947382, 0.554494679, -0.816099405), Vec3(-0.180270046, 0.629464447, -0.760417283), Vec3(-0.179295778, 0.698144555, -0.698144495), Vec3(-0.0940982923, 0.479051322, -0.876698971), Vec3(-0.0962666422, 0.391309172, -0.91899246), Vec3(-0.191126928, 0.386684328, -0.906026781), Vec3(-0.186775103, 0.473437399, -0.864822626), Vec3(-0.276593268, 0.464806646, -0.845220685), Vec3(-0.270721018, 0.544206858, -0.798436642), Vec3(-0.283191949, 0.37969777, -0.884631813), Vec3(-0.371180594, 0.371180356, -0.855216563), Vec3(-0.362190217, 0.454054058, -0.818292081), Vec3(-0.354056448, 0.531092167, -0.774297774), Vec3(-0.266581893, 0.617473006, -0.744725645), Vec3(-0.265069932, 0.684358895, -0.684358776), Vec3(-0.348251551, 0.60183847, -0.723508418), Vec3(-0.346116602, 0.666016877, -0.666016817), Vec3(-0.0984108895, 0.298469335, -0.952974677), Vec3(-0.100244321, 0.201462284, -0.977899313), Vec3(-0.199006096, 0.199005947, -0.963182151), Vec3(-0.195391372, 0.294890255, -0.939038932), Vec3(-0.101498514, 0.101498373, -0.993134201), Vec3(-0.201462463, 0.100244202, -0.977899373), Vec3(-0.298469573, 0.0984107703, -0.952974677), Vec3(-0.294890434, 0.195391223, -0.939038873), Vec3(-0.391309351, 0.0962665156, -0.9189924), Vec3(-0.386684537, 0.191126794, -0.906026661), Vec3(-0.28956458, 0.289564401, -0.916101038), Vec3(-0.379697978, 0.283191681, -0.884631813), Vec3(-0.464807004, 0.276593089, -0.845220506), Vec3(-0.454054534, 0.362190008, -0.818292081), Vec3(-0.473437726, 0.186774924, -0.864822447), Vec3(-0.554495096, 0.182947278, -0.816099226), Vec3(-0.544207275, 0.270720869, -0.798436463), Vec3(-0.531092584, 0.35405609, -0.774297595), Vec3(-0.47905165, 0.0940981954, -0.876698792), Vec3(-0.561066628, 0.0922052413, -0.826834857), Vec3(-0.636995673, 0.0908875614, -0.77002269), Vec3(-0.629464805, 0.180269927, -0.760416925), Vec3(-0.706678271, 0.090409264, -0.706677675), Vec3(-0.698144972, 0.179295644, -0.698144197), Vec3(-0.617473483, 0.266581804, -0.744725406), Vec3(-0.601838708, 0.348251373, -0.723508358), Vec3(-0.684359252, 0.265069723, -0.684358478), Vec3(-0.666017234, 0.346116334, -0.666016579), Vec3(-0.423737913, 0.583824039, -0.697528243), Vec3(-0.420784324, 0.644162238, -0.644162118), Vec3(-0.431635171, 0.516483724, -0.744235456), Vec3(-0.50236088, 0.502360582, -0.708671808), Vec3(-0.491493732, 0.565391421, -0.667616129), Vec3(-0.487256646, 0.620292068, -0.620292068), Vec3(-0.442427963, 0.442427576, -0.784516156), Vec3(-0.516484082, 0.431634843, -0.744235337), Vec3(-0.583824277, 0.423737675, -0.697528183), Vec3(-0.565391839, 0.491493493, -0.667616069), Vec3(-0.644162655, 0.420784116, -0.64416188), Vec3(-0.620292485, 0.487256318, -0.62029171), Vec3(-0.549794495, 0.549794137, -0.634344041), Vec3(-0.542915881, 0.596732795, -0.596732676), Vec3(-0.596733212, 0.542915463, -0.596732676), Vec3(-0.579348862, 0.579348385, -0.579348564), Vec3(-0.634344459, 0.549794078, -0.549793839), Vec3(-0.596733212, 0.596732736, -0.542915404), Vec3(-0.667616665, 0.491493344, -0.565391123), Vec3(-0.708672285, 0.502360404, -0.502360225), Vec3(-0.667616606, 0.565391362, -0.491493195), Vec3(-0.620292485, 0.620291948, -0.48725614), Vec3(-0.69752878, 0.423737556, -0.58382374), Vec3(-0.723509014, 0.348251373, -0.601838052), Vec3(-0.774298131, 0.35405609, -0.531091869), Vec3(-0.744235814, 0.431634814, -0.516483426), Vec3(-0.784516573, 0.442427456, -0.442427337), Vec3(-0.744235754, 0.516483605, -0.431634635), Vec3(-0.818292379, 0.362189829, -0.454053849), Vec3(-0.855216861, 0.371180147, -0.371180087), Vec3(-0.818292439, 0.454053879, -0.362189651), Vec3(-0.774298072, 0.531092048, -0.354055911), Vec3(-0.69752866, 0.58382386, -0.423737377), Vec3(-0.644162655, 0.644161999, -0.420783937), Vec3(-0.723508894, 0.601838171, -0.348251253), Vec3(-0.666017234, 0.666016579, -0.346116126), Vec3(-0.744726062, 0.266581774, -0.617472589), Vec3(-0.7604177, 0.180269912, -0.629463971), Vec3(-0.816099882, 0.182947204, -0.554494262), Vec3(-0.79843694, 0.27072078, -0.54420656), Vec3(-0.770023227, 0.0908875465, -0.636994958), Vec3(-0.773250937, -1.55084994e-08, -0.639564574), Vec3(-0.830428481, 0, -0.563331485), Vec3(-0.826835394, 0.0922051966, -0.561065733), Vec3(-0.876699209, 0.0940982103, -0.479050845), Vec3(-0.864822805, 0.186774939, -0.473437041), Vec3(-0.880668521, 0, -0.481007785), Vec3(-0.923328996, 1.55084994e-08, -0.392938018), Vec3(-0.918992698, 0.0962664858, -0.391308725), Vec3(-0.906027019, 0.191126734, -0.386683911), Vec3(-0.845220983, 0.27659297, -0.464806288), Vec3(-0.884632111, 0.283191562, -0.379697442), Vec3(-0.916101277, 0.289564282, -0.289564103), Vec3(-0.884632111, 0.379697502, -0.283191383), Vec3(-0.939039111, 0.195391104, -0.294889927), Vec3(-0.963182271, 0.199005827, -0.199005693), Vec3(-0.939039111, 0.294890046, -0.195390984), Vec3(-0.906026959, 0.38668406, -0.191126585), Vec3(-0.952974856, 0.0984107554, -0.298468947), Vec3(-0.95764488, 3.10169987e-08, -0.299741), Vec3(-0.982842922, 4.65254999e-08, -0.202340692), Vec3(-0.977899432, 0.100244232, -0.201462075), Vec3(-0.993134081, 0.101498403, -0.101498291), Vec3(-0.977899373, 0.201462194, -0.10024409), Vec3(-0.998260677, 6.20339975e-08, -0.101948567), Vec3(-1.00345218, 7.75425022e-08, 4.65254999e-08), Vec3(-0.998260498, 0.101948693, 4.65254999e-08), Vec3(-0.982842922, 0.202340797, 7.75425022e-08), Vec3(-0.952974796, 0.298469156, -0.0984106287), Vec3(-0.918992639, 0.391308784, -0.096266374), Vec3(-0.95764482, 0.299741119, 9.30509998e-08), Vec3(-0.923328936, 0.392938137, 1.08559497e-07), Vec3(-0.744726002, 0.617472827, -0.266581535), Vec3(-0.684359193, 0.684358537, -0.265069604), Vec3(-0.798436999, 0.54420656, -0.270720631), Vec3(-0.816099763, 0.554494262, -0.182947025), Vec3(-0.760417759, 0.629463911, -0.180269718), Vec3(-0.698144853, 0.698144317, -0.17929551), Vec3(-0.845220923, 0.464806408, -0.276592791), Vec3(-0.864822865, 0.47343725, -0.18677476), Vec3(-0.87669915, 0.479050964, -0.0940980539), Vec3(-0.826835334, 0.561065912, -0.0922050551), Vec3(-0.880668461, 0.481007904, 1.24067995e-07), Vec3(-0.830428481, 0.563331664, 1.24067995e-07), Vec3(-0.770023286, 0.636995018, -0.0908874273), Vec3(-0.706678212, 0.706677675, -0.090409115), Vec3(-0.773250878, 0.639564753, 1.395765e-07), Vec3(-0.709564328, 0.709563732, 1.395765e-07), Vec3(-0.770023227, -0.0908876136, -0.636995018), Vec3(-0.76041764, -0.180269986, -0.62946403), Vec3(-0.816099763, -0.182947308, -0.554494321), Vec3(-0.826835334, -0.0922052264, -0.561065853), Vec3(-0.744726002, -0.266581833, -0.617472649), Vec3(-0.723508775, -0.348251522, -0.601838171), Vec3(-0.774298012, -0.35405612, -0.531091928), Vec3(-0.79843688, -0.270720929, -0.544206619), Vec3(-0.845220923, -0.276593119, -0.464806437), Vec3(-0.864822805, -0.186774969, -0.47343713), Vec3(-0.818292439, -0.362190008, -0.454053849), Vec3(-0.855216742, -0.371180296, -0.371180087), Vec3(-0.884632051, -0.283191621, -0.379697472), Vec3(-0.906026959, -0.191126734, -0.386683941), Vec3(-0.87669915, -0.0940981954, -0.479050905), Vec3(-0.918992639, -0.0962664708, -0.391308814), Vec3(-0.697528601, -0.423737824, -0.58382374), Vec3(-0.667616427, -0.491493702, -0.565391183), Vec3(-0.708672106, -0.502360761, -0.502360225), Vec3(-0.744235694, -0.431634992, -0.516483426), Vec3(-0.63434422, -0.549794436, -0.549793839), Vec3(-0.596732795, -0.596733212, -0.542915344), Vec3(-0.620292068, -0.620292425, -0.48725605), Vec3(-0.667616308, -0.565391719, -0.491493255), Vec3(-0.697528422, -0.583824277, -0.423737407), Vec3(-0.744235635, -0.516483903, -0.431634635), Vec3(-0.644162118, -0.644162536, -0.420783907), Vec3(-0.666016698, -0.666017175, -0.346116185), Vec3(-0.723508477, -0.601838589, -0.348251313), Vec3(-0.774297833, -0.531092405, -0.354055941), Vec3(-0.784516335, -0.442427784, -0.442427397), Vec3(-0.81829232, -0.454054266, -0.36218977), Vec3(-0.845220804, -0.464806765, -0.27659297), Vec3(-0.884631991, -0.37969777, -0.283191562), Vec3(-0.798436642, -0.544206977, -0.27072072), Vec3(-0.816099405, -0.554494679, -0.182947218), Vec3(-0.864822626, -0.473437458, -0.18677488), Vec3(-0.90602684, -0.386684269, -0.191126719), Vec3(-0.744725585, -0.617473245, -0.266581684), Vec3(-0.684358597, -0.684359193, -0.265069634), Vec3(-0.698144317, -0.698145032, -0.179295644), Vec3(-0.760417163, -0.629464567, -0.180269927), Vec3(-0.77002275, -0.636995494, -0.0908876285), Vec3(-0.826835036, -0.561066329, -0.0922052413), Vec3(-0.706677675, -0.706678212, -0.090409331), Vec3(-0.709563851, -0.709564209, -1.08559497e-07), Vec3(-0.773250461, -0.639565289, -7.75425022e-08), Vec3(-0.830428123, -0.563331962, -6.20339975e-08), Vec3(-0.876698911, -0.479051381, -0.0940982252), Vec3(-0.918992519, -0.391309053, -0.0962665007), Vec3(-0.880668283, -0.481008321, -3.10169987e-08), Vec3(-0.923328876, -0.392938346, -1.55084994e-08), Vec3(-0.952974796, -0.0984107032, -0.298469037), Vec3(-0.939038932, -0.195391148, -0.294890046), Vec3(-0.963182271, -0.199005872, -0.199005798), Vec3(-0.977899373, -0.100244164, -0.20146212), Vec3(-0.916101158, -0.289564282, -0.289564222), Vec3(-0.939038992, -0.294890165, -0.195391074), Vec3(-0.952974796, -0.298469216, -0.0984107256), Vec3(-0.977899373, -0.201462135, -0.10024415), Vec3(-0.95764488, -0.299741179, 0), Vec3(-0.982842922, -0.202340752, 0), Vec3(-0.993134081, -0.101498291, -0.101498306), Vec3(-0.998260677, -0.101948567, 1.55084994e-08), Vec3(-0.993134201, -0.101498291, 0.101498403), Vec3(-0.998260677, 9.30509998e-08, 0.101948664), Vec3(-0.977899373, -0.201462135, 0.100244217), Vec3(-0.963182211, -0.199005783, 0.199005857), Vec3(-0.977899373, -0.10024409, 0.201462224), Vec3(-0.982842982, 1.08559497e-07, 0.202340797), Vec3(-0.952974737, -0.298469186, 0.0984107554), Vec3(-0.918992519, -0.391309083, 0.0962664858), Vec3(-0.906026781, -0.386684299, 0.191126749), Vec3(-0.939038992, -0.294890136, 0.195391178), Vec3(-0.916101158, -0.289564282, 0.289564312), Vec3(-0.939038932, -0.195391044, 0.294890165), Vec3(-0.884631872, -0.37969777, 0.283191711), Vec3(-0.855216682, -0.371180236, 0.371180415), Vec3(-0.884631872, -0.283191592, 0.379697859), Vec3(-0.906026781, -0.19112666, 0.386684328), Vec3(-0.952974737, -0.0984106287, 0.298469216), Vec3(-0.95764488, 1.24067995e-07, 0.299741238), Vec3(-0.918992519, -0.0962663591, 0.391309083), Vec3(-0.923328817, 1.395765e-07, 0.392938435), Vec3(-0.876698971, -0.479051322, 0.0940981656), Vec3(-0.826835036, -0.56106627, 0.0922051519), Vec3(-0.816099524, -0.554494739, 0.182947204), Vec3(-0.864822686, -0.473437428, 0.186774909), Vec3(-0.77002281, -0.636995494, 0.090887472), Vec3(-0.706677675, -0.706678212, 0.0904091299), Vec3(-0.698144436, -0.698144853, 0.179295495), Vec3(-0.760417283, -0.629464507, 0.180269793), Vec3(-0.744725645, -0.617473185, 0.266581744), Vec3(-0.798436642, -0.544206977, 0.27072078), Vec3(-0.684358776, -0.684359133, 0.265069634), Vec3(-0.666016638, -0.666017115, 0.346116304), Vec3(-0.723508418, -0.601838589, 0.348251373), Vec3(-0.774297714, -0.531092346, 0.35405609), Vec3(-0.845220685, -0.464806706, 0.276593029), Vec3(-0.81829226, -0.454054207, 0.362190008), Vec3(-0.784516215, -0.442427605, 0.442427725), Vec3(-0.81829226, -0.362189889, 0.454054296), Vec3(-0.744235575, -0.516483724, 0.431634963), Vec3(-0.708671808, -0.502360642, 0.502360761), Vec3(-0.744235456, -0.431634873, 0.516483903), Vec3(-0.774297774, -0.35405606, 0.531092405), Vec3(-0.697528303, -0.583824098, 0.423737675), Vec3(-0.644162118, -0.644162416, 0.420784175), Vec3(-0.620291948, -0.620292127, 0.487256467), Vec3(-0.667616189, -0.5653916, 0.491493553), Vec3(-0.634344101, -0.549794197, 0.549794137), Vec3(-0.667616189, -0.491493493, 0.5653916), Vec3(-0.596732616, -0.596733034, 0.542915761), Vec3(-0.579348385, -0.579348624, 0.579348624), Vec3(-0.596732676, -0.542915702, 0.596733093), Vec3(-0.620292008, -0.487256348, 0.620292306), Vec3(-0.697528243, -0.423737615, 0.583824217), Vec3(-0.723508418, -0.348251343, 0.601838648), Vec3(-0.644162118, -0.420784056, 0.644162476), Vec3(-0.666016698, -0.346116155, 0.666017175), Vec3(-0.876698911, -0.094098039, 0.479051352), Vec3(-0.880668223, 1.55085004e-07, 0.481008351), Vec3(-0.864822567, -0.186774775, 0.473437607), Vec3(-0.816099465, -0.182947099, 0.554494858), Vec3(-0.826835036, -0.0922050402, 0.561066389), Vec3(-0.830428123, 1.70593495e-07, 0.563332021), Vec3(-0.845220745, -0.276593029, 0.464806795), Vec3(-0.798436642, -0.27072069, 0.544207036), Vec3(-0.744725585, -0.266581565, 0.617473304), Vec3(-0.760417163, -0.180269718, 0.629464626), Vec3(-0.684358597, -0.265069515, 0.684359133), Vec3(-0.698144376, -0.179295376, 0.698144853), Vec3(-0.77002275, -0.0908873752, 0.636995614), Vec3(-0.773250341, 1.70593495e-07, 0.639565289), Vec3(-0.706677675, -0.0904090479, 0.706678271), Vec3(-0.709563732, 1.86102e-07, 0.709564328), Vec3(-0.770023167, 0.636995077, 0.0908877328), Vec3(-0.706678092, 0.706677675, 0.0904094502), Vec3(-0.826835155, 0.561066031, 0.0922053382), Vec3(-0.816099644, 0.5544945, 0.182947397), Vec3(-0.760417402, 0.629464149, 0.180270121), Vec3(-0.698144794, 0.698144376, 0.179295853), Vec3(-0.87669909, 0.479050964, 0.0940983221), Vec3(-0.918992579, 0.391308874, 0.0962665975), Vec3(-0.90602684, 0.38668409, 0.191126853), Vec3(-0.864822686, 0.47343722, 0.186775044), Vec3(-0.845220864, 0.464806467, 0.276593238), Vec3(-0.798436761, 0.544206679, 0.270721018), Vec3(-0.884631932, 0.379697651, 0.283191741), Vec3(-0.855216682, 0.371180207, 0.371180356), Vec3(-0.818292379, 0.454053909, 0.362190098), Vec3(-0.774297893, 0.531091988, 0.354056239), Vec3(-0.744725823, 0.617472827, 0.266581953), Vec3(-0.684359014, 0.684358597, 0.265069991), Vec3(-0.723508656, 0.601838231, 0.3482517), Vec3(-0.666017056, 0.666016579, 0.346116662), Vec3(-0.952974737, 0.298469186, 0.0984108299), Vec3(-0.977899432, 0.201462224, 0.100244276), Vec3(-0.963182211, 0.199005857, 0.199005917), Vec3(-0.939038932, 0.294890046, 0.195391238), Vec3(-0.993134081, 0.101498418, 0.101498403), Vec3(-0.977899313, 0.100244276, 0.201462194), Vec3(-0.952974737, 0.0984108597, 0.298469245), Vec3(-0.939038992, 0.195391223, 0.294890195), Vec3(-0.918992519, 0.0962666422, 0.391309142), Vec3(-0.906026781, 0.191126853, 0.386684299), Vec3(-0.916101098, 0.289564282, 0.289564341), Vec3(-0.884631872, 0.283191651, 0.379697859), Vec3(-0.845220685, 0.276593149, 0.464806825), Vec3(-0.81829226, 0.362189859, 0.454054326), Vec3(-0.864822567, 0.186775029, 0.473437518), Vec3(-0.816099346, 0.182947308, 0.554494739), Vec3(-0.798436522, 0.27072084, 0.544207096), Vec3(-0.774297714, 0.354056001, 0.531092465), Vec3(-0.876698911, 0.094098337, 0.479051322), Vec3(-0.826834977, 0.0922053531, 0.561066389), Vec3(-0.77002275, 0.090887703, 0.636995554), Vec3(-0.760417104, 0.180270001, 0.629464626), Vec3(-0.706677675, 0.0904094055, 0.706678152), Vec3(-0.698144257, 0.179295689, 0.698144853), Vec3(-0.744725525, 0.266581714, 0.617473304), Vec3(-0.723508358, 0.348251343, 0.601838708), Vec3(-0.684358597, 0.265069634, 0.684359252), Vec3(-0.666016579, 0.346116185, 0.666017234), Vec3(-0.697528541, 0.58382374, 0.423737973), Vec3(-0.644162297, 0.64416188, 0.420784503), Vec3(-0.744235635, 0.516483545, 0.431635082), Vec3(-0.708672047, 0.502360344, 0.50236088), Vec3(-0.667616308, 0.565391183, 0.491493851), Vec3(-0.620292127, 0.62029165, 0.487256825), Vec3(-0.784516335, 0.442427427, 0.442427814), Vec3(-0.744235456, 0.431634724, 0.516484022), Vec3(-0.697528243, 0.423737466, 0.583824277), Vec3(-0.667616189, 0.491493165, 0.565391958), Vec3(-0.644161999, 0.420783937, 0.644162595), Vec3(-0.620291948, 0.48725608, 0.620292485), Vec3(-0.63434422, 0.54979372, 0.549794555), Vec3(-0.596732914, 0.596732557, 0.542916119), Vec3(-0.596732914, 0.542915344, 0.596733272), Vec3(-0.579348564, 0.579348207, 0.579348922), Vec3(0.549794137, 0.634343863, 0.549794555), Vec3(0.542915463, 0.596732557, 0.596733272), Vec3(0.565391481, 0.667615891, 0.49149394), Vec3(0.502360642, 0.708671629, 0.502361059), Vec3(0.491493434, 0.667615891, 0.565392017), Vec3(0.487256318, 0.62029165, 0.620292604), Vec3(0.583824158, 0.697528124, 0.423738003), Vec3(0.601838648, 0.723508239, 0.34825179), Vec3(0.531092405, 0.774297535, 0.354056418), Vec3(0.516483903, 0.744235277, 0.43163532), Vec3(0.442427725, 0.784516096, 0.442428052), Vec3(0.431634933, 0.744235218, 0.516484261), Vec3(0.454054356, 0.818291903, 0.362190306), Vec3(0.371180445, 0.855216384, 0.371180713), Vec3(0.362190068, 0.818291903, 0.454054624), Vec3(0.35405609, 0.774297416, 0.531092823), Vec3(0.423737526, 0.697528064, 0.583824575), Vec3(0.420784086, 0.644161761, 0.644162774), Vec3(0.348251373, 0.72350812, 0.601839006), Vec3(0.346116155, 0.6660164, 0.666017413), Vec3(0.617473304, 0.744725406, 0.266582012), Vec3(0.629464626, 0.760416985, 0.180270106), Vec3(0.554494798, 0.816099405, 0.182947487), Vec3(0.544207156, 0.798436463, 0.270721167), Vec3(0.636995614, 0.77002275, 0.0908877179), Vec3(0.639565349, 0.773250401, 1.08559497e-07), Vec3(0.56333214, 0.830428064, 1.24067995e-07), Vec3(0.561066329, 0.826834917, 0.0922053978), Vec3(0.47905159, 0.876698792, 0.0940984264), Vec3(0.473437756, 0.864822447, 0.186775222), Vec3(0.4810085, 0.880668163, 1.395765e-07), Vec3(0.392938614, 0.923328698, 1.55085004e-07), Vec3(0.391309291, 0.9189924, 0.0962667614), Vec3(0.386684448, 0.906026721, 0.191127092), Vec3(0.464806885, 0.845220506, 0.276593387), Vec3(0.379697919, 0.884631693, 0.283192039), Vec3(0.28956452, 0.916100979, 0.289564759), Vec3(0.2831918, 0.884631693, 0.379698217), Vec3(0.294890314, 0.939038873, 0.195391491), Vec3(0.199006006, 0.963182092, 0.199006304), Vec3(0.195391282, 0.939038813, 0.294890642), Vec3(0.191126853, 0.906026602, 0.386684746), Vec3(0.298469424, 0.952974677, 0.0984110162), Vec3(0.299741387, 0.957644761, 1.55085004e-07), Vec3(0.202340886, 0.982842922, 1.70593495e-07), Vec3(0.201462358, 0.977899313, 0.100244492), Vec3(0.101498447, 0.993134081, 0.101498663), Vec3(0.100244276, 0.977899313, 0.201462612), Vec3(0.101948708, 0.998260498, 1.70593495e-07), Vec3(-1.55084994e-08, 1.00345218, 1.70593495e-07), Vec3(-3.10169987e-08, 0.998260677, 0.101948909), Vec3(-3.10169987e-08, 0.982842863, 0.202341184), Vec3(0.0984108001, 0.952974617, 0.298469812), Vec3(0.0962665305, 0.918992221, 0.391309649), Vec3(-3.10169987e-08, 0.957644641, 0.299741715), Vec3(-3.10169987e-08, 0.923328578, 0.392938942), Vec3(0.266581774, 0.744725287, 0.617473543), Vec3(0.265069634, 0.684358358, 0.684359431), Vec3(0.270720899, 0.798436344, 0.544207394), Vec3(0.182947263, 0.816099226, 0.554495215), Vec3(0.180269867, 0.760416925, 0.629464984), Vec3(0.17929554, 0.698143959, 0.698145211), Vec3(0.276593149, 0.845220387, 0.464807242), Vec3(0.186774969, 0.864822328, 0.473437965), Vec3(0.0940982103, 0.876698673, 0.479051888), Vec3(0.0922052264, 0.826834679, 0.561066866), Vec3(-3.10169987e-08, 0.880667984, 0.481008857), Vec3(-3.10169987e-08, 0.830427825, 0.563332498), Vec3(0.0908875465, 0.770022511, 0.636996031), Vec3(0.0904091895, 0.706677258, 0.706678569), Vec3(-3.10169987e-08, 0.773250103, 0.639565706), Vec3(-3.10169987e-08, 0.709563375, 0.709564686), Vec3(0.636995554, 0.77002275, -0.0908874869), Vec3(0.629464626, 0.760417104, -0.180269793), Vec3(0.554494917, 0.816099405, -0.182947189), Vec3(0.561066508, 0.826834917, -0.0922051072), Vec3(0.617473304, 0.744725525, -0.266581684), Vec3(0.601838648, 0.723508298, -0.348251283), Vec3(0.531092405, 0.774297714, -0.354056001), Vec3(0.544207156, 0.798436522, -0.27072072), Vec3(0.464806885, 0.845220685, -0.276593029), Vec3(0.473437697, 0.864822447, -0.18677485), Vec3(0.454054385, 0.818292201, -0.362189859), Vec3(0.371180534, 0.855216563, -0.371180326), Vec3(0.379697949, 0.884631813, -0.283191651), Vec3(0.386684448, 0.906026721, -0.191126689), Vec3(0.47905153, 0.876698792, -0.094098106), Vec3(0.391309321, 0.9189924, -0.0962664261), Vec3(0.583824277, 0.697528243, -0.423737496), Vec3(0.565391719, 0.667616129, -0.491493344), Vec3(0.502360821, 0.708671987, -0.502360463), Vec3(0.516484022, 0.744235456, -0.431634754), Vec3(0.549794316, 0.634344161, -0.549793899), Vec3(0.491493672, 0.667616248, -0.565391362), Vec3(0.423737824, 0.697528303, -0.583823979), Vec3(0.431635112, 0.744235456, -0.516483665), Vec3(0.348251551, 0.723508537, -0.60183847), Vec3(0.354056329, 0.774297655, -0.531092227), Vec3(0.442427874, 0.784516156, -0.442427576), Vec3(0.362190068, 0.818292201, -0.454054058), Vec3(0.276593238, 0.845220685, -0.464806616), Vec3(0.28319186, 0.884631872, -0.37969774), Vec3(0.270720959, 0.798436642, -0.544206917), Vec3(0.182947278, 0.816099524, -0.55449456), Vec3(0.186775029, 0.864822745, -0.473437399), Vec3(0.191126883, 0.906026781, -0.386684269), Vec3(0.266581893, 0.744725704, -0.617473006), Vec3(0.180269986, 0.760417342, -0.629464388), Vec3(0.0908876136, 0.770022929, -0.636995375), Vec3(0.0922052562, 0.826835155, -0.56106621), Vec3(-3.10169987e-08, 0.77325058, -0.639565051), Vec3(-3.10169987e-08, 0.830428302, -0.563331723), Vec3(0.094098255, 0.876698971, -0.479051292), Vec3(0.0962665454, 0.918992519, -0.391309053), Vec3(-3.10169987e-08, 0.880668342, -0.481008142), Vec3(-3.10169987e-08, 0.923328876, -0.392938346), Vec3(0.298469454, 0.952974737, -0.0984106734), Vec3(0.294890255, 0.939038873, -0.195391074), Vec3(0.199006021, 0.963182211, -0.199005842), Vec3(0.201462358, 0.977899373, -0.100244105), Vec3(0.28956458, 0.916101098, -0.289564341), Vec3(0.195391282, 0.939038992, -0.294890165), Vec3(0.0984108299, 0.952974737, -0.298469216), Vec3(0.100244246, 0.977899373, -0.201462194), Vec3(-3.10169987e-08, 0.95764488, -0.299741209), Vec3(-3.10169987e-08, 0.982842863, -0.202340782), Vec3(0.101498432, 0.993134201, -0.101498276), Vec3(-3.10169987e-08, 0.998260677, -0.101948552), Vec3(-0.101498492, 0.993134201, -0.101498291), Vec3(-0.101948783, 0.998260498, 1.70593495e-07), Vec3(-0.100244336, 0.977899373, -0.201462209), Vec3(-0.199006096, 0.963182151, -0.199005842), Vec3(-0.201462403, 0.977899373, -0.10024409), Vec3(-0.202340961, 0.982842922, 1.70593495e-07), Vec3(-0.0984108895, 0.952974737, -0.298469216), Vec3(-0.0962666273, 0.918992519, -0.391309053), Vec3(-0.191126958, 0.906026781, -0.386684239), Vec3(-0.195391357, 0.939038873, -0.294890136), Vec3(-0.28956461, 0.916101098, -0.289564341), Vec3(-0.294890463, 0.939038873, -0.195391133), Vec3(-0.283191919, 0.884631872, -0.37969777), Vec3(-0.371180505, 0.855216622, -0.371180207), Vec3(-0.379698038, 0.884631813, -0.283191681), Vec3(-0.386684537, 0.906026721, -0.191126704), Vec3(-0.298469603, 0.952974677, -0.0984106734), Vec3(-0.299741536, 0.957644761, 1.70593495e-07), Vec3(-0.39130941, 0.918992341, -0.0962664112), Vec3(-0.392938703, 0.923328698, 1.70593495e-07), Vec3(-0.0940983221, 0.876698971, -0.479051322), Vec3(-0.0922053382, 0.826835155, -0.561066091), Vec3(-0.182947397, 0.816099524, -0.554494679), Vec3(-0.186775133, 0.864822626, -0.473437369), Vec3(-0.0908876732, 0.770022929, -0.636995375), Vec3(-0.180270076, 0.760417342, -0.629464328), Vec3(-0.266581953, 0.744725764, -0.617472947), Vec3(-0.270721048, 0.798436582, -0.544206858), Vec3(-0.348251611, 0.723508596, -0.601838291), Vec3(-0.354056358, 0.774297714, -0.531092167), Vec3(-0.276593298, 0.845220685, -0.464806646), Vec3(-0.362190217, 0.818292081, -0.454054058), Vec3(-0.442427903, 0.784516156, -0.442427546), Vec3(-0.454054505, 0.818292141, -0.362189889), Vec3(-0.431635141, 0.744235456, -0.516483724), Vec3(-0.50236088, 0.708671808, -0.502360463), Vec3(-0.516484141, 0.744235337, -0.431634814), Vec3(-0.531092525, 0.774297595, -0.35405609), Vec3(-0.423737943, 0.697528303, -0.58382386), Vec3(-0.491493732, 0.667616189, -0.565391302), Vec3(-0.549794495, 0.634344101, -0.549793899), Vec3(-0.565391839, 0.667616189, -0.491493315), Vec3(-0.583824337, 0.697528243, -0.423737556), Vec3(-0.601838708, 0.723508358, -0.348251373), Vec3(-0.47905159, 0.876698792, -0.094098106), Vec3(-0.481008559, 0.880668104, 1.70593495e-07), Vec3(-0.473437697, 0.864822447, -0.186774865), Vec3(-0.554494977, 0.816099286, -0.182947159), Vec3(-0.561066449, 0.826834917, -0.09220507), Vec3(-0.5633322, 0.830428064, 1.55085004e-07), Vec3(-0.464806914, 0.845220625, -0.276593029), Vec3(-0.544207156, 0.798436522, -0.27072078), Vec3(-0.617473423, 0.744725466, -0.266581714), Vec3(-0.629464805, 0.760416925, -0.180269793), Vec3(-0.636995614, 0.77002275, -0.0908874571), Vec3(-0.639565408, 0.773250341, 1.55085004e-07), Vec3(-0.0908876136, 0.770022452, 0.636996031), Vec3(-0.090409264, 0.706677258, 0.706678569), Vec3(-0.0922052562, 0.826834619, 0.561066926), Vec3(-0.182947308, 0.816099048, 0.554495335), Vec3(-0.180269942, 0.760416746, 0.629465044), Vec3(-0.179295629, 0.698143959, 0.698145151), Vec3(-0.0940982699, 0.876698613, 0.479051888), Vec3(-0.0962666124, 0.918992281, 0.391309649), Vec3(-0.191126883, 0.906026542, 0.386684775), Vec3(-0.186775059, 0.864822268, 0.473438054), Vec3(-0.276593179, 0.845220327, 0.464807272), Vec3(-0.270720959, 0.798436284, 0.544207513), Vec3(-0.28319186, 0.884631753, 0.379698277), Vec3(-0.371180475, 0.855216384, 0.371180713), Vec3(-0.362190008, 0.818291903, 0.454054713), Vec3(-0.35405615, 0.774297357, 0.531092942), Vec3(-0.266581804, 0.744725168, 0.617473722), Vec3(-0.265069723, 0.684358299, 0.684359431), Vec3(-0.348251402, 0.72350812, 0.601839006), Vec3(-0.346116304, 0.666016281, 0.666017473), Vec3(-0.0984108895, 0.952974558, 0.298469722), Vec3(-0.100244306, 0.977899313, 0.201462612), Vec3(-0.199006096, 0.963182092, 0.199006259), Vec3(-0.195391372, 0.939038754, 0.294890672), Vec3(-0.101498477, 0.993134081, 0.101498663), Vec3(-0.201462388, 0.977899313, 0.100244492), Vec3(-0.298469514, 0.952974617, 0.0984110162), Vec3(-0.294890463, 0.939038813, 0.195391536), Vec3(-0.391309351, 0.918992341, 0.0962667614), Vec3(-0.386684507, 0.906026661, 0.191127077), Vec3(-0.28956455, 0.916100979, 0.289564729), Vec3(-0.379697949, 0.884631693, 0.283192039), Vec3(-0.464806855, 0.845220506, 0.276593417), Vec3(-0.454054326, 0.818291903, 0.362190306), Vec3(-0.473437756, 0.864822447, 0.186775237), Vec3(-0.554494917, 0.816099226, 0.182947487), Vec3(-0.544207096, 0.798436463, 0.270721197), Vec3(-0.531092405, 0.774297476, 0.354056507), Vec3(-0.47905156, 0.876698792, 0.0940984413), Vec3(-0.561066449, 0.826834917, 0.0922054276), Vec3(-0.636995614, 0.77002269, 0.090887785), Vec3(-0.629464686, 0.760416925, 0.18027015), Vec3(-0.617473245, 0.744725406, 0.266581982), Vec3(-0.601838589, 0.723508239, 0.348251849), Vec3(-0.423737615, 0.697528005, 0.583824575), Vec3(-0.420784116, 0.644161701, 0.644162774), Vec3(-0.431634933, 0.744235218, 0.51648432), Vec3(-0.502360642, 0.708671629, 0.502361119), Vec3(-0.491493464, 0.667615891, 0.565391958), Vec3(-0.487256259, 0.62029165, 0.620292664), Vec3(-0.442427725, 0.784515977, 0.442428142), Vec3(-0.516483903, 0.744235277, 0.43163532), Vec3(-0.583824158, 0.697528124, 0.423737973), Vec3(-0.56539166, 0.667615891, 0.491493911), Vec3(-0.549794197, 0.634343743, 0.549794614), Vec3(-0.542915702, 0.596732557, 0.596733272), Vec3(0.549794018, -0.549794137, 0.634344399), Vec3(0.542915404, -0.596732914, 0.596733034), Vec3(0.565391362, -0.491493374, 0.667616487), Vec3(0.502360463, -0.502360523, 0.708672106), Vec3(0.491493315, -0.565391421, 0.667616487), Vec3(0.487256259, -0.620292127, 0.620292127), Vec3(0.583823919, -0.423737466, 0.69752866), Vec3(0.601838231, -0.348251224, 0.723508775), Vec3(0.531092048, -0.354055941, 0.774298072), Vec3(0.516483545, -0.431634665, 0.744235814), Vec3(0.442427367, -0.442427367, 0.784516573), Vec3(0.431634724, -0.516483545, 0.744235754), Vec3(0.454053938, -0.362189651, 0.818292499), Vec3(0.371180117, -0.371180058, 0.85521692), Vec3(0.36218977, -0.454053819, 0.818292439), Vec3(0.354055941, -0.531091988, 0.774298072), Vec3(0.423737526, -0.583823919, 0.69752866), Vec3(0.420784026, -0.644162297, 0.644162297), Vec3(0.348251343, -0.601838291, 0.723508775), Vec3(0.346116185, -0.666016817, 0.666017115), Vec3(0.617472887, -0.266581506, 0.744726002), Vec3(0.62946409, -0.180269659, 0.76041764), Vec3(0.554494262, -0.18294695, 0.816099882), Vec3(0.544206619, -0.270720541, 0.79843694), Vec3(0.636995018, -0.0908873007, 0.770023227), Vec3(0.639564574, 2.32627499e-07, 0.773250937), Vec3(0.563331485, 2.4813599e-07, 0.830428481), Vec3(0.561065793, -0.092204906, 0.826835394), Vec3(0.479050845, -0.0940978825, 0.876699269), Vec3(0.47343713, -0.186774597, 0.864822865), Vec3(0.481007755, 2.4813599e-07, 0.880668581), Vec3(0.392937869, 2.4813599e-07, 0.923329055), Vec3(0.391308635, -0.0962661728, 0.918992758), Vec3(0.386683911, -0.191126406, 0.906027079), Vec3(0.464806408, -0.276592761, 0.845221043), Vec3(0.379697472, -0.283191293, 0.88463223), Vec3(0.289564103, -0.289563954, 0.916101336), Vec3(0.283191383, -0.379697323, 0.88463223), Vec3(0.294889867, -0.195390731, 0.939039171), Vec3(0.199005693, -0.199005499, 0.96318233), Vec3(0.195390999, -0.294889718, 0.939039111), Vec3(0.1911266, -0.386683851, 0.906027079), Vec3(0.298468858, -0.0984104276, 0.952974916), Vec3(0.299740821, 2.4813599e-07, 0.957644999), Vec3(0.202340484, 2.4813599e-07, 0.982842982), Vec3(0.201461986, -0.100243859, 0.977899432), Vec3(0.101498231, -0.101498, 0.993134201), Vec3(0.10024406, -0.201461762, 0.977899492), Vec3(0.101948492, 2.4813599e-07, 0.998260677), Vec3(-3.10169987e-08, 2.4813599e-07, 1.00345218), Vec3(-3.10169987e-08, -0.101948276, 0.998260677), Vec3(-1.55084994e-08, -0.202340335, 0.982843041), Vec3(0.0984106436, -0.298468739, 0.952974975), Vec3(0.0962664112, -0.391308665, 0.918992698), Vec3(-1.55084994e-08, -0.299740791, 0.957645059), Vec3(-3.10169987e-08, -0.392937809, 0.923329055), Vec3(0.266581625, -0.617472827, 0.744725943), Vec3(0.265069664, -0.684358835, 0.684358895), Vec3(0.27072069, -0.544206619, 0.79843694), Vec3(0.182947144, -0.5544945, 0.816099703), Vec3(0.180269808, -0.629464149, 0.760417521), Vec3(0.179295525, -0.698144555, 0.698144555), Vec3(0.27659288, -0.464806318, 0.845221102), Vec3(0.186774775, -0.473437071, 0.864822865), Vec3(0.094098106, -0.479050905, 0.876699209), Vec3(0.092205137, -0.561066091, 0.826835155), Vec3(-3.10169987e-08, -0.481007785, 0.880668521), Vec3(-3.10169987e-08, -0.563331604, 0.830428481), Vec3(0.0908875018, -0.636995137, 0.770023108), Vec3(0.0904091746, -0.706677854, 0.706677973), Vec3(-1.55084994e-08, -0.639564872, 0.773250699), Vec3(-3.10169987e-08, -0.70956403, 0.70956403), Vec3(0.636994958, 0.0908877626, 0.770023286), Vec3(0.62946403, 0.180269986, 0.76041764), Vec3(0.554494143, 0.182947278, 0.816099823), Vec3(0.561065674, 0.0922053829, 0.826835394), Vec3(0.617472649, 0.266581774, 0.744726002), Vec3(0.601838052, 0.348251313, 0.723508894), Vec3(0.531091869, 0.354055971, 0.774298191), Vec3(0.54420644, 0.27072084, 0.798436999), Vec3(0.464806139, 0.276593, 0.845221102), Vec3(0.473436922, 0.186774969, 0.864822924), Vec3(0.45405373, 0.36218971, 0.818292618), Vec3(0.371179938, 0.371180087, 0.85521698), Vec3(0.379697233, 0.283191502, 0.88463217), Vec3(0.386683762, 0.191126779, 0.906027019), Vec3(0.479050756, 0.0940983668, 0.876699209), Vec3(0.391308576, 0.0962666422, 0.918992698), Vec3(0.583823681, 0.423737437, 0.697528899), Vec3(0.565391183, 0.491493225, 0.667616725), Vec3(0.502360225, 0.502360284, 0.708672464), Vec3(0.516483307, 0.431634635, 0.744236052), Vec3(0.549793839, 0.549793899, 0.634344637), Vec3(0.491493225, 0.565391064, 0.667616785), Vec3(0.423737466, 0.583823562, 0.697529018), Vec3(0.431634605, 0.516483307, 0.744236052), Vec3(0.348251224, 0.601837933, 0.723509133), Vec3(0.354055882, 0.531091809, 0.774298251), Vec3(0.442427337, 0.442427367, 0.784516633), Vec3(0.362189621, 0.45405376, 0.818292677), Vec3(0.276592851, 0.464806199, 0.845221162), Vec3(0.283191323, 0.379697382, 0.88463217), Vec3(0.270720661, 0.544206321, 0.798437119), Vec3(0.18294704, 0.554494083, 0.816100061), Vec3(0.186774716, 0.473436892, 0.864822984), Vec3(0.191126511, 0.386683851, 0.906027079), Vec3(0.266581565, 0.617472529, 0.744726241), Vec3(0.180269763, 0.629463851, 0.760417819), Vec3(0.0908875018, 0.63699466, 0.770023525), Vec3(0.0922051221, 0.561065555, 0.826835513), Vec3(-3.10169987e-08, 0.639564395, 0.773251176), Vec3(-3.10169987e-08, 0.563331187, 0.83042872), Vec3(0.0940980688, 0.479050845, 0.876699269), Vec3(0.0962663442, 0.391308635, 0.918992698), Vec3(-3.10169987e-08, 0.481007755, 0.880668581), Vec3(-3.10169987e-08, 0.392937899, 0.923328996), Vec3(0.298468769, 0.0984108895, 0.952974856), Vec3(0.294889838, 0.195391133, 0.939039111), Vec3(0.199005604, 0.199005857, 0.963182271), Vec3(0.201461926, 0.100244306, 0.977899432), Vec3(0.289563894, 0.289564192, 0.916101277), Vec3(0.195390895, 0.294890016, 0.939039111), Vec3(0.0984105989, 0.298468977, 0.952974856), Vec3(0.100244015, 0.20146215, 0.977899432), Vec3(-3.10169987e-08, 0.29974097, 0.95764488), Vec3(-3.10169987e-08, 0.202340722, 0.982842922), Vec3(0.101498187, 0.101498462, 0.993134081), Vec3(-3.10169987e-08, 0.101948753, 0.998260498), Vec3(-0.101498291, 0.101498462, 0.993134201), Vec3(-0.101948567, 2.4813599e-07, 0.998260677), Vec3(-0.100244105, 0.201462179, 0.977899373), Vec3(-0.199005693, 0.199005842, 0.963182271), Vec3(-0.201461971, 0.100244291, 0.977899373), Vec3(-0.202340558, 2.4813599e-07, 0.982842982), Vec3(-0.0984106734, 0.298469037, 0.952974796), Vec3(-0.096266441, 0.391308725, 0.918992698), Vec3(-0.1911266, 0.386683881, 0.906027019), Vec3(-0.195390984, 0.294890016, 0.939038992), Vec3(-0.289564043, 0.289564103, 0.916101217), Vec3(-0.294889867, 0.195391104, 0.939039111), Vec3(-0.283191413, 0.379697472, 0.884632111), Vec3(-0.371180028, 0.371180028, 0.85521692), Vec3(-0.379697472, 0.283191502, 0.88463217), Vec3(-0.386683881, 0.191126764, 0.906027019), Vec3(-0.298468888, 0.0984108895, 0.952974856), Vec3(-0.29974094, 2.32627499e-07, 0.95764488), Vec3(-0.391308665, 0.0962666571, 0.918992698), Vec3(-0.392937928, 2.32627499e-07, 0.923328996), Vec3(-0.0940981358, 0.479050696, 0.876699269), Vec3(-0.0922051817, 0.561065555, 0.826835513), Vec3(-0.182947114, 0.554494083, 0.816099942), Vec3(-0.18677476, 0.473436892, 0.864822984), Vec3(-0.0908875763, 0.63699466, 0.770023525), Vec3(-0.180269867, 0.629463792, 0.760417819), Vec3(-0.266581625, 0.61747241, 0.744726241), Vec3(-0.270720661, 0.544206321, 0.798437119), Vec3(-0.348251343, 0.601837814, 0.723509133), Vec3(-0.354055971, 0.53109169, 0.774298251), Vec3(-0.27659288, 0.464806199, 0.845221162), Vec3(-0.36218971, 0.45405376, 0.818292499), Vec3(-0.442427367, 0.442427367, 0.784516633), Vec3(-0.454053819, 0.36218971, 0.818292499), Vec3(-0.431634635, 0.516483366, 0.744235992), Vec3(-0.502360404, 0.502360225, 0.708672285), Vec3(-0.516483486, 0.431634665, 0.744235873), Vec3(-0.531091928, 0.354055911, 0.774298131), Vec3(-0.423737496, 0.583823442, 0.697529018), Vec3(-0.491493374, 0.565391123, 0.667616665), Vec3(-0.549794078, 0.54979372, 0.634344637), Vec3(-0.565391421, 0.491493136, 0.667616665), Vec3(-0.58382374, 0.423737377, 0.697528839), Vec3(-0.601838171, 0.348251283, 0.723508835), Vec3(-0.479050815, 0.0940983519, 0.876699269), Vec3(-0.481007755, 2.17118995e-07, 0.880668581), Vec3(-0.473437011, 0.186774969, 0.864822865), Vec3(-0.554494262, 0.182947293, 0.816099882), Vec3(-0.561065674, 0.092205368, 0.826835394), Vec3(-0.563331485, 2.01610504e-07, 0.830428481), Vec3(-0.464806318, 0.276593, 0.845221043), Vec3(-0.54420656, 0.27072075, 0.79843688), Vec3(-0.617472708, 0.266581595, 0.744726002), Vec3(-0.62946403, 0.180269971, 0.76041764), Vec3(-0.636994958, 0.090887703, 0.770023227), Vec3(-0.639564753, 2.01610504e-07, 0.773250937), Vec3(-0.0908875465, -0.636995137, 0.770023167), Vec3(-0.0904092193, -0.706677854, 0.706677914), Vec3(-0.0922052115, -0.561065853, 0.826835275), Vec3(-0.182947204, -0.554494381, 0.816099763), Vec3(-0.180269867, -0.629464209, 0.760417461), Vec3(-0.179295614, -0.698144555, 0.698144615), Vec3(-0.0940981656, -0.479050905, 0.876699209), Vec3(-0.0962664858, -0.391308635, 0.918992698), Vec3(-0.19112663, -0.386683881, 0.906027019), Vec3(-0.186774835, -0.473437041, 0.864822865), Vec3(-0.27659288, -0.464806288, 0.845221043), Vec3(-0.27072072, -0.544206679, 0.79843688), Vec3(-0.283191532, -0.379697353, 0.88463223), Vec3(-0.371180117, -0.371179938, 0.85521692), Vec3(-0.36218977, -0.454053789, 0.818292439), Vec3(-0.354055941, -0.531091988, 0.774298072), Vec3(-0.266581714, -0.617472947, 0.744725883), Vec3(-0.265069664, -0.684358895, 0.684358835), Vec3(-0.348251343, -0.601838231, 0.723508775), Vec3(-0.346116126, -0.666016817, 0.666016996), Vec3(-0.0984107032, -0.298468769, 0.952974916), Vec3(-0.100244135, -0.201461777, 0.977899432), Vec3(-0.199005708, -0.199005425, 0.96318233), Vec3(-0.195390999, -0.294889748, 0.939039171), Vec3(-0.101498291, -0.101498, 0.993134201), Vec3(-0.201461986, -0.100243844, 0.977899432), Vec3(-0.298468888, -0.0984104276, 0.952974856), Vec3(-0.294889897, -0.195390776, 0.939039171), Vec3(-0.391308755, -0.0962661728, 0.918992698), Vec3(-0.386683851, -0.191126391, 0.906027079), Vec3(-0.289564043, -0.289563864, 0.916101336), Vec3(-0.379697382, -0.283191234, 0.88463223), Vec3(-0.464806348, -0.276592731, 0.845221102), Vec3(-0.454053909, -0.362189621, 0.818292558), Vec3(-0.473437041, -0.186774552, 0.864823043), Vec3(-0.554494262, -0.18294692, 0.816099882), Vec3(-0.54420656, -0.270720541, 0.798437059), Vec3(-0.531091988, -0.354055822, 0.774298131), Vec3(-0.479050845, -0.0940979198, 0.876699209), Vec3(-0.561065853, -0.0922049507, 0.826835334), Vec3(-0.636994958, -0.0908873305, 0.770023286), Vec3(-0.62946403, -0.180269644, 0.760417759), Vec3(-0.617472768, -0.266581416, 0.744726062), Vec3(-0.601838231, -0.348251253, 0.723508835), Vec3(-0.423737496, -0.583823979, 0.697528601), Vec3(-0.420784026, -0.644162238, 0.644162357), Vec3(-0.431634754, -0.516483605, 0.744235754), Vec3(-0.502360404, -0.502360463, 0.708672225), Vec3(-0.491493255, -0.565391421, 0.667616487), Vec3(-0.487256259, -0.620292068, 0.620292246), Vec3(-0.442427456, -0.442427367, 0.784516513), Vec3(-0.516483486, -0.431634694, 0.744235814), Vec3(-0.583823919, -0.423737496, 0.69752866), Vec3(-0.565391362, -0.491493344, 0.667616546), Vec3(-0.549794018, -0.549794137, 0.634344339), Vec3(-0.542915404, -0.596732974, 0.596733093), Vec3(0.549793899, -0.634344399, 0.549794137), Vec3(0.491493315, -0.667616367, 0.565391481), Vec3(0.502360404, -0.708672225, 0.502360523), Vec3(0.565391362, -0.667616427, 0.491493434), Vec3(0.423737496, -0.697528601, 0.583824039), Vec3(0.348251343, -0.723508596, 0.60183841), Vec3(0.354056001, -0.774298012, 0.531092048), Vec3(0.431634724, -0.744235694, 0.516483605), Vec3(0.442427367, -0.784516573, 0.442427427), Vec3(0.516483545, -0.744235754, 0.431634724), Vec3(0.3621898, -0.818292499, 0.454053938), Vec3(0.371180087, -0.855216861, 0.371180058), Vec3(0.454053879, -0.818292439, 0.36218977), Vec3(0.531091988, -0.774298072, 0.354055911), Vec3(0.58382386, -0.69752866, 0.423737526), Vec3(0.601838291, -0.723508775, 0.348251313), Vec3(0.266581625, -0.744725823, 0.617472947), Vec3(0.180269808, -0.760417402, 0.629464328), Vec3(0.182947159, -0.816099703, 0.554494441), Vec3(0.27072072, -0.798436821, 0.544206679), Vec3(0.0908875018, -0.770023048, 0.636995256), Vec3(-3.10169987e-08, -0.773250759, 0.639564931), Vec3(-3.10169987e-08, -0.830428481, 0.563331664), Vec3(0.092205137, -0.826835215, 0.561066031), Vec3(0.0940980837, -0.876699209, 0.479050905), Vec3(0.18677479, -0.864822805, 0.47343719), Vec3(-3.10169987e-08, -0.880668461, 0.481007904), Vec3(-3.10169987e-08, -0.923328996, 0.392937899), Vec3(0.0962664112, -0.918992698, 0.391308665), Vec3(0.1911266, -0.906026959, 0.386683911), Vec3(0.276592851, -0.845220923, 0.464806437), Vec3(0.283191442, -0.88463217, 0.379697472), Vec3(0.289564043, -0.916101336, 0.289564013), Vec3(0.379697472, -0.88463217, 0.283191383), Vec3(0.19539094, -0.939039111, 0.294889778), Vec3(0.199005663, -0.96318233, 0.199005574), Vec3(0.294889897, -0.939039111, 0.19539085), Vec3(0.386683941, -0.906027019, 0.191126525), Vec3(0.0984106287, -0.952974856, 0.298468828), Vec3(-3.10169987e-08, -0.957644999, 0.299740911), Vec3(-3.10169987e-08, -0.982842982, 0.202340469), Vec3(0.10024406, -0.977899432, 0.201461852), Vec3(0.101498216, -0.993134201, 0.10149809), Vec3(0.201462016, -0.977899432, 0.100243933), Vec3(-3.10169987e-08, -0.998260677, 0.101948351), Vec3(-3.10169987e-08, -1.00345218, -1.70593495e-07), Vec3(0.101948477, -0.998260677, -1.70593495e-07), Vec3(0.202340543, -0.982842922, -1.55085004e-07), Vec3(0.298468888, -0.952974856, 0.098410517), Vec3(0.391308665, -0.918992698, 0.0962662846), Vec3(0.299740881, -0.957644939, -1.55085004e-07), Vec3(0.392937899, -0.923329055, -1.55085004e-07), Vec3(0.617472827, -0.744725943, 0.266581565), Vec3(0.544206619, -0.79843688, 0.270720661), Vec3(0.554494262, -0.816099882, 0.18294704), Vec3(0.62946403, -0.76041764, 0.180269703), Vec3(0.464806318, -0.845221102, 0.276592851), Vec3(0.47343713, -0.864822805, 0.186774716), Vec3(0.479050905, -0.876699209, 0.0940979943), Vec3(0.561065793, -0.826835334, 0.0922050104), Vec3(0.481007755, -0.880668581, -1.55085004e-07), Vec3(0.563331485, -0.830428481, -1.55085004e-07), Vec3(0.636995018, -0.770023227, 0.0908873901), Vec3(0.639564753, -0.773250937, -1.55085004e-07), Vec3(-0.0908875614, -0.770023048, 0.636995256), Vec3(-0.180269912, -0.760417342, 0.629464328), Vec3(-0.182947204, -0.816099644, 0.55449456), Vec3(-0.0922052115, -0.826835215, 0.561066031), Vec3(-0.266581744, -0.744725883, 0.617472947), Vec3(-0.348251343, -0.723508656, 0.60183847), Vec3(-0.354055941, -0.774297953, 0.531092167), Vec3(-0.27072072, -0.798436761, 0.544206738), Vec3(-0.276592851, -0.845220923, 0.464806378), Vec3(-0.18677485, -0.864822865, 0.47343722), Vec3(-0.3621898, -0.818292499, 0.454053938), Vec3(-0.371180028, -0.85521692, 0.371180028), Vec3(-0.283191472, -0.884632111, 0.379697442), Vec3(-0.19112663, -0.906027019, 0.386683881), Vec3(-0.0940981805, -0.87669915, 0.479050905), Vec3(-0.0962664708, -0.918992698, 0.391308635), Vec3(-0.423737466, -0.697528541, 0.583824039), Vec3(-0.491493255, -0.667616367, 0.565391541), Vec3(-0.502360344, -0.708672225, 0.502360582), Vec3(-0.431634635, -0.744235694, 0.516483665), Vec3(-0.549793899, -0.634344339, 0.549794137), Vec3(-0.565391302, -0.667616546, 0.491493434), Vec3(-0.583823919, -0.69752866, 0.423737526), Vec3(-0.516483605, -0.744235694, 0.431634754), Vec3(-0.601838231, -0.723508835, 0.348251343), Vec3(-0.531091988, -0.774298072, 0.354055941), Vec3(-0.442427367, -0.784516513, 0.442427486), Vec3(-0.454053909, -0.818292499, 0.36218974), Vec3(-0.464806318, -0.845221102, 0.276592821), Vec3(-0.379697472, -0.88463217, 0.283191353), Vec3(-0.54420656, -0.79843694, 0.270720631), Vec3(-0.554494321, -0.816099823, 0.18294704), Vec3(-0.473437101, -0.864822984, 0.186774671), Vec3(-0.386683881, -0.906027079, 0.191126481), Vec3(-0.617472827, -0.744726002, 0.266581595), Vec3(-0.62946409, -0.760417521, 0.180269763), Vec3(-0.636995077, -0.770023167, 0.0908874273), Vec3(-0.561065972, -0.826835215, 0.0922050104), Vec3(-0.639564753, -0.773250937, -1.24067995e-07), Vec3(-0.563331485, -0.830428481, -1.24067995e-07), Vec3(-0.479050905, -0.87669915, 0.0940979943), Vec3(-0.391308725, -0.918992698, 0.0962662548), Vec3(-0.481007844, -0.880668521, -1.395765e-07), Vec3(-0.392937988, -0.923328996, -1.55085004e-07), Vec3(-0.0984107032, -0.952974856, 0.298468858), Vec3(-0.195390984, -0.939039111, 0.294889748), Vec3(-0.199005768, -0.96318233, 0.199005574), Vec3(-0.100244105, -0.977899432, 0.201461866), Vec3(-0.289564013, -0.916101277, 0.289564013), Vec3(-0.294889957, -0.939039111, 0.195390835), Vec3(-0.298468947, -0.952974856, 0.0984105021), Vec3(-0.20146203, -0.977899432, 0.100243933), Vec3(-0.29974094, -0.957644939, -1.55085004e-07), Vec3(-0.202340558, -0.982842982, -1.70593495e-07), Vec3(-0.101498291, -0.993134201, 0.10149809), Vec3(-0.101948567, -0.998260677, -1.70593495e-07), Vec3(-0.101498291, -0.993134201, -0.101498388), Vec3(-3.10169987e-08, -0.998260498, -0.101948693), Vec3(-0.201461956, -0.977899432, -0.100244217), Vec3(-0.199005648, -0.963182271, -0.199005738), Vec3(-0.100244075, -0.977899373, -0.201462045), Vec3(-3.10169987e-08, -0.982842982, -0.202340662), Vec3(-0.298468828, -0.952974916, -0.0984107703), Vec3(-0.391308695, -0.918992698, -0.0962665603), Vec3(-0.386683851, -0.906027019, -0.19112666), Vec3(-0.294889838, -0.939039111, -0.195391014), Vec3(-0.289564103, -0.916101336, -0.289564103), Vec3(-0.195390955, -0.939039111, -0.294889867), Vec3(-0.379697442, -0.884632111, -0.283191472), Vec3(-0.371180028, -0.85521692, -0.371180028), Vec3(-0.283191413, -0.88463217, -0.379697323), Vec3(-0.19112657, -0.906027079, -0.386683792), Vec3(-0.0984106734, -0.952974856, -0.298468918), Vec3(-3.10169987e-08, -0.957644999, -0.29974094), Vec3(-0.096266441, -0.918992758, -0.391308576), Vec3(-3.10169987e-08, -0.923329055, -0.392937839), Vec3(-0.479050845, -0.876699209, -0.0940982699), Vec3(-0.561065793, -0.826835334, -0.0922052786), Vec3(-0.554494262, -0.816099823, -0.182947204), Vec3(-0.473437011, -0.864822924, -0.186774909), Vec3(-0.636995018, -0.770023227, -0.0908876434), Vec3(-0.62946403, -0.76041764, -0.180269882), Vec3(-0.617472768, -0.744726002, -0.266581684), Vec3(-0.5442065, -0.798436999, -0.27072072), Vec3(-0.601838231, -0.723508835, -0.348251313), Vec3(-0.531091928, -0.774298072, -0.354055882), Vec3(-0.464806318, -0.845221043, -0.27659294), Vec3(-0.454053849, -0.818292558, -0.36218971), Vec3(-0.442427367, -0.784516633, -0.442427307), Vec3(-0.36218971, -0.818292618, -0.454053819), Vec3(-0.516483486, -0.744235873, -0.431634605), Vec3(-0.502360404, -0.708672285, -0.502360284), Vec3(-0.431634754, -0.744235873, -0.516483366), Vec3(-0.354055941, -0.774298251, -0.53109175), Vec3(-0.58382386, -0.69752866, -0.423737407), Vec3(-0.565391362, -0.667616606, -0.491493165), Vec3(-0.549794137, -0.634344578, -0.54979378), Vec3(-0.491493464, -0.667616665, -0.565391064), Vec3(-0.423737496, -0.697528958, -0.583823621), Vec3(-0.348251373, -0.723509073, -0.601837933), Vec3(-0.0940981507, -0.876699269, -0.479050696), Vec3(-3.10169987e-08, -0.88066864, -0.481007576), Vec3(-0.18677482, -0.864822924, -0.473436952), Vec3(-0.182947159, -0.816099942, -0.554494083), Vec3(-0.0922051966, -0.826835513, -0.561065555), Vec3(-3.10169987e-08, -0.83042872, -0.563331246), Vec3(-0.27659288, -0.845221043, -0.464806169), Vec3(-0.27072072, -0.798437119, -0.544206262), Vec3(-0.266581744, -0.744726181, -0.61747247), Vec3(-0.180269912, -0.760417759, -0.629463851), Vec3(-0.0908875614, -0.770023465, -0.63699472), Vec3(-3.10169987e-08, -0.773251176, -0.639564395), Vec3(0.636994958, -0.770023286, -0.0908876583), Vec3(0.561065793, -0.826835334, -0.0922053084), Vec3(0.554494262, -0.816099882, -0.182947204), Vec3(0.62946403, -0.76041764, -0.180269912), Vec3(0.479050815, -0.876699209, -0.094098255), Vec3(0.391308635, -0.918992698, -0.0962665454), Vec3(0.386683822, -0.906027019, -0.19112666), Vec3(0.473436981, -0.864822924, -0.18677488), Vec3(0.464806199, -0.845221102, -0.27659291), Vec3(0.5442065, -0.79843694, -0.27072072), Vec3(0.379697382, -0.88463223, -0.283191532), Vec3(0.371179968, -0.85521698, -0.371180058), Vec3(0.454053849, -0.818292618, -0.362189621), Vec3(0.531091928, -0.774298072, -0.354055911), Vec3(0.617472768, -0.744726002, -0.266581744), Vec3(0.601838171, -0.723508954, -0.348251313), Vec3(0.298468769, -0.952974856, -0.0984108001), Vec3(0.201461941, -0.977899432, -0.100244246), Vec3(0.199005619, -0.96318233, -0.199005738), Vec3(0.294889808, -0.939039111, -0.195391014), Vec3(0.101498187, -0.993134201, -0.101498403), Vec3(0.100244015, -0.977899373, -0.201462075), Vec3(0.0984106138, -0.952974856, -0.298468888), Vec3(0.19539091, -0.939039052, -0.294889838), Vec3(0.0962663591, -0.918992758, -0.391308576), Vec3(0.19112654, -0.906027079, -0.386683851), Vec3(0.289563954, -0.916101277, -0.289564013), Vec3(0.283191353, -0.88463217, -0.379697323), Vec3(0.27659288, -0.845221102, -0.464806199), Vec3(0.362189621, -0.818292618, -0.454053819), Vec3(0.18677476, -0.864822984, -0.473436892), Vec3(0.182947084, -0.816099942, -0.554494083), Vec3(0.270720631, -0.798437119, -0.544206381), Vec3(0.354055911, -0.774298251, -0.531091809), Vec3(0.0940980837, -0.876699328, -0.479050636), Vec3(0.092205137, -0.826835573, -0.561065495), Vec3(0.0908875167, -0.770023525, -0.63699466), Vec3(0.180269793, -0.760417819, -0.629463851), Vec3(0.266581625, -0.744726241, -0.617472529), Vec3(0.348251313, -0.723509073, -0.601837933), Vec3(0.5838238, -0.697528839, -0.423737377), Vec3(0.516483426, -0.744236052, -0.431634575), Vec3(0.502360344, -0.708672345, -0.502360284), Vec3(0.565391302, -0.667616665, -0.491493255), Vec3(0.442427307, -0.784516633, -0.442427307), Vec3(0.431634635, -0.744235992, -0.516483366), Vec3(0.423737496, -0.697528958, -0.583823562), Vec3(0.491493404, -0.667616665, -0.565391123), Vec3(0.549794078, -0.634344697, -0.54979378)}, + ["orientation"] = "left-handed", + ["part_list"] = { "sphere"}, + ["part_face_count_list"] = { 1536}, + ["part_face_indices"] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535}, + ["uv_list"] = { Vec2(0.39546001, 0.467680007), Vec2(0.390460014, 0.456429988), Vec2(0.399419993, 0.454439998), Vec2(0.400750011, 0.463099986), Vec2(0.390460014, 0.456429988), Vec2(0.386909992, 0.442909986), Vec2(0.397700012, 0.441610008), Vec2(0.399419993, 0.454439998), Vec2(0.380849987, 0.460709989), Vec2(0.375930011, 0.445899993), Vec2(0.386909992, 0.442909986), Vec2(0.390460014, 0.456429988), Vec2(0.38745001, 0.474099994), Vec2(0.380849987, 0.460709989), Vec2(0.390460014, 0.456429988), Vec2(0.39546001, 0.467680007), Vec2(0.386909992, 0.442909986), Vec2(0.384169996, 0.427769989), Vec2(0.395999998, 0.426840007), Vec2(0.397700012, 0.441610008), Vec2(0.384169996, 0.427769989), Vec2(0.382019997, 0.411460012), Vec2(0.394499987, 0.410809994), Vec2(0.395999998, 0.426840007), Vec2(0.372229993, 0.429919988), Vec2(0.369439989, 0.412990004), Vec2(0.382019997, 0.411460012), Vec2(0.384169996, 0.427769989), Vec2(0.375930011, 0.445899993), Vec2(0.372229993, 0.429919988), Vec2(0.384169996, 0.427769989), Vec2(0.386909992, 0.442909986), Vec2(0.364499986, 0.44986999), Vec2(0.360020012, 0.432889998), Vec2(0.372229993, 0.429919988), Vec2(0.375930011, 0.445899993), Vec2(0.360020012, 0.432889998), Vec2(0.356640011, 0.415170014), Vec2(0.369439989, 0.412990004), Vec2(0.372229993, 0.429919988), Vec2(0.347409993, 0.436250001), Vec2(0.343519986, 0.417690009), Vec2(0.356640011, 0.415170014), Vec2(0.360020012, 0.432889998), Vec2(0.352490008, 0.4542), Vec2(0.347409993, 0.436250001), Vec2(0.360020012, 0.432889998), Vec2(0.364499986, 0.44986999), Vec2(0.377939999, 0.481029987), Vec2(0.370359987, 0.465959996), Vec2(0.380849987, 0.460709989), Vec2(0.38745001, 0.474099994), Vec2(0.370359987, 0.465959996), Vec2(0.364499986, 0.44986999), Vec2(0.375930011, 0.445899993), Vec2(0.380849987, 0.460709989), Vec2(0.358999997, 0.471460015), Vec2(0.352490008, 0.4542), Vec2(0.364499986, 0.44986999), Vec2(0.370359987, 0.465959996), Vec2(0.367210001, 0.48793), Vec2(0.358999997, 0.471460015), Vec2(0.370359987, 0.465959996), Vec2(0.377939999, 0.481029987), Vec2(0.382019997, 0.411460012), Vec2(0.380380005, 0.394320011), Vec2(0.393269986, 0.393909991), Vec2(0.394499987, 0.410809994), Vec2(0.380380005, 0.394320011), Vec2(0.379240006, 0.376610011), Vec2(0.392369986, 0.376419991), Vec2(0.393269986, 0.393909991), Vec2(0.367379993, 0.395350009), Vec2(0.365979999, 0.377200007), Vec2(0.379240006, 0.376610011), Vec2(0.380380005, 0.394320011), Vec2(0.369439989, 0.412990004), Vec2(0.367379993, 0.395350009), Vec2(0.380380005, 0.394320011), Vec2(0.382019997, 0.411460012), Vec2(0.379240006, 0.376610011), Vec2(0.378580004, 0.358559996), Vec2(0.391840011, 0.358579993), Vec2(0.392369986, 0.376419991), Vec2(0.378580004, 0.358559996), Vec2(0.378399998, 0.340350002), Vec2(0.391689986, 0.340579987), Vec2(0.391840011, 0.358579993), Vec2(0.365179986, 0.358729988), Vec2(0.364960015, 0.340110004), Vec2(0.378399998, 0.340350002), Vec2(0.378580004, 0.358559996), Vec2(0.365979999, 0.377200007), Vec2(0.365179986, 0.358729988), Vec2(0.378580004, 0.358559996), Vec2(0.379240006, 0.376610011), Vec2(0.352490008, 0.378089994), Vec2(0.351550013, 0.359059989), Vec2(0.365179986, 0.358729988), Vec2(0.365979999, 0.377200007), Vec2(0.351550013, 0.359059989), Vec2(0.351289988, 0.339890003), Vec2(0.364960015, 0.340110004), Vec2(0.365179986, 0.358729988), Vec2(0.337650001, 0.359490007), Vec2(0.337339997, 0.33969), Vec2(0.351289988, 0.339890003), Vec2(0.351550013, 0.359059989), Vec2(0.338739991, 0.379180014), Vec2(0.337650001, 0.359490007), Vec2(0.351550013, 0.359059989), Vec2(0.352490008, 0.378089994), Vec2(0.356640011, 0.415170014), Vec2(0.354169995, 0.39684999), Vec2(0.367379993, 0.395350009), Vec2(0.369439989, 0.412990004), Vec2(0.354169995, 0.39684999), Vec2(0.352490008, 0.378089994), Vec2(0.365979999, 0.377200007), Vec2(0.367379993, 0.395350009), Vec2(0.34066999, 0.398629993), Vec2(0.338739991, 0.379180014), Vec2(0.352490008, 0.378089994), Vec2(0.354169995, 0.39684999), Vec2(0.343519986, 0.417690009), Vec2(0.34066999, 0.398629993), Vec2(0.354169995, 0.39684999), Vec2(0.356640011, 0.415170014), Vec2(0.330040008, 0.420289993), Vec2(0.326860011, 0.400489986), Vec2(0.34066999, 0.398629993), Vec2(0.343519986, 0.417690009), Vec2(0.326860011, 0.400489986), Vec2(0.324690014, 0.380349994), Vec2(0.338739991, 0.379180014), Vec2(0.34066999, 0.398629993), Vec2(0.312739998, 0.402269989), Vec2(0.310350001, 0.381489992), Vec2(0.324690014, 0.380349994), Vec2(0.326860011, 0.400489986), Vec2(0.316179991, 0.422729999), Vec2(0.312739998, 0.402269989), Vec2(0.326860011, 0.400489986), Vec2(0.330040008, 0.420289993), Vec2(0.324690014, 0.380349994), Vec2(0.323460013, 0.359990001), Vec2(0.337650001, 0.359490007), Vec2(0.338739991, 0.379180014), Vec2(0.323460013, 0.359990001), Vec2(0.323089987, 0.339509994), Vec2(0.337339997, 0.33969), Vec2(0.337650001, 0.359490007), Vec2(0.308970004, 0.360480011), Vec2(0.308560014, 0.339359999), Vec2(0.323089987, 0.339509994), Vec2(0.323460013, 0.359990001), Vec2(0.310350001, 0.381489992), Vec2(0.308970004, 0.360480011), Vec2(0.323460013, 0.359990001), Vec2(0.324690014, 0.380349994), Vec2(0.295740008, 0.382490009), Vec2(0.294230014, 0.360920012), Vec2(0.308970004, 0.360480011), Vec2(0.310350001, 0.381489992), Vec2(0.294230014, 0.360920012), Vec2(0.293760002, 0.339240015), Vec2(0.308560014, 0.339359999), Vec2(0.308970004, 0.360480011), Vec2(0.279269993, 0.361259997), Vec2(0.278759986, 0.339150012), Vec2(0.293760002, 0.339240015), Vec2(0.294230014, 0.360920012), Vec2(0.280889988, 0.383249998), Vec2(0.279269993, 0.361259997), Vec2(0.294230014, 0.360920012), Vec2(0.295740008, 0.382490009), Vec2(0.301970005, 0.42482999), Vec2(0.298310012, 0.403829992), Vec2(0.312739998, 0.402269989), Vec2(0.316179991, 0.422729999), Vec2(0.298310012, 0.403829992), Vec2(0.295740008, 0.382490009), Vec2(0.310350001, 0.381489992), Vec2(0.312739998, 0.402269989), Vec2(0.283609986, 0.405010015), Vec2(0.280889988, 0.383249998), Vec2(0.295740008, 0.382490009), Vec2(0.298310012, 0.403829992), Vec2(0.287420005, 0.426429987), Vec2(0.283609986, 0.405010015), Vec2(0.298310012, 0.403829992), Vec2(0.301970005, 0.42482999), Vec2(0.355369985, 0.494399995), Vec2(0.346780002, 0.476749986), Vec2(0.358999997, 0.471460015), Vec2(0.367210001, 0.48793), Vec2(0.346780002, 0.476749986), Vec2(0.339839995, 0.45848), Vec2(0.352490008, 0.4542), Vec2(0.358999997, 0.471460015), Vec2(0.333739996, 0.481489986), Vec2(0.326559991, 0.462370008), Vec2(0.339839995, 0.45848), Vec2(0.346780002, 0.476749986), Vec2(0.342489988, 0.500119984), Vec2(0.333739996, 0.481489986), Vec2(0.346780002, 0.476749986), Vec2(0.355369985, 0.494399995), Vec2(0.339839995, 0.45848), Vec2(0.334320009, 0.439639986), Vec2(0.347409993, 0.436250001), Vec2(0.352490008, 0.4542), Vec2(0.334320009, 0.439639986), Vec2(0.330040008, 0.420289993), Vec2(0.343519986, 0.417690009), Vec2(0.347409993, 0.436250001), Vec2(0.320760012, 0.442779988), Vec2(0.316179991, 0.422729999), Vec2(0.330040008, 0.420289993), Vec2(0.334320009, 0.439639986), Vec2(0.326559991, 0.462370008), Vec2(0.320760012, 0.442779988), Vec2(0.334320009, 0.439639986), Vec2(0.339839995, 0.45848), Vec2(0.312700003, 0.465640008), Vec2(0.306739986, 0.445450008), Vec2(0.320760012, 0.442779988), Vec2(0.326559991, 0.462370008), Vec2(0.306739986, 0.445450008), Vec2(0.301970005, 0.42482999), Vec2(0.316179991, 0.422729999), Vec2(0.320760012, 0.442779988), Vec2(0.292309999, 0.447459996), Vec2(0.287420005, 0.426429987), Vec2(0.301970005, 0.42482999), Vec2(0.306739986, 0.445450008), Vec2(0.298299998, 0.468100011), Vec2(0.292309999, 0.447459996), Vec2(0.306739986, 0.445450008), Vec2(0.312700003, 0.465640008), Vec2(0.328619987, 0.504840016), Vec2(0.319940001, 0.485419989), Vec2(0.333739996, 0.481489986), Vec2(0.342489988, 0.500119984), Vec2(0.319940001, 0.485419989), Vec2(0.312700003, 0.465640008), Vec2(0.326559991, 0.462370008), Vec2(0.333739996, 0.481489986), Vec2(0.305429995, 0.488370001), Vec2(0.298299998, 0.468100011), Vec2(0.312700003, 0.465640008), Vec2(0.319940001, 0.485419989), Vec2(0.313829988, 0.508350015), Vec2(0.305429995, 0.488370001), Vec2(0.319940001, 0.485419989), Vec2(0.328619987, 0.504840016), Vec2(0.378399998, 0.340350002), Vec2(0.378690004, 0.322140008), Vec2(0.391930014, 0.32258001), Vec2(0.391689986, 0.340579987), Vec2(0.378690004, 0.322140008), Vec2(0.379449993, 0.304089993), Vec2(0.392560005, 0.304740012), Vec2(0.391930014, 0.32258001), Vec2(0.365289986, 0.321500003), Vec2(0.3662, 0.303050011), Vec2(0.379449993, 0.304089993), Vec2(0.378690004, 0.322140008), Vec2(0.364960015, 0.340110004), Vec2(0.365289986, 0.321500003), Vec2(0.378690004, 0.322140008), Vec2(0.378399998, 0.340350002), Vec2(0.379449993, 0.304089993), Vec2(0.380699992, 0.28639999), Vec2(0.393559992, 0.28727001), Vec2(0.392560005, 0.304740012), Vec2(0.380699992, 0.28639999), Vec2(0.382450014, 0.26929), Vec2(0.394899994, 0.27037999), Vec2(0.393559992, 0.28727001), Vec2(0.367720008, 0.284920007), Vec2(0.369899988, 0.267320007), Vec2(0.382450014, 0.26929), Vec2(0.380699992, 0.28639999), Vec2(0.3662, 0.303050011), Vec2(0.367720008, 0.284920007), Vec2(0.380699992, 0.28639999), Vec2(0.379449993, 0.304089993), Vec2(0.352730006, 0.301719993), Vec2(0.354519993, 0.282999992), Vec2(0.367720008, 0.284920007), Vec2(0.3662, 0.303050011), Vec2(0.354519993, 0.282999992), Vec2(0.357120007, 0.26473999), Vec2(0.369899988, 0.267320007), Vec2(0.367720008, 0.284920007), Vec2(0.341039985, 0.280840009), Vec2(0.344020009, 0.261860013), Vec2(0.357120007, 0.26473999), Vec2(0.354519993, 0.282999992), Vec2(0.338979989, 0.30024001), Vec2(0.341039985, 0.280840009), Vec2(0.354519993, 0.282999992), Vec2(0.352730006, 0.301719993), Vec2(0.351289988, 0.339890003), Vec2(0.351669997, 0.320740014), Vec2(0.365289986, 0.321500003), Vec2(0.364960015, 0.340110004), Vec2(0.351669997, 0.320740014), Vec2(0.352730006, 0.301719993), Vec2(0.3662, 0.303050011), Vec2(0.365289986, 0.321500003), Vec2(0.337769985, 0.319900006), Vec2(0.338979989, 0.30024001), Vec2(0.352730006, 0.301719993), Vec2(0.351669997, 0.320740014), Vec2(0.337339997, 0.33969), Vec2(0.337769985, 0.319900006), Vec2(0.351669997, 0.320740014), Vec2(0.351289988, 0.339890003), Vec2(0.382450014, 0.26929), Vec2(0.384719998, 0.253010005), Vec2(0.396519989, 0.254370004), Vec2(0.394899994, 0.27037999), Vec2(0.384719998, 0.253010005), Vec2(0.387580007, 0.237920001), Vec2(0.398339987, 0.239610001), Vec2(0.396519989, 0.254370004), Vec2(0.37281999, 0.250459999), Vec2(0.376650006, 0.234569997), Vec2(0.387580007, 0.237920001), Vec2(0.384719998, 0.253010005), Vec2(0.369899988, 0.267320007), Vec2(0.37281999, 0.250459999), Vec2(0.384719998, 0.253010005), Vec2(0.382450014, 0.26929), Vec2(0.387580007, 0.237920001), Vec2(0.391250014, 0.224490002), Vec2(0.400180012, 0.226799995), Vec2(0.398339987, 0.239610001), Vec2(0.391250014, 0.224490002), Vec2(0.396369994, 0.213410005), Vec2(0.401600003, 0.218140006), Vec2(0.400180012, 0.226799995), Vec2(0.381689996, 0.219909996), Vec2(0.388429999, 0.206740007), Vec2(0.396369994, 0.213410005), Vec2(0.391250014, 0.224490002), Vec2(0.376650006, 0.234569997), Vec2(0.381689996, 0.219909996), Vec2(0.391250014, 0.224490002), Vec2(0.387580007, 0.237920001), Vec2(0.365249991, 0.23026), Vec2(0.371250004, 0.21435), Vec2(0.381689996, 0.219909996), Vec2(0.376650006, 0.234569997), Vec2(0.371250004, 0.21435), Vec2(0.378960013, 0.199540004), Vec2(0.388429999, 0.206740007), Vec2(0.381689996, 0.219909996), Vec2(0.359890014, 0.208550006), Vec2(0.368229985, 0.192359999), Vec2(0.378960013, 0.199540004), Vec2(0.371250004, 0.21435), Vec2(0.353249997, 0.225600004), Vec2(0.359890014, 0.208550006), Vec2(0.371250004, 0.21435), Vec2(0.365249991, 0.23026), Vec2(0.357120007, 0.26473999), Vec2(0.360639989, 0.247109994), Vec2(0.37281999, 0.250459999), Vec2(0.369899988, 0.267320007), Vec2(0.360639989, 0.247109994), Vec2(0.365249991, 0.23026), Vec2(0.376650006, 0.234569997), Vec2(0.37281999, 0.250459999), Vec2(0.348030001, 0.243410006), Vec2(0.353249997, 0.225600004), Vec2(0.365249991, 0.23026), Vec2(0.360639989, 0.247109994), Vec2(0.344020009, 0.261860013), Vec2(0.348030001, 0.243410006), Vec2(0.360639989, 0.247109994), Vec2(0.357120007, 0.26473999), Vec2(0.330529988, 0.258929998), Vec2(0.334939986, 0.239710003), Vec2(0.348030001, 0.243410006), Vec2(0.344020009, 0.261860013), Vec2(0.334939986, 0.239710003), Vec2(0.34059, 0.221029997), Vec2(0.353249997, 0.225600004), Vec2(0.348030001, 0.243410006), Vec2(0.321339995, 0.236300007), Vec2(0.327270001, 0.216879994), Vec2(0.34059, 0.221029997), Vec2(0.334939986, 0.239710003), Vec2(0.316650003, 0.256209999), Vec2(0.321339995, 0.236300007), Vec2(0.334939986, 0.239710003), Vec2(0.330529988, 0.258929998), Vec2(0.34059, 0.221029997), Vec2(0.347649992, 0.202979997), Vec2(0.359890014, 0.208550006), Vec2(0.353249997, 0.225600004), Vec2(0.347649992, 0.202979997), Vec2(0.356359988, 0.185609996), Vec2(0.368229985, 0.192359999), Vec2(0.359890014, 0.208550006), Vec2(0.334560007, 0.197980002), Vec2(0.343409985, 0.179619998), Vec2(0.356359988, 0.185609996), Vec2(0.347649992, 0.202979997), Vec2(0.327270001, 0.216879994), Vec2(0.334560007, 0.197980002), Vec2(0.347649992, 0.202979997), Vec2(0.34059, 0.221029997), Vec2(0.313340008, 0.213379994), Vec2(0.320679992, 0.19382), Vec2(0.334560007, 0.197980002), Vec2(0.327270001, 0.216879994), Vec2(0.320679992, 0.19382), Vec2(0.329450011, 0.174649999), Vec2(0.343409985, 0.179619998), Vec2(0.334560007, 0.197980002), Vec2(0.30607, 0.190669999), Vec2(0.314539999, 0.170929998), Vec2(0.329450011, 0.174649999), Vec2(0.320679992, 0.19382), Vec2(0.298839986, 0.21074), Vec2(0.30607, 0.190669999), Vec2(0.320679992, 0.19382), Vec2(0.313340008, 0.213379994), Vec2(0.302390009, 0.253879994), Vec2(0.30726999, 0.233400002), Vec2(0.321339995, 0.236300007), Vec2(0.316650003, 0.256209999), Vec2(0.30726999, 0.233400002), Vec2(0.313340008, 0.213379994), Vec2(0.327270001, 0.216879994), Vec2(0.321339995, 0.236300007), Vec2(0.292760015, 0.231199995), Vec2(0.298839986, 0.21074), Vec2(0.313340008, 0.213379994), Vec2(0.30726999, 0.233400002), Vec2(0.287779987, 0.252099991), Vec2(0.292760015, 0.231199995), Vec2(0.30726999, 0.233400002), Vec2(0.302390009, 0.253879994), Vec2(0.323089987, 0.339509994), Vec2(0.323570013, 0.319050014), Vec2(0.337769985, 0.319900006), Vec2(0.337339997, 0.33969), Vec2(0.323570013, 0.319050014), Vec2(0.324930012, 0.298720002), Vec2(0.338979989, 0.30024001), Vec2(0.337769985, 0.319900006), Vec2(0.309089988, 0.318260014), Vec2(0.310579985, 0.297289997), Vec2(0.324930012, 0.298720002), Vec2(0.323570013, 0.319050014), Vec2(0.308560014, 0.339359999), Vec2(0.309089988, 0.318260014), Vec2(0.323570013, 0.319050014), Vec2(0.323089987, 0.339509994), Vec2(0.324930012, 0.298720002), Vec2(0.327230006, 0.278640002), Vec2(0.341039985, 0.280840009), Vec2(0.338979989, 0.30024001), Vec2(0.327230006, 0.278640002), Vec2(0.330529988, 0.258929998), Vec2(0.344020009, 0.261860013), Vec2(0.341039985, 0.280840009), Vec2(0.313080013, 0.276569992), Vec2(0.316650003, 0.256209999), Vec2(0.330529988, 0.258929998), Vec2(0.327230006, 0.278640002), Vec2(0.310579985, 0.297289997), Vec2(0.313080013, 0.276569992), Vec2(0.327230006, 0.278640002), Vec2(0.324930012, 0.298720002), Vec2(0.295949996, 0.296050012), Vec2(0.298619986, 0.274780005), Vec2(0.313080013, 0.276569992), Vec2(0.310579985, 0.297289997), Vec2(0.298619986, 0.274780005), Vec2(0.302390009, 0.253879994), Vec2(0.316650003, 0.256209999), Vec2(0.313080013, 0.276569992), Vec2(0.283879995, 0.273420006), Vec2(0.287779987, 0.252099991), Vec2(0.302390009, 0.253879994), Vec2(0.298619986, 0.274780005), Vec2(0.281069994, 0.295100003), Vec2(0.283879995, 0.273420006), Vec2(0.298619986, 0.274780005), Vec2(0.295949996, 0.296050012), Vec2(0.293760002, 0.339240015), Vec2(0.294330001, 0.317570001), Vec2(0.309089988, 0.318260014), Vec2(0.308560014, 0.339359999), Vec2(0.294330001, 0.317570001), Vec2(0.295949996, 0.296050012), Vec2(0.310579985, 0.297289997), Vec2(0.309089988, 0.318260014), Vec2(0.279359996, 0.31705001), Vec2(0.281069994, 0.295100003), Vec2(0.295949996, 0.296050012), Vec2(0.294330001, 0.317570001), Vec2(0.278759986, 0.339150012), Vec2(0.279359996, 0.31705001), Vec2(0.294330001, 0.317570001), Vec2(0.293760002, 0.339240015), Vec2(0.263590008, 0.33908999), Vec2(0.264219999, 0.316720009), Vec2(0.279359996, 0.31705001), Vec2(0.278759986, 0.339150012), Vec2(0.264219999, 0.316720009), Vec2(0.266000003, 0.294499993), Vec2(0.281069994, 0.295100003), Vec2(0.279359996, 0.31705001), Vec2(0.248960003, 0.31656), Vec2(0.250800014, 0.294209987), Vec2(0.266000003, 0.294499993), Vec2(0.264219999, 0.316720009), Vec2(0.248319998, 0.339060009), Vec2(0.248960003, 0.31656), Vec2(0.264219999, 0.316720009), Vec2(0.263590008, 0.33908999), Vec2(0.266000003, 0.294499993), Vec2(0.268900007, 0.272549987), Vec2(0.283879995, 0.273420006), Vec2(0.281069994, 0.295100003), Vec2(0.268900007, 0.272549987), Vec2(0.272879988, 0.250959992), Vec2(0.287779987, 0.252099991), Vec2(0.283879995, 0.273420006), Vec2(0.25376001, 0.272139996), Vec2(0.257770002, 0.250429988), Vec2(0.272879988, 0.250959992), Vec2(0.268900007, 0.272549987), Vec2(0.250800014, 0.294209987), Vec2(0.25376001, 0.272139996), Vec2(0.268900007, 0.272549987), Vec2(0.266000003, 0.294499993), Vec2(0.235520005, 0.294160008), Vec2(0.238519996, 0.272080004), Vec2(0.25376001, 0.272139996), Vec2(0.250800014, 0.294209987), Vec2(0.238519996, 0.272080004), Vec2(0.242550001, 0.250389993), Vec2(0.257770002, 0.250429988), Vec2(0.25376001, 0.272139996), Vec2(0.223269999, 0.272210002), Vec2(0.227329999, 0.250649989), Vec2(0.242550001, 0.250389993), Vec2(0.238519996, 0.272080004), Vec2(0.220210001, 0.294230014), Vec2(0.223269999, 0.272210002), Vec2(0.238519996, 0.272080004), Vec2(0.235520005, 0.294160008), Vec2(0.232999995, 0.339049995), Vec2(0.23364, 0.316529989), Vec2(0.248960003, 0.31656), Vec2(0.248319998, 0.339060009), Vec2(0.23364, 0.316529989), Vec2(0.235520005, 0.294160008), Vec2(0.250800014, 0.294209987), Vec2(0.248960003, 0.31656), Vec2(0.2183, 0.31656), Vec2(0.220210001, 0.294230014), Vec2(0.235520005, 0.294160008), Vec2(0.23364, 0.316529989), Vec2(0.217649996, 0.339060009), Vec2(0.2183, 0.31656), Vec2(0.23364, 0.316529989), Vec2(0.232999995, 0.339049995), Vec2(0.272879988, 0.250959992), Vec2(0.277880013, 0.229790002), Vec2(0.292760015, 0.231199995), Vec2(0.287779987, 0.252099991), Vec2(0.277880013, 0.229790002), Vec2(0.283870012, 0.209040001), Vec2(0.298839986, 0.21074), Vec2(0.292760015, 0.231199995), Vec2(0.262730002, 0.229149997), Vec2(0.268539995, 0.208299994), Vec2(0.283870012, 0.209040001), Vec2(0.277880013, 0.229790002), Vec2(0.257770002, 0.250429988), Vec2(0.262730002, 0.229149997), Vec2(0.277880013, 0.229790002), Vec2(0.272879988, 0.250959992), Vec2(0.283870012, 0.209040001), Vec2(0.290829986, 0.188659996), Vec2(0.30607, 0.190669999), Vec2(0.298839986, 0.21074), Vec2(0.290829986, 0.188659996), Vec2(0.298799992, 0.168559998), Vec2(0.314539999, 0.170929998), Vec2(0.30607, 0.190669999), Vec2(0.27511999, 0.187820002), Vec2(0.282409996, 0.167600006), Vec2(0.298799992, 0.168559998), Vec2(0.290829986, 0.188659996), Vec2(0.268539995, 0.208299994), Vec2(0.27511999, 0.187820002), Vec2(0.290829986, 0.188659996), Vec2(0.283870012, 0.209040001), Vec2(0.253039986, 0.208399996), Vec2(0.259160012, 0.188060001), Vec2(0.27511999, 0.187820002), Vec2(0.268539995, 0.208299994), Vec2(0.259160012, 0.188060001), Vec2(0.265639991, 0.168019995), Vec2(0.282409996, 0.167600006), Vec2(0.27511999, 0.187820002), Vec2(0.243239999, 0.189260006), Vec2(0.248820007, 0.169729993), Vec2(0.265639991, 0.168019995), Vec2(0.259160012, 0.188060001), Vec2(0.23759, 0.209179997), Vec2(0.243239999, 0.189260006), Vec2(0.259160012, 0.188060001), Vec2(0.253039986, 0.208399996), Vec2(0.242550001, 0.250389993), Vec2(0.247439995, 0.229159996), Vec2(0.262730002, 0.229149997), Vec2(0.257770002, 0.250429988), Vec2(0.247439995, 0.229159996), Vec2(0.253039986, 0.208399996), Vec2(0.268539995, 0.208299994), Vec2(0.262730002, 0.229149997), Vec2(0.232189998, 0.229629993), Vec2(0.23759, 0.209179997), Vec2(0.253039986, 0.208399996), Vec2(0.247439995, 0.229159996), Vec2(0.227329999, 0.250649989), Vec2(0.232189998, 0.229629993), Vec2(0.247439995, 0.229159996), Vec2(0.242550001, 0.250389993), Vec2(0.21221, 0.250970006), Vec2(0.217130005, 0.230279997), Vec2(0.232189998, 0.229629993), Vec2(0.227329999, 0.250649989), Vec2(0.217130005, 0.230279997), Vec2(0.222450003, 0.210339993), Vec2(0.23759, 0.209179997), Vec2(0.232189998, 0.229629993), Vec2(0.202399999, 0.230660006), Vec2(0.207870007, 0.211359993), Vec2(0.222450003, 0.210339993), Vec2(0.217130005, 0.230279997), Vec2(0.197249994, 0.251010001), Vec2(0.202399999, 0.230660006), Vec2(0.217130005, 0.230279997), Vec2(0.21221, 0.250970006), Vec2(0.222450003, 0.210339993), Vec2(0.227709994, 0.191129997), Vec2(0.243239999, 0.189260006), Vec2(0.23759, 0.209179997), Vec2(0.227709994, 0.191129997), Vec2(0.232409999, 0.172529995), Vec2(0.248820007, 0.169729993), Vec2(0.243239999, 0.189260006), Vec2(0.213009998, 0.193220004), Vec2(0.216959998, 0.176129997), Vec2(0.232409999, 0.172529995), Vec2(0.227709994, 0.191129997), Vec2(0.207870007, 0.211359993), Vec2(0.213009998, 0.193220004), Vec2(0.227709994, 0.191129997), Vec2(0.222450003, 0.210339993), Vec2(0.194120005, 0.211500004), Vec2(0.199719995, 0.194680005), Vec2(0.213009998, 0.193220004), Vec2(0.207870007, 0.211359993), Vec2(0.199719995, 0.194680005), Vec2(0.203339994, 0.180059999), Vec2(0.216959998, 0.176129997), Vec2(0.213009998, 0.193220004), Vec2(0.188590005, 0.19382), Vec2(0.194059998, 0.183160007), Vec2(0.203339994, 0.180059999), Vec2(0.199719995, 0.194680005), Vec2(0.181370005, 0.209729999), Vec2(0.188590005, 0.19382), Vec2(0.199719995, 0.194680005), Vec2(0.194120005, 0.211500004), Vec2(0.182459995, 0.250360012), Vec2(0.188079998, 0.230199993), Vec2(0.202399999, 0.230660006), Vec2(0.197249994, 0.251010001), Vec2(0.188079998, 0.230199993), Vec2(0.194120005, 0.211500004), Vec2(0.207870007, 0.211359993), Vec2(0.202399999, 0.230660006), Vec2(0.174219996, 0.228259996), Vec2(0.181370005, 0.209729999), Vec2(0.194120005, 0.211500004), Vec2(0.188079998, 0.230199993), Vec2(0.167820007, 0.248590007), Vec2(0.174219996, 0.228259996), Vec2(0.188079998, 0.230199993), Vec2(0.182459995, 0.250360012), Vec2(0.202270001, 0.33908999), Vec2(0.202940002, 0.316599995), Vec2(0.2183, 0.31656), Vec2(0.217649996, 0.339060009), Vec2(0.202940002, 0.316599995), Vec2(0.204899997, 0.294290006), Vec2(0.220210001, 0.294230014), Vec2(0.2183, 0.31656), Vec2(0.187529996, 0.316549987), Vec2(0.189579993, 0.294180006), Vec2(0.204899997, 0.294290006), Vec2(0.202940002, 0.316599995), Vec2(0.186849996, 0.339130014), Vec2(0.187529996, 0.316549987), Vec2(0.202940002, 0.316599995), Vec2(0.202270001, 0.33908999), Vec2(0.204899997, 0.294290006), Vec2(0.208049998, 0.272350013), Vec2(0.223269999, 0.272210002), Vec2(0.220210001, 0.294230014), Vec2(0.208049998, 0.272350013), Vec2(0.21221, 0.250970006), Vec2(0.227329999, 0.250649989), Vec2(0.223269999, 0.272210002), Vec2(0.192880005, 0.27226001), Vec2(0.197249994, 0.251010001), Vec2(0.21221, 0.250970006), Vec2(0.208049998, 0.272350013), Vec2(0.189579993, 0.294180006), Vec2(0.192880005, 0.27226001), Vec2(0.208049998, 0.272350013), Vec2(0.204899997, 0.294290006), Vec2(0.17419, 0.293740004), Vec2(0.177729994, 0.271649987), Vec2(0.192880005, 0.27226001), Vec2(0.189579993, 0.294180006), Vec2(0.177729994, 0.271649987), Vec2(0.182459995, 0.250360012), Vec2(0.197249994, 0.251010001), Vec2(0.192880005, 0.27226001), Vec2(0.162550002, 0.270229995), Vec2(0.167820007, 0.248590007), Vec2(0.182459995, 0.250360012), Vec2(0.177729994, 0.271649987), Vec2(0.158659995, 0.292769998), Vec2(0.162550002, 0.270229995), Vec2(0.177729994, 0.271649987), Vec2(0.17419, 0.293740004), Vec2(0.171299994, 0.339179993), Vec2(0.172020003, 0.316339999), Vec2(0.187529996, 0.316549987), Vec2(0.186849996, 0.339130014), Vec2(0.172020003, 0.316339999), Vec2(0.17419, 0.293740004), Vec2(0.189579993, 0.294180006), Vec2(0.187529996, 0.316549987), Vec2(0.156289995, 0.315869987), Vec2(0.158659995, 0.292769998), Vec2(0.17419, 0.293740004), Vec2(0.172020003, 0.316339999), Vec2(0.155520007, 0.339249998), Vec2(0.156289995, 0.315869987), Vec2(0.172020003, 0.316339999), Vec2(0.171299994, 0.339179993), Vec2(0.298220009, 0.510519981), Vec2(0.290320009, 0.490200013), Vec2(0.305429995, 0.488370001), Vec2(0.313829988, 0.508350015), Vec2(0.290320009, 0.490200013), Vec2(0.28343001, 0.469639987), Vec2(0.298299998, 0.468100011), Vec2(0.305429995, 0.488370001), Vec2(0.27474001, 0.490909994), Vec2(0.268220007, 0.470270008), Vec2(0.28343001, 0.469639987), Vec2(0.290320009, 0.490200013), Vec2(0.281960011, 0.511309981), Vec2(0.27474001, 0.490909994), Vec2(0.290320009, 0.490200013), Vec2(0.298220009, 0.510519981), Vec2(0.28343001, 0.469639987), Vec2(0.277520001, 0.448729992), Vec2(0.292309999, 0.447459996), Vec2(0.298299998, 0.468100011), Vec2(0.277520001, 0.448729992), Vec2(0.272599995, 0.427439988), Vec2(0.287420005, 0.426429987), Vec2(0.292309999, 0.447459996), Vec2(0.262470007, 0.449279994), Vec2(0.257569999, 0.427890003), Vec2(0.272599995, 0.427439988), Vec2(0.277520001, 0.448729992), Vec2(0.268220007, 0.470270008), Vec2(0.262470007, 0.449279994), Vec2(0.277520001, 0.448729992), Vec2(0.28343001, 0.469639987), Vec2(0.252840012, 0.470090002), Vec2(0.24729, 0.449220002), Vec2(0.262470007, 0.449279994), Vec2(0.268220007, 0.470270008), Vec2(0.24729, 0.449220002), Vec2(0.242430001, 0.427890003), Vec2(0.257569999, 0.427890003), Vec2(0.262470007, 0.449279994), Vec2(0.232130006, 0.448720008), Vec2(0.227300003, 0.427630007), Vec2(0.242430001, 0.427890003), Vec2(0.24729, 0.449220002), Vec2(0.237509996, 0.469260007), Vec2(0.232130006, 0.448720008), Vec2(0.24729, 0.449220002), Vec2(0.252840012, 0.470090002), Vec2(0.265329987, 0.510739982), Vec2(0.25891, 0.490559995), Vec2(0.27474001, 0.490909994), Vec2(0.281960011, 0.511309981), Vec2(0.25891, 0.490559995), Vec2(0.252840012, 0.470090002), Vec2(0.268220007, 0.470270008), Vec2(0.27474001, 0.490909994), Vec2(0.24312, 0.489289999), Vec2(0.237509996, 0.469260007), Vec2(0.252840012, 0.470090002), Vec2(0.25891, 0.490559995), Vec2(0.248649999, 0.508920014), Vec2(0.24312, 0.489289999), Vec2(0.25891, 0.490559995), Vec2(0.265329987, 0.510739982), Vec2(0.272599995, 0.427439988), Vec2(0.268700004, 0.405750006), Vec2(0.283609986, 0.405010015), Vec2(0.287420005, 0.426429987), Vec2(0.268700004, 0.405750006), Vec2(0.265859991, 0.383729994), Vec2(0.280889988, 0.383249998), Vec2(0.283609986, 0.405010015), Vec2(0.253609985, 0.406089991), Vec2(0.250699997, 0.383949995), Vec2(0.265859991, 0.383729994), Vec2(0.268700004, 0.405750006), Vec2(0.257569999, 0.427890003), Vec2(0.253609985, 0.406089991), Vec2(0.268700004, 0.405750006), Vec2(0.272599995, 0.427439988), Vec2(0.265859991, 0.383729994), Vec2(0.264149994, 0.361470014), Vec2(0.279269993, 0.361259997), Vec2(0.280889988, 0.383249998), Vec2(0.264149994, 0.361470014), Vec2(0.263590008, 0.33908999), Vec2(0.278759986, 0.339150012), Vec2(0.279269993, 0.361259997), Vec2(0.248919994, 0.361559987), Vec2(0.248319998, 0.339060009), Vec2(0.263590008, 0.33908999), Vec2(0.264149994, 0.361470014), Vec2(0.250699997, 0.383949995), Vec2(0.248919994, 0.361559987), Vec2(0.264149994, 0.361470014), Vec2(0.265859991, 0.383729994), Vec2(0.235469997, 0.383980006), Vec2(0.233620003, 0.361580014), Vec2(0.248919994, 0.361559987), Vec2(0.250699997, 0.383949995), Vec2(0.233620003, 0.361580014), Vec2(0.232999995, 0.339049995), Vec2(0.248319998, 0.339060009), Vec2(0.248919994, 0.361559987), Vec2(0.2183, 0.361570001), Vec2(0.217649996, 0.339060009), Vec2(0.232999995, 0.339049995), Vec2(0.233620003, 0.361580014), Vec2(0.220200002, 0.383929998), Vec2(0.2183, 0.361570001), Vec2(0.233620003, 0.361580014), Vec2(0.235469997, 0.383980006), Vec2(0.242430001, 0.427890003), Vec2(0.238440007, 0.406120002), Vec2(0.253609985, 0.406089991), Vec2(0.257569999, 0.427890003), Vec2(0.238440007, 0.406120002), Vec2(0.235469997, 0.383980006), Vec2(0.250699997, 0.383949995), Vec2(0.253609985, 0.406089991), Vec2(0.223250002, 0.405999988), Vec2(0.220200002, 0.383929998), Vec2(0.235469997, 0.383980006), Vec2(0.238440007, 0.406120002), Vec2(0.227300003, 0.427630007), Vec2(0.223250002, 0.405999988), Vec2(0.238440007, 0.406120002), Vec2(0.242430001, 0.427890003), Vec2(0.212249994, 0.427329987), Vec2(0.208090007, 0.405889988), Vec2(0.223250002, 0.405999988), Vec2(0.227300003, 0.427630007), Vec2(0.208090007, 0.405889988), Vec2(0.204940006, 0.383920014), Vec2(0.220200002, 0.383929998), Vec2(0.223250002, 0.405999988), Vec2(0.192990005, 0.406040013), Vec2(0.189659998, 0.384090006), Vec2(0.204940006, 0.383920014), Vec2(0.208090007, 0.405889988), Vec2(0.197369993, 0.427329987), Vec2(0.192990005, 0.406040013), Vec2(0.208090007, 0.405889988), Vec2(0.212249994, 0.427329987), Vec2(0.204940006, 0.383920014), Vec2(0.202959999, 0.361589998), Vec2(0.2183, 0.361570001), Vec2(0.220200002, 0.383929998), Vec2(0.202959999, 0.361589998), Vec2(0.202270001, 0.33908999), Vec2(0.217649996, 0.339060009), Vec2(0.2183, 0.361570001), Vec2(0.187570006, 0.361710012), Vec2(0.186849996, 0.339130014), Vec2(0.202270001, 0.33908999), Vec2(0.202959999, 0.361589998), Vec2(0.189659998, 0.384090006), Vec2(0.187570006, 0.361710012), Vec2(0.202959999, 0.361589998), Vec2(0.204940006, 0.383920014), Vec2(0.174319997, 0.384629995), Vec2(0.172079995, 0.362019986), Vec2(0.187570006, 0.361710012), Vec2(0.189659998, 0.384090006), Vec2(0.172079995, 0.362019986), Vec2(0.171299994, 0.339179993), Vec2(0.186849996, 0.339130014), Vec2(0.187570006, 0.361710012), Vec2(0.156379998, 0.362619996), Vec2(0.155520007, 0.339249998), Vec2(0.171299994, 0.339179993), Vec2(0.172079995, 0.362019986), Vec2(0.158830002, 0.385720015), Vec2(0.156379998, 0.362619996), Vec2(0.172079995, 0.362019986), Vec2(0.174319997, 0.384629995), Vec2(0.182659999, 0.428039998), Vec2(0.177900001, 0.406729996), Vec2(0.192990005, 0.406040013), Vec2(0.197369993, 0.427329987), Vec2(0.177900001, 0.406729996), Vec2(0.174319997, 0.384629995), Vec2(0.189659998, 0.384090006), Vec2(0.192990005, 0.406040013), Vec2(0.162780002, 0.408250004), Vec2(0.158830002, 0.385720015), Vec2(0.174319997, 0.384629995), Vec2(0.177900001, 0.406729996), Vec2(0.168099999, 0.429879993), Vec2(0.162780002, 0.408250004), Vec2(0.177900001, 0.406729996), Vec2(0.182659999, 0.428039998), Vec2(0.232360005, 0.506039977), Vec2(0.227699995, 0.487379998), Vec2(0.24312, 0.489289999), Vec2(0.248649999, 0.508920014), Vec2(0.227699995, 0.487379998), Vec2(0.222460002, 0.468100011), Vec2(0.237509996, 0.469260007), Vec2(0.24312, 0.489289999), Vec2(0.213090003, 0.485280007), Vec2(0.207969993, 0.467079997), Vec2(0.222460002, 0.468100011), Vec2(0.227699995, 0.487379998), Vec2(0.217020005, 0.502390027), Vec2(0.213090003, 0.485280007), Vec2(0.227699995, 0.487379998), Vec2(0.232360005, 0.506039977), Vec2(0.222460002, 0.468100011), Vec2(0.217160001, 0.448089987), Vec2(0.232130006, 0.448720008), Vec2(0.237509996, 0.469260007), Vec2(0.217160001, 0.448089987), Vec2(0.212249994, 0.427329987), Vec2(0.227300003, 0.427630007), Vec2(0.232130006, 0.448720008), Vec2(0.202509999, 0.447730005), Vec2(0.197369993, 0.427329987), Vec2(0.212249994, 0.427329987), Vec2(0.217160001, 0.448089987), Vec2(0.207969993, 0.467079997), Vec2(0.202509999, 0.447730005), Vec2(0.217160001, 0.448089987), Vec2(0.222460002, 0.468100011), Vec2(0.194309995, 0.466969997), Vec2(0.18829, 0.448229998), Vec2(0.202509999, 0.447730005), Vec2(0.207969993, 0.467079997), Vec2(0.18829, 0.448229998), Vec2(0.182659999, 0.428039998), Vec2(0.197369993, 0.427329987), Vec2(0.202509999, 0.447730005), Vec2(0.174510002, 0.450219989), Vec2(0.168099999, 0.429879993), Vec2(0.182659999, 0.428039998), Vec2(0.18829, 0.448229998), Vec2(0.181649998, 0.468769997), Vec2(0.174510002, 0.450219989), Vec2(0.18829, 0.448229998), Vec2(0.194309995, 0.466969997), Vec2(0.203470007, 0.498450011), Vec2(0.199880004, 0.483830005), Vec2(0.213090003, 0.485280007), Vec2(0.217020005, 0.502390027), Vec2(0.199880004, 0.483830005), Vec2(0.194309995, 0.466969997), Vec2(0.207969993, 0.467079997), Vec2(0.213090003, 0.485280007), Vec2(0.188820004, 0.484710008), Vec2(0.181649998, 0.468769997), Vec2(0.194309995, 0.466969997), Vec2(0.199880004, 0.483830005), Vec2(0.194230005, 0.495350003), Vec2(0.188820004, 0.484710008), Vec2(0.199880004, 0.483830005), Vec2(0.203470007, 0.498450011), Vec2(0.40823999, 0.214259997), Vec2(0.409579992, 0.225759998), Vec2(0.400180012, 0.226799995), Vec2(0.401600003, 0.218140006), Vec2(0.409579992, 0.225759998), Vec2(0.409310013, 0.23928), Vec2(0.398339987, 0.239610001), Vec2(0.400180012, 0.226799995), Vec2(0.420230001, 0.222589999), Vec2(0.420819998, 0.237360001), Vec2(0.409310013, 0.23928), Vec2(0.409579992, 0.225759998), Vec2(0.418190002, 0.208949998), Vec2(0.420230001, 0.222589999), Vec2(0.409579992, 0.225759998), Vec2(0.40823999, 0.214259997), Vec2(0.409310013, 0.23928), Vec2(0.40843001, 0.254330009), Vec2(0.396519989, 0.254370004), Vec2(0.398339987, 0.239610001), Vec2(0.40843001, 0.254330009), Vec2(0.407380015, 0.270489991), Vec2(0.394899994, 0.27037999), Vec2(0.396519989, 0.254370004), Vec2(0.420599997, 0.253129989), Vec2(0.42001, 0.269749999), Vec2(0.407380015, 0.270489991), Vec2(0.40843001, 0.254330009), Vec2(0.420819998, 0.237360001), Vec2(0.420599997, 0.253129989), Vec2(0.40843001, 0.254330009), Vec2(0.409310013, 0.23928), Vec2(0.432960004, 0.234589994), Vec2(0.433129996, 0.251199991), Vec2(0.420599997, 0.253129989), Vec2(0.420819998, 0.237360001), Vec2(0.433129996, 0.251199991), Vec2(0.432870001, 0.268429995), Vec2(0.42001, 0.269749999), Vec2(0.420599997, 0.253129989), Vec2(0.446029991, 0.248999998), Vec2(0.445980012, 0.266840011), Vec2(0.432870001, 0.268429995), Vec2(0.433129996, 0.251199991), Vec2(0.445679992, 0.23161), Vec2(0.446029991, 0.248999998), Vec2(0.433129996, 0.251199991), Vec2(0.432960004, 0.234589994), Vec2(0.429830015, 0.203459993), Vec2(0.432000011, 0.218669996), Vec2(0.420230001, 0.222589999), Vec2(0.418190002, 0.208949998), Vec2(0.432000011, 0.218669996), Vec2(0.432960004, 0.234589994), Vec2(0.420819998, 0.237360001), Vec2(0.420230001, 0.222589999), Vec2(0.444660008, 0.214709997), Vec2(0.445679992, 0.23161), Vec2(0.432960004, 0.234589994), Vec2(0.432000011, 0.218669996), Vec2(0.44264999, 0.198310003), Vec2(0.444660008, 0.214709997), Vec2(0.432000011, 0.218669996), Vec2(0.429830015, 0.203459993), Vec2(0.407380015, 0.270489991), Vec2(0.406410009, 0.287449986), Vec2(0.393559992, 0.28727001), Vec2(0.394899994, 0.27037999), Vec2(0.406410009, 0.287449986), Vec2(0.405629992, 0.304960012), Vec2(0.392560005, 0.304740012), Vec2(0.393559992, 0.28727001), Vec2(0.419349998, 0.287019998), Vec2(0.418760002, 0.304780006), Vec2(0.405629992, 0.304960012), Vec2(0.406410009, 0.287449986), Vec2(0.42001, 0.269749999), Vec2(0.419349998, 0.287019998), Vec2(0.406410009, 0.287449986), Vec2(0.407380015, 0.270489991), Vec2(0.405629992, 0.304960012), Vec2(0.405119985, 0.32280001), Vec2(0.391930014, 0.32258001), Vec2(0.392560005, 0.304740012), Vec2(0.405119985, 0.32280001), Vec2(0.404920012, 0.340810001), Vec2(0.391689986, 0.340579987), Vec2(0.391930014, 0.32258001), Vec2(0.418350011, 0.322829992), Vec2(0.418179989, 0.341030002), Vec2(0.404920012, 0.340810001), Vec2(0.405119985, 0.32280001), Vec2(0.418760002, 0.304780006), Vec2(0.418350011, 0.322829992), Vec2(0.405119985, 0.32280001), Vec2(0.405629992, 0.304960012), Vec2(0.432020009, 0.304309994), Vec2(0.431690007, 0.322710007), Vec2(0.418350011, 0.322829992), Vec2(0.418760002, 0.304780006), Vec2(0.431690007, 0.322710007), Vec2(0.431549996, 0.341219991), Vec2(0.418179989, 0.341030002), Vec2(0.418350011, 0.322829992), Vec2(0.445179999, 0.322490007), Vec2(0.445060015, 0.341390014), Vec2(0.431549996, 0.341219991), Vec2(0.431690007, 0.322710007), Vec2(0.445430011, 0.303689986), Vec2(0.445179999, 0.322490007), Vec2(0.431690007, 0.322710007), Vec2(0.432020009, 0.304309994), Vec2(0.432870001, 0.268429995), Vec2(0.432440013, 0.286170006), Vec2(0.419349998, 0.287019998), Vec2(0.42001, 0.269749999), Vec2(0.432440013, 0.286170006), Vec2(0.432020009, 0.304309994), Vec2(0.418760002, 0.304780006), Vec2(0.419349998, 0.287019998), Vec2(0.445730001, 0.285100013), Vec2(0.445430011, 0.303689986), Vec2(0.432020009, 0.304309994), Vec2(0.432440013, 0.286170006), Vec2(0.445980012, 0.266840011), Vec2(0.445730001, 0.285100013), Vec2(0.432440013, 0.286170006), Vec2(0.432870001, 0.268429995), Vec2(0.459340006, 0.265280008), Vec2(0.459210008, 0.284009993), Vec2(0.445730001, 0.285100013), Vec2(0.445980012, 0.266840011), Vec2(0.459210008, 0.284009993), Vec2(0.458999991, 0.30302), Vec2(0.445430011, 0.303689986), Vec2(0.445730001, 0.285100013), Vec2(0.472840011, 0.283050001), Vec2(0.472710013, 0.30241999), Vec2(0.458999991, 0.30302), Vec2(0.459210008, 0.284009993), Vec2(0.472909987, 0.263940006), Vec2(0.472840011, 0.283050001), Vec2(0.459210008, 0.284009993), Vec2(0.459340006, 0.265280008), Vec2(0.458999991, 0.30302), Vec2(0.458819985, 0.322230011), Vec2(0.445179999, 0.322490007), Vec2(0.445430011, 0.303689986), Vec2(0.458819985, 0.322230011), Vec2(0.458730012, 0.341520011), Vec2(0.445060015, 0.341390014), Vec2(0.445179999, 0.322490007), Vec2(0.472589999, 0.321969986), Vec2(0.472530007, 0.341619998), Vec2(0.458730012, 0.341520011), Vec2(0.458819985, 0.322230011), Vec2(0.472710013, 0.30241999), Vec2(0.472589999, 0.321969986), Vec2(0.458819985, 0.322230011), Vec2(0.458999991, 0.30302), Vec2(0.486530006, 0.301999986), Vec2(0.486470014, 0.32179001), Vec2(0.472589999, 0.321969986), Vec2(0.472710013, 0.30241999), Vec2(0.486470014, 0.32179001), Vec2(0.486429989, 0.341670007), Vec2(0.472530007, 0.341619998), Vec2(0.472589999, 0.321969986), Vec2(0.500389993, 0.321709991), Vec2(0.500389993, 0.341690004), Vec2(0.486429989, 0.341670007), Vec2(0.486470014, 0.32179001), Vec2(0.500389993, 0.301829994), Vec2(0.500389993, 0.321709991), Vec2(0.486470014, 0.32179001), Vec2(0.486530006, 0.301999986), Vec2(0.486620009, 0.263029993), Vec2(0.486589998, 0.282389998), Vec2(0.472840011, 0.283050001), Vec2(0.472909987, 0.263940006), Vec2(0.486589998, 0.282389998), Vec2(0.486530006, 0.301999986), Vec2(0.472710013, 0.30241999), Vec2(0.472840011, 0.283050001), Vec2(0.500389993, 0.282130003), Vec2(0.500389993, 0.301829994), Vec2(0.486530006, 0.301999986), Vec2(0.486589998, 0.282389998), Vec2(0.500389993, 0.26267001), Vec2(0.500389993, 0.282130003), Vec2(0.486589998, 0.282389998), Vec2(0.486620009, 0.263029993), Vec2(0.456360012, 0.193859994), Vec2(0.458009988, 0.21119), Vec2(0.444660008, 0.214709997), Vec2(0.44264999, 0.198310003), Vec2(0.458009988, 0.21119), Vec2(0.458920002, 0.228850007), Vec2(0.445679992, 0.23161), Vec2(0.444660008, 0.214709997), Vec2(0.471870005, 0.208409995), Vec2(0.472539991, 0.226630002), Vec2(0.458920002, 0.228850007), Vec2(0.458009988, 0.21119), Vec2(0.470699996, 0.190410003), Vec2(0.471870005, 0.208409995), Vec2(0.458009988, 0.21119), Vec2(0.456360012, 0.193859994), Vec2(0.458920002, 0.228850007), Vec2(0.459300011, 0.246879995), Vec2(0.446029991, 0.248999998), Vec2(0.445679992, 0.23161), Vec2(0.459300011, 0.246879995), Vec2(0.459340006, 0.265280008), Vec2(0.445980012, 0.266840011), Vec2(0.446029991, 0.248999998), Vec2(0.472840011, 0.245130002), Vec2(0.472909987, 0.263940006), Vec2(0.459340006, 0.265280008), Vec2(0.459300011, 0.246879995), Vec2(0.472539991, 0.226630002), Vec2(0.472840011, 0.245130002), Vec2(0.459300011, 0.246879995), Vec2(0.458920002, 0.228850007), Vec2(0.486409992, 0.225170001), Vec2(0.486570001, 0.243959993), Vec2(0.472840011, 0.245130002), Vec2(0.472539991, 0.226630002), Vec2(0.486570001, 0.243959993), Vec2(0.486620009, 0.263029993), Vec2(0.472909987, 0.263940006), Vec2(0.472840011, 0.245130002), Vec2(0.500389993, 0.243509993), Vec2(0.500389993, 0.26267001), Vec2(0.486620009, 0.263029993), Vec2(0.486570001, 0.243959993), Vec2(0.500389993, 0.224610001), Vec2(0.500389993, 0.243509993), Vec2(0.486570001, 0.243959993), Vec2(0.486409992, 0.225170001), Vec2(0.485439986, 0.188199997), Vec2(0.48605001, 0.206609994), Vec2(0.471870005, 0.208409995), Vec2(0.470699996, 0.190410003), Vec2(0.48605001, 0.206609994), Vec2(0.486409992, 0.225170001), Vec2(0.472539991, 0.226630002), Vec2(0.471870005, 0.208409995), Vec2(0.500389993, 0.205939993), Vec2(0.500389993, 0.224610001), Vec2(0.486409992, 0.225170001), Vec2(0.48605001, 0.206609994), Vec2(0.500389993, 0.187380001), Vec2(0.500389993, 0.205939993), Vec2(0.48605001, 0.206609994), Vec2(0.485439986, 0.188199997), Vec2(0.404920012, 0.340810001), Vec2(0.405030012, 0.358819991), Vec2(0.391840011, 0.358579993), Vec2(0.391689986, 0.340579987), Vec2(0.405030012, 0.358819991), Vec2(0.40546, 0.376670003), Vec2(0.392369986, 0.376419991), Vec2(0.391840011, 0.358579993), Vec2(0.418269992, 0.359230012), Vec2(0.418599993, 0.377279997), Vec2(0.40546, 0.376670003), Vec2(0.405030012, 0.358819991), Vec2(0.418179989, 0.341030002), Vec2(0.418269992, 0.359230012), Vec2(0.405030012, 0.358819991), Vec2(0.404920012, 0.340810001), Vec2(0.40546, 0.376670003), Vec2(0.40614, 0.39418), Vec2(0.393269986, 0.393909991), Vec2(0.392369986, 0.376419991), Vec2(0.40614, 0.39418), Vec2(0.407000005, 0.411139995), Vec2(0.394499987, 0.410809994), Vec2(0.393269986, 0.393909991), Vec2(0.419090003, 0.395029992), Vec2(0.419660002, 0.412299991), Vec2(0.407000005, 0.411139995), Vec2(0.40614, 0.39418), Vec2(0.418599993, 0.377279997), Vec2(0.419090003, 0.395029992), Vec2(0.40614, 0.39418), Vec2(0.40546, 0.376670003), Vec2(0.431870013, 0.378129989), Vec2(0.432209998, 0.396259993), Vec2(0.419090003, 0.395029992), Vec2(0.418599993, 0.377279997), Vec2(0.432209998, 0.396259993), Vec2(0.432550013, 0.413989991), Vec2(0.419660002, 0.412299991), Vec2(0.419090003, 0.395029992), Vec2(0.445520014, 0.397650003), Vec2(0.44569999, 0.415879995), Vec2(0.432550013, 0.413989991), Vec2(0.432209998, 0.396259993), Vec2(0.445289999, 0.379079998), Vec2(0.445520014, 0.397650003), Vec2(0.432209998, 0.396259993), Vec2(0.431870013, 0.378129989), Vec2(0.431549996, 0.341219991), Vec2(0.431620002, 0.359739989), Vec2(0.418269992, 0.359230012), Vec2(0.418179989, 0.341030002), Vec2(0.431620002, 0.359739989), Vec2(0.431870013, 0.378129989), Vec2(0.418599993, 0.377279997), Vec2(0.418269992, 0.359230012), Vec2(0.445109993, 0.360289991), Vec2(0.445289999, 0.379079998), Vec2(0.431870013, 0.378129989), Vec2(0.431620002, 0.359739989), Vec2(0.445060015, 0.341390014), Vec2(0.445109993, 0.360289991), Vec2(0.431620002, 0.359739989), Vec2(0.431549996, 0.341219991), Vec2(0.407000005, 0.411139995), Vec2(0.40794, 0.427300006), Vec2(0.395999998, 0.426840007), Vec2(0.394499987, 0.410809994), Vec2(0.40794, 0.427300006), Vec2(0.408710003, 0.442330003), Vec2(0.397700012, 0.441610008), Vec2(0.395999998, 0.426840007), Vec2(0.420139998, 0.42888999), Vec2(0.420249999, 0.44461), Vec2(0.408710003, 0.442330003), Vec2(0.40794, 0.427300006), Vec2(0.419660002, 0.412299991), Vec2(0.420139998, 0.42888999), Vec2(0.40794, 0.427300006), Vec2(0.407000005, 0.411139995), Vec2(0.408710003, 0.442330003), Vec2(0.408850014, 0.455799997), Vec2(0.399419993, 0.454439998), Vec2(0.397700012, 0.441610008), Vec2(0.408850014, 0.455799997), Vec2(0.407389998, 0.467159986), Vec2(0.400750011, 0.463099986), Vec2(0.399419993, 0.454439998), Vec2(0.419539988, 0.45927), Vec2(0.417360008, 0.472730011), Vec2(0.407389998, 0.467159986), Vec2(0.408850014, 0.455799997), Vec2(0.420249999, 0.44461), Vec2(0.419539988, 0.45927), Vec2(0.408850014, 0.455799997), Vec2(0.408710003, 0.442330003), Vec2(0.432429999, 0.447699994), Vec2(0.431360006, 0.463499993), Vec2(0.419539988, 0.45927), Vec2(0.420249999, 0.44461), Vec2(0.431360006, 0.463499993), Vec2(0.429049999, 0.478509992), Vec2(0.417360008, 0.472730011), Vec2(0.419539988, 0.45927), Vec2(0.444110006, 0.467729986), Vec2(0.441960007, 0.483940005), Vec2(0.429049999, 0.478509992), Vec2(0.431360006, 0.463499993), Vec2(0.445230007, 0.450969994), Vec2(0.444110006, 0.467729986), Vec2(0.431360006, 0.463499993), Vec2(0.432429999, 0.447699994), Vec2(0.432550013, 0.413989991), Vec2(0.432709992, 0.431169987), Vec2(0.420139998, 0.42888999), Vec2(0.419660002, 0.412299991), Vec2(0.432709992, 0.431169987), Vec2(0.432429999, 0.447699994), Vec2(0.420249999, 0.44461), Vec2(0.420139998, 0.42888999), Vec2(0.445670009, 0.433670014), Vec2(0.445230007, 0.450969994), Vec2(0.432429999, 0.447699994), Vec2(0.432709992, 0.431169987), Vec2(0.44569999, 0.415879995), Vec2(0.445670009, 0.433670014), Vec2(0.432709992, 0.431169987), Vec2(0.432550013, 0.413989991), Vec2(0.459109992, 0.417690009), Vec2(0.459010005, 0.43603), Vec2(0.445670009, 0.433670014), Vec2(0.44569999, 0.415879995), Vec2(0.459010005, 0.43603), Vec2(0.45855999, 0.453960001), Vec2(0.445230007, 0.450969994), Vec2(0.445670009, 0.433670014), Vec2(0.472640008, 0.437940001), Vec2(0.472290009, 0.456349999), Vec2(0.45855999, 0.453960001), Vec2(0.459010005, 0.43603), Vec2(0.472750008, 0.419200003), Vec2(0.472640008, 0.437940001), Vec2(0.459010005, 0.43603), Vec2(0.459109992, 0.417690009), Vec2(0.45855999, 0.453960001), Vec2(0.457569987, 0.471489996), Vec2(0.444110006, 0.467729986), Vec2(0.445230007, 0.450969994), Vec2(0.457569987, 0.471489996), Vec2(0.455799997, 0.488629997), Vec2(0.441960007, 0.483940005), Vec2(0.444110006, 0.467729986), Vec2(0.471569985, 0.474440008), Vec2(0.470310003, 0.492269993), Vec2(0.455799997, 0.488629997), Vec2(0.457569987, 0.471489996), Vec2(0.472290009, 0.456349999), Vec2(0.471569985, 0.474440008), Vec2(0.457569987, 0.471489996), Vec2(0.45855999, 0.453960001), Vec2(0.48627001, 0.457899988), Vec2(0.485900015, 0.476350009), Vec2(0.471569985, 0.474440008), Vec2(0.472290009, 0.456349999), Vec2(0.485900015, 0.476350009), Vec2(0.485249996, 0.494610012), Vec2(0.470310003, 0.492269993), Vec2(0.471569985, 0.474440008), Vec2(0.500389993, 0.476999998), Vec2(0.500389993, 0.49544999), Vec2(0.485249996, 0.494610012), Vec2(0.485900015, 0.476350009), Vec2(0.500389993, 0.458429992), Vec2(0.500389993, 0.476999998), Vec2(0.485900015, 0.476350009), Vec2(0.48627001, 0.457899988), Vec2(0.486530006, 0.42019999), Vec2(0.48646, 0.439200014), Vec2(0.472640008, 0.437940001), Vec2(0.472750008, 0.419200003), Vec2(0.48646, 0.439200014), Vec2(0.48627001, 0.457899988), Vec2(0.472290009, 0.456349999), Vec2(0.472640008, 0.437940001), Vec2(0.500389993, 0.439639986), Vec2(0.500389993, 0.458429992), Vec2(0.48627001, 0.457899988), Vec2(0.48646, 0.439200014), Vec2(0.500389993, 0.420549989), Vec2(0.500389993, 0.439639986), Vec2(0.48646, 0.439200014), Vec2(0.486530006, 0.42019999), Vec2(0.458730012, 0.341520011), Vec2(0.458759993, 0.360819995), Vec2(0.445109993, 0.360289991), Vec2(0.445060015, 0.341390014), Vec2(0.458759993, 0.360819995), Vec2(0.458889991, 0.380010009), Vec2(0.445289999, 0.379079998), Vec2(0.445109993, 0.360289991), Vec2(0.472550005, 0.361259997), Vec2(0.472629994, 0.380789995), Vec2(0.458889991, 0.380010009), Vec2(0.458759993, 0.360819995), Vec2(0.472530007, 0.341619998), Vec2(0.472550005, 0.361259997), Vec2(0.458759993, 0.360819995), Vec2(0.458730012, 0.341520011), Vec2(0.458889991, 0.380010009), Vec2(0.459039986, 0.398999989), Vec2(0.445520014, 0.397650003), Vec2(0.445289999, 0.379079998), Vec2(0.459039986, 0.398999989), Vec2(0.459109992, 0.417690009), Vec2(0.44569999, 0.415879995), Vec2(0.445520014, 0.397650003), Vec2(0.472719997, 0.400130004), Vec2(0.472750008, 0.419200003), Vec2(0.459109992, 0.417690009), Vec2(0.459039986, 0.398999989), Vec2(0.472629994, 0.380789995), Vec2(0.472719997, 0.400130004), Vec2(0.459039986, 0.398999989), Vec2(0.458889991, 0.380010009), Vec2(0.486479998, 0.38132), Vec2(0.486519992, 0.400889993), Vec2(0.472719997, 0.400130004), Vec2(0.472629994, 0.380789995), Vec2(0.486519992, 0.400889993), Vec2(0.486530006, 0.42019999), Vec2(0.472750008, 0.419200003), Vec2(0.472719997, 0.400130004), Vec2(0.500389993, 0.401169986), Vec2(0.500389993, 0.420549989), Vec2(0.486530006, 0.42019999), Vec2(0.486519992, 0.400889993), Vec2(0.500389993, 0.38150999), Vec2(0.500389993, 0.401169986), Vec2(0.486519992, 0.400889993), Vec2(0.486479998, 0.38132), Vec2(0.486429989, 0.341670007), Vec2(0.486440003, 0.361550003), Vec2(0.472550005, 0.361259997), Vec2(0.472530007, 0.341619998), Vec2(0.486440003, 0.361550003), Vec2(0.486479998, 0.38132), Vec2(0.472629994, 0.380789995), Vec2(0.472550005, 0.361259997), Vec2(0.500389993, 0.361660004), Vec2(0.500389993, 0.38150999), Vec2(0.486479998, 0.38132), Vec2(0.486440003, 0.361550003), Vec2(0.500389993, 0.341690004), Vec2(0.500389993, 0.361660004), Vec2(0.486440003, 0.361550003), Vec2(0.486429989, 0.341670007), Vec2(0.514370024, 0.34167999), Vec2(0.514360011, 0.361570001), Vec2(0.500389993, 0.361660004), Vec2(0.500389993, 0.341690004), Vec2(0.514360011, 0.361570001), Vec2(0.514310002, 0.381350011), Vec2(0.500389993, 0.38150999), Vec2(0.500389993, 0.361660004), Vec2(0.528249979, 0.36135), Vec2(0.528159976, 0.380919993), Vec2(0.514310002, 0.381350011), Vec2(0.514360011, 0.361570001), Vec2(0.52828002, 0.341670007), Vec2(0.528249979, 0.36135), Vec2(0.514360011, 0.361570001), Vec2(0.514370024, 0.34167999), Vec2(0.514310002, 0.381350011), Vec2(0.514259994, 0.400929987), Vec2(0.500389993, 0.401169986), Vec2(0.500389993, 0.38150999), Vec2(0.514259994, 0.400929987), Vec2(0.51424998, 0.420240015), Vec2(0.500389993, 0.420549989), Vec2(0.500389993, 0.401169986), Vec2(0.528069973, 0.400290012), Vec2(0.528020024, 0.419380009), Vec2(0.51424998, 0.420240015), Vec2(0.514259994, 0.400929987), Vec2(0.528159976, 0.380919993), Vec2(0.528069973, 0.400290012), Vec2(0.514259994, 0.400929987), Vec2(0.514310002, 0.381350011), Vec2(0.541880012, 0.380290002), Vec2(0.541719973, 0.399340004), Vec2(0.528069973, 0.400290012), Vec2(0.528159976, 0.380919993), Vec2(0.541719973, 0.399340004), Vec2(0.54163003, 0.418099999), Vec2(0.528020024, 0.419380009), Vec2(0.528069973, 0.400290012), Vec2(0.555180013, 0.398220003), Vec2(0.55497998, 0.41655001), Vec2(0.54163003, 0.418099999), Vec2(0.541719973, 0.399340004), Vec2(0.555419981, 0.379559994), Vec2(0.555180013, 0.398220003), Vec2(0.541719973, 0.399340004), Vec2(0.541880012, 0.380290002), Vec2(0.542050004, 0.341659993), Vec2(0.542010009, 0.361030012), Vec2(0.528249979, 0.36135), Vec2(0.52828002, 0.341670007), Vec2(0.542010009, 0.361030012), Vec2(0.541880012, 0.380290002), Vec2(0.528159976, 0.380919993), Vec2(0.528249979, 0.36135), Vec2(0.555599988, 0.360659987), Vec2(0.555419981, 0.379559994), Vec2(0.541880012, 0.380290002), Vec2(0.542010009, 0.361030012), Vec2(0.555649996, 0.341650009), Vec2(0.555599988, 0.360659987), Vec2(0.542010009, 0.361030012), Vec2(0.542050004, 0.341659993), Vec2(0.51424998, 0.420240015), Vec2(0.514299989, 0.439249992), Vec2(0.500389993, 0.439639986), Vec2(0.500389993, 0.420549989), Vec2(0.514299989, 0.439249992), Vec2(0.514469981, 0.457969993), Vec2(0.500389993, 0.458429992), Vec2(0.500389993, 0.439639986), Vec2(0.528110027, 0.438169986), Vec2(0.528419971, 0.456629992), Vec2(0.514469981, 0.457969993), Vec2(0.514299989, 0.439249992), Vec2(0.528020024, 0.419380009), Vec2(0.528110027, 0.438169986), Vec2(0.514299989, 0.439249992), Vec2(0.51424998, 0.420240015), Vec2(0.514469981, 0.457969993), Vec2(0.51481998, 0.476440012), Vec2(0.500389993, 0.476999998), Vec2(0.500389993, 0.458429992), Vec2(0.51481998, 0.476440012), Vec2(0.51542002, 0.494789988), Vec2(0.500389993, 0.49544999), Vec2(0.500389993, 0.476999998), Vec2(0.529079974, 0.474819988), Vec2(0.530219972, 0.492810011), Vec2(0.51542002, 0.494789988), Vec2(0.51481998, 0.476440012), Vec2(0.528419971, 0.456629992), Vec2(0.529079974, 0.474819988), Vec2(0.51481998, 0.476440012), Vec2(0.514469981, 0.457969993), Vec2(0.542089999, 0.454540014), Vec2(0.542980015, 0.472220004), Vec2(0.529079974, 0.474819988), Vec2(0.528419971, 0.456629992), Vec2(0.542980015, 0.472220004), Vec2(0.544579983, 0.489589989), Vec2(0.530219972, 0.492810011), Vec2(0.529079974, 0.474819988), Vec2(0.556349993, 0.468840003), Vec2(0.558290005, 0.485320002), Vec2(0.544579983, 0.489589989), Vec2(0.542980015, 0.472220004), Vec2(0.555329978, 0.451889992), Vec2(0.556349993, 0.468840003), Vec2(0.542980015, 0.472220004), Vec2(0.542089999, 0.454540014), Vec2(0.54163003, 0.418099999), Vec2(0.541700006, 0.436500013), Vec2(0.528110027, 0.438169986), Vec2(0.528020024, 0.419380009), Vec2(0.541700006, 0.436500013), Vec2(0.542089999, 0.454540014), Vec2(0.528419971, 0.456629992), Vec2(0.528110027, 0.438169986), Vec2(0.554970026, 0.434450001), Vec2(0.555329978, 0.451889992), Vec2(0.542089999, 0.454540014), Vec2(0.541700006, 0.436500013), Vec2(0.55497998, 0.41655001), Vec2(0.554970026, 0.434450001), Vec2(0.541700006, 0.436500013), Vec2(0.54163003, 0.418099999), Vec2(0.568040013, 0.414950013), Vec2(0.56783998, 0.43226999), Vec2(0.554970026, 0.434450001), Vec2(0.55497998, 0.41655001), Vec2(0.56783998, 0.43226999), Vec2(0.568040013, 0.44896999), Vec2(0.555329978, 0.451889992), Vec2(0.554970026, 0.434450001), Vec2(0.58029002, 0.430319995), Vec2(0.580110013, 0.446209997), Vec2(0.568040013, 0.44896999), Vec2(0.56783998, 0.43226999), Vec2(0.58081001, 0.41358), Vec2(0.58029002, 0.430319995), Vec2(0.56783998, 0.43226999), Vec2(0.568040013, 0.414950013), Vec2(0.568040013, 0.44896999), Vec2(0.568989992, 0.464980006), Vec2(0.556349993, 0.468840003), Vec2(0.555329978, 0.451889992), Vec2(0.568989992, 0.464980006), Vec2(0.571099997, 0.480280012), Vec2(0.558290005, 0.485320002), Vec2(0.556349993, 0.468840003), Vec2(0.580709994, 0.461080015), Vec2(0.582710028, 0.474830002), Vec2(0.571099997, 0.480280012), Vec2(0.568989992, 0.464980006), Vec2(0.580110013, 0.446209997), Vec2(0.580709994, 0.461080015), Vec2(0.568989992, 0.464980006), Vec2(0.568040013, 0.44896999), Vec2(0.591530025, 0.444249988), Vec2(0.591300011, 0.457899988), Vec2(0.580709994, 0.461080015), Vec2(0.580110013, 0.446209997), Vec2(0.591300011, 0.457899988), Vec2(0.592630029, 0.469500005), Vec2(0.582710028, 0.474830002), Vec2(0.580709994, 0.461080015), Vec2(0.600619972, 0.456800014), Vec2(0.599250019, 0.465579987), Vec2(0.592630029, 0.469500005), Vec2(0.591300011, 0.457899988), Vec2(0.602400005, 0.443830013), Vec2(0.600619972, 0.456800014), Vec2(0.591300011, 0.457899988), Vec2(0.591530025, 0.444249988), Vec2(0.593330026, 0.412739992), Vec2(0.59236002, 0.429049999), Vec2(0.58029002, 0.430319995), Vec2(0.58081001, 0.41358), Vec2(0.59236002, 0.429049999), Vec2(0.591530025, 0.444249988), Vec2(0.580110013, 0.446209997), Vec2(0.58029002, 0.430319995), Vec2(0.604139984, 0.428909987), Vec2(0.602400005, 0.443830013), Vec2(0.591530025, 0.444249988), Vec2(0.59236002, 0.429049999), Vec2(0.605679989, 0.412710011), Vec2(0.604139984, 0.428909987), Vec2(0.59236002, 0.429049999), Vec2(0.593330026, 0.412739992), Vec2(0.569060028, 0.341659993), Vec2(0.569000006, 0.360320002), Vec2(0.555599988, 0.360659987), Vec2(0.555649996, 0.341650009), Vec2(0.569000006, 0.360320002), Vec2(0.568759978, 0.378839999), Vec2(0.555419981, 0.379559994), Vec2(0.555599988, 0.360659987), Vec2(0.582220018, 0.360040009), Vec2(0.581900001, 0.378259987), Vec2(0.568759978, 0.378839999), Vec2(0.569000006, 0.360320002), Vec2(0.582300007, 0.34167999), Vec2(0.582220018, 0.360040009), Vec2(0.569000006, 0.360320002), Vec2(0.569060028, 0.341659993), Vec2(0.568759978, 0.378839999), Vec2(0.568400025, 0.397100002), Vec2(0.555180013, 0.398220003), Vec2(0.555419981, 0.379559994), Vec2(0.568400025, 0.397100002), Vec2(0.568040013, 0.414950013), Vec2(0.55497998, 0.41655001), Vec2(0.555180013, 0.398220003), Vec2(0.581399977, 0.396160007), Vec2(0.58081001, 0.41358), Vec2(0.568040013, 0.414950013), Vec2(0.568400025, 0.397100002), Vec2(0.581900001, 0.378259987), Vec2(0.581399977, 0.396160007), Vec2(0.568400025, 0.397100002), Vec2(0.568759978, 0.378839999), Vec2(0.594889998, 0.377929986), Vec2(0.594210029, 0.395610005), Vec2(0.581399977, 0.396160007), Vec2(0.581900001, 0.378259987), Vec2(0.594210029, 0.395610005), Vec2(0.593330026, 0.412739992), Vec2(0.58081001, 0.41358), Vec2(0.581399977, 0.396160007), Vec2(0.60690999, 0.395639986), Vec2(0.605679989, 0.412710011), Vec2(0.593330026, 0.412739992), Vec2(0.594210029, 0.395610005), Vec2(0.60781002, 0.37797001), Vec2(0.60690999, 0.395639986), Vec2(0.594210029, 0.395610005), Vec2(0.594889998, 0.377929986), Vec2(0.595399976, 0.341699988), Vec2(0.595300019, 0.359899998), Vec2(0.582220018, 0.360040009), Vec2(0.582300007, 0.34167999), Vec2(0.595300019, 0.359899998), Vec2(0.594889998, 0.377929986), Vec2(0.581900001, 0.378259987), Vec2(0.582220018, 0.360040009), Vec2(0.608319998, 0.359939992), Vec2(0.60781002, 0.37797001), Vec2(0.594889998, 0.377929986), Vec2(0.595300019, 0.359899998), Vec2(0.608460009, 0.341729999), Vec2(0.608319998, 0.359939992), Vec2(0.595300019, 0.359899998), Vec2(0.595399976, 0.341699988), Vec2(0.515349984, 0.188010007), Vec2(0.514750004, 0.20645), Vec2(0.500389993, 0.205939993), Vec2(0.500389993, 0.187380001), Vec2(0.514750004, 0.20645), Vec2(0.514400005, 0.225030005), Vec2(0.500389993, 0.224610001), Vec2(0.500389993, 0.205939993), Vec2(0.528930008, 0.208079994), Vec2(0.528270006, 0.226349995), Vec2(0.514400005, 0.225030005), Vec2(0.514750004, 0.20645), Vec2(0.530099988, 0.190019995), Vec2(0.528930008, 0.208079994), Vec2(0.514750004, 0.20645), Vec2(0.515349984, 0.188010007), Vec2(0.514400005, 0.225030005), Vec2(0.514230013, 0.243839994), Vec2(0.500389993, 0.243509993), Vec2(0.500389993, 0.224610001), Vec2(0.514230013, 0.243839994), Vec2(0.514190018, 0.26293999), Vec2(0.500389993, 0.26267001), Vec2(0.500389993, 0.243509993), Vec2(0.527970016, 0.244910002), Vec2(0.527899981, 0.263770014), Vec2(0.514190018, 0.26293999), Vec2(0.514230013, 0.243839994), Vec2(0.528270006, 0.226349995), Vec2(0.527970016, 0.244910002), Vec2(0.514230013, 0.243839994), Vec2(0.514400005, 0.225030005), Vec2(0.541869998, 0.22845), Vec2(0.541490018, 0.246560007), Vec2(0.527970016, 0.244910002), Vec2(0.528270006, 0.226349995), Vec2(0.541490018, 0.246560007), Vec2(0.54144001, 0.265049994), Vec2(0.527899981, 0.263770014), Vec2(0.527970016, 0.244910002), Vec2(0.554700017, 0.248630002), Vec2(0.554740012, 0.266600013), Vec2(0.54144001, 0.265049994), Vec2(0.541490018, 0.246560007), Vec2(0.555060029, 0.231140003), Vec2(0.554700017, 0.248630002), Vec2(0.541490018, 0.246560007), Vec2(0.541869998, 0.22845), Vec2(0.544420004, 0.193299994), Vec2(0.542779982, 0.210710004), Vec2(0.528930008, 0.208079994), Vec2(0.530099988, 0.190019995), Vec2(0.542779982, 0.210710004), Vec2(0.541869998, 0.22845), Vec2(0.528270006, 0.226349995), Vec2(0.528930008, 0.208079994), Vec2(0.556089997, 0.214139998), Vec2(0.555060029, 0.231140003), Vec2(0.541869998, 0.22845), Vec2(0.542779982, 0.210710004), Vec2(0.558099985, 0.19765), Vec2(0.556089997, 0.214139998), Vec2(0.542779982, 0.210710004), Vec2(0.544420004, 0.193299994), Vec2(0.514190018, 0.26293999), Vec2(0.514219999, 0.282319993), Vec2(0.500389993, 0.282130003), Vec2(0.500389993, 0.26267001), Vec2(0.514219999, 0.282319993), Vec2(0.514280021, 0.301959991), Vec2(0.500389993, 0.301829994), Vec2(0.500389993, 0.282130003), Vec2(0.527970016, 0.28294), Vec2(0.528100014, 0.302370012), Vec2(0.514280021, 0.301959991), Vec2(0.514219999, 0.282319993), Vec2(0.527899981, 0.263770014), Vec2(0.527970016, 0.28294), Vec2(0.514219999, 0.282319993), Vec2(0.514190018, 0.26293999), Vec2(0.514280021, 0.301959991), Vec2(0.514339983, 0.321770012), Vec2(0.500389993, 0.321709991), Vec2(0.500389993, 0.301829994), Vec2(0.514339983, 0.321770012), Vec2(0.514370024, 0.34167999), Vec2(0.500389993, 0.341690004), Vec2(0.500389993, 0.321709991), Vec2(0.528219998, 0.321969986), Vec2(0.52828002, 0.341670007), Vec2(0.514370024, 0.34167999), Vec2(0.514339983, 0.321770012), Vec2(0.528100014, 0.302370012), Vec2(0.528219998, 0.321969986), Vec2(0.514339983, 0.321770012), Vec2(0.514280021, 0.301959991), Vec2(0.541779995, 0.302980006), Vec2(0.541960001, 0.322270006), Vec2(0.528219998, 0.321969986), Vec2(0.528100014, 0.302370012), Vec2(0.541960001, 0.322270006), Vec2(0.542050004, 0.341659993), Vec2(0.52828002, 0.341670007), Vec2(0.528219998, 0.321969986), Vec2(0.555530012, 0.322629988), Vec2(0.555649996, 0.341650009), Vec2(0.542050004, 0.341659993), Vec2(0.541960001, 0.322270006), Vec2(0.55528003, 0.303710014), Vec2(0.555530012, 0.322629988), Vec2(0.541960001, 0.322270006), Vec2(0.541779995, 0.302980006), Vec2(0.54144001, 0.265049994), Vec2(0.541580021, 0.283870012), Vec2(0.527970016, 0.28294), Vec2(0.527899981, 0.263770014), Vec2(0.541580021, 0.283870012), Vec2(0.541779995, 0.302980006), Vec2(0.528100014, 0.302370012), Vec2(0.527970016, 0.28294), Vec2(0.55497998, 0.284990013), Vec2(0.55528003, 0.303710014), Vec2(0.541779995, 0.302980006), Vec2(0.541580021, 0.283870012), Vec2(0.554740012, 0.266600013), Vec2(0.55497998, 0.284990013), Vec2(0.541580021, 0.283870012), Vec2(0.54144001, 0.265049994), Vec2(0.567749977, 0.268229991), Vec2(0.568159997, 0.286139995), Vec2(0.55497998, 0.284990013), Vec2(0.554740012, 0.266600013), Vec2(0.568159997, 0.286139995), Vec2(0.568579972, 0.304439992), Vec2(0.55528003, 0.303710014), Vec2(0.55497998, 0.284990013), Vec2(0.581120014, 0.287120014), Vec2(0.581700027, 0.305070013), Vec2(0.568579972, 0.304439992), Vec2(0.568159997, 0.286139995), Vec2(0.58047998, 0.269659996), Vec2(0.581120014, 0.287120014), Vec2(0.568159997, 0.286139995), Vec2(0.567749977, 0.268229991), Vec2(0.568579972, 0.304439992), Vec2(0.568910003, 0.32299), Vec2(0.555530012, 0.322629988), Vec2(0.55528003, 0.303710014), Vec2(0.568910003, 0.32299), Vec2(0.569060028, 0.341659993), Vec2(0.555649996, 0.341650009), Vec2(0.555530012, 0.322629988), Vec2(0.582109988, 0.323300004), Vec2(0.582300007, 0.34167999), Vec2(0.569060028, 0.341659993), Vec2(0.568910003, 0.32299), Vec2(0.581700027, 0.305070013), Vec2(0.582109988, 0.323300004), Vec2(0.568910003, 0.32299), Vec2(0.568579972, 0.304439992), Vec2(0.594669998, 0.305449992), Vec2(0.595189989, 0.323500007), Vec2(0.582109988, 0.323300004), Vec2(0.581700027, 0.305070013), Vec2(0.595189989, 0.323500007), Vec2(0.595399976, 0.341699988), Vec2(0.582300007, 0.34167999), Vec2(0.582109988, 0.323300004), Vec2(0.608200014, 0.323529989), Vec2(0.608460009, 0.341729999), Vec2(0.595399976, 0.341699988), Vec2(0.595189989, 0.323500007), Vec2(0.607569993, 0.305489987), Vec2(0.608200014, 0.323529989), Vec2(0.595189989, 0.323500007), Vec2(0.594669998, 0.305449992), Vec2(0.59296, 0.270579994), Vec2(0.593900025, 0.287739992), Vec2(0.581120014, 0.287120014), Vec2(0.58047998, 0.269659996), Vec2(0.593900025, 0.287739992), Vec2(0.594669998, 0.305449992), Vec2(0.581700027, 0.305070013), Vec2(0.581120014, 0.287120014), Vec2(0.606580019, 0.287800014), Vec2(0.607569993, 0.305489987), Vec2(0.594669998, 0.305449992), Vec2(0.593900025, 0.287739992), Vec2(0.605279982, 0.270709991), Vec2(0.606580019, 0.287800014), Vec2(0.593900025, 0.287739992), Vec2(0.59296, 0.270579994), Vec2(0.570869982, 0.202779993), Vec2(0.568690002, 0.21807), Vec2(0.556089997, 0.214139998), Vec2(0.558099985, 0.19765), Vec2(0.568690002, 0.21807), Vec2(0.567719996, 0.234109998), Vec2(0.555060029, 0.231140003), Vec2(0.556089997, 0.214139998), Vec2(0.580380023, 0.222039998), Vec2(0.579750001, 0.236929998), Vec2(0.567719996, 0.234109998), Vec2(0.568690002, 0.21807), Vec2(0.582449973, 0.208340004), Vec2(0.580380023, 0.222039998), Vec2(0.568690002, 0.21807), Vec2(0.570869982, 0.202779993), Vec2(0.567719996, 0.234109998), Vec2(0.567520022, 0.250849992), Vec2(0.554700017, 0.248630002), Vec2(0.555060029, 0.231140003), Vec2(0.567520022, 0.250849992), Vec2(0.567749977, 0.268229991), Vec2(0.554740012, 0.266600013), Vec2(0.554700017, 0.248630002), Vec2(0.579930007, 0.25286001), Vec2(0.58047998, 0.269659996), Vec2(0.567749977, 0.268229991), Vec2(0.567520022, 0.250849992), Vec2(0.579750001, 0.236929998), Vec2(0.579930007, 0.25286001), Vec2(0.567520022, 0.250849992), Vec2(0.567719996, 0.234109998), Vec2(0.591139972, 0.238989994), Vec2(0.591960013, 0.254220009), Vec2(0.579930007, 0.25286001), Vec2(0.579750001, 0.236929998), Vec2(0.591960013, 0.254220009), Vec2(0.59296, 0.270579994), Vec2(0.58047998, 0.269659996), Vec2(0.579930007, 0.25286001), Vec2(0.603709996, 0.254489988), Vec2(0.605279982, 0.270709991), Vec2(0.59296, 0.270579994), Vec2(0.591960013, 0.254220009), Vec2(0.601979971, 0.239529997), Vec2(0.603709996, 0.254489988), Vec2(0.591960013, 0.254220009), Vec2(0.591139972, 0.238989994), Vec2(0.592339993, 0.213760003), Vec2(0.590939999, 0.225309998), Vec2(0.580380023, 0.222039998), Vec2(0.582449973, 0.208340004), Vec2(0.590939999, 0.225309998), Vec2(0.591139972, 0.238989994), Vec2(0.579750001, 0.236929998), Vec2(0.580380023, 0.222039998), Vec2(0.600239992, 0.226530001), Vec2(0.601979971, 0.239529997), Vec2(0.591139972, 0.238989994), Vec2(0.590939999, 0.225309998), Vec2(0.598919988, 0.217739999), Vec2(0.600239992, 0.226530001), Vec2(0.590939999, 0.225309998), Vec2(0.592339993, 0.213760003), Vec2(0.604160011, 0.213080004), Vec2(0.609080017, 0.224439994), Vec2(0.600239992, 0.226530001), Vec2(0.598919988, 0.217739999), Vec2(0.609080017, 0.224439994), Vec2(0.612609982, 0.238089994), Vec2(0.601979971, 0.239529997), Vec2(0.600239992, 0.226530001), Vec2(0.618579984, 0.220070004), Vec2(0.623449981, 0.234990001), Vec2(0.612609982, 0.238089994), Vec2(0.609080017, 0.224439994), Vec2(0.612079978, 0.206560001), Vec2(0.618579984, 0.220070004), Vec2(0.609080017, 0.224439994), Vec2(0.604160011, 0.213080004), Vec2(0.612609982, 0.238089994), Vec2(0.615369976, 0.253399998), Vec2(0.603709996, 0.254489988), Vec2(0.601979971, 0.239529997), Vec2(0.615369976, 0.253399998), Vec2(0.617569983, 0.269879997), Vec2(0.605279982, 0.270709991), Vec2(0.603709996, 0.254489988), Vec2(0.627149999, 0.251120001), Vec2(0.629980028, 0.268189996), Vec2(0.617569983, 0.269879997), Vec2(0.615369976, 0.253399998), Vec2(0.623449981, 0.234990001), Vec2(0.627149999, 0.251120001), Vec2(0.615369976, 0.253399998), Vec2(0.612609982, 0.238089994), Vec2(0.634760022, 0.230949998), Vec2(0.639219999, 0.248050004), Vec2(0.627149999, 0.251120001), Vec2(0.623449981, 0.234990001), Vec2(0.639219999, 0.248050004), Vec2(0.642620027, 0.265899986), Vec2(0.629980028, 0.268189996), Vec2(0.627149999, 0.251120001), Vec2(0.651730001, 0.244619995), Vec2(0.655610025, 0.263289988), Vec2(0.642620027, 0.265899986), Vec2(0.639219999, 0.248050004), Vec2(0.646690011, 0.226569995), Vec2(0.651730001, 0.244619995), Vec2(0.639219999, 0.248050004), Vec2(0.634760022, 0.230949998), Vec2(0.621510029, 0.199560001), Vec2(0.628970027, 0.214750007), Vec2(0.618579984, 0.220070004), Vec2(0.612079978, 0.206560001), Vec2(0.628970027, 0.214750007), Vec2(0.634760022, 0.230949998), Vec2(0.623449981, 0.234990001), Vec2(0.618579984, 0.220070004), Vec2(0.640259981, 0.209220007), Vec2(0.646690011, 0.226569995), Vec2(0.634760022, 0.230949998), Vec2(0.628970027, 0.214750007), Vec2(0.632189989, 0.192650005), Vec2(0.640259981, 0.209220007), Vec2(0.628970027, 0.214750007), Vec2(0.621510029, 0.199560001), Vec2(0.617569983, 0.269879997), Vec2(0.619279981, 0.287209988), Vec2(0.606580019, 0.287800014), Vec2(0.605279982, 0.270709991), Vec2(0.619279981, 0.287209988), Vec2(0.620509982, 0.305099994), Vec2(0.607569993, 0.305489987), Vec2(0.606580019, 0.287800014), Vec2(0.632099986, 0.286000013), Vec2(0.633580029, 0.304329991), Vec2(0.620509982, 0.305099994), Vec2(0.619279981, 0.287209988), Vec2(0.629980028, 0.268189996), Vec2(0.632099986, 0.286000013), Vec2(0.619279981, 0.287209988), Vec2(0.617569983, 0.269879997), Vec2(0.620509982, 0.305099994), Vec2(0.621259987, 0.323350012), Vec2(0.608200014, 0.323529989), Vec2(0.607569993, 0.305489987), Vec2(0.621259987, 0.323350012), Vec2(0.621559978, 0.341769993), Vec2(0.608460009, 0.341729999), Vec2(0.608200014, 0.323529989), Vec2(0.63448, 0.32299), Vec2(0.634819984, 0.341800004), Vec2(0.621559978, 0.341769993), Vec2(0.621259987, 0.323350012), Vec2(0.633580029, 0.304329991), Vec2(0.63448, 0.32299), Vec2(0.621259987, 0.323350012), Vec2(0.620509982, 0.305099994), Vec2(0.646889985, 0.303279996), Vec2(0.647930026, 0.322479993), Vec2(0.63448, 0.32299), Vec2(0.633580029, 0.304329991), Vec2(0.647930026, 0.322479993), Vec2(0.648320019, 0.341820002), Vec2(0.634819984, 0.341800004), Vec2(0.63448, 0.32299), Vec2(0.661679983, 0.321880013), Vec2(0.662109971, 0.341839999), Vec2(0.648320019, 0.341820002), Vec2(0.647930026, 0.322479993), Vec2(0.660489976, 0.302049994), Vec2(0.661679983, 0.321880013), Vec2(0.647930026, 0.322479993), Vec2(0.646889985, 0.303279996), Vec2(0.642620027, 0.265899986), Vec2(0.645139992, 0.284359992), Vec2(0.632099986, 0.286000013), Vec2(0.629980028, 0.268189996), Vec2(0.645139992, 0.284359992), Vec2(0.646889985, 0.303279996), Vec2(0.633580029, 0.304329991), Vec2(0.632099986, 0.286000013), Vec2(0.658490002, 0.282469988), Vec2(0.660489976, 0.302049994), Vec2(0.646889985, 0.303279996), Vec2(0.645139992, 0.284359992), Vec2(0.655610025, 0.263289988), Vec2(0.658490002, 0.282469988), Vec2(0.645139992, 0.284359992), Vec2(0.642620027, 0.265899986), Vec2(0.668990016, 0.260639995), Vec2(0.672190011, 0.280519992), Vec2(0.658490002, 0.282469988), Vec2(0.655610025, 0.263289988), Vec2(0.672190011, 0.280519992), Vec2(0.674409986, 0.300760001), Vec2(0.660489976, 0.302049994), Vec2(0.658490002, 0.282469988), Vec2(0.686230004, 0.278679997), Vec2(0.688660026, 0.299529999), Vec2(0.674409986, 0.300760001), Vec2(0.672190011, 0.280519992), Vec2(0.682789981, 0.258159995), Vec2(0.686230004, 0.278679997), Vec2(0.672190011, 0.280519992), Vec2(0.668990016, 0.260639995), Vec2(0.674409986, 0.300760001), Vec2(0.675740004, 0.321240008), Vec2(0.661679983, 0.321880013), Vec2(0.660489976, 0.302049994), Vec2(0.675740004, 0.321240008), Vec2(0.67622, 0.341839999), Vec2(0.662109971, 0.341839999), Vec2(0.661679983, 0.321880013), Vec2(0.690119982, 0.320630014), Vec2(0.690649986, 0.341839999), Vec2(0.67622, 0.341839999), Vec2(0.675740004, 0.321240008), Vec2(0.688660026, 0.299529999), Vec2(0.690119982, 0.320630014), Vec2(0.675740004, 0.321240008), Vec2(0.674409986, 0.300760001), Vec2(0.703209996, 0.29846999), Vec2(0.704789996, 0.320089996), Vec2(0.690119982, 0.320630014), Vec2(0.688660026, 0.299529999), Vec2(0.704789996, 0.320089996), Vec2(0.705359995, 0.341829985), Vec2(0.690649986, 0.341839999), Vec2(0.690119982, 0.320630014), Vec2(0.719709992, 0.319680005), Vec2(0.720319986, 0.341809988), Vec2(0.705359995, 0.341829985), Vec2(0.704789996, 0.320089996), Vec2(0.718029976, 0.297670007), Vec2(0.719709992, 0.319680005), Vec2(0.704789996, 0.320089996), Vec2(0.703209996, 0.29846999), Vec2(0.696969986, 0.256069988), Vec2(0.700609982, 0.277099997), Vec2(0.686230004, 0.278679997), Vec2(0.682789981, 0.258159995), Vec2(0.700609982, 0.277099997), Vec2(0.703209996, 0.29846999), Vec2(0.688660026, 0.299529999), Vec2(0.686230004, 0.278679997), Vec2(0.71529001, 0.275920004), Vec2(0.718029976, 0.297670007), Vec2(0.703209996, 0.29846999), Vec2(0.700609982, 0.277099997), Vec2(0.711520016, 0.254500002), Vec2(0.71529001, 0.275920004), Vec2(0.700609982, 0.277099997), Vec2(0.696969986, 0.256069988), Vec2(0.643999994, 0.186210006), Vec2(0.652450025, 0.203940004), Vec2(0.640259981, 0.209220007), Vec2(0.632189989, 0.192650005), Vec2(0.652450025, 0.203940004), Vec2(0.659280002, 0.222289994), Vec2(0.646690011, 0.226569995), Vec2(0.640259981, 0.209220007), Vec2(0.665480018, 0.199249998), Vec2(0.672529995, 0.218419999), Vec2(0.659280002, 0.222289994), Vec2(0.652450025, 0.203940004), Vec2(0.656889975, 0.180539995), Vec2(0.665480018, 0.199249998), Vec2(0.652450025, 0.203940004), Vec2(0.643999994, 0.186210006), Vec2(0.659280002, 0.222289994), Vec2(0.664730012, 0.2412), Vec2(0.651730001, 0.244619995), Vec2(0.646690011, 0.226569995), Vec2(0.664730012, 0.2412), Vec2(0.668990016, 0.260639995), Vec2(0.655610025, 0.263289988), Vec2(0.651730001, 0.244619995), Vec2(0.678250015, 0.238059998), Vec2(0.682789981, 0.258159995), Vec2(0.668990016, 0.260639995), Vec2(0.664730012, 0.2412), Vec2(0.672529995, 0.218419999), Vec2(0.678250015, 0.238059998), Vec2(0.664730012, 0.2412), Vec2(0.659280002, 0.222289994), Vec2(0.686399996, 0.215200007), Vec2(0.692260027, 0.235430002), Vec2(0.678250015, 0.238059998), Vec2(0.672529995, 0.218419999), Vec2(0.692260027, 0.235430002), Vec2(0.696969986, 0.256069988), Vec2(0.682789981, 0.258159995), Vec2(0.678250015, 0.238059998), Vec2(0.706700027, 0.233459994), Vec2(0.711520016, 0.254500002), Vec2(0.696969986, 0.256069988), Vec2(0.692260027, 0.235430002), Vec2(0.700839996, 0.212830007), Vec2(0.706700027, 0.233459994), Vec2(0.692260027, 0.235430002), Vec2(0.686399996, 0.215200007), Vec2(0.670799971, 0.175909996), Vec2(0.679310024, 0.195380002), Vec2(0.665480018, 0.199249998), Vec2(0.656889975, 0.180539995), Vec2(0.679310024, 0.195380002), Vec2(0.686399996, 0.215200007), Vec2(0.672529995, 0.218419999), Vec2(0.665480018, 0.199249998), Vec2(0.693859994, 0.192540005), Vec2(0.700839996, 0.212830007), Vec2(0.686399996, 0.215200007), Vec2(0.679310024, 0.195380002), Vec2(0.685660005, 0.172519997), Vec2(0.693859994, 0.192540005), Vec2(0.679310024, 0.195380002), Vec2(0.670799971, 0.175909996), Vec2(0.621559978, 0.341769993), Vec2(0.621389985, 0.360179991), Vec2(0.608319998, 0.359939992), Vec2(0.608460009, 0.341729999), Vec2(0.621389985, 0.360179991), Vec2(0.62075001, 0.378430009), Vec2(0.60781002, 0.37797001), Vec2(0.608319998, 0.359939992), Vec2(0.634609997, 0.360610008), Vec2(0.633840024, 0.379260004), Vec2(0.62075001, 0.378430009), Vec2(0.621389985, 0.360179991), Vec2(0.634819984, 0.341800004), Vec2(0.634609997, 0.360610008), Vec2(0.621389985, 0.360179991), Vec2(0.621559978, 0.341769993), Vec2(0.62075001, 0.378430009), Vec2(0.619620025, 0.396319985), Vec2(0.60690999, 0.395639986), Vec2(0.60781002, 0.37797001), Vec2(0.619620025, 0.396319985), Vec2(0.617980003, 0.413639992), Vec2(0.605679989, 0.412710011), Vec2(0.60690999, 0.395639986), Vec2(0.632449985, 0.397599995), Vec2(0.630400002, 0.415399998), Vec2(0.617980003, 0.413639992), Vec2(0.619620025, 0.396319985), Vec2(0.633840024, 0.379260004), Vec2(0.632449985, 0.397599995), Vec2(0.619620025, 0.396319985), Vec2(0.62075001, 0.378430009), Vec2(0.64714998, 0.380369991), Vec2(0.645500004, 0.399289995), Vec2(0.632449985, 0.397599995), Vec2(0.633840024, 0.379260004), Vec2(0.645500004, 0.399289995), Vec2(0.643050015, 0.417750001), Vec2(0.630400002, 0.415399998), Vec2(0.632449985, 0.397599995), Vec2(0.658850014, 0.40121001), Vec2(0.656040013, 0.420399994), Vec2(0.643050015, 0.417750001), Vec2(0.645500004, 0.399289995), Vec2(0.660749972, 0.381630003), Vec2(0.658850014, 0.40121001), Vec2(0.645500004, 0.399289995), Vec2(0.64714998, 0.380369991), Vec2(0.648320019, 0.341820002), Vec2(0.648069978, 0.36116001), Vec2(0.634609997, 0.360610008), Vec2(0.634819984, 0.341800004), Vec2(0.648069978, 0.36116001), Vec2(0.64714998, 0.380369991), Vec2(0.633840024, 0.379260004), Vec2(0.634609997, 0.360610008), Vec2(0.661809981, 0.361799985), Vec2(0.660749972, 0.381630003), Vec2(0.64714998, 0.380369991), Vec2(0.648069978, 0.36116001), Vec2(0.662109971, 0.341839999), Vec2(0.661809981, 0.361799985), Vec2(0.648069978, 0.36116001), Vec2(0.648320019, 0.341820002), Vec2(0.617980003, 0.413639992), Vec2(0.615819991, 0.430110008), Vec2(0.604139984, 0.428909987), Vec2(0.605679989, 0.412710011), Vec2(0.615819991, 0.430110008), Vec2(0.613049984, 0.445389986), Vec2(0.602400005, 0.443830013), Vec2(0.604139984, 0.428909987), Vec2(0.627600014, 0.432469994), Vec2(0.623899996, 0.448570013), Vec2(0.613049984, 0.445389986), Vec2(0.615819991, 0.430110008), Vec2(0.630400002, 0.415399998), Vec2(0.627600014, 0.432469994), Vec2(0.615819991, 0.430110008), Vec2(0.617980003, 0.413639992), Vec2(0.613049984, 0.445389986), Vec2(0.60947001, 0.458999991), Vec2(0.600619972, 0.456800014), Vec2(0.602400005, 0.443830013), Vec2(0.60947001, 0.458999991), Vec2(0.604449987, 0.47025001), Vec2(0.599250019, 0.465579987), Vec2(0.600619972, 0.456800014), Vec2(0.618969977, 0.463429987), Vec2(0.612360001, 0.476819992), Vec2(0.604449987, 0.47025001), Vec2(0.60947001, 0.458999991), Vec2(0.623899996, 0.448570013), Vec2(0.618969977, 0.463429987), Vec2(0.60947001, 0.458999991), Vec2(0.613049984, 0.445389986), Vec2(0.635219991, 0.452659994), Vec2(0.629369974, 0.468800008), Vec2(0.618969977, 0.463429987), Vec2(0.623899996, 0.448570013), Vec2(0.629369974, 0.468800008), Vec2(0.621800005, 0.483859986), Vec2(0.612360001, 0.476819992), Vec2(0.618969977, 0.463429987), Vec2(0.640680015, 0.474359989), Vec2(0.632510006, 0.490810007), Vec2(0.621800005, 0.483859986), Vec2(0.629369974, 0.468800008), Vec2(0.64714998, 0.457069993), Vec2(0.640680015, 0.474359989), Vec2(0.629369974, 0.468800008), Vec2(0.635219991, 0.452659994), Vec2(0.643050015, 0.417750001), Vec2(0.639680028, 0.435589999), Vec2(0.627600014, 0.432469994), Vec2(0.630400002, 0.415399998), Vec2(0.639680028, 0.435589999), Vec2(0.635219991, 0.452659994), Vec2(0.623899996, 0.448570013), Vec2(0.627600014, 0.432469994), Vec2(0.652199984, 0.439049989), Vec2(0.64714998, 0.457069993), Vec2(0.635219991, 0.452659994), Vec2(0.639680028, 0.435589999), Vec2(0.656040013, 0.420399994), Vec2(0.652199984, 0.439049989), Vec2(0.639680028, 0.435589999), Vec2(0.643050015, 0.417750001), Vec2(0.669430017, 0.42306), Vec2(0.665210009, 0.442490011), Vec2(0.652199984, 0.439049989), Vec2(0.656040013, 0.420399994), Vec2(0.665210009, 0.442490011), Vec2(0.659759998, 0.461369991), Vec2(0.64714998, 0.457069993), Vec2(0.652199984, 0.439049989), Vec2(0.678749979, 0.44562), Vec2(0.673039973, 0.465229988), Vec2(0.659759998, 0.461369991), Vec2(0.665210009, 0.442490011), Vec2(0.683239996, 0.425529987), Vec2(0.678749979, 0.44562), Vec2(0.665210009, 0.442490011), Vec2(0.669430017, 0.42306), Vec2(0.659759998, 0.461369991), Vec2(0.652890027, 0.479649991), Vec2(0.640680015, 0.474359989), Vec2(0.64714998, 0.457069993), Vec2(0.652890027, 0.479649991), Vec2(0.644360006, 0.497269988), Vec2(0.632510006, 0.490810007), Vec2(0.640680015, 0.474359989), Vec2(0.665960014, 0.484349996), Vec2(0.657299995, 0.502950013), Vec2(0.644360006, 0.497269988), Vec2(0.652890027, 0.479649991), Vec2(0.673039973, 0.465229988), Vec2(0.665960014, 0.484349996), Vec2(0.652890027, 0.479649991), Vec2(0.659759998, 0.461369991), Vec2(0.686940014, 0.468430012), Vec2(0.679830015, 0.488200009), Vec2(0.665960014, 0.484349996), Vec2(0.673039973, 0.465229988), Vec2(0.679830015, 0.488200009), Vec2(0.671270013, 0.507589996), Vec2(0.657299995, 0.502950013), Vec2(0.665960014, 0.484349996), Vec2(0.694429994, 0.491030008), Vec2(0.686190009, 0.51098001), Vec2(0.671270013, 0.507589996), Vec2(0.679830015, 0.488200009), Vec2(0.701409996, 0.470789999), Vec2(0.694429994, 0.491030008), Vec2(0.679830015, 0.488200009), Vec2(0.686940014, 0.468430012), Vec2(0.697440028, 0.42761001), Vec2(0.692780018, 0.448240012), Vec2(0.678749979, 0.44562), Vec2(0.683239996, 0.425529987), Vec2(0.692780018, 0.448240012), Vec2(0.686940014, 0.468430012), Vec2(0.673039973, 0.465229988), Vec2(0.678749979, 0.44562), Vec2(0.707249999, 0.45017001), Vec2(0.701409996, 0.470789999), Vec2(0.686940014, 0.468430012), Vec2(0.692780018, 0.448240012), Vec2(0.712010026, 0.429140002), Vec2(0.707249999, 0.45017001), Vec2(0.692780018, 0.448240012), Vec2(0.697440028, 0.42761001), Vec2(0.67622, 0.341839999), Vec2(0.675880015, 0.36243999), Vec2(0.661809981, 0.361799985), Vec2(0.662109971, 0.341839999), Vec2(0.675880015, 0.36243999), Vec2(0.674679995, 0.382930011), Vec2(0.660749972, 0.381630003), Vec2(0.661809981, 0.361799985), Vec2(0.690259993, 0.363059998), Vec2(0.688929975, 0.384149998), Vec2(0.674679995, 0.382930011), Vec2(0.675880015, 0.36243999), Vec2(0.690649986, 0.341839999), Vec2(0.690259993, 0.363059998), Vec2(0.675880015, 0.36243999), Vec2(0.67622, 0.341839999), Vec2(0.674679995, 0.382930011), Vec2(0.672550023, 0.403180003), Vec2(0.658850014, 0.40121001), Vec2(0.660749972, 0.381630003), Vec2(0.672550023, 0.403180003), Vec2(0.669430017, 0.42306), Vec2(0.656040013, 0.420399994), Vec2(0.658850014, 0.40121001), Vec2(0.686609983, 0.405010015), Vec2(0.683239996, 0.425529987), Vec2(0.669430017, 0.42306), Vec2(0.672550023, 0.403180003), Vec2(0.688929975, 0.384149998), Vec2(0.686609983, 0.405010015), Vec2(0.672550023, 0.403180003), Vec2(0.674679995, 0.382930011), Vec2(0.703480005, 0.38519001), Vec2(0.700999975, 0.406569988), Vec2(0.686609983, 0.405010015), Vec2(0.688929975, 0.384149998), Vec2(0.700999975, 0.406569988), Vec2(0.697440028, 0.42761001), Vec2(0.683239996, 0.425529987), Vec2(0.686609983, 0.405010015), Vec2(0.715690017, 0.40772), Vec2(0.712010026, 0.429140002), Vec2(0.697440028, 0.42761001), Vec2(0.700999975, 0.406569988), Vec2(0.718309999, 0.385960013), Vec2(0.715690017, 0.40772), Vec2(0.700999975, 0.406569988), Vec2(0.703480005, 0.38519001), Vec2(0.705359995, 0.341829985), Vec2(0.704930007, 0.363570005), Vec2(0.690259993, 0.363059998), Vec2(0.690649986, 0.341839999), Vec2(0.704930007, 0.363570005), Vec2(0.703480005, 0.38519001), Vec2(0.688929975, 0.384149998), Vec2(0.690259993, 0.363059998), Vec2(0.719850004, 0.363950014), Vec2(0.718309999, 0.385960013), Vec2(0.703480005, 0.38519001), Vec2(0.704930007, 0.363570005), Vec2(0.720319986, 0.341809988), Vec2(0.719850004, 0.363950014), Vec2(0.704930007, 0.363570005), Vec2(0.705359995, 0.341829985), Vec2(0.735469997, 0.341789991), Vec2(0.734979987, 0.364160001), Vec2(0.719850004, 0.363950014), Vec2(0.720319986, 0.341809988), Vec2(0.734979987, 0.364160001), Vec2(0.733349979, 0.386409998), Vec2(0.718309999, 0.385960013), Vec2(0.719850004, 0.363950014), Vec2(0.750240028, 0.364219993), Vec2(0.748560011, 0.386559993), Vec2(0.733349979, 0.386409998), Vec2(0.734979987, 0.364160001), Vec2(0.750760019, 0.34176001), Vec2(0.750240028, 0.364219993), Vec2(0.734979987, 0.364160001), Vec2(0.735469997, 0.341789991), Vec2(0.733349979, 0.386409998), Vec2(0.730639994, 0.408399999), Vec2(0.715690017, 0.40772), Vec2(0.718309999, 0.385960013), Vec2(0.730639994, 0.408399999), Vec2(0.726880014, 0.430059999), Vec2(0.712010026, 0.429140002), Vec2(0.715690017, 0.40772), Vec2(0.745779991, 0.408650011), Vec2(0.741980016, 0.43039), Vec2(0.726880014, 0.430059999), Vec2(0.730639994, 0.408399999), Vec2(0.748560011, 0.386559993), Vec2(0.745779991, 0.408650011), Vec2(0.730639994, 0.408399999), Vec2(0.733349979, 0.386409998), Vec2(0.763859987, 0.386510015), Vec2(0.761030018, 0.408580005), Vec2(0.745779991, 0.408650011), Vec2(0.748560011, 0.386559993), Vec2(0.761030018, 0.408580005), Vec2(0.757200003, 0.430269986), Vec2(0.741980016, 0.43039), Vec2(0.745779991, 0.408650011), Vec2(0.776319981, 0.408340007), Vec2(0.772440016, 0.429879993), Vec2(0.757200003, 0.430269986), Vec2(0.761030018, 0.408580005), Vec2(0.779209971, 0.386370003), Vec2(0.776319981, 0.408340007), Vec2(0.761030018, 0.408580005), Vec2(0.763859987, 0.386510015), Vec2(0.766129971, 0.341720015), Vec2(0.765590012, 0.364190012), Vec2(0.750240028, 0.364219993), Vec2(0.750760019, 0.34176001), Vec2(0.765590012, 0.364190012), Vec2(0.763859987, 0.386510015), Vec2(0.748560011, 0.386559993), Vec2(0.750240028, 0.364219993), Vec2(0.780990005, 0.364100009), Vec2(0.779209971, 0.386370003), Vec2(0.763859987, 0.386510015), Vec2(0.765590012, 0.364190012), Vec2(0.78154999, 0.341690004), Vec2(0.780990005, 0.364100009), Vec2(0.765590012, 0.364190012), Vec2(0.766129971, 0.341720015), Vec2(0.726880014, 0.430059999), Vec2(0.722109973, 0.451330006), Vec2(0.707249999, 0.45017001), Vec2(0.712010026, 0.429140002), Vec2(0.722109973, 0.451330006), Vec2(0.716369987, 0.472200006), Vec2(0.701409996, 0.470789999), Vec2(0.707249999, 0.45017001), Vec2(0.73724997, 0.451739997), Vec2(0.73168999, 0.472680002), Vec2(0.716369987, 0.472200006), Vec2(0.722109973, 0.451330006), Vec2(0.741980016, 0.43039), Vec2(0.73724997, 0.451739997), Vec2(0.722109973, 0.451330006), Vec2(0.726880014, 0.430059999), Vec2(0.716369987, 0.472200006), Vec2(0.709670007, 0.492729992), Vec2(0.694429994, 0.491030008), Vec2(0.701409996, 0.470789999), Vec2(0.709670007, 0.492729992), Vec2(0.701950014, 0.513010025), Vec2(0.686190009, 0.51098001), Vec2(0.694429994, 0.491030008), Vec2(0.725380003, 0.493279994), Vec2(0.718360007, 0.513629973), Vec2(0.701950014, 0.513010025), Vec2(0.709670007, 0.492729992), Vec2(0.73168999, 0.472680002), Vec2(0.725380003, 0.493279994), Vec2(0.709670007, 0.492729992), Vec2(0.716369987, 0.472200006), Vec2(0.747179985, 0.472339988), Vec2(0.741330028, 0.492760003), Vec2(0.725380003, 0.493279994), Vec2(0.73168999, 0.472680002), Vec2(0.741330028, 0.492760003), Vec2(0.73514998, 0.512889981), Vec2(0.718360007, 0.513629973), Vec2(0.725380003, 0.493279994), Vec2(0.757239997, 0.491329998), Vec2(0.751950026, 0.510909975), Vec2(0.73514998, 0.512889981), Vec2(0.741330028, 0.492760003), Vec2(0.762629986, 0.471359998), Vec2(0.757239997, 0.491329998), Vec2(0.741330028, 0.492760003), Vec2(0.747179985, 0.472339988), Vec2(0.757200003, 0.430269986), Vec2(0.752529979, 0.45153001), Vec2(0.73724997, 0.451739997), Vec2(0.741980016, 0.43039), Vec2(0.752529979, 0.45153001), Vec2(0.747179985, 0.472339988), Vec2(0.73168999, 0.472680002), Vec2(0.73724997, 0.451739997), Vec2(0.76779002, 0.450899988), Vec2(0.762629986, 0.471359998), Vec2(0.747179985, 0.472339988), Vec2(0.752529979, 0.45153001), Vec2(0.772440016, 0.429879993), Vec2(0.76779002, 0.450899988), Vec2(0.752529979, 0.45153001), Vec2(0.757200003, 0.430269986), Vec2(0.787599981, 0.429459989), Vec2(0.782880008, 0.450129986), Vec2(0.76779002, 0.450899988), Vec2(0.772440016, 0.429879993), Vec2(0.782880008, 0.450129986), Vec2(0.777769983, 0.470059991), Vec2(0.762629986, 0.471359998), Vec2(0.76779002, 0.450899988), Vec2(0.79764998, 0.449660003), Vec2(0.792360008, 0.468919992), Vec2(0.777769983, 0.470059991), Vec2(0.782880008, 0.450129986), Vec2(0.802619994, 0.429349989), Vec2(0.79764998, 0.449660003), Vec2(0.782880008, 0.450129986), Vec2(0.787599981, 0.429459989), Vec2(0.777769983, 0.470059991), Vec2(0.77275002, 0.489270002), Vec2(0.757239997, 0.491329998), Vec2(0.762629986, 0.471359998), Vec2(0.77275002, 0.489270002), Vec2(0.768320024, 0.5079), Vec2(0.751950026, 0.510909975), Vec2(0.757239997, 0.491329998), Vec2(0.787419975, 0.487049997), Vec2(0.783689976, 0.504140019), Vec2(0.768320024, 0.5079), Vec2(0.77275002, 0.489270002), Vec2(0.792360008, 0.468919992), Vec2(0.787419975, 0.487049997), Vec2(0.77275002, 0.489270002), Vec2(0.777769983, 0.470059991), Vec2(0.806129992, 0.468719989), Vec2(0.800689995, 0.485509992), Vec2(0.787419975, 0.487049997), Vec2(0.792360008, 0.468919992), Vec2(0.800689995, 0.485509992), Vec2(0.797230005, 0.500100017), Vec2(0.783689976, 0.504140019), Vec2(0.787419975, 0.487049997), Vec2(0.811839998, 0.486330003), Vec2(0.806450009, 0.496930003), Vec2(0.797230005, 0.500100017), Vec2(0.800689995, 0.485509992), Vec2(0.81892997, 0.470479995), Vec2(0.811839998, 0.486330003), Vec2(0.800689995, 0.485509992), Vec2(0.806129992, 0.468719989), Vec2(0.817470014, 0.429969996), Vec2(0.81200999, 0.450069994), Vec2(0.79764998, 0.449660003), Vec2(0.802619994, 0.429349989), Vec2(0.81200999, 0.450069994), Vec2(0.806129992, 0.468719989), Vec2(0.792360008, 0.468919992), Vec2(0.79764998, 0.449660003), Vec2(0.825929999, 0.452010006), Vec2(0.81892997, 0.470479995), Vec2(0.806129992, 0.468719989), Vec2(0.81200999, 0.450069994), Vec2(0.832189977, 0.431739986), Vec2(0.825929999, 0.452010006), Vec2(0.81200999, 0.450069994), Vec2(0.817470014, 0.429969996), Vec2(0.797010005, 0.341650009), Vec2(0.796429992, 0.364039987), Vec2(0.780990005, 0.364100009), Vec2(0.78154999, 0.341690004), Vec2(0.796429992, 0.364039987), Vec2(0.794589996, 0.386260003), Vec2(0.779209971, 0.386370003), Vec2(0.780990005, 0.364100009), Vec2(0.811930001, 0.364069998), Vec2(0.809989989, 0.386330009), Vec2(0.794589996, 0.386260003), Vec2(0.796429992, 0.364039987), Vec2(0.812529981, 0.341610014), Vec2(0.811930001, 0.364069998), Vec2(0.796429992, 0.364039987), Vec2(0.797010005, 0.341650009), Vec2(0.794589996, 0.386260003), Vec2(0.791589975, 0.408120006), Vec2(0.776319981, 0.408340007), Vec2(0.779209971, 0.386370003), Vec2(0.791589975, 0.408120006), Vec2(0.787599981, 0.429459989), Vec2(0.772440016, 0.429879993), Vec2(0.776319981, 0.408340007), Vec2(0.806829989, 0.408170015), Vec2(0.802619994, 0.429349989), Vec2(0.787599981, 0.429459989), Vec2(0.791589975, 0.408120006), Vec2(0.809989989, 0.386330009), Vec2(0.806829989, 0.408170015), Vec2(0.791589975, 0.408120006), Vec2(0.794589996, 0.386260003), Vec2(0.825460017, 0.38677001), Vec2(0.822049975, 0.408760011), Vec2(0.806829989, 0.408170015), Vec2(0.809989989, 0.386330009), Vec2(0.822049975, 0.408760011), Vec2(0.817470014, 0.429969996), Vec2(0.802619994, 0.429349989), Vec2(0.806829989, 0.408170015), Vec2(0.83732003, 0.410189986), Vec2(0.832189977, 0.431739986), Vec2(0.817470014, 0.429969996), Vec2(0.822049975, 0.408760011), Vec2(0.841090024, 0.38775), Vec2(0.83732003, 0.410189986), Vec2(0.822049975, 0.408760011), Vec2(0.825460017, 0.38677001), Vec2(0.828180015, 0.341560006), Vec2(0.82753998, 0.364279985), Vec2(0.811930001, 0.364069998), Vec2(0.812529981, 0.341610014), Vec2(0.82753998, 0.364279985), Vec2(0.825460017, 0.38677001), Vec2(0.809989989, 0.386330009), Vec2(0.811930001, 0.364069998), Vec2(0.843360007, 0.364749998), Vec2(0.841090024, 0.38775), Vec2(0.825460017, 0.38677001), Vec2(0.82753998, 0.364279985), Vec2(0.844060004, 0.341500014), Vec2(0.843360007, 0.364749998), Vec2(0.82753998, 0.364279985), Vec2(0.828180015, 0.341560006), Vec2(0.701359987, 0.170489997), Vec2(0.70905, 0.190830007), Vec2(0.693859994, 0.192540005), Vec2(0.685660005, 0.172519997), Vec2(0.70905, 0.190830007), Vec2(0.715759993, 0.211380005), Vec2(0.700839996, 0.212830007), Vec2(0.693859994, 0.192540005), Vec2(0.724709988, 0.190249994), Vec2(0.731040001, 0.210859999), Vec2(0.715759993, 0.211380005), Vec2(0.70905, 0.190830007), Vec2(0.717710018, 0.169870004), Vec2(0.724709988, 0.190249994), Vec2(0.70905, 0.190830007), Vec2(0.701359987, 0.170489997), Vec2(0.715759993, 0.211380005), Vec2(0.721539974, 0.232270002), Vec2(0.706700027, 0.233459994), Vec2(0.700839996, 0.212830007), Vec2(0.721539974, 0.232270002), Vec2(0.726369977, 0.253540009), Vec2(0.711520016, 0.254500002), Vec2(0.706700027, 0.233459994), Vec2(0.73664999, 0.231810004), Vec2(0.741460025, 0.253149986), Vec2(0.726369977, 0.253540009), Vec2(0.721539974, 0.232270002), Vec2(0.731040001, 0.210859999), Vec2(0.73664999, 0.231810004), Vec2(0.721539974, 0.232270002), Vec2(0.715759993, 0.211380005), Vec2(0.746500015, 0.211160004), Vec2(0.751909971, 0.231959999), Vec2(0.73664999, 0.231810004), Vec2(0.731040001, 0.210859999), Vec2(0.751909971, 0.231959999), Vec2(0.756659985, 0.253210008), Vec2(0.741460025, 0.253149986), Vec2(0.73664999, 0.231810004), Vec2(0.767149985, 0.232529998), Vec2(0.771889985, 0.253529996), Vec2(0.756659985, 0.253210008), Vec2(0.751909971, 0.231959999), Vec2(0.761910021, 0.212080002), Vec2(0.767149985, 0.232529998), Vec2(0.751909971, 0.231959999), Vec2(0.746500015, 0.211160004), Vec2(0.734449983, 0.170599997), Vec2(0.740620017, 0.190740004), Vec2(0.724709988, 0.190249994), Vec2(0.717710018, 0.169870004), Vec2(0.740620017, 0.190740004), Vec2(0.746500015, 0.211160004), Vec2(0.731040001, 0.210859999), Vec2(0.724709988, 0.190249994), Vec2(0.756479979, 0.192129999), Vec2(0.761910021, 0.212080002), Vec2(0.746500015, 0.211160004), Vec2(0.740620017, 0.190740004), Vec2(0.751190007, 0.172560006), Vec2(0.756479979, 0.192129999), Vec2(0.740620017, 0.190740004), Vec2(0.734449983, 0.170599997), Vec2(0.726369977, 0.253540009), Vec2(0.730229974, 0.275189996), Vec2(0.71529001, 0.275920004), Vec2(0.711520016, 0.254500002), Vec2(0.730229974, 0.275189996), Vec2(0.733070016, 0.297179997), Vec2(0.718029976, 0.297670007), Vec2(0.71529001, 0.275920004), Vec2(0.745360017, 0.274879992), Vec2(0.748260021, 0.296959996), Vec2(0.733070016, 0.297179997), Vec2(0.730229974, 0.275189996), Vec2(0.741460025, 0.253149986), Vec2(0.745360017, 0.274879992), Vec2(0.730229974, 0.275189996), Vec2(0.726369977, 0.253540009), Vec2(0.733070016, 0.297179997), Vec2(0.734830022, 0.31942001), Vec2(0.719709992, 0.319680005), Vec2(0.718029976, 0.297670007), Vec2(0.734830022, 0.31942001), Vec2(0.735469997, 0.341789991), Vec2(0.720319986, 0.341809988), Vec2(0.719709992, 0.319680005), Vec2(0.750090003, 0.319290012), Vec2(0.750760019, 0.34176001), Vec2(0.735469997, 0.341789991), Vec2(0.734830022, 0.31942001), Vec2(0.748260021, 0.296959996), Vec2(0.750090003, 0.319290012), Vec2(0.734830022, 0.31942001), Vec2(0.733070016, 0.297179997), Vec2(0.763559997, 0.296950012), Vec2(0.765439987, 0.319270015), Vec2(0.750090003, 0.319290012), Vec2(0.748260021, 0.296959996), Vec2(0.765439987, 0.319270015), Vec2(0.766129971, 0.341720015), Vec2(0.750760019, 0.34176001), Vec2(0.750090003, 0.319290012), Vec2(0.78083998, 0.319279999), Vec2(0.78154999, 0.341690004), Vec2(0.766129971, 0.341720015), Vec2(0.765439987, 0.319270015), Vec2(0.778909981, 0.297019988), Vec2(0.78083998, 0.319279999), Vec2(0.765439987, 0.319270015), Vec2(0.763559997, 0.296950012), Vec2(0.756659985, 0.253210008), Vec2(0.760599971, 0.274890006), Vec2(0.745360017, 0.274879992), Vec2(0.741460025, 0.253149986), Vec2(0.760599971, 0.274890006), Vec2(0.763559997, 0.296950012), Vec2(0.748260021, 0.296959996), Vec2(0.745360017, 0.274879992), Vec2(0.775870025, 0.275059998), Vec2(0.778909981, 0.297019988), Vec2(0.763559997, 0.296950012), Vec2(0.760599971, 0.274890006), Vec2(0.771889985, 0.253529996), Vec2(0.775870025, 0.275059998), Vec2(0.760599971, 0.274890006), Vec2(0.756659985, 0.253210008), Vec2(0.787029982, 0.253879994), Vec2(0.791130006, 0.275200009), Vec2(0.775870025, 0.275059998), Vec2(0.771889985, 0.253529996), Vec2(0.791130006, 0.275200009), Vec2(0.794269979, 0.297049999), Vec2(0.778909981, 0.297019988), Vec2(0.775870025, 0.275059998), Vec2(0.806349993, 0.275079995), Vec2(0.809660017, 0.296900004), Vec2(0.794269979, 0.297049999), Vec2(0.791130006, 0.275200009), Vec2(0.802020013, 0.253919989), Vec2(0.806349993, 0.275079995), Vec2(0.791130006, 0.275200009), Vec2(0.787029982, 0.253879994), Vec2(0.794269979, 0.297049999), Vec2(0.796270013, 0.319260001), Vec2(0.78083998, 0.319279999), Vec2(0.778909981, 0.297019988), Vec2(0.796270013, 0.319260001), Vec2(0.797010005, 0.341650009), Vec2(0.78154999, 0.341690004), Vec2(0.78083998, 0.319279999), Vec2(0.811760008, 0.319150001), Vec2(0.812529981, 0.341610014), Vec2(0.797010005, 0.341650009), Vec2(0.796270013, 0.319260001), Vec2(0.809660017, 0.296900004), Vec2(0.811760008, 0.319150001), Vec2(0.796270013, 0.319260001), Vec2(0.794269979, 0.297049999), Vec2(0.825110018, 0.29637), Vec2(0.82735002, 0.318839997), Vec2(0.811760008, 0.319150001), Vec2(0.809660017, 0.296900004), Vec2(0.82735002, 0.318839997), Vec2(0.828180015, 0.341560006), Vec2(0.812529981, 0.341610014), Vec2(0.811760008, 0.319150001), Vec2(0.843159974, 0.31825), Vec2(0.844060004, 0.341500014), Vec2(0.828180015, 0.341560006), Vec2(0.82735002, 0.318839997), Vec2(0.840709984, 0.29528001), Vec2(0.843159974, 0.31825), Vec2(0.82735002, 0.318839997), Vec2(0.825110018, 0.29637), Vec2(0.816829979, 0.253230006), Vec2(0.821539998, 0.274399996), Vec2(0.806349993, 0.275079995), Vec2(0.802020013, 0.253919989), Vec2(0.821539998, 0.274399996), Vec2(0.825110018, 0.29637), Vec2(0.809660017, 0.296900004), Vec2(0.806349993, 0.275079995), Vec2(0.836769998, 0.272879988), Vec2(0.840709984, 0.29528001), Vec2(0.825110018, 0.29637), Vec2(0.821539998, 0.274399996), Vec2(0.831499994, 0.251370013), Vec2(0.836769998, 0.272879988), Vec2(0.821539998, 0.274399996), Vec2(0.816829979, 0.253230006), Vec2(0.767509997, 0.175549999), Vec2(0.77196002, 0.194130003), Vec2(0.756479979, 0.192129999), Vec2(0.751190007, 0.172560006), Vec2(0.77196002, 0.194130003), Vec2(0.777029991, 0.213320002), Vec2(0.761910021, 0.212080002), Vec2(0.756479979, 0.192129999), Vec2(0.786610007, 0.196290001), Vec2(0.791599989, 0.214389995), Vec2(0.777029991, 0.213320002), Vec2(0.77196002, 0.194130003), Vec2(0.782850027, 0.179260001), Vec2(0.786610007, 0.196290001), Vec2(0.77196002, 0.194130003), Vec2(0.767509997, 0.175549999), Vec2(0.777029991, 0.213320002), Vec2(0.782209992, 0.233229995), Vec2(0.767149985, 0.232529998), Vec2(0.761910021, 0.212080002), Vec2(0.782209992, 0.233229995), Vec2(0.787029982, 0.253879994), Vec2(0.771889985, 0.253529996), Vec2(0.767149985, 0.232529998), Vec2(0.796949983, 0.233630002), Vec2(0.802020013, 0.253919989), Vec2(0.787029982, 0.253879994), Vec2(0.782209992, 0.233229995), Vec2(0.791599989, 0.214389995), Vec2(0.796949983, 0.233630002), Vec2(0.782209992, 0.233229995), Vec2(0.777029991, 0.213320002), Vec2(0.805339992, 0.214530006), Vec2(0.811269999, 0.233150005), Vec2(0.796949983, 0.233630002), Vec2(0.791599989, 0.214389995), Vec2(0.811269999, 0.233150005), Vec2(0.816829979, 0.253230006), Vec2(0.802020013, 0.253919989), Vec2(0.796949983, 0.233630002), Vec2(0.825139999, 0.23116), Vec2(0.831499994, 0.251370013), Vec2(0.816829979, 0.253230006), Vec2(0.811269999, 0.233150005), Vec2(0.818069994, 0.212720007), Vec2(0.825139999, 0.23116), Vec2(0.811269999, 0.233150005), Vec2(0.805339992, 0.214530006), Vec2(0.796360016, 0.183239996), Vec2(0.799860001, 0.19777), Vec2(0.786610007, 0.196290001), Vec2(0.782850027, 0.179260001), Vec2(0.799860001, 0.19777), Vec2(0.805339992, 0.214530006), Vec2(0.791599989, 0.214389995), Vec2(0.786610007, 0.196290001), Vec2(0.810959995, 0.196899995), Vec2(0.818069994, 0.212720007), Vec2(0.805339992, 0.214530006), Vec2(0.799860001, 0.19777), Vec2(0.805589974, 0.186350003), Vec2(0.810959995, 0.196899995), Vec2(0.799860001, 0.19777), Vec2(0.796360016, 0.183239996), Vec2(0.190329999, 0.175870001), Vec2(0.203549996, 0.166720003), Vec2(0.203339994, 0.180059999), Vec2(0.194059998, 0.183160007), Vec2(0.203549996, 0.166720003), Vec2(0.219060004, 0.159769997), Vec2(0.216959998, 0.176129997), Vec2(0.203339994, 0.180059999), Vec2(0.201140001, 0.152940005), Vec2(0.219300002, 0.143490002), Vec2(0.219060004, 0.159769997), Vec2(0.203549996, 0.166720003), Vec2(0.184719995, 0.165069997), Vec2(0.201140001, 0.152940005), Vec2(0.203549996, 0.166720003), Vec2(0.190329999, 0.175870001), Vec2(0.219060004, 0.159769997), Vec2(0.23612, 0.154369995), Vec2(0.232409999, 0.172529995), Vec2(0.216959998, 0.176129997), Vec2(0.23612, 0.154369995), Vec2(0.254070014, 0.150460005), Vec2(0.248820007, 0.169729993), Vec2(0.232409999, 0.172529995), Vec2(0.23872, 0.136319995), Vec2(0.258879989, 0.131229997), Vec2(0.254070014, 0.150460005), Vec2(0.23612, 0.154369995), Vec2(0.219300002, 0.143490002), Vec2(0.23872, 0.136319995), Vec2(0.23612, 0.154369995), Vec2(0.219060004, 0.159769997), Vec2(0.218099996, 0.126959994), Vec2(0.240309998, 0.118160002), Vec2(0.23872, 0.136319995), Vec2(0.219300002, 0.143490002), Vec2(0.240309998, 0.118160002), Vec2(0.263280004, 0.111900002), Vec2(0.258879989, 0.131229997), Vec2(0.23872, 0.136319995), Vec2(0.240970001, 0.0997700021), Vec2(0.267230004, 0.0923700035), Vec2(0.263280004, 0.111900002), Vec2(0.240309998, 0.118160002), Vec2(0.215719998, 0.110040002), Vec2(0.240970001, 0.0997700021), Vec2(0.240309998, 0.118160002), Vec2(0.218099996, 0.126959994), Vec2(0.177990004, 0.152649999), Vec2(0.197170004, 0.138410002), Vec2(0.201140001, 0.152940005), Vec2(0.184719995, 0.165069997), Vec2(0.197170004, 0.138410002), Vec2(0.218099996, 0.126959994), Vec2(0.219300002, 0.143490002), Vec2(0.201140001, 0.152940005), Vec2(0.192000002, 0.123149998), Vec2(0.215719998, 0.110040002), Vec2(0.218099996, 0.126959994), Vec2(0.197170004, 0.138410002), Vec2(0.17024, 0.139139995), Vec2(0.192000002, 0.123149998), Vec2(0.197170004, 0.138410002), Vec2(0.177990004, 0.152649999), Vec2(0.254070014, 0.150460005), Vec2(0.272329986, 0.14813), Vec2(0.265639991, 0.168019995), Vec2(0.248820007, 0.169729993), Vec2(0.272329986, 0.14813), Vec2(0.290410012, 0.147479996), Vec2(0.282409996, 0.167600006), Vec2(0.265639991, 0.168019995), Vec2(0.279229999, 0.128209993), Vec2(0.299199998, 0.127309993), Vec2(0.290410012, 0.147479996), Vec2(0.272329986, 0.14813), Vec2(0.258879989, 0.131229997), Vec2(0.279229999, 0.128209993), Vec2(0.272329986, 0.14813), Vec2(0.254070014, 0.150460005), Vec2(0.290410012, 0.147479996), Vec2(0.307880014, 0.148560002), Vec2(0.298799992, 0.168559998), Vec2(0.282409996, 0.167600006), Vec2(0.307880014, 0.148560002), Vec2(0.324429989, 0.151360005), Vec2(0.314539999, 0.170929998), Vec2(0.298799992, 0.168559998), Vec2(0.31825, 0.128549993), Vec2(0.335970014, 0.131889999), Vec2(0.324429989, 0.151360005), Vec2(0.307880014, 0.148560002), Vec2(0.299199998, 0.127309993), Vec2(0.31825, 0.128549993), Vec2(0.307880014, 0.148560002), Vec2(0.290410012, 0.147479996), Vec2(0.308959991, 0.106980003), Vec2(0.330220014, 0.108429998), Vec2(0.31825, 0.128549993), Vec2(0.299199998, 0.127309993), Vec2(0.330220014, 0.108429998), Vec2(0.349559993, 0.112450004), Vec2(0.335970014, 0.131889999), Vec2(0.31825, 0.128549993), Vec2(0.344199985, 0.0881799981), Vec2(0.365759999, 0.0930700004), Vec2(0.349559993, 0.112450004), Vec2(0.330220014, 0.108429998), Vec2(0.319869995, 0.0864500031), Vec2(0.344199985, 0.0881799981), Vec2(0.330220014, 0.108429998), Vec2(0.308959991, 0.106980003), Vec2(0.263280004, 0.111900002), Vec2(0.28639999, 0.108149998), Vec2(0.279229999, 0.128209993), Vec2(0.258879989, 0.131229997), Vec2(0.28639999, 0.108149998), Vec2(0.308959991, 0.106980003), Vec2(0.299199998, 0.127309993), Vec2(0.279229999, 0.128209993), Vec2(0.293839991, 0.0878800005), Vec2(0.319869995, 0.0864500031), Vec2(0.308959991, 0.106980003), Vec2(0.28639999, 0.108149998), Vec2(0.267230004, 0.0923700035), Vec2(0.293839991, 0.0878800005), Vec2(0.28639999, 0.108149998), Vec2(0.263280004, 0.111900002), Vec2(0.270520002, 0.0725800022), Vec2(0.301319987, 0.0673900023), Vec2(0.293839991, 0.0878800005), Vec2(0.267230004, 0.0923700035), Vec2(0.301319987, 0.0673900023), Vec2(0.331950009, 0.0657199994), Vec2(0.319869995, 0.0864500031), Vec2(0.293839991, 0.0878800005), Vec2(0.308180004, 0.046670001), Vec2(0.34472999, 0.0448499992), Vec2(0.331950009, 0.0657199994), Vec2(0.301319987, 0.0673900023), Vec2(0.272610009, 0.0524899997), Vec2(0.308180004, 0.046670001), Vec2(0.301319987, 0.0673900023), Vec2(0.270520002, 0.0725800022), Vec2(0.331950009, 0.0657199994), Vec2(0.360720009, 0.0678299963), Vec2(0.344199985, 0.0881799981), Vec2(0.319869995, 0.0864500031), Vec2(0.360720009, 0.0678299963), Vec2(0.385479987, 0.0738499984), Vec2(0.365759999, 0.0930700004), Vec2(0.344199985, 0.0881799981), Vec2(0.380259991, 0.0475100018), Vec2(0.410430014, 0.0550500005), Vec2(0.385479987, 0.0738499984), Vec2(0.360720009, 0.0678299963), Vec2(0.34472999, 0.0448499992), Vec2(0.380259991, 0.0475100018), Vec2(0.360720009, 0.0678299963), Vec2(0.331950009, 0.0657199994), Vec2(0.356539994, 0.0238000005), Vec2(0.402429998, 0.0273899995), Vec2(0.380259991, 0.0475100018), Vec2(0.34472999, 0.0448499992), Vec2(0.402429998, 0.0273899995), Vec2(0.444700003, 0.03737), Vec2(0.410430014, 0.0550500005), Vec2(0.380259991, 0.0475100018), Vec2(0.421299994, 0.00769999996), Vec2(0.500389993, 0.0235900003), Vec2(0.444700003, 0.03737), Vec2(0.402429998, 0.0273899995), Vec2(0.363460004, 0.00194999995), Vec2(0.421299994, 0.00769999996), Vec2(0.402429998, 0.0273899995), Vec2(0.356539994, 0.0238000005), Vec2(0.272680014, 0.0319099985), Vec2(0.31310001, 0.0255600009), Vec2(0.308180004, 0.046670001), Vec2(0.272610009, 0.0524899997), Vec2(0.31310001, 0.0255600009), Vec2(0.356539994, 0.0238000005), Vec2(0.34472999, 0.0448499992), Vec2(0.308180004, 0.046670001), Vec2(0.314090014, 0.00343000004), Vec2(0.363460004, 0.00194999995), Vec2(0.356539994, 0.0238000005), Vec2(0.31310001, 0.0255600009), Vec2(0.269739985, 0.0104), Vec2(0.314090014, 0.00343000004), Vec2(0.31310001, 0.0255600009), Vec2(0.272680014, 0.0319099985), Vec2(0.161449999, 0.124810003), Vec2(0.185670003, 0.107270002), Vec2(0.192000002, 0.123149998), Vec2(0.17024, 0.139139995), Vec2(0.185670003, 0.107270002), Vec2(0.212149993, 0.0926600024), Vec2(0.215719998, 0.110040002), Vec2(0.192000002, 0.123149998), Vec2(0.178069994, 0.0908000022), Vec2(0.207230002, 0.0747900009), Vec2(0.212149993, 0.0926600024), Vec2(0.185670003, 0.107270002), Vec2(0.15151, 0.109810002), Vec2(0.178069994, 0.0908000022), Vec2(0.185670003, 0.107270002), Vec2(0.161449999, 0.124810003), Vec2(0.212149993, 0.0926600024), Vec2(0.240580007, 0.0810599998), Vec2(0.240970001, 0.0997700021), Vec2(0.215719998, 0.110040002), Vec2(0.240580007, 0.0810599998), Vec2(0.270520002, 0.0725800022), Vec2(0.267230004, 0.0923700035), Vec2(0.240970001, 0.0997700021), Vec2(0.23883, 0.0619499981), Vec2(0.272610009, 0.0524899997), Vec2(0.270520002, 0.0725800022), Vec2(0.240580007, 0.0810599998), Vec2(0.207230002, 0.0747900009), Vec2(0.23883, 0.0619499981), Vec2(0.240580007, 0.0810599998), Vec2(0.212149993, 0.0926600024), Vec2(0.200680003, 0.0563700013), Vec2(0.23522, 0.0423199981), Vec2(0.23883, 0.0619499981), Vec2(0.207230002, 0.0747900009), Vec2(0.23522, 0.0423199981), Vec2(0.272680014, 0.0319099985), Vec2(0.272610009, 0.0524899997), Vec2(0.23883, 0.0619499981), Vec2(0.229269996, 0.0218700003), Vec2(0.269739985, 0.0104), Vec2(0.272680014, 0.0319099985), Vec2(0.23522, 0.0423199981), Vec2(0.192220002, 0.0372299999), Vec2(0.229269996, 0.0218700003), Vec2(0.23522, 0.0423199981), Vec2(0.200680003, 0.0563700013), Vec2(0.140279993, 0.0941800028), Vec2(0.169029996, 0.073739998), Vec2(0.178069994, 0.0908000022), Vec2(0.15151, 0.109810002), Vec2(0.169029996, 0.073739998), Vec2(0.200680003, 0.0563700013), Vec2(0.207230002, 0.0747900009), Vec2(0.178069994, 0.0908000022), Vec2(0.15839, 0.0560199991), Vec2(0.192220002, 0.0372299999), Vec2(0.200680003, 0.0563700013), Vec2(0.169029996, 0.073739998), Vec2(0.127639994, 0.0779199973), Vec2(0.15839, 0.0560199991), Vec2(0.169029996, 0.073739998), Vec2(0.140279993, 0.0941800028), Vec2(0.324429989, 0.151360005), Vec2(0.339850008, 0.1558), Vec2(0.329450011, 0.174649999), Vec2(0.314539999, 0.170929998), Vec2(0.339850008, 0.1558), Vec2(0.35402, 0.161730006), Vec2(0.343409985, 0.179619998), Vec2(0.329450011, 0.174649999), Vec2(0.352120012, 0.137219995), Vec2(0.366600007, 0.144350007), Vec2(0.35402, 0.161730006), Vec2(0.339850008, 0.1558), Vec2(0.335970014, 0.131889999), Vec2(0.352120012, 0.137219995), Vec2(0.339850008, 0.1558), Vec2(0.324429989, 0.151360005), Vec2(0.35402, 0.161730006), Vec2(0.36688, 0.168909997), Vec2(0.356359988, 0.185609996), Vec2(0.343409985, 0.179619998), Vec2(0.36688, 0.168909997), Vec2(0.378410012, 0.177039996), Vec2(0.368229985, 0.192359999), Vec2(0.356359988, 0.185609996), Vec2(0.379379988, 0.152960002), Vec2(0.390540004, 0.162719995), Vec2(0.378410012, 0.177039996), Vec2(0.36688, 0.168909997), Vec2(0.366600007, 0.144350007), Vec2(0.379379988, 0.152960002), Vec2(0.36688, 0.168909997), Vec2(0.35402, 0.161730006), Vec2(0.381410003, 0.127570003), Vec2(0.393999994, 0.137899995), Vec2(0.379379988, 0.152960002), Vec2(0.366600007, 0.144350007), Vec2(0.393999994, 0.137899995), Vec2(0.404619992, 0.149489999), Vec2(0.390540004, 0.162719995), Vec2(0.379379988, 0.152960002), Vec2(0.410869986, 0.123989999), Vec2(0.420630008, 0.137559995), Vec2(0.404619992, 0.149489999), Vec2(0.393999994, 0.137899995), Vec2(0.398799986, 0.11163), Vec2(0.410869986, 0.123989999), Vec2(0.393999994, 0.137899995), Vec2(0.381410003, 0.127570003), Vec2(0.349559993, 0.112450004), Vec2(0.366649985, 0.118940003), Vec2(0.352120012, 0.137219995), Vec2(0.335970014, 0.131889999), Vec2(0.366649985, 0.118940003), Vec2(0.381410003, 0.127570003), Vec2(0.366600007, 0.144350007), Vec2(0.352120012, 0.137219995), Vec2(0.383920014, 0.101089999), Vec2(0.398799986, 0.11163), Vec2(0.381410003, 0.127570003), Vec2(0.366649985, 0.118940003), Vec2(0.365759999, 0.0930700004), Vec2(0.383920014, 0.101089999), Vec2(0.366649985, 0.118940003), Vec2(0.349559993, 0.112450004), Vec2(0.378410012, 0.177039996), Vec2(0.388550013, 0.185829997), Vec2(0.378960013, 0.199540004), Vec2(0.368229985, 0.192359999), Vec2(0.388550013, 0.185829997), Vec2(0.397190005, 0.194999993), Vec2(0.388429999, 0.206740007), Vec2(0.378960013, 0.199540004), Vec2(0.400099993, 0.173299998), Vec2(0.408010006, 0.184530005), Vec2(0.397190005, 0.194999993), Vec2(0.388550013, 0.185829997), Vec2(0.390540004, 0.162719995), Vec2(0.400099993, 0.173299998), Vec2(0.388550013, 0.185829997), Vec2(0.378410012, 0.177039996), Vec2(0.397190005, 0.194999993), Vec2(0.404000014, 0.204390004), Vec2(0.396369994, 0.213410005), Vec2(0.388429999, 0.206740007), Vec2(0.404000014, 0.204390004), Vec2(0.40823999, 0.214259997), Vec2(0.401600003, 0.218140006), Vec2(0.396369994, 0.213410005), Vec2(0.414130002, 0.196360007), Vec2(0.418190002, 0.208949998), Vec2(0.40823999, 0.214259997), Vec2(0.404000014, 0.204390004), Vec2(0.408010006, 0.184530005), Vec2(0.414130002, 0.196360007), Vec2(0.404000014, 0.204390004), Vec2(0.397190005, 0.194999993), Vec2(0.420610011, 0.175160006), Vec2(0.426070005, 0.188979998), Vec2(0.414130002, 0.196360007), Vec2(0.408010006, 0.184530005), Vec2(0.426070005, 0.188979998), Vec2(0.429830015, 0.203459993), Vec2(0.418190002, 0.208949998), Vec2(0.414130002, 0.196360007), Vec2(0.43937999, 0.182390004), Vec2(0.44264999, 0.198310003), Vec2(0.429830015, 0.203459993), Vec2(0.426070005, 0.188979998), Vec2(0.434689999, 0.166930005), Vec2(0.43937999, 0.182390004), Vec2(0.426070005, 0.188979998), Vec2(0.420610011, 0.175160006), Vec2(0.404619992, 0.149489999), Vec2(0.413459986, 0.161980003), Vec2(0.400099993, 0.173299998), Vec2(0.390540004, 0.162719995), Vec2(0.413459986, 0.161980003), Vec2(0.420610011, 0.175160006), Vec2(0.408010006, 0.184530005), Vec2(0.400099993, 0.173299998), Vec2(0.428490013, 0.15196), Vec2(0.434689999, 0.166930005), Vec2(0.420610011, 0.175160006), Vec2(0.413459986, 0.161980003), Vec2(0.420630008, 0.137559995), Vec2(0.428490013, 0.15196), Vec2(0.413459986, 0.161980003), Vec2(0.404619992, 0.149489999), Vec2(0.438470006, 0.127269998), Vec2(0.444979995, 0.143480003), Vec2(0.428490013, 0.15196), Vec2(0.420630008, 0.137559995), Vec2(0.444979995, 0.143480003), Vec2(0.449990004, 0.160019994), Vec2(0.434689999, 0.166930005), Vec2(0.428490013, 0.15196), Vec2(0.462700009, 0.136889994), Vec2(0.466239989, 0.154719993), Vec2(0.449990004, 0.160019994), Vec2(0.444979995, 0.143480003), Vec2(0.457980007, 0.119110003), Vec2(0.462700009, 0.136889994), Vec2(0.444979995, 0.143480003), Vec2(0.438470006, 0.127269998), Vec2(0.449990004, 0.160019994), Vec2(0.453729987, 0.176819995), Vec2(0.43937999, 0.182390004), Vec2(0.434689999, 0.166930005), Vec2(0.453729987, 0.176819995), Vec2(0.456360012, 0.193859994), Vec2(0.44264999, 0.198310003), Vec2(0.43937999, 0.182390004), Vec2(0.46886, 0.172539994), Vec2(0.470699996, 0.190410003), Vec2(0.456360012, 0.193859994), Vec2(0.453729987, 0.176819995), Vec2(0.466239989, 0.154719993), Vec2(0.46886, 0.172539994), Vec2(0.453729987, 0.176819995), Vec2(0.449990004, 0.160019994), Vec2(0.483150005, 0.151309997), Vec2(0.484499991, 0.169809997), Vec2(0.46886, 0.172539994), Vec2(0.466239989, 0.154719993), Vec2(0.484499991, 0.169809997), Vec2(0.485439986, 0.188199997), Vec2(0.470699996, 0.190410003), Vec2(0.46886, 0.172539994), Vec2(0.500389993, 0.168799996), Vec2(0.500389993, 0.187380001), Vec2(0.485439986, 0.188199997), Vec2(0.484499991, 0.169809997), Vec2(0.500389993, 0.150049999), Vec2(0.500389993, 0.168799996), Vec2(0.484499991, 0.169809997), Vec2(0.483150005, 0.151309997), Vec2(0.478810012, 0.11366), Vec2(0.48131001, 0.132609993), Vec2(0.462700009, 0.136889994), Vec2(0.457980007, 0.119110003), Vec2(0.48131001, 0.132609993), Vec2(0.483150005, 0.151309997), Vec2(0.466239989, 0.154719993), Vec2(0.462700009, 0.136889994), Vec2(0.500389993, 0.130999997), Vec2(0.500389993, 0.150049999), Vec2(0.483150005, 0.151309997), Vec2(0.48131001, 0.132609993), Vec2(0.500389993, 0.111529998), Vec2(0.500389993, 0.130999997), Vec2(0.48131001, 0.132609993), Vec2(0.478810012, 0.11366), Vec2(0.385479987, 0.0738499984), Vec2(0.404700011, 0.0839999989), Vec2(0.383920014, 0.101089999), Vec2(0.365759999, 0.0930700004), Vec2(0.404700011, 0.0839999989), Vec2(0.419149995, 0.0969699994), Vec2(0.398799986, 0.11163), Vec2(0.383920014, 0.101089999), Vec2(0.430110008, 0.0683600008), Vec2(0.442900002, 0.0843499973), Vec2(0.419149995, 0.0969699994), Vec2(0.404700011, 0.0839999989), Vec2(0.410430014, 0.0550500005), Vec2(0.430110008, 0.0683600008), Vec2(0.404700011, 0.0839999989), Vec2(0.385479987, 0.0738499984), Vec2(0.419149995, 0.0969699994), Vec2(0.430079997, 0.11163), Vec2(0.410869986, 0.123989999), Vec2(0.398799986, 0.11163), Vec2(0.430079997, 0.11163), Vec2(0.438470006, 0.127269998), Vec2(0.420630008, 0.137559995), Vec2(0.410869986, 0.123989999), Vec2(0.451660007, 0.101489998), Vec2(0.457980007, 0.119110003), Vec2(0.438470006, 0.127269998), Vec2(0.430079997, 0.11163), Vec2(0.442900002, 0.0843499973), Vec2(0.451660007, 0.101489998), Vec2(0.430079997, 0.11163), Vec2(0.419149995, 0.0969699994), Vec2(0.470209986, 0.0749899969), Vec2(0.475340009, 0.0944299996), Vec2(0.451660007, 0.101489998), Vec2(0.442900002, 0.0843499973), Vec2(0.475340009, 0.0944299996), Vec2(0.478810012, 0.11366), Vec2(0.457980007, 0.119110003), Vec2(0.451660007, 0.101489998), Vec2(0.500389993, 0.0915099978), Vec2(0.500389993, 0.111529998), Vec2(0.478810012, 0.11366), Vec2(0.475340009, 0.0944299996), Vec2(0.500389993, 0.0707300007), Vec2(0.500389993, 0.0915099978), Vec2(0.475340009, 0.0944299996), Vec2(0.470209986, 0.0749899969), Vec2(0.444700003, 0.03737), Vec2(0.461699992, 0.0555999987), Vec2(0.430110008, 0.0683600008), Vec2(0.410430014, 0.0550500005), Vec2(0.461699992, 0.0555999987), Vec2(0.470209986, 0.0749899969), Vec2(0.442900002, 0.0843499973), Vec2(0.430110008, 0.0683600008), Vec2(0.500389993, 0.0486599989), Vec2(0.500389993, 0.0707300007), Vec2(0.470209986, 0.0749899969), Vec2(0.461699992, 0.0555999987), Vec2(0.500389993, 0.0235900003), Vec2(0.500389993, 0.0486599989), Vec2(0.461699992, 0.0555999987), Vec2(0.444700003, 0.03737), Vec2(0.554970026, 0.0373000018), Vec2(0.538860023, 0.0546699986), Vec2(0.500389993, 0.0486599989), Vec2(0.500389993, 0.0235900003), Vec2(0.538860023, 0.0546699986), Vec2(0.530470014, 0.0741500035), Vec2(0.500389993, 0.0707300007), Vec2(0.500389993, 0.0486599989), Vec2(0.570439994, 0.0678500012), Vec2(0.557780027, 0.0835099965), Vec2(0.530470014, 0.0741500035), Vec2(0.538860023, 0.0546699986), Vec2(0.589569986, 0.0550599992), Vec2(0.570439994, 0.0678500012), Vec2(0.538860023, 0.0546699986), Vec2(0.554970026, 0.0373000018), Vec2(0.530470014, 0.0741500035), Vec2(0.525370002, 0.0937900022), Vec2(0.500389993, 0.0915099978), Vec2(0.500389993, 0.0707300007), Vec2(0.525370002, 0.0937900022), Vec2(0.521920025, 0.113179997), Vec2(0.500389993, 0.111529998), Vec2(0.500389993, 0.0915099978), Vec2(0.54904002, 0.100620002), Vec2(0.542729974, 0.118330002), Vec2(0.521920025, 0.113179997), Vec2(0.525370002, 0.0937900022), Vec2(0.557780027, 0.0835099965), Vec2(0.54904002, 0.100620002), Vec2(0.525370002, 0.0937900022), Vec2(0.530470014, 0.0741500035), Vec2(0.581560016, 0.0963900015), Vec2(0.570640028, 0.110820003), Vec2(0.54904002, 0.100620002), Vec2(0.557780027, 0.0835099965), Vec2(0.570640028, 0.110820003), Vec2(0.562250018, 0.126409993), Vec2(0.542729974, 0.118330002), Vec2(0.54904002, 0.100620002), Vec2(0.589890003, 0.123389997), Vec2(0.580110013, 0.136790007), Vec2(0.562250018, 0.126409993), Vec2(0.570640028, 0.110820003), Vec2(0.60194999, 0.111340001), Vec2(0.589890003, 0.123389997), Vec2(0.570640028, 0.110820003), Vec2(0.581560016, 0.0963900015), Vec2(0.614889979, 0.0740899965), Vec2(0.595910013, 0.0838200003), Vec2(0.570439994, 0.0678500012), Vec2(0.589569986, 0.0550599992), Vec2(0.595910013, 0.0838200003), Vec2(0.581560016, 0.0963900015), Vec2(0.557780027, 0.0835099965), Vec2(0.570439994, 0.0678500012), Vec2(0.616760015, 0.101180002), Vec2(0.60194999, 0.111340001), Vec2(0.581560016, 0.0963900015), Vec2(0.595910013, 0.0838200003), Vec2(0.634829998, 0.0935700014), Vec2(0.616760015, 0.101180002), Vec2(0.595910013, 0.0838200003), Vec2(0.614889979, 0.0740899965), Vec2(0.521920025, 0.113179997), Vec2(0.519439995, 0.132259995), Vec2(0.500389993, 0.130999997), Vec2(0.500389993, 0.111529998), Vec2(0.519439995, 0.132259995), Vec2(0.517610013, 0.151030004), Vec2(0.500389993, 0.150049999), Vec2(0.500389993, 0.130999997), Vec2(0.538030028, 0.136240005), Vec2(0.534510016, 0.154170007), Vec2(0.517610013, 0.151030004), Vec2(0.519439995, 0.132259995), Vec2(0.542729974, 0.118330002), Vec2(0.538030028, 0.136240005), Vec2(0.519439995, 0.132259995), Vec2(0.521920025, 0.113179997), Vec2(0.517610013, 0.151030004), Vec2(0.516279995, 0.169579998), Vec2(0.500389993, 0.168799996), Vec2(0.500389993, 0.150049999), Vec2(0.516279995, 0.169579998), Vec2(0.515349984, 0.188010007), Vec2(0.500389993, 0.187380001), Vec2(0.500389993, 0.168799996), Vec2(0.531910002, 0.172079995), Vec2(0.530099988, 0.190019995), Vec2(0.515349984, 0.188010007), Vec2(0.516279995, 0.169579998), Vec2(0.534510016, 0.154170007), Vec2(0.531910002, 0.172079995), Vec2(0.516279995, 0.169579998), Vec2(0.517610013, 0.151030004), Vec2(0.550750017, 0.159290001), Vec2(0.547029972, 0.176170006), Vec2(0.531910002, 0.172079995), Vec2(0.534510016, 0.154170007), Vec2(0.547029972, 0.176170006), Vec2(0.544420004, 0.193299994), Vec2(0.530099988, 0.190019995), Vec2(0.531910002, 0.172079995), Vec2(0.561360002, 0.181649998), Vec2(0.558099985, 0.19765), Vec2(0.544420004, 0.193299994), Vec2(0.547029972, 0.176170006), Vec2(0.566039979, 0.166130006), Vec2(0.561360002, 0.181649998), Vec2(0.547029972, 0.176170006), Vec2(0.550750017, 0.159290001), Vec2(0.562250018, 0.126409993), Vec2(0.555750012, 0.142660007), Vec2(0.538030028, 0.136240005), Vec2(0.542729974, 0.118330002), Vec2(0.555750012, 0.142660007), Vec2(0.550750017, 0.159290001), Vec2(0.534510016, 0.154170007), Vec2(0.538030028, 0.136240005), Vec2(0.572250009, 0.151130006), Vec2(0.566039979, 0.166130006), Vec2(0.550750017, 0.159290001), Vec2(0.555750012, 0.142660007), Vec2(0.580110013, 0.136790007), Vec2(0.572250009, 0.151130006), Vec2(0.555750012, 0.142660007), Vec2(0.562250018, 0.126409993), Vec2(0.59612, 0.14892), Vec2(0.587260008, 0.161269993), Vec2(0.572250009, 0.151130006), Vec2(0.580110013, 0.136790007), Vec2(0.587260008, 0.161269993), Vec2(0.5801, 0.17441), Vec2(0.566039979, 0.166130006), Vec2(0.572250009, 0.151130006), Vec2(0.600589991, 0.172800004), Vec2(0.59266001, 0.183919996), Vec2(0.5801, 0.17441), Vec2(0.587260008, 0.161269993), Vec2(0.610159993, 0.162400007), Vec2(0.600589991, 0.172800004), Vec2(0.587260008, 0.161269993), Vec2(0.59612, 0.14892), Vec2(0.5801, 0.17441), Vec2(0.574630022, 0.188250005), Vec2(0.561360002, 0.181649998), Vec2(0.566039979, 0.166130006), Vec2(0.574630022, 0.188250005), Vec2(0.570869982, 0.202779993), Vec2(0.558099985, 0.19765), Vec2(0.561360002, 0.181649998), Vec2(0.58653003, 0.195720002), Vec2(0.582449973, 0.208340004), Vec2(0.570869982, 0.202779993), Vec2(0.574630022, 0.188250005), Vec2(0.59266001, 0.183919996), Vec2(0.58653003, 0.195720002), Vec2(0.574630022, 0.188250005), Vec2(0.5801, 0.17441), Vec2(0.603410006, 0.194590002), Vec2(0.596599996, 0.203909993), Vec2(0.58653003, 0.195720002), Vec2(0.59266001, 0.183919996), Vec2(0.596599996, 0.203909993), Vec2(0.592339993, 0.213760003), Vec2(0.582449973, 0.208340004), Vec2(0.58653003, 0.195720002), Vec2(0.604160011, 0.213080004), Vec2(0.598919988, 0.217739999), Vec2(0.592339993, 0.213760003), Vec2(0.596599996, 0.203909993), Vec2(0.612079978, 0.206560001), Vec2(0.604160011, 0.213080004), Vec2(0.596599996, 0.203909993), Vec2(0.603410006, 0.194590002), Vec2(0.622179985, 0.177019998), Vec2(0.612049997, 0.18558), Vec2(0.600589991, 0.172800004), Vec2(0.610159993, 0.162400007), Vec2(0.612049997, 0.18558), Vec2(0.603410006, 0.194590002), Vec2(0.59266001, 0.183919996), Vec2(0.600589991, 0.172800004), Vec2(0.621510029, 0.199560001), Vec2(0.612079978, 0.206560001), Vec2(0.603410006, 0.194590002), Vec2(0.612049997, 0.18558), Vec2(0.632189989, 0.192650005), Vec2(0.621510029, 0.199560001), Vec2(0.612049997, 0.18558), Vec2(0.622179985, 0.177019998), Vec2(0.65109998, 0.113219999), Vec2(0.634060025, 0.119309999), Vec2(0.616760015, 0.101180002), Vec2(0.634829998, 0.0935700014), Vec2(0.634060025, 0.119309999), Vec2(0.619329989, 0.127570003), Vec2(0.60194999, 0.111340001), Vec2(0.616760015, 0.101180002), Vec2(0.648519993, 0.137889996), Vec2(0.634079993, 0.144649997), Vec2(0.619329989, 0.127570003), Vec2(0.634060025, 0.119309999), Vec2(0.664640009, 0.132939994), Vec2(0.648519993, 0.137889996), Vec2(0.634060025, 0.119309999), Vec2(0.65109998, 0.113219999), Vec2(0.619329989, 0.127570003), Vec2(0.606750011, 0.137569994), Vec2(0.589890003, 0.123389997), Vec2(0.60194999, 0.111340001), Vec2(0.606750011, 0.137569994), Vec2(0.59612, 0.14892), Vec2(0.580110013, 0.136790007), Vec2(0.589890003, 0.123389997), Vec2(0.621309996, 0.152930006), Vec2(0.610159993, 0.162400007), Vec2(0.59612, 0.14892), Vec2(0.606750011, 0.137569994), Vec2(0.634079993, 0.144649997), Vec2(0.621309996, 0.152930006), Vec2(0.606750011, 0.137569994), Vec2(0.619329989, 0.127570003), Vec2(0.646520019, 0.16234), Vec2(0.63369, 0.169180006), Vec2(0.621309996, 0.152930006), Vec2(0.634079993, 0.144649997), Vec2(0.63369, 0.169180006), Vec2(0.622179985, 0.177019998), Vec2(0.610159993, 0.162400007), Vec2(0.621309996, 0.152930006), Vec2(0.643999994, 0.186210006), Vec2(0.632189989, 0.192650005), Vec2(0.622179985, 0.177019998), Vec2(0.63369, 0.169180006), Vec2(0.656889975, 0.180539995), Vec2(0.643999994, 0.186210006), Vec2(0.63369, 0.169180006), Vec2(0.646520019, 0.16234), Vec2(0.67602998, 0.152689993), Vec2(0.660650015, 0.156760007), Vec2(0.648519993, 0.137889996), Vec2(0.664640009, 0.132939994), Vec2(0.660650015, 0.156760007), Vec2(0.646520019, 0.16234), Vec2(0.634079993, 0.144649997), Vec2(0.648519993, 0.137889996), Vec2(0.670799971, 0.175909996), Vec2(0.656889975, 0.180539995), Vec2(0.646520019, 0.16234), Vec2(0.660650015, 0.156760007), Vec2(0.685660005, 0.172519997), Vec2(0.670799971, 0.175909996), Vec2(0.660650015, 0.156760007), Vec2(0.67602998, 0.152689993), Vec2(0.858929992, 0.0961600021), Vec2(0.830470026, 0.0758399963), Vec2(0.841040015, 0.0580400005), Vec2(0.871450007, 0.0797699988), Vec2(0.830470026, 0.0758399963), Vec2(0.799139977, 0.0584900007), Vec2(0.807600021, 0.0392899998), Vec2(0.841040015, 0.0580400005), Vec2(0.821529984, 0.0930500031), Vec2(0.792649984, 0.0770500004), Vec2(0.799139977, 0.0584900007), Vec2(0.830470026, 0.0758399963), Vec2(0.847829998, 0.111960001), Vec2(0.821529984, 0.0930500031), Vec2(0.830470026, 0.0758399963), Vec2(0.858929992, 0.0961600021), Vec2(0.799139977, 0.0584900007), Vec2(0.764919996, 0.0443399996), Vec2(0.770950019, 0.0238300003), Vec2(0.807600021, 0.0392899998), Vec2(0.764919996, 0.0443399996), Vec2(0.727729976, 0.0337300003), Vec2(0.730799973, 0.0120599996), Vec2(0.770950019, 0.0238300003), Vec2(0.76135999, 0.0641499981), Vec2(0.727869987, 0.0545599982), Vec2(0.727729976, 0.0337300003), Vec2(0.764919996, 0.0443399996), Vec2(0.792649984, 0.0770500004), Vec2(0.76135999, 0.0641499981), Vec2(0.764919996, 0.0443399996), Vec2(0.799139977, 0.0584900007), Vec2(0.787840009, 0.0951000005), Vec2(0.7597, 0.0834600031), Vec2(0.76135999, 0.0641499981), Vec2(0.792649984, 0.0770500004), Vec2(0.7597, 0.0834600031), Vec2(0.730069995, 0.0748599991), Vec2(0.727869987, 0.0545599982), Vec2(0.76135999, 0.0641499981), Vec2(0.75940001, 0.102349997), Vec2(0.733410001, 0.0947899967), Vec2(0.730069995, 0.0748599991), Vec2(0.7597, 0.0834600031), Vec2(0.784370005, 0.112669997), Vec2(0.75940001, 0.102349997), Vec2(0.7597, 0.0834600031), Vec2(0.787840009, 0.0951000005), Vec2(0.838029981, 0.127169997), Vec2(0.814050019, 0.109700002), Vec2(0.821529984, 0.0930500031), Vec2(0.847829998, 0.111960001), Vec2(0.814050019, 0.109700002), Vec2(0.787840009, 0.0951000005), Vec2(0.792649984, 0.0770500004), Vec2(0.821529984, 0.0930500031), Vec2(0.807829976, 0.125780001), Vec2(0.784370005, 0.112669997), Vec2(0.787840009, 0.0951000005), Vec2(0.814050019, 0.109700002), Vec2(0.829349995, 0.141719997), Vec2(0.807829976, 0.125780001), Vec2(0.814050019, 0.109700002), Vec2(0.838029981, 0.127169997), Vec2(0.727729976, 0.0337300003), Vec2(0.687520027, 0.0271099992), Vec2(0.686619997, 0.00461000018), Vec2(0.730799973, 0.0120599996), Vec2(0.687520027, 0.0271099992), Vec2(0.644299984, 0.02513), Vec2(0.63707, 0.00246000011), Vec2(0.686619997, 0.00461000018), Vec2(0.692600012, 0.0485499986), Vec2(0.656340003, 0.0464400016), Vec2(0.644299984, 0.02513), Vec2(0.687520027, 0.0271099992), Vec2(0.727869987, 0.0545599982), Vec2(0.692600012, 0.0485499986), Vec2(0.687520027, 0.0271099992), Vec2(0.727729976, 0.0337300003), Vec2(0.644299984, 0.02513), Vec2(0.598770022, 0.0284499992), Vec2(0.578649998, 0.0076700002), Vec2(0.63707, 0.00246000011), Vec2(0.598770022, 0.0284499992), Vec2(0.554970026, 0.0373000018), Vec2(0.500389993, 0.0235900003), Vec2(0.578649998, 0.0076700002), Vec2(0.620769978, 0.048489999), Vec2(0.589569986, 0.0550599992), Vec2(0.554970026, 0.0373000018), Vec2(0.598770022, 0.0284499992), Vec2(0.656340003, 0.0464400016), Vec2(0.620769978, 0.048489999), Vec2(0.598770022, 0.0284499992), Vec2(0.644299984, 0.02513), Vec2(0.669089973, 0.0673699975), Vec2(0.640150011, 0.068810001), Vec2(0.620769978, 0.048489999), Vec2(0.656340003, 0.0464400016), Vec2(0.640150011, 0.068810001), Vec2(0.614889979, 0.0740899965), Vec2(0.589569986, 0.0550599992), Vec2(0.620769978, 0.048489999), Vec2(0.656589985, 0.089259997), Vec2(0.634829998, 0.0935700014), Vec2(0.614889979, 0.0740899965), Vec2(0.640150011, 0.068810001), Vec2(0.681060016, 0.0881400034), Vec2(0.656589985, 0.089259997), Vec2(0.640150011, 0.068810001), Vec2(0.669089973, 0.0673699975), Vec2(0.730069995, 0.0748599991), Vec2(0.699549973, 0.0694399998), Vec2(0.692600012, 0.0485499986), Vec2(0.727869987, 0.0545599982), Vec2(0.699549973, 0.0694399998), Vec2(0.669089973, 0.0673699975), Vec2(0.656340003, 0.0464400016), Vec2(0.692600012, 0.0485499986), Vec2(0.707019985, 0.0900299996), Vec2(0.681060016, 0.0881400034), Vec2(0.669089973, 0.0673699975), Vec2(0.699549973, 0.0694399998), Vec2(0.733410001, 0.0947899967), Vec2(0.707019985, 0.0900299996), Vec2(0.699549973, 0.0694399998), Vec2(0.730069995, 0.0748599991), Vec2(0.737330019, 0.114430003), Vec2(0.714359999, 0.110380001), Vec2(0.707019985, 0.0900299996), Vec2(0.733410001, 0.0947899967), Vec2(0.714359999, 0.110380001), Vec2(0.691839993, 0.108769998), Vec2(0.681060016, 0.0881400034), Vec2(0.707019985, 0.0900299996), Vec2(0.721369982, 0.130539998), Vec2(0.701439977, 0.129240006), Vec2(0.691839993, 0.108769998), Vec2(0.714359999, 0.110380001), Vec2(0.741609991, 0.133860007), Vec2(0.721369982, 0.130539998), Vec2(0.714359999, 0.110380001), Vec2(0.737330019, 0.114430003), Vec2(0.691839993, 0.108769998), Vec2(0.670520008, 0.109690003), Vec2(0.656589985, 0.089259997), Vec2(0.681060016, 0.0881400034), Vec2(0.670520008, 0.109690003), Vec2(0.65109998, 0.113219999), Vec2(0.634829998, 0.0935700014), Vec2(0.656589985, 0.089259997), Vec2(0.682380021, 0.130030006), Vec2(0.664640009, 0.132939994), Vec2(0.65109998, 0.113219999), Vec2(0.670520008, 0.109690003), Vec2(0.701439977, 0.129240006), Vec2(0.682380021, 0.130030006), Vec2(0.670520008, 0.109690003), Vec2(0.691839993, 0.108769998), Vec2(0.710009992, 0.149580002), Vec2(0.692550004, 0.15027), Vec2(0.682380021, 0.130030006), Vec2(0.701439977, 0.129240006), Vec2(0.692550004, 0.15027), Vec2(0.67602998, 0.152689993), Vec2(0.664640009, 0.132939994), Vec2(0.682380021, 0.130030006), Vec2(0.701359987, 0.170489997), Vec2(0.685660005, 0.172519997), Vec2(0.67602998, 0.152689993), Vec2(0.692550004, 0.15027), Vec2(0.717710018, 0.169870004), Vec2(0.701359987, 0.170489997), Vec2(0.692550004, 0.15027), Vec2(0.710009992, 0.149580002), Vec2(0.746219993, 0.153190002), Vec2(0.728049994, 0.150580004), Vec2(0.721369982, 0.130539998), Vec2(0.741609991, 0.133860007), Vec2(0.728049994, 0.150580004), Vec2(0.710009992, 0.149580002), Vec2(0.701439977, 0.129240006), Vec2(0.721369982, 0.130539998), Vec2(0.734449983, 0.170599997), Vec2(0.717710018, 0.169870004), Vec2(0.710009992, 0.149580002), Vec2(0.728049994, 0.150580004), Vec2(0.751190007, 0.172560006), Vec2(0.734449983, 0.170599997), Vec2(0.728049994, 0.150580004), Vec2(0.746219993, 0.153190002), Vec2(0.821680009, 0.155430004), Vec2(0.802730024, 0.141210005), Vec2(0.807829976, 0.125780001), Vec2(0.829349995, 0.141719997), Vec2(0.802730024, 0.141210005), Vec2(0.78204, 0.129749998), Vec2(0.784370005, 0.112669997), Vec2(0.807829976, 0.125780001), Vec2(0.79877001, 0.155890003), Vec2(0.780830026, 0.146410003), Vec2(0.78204, 0.129749998), Vec2(0.802730024, 0.141210005), Vec2(0.814970016, 0.168009996), Vec2(0.79877001, 0.155890003), Vec2(0.802730024, 0.141210005), Vec2(0.821680009, 0.155430004), Vec2(0.78204, 0.129749998), Vec2(0.76007998, 0.12088), Vec2(0.75940001, 0.102349997), Vec2(0.784370005, 0.112669997), Vec2(0.76007998, 0.12088), Vec2(0.737330019, 0.114430003), Vec2(0.733410001, 0.0947899967), Vec2(0.75940001, 0.102349997), Vec2(0.761609972, 0.139139995), Vec2(0.741609991, 0.133860007), Vec2(0.737330019, 0.114430003), Vec2(0.76007998, 0.12088), Vec2(0.780830026, 0.146410003), Vec2(0.761609972, 0.139139995), Vec2(0.76007998, 0.12088), Vec2(0.78204, 0.129749998), Vec2(0.780969977, 0.16279), Vec2(0.764050007, 0.157289997), Vec2(0.761609972, 0.139139995), Vec2(0.780830026, 0.146410003), Vec2(0.764050007, 0.157289997), Vec2(0.746219993, 0.153190002), Vec2(0.741609991, 0.133860007), Vec2(0.761609972, 0.139139995), Vec2(0.767509997, 0.175549999), Vec2(0.751190007, 0.172560006), Vec2(0.746219993, 0.153190002), Vec2(0.764050007, 0.157289997), Vec2(0.782850027, 0.179260001), Vec2(0.767509997, 0.175549999), Vec2(0.764050007, 0.157289997), Vec2(0.780969977, 0.16279), Vec2(0.809329987, 0.178929999), Vec2(0.796320021, 0.16979), Vec2(0.79877001, 0.155890003), Vec2(0.814970016, 0.168009996), Vec2(0.796320021, 0.16979), Vec2(0.780969977, 0.16279), Vec2(0.780830026, 0.146410003), Vec2(0.79877001, 0.155890003), Vec2(0.796360016, 0.183239996), Vec2(0.782850027, 0.179260001), Vec2(0.780969977, 0.16279), Vec2(0.796320021, 0.16979), Vec2(0.805589974, 0.186350003), Vec2(0.796360016, 0.183239996), Vec2(0.796320021, 0.16979), Vec2(0.809329987, 0.178929999), Vec2(0.190530002, 0.502749979), Vec2(0.179619998, 0.489800006), Vec2(0.188820004, 0.484710008), Vec2(0.194230005, 0.495350003), Vec2(0.179619998, 0.489800006), Vec2(0.169829994, 0.473269999), Vec2(0.181649998, 0.468769997), Vec2(0.188820004, 0.484710008), Vec2(0.170719996, 0.498369992), Vec2(0.158350006, 0.480349988), Vec2(0.169829994, 0.473269999), Vec2(0.179619998, 0.489800006), Vec2(0.184980005, 0.513610005), Vec2(0.170719996, 0.498369992), Vec2(0.179619998, 0.489800006), Vec2(0.190530002, 0.502749979), Vec2(0.169829994, 0.473269999), Vec2(0.161090001, 0.454160005), Vec2(0.174510002, 0.450219989), Vec2(0.181649998, 0.468769997), Vec2(0.161090001, 0.454160005), Vec2(0.153569996, 0.433169991), Vec2(0.168099999, 0.429879993), Vec2(0.174510002, 0.450219989), Vec2(0.147750005, 0.460040003), Vec2(0.138909996, 0.437940001), Vec2(0.153569996, 0.433169991), Vec2(0.161090001, 0.454160005), Vec2(0.158350006, 0.480349988), Vec2(0.147750005, 0.460040003), Vec2(0.161090001, 0.454160005), Vec2(0.169829994, 0.473269999), Vec2(0.146709993, 0.489329994), Vec2(0.134210005, 0.467550009), Vec2(0.147750005, 0.460040003), Vec2(0.158350006, 0.480349988), Vec2(0.134210005, 0.467550009), Vec2(0.123899996, 0.44400999), Vec2(0.138909996, 0.437940001), Vec2(0.147750005, 0.460040003), Vec2(0.120169997, 0.476319999), Vec2(0.108309999, 0.451160014), Vec2(0.123899996, 0.44400999), Vec2(0.134210005, 0.467550009), Vec2(0.134550005, 0.499680012), Vec2(0.120169997, 0.476319999), Vec2(0.134210005, 0.467550009), Vec2(0.146709993, 0.489329994), Vec2(0.178340003, 0.52609998), Vec2(0.161420003, 0.508979976), Vec2(0.170719996, 0.498369992), Vec2(0.184980005, 0.513610005), Vec2(0.161420003, 0.508979976), Vec2(0.146709993, 0.489329994), Vec2(0.158350006, 0.480349988), Vec2(0.170719996, 0.498369992), Vec2(0.151419997, 0.520910025), Vec2(0.134550005, 0.499680012), Vec2(0.146709993, 0.489329994), Vec2(0.161420003, 0.508979976), Vec2(0.170719996, 0.539680004), Vec2(0.151419997, 0.520910025), Vec2(0.161420003, 0.508979976), Vec2(0.178340003, 0.52609998), Vec2(0.153569996, 0.433169991), Vec2(0.147499993, 0.410809994), Vec2(0.162780002, 0.408250004), Vec2(0.168099999, 0.429879993), Vec2(0.147499993, 0.410809994), Vec2(0.143040001, 0.387490004), Vec2(0.158830002, 0.385720015), Vec2(0.162780002, 0.408250004), Vec2(0.131899998, 0.41444999), Vec2(0.126809999, 0.389970005), Vec2(0.143040001, 0.387490004), Vec2(0.147499993, 0.410809994), Vec2(0.138909996, 0.437940001), Vec2(0.131899998, 0.41444999), Vec2(0.147499993, 0.410809994), Vec2(0.153569996, 0.433169991), Vec2(0.143040001, 0.387490004), Vec2(0.140310004, 0.363550007), Vec2(0.156379998, 0.362619996), Vec2(0.158830002, 0.385720015), Vec2(0.140310004, 0.363550007), Vec2(0.139359996, 0.339329988), Vec2(0.155520007, 0.339249998), Vec2(0.156379998, 0.362619996), Vec2(0.123709999, 0.364850014), Vec2(0.12263, 0.339430004), Vec2(0.139359996, 0.339329988), Vec2(0.140310004, 0.363550007), Vec2(0.126809999, 0.389970005), Vec2(0.123709999, 0.364850014), Vec2(0.140310004, 0.363550007), Vec2(0.143040001, 0.387490004), Vec2(0.109949999, 0.393119991), Vec2(0.106409997, 0.36649999), Vec2(0.123709999, 0.364850014), Vec2(0.126809999, 0.389970005), Vec2(0.106409997, 0.36649999), Vec2(0.105169997, 0.339560002), Vec2(0.12263, 0.339430004), Vec2(0.123709999, 0.364850014), Vec2(0.0882600024, 0.368470013), Vec2(0.0868399963, 0.339709997), Vec2(0.105169997, 0.339560002), Vec2(0.106409997, 0.36649999), Vec2(0.0923099965, 0.396869987), Vec2(0.0882600024, 0.368470013), Vec2(0.106409997, 0.36649999), Vec2(0.109949999, 0.393119991), Vec2(0.123899996, 0.44400999), Vec2(0.115790002, 0.419070005), Vec2(0.131899998, 0.41444999), Vec2(0.138909996, 0.437940001), Vec2(0.115790002, 0.419070005), Vec2(0.109949999, 0.393119991), Vec2(0.126809999, 0.389970005), Vec2(0.131899998, 0.41444999), Vec2(0.0990099981, 0.424549997), Vec2(0.0923099965, 0.396869987), Vec2(0.109949999, 0.393119991), Vec2(0.115790002, 0.419070005), Vec2(0.108309999, 0.451160014), Vec2(0.0990099981, 0.424549997), Vec2(0.115790002, 0.419070005), Vec2(0.123899996, 0.44400999), Vec2(0.091959998, 0.459190011), Vec2(0.0813800022, 0.43077001), Vec2(0.0990099981, 0.424549997), Vec2(0.108309999, 0.451160014), Vec2(0.0813800022, 0.43077001), Vec2(0.0737499967, 0.401149988), Vec2(0.0923099965, 0.396869987), Vec2(0.0990099981, 0.424549997), Vec2(0.0627800003, 0.43761), Vec2(0.0541299991, 0.405900002), Vec2(0.0737499967, 0.401149988), Vec2(0.0813800022, 0.43077001), Vec2(0.0746800005, 0.46796), Vec2(0.0627800003, 0.43761), Vec2(0.0813800022, 0.43077001), Vec2(0.091959998, 0.459190011), Vec2(0.0737499967, 0.401149988), Vec2(0.0691199973, 0.370730013), Vec2(0.0882600024, 0.368470013), Vec2(0.0923099965, 0.396869987), Vec2(0.0691199973, 0.370730013), Vec2(0.0674899966, 0.339899987), Vec2(0.0868399963, 0.339709997), Vec2(0.0882600024, 0.368470013), Vec2(0.0488499999, 0.373259991), Vec2(0.0469899997, 0.340140015), Vec2(0.0674899966, 0.339899987), Vec2(0.0691199973, 0.370730013), Vec2(0.0541299991, 0.405900002), Vec2(0.0488499999, 0.373259991), Vec2(0.0691199973, 0.370730013), Vec2(0.0737499967, 0.401149988), Vec2(0.0333099999, 0.411060005), Vec2(0.0273199994, 0.376029998), Vec2(0.0488499999, 0.373259991), Vec2(0.0541299991, 0.405900002), Vec2(0.0273199994, 0.376029998), Vec2(0.0252, 0.340420008), Vec2(0.0469899997, 0.340140015), Vec2(0.0488499999, 0.373259991), Vec2(0.00437000021, 0.379020005), Vec2(0.00194999995, 0.340770006), Vec2(0.0252, 0.340420008), Vec2(0.0273199994, 0.376029998), Vec2(0.0111199999, 0.416570008), Vec2(0.00437000021, 0.379020005), Vec2(0.0273199994, 0.376029998), Vec2(0.0333099999, 0.411060005), Vec2(0.0563400015, 0.47736001), Vec2(0.0430399999, 0.444990009), Vec2(0.0627800003, 0.43761), Vec2(0.0746800005, 0.46796), Vec2(0.0430399999, 0.444990009), Vec2(0.0333099999, 0.411060005), Vec2(0.0541299991, 0.405900002), Vec2(0.0627800003, 0.43761), Vec2(0.0220100004, 0.452829987), Vec2(0.0111199999, 0.416570008), Vec2(0.0333099999, 0.411060005), Vec2(0.0430399999, 0.444990009), Vec2(0.03675, 0.487300009), Vec2(0.0220100004, 0.452829987), Vec2(0.0430399999, 0.444990009), Vec2(0.0563400015, 0.47736001), Vec2(0.162070006, 0.554069996), Vec2(0.140530005, 0.533789992), Vec2(0.151419997, 0.520910025), Vec2(0.170719996, 0.539680004), Vec2(0.140530005, 0.533789992), Vec2(0.121610001, 0.511030018), Vec2(0.134550005, 0.499680012), Vec2(0.151419997, 0.520910025), Vec2(0.128629997, 0.547410011), Vec2(0.10774, 0.523159981), Vec2(0.121610001, 0.511030018), Vec2(0.140530005, 0.533789992), Vec2(0.152280003, 0.569109976), Vec2(0.128629997, 0.547410011), Vec2(0.140530005, 0.533789992), Vec2(0.162070006, 0.554069996), Vec2(0.121610001, 0.511030018), Vec2(0.105400003, 0.486059994), Vec2(0.120169997, 0.476319999), Vec2(0.134550005, 0.499680012), Vec2(0.105400003, 0.486059994), Vec2(0.091959998, 0.459190011), Vec2(0.108309999, 0.451160014), Vec2(0.120169997, 0.476319999), Vec2(0.0897200033, 0.496589988), Vec2(0.0746800005, 0.46796), Vec2(0.091959998, 0.459190011), Vec2(0.105400003, 0.486059994), Vec2(0.10774, 0.523159981), Vec2(0.0897200033, 0.496589988), Vec2(0.105400003, 0.486059994), Vec2(0.121610001, 0.511030018), Vec2(0.0927900001, 0.535969973), Vec2(0.0729900002, 0.507790029), Vec2(0.0897200033, 0.496589988), Vec2(0.10774, 0.523159981), Vec2(0.0729900002, 0.507790029), Vec2(0.0563400015, 0.47736001), Vec2(0.0746800005, 0.46796), Vec2(0.0897200033, 0.496589988), Vec2(0.0550500005, 0.519580007), Vec2(0.03675, 0.487300009), Vec2(0.0563400015, 0.47736001), Vec2(0.0729900002, 0.507790029), Vec2(0.0766099989, 0.549399972), Vec2(0.0550500005, 0.519580007), Vec2(0.0729900002, 0.507790029), Vec2(0.0927900001, 0.535969973), Vec2(0.141220003, 0.584730029), Vec2(0.115560003, 0.561670005), Vec2(0.128629997, 0.547410011), Vec2(0.152280003, 0.569109976), Vec2(0.115560003, 0.561670005), Vec2(0.0927900001, 0.535969973), Vec2(0.10774, 0.523159981), Vec2(0.128629997, 0.547410011), Vec2(0.101209998, 0.576569974), Vec2(0.0766099989, 0.549399972), Vec2(0.0927900001, 0.535969973), Vec2(0.115560003, 0.561670005), Vec2(0.128780007, 0.600870013), Vec2(0.101209998, 0.576569974), Vec2(0.115560003, 0.561670005), Vec2(0.141220003, 0.584730029), Vec2(0.139359996, 0.339329988), Vec2(0.140200004, 0.315100014), Vec2(0.156289995, 0.315869987), Vec2(0.155520007, 0.339249998), Vec2(0.140200004, 0.315100014), Vec2(0.142829999, 0.291150004), Vec2(0.158659995, 0.292769998), Vec2(0.156289995, 0.315869987), Vec2(0.123570003, 0.31400001), Vec2(0.126540005, 0.288850009), Vec2(0.142829999, 0.291150004), Vec2(0.140200004, 0.315100014), Vec2(0.12263, 0.339430004), Vec2(0.123570003, 0.31400001), Vec2(0.140200004, 0.315100014), Vec2(0.139359996, 0.339329988), Vec2(0.142829999, 0.291150004), Vec2(0.147200003, 0.26778999), Vec2(0.162550002, 0.270229995), Vec2(0.158659995, 0.292769998), Vec2(0.147200003, 0.26778999), Vec2(0.153209999, 0.245409995), Vec2(0.167820007, 0.248590007), Vec2(0.162550002, 0.270229995), Vec2(0.131530002, 0.264319986), Vec2(0.138469994, 0.240779996), Vec2(0.153209999, 0.245409995), Vec2(0.147200003, 0.26778999), Vec2(0.126540005, 0.288850009), Vec2(0.131530002, 0.264319986), Vec2(0.147200003, 0.26778999), Vec2(0.142829999, 0.291150004), Vec2(0.109630004, 0.285939991), Vec2(0.115340002, 0.259909987), Vec2(0.131530002, 0.264319986), Vec2(0.126540005, 0.288850009), Vec2(0.115340002, 0.259909987), Vec2(0.123360001, 0.234899998), Vec2(0.138469994, 0.240779996), Vec2(0.131530002, 0.264319986), Vec2(0.0984599963, 0.254700005), Vec2(0.107660003, 0.227980003), Vec2(0.123360001, 0.234899998), Vec2(0.115340002, 0.259909987), Vec2(0.0919200033, 0.282480001), Vec2(0.0984599963, 0.254700005), Vec2(0.115340002, 0.259909987), Vec2(0.109630004, 0.285939991), Vec2(0.105169997, 0.339560002), Vec2(0.106239997, 0.312599987), Vec2(0.123570003, 0.31400001), Vec2(0.12263, 0.339430004), Vec2(0.106239997, 0.312599987), Vec2(0.109630004, 0.285939991), Vec2(0.126540005, 0.288850009), Vec2(0.123570003, 0.31400001), Vec2(0.088059999, 0.310939997), Vec2(0.0919200033, 0.282480001), Vec2(0.109630004, 0.285939991), Vec2(0.106239997, 0.312599987), Vec2(0.0868399963, 0.339709997), Vec2(0.088059999, 0.310939997), Vec2(0.106239997, 0.312599987), Vec2(0.105169997, 0.339560002), Vec2(0.153209999, 0.245409995), Vec2(0.160699993, 0.22439), Vec2(0.174219996, 0.228259996), Vec2(0.167820007, 0.248590007), Vec2(0.160699993, 0.22439), Vec2(0.169459999, 0.205270007), Vec2(0.181370005, 0.209729999), Vec2(0.174219996, 0.228259996), Vec2(0.147269994, 0.218620002), Vec2(0.157890007, 0.198280007), Vec2(0.169459999, 0.205270007), Vec2(0.160699993, 0.22439), Vec2(0.138469994, 0.240779996), Vec2(0.147269994, 0.218620002), Vec2(0.160699993, 0.22439), Vec2(0.153209999, 0.245409995), Vec2(0.169459999, 0.205270007), Vec2(0.179299995, 0.18874), Vec2(0.188590005, 0.19382), Vec2(0.181370005, 0.209729999), Vec2(0.179299995, 0.18874), Vec2(0.190329999, 0.175870001), Vec2(0.194059998, 0.183160007), Vec2(0.188590005, 0.19382), Vec2(0.170330003, 0.180250004), Vec2(0.184719995, 0.165069997), Vec2(0.190329999, 0.175870001), Vec2(0.179299995, 0.18874), Vec2(0.157890007, 0.198280007), Vec2(0.170330003, 0.180250004), Vec2(0.179299995, 0.18874), Vec2(0.169459999, 0.205270007), Vec2(0.146139994, 0.18942), Vec2(0.160929993, 0.169740006), Vec2(0.170330003, 0.180250004), Vec2(0.157890007, 0.198280007), Vec2(0.160929993, 0.169740006), Vec2(0.177990004, 0.152649999), Vec2(0.184719995, 0.165069997), Vec2(0.170330003, 0.180250004), Vec2(0.150800005, 0.157920003), Vec2(0.17024, 0.139139995), Vec2(0.177990004, 0.152649999), Vec2(0.160929993, 0.169740006), Vec2(0.133849993, 0.179220006), Vec2(0.150800005, 0.157920003), Vec2(0.160929993, 0.169740006), Vec2(0.146139994, 0.18942), Vec2(0.123360001, 0.234899998), Vec2(0.133619994, 0.211270005), Vec2(0.147269994, 0.218620002), Vec2(0.138469994, 0.240779996), Vec2(0.133619994, 0.211270005), Vec2(0.146139994, 0.18942), Vec2(0.157890007, 0.198280007), Vec2(0.147269994, 0.218620002), Vec2(0.119460002, 0.202700004), Vec2(0.133849993, 0.179220006), Vec2(0.146139994, 0.18942), Vec2(0.133619994, 0.211270005), Vec2(0.107660003, 0.227980003), Vec2(0.119460002, 0.202700004), Vec2(0.133619994, 0.211270005), Vec2(0.123360001, 0.234899998), Vec2(0.091169998, 0.22022), Vec2(0.104549997, 0.193179995), Vec2(0.119460002, 0.202700004), Vec2(0.107660003, 0.227980003), Vec2(0.104549997, 0.193179995), Vec2(0.12077, 0.168050006), Vec2(0.133849993, 0.179220006), Vec2(0.119460002, 0.202700004), Vec2(0.0886899978, 0.182919994), Vec2(0.106720001, 0.156110004), Vec2(0.12077, 0.168050006), Vec2(0.104549997, 0.193179995), Vec2(0.073739998, 0.211789995), Vec2(0.0886899978, 0.182919994), Vec2(0.104549997, 0.193179995), Vec2(0.091169998, 0.22022), Vec2(0.12077, 0.168050006), Vec2(0.139770001, 0.145150006), Vec2(0.150800005, 0.157920003), Vec2(0.133849993, 0.179220006), Vec2(0.139770001, 0.145150006), Vec2(0.161449999, 0.124810003), Vec2(0.17024, 0.139139995), Vec2(0.150800005, 0.157920003), Vec2(0.127690002, 0.131650001), Vec2(0.15151, 0.109810002), Vec2(0.161449999, 0.124810003), Vec2(0.139770001, 0.145150006), Vec2(0.106720001, 0.156110004), Vec2(0.127690002, 0.131650001), Vec2(0.139770001, 0.145150006), Vec2(0.12077, 0.168050006), Vec2(0.0915599987, 0.143519998), Vec2(0.114440002, 0.1175), Vec2(0.127690002, 0.131650001), Vec2(0.106720001, 0.156110004), Vec2(0.114440002, 0.1175), Vec2(0.140279993, 0.0941800028), Vec2(0.15151, 0.109810002), Vec2(0.127690002, 0.131650001), Vec2(0.0998800024, 0.102739997), Vec2(0.127639994, 0.0779199973), Vec2(0.140279993, 0.0941800028), Vec2(0.114440002, 0.1175), Vec2(0.0751499981, 0.130360007), Vec2(0.0998800024, 0.102739997), Vec2(0.114440002, 0.1175), Vec2(0.0915599987, 0.143519998), Vec2(0.0551999994, 0.202790007), Vec2(0.0717599988, 0.172040001), Vec2(0.0886899978, 0.182919994), Vec2(0.073739998, 0.211789995), Vec2(0.0717599988, 0.172040001), Vec2(0.0915599987, 0.143519998), Vec2(0.106720001, 0.156110004), Vec2(0.0886899978, 0.182919994), Vec2(0.0535599999, 0.160620004), Vec2(0.0751499981, 0.130360007), Vec2(0.0915599987, 0.143519998), Vec2(0.0717599988, 0.172040001), Vec2(0.035360001, 0.193320006), Vec2(0.0535599999, 0.160620004), Vec2(0.0717599988, 0.172040001), Vec2(0.0551999994, 0.202790007), Vec2(0.0674899966, 0.339899987), Vec2(0.0688799992, 0.309049994), Vec2(0.088059999, 0.310939997), Vec2(0.0868399963, 0.339709997), Vec2(0.0688799992, 0.309049994), Vec2(0.0732899979, 0.278549999), Vec2(0.0919200033, 0.282480001), Vec2(0.088059999, 0.310939997), Vec2(0.048560001, 0.306980014), Vec2(0.0535699986, 0.274230003), Vec2(0.0732899979, 0.278549999), Vec2(0.0688799992, 0.309049994), Vec2(0.0469899997, 0.340140015), Vec2(0.048560001, 0.306980014), Vec2(0.0688799992, 0.309049994), Vec2(0.0674899966, 0.339899987), Vec2(0.0732899979, 0.278549999), Vec2(0.0807299986, 0.248809993), Vec2(0.0984599963, 0.254700005), Vec2(0.0919200033, 0.282480001), Vec2(0.0807299986, 0.248809993), Vec2(0.091169998, 0.22022), Vec2(0.107660003, 0.227980003), Vec2(0.0984599963, 0.254700005), Vec2(0.0619900003, 0.242359996), Vec2(0.073739998, 0.211789995), Vec2(0.091169998, 0.22022), Vec2(0.0807299986, 0.248809993), Vec2(0.0535699986, 0.274230003), Vec2(0.0619900003, 0.242359996), Vec2(0.0807299986, 0.248809993), Vec2(0.0732899979, 0.278549999), Vec2(0.0326200016, 0.269600004), Vec2(0.0420899987, 0.23545), Vec2(0.0619900003, 0.242359996), Vec2(0.0535699986, 0.274230003), Vec2(0.0420899987, 0.23545), Vec2(0.0551999994, 0.202790007), Vec2(0.073739998, 0.211789995), Vec2(0.0619900003, 0.242359996), Vec2(0.0208400004, 0.228159994), Vec2(0.035360001, 0.193320006), Vec2(0.0551999994, 0.202790007), Vec2(0.0420899987, 0.23545), Vec2(0.01028, 0.264710009), Vec2(0.0208400004, 0.228159994), Vec2(0.0420899987, 0.23545), Vec2(0.0326200016, 0.269600004), Vec2(0.0252, 0.340420008), Vec2(0.0269699991, 0.304760009), Vec2(0.048560001, 0.306980014), Vec2(0.0469899997, 0.340140015), Vec2(0.0269699991, 0.304760009), Vec2(0.0326200016, 0.269600004), Vec2(0.0535699986, 0.274230003), Vec2(0.048560001, 0.306980014), Vec2(0.00393000012, 0.302450001), Vec2(0.01028, 0.264710009), Vec2(0.0326200016, 0.269600004), Vec2(0.0269699991, 0.304760009), Vec2(0.00194999995, 0.340770006), Vec2(0.00393000012, 0.302450001), Vec2(0.0269699991, 0.304760009), Vec2(0.0252, 0.340420008), Vec2(0.974789977, 0.340249985), Vec2(0.97262001, 0.304729998), Vec2(0.995580018, 0.301730007), Vec2(0.99804002, 0.339870006), Vec2(0.97262001, 0.304729998), Vec2(0.966620028, 0.269789994), Vec2(0.988810003, 0.264270008), Vec2(0.995580018, 0.301730007), Vec2(0.951080024, 0.307520002), Vec2(0.945779979, 0.274960011), Vec2(0.966620028, 0.269789994), Vec2(0.97262001, 0.304729998), Vec2(0.952979982, 0.340559989), Vec2(0.951080024, 0.307520002), Vec2(0.97262001, 0.304729998), Vec2(0.974789977, 0.340249985), Vec2(0.966620028, 0.269789994), Vec2(0.956900001, 0.235929996), Vec2(0.977940023, 0.228100002), Vec2(0.988810003, 0.264270008), Vec2(0.956900001, 0.235929996), Vec2(0.94362998, 0.203610003), Vec2(0.963230014, 0.193680003), Vec2(0.977940023, 0.228100002), Vec2(0.937150002, 0.243320003), Vec2(0.925260007, 0.213019997), Vec2(0.94362998, 0.203610003), Vec2(0.956900001, 0.235929996), Vec2(0.945779979, 0.274960011), Vec2(0.937150002, 0.243320003), Vec2(0.956900001, 0.235929996), Vec2(0.966620028, 0.269789994), Vec2(0.92614001, 0.279740006), Vec2(0.918519974, 0.25018999), Vec2(0.937150002, 0.243320003), Vec2(0.945779979, 0.274960011), Vec2(0.918519974, 0.25018999), Vec2(0.907970011, 0.221829996), Vec2(0.925260007, 0.213019997), Vec2(0.937150002, 0.243320003), Vec2(0.900849998, 0.256449997), Vec2(0.891579986, 0.22992), Vec2(0.907970011, 0.221829996), Vec2(0.918519974, 0.25018999), Vec2(0.907540023, 0.284049988), Vec2(0.900849998, 0.256449997), Vec2(0.918519974, 0.25018999), Vec2(0.92614001, 0.279740006), Vec2(0.932449996, 0.340810001), Vec2(0.930779994, 0.310070008), Vec2(0.951080024, 0.307520002), Vec2(0.952979982, 0.340559989), Vec2(0.930779994, 0.310070008), Vec2(0.92614001, 0.279740006), Vec2(0.945779979, 0.274960011), Vec2(0.951080024, 0.307520002), Vec2(0.911599994, 0.312359989), Vec2(0.907540023, 0.284049988), Vec2(0.92614001, 0.279740006), Vec2(0.930779994, 0.310070008), Vec2(0.913049996, 0.341019988), Vec2(0.911599994, 0.312359989), Vec2(0.930779994, 0.310070008), Vec2(0.932449996, 0.340810001), Vec2(0.94362998, 0.203610003), Vec2(0.92701, 0.173199996), Vec2(0.944980025, 0.161420003), Vec2(0.963230014, 0.193680003), Vec2(0.92701, 0.173199996), Vec2(0.907260001, 0.145009995), Vec2(0.92347002, 0.131569996), Vec2(0.944980025, 0.161420003), Vec2(0.910269976, 0.184430003), Vec2(0.892289996, 0.157879993), Vec2(0.907260001, 0.145009995), Vec2(0.92701, 0.173199996), Vec2(0.925260007, 0.213019997), Vec2(0.910269976, 0.184430003), Vec2(0.92701, 0.173199996), Vec2(0.94362998, 0.203610003), Vec2(0.907260001, 0.145009995), Vec2(0.884530008, 0.119269997), Vec2(0.89892, 0.104319997), Vec2(0.92347002, 0.131569996), Vec2(0.884530008, 0.119269997), Vec2(0.858929992, 0.0961600021), Vec2(0.871450007, 0.0797699988), Vec2(0.89892, 0.104319997), Vec2(0.871450007, 0.133640006), Vec2(0.847829998, 0.111960001), Vec2(0.858929992, 0.0961600021), Vec2(0.884530008, 0.119269997), Vec2(0.892289996, 0.157879993), Vec2(0.871450007, 0.133640006), Vec2(0.884530008, 0.119269997), Vec2(0.907260001, 0.145009995), Vec2(0.878390014, 0.170100003), Vec2(0.859520018, 0.147379994), Vec2(0.871450007, 0.133640006), Vec2(0.892289996, 0.157879993), Vec2(0.859520018, 0.147379994), Vec2(0.838029981, 0.127169997), Vec2(0.847829998, 0.111960001), Vec2(0.871450007, 0.133640006), Vec2(0.848609984, 0.160390005), Vec2(0.829349995, 0.141719997), Vec2(0.838029981, 0.127169997), Vec2(0.859520018, 0.147379994), Vec2(0.865429997, 0.181539997), Vec2(0.848609984, 0.160390005), Vec2(0.859520018, 0.147379994), Vec2(0.878390014, 0.170100003), Vec2(0.907970011, 0.221829996), Vec2(0.894569993, 0.195020005), Vec2(0.910269976, 0.184430003), Vec2(0.925260007, 0.213019997), Vec2(0.894569993, 0.195020005), Vec2(0.878390014, 0.170100003), Vec2(0.892289996, 0.157879993), Vec2(0.910269976, 0.184430003), Vec2(0.879760027, 0.204840004), Vec2(0.865429997, 0.181539997), Vec2(0.878390014, 0.170100003), Vec2(0.894569993, 0.195020005), Vec2(0.891579986, 0.22992), Vec2(0.879760027, 0.204840004), Vec2(0.894569993, 0.195020005), Vec2(0.907970011, 0.221829996), Vec2(0.875940025, 0.237130001), Vec2(0.865670025, 0.213679999), Vec2(0.879760027, 0.204840004), Vec2(0.891579986, 0.22992), Vec2(0.865670025, 0.213679999), Vec2(0.853219986, 0.191980004), Vec2(0.865429997, 0.181539997), Vec2(0.879760027, 0.204840004), Vec2(0.85206002, 0.221249998), Vec2(0.841509998, 0.20104), Vec2(0.853219986, 0.191980004), Vec2(0.865670025, 0.213679999), Vec2(0.86085999, 0.243249997), Vec2(0.85206002, 0.221249998), Vec2(0.865670025, 0.213679999), Vec2(0.875940025, 0.237130001), Vec2(0.853219986, 0.191980004), Vec2(0.838559985, 0.172429994), Vec2(0.848609984, 0.160390005), Vec2(0.865429997, 0.181539997), Vec2(0.838559985, 0.172429994), Vec2(0.821680009, 0.155430004), Vec2(0.829349995, 0.141719997), Vec2(0.848609984, 0.160390005), Vec2(0.829190016, 0.183129996), Vec2(0.814970016, 0.168009996), Vec2(0.821680009, 0.155430004), Vec2(0.838559985, 0.172429994), Vec2(0.841509998, 0.20104), Vec2(0.829190016, 0.183129996), Vec2(0.838559985, 0.172429994), Vec2(0.853219986, 0.191980004), Vec2(0.829970002, 0.208179995), Vec2(0.820230007, 0.191760004), Vec2(0.829190016, 0.183129996), Vec2(0.841509998, 0.20104), Vec2(0.820230007, 0.191760004), Vec2(0.809329987, 0.178929999), Vec2(0.814970016, 0.168009996), Vec2(0.829190016, 0.183129996), Vec2(0.810959995, 0.196899995), Vec2(0.805589974, 0.186350003), Vec2(0.809329987, 0.178929999), Vec2(0.820230007, 0.191760004), Vec2(0.818069994, 0.212720007), Vec2(0.810959995, 0.196899995), Vec2(0.820230007, 0.191760004), Vec2(0.829970002, 0.208179995), Vec2(0.846109986, 0.248060003), Vec2(0.838649988, 0.227180004), Vec2(0.85206002, 0.221249998), Vec2(0.86085999, 0.243249997), Vec2(0.838649988, 0.227180004), Vec2(0.829970002, 0.208179995), Vec2(0.841509998, 0.20104), Vec2(0.85206002, 0.221249998), Vec2(0.825139999, 0.23116), Vec2(0.818069994, 0.212720007), Vec2(0.829970002, 0.208179995), Vec2(0.838649988, 0.227180004), Vec2(0.831499994, 0.251370013), Vec2(0.825139999, 0.23116), Vec2(0.838649988, 0.227180004), Vec2(0.846109986, 0.248060003), Vec2(0.894659996, 0.34119001), Vec2(0.89339, 0.314350009), Vec2(0.911599994, 0.312359989), Vec2(0.913049996, 0.341019988), Vec2(0.89339, 0.314350009), Vec2(0.889840007, 0.287829995), Vec2(0.907540023, 0.284049988), Vec2(0.911599994, 0.312359989), Vec2(0.876020014, 0.316009998), Vec2(0.872910023, 0.291000009), Vec2(0.889840007, 0.287829995), Vec2(0.89339, 0.314350009), Vec2(0.877139986, 0.341320008), Vec2(0.876020014, 0.316009998), Vec2(0.89339, 0.314350009), Vec2(0.894659996, 0.34119001), Vec2(0.889840007, 0.287829995), Vec2(0.884010017, 0.261970013), Vec2(0.900849998, 0.256449997), Vec2(0.907540023, 0.284049988), Vec2(0.884010017, 0.261970013), Vec2(0.875940025, 0.237130001), Vec2(0.891579986, 0.22992), Vec2(0.900849998, 0.256449997), Vec2(0.867839992, 0.266629994), Vec2(0.86085999, 0.243249997), Vec2(0.875940025, 0.237130001), Vec2(0.884010017, 0.261970013), Vec2(0.872910023, 0.291000009), Vec2(0.867839992, 0.266629994), Vec2(0.884010017, 0.261970013), Vec2(0.889840007, 0.287829995), Vec2(0.856589973, 0.293500006), Vec2(0.852150023, 0.270300001), Vec2(0.867839992, 0.266629994), Vec2(0.872910023, 0.291000009), Vec2(0.852150023, 0.270300001), Vec2(0.846109986, 0.248060003), Vec2(0.86085999, 0.243249997), Vec2(0.867839992, 0.266629994), Vec2(0.836769998, 0.272879988), Vec2(0.831499994, 0.251370013), Vec2(0.846109986, 0.248060003), Vec2(0.852150023, 0.270300001), Vec2(0.840709984, 0.29528001), Vec2(0.836769998, 0.272879988), Vec2(0.852150023, 0.270300001), Vec2(0.856589973, 0.293500006), Vec2(0.860319972, 0.341419995), Vec2(0.859329998, 0.317319989), Vec2(0.876020014, 0.316009998), Vec2(0.877139986, 0.341320008), Vec2(0.859329998, 0.317319989), Vec2(0.856589973, 0.293500006), Vec2(0.872910023, 0.291000009), Vec2(0.876020014, 0.316009998), Vec2(0.843159974, 0.31825), Vec2(0.840709984, 0.29528001), Vec2(0.856589973, 0.293500006), Vec2(0.859329998, 0.317319989), Vec2(0.844060004, 0.341500014), Vec2(0.843159974, 0.31825), Vec2(0.859329998, 0.317319989), Vec2(0.860319972, 0.341419995), Vec2(0.860819995, 0.586709976), Vec2(0.886500001, 0.563220024), Vec2(0.901189983, 0.577929974), Vec2(0.873660028, 0.603190005), Vec2(0.886500001, 0.563220024), Vec2(0.909210026, 0.537039995), Vec2(0.925719976, 0.55013001), Vec2(0.901189983, 0.577929974), Vec2(0.873160005, 0.549000025), Vec2(0.893980026, 0.524460018), Vec2(0.909210026, 0.537039995), Vec2(0.886500001, 0.563220024), Vec2(0.849479973, 0.570919991), Vec2(0.873160005, 0.549000025), Vec2(0.886500001, 0.563220024), Vec2(0.860819995, 0.586709976), Vec2(0.909210026, 0.537039995), Vec2(0.928849995, 0.508440018), Vec2(0.947109997, 0.519770026), Vec2(0.925719976, 0.55013001), Vec2(0.928849995, 0.508440018), Vec2(0.945240021, 0.47766), Vec2(0.965120018, 0.487029999), Vec2(0.947109997, 0.519770026), Vec2(0.911849976, 0.497590005), Vec2(0.926649988, 0.468699992), Vec2(0.945240021, 0.47766), Vec2(0.928849995, 0.508440018), Vec2(0.893980026, 0.524460018), Vec2(0.911849976, 0.497590005), Vec2(0.928849995, 0.508440018), Vec2(0.909210026, 0.537039995), Vec2(0.879869998, 0.512470007), Vec2(0.895940006, 0.487309992), Vec2(0.911849976, 0.497590005), Vec2(0.893980026, 0.524460018), Vec2(0.895940006, 0.487309992), Vec2(0.909169972, 0.460269988), Vec2(0.926649988, 0.468699992), Vec2(0.911849976, 0.497590005), Vec2(0.880970001, 0.477750003), Vec2(0.892629981, 0.452490002), Vec2(0.909169972, 0.460269988), Vec2(0.895940006, 0.487309992), Vec2(0.866729975, 0.501209974), Vec2(0.880970001, 0.477750003), Vec2(0.895940006, 0.487309992), Vec2(0.879869998, 0.512470007), Vec2(0.839460015, 0.555760026), Vec2(0.861020029, 0.535390019), Vec2(0.873160005, 0.549000025), Vec2(0.849479973, 0.570919991), Vec2(0.861020029, 0.535390019), Vec2(0.879869998, 0.512470007), Vec2(0.893980026, 0.524460018), Vec2(0.873160005, 0.549000025), Vec2(0.849919975, 0.522520006), Vec2(0.866729975, 0.501209974), Vec2(0.879869998, 0.512470007), Vec2(0.861020029, 0.535390019), Vec2(0.830600023, 0.541279972), Vec2(0.849919975, 0.522520006), Vec2(0.861020029, 0.535390019), Vec2(0.839460015, 0.555760026), Vec2(0.945240021, 0.47766), Vec2(0.958199978, 0.445010006), Vec2(0.979480028, 0.452219993), Vec2(0.965120018, 0.487029999), Vec2(0.958199978, 0.445010006), Vec2(0.967530012, 0.41091001), Vec2(0.989899993, 0.41573), Vec2(0.979480028, 0.452219993), Vec2(0.938260019, 0.438149989), Vec2(0.946560025, 0.406320006), Vec2(0.967530012, 0.41091001), Vec2(0.958199978, 0.445010006), Vec2(0.926649988, 0.468699992), Vec2(0.938260019, 0.438149989), Vec2(0.958199978, 0.445010006), Vec2(0.945240021, 0.47766), Vec2(0.967530012, 0.41091001), Vec2(0.973089993, 0.375820011), Vec2(0.996140003, 0.378089994), Vec2(0.989899993, 0.41573), Vec2(0.973089993, 0.375820011), Vec2(0.974789977, 0.340249985), Vec2(0.99804002, 0.339870006), Vec2(0.996140003, 0.378089994), Vec2(0.951479971, 0.373640001), Vec2(0.952979982, 0.340559989), Vec2(0.974789977, 0.340249985), Vec2(0.973089993, 0.375820011), Vec2(0.946560025, 0.406320006), Vec2(0.951479971, 0.373640001), Vec2(0.973089993, 0.375820011), Vec2(0.967530012, 0.41091001), Vec2(0.926810026, 0.402020007), Vec2(0.931129992, 0.371589988), Vec2(0.951479971, 0.373640001), Vec2(0.946560025, 0.406320006), Vec2(0.931129992, 0.371589988), Vec2(0.932449996, 0.340810001), Vec2(0.952979982, 0.340559989), Vec2(0.951479971, 0.373640001), Vec2(0.911899984, 0.369709998), Vec2(0.913049996, 0.341019988), Vec2(0.932449996, 0.340810001), Vec2(0.931129992, 0.371589988), Vec2(0.90812999, 0.398090005), Vec2(0.911899984, 0.369709998), Vec2(0.931129992, 0.371589988), Vec2(0.926810026, 0.402020007), Vec2(0.909169972, 0.460269988), Vec2(0.919480026, 0.431710005), Vec2(0.938260019, 0.438149989), Vec2(0.926649988, 0.468699992), Vec2(0.919480026, 0.431710005), Vec2(0.926810026, 0.402020007), Vec2(0.946560025, 0.406320006), Vec2(0.938260019, 0.438149989), Vec2(0.90170002, 0.425810009), Vec2(0.90812999, 0.398090005), Vec2(0.926810026, 0.402020007), Vec2(0.919480026, 0.431710005), Vec2(0.892629981, 0.452490002), Vec2(0.90170002, 0.425810009), Vec2(0.919480026, 0.431710005), Vec2(0.909169972, 0.460269988), Vec2(0.876869977, 0.445529997), Vec2(0.884760022, 0.42058), Vec2(0.90170002, 0.425810009), Vec2(0.892629981, 0.452490002), Vec2(0.884760022, 0.42058), Vec2(0.890359998, 0.394630015), Vec2(0.90812999, 0.398090005), Vec2(0.90170002, 0.425810009), Vec2(0.868499994, 0.41613999), Vec2(0.873380005, 0.391689986), Vec2(0.890359998, 0.394630015), Vec2(0.884760022, 0.42058), Vec2(0.861689985, 0.439610004), Vec2(0.868499994, 0.41613999), Vec2(0.884760022, 0.42058), Vec2(0.876869977, 0.445529997), Vec2(0.890359998, 0.394630015), Vec2(0.893660009, 0.368050009), Vec2(0.911899984, 0.369709998), Vec2(0.90812999, 0.398090005), Vec2(0.893660009, 0.368050009), Vec2(0.894659996, 0.34119001), Vec2(0.913049996, 0.341019988), Vec2(0.911899984, 0.369709998), Vec2(0.876259983, 0.366640002), Vec2(0.877139986, 0.341320008), Vec2(0.894659996, 0.34119001), Vec2(0.893660009, 0.368050009), Vec2(0.873380005, 0.391689986), Vec2(0.876259983, 0.366640002), Vec2(0.893660009, 0.368050009), Vec2(0.890359998, 0.394630015), Vec2(0.857010007, 0.389380008), Vec2(0.859549999, 0.365539998), Vec2(0.876259983, 0.366640002), Vec2(0.873380005, 0.391689986), Vec2(0.859549999, 0.365539998), Vec2(0.860319972, 0.341419995), Vec2(0.877139986, 0.341320008), Vec2(0.876259983, 0.366640002), Vec2(0.843360007, 0.364749998), Vec2(0.844060004, 0.341500014), Vec2(0.860319972, 0.341419995), Vec2(0.859549999, 0.365539998), Vec2(0.841090024, 0.38775), Vec2(0.843360007, 0.364749998), Vec2(0.859549999, 0.365539998), Vec2(0.857010007, 0.389380008), Vec2(0.846870005, 0.434949994), Vec2(0.852750003, 0.412640005), Vec2(0.868499994, 0.41613999), Vec2(0.861689985, 0.439610004), Vec2(0.852750003, 0.412640005), Vec2(0.857010007, 0.389380008), Vec2(0.873380005, 0.391689986), Vec2(0.868499994, 0.41613999), Vec2(0.83732003, 0.410189986), Vec2(0.841090024, 0.38775), Vec2(0.857010007, 0.389380008), Vec2(0.852750003, 0.412640005), Vec2(0.832189977, 0.431739986), Vec2(0.83732003, 0.410189986), Vec2(0.852750003, 0.412640005), Vec2(0.846870005, 0.434949994), Vec2(0.822780013, 0.527639985), Vec2(0.839720011, 0.510590017), Vec2(0.849919975, 0.522520006), Vec2(0.830600023, 0.541279972), Vec2(0.839720011, 0.510590017), Vec2(0.854369998, 0.490940005), Vec2(0.866729975, 0.501209974), Vec2(0.849919975, 0.522520006), Vec2(0.830229998, 0.499989986), Vec2(0.84254998, 0.482010007), Vec2(0.854369998, 0.490940005), Vec2(0.839720011, 0.510590017), Vec2(0.815949976, 0.515120029), Vec2(0.830229998, 0.499989986), Vec2(0.839720011, 0.510590017), Vec2(0.822780013, 0.527639985), Vec2(0.854369998, 0.490940005), Vec2(0.866739988, 0.469119996), Vec2(0.880970001, 0.477750003), Vec2(0.866729975, 0.501209974), Vec2(0.866739988, 0.469119996), Vec2(0.876869977, 0.445529997), Vec2(0.892629981, 0.452490002), Vec2(0.880970001, 0.477750003), Vec2(0.853020012, 0.461710006), Vec2(0.861689985, 0.439610004), Vec2(0.876869977, 0.445529997), Vec2(0.866739988, 0.469119996), Vec2(0.84254998, 0.482010007), Vec2(0.853020012, 0.461710006), Vec2(0.866739988, 0.469119996), Vec2(0.854369998, 0.490940005), Vec2(0.830900013, 0.474970013), Vec2(0.839519978, 0.455900013), Vec2(0.853020012, 0.461710006), Vec2(0.84254998, 0.482010007), Vec2(0.839519978, 0.455900013), Vec2(0.846870005, 0.434949994), Vec2(0.861689985, 0.439610004), Vec2(0.853020012, 0.461710006), Vec2(0.825929999, 0.452010006), Vec2(0.832189977, 0.431739986), Vec2(0.846870005, 0.434949994), Vec2(0.839519978, 0.455900013), Vec2(0.81892997, 0.470479995), Vec2(0.825929999, 0.452010006), Vec2(0.839519978, 0.455900013), Vec2(0.830900013, 0.474970013), Vec2(0.810230017, 0.504260004), Vec2(0.821179986, 0.491450012), Vec2(0.830229998, 0.499989986), Vec2(0.815949976, 0.515120029), Vec2(0.821179986, 0.491450012), Vec2(0.830900013, 0.474970013), Vec2(0.84254998, 0.482010007), Vec2(0.830229998, 0.499989986), Vec2(0.811839998, 0.486330003), Vec2(0.81892997, 0.470479995), Vec2(0.830900013, 0.474970013), Vec2(0.821179986, 0.491450012), Vec2(0.806450009, 0.496930003), Vec2(0.811839998, 0.486330003), Vec2(0.821179986, 0.491450012), Vec2(0.810230017, 0.504260004), Vec2(0.203470007, 0.498450011), Vec2(0.203679994, 0.511870027), Vec2(0.190530002, 0.502749979), Vec2(0.194230005, 0.495350003), Vec2(0.203679994, 0.511870027), Vec2(0.201320007, 0.525730014), Vec2(0.184980005, 0.513610005), Vec2(0.190530002, 0.502749979), Vec2(0.219099998, 0.518850029), Vec2(0.219359994, 0.535220027), Vec2(0.201320007, 0.525730014), Vec2(0.203679994, 0.511870027), Vec2(0.217020005, 0.502390027), Vec2(0.219099998, 0.518850029), Vec2(0.203679994, 0.511870027), Vec2(0.203470007, 0.498450011), Vec2(0.201320007, 0.525730014), Vec2(0.19743, 0.540340006), Vec2(0.178340003, 0.52609998), Vec2(0.184980005, 0.513610005), Vec2(0.19743, 0.540340006), Vec2(0.192340001, 0.555649996), Vec2(0.170719996, 0.539680004), Vec2(0.178340003, 0.52609998), Vec2(0.218219995, 0.55181998), Vec2(0.215890005, 0.56882), Vec2(0.192340001, 0.555649996), Vec2(0.19743, 0.540340006), Vec2(0.219359994, 0.535220027), Vec2(0.218219995, 0.55181998), Vec2(0.19743, 0.540340006), Vec2(0.201320007, 0.525730014), Vec2(0.238639995, 0.542479992), Vec2(0.240270004, 0.56072998), Vec2(0.218219995, 0.55181998), Vec2(0.219359994, 0.535220027), Vec2(0.240270004, 0.56072998), Vec2(0.240960002, 0.579200029), Vec2(0.215890005, 0.56882), Vec2(0.218219995, 0.55181998), Vec2(0.263069987, 0.567149997), Vec2(0.267040014, 0.586799979), Vec2(0.240960002, 0.579200029), Vec2(0.240270004, 0.56072998), Vec2(0.258659989, 0.547689974), Vec2(0.263069987, 0.567149997), Vec2(0.240270004, 0.56072998), Vec2(0.238639995, 0.542479992), Vec2(0.232360005, 0.506039977), Vec2(0.236039996, 0.524320006), Vec2(0.219099998, 0.518850029), Vec2(0.217020005, 0.502390027), Vec2(0.236039996, 0.524320006), Vec2(0.238639995, 0.542479992), Vec2(0.219359994, 0.535220027), Vec2(0.219099998, 0.518850029), Vec2(0.253850013, 0.528330028), Vec2(0.258659989, 0.547689974), Vec2(0.238639995, 0.542479992), Vec2(0.236039996, 0.524320006), Vec2(0.248649999, 0.508920014), Vec2(0.253850013, 0.528330028), Vec2(0.236039996, 0.524320006), Vec2(0.232360005, 0.506039977), Vec2(0.192340001, 0.555649996), Vec2(0.186110005, 0.571579993), Vec2(0.162070006, 0.554069996), Vec2(0.170719996, 0.539680004), Vec2(0.186110005, 0.571579993), Vec2(0.17859, 0.588069975), Vec2(0.152280003, 0.569109976), Vec2(0.162070006, 0.554069996), Vec2(0.212380007, 0.586239994), Vec2(0.20747, 0.604120016), Vec2(0.17859, 0.588069975), Vec2(0.186110005, 0.571579993), Vec2(0.215890005, 0.56882), Vec2(0.212380007, 0.586239994), Vec2(0.186110005, 0.571579993), Vec2(0.192340001, 0.555649996), Vec2(0.17859, 0.588069975), Vec2(0.169599995, 0.605099976), Vec2(0.141220003, 0.584730029), Vec2(0.152280003, 0.569109976), Vec2(0.169599995, 0.605099976), Vec2(0.158940002, 0.622770011), Vec2(0.128780007, 0.600870013), Vec2(0.141220003, 0.584730029), Vec2(0.200859994, 0.62252003), Vec2(0.192269996, 0.641589999), Vec2(0.158940002, 0.622770011), Vec2(0.169599995, 0.605099976), Vec2(0.20747, 0.604120016), Vec2(0.200859994, 0.62252003), Vec2(0.169599995, 0.605099976), Vec2(0.17859, 0.588069975), Vec2(0.238780007, 0.617120028), Vec2(0.235039994, 0.636740029), Vec2(0.200859994, 0.62252003), Vec2(0.20747, 0.604120016), Vec2(0.235039994, 0.636740029), Vec2(0.228850007, 0.657119989), Vec2(0.192269996, 0.641589999), Vec2(0.200859994, 0.62252003), Vec2(0.272190005, 0.647440016), Vec2(0.268929988, 0.668900013), Vec2(0.228850007, 0.657119989), Vec2(0.235039994, 0.636740029), Vec2(0.272309989, 0.626839995), Vec2(0.272190005, 0.647440016), Vec2(0.235039994, 0.636740029), Vec2(0.238780007, 0.617120028), Vec2(0.240960002, 0.579200029), Vec2(0.240580007, 0.597980022), Vec2(0.212380007, 0.586239994), Vec2(0.215890005, 0.56882), Vec2(0.240580007, 0.597980022), Vec2(0.238780007, 0.617120028), Vec2(0.20747, 0.604120016), Vec2(0.212380007, 0.586239994), Vec2(0.270300001, 0.606679976), Vec2(0.272309989, 0.626839995), Vec2(0.238780007, 0.617120028), Vec2(0.240580007, 0.597980022), Vec2(0.267040014, 0.586799979), Vec2(0.270300001, 0.606679976), Vec2(0.240580007, 0.597980022), Vec2(0.240960002, 0.579200029), Vec2(0.293480009, 0.591530025), Vec2(0.300940007, 0.612169981), Vec2(0.270300001, 0.606679976), Vec2(0.267040014, 0.586799979), Vec2(0.300940007, 0.612169981), Vec2(0.307700008, 0.63301003), Vec2(0.272309989, 0.626839995), Vec2(0.270300001, 0.606679976), Vec2(0.331440002, 0.614180028), Vec2(0.344150007, 0.635249972), Vec2(0.307700008, 0.63301003), Vec2(0.300940007, 0.612169981), Vec2(0.319370002, 0.593249977), Vec2(0.331440002, 0.614180028), Vec2(0.300940007, 0.612169981), Vec2(0.293480009, 0.591530025), Vec2(0.307700008, 0.63301003), Vec2(0.312409997, 0.654190004), Vec2(0.272190005, 0.647440016), Vec2(0.272309989, 0.626839995), Vec2(0.312409997, 0.654190004), Vec2(0.313010007, 0.67632997), Vec2(0.268929988, 0.668900013), Vec2(0.272190005, 0.647440016), Vec2(0.355780005, 0.656459987), Vec2(0.362320006, 0.678409994), Vec2(0.313010007, 0.67632997), Vec2(0.312409997, 0.654190004), Vec2(0.344150007, 0.635249972), Vec2(0.355780005, 0.656459987), Vec2(0.312409997, 0.654190004), Vec2(0.307700008, 0.63301003), Vec2(0.379680008, 0.633029997), Vec2(0.401789993, 0.653450012), Vec2(0.355780005, 0.656459987), Vec2(0.344150007, 0.635249972), Vec2(0.401789993, 0.653450012), Vec2(0.420439988, 0.673370004), Vec2(0.362320006, 0.678409994), Vec2(0.355780005, 0.656459987), Vec2(0.444310009, 0.643970013), Vec2(0.500389993, 0.658290029), Vec2(0.420439988, 0.673370004), Vec2(0.401789993, 0.653450012), Vec2(0.409880012, 0.625890017), Vec2(0.444310009, 0.643970013), Vec2(0.401789993, 0.653450012), Vec2(0.379680008, 0.633029997), Vec2(0.343589991, 0.591830015), Vec2(0.360130012, 0.612429976), Vec2(0.331440002, 0.614180028), Vec2(0.319370002, 0.593249977), Vec2(0.360130012, 0.612429976), Vec2(0.379680008, 0.633029997), Vec2(0.344150007, 0.635249972), Vec2(0.331440002, 0.614180028), Vec2(0.384849995, 0.606750011), Vec2(0.409880012, 0.625890017), Vec2(0.379680008, 0.633029997), Vec2(0.360130012, 0.612429976), Vec2(0.365060002, 0.587239981), Vec2(0.384849995, 0.606750011), Vec2(0.360130012, 0.612429976), Vec2(0.343589991, 0.591830015), Vec2(0.265329987, 0.510739982), Vec2(0.271970004, 0.530799985), Vec2(0.253850013, 0.528330028), Vec2(0.248649999, 0.508920014), Vec2(0.271970004, 0.530799985), Vec2(0.278849989, 0.550880015), Vec2(0.258659989, 0.547689974), Vec2(0.253850013, 0.528330028), Vec2(0.289909989, 0.531620026), Vec2(0.298669994, 0.551989973), Vec2(0.278849989, 0.550880015), Vec2(0.271970004, 0.530799985), Vec2(0.281960011, 0.511309981), Vec2(0.289909989, 0.531620026), Vec2(0.271970004, 0.530799985), Vec2(0.265329987, 0.510739982), Vec2(0.278849989, 0.550880015), Vec2(0.286029994, 0.57111001), Vec2(0.263069987, 0.567149997), Vec2(0.258659989, 0.547689974), Vec2(0.286029994, 0.57111001), Vec2(0.293480009, 0.591530025), Vec2(0.267040014, 0.586799979), Vec2(0.263069987, 0.567149997), Vec2(0.30844, 0.572520018), Vec2(0.319370002, 0.593249977), Vec2(0.293480009, 0.591530025), Vec2(0.286029994, 0.57111001), Vec2(0.298669994, 0.551989973), Vec2(0.30844, 0.572520018), Vec2(0.286029994, 0.57111001), Vec2(0.278849989, 0.550880015), Vec2(0.317589998, 0.550979972), Vec2(0.329569995, 0.571330011), Vec2(0.30844, 0.572520018), Vec2(0.298669994, 0.551989973), Vec2(0.329569995, 0.571330011), Vec2(0.343589991, 0.591830015), Vec2(0.319370002, 0.593249977), Vec2(0.30844, 0.572520018), Vec2(0.348800004, 0.567589998), Vec2(0.365060002, 0.587239981), Vec2(0.343589991, 0.591830015), Vec2(0.329569995, 0.571330011), Vec2(0.335189998, 0.547879994), Vec2(0.348800004, 0.567589998), Vec2(0.329569995, 0.571330011), Vec2(0.317589998, 0.550979972), Vec2(0.298220009, 0.510519981), Vec2(0.307240009, 0.530740023), Vec2(0.289909989, 0.531620026), Vec2(0.281960011, 0.511309981), Vec2(0.307240009, 0.530740023), Vec2(0.317589998, 0.550979972), Vec2(0.298669994, 0.551989973), Vec2(0.289909989, 0.531620026), Vec2(0.323650002, 0.528159976), Vec2(0.335189998, 0.547879994), Vec2(0.317589998, 0.550979972), Vec2(0.307240009, 0.530740023), Vec2(0.313829988, 0.508350015), Vec2(0.323650002, 0.528159976), Vec2(0.307240009, 0.530740023), Vec2(0.298220009, 0.510519981), Vec2(0.842700005, 0.625060022), Vec2(0.832099974, 0.607219994), Vec2(0.860819995, 0.586709976), Vec2(0.873660028, 0.603190005), Vec2(0.832099974, 0.607219994), Vec2(0.823029995, 0.590030015), Vec2(0.849479973, 0.570919991), Vec2(0.860819995, 0.586709976), Vec2(0.800450027, 0.624689996), Vec2(0.793940008, 0.606140018), Vec2(0.823029995, 0.590030015), Vec2(0.832099974, 0.607219994), Vec2(0.80884999, 0.643920004), Vec2(0.800450027, 0.624689996), Vec2(0.832099974, 0.607219994), Vec2(0.842700005, 0.625060022), Vec2(0.823029995, 0.590030015), Vec2(0.815410018, 0.573409975), Vec2(0.839460015, 0.555760026), Vec2(0.849479973, 0.570919991), Vec2(0.815410018, 0.573409975), Vec2(0.809050024, 0.557370007), Vec2(0.830600023, 0.541279972), Vec2(0.839460015, 0.555760026), Vec2(0.789049983, 0.588119984), Vec2(0.785489976, 0.570590019), Vec2(0.809050024, 0.557370007), Vec2(0.815410018, 0.573409975), Vec2(0.793940008, 0.606140018), Vec2(0.789049983, 0.588119984), Vec2(0.815410018, 0.573409975), Vec2(0.823029995, 0.590030015), Vec2(0.762390018, 0.619090021), Vec2(0.760730028, 0.599810004), Vec2(0.789049983, 0.588119984), Vec2(0.793940008, 0.606140018), Vec2(0.760730028, 0.599810004), Vec2(0.760389984, 0.580959976), Vec2(0.785489976, 0.570590019), Vec2(0.789049983, 0.588119984), Vec2(0.730910003, 0.608399987), Vec2(0.734250009, 0.58851999), Vec2(0.760389984, 0.580959976), Vec2(0.760730028, 0.599810004), Vec2(0.728670001, 0.628660023), Vec2(0.730910003, 0.608399987), Vec2(0.760730028, 0.599810004), Vec2(0.762390018, 0.619090021), Vec2(0.771799982, 0.659430027), Vec2(0.765900016, 0.638890028), Vec2(0.800450027, 0.624689996), Vec2(0.80884999, 0.643920004), Vec2(0.765900016, 0.638890028), Vec2(0.762390018, 0.619090021), Vec2(0.793940008, 0.606140018), Vec2(0.800450027, 0.624689996), Vec2(0.728420019, 0.649460018), Vec2(0.728670001, 0.628660023), Vec2(0.762390018, 0.619090021), Vec2(0.765900016, 0.638890028), Vec2(0.731289983, 0.671140015), Vec2(0.728420019, 0.649460018), Vec2(0.765900016, 0.638890028), Vec2(0.771799982, 0.659430027), Vec2(0.809050024, 0.557370007), Vec2(0.803820014, 0.541989982), Vec2(0.822780013, 0.527639985), Vec2(0.830600023, 0.541279972), Vec2(0.803820014, 0.541989982), Vec2(0.799759984, 0.527360022), Vec2(0.815949976, 0.515120029), Vec2(0.822780013, 0.527639985), Vec2(0.783070028, 0.553539991), Vec2(0.781769991, 0.536920011), Vec2(0.799759984, 0.527360022), Vec2(0.803820014, 0.541989982), Vec2(0.785489976, 0.570590019), Vec2(0.783070028, 0.553539991), Vec2(0.803820014, 0.541989982), Vec2(0.809050024, 0.557370007), Vec2(0.799759984, 0.527360022), Vec2(0.797219992, 0.513509989), Vec2(0.810230017, 0.504260004), Vec2(0.815949976, 0.515120029), Vec2(0.797219992, 0.513509989), Vec2(0.797230005, 0.500100017), Vec2(0.806450009, 0.496930003), Vec2(0.810230017, 0.504260004), Vec2(0.781840026, 0.520579994), Vec2(0.783689976, 0.504140019), Vec2(0.797230005, 0.500100017), Vec2(0.797219992, 0.513509989), Vec2(0.781769991, 0.536920011), Vec2(0.781840026, 0.520579994), Vec2(0.797219992, 0.513509989), Vec2(0.799759984, 0.527360022), Vec2(0.762480021, 0.544250011), Vec2(0.764869988, 0.526130021), Vec2(0.781840026, 0.520579994), Vec2(0.781769991, 0.536920011), Vec2(0.764869988, 0.526130021), Vec2(0.768320024, 0.5079), Vec2(0.783689976, 0.504140019), Vec2(0.781840026, 0.520579994), Vec2(0.746990025, 0.530250013), Vec2(0.751950026, 0.510909975), Vec2(0.768320024, 0.5079), Vec2(0.764869988, 0.526130021), Vec2(0.742399991, 0.549539983), Vec2(0.746990025, 0.530250013), Vec2(0.764869988, 0.526130021), Vec2(0.762480021, 0.544250011), Vec2(0.760389984, 0.580959976), Vec2(0.761009991, 0.562470019), Vec2(0.783070028, 0.553539991), Vec2(0.785489976, 0.570590019), Vec2(0.761009991, 0.562470019), Vec2(0.762480021, 0.544250011), Vec2(0.781769991, 0.536920011), Vec2(0.783070028, 0.553539991), Vec2(0.738150001, 0.56892997), Vec2(0.742399991, 0.549539983), Vec2(0.762480021, 0.544250011), Vec2(0.761009991, 0.562470019), Vec2(0.734250009, 0.58851999), Vec2(0.738150001, 0.56892997), Vec2(0.761009991, 0.562470019), Vec2(0.760389984, 0.580959976), Vec2(0.707710028, 0.593240023), Vec2(0.715059996, 0.572960019), Vec2(0.738150001, 0.56892997), Vec2(0.734250009, 0.58851999), Vec2(0.715059996, 0.572960019), Vec2(0.722069979, 0.552860022), Vec2(0.742399991, 0.549539983), Vec2(0.738150001, 0.56892997), Vec2(0.692430019, 0.574530005), Vec2(0.702040017, 0.554139972), Vec2(0.722069979, 0.552860022), Vec2(0.715059996, 0.572960019), Vec2(0.681620002, 0.595070004), Vec2(0.692430019, 0.574530005), Vec2(0.715059996, 0.572960019), Vec2(0.707710028, 0.593240023), Vec2(0.722069979, 0.552860022), Vec2(0.728739977, 0.532869995), Vec2(0.746990025, 0.530250013), Vec2(0.742399991, 0.549539983), Vec2(0.728739977, 0.532869995), Vec2(0.73514998, 0.512889981), Vec2(0.751950026, 0.510909975), Vec2(0.746990025, 0.530250013), Vec2(0.71063, 0.533869982), Vec2(0.718360007, 0.513629973), Vec2(0.73514998, 0.512889981), Vec2(0.728739977, 0.532869995), Vec2(0.702040017, 0.554139972), Vec2(0.71063, 0.533869982), Vec2(0.728739977, 0.532869995), Vec2(0.722069979, 0.552860022), Vec2(0.682889998, 0.553330004), Vec2(0.693090022, 0.533169985), Vec2(0.71063, 0.533869982), Vec2(0.702040017, 0.554139972), Vec2(0.693090022, 0.533169985), Vec2(0.701950014, 0.513010025), Vec2(0.718360007, 0.513629973), Vec2(0.71063, 0.533869982), Vec2(0.676490009, 0.530740023), Vec2(0.686190009, 0.51098001), Vec2(0.701950014, 0.513010025), Vec2(0.693090022, 0.533169985), Vec2(0.665059984, 0.550390005), Vec2(0.676490009, 0.530740023), Vec2(0.693090022, 0.533169985), Vec2(0.682889998, 0.553330004), Vec2(0.657029986, 0.593879998), Vec2(0.671000004, 0.573570013), Vec2(0.692430019, 0.574530005), Vec2(0.681620002, 0.595070004), Vec2(0.671000004, 0.573570013), Vec2(0.682889998, 0.553330004), Vec2(0.702040017, 0.554139972), Vec2(0.692430019, 0.574530005), Vec2(0.651480019, 0.569999993), Vec2(0.665059984, 0.550390005), Vec2(0.682889998, 0.553330004), Vec2(0.671000004, 0.573570013), Vec2(0.635169983, 0.589510024), Vec2(0.651480019, 0.569999993), Vec2(0.671000004, 0.573570013), Vec2(0.657029986, 0.593879998), Vec2(0.686789989, 0.678439975), Vec2(0.687950015, 0.65595001), Vec2(0.728420019, 0.649460018), Vec2(0.731289983, 0.671140015), Vec2(0.687950015, 0.65595001), Vec2(0.693180025, 0.634570003), Vec2(0.728670001, 0.628660023), Vec2(0.728420019, 0.649460018), Vec2(0.644529998, 0.657729983), Vec2(0.656729996, 0.636539996), Vec2(0.693180025, 0.634570003), Vec2(0.687950015, 0.65595001), Vec2(0.637009978, 0.680320024), Vec2(0.644529998, 0.657729983), Vec2(0.687950015, 0.65595001), Vec2(0.686789989, 0.678439975), Vec2(0.693180025, 0.634570003), Vec2(0.700209975, 0.613749981), Vec2(0.730910003, 0.608399987), Vec2(0.728670001, 0.628660023), Vec2(0.700209975, 0.613749981), Vec2(0.707710028, 0.593240023), Vec2(0.734250009, 0.58851999), Vec2(0.730910003, 0.608399987), Vec2(0.669589996, 0.615740001), Vec2(0.681620002, 0.595070004), Vec2(0.707710028, 0.593240023), Vec2(0.700209975, 0.613749981), Vec2(0.656729996, 0.636539996), Vec2(0.669589996, 0.615740001), Vec2(0.700209975, 0.613749981), Vec2(0.693180025, 0.634570003), Vec2(0.621029973, 0.634329975), Vec2(0.640519977, 0.614189982), Vec2(0.669589996, 0.615740001), Vec2(0.656729996, 0.636539996), Vec2(0.640519977, 0.614189982), Vec2(0.657029986, 0.593879998), Vec2(0.681620002, 0.595070004), Vec2(0.669589996, 0.615740001), Vec2(0.615159988, 0.608810008), Vec2(0.635169983, 0.589510024), Vec2(0.657029986, 0.593879998), Vec2(0.640519977, 0.614189982), Vec2(0.589739978, 0.627610028), Vec2(0.615159988, 0.608810008), Vec2(0.640519977, 0.614189982), Vec2(0.621029973, 0.634329975), Vec2(0.578499973, 0.674719989), Vec2(0.598869979, 0.654150009), Vec2(0.644529998, 0.657729983), Vec2(0.637009978, 0.680320024), Vec2(0.598869979, 0.654150009), Vec2(0.621029973, 0.634329975), Vec2(0.656729996, 0.636539996), Vec2(0.644529998, 0.657729983), Vec2(0.555029988, 0.645049989), Vec2(0.589739978, 0.627610028), Vec2(0.621029973, 0.634329975), Vec2(0.598869979, 0.654150009), Vec2(0.500389993, 0.658290029), Vec2(0.555029988, 0.645049989), Vec2(0.598869979, 0.654150009), Vec2(0.578499973, 0.674719989), Vec2(0.500389993, 0.63331002), Vec2(0.538890004, 0.62766999), Vec2(0.555029988, 0.645049989), Vec2(0.500389993, 0.658290029), Vec2(0.538890004, 0.62766999), Vec2(0.570550025, 0.614780009), Vec2(0.589739978, 0.627610028), Vec2(0.555029988, 0.645049989), Vec2(0.530480027, 0.608229995), Vec2(0.557850003, 0.599129975), Vec2(0.570550025, 0.614780009), Vec2(0.538890004, 0.62766999), Vec2(0.500389993, 0.611329973), Vec2(0.530480027, 0.608229995), Vec2(0.538890004, 0.62766999), Vec2(0.500389993, 0.63331002), Vec2(0.570550025, 0.614780009), Vec2(0.596099973, 0.599039972), Vec2(0.615159988, 0.608810008), Vec2(0.589739978, 0.627610028), Vec2(0.596099973, 0.599039972), Vec2(0.617009997, 0.581849992), Vec2(0.635169983, 0.589510024), Vec2(0.615159988, 0.608810008), Vec2(0.581690013, 0.586449981), Vec2(0.602129996, 0.571669996), Vec2(0.617009997, 0.581849992), Vec2(0.596099973, 0.599039972), Vec2(0.557850003, 0.599129975), Vec2(0.581690013, 0.586449981), Vec2(0.596099973, 0.599039972), Vec2(0.570550025, 0.614780009), Vec2(0.549090028, 0.582029998), Vec2(0.570729971, 0.572009981), Vec2(0.581690013, 0.586449981), Vec2(0.557850003, 0.599129975), Vec2(0.570729971, 0.572009981), Vec2(0.590020001, 0.559599996), Vec2(0.602129996, 0.571669996), Vec2(0.581690013, 0.586449981), Vec2(0.562319994, 0.556420028), Vec2(0.58020997, 0.54618001), Vec2(0.590020001, 0.559599996), Vec2(0.570729971, 0.572009981), Vec2(0.542770028, 0.564339995), Vec2(0.562319994, 0.556420028), Vec2(0.570729971, 0.572009981), Vec2(0.549090028, 0.582029998), Vec2(0.500389993, 0.590650022), Vec2(0.525390029, 0.588639975), Vec2(0.530480027, 0.608229995), Vec2(0.500389993, 0.611329973), Vec2(0.525390029, 0.588639975), Vec2(0.549090028, 0.582029998), Vec2(0.557850003, 0.599129975), Vec2(0.530480027, 0.608229995), Vec2(0.521939993, 0.569310009), Vec2(0.542770028, 0.564339995), Vec2(0.549090028, 0.582029998), Vec2(0.525390029, 0.588639975), Vec2(0.500389993, 0.570739985), Vec2(0.521939993, 0.569310009), Vec2(0.525390029, 0.588639975), Vec2(0.500389993, 0.590650022), Vec2(0.617009997, 0.581849992), Vec2(0.634360015, 0.563870013), Vec2(0.651480019, 0.569999993), Vec2(0.635169983, 0.589510024), Vec2(0.634360015, 0.563870013), Vec2(0.648859978, 0.545419991), Vec2(0.665059984, 0.550390005), Vec2(0.651480019, 0.569999993), Vec2(0.619560003, 0.55558002), Vec2(0.634360015, 0.538630009), Vec2(0.648859978, 0.545419991), Vec2(0.634360015, 0.563870013), Vec2(0.602129996, 0.571669996), Vec2(0.619560003, 0.55558002), Vec2(0.634360015, 0.563870013), Vec2(0.617009997, 0.581849992), Vec2(0.648859978, 0.545419991), Vec2(0.661040008, 0.526639998), Vec2(0.676490009, 0.530740023), Vec2(0.665059984, 0.550390005), Vec2(0.661040008, 0.526639998), Vec2(0.671270013, 0.507589996), Vec2(0.686190009, 0.51098001), Vec2(0.676490009, 0.530740023), Vec2(0.64684999, 0.52105999), Vec2(0.657299995, 0.502950013), Vec2(0.671270013, 0.507589996), Vec2(0.661040008, 0.526639998), Vec2(0.634360015, 0.538630009), Vec2(0.64684999, 0.52105999), Vec2(0.661040008, 0.526639998), Vec2(0.648859978, 0.545419991), Vec2(0.621529996, 0.530330002), Vec2(0.633970022, 0.514190018), Vec2(0.64684999, 0.52105999), Vec2(0.634360015, 0.538630009), Vec2(0.633970022, 0.514190018), Vec2(0.644360006, 0.497269988), Vec2(0.657299995, 0.502950013), Vec2(0.64684999, 0.52105999), Vec2(0.622420013, 0.50632), Vec2(0.632510006, 0.490810007), Vec2(0.644360006, 0.497269988), Vec2(0.633970022, 0.514190018), Vec2(0.610329986, 0.520829976), Vec2(0.622420013, 0.50632), Vec2(0.633970022, 0.514190018), Vec2(0.621529996, 0.530330002), Vec2(0.590020001, 0.559599996), Vec2(0.606920004, 0.545560002), Vec2(0.619560003, 0.55558002), Vec2(0.602129996, 0.571669996), Vec2(0.606920004, 0.545560002), Vec2(0.621529996, 0.530330002), Vec2(0.634360015, 0.538630009), Vec2(0.619560003, 0.55558002), Vec2(0.596249998, 0.534189999), Vec2(0.610329986, 0.520829976), Vec2(0.621529996, 0.530330002), Vec2(0.606920004, 0.545560002), Vec2(0.58020997, 0.54618001), Vec2(0.596249998, 0.534189999), Vec2(0.606920004, 0.545560002), Vec2(0.590020001, 0.559599996), Vec2(0.572329998, 0.531830013), Vec2(0.587379992, 0.521820009), Vec2(0.596249998, 0.534189999), Vec2(0.58020997, 0.54618001), Vec2(0.587379992, 0.521820009), Vec2(0.600750029, 0.510399997), Vec2(0.610329986, 0.520829976), Vec2(0.596249998, 0.534189999), Vec2(0.580219984, 0.508660018), Vec2(0.592819989, 0.499260008), Vec2(0.600750029, 0.510399997), Vec2(0.587379992, 0.521820009), Vec2(0.566129982, 0.516830027), Vec2(0.580219984, 0.508660018), Vec2(0.587379992, 0.521820009), Vec2(0.572329998, 0.531830013), Vec2(0.600750029, 0.510399997), Vec2(0.612269998, 0.49774), Vec2(0.622420013, 0.50632), Vec2(0.610329986, 0.520829976), Vec2(0.612269998, 0.49774), Vec2(0.621800005, 0.483859986), Vec2(0.632510006, 0.490810007), Vec2(0.622420013, 0.50632), Vec2(0.603630006, 0.488689989), Vec2(0.612360001, 0.476819992), Vec2(0.621800005, 0.483859986), Vec2(0.612269998, 0.49774), Vec2(0.592819989, 0.499260008), Vec2(0.603630006, 0.488689989), Vec2(0.612269998, 0.49774), Vec2(0.600750029, 0.510399997), Vec2(0.58671999, 0.487450004), Vec2(0.596840024, 0.479360014), Vec2(0.603630006, 0.488689989), Vec2(0.592819989, 0.499260008), Vec2(0.596840024, 0.479360014), Vec2(0.604449987, 0.47025001), Vec2(0.612360001, 0.476819992), Vec2(0.603630006, 0.488689989), Vec2(0.592630029, 0.469500005), Vec2(0.599250019, 0.465579987), Vec2(0.604449987, 0.47025001), Vec2(0.596840024, 0.479360014), Vec2(0.582710028, 0.474830002), Vec2(0.592630029, 0.469500005), Vec2(0.596840024, 0.479360014), Vec2(0.58671999, 0.487450004), Vec2(0.561479986, 0.501309991), Vec2(0.574779987, 0.494819999), Vec2(0.580219984, 0.508660018), Vec2(0.566129982, 0.516830027), Vec2(0.574779987, 0.494819999), Vec2(0.58671999, 0.487450004), Vec2(0.592819989, 0.499260008), Vec2(0.580219984, 0.508660018), Vec2(0.571099997, 0.480280012), Vec2(0.582710028, 0.474830002), Vec2(0.58671999, 0.487450004), Vec2(0.574779987, 0.494819999), Vec2(0.558290005, 0.485320002), Vec2(0.571099997, 0.480280012), Vec2(0.574779987, 0.494819999), Vec2(0.561479986, 0.501309991), Vec2(0.500389993, 0.551400006), Vec2(0.519469976, 0.550300002), Vec2(0.521939993, 0.569310009), Vec2(0.500389993, 0.570739985), Vec2(0.519469976, 0.550300002), Vec2(0.538079977, 0.546459973), Vec2(0.542770028, 0.564339995), Vec2(0.521939993, 0.569310009), Vec2(0.517650008, 0.531599998), Vec2(0.534569979, 0.528569996), Vec2(0.538079977, 0.546459973), Vec2(0.519469976, 0.550300002), Vec2(0.500389993, 0.532480001), Vec2(0.517650008, 0.531599998), Vec2(0.519469976, 0.550300002), Vec2(0.500389993, 0.551400006), Vec2(0.538079977, 0.546459973), Vec2(0.555809975, 0.540170014), Vec2(0.562319994, 0.556420028), Vec2(0.542770028, 0.564339995), Vec2(0.555809975, 0.540170014), Vec2(0.572329998, 0.531830013), Vec2(0.58020997, 0.54618001), Vec2(0.562319994, 0.556420028), Vec2(0.550819993, 0.523559988), Vec2(0.566129982, 0.516830027), Vec2(0.572329998, 0.531830013), Vec2(0.555809975, 0.540170014), Vec2(0.534569979, 0.528569996), Vec2(0.550819993, 0.523559988), Vec2(0.555809975, 0.540170014), Vec2(0.538079977, 0.546459973), Vec2(0.531989992, 0.510689974), Vec2(0.547129989, 0.506690025), Vec2(0.550819993, 0.523559988), Vec2(0.534569979, 0.528569996), Vec2(0.547129989, 0.506690025), Vec2(0.561479986, 0.501309991), Vec2(0.566129982, 0.516830027), Vec2(0.550819993, 0.523559988), Vec2(0.544579983, 0.489589989), Vec2(0.558290005, 0.485320002), Vec2(0.561479986, 0.501309991), Vec2(0.547129989, 0.506690025), Vec2(0.530219972, 0.492810011), Vec2(0.544579983, 0.489589989), Vec2(0.547129989, 0.506690025), Vec2(0.531989992, 0.510689974), Vec2(0.500389993, 0.513880014), Vec2(0.516330004, 0.513119996), Vec2(0.517650008, 0.531599998), Vec2(0.500389993, 0.532480001), Vec2(0.516330004, 0.513119996), Vec2(0.531989992, 0.510689974), Vec2(0.534569979, 0.528569996), Vec2(0.517650008, 0.531599998), Vec2(0.51542002, 0.494789988), Vec2(0.530219972, 0.492810011), Vec2(0.531989992, 0.510689974), Vec2(0.516330004, 0.513119996), Vec2(0.500389993, 0.49544999), Vec2(0.51542002, 0.494789988), Vec2(0.516330004, 0.513119996), Vec2(0.500389993, 0.513880014), Vec2(0.328619987, 0.504840016), Vec2(0.338959992, 0.523949981), Vec2(0.323650002, 0.528159976), Vec2(0.313829988, 0.508350015), Vec2(0.338959992, 0.523949981), Vec2(0.351229995, 0.542800009), Vec2(0.335189998, 0.547879994), Vec2(0.323650002, 0.528159976), Vec2(0.35304001, 0.518280029), Vec2(0.365619987, 0.535939991), Vec2(0.351229995, 0.542800009), Vec2(0.338959992, 0.523949981), Vec2(0.342489988, 0.500119984), Vec2(0.35304001, 0.518280029), Vec2(0.338959992, 0.523949981), Vec2(0.328619987, 0.504840016), Vec2(0.351229995, 0.542800009), Vec2(0.365790009, 0.561370015), Vec2(0.348800004, 0.567589998), Vec2(0.335189998, 0.547879994), Vec2(0.365790009, 0.561370015), Vec2(0.383150011, 0.57950002), Vec2(0.365060002, 0.587239981), Vec2(0.348800004, 0.567589998), Vec2(0.380490005, 0.552999973), Vec2(0.397969991, 0.56923002), Vec2(0.383150011, 0.57950002), Vec2(0.365790009, 0.561370015), Vec2(0.365619987, 0.535939991), Vec2(0.380490005, 0.552999973), Vec2(0.365790009, 0.561370015), Vec2(0.351229995, 0.542800009), Vec2(0.37834999, 0.527589977), Vec2(0.393029988, 0.542940021), Vec2(0.380490005, 0.552999973), Vec2(0.365619987, 0.535939991), Vec2(0.393029988, 0.542940021), Vec2(0.409999996, 0.557139993), Vec2(0.397969991, 0.56923002), Vec2(0.380490005, 0.552999973), Vec2(0.403629988, 0.531610012), Vec2(0.419750005, 0.543820024), Vec2(0.409999996, 0.557139993), Vec2(0.393029988, 0.542940021), Vec2(0.389479995, 0.518100023), Vec2(0.403629988, 0.531610012), Vec2(0.393029988, 0.542940021), Vec2(0.37834999, 0.527589977), Vec2(0.355369985, 0.494399995), Vec2(0.365839988, 0.511370003), Vec2(0.35304001, 0.518280029), Vec2(0.342489988, 0.500119984), Vec2(0.365839988, 0.511370003), Vec2(0.37834999, 0.527589977), Vec2(0.365619987, 0.535939991), Vec2(0.35304001, 0.518280029), Vec2(0.377339989, 0.503499985), Vec2(0.389479995, 0.518100023), Vec2(0.37834999, 0.527589977), Vec2(0.365839988, 0.511370003), Vec2(0.367210001, 0.48793), Vec2(0.377339989, 0.503499985), Vec2(0.365839988, 0.511370003), Vec2(0.355369985, 0.494399995), Vec2(0.383150011, 0.57950002), Vec2(0.404040009, 0.596889973), Vec2(0.384849995, 0.606750011), Vec2(0.365060002, 0.587239981), Vec2(0.404040009, 0.596889973), Vec2(0.4296, 0.612860024), Vec2(0.409880012, 0.625890017), Vec2(0.384849995, 0.606750011), Vec2(0.418469995, 0.584190011), Vec2(0.442400008, 0.597109973), Vec2(0.4296, 0.612860024), Vec2(0.404040009, 0.596889973), Vec2(0.397969991, 0.56923002), Vec2(0.418469995, 0.584190011), Vec2(0.404040009, 0.596889973), Vec2(0.383150011, 0.57950002), Vec2(0.4296, 0.612860024), Vec2(0.461400002, 0.625970006), Vec2(0.444310009, 0.643970013), Vec2(0.409880012, 0.625890017), Vec2(0.461400002, 0.625970006), Vec2(0.500389993, 0.63331002), Vec2(0.500389993, 0.658290029), Vec2(0.444310009, 0.643970013), Vec2(0.469940007, 0.606760025), Vec2(0.500389993, 0.611329973), Vec2(0.500389993, 0.63331002), Vec2(0.461400002, 0.625970006), Vec2(0.442400008, 0.597109973), Vec2(0.469940007, 0.606760025), Vec2(0.461400002, 0.625970006), Vec2(0.4296, 0.612860024), Vec2(0.451160014, 0.580179989), Vec2(0.475080013, 0.587490022), Vec2(0.469940007, 0.606760025), Vec2(0.442400008, 0.597109973), Vec2(0.475080013, 0.587490022), Vec2(0.500389993, 0.590650022), Vec2(0.500389993, 0.611329973), Vec2(0.469940007, 0.606760025), Vec2(0.478560001, 0.56844002), Vec2(0.500389993, 0.570739985), Vec2(0.500389993, 0.590650022), Vec2(0.475080013, 0.587490022), Vec2(0.457489997, 0.562780023), Vec2(0.478560001, 0.56844002), Vec2(0.475080013, 0.587490022), Vec2(0.451160014, 0.580179989), Vec2(0.409999996, 0.557139993), Vec2(0.42938, 0.569769979), Vec2(0.418469995, 0.584190011), Vec2(0.397969991, 0.56923002), Vec2(0.42938, 0.569769979), Vec2(0.451160014, 0.580179989), Vec2(0.442400008, 0.597109973), Vec2(0.418469995, 0.584190011), Vec2(0.437759995, 0.554369986), Vec2(0.457489997, 0.562780023), Vec2(0.451160014, 0.580179989), Vec2(0.42938, 0.569769979), Vec2(0.419750005, 0.543820024), Vec2(0.437759995, 0.554369986), Vec2(0.42938, 0.569769979), Vec2(0.409999996, 0.557139993), Vec2(0.42761001, 0.52967), Vec2(0.444270015, 0.538399994), Vec2(0.437759995, 0.554369986), Vec2(0.419750005, 0.543820024), Vec2(0.444270015, 0.538399994), Vec2(0.46221, 0.54519999), Vec2(0.457489997, 0.562780023), Vec2(0.437759995, 0.554369986), Vec2(0.449299991, 0.522080004), Vec2(0.465770006, 0.527589977), Vec2(0.46221, 0.54519999), Vec2(0.444270015, 0.538399994), Vec2(0.433840007, 0.514919996), Vec2(0.449299991, 0.522080004), Vec2(0.444270015, 0.538399994), Vec2(0.42761001, 0.52967), Vec2(0.46221, 0.54519999), Vec2(0.481059998, 0.549660027), Vec2(0.478560001, 0.56844002), Vec2(0.457489997, 0.562780023), Vec2(0.481059998, 0.549660027), Vec2(0.500389993, 0.551400006), Vec2(0.500389993, 0.570739985), Vec2(0.478560001, 0.56844002), Vec2(0.482910007, 0.531140029), Vec2(0.500389993, 0.532480001), Vec2(0.500389993, 0.551400006), Vec2(0.481059998, 0.549660027), Vec2(0.465770006, 0.527589977), Vec2(0.482910007, 0.531140029), Vec2(0.481059998, 0.549660027), Vec2(0.46221, 0.54519999), Vec2(0.468409985, 0.509959996), Vec2(0.484270006, 0.512830019), Vec2(0.482910007, 0.531140029), Vec2(0.465770006, 0.527589977), Vec2(0.484270006, 0.512830019), Vec2(0.500389993, 0.513880014), Vec2(0.500389993, 0.532480001), Vec2(0.482910007, 0.531140029), Vec2(0.485249996, 0.494610012), Vec2(0.500389993, 0.49544999), Vec2(0.500389993, 0.513880014), Vec2(0.484270006, 0.512830019), Vec2(0.470310003, 0.492269993), Vec2(0.485249996, 0.494610012), Vec2(0.484270006, 0.512830019), Vec2(0.468409985, 0.509959996), Vec2(0.43858999, 0.499669999), Vec2(0.453090012, 0.505490005), Vec2(0.449299991, 0.522080004), Vec2(0.433840007, 0.514919996), Vec2(0.453090012, 0.505490005), Vec2(0.468409985, 0.509959996), Vec2(0.465770006, 0.527589977), Vec2(0.449299991, 0.522080004), Vec2(0.455799997, 0.488629997), Vec2(0.470310003, 0.492269993), Vec2(0.468409985, 0.509959996), Vec2(0.453090012, 0.505490005), Vec2(0.441960007, 0.483940005), Vec2(0.455799997, 0.488629997), Vec2(0.453090012, 0.505490005), Vec2(0.43858999, 0.499669999), Vec2(0.377939999, 0.481029987), Vec2(0.387490004, 0.494980007), Vec2(0.377339989, 0.503499985), Vec2(0.367210001, 0.48793), Vec2(0.387490004, 0.494980007), Vec2(0.399040014, 0.507770002), Vec2(0.389479995, 0.518100023), Vec2(0.377339989, 0.503499985), Vec2(0.39616999, 0.486059994), Vec2(0.407000005, 0.496780008), Vec2(0.399040014, 0.507770002), Vec2(0.387490004, 0.494980007), Vec2(0.38745001, 0.474099994), Vec2(0.39616999, 0.486059994), Vec2(0.387490004, 0.494980007), Vec2(0.377939999, 0.481029987), Vec2(0.399040014, 0.507770002), Vec2(0.412470013, 0.519370019), Vec2(0.403629988, 0.531610012), Vec2(0.389479995, 0.518100023), Vec2(0.412470013, 0.519370019), Vec2(0.42761001, 0.52967), Vec2(0.419750005, 0.543820024), Vec2(0.403629988, 0.531610012), Vec2(0.419649988, 0.506420016), Vec2(0.433840007, 0.514919996), Vec2(0.42761001, 0.52967), Vec2(0.412470013, 0.519370019), Vec2(0.407000005, 0.496780008), Vec2(0.419649988, 0.506420016), Vec2(0.412470013, 0.519370019), Vec2(0.399040014, 0.507770002), Vec2(0.413190007, 0.485159993), Vec2(0.425190002, 0.492810011), Vec2(0.419649988, 0.506420016), Vec2(0.407000005, 0.496780008), Vec2(0.425190002, 0.492810011), Vec2(0.43858999, 0.499669999), Vec2(0.433840007, 0.514919996), Vec2(0.419649988, 0.506420016), Vec2(0.429049999, 0.478509992), Vec2(0.441960007, 0.483940005), Vec2(0.43858999, 0.499669999), Vec2(0.425190002, 0.492810011), Vec2(0.417360008, 0.472730011), Vec2(0.429049999, 0.478509992), Vec2(0.425190002, 0.492810011), Vec2(0.413190007, 0.485159993), Vec2(0.39546001, 0.467680007), Vec2(0.403050005, 0.476880014), Vec2(0.39616999, 0.486059994), Vec2(0.38745001, 0.474099994), Vec2(0.403050005, 0.476880014), Vec2(0.413190007, 0.485159993), Vec2(0.407000005, 0.496780008), Vec2(0.39616999, 0.486059994), Vec2(0.407389998, 0.467159986), Vec2(0.417360008, 0.472730011), Vec2(0.413190007, 0.485159993), Vec2(0.403050005, 0.476880014), Vec2(0.400750011, 0.463099986), Vec2(0.407389998, 0.467159986), Vec2(0.403050005, 0.476880014), Vec2(0.39546001, 0.467680007)}, + ["subd_fvar_linear"] = "corners plus1", + ["primitive_attributes"] = { UserData("/sphere1/sphere.primvars:dwa_mesh_file_translator_version"), UserData("/sphere1/sphere.primvars:dwa_mesh_translator_version"), UserData("/sphere1/sphere.primvars:name"), UserData("/sphere1/sphere.primvars:primId"), UserData("/sphere1/sphere.primvars:subd__hi"), UserData("/sphere1/sphere.primvars:subd__lo")}, +} + +RdlMeshGeometry("/sphere2/sphere") { + ["node_xform"] = blur(Mat4(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 2, 2, -6, 1), Mat4(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 2, 2, -6, 1)), + ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + ["vertices_by_index"] = { 3, 2, 1, 0, 2, 5, 4, 1, 7, 6, 5, 2, 8, 7, 2, 3, 5, 10, 9, 4, 10, 12, 11, 9, 14, 13, 12, 10, 6, 14, 10, 5, 16, 15, 14, 6, 15, 17, 13, 14, 19, 18, 17, 15, 20, 19, 15, 16, 22, 21, 7, 8, 21, 16, 6, 7, 23, 20, 16, 21, 24, 23, 21, 22, 12, 26, 25, 11, 26, 28, 27, 25, 30, 29, 28, 26, 13, 30, 26, 12, 28, 32, 31, 27, 32, 34, 33, 31, 36, 35, 34, 32, 29, 36, 32, 28, 38, 37, 36, 29, 37, 39, 35, 36, 41, 40, 39, 37, 42, 41, 37, 38, 17, 43, 30, 13, 43, 38, 29, 30, 44, 42, 38, 43, 18, 44, 43, 17, 46, 45, 44, 18, 45, 47, 42, 44, 49, 48, 47, 45, 50, 49, 45, 46, 47, 51, 41, 42, 51, 52, 40, 41, 54, 53, 52, 51, 48, 54, 51, 47, 56, 55, 54, 48, 55, 57, 53, 54, 59, 58, 57, 55, 60, 59, 55, 56, 62, 61, 49, 50, 61, 56, 48, 49, 63, 60, 56, 61, 64, 63, 61, 62, 66, 65, 23, 24, 65, 67, 20, 23, 69, 68, 67, 65, 70, 69, 65, 66, 67, 71, 19, 20, 71, 46, 18, 19, 72, 50, 46, 71, 68, 72, 71, 67, 74, 73, 72, 68, 73, 62, 50, 72, 75, 64, 62, 73, 76, 75, 73, 74, 78, 77, 69, 70, 77, 74, 68, 69, 79, 76, 74, 77, 80, 79, 77, 78, 34, 82, 81, 33, 82, 84, 83, 81, 86, 85, 84, 82, 35, 86, 82, 34, 84, 88, 87, 83, 88, 90, 89, 87, 92, 91, 90, 88, 85, 92, 88, 84, 94, 93, 92, 85, 93, 95, 91, 92, 97, 96, 95, 93, 98, 97, 93, 94, 39, 99, 86, 35, 99, 94, 85, 86, 100, 98, 94, 99, 40, 100, 99, 39, 90, 102, 101, 89, 102, 104, 103, 101, 106, 105, 104, 102, 91, 106, 102, 90, 104, 108, 107, 103, 108, 110, 109, 107, 112, 111, 110, 108, 105, 112, 108, 104, 114, 113, 112, 105, 113, 115, 111, 112, 117, 116, 115, 113, 118, 117, 113, 114, 95, 119, 106, 91, 119, 114, 105, 106, 120, 118, 114, 119, 96, 120, 119, 95, 122, 121, 120, 96, 121, 123, 118, 120, 125, 124, 123, 121, 126, 125, 121, 122, 123, 127, 117, 118, 127, 128, 116, 117, 130, 129, 128, 127, 124, 130, 127, 123, 132, 131, 130, 124, 131, 133, 129, 130, 135, 134, 133, 131, 136, 135, 131, 132, 138, 137, 125, 126, 137, 132, 124, 125, 139, 136, 132, 137, 140, 139, 137, 138, 52, 141, 100, 40, 141, 142, 98, 100, 144, 143, 142, 141, 53, 144, 141, 52, 142, 145, 97, 98, 145, 122, 96, 97, 146, 126, 122, 145, 143, 146, 145, 142, 148, 147, 146, 143, 147, 138, 126, 146, 149, 140, 138, 147, 150, 149, 147, 148, 57, 151, 144, 53, 151, 148, 143, 144, 152, 150, 148, 151, 58, 152, 151, 57, 154, 153, 152, 58, 153, 155, 150, 152, 157, 156, 155, 153, 158, 157, 153, 154, 155, 159, 149, 150, 159, 160, 140, 149, 162, 161, 160, 159, 156, 162, 159, 155, 164, 163, 162, 156, 163, 165, 161, 162, 167, 166, 165, 163, 168, 167, 163, 164, 170, 169, 157, 158, 169, 164, 156, 157, 171, 168, 164, 169, 172, 171, 169, 170, 160, 173, 139, 140, 173, 174, 136, 139, 176, 175, 174, 173, 161, 176, 173, 160, 174, 177, 135, 136, 177, 178, 134, 135, 180, 179, 178, 177, 175, 180, 177, 174, 182, 181, 180, 175, 181, 183, 179, 180, 185, 184, 183, 181, 186, 185, 181, 182, 165, 187, 176, 161, 187, 182, 175, 176, 188, 186, 182, 187, 166, 188, 187, 165, 190, 189, 188, 166, 189, 191, 186, 188, 193, 192, 191, 189, 194, 193, 189, 190, 191, 195, 185, 186, 195, 196, 184, 185, 198, 197, 196, 195, 192, 198, 195, 191, 200, 199, 198, 192, 199, 201, 197, 198, 203, 202, 201, 199, 204, 203, 199, 200, 206, 205, 193, 194, 205, 200, 192, 193, 207, 204, 200, 205, 208, 207, 205, 206, 210, 209, 171, 172, 209, 211, 168, 171, 213, 212, 211, 209, 214, 213, 209, 210, 211, 215, 167, 168, 215, 190, 166, 167, 216, 194, 190, 215, 212, 216, 215, 211, 218, 217, 216, 212, 217, 206, 194, 216, 219, 208, 206, 217, 220, 219, 217, 218, 222, 221, 213, 214, 221, 218, 212, 213, 223, 220, 218, 221, 224, 223, 221, 222, 226, 225, 79, 80, 225, 227, 76, 79, 229, 228, 227, 225, 230, 229, 225, 226, 227, 231, 75, 76, 231, 232, 64, 75, 234, 233, 232, 231, 228, 234, 231, 227, 236, 235, 234, 228, 235, 237, 233, 234, 239, 238, 237, 235, 240, 239, 235, 236, 242, 241, 229, 230, 241, 236, 228, 229, 243, 240, 236, 241, 244, 243, 241, 242, 232, 245, 63, 64, 245, 246, 60, 63, 248, 247, 246, 245, 233, 248, 245, 232, 246, 249, 59, 60, 249, 154, 58, 59, 250, 158, 154, 249, 247, 250, 249, 246, 252, 251, 250, 247, 251, 170, 158, 250, 253, 172, 170, 251, 254, 253, 251, 252, 237, 255, 248, 233, 255, 252, 247, 248, 256, 254, 252, 255, 238, 256, 255, 237, 258, 257, 256, 238, 257, 259, 254, 256, 261, 260, 259, 257, 262, 261, 257, 258, 259, 263, 253, 254, 263, 210, 172, 253, 264, 214, 210, 263, 260, 264, 263, 259, 266, 265, 264, 260, 265, 222, 214, 264, 267, 224, 222, 265, 268, 267, 265, 266, 270, 269, 261, 262, 269, 266, 260, 261, 271, 268, 266, 269, 272, 271, 269, 270, 274, 273, 243, 244, 273, 275, 240, 243, 277, 276, 275, 273, 278, 277, 273, 274, 275, 279, 239, 240, 279, 258, 238, 239, 280, 262, 258, 279, 276, 280, 279, 275, 282, 281, 280, 276, 281, 270, 262, 280, 283, 272, 270, 281, 284, 283, 281, 282, 286, 285, 277, 278, 285, 282, 276, 277, 287, 284, 282, 285, 288, 287, 285, 286, 290, 289, 107, 109, 289, 291, 103, 107, 293, 292, 291, 289, 294, 293, 289, 290, 291, 295, 101, 103, 295, 296, 89, 101, 298, 297, 296, 295, 292, 298, 295, 291, 300, 299, 298, 292, 299, 301, 297, 298, 303, 302, 301, 299, 304, 303, 299, 300, 306, 305, 293, 294, 305, 300, 292, 293, 307, 304, 300, 305, 308, 307, 305, 306, 296, 309, 87, 89, 309, 310, 83, 87, 312, 311, 310, 309, 297, 312, 309, 296, 310, 313, 81, 83, 313, 314, 33, 81, 316, 315, 314, 313, 311, 316, 313, 310, 318, 317, 316, 311, 317, 319, 315, 316, 321, 320, 319, 317, 322, 321, 317, 318, 301, 323, 312, 297, 323, 318, 311, 312, 324, 322, 318, 323, 302, 324, 323, 301, 326, 325, 324, 302, 325, 327, 322, 324, 329, 328, 327, 325, 330, 329, 325, 326, 327, 331, 321, 322, 331, 332, 320, 321, 334, 333, 332, 331, 328, 334, 331, 327, 336, 335, 334, 328, 335, 337, 333, 334, 339, 338, 337, 335, 340, 339, 335, 336, 342, 341, 329, 330, 341, 336, 328, 329, 343, 340, 336, 341, 344, 343, 341, 342, 346, 345, 307, 308, 345, 347, 304, 307, 349, 348, 347, 345, 350, 349, 345, 346, 347, 351, 303, 304, 351, 326, 302, 303, 352, 330, 326, 351, 348, 352, 351, 347, 354, 353, 352, 348, 353, 342, 330, 352, 355, 344, 342, 353, 356, 355, 353, 354, 358, 357, 349, 350, 357, 354, 348, 349, 359, 356, 354, 357, 360, 359, 357, 358, 314, 361, 31, 33, 361, 362, 27, 31, 364, 363, 362, 361, 315, 364, 361, 314, 362, 365, 25, 27, 365, 366, 11, 25, 368, 367, 366, 365, 363, 368, 365, 362, 370, 369, 368, 363, 369, 371, 367, 368, 373, 372, 371, 369, 374, 373, 369, 370, 319, 375, 364, 315, 375, 370, 363, 364, 376, 374, 370, 375, 320, 376, 375, 319, 366, 377, 9, 11, 377, 378, 4, 9, 380, 379, 378, 377, 367, 380, 377, 366, 378, 381, 1, 4, 381, 382, 0, 1, 384, 383, 382, 381, 379, 384, 381, 378, 386, 385, 384, 379, 385, 387, 383, 384, 389, 388, 387, 385, 390, 389, 385, 386, 371, 391, 380, 367, 391, 386, 379, 380, 392, 390, 386, 391, 372, 392, 391, 371, 394, 393, 392, 372, 393, 395, 390, 392, 397, 396, 395, 393, 398, 397, 393, 394, 395, 399, 389, 390, 399, 400, 388, 389, 402, 401, 400, 399, 396, 402, 399, 395, 404, 403, 402, 396, 403, 405, 401, 402, 407, 406, 405, 403, 408, 407, 403, 404, 410, 409, 397, 398, 409, 404, 396, 397, 411, 408, 404, 409, 412, 411, 409, 410, 332, 413, 376, 320, 413, 414, 374, 376, 416, 415, 414, 413, 333, 416, 413, 332, 414, 417, 373, 374, 417, 394, 372, 373, 418, 398, 394, 417, 415, 418, 417, 414, 420, 419, 418, 415, 419, 410, 398, 418, 421, 412, 410, 419, 422, 421, 419, 420, 337, 423, 416, 333, 423, 420, 415, 416, 424, 422, 420, 423, 338, 424, 423, 337, 426, 425, 424, 338, 425, 427, 422, 424, 429, 428, 427, 425, 430, 429, 425, 426, 427, 431, 421, 422, 431, 432, 412, 421, 434, 433, 432, 431, 428, 434, 431, 427, 436, 435, 434, 428, 435, 437, 433, 434, 439, 438, 437, 435, 440, 439, 435, 436, 442, 441, 429, 430, 441, 436, 428, 429, 443, 440, 436, 441, 444, 443, 441, 442, 432, 445, 411, 412, 445, 446, 408, 411, 448, 447, 446, 445, 433, 448, 445, 432, 446, 449, 407, 408, 449, 450, 406, 407, 452, 451, 450, 449, 447, 452, 449, 446, 454, 453, 452, 447, 453, 455, 451, 452, 457, 456, 455, 453, 458, 457, 453, 454, 437, 459, 448, 433, 459, 454, 447, 448, 460, 458, 454, 459, 438, 460, 459, 437, 462, 461, 460, 438, 461, 463, 458, 460, 465, 464, 463, 461, 466, 465, 461, 462, 463, 467, 457, 458, 467, 468, 456, 457, 470, 469, 468, 467, 464, 470, 467, 463, 472, 471, 470, 464, 471, 473, 469, 470, 475, 474, 473, 471, 476, 475, 471, 472, 478, 477, 465, 466, 477, 472, 464, 465, 479, 476, 472, 477, 480, 479, 477, 478, 482, 481, 443, 444, 481, 483, 440, 443, 485, 484, 483, 481, 486, 485, 481, 482, 483, 487, 439, 440, 487, 462, 438, 439, 488, 466, 462, 487, 484, 488, 487, 483, 490, 489, 488, 484, 489, 478, 466, 488, 491, 480, 478, 489, 492, 491, 489, 490, 494, 493, 485, 486, 493, 490, 484, 485, 495, 492, 490, 493, 496, 495, 493, 494, 498, 497, 359, 360, 497, 499, 356, 359, 501, 500, 499, 497, 502, 501, 497, 498, 499, 503, 355, 356, 503, 504, 344, 355, 506, 505, 504, 503, 500, 506, 503, 499, 508, 507, 506, 500, 507, 509, 505, 506, 511, 510, 509, 507, 512, 511, 507, 508, 514, 513, 501, 502, 513, 508, 500, 501, 515, 512, 508, 513, 516, 515, 513, 514, 504, 517, 343, 344, 517, 518, 340, 343, 520, 519, 518, 517, 505, 520, 517, 504, 518, 521, 339, 340, 521, 426, 338, 339, 522, 430, 426, 521, 519, 522, 521, 518, 524, 523, 522, 519, 523, 442, 430, 522, 525, 444, 442, 523, 526, 525, 523, 524, 509, 527, 520, 505, 527, 524, 519, 520, 528, 526, 524, 527, 510, 528, 527, 509, 530, 529, 528, 510, 529, 531, 526, 528, 533, 532, 531, 529, 534, 533, 529, 530, 531, 535, 525, 526, 535, 482, 444, 525, 536, 486, 482, 535, 532, 536, 535, 531, 538, 537, 536, 532, 537, 494, 486, 536, 539, 496, 494, 537, 540, 539, 537, 538, 542, 541, 533, 534, 541, 538, 532, 533, 543, 540, 538, 541, 544, 543, 541, 542, 546, 545, 515, 516, 545, 547, 512, 515, 549, 548, 547, 545, 550, 549, 545, 546, 547, 551, 511, 512, 551, 530, 510, 511, 552, 534, 530, 551, 548, 552, 551, 547, 554, 553, 552, 548, 553, 542, 534, 552, 555, 544, 542, 553, 556, 555, 553, 554, 558, 557, 549, 550, 557, 554, 548, 549, 559, 556, 554, 557, 560, 559, 557, 558, 562, 561, 559, 560, 561, 563, 556, 559, 565, 564, 563, 561, 566, 565, 561, 562, 563, 567, 555, 556, 567, 568, 544, 555, 570, 569, 568, 567, 564, 570, 567, 563, 572, 571, 570, 564, 571, 573, 569, 570, 575, 574, 573, 571, 576, 575, 571, 572, 578, 577, 565, 566, 577, 572, 564, 565, 579, 576, 572, 577, 580, 579, 577, 578, 568, 581, 543, 544, 581, 582, 540, 543, 584, 583, 582, 581, 569, 584, 581, 568, 582, 585, 539, 540, 585, 586, 496, 539, 588, 587, 586, 585, 583, 588, 585, 582, 590, 589, 588, 583, 589, 591, 587, 588, 593, 592, 591, 589, 594, 593, 589, 590, 573, 595, 584, 569, 595, 590, 583, 584, 596, 594, 590, 595, 574, 596, 595, 573, 598, 597, 596, 574, 597, 599, 594, 596, 601, 600, 599, 597, 602, 601, 597, 598, 599, 603, 593, 594, 603, 604, 592, 593, 606, 605, 604, 603, 600, 606, 603, 599, 608, 607, 606, 600, 607, 609, 605, 606, 611, 610, 609, 607, 612, 611, 607, 608, 614, 613, 601, 602, 613, 608, 600, 601, 615, 612, 608, 613, 616, 615, 613, 614, 618, 617, 579, 580, 617, 619, 576, 579, 621, 620, 619, 617, 622, 621, 617, 618, 619, 623, 575, 576, 623, 598, 574, 575, 624, 602, 598, 623, 620, 624, 623, 619, 626, 625, 624, 620, 625, 614, 602, 624, 627, 616, 614, 625, 628, 627, 625, 626, 630, 629, 621, 622, 629, 626, 620, 621, 631, 628, 626, 629, 632, 631, 629, 630, 586, 633, 495, 496, 633, 634, 492, 495, 636, 635, 634, 633, 587, 636, 633, 586, 634, 637, 491, 492, 637, 638, 480, 491, 640, 639, 638, 637, 635, 640, 637, 634, 642, 641, 640, 635, 641, 643, 639, 640, 645, 644, 643, 641, 646, 645, 641, 642, 591, 647, 636, 587, 647, 642, 635, 636, 648, 646, 642, 647, 592, 648, 647, 591, 638, 649, 479, 480, 649, 650, 476, 479, 652, 651, 650, 649, 639, 652, 649, 638, 650, 653, 475, 476, 653, 654, 474, 475, 656, 655, 654, 653, 651, 656, 653, 650, 658, 657, 656, 651, 657, 659, 655, 656, 661, 660, 659, 657, 662, 661, 657, 658, 643, 663, 652, 639, 663, 658, 651, 652, 664, 662, 658, 663, 644, 664, 663, 643, 666, 665, 664, 644, 665, 667, 662, 664, 669, 668, 667, 665, 670, 669, 665, 666, 667, 671, 661, 662, 671, 672, 660, 661, 674, 673, 672, 671, 668, 674, 671, 667, 676, 675, 674, 668, 675, 677, 673, 674, 679, 678, 677, 675, 680, 679, 675, 676, 682, 681, 669, 670, 681, 676, 668, 669, 683, 680, 676, 681, 684, 683, 681, 682, 604, 685, 648, 592, 685, 686, 646, 648, 688, 687, 686, 685, 605, 688, 685, 604, 686, 689, 645, 646, 689, 666, 644, 645, 690, 670, 666, 689, 687, 690, 689, 686, 692, 691, 690, 687, 691, 682, 670, 690, 693, 684, 682, 691, 694, 693, 691, 692, 609, 695, 688, 605, 695, 692, 687, 688, 696, 694, 692, 695, 610, 696, 695, 609, 698, 697, 696, 610, 697, 699, 694, 696, 701, 700, 699, 697, 702, 701, 697, 698, 699, 703, 693, 694, 703, 704, 684, 693, 706, 705, 704, 703, 700, 706, 703, 699, 708, 707, 706, 700, 707, 709, 705, 706, 711, 710, 709, 707, 712, 711, 707, 708, 714, 713, 701, 702, 713, 708, 700, 701, 715, 712, 708, 713, 716, 715, 713, 714, 704, 717, 683, 684, 717, 718, 680, 683, 720, 719, 718, 717, 705, 720, 717, 704, 718, 721, 679, 680, 721, 722, 678, 679, 724, 723, 722, 721, 719, 724, 721, 718, 726, 725, 724, 719, 725, 727, 723, 724, 729, 728, 727, 725, 730, 729, 725, 726, 709, 731, 720, 705, 731, 726, 719, 720, 732, 730, 726, 731, 710, 732, 731, 709, 734, 733, 732, 710, 733, 735, 730, 732, 737, 736, 735, 733, 738, 737, 733, 734, 735, 739, 729, 730, 739, 740, 728, 729, 742, 741, 740, 739, 736, 742, 739, 735, 744, 743, 742, 736, 743, 745, 741, 742, 747, 746, 745, 743, 748, 747, 743, 744, 750, 749, 737, 738, 749, 744, 736, 737, 751, 748, 744, 749, 752, 751, 749, 750, 754, 753, 715, 716, 753, 755, 712, 715, 757, 756, 755, 753, 758, 757, 753, 754, 755, 759, 711, 712, 759, 734, 710, 711, 760, 738, 734, 759, 756, 760, 759, 755, 762, 761, 760, 756, 761, 750, 738, 760, 763, 752, 750, 761, 764, 763, 761, 762, 766, 765, 757, 758, 765, 762, 756, 757, 767, 764, 762, 765, 768, 767, 765, 766, 770, 769, 631, 632, 769, 771, 628, 631, 773, 772, 771, 769, 774, 773, 769, 770, 771, 775, 627, 628, 775, 776, 616, 627, 778, 777, 776, 775, 772, 778, 775, 771, 780, 779, 778, 772, 779, 781, 777, 778, 783, 782, 781, 779, 784, 783, 779, 780, 786, 785, 773, 774, 785, 780, 772, 773, 787, 784, 780, 785, 788, 787, 785, 786, 776, 789, 615, 616, 789, 790, 612, 615, 792, 791, 790, 789, 777, 792, 789, 776, 790, 793, 611, 612, 793, 698, 610, 611, 794, 702, 698, 793, 791, 794, 793, 790, 796, 795, 794, 791, 795, 714, 702, 794, 797, 716, 714, 795, 798, 797, 795, 796, 781, 799, 792, 777, 799, 796, 791, 792, 800, 798, 796, 799, 782, 800, 799, 781, 802, 801, 800, 782, 801, 803, 798, 800, 805, 804, 803, 801, 806, 805, 801, 802, 803, 807, 797, 798, 807, 754, 716, 797, 808, 758, 754, 807, 804, 808, 807, 803, 810, 809, 808, 804, 809, 766, 758, 808, 811, 768, 766, 809, 812, 811, 809, 810, 814, 813, 805, 806, 813, 810, 804, 805, 815, 812, 810, 813, 816, 815, 813, 814, 818, 817, 787, 788, 817, 819, 784, 787, 821, 820, 819, 817, 822, 821, 817, 818, 819, 823, 783, 784, 823, 802, 782, 783, 824, 806, 802, 823, 820, 824, 823, 819, 826, 825, 824, 820, 825, 814, 806, 824, 827, 816, 814, 825, 828, 827, 825, 826, 830, 829, 821, 822, 829, 826, 820, 821, 831, 828, 826, 829, 832, 831, 829, 830, 834, 833, 201, 202, 833, 835, 197, 201, 837, 836, 835, 833, 838, 837, 833, 834, 835, 839, 196, 197, 839, 840, 184, 196, 842, 841, 840, 839, 836, 842, 839, 835, 844, 843, 842, 836, 843, 845, 841, 842, 847, 846, 845, 843, 848, 847, 843, 844, 850, 849, 837, 838, 849, 844, 836, 837, 851, 848, 844, 849, 852, 851, 849, 850, 840, 853, 183, 184, 853, 854, 179, 183, 856, 855, 854, 853, 841, 856, 853, 840, 854, 857, 178, 179, 857, 858, 134, 178, 860, 859, 858, 857, 855, 860, 857, 854, 862, 861, 860, 855, 861, 863, 859, 860, 865, 864, 863, 861, 866, 865, 861, 862, 845, 867, 856, 841, 867, 862, 855, 856, 868, 866, 862, 867, 846, 868, 867, 845, 870, 869, 868, 846, 869, 871, 866, 868, 873, 872, 871, 869, 874, 873, 869, 870, 871, 875, 865, 866, 875, 876, 864, 865, 878, 877, 876, 875, 872, 878, 875, 871, 880, 879, 878, 872, 879, 881, 877, 878, 883, 882, 881, 879, 884, 883, 879, 880, 886, 885, 873, 874, 885, 880, 872, 873, 887, 884, 880, 885, 888, 887, 885, 886, 890, 889, 851, 852, 889, 891, 848, 851, 893, 892, 891, 889, 894, 893, 889, 890, 891, 895, 847, 848, 895, 870, 846, 847, 896, 874, 870, 895, 892, 896, 895, 891, 898, 897, 896, 892, 897, 886, 874, 896, 899, 888, 886, 897, 900, 899, 897, 898, 902, 901, 893, 894, 901, 898, 892, 893, 903, 900, 898, 901, 904, 903, 901, 902, 858, 905, 133, 134, 905, 906, 129, 133, 908, 907, 906, 905, 859, 908, 905, 858, 906, 909, 128, 129, 909, 910, 116, 128, 912, 911, 910, 909, 907, 912, 909, 906, 914, 913, 912, 907, 913, 915, 911, 912, 917, 916, 915, 913, 918, 917, 913, 914, 863, 919, 908, 859, 919, 914, 907, 908, 920, 918, 914, 919, 864, 920, 919, 863, 910, 921, 115, 116, 921, 922, 111, 115, 924, 923, 922, 921, 911, 924, 921, 910, 922, 925, 110, 111, 925, 290, 109, 110, 926, 294, 290, 925, 923, 926, 925, 922, 928, 927, 926, 923, 927, 306, 294, 926, 929, 308, 306, 927, 930, 929, 927, 928, 915, 931, 924, 911, 931, 928, 923, 924, 932, 930, 928, 931, 916, 932, 931, 915, 934, 933, 932, 916, 933, 935, 930, 932, 937, 936, 935, 933, 938, 937, 933, 934, 935, 939, 929, 930, 939, 346, 308, 929, 940, 350, 346, 939, 936, 940, 939, 935, 942, 941, 940, 936, 941, 358, 350, 940, 943, 360, 358, 941, 944, 943, 941, 942, 946, 945, 937, 938, 945, 942, 936, 937, 947, 944, 942, 945, 948, 947, 945, 946, 876, 949, 920, 864, 949, 950, 918, 920, 952, 951, 950, 949, 877, 952, 949, 876, 950, 953, 917, 918, 953, 934, 916, 917, 954, 938, 934, 953, 951, 954, 953, 950, 956, 955, 954, 951, 955, 946, 938, 954, 957, 948, 946, 955, 958, 957, 955, 956, 881, 959, 952, 877, 959, 956, 951, 952, 960, 958, 956, 959, 882, 960, 959, 881, 962, 961, 960, 882, 961, 963, 958, 960, 965, 964, 963, 961, 966, 965, 961, 962, 963, 967, 957, 958, 967, 968, 948, 957, 970, 969, 968, 967, 964, 970, 967, 963, 972, 971, 970, 964, 971, 973, 969, 970, 975, 974, 973, 971, 976, 975, 971, 972, 978, 977, 965, 966, 977, 972, 964, 965, 979, 976, 972, 977, 980, 979, 977, 978, 968, 981, 947, 948, 981, 982, 944, 947, 984, 983, 982, 981, 969, 984, 981, 968, 982, 985, 943, 944, 985, 498, 360, 943, 986, 502, 498, 985, 983, 986, 985, 982, 988, 987, 986, 983, 987, 514, 502, 986, 989, 516, 514, 987, 990, 989, 987, 988, 973, 991, 984, 969, 991, 988, 983, 984, 992, 990, 988, 991, 974, 992, 991, 973, 994, 993, 992, 974, 993, 995, 990, 992, 997, 996, 995, 993, 998, 997, 993, 994, 995, 999, 989, 990, 999, 546, 516, 989, 1000, 550, 546, 999, 996, 1000, 999, 995, 1002, 1001, 1000, 996, 1001, 558, 550, 1000, 562, 560, 558, 1001, 566, 562, 1001, 1002, 1004, 1003, 997, 998, 1003, 1002, 996, 997, 578, 566, 1002, 1003, 580, 578, 1003, 1004, 1006, 1005, 979, 980, 1005, 1007, 976, 979, 1009, 1008, 1007, 1005, 1010, 1009, 1005, 1006, 1007, 1011, 975, 976, 1011, 994, 974, 975, 1012, 998, 994, 1011, 1008, 1012, 1011, 1007, 1014, 1013, 1012, 1008, 1013, 1004, 998, 1012, 618, 580, 1004, 1013, 622, 618, 1013, 1014, 1016, 1015, 1009, 1010, 1015, 1014, 1008, 1009, 630, 622, 1014, 1015, 632, 630, 1015, 1016, 1018, 1017, 903, 904, 1017, 1019, 900, 903, 1021, 1020, 1019, 1017, 1022, 1021, 1017, 1018, 1019, 1023, 899, 900, 1023, 1024, 888, 899, 1026, 1025, 1024, 1023, 1020, 1026, 1023, 1019, 1028, 1027, 1026, 1020, 1027, 1029, 1025, 1026, 1031, 1030, 1029, 1027, 1032, 1031, 1027, 1028, 1034, 1033, 1021, 1022, 1033, 1028, 1020, 1021, 1035, 1032, 1028, 1033, 1036, 1035, 1033, 1034, 1024, 1037, 887, 888, 1037, 1038, 884, 887, 1040, 1039, 1038, 1037, 1025, 1040, 1037, 1024, 1038, 1041, 883, 884, 1041, 962, 882, 883, 1042, 966, 962, 1041, 1039, 1042, 1041, 1038, 1044, 1043, 1042, 1039, 1043, 978, 966, 1042, 1045, 980, 978, 1043, 1046, 1045, 1043, 1044, 1029, 1047, 1040, 1025, 1047, 1044, 1039, 1040, 1048, 1046, 1044, 1047, 1030, 1048, 1047, 1029, 1050, 1049, 1048, 1030, 1049, 1051, 1046, 1048, 1053, 1052, 1051, 1049, 1054, 1053, 1049, 1050, 1051, 1055, 1045, 1046, 1055, 1006, 980, 1045, 1056, 1010, 1006, 1055, 1052, 1056, 1055, 1051, 1058, 1057, 1056, 1052, 1057, 1016, 1010, 1056, 770, 632, 1016, 1057, 774, 770, 1057, 1058, 1060, 1059, 1053, 1054, 1059, 1058, 1052, 1053, 786, 774, 1058, 1059, 788, 786, 1059, 1060, 1062, 1061, 1035, 1036, 1061, 1063, 1032, 1035, 1065, 1064, 1063, 1061, 1066, 1065, 1061, 1062, 1063, 1067, 1031, 1032, 1067, 1050, 1030, 1031, 1068, 1054, 1050, 1067, 1064, 1068, 1067, 1063, 1070, 1069, 1068, 1064, 1069, 1060, 1054, 1068, 818, 788, 1060, 1069, 822, 818, 1069, 1070, 1072, 1071, 1065, 1066, 1071, 1070, 1064, 1065, 830, 822, 1070, 1071, 832, 830, 1071, 1072, 1074, 1073, 287, 288, 1073, 1075, 284, 287, 1077, 1076, 1075, 1073, 1078, 1077, 1073, 1074, 1075, 1079, 283, 284, 1079, 1080, 272, 283, 1082, 1081, 1080, 1079, 1076, 1082, 1079, 1075, 1084, 1083, 1082, 1076, 1083, 1085, 1081, 1082, 1087, 1086, 1085, 1083, 1088, 1087, 1083, 1084, 1090, 1089, 1077, 1078, 1089, 1084, 1076, 1077, 1091, 1088, 1084, 1089, 1092, 1091, 1089, 1090, 1080, 1093, 271, 272, 1093, 1094, 268, 271, 1096, 1095, 1094, 1093, 1081, 1096, 1093, 1080, 1094, 1097, 267, 268, 1097, 1098, 224, 267, 1100, 1099, 1098, 1097, 1095, 1100, 1097, 1094, 1102, 1101, 1100, 1095, 1101, 1103, 1099, 1100, 1105, 1104, 1103, 1101, 1106, 1105, 1101, 1102, 1085, 1107, 1096, 1081, 1107, 1102, 1095, 1096, 1108, 1106, 1102, 1107, 1086, 1108, 1107, 1085, 1110, 1109, 1108, 1086, 1109, 1111, 1106, 1108, 1113, 1112, 1111, 1109, 1114, 1113, 1109, 1110, 1111, 1115, 1105, 1106, 1115, 1116, 1104, 1105, 1118, 1117, 1116, 1115, 1112, 1118, 1115, 1111, 1120, 1119, 1118, 1112, 1119, 1121, 1117, 1118, 1123, 1122, 1121, 1119, 1124, 1123, 1119, 1120, 1126, 1125, 1113, 1114, 1125, 1120, 1112, 1113, 1127, 1124, 1120, 1125, 1128, 1127, 1125, 1126, 1130, 1129, 1091, 1092, 1129, 1131, 1088, 1091, 1133, 1132, 1131, 1129, 1134, 1133, 1129, 1130, 1131, 1135, 1087, 1088, 1135, 1110, 1086, 1087, 1136, 1114, 1110, 1135, 1132, 1136, 1135, 1131, 1138, 1137, 1136, 1132, 1137, 1126, 1114, 1136, 1139, 1128, 1126, 1137, 1140, 1139, 1137, 1138, 1142, 1141, 1133, 1134, 1141, 1138, 1132, 1133, 1143, 1140, 1138, 1141, 1144, 1143, 1141, 1142, 1098, 1145, 223, 224, 1145, 1146, 220, 223, 1148, 1147, 1146, 1145, 1099, 1148, 1145, 1098, 1146, 1149, 219, 220, 1149, 1150, 208, 219, 1152, 1151, 1150, 1149, 1147, 1152, 1149, 1146, 1154, 1153, 1152, 1147, 1153, 1155, 1151, 1152, 1157, 1156, 1155, 1153, 1158, 1157, 1153, 1154, 1103, 1159, 1148, 1099, 1159, 1154, 1147, 1148, 1160, 1158, 1154, 1159, 1104, 1160, 1159, 1103, 1150, 1161, 207, 208, 1161, 1162, 204, 207, 1164, 1163, 1162, 1161, 1151, 1164, 1161, 1150, 1162, 1165, 203, 204, 1165, 834, 202, 203, 1166, 838, 834, 1165, 1163, 1166, 1165, 1162, 1168, 1167, 1166, 1163, 1167, 850, 838, 1166, 1169, 852, 850, 1167, 1170, 1169, 1167, 1168, 1155, 1171, 1164, 1151, 1171, 1168, 1163, 1164, 1172, 1170, 1168, 1171, 1156, 1172, 1171, 1155, 1174, 1173, 1172, 1156, 1173, 1175, 1170, 1172, 1177, 1176, 1175, 1173, 1178, 1177, 1173, 1174, 1175, 1179, 1169, 1170, 1179, 890, 852, 1169, 1180, 894, 890, 1179, 1176, 1180, 1179, 1175, 1182, 1181, 1180, 1176, 1181, 902, 894, 1180, 1183, 904, 902, 1181, 1184, 1183, 1181, 1182, 1186, 1185, 1177, 1178, 1185, 1182, 1176, 1177, 1187, 1184, 1182, 1185, 1188, 1187, 1185, 1186, 1116, 1189, 1160, 1104, 1189, 1190, 1158, 1160, 1192, 1191, 1190, 1189, 1117, 1192, 1189, 1116, 1190, 1193, 1157, 1158, 1193, 1174, 1156, 1157, 1194, 1178, 1174, 1193, 1191, 1194, 1193, 1190, 1196, 1195, 1194, 1191, 1195, 1186, 1178, 1194, 1197, 1188, 1186, 1195, 1198, 1197, 1195, 1196, 1121, 1199, 1192, 1117, 1199, 1196, 1191, 1192, 1200, 1198, 1196, 1199, 1122, 1200, 1199, 1121, 1202, 1201, 1200, 1122, 1201, 1203, 1198, 1200, 1205, 1204, 1203, 1201, 1206, 1205, 1201, 1202, 1203, 1207, 1197, 1198, 1207, 1208, 1188, 1197, 1210, 1209, 1208, 1207, 1204, 1210, 1207, 1203, 1212, 1211, 1210, 1204, 1211, 1213, 1209, 1210, 1215, 1214, 1213, 1211, 1216, 1215, 1211, 1212, 1218, 1217, 1205, 1206, 1217, 1212, 1204, 1205, 1219, 1216, 1212, 1217, 1220, 1219, 1217, 1218, 1208, 1221, 1187, 1188, 1221, 1222, 1184, 1187, 1224, 1223, 1222, 1221, 1209, 1224, 1221, 1208, 1222, 1225, 1183, 1184, 1225, 1018, 904, 1183, 1226, 1022, 1018, 1225, 1223, 1226, 1225, 1222, 1228, 1227, 1226, 1223, 1227, 1034, 1022, 1226, 1229, 1036, 1034, 1227, 1230, 1229, 1227, 1228, 1213, 1231, 1224, 1209, 1231, 1228, 1223, 1224, 1232, 1230, 1228, 1231, 1214, 1232, 1231, 1213, 1234, 1233, 1232, 1214, 1233, 1235, 1230, 1232, 1237, 1236, 1235, 1233, 1238, 1237, 1233, 1234, 1235, 1239, 1229, 1230, 1239, 1062, 1036, 1229, 1240, 1066, 1062, 1239, 1236, 1240, 1239, 1235, 1242, 1241, 1240, 1236, 1241, 1072, 1066, 1240, 831, 832, 1072, 1241, 828, 831, 1241, 1242, 1244, 1243, 1237, 1238, 1243, 1242, 1236, 1237, 827, 828, 1242, 1243, 816, 827, 1243, 1244, 1246, 1245, 1219, 1220, 1245, 1247, 1216, 1219, 1249, 1248, 1247, 1245, 1250, 1249, 1245, 1246, 1247, 1251, 1215, 1216, 1251, 1234, 1214, 1215, 1252, 1238, 1234, 1251, 1248, 1252, 1251, 1247, 1254, 1253, 1252, 1248, 1253, 1244, 1238, 1252, 815, 816, 1244, 1253, 812, 815, 1253, 1254, 1256, 1255, 1249, 1250, 1255, 1254, 1248, 1249, 811, 812, 1254, 1255, 768, 811, 1255, 1256, 1258, 1257, 1143, 1144, 1257, 1259, 1140, 1143, 1261, 1260, 1259, 1257, 1262, 1261, 1257, 1258, 1259, 1263, 1139, 1140, 1263, 1264, 1128, 1139, 1266, 1265, 1264, 1263, 1260, 1266, 1263, 1259, 1268, 1267, 1266, 1260, 1267, 1269, 1265, 1266, 1271, 1270, 1269, 1267, 1272, 1271, 1267, 1268, 1274, 1273, 1261, 1262, 1273, 1268, 1260, 1261, 1275, 1272, 1268, 1273, 1276, 1275, 1273, 1274, 1264, 1277, 1127, 1128, 1277, 1278, 1124, 1127, 1280, 1279, 1278, 1277, 1265, 1280, 1277, 1264, 1278, 1281, 1123, 1124, 1281, 1202, 1122, 1123, 1282, 1206, 1202, 1281, 1279, 1282, 1281, 1278, 1284, 1283, 1282, 1279, 1283, 1218, 1206, 1282, 1285, 1220, 1218, 1283, 1286, 1285, 1283, 1284, 1269, 1287, 1280, 1265, 1287, 1284, 1279, 1280, 1288, 1286, 1284, 1287, 1270, 1288, 1287, 1269, 1290, 1289, 1288, 1270, 1289, 1291, 1286, 1288, 1293, 1292, 1291, 1289, 1294, 1293, 1289, 1290, 1291, 1295, 1285, 1286, 1295, 1246, 1220, 1285, 1296, 1250, 1246, 1295, 1292, 1296, 1295, 1291, 1298, 1297, 1296, 1292, 1297, 1256, 1250, 1296, 767, 768, 1256, 1297, 764, 767, 1297, 1298, 1300, 1299, 1293, 1294, 1299, 1298, 1292, 1293, 763, 764, 1298, 1299, 752, 763, 1299, 1300, 1302, 1301, 1275, 1276, 1301, 1303, 1272, 1275, 1305, 1304, 1303, 1301, 1306, 1305, 1301, 1302, 1303, 1307, 1271, 1272, 1307, 1290, 1270, 1271, 1308, 1294, 1290, 1307, 1304, 1308, 1307, 1303, 1310, 1309, 1308, 1304, 1309, 1300, 1294, 1308, 751, 752, 1300, 1309, 748, 751, 1309, 1310, 1312, 1311, 1305, 1306, 1311, 1310, 1304, 1305, 747, 748, 1310, 1311, 746, 747, 1311, 1312, 286, 1313, 1074, 288, 1313, 1314, 1078, 1074, 1316, 1315, 1314, 1313, 278, 1316, 1313, 286, 1314, 1317, 1090, 1078, 1317, 1318, 1092, 1090, 1320, 1319, 1318, 1317, 1315, 1320, 1317, 1314, 1322, 1321, 1320, 1315, 1321, 1323, 1319, 1320, 1325, 1324, 1323, 1321, 1326, 1325, 1321, 1322, 274, 1327, 1316, 278, 1327, 1322, 1315, 1316, 1328, 1326, 1322, 1327, 244, 1328, 1327, 274, 1318, 1329, 1130, 1092, 1329, 1330, 1134, 1130, 1332, 1331, 1330, 1329, 1319, 1332, 1329, 1318, 1330, 1333, 1142, 1134, 1333, 1334, 1144, 1142, 1336, 1335, 1334, 1333, 1331, 1336, 1333, 1330, 1338, 1337, 1336, 1331, 1337, 1339, 1335, 1336, 1341, 1340, 1339, 1337, 1342, 1341, 1337, 1338, 1323, 1343, 1332, 1319, 1343, 1338, 1331, 1332, 1344, 1342, 1338, 1343, 1324, 1344, 1343, 1323, 1346, 1345, 1344, 1324, 1345, 1347, 1342, 1344, 1349, 1348, 1347, 1345, 1350, 1349, 1345, 1346, 1347, 1351, 1341, 1342, 1351, 1352, 1340, 1341, 1354, 1353, 1352, 1351, 1348, 1354, 1351, 1347, 1356, 1355, 1354, 1348, 1355, 1357, 1353, 1354, 1359, 1358, 1357, 1355, 1360, 1359, 1355, 1356, 1362, 1361, 1349, 1350, 1361, 1356, 1348, 1349, 1363, 1360, 1356, 1361, 1364, 1363, 1361, 1362, 242, 1365, 1328, 244, 1365, 1366, 1326, 1328, 1368, 1367, 1366, 1365, 230, 1368, 1365, 242, 1366, 1369, 1325, 1326, 1369, 1346, 1324, 1325, 1370, 1350, 1346, 1369, 1367, 1370, 1369, 1366, 1372, 1371, 1370, 1367, 1371, 1362, 1350, 1370, 1373, 1364, 1362, 1371, 1374, 1373, 1371, 1372, 226, 1375, 1368, 230, 1375, 1372, 1367, 1368, 1376, 1374, 1372, 1375, 80, 1376, 1375, 226, 1334, 1377, 1258, 1144, 1377, 1378, 1262, 1258, 1380, 1379, 1378, 1377, 1335, 1380, 1377, 1334, 1378, 1381, 1274, 1262, 1381, 1382, 1276, 1274, 1384, 1383, 1382, 1381, 1379, 1384, 1381, 1378, 1386, 1385, 1384, 1379, 1385, 1387, 1383, 1384, 1389, 1388, 1387, 1385, 1390, 1389, 1385, 1386, 1339, 1391, 1380, 1335, 1391, 1386, 1379, 1380, 1392, 1390, 1386, 1391, 1340, 1392, 1391, 1339, 1382, 1393, 1302, 1276, 1393, 1394, 1306, 1302, 1396, 1395, 1394, 1393, 1383, 1396, 1393, 1382, 1394, 1397, 1312, 1306, 1397, 745, 746, 1312, 1398, 741, 745, 1397, 1395, 1398, 1397, 1394, 1400, 1399, 1398, 1395, 1399, 740, 741, 1398, 1401, 728, 740, 1399, 1402, 1401, 1399, 1400, 1387, 1403, 1396, 1383, 1403, 1400, 1395, 1396, 1404, 1402, 1400, 1403, 1388, 1404, 1403, 1387, 1406, 1405, 1404, 1388, 1405, 1407, 1402, 1404, 1409, 1408, 1407, 1405, 1410, 1409, 1405, 1406, 1407, 1411, 1401, 1402, 1411, 727, 728, 1401, 1412, 723, 727, 1411, 1408, 1412, 1411, 1407, 1414, 1413, 1412, 1408, 1413, 722, 723, 1412, 1415, 678, 722, 1413, 1416, 1415, 1413, 1414, 1418, 1417, 1409, 1410, 1417, 1414, 1408, 1409, 1419, 1416, 1414, 1417, 1420, 1419, 1417, 1418, 1352, 1421, 1392, 1340, 1421, 1422, 1390, 1392, 1424, 1423, 1422, 1421, 1353, 1424, 1421, 1352, 1422, 1425, 1389, 1390, 1425, 1406, 1388, 1389, 1426, 1410, 1406, 1425, 1423, 1426, 1425, 1422, 1428, 1427, 1426, 1423, 1427, 1418, 1410, 1426, 1429, 1420, 1418, 1427, 1430, 1429, 1427, 1428, 1357, 1431, 1424, 1353, 1431, 1428, 1423, 1424, 1432, 1430, 1428, 1431, 1358, 1432, 1431, 1357, 1434, 1433, 1432, 1358, 1433, 1435, 1430, 1432, 1437, 1436, 1435, 1433, 1438, 1437, 1433, 1434, 1435, 1439, 1429, 1430, 1439, 1440, 1420, 1429, 1442, 1441, 1440, 1439, 1436, 1442, 1439, 1435, 1444, 1443, 1442, 1436, 1443, 1445, 1441, 1442, 1447, 1446, 1445, 1443, 1448, 1447, 1443, 1444, 1450, 1449, 1437, 1438, 1449, 1444, 1436, 1437, 1451, 1448, 1444, 1449, 1452, 1451, 1449, 1450, 1440, 1453, 1419, 1420, 1453, 1454, 1416, 1419, 1456, 1455, 1454, 1453, 1441, 1456, 1453, 1440, 1454, 1457, 1415, 1416, 1457, 677, 678, 1415, 1458, 673, 677, 1457, 1455, 1458, 1457, 1454, 1460, 1459, 1458, 1455, 1459, 672, 673, 1458, 1461, 660, 672, 1459, 1462, 1461, 1459, 1460, 1445, 1463, 1456, 1441, 1463, 1460, 1455, 1456, 1464, 1462, 1460, 1463, 1446, 1464, 1463, 1445, 1466, 1465, 1464, 1446, 1465, 1467, 1462, 1464, 1469, 1468, 1467, 1465, 1470, 1469, 1465, 1466, 1467, 1471, 1461, 1462, 1471, 659, 660, 1461, 1472, 655, 659, 1471, 1468, 1472, 1471, 1467, 1474, 1473, 1472, 1468, 1473, 654, 655, 1472, 473, 474, 654, 1473, 469, 473, 1473, 1474, 1476, 1475, 1469, 1470, 1475, 1474, 1468, 1469, 468, 469, 1474, 1475, 456, 468, 1475, 1476, 1478, 1477, 1451, 1452, 1477, 1479, 1448, 1451, 1481, 1480, 1479, 1477, 1482, 1481, 1477, 1478, 1479, 1483, 1447, 1448, 1483, 1466, 1446, 1447, 1484, 1470, 1466, 1483, 1480, 1484, 1483, 1479, 1486, 1485, 1484, 1480, 1485, 1476, 1470, 1484, 455, 456, 1476, 1485, 451, 455, 1485, 1486, 1488, 1487, 1481, 1482, 1487, 1486, 1480, 1481, 450, 451, 1486, 1487, 406, 450, 1487, 1488, 78, 1489, 1376, 80, 1489, 1490, 1374, 1376, 1492, 1491, 1490, 1489, 70, 1492, 1489, 78, 1490, 1493, 1373, 1374, 1493, 1494, 1364, 1373, 1496, 1495, 1494, 1493, 1491, 1496, 1493, 1490, 1498, 1497, 1496, 1491, 1497, 1499, 1495, 1496, 1501, 1500, 1499, 1497, 1502, 1501, 1497, 1498, 66, 1503, 1492, 70, 1503, 1498, 1491, 1492, 1504, 1502, 1498, 1503, 24, 1504, 1503, 66, 1494, 1505, 1363, 1364, 1505, 1506, 1360, 1363, 1508, 1507, 1506, 1505, 1495, 1508, 1505, 1494, 1506, 1509, 1359, 1360, 1509, 1434, 1358, 1359, 1510, 1438, 1434, 1509, 1507, 1510, 1509, 1506, 1512, 1511, 1510, 1507, 1511, 1450, 1438, 1510, 1513, 1452, 1450, 1511, 1514, 1513, 1511, 1512, 1499, 1515, 1508, 1495, 1515, 1512, 1507, 1508, 1516, 1514, 1512, 1515, 1500, 1516, 1515, 1499, 1518, 1517, 1516, 1500, 1517, 1519, 1514, 1516, 1521, 1520, 1519, 1517, 1522, 1521, 1517, 1518, 1519, 1523, 1513, 1514, 1523, 1478, 1452, 1513, 1524, 1482, 1478, 1523, 1520, 1524, 1523, 1519, 1526, 1525, 1524, 1520, 1525, 1488, 1482, 1524, 405, 406, 1488, 1525, 401, 405, 1525, 1526, 1528, 1527, 1521, 1522, 1527, 1526, 1520, 1521, 400, 401, 1526, 1527, 388, 400, 1527, 1528, 22, 1529, 1504, 24, 1529, 1530, 1502, 1504, 1532, 1531, 1530, 1529, 8, 1532, 1529, 22, 1530, 1533, 1501, 1502, 1533, 1518, 1500, 1501, 1534, 1522, 1518, 1533, 1531, 1534, 1533, 1530, 1536, 1535, 1534, 1531, 1535, 1528, 1522, 1534, 387, 388, 1528, 1535, 383, 387, 1535, 1536, 3, 1537, 1532, 8, 1537, 1536, 1531, 1532, 382, 383, 1536, 1537, 0, 382, 1537, 3}, + ["vertex_list_0"] = { Vec3(0.579348564, -0.579348981, -0.579348385), Vec3(0.596732914, -0.54291594, -0.596732557), Vec3(0.63434422, -0.549794436, -0.54979378), Vec3(0.596732855, -0.596733212, -0.542915344), Vec3(0.620292306, -0.487256616, -0.620291829), Vec3(0.667616367, -0.491493762, -0.565391183), Vec3(0.708671987, -0.502360821, -0.502360284), Vec3(0.667616248, -0.565391779, -0.491493225), Vec3(0.620292008, -0.620292485, -0.48725608), Vec3(0.644162357, -0.420784384, -0.644161999), Vec3(0.697528541, -0.423737824, -0.58382374), Vec3(0.666017115, -0.346116602, -0.666016579), Vec3(0.723508716, -0.348251581, -0.601838231), Vec3(0.774297893, -0.354056209, -0.531092048), Vec3(0.744235635, -0.431635082, -0.516483486), Vec3(0.784516275, -0.442427874, -0.442427486), Vec3(0.744235456, -0.516483963, -0.431634724), Vec3(0.818292201, -0.362190068, -0.454053998), Vec3(0.855216682, -0.371180326, -0.371180207), Vec3(0.81829226, -0.454054296, -0.362189889), Vec3(0.774297655, -0.531092465, -0.35405609), Vec3(0.697528243, -0.583824277, -0.423737466), Vec3(0.644162059, -0.644162595, -0.420783937), Vec3(0.723508298, -0.601838648, -0.348251283), Vec3(0.666016638, -0.666017175, -0.346116245), Vec3(0.684359193, -0.265069962, -0.684358478), Vec3(0.744725943, -0.266581923, -0.617472708), Vec3(0.698144972, -0.179295748, -0.698144138), Vec3(0.760417521, -0.180270016, -0.62946409), Vec3(0.816099763, -0.182947308, -0.554494321), Vec3(0.798436761, -0.270720929, -0.544206679), Vec3(0.706678092, -0.090409331, -0.706677675), Vec3(0.770023227, -0.0908876285, -0.636995018), Vec3(0.709564328, -3.10169987e-08, -0.709563732), Vec3(0.773250937, -1.55084994e-08, -0.639564753), Vec3(0.830428481, 0, -0.563331544), Vec3(0.826835215, -0.0922052264, -0.561065972), Vec3(0.87669909, -0.0940981954, -0.479050994), Vec3(0.864822745, -0.186774924, -0.47343722), Vec3(0.880668521, 0, -0.481007814), Vec3(0.923328996, 1.55084994e-08, -0.392938048), Vec3(0.918992639, -0.0962664708, -0.391308814), Vec3(0.9060269, -0.191126719, -0.38668409), Vec3(0.845220864, -0.276593149, -0.464806527), Vec3(0.884631991, -0.283191711, -0.379697651), Vec3(0.916101098, -0.289564282, -0.289564282), Vec3(0.884631872, -0.379697829, -0.283191681), Vec3(0.939039052, -0.195391074, -0.294890076), Vec3(0.963182211, -0.199005798, -0.199005842), Vec3(0.939038992, -0.294890106, -0.195391178), Vec3(0.90602684, -0.386684269, -0.191126764), Vec3(0.952974856, -0.0984107032, -0.298469096), Vec3(0.95764482, 4.65254999e-08, -0.299741089), Vec3(0.982842922, 6.20339975e-08, -0.202340767), Vec3(0.977899373, -0.100244105, -0.201462179), Vec3(0.993134081, -0.101498291, -0.101498388), Vec3(0.977899373, -0.201462135, -0.100244232), Vec3(0.998260677, 7.75425022e-08, -0.101948649), Vec3(1.00345218, 9.30509998e-08, -3.10169987e-08), Vec3(0.998260677, -0.101948552, -4.65254999e-08), Vec3(0.982842922, -0.202340722, -6.20339975e-08), Vec3(0.952974737, -0.298469186, -0.0984108299), Vec3(0.918992519, -0.391309083, -0.0962665975), Vec3(0.95764482, -0.299741149, -7.75425022e-08), Vec3(0.923328876, -0.392938346, -9.30509998e-08), Vec3(0.744725466, -0.617473304, -0.266581744), Vec3(0.684358537, -0.684359193, -0.265069693), Vec3(0.798436582, -0.544207096, -0.270720869), Vec3(0.816099346, -0.554494798, -0.182947293), Vec3(0.760417104, -0.629464567, -0.180269986), Vec3(0.698144317, -0.698144794, -0.179295674), Vec3(0.845220745, -0.464806795, -0.276593119), Vec3(0.864822567, -0.473437458, -0.186775029), Vec3(0.876698971, -0.479051292, -0.0940983072), Vec3(0.826835096, -0.56106621, -0.0922053233), Vec3(0.880668283, -0.481008321, -1.08559497e-07), Vec3(0.830428183, -0.563331902, -1.08559497e-07), Vec3(0.77002275, -0.636995494, -0.0908876732), Vec3(0.706677675, -0.706678212, -0.0904093757), Vec3(0.77325052, -0.639565229, -1.24067995e-07), Vec3(0.709563851, -0.709564269, -1.395765e-07), Vec3(0.706678212, 0.0904092491, -0.706677675), Vec3(0.770023227, 0.0908875614, -0.636995018), Vec3(0.698144853, 0.179295629, -0.698144376), Vec3(0.760417461, 0.180269867, -0.629464149), Vec3(0.816099703, 0.182947189, -0.554494262), Vec3(0.826835275, 0.0922051966, -0.561065912), Vec3(0.684359193, 0.265069664, -0.684358478), Vec3(0.744726002, 0.266581744, -0.617472708), Vec3(0.666017234, 0.346116304, -0.666016579), Vec3(0.723508894, 0.348251313, -0.601838171), Vec3(0.774298072, 0.35405606, -0.531091988), Vec3(0.79843694, 0.27072072, -0.54420656), Vec3(0.845221043, 0.27659297, -0.464806318), Vec3(0.864822805, 0.186774924, -0.473437071), Vec3(0.818292499, 0.362189829, -0.454053849), Vec3(0.85521692, 0.371180117, -0.371180028), Vec3(0.884632111, 0.283191532, -0.379697472), Vec3(0.906026959, 0.191126704, -0.386683911), Vec3(0.87669915, 0.0940981954, -0.479050905), Vec3(0.918992639, 0.0962665007, -0.391308814), Vec3(0.644162476, 0.420784116, -0.644162059), Vec3(0.69752878, 0.423737556, -0.58382374), Vec3(0.620292306, 0.487256318, -0.620291948), Vec3(0.667616606, 0.491493464, -0.565391123), Vec3(0.708672285, 0.502360404, -0.502360225), Vec3(0.744235814, 0.431634784, -0.516483486), Vec3(0.596733153, 0.542915642, -0.596732676), Vec3(0.634344518, 0.549794078, -0.54979378), Vec3(0.579348922, 0.579348564, -0.579348505), Vec3(0.596733212, 0.596732795, -0.542915463), Vec3(0.620292366, 0.620292008, -0.487256199), Vec3(0.667616546, 0.565391302, -0.491493255), Vec3(0.69752866, 0.583823919, -0.423737407), Vec3(0.744235814, 0.516483605, -0.431634665), Vec3(0.644162476, 0.644162178, -0.420784026), Vec3(0.666017234, 0.666016638, -0.346116155), Vec3(0.723508894, 0.601838231, -0.348251313), Vec3(0.774298131, 0.531091928, -0.354055911), Vec3(0.784516573, 0.442427397, -0.442427337), Vec3(0.818292499, 0.454053938, -0.36218968), Vec3(0.845220983, 0.464806467, -0.27659291), Vec3(0.884632111, 0.379697502, -0.283191442), Vec3(0.79843688, 0.544206679, -0.270720661), Vec3(0.816099823, 0.554494321, -0.182947174), Vec3(0.864822805, 0.47343722, -0.186774805), Vec3(0.9060269, 0.38668409, -0.191126645), Vec3(0.744726002, 0.617472827, -0.266581625), Vec3(0.684359252, 0.684358597, -0.265069604), Vec3(0.698144913, 0.698144376, -0.17929554), Vec3(0.76041764, 0.62946409, -0.180269808), Vec3(0.770023167, 0.636995077, -0.090887472), Vec3(0.826835215, 0.561066031, -0.092205137), Vec3(0.706678152, 0.706677735, -0.0904091597), Vec3(0.709564328, 0.709563732, 9.30509998e-08), Vec3(0.773250818, 0.639564812, 7.75425022e-08), Vec3(0.830428481, 0.563331664, 6.20339975e-08), Vec3(0.87669909, 0.479051024, -0.0940981209), Vec3(0.918992579, 0.391308874, -0.0962664261), Vec3(0.880668461, 0.481007993, 6.20339975e-08), Vec3(0.923328936, 0.392938137, 3.10169987e-08), Vec3(0.952974796, 0.0984107703, -0.298469096), Vec3(0.939038992, 0.195391163, -0.294890046), Vec3(0.963182271, 0.199005887, -0.199005768), Vec3(0.977899373, 0.100244246, -0.20146215), Vec3(0.916101277, 0.289564252, -0.289564043), Vec3(0.939038992, 0.294890076, -0.195391029), Vec3(0.952974796, 0.298469156, -0.0984106883), Vec3(0.977899373, 0.201462224, -0.10024415), Vec3(0.95764488, 0.299741209, 1.55084994e-08), Vec3(0.982842922, 0.202340826, 0), Vec3(0.993134201, 0.101498418, -0.101498358), Vec3(0.998260498, 0.101948723, 0), Vec3(0.993134201, 0.101498447, 0.101498343), Vec3(0.998260677, 1.24067995e-07, 0.101948597), Vec3(0.977899432, 0.201462209, 0.100244217), Vec3(0.963182211, 0.199005961, 0.199005842), Vec3(0.977899373, 0.100244306, 0.201462224), Vec3(0.982842922, 1.395765e-07, 0.202340767), Vec3(0.952974737, 0.298469216, 0.0984107703), Vec3(0.918992519, 0.391309023, 0.0962665603), Vec3(0.90602684, 0.386684179, 0.191126823), Vec3(0.939038992, 0.294890195, 0.195391178), Vec3(0.916101158, 0.289564312, 0.289564312), Vec3(0.939038932, 0.195391253, 0.294890136), Vec3(0.884631932, 0.37969774, 0.28319177), Vec3(0.855216682, 0.371180236, 0.371180445), Vec3(0.884631872, 0.28319177, 0.379697889), Vec3(0.906026781, 0.191126883, 0.386684299), Vec3(0.952974737, 0.0984109119, 0.298469216), Vec3(0.95764488, 1.55085004e-07, 0.299741209), Vec3(0.91899246, 0.0962666869, 0.391309142), Vec3(0.923328817, 1.86102e-07, 0.392938405), Vec3(0.87669909, 0.479050994, 0.094098255), Vec3(0.826835155, 0.561066031, 0.0922053084), Vec3(0.816099524, 0.5544945, 0.182947323), Vec3(0.864822686, 0.47343725, 0.186775029), Vec3(0.770023227, 0.636995018, 0.0908876732), Vec3(0.706678152, 0.706677675, 0.0904093906), Vec3(0.698144794, 0.698144317, 0.179295778), Vec3(0.760417521, 0.62946403, 0.180270046), Vec3(0.744725883, 0.617472887, 0.266581893), Vec3(0.798436761, 0.544206738, 0.270721018), Vec3(0.684359014, 0.684358597, 0.265069932), Vec3(0.666016936, 0.666016638, 0.346116632), Vec3(0.723508656, 0.601838291, 0.348251611), Vec3(0.774297833, 0.531092048, 0.354056329), Vec3(0.845220745, 0.464806527, 0.276593179), Vec3(0.81829232, 0.454054058, 0.362190098), Vec3(0.784516215, 0.442427576, 0.442427844), Vec3(0.818292141, 0.362189919, 0.454054356), Vec3(0.744235575, 0.516483605, 0.431635141), Vec3(0.708671927, 0.502360463, 0.502360821), Vec3(0.744235456, 0.431634873, 0.516483963), Vec3(0.774297595, 0.35405615, 0.531092525), Vec3(0.697528481, 0.58382386, 0.423737824), Vec3(0.644162297, 0.64416194, 0.420784533), Vec3(0.620292127, 0.620291829, 0.487256825), Vec3(0.667616308, 0.565391183, 0.491493762), Vec3(0.634344161, 0.54979378, 0.549794495), Vec3(0.667616129, 0.491493285, 0.565391779), Vec3(0.596732855, 0.596732616, 0.542916059), Vec3(0.579348505, 0.579348266, 0.579349041), Vec3(0.596732736, 0.542915344, 0.596733212), Vec3(0.620291948, 0.487256169, 0.620292425), Vec3(0.697528243, 0.423737615, 0.583824277), Vec3(0.723508358, 0.348251373, 0.601838708), Vec3(0.64416194, 0.420784086, 0.644162595), Vec3(0.666016579, 0.346116334, 0.666017175), Vec3(0.876698911, 0.0940983966, 0.479051352), Vec3(0.880668283, 2.01610504e-07, 0.481008321), Vec3(0.864822447, 0.186775044, 0.473437607), Vec3(0.816099405, 0.182947397, 0.554494858), Vec3(0.826835036, 0.0922053978, 0.561066329), Vec3(0.830428123, 2.17118995e-07, 0.563332021), Vec3(0.845220685, 0.276593149, 0.464806825), Vec3(0.798436522, 0.270720899, 0.544207156), Vec3(0.744725406, 0.266581863, 0.617473364), Vec3(0.760417044, 0.180270046, 0.629464626), Vec3(0.684358537, 0.265069813, 0.684359193), Vec3(0.698144197, 0.179295748, 0.698144913), Vec3(0.77002275, 0.090887785, 0.636995614), Vec3(0.773250341, 2.32627499e-07, 0.639565289), Vec3(0.706677675, 0.0904094651, 0.706678212), Vec3(0.709563732, 2.32627499e-07, 0.709564328), Vec3(0.77002275, -0.636995554, 0.0908874422), Vec3(0.706677675, -0.706678152, 0.0904090926), Vec3(0.826835036, -0.56106627, 0.0922050923), Vec3(0.816099524, -0.554494739, 0.182947144), Vec3(0.760417283, -0.629464507, 0.180269778), Vec3(0.698144376, -0.698144794, 0.179295495), Vec3(0.876698971, -0.479051322, 0.094098106), Vec3(0.918992519, -0.391309053, 0.0962664261), Vec3(0.90602684, -0.386684179, 0.191126645), Vec3(0.864822686, -0.473437369, 0.186774835), Vec3(0.845220804, -0.464806676, 0.276593059), Vec3(0.798436701, -0.544206917, 0.27072075), Vec3(0.884632051, -0.37969774, 0.283191621), Vec3(0.855216682, -0.371180236, 0.371180266), Vec3(0.81829232, -0.454054147, 0.362189889), Vec3(0.774297774, -0.531092227, 0.35405609), Vec3(0.744725645, -0.617473245, 0.266581625), Vec3(0.684358776, -0.684359133, 0.265069574), Vec3(0.723508537, -0.601838589, 0.348251343), Vec3(0.666016698, -0.666017115, 0.346116245), Vec3(0.952974796, -0.298469186, 0.0984106734), Vec3(0.977899373, -0.201462135, 0.10024412), Vec3(0.963182271, -0.199005723, 0.199005798), Vec3(0.939038992, -0.294890076, 0.195391148), Vec3(0.993134201, -0.101498231, 0.101498291), Vec3(0.977899432, -0.100244045, 0.201462165), Vec3(0.952974796, -0.098410584, 0.298469245), Vec3(0.939038932, -0.195390999, 0.294890106), Vec3(0.918992579, -0.0962663144, 0.391309053), Vec3(0.90602684, -0.1911266, 0.386684209), Vec3(0.916101098, -0.289564282, 0.289564312), Vec3(0.884632051, -0.283191562, 0.379697859), Vec3(0.845220804, -0.27659294, 0.464806736), Vec3(0.81829232, -0.362189829, 0.454054207), Vec3(0.864822745, -0.186774746, 0.473437518), Vec3(0.816099584, -0.182947055, 0.554494739), Vec3(0.798436642, -0.270720631, 0.544207036), Vec3(0.774297833, -0.354055971, 0.531092286), Vec3(0.876698971, -0.0940979943, 0.479051322), Vec3(0.826835036, -0.0922049806, 0.561066329), Vec3(0.77002275, -0.0908873305, 0.636995554), Vec3(0.760417163, -0.180269673, 0.629464626), Vec3(0.706677675, -0.0904090181, 0.706678152), Vec3(0.698144436, -0.179295361, 0.698144853), Vec3(0.744725585, -0.266581506, 0.617473304), Vec3(0.723508537, -0.348251224, 0.601838589), Vec3(0.684358776, -0.265069485, 0.684359193), Vec3(0.666016757, -0.346116185, 0.666017175), Vec3(0.697528303, -0.583824158, 0.423737615), Vec3(0.644162178, -0.644162416, 0.420784056), Vec3(0.744235575, -0.516483724, 0.431634963), Vec3(0.708671868, -0.502360582, 0.502360702), Vec3(0.667616189, -0.5653916, 0.491493523), Vec3(0.620292068, -0.620292246, 0.487256259), Vec3(0.784516335, -0.442427546, 0.442427576), Vec3(0.744235456, -0.431634814, 0.516483903), Vec3(0.697528243, -0.423737556, 0.583824217), Vec3(0.667616189, -0.491493493, 0.56539166), Vec3(0.644162118, -0.420784056, 0.644162476), Vec3(0.620292068, -0.487256318, 0.620292127), Vec3(0.634344041, -0.549794137, 0.549794197), Vec3(0.596732795, -0.596733034, 0.542915702), Vec3(0.596732736, -0.542915702, 0.596732974), Vec3(0.579348505, -0.579348624, 0.579348683), Vec3(0.549794436, 0.549794137, -0.634343982), Vec3(0.542915821, 0.596732914, -0.596732795), Vec3(0.56539166, 0.491493493, -0.667616129), Vec3(0.502360761, 0.502360582, -0.708671808), Vec3(0.491493732, 0.565391541, -0.667616129), Vec3(0.487256616, 0.620292008, -0.620292008), Vec3(0.583824337, 0.423737645, -0.697528183), Vec3(0.601838708, 0.348251402, -0.723508358), Vec3(0.531092465, 0.35405612, -0.774297595), Vec3(0.516483963, 0.431634963, -0.744235337), Vec3(0.442427844, 0.442427635, -0.784516156), Vec3(0.431635082, 0.516483843, -0.744235337), Vec3(0.454054385, 0.362190008, -0.818292022), Vec3(0.371180505, 0.371180475, -0.855216503), Vec3(0.362190098, 0.454054266, -0.818292081), Vec3(0.354056299, 0.531092405, -0.774297655), Vec3(0.423737854, 0.583824039, -0.697528243), Vec3(0.420784324, 0.644162238, -0.644162118), Vec3(0.348251522, 0.60183847, -0.723508477), Vec3(0.346116513, 0.666016817, -0.666016817), Vec3(0.617473364, 0.266581744, -0.744725406), Vec3(0.629464746, 0.180269927, -0.760416985), Vec3(0.554494917, 0.182947248, -0.816099286), Vec3(0.544207156, 0.270720869, -0.798436522), Vec3(0.636995614, 0.0908875614, -0.77002269), Vec3(0.639565349, -3.10169987e-08, -0.773250401), Vec3(0.56333214, -4.65254999e-08, -0.830428064), Vec3(0.561066508, 0.0922052115, -0.826834917), Vec3(0.47905162, 0.0940982103, -0.876698732), Vec3(0.473437697, 0.186774954, -0.864822447), Vec3(0.481008559, -6.20339975e-08, -0.880668163), Vec3(0.392938614, -6.20339975e-08, -0.923328698), Vec3(0.391309351, 0.0962665007, -0.9189924), Vec3(0.386684537, 0.191126794, -0.906026721), Vec3(0.464806944, 0.276593119, -0.845220566), Vec3(0.379697978, 0.28319177, -0.884631813), Vec3(0.28956458, 0.28956449, -0.916101038), Vec3(0.28319186, 0.379697889, -0.884631813), Vec3(0.294890344, 0.195391238, -0.939038873), Vec3(0.199006036, 0.199005991, -0.963182211), Vec3(0.195391312, 0.294890344, -0.939038932), Vec3(0.191126883, 0.386684388, -0.906026781), Vec3(0.298469514, 0.0984107703, -0.952974677), Vec3(0.299741477, -6.20339975e-08, -0.957644701), Vec3(0.202340946, -7.75425022e-08, -0.982842922), Vec3(0.201462418, 0.100244217, -0.977899313), Vec3(0.101498447, 0.101498388, -0.993134081), Vec3(0.100244276, 0.201462284, -0.977899373), Vec3(0.101948723, -7.75425022e-08, -0.998260498), Vec3(-3.10169987e-08, -7.75425022e-08, -1.00345218), Vec3(-1.55084994e-08, 0.101948664, -0.998260677), Vec3(-3.10169987e-08, 0.202340871, -0.982842922), Vec3(0.098410815, 0.298469394, -0.952974677), Vec3(0.0962665826, 0.391309261, -0.91899246), Vec3(-3.10169987e-08, 0.299741328, -0.957644761), Vec3(-3.10169987e-08, 0.392938465, -0.923328817), Vec3(0.266581893, 0.617473125, -0.744725645), Vec3(0.265069902, 0.684358835, -0.684358835), Vec3(0.270721018, 0.544206977, -0.798436582), Vec3(0.182947323, 0.554494739, -0.816099405), Vec3(0.180270001, 0.629464447, -0.760417283), Vec3(0.179295719, 0.698144615, -0.698144555), Vec3(0.276593238, 0.464806765, -0.845220625), Vec3(0.186775088, 0.473437577, -0.864822447), Vec3(0.094098255, 0.479051411, -0.876698852), Vec3(0.0922052413, 0.56106627, -0.826835096), Vec3(-3.10169987e-08, 0.481008351, -0.880668223), Vec3(-3.10169987e-08, 0.563331902, -0.830428243), Vec3(0.0908876136, 0.636995435, -0.770022869), Vec3(0.0904092789, 0.706677914, -0.706677914), Vec3(-3.10169987e-08, 0.639565229, -0.77325052), Vec3(-3.10169987e-08, 0.70956403, -0.709563971), Vec3(0.636995673, -0.0908876732, -0.77002269), Vec3(0.629464746, -0.180270061, -0.760416925), Vec3(0.554494917, -0.182947397, -0.816099226), Vec3(0.561066508, -0.0922053531, -0.826834917), Vec3(0.617473304, -0.266581982, -0.744725406), Vec3(0.601838648, -0.3482517, -0.723508239), Vec3(0.531092405, -0.354056418, -0.774297535), Vec3(0.544207156, -0.270721078, -0.798436463), Vec3(0.464806944, -0.276593328, -0.845220566), Vec3(0.473437726, -0.186775163, -0.864822447), Vec3(0.454054385, -0.362190276, -0.818291903), Vec3(0.371180475, -0.371180713, -0.855216384), Vec3(0.379697978, -0.283192009, -0.884631813), Vec3(0.386684448, -0.191126972, -0.906026661), Vec3(0.47905159, -0.0940983519, -0.876698792), Vec3(0.391309321, -0.096266672, -0.9189924), Vec3(0.583824158, -0.423737973, -0.697528124), Vec3(0.5653916, -0.491493762, -0.66761601), Vec3(0.502360642, -0.502361, -0.708671629), Vec3(0.516483903, -0.431635261, -0.744235277), Vec3(0.549794137, -0.549794555, -0.634343863), Vec3(0.542915463, -0.596733272, -0.596732557), Vec3(0.487256259, -0.620292604, -0.62029165), Vec3(0.491493523, -0.565391958, -0.667615891), Vec3(0.423737615, -0.583824337, -0.697528124), Vec3(0.431634963, -0.516484201, -0.744235277), Vec3(0.420784116, -0.644162714, -0.64416182), Vec3(0.346116334, -0.666017413, -0.6660164), Vec3(0.348251402, -0.601839006, -0.72350812), Vec3(0.35405618, -0.531092763, -0.774297416), Vec3(0.442427784, -0.442428052, -0.784516096), Vec3(0.362190068, -0.454054564, -0.818291903), Vec3(0.276593208, -0.464807153, -0.845220447), Vec3(0.28319183, -0.379698128, -0.884631693), Vec3(0.270720869, -0.544207335, -0.798436344), Vec3(0.182947293, -0.554495156, -0.816099226), Vec3(0.186775029, -0.473438025, -0.864822268), Vec3(0.191126853, -0.386684716, -0.906026602), Vec3(0.266581804, -0.617473602, -0.744725287), Vec3(0.265069693, -0.684359431, -0.684358358), Vec3(0.179295585, -0.698145151, -0.698144019), Vec3(0.180269927, -0.629464924, -0.760416925), Vec3(0.0908875465, -0.636995971, -0.770022452), Vec3(0.0922052115, -0.561066806, -0.826834679), Vec3(0.0904092044, -0.706678569, -0.706677377), Vec3(-3.10169987e-08, -0.709564626, -0.709563434), Vec3(-1.55084994e-08, -0.639565766, -0.773250043), Vec3(-3.10169987e-08, -0.563332438, -0.830427825), Vec3(0.0940982252, -0.479051828, -0.876698613), Vec3(0.0962665305, -0.39130953, -0.918992281), Vec3(-3.10169987e-08, -0.481008708, -0.880668044), Vec3(-3.10169987e-08, -0.392938763, -0.923328638), Vec3(0.298469454, -0.0984109119, -0.952974677), Vec3(0.294890344, -0.195391402, -0.939038813), Vec3(0.199006081, -0.19900623, -0.963182092), Vec3(0.201462343, -0.100244373, -0.977899373), Vec3(0.28956458, -0.289564699, -0.916100979), Vec3(0.195391282, -0.294890523, -0.939038813), Vec3(0.0984108299, -0.298469603, -0.952974617), Vec3(0.100244276, -0.201462492, -0.977899313), Vec3(-3.10169987e-08, -0.299741685, -0.957644761), Vec3(-3.10169987e-08, -0.202341124, -0.982842863), Vec3(0.101498432, -0.101498574, -0.993134081), Vec3(-3.10169987e-08, -0.10194885, -0.998260498), Vec3(-0.101498529, -0.101498559, -0.993134081), Vec3(-0.101948768, -6.20339975e-08, -0.998260677), Vec3(-0.100244336, -0.201462507, -0.977899373), Vec3(-0.19900614, -0.1990062, -0.963182092), Vec3(-0.201462492, -0.100244388, -0.977899313), Vec3(-0.202340975, -7.75425022e-08, -0.982842922), Vec3(-0.0984109119, -0.298469603, -0.952974617), Vec3(-0.0962666422, -0.3913095, -0.918992281), Vec3(-0.191126928, -0.386684775, -0.906026602), Vec3(-0.195391387, -0.294890523, -0.939038694), Vec3(-0.289564669, -0.289564699, -0.916100979), Vec3(-0.294890493, -0.195391446, -0.939038813), Vec3(-0.283191919, -0.379698187, -0.884631693), Vec3(-0.371180534, -0.371180683, -0.855216444), Vec3(-0.379697978, -0.283192009, -0.884631693), Vec3(-0.386684537, -0.191127017, -0.906026661), Vec3(-0.298469603, -0.0984109566, -0.952974617), Vec3(-0.299741566, -7.75425022e-08, -0.957644761), Vec3(-0.39130941, -0.0962666571, -0.9189924), Vec3(-0.392938703, -6.20339975e-08, -0.923328638), Vec3(-0.0940983221, -0.479051888, -0.876698673), Vec3(-0.0922052786, -0.561066806, -0.826834679), Vec3(-0.182947397, -0.554495275, -0.816099167), Vec3(-0.186775118, -0.473437995, -0.864822268), Vec3(-0.0908876136, -0.636995971, -0.770022452), Vec3(-0.0904092789, -0.706678569, -0.706677318), Vec3(-0.179295659, -0.698145211, -0.698143959), Vec3(-0.180270001, -0.629465044, -0.760416746), Vec3(-0.266581804, -0.617473602, -0.744725227), Vec3(-0.270721018, -0.544207394, -0.798436284), Vec3(-0.265069783, -0.684359431, -0.684358299), Vec3(-0.346116394, -0.666017354, -0.6660164), Vec3(-0.348251522, -0.601838827, -0.723508179), Vec3(-0.354056299, -0.531092763, -0.774297357), Vec3(-0.276593298, -0.464807212, -0.845220387), Vec3(-0.362190187, -0.454054564, -0.818291903), Vec3(-0.442427903, -0.442428023, -0.784515977), Vec3(-0.454054445, -0.362190276, -0.818291903), Vec3(-0.431635112, -0.516484201, -0.744235218), Vec3(-0.502360761, -0.502361, -0.708671629), Vec3(-0.516484022, -0.431635231, -0.744235218), Vec3(-0.531092465, -0.354056418, -0.774297476), Vec3(-0.423737764, -0.583824396, -0.697528005), Vec3(-0.420784116, -0.644162714, -0.64416182), Vec3(-0.487256378, -0.620292604, -0.62029165), Vec3(-0.491493583, -0.565391958, -0.667615831), Vec3(-0.549794257, -0.549794495, -0.634343743), Vec3(-0.56539166, -0.491493821, -0.667615891), Vec3(-0.542915702, -0.596733212, -0.596732557), Vec3(-0.579348683, -0.579348862, -0.579348266), Vec3(-0.596732974, -0.542915821, -0.596732616), Vec3(-0.620292246, -0.487256676, -0.62029171), Vec3(-0.583824277, -0.423737943, -0.697528064), Vec3(-0.601838648, -0.348251611, -0.723508179), Vec3(-0.644162416, -0.420784414, -0.64416182), Vec3(-0.666017115, -0.346116543, -0.666016519), Vec3(-0.47905165, -0.094098337, -0.876698732), Vec3(-0.481008559, -6.20339975e-08, -0.880668104), Vec3(-0.473437756, -0.186775133, -0.864822447), Vec3(-0.554495096, -0.182947442, -0.816099226), Vec3(-0.561066449, -0.0922053382, -0.826834917), Vec3(-0.5633322, -4.65254999e-08, -0.830428064), Vec3(-0.464807004, -0.276593328, -0.845220566), Vec3(-0.544207156, -0.270721048, -0.798436403), Vec3(-0.617473423, -0.266581982, -0.744725347), Vec3(-0.629464746, -0.180270046, -0.760416925), Vec3(-0.684359193, -0.265069902, -0.684358537), Vec3(-0.698144972, -0.179295719, -0.698144197), Vec3(-0.636995614, -0.0908876583, -0.77002269), Vec3(-0.639565408, -3.10169987e-08, -0.773250341), Vec3(-0.706678212, -0.0904093161, -0.706677616), Vec3(-0.709564388, -1.55084994e-08, -0.709563732), Vec3(-0.0908876732, 0.636995435, -0.770022869), Vec3(-0.0904093459, 0.706677854, -0.706677854), Vec3(-0.0922053233, 0.56106621, -0.826835096), Vec3(-0.182947382, 0.554494679, -0.816099405), Vec3(-0.180270046, 0.629464447, -0.760417283), Vec3(-0.179295778, 0.698144555, -0.698144495), Vec3(-0.0940982923, 0.479051322, -0.876698971), Vec3(-0.0962666422, 0.391309172, -0.91899246), Vec3(-0.191126928, 0.386684328, -0.906026781), Vec3(-0.186775103, 0.473437399, -0.864822626), Vec3(-0.276593268, 0.464806646, -0.845220685), Vec3(-0.270721018, 0.544206858, -0.798436642), Vec3(-0.283191949, 0.37969777, -0.884631813), Vec3(-0.371180594, 0.371180356, -0.855216563), Vec3(-0.362190217, 0.454054058, -0.818292081), Vec3(-0.354056448, 0.531092167, -0.774297774), Vec3(-0.266581893, 0.617473006, -0.744725645), Vec3(-0.265069932, 0.684358895, -0.684358776), Vec3(-0.348251551, 0.60183847, -0.723508418), Vec3(-0.346116602, 0.666016877, -0.666016817), Vec3(-0.0984108895, 0.298469335, -0.952974677), Vec3(-0.100244321, 0.201462284, -0.977899313), Vec3(-0.199006096, 0.199005947, -0.963182151), Vec3(-0.195391372, 0.294890255, -0.939038932), Vec3(-0.101498514, 0.101498373, -0.993134201), Vec3(-0.201462463, 0.100244202, -0.977899373), Vec3(-0.298469573, 0.0984107703, -0.952974677), Vec3(-0.294890434, 0.195391223, -0.939038873), Vec3(-0.391309351, 0.0962665156, -0.9189924), Vec3(-0.386684537, 0.191126794, -0.906026661), Vec3(-0.28956458, 0.289564401, -0.916101038), Vec3(-0.379697978, 0.283191681, -0.884631813), Vec3(-0.464807004, 0.276593089, -0.845220506), Vec3(-0.454054534, 0.362190008, -0.818292081), Vec3(-0.473437726, 0.186774924, -0.864822447), Vec3(-0.554495096, 0.182947278, -0.816099226), Vec3(-0.544207275, 0.270720869, -0.798436463), Vec3(-0.531092584, 0.35405609, -0.774297595), Vec3(-0.47905165, 0.0940981954, -0.876698792), Vec3(-0.561066628, 0.0922052413, -0.826834857), Vec3(-0.636995673, 0.0908875614, -0.77002269), Vec3(-0.629464805, 0.180269927, -0.760416925), Vec3(-0.706678271, 0.090409264, -0.706677675), Vec3(-0.698144972, 0.179295644, -0.698144197), Vec3(-0.617473483, 0.266581804, -0.744725406), Vec3(-0.601838708, 0.348251373, -0.723508358), Vec3(-0.684359252, 0.265069723, -0.684358478), Vec3(-0.666017234, 0.346116334, -0.666016579), Vec3(-0.423737913, 0.583824039, -0.697528243), Vec3(-0.420784324, 0.644162238, -0.644162118), Vec3(-0.431635171, 0.516483724, -0.744235456), Vec3(-0.50236088, 0.502360582, -0.708671808), Vec3(-0.491493732, 0.565391421, -0.667616129), Vec3(-0.487256646, 0.620292068, -0.620292068), Vec3(-0.442427963, 0.442427576, -0.784516156), Vec3(-0.516484082, 0.431634843, -0.744235337), Vec3(-0.583824277, 0.423737675, -0.697528183), Vec3(-0.565391839, 0.491493493, -0.667616069), Vec3(-0.644162655, 0.420784116, -0.64416188), Vec3(-0.620292485, 0.487256318, -0.62029171), Vec3(-0.549794495, 0.549794137, -0.634344041), Vec3(-0.542915881, 0.596732795, -0.596732676), Vec3(-0.596733212, 0.542915463, -0.596732676), Vec3(-0.579348862, 0.579348385, -0.579348564), Vec3(-0.634344459, 0.549794078, -0.549793839), Vec3(-0.596733212, 0.596732736, -0.542915404), Vec3(-0.667616665, 0.491493344, -0.565391123), Vec3(-0.708672285, 0.502360404, -0.502360225), Vec3(-0.667616606, 0.565391362, -0.491493195), Vec3(-0.620292485, 0.620291948, -0.48725614), Vec3(-0.69752878, 0.423737556, -0.58382374), Vec3(-0.723509014, 0.348251373, -0.601838052), Vec3(-0.774298131, 0.35405609, -0.531091869), Vec3(-0.744235814, 0.431634814, -0.516483426), Vec3(-0.784516573, 0.442427456, -0.442427337), Vec3(-0.744235754, 0.516483605, -0.431634635), Vec3(-0.818292379, 0.362189829, -0.454053849), Vec3(-0.855216861, 0.371180147, -0.371180087), Vec3(-0.818292439, 0.454053879, -0.362189651), Vec3(-0.774298072, 0.531092048, -0.354055911), Vec3(-0.69752866, 0.58382386, -0.423737377), Vec3(-0.644162655, 0.644161999, -0.420783937), Vec3(-0.723508894, 0.601838171, -0.348251253), Vec3(-0.666017234, 0.666016579, -0.346116126), Vec3(-0.744726062, 0.266581774, -0.617472589), Vec3(-0.7604177, 0.180269912, -0.629463971), Vec3(-0.816099882, 0.182947204, -0.554494262), Vec3(-0.79843694, 0.27072078, -0.54420656), Vec3(-0.770023227, 0.0908875465, -0.636994958), Vec3(-0.773250937, -1.55084994e-08, -0.639564574), Vec3(-0.830428481, 0, -0.563331485), Vec3(-0.826835394, 0.0922051966, -0.561065733), Vec3(-0.876699209, 0.0940982103, -0.479050845), Vec3(-0.864822805, 0.186774939, -0.473437041), Vec3(-0.880668521, 0, -0.481007785), Vec3(-0.923328996, 1.55084994e-08, -0.392938018), Vec3(-0.918992698, 0.0962664858, -0.391308725), Vec3(-0.906027019, 0.191126734, -0.386683911), Vec3(-0.845220983, 0.27659297, -0.464806288), Vec3(-0.884632111, 0.283191562, -0.379697442), Vec3(-0.916101277, 0.289564282, -0.289564103), Vec3(-0.884632111, 0.379697502, -0.283191383), Vec3(-0.939039111, 0.195391104, -0.294889927), Vec3(-0.963182271, 0.199005827, -0.199005693), Vec3(-0.939039111, 0.294890046, -0.195390984), Vec3(-0.906026959, 0.38668406, -0.191126585), Vec3(-0.952974856, 0.0984107554, -0.298468947), Vec3(-0.95764488, 3.10169987e-08, -0.299741), Vec3(-0.982842922, 4.65254999e-08, -0.202340692), Vec3(-0.977899432, 0.100244232, -0.201462075), Vec3(-0.993134081, 0.101498403, -0.101498291), Vec3(-0.977899373, 0.201462194, -0.10024409), Vec3(-0.998260677, 6.20339975e-08, -0.101948567), Vec3(-1.00345218, 7.75425022e-08, 4.65254999e-08), Vec3(-0.998260498, 0.101948693, 4.65254999e-08), Vec3(-0.982842922, 0.202340797, 7.75425022e-08), Vec3(-0.952974796, 0.298469156, -0.0984106287), Vec3(-0.918992639, 0.391308784, -0.096266374), Vec3(-0.95764482, 0.299741119, 9.30509998e-08), Vec3(-0.923328936, 0.392938137, 1.08559497e-07), Vec3(-0.744726002, 0.617472827, -0.266581535), Vec3(-0.684359193, 0.684358537, -0.265069604), Vec3(-0.798436999, 0.54420656, -0.270720631), Vec3(-0.816099763, 0.554494262, -0.182947025), Vec3(-0.760417759, 0.629463911, -0.180269718), Vec3(-0.698144853, 0.698144317, -0.17929551), Vec3(-0.845220923, 0.464806408, -0.276592791), Vec3(-0.864822865, 0.47343725, -0.18677476), Vec3(-0.87669915, 0.479050964, -0.0940980539), Vec3(-0.826835334, 0.561065912, -0.0922050551), Vec3(-0.880668461, 0.481007904, 1.24067995e-07), Vec3(-0.830428481, 0.563331664, 1.24067995e-07), Vec3(-0.770023286, 0.636995018, -0.0908874273), Vec3(-0.706678212, 0.706677675, -0.090409115), Vec3(-0.773250878, 0.639564753, 1.395765e-07), Vec3(-0.709564328, 0.709563732, 1.395765e-07), Vec3(-0.770023227, -0.0908876136, -0.636995018), Vec3(-0.76041764, -0.180269986, -0.62946403), Vec3(-0.816099763, -0.182947308, -0.554494321), Vec3(-0.826835334, -0.0922052264, -0.561065853), Vec3(-0.744726002, -0.266581833, -0.617472649), Vec3(-0.723508775, -0.348251522, -0.601838171), Vec3(-0.774298012, -0.35405612, -0.531091928), Vec3(-0.79843688, -0.270720929, -0.544206619), Vec3(-0.845220923, -0.276593119, -0.464806437), Vec3(-0.864822805, -0.186774969, -0.47343713), Vec3(-0.818292439, -0.362190008, -0.454053849), Vec3(-0.855216742, -0.371180296, -0.371180087), Vec3(-0.884632051, -0.283191621, -0.379697472), Vec3(-0.906026959, -0.191126734, -0.386683941), Vec3(-0.87669915, -0.0940981954, -0.479050905), Vec3(-0.918992639, -0.0962664708, -0.391308814), Vec3(-0.697528601, -0.423737824, -0.58382374), Vec3(-0.667616427, -0.491493702, -0.565391183), Vec3(-0.708672106, -0.502360761, -0.502360225), Vec3(-0.744235694, -0.431634992, -0.516483426), Vec3(-0.63434422, -0.549794436, -0.549793839), Vec3(-0.596732795, -0.596733212, -0.542915344), Vec3(-0.620292068, -0.620292425, -0.48725605), Vec3(-0.667616308, -0.565391719, -0.491493255), Vec3(-0.697528422, -0.583824277, -0.423737407), Vec3(-0.744235635, -0.516483903, -0.431634635), Vec3(-0.644162118, -0.644162536, -0.420783907), Vec3(-0.666016698, -0.666017175, -0.346116185), Vec3(-0.723508477, -0.601838589, -0.348251313), Vec3(-0.774297833, -0.531092405, -0.354055941), Vec3(-0.784516335, -0.442427784, -0.442427397), Vec3(-0.81829232, -0.454054266, -0.36218977), Vec3(-0.845220804, -0.464806765, -0.27659297), Vec3(-0.884631991, -0.37969777, -0.283191562), Vec3(-0.798436642, -0.544206977, -0.27072072), Vec3(-0.816099405, -0.554494679, -0.182947218), Vec3(-0.864822626, -0.473437458, -0.18677488), Vec3(-0.90602684, -0.386684269, -0.191126719), Vec3(-0.744725585, -0.617473245, -0.266581684), Vec3(-0.684358597, -0.684359193, -0.265069634), Vec3(-0.698144317, -0.698145032, -0.179295644), Vec3(-0.760417163, -0.629464567, -0.180269927), Vec3(-0.77002275, -0.636995494, -0.0908876285), Vec3(-0.826835036, -0.561066329, -0.0922052413), Vec3(-0.706677675, -0.706678212, -0.090409331), Vec3(-0.709563851, -0.709564209, -1.08559497e-07), Vec3(-0.773250461, -0.639565289, -7.75425022e-08), Vec3(-0.830428123, -0.563331962, -6.20339975e-08), Vec3(-0.876698911, -0.479051381, -0.0940982252), Vec3(-0.918992519, -0.391309053, -0.0962665007), Vec3(-0.880668283, -0.481008321, -3.10169987e-08), Vec3(-0.923328876, -0.392938346, -1.55084994e-08), Vec3(-0.952974796, -0.0984107032, -0.298469037), Vec3(-0.939038932, -0.195391148, -0.294890046), Vec3(-0.963182271, -0.199005872, -0.199005798), Vec3(-0.977899373, -0.100244164, -0.20146212), Vec3(-0.916101158, -0.289564282, -0.289564222), Vec3(-0.939038992, -0.294890165, -0.195391074), Vec3(-0.952974796, -0.298469216, -0.0984107256), Vec3(-0.977899373, -0.201462135, -0.10024415), Vec3(-0.95764488, -0.299741179, 0), Vec3(-0.982842922, -0.202340752, 0), Vec3(-0.993134081, -0.101498291, -0.101498306), Vec3(-0.998260677, -0.101948567, 1.55084994e-08), Vec3(-0.993134201, -0.101498291, 0.101498403), Vec3(-0.998260677, 9.30509998e-08, 0.101948664), Vec3(-0.977899373, -0.201462135, 0.100244217), Vec3(-0.963182211, -0.199005783, 0.199005857), Vec3(-0.977899373, -0.10024409, 0.201462224), Vec3(-0.982842982, 1.08559497e-07, 0.202340797), Vec3(-0.952974737, -0.298469186, 0.0984107554), Vec3(-0.918992519, -0.391309083, 0.0962664858), Vec3(-0.906026781, -0.386684299, 0.191126749), Vec3(-0.939038992, -0.294890136, 0.195391178), Vec3(-0.916101158, -0.289564282, 0.289564312), Vec3(-0.939038932, -0.195391044, 0.294890165), Vec3(-0.884631872, -0.37969777, 0.283191711), Vec3(-0.855216682, -0.371180236, 0.371180415), Vec3(-0.884631872, -0.283191592, 0.379697859), Vec3(-0.906026781, -0.19112666, 0.386684328), Vec3(-0.952974737, -0.0984106287, 0.298469216), Vec3(-0.95764488, 1.24067995e-07, 0.299741238), Vec3(-0.918992519, -0.0962663591, 0.391309083), Vec3(-0.923328817, 1.395765e-07, 0.392938435), Vec3(-0.876698971, -0.479051322, 0.0940981656), Vec3(-0.826835036, -0.56106627, 0.0922051519), Vec3(-0.816099524, -0.554494739, 0.182947204), Vec3(-0.864822686, -0.473437428, 0.186774909), Vec3(-0.77002281, -0.636995494, 0.090887472), Vec3(-0.706677675, -0.706678212, 0.0904091299), Vec3(-0.698144436, -0.698144853, 0.179295495), Vec3(-0.760417283, -0.629464507, 0.180269793), Vec3(-0.744725645, -0.617473185, 0.266581744), Vec3(-0.798436642, -0.544206977, 0.27072078), Vec3(-0.684358776, -0.684359133, 0.265069634), Vec3(-0.666016638, -0.666017115, 0.346116304), Vec3(-0.723508418, -0.601838589, 0.348251373), Vec3(-0.774297714, -0.531092346, 0.35405609), Vec3(-0.845220685, -0.464806706, 0.276593029), Vec3(-0.81829226, -0.454054207, 0.362190008), Vec3(-0.784516215, -0.442427605, 0.442427725), Vec3(-0.81829226, -0.362189889, 0.454054296), Vec3(-0.744235575, -0.516483724, 0.431634963), Vec3(-0.708671808, -0.502360642, 0.502360761), Vec3(-0.744235456, -0.431634873, 0.516483903), Vec3(-0.774297774, -0.35405606, 0.531092405), Vec3(-0.697528303, -0.583824098, 0.423737675), Vec3(-0.644162118, -0.644162416, 0.420784175), Vec3(-0.620291948, -0.620292127, 0.487256467), Vec3(-0.667616189, -0.5653916, 0.491493553), Vec3(-0.634344101, -0.549794197, 0.549794137), Vec3(-0.667616189, -0.491493493, 0.5653916), Vec3(-0.596732616, -0.596733034, 0.542915761), Vec3(-0.579348385, -0.579348624, 0.579348624), Vec3(-0.596732676, -0.542915702, 0.596733093), Vec3(-0.620292008, -0.487256348, 0.620292306), Vec3(-0.697528243, -0.423737615, 0.583824217), Vec3(-0.723508418, -0.348251343, 0.601838648), Vec3(-0.644162118, -0.420784056, 0.644162476), Vec3(-0.666016698, -0.346116155, 0.666017175), Vec3(-0.876698911, -0.094098039, 0.479051352), Vec3(-0.880668223, 1.55085004e-07, 0.481008351), Vec3(-0.864822567, -0.186774775, 0.473437607), Vec3(-0.816099465, -0.182947099, 0.554494858), Vec3(-0.826835036, -0.0922050402, 0.561066389), Vec3(-0.830428123, 1.70593495e-07, 0.563332021), Vec3(-0.845220745, -0.276593029, 0.464806795), Vec3(-0.798436642, -0.27072069, 0.544207036), Vec3(-0.744725585, -0.266581565, 0.617473304), Vec3(-0.760417163, -0.180269718, 0.629464626), Vec3(-0.684358597, -0.265069515, 0.684359133), Vec3(-0.698144376, -0.179295376, 0.698144853), Vec3(-0.77002275, -0.0908873752, 0.636995614), Vec3(-0.773250341, 1.70593495e-07, 0.639565289), Vec3(-0.706677675, -0.0904090479, 0.706678271), Vec3(-0.709563732, 1.86102e-07, 0.709564328), Vec3(-0.770023167, 0.636995077, 0.0908877328), Vec3(-0.706678092, 0.706677675, 0.0904094502), Vec3(-0.826835155, 0.561066031, 0.0922053382), Vec3(-0.816099644, 0.5544945, 0.182947397), Vec3(-0.760417402, 0.629464149, 0.180270121), Vec3(-0.698144794, 0.698144376, 0.179295853), Vec3(-0.87669909, 0.479050964, 0.0940983221), Vec3(-0.918992579, 0.391308874, 0.0962665975), Vec3(-0.90602684, 0.38668409, 0.191126853), Vec3(-0.864822686, 0.47343722, 0.186775044), Vec3(-0.845220864, 0.464806467, 0.276593238), Vec3(-0.798436761, 0.544206679, 0.270721018), Vec3(-0.884631932, 0.379697651, 0.283191741), Vec3(-0.855216682, 0.371180207, 0.371180356), Vec3(-0.818292379, 0.454053909, 0.362190098), Vec3(-0.774297893, 0.531091988, 0.354056239), Vec3(-0.744725823, 0.617472827, 0.266581953), Vec3(-0.684359014, 0.684358597, 0.265069991), Vec3(-0.723508656, 0.601838231, 0.3482517), Vec3(-0.666017056, 0.666016579, 0.346116662), Vec3(-0.952974737, 0.298469186, 0.0984108299), Vec3(-0.977899432, 0.201462224, 0.100244276), Vec3(-0.963182211, 0.199005857, 0.199005917), Vec3(-0.939038932, 0.294890046, 0.195391238), Vec3(-0.993134081, 0.101498418, 0.101498403), Vec3(-0.977899313, 0.100244276, 0.201462194), Vec3(-0.952974737, 0.0984108597, 0.298469245), Vec3(-0.939038992, 0.195391223, 0.294890195), Vec3(-0.918992519, 0.0962666422, 0.391309142), Vec3(-0.906026781, 0.191126853, 0.386684299), Vec3(-0.916101098, 0.289564282, 0.289564341), Vec3(-0.884631872, 0.283191651, 0.379697859), Vec3(-0.845220685, 0.276593149, 0.464806825), Vec3(-0.81829226, 0.362189859, 0.454054326), Vec3(-0.864822567, 0.186775029, 0.473437518), Vec3(-0.816099346, 0.182947308, 0.554494739), Vec3(-0.798436522, 0.27072084, 0.544207096), Vec3(-0.774297714, 0.354056001, 0.531092465), Vec3(-0.876698911, 0.094098337, 0.479051322), Vec3(-0.826834977, 0.0922053531, 0.561066389), Vec3(-0.77002275, 0.090887703, 0.636995554), Vec3(-0.760417104, 0.180270001, 0.629464626), Vec3(-0.706677675, 0.0904094055, 0.706678152), Vec3(-0.698144257, 0.179295689, 0.698144853), Vec3(-0.744725525, 0.266581714, 0.617473304), Vec3(-0.723508358, 0.348251343, 0.601838708), Vec3(-0.684358597, 0.265069634, 0.684359252), Vec3(-0.666016579, 0.346116185, 0.666017234), Vec3(-0.697528541, 0.58382374, 0.423737973), Vec3(-0.644162297, 0.64416188, 0.420784503), Vec3(-0.744235635, 0.516483545, 0.431635082), Vec3(-0.708672047, 0.502360344, 0.50236088), Vec3(-0.667616308, 0.565391183, 0.491493851), Vec3(-0.620292127, 0.62029165, 0.487256825), Vec3(-0.784516335, 0.442427427, 0.442427814), Vec3(-0.744235456, 0.431634724, 0.516484022), Vec3(-0.697528243, 0.423737466, 0.583824277), Vec3(-0.667616189, 0.491493165, 0.565391958), Vec3(-0.644161999, 0.420783937, 0.644162595), Vec3(-0.620291948, 0.48725608, 0.620292485), Vec3(-0.63434422, 0.54979372, 0.549794555), Vec3(-0.596732914, 0.596732557, 0.542916119), Vec3(-0.596732914, 0.542915344, 0.596733272), Vec3(-0.579348564, 0.579348207, 0.579348922), Vec3(0.549794137, 0.634343863, 0.549794555), Vec3(0.542915463, 0.596732557, 0.596733272), Vec3(0.565391481, 0.667615891, 0.49149394), Vec3(0.502360642, 0.708671629, 0.502361059), Vec3(0.491493434, 0.667615891, 0.565392017), Vec3(0.487256318, 0.62029165, 0.620292604), Vec3(0.583824158, 0.697528124, 0.423738003), Vec3(0.601838648, 0.723508239, 0.34825179), Vec3(0.531092405, 0.774297535, 0.354056418), Vec3(0.516483903, 0.744235277, 0.43163532), Vec3(0.442427725, 0.784516096, 0.442428052), Vec3(0.431634933, 0.744235218, 0.516484261), Vec3(0.454054356, 0.818291903, 0.362190306), Vec3(0.371180445, 0.855216384, 0.371180713), Vec3(0.362190068, 0.818291903, 0.454054624), Vec3(0.35405609, 0.774297416, 0.531092823), Vec3(0.423737526, 0.697528064, 0.583824575), Vec3(0.420784086, 0.644161761, 0.644162774), Vec3(0.348251373, 0.72350812, 0.601839006), Vec3(0.346116155, 0.6660164, 0.666017413), Vec3(0.617473304, 0.744725406, 0.266582012), Vec3(0.629464626, 0.760416985, 0.180270106), Vec3(0.554494798, 0.816099405, 0.182947487), Vec3(0.544207156, 0.798436463, 0.270721167), Vec3(0.636995614, 0.77002275, 0.0908877179), Vec3(0.639565349, 0.773250401, 1.08559497e-07), Vec3(0.56333214, 0.830428064, 1.24067995e-07), Vec3(0.561066329, 0.826834917, 0.0922053978), Vec3(0.47905159, 0.876698792, 0.0940984264), Vec3(0.473437756, 0.864822447, 0.186775222), Vec3(0.4810085, 0.880668163, 1.395765e-07), Vec3(0.392938614, 0.923328698, 1.55085004e-07), Vec3(0.391309291, 0.9189924, 0.0962667614), Vec3(0.386684448, 0.906026721, 0.191127092), Vec3(0.464806885, 0.845220506, 0.276593387), Vec3(0.379697919, 0.884631693, 0.283192039), Vec3(0.28956452, 0.916100979, 0.289564759), Vec3(0.2831918, 0.884631693, 0.379698217), Vec3(0.294890314, 0.939038873, 0.195391491), Vec3(0.199006006, 0.963182092, 0.199006304), Vec3(0.195391282, 0.939038813, 0.294890642), Vec3(0.191126853, 0.906026602, 0.386684746), Vec3(0.298469424, 0.952974677, 0.0984110162), Vec3(0.299741387, 0.957644761, 1.55085004e-07), Vec3(0.202340886, 0.982842922, 1.70593495e-07), Vec3(0.201462358, 0.977899313, 0.100244492), Vec3(0.101498447, 0.993134081, 0.101498663), Vec3(0.100244276, 0.977899313, 0.201462612), Vec3(0.101948708, 0.998260498, 1.70593495e-07), Vec3(-1.55084994e-08, 1.00345218, 1.70593495e-07), Vec3(-3.10169987e-08, 0.998260677, 0.101948909), Vec3(-3.10169987e-08, 0.982842863, 0.202341184), Vec3(0.0984108001, 0.952974617, 0.298469812), Vec3(0.0962665305, 0.918992221, 0.391309649), Vec3(-3.10169987e-08, 0.957644641, 0.299741715), Vec3(-3.10169987e-08, 0.923328578, 0.392938942), Vec3(0.266581774, 0.744725287, 0.617473543), Vec3(0.265069634, 0.684358358, 0.684359431), Vec3(0.270720899, 0.798436344, 0.544207394), Vec3(0.182947263, 0.816099226, 0.554495215), Vec3(0.180269867, 0.760416925, 0.629464984), Vec3(0.17929554, 0.698143959, 0.698145211), Vec3(0.276593149, 0.845220387, 0.464807242), Vec3(0.186774969, 0.864822328, 0.473437965), Vec3(0.0940982103, 0.876698673, 0.479051888), Vec3(0.0922052264, 0.826834679, 0.561066866), Vec3(-3.10169987e-08, 0.880667984, 0.481008857), Vec3(-3.10169987e-08, 0.830427825, 0.563332498), Vec3(0.0908875465, 0.770022511, 0.636996031), Vec3(0.0904091895, 0.706677258, 0.706678569), Vec3(-3.10169987e-08, 0.773250103, 0.639565706), Vec3(-3.10169987e-08, 0.709563375, 0.709564686), Vec3(0.636995554, 0.77002275, -0.0908874869), Vec3(0.629464626, 0.760417104, -0.180269793), Vec3(0.554494917, 0.816099405, -0.182947189), Vec3(0.561066508, 0.826834917, -0.0922051072), Vec3(0.617473304, 0.744725525, -0.266581684), Vec3(0.601838648, 0.723508298, -0.348251283), Vec3(0.531092405, 0.774297714, -0.354056001), Vec3(0.544207156, 0.798436522, -0.27072072), Vec3(0.464806885, 0.845220685, -0.276593029), Vec3(0.473437697, 0.864822447, -0.18677485), Vec3(0.454054385, 0.818292201, -0.362189859), Vec3(0.371180534, 0.855216563, -0.371180326), Vec3(0.379697949, 0.884631813, -0.283191651), Vec3(0.386684448, 0.906026721, -0.191126689), Vec3(0.47905153, 0.876698792, -0.094098106), Vec3(0.391309321, 0.9189924, -0.0962664261), Vec3(0.583824277, 0.697528243, -0.423737496), Vec3(0.565391719, 0.667616129, -0.491493344), Vec3(0.502360821, 0.708671987, -0.502360463), Vec3(0.516484022, 0.744235456, -0.431634754), Vec3(0.549794316, 0.634344161, -0.549793899), Vec3(0.491493672, 0.667616248, -0.565391362), Vec3(0.423737824, 0.697528303, -0.583823979), Vec3(0.431635112, 0.744235456, -0.516483665), Vec3(0.348251551, 0.723508537, -0.60183847), Vec3(0.354056329, 0.774297655, -0.531092227), Vec3(0.442427874, 0.784516156, -0.442427576), Vec3(0.362190068, 0.818292201, -0.454054058), Vec3(0.276593238, 0.845220685, -0.464806616), Vec3(0.28319186, 0.884631872, -0.37969774), Vec3(0.270720959, 0.798436642, -0.544206917), Vec3(0.182947278, 0.816099524, -0.55449456), Vec3(0.186775029, 0.864822745, -0.473437399), Vec3(0.191126883, 0.906026781, -0.386684269), Vec3(0.266581893, 0.744725704, -0.617473006), Vec3(0.180269986, 0.760417342, -0.629464388), Vec3(0.0908876136, 0.770022929, -0.636995375), Vec3(0.0922052562, 0.826835155, -0.56106621), Vec3(-3.10169987e-08, 0.77325058, -0.639565051), Vec3(-3.10169987e-08, 0.830428302, -0.563331723), Vec3(0.094098255, 0.876698971, -0.479051292), Vec3(0.0962665454, 0.918992519, -0.391309053), Vec3(-3.10169987e-08, 0.880668342, -0.481008142), Vec3(-3.10169987e-08, 0.923328876, -0.392938346), Vec3(0.298469454, 0.952974737, -0.0984106734), Vec3(0.294890255, 0.939038873, -0.195391074), Vec3(0.199006021, 0.963182211, -0.199005842), Vec3(0.201462358, 0.977899373, -0.100244105), Vec3(0.28956458, 0.916101098, -0.289564341), Vec3(0.195391282, 0.939038992, -0.294890165), Vec3(0.0984108299, 0.952974737, -0.298469216), Vec3(0.100244246, 0.977899373, -0.201462194), Vec3(-3.10169987e-08, 0.95764488, -0.299741209), Vec3(-3.10169987e-08, 0.982842863, -0.202340782), Vec3(0.101498432, 0.993134201, -0.101498276), Vec3(-3.10169987e-08, 0.998260677, -0.101948552), Vec3(-0.101498492, 0.993134201, -0.101498291), Vec3(-0.101948783, 0.998260498, 1.70593495e-07), Vec3(-0.100244336, 0.977899373, -0.201462209), Vec3(-0.199006096, 0.963182151, -0.199005842), Vec3(-0.201462403, 0.977899373, -0.10024409), Vec3(-0.202340961, 0.982842922, 1.70593495e-07), Vec3(-0.0984108895, 0.952974737, -0.298469216), Vec3(-0.0962666273, 0.918992519, -0.391309053), Vec3(-0.191126958, 0.906026781, -0.386684239), Vec3(-0.195391357, 0.939038873, -0.294890136), Vec3(-0.28956461, 0.916101098, -0.289564341), Vec3(-0.294890463, 0.939038873, -0.195391133), Vec3(-0.283191919, 0.884631872, -0.37969777), Vec3(-0.371180505, 0.855216622, -0.371180207), Vec3(-0.379698038, 0.884631813, -0.283191681), Vec3(-0.386684537, 0.906026721, -0.191126704), Vec3(-0.298469603, 0.952974677, -0.0984106734), Vec3(-0.299741536, 0.957644761, 1.70593495e-07), Vec3(-0.39130941, 0.918992341, -0.0962664112), Vec3(-0.392938703, 0.923328698, 1.70593495e-07), Vec3(-0.0940983221, 0.876698971, -0.479051322), Vec3(-0.0922053382, 0.826835155, -0.561066091), Vec3(-0.182947397, 0.816099524, -0.554494679), Vec3(-0.186775133, 0.864822626, -0.473437369), Vec3(-0.0908876732, 0.770022929, -0.636995375), Vec3(-0.180270076, 0.760417342, -0.629464328), Vec3(-0.266581953, 0.744725764, -0.617472947), Vec3(-0.270721048, 0.798436582, -0.544206858), Vec3(-0.348251611, 0.723508596, -0.601838291), Vec3(-0.354056358, 0.774297714, -0.531092167), Vec3(-0.276593298, 0.845220685, -0.464806646), Vec3(-0.362190217, 0.818292081, -0.454054058), Vec3(-0.442427903, 0.784516156, -0.442427546), Vec3(-0.454054505, 0.818292141, -0.362189889), Vec3(-0.431635141, 0.744235456, -0.516483724), Vec3(-0.50236088, 0.708671808, -0.502360463), Vec3(-0.516484141, 0.744235337, -0.431634814), Vec3(-0.531092525, 0.774297595, -0.35405609), Vec3(-0.423737943, 0.697528303, -0.58382386), Vec3(-0.491493732, 0.667616189, -0.565391302), Vec3(-0.549794495, 0.634344101, -0.549793899), Vec3(-0.565391839, 0.667616189, -0.491493315), Vec3(-0.583824337, 0.697528243, -0.423737556), Vec3(-0.601838708, 0.723508358, -0.348251373), Vec3(-0.47905159, 0.876698792, -0.094098106), Vec3(-0.481008559, 0.880668104, 1.70593495e-07), Vec3(-0.473437697, 0.864822447, -0.186774865), Vec3(-0.554494977, 0.816099286, -0.182947159), Vec3(-0.561066449, 0.826834917, -0.09220507), Vec3(-0.5633322, 0.830428064, 1.55085004e-07), Vec3(-0.464806914, 0.845220625, -0.276593029), Vec3(-0.544207156, 0.798436522, -0.27072078), Vec3(-0.617473423, 0.744725466, -0.266581714), Vec3(-0.629464805, 0.760416925, -0.180269793), Vec3(-0.636995614, 0.77002275, -0.0908874571), Vec3(-0.639565408, 0.773250341, 1.55085004e-07), Vec3(-0.0908876136, 0.770022452, 0.636996031), Vec3(-0.090409264, 0.706677258, 0.706678569), Vec3(-0.0922052562, 0.826834619, 0.561066926), Vec3(-0.182947308, 0.816099048, 0.554495335), Vec3(-0.180269942, 0.760416746, 0.629465044), Vec3(-0.179295629, 0.698143959, 0.698145151), Vec3(-0.0940982699, 0.876698613, 0.479051888), Vec3(-0.0962666124, 0.918992281, 0.391309649), Vec3(-0.191126883, 0.906026542, 0.386684775), Vec3(-0.186775059, 0.864822268, 0.473438054), Vec3(-0.276593179, 0.845220327, 0.464807272), Vec3(-0.270720959, 0.798436284, 0.544207513), Vec3(-0.28319186, 0.884631753, 0.379698277), Vec3(-0.371180475, 0.855216384, 0.371180713), Vec3(-0.362190008, 0.818291903, 0.454054713), Vec3(-0.35405615, 0.774297357, 0.531092942), Vec3(-0.266581804, 0.744725168, 0.617473722), Vec3(-0.265069723, 0.684358299, 0.684359431), Vec3(-0.348251402, 0.72350812, 0.601839006), Vec3(-0.346116304, 0.666016281, 0.666017473), Vec3(-0.0984108895, 0.952974558, 0.298469722), Vec3(-0.100244306, 0.977899313, 0.201462612), Vec3(-0.199006096, 0.963182092, 0.199006259), Vec3(-0.195391372, 0.939038754, 0.294890672), Vec3(-0.101498477, 0.993134081, 0.101498663), Vec3(-0.201462388, 0.977899313, 0.100244492), Vec3(-0.298469514, 0.952974617, 0.0984110162), Vec3(-0.294890463, 0.939038813, 0.195391536), Vec3(-0.391309351, 0.918992341, 0.0962667614), Vec3(-0.386684507, 0.906026661, 0.191127077), Vec3(-0.28956455, 0.916100979, 0.289564729), Vec3(-0.379697949, 0.884631693, 0.283192039), Vec3(-0.464806855, 0.845220506, 0.276593417), Vec3(-0.454054326, 0.818291903, 0.362190306), Vec3(-0.473437756, 0.864822447, 0.186775237), Vec3(-0.554494917, 0.816099226, 0.182947487), Vec3(-0.544207096, 0.798436463, 0.270721197), Vec3(-0.531092405, 0.774297476, 0.354056507), Vec3(-0.47905156, 0.876698792, 0.0940984413), Vec3(-0.561066449, 0.826834917, 0.0922054276), Vec3(-0.636995614, 0.77002269, 0.090887785), Vec3(-0.629464686, 0.760416925, 0.18027015), Vec3(-0.617473245, 0.744725406, 0.266581982), Vec3(-0.601838589, 0.723508239, 0.348251849), Vec3(-0.423737615, 0.697528005, 0.583824575), Vec3(-0.420784116, 0.644161701, 0.644162774), Vec3(-0.431634933, 0.744235218, 0.51648432), Vec3(-0.502360642, 0.708671629, 0.502361119), Vec3(-0.491493464, 0.667615891, 0.565391958), Vec3(-0.487256259, 0.62029165, 0.620292664), Vec3(-0.442427725, 0.784515977, 0.442428142), Vec3(-0.516483903, 0.744235277, 0.43163532), Vec3(-0.583824158, 0.697528124, 0.423737973), Vec3(-0.56539166, 0.667615891, 0.491493911), Vec3(-0.549794197, 0.634343743, 0.549794614), Vec3(-0.542915702, 0.596732557, 0.596733272), Vec3(0.549794018, -0.549794137, 0.634344399), Vec3(0.542915404, -0.596732914, 0.596733034), Vec3(0.565391362, -0.491493374, 0.667616487), Vec3(0.502360463, -0.502360523, 0.708672106), Vec3(0.491493315, -0.565391421, 0.667616487), Vec3(0.487256259, -0.620292127, 0.620292127), Vec3(0.583823919, -0.423737466, 0.69752866), Vec3(0.601838231, -0.348251224, 0.723508775), Vec3(0.531092048, -0.354055941, 0.774298072), Vec3(0.516483545, -0.431634665, 0.744235814), Vec3(0.442427367, -0.442427367, 0.784516573), Vec3(0.431634724, -0.516483545, 0.744235754), Vec3(0.454053938, -0.362189651, 0.818292499), Vec3(0.371180117, -0.371180058, 0.85521692), Vec3(0.36218977, -0.454053819, 0.818292439), Vec3(0.354055941, -0.531091988, 0.774298072), Vec3(0.423737526, -0.583823919, 0.69752866), Vec3(0.420784026, -0.644162297, 0.644162297), Vec3(0.348251343, -0.601838291, 0.723508775), Vec3(0.346116185, -0.666016817, 0.666017115), Vec3(0.617472887, -0.266581506, 0.744726002), Vec3(0.62946409, -0.180269659, 0.76041764), Vec3(0.554494262, -0.18294695, 0.816099882), Vec3(0.544206619, -0.270720541, 0.79843694), Vec3(0.636995018, -0.0908873007, 0.770023227), Vec3(0.639564574, 2.32627499e-07, 0.773250937), Vec3(0.563331485, 2.4813599e-07, 0.830428481), Vec3(0.561065793, -0.092204906, 0.826835394), Vec3(0.479050845, -0.0940978825, 0.876699269), Vec3(0.47343713, -0.186774597, 0.864822865), Vec3(0.481007755, 2.4813599e-07, 0.880668581), Vec3(0.392937869, 2.4813599e-07, 0.923329055), Vec3(0.391308635, -0.0962661728, 0.918992758), Vec3(0.386683911, -0.191126406, 0.906027079), Vec3(0.464806408, -0.276592761, 0.845221043), Vec3(0.379697472, -0.283191293, 0.88463223), Vec3(0.289564103, -0.289563954, 0.916101336), Vec3(0.283191383, -0.379697323, 0.88463223), Vec3(0.294889867, -0.195390731, 0.939039171), Vec3(0.199005693, -0.199005499, 0.96318233), Vec3(0.195390999, -0.294889718, 0.939039111), Vec3(0.1911266, -0.386683851, 0.906027079), Vec3(0.298468858, -0.0984104276, 0.952974916), Vec3(0.299740821, 2.4813599e-07, 0.957644999), Vec3(0.202340484, 2.4813599e-07, 0.982842982), Vec3(0.201461986, -0.100243859, 0.977899432), Vec3(0.101498231, -0.101498, 0.993134201), Vec3(0.10024406, -0.201461762, 0.977899492), Vec3(0.101948492, 2.4813599e-07, 0.998260677), Vec3(-3.10169987e-08, 2.4813599e-07, 1.00345218), Vec3(-3.10169987e-08, -0.101948276, 0.998260677), Vec3(-1.55084994e-08, -0.202340335, 0.982843041), Vec3(0.0984106436, -0.298468739, 0.952974975), Vec3(0.0962664112, -0.391308665, 0.918992698), Vec3(-1.55084994e-08, -0.299740791, 0.957645059), Vec3(-3.10169987e-08, -0.392937809, 0.923329055), Vec3(0.266581625, -0.617472827, 0.744725943), Vec3(0.265069664, -0.684358835, 0.684358895), Vec3(0.27072069, -0.544206619, 0.79843694), Vec3(0.182947144, -0.5544945, 0.816099703), Vec3(0.180269808, -0.629464149, 0.760417521), Vec3(0.179295525, -0.698144555, 0.698144555), Vec3(0.27659288, -0.464806318, 0.845221102), Vec3(0.186774775, -0.473437071, 0.864822865), Vec3(0.094098106, -0.479050905, 0.876699209), Vec3(0.092205137, -0.561066091, 0.826835155), Vec3(-3.10169987e-08, -0.481007785, 0.880668521), Vec3(-3.10169987e-08, -0.563331604, 0.830428481), Vec3(0.0908875018, -0.636995137, 0.770023108), Vec3(0.0904091746, -0.706677854, 0.706677973), Vec3(-1.55084994e-08, -0.639564872, 0.773250699), Vec3(-3.10169987e-08, -0.70956403, 0.70956403), Vec3(0.636994958, 0.0908877626, 0.770023286), Vec3(0.62946403, 0.180269986, 0.76041764), Vec3(0.554494143, 0.182947278, 0.816099823), Vec3(0.561065674, 0.0922053829, 0.826835394), Vec3(0.617472649, 0.266581774, 0.744726002), Vec3(0.601838052, 0.348251313, 0.723508894), Vec3(0.531091869, 0.354055971, 0.774298191), Vec3(0.54420644, 0.27072084, 0.798436999), Vec3(0.464806139, 0.276593, 0.845221102), Vec3(0.473436922, 0.186774969, 0.864822924), Vec3(0.45405373, 0.36218971, 0.818292618), Vec3(0.371179938, 0.371180087, 0.85521698), Vec3(0.379697233, 0.283191502, 0.88463217), Vec3(0.386683762, 0.191126779, 0.906027019), Vec3(0.479050756, 0.0940983668, 0.876699209), Vec3(0.391308576, 0.0962666422, 0.918992698), Vec3(0.583823681, 0.423737437, 0.697528899), Vec3(0.565391183, 0.491493225, 0.667616725), Vec3(0.502360225, 0.502360284, 0.708672464), Vec3(0.516483307, 0.431634635, 0.744236052), Vec3(0.549793839, 0.549793899, 0.634344637), Vec3(0.491493225, 0.565391064, 0.667616785), Vec3(0.423737466, 0.583823562, 0.697529018), Vec3(0.431634605, 0.516483307, 0.744236052), Vec3(0.348251224, 0.601837933, 0.723509133), Vec3(0.354055882, 0.531091809, 0.774298251), Vec3(0.442427337, 0.442427367, 0.784516633), Vec3(0.362189621, 0.45405376, 0.818292677), Vec3(0.276592851, 0.464806199, 0.845221162), Vec3(0.283191323, 0.379697382, 0.88463217), Vec3(0.270720661, 0.544206321, 0.798437119), Vec3(0.18294704, 0.554494083, 0.816100061), Vec3(0.186774716, 0.473436892, 0.864822984), Vec3(0.191126511, 0.386683851, 0.906027079), Vec3(0.266581565, 0.617472529, 0.744726241), Vec3(0.180269763, 0.629463851, 0.760417819), Vec3(0.0908875018, 0.63699466, 0.770023525), Vec3(0.0922051221, 0.561065555, 0.826835513), Vec3(-3.10169987e-08, 0.639564395, 0.773251176), Vec3(-3.10169987e-08, 0.563331187, 0.83042872), Vec3(0.0940980688, 0.479050845, 0.876699269), Vec3(0.0962663442, 0.391308635, 0.918992698), Vec3(-3.10169987e-08, 0.481007755, 0.880668581), Vec3(-3.10169987e-08, 0.392937899, 0.923328996), Vec3(0.298468769, 0.0984108895, 0.952974856), Vec3(0.294889838, 0.195391133, 0.939039111), Vec3(0.199005604, 0.199005857, 0.963182271), Vec3(0.201461926, 0.100244306, 0.977899432), Vec3(0.289563894, 0.289564192, 0.916101277), Vec3(0.195390895, 0.294890016, 0.939039111), Vec3(0.0984105989, 0.298468977, 0.952974856), Vec3(0.100244015, 0.20146215, 0.977899432), Vec3(-3.10169987e-08, 0.29974097, 0.95764488), Vec3(-3.10169987e-08, 0.202340722, 0.982842922), Vec3(0.101498187, 0.101498462, 0.993134081), Vec3(-3.10169987e-08, 0.101948753, 0.998260498), Vec3(-0.101498291, 0.101498462, 0.993134201), Vec3(-0.101948567, 2.4813599e-07, 0.998260677), Vec3(-0.100244105, 0.201462179, 0.977899373), Vec3(-0.199005693, 0.199005842, 0.963182271), Vec3(-0.201461971, 0.100244291, 0.977899373), Vec3(-0.202340558, 2.4813599e-07, 0.982842982), Vec3(-0.0984106734, 0.298469037, 0.952974796), Vec3(-0.096266441, 0.391308725, 0.918992698), Vec3(-0.1911266, 0.386683881, 0.906027019), Vec3(-0.195390984, 0.294890016, 0.939038992), Vec3(-0.289564043, 0.289564103, 0.916101217), Vec3(-0.294889867, 0.195391104, 0.939039111), Vec3(-0.283191413, 0.379697472, 0.884632111), Vec3(-0.371180028, 0.371180028, 0.85521692), Vec3(-0.379697472, 0.283191502, 0.88463217), Vec3(-0.386683881, 0.191126764, 0.906027019), Vec3(-0.298468888, 0.0984108895, 0.952974856), Vec3(-0.29974094, 2.32627499e-07, 0.95764488), Vec3(-0.391308665, 0.0962666571, 0.918992698), Vec3(-0.392937928, 2.32627499e-07, 0.923328996), Vec3(-0.0940981358, 0.479050696, 0.876699269), Vec3(-0.0922051817, 0.561065555, 0.826835513), Vec3(-0.182947114, 0.554494083, 0.816099942), Vec3(-0.18677476, 0.473436892, 0.864822984), Vec3(-0.0908875763, 0.63699466, 0.770023525), Vec3(-0.180269867, 0.629463792, 0.760417819), Vec3(-0.266581625, 0.61747241, 0.744726241), Vec3(-0.270720661, 0.544206321, 0.798437119), Vec3(-0.348251343, 0.601837814, 0.723509133), Vec3(-0.354055971, 0.53109169, 0.774298251), Vec3(-0.27659288, 0.464806199, 0.845221162), Vec3(-0.36218971, 0.45405376, 0.818292499), Vec3(-0.442427367, 0.442427367, 0.784516633), Vec3(-0.454053819, 0.36218971, 0.818292499), Vec3(-0.431634635, 0.516483366, 0.744235992), Vec3(-0.502360404, 0.502360225, 0.708672285), Vec3(-0.516483486, 0.431634665, 0.744235873), Vec3(-0.531091928, 0.354055911, 0.774298131), Vec3(-0.423737496, 0.583823442, 0.697529018), Vec3(-0.491493374, 0.565391123, 0.667616665), Vec3(-0.549794078, 0.54979372, 0.634344637), Vec3(-0.565391421, 0.491493136, 0.667616665), Vec3(-0.58382374, 0.423737377, 0.697528839), Vec3(-0.601838171, 0.348251283, 0.723508835), Vec3(-0.479050815, 0.0940983519, 0.876699269), Vec3(-0.481007755, 2.17118995e-07, 0.880668581), Vec3(-0.473437011, 0.186774969, 0.864822865), Vec3(-0.554494262, 0.182947293, 0.816099882), Vec3(-0.561065674, 0.092205368, 0.826835394), Vec3(-0.563331485, 2.01610504e-07, 0.830428481), Vec3(-0.464806318, 0.276593, 0.845221043), Vec3(-0.54420656, 0.27072075, 0.79843688), Vec3(-0.617472708, 0.266581595, 0.744726002), Vec3(-0.62946403, 0.180269971, 0.76041764), Vec3(-0.636994958, 0.090887703, 0.770023227), Vec3(-0.639564753, 2.01610504e-07, 0.773250937), Vec3(-0.0908875465, -0.636995137, 0.770023167), Vec3(-0.0904092193, -0.706677854, 0.706677914), Vec3(-0.0922052115, -0.561065853, 0.826835275), Vec3(-0.182947204, -0.554494381, 0.816099763), Vec3(-0.180269867, -0.629464209, 0.760417461), Vec3(-0.179295614, -0.698144555, 0.698144615), Vec3(-0.0940981656, -0.479050905, 0.876699209), Vec3(-0.0962664858, -0.391308635, 0.918992698), Vec3(-0.19112663, -0.386683881, 0.906027019), Vec3(-0.186774835, -0.473437041, 0.864822865), Vec3(-0.27659288, -0.464806288, 0.845221043), Vec3(-0.27072072, -0.544206679, 0.79843688), Vec3(-0.283191532, -0.379697353, 0.88463223), Vec3(-0.371180117, -0.371179938, 0.85521692), Vec3(-0.36218977, -0.454053789, 0.818292439), Vec3(-0.354055941, -0.531091988, 0.774298072), Vec3(-0.266581714, -0.617472947, 0.744725883), Vec3(-0.265069664, -0.684358895, 0.684358835), Vec3(-0.348251343, -0.601838231, 0.723508775), Vec3(-0.346116126, -0.666016817, 0.666016996), Vec3(-0.0984107032, -0.298468769, 0.952974916), Vec3(-0.100244135, -0.201461777, 0.977899432), Vec3(-0.199005708, -0.199005425, 0.96318233), Vec3(-0.195390999, -0.294889748, 0.939039171), Vec3(-0.101498291, -0.101498, 0.993134201), Vec3(-0.201461986, -0.100243844, 0.977899432), Vec3(-0.298468888, -0.0984104276, 0.952974856), Vec3(-0.294889897, -0.195390776, 0.939039171), Vec3(-0.391308755, -0.0962661728, 0.918992698), Vec3(-0.386683851, -0.191126391, 0.906027079), Vec3(-0.289564043, -0.289563864, 0.916101336), Vec3(-0.379697382, -0.283191234, 0.88463223), Vec3(-0.464806348, -0.276592731, 0.845221102), Vec3(-0.454053909, -0.362189621, 0.818292558), Vec3(-0.473437041, -0.186774552, 0.864823043), Vec3(-0.554494262, -0.18294692, 0.816099882), Vec3(-0.54420656, -0.270720541, 0.798437059), Vec3(-0.531091988, -0.354055822, 0.774298131), Vec3(-0.479050845, -0.0940979198, 0.876699209), Vec3(-0.561065853, -0.0922049507, 0.826835334), Vec3(-0.636994958, -0.0908873305, 0.770023286), Vec3(-0.62946403, -0.180269644, 0.760417759), Vec3(-0.617472768, -0.266581416, 0.744726062), Vec3(-0.601838231, -0.348251253, 0.723508835), Vec3(-0.423737496, -0.583823979, 0.697528601), Vec3(-0.420784026, -0.644162238, 0.644162357), Vec3(-0.431634754, -0.516483605, 0.744235754), Vec3(-0.502360404, -0.502360463, 0.708672225), Vec3(-0.491493255, -0.565391421, 0.667616487), Vec3(-0.487256259, -0.620292068, 0.620292246), Vec3(-0.442427456, -0.442427367, 0.784516513), Vec3(-0.516483486, -0.431634694, 0.744235814), Vec3(-0.583823919, -0.423737496, 0.69752866), Vec3(-0.565391362, -0.491493344, 0.667616546), Vec3(-0.549794018, -0.549794137, 0.634344339), Vec3(-0.542915404, -0.596732974, 0.596733093), Vec3(0.549793899, -0.634344399, 0.549794137), Vec3(0.491493315, -0.667616367, 0.565391481), Vec3(0.502360404, -0.708672225, 0.502360523), Vec3(0.565391362, -0.667616427, 0.491493434), Vec3(0.423737496, -0.697528601, 0.583824039), Vec3(0.348251343, -0.723508596, 0.60183841), Vec3(0.354056001, -0.774298012, 0.531092048), Vec3(0.431634724, -0.744235694, 0.516483605), Vec3(0.442427367, -0.784516573, 0.442427427), Vec3(0.516483545, -0.744235754, 0.431634724), Vec3(0.3621898, -0.818292499, 0.454053938), Vec3(0.371180087, -0.855216861, 0.371180058), Vec3(0.454053879, -0.818292439, 0.36218977), Vec3(0.531091988, -0.774298072, 0.354055911), Vec3(0.58382386, -0.69752866, 0.423737526), Vec3(0.601838291, -0.723508775, 0.348251313), Vec3(0.266581625, -0.744725823, 0.617472947), Vec3(0.180269808, -0.760417402, 0.629464328), Vec3(0.182947159, -0.816099703, 0.554494441), Vec3(0.27072072, -0.798436821, 0.544206679), Vec3(0.0908875018, -0.770023048, 0.636995256), Vec3(-3.10169987e-08, -0.773250759, 0.639564931), Vec3(-3.10169987e-08, -0.830428481, 0.563331664), Vec3(0.092205137, -0.826835215, 0.561066031), Vec3(0.0940980837, -0.876699209, 0.479050905), Vec3(0.18677479, -0.864822805, 0.47343719), Vec3(-3.10169987e-08, -0.880668461, 0.481007904), Vec3(-3.10169987e-08, -0.923328996, 0.392937899), Vec3(0.0962664112, -0.918992698, 0.391308665), Vec3(0.1911266, -0.906026959, 0.386683911), Vec3(0.276592851, -0.845220923, 0.464806437), Vec3(0.283191442, -0.88463217, 0.379697472), Vec3(0.289564043, -0.916101336, 0.289564013), Vec3(0.379697472, -0.88463217, 0.283191383), Vec3(0.19539094, -0.939039111, 0.294889778), Vec3(0.199005663, -0.96318233, 0.199005574), Vec3(0.294889897, -0.939039111, 0.19539085), Vec3(0.386683941, -0.906027019, 0.191126525), Vec3(0.0984106287, -0.952974856, 0.298468828), Vec3(-3.10169987e-08, -0.957644999, 0.299740911), Vec3(-3.10169987e-08, -0.982842982, 0.202340469), Vec3(0.10024406, -0.977899432, 0.201461852), Vec3(0.101498216, -0.993134201, 0.10149809), Vec3(0.201462016, -0.977899432, 0.100243933), Vec3(-3.10169987e-08, -0.998260677, 0.101948351), Vec3(-3.10169987e-08, -1.00345218, -1.70593495e-07), Vec3(0.101948477, -0.998260677, -1.70593495e-07), Vec3(0.202340543, -0.982842922, -1.55085004e-07), Vec3(0.298468888, -0.952974856, 0.098410517), Vec3(0.391308665, -0.918992698, 0.0962662846), Vec3(0.299740881, -0.957644939, -1.55085004e-07), Vec3(0.392937899, -0.923329055, -1.55085004e-07), Vec3(0.617472827, -0.744725943, 0.266581565), Vec3(0.544206619, -0.79843688, 0.270720661), Vec3(0.554494262, -0.816099882, 0.18294704), Vec3(0.62946403, -0.76041764, 0.180269703), Vec3(0.464806318, -0.845221102, 0.276592851), Vec3(0.47343713, -0.864822805, 0.186774716), Vec3(0.479050905, -0.876699209, 0.0940979943), Vec3(0.561065793, -0.826835334, 0.0922050104), Vec3(0.481007755, -0.880668581, -1.55085004e-07), Vec3(0.563331485, -0.830428481, -1.55085004e-07), Vec3(0.636995018, -0.770023227, 0.0908873901), Vec3(0.639564753, -0.773250937, -1.55085004e-07), Vec3(-0.0908875614, -0.770023048, 0.636995256), Vec3(-0.180269912, -0.760417342, 0.629464328), Vec3(-0.182947204, -0.816099644, 0.55449456), Vec3(-0.0922052115, -0.826835215, 0.561066031), Vec3(-0.266581744, -0.744725883, 0.617472947), Vec3(-0.348251343, -0.723508656, 0.60183847), Vec3(-0.354055941, -0.774297953, 0.531092167), Vec3(-0.27072072, -0.798436761, 0.544206738), Vec3(-0.276592851, -0.845220923, 0.464806378), Vec3(-0.18677485, -0.864822865, 0.47343722), Vec3(-0.3621898, -0.818292499, 0.454053938), Vec3(-0.371180028, -0.85521692, 0.371180028), Vec3(-0.283191472, -0.884632111, 0.379697442), Vec3(-0.19112663, -0.906027019, 0.386683881), Vec3(-0.0940981805, -0.87669915, 0.479050905), Vec3(-0.0962664708, -0.918992698, 0.391308635), Vec3(-0.423737466, -0.697528541, 0.583824039), Vec3(-0.491493255, -0.667616367, 0.565391541), Vec3(-0.502360344, -0.708672225, 0.502360582), Vec3(-0.431634635, -0.744235694, 0.516483665), Vec3(-0.549793899, -0.634344339, 0.549794137), Vec3(-0.565391302, -0.667616546, 0.491493434), Vec3(-0.583823919, -0.69752866, 0.423737526), Vec3(-0.516483605, -0.744235694, 0.431634754), Vec3(-0.601838231, -0.723508835, 0.348251343), Vec3(-0.531091988, -0.774298072, 0.354055941), Vec3(-0.442427367, -0.784516513, 0.442427486), Vec3(-0.454053909, -0.818292499, 0.36218974), Vec3(-0.464806318, -0.845221102, 0.276592821), Vec3(-0.379697472, -0.88463217, 0.283191353), Vec3(-0.54420656, -0.79843694, 0.270720631), Vec3(-0.554494321, -0.816099823, 0.18294704), Vec3(-0.473437101, -0.864822984, 0.186774671), Vec3(-0.386683881, -0.906027079, 0.191126481), Vec3(-0.617472827, -0.744726002, 0.266581595), Vec3(-0.62946409, -0.760417521, 0.180269763), Vec3(-0.636995077, -0.770023167, 0.0908874273), Vec3(-0.561065972, -0.826835215, 0.0922050104), Vec3(-0.639564753, -0.773250937, -1.24067995e-07), Vec3(-0.563331485, -0.830428481, -1.24067995e-07), Vec3(-0.479050905, -0.87669915, 0.0940979943), Vec3(-0.391308725, -0.918992698, 0.0962662548), Vec3(-0.481007844, -0.880668521, -1.395765e-07), Vec3(-0.392937988, -0.923328996, -1.55085004e-07), Vec3(-0.0984107032, -0.952974856, 0.298468858), Vec3(-0.195390984, -0.939039111, 0.294889748), Vec3(-0.199005768, -0.96318233, 0.199005574), Vec3(-0.100244105, -0.977899432, 0.201461866), Vec3(-0.289564013, -0.916101277, 0.289564013), Vec3(-0.294889957, -0.939039111, 0.195390835), Vec3(-0.298468947, -0.952974856, 0.0984105021), Vec3(-0.20146203, -0.977899432, 0.100243933), Vec3(-0.29974094, -0.957644939, -1.55085004e-07), Vec3(-0.202340558, -0.982842982, -1.70593495e-07), Vec3(-0.101498291, -0.993134201, 0.10149809), Vec3(-0.101948567, -0.998260677, -1.70593495e-07), Vec3(-0.101498291, -0.993134201, -0.101498388), Vec3(-3.10169987e-08, -0.998260498, -0.101948693), Vec3(-0.201461956, -0.977899432, -0.100244217), Vec3(-0.199005648, -0.963182271, -0.199005738), Vec3(-0.100244075, -0.977899373, -0.201462045), Vec3(-3.10169987e-08, -0.982842982, -0.202340662), Vec3(-0.298468828, -0.952974916, -0.0984107703), Vec3(-0.391308695, -0.918992698, -0.0962665603), Vec3(-0.386683851, -0.906027019, -0.19112666), Vec3(-0.294889838, -0.939039111, -0.195391014), Vec3(-0.289564103, -0.916101336, -0.289564103), Vec3(-0.195390955, -0.939039111, -0.294889867), Vec3(-0.379697442, -0.884632111, -0.283191472), Vec3(-0.371180028, -0.85521692, -0.371180028), Vec3(-0.283191413, -0.88463217, -0.379697323), Vec3(-0.19112657, -0.906027079, -0.386683792), Vec3(-0.0984106734, -0.952974856, -0.298468918), Vec3(-3.10169987e-08, -0.957644999, -0.29974094), Vec3(-0.096266441, -0.918992758, -0.391308576), Vec3(-3.10169987e-08, -0.923329055, -0.392937839), Vec3(-0.479050845, -0.876699209, -0.0940982699), Vec3(-0.561065793, -0.826835334, -0.0922052786), Vec3(-0.554494262, -0.816099823, -0.182947204), Vec3(-0.473437011, -0.864822924, -0.186774909), Vec3(-0.636995018, -0.770023227, -0.0908876434), Vec3(-0.62946403, -0.76041764, -0.180269882), Vec3(-0.617472768, -0.744726002, -0.266581684), Vec3(-0.5442065, -0.798436999, -0.27072072), Vec3(-0.601838231, -0.723508835, -0.348251313), Vec3(-0.531091928, -0.774298072, -0.354055882), Vec3(-0.464806318, -0.845221043, -0.27659294), Vec3(-0.454053849, -0.818292558, -0.36218971), Vec3(-0.442427367, -0.784516633, -0.442427307), Vec3(-0.36218971, -0.818292618, -0.454053819), Vec3(-0.516483486, -0.744235873, -0.431634605), Vec3(-0.502360404, -0.708672285, -0.502360284), Vec3(-0.431634754, -0.744235873, -0.516483366), Vec3(-0.354055941, -0.774298251, -0.53109175), Vec3(-0.58382386, -0.69752866, -0.423737407), Vec3(-0.565391362, -0.667616606, -0.491493165), Vec3(-0.549794137, -0.634344578, -0.54979378), Vec3(-0.491493464, -0.667616665, -0.565391064), Vec3(-0.423737496, -0.697528958, -0.583823621), Vec3(-0.348251373, -0.723509073, -0.601837933), Vec3(-0.0940981507, -0.876699269, -0.479050696), Vec3(-3.10169987e-08, -0.88066864, -0.481007576), Vec3(-0.18677482, -0.864822924, -0.473436952), Vec3(-0.182947159, -0.816099942, -0.554494083), Vec3(-0.0922051966, -0.826835513, -0.561065555), Vec3(-3.10169987e-08, -0.83042872, -0.563331246), Vec3(-0.27659288, -0.845221043, -0.464806169), Vec3(-0.27072072, -0.798437119, -0.544206262), Vec3(-0.266581744, -0.744726181, -0.61747247), Vec3(-0.180269912, -0.760417759, -0.629463851), Vec3(-0.0908875614, -0.770023465, -0.63699472), Vec3(-3.10169987e-08, -0.773251176, -0.639564395), Vec3(0.636994958, -0.770023286, -0.0908876583), Vec3(0.561065793, -0.826835334, -0.0922053084), Vec3(0.554494262, -0.816099882, -0.182947204), Vec3(0.62946403, -0.76041764, -0.180269912), Vec3(0.479050815, -0.876699209, -0.094098255), Vec3(0.391308635, -0.918992698, -0.0962665454), Vec3(0.386683822, -0.906027019, -0.19112666), Vec3(0.473436981, -0.864822924, -0.18677488), Vec3(0.464806199, -0.845221102, -0.27659291), Vec3(0.5442065, -0.79843694, -0.27072072), Vec3(0.379697382, -0.88463223, -0.283191532), Vec3(0.371179968, -0.85521698, -0.371180058), Vec3(0.454053849, -0.818292618, -0.362189621), Vec3(0.531091928, -0.774298072, -0.354055911), Vec3(0.617472768, -0.744726002, -0.266581744), Vec3(0.601838171, -0.723508954, -0.348251313), Vec3(0.298468769, -0.952974856, -0.0984108001), Vec3(0.201461941, -0.977899432, -0.100244246), Vec3(0.199005619, -0.96318233, -0.199005738), Vec3(0.294889808, -0.939039111, -0.195391014), Vec3(0.101498187, -0.993134201, -0.101498403), Vec3(0.100244015, -0.977899373, -0.201462075), Vec3(0.0984106138, -0.952974856, -0.298468888), Vec3(0.19539091, -0.939039052, -0.294889838), Vec3(0.0962663591, -0.918992758, -0.391308576), Vec3(0.19112654, -0.906027079, -0.386683851), Vec3(0.289563954, -0.916101277, -0.289564013), Vec3(0.283191353, -0.88463217, -0.379697323), Vec3(0.27659288, -0.845221102, -0.464806199), Vec3(0.362189621, -0.818292618, -0.454053819), Vec3(0.18677476, -0.864822984, -0.473436892), Vec3(0.182947084, -0.816099942, -0.554494083), Vec3(0.270720631, -0.798437119, -0.544206381), Vec3(0.354055911, -0.774298251, -0.531091809), Vec3(0.0940980837, -0.876699328, -0.479050636), Vec3(0.092205137, -0.826835573, -0.561065495), Vec3(0.0908875167, -0.770023525, -0.63699466), Vec3(0.180269793, -0.760417819, -0.629463851), Vec3(0.266581625, -0.744726241, -0.617472529), Vec3(0.348251313, -0.723509073, -0.601837933), Vec3(0.5838238, -0.697528839, -0.423737377), Vec3(0.516483426, -0.744236052, -0.431634575), Vec3(0.502360344, -0.708672345, -0.502360284), Vec3(0.565391302, -0.667616665, -0.491493255), Vec3(0.442427307, -0.784516633, -0.442427307), Vec3(0.431634635, -0.744235992, -0.516483366), Vec3(0.423737496, -0.697528958, -0.583823562), Vec3(0.491493404, -0.667616665, -0.565391123), Vec3(0.549794078, -0.634344697, -0.54979378)}, + ["orientation"] = "left-handed", + ["part_list"] = { "sphere"}, + ["part_face_count_list"] = { 1536}, + ["part_face_indices"] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535}, + ["uv_list"] = { Vec2(0.39546001, 0.467680007), Vec2(0.390460014, 0.456429988), Vec2(0.399419993, 0.454439998), Vec2(0.400750011, 0.463099986), Vec2(0.390460014, 0.456429988), Vec2(0.386909992, 0.442909986), Vec2(0.397700012, 0.441610008), Vec2(0.399419993, 0.454439998), Vec2(0.380849987, 0.460709989), Vec2(0.375930011, 0.445899993), Vec2(0.386909992, 0.442909986), Vec2(0.390460014, 0.456429988), Vec2(0.38745001, 0.474099994), Vec2(0.380849987, 0.460709989), Vec2(0.390460014, 0.456429988), Vec2(0.39546001, 0.467680007), Vec2(0.386909992, 0.442909986), Vec2(0.384169996, 0.427769989), Vec2(0.395999998, 0.426840007), Vec2(0.397700012, 0.441610008), Vec2(0.384169996, 0.427769989), Vec2(0.382019997, 0.411460012), Vec2(0.394499987, 0.410809994), Vec2(0.395999998, 0.426840007), Vec2(0.372229993, 0.429919988), Vec2(0.369439989, 0.412990004), Vec2(0.382019997, 0.411460012), Vec2(0.384169996, 0.427769989), Vec2(0.375930011, 0.445899993), Vec2(0.372229993, 0.429919988), Vec2(0.384169996, 0.427769989), Vec2(0.386909992, 0.442909986), Vec2(0.364499986, 0.44986999), Vec2(0.360020012, 0.432889998), Vec2(0.372229993, 0.429919988), Vec2(0.375930011, 0.445899993), Vec2(0.360020012, 0.432889998), Vec2(0.356640011, 0.415170014), Vec2(0.369439989, 0.412990004), Vec2(0.372229993, 0.429919988), Vec2(0.347409993, 0.436250001), Vec2(0.343519986, 0.417690009), Vec2(0.356640011, 0.415170014), Vec2(0.360020012, 0.432889998), Vec2(0.352490008, 0.4542), Vec2(0.347409993, 0.436250001), Vec2(0.360020012, 0.432889998), Vec2(0.364499986, 0.44986999), Vec2(0.377939999, 0.481029987), Vec2(0.370359987, 0.465959996), Vec2(0.380849987, 0.460709989), Vec2(0.38745001, 0.474099994), Vec2(0.370359987, 0.465959996), Vec2(0.364499986, 0.44986999), Vec2(0.375930011, 0.445899993), Vec2(0.380849987, 0.460709989), Vec2(0.358999997, 0.471460015), Vec2(0.352490008, 0.4542), Vec2(0.364499986, 0.44986999), Vec2(0.370359987, 0.465959996), Vec2(0.367210001, 0.48793), Vec2(0.358999997, 0.471460015), Vec2(0.370359987, 0.465959996), Vec2(0.377939999, 0.481029987), Vec2(0.382019997, 0.411460012), Vec2(0.380380005, 0.394320011), Vec2(0.393269986, 0.393909991), Vec2(0.394499987, 0.410809994), Vec2(0.380380005, 0.394320011), Vec2(0.379240006, 0.376610011), Vec2(0.392369986, 0.376419991), Vec2(0.393269986, 0.393909991), Vec2(0.367379993, 0.395350009), Vec2(0.365979999, 0.377200007), Vec2(0.379240006, 0.376610011), Vec2(0.380380005, 0.394320011), Vec2(0.369439989, 0.412990004), Vec2(0.367379993, 0.395350009), Vec2(0.380380005, 0.394320011), Vec2(0.382019997, 0.411460012), Vec2(0.379240006, 0.376610011), Vec2(0.378580004, 0.358559996), Vec2(0.391840011, 0.358579993), Vec2(0.392369986, 0.376419991), Vec2(0.378580004, 0.358559996), Vec2(0.378399998, 0.340350002), Vec2(0.391689986, 0.340579987), Vec2(0.391840011, 0.358579993), Vec2(0.365179986, 0.358729988), Vec2(0.364960015, 0.340110004), Vec2(0.378399998, 0.340350002), Vec2(0.378580004, 0.358559996), Vec2(0.365979999, 0.377200007), Vec2(0.365179986, 0.358729988), Vec2(0.378580004, 0.358559996), Vec2(0.379240006, 0.376610011), Vec2(0.352490008, 0.378089994), Vec2(0.351550013, 0.359059989), Vec2(0.365179986, 0.358729988), Vec2(0.365979999, 0.377200007), Vec2(0.351550013, 0.359059989), Vec2(0.351289988, 0.339890003), Vec2(0.364960015, 0.340110004), Vec2(0.365179986, 0.358729988), Vec2(0.337650001, 0.359490007), Vec2(0.337339997, 0.33969), Vec2(0.351289988, 0.339890003), Vec2(0.351550013, 0.359059989), Vec2(0.338739991, 0.379180014), Vec2(0.337650001, 0.359490007), Vec2(0.351550013, 0.359059989), Vec2(0.352490008, 0.378089994), Vec2(0.356640011, 0.415170014), Vec2(0.354169995, 0.39684999), Vec2(0.367379993, 0.395350009), Vec2(0.369439989, 0.412990004), Vec2(0.354169995, 0.39684999), Vec2(0.352490008, 0.378089994), Vec2(0.365979999, 0.377200007), Vec2(0.367379993, 0.395350009), Vec2(0.34066999, 0.398629993), Vec2(0.338739991, 0.379180014), Vec2(0.352490008, 0.378089994), Vec2(0.354169995, 0.39684999), Vec2(0.343519986, 0.417690009), Vec2(0.34066999, 0.398629993), Vec2(0.354169995, 0.39684999), Vec2(0.356640011, 0.415170014), Vec2(0.330040008, 0.420289993), Vec2(0.326860011, 0.400489986), Vec2(0.34066999, 0.398629993), Vec2(0.343519986, 0.417690009), Vec2(0.326860011, 0.400489986), Vec2(0.324690014, 0.380349994), Vec2(0.338739991, 0.379180014), Vec2(0.34066999, 0.398629993), Vec2(0.312739998, 0.402269989), Vec2(0.310350001, 0.381489992), Vec2(0.324690014, 0.380349994), Vec2(0.326860011, 0.400489986), Vec2(0.316179991, 0.422729999), Vec2(0.312739998, 0.402269989), Vec2(0.326860011, 0.400489986), Vec2(0.330040008, 0.420289993), Vec2(0.324690014, 0.380349994), Vec2(0.323460013, 0.359990001), Vec2(0.337650001, 0.359490007), Vec2(0.338739991, 0.379180014), Vec2(0.323460013, 0.359990001), Vec2(0.323089987, 0.339509994), Vec2(0.337339997, 0.33969), Vec2(0.337650001, 0.359490007), Vec2(0.308970004, 0.360480011), Vec2(0.308560014, 0.339359999), Vec2(0.323089987, 0.339509994), Vec2(0.323460013, 0.359990001), Vec2(0.310350001, 0.381489992), Vec2(0.308970004, 0.360480011), Vec2(0.323460013, 0.359990001), Vec2(0.324690014, 0.380349994), Vec2(0.295740008, 0.382490009), Vec2(0.294230014, 0.360920012), Vec2(0.308970004, 0.360480011), Vec2(0.310350001, 0.381489992), Vec2(0.294230014, 0.360920012), Vec2(0.293760002, 0.339240015), Vec2(0.308560014, 0.339359999), Vec2(0.308970004, 0.360480011), Vec2(0.279269993, 0.361259997), Vec2(0.278759986, 0.339150012), Vec2(0.293760002, 0.339240015), Vec2(0.294230014, 0.360920012), Vec2(0.280889988, 0.383249998), Vec2(0.279269993, 0.361259997), Vec2(0.294230014, 0.360920012), Vec2(0.295740008, 0.382490009), Vec2(0.301970005, 0.42482999), Vec2(0.298310012, 0.403829992), Vec2(0.312739998, 0.402269989), Vec2(0.316179991, 0.422729999), Vec2(0.298310012, 0.403829992), Vec2(0.295740008, 0.382490009), Vec2(0.310350001, 0.381489992), Vec2(0.312739998, 0.402269989), Vec2(0.283609986, 0.405010015), Vec2(0.280889988, 0.383249998), Vec2(0.295740008, 0.382490009), Vec2(0.298310012, 0.403829992), Vec2(0.287420005, 0.426429987), Vec2(0.283609986, 0.405010015), Vec2(0.298310012, 0.403829992), Vec2(0.301970005, 0.42482999), Vec2(0.355369985, 0.494399995), Vec2(0.346780002, 0.476749986), Vec2(0.358999997, 0.471460015), Vec2(0.367210001, 0.48793), Vec2(0.346780002, 0.476749986), Vec2(0.339839995, 0.45848), Vec2(0.352490008, 0.4542), Vec2(0.358999997, 0.471460015), Vec2(0.333739996, 0.481489986), Vec2(0.326559991, 0.462370008), Vec2(0.339839995, 0.45848), Vec2(0.346780002, 0.476749986), Vec2(0.342489988, 0.500119984), Vec2(0.333739996, 0.481489986), Vec2(0.346780002, 0.476749986), Vec2(0.355369985, 0.494399995), Vec2(0.339839995, 0.45848), Vec2(0.334320009, 0.439639986), Vec2(0.347409993, 0.436250001), Vec2(0.352490008, 0.4542), Vec2(0.334320009, 0.439639986), Vec2(0.330040008, 0.420289993), Vec2(0.343519986, 0.417690009), Vec2(0.347409993, 0.436250001), Vec2(0.320760012, 0.442779988), Vec2(0.316179991, 0.422729999), Vec2(0.330040008, 0.420289993), Vec2(0.334320009, 0.439639986), Vec2(0.326559991, 0.462370008), Vec2(0.320760012, 0.442779988), Vec2(0.334320009, 0.439639986), Vec2(0.339839995, 0.45848), Vec2(0.312700003, 0.465640008), Vec2(0.306739986, 0.445450008), Vec2(0.320760012, 0.442779988), Vec2(0.326559991, 0.462370008), Vec2(0.306739986, 0.445450008), Vec2(0.301970005, 0.42482999), Vec2(0.316179991, 0.422729999), Vec2(0.320760012, 0.442779988), Vec2(0.292309999, 0.447459996), Vec2(0.287420005, 0.426429987), Vec2(0.301970005, 0.42482999), Vec2(0.306739986, 0.445450008), Vec2(0.298299998, 0.468100011), Vec2(0.292309999, 0.447459996), Vec2(0.306739986, 0.445450008), Vec2(0.312700003, 0.465640008), Vec2(0.328619987, 0.504840016), Vec2(0.319940001, 0.485419989), Vec2(0.333739996, 0.481489986), Vec2(0.342489988, 0.500119984), Vec2(0.319940001, 0.485419989), Vec2(0.312700003, 0.465640008), Vec2(0.326559991, 0.462370008), Vec2(0.333739996, 0.481489986), Vec2(0.305429995, 0.488370001), Vec2(0.298299998, 0.468100011), Vec2(0.312700003, 0.465640008), Vec2(0.319940001, 0.485419989), Vec2(0.313829988, 0.508350015), Vec2(0.305429995, 0.488370001), Vec2(0.319940001, 0.485419989), Vec2(0.328619987, 0.504840016), Vec2(0.378399998, 0.340350002), Vec2(0.378690004, 0.322140008), Vec2(0.391930014, 0.32258001), Vec2(0.391689986, 0.340579987), Vec2(0.378690004, 0.322140008), Vec2(0.379449993, 0.304089993), Vec2(0.392560005, 0.304740012), Vec2(0.391930014, 0.32258001), Vec2(0.365289986, 0.321500003), Vec2(0.3662, 0.303050011), Vec2(0.379449993, 0.304089993), Vec2(0.378690004, 0.322140008), Vec2(0.364960015, 0.340110004), Vec2(0.365289986, 0.321500003), Vec2(0.378690004, 0.322140008), Vec2(0.378399998, 0.340350002), Vec2(0.379449993, 0.304089993), Vec2(0.380699992, 0.28639999), Vec2(0.393559992, 0.28727001), Vec2(0.392560005, 0.304740012), Vec2(0.380699992, 0.28639999), Vec2(0.382450014, 0.26929), Vec2(0.394899994, 0.27037999), Vec2(0.393559992, 0.28727001), Vec2(0.367720008, 0.284920007), Vec2(0.369899988, 0.267320007), Vec2(0.382450014, 0.26929), Vec2(0.380699992, 0.28639999), Vec2(0.3662, 0.303050011), Vec2(0.367720008, 0.284920007), Vec2(0.380699992, 0.28639999), Vec2(0.379449993, 0.304089993), Vec2(0.352730006, 0.301719993), Vec2(0.354519993, 0.282999992), Vec2(0.367720008, 0.284920007), Vec2(0.3662, 0.303050011), Vec2(0.354519993, 0.282999992), Vec2(0.357120007, 0.26473999), Vec2(0.369899988, 0.267320007), Vec2(0.367720008, 0.284920007), Vec2(0.341039985, 0.280840009), Vec2(0.344020009, 0.261860013), Vec2(0.357120007, 0.26473999), Vec2(0.354519993, 0.282999992), Vec2(0.338979989, 0.30024001), Vec2(0.341039985, 0.280840009), Vec2(0.354519993, 0.282999992), Vec2(0.352730006, 0.301719993), Vec2(0.351289988, 0.339890003), Vec2(0.351669997, 0.320740014), Vec2(0.365289986, 0.321500003), Vec2(0.364960015, 0.340110004), Vec2(0.351669997, 0.320740014), Vec2(0.352730006, 0.301719993), Vec2(0.3662, 0.303050011), Vec2(0.365289986, 0.321500003), Vec2(0.337769985, 0.319900006), Vec2(0.338979989, 0.30024001), Vec2(0.352730006, 0.301719993), Vec2(0.351669997, 0.320740014), Vec2(0.337339997, 0.33969), Vec2(0.337769985, 0.319900006), Vec2(0.351669997, 0.320740014), Vec2(0.351289988, 0.339890003), Vec2(0.382450014, 0.26929), Vec2(0.384719998, 0.253010005), Vec2(0.396519989, 0.254370004), Vec2(0.394899994, 0.27037999), Vec2(0.384719998, 0.253010005), Vec2(0.387580007, 0.237920001), Vec2(0.398339987, 0.239610001), Vec2(0.396519989, 0.254370004), Vec2(0.37281999, 0.250459999), Vec2(0.376650006, 0.234569997), Vec2(0.387580007, 0.237920001), Vec2(0.384719998, 0.253010005), Vec2(0.369899988, 0.267320007), Vec2(0.37281999, 0.250459999), Vec2(0.384719998, 0.253010005), Vec2(0.382450014, 0.26929), Vec2(0.387580007, 0.237920001), Vec2(0.391250014, 0.224490002), Vec2(0.400180012, 0.226799995), Vec2(0.398339987, 0.239610001), Vec2(0.391250014, 0.224490002), Vec2(0.396369994, 0.213410005), Vec2(0.401600003, 0.218140006), Vec2(0.400180012, 0.226799995), Vec2(0.381689996, 0.219909996), Vec2(0.388429999, 0.206740007), Vec2(0.396369994, 0.213410005), Vec2(0.391250014, 0.224490002), Vec2(0.376650006, 0.234569997), Vec2(0.381689996, 0.219909996), Vec2(0.391250014, 0.224490002), Vec2(0.387580007, 0.237920001), Vec2(0.365249991, 0.23026), Vec2(0.371250004, 0.21435), Vec2(0.381689996, 0.219909996), Vec2(0.376650006, 0.234569997), Vec2(0.371250004, 0.21435), Vec2(0.378960013, 0.199540004), Vec2(0.388429999, 0.206740007), Vec2(0.381689996, 0.219909996), Vec2(0.359890014, 0.208550006), Vec2(0.368229985, 0.192359999), Vec2(0.378960013, 0.199540004), Vec2(0.371250004, 0.21435), Vec2(0.353249997, 0.225600004), Vec2(0.359890014, 0.208550006), Vec2(0.371250004, 0.21435), Vec2(0.365249991, 0.23026), Vec2(0.357120007, 0.26473999), Vec2(0.360639989, 0.247109994), Vec2(0.37281999, 0.250459999), Vec2(0.369899988, 0.267320007), Vec2(0.360639989, 0.247109994), Vec2(0.365249991, 0.23026), Vec2(0.376650006, 0.234569997), Vec2(0.37281999, 0.250459999), Vec2(0.348030001, 0.243410006), Vec2(0.353249997, 0.225600004), Vec2(0.365249991, 0.23026), Vec2(0.360639989, 0.247109994), Vec2(0.344020009, 0.261860013), Vec2(0.348030001, 0.243410006), Vec2(0.360639989, 0.247109994), Vec2(0.357120007, 0.26473999), Vec2(0.330529988, 0.258929998), Vec2(0.334939986, 0.239710003), Vec2(0.348030001, 0.243410006), Vec2(0.344020009, 0.261860013), Vec2(0.334939986, 0.239710003), Vec2(0.34059, 0.221029997), Vec2(0.353249997, 0.225600004), Vec2(0.348030001, 0.243410006), Vec2(0.321339995, 0.236300007), Vec2(0.327270001, 0.216879994), Vec2(0.34059, 0.221029997), Vec2(0.334939986, 0.239710003), Vec2(0.316650003, 0.256209999), Vec2(0.321339995, 0.236300007), Vec2(0.334939986, 0.239710003), Vec2(0.330529988, 0.258929998), Vec2(0.34059, 0.221029997), Vec2(0.347649992, 0.202979997), Vec2(0.359890014, 0.208550006), Vec2(0.353249997, 0.225600004), Vec2(0.347649992, 0.202979997), Vec2(0.356359988, 0.185609996), Vec2(0.368229985, 0.192359999), Vec2(0.359890014, 0.208550006), Vec2(0.334560007, 0.197980002), Vec2(0.343409985, 0.179619998), Vec2(0.356359988, 0.185609996), Vec2(0.347649992, 0.202979997), Vec2(0.327270001, 0.216879994), Vec2(0.334560007, 0.197980002), Vec2(0.347649992, 0.202979997), Vec2(0.34059, 0.221029997), Vec2(0.313340008, 0.213379994), Vec2(0.320679992, 0.19382), Vec2(0.334560007, 0.197980002), Vec2(0.327270001, 0.216879994), Vec2(0.320679992, 0.19382), Vec2(0.329450011, 0.174649999), Vec2(0.343409985, 0.179619998), Vec2(0.334560007, 0.197980002), Vec2(0.30607, 0.190669999), Vec2(0.314539999, 0.170929998), Vec2(0.329450011, 0.174649999), Vec2(0.320679992, 0.19382), Vec2(0.298839986, 0.21074), Vec2(0.30607, 0.190669999), Vec2(0.320679992, 0.19382), Vec2(0.313340008, 0.213379994), Vec2(0.302390009, 0.253879994), Vec2(0.30726999, 0.233400002), Vec2(0.321339995, 0.236300007), Vec2(0.316650003, 0.256209999), Vec2(0.30726999, 0.233400002), Vec2(0.313340008, 0.213379994), Vec2(0.327270001, 0.216879994), Vec2(0.321339995, 0.236300007), Vec2(0.292760015, 0.231199995), Vec2(0.298839986, 0.21074), Vec2(0.313340008, 0.213379994), Vec2(0.30726999, 0.233400002), Vec2(0.287779987, 0.252099991), Vec2(0.292760015, 0.231199995), Vec2(0.30726999, 0.233400002), Vec2(0.302390009, 0.253879994), Vec2(0.323089987, 0.339509994), Vec2(0.323570013, 0.319050014), Vec2(0.337769985, 0.319900006), Vec2(0.337339997, 0.33969), Vec2(0.323570013, 0.319050014), Vec2(0.324930012, 0.298720002), Vec2(0.338979989, 0.30024001), Vec2(0.337769985, 0.319900006), Vec2(0.309089988, 0.318260014), Vec2(0.310579985, 0.297289997), Vec2(0.324930012, 0.298720002), Vec2(0.323570013, 0.319050014), Vec2(0.308560014, 0.339359999), Vec2(0.309089988, 0.318260014), Vec2(0.323570013, 0.319050014), Vec2(0.323089987, 0.339509994), Vec2(0.324930012, 0.298720002), Vec2(0.327230006, 0.278640002), Vec2(0.341039985, 0.280840009), Vec2(0.338979989, 0.30024001), Vec2(0.327230006, 0.278640002), Vec2(0.330529988, 0.258929998), Vec2(0.344020009, 0.261860013), Vec2(0.341039985, 0.280840009), Vec2(0.313080013, 0.276569992), Vec2(0.316650003, 0.256209999), Vec2(0.330529988, 0.258929998), Vec2(0.327230006, 0.278640002), Vec2(0.310579985, 0.297289997), Vec2(0.313080013, 0.276569992), Vec2(0.327230006, 0.278640002), Vec2(0.324930012, 0.298720002), Vec2(0.295949996, 0.296050012), Vec2(0.298619986, 0.274780005), Vec2(0.313080013, 0.276569992), Vec2(0.310579985, 0.297289997), Vec2(0.298619986, 0.274780005), Vec2(0.302390009, 0.253879994), Vec2(0.316650003, 0.256209999), Vec2(0.313080013, 0.276569992), Vec2(0.283879995, 0.273420006), Vec2(0.287779987, 0.252099991), Vec2(0.302390009, 0.253879994), Vec2(0.298619986, 0.274780005), Vec2(0.281069994, 0.295100003), Vec2(0.283879995, 0.273420006), Vec2(0.298619986, 0.274780005), Vec2(0.295949996, 0.296050012), Vec2(0.293760002, 0.339240015), Vec2(0.294330001, 0.317570001), Vec2(0.309089988, 0.318260014), Vec2(0.308560014, 0.339359999), Vec2(0.294330001, 0.317570001), Vec2(0.295949996, 0.296050012), Vec2(0.310579985, 0.297289997), Vec2(0.309089988, 0.318260014), Vec2(0.279359996, 0.31705001), Vec2(0.281069994, 0.295100003), Vec2(0.295949996, 0.296050012), Vec2(0.294330001, 0.317570001), Vec2(0.278759986, 0.339150012), Vec2(0.279359996, 0.31705001), Vec2(0.294330001, 0.317570001), Vec2(0.293760002, 0.339240015), Vec2(0.263590008, 0.33908999), Vec2(0.264219999, 0.316720009), Vec2(0.279359996, 0.31705001), Vec2(0.278759986, 0.339150012), Vec2(0.264219999, 0.316720009), Vec2(0.266000003, 0.294499993), Vec2(0.281069994, 0.295100003), Vec2(0.279359996, 0.31705001), Vec2(0.248960003, 0.31656), Vec2(0.250800014, 0.294209987), Vec2(0.266000003, 0.294499993), Vec2(0.264219999, 0.316720009), Vec2(0.248319998, 0.339060009), Vec2(0.248960003, 0.31656), Vec2(0.264219999, 0.316720009), Vec2(0.263590008, 0.33908999), Vec2(0.266000003, 0.294499993), Vec2(0.268900007, 0.272549987), Vec2(0.283879995, 0.273420006), Vec2(0.281069994, 0.295100003), Vec2(0.268900007, 0.272549987), Vec2(0.272879988, 0.250959992), Vec2(0.287779987, 0.252099991), Vec2(0.283879995, 0.273420006), Vec2(0.25376001, 0.272139996), Vec2(0.257770002, 0.250429988), Vec2(0.272879988, 0.250959992), Vec2(0.268900007, 0.272549987), Vec2(0.250800014, 0.294209987), Vec2(0.25376001, 0.272139996), Vec2(0.268900007, 0.272549987), Vec2(0.266000003, 0.294499993), Vec2(0.235520005, 0.294160008), Vec2(0.238519996, 0.272080004), Vec2(0.25376001, 0.272139996), Vec2(0.250800014, 0.294209987), Vec2(0.238519996, 0.272080004), Vec2(0.242550001, 0.250389993), Vec2(0.257770002, 0.250429988), Vec2(0.25376001, 0.272139996), Vec2(0.223269999, 0.272210002), Vec2(0.227329999, 0.250649989), Vec2(0.242550001, 0.250389993), Vec2(0.238519996, 0.272080004), Vec2(0.220210001, 0.294230014), Vec2(0.223269999, 0.272210002), Vec2(0.238519996, 0.272080004), Vec2(0.235520005, 0.294160008), Vec2(0.232999995, 0.339049995), Vec2(0.23364, 0.316529989), Vec2(0.248960003, 0.31656), Vec2(0.248319998, 0.339060009), Vec2(0.23364, 0.316529989), Vec2(0.235520005, 0.294160008), Vec2(0.250800014, 0.294209987), Vec2(0.248960003, 0.31656), Vec2(0.2183, 0.31656), Vec2(0.220210001, 0.294230014), Vec2(0.235520005, 0.294160008), Vec2(0.23364, 0.316529989), Vec2(0.217649996, 0.339060009), Vec2(0.2183, 0.31656), Vec2(0.23364, 0.316529989), Vec2(0.232999995, 0.339049995), Vec2(0.272879988, 0.250959992), Vec2(0.277880013, 0.229790002), Vec2(0.292760015, 0.231199995), Vec2(0.287779987, 0.252099991), Vec2(0.277880013, 0.229790002), Vec2(0.283870012, 0.209040001), Vec2(0.298839986, 0.21074), Vec2(0.292760015, 0.231199995), Vec2(0.262730002, 0.229149997), Vec2(0.268539995, 0.208299994), Vec2(0.283870012, 0.209040001), Vec2(0.277880013, 0.229790002), Vec2(0.257770002, 0.250429988), Vec2(0.262730002, 0.229149997), Vec2(0.277880013, 0.229790002), Vec2(0.272879988, 0.250959992), Vec2(0.283870012, 0.209040001), Vec2(0.290829986, 0.188659996), Vec2(0.30607, 0.190669999), Vec2(0.298839986, 0.21074), Vec2(0.290829986, 0.188659996), Vec2(0.298799992, 0.168559998), Vec2(0.314539999, 0.170929998), Vec2(0.30607, 0.190669999), Vec2(0.27511999, 0.187820002), Vec2(0.282409996, 0.167600006), Vec2(0.298799992, 0.168559998), Vec2(0.290829986, 0.188659996), Vec2(0.268539995, 0.208299994), Vec2(0.27511999, 0.187820002), Vec2(0.290829986, 0.188659996), Vec2(0.283870012, 0.209040001), Vec2(0.253039986, 0.208399996), Vec2(0.259160012, 0.188060001), Vec2(0.27511999, 0.187820002), Vec2(0.268539995, 0.208299994), Vec2(0.259160012, 0.188060001), Vec2(0.265639991, 0.168019995), Vec2(0.282409996, 0.167600006), Vec2(0.27511999, 0.187820002), Vec2(0.243239999, 0.189260006), Vec2(0.248820007, 0.169729993), Vec2(0.265639991, 0.168019995), Vec2(0.259160012, 0.188060001), Vec2(0.23759, 0.209179997), Vec2(0.243239999, 0.189260006), Vec2(0.259160012, 0.188060001), Vec2(0.253039986, 0.208399996), Vec2(0.242550001, 0.250389993), Vec2(0.247439995, 0.229159996), Vec2(0.262730002, 0.229149997), Vec2(0.257770002, 0.250429988), Vec2(0.247439995, 0.229159996), Vec2(0.253039986, 0.208399996), Vec2(0.268539995, 0.208299994), Vec2(0.262730002, 0.229149997), Vec2(0.232189998, 0.229629993), Vec2(0.23759, 0.209179997), Vec2(0.253039986, 0.208399996), Vec2(0.247439995, 0.229159996), Vec2(0.227329999, 0.250649989), Vec2(0.232189998, 0.229629993), Vec2(0.247439995, 0.229159996), Vec2(0.242550001, 0.250389993), Vec2(0.21221, 0.250970006), Vec2(0.217130005, 0.230279997), Vec2(0.232189998, 0.229629993), Vec2(0.227329999, 0.250649989), Vec2(0.217130005, 0.230279997), Vec2(0.222450003, 0.210339993), Vec2(0.23759, 0.209179997), Vec2(0.232189998, 0.229629993), Vec2(0.202399999, 0.230660006), Vec2(0.207870007, 0.211359993), Vec2(0.222450003, 0.210339993), Vec2(0.217130005, 0.230279997), Vec2(0.197249994, 0.251010001), Vec2(0.202399999, 0.230660006), Vec2(0.217130005, 0.230279997), Vec2(0.21221, 0.250970006), Vec2(0.222450003, 0.210339993), Vec2(0.227709994, 0.191129997), Vec2(0.243239999, 0.189260006), Vec2(0.23759, 0.209179997), Vec2(0.227709994, 0.191129997), Vec2(0.232409999, 0.172529995), Vec2(0.248820007, 0.169729993), Vec2(0.243239999, 0.189260006), Vec2(0.213009998, 0.193220004), Vec2(0.216959998, 0.176129997), Vec2(0.232409999, 0.172529995), Vec2(0.227709994, 0.191129997), Vec2(0.207870007, 0.211359993), Vec2(0.213009998, 0.193220004), Vec2(0.227709994, 0.191129997), Vec2(0.222450003, 0.210339993), Vec2(0.194120005, 0.211500004), Vec2(0.199719995, 0.194680005), Vec2(0.213009998, 0.193220004), Vec2(0.207870007, 0.211359993), Vec2(0.199719995, 0.194680005), Vec2(0.203339994, 0.180059999), Vec2(0.216959998, 0.176129997), Vec2(0.213009998, 0.193220004), Vec2(0.188590005, 0.19382), Vec2(0.194059998, 0.183160007), Vec2(0.203339994, 0.180059999), Vec2(0.199719995, 0.194680005), Vec2(0.181370005, 0.209729999), Vec2(0.188590005, 0.19382), Vec2(0.199719995, 0.194680005), Vec2(0.194120005, 0.211500004), Vec2(0.182459995, 0.250360012), Vec2(0.188079998, 0.230199993), Vec2(0.202399999, 0.230660006), Vec2(0.197249994, 0.251010001), Vec2(0.188079998, 0.230199993), Vec2(0.194120005, 0.211500004), Vec2(0.207870007, 0.211359993), Vec2(0.202399999, 0.230660006), Vec2(0.174219996, 0.228259996), Vec2(0.181370005, 0.209729999), Vec2(0.194120005, 0.211500004), Vec2(0.188079998, 0.230199993), Vec2(0.167820007, 0.248590007), Vec2(0.174219996, 0.228259996), Vec2(0.188079998, 0.230199993), Vec2(0.182459995, 0.250360012), Vec2(0.202270001, 0.33908999), Vec2(0.202940002, 0.316599995), Vec2(0.2183, 0.31656), Vec2(0.217649996, 0.339060009), Vec2(0.202940002, 0.316599995), Vec2(0.204899997, 0.294290006), Vec2(0.220210001, 0.294230014), Vec2(0.2183, 0.31656), Vec2(0.187529996, 0.316549987), Vec2(0.189579993, 0.294180006), Vec2(0.204899997, 0.294290006), Vec2(0.202940002, 0.316599995), Vec2(0.186849996, 0.339130014), Vec2(0.187529996, 0.316549987), Vec2(0.202940002, 0.316599995), Vec2(0.202270001, 0.33908999), Vec2(0.204899997, 0.294290006), Vec2(0.208049998, 0.272350013), Vec2(0.223269999, 0.272210002), Vec2(0.220210001, 0.294230014), Vec2(0.208049998, 0.272350013), Vec2(0.21221, 0.250970006), Vec2(0.227329999, 0.250649989), Vec2(0.223269999, 0.272210002), Vec2(0.192880005, 0.27226001), Vec2(0.197249994, 0.251010001), Vec2(0.21221, 0.250970006), Vec2(0.208049998, 0.272350013), Vec2(0.189579993, 0.294180006), Vec2(0.192880005, 0.27226001), Vec2(0.208049998, 0.272350013), Vec2(0.204899997, 0.294290006), Vec2(0.17419, 0.293740004), Vec2(0.177729994, 0.271649987), Vec2(0.192880005, 0.27226001), Vec2(0.189579993, 0.294180006), Vec2(0.177729994, 0.271649987), Vec2(0.182459995, 0.250360012), Vec2(0.197249994, 0.251010001), Vec2(0.192880005, 0.27226001), Vec2(0.162550002, 0.270229995), Vec2(0.167820007, 0.248590007), Vec2(0.182459995, 0.250360012), Vec2(0.177729994, 0.271649987), Vec2(0.158659995, 0.292769998), Vec2(0.162550002, 0.270229995), Vec2(0.177729994, 0.271649987), Vec2(0.17419, 0.293740004), Vec2(0.171299994, 0.339179993), Vec2(0.172020003, 0.316339999), Vec2(0.187529996, 0.316549987), Vec2(0.186849996, 0.339130014), Vec2(0.172020003, 0.316339999), Vec2(0.17419, 0.293740004), Vec2(0.189579993, 0.294180006), Vec2(0.187529996, 0.316549987), Vec2(0.156289995, 0.315869987), Vec2(0.158659995, 0.292769998), Vec2(0.17419, 0.293740004), Vec2(0.172020003, 0.316339999), Vec2(0.155520007, 0.339249998), Vec2(0.156289995, 0.315869987), Vec2(0.172020003, 0.316339999), Vec2(0.171299994, 0.339179993), Vec2(0.298220009, 0.510519981), Vec2(0.290320009, 0.490200013), Vec2(0.305429995, 0.488370001), Vec2(0.313829988, 0.508350015), Vec2(0.290320009, 0.490200013), Vec2(0.28343001, 0.469639987), Vec2(0.298299998, 0.468100011), Vec2(0.305429995, 0.488370001), Vec2(0.27474001, 0.490909994), Vec2(0.268220007, 0.470270008), Vec2(0.28343001, 0.469639987), Vec2(0.290320009, 0.490200013), Vec2(0.281960011, 0.511309981), Vec2(0.27474001, 0.490909994), Vec2(0.290320009, 0.490200013), Vec2(0.298220009, 0.510519981), Vec2(0.28343001, 0.469639987), Vec2(0.277520001, 0.448729992), Vec2(0.292309999, 0.447459996), Vec2(0.298299998, 0.468100011), Vec2(0.277520001, 0.448729992), Vec2(0.272599995, 0.427439988), Vec2(0.287420005, 0.426429987), Vec2(0.292309999, 0.447459996), Vec2(0.262470007, 0.449279994), Vec2(0.257569999, 0.427890003), Vec2(0.272599995, 0.427439988), Vec2(0.277520001, 0.448729992), Vec2(0.268220007, 0.470270008), Vec2(0.262470007, 0.449279994), Vec2(0.277520001, 0.448729992), Vec2(0.28343001, 0.469639987), Vec2(0.252840012, 0.470090002), Vec2(0.24729, 0.449220002), Vec2(0.262470007, 0.449279994), Vec2(0.268220007, 0.470270008), Vec2(0.24729, 0.449220002), Vec2(0.242430001, 0.427890003), Vec2(0.257569999, 0.427890003), Vec2(0.262470007, 0.449279994), Vec2(0.232130006, 0.448720008), Vec2(0.227300003, 0.427630007), Vec2(0.242430001, 0.427890003), Vec2(0.24729, 0.449220002), Vec2(0.237509996, 0.469260007), Vec2(0.232130006, 0.448720008), Vec2(0.24729, 0.449220002), Vec2(0.252840012, 0.470090002), Vec2(0.265329987, 0.510739982), Vec2(0.25891, 0.490559995), Vec2(0.27474001, 0.490909994), Vec2(0.281960011, 0.511309981), Vec2(0.25891, 0.490559995), Vec2(0.252840012, 0.470090002), Vec2(0.268220007, 0.470270008), Vec2(0.27474001, 0.490909994), Vec2(0.24312, 0.489289999), Vec2(0.237509996, 0.469260007), Vec2(0.252840012, 0.470090002), Vec2(0.25891, 0.490559995), Vec2(0.248649999, 0.508920014), Vec2(0.24312, 0.489289999), Vec2(0.25891, 0.490559995), Vec2(0.265329987, 0.510739982), Vec2(0.272599995, 0.427439988), Vec2(0.268700004, 0.405750006), Vec2(0.283609986, 0.405010015), Vec2(0.287420005, 0.426429987), Vec2(0.268700004, 0.405750006), Vec2(0.265859991, 0.383729994), Vec2(0.280889988, 0.383249998), Vec2(0.283609986, 0.405010015), Vec2(0.253609985, 0.406089991), Vec2(0.250699997, 0.383949995), Vec2(0.265859991, 0.383729994), Vec2(0.268700004, 0.405750006), Vec2(0.257569999, 0.427890003), Vec2(0.253609985, 0.406089991), Vec2(0.268700004, 0.405750006), Vec2(0.272599995, 0.427439988), Vec2(0.265859991, 0.383729994), Vec2(0.264149994, 0.361470014), Vec2(0.279269993, 0.361259997), Vec2(0.280889988, 0.383249998), Vec2(0.264149994, 0.361470014), Vec2(0.263590008, 0.33908999), Vec2(0.278759986, 0.339150012), Vec2(0.279269993, 0.361259997), Vec2(0.248919994, 0.361559987), Vec2(0.248319998, 0.339060009), Vec2(0.263590008, 0.33908999), Vec2(0.264149994, 0.361470014), Vec2(0.250699997, 0.383949995), Vec2(0.248919994, 0.361559987), Vec2(0.264149994, 0.361470014), Vec2(0.265859991, 0.383729994), Vec2(0.235469997, 0.383980006), Vec2(0.233620003, 0.361580014), Vec2(0.248919994, 0.361559987), Vec2(0.250699997, 0.383949995), Vec2(0.233620003, 0.361580014), Vec2(0.232999995, 0.339049995), Vec2(0.248319998, 0.339060009), Vec2(0.248919994, 0.361559987), Vec2(0.2183, 0.361570001), Vec2(0.217649996, 0.339060009), Vec2(0.232999995, 0.339049995), Vec2(0.233620003, 0.361580014), Vec2(0.220200002, 0.383929998), Vec2(0.2183, 0.361570001), Vec2(0.233620003, 0.361580014), Vec2(0.235469997, 0.383980006), Vec2(0.242430001, 0.427890003), Vec2(0.238440007, 0.406120002), Vec2(0.253609985, 0.406089991), Vec2(0.257569999, 0.427890003), Vec2(0.238440007, 0.406120002), Vec2(0.235469997, 0.383980006), Vec2(0.250699997, 0.383949995), Vec2(0.253609985, 0.406089991), Vec2(0.223250002, 0.405999988), Vec2(0.220200002, 0.383929998), Vec2(0.235469997, 0.383980006), Vec2(0.238440007, 0.406120002), Vec2(0.227300003, 0.427630007), Vec2(0.223250002, 0.405999988), Vec2(0.238440007, 0.406120002), Vec2(0.242430001, 0.427890003), Vec2(0.212249994, 0.427329987), Vec2(0.208090007, 0.405889988), Vec2(0.223250002, 0.405999988), Vec2(0.227300003, 0.427630007), Vec2(0.208090007, 0.405889988), Vec2(0.204940006, 0.383920014), Vec2(0.220200002, 0.383929998), Vec2(0.223250002, 0.405999988), Vec2(0.192990005, 0.406040013), Vec2(0.189659998, 0.384090006), Vec2(0.204940006, 0.383920014), Vec2(0.208090007, 0.405889988), Vec2(0.197369993, 0.427329987), Vec2(0.192990005, 0.406040013), Vec2(0.208090007, 0.405889988), Vec2(0.212249994, 0.427329987), Vec2(0.204940006, 0.383920014), Vec2(0.202959999, 0.361589998), Vec2(0.2183, 0.361570001), Vec2(0.220200002, 0.383929998), Vec2(0.202959999, 0.361589998), Vec2(0.202270001, 0.33908999), Vec2(0.217649996, 0.339060009), Vec2(0.2183, 0.361570001), Vec2(0.187570006, 0.361710012), Vec2(0.186849996, 0.339130014), Vec2(0.202270001, 0.33908999), Vec2(0.202959999, 0.361589998), Vec2(0.189659998, 0.384090006), Vec2(0.187570006, 0.361710012), Vec2(0.202959999, 0.361589998), Vec2(0.204940006, 0.383920014), Vec2(0.174319997, 0.384629995), Vec2(0.172079995, 0.362019986), Vec2(0.187570006, 0.361710012), Vec2(0.189659998, 0.384090006), Vec2(0.172079995, 0.362019986), Vec2(0.171299994, 0.339179993), Vec2(0.186849996, 0.339130014), Vec2(0.187570006, 0.361710012), Vec2(0.156379998, 0.362619996), Vec2(0.155520007, 0.339249998), Vec2(0.171299994, 0.339179993), Vec2(0.172079995, 0.362019986), Vec2(0.158830002, 0.385720015), Vec2(0.156379998, 0.362619996), Vec2(0.172079995, 0.362019986), Vec2(0.174319997, 0.384629995), Vec2(0.182659999, 0.428039998), Vec2(0.177900001, 0.406729996), Vec2(0.192990005, 0.406040013), Vec2(0.197369993, 0.427329987), Vec2(0.177900001, 0.406729996), Vec2(0.174319997, 0.384629995), Vec2(0.189659998, 0.384090006), Vec2(0.192990005, 0.406040013), Vec2(0.162780002, 0.408250004), Vec2(0.158830002, 0.385720015), Vec2(0.174319997, 0.384629995), Vec2(0.177900001, 0.406729996), Vec2(0.168099999, 0.429879993), Vec2(0.162780002, 0.408250004), Vec2(0.177900001, 0.406729996), Vec2(0.182659999, 0.428039998), Vec2(0.232360005, 0.506039977), Vec2(0.227699995, 0.487379998), Vec2(0.24312, 0.489289999), Vec2(0.248649999, 0.508920014), Vec2(0.227699995, 0.487379998), Vec2(0.222460002, 0.468100011), Vec2(0.237509996, 0.469260007), Vec2(0.24312, 0.489289999), Vec2(0.213090003, 0.485280007), Vec2(0.207969993, 0.467079997), Vec2(0.222460002, 0.468100011), Vec2(0.227699995, 0.487379998), Vec2(0.217020005, 0.502390027), Vec2(0.213090003, 0.485280007), Vec2(0.227699995, 0.487379998), Vec2(0.232360005, 0.506039977), Vec2(0.222460002, 0.468100011), Vec2(0.217160001, 0.448089987), Vec2(0.232130006, 0.448720008), Vec2(0.237509996, 0.469260007), Vec2(0.217160001, 0.448089987), Vec2(0.212249994, 0.427329987), Vec2(0.227300003, 0.427630007), Vec2(0.232130006, 0.448720008), Vec2(0.202509999, 0.447730005), Vec2(0.197369993, 0.427329987), Vec2(0.212249994, 0.427329987), Vec2(0.217160001, 0.448089987), Vec2(0.207969993, 0.467079997), Vec2(0.202509999, 0.447730005), Vec2(0.217160001, 0.448089987), Vec2(0.222460002, 0.468100011), Vec2(0.194309995, 0.466969997), Vec2(0.18829, 0.448229998), Vec2(0.202509999, 0.447730005), Vec2(0.207969993, 0.467079997), Vec2(0.18829, 0.448229998), Vec2(0.182659999, 0.428039998), Vec2(0.197369993, 0.427329987), Vec2(0.202509999, 0.447730005), Vec2(0.174510002, 0.450219989), Vec2(0.168099999, 0.429879993), Vec2(0.182659999, 0.428039998), Vec2(0.18829, 0.448229998), Vec2(0.181649998, 0.468769997), Vec2(0.174510002, 0.450219989), Vec2(0.18829, 0.448229998), Vec2(0.194309995, 0.466969997), Vec2(0.203470007, 0.498450011), Vec2(0.199880004, 0.483830005), Vec2(0.213090003, 0.485280007), Vec2(0.217020005, 0.502390027), Vec2(0.199880004, 0.483830005), Vec2(0.194309995, 0.466969997), Vec2(0.207969993, 0.467079997), Vec2(0.213090003, 0.485280007), Vec2(0.188820004, 0.484710008), Vec2(0.181649998, 0.468769997), Vec2(0.194309995, 0.466969997), Vec2(0.199880004, 0.483830005), Vec2(0.194230005, 0.495350003), Vec2(0.188820004, 0.484710008), Vec2(0.199880004, 0.483830005), Vec2(0.203470007, 0.498450011), Vec2(0.40823999, 0.214259997), Vec2(0.409579992, 0.225759998), Vec2(0.400180012, 0.226799995), Vec2(0.401600003, 0.218140006), Vec2(0.409579992, 0.225759998), Vec2(0.409310013, 0.23928), Vec2(0.398339987, 0.239610001), Vec2(0.400180012, 0.226799995), Vec2(0.420230001, 0.222589999), Vec2(0.420819998, 0.237360001), Vec2(0.409310013, 0.23928), Vec2(0.409579992, 0.225759998), Vec2(0.418190002, 0.208949998), Vec2(0.420230001, 0.222589999), Vec2(0.409579992, 0.225759998), Vec2(0.40823999, 0.214259997), Vec2(0.409310013, 0.23928), Vec2(0.40843001, 0.254330009), Vec2(0.396519989, 0.254370004), Vec2(0.398339987, 0.239610001), Vec2(0.40843001, 0.254330009), Vec2(0.407380015, 0.270489991), Vec2(0.394899994, 0.27037999), Vec2(0.396519989, 0.254370004), Vec2(0.420599997, 0.253129989), Vec2(0.42001, 0.269749999), Vec2(0.407380015, 0.270489991), Vec2(0.40843001, 0.254330009), Vec2(0.420819998, 0.237360001), Vec2(0.420599997, 0.253129989), Vec2(0.40843001, 0.254330009), Vec2(0.409310013, 0.23928), Vec2(0.432960004, 0.234589994), Vec2(0.433129996, 0.251199991), Vec2(0.420599997, 0.253129989), Vec2(0.420819998, 0.237360001), Vec2(0.433129996, 0.251199991), Vec2(0.432870001, 0.268429995), Vec2(0.42001, 0.269749999), Vec2(0.420599997, 0.253129989), Vec2(0.446029991, 0.248999998), Vec2(0.445980012, 0.266840011), Vec2(0.432870001, 0.268429995), Vec2(0.433129996, 0.251199991), Vec2(0.445679992, 0.23161), Vec2(0.446029991, 0.248999998), Vec2(0.433129996, 0.251199991), Vec2(0.432960004, 0.234589994), Vec2(0.429830015, 0.203459993), Vec2(0.432000011, 0.218669996), Vec2(0.420230001, 0.222589999), Vec2(0.418190002, 0.208949998), Vec2(0.432000011, 0.218669996), Vec2(0.432960004, 0.234589994), Vec2(0.420819998, 0.237360001), Vec2(0.420230001, 0.222589999), Vec2(0.444660008, 0.214709997), Vec2(0.445679992, 0.23161), Vec2(0.432960004, 0.234589994), Vec2(0.432000011, 0.218669996), Vec2(0.44264999, 0.198310003), Vec2(0.444660008, 0.214709997), Vec2(0.432000011, 0.218669996), Vec2(0.429830015, 0.203459993), Vec2(0.407380015, 0.270489991), Vec2(0.406410009, 0.287449986), Vec2(0.393559992, 0.28727001), Vec2(0.394899994, 0.27037999), Vec2(0.406410009, 0.287449986), Vec2(0.405629992, 0.304960012), Vec2(0.392560005, 0.304740012), Vec2(0.393559992, 0.28727001), Vec2(0.419349998, 0.287019998), Vec2(0.418760002, 0.304780006), Vec2(0.405629992, 0.304960012), Vec2(0.406410009, 0.287449986), Vec2(0.42001, 0.269749999), Vec2(0.419349998, 0.287019998), Vec2(0.406410009, 0.287449986), Vec2(0.407380015, 0.270489991), Vec2(0.405629992, 0.304960012), Vec2(0.405119985, 0.32280001), Vec2(0.391930014, 0.32258001), Vec2(0.392560005, 0.304740012), Vec2(0.405119985, 0.32280001), Vec2(0.404920012, 0.340810001), Vec2(0.391689986, 0.340579987), Vec2(0.391930014, 0.32258001), Vec2(0.418350011, 0.322829992), Vec2(0.418179989, 0.341030002), Vec2(0.404920012, 0.340810001), Vec2(0.405119985, 0.32280001), Vec2(0.418760002, 0.304780006), Vec2(0.418350011, 0.322829992), Vec2(0.405119985, 0.32280001), Vec2(0.405629992, 0.304960012), Vec2(0.432020009, 0.304309994), Vec2(0.431690007, 0.322710007), Vec2(0.418350011, 0.322829992), Vec2(0.418760002, 0.304780006), Vec2(0.431690007, 0.322710007), Vec2(0.431549996, 0.341219991), Vec2(0.418179989, 0.341030002), Vec2(0.418350011, 0.322829992), Vec2(0.445179999, 0.322490007), Vec2(0.445060015, 0.341390014), Vec2(0.431549996, 0.341219991), Vec2(0.431690007, 0.322710007), Vec2(0.445430011, 0.303689986), Vec2(0.445179999, 0.322490007), Vec2(0.431690007, 0.322710007), Vec2(0.432020009, 0.304309994), Vec2(0.432870001, 0.268429995), Vec2(0.432440013, 0.286170006), Vec2(0.419349998, 0.287019998), Vec2(0.42001, 0.269749999), Vec2(0.432440013, 0.286170006), Vec2(0.432020009, 0.304309994), Vec2(0.418760002, 0.304780006), Vec2(0.419349998, 0.287019998), Vec2(0.445730001, 0.285100013), Vec2(0.445430011, 0.303689986), Vec2(0.432020009, 0.304309994), Vec2(0.432440013, 0.286170006), Vec2(0.445980012, 0.266840011), Vec2(0.445730001, 0.285100013), Vec2(0.432440013, 0.286170006), Vec2(0.432870001, 0.268429995), Vec2(0.459340006, 0.265280008), Vec2(0.459210008, 0.284009993), Vec2(0.445730001, 0.285100013), Vec2(0.445980012, 0.266840011), Vec2(0.459210008, 0.284009993), Vec2(0.458999991, 0.30302), Vec2(0.445430011, 0.303689986), Vec2(0.445730001, 0.285100013), Vec2(0.472840011, 0.283050001), Vec2(0.472710013, 0.30241999), Vec2(0.458999991, 0.30302), Vec2(0.459210008, 0.284009993), Vec2(0.472909987, 0.263940006), Vec2(0.472840011, 0.283050001), Vec2(0.459210008, 0.284009993), Vec2(0.459340006, 0.265280008), Vec2(0.458999991, 0.30302), Vec2(0.458819985, 0.322230011), Vec2(0.445179999, 0.322490007), Vec2(0.445430011, 0.303689986), Vec2(0.458819985, 0.322230011), Vec2(0.458730012, 0.341520011), Vec2(0.445060015, 0.341390014), Vec2(0.445179999, 0.322490007), Vec2(0.472589999, 0.321969986), Vec2(0.472530007, 0.341619998), Vec2(0.458730012, 0.341520011), Vec2(0.458819985, 0.322230011), Vec2(0.472710013, 0.30241999), Vec2(0.472589999, 0.321969986), Vec2(0.458819985, 0.322230011), Vec2(0.458999991, 0.30302), Vec2(0.486530006, 0.301999986), Vec2(0.486470014, 0.32179001), Vec2(0.472589999, 0.321969986), Vec2(0.472710013, 0.30241999), Vec2(0.486470014, 0.32179001), Vec2(0.486429989, 0.341670007), Vec2(0.472530007, 0.341619998), Vec2(0.472589999, 0.321969986), Vec2(0.500389993, 0.321709991), Vec2(0.500389993, 0.341690004), Vec2(0.486429989, 0.341670007), Vec2(0.486470014, 0.32179001), Vec2(0.500389993, 0.301829994), Vec2(0.500389993, 0.321709991), Vec2(0.486470014, 0.32179001), Vec2(0.486530006, 0.301999986), Vec2(0.486620009, 0.263029993), Vec2(0.486589998, 0.282389998), Vec2(0.472840011, 0.283050001), Vec2(0.472909987, 0.263940006), Vec2(0.486589998, 0.282389998), Vec2(0.486530006, 0.301999986), Vec2(0.472710013, 0.30241999), Vec2(0.472840011, 0.283050001), Vec2(0.500389993, 0.282130003), Vec2(0.500389993, 0.301829994), Vec2(0.486530006, 0.301999986), Vec2(0.486589998, 0.282389998), Vec2(0.500389993, 0.26267001), Vec2(0.500389993, 0.282130003), Vec2(0.486589998, 0.282389998), Vec2(0.486620009, 0.263029993), Vec2(0.456360012, 0.193859994), Vec2(0.458009988, 0.21119), Vec2(0.444660008, 0.214709997), Vec2(0.44264999, 0.198310003), Vec2(0.458009988, 0.21119), Vec2(0.458920002, 0.228850007), Vec2(0.445679992, 0.23161), Vec2(0.444660008, 0.214709997), Vec2(0.471870005, 0.208409995), Vec2(0.472539991, 0.226630002), Vec2(0.458920002, 0.228850007), Vec2(0.458009988, 0.21119), Vec2(0.470699996, 0.190410003), Vec2(0.471870005, 0.208409995), Vec2(0.458009988, 0.21119), Vec2(0.456360012, 0.193859994), Vec2(0.458920002, 0.228850007), Vec2(0.459300011, 0.246879995), Vec2(0.446029991, 0.248999998), Vec2(0.445679992, 0.23161), Vec2(0.459300011, 0.246879995), Vec2(0.459340006, 0.265280008), Vec2(0.445980012, 0.266840011), Vec2(0.446029991, 0.248999998), Vec2(0.472840011, 0.245130002), Vec2(0.472909987, 0.263940006), Vec2(0.459340006, 0.265280008), Vec2(0.459300011, 0.246879995), Vec2(0.472539991, 0.226630002), Vec2(0.472840011, 0.245130002), Vec2(0.459300011, 0.246879995), Vec2(0.458920002, 0.228850007), Vec2(0.486409992, 0.225170001), Vec2(0.486570001, 0.243959993), Vec2(0.472840011, 0.245130002), Vec2(0.472539991, 0.226630002), Vec2(0.486570001, 0.243959993), Vec2(0.486620009, 0.263029993), Vec2(0.472909987, 0.263940006), Vec2(0.472840011, 0.245130002), Vec2(0.500389993, 0.243509993), Vec2(0.500389993, 0.26267001), Vec2(0.486620009, 0.263029993), Vec2(0.486570001, 0.243959993), Vec2(0.500389993, 0.224610001), Vec2(0.500389993, 0.243509993), Vec2(0.486570001, 0.243959993), Vec2(0.486409992, 0.225170001), Vec2(0.485439986, 0.188199997), Vec2(0.48605001, 0.206609994), Vec2(0.471870005, 0.208409995), Vec2(0.470699996, 0.190410003), Vec2(0.48605001, 0.206609994), Vec2(0.486409992, 0.225170001), Vec2(0.472539991, 0.226630002), Vec2(0.471870005, 0.208409995), Vec2(0.500389993, 0.205939993), Vec2(0.500389993, 0.224610001), Vec2(0.486409992, 0.225170001), Vec2(0.48605001, 0.206609994), Vec2(0.500389993, 0.187380001), Vec2(0.500389993, 0.205939993), Vec2(0.48605001, 0.206609994), Vec2(0.485439986, 0.188199997), Vec2(0.404920012, 0.340810001), Vec2(0.405030012, 0.358819991), Vec2(0.391840011, 0.358579993), Vec2(0.391689986, 0.340579987), Vec2(0.405030012, 0.358819991), Vec2(0.40546, 0.376670003), Vec2(0.392369986, 0.376419991), Vec2(0.391840011, 0.358579993), Vec2(0.418269992, 0.359230012), Vec2(0.418599993, 0.377279997), Vec2(0.40546, 0.376670003), Vec2(0.405030012, 0.358819991), Vec2(0.418179989, 0.341030002), Vec2(0.418269992, 0.359230012), Vec2(0.405030012, 0.358819991), Vec2(0.404920012, 0.340810001), Vec2(0.40546, 0.376670003), Vec2(0.40614, 0.39418), Vec2(0.393269986, 0.393909991), Vec2(0.392369986, 0.376419991), Vec2(0.40614, 0.39418), Vec2(0.407000005, 0.411139995), Vec2(0.394499987, 0.410809994), Vec2(0.393269986, 0.393909991), Vec2(0.419090003, 0.395029992), Vec2(0.419660002, 0.412299991), Vec2(0.407000005, 0.411139995), Vec2(0.40614, 0.39418), Vec2(0.418599993, 0.377279997), Vec2(0.419090003, 0.395029992), Vec2(0.40614, 0.39418), Vec2(0.40546, 0.376670003), Vec2(0.431870013, 0.378129989), Vec2(0.432209998, 0.396259993), Vec2(0.419090003, 0.395029992), Vec2(0.418599993, 0.377279997), Vec2(0.432209998, 0.396259993), Vec2(0.432550013, 0.413989991), Vec2(0.419660002, 0.412299991), Vec2(0.419090003, 0.395029992), Vec2(0.445520014, 0.397650003), Vec2(0.44569999, 0.415879995), Vec2(0.432550013, 0.413989991), Vec2(0.432209998, 0.396259993), Vec2(0.445289999, 0.379079998), Vec2(0.445520014, 0.397650003), Vec2(0.432209998, 0.396259993), Vec2(0.431870013, 0.378129989), Vec2(0.431549996, 0.341219991), Vec2(0.431620002, 0.359739989), Vec2(0.418269992, 0.359230012), Vec2(0.418179989, 0.341030002), Vec2(0.431620002, 0.359739989), Vec2(0.431870013, 0.378129989), Vec2(0.418599993, 0.377279997), Vec2(0.418269992, 0.359230012), Vec2(0.445109993, 0.360289991), Vec2(0.445289999, 0.379079998), Vec2(0.431870013, 0.378129989), Vec2(0.431620002, 0.359739989), Vec2(0.445060015, 0.341390014), Vec2(0.445109993, 0.360289991), Vec2(0.431620002, 0.359739989), Vec2(0.431549996, 0.341219991), Vec2(0.407000005, 0.411139995), Vec2(0.40794, 0.427300006), Vec2(0.395999998, 0.426840007), Vec2(0.394499987, 0.410809994), Vec2(0.40794, 0.427300006), Vec2(0.408710003, 0.442330003), Vec2(0.397700012, 0.441610008), Vec2(0.395999998, 0.426840007), Vec2(0.420139998, 0.42888999), Vec2(0.420249999, 0.44461), Vec2(0.408710003, 0.442330003), Vec2(0.40794, 0.427300006), Vec2(0.419660002, 0.412299991), Vec2(0.420139998, 0.42888999), Vec2(0.40794, 0.427300006), Vec2(0.407000005, 0.411139995), Vec2(0.408710003, 0.442330003), Vec2(0.408850014, 0.455799997), Vec2(0.399419993, 0.454439998), Vec2(0.397700012, 0.441610008), Vec2(0.408850014, 0.455799997), Vec2(0.407389998, 0.467159986), Vec2(0.400750011, 0.463099986), Vec2(0.399419993, 0.454439998), Vec2(0.419539988, 0.45927), Vec2(0.417360008, 0.472730011), Vec2(0.407389998, 0.467159986), Vec2(0.408850014, 0.455799997), Vec2(0.420249999, 0.44461), Vec2(0.419539988, 0.45927), Vec2(0.408850014, 0.455799997), Vec2(0.408710003, 0.442330003), Vec2(0.432429999, 0.447699994), Vec2(0.431360006, 0.463499993), Vec2(0.419539988, 0.45927), Vec2(0.420249999, 0.44461), Vec2(0.431360006, 0.463499993), Vec2(0.429049999, 0.478509992), Vec2(0.417360008, 0.472730011), Vec2(0.419539988, 0.45927), Vec2(0.444110006, 0.467729986), Vec2(0.441960007, 0.483940005), Vec2(0.429049999, 0.478509992), Vec2(0.431360006, 0.463499993), Vec2(0.445230007, 0.450969994), Vec2(0.444110006, 0.467729986), Vec2(0.431360006, 0.463499993), Vec2(0.432429999, 0.447699994), Vec2(0.432550013, 0.413989991), Vec2(0.432709992, 0.431169987), Vec2(0.420139998, 0.42888999), Vec2(0.419660002, 0.412299991), Vec2(0.432709992, 0.431169987), Vec2(0.432429999, 0.447699994), Vec2(0.420249999, 0.44461), Vec2(0.420139998, 0.42888999), Vec2(0.445670009, 0.433670014), Vec2(0.445230007, 0.450969994), Vec2(0.432429999, 0.447699994), Vec2(0.432709992, 0.431169987), Vec2(0.44569999, 0.415879995), Vec2(0.445670009, 0.433670014), Vec2(0.432709992, 0.431169987), Vec2(0.432550013, 0.413989991), Vec2(0.459109992, 0.417690009), Vec2(0.459010005, 0.43603), Vec2(0.445670009, 0.433670014), Vec2(0.44569999, 0.415879995), Vec2(0.459010005, 0.43603), Vec2(0.45855999, 0.453960001), Vec2(0.445230007, 0.450969994), Vec2(0.445670009, 0.433670014), Vec2(0.472640008, 0.437940001), Vec2(0.472290009, 0.456349999), Vec2(0.45855999, 0.453960001), Vec2(0.459010005, 0.43603), Vec2(0.472750008, 0.419200003), Vec2(0.472640008, 0.437940001), Vec2(0.459010005, 0.43603), Vec2(0.459109992, 0.417690009), Vec2(0.45855999, 0.453960001), Vec2(0.457569987, 0.471489996), Vec2(0.444110006, 0.467729986), Vec2(0.445230007, 0.450969994), Vec2(0.457569987, 0.471489996), Vec2(0.455799997, 0.488629997), Vec2(0.441960007, 0.483940005), Vec2(0.444110006, 0.467729986), Vec2(0.471569985, 0.474440008), Vec2(0.470310003, 0.492269993), Vec2(0.455799997, 0.488629997), Vec2(0.457569987, 0.471489996), Vec2(0.472290009, 0.456349999), Vec2(0.471569985, 0.474440008), Vec2(0.457569987, 0.471489996), Vec2(0.45855999, 0.453960001), Vec2(0.48627001, 0.457899988), Vec2(0.485900015, 0.476350009), Vec2(0.471569985, 0.474440008), Vec2(0.472290009, 0.456349999), Vec2(0.485900015, 0.476350009), Vec2(0.485249996, 0.494610012), Vec2(0.470310003, 0.492269993), Vec2(0.471569985, 0.474440008), Vec2(0.500389993, 0.476999998), Vec2(0.500389993, 0.49544999), Vec2(0.485249996, 0.494610012), Vec2(0.485900015, 0.476350009), Vec2(0.500389993, 0.458429992), Vec2(0.500389993, 0.476999998), Vec2(0.485900015, 0.476350009), Vec2(0.48627001, 0.457899988), Vec2(0.486530006, 0.42019999), Vec2(0.48646, 0.439200014), Vec2(0.472640008, 0.437940001), Vec2(0.472750008, 0.419200003), Vec2(0.48646, 0.439200014), Vec2(0.48627001, 0.457899988), Vec2(0.472290009, 0.456349999), Vec2(0.472640008, 0.437940001), Vec2(0.500389993, 0.439639986), Vec2(0.500389993, 0.458429992), Vec2(0.48627001, 0.457899988), Vec2(0.48646, 0.439200014), Vec2(0.500389993, 0.420549989), Vec2(0.500389993, 0.439639986), Vec2(0.48646, 0.439200014), Vec2(0.486530006, 0.42019999), Vec2(0.458730012, 0.341520011), Vec2(0.458759993, 0.360819995), Vec2(0.445109993, 0.360289991), Vec2(0.445060015, 0.341390014), Vec2(0.458759993, 0.360819995), Vec2(0.458889991, 0.380010009), Vec2(0.445289999, 0.379079998), Vec2(0.445109993, 0.360289991), Vec2(0.472550005, 0.361259997), Vec2(0.472629994, 0.380789995), Vec2(0.458889991, 0.380010009), Vec2(0.458759993, 0.360819995), Vec2(0.472530007, 0.341619998), Vec2(0.472550005, 0.361259997), Vec2(0.458759993, 0.360819995), Vec2(0.458730012, 0.341520011), Vec2(0.458889991, 0.380010009), Vec2(0.459039986, 0.398999989), Vec2(0.445520014, 0.397650003), Vec2(0.445289999, 0.379079998), Vec2(0.459039986, 0.398999989), Vec2(0.459109992, 0.417690009), Vec2(0.44569999, 0.415879995), Vec2(0.445520014, 0.397650003), Vec2(0.472719997, 0.400130004), Vec2(0.472750008, 0.419200003), Vec2(0.459109992, 0.417690009), Vec2(0.459039986, 0.398999989), Vec2(0.472629994, 0.380789995), Vec2(0.472719997, 0.400130004), Vec2(0.459039986, 0.398999989), Vec2(0.458889991, 0.380010009), Vec2(0.486479998, 0.38132), Vec2(0.486519992, 0.400889993), Vec2(0.472719997, 0.400130004), Vec2(0.472629994, 0.380789995), Vec2(0.486519992, 0.400889993), Vec2(0.486530006, 0.42019999), Vec2(0.472750008, 0.419200003), Vec2(0.472719997, 0.400130004), Vec2(0.500389993, 0.401169986), Vec2(0.500389993, 0.420549989), Vec2(0.486530006, 0.42019999), Vec2(0.486519992, 0.400889993), Vec2(0.500389993, 0.38150999), Vec2(0.500389993, 0.401169986), Vec2(0.486519992, 0.400889993), Vec2(0.486479998, 0.38132), Vec2(0.486429989, 0.341670007), Vec2(0.486440003, 0.361550003), Vec2(0.472550005, 0.361259997), Vec2(0.472530007, 0.341619998), Vec2(0.486440003, 0.361550003), Vec2(0.486479998, 0.38132), Vec2(0.472629994, 0.380789995), Vec2(0.472550005, 0.361259997), Vec2(0.500389993, 0.361660004), Vec2(0.500389993, 0.38150999), Vec2(0.486479998, 0.38132), Vec2(0.486440003, 0.361550003), Vec2(0.500389993, 0.341690004), Vec2(0.500389993, 0.361660004), Vec2(0.486440003, 0.361550003), Vec2(0.486429989, 0.341670007), Vec2(0.514370024, 0.34167999), Vec2(0.514360011, 0.361570001), Vec2(0.500389993, 0.361660004), Vec2(0.500389993, 0.341690004), Vec2(0.514360011, 0.361570001), Vec2(0.514310002, 0.381350011), Vec2(0.500389993, 0.38150999), Vec2(0.500389993, 0.361660004), Vec2(0.528249979, 0.36135), Vec2(0.528159976, 0.380919993), Vec2(0.514310002, 0.381350011), Vec2(0.514360011, 0.361570001), Vec2(0.52828002, 0.341670007), Vec2(0.528249979, 0.36135), Vec2(0.514360011, 0.361570001), Vec2(0.514370024, 0.34167999), Vec2(0.514310002, 0.381350011), Vec2(0.514259994, 0.400929987), Vec2(0.500389993, 0.401169986), Vec2(0.500389993, 0.38150999), Vec2(0.514259994, 0.400929987), Vec2(0.51424998, 0.420240015), Vec2(0.500389993, 0.420549989), Vec2(0.500389993, 0.401169986), Vec2(0.528069973, 0.400290012), Vec2(0.528020024, 0.419380009), Vec2(0.51424998, 0.420240015), Vec2(0.514259994, 0.400929987), Vec2(0.528159976, 0.380919993), Vec2(0.528069973, 0.400290012), Vec2(0.514259994, 0.400929987), Vec2(0.514310002, 0.381350011), Vec2(0.541880012, 0.380290002), Vec2(0.541719973, 0.399340004), Vec2(0.528069973, 0.400290012), Vec2(0.528159976, 0.380919993), Vec2(0.541719973, 0.399340004), Vec2(0.54163003, 0.418099999), Vec2(0.528020024, 0.419380009), Vec2(0.528069973, 0.400290012), Vec2(0.555180013, 0.398220003), Vec2(0.55497998, 0.41655001), Vec2(0.54163003, 0.418099999), Vec2(0.541719973, 0.399340004), Vec2(0.555419981, 0.379559994), Vec2(0.555180013, 0.398220003), Vec2(0.541719973, 0.399340004), Vec2(0.541880012, 0.380290002), Vec2(0.542050004, 0.341659993), Vec2(0.542010009, 0.361030012), Vec2(0.528249979, 0.36135), Vec2(0.52828002, 0.341670007), Vec2(0.542010009, 0.361030012), Vec2(0.541880012, 0.380290002), Vec2(0.528159976, 0.380919993), Vec2(0.528249979, 0.36135), Vec2(0.555599988, 0.360659987), Vec2(0.555419981, 0.379559994), Vec2(0.541880012, 0.380290002), Vec2(0.542010009, 0.361030012), Vec2(0.555649996, 0.341650009), Vec2(0.555599988, 0.360659987), Vec2(0.542010009, 0.361030012), Vec2(0.542050004, 0.341659993), Vec2(0.51424998, 0.420240015), Vec2(0.514299989, 0.439249992), Vec2(0.500389993, 0.439639986), Vec2(0.500389993, 0.420549989), Vec2(0.514299989, 0.439249992), Vec2(0.514469981, 0.457969993), Vec2(0.500389993, 0.458429992), Vec2(0.500389993, 0.439639986), Vec2(0.528110027, 0.438169986), Vec2(0.528419971, 0.456629992), Vec2(0.514469981, 0.457969993), Vec2(0.514299989, 0.439249992), Vec2(0.528020024, 0.419380009), Vec2(0.528110027, 0.438169986), Vec2(0.514299989, 0.439249992), Vec2(0.51424998, 0.420240015), Vec2(0.514469981, 0.457969993), Vec2(0.51481998, 0.476440012), Vec2(0.500389993, 0.476999998), Vec2(0.500389993, 0.458429992), Vec2(0.51481998, 0.476440012), Vec2(0.51542002, 0.494789988), Vec2(0.500389993, 0.49544999), Vec2(0.500389993, 0.476999998), Vec2(0.529079974, 0.474819988), Vec2(0.530219972, 0.492810011), Vec2(0.51542002, 0.494789988), Vec2(0.51481998, 0.476440012), Vec2(0.528419971, 0.456629992), Vec2(0.529079974, 0.474819988), Vec2(0.51481998, 0.476440012), Vec2(0.514469981, 0.457969993), Vec2(0.542089999, 0.454540014), Vec2(0.542980015, 0.472220004), Vec2(0.529079974, 0.474819988), Vec2(0.528419971, 0.456629992), Vec2(0.542980015, 0.472220004), Vec2(0.544579983, 0.489589989), Vec2(0.530219972, 0.492810011), Vec2(0.529079974, 0.474819988), Vec2(0.556349993, 0.468840003), Vec2(0.558290005, 0.485320002), Vec2(0.544579983, 0.489589989), Vec2(0.542980015, 0.472220004), Vec2(0.555329978, 0.451889992), Vec2(0.556349993, 0.468840003), Vec2(0.542980015, 0.472220004), Vec2(0.542089999, 0.454540014), Vec2(0.54163003, 0.418099999), Vec2(0.541700006, 0.436500013), Vec2(0.528110027, 0.438169986), Vec2(0.528020024, 0.419380009), Vec2(0.541700006, 0.436500013), Vec2(0.542089999, 0.454540014), Vec2(0.528419971, 0.456629992), Vec2(0.528110027, 0.438169986), Vec2(0.554970026, 0.434450001), Vec2(0.555329978, 0.451889992), Vec2(0.542089999, 0.454540014), Vec2(0.541700006, 0.436500013), Vec2(0.55497998, 0.41655001), Vec2(0.554970026, 0.434450001), Vec2(0.541700006, 0.436500013), Vec2(0.54163003, 0.418099999), Vec2(0.568040013, 0.414950013), Vec2(0.56783998, 0.43226999), Vec2(0.554970026, 0.434450001), Vec2(0.55497998, 0.41655001), Vec2(0.56783998, 0.43226999), Vec2(0.568040013, 0.44896999), Vec2(0.555329978, 0.451889992), Vec2(0.554970026, 0.434450001), Vec2(0.58029002, 0.430319995), Vec2(0.580110013, 0.446209997), Vec2(0.568040013, 0.44896999), Vec2(0.56783998, 0.43226999), Vec2(0.58081001, 0.41358), Vec2(0.58029002, 0.430319995), Vec2(0.56783998, 0.43226999), Vec2(0.568040013, 0.414950013), Vec2(0.568040013, 0.44896999), Vec2(0.568989992, 0.464980006), Vec2(0.556349993, 0.468840003), Vec2(0.555329978, 0.451889992), Vec2(0.568989992, 0.464980006), Vec2(0.571099997, 0.480280012), Vec2(0.558290005, 0.485320002), Vec2(0.556349993, 0.468840003), Vec2(0.580709994, 0.461080015), Vec2(0.582710028, 0.474830002), Vec2(0.571099997, 0.480280012), Vec2(0.568989992, 0.464980006), Vec2(0.580110013, 0.446209997), Vec2(0.580709994, 0.461080015), Vec2(0.568989992, 0.464980006), Vec2(0.568040013, 0.44896999), Vec2(0.591530025, 0.444249988), Vec2(0.591300011, 0.457899988), Vec2(0.580709994, 0.461080015), Vec2(0.580110013, 0.446209997), Vec2(0.591300011, 0.457899988), Vec2(0.592630029, 0.469500005), Vec2(0.582710028, 0.474830002), Vec2(0.580709994, 0.461080015), Vec2(0.600619972, 0.456800014), Vec2(0.599250019, 0.465579987), Vec2(0.592630029, 0.469500005), Vec2(0.591300011, 0.457899988), Vec2(0.602400005, 0.443830013), Vec2(0.600619972, 0.456800014), Vec2(0.591300011, 0.457899988), Vec2(0.591530025, 0.444249988), Vec2(0.593330026, 0.412739992), Vec2(0.59236002, 0.429049999), Vec2(0.58029002, 0.430319995), Vec2(0.58081001, 0.41358), Vec2(0.59236002, 0.429049999), Vec2(0.591530025, 0.444249988), Vec2(0.580110013, 0.446209997), Vec2(0.58029002, 0.430319995), Vec2(0.604139984, 0.428909987), Vec2(0.602400005, 0.443830013), Vec2(0.591530025, 0.444249988), Vec2(0.59236002, 0.429049999), Vec2(0.605679989, 0.412710011), Vec2(0.604139984, 0.428909987), Vec2(0.59236002, 0.429049999), Vec2(0.593330026, 0.412739992), Vec2(0.569060028, 0.341659993), Vec2(0.569000006, 0.360320002), Vec2(0.555599988, 0.360659987), Vec2(0.555649996, 0.341650009), Vec2(0.569000006, 0.360320002), Vec2(0.568759978, 0.378839999), Vec2(0.555419981, 0.379559994), Vec2(0.555599988, 0.360659987), Vec2(0.582220018, 0.360040009), Vec2(0.581900001, 0.378259987), Vec2(0.568759978, 0.378839999), Vec2(0.569000006, 0.360320002), Vec2(0.582300007, 0.34167999), Vec2(0.582220018, 0.360040009), Vec2(0.569000006, 0.360320002), Vec2(0.569060028, 0.341659993), Vec2(0.568759978, 0.378839999), Vec2(0.568400025, 0.397100002), Vec2(0.555180013, 0.398220003), Vec2(0.555419981, 0.379559994), Vec2(0.568400025, 0.397100002), Vec2(0.568040013, 0.414950013), Vec2(0.55497998, 0.41655001), Vec2(0.555180013, 0.398220003), Vec2(0.581399977, 0.396160007), Vec2(0.58081001, 0.41358), Vec2(0.568040013, 0.414950013), Vec2(0.568400025, 0.397100002), Vec2(0.581900001, 0.378259987), Vec2(0.581399977, 0.396160007), Vec2(0.568400025, 0.397100002), Vec2(0.568759978, 0.378839999), Vec2(0.594889998, 0.377929986), Vec2(0.594210029, 0.395610005), Vec2(0.581399977, 0.396160007), Vec2(0.581900001, 0.378259987), Vec2(0.594210029, 0.395610005), Vec2(0.593330026, 0.412739992), Vec2(0.58081001, 0.41358), Vec2(0.581399977, 0.396160007), Vec2(0.60690999, 0.395639986), Vec2(0.605679989, 0.412710011), Vec2(0.593330026, 0.412739992), Vec2(0.594210029, 0.395610005), Vec2(0.60781002, 0.37797001), Vec2(0.60690999, 0.395639986), Vec2(0.594210029, 0.395610005), Vec2(0.594889998, 0.377929986), Vec2(0.595399976, 0.341699988), Vec2(0.595300019, 0.359899998), Vec2(0.582220018, 0.360040009), Vec2(0.582300007, 0.34167999), Vec2(0.595300019, 0.359899998), Vec2(0.594889998, 0.377929986), Vec2(0.581900001, 0.378259987), Vec2(0.582220018, 0.360040009), Vec2(0.608319998, 0.359939992), Vec2(0.60781002, 0.37797001), Vec2(0.594889998, 0.377929986), Vec2(0.595300019, 0.359899998), Vec2(0.608460009, 0.341729999), Vec2(0.608319998, 0.359939992), Vec2(0.595300019, 0.359899998), Vec2(0.595399976, 0.341699988), Vec2(0.515349984, 0.188010007), Vec2(0.514750004, 0.20645), Vec2(0.500389993, 0.205939993), Vec2(0.500389993, 0.187380001), Vec2(0.514750004, 0.20645), Vec2(0.514400005, 0.225030005), Vec2(0.500389993, 0.224610001), Vec2(0.500389993, 0.205939993), Vec2(0.528930008, 0.208079994), Vec2(0.528270006, 0.226349995), Vec2(0.514400005, 0.225030005), Vec2(0.514750004, 0.20645), Vec2(0.530099988, 0.190019995), Vec2(0.528930008, 0.208079994), Vec2(0.514750004, 0.20645), Vec2(0.515349984, 0.188010007), Vec2(0.514400005, 0.225030005), Vec2(0.514230013, 0.243839994), Vec2(0.500389993, 0.243509993), Vec2(0.500389993, 0.224610001), Vec2(0.514230013, 0.243839994), Vec2(0.514190018, 0.26293999), Vec2(0.500389993, 0.26267001), Vec2(0.500389993, 0.243509993), Vec2(0.527970016, 0.244910002), Vec2(0.527899981, 0.263770014), Vec2(0.514190018, 0.26293999), Vec2(0.514230013, 0.243839994), Vec2(0.528270006, 0.226349995), Vec2(0.527970016, 0.244910002), Vec2(0.514230013, 0.243839994), Vec2(0.514400005, 0.225030005), Vec2(0.541869998, 0.22845), Vec2(0.541490018, 0.246560007), Vec2(0.527970016, 0.244910002), Vec2(0.528270006, 0.226349995), Vec2(0.541490018, 0.246560007), Vec2(0.54144001, 0.265049994), Vec2(0.527899981, 0.263770014), Vec2(0.527970016, 0.244910002), Vec2(0.554700017, 0.248630002), Vec2(0.554740012, 0.266600013), Vec2(0.54144001, 0.265049994), Vec2(0.541490018, 0.246560007), Vec2(0.555060029, 0.231140003), Vec2(0.554700017, 0.248630002), Vec2(0.541490018, 0.246560007), Vec2(0.541869998, 0.22845), Vec2(0.544420004, 0.193299994), Vec2(0.542779982, 0.210710004), Vec2(0.528930008, 0.208079994), Vec2(0.530099988, 0.190019995), Vec2(0.542779982, 0.210710004), Vec2(0.541869998, 0.22845), Vec2(0.528270006, 0.226349995), Vec2(0.528930008, 0.208079994), Vec2(0.556089997, 0.214139998), Vec2(0.555060029, 0.231140003), Vec2(0.541869998, 0.22845), Vec2(0.542779982, 0.210710004), Vec2(0.558099985, 0.19765), Vec2(0.556089997, 0.214139998), Vec2(0.542779982, 0.210710004), Vec2(0.544420004, 0.193299994), Vec2(0.514190018, 0.26293999), Vec2(0.514219999, 0.282319993), Vec2(0.500389993, 0.282130003), Vec2(0.500389993, 0.26267001), Vec2(0.514219999, 0.282319993), Vec2(0.514280021, 0.301959991), Vec2(0.500389993, 0.301829994), Vec2(0.500389993, 0.282130003), Vec2(0.527970016, 0.28294), Vec2(0.528100014, 0.302370012), Vec2(0.514280021, 0.301959991), Vec2(0.514219999, 0.282319993), Vec2(0.527899981, 0.263770014), Vec2(0.527970016, 0.28294), Vec2(0.514219999, 0.282319993), Vec2(0.514190018, 0.26293999), Vec2(0.514280021, 0.301959991), Vec2(0.514339983, 0.321770012), Vec2(0.500389993, 0.321709991), Vec2(0.500389993, 0.301829994), Vec2(0.514339983, 0.321770012), Vec2(0.514370024, 0.34167999), Vec2(0.500389993, 0.341690004), Vec2(0.500389993, 0.321709991), Vec2(0.528219998, 0.321969986), Vec2(0.52828002, 0.341670007), Vec2(0.514370024, 0.34167999), Vec2(0.514339983, 0.321770012), Vec2(0.528100014, 0.302370012), Vec2(0.528219998, 0.321969986), Vec2(0.514339983, 0.321770012), Vec2(0.514280021, 0.301959991), Vec2(0.541779995, 0.302980006), Vec2(0.541960001, 0.322270006), Vec2(0.528219998, 0.321969986), Vec2(0.528100014, 0.302370012), Vec2(0.541960001, 0.322270006), Vec2(0.542050004, 0.341659993), Vec2(0.52828002, 0.341670007), Vec2(0.528219998, 0.321969986), Vec2(0.555530012, 0.322629988), Vec2(0.555649996, 0.341650009), Vec2(0.542050004, 0.341659993), Vec2(0.541960001, 0.322270006), Vec2(0.55528003, 0.303710014), Vec2(0.555530012, 0.322629988), Vec2(0.541960001, 0.322270006), Vec2(0.541779995, 0.302980006), Vec2(0.54144001, 0.265049994), Vec2(0.541580021, 0.283870012), Vec2(0.527970016, 0.28294), Vec2(0.527899981, 0.263770014), Vec2(0.541580021, 0.283870012), Vec2(0.541779995, 0.302980006), Vec2(0.528100014, 0.302370012), Vec2(0.527970016, 0.28294), Vec2(0.55497998, 0.284990013), Vec2(0.55528003, 0.303710014), Vec2(0.541779995, 0.302980006), Vec2(0.541580021, 0.283870012), Vec2(0.554740012, 0.266600013), Vec2(0.55497998, 0.284990013), Vec2(0.541580021, 0.283870012), Vec2(0.54144001, 0.265049994), Vec2(0.567749977, 0.268229991), Vec2(0.568159997, 0.286139995), Vec2(0.55497998, 0.284990013), Vec2(0.554740012, 0.266600013), Vec2(0.568159997, 0.286139995), Vec2(0.568579972, 0.304439992), Vec2(0.55528003, 0.303710014), Vec2(0.55497998, 0.284990013), Vec2(0.581120014, 0.287120014), Vec2(0.581700027, 0.305070013), Vec2(0.568579972, 0.304439992), Vec2(0.568159997, 0.286139995), Vec2(0.58047998, 0.269659996), Vec2(0.581120014, 0.287120014), Vec2(0.568159997, 0.286139995), Vec2(0.567749977, 0.268229991), Vec2(0.568579972, 0.304439992), Vec2(0.568910003, 0.32299), Vec2(0.555530012, 0.322629988), Vec2(0.55528003, 0.303710014), Vec2(0.568910003, 0.32299), Vec2(0.569060028, 0.341659993), Vec2(0.555649996, 0.341650009), Vec2(0.555530012, 0.322629988), Vec2(0.582109988, 0.323300004), Vec2(0.582300007, 0.34167999), Vec2(0.569060028, 0.341659993), Vec2(0.568910003, 0.32299), Vec2(0.581700027, 0.305070013), Vec2(0.582109988, 0.323300004), Vec2(0.568910003, 0.32299), Vec2(0.568579972, 0.304439992), Vec2(0.594669998, 0.305449992), Vec2(0.595189989, 0.323500007), Vec2(0.582109988, 0.323300004), Vec2(0.581700027, 0.305070013), Vec2(0.595189989, 0.323500007), Vec2(0.595399976, 0.341699988), Vec2(0.582300007, 0.34167999), Vec2(0.582109988, 0.323300004), Vec2(0.608200014, 0.323529989), Vec2(0.608460009, 0.341729999), Vec2(0.595399976, 0.341699988), Vec2(0.595189989, 0.323500007), Vec2(0.607569993, 0.305489987), Vec2(0.608200014, 0.323529989), Vec2(0.595189989, 0.323500007), Vec2(0.594669998, 0.305449992), Vec2(0.59296, 0.270579994), Vec2(0.593900025, 0.287739992), Vec2(0.581120014, 0.287120014), Vec2(0.58047998, 0.269659996), Vec2(0.593900025, 0.287739992), Vec2(0.594669998, 0.305449992), Vec2(0.581700027, 0.305070013), Vec2(0.581120014, 0.287120014), Vec2(0.606580019, 0.287800014), Vec2(0.607569993, 0.305489987), Vec2(0.594669998, 0.305449992), Vec2(0.593900025, 0.287739992), Vec2(0.605279982, 0.270709991), Vec2(0.606580019, 0.287800014), Vec2(0.593900025, 0.287739992), Vec2(0.59296, 0.270579994), Vec2(0.570869982, 0.202779993), Vec2(0.568690002, 0.21807), Vec2(0.556089997, 0.214139998), Vec2(0.558099985, 0.19765), Vec2(0.568690002, 0.21807), Vec2(0.567719996, 0.234109998), Vec2(0.555060029, 0.231140003), Vec2(0.556089997, 0.214139998), Vec2(0.580380023, 0.222039998), Vec2(0.579750001, 0.236929998), Vec2(0.567719996, 0.234109998), Vec2(0.568690002, 0.21807), Vec2(0.582449973, 0.208340004), Vec2(0.580380023, 0.222039998), Vec2(0.568690002, 0.21807), Vec2(0.570869982, 0.202779993), Vec2(0.567719996, 0.234109998), Vec2(0.567520022, 0.250849992), Vec2(0.554700017, 0.248630002), Vec2(0.555060029, 0.231140003), Vec2(0.567520022, 0.250849992), Vec2(0.567749977, 0.268229991), Vec2(0.554740012, 0.266600013), Vec2(0.554700017, 0.248630002), Vec2(0.579930007, 0.25286001), Vec2(0.58047998, 0.269659996), Vec2(0.567749977, 0.268229991), Vec2(0.567520022, 0.250849992), Vec2(0.579750001, 0.236929998), Vec2(0.579930007, 0.25286001), Vec2(0.567520022, 0.250849992), Vec2(0.567719996, 0.234109998), Vec2(0.591139972, 0.238989994), Vec2(0.591960013, 0.254220009), Vec2(0.579930007, 0.25286001), Vec2(0.579750001, 0.236929998), Vec2(0.591960013, 0.254220009), Vec2(0.59296, 0.270579994), Vec2(0.58047998, 0.269659996), Vec2(0.579930007, 0.25286001), Vec2(0.603709996, 0.254489988), Vec2(0.605279982, 0.270709991), Vec2(0.59296, 0.270579994), Vec2(0.591960013, 0.254220009), Vec2(0.601979971, 0.239529997), Vec2(0.603709996, 0.254489988), Vec2(0.591960013, 0.254220009), Vec2(0.591139972, 0.238989994), Vec2(0.592339993, 0.213760003), Vec2(0.590939999, 0.225309998), Vec2(0.580380023, 0.222039998), Vec2(0.582449973, 0.208340004), Vec2(0.590939999, 0.225309998), Vec2(0.591139972, 0.238989994), Vec2(0.579750001, 0.236929998), Vec2(0.580380023, 0.222039998), Vec2(0.600239992, 0.226530001), Vec2(0.601979971, 0.239529997), Vec2(0.591139972, 0.238989994), Vec2(0.590939999, 0.225309998), Vec2(0.598919988, 0.217739999), Vec2(0.600239992, 0.226530001), Vec2(0.590939999, 0.225309998), Vec2(0.592339993, 0.213760003), Vec2(0.604160011, 0.213080004), Vec2(0.609080017, 0.224439994), Vec2(0.600239992, 0.226530001), Vec2(0.598919988, 0.217739999), Vec2(0.609080017, 0.224439994), Vec2(0.612609982, 0.238089994), Vec2(0.601979971, 0.239529997), Vec2(0.600239992, 0.226530001), Vec2(0.618579984, 0.220070004), Vec2(0.623449981, 0.234990001), Vec2(0.612609982, 0.238089994), Vec2(0.609080017, 0.224439994), Vec2(0.612079978, 0.206560001), Vec2(0.618579984, 0.220070004), Vec2(0.609080017, 0.224439994), Vec2(0.604160011, 0.213080004), Vec2(0.612609982, 0.238089994), Vec2(0.615369976, 0.253399998), Vec2(0.603709996, 0.254489988), Vec2(0.601979971, 0.239529997), Vec2(0.615369976, 0.253399998), Vec2(0.617569983, 0.269879997), Vec2(0.605279982, 0.270709991), Vec2(0.603709996, 0.254489988), Vec2(0.627149999, 0.251120001), Vec2(0.629980028, 0.268189996), Vec2(0.617569983, 0.269879997), Vec2(0.615369976, 0.253399998), Vec2(0.623449981, 0.234990001), Vec2(0.627149999, 0.251120001), Vec2(0.615369976, 0.253399998), Vec2(0.612609982, 0.238089994), Vec2(0.634760022, 0.230949998), Vec2(0.639219999, 0.248050004), Vec2(0.627149999, 0.251120001), Vec2(0.623449981, 0.234990001), Vec2(0.639219999, 0.248050004), Vec2(0.642620027, 0.265899986), Vec2(0.629980028, 0.268189996), Vec2(0.627149999, 0.251120001), Vec2(0.651730001, 0.244619995), Vec2(0.655610025, 0.263289988), Vec2(0.642620027, 0.265899986), Vec2(0.639219999, 0.248050004), Vec2(0.646690011, 0.226569995), Vec2(0.651730001, 0.244619995), Vec2(0.639219999, 0.248050004), Vec2(0.634760022, 0.230949998), Vec2(0.621510029, 0.199560001), Vec2(0.628970027, 0.214750007), Vec2(0.618579984, 0.220070004), Vec2(0.612079978, 0.206560001), Vec2(0.628970027, 0.214750007), Vec2(0.634760022, 0.230949998), Vec2(0.623449981, 0.234990001), Vec2(0.618579984, 0.220070004), Vec2(0.640259981, 0.209220007), Vec2(0.646690011, 0.226569995), Vec2(0.634760022, 0.230949998), Vec2(0.628970027, 0.214750007), Vec2(0.632189989, 0.192650005), Vec2(0.640259981, 0.209220007), Vec2(0.628970027, 0.214750007), Vec2(0.621510029, 0.199560001), Vec2(0.617569983, 0.269879997), Vec2(0.619279981, 0.287209988), Vec2(0.606580019, 0.287800014), Vec2(0.605279982, 0.270709991), Vec2(0.619279981, 0.287209988), Vec2(0.620509982, 0.305099994), Vec2(0.607569993, 0.305489987), Vec2(0.606580019, 0.287800014), Vec2(0.632099986, 0.286000013), Vec2(0.633580029, 0.304329991), Vec2(0.620509982, 0.305099994), Vec2(0.619279981, 0.287209988), Vec2(0.629980028, 0.268189996), Vec2(0.632099986, 0.286000013), Vec2(0.619279981, 0.287209988), Vec2(0.617569983, 0.269879997), Vec2(0.620509982, 0.305099994), Vec2(0.621259987, 0.323350012), Vec2(0.608200014, 0.323529989), Vec2(0.607569993, 0.305489987), Vec2(0.621259987, 0.323350012), Vec2(0.621559978, 0.341769993), Vec2(0.608460009, 0.341729999), Vec2(0.608200014, 0.323529989), Vec2(0.63448, 0.32299), Vec2(0.634819984, 0.341800004), Vec2(0.621559978, 0.341769993), Vec2(0.621259987, 0.323350012), Vec2(0.633580029, 0.304329991), Vec2(0.63448, 0.32299), Vec2(0.621259987, 0.323350012), Vec2(0.620509982, 0.305099994), Vec2(0.646889985, 0.303279996), Vec2(0.647930026, 0.322479993), Vec2(0.63448, 0.32299), Vec2(0.633580029, 0.304329991), Vec2(0.647930026, 0.322479993), Vec2(0.648320019, 0.341820002), Vec2(0.634819984, 0.341800004), Vec2(0.63448, 0.32299), Vec2(0.661679983, 0.321880013), Vec2(0.662109971, 0.341839999), Vec2(0.648320019, 0.341820002), Vec2(0.647930026, 0.322479993), Vec2(0.660489976, 0.302049994), Vec2(0.661679983, 0.321880013), Vec2(0.647930026, 0.322479993), Vec2(0.646889985, 0.303279996), Vec2(0.642620027, 0.265899986), Vec2(0.645139992, 0.284359992), Vec2(0.632099986, 0.286000013), Vec2(0.629980028, 0.268189996), Vec2(0.645139992, 0.284359992), Vec2(0.646889985, 0.303279996), Vec2(0.633580029, 0.304329991), Vec2(0.632099986, 0.286000013), Vec2(0.658490002, 0.282469988), Vec2(0.660489976, 0.302049994), Vec2(0.646889985, 0.303279996), Vec2(0.645139992, 0.284359992), Vec2(0.655610025, 0.263289988), Vec2(0.658490002, 0.282469988), Vec2(0.645139992, 0.284359992), Vec2(0.642620027, 0.265899986), Vec2(0.668990016, 0.260639995), Vec2(0.672190011, 0.280519992), Vec2(0.658490002, 0.282469988), Vec2(0.655610025, 0.263289988), Vec2(0.672190011, 0.280519992), Vec2(0.674409986, 0.300760001), Vec2(0.660489976, 0.302049994), Vec2(0.658490002, 0.282469988), Vec2(0.686230004, 0.278679997), Vec2(0.688660026, 0.299529999), Vec2(0.674409986, 0.300760001), Vec2(0.672190011, 0.280519992), Vec2(0.682789981, 0.258159995), Vec2(0.686230004, 0.278679997), Vec2(0.672190011, 0.280519992), Vec2(0.668990016, 0.260639995), Vec2(0.674409986, 0.300760001), Vec2(0.675740004, 0.321240008), Vec2(0.661679983, 0.321880013), Vec2(0.660489976, 0.302049994), Vec2(0.675740004, 0.321240008), Vec2(0.67622, 0.341839999), Vec2(0.662109971, 0.341839999), Vec2(0.661679983, 0.321880013), Vec2(0.690119982, 0.320630014), Vec2(0.690649986, 0.341839999), Vec2(0.67622, 0.341839999), Vec2(0.675740004, 0.321240008), Vec2(0.688660026, 0.299529999), Vec2(0.690119982, 0.320630014), Vec2(0.675740004, 0.321240008), Vec2(0.674409986, 0.300760001), Vec2(0.703209996, 0.29846999), Vec2(0.704789996, 0.320089996), Vec2(0.690119982, 0.320630014), Vec2(0.688660026, 0.299529999), Vec2(0.704789996, 0.320089996), Vec2(0.705359995, 0.341829985), Vec2(0.690649986, 0.341839999), Vec2(0.690119982, 0.320630014), Vec2(0.719709992, 0.319680005), Vec2(0.720319986, 0.341809988), Vec2(0.705359995, 0.341829985), Vec2(0.704789996, 0.320089996), Vec2(0.718029976, 0.297670007), Vec2(0.719709992, 0.319680005), Vec2(0.704789996, 0.320089996), Vec2(0.703209996, 0.29846999), Vec2(0.696969986, 0.256069988), Vec2(0.700609982, 0.277099997), Vec2(0.686230004, 0.278679997), Vec2(0.682789981, 0.258159995), Vec2(0.700609982, 0.277099997), Vec2(0.703209996, 0.29846999), Vec2(0.688660026, 0.299529999), Vec2(0.686230004, 0.278679997), Vec2(0.71529001, 0.275920004), Vec2(0.718029976, 0.297670007), Vec2(0.703209996, 0.29846999), Vec2(0.700609982, 0.277099997), Vec2(0.711520016, 0.254500002), Vec2(0.71529001, 0.275920004), Vec2(0.700609982, 0.277099997), Vec2(0.696969986, 0.256069988), Vec2(0.643999994, 0.186210006), Vec2(0.652450025, 0.203940004), Vec2(0.640259981, 0.209220007), Vec2(0.632189989, 0.192650005), Vec2(0.652450025, 0.203940004), Vec2(0.659280002, 0.222289994), Vec2(0.646690011, 0.226569995), Vec2(0.640259981, 0.209220007), Vec2(0.665480018, 0.199249998), Vec2(0.672529995, 0.218419999), Vec2(0.659280002, 0.222289994), Vec2(0.652450025, 0.203940004), Vec2(0.656889975, 0.180539995), Vec2(0.665480018, 0.199249998), Vec2(0.652450025, 0.203940004), Vec2(0.643999994, 0.186210006), Vec2(0.659280002, 0.222289994), Vec2(0.664730012, 0.2412), Vec2(0.651730001, 0.244619995), Vec2(0.646690011, 0.226569995), Vec2(0.664730012, 0.2412), Vec2(0.668990016, 0.260639995), Vec2(0.655610025, 0.263289988), Vec2(0.651730001, 0.244619995), Vec2(0.678250015, 0.238059998), Vec2(0.682789981, 0.258159995), Vec2(0.668990016, 0.260639995), Vec2(0.664730012, 0.2412), Vec2(0.672529995, 0.218419999), Vec2(0.678250015, 0.238059998), Vec2(0.664730012, 0.2412), Vec2(0.659280002, 0.222289994), Vec2(0.686399996, 0.215200007), Vec2(0.692260027, 0.235430002), Vec2(0.678250015, 0.238059998), Vec2(0.672529995, 0.218419999), Vec2(0.692260027, 0.235430002), Vec2(0.696969986, 0.256069988), Vec2(0.682789981, 0.258159995), Vec2(0.678250015, 0.238059998), Vec2(0.706700027, 0.233459994), Vec2(0.711520016, 0.254500002), Vec2(0.696969986, 0.256069988), Vec2(0.692260027, 0.235430002), Vec2(0.700839996, 0.212830007), Vec2(0.706700027, 0.233459994), Vec2(0.692260027, 0.235430002), Vec2(0.686399996, 0.215200007), Vec2(0.670799971, 0.175909996), Vec2(0.679310024, 0.195380002), Vec2(0.665480018, 0.199249998), Vec2(0.656889975, 0.180539995), Vec2(0.679310024, 0.195380002), Vec2(0.686399996, 0.215200007), Vec2(0.672529995, 0.218419999), Vec2(0.665480018, 0.199249998), Vec2(0.693859994, 0.192540005), Vec2(0.700839996, 0.212830007), Vec2(0.686399996, 0.215200007), Vec2(0.679310024, 0.195380002), Vec2(0.685660005, 0.172519997), Vec2(0.693859994, 0.192540005), Vec2(0.679310024, 0.195380002), Vec2(0.670799971, 0.175909996), Vec2(0.621559978, 0.341769993), Vec2(0.621389985, 0.360179991), Vec2(0.608319998, 0.359939992), Vec2(0.608460009, 0.341729999), Vec2(0.621389985, 0.360179991), Vec2(0.62075001, 0.378430009), Vec2(0.60781002, 0.37797001), Vec2(0.608319998, 0.359939992), Vec2(0.634609997, 0.360610008), Vec2(0.633840024, 0.379260004), Vec2(0.62075001, 0.378430009), Vec2(0.621389985, 0.360179991), Vec2(0.634819984, 0.341800004), Vec2(0.634609997, 0.360610008), Vec2(0.621389985, 0.360179991), Vec2(0.621559978, 0.341769993), Vec2(0.62075001, 0.378430009), Vec2(0.619620025, 0.396319985), Vec2(0.60690999, 0.395639986), Vec2(0.60781002, 0.37797001), Vec2(0.619620025, 0.396319985), Vec2(0.617980003, 0.413639992), Vec2(0.605679989, 0.412710011), Vec2(0.60690999, 0.395639986), Vec2(0.632449985, 0.397599995), Vec2(0.630400002, 0.415399998), Vec2(0.617980003, 0.413639992), Vec2(0.619620025, 0.396319985), Vec2(0.633840024, 0.379260004), Vec2(0.632449985, 0.397599995), Vec2(0.619620025, 0.396319985), Vec2(0.62075001, 0.378430009), Vec2(0.64714998, 0.380369991), Vec2(0.645500004, 0.399289995), Vec2(0.632449985, 0.397599995), Vec2(0.633840024, 0.379260004), Vec2(0.645500004, 0.399289995), Vec2(0.643050015, 0.417750001), Vec2(0.630400002, 0.415399998), Vec2(0.632449985, 0.397599995), Vec2(0.658850014, 0.40121001), Vec2(0.656040013, 0.420399994), Vec2(0.643050015, 0.417750001), Vec2(0.645500004, 0.399289995), Vec2(0.660749972, 0.381630003), Vec2(0.658850014, 0.40121001), Vec2(0.645500004, 0.399289995), Vec2(0.64714998, 0.380369991), Vec2(0.648320019, 0.341820002), Vec2(0.648069978, 0.36116001), Vec2(0.634609997, 0.360610008), Vec2(0.634819984, 0.341800004), Vec2(0.648069978, 0.36116001), Vec2(0.64714998, 0.380369991), Vec2(0.633840024, 0.379260004), Vec2(0.634609997, 0.360610008), Vec2(0.661809981, 0.361799985), Vec2(0.660749972, 0.381630003), Vec2(0.64714998, 0.380369991), Vec2(0.648069978, 0.36116001), Vec2(0.662109971, 0.341839999), Vec2(0.661809981, 0.361799985), Vec2(0.648069978, 0.36116001), Vec2(0.648320019, 0.341820002), Vec2(0.617980003, 0.413639992), Vec2(0.615819991, 0.430110008), Vec2(0.604139984, 0.428909987), Vec2(0.605679989, 0.412710011), Vec2(0.615819991, 0.430110008), Vec2(0.613049984, 0.445389986), Vec2(0.602400005, 0.443830013), Vec2(0.604139984, 0.428909987), Vec2(0.627600014, 0.432469994), Vec2(0.623899996, 0.448570013), Vec2(0.613049984, 0.445389986), Vec2(0.615819991, 0.430110008), Vec2(0.630400002, 0.415399998), Vec2(0.627600014, 0.432469994), Vec2(0.615819991, 0.430110008), Vec2(0.617980003, 0.413639992), Vec2(0.613049984, 0.445389986), Vec2(0.60947001, 0.458999991), Vec2(0.600619972, 0.456800014), Vec2(0.602400005, 0.443830013), Vec2(0.60947001, 0.458999991), Vec2(0.604449987, 0.47025001), Vec2(0.599250019, 0.465579987), Vec2(0.600619972, 0.456800014), Vec2(0.618969977, 0.463429987), Vec2(0.612360001, 0.476819992), Vec2(0.604449987, 0.47025001), Vec2(0.60947001, 0.458999991), Vec2(0.623899996, 0.448570013), Vec2(0.618969977, 0.463429987), Vec2(0.60947001, 0.458999991), Vec2(0.613049984, 0.445389986), Vec2(0.635219991, 0.452659994), Vec2(0.629369974, 0.468800008), Vec2(0.618969977, 0.463429987), Vec2(0.623899996, 0.448570013), Vec2(0.629369974, 0.468800008), Vec2(0.621800005, 0.483859986), Vec2(0.612360001, 0.476819992), Vec2(0.618969977, 0.463429987), Vec2(0.640680015, 0.474359989), Vec2(0.632510006, 0.490810007), Vec2(0.621800005, 0.483859986), Vec2(0.629369974, 0.468800008), Vec2(0.64714998, 0.457069993), Vec2(0.640680015, 0.474359989), Vec2(0.629369974, 0.468800008), Vec2(0.635219991, 0.452659994), Vec2(0.643050015, 0.417750001), Vec2(0.639680028, 0.435589999), Vec2(0.627600014, 0.432469994), Vec2(0.630400002, 0.415399998), Vec2(0.639680028, 0.435589999), Vec2(0.635219991, 0.452659994), Vec2(0.623899996, 0.448570013), Vec2(0.627600014, 0.432469994), Vec2(0.652199984, 0.439049989), Vec2(0.64714998, 0.457069993), Vec2(0.635219991, 0.452659994), Vec2(0.639680028, 0.435589999), Vec2(0.656040013, 0.420399994), Vec2(0.652199984, 0.439049989), Vec2(0.639680028, 0.435589999), Vec2(0.643050015, 0.417750001), Vec2(0.669430017, 0.42306), Vec2(0.665210009, 0.442490011), Vec2(0.652199984, 0.439049989), Vec2(0.656040013, 0.420399994), Vec2(0.665210009, 0.442490011), Vec2(0.659759998, 0.461369991), Vec2(0.64714998, 0.457069993), Vec2(0.652199984, 0.439049989), Vec2(0.678749979, 0.44562), Vec2(0.673039973, 0.465229988), Vec2(0.659759998, 0.461369991), Vec2(0.665210009, 0.442490011), Vec2(0.683239996, 0.425529987), Vec2(0.678749979, 0.44562), Vec2(0.665210009, 0.442490011), Vec2(0.669430017, 0.42306), Vec2(0.659759998, 0.461369991), Vec2(0.652890027, 0.479649991), Vec2(0.640680015, 0.474359989), Vec2(0.64714998, 0.457069993), Vec2(0.652890027, 0.479649991), Vec2(0.644360006, 0.497269988), Vec2(0.632510006, 0.490810007), Vec2(0.640680015, 0.474359989), Vec2(0.665960014, 0.484349996), Vec2(0.657299995, 0.502950013), Vec2(0.644360006, 0.497269988), Vec2(0.652890027, 0.479649991), Vec2(0.673039973, 0.465229988), Vec2(0.665960014, 0.484349996), Vec2(0.652890027, 0.479649991), Vec2(0.659759998, 0.461369991), Vec2(0.686940014, 0.468430012), Vec2(0.679830015, 0.488200009), Vec2(0.665960014, 0.484349996), Vec2(0.673039973, 0.465229988), Vec2(0.679830015, 0.488200009), Vec2(0.671270013, 0.507589996), Vec2(0.657299995, 0.502950013), Vec2(0.665960014, 0.484349996), Vec2(0.694429994, 0.491030008), Vec2(0.686190009, 0.51098001), Vec2(0.671270013, 0.507589996), Vec2(0.679830015, 0.488200009), Vec2(0.701409996, 0.470789999), Vec2(0.694429994, 0.491030008), Vec2(0.679830015, 0.488200009), Vec2(0.686940014, 0.468430012), Vec2(0.697440028, 0.42761001), Vec2(0.692780018, 0.448240012), Vec2(0.678749979, 0.44562), Vec2(0.683239996, 0.425529987), Vec2(0.692780018, 0.448240012), Vec2(0.686940014, 0.468430012), Vec2(0.673039973, 0.465229988), Vec2(0.678749979, 0.44562), Vec2(0.707249999, 0.45017001), Vec2(0.701409996, 0.470789999), Vec2(0.686940014, 0.468430012), Vec2(0.692780018, 0.448240012), Vec2(0.712010026, 0.429140002), Vec2(0.707249999, 0.45017001), Vec2(0.692780018, 0.448240012), Vec2(0.697440028, 0.42761001), Vec2(0.67622, 0.341839999), Vec2(0.675880015, 0.36243999), Vec2(0.661809981, 0.361799985), Vec2(0.662109971, 0.341839999), Vec2(0.675880015, 0.36243999), Vec2(0.674679995, 0.382930011), Vec2(0.660749972, 0.381630003), Vec2(0.661809981, 0.361799985), Vec2(0.690259993, 0.363059998), Vec2(0.688929975, 0.384149998), Vec2(0.674679995, 0.382930011), Vec2(0.675880015, 0.36243999), Vec2(0.690649986, 0.341839999), Vec2(0.690259993, 0.363059998), Vec2(0.675880015, 0.36243999), Vec2(0.67622, 0.341839999), Vec2(0.674679995, 0.382930011), Vec2(0.672550023, 0.403180003), Vec2(0.658850014, 0.40121001), Vec2(0.660749972, 0.381630003), Vec2(0.672550023, 0.403180003), Vec2(0.669430017, 0.42306), Vec2(0.656040013, 0.420399994), Vec2(0.658850014, 0.40121001), Vec2(0.686609983, 0.405010015), Vec2(0.683239996, 0.425529987), Vec2(0.669430017, 0.42306), Vec2(0.672550023, 0.403180003), Vec2(0.688929975, 0.384149998), Vec2(0.686609983, 0.405010015), Vec2(0.672550023, 0.403180003), Vec2(0.674679995, 0.382930011), Vec2(0.703480005, 0.38519001), Vec2(0.700999975, 0.406569988), Vec2(0.686609983, 0.405010015), Vec2(0.688929975, 0.384149998), Vec2(0.700999975, 0.406569988), Vec2(0.697440028, 0.42761001), Vec2(0.683239996, 0.425529987), Vec2(0.686609983, 0.405010015), Vec2(0.715690017, 0.40772), Vec2(0.712010026, 0.429140002), Vec2(0.697440028, 0.42761001), Vec2(0.700999975, 0.406569988), Vec2(0.718309999, 0.385960013), Vec2(0.715690017, 0.40772), Vec2(0.700999975, 0.406569988), Vec2(0.703480005, 0.38519001), Vec2(0.705359995, 0.341829985), Vec2(0.704930007, 0.363570005), Vec2(0.690259993, 0.363059998), Vec2(0.690649986, 0.341839999), Vec2(0.704930007, 0.363570005), Vec2(0.703480005, 0.38519001), Vec2(0.688929975, 0.384149998), Vec2(0.690259993, 0.363059998), Vec2(0.719850004, 0.363950014), Vec2(0.718309999, 0.385960013), Vec2(0.703480005, 0.38519001), Vec2(0.704930007, 0.363570005), Vec2(0.720319986, 0.341809988), Vec2(0.719850004, 0.363950014), Vec2(0.704930007, 0.363570005), Vec2(0.705359995, 0.341829985), Vec2(0.735469997, 0.341789991), Vec2(0.734979987, 0.364160001), Vec2(0.719850004, 0.363950014), Vec2(0.720319986, 0.341809988), Vec2(0.734979987, 0.364160001), Vec2(0.733349979, 0.386409998), Vec2(0.718309999, 0.385960013), Vec2(0.719850004, 0.363950014), Vec2(0.750240028, 0.364219993), Vec2(0.748560011, 0.386559993), Vec2(0.733349979, 0.386409998), Vec2(0.734979987, 0.364160001), Vec2(0.750760019, 0.34176001), Vec2(0.750240028, 0.364219993), Vec2(0.734979987, 0.364160001), Vec2(0.735469997, 0.341789991), Vec2(0.733349979, 0.386409998), Vec2(0.730639994, 0.408399999), Vec2(0.715690017, 0.40772), Vec2(0.718309999, 0.385960013), Vec2(0.730639994, 0.408399999), Vec2(0.726880014, 0.430059999), Vec2(0.712010026, 0.429140002), Vec2(0.715690017, 0.40772), Vec2(0.745779991, 0.408650011), Vec2(0.741980016, 0.43039), Vec2(0.726880014, 0.430059999), Vec2(0.730639994, 0.408399999), Vec2(0.748560011, 0.386559993), Vec2(0.745779991, 0.408650011), Vec2(0.730639994, 0.408399999), Vec2(0.733349979, 0.386409998), Vec2(0.763859987, 0.386510015), Vec2(0.761030018, 0.408580005), Vec2(0.745779991, 0.408650011), Vec2(0.748560011, 0.386559993), Vec2(0.761030018, 0.408580005), Vec2(0.757200003, 0.430269986), Vec2(0.741980016, 0.43039), Vec2(0.745779991, 0.408650011), Vec2(0.776319981, 0.408340007), Vec2(0.772440016, 0.429879993), Vec2(0.757200003, 0.430269986), Vec2(0.761030018, 0.408580005), Vec2(0.779209971, 0.386370003), Vec2(0.776319981, 0.408340007), Vec2(0.761030018, 0.408580005), Vec2(0.763859987, 0.386510015), Vec2(0.766129971, 0.341720015), Vec2(0.765590012, 0.364190012), Vec2(0.750240028, 0.364219993), Vec2(0.750760019, 0.34176001), Vec2(0.765590012, 0.364190012), Vec2(0.763859987, 0.386510015), Vec2(0.748560011, 0.386559993), Vec2(0.750240028, 0.364219993), Vec2(0.780990005, 0.364100009), Vec2(0.779209971, 0.386370003), Vec2(0.763859987, 0.386510015), Vec2(0.765590012, 0.364190012), Vec2(0.78154999, 0.341690004), Vec2(0.780990005, 0.364100009), Vec2(0.765590012, 0.364190012), Vec2(0.766129971, 0.341720015), Vec2(0.726880014, 0.430059999), Vec2(0.722109973, 0.451330006), Vec2(0.707249999, 0.45017001), Vec2(0.712010026, 0.429140002), Vec2(0.722109973, 0.451330006), Vec2(0.716369987, 0.472200006), Vec2(0.701409996, 0.470789999), Vec2(0.707249999, 0.45017001), Vec2(0.73724997, 0.451739997), Vec2(0.73168999, 0.472680002), Vec2(0.716369987, 0.472200006), Vec2(0.722109973, 0.451330006), Vec2(0.741980016, 0.43039), Vec2(0.73724997, 0.451739997), Vec2(0.722109973, 0.451330006), Vec2(0.726880014, 0.430059999), Vec2(0.716369987, 0.472200006), Vec2(0.709670007, 0.492729992), Vec2(0.694429994, 0.491030008), Vec2(0.701409996, 0.470789999), Vec2(0.709670007, 0.492729992), Vec2(0.701950014, 0.513010025), Vec2(0.686190009, 0.51098001), Vec2(0.694429994, 0.491030008), Vec2(0.725380003, 0.493279994), Vec2(0.718360007, 0.513629973), Vec2(0.701950014, 0.513010025), Vec2(0.709670007, 0.492729992), Vec2(0.73168999, 0.472680002), Vec2(0.725380003, 0.493279994), Vec2(0.709670007, 0.492729992), Vec2(0.716369987, 0.472200006), Vec2(0.747179985, 0.472339988), Vec2(0.741330028, 0.492760003), Vec2(0.725380003, 0.493279994), Vec2(0.73168999, 0.472680002), Vec2(0.741330028, 0.492760003), Vec2(0.73514998, 0.512889981), Vec2(0.718360007, 0.513629973), Vec2(0.725380003, 0.493279994), Vec2(0.757239997, 0.491329998), Vec2(0.751950026, 0.510909975), Vec2(0.73514998, 0.512889981), Vec2(0.741330028, 0.492760003), Vec2(0.762629986, 0.471359998), Vec2(0.757239997, 0.491329998), Vec2(0.741330028, 0.492760003), Vec2(0.747179985, 0.472339988), Vec2(0.757200003, 0.430269986), Vec2(0.752529979, 0.45153001), Vec2(0.73724997, 0.451739997), Vec2(0.741980016, 0.43039), Vec2(0.752529979, 0.45153001), Vec2(0.747179985, 0.472339988), Vec2(0.73168999, 0.472680002), Vec2(0.73724997, 0.451739997), Vec2(0.76779002, 0.450899988), Vec2(0.762629986, 0.471359998), Vec2(0.747179985, 0.472339988), Vec2(0.752529979, 0.45153001), Vec2(0.772440016, 0.429879993), Vec2(0.76779002, 0.450899988), Vec2(0.752529979, 0.45153001), Vec2(0.757200003, 0.430269986), Vec2(0.787599981, 0.429459989), Vec2(0.782880008, 0.450129986), Vec2(0.76779002, 0.450899988), Vec2(0.772440016, 0.429879993), Vec2(0.782880008, 0.450129986), Vec2(0.777769983, 0.470059991), Vec2(0.762629986, 0.471359998), Vec2(0.76779002, 0.450899988), Vec2(0.79764998, 0.449660003), Vec2(0.792360008, 0.468919992), Vec2(0.777769983, 0.470059991), Vec2(0.782880008, 0.450129986), Vec2(0.802619994, 0.429349989), Vec2(0.79764998, 0.449660003), Vec2(0.782880008, 0.450129986), Vec2(0.787599981, 0.429459989), Vec2(0.777769983, 0.470059991), Vec2(0.77275002, 0.489270002), Vec2(0.757239997, 0.491329998), Vec2(0.762629986, 0.471359998), Vec2(0.77275002, 0.489270002), Vec2(0.768320024, 0.5079), Vec2(0.751950026, 0.510909975), Vec2(0.757239997, 0.491329998), Vec2(0.787419975, 0.487049997), Vec2(0.783689976, 0.504140019), Vec2(0.768320024, 0.5079), Vec2(0.77275002, 0.489270002), Vec2(0.792360008, 0.468919992), Vec2(0.787419975, 0.487049997), Vec2(0.77275002, 0.489270002), Vec2(0.777769983, 0.470059991), Vec2(0.806129992, 0.468719989), Vec2(0.800689995, 0.485509992), Vec2(0.787419975, 0.487049997), Vec2(0.792360008, 0.468919992), Vec2(0.800689995, 0.485509992), Vec2(0.797230005, 0.500100017), Vec2(0.783689976, 0.504140019), Vec2(0.787419975, 0.487049997), Vec2(0.811839998, 0.486330003), Vec2(0.806450009, 0.496930003), Vec2(0.797230005, 0.500100017), Vec2(0.800689995, 0.485509992), Vec2(0.81892997, 0.470479995), Vec2(0.811839998, 0.486330003), Vec2(0.800689995, 0.485509992), Vec2(0.806129992, 0.468719989), Vec2(0.817470014, 0.429969996), Vec2(0.81200999, 0.450069994), Vec2(0.79764998, 0.449660003), Vec2(0.802619994, 0.429349989), Vec2(0.81200999, 0.450069994), Vec2(0.806129992, 0.468719989), Vec2(0.792360008, 0.468919992), Vec2(0.79764998, 0.449660003), Vec2(0.825929999, 0.452010006), Vec2(0.81892997, 0.470479995), Vec2(0.806129992, 0.468719989), Vec2(0.81200999, 0.450069994), Vec2(0.832189977, 0.431739986), Vec2(0.825929999, 0.452010006), Vec2(0.81200999, 0.450069994), Vec2(0.817470014, 0.429969996), Vec2(0.797010005, 0.341650009), Vec2(0.796429992, 0.364039987), Vec2(0.780990005, 0.364100009), Vec2(0.78154999, 0.341690004), Vec2(0.796429992, 0.364039987), Vec2(0.794589996, 0.386260003), Vec2(0.779209971, 0.386370003), Vec2(0.780990005, 0.364100009), Vec2(0.811930001, 0.364069998), Vec2(0.809989989, 0.386330009), Vec2(0.794589996, 0.386260003), Vec2(0.796429992, 0.364039987), Vec2(0.812529981, 0.341610014), Vec2(0.811930001, 0.364069998), Vec2(0.796429992, 0.364039987), Vec2(0.797010005, 0.341650009), Vec2(0.794589996, 0.386260003), Vec2(0.791589975, 0.408120006), Vec2(0.776319981, 0.408340007), Vec2(0.779209971, 0.386370003), Vec2(0.791589975, 0.408120006), Vec2(0.787599981, 0.429459989), Vec2(0.772440016, 0.429879993), Vec2(0.776319981, 0.408340007), Vec2(0.806829989, 0.408170015), Vec2(0.802619994, 0.429349989), Vec2(0.787599981, 0.429459989), Vec2(0.791589975, 0.408120006), Vec2(0.809989989, 0.386330009), Vec2(0.806829989, 0.408170015), Vec2(0.791589975, 0.408120006), Vec2(0.794589996, 0.386260003), Vec2(0.825460017, 0.38677001), Vec2(0.822049975, 0.408760011), Vec2(0.806829989, 0.408170015), Vec2(0.809989989, 0.386330009), Vec2(0.822049975, 0.408760011), Vec2(0.817470014, 0.429969996), Vec2(0.802619994, 0.429349989), Vec2(0.806829989, 0.408170015), Vec2(0.83732003, 0.410189986), Vec2(0.832189977, 0.431739986), Vec2(0.817470014, 0.429969996), Vec2(0.822049975, 0.408760011), Vec2(0.841090024, 0.38775), Vec2(0.83732003, 0.410189986), Vec2(0.822049975, 0.408760011), Vec2(0.825460017, 0.38677001), Vec2(0.828180015, 0.341560006), Vec2(0.82753998, 0.364279985), Vec2(0.811930001, 0.364069998), Vec2(0.812529981, 0.341610014), Vec2(0.82753998, 0.364279985), Vec2(0.825460017, 0.38677001), Vec2(0.809989989, 0.386330009), Vec2(0.811930001, 0.364069998), Vec2(0.843360007, 0.364749998), Vec2(0.841090024, 0.38775), Vec2(0.825460017, 0.38677001), Vec2(0.82753998, 0.364279985), Vec2(0.844060004, 0.341500014), Vec2(0.843360007, 0.364749998), Vec2(0.82753998, 0.364279985), Vec2(0.828180015, 0.341560006), Vec2(0.701359987, 0.170489997), Vec2(0.70905, 0.190830007), Vec2(0.693859994, 0.192540005), Vec2(0.685660005, 0.172519997), Vec2(0.70905, 0.190830007), Vec2(0.715759993, 0.211380005), Vec2(0.700839996, 0.212830007), Vec2(0.693859994, 0.192540005), Vec2(0.724709988, 0.190249994), Vec2(0.731040001, 0.210859999), Vec2(0.715759993, 0.211380005), Vec2(0.70905, 0.190830007), Vec2(0.717710018, 0.169870004), Vec2(0.724709988, 0.190249994), Vec2(0.70905, 0.190830007), Vec2(0.701359987, 0.170489997), Vec2(0.715759993, 0.211380005), Vec2(0.721539974, 0.232270002), Vec2(0.706700027, 0.233459994), Vec2(0.700839996, 0.212830007), Vec2(0.721539974, 0.232270002), Vec2(0.726369977, 0.253540009), Vec2(0.711520016, 0.254500002), Vec2(0.706700027, 0.233459994), Vec2(0.73664999, 0.231810004), Vec2(0.741460025, 0.253149986), Vec2(0.726369977, 0.253540009), Vec2(0.721539974, 0.232270002), Vec2(0.731040001, 0.210859999), Vec2(0.73664999, 0.231810004), Vec2(0.721539974, 0.232270002), Vec2(0.715759993, 0.211380005), Vec2(0.746500015, 0.211160004), Vec2(0.751909971, 0.231959999), Vec2(0.73664999, 0.231810004), Vec2(0.731040001, 0.210859999), Vec2(0.751909971, 0.231959999), Vec2(0.756659985, 0.253210008), Vec2(0.741460025, 0.253149986), Vec2(0.73664999, 0.231810004), Vec2(0.767149985, 0.232529998), Vec2(0.771889985, 0.253529996), Vec2(0.756659985, 0.253210008), Vec2(0.751909971, 0.231959999), Vec2(0.761910021, 0.212080002), Vec2(0.767149985, 0.232529998), Vec2(0.751909971, 0.231959999), Vec2(0.746500015, 0.211160004), Vec2(0.734449983, 0.170599997), Vec2(0.740620017, 0.190740004), Vec2(0.724709988, 0.190249994), Vec2(0.717710018, 0.169870004), Vec2(0.740620017, 0.190740004), Vec2(0.746500015, 0.211160004), Vec2(0.731040001, 0.210859999), Vec2(0.724709988, 0.190249994), Vec2(0.756479979, 0.192129999), Vec2(0.761910021, 0.212080002), Vec2(0.746500015, 0.211160004), Vec2(0.740620017, 0.190740004), Vec2(0.751190007, 0.172560006), Vec2(0.756479979, 0.192129999), Vec2(0.740620017, 0.190740004), Vec2(0.734449983, 0.170599997), Vec2(0.726369977, 0.253540009), Vec2(0.730229974, 0.275189996), Vec2(0.71529001, 0.275920004), Vec2(0.711520016, 0.254500002), Vec2(0.730229974, 0.275189996), Vec2(0.733070016, 0.297179997), Vec2(0.718029976, 0.297670007), Vec2(0.71529001, 0.275920004), Vec2(0.745360017, 0.274879992), Vec2(0.748260021, 0.296959996), Vec2(0.733070016, 0.297179997), Vec2(0.730229974, 0.275189996), Vec2(0.741460025, 0.253149986), Vec2(0.745360017, 0.274879992), Vec2(0.730229974, 0.275189996), Vec2(0.726369977, 0.253540009), Vec2(0.733070016, 0.297179997), Vec2(0.734830022, 0.31942001), Vec2(0.719709992, 0.319680005), Vec2(0.718029976, 0.297670007), Vec2(0.734830022, 0.31942001), Vec2(0.735469997, 0.341789991), Vec2(0.720319986, 0.341809988), Vec2(0.719709992, 0.319680005), Vec2(0.750090003, 0.319290012), Vec2(0.750760019, 0.34176001), Vec2(0.735469997, 0.341789991), Vec2(0.734830022, 0.31942001), Vec2(0.748260021, 0.296959996), Vec2(0.750090003, 0.319290012), Vec2(0.734830022, 0.31942001), Vec2(0.733070016, 0.297179997), Vec2(0.763559997, 0.296950012), Vec2(0.765439987, 0.319270015), Vec2(0.750090003, 0.319290012), Vec2(0.748260021, 0.296959996), Vec2(0.765439987, 0.319270015), Vec2(0.766129971, 0.341720015), Vec2(0.750760019, 0.34176001), Vec2(0.750090003, 0.319290012), Vec2(0.78083998, 0.319279999), Vec2(0.78154999, 0.341690004), Vec2(0.766129971, 0.341720015), Vec2(0.765439987, 0.319270015), Vec2(0.778909981, 0.297019988), Vec2(0.78083998, 0.319279999), Vec2(0.765439987, 0.319270015), Vec2(0.763559997, 0.296950012), Vec2(0.756659985, 0.253210008), Vec2(0.760599971, 0.274890006), Vec2(0.745360017, 0.274879992), Vec2(0.741460025, 0.253149986), Vec2(0.760599971, 0.274890006), Vec2(0.763559997, 0.296950012), Vec2(0.748260021, 0.296959996), Vec2(0.745360017, 0.274879992), Vec2(0.775870025, 0.275059998), Vec2(0.778909981, 0.297019988), Vec2(0.763559997, 0.296950012), Vec2(0.760599971, 0.274890006), Vec2(0.771889985, 0.253529996), Vec2(0.775870025, 0.275059998), Vec2(0.760599971, 0.274890006), Vec2(0.756659985, 0.253210008), Vec2(0.787029982, 0.253879994), Vec2(0.791130006, 0.275200009), Vec2(0.775870025, 0.275059998), Vec2(0.771889985, 0.253529996), Vec2(0.791130006, 0.275200009), Vec2(0.794269979, 0.297049999), Vec2(0.778909981, 0.297019988), Vec2(0.775870025, 0.275059998), Vec2(0.806349993, 0.275079995), Vec2(0.809660017, 0.296900004), Vec2(0.794269979, 0.297049999), Vec2(0.791130006, 0.275200009), Vec2(0.802020013, 0.253919989), Vec2(0.806349993, 0.275079995), Vec2(0.791130006, 0.275200009), Vec2(0.787029982, 0.253879994), Vec2(0.794269979, 0.297049999), Vec2(0.796270013, 0.319260001), Vec2(0.78083998, 0.319279999), Vec2(0.778909981, 0.297019988), Vec2(0.796270013, 0.319260001), Vec2(0.797010005, 0.341650009), Vec2(0.78154999, 0.341690004), Vec2(0.78083998, 0.319279999), Vec2(0.811760008, 0.319150001), Vec2(0.812529981, 0.341610014), Vec2(0.797010005, 0.341650009), Vec2(0.796270013, 0.319260001), Vec2(0.809660017, 0.296900004), Vec2(0.811760008, 0.319150001), Vec2(0.796270013, 0.319260001), Vec2(0.794269979, 0.297049999), Vec2(0.825110018, 0.29637), Vec2(0.82735002, 0.318839997), Vec2(0.811760008, 0.319150001), Vec2(0.809660017, 0.296900004), Vec2(0.82735002, 0.318839997), Vec2(0.828180015, 0.341560006), Vec2(0.812529981, 0.341610014), Vec2(0.811760008, 0.319150001), Vec2(0.843159974, 0.31825), Vec2(0.844060004, 0.341500014), Vec2(0.828180015, 0.341560006), Vec2(0.82735002, 0.318839997), Vec2(0.840709984, 0.29528001), Vec2(0.843159974, 0.31825), Vec2(0.82735002, 0.318839997), Vec2(0.825110018, 0.29637), Vec2(0.816829979, 0.253230006), Vec2(0.821539998, 0.274399996), Vec2(0.806349993, 0.275079995), Vec2(0.802020013, 0.253919989), Vec2(0.821539998, 0.274399996), Vec2(0.825110018, 0.29637), Vec2(0.809660017, 0.296900004), Vec2(0.806349993, 0.275079995), Vec2(0.836769998, 0.272879988), Vec2(0.840709984, 0.29528001), Vec2(0.825110018, 0.29637), Vec2(0.821539998, 0.274399996), Vec2(0.831499994, 0.251370013), Vec2(0.836769998, 0.272879988), Vec2(0.821539998, 0.274399996), Vec2(0.816829979, 0.253230006), Vec2(0.767509997, 0.175549999), Vec2(0.77196002, 0.194130003), Vec2(0.756479979, 0.192129999), Vec2(0.751190007, 0.172560006), Vec2(0.77196002, 0.194130003), Vec2(0.777029991, 0.213320002), Vec2(0.761910021, 0.212080002), Vec2(0.756479979, 0.192129999), Vec2(0.786610007, 0.196290001), Vec2(0.791599989, 0.214389995), Vec2(0.777029991, 0.213320002), Vec2(0.77196002, 0.194130003), Vec2(0.782850027, 0.179260001), Vec2(0.786610007, 0.196290001), Vec2(0.77196002, 0.194130003), Vec2(0.767509997, 0.175549999), Vec2(0.777029991, 0.213320002), Vec2(0.782209992, 0.233229995), Vec2(0.767149985, 0.232529998), Vec2(0.761910021, 0.212080002), Vec2(0.782209992, 0.233229995), Vec2(0.787029982, 0.253879994), Vec2(0.771889985, 0.253529996), Vec2(0.767149985, 0.232529998), Vec2(0.796949983, 0.233630002), Vec2(0.802020013, 0.253919989), Vec2(0.787029982, 0.253879994), Vec2(0.782209992, 0.233229995), Vec2(0.791599989, 0.214389995), Vec2(0.796949983, 0.233630002), Vec2(0.782209992, 0.233229995), Vec2(0.777029991, 0.213320002), Vec2(0.805339992, 0.214530006), Vec2(0.811269999, 0.233150005), Vec2(0.796949983, 0.233630002), Vec2(0.791599989, 0.214389995), Vec2(0.811269999, 0.233150005), Vec2(0.816829979, 0.253230006), Vec2(0.802020013, 0.253919989), Vec2(0.796949983, 0.233630002), Vec2(0.825139999, 0.23116), Vec2(0.831499994, 0.251370013), Vec2(0.816829979, 0.253230006), Vec2(0.811269999, 0.233150005), Vec2(0.818069994, 0.212720007), Vec2(0.825139999, 0.23116), Vec2(0.811269999, 0.233150005), Vec2(0.805339992, 0.214530006), Vec2(0.796360016, 0.183239996), Vec2(0.799860001, 0.19777), Vec2(0.786610007, 0.196290001), Vec2(0.782850027, 0.179260001), Vec2(0.799860001, 0.19777), Vec2(0.805339992, 0.214530006), Vec2(0.791599989, 0.214389995), Vec2(0.786610007, 0.196290001), Vec2(0.810959995, 0.196899995), Vec2(0.818069994, 0.212720007), Vec2(0.805339992, 0.214530006), Vec2(0.799860001, 0.19777), Vec2(0.805589974, 0.186350003), Vec2(0.810959995, 0.196899995), Vec2(0.799860001, 0.19777), Vec2(0.796360016, 0.183239996), Vec2(0.190329999, 0.175870001), Vec2(0.203549996, 0.166720003), Vec2(0.203339994, 0.180059999), Vec2(0.194059998, 0.183160007), Vec2(0.203549996, 0.166720003), Vec2(0.219060004, 0.159769997), Vec2(0.216959998, 0.176129997), Vec2(0.203339994, 0.180059999), Vec2(0.201140001, 0.152940005), Vec2(0.219300002, 0.143490002), Vec2(0.219060004, 0.159769997), Vec2(0.203549996, 0.166720003), Vec2(0.184719995, 0.165069997), Vec2(0.201140001, 0.152940005), Vec2(0.203549996, 0.166720003), Vec2(0.190329999, 0.175870001), Vec2(0.219060004, 0.159769997), Vec2(0.23612, 0.154369995), Vec2(0.232409999, 0.172529995), Vec2(0.216959998, 0.176129997), Vec2(0.23612, 0.154369995), Vec2(0.254070014, 0.150460005), Vec2(0.248820007, 0.169729993), Vec2(0.232409999, 0.172529995), Vec2(0.23872, 0.136319995), Vec2(0.258879989, 0.131229997), Vec2(0.254070014, 0.150460005), Vec2(0.23612, 0.154369995), Vec2(0.219300002, 0.143490002), Vec2(0.23872, 0.136319995), Vec2(0.23612, 0.154369995), Vec2(0.219060004, 0.159769997), Vec2(0.218099996, 0.126959994), Vec2(0.240309998, 0.118160002), Vec2(0.23872, 0.136319995), Vec2(0.219300002, 0.143490002), Vec2(0.240309998, 0.118160002), Vec2(0.263280004, 0.111900002), Vec2(0.258879989, 0.131229997), Vec2(0.23872, 0.136319995), Vec2(0.240970001, 0.0997700021), Vec2(0.267230004, 0.0923700035), Vec2(0.263280004, 0.111900002), Vec2(0.240309998, 0.118160002), Vec2(0.215719998, 0.110040002), Vec2(0.240970001, 0.0997700021), Vec2(0.240309998, 0.118160002), Vec2(0.218099996, 0.126959994), Vec2(0.177990004, 0.152649999), Vec2(0.197170004, 0.138410002), Vec2(0.201140001, 0.152940005), Vec2(0.184719995, 0.165069997), Vec2(0.197170004, 0.138410002), Vec2(0.218099996, 0.126959994), Vec2(0.219300002, 0.143490002), Vec2(0.201140001, 0.152940005), Vec2(0.192000002, 0.123149998), Vec2(0.215719998, 0.110040002), Vec2(0.218099996, 0.126959994), Vec2(0.197170004, 0.138410002), Vec2(0.17024, 0.139139995), Vec2(0.192000002, 0.123149998), Vec2(0.197170004, 0.138410002), Vec2(0.177990004, 0.152649999), Vec2(0.254070014, 0.150460005), Vec2(0.272329986, 0.14813), Vec2(0.265639991, 0.168019995), Vec2(0.248820007, 0.169729993), Vec2(0.272329986, 0.14813), Vec2(0.290410012, 0.147479996), Vec2(0.282409996, 0.167600006), Vec2(0.265639991, 0.168019995), Vec2(0.279229999, 0.128209993), Vec2(0.299199998, 0.127309993), Vec2(0.290410012, 0.147479996), Vec2(0.272329986, 0.14813), Vec2(0.258879989, 0.131229997), Vec2(0.279229999, 0.128209993), Vec2(0.272329986, 0.14813), Vec2(0.254070014, 0.150460005), Vec2(0.290410012, 0.147479996), Vec2(0.307880014, 0.148560002), Vec2(0.298799992, 0.168559998), Vec2(0.282409996, 0.167600006), Vec2(0.307880014, 0.148560002), Vec2(0.324429989, 0.151360005), Vec2(0.314539999, 0.170929998), Vec2(0.298799992, 0.168559998), Vec2(0.31825, 0.128549993), Vec2(0.335970014, 0.131889999), Vec2(0.324429989, 0.151360005), Vec2(0.307880014, 0.148560002), Vec2(0.299199998, 0.127309993), Vec2(0.31825, 0.128549993), Vec2(0.307880014, 0.148560002), Vec2(0.290410012, 0.147479996), Vec2(0.308959991, 0.106980003), Vec2(0.330220014, 0.108429998), Vec2(0.31825, 0.128549993), Vec2(0.299199998, 0.127309993), Vec2(0.330220014, 0.108429998), Vec2(0.349559993, 0.112450004), Vec2(0.335970014, 0.131889999), Vec2(0.31825, 0.128549993), Vec2(0.344199985, 0.0881799981), Vec2(0.365759999, 0.0930700004), Vec2(0.349559993, 0.112450004), Vec2(0.330220014, 0.108429998), Vec2(0.319869995, 0.0864500031), Vec2(0.344199985, 0.0881799981), Vec2(0.330220014, 0.108429998), Vec2(0.308959991, 0.106980003), Vec2(0.263280004, 0.111900002), Vec2(0.28639999, 0.108149998), Vec2(0.279229999, 0.128209993), Vec2(0.258879989, 0.131229997), Vec2(0.28639999, 0.108149998), Vec2(0.308959991, 0.106980003), Vec2(0.299199998, 0.127309993), Vec2(0.279229999, 0.128209993), Vec2(0.293839991, 0.0878800005), Vec2(0.319869995, 0.0864500031), Vec2(0.308959991, 0.106980003), Vec2(0.28639999, 0.108149998), Vec2(0.267230004, 0.0923700035), Vec2(0.293839991, 0.0878800005), Vec2(0.28639999, 0.108149998), Vec2(0.263280004, 0.111900002), Vec2(0.270520002, 0.0725800022), Vec2(0.301319987, 0.0673900023), Vec2(0.293839991, 0.0878800005), Vec2(0.267230004, 0.0923700035), Vec2(0.301319987, 0.0673900023), Vec2(0.331950009, 0.0657199994), Vec2(0.319869995, 0.0864500031), Vec2(0.293839991, 0.0878800005), Vec2(0.308180004, 0.046670001), Vec2(0.34472999, 0.0448499992), Vec2(0.331950009, 0.0657199994), Vec2(0.301319987, 0.0673900023), Vec2(0.272610009, 0.0524899997), Vec2(0.308180004, 0.046670001), Vec2(0.301319987, 0.0673900023), Vec2(0.270520002, 0.0725800022), Vec2(0.331950009, 0.0657199994), Vec2(0.360720009, 0.0678299963), Vec2(0.344199985, 0.0881799981), Vec2(0.319869995, 0.0864500031), Vec2(0.360720009, 0.0678299963), Vec2(0.385479987, 0.0738499984), Vec2(0.365759999, 0.0930700004), Vec2(0.344199985, 0.0881799981), Vec2(0.380259991, 0.0475100018), Vec2(0.410430014, 0.0550500005), Vec2(0.385479987, 0.0738499984), Vec2(0.360720009, 0.0678299963), Vec2(0.34472999, 0.0448499992), Vec2(0.380259991, 0.0475100018), Vec2(0.360720009, 0.0678299963), Vec2(0.331950009, 0.0657199994), Vec2(0.356539994, 0.0238000005), Vec2(0.402429998, 0.0273899995), Vec2(0.380259991, 0.0475100018), Vec2(0.34472999, 0.0448499992), Vec2(0.402429998, 0.0273899995), Vec2(0.444700003, 0.03737), Vec2(0.410430014, 0.0550500005), Vec2(0.380259991, 0.0475100018), Vec2(0.421299994, 0.00769999996), Vec2(0.500389993, 0.0235900003), Vec2(0.444700003, 0.03737), Vec2(0.402429998, 0.0273899995), Vec2(0.363460004, 0.00194999995), Vec2(0.421299994, 0.00769999996), Vec2(0.402429998, 0.0273899995), Vec2(0.356539994, 0.0238000005), Vec2(0.272680014, 0.0319099985), Vec2(0.31310001, 0.0255600009), Vec2(0.308180004, 0.046670001), Vec2(0.272610009, 0.0524899997), Vec2(0.31310001, 0.0255600009), Vec2(0.356539994, 0.0238000005), Vec2(0.34472999, 0.0448499992), Vec2(0.308180004, 0.046670001), Vec2(0.314090014, 0.00343000004), Vec2(0.363460004, 0.00194999995), Vec2(0.356539994, 0.0238000005), Vec2(0.31310001, 0.0255600009), Vec2(0.269739985, 0.0104), Vec2(0.314090014, 0.00343000004), Vec2(0.31310001, 0.0255600009), Vec2(0.272680014, 0.0319099985), Vec2(0.161449999, 0.124810003), Vec2(0.185670003, 0.107270002), Vec2(0.192000002, 0.123149998), Vec2(0.17024, 0.139139995), Vec2(0.185670003, 0.107270002), Vec2(0.212149993, 0.0926600024), Vec2(0.215719998, 0.110040002), Vec2(0.192000002, 0.123149998), Vec2(0.178069994, 0.0908000022), Vec2(0.207230002, 0.0747900009), Vec2(0.212149993, 0.0926600024), Vec2(0.185670003, 0.107270002), Vec2(0.15151, 0.109810002), Vec2(0.178069994, 0.0908000022), Vec2(0.185670003, 0.107270002), Vec2(0.161449999, 0.124810003), Vec2(0.212149993, 0.0926600024), Vec2(0.240580007, 0.0810599998), Vec2(0.240970001, 0.0997700021), Vec2(0.215719998, 0.110040002), Vec2(0.240580007, 0.0810599998), Vec2(0.270520002, 0.0725800022), Vec2(0.267230004, 0.0923700035), Vec2(0.240970001, 0.0997700021), Vec2(0.23883, 0.0619499981), Vec2(0.272610009, 0.0524899997), Vec2(0.270520002, 0.0725800022), Vec2(0.240580007, 0.0810599998), Vec2(0.207230002, 0.0747900009), Vec2(0.23883, 0.0619499981), Vec2(0.240580007, 0.0810599998), Vec2(0.212149993, 0.0926600024), Vec2(0.200680003, 0.0563700013), Vec2(0.23522, 0.0423199981), Vec2(0.23883, 0.0619499981), Vec2(0.207230002, 0.0747900009), Vec2(0.23522, 0.0423199981), Vec2(0.272680014, 0.0319099985), Vec2(0.272610009, 0.0524899997), Vec2(0.23883, 0.0619499981), Vec2(0.229269996, 0.0218700003), Vec2(0.269739985, 0.0104), Vec2(0.272680014, 0.0319099985), Vec2(0.23522, 0.0423199981), Vec2(0.192220002, 0.0372299999), Vec2(0.229269996, 0.0218700003), Vec2(0.23522, 0.0423199981), Vec2(0.200680003, 0.0563700013), Vec2(0.140279993, 0.0941800028), Vec2(0.169029996, 0.073739998), Vec2(0.178069994, 0.0908000022), Vec2(0.15151, 0.109810002), Vec2(0.169029996, 0.073739998), Vec2(0.200680003, 0.0563700013), Vec2(0.207230002, 0.0747900009), Vec2(0.178069994, 0.0908000022), Vec2(0.15839, 0.0560199991), Vec2(0.192220002, 0.0372299999), Vec2(0.200680003, 0.0563700013), Vec2(0.169029996, 0.073739998), Vec2(0.127639994, 0.0779199973), Vec2(0.15839, 0.0560199991), Vec2(0.169029996, 0.073739998), Vec2(0.140279993, 0.0941800028), Vec2(0.324429989, 0.151360005), Vec2(0.339850008, 0.1558), Vec2(0.329450011, 0.174649999), Vec2(0.314539999, 0.170929998), Vec2(0.339850008, 0.1558), Vec2(0.35402, 0.161730006), Vec2(0.343409985, 0.179619998), Vec2(0.329450011, 0.174649999), Vec2(0.352120012, 0.137219995), Vec2(0.366600007, 0.144350007), Vec2(0.35402, 0.161730006), Vec2(0.339850008, 0.1558), Vec2(0.335970014, 0.131889999), Vec2(0.352120012, 0.137219995), Vec2(0.339850008, 0.1558), Vec2(0.324429989, 0.151360005), Vec2(0.35402, 0.161730006), Vec2(0.36688, 0.168909997), Vec2(0.356359988, 0.185609996), Vec2(0.343409985, 0.179619998), Vec2(0.36688, 0.168909997), Vec2(0.378410012, 0.177039996), Vec2(0.368229985, 0.192359999), Vec2(0.356359988, 0.185609996), Vec2(0.379379988, 0.152960002), Vec2(0.390540004, 0.162719995), Vec2(0.378410012, 0.177039996), Vec2(0.36688, 0.168909997), Vec2(0.366600007, 0.144350007), Vec2(0.379379988, 0.152960002), Vec2(0.36688, 0.168909997), Vec2(0.35402, 0.161730006), Vec2(0.381410003, 0.127570003), Vec2(0.393999994, 0.137899995), Vec2(0.379379988, 0.152960002), Vec2(0.366600007, 0.144350007), Vec2(0.393999994, 0.137899995), Vec2(0.404619992, 0.149489999), Vec2(0.390540004, 0.162719995), Vec2(0.379379988, 0.152960002), Vec2(0.410869986, 0.123989999), Vec2(0.420630008, 0.137559995), Vec2(0.404619992, 0.149489999), Vec2(0.393999994, 0.137899995), Vec2(0.398799986, 0.11163), Vec2(0.410869986, 0.123989999), Vec2(0.393999994, 0.137899995), Vec2(0.381410003, 0.127570003), Vec2(0.349559993, 0.112450004), Vec2(0.366649985, 0.118940003), Vec2(0.352120012, 0.137219995), Vec2(0.335970014, 0.131889999), Vec2(0.366649985, 0.118940003), Vec2(0.381410003, 0.127570003), Vec2(0.366600007, 0.144350007), Vec2(0.352120012, 0.137219995), Vec2(0.383920014, 0.101089999), Vec2(0.398799986, 0.11163), Vec2(0.381410003, 0.127570003), Vec2(0.366649985, 0.118940003), Vec2(0.365759999, 0.0930700004), Vec2(0.383920014, 0.101089999), Vec2(0.366649985, 0.118940003), Vec2(0.349559993, 0.112450004), Vec2(0.378410012, 0.177039996), Vec2(0.388550013, 0.185829997), Vec2(0.378960013, 0.199540004), Vec2(0.368229985, 0.192359999), Vec2(0.388550013, 0.185829997), Vec2(0.397190005, 0.194999993), Vec2(0.388429999, 0.206740007), Vec2(0.378960013, 0.199540004), Vec2(0.400099993, 0.173299998), Vec2(0.408010006, 0.184530005), Vec2(0.397190005, 0.194999993), Vec2(0.388550013, 0.185829997), Vec2(0.390540004, 0.162719995), Vec2(0.400099993, 0.173299998), Vec2(0.388550013, 0.185829997), Vec2(0.378410012, 0.177039996), Vec2(0.397190005, 0.194999993), Vec2(0.404000014, 0.204390004), Vec2(0.396369994, 0.213410005), Vec2(0.388429999, 0.206740007), Vec2(0.404000014, 0.204390004), Vec2(0.40823999, 0.214259997), Vec2(0.401600003, 0.218140006), Vec2(0.396369994, 0.213410005), Vec2(0.414130002, 0.196360007), Vec2(0.418190002, 0.208949998), Vec2(0.40823999, 0.214259997), Vec2(0.404000014, 0.204390004), Vec2(0.408010006, 0.184530005), Vec2(0.414130002, 0.196360007), Vec2(0.404000014, 0.204390004), Vec2(0.397190005, 0.194999993), Vec2(0.420610011, 0.175160006), Vec2(0.426070005, 0.188979998), Vec2(0.414130002, 0.196360007), Vec2(0.408010006, 0.184530005), Vec2(0.426070005, 0.188979998), Vec2(0.429830015, 0.203459993), Vec2(0.418190002, 0.208949998), Vec2(0.414130002, 0.196360007), Vec2(0.43937999, 0.182390004), Vec2(0.44264999, 0.198310003), Vec2(0.429830015, 0.203459993), Vec2(0.426070005, 0.188979998), Vec2(0.434689999, 0.166930005), Vec2(0.43937999, 0.182390004), Vec2(0.426070005, 0.188979998), Vec2(0.420610011, 0.175160006), Vec2(0.404619992, 0.149489999), Vec2(0.413459986, 0.161980003), Vec2(0.400099993, 0.173299998), Vec2(0.390540004, 0.162719995), Vec2(0.413459986, 0.161980003), Vec2(0.420610011, 0.175160006), Vec2(0.408010006, 0.184530005), Vec2(0.400099993, 0.173299998), Vec2(0.428490013, 0.15196), Vec2(0.434689999, 0.166930005), Vec2(0.420610011, 0.175160006), Vec2(0.413459986, 0.161980003), Vec2(0.420630008, 0.137559995), Vec2(0.428490013, 0.15196), Vec2(0.413459986, 0.161980003), Vec2(0.404619992, 0.149489999), Vec2(0.438470006, 0.127269998), Vec2(0.444979995, 0.143480003), Vec2(0.428490013, 0.15196), Vec2(0.420630008, 0.137559995), Vec2(0.444979995, 0.143480003), Vec2(0.449990004, 0.160019994), Vec2(0.434689999, 0.166930005), Vec2(0.428490013, 0.15196), Vec2(0.462700009, 0.136889994), Vec2(0.466239989, 0.154719993), Vec2(0.449990004, 0.160019994), Vec2(0.444979995, 0.143480003), Vec2(0.457980007, 0.119110003), Vec2(0.462700009, 0.136889994), Vec2(0.444979995, 0.143480003), Vec2(0.438470006, 0.127269998), Vec2(0.449990004, 0.160019994), Vec2(0.453729987, 0.176819995), Vec2(0.43937999, 0.182390004), Vec2(0.434689999, 0.166930005), Vec2(0.453729987, 0.176819995), Vec2(0.456360012, 0.193859994), Vec2(0.44264999, 0.198310003), Vec2(0.43937999, 0.182390004), Vec2(0.46886, 0.172539994), Vec2(0.470699996, 0.190410003), Vec2(0.456360012, 0.193859994), Vec2(0.453729987, 0.176819995), Vec2(0.466239989, 0.154719993), Vec2(0.46886, 0.172539994), Vec2(0.453729987, 0.176819995), Vec2(0.449990004, 0.160019994), Vec2(0.483150005, 0.151309997), Vec2(0.484499991, 0.169809997), Vec2(0.46886, 0.172539994), Vec2(0.466239989, 0.154719993), Vec2(0.484499991, 0.169809997), Vec2(0.485439986, 0.188199997), Vec2(0.470699996, 0.190410003), Vec2(0.46886, 0.172539994), Vec2(0.500389993, 0.168799996), Vec2(0.500389993, 0.187380001), Vec2(0.485439986, 0.188199997), Vec2(0.484499991, 0.169809997), Vec2(0.500389993, 0.150049999), Vec2(0.500389993, 0.168799996), Vec2(0.484499991, 0.169809997), Vec2(0.483150005, 0.151309997), Vec2(0.478810012, 0.11366), Vec2(0.48131001, 0.132609993), Vec2(0.462700009, 0.136889994), Vec2(0.457980007, 0.119110003), Vec2(0.48131001, 0.132609993), Vec2(0.483150005, 0.151309997), Vec2(0.466239989, 0.154719993), Vec2(0.462700009, 0.136889994), Vec2(0.500389993, 0.130999997), Vec2(0.500389993, 0.150049999), Vec2(0.483150005, 0.151309997), Vec2(0.48131001, 0.132609993), Vec2(0.500389993, 0.111529998), Vec2(0.500389993, 0.130999997), Vec2(0.48131001, 0.132609993), Vec2(0.478810012, 0.11366), Vec2(0.385479987, 0.0738499984), Vec2(0.404700011, 0.0839999989), Vec2(0.383920014, 0.101089999), Vec2(0.365759999, 0.0930700004), Vec2(0.404700011, 0.0839999989), Vec2(0.419149995, 0.0969699994), Vec2(0.398799986, 0.11163), Vec2(0.383920014, 0.101089999), Vec2(0.430110008, 0.0683600008), Vec2(0.442900002, 0.0843499973), Vec2(0.419149995, 0.0969699994), Vec2(0.404700011, 0.0839999989), Vec2(0.410430014, 0.0550500005), Vec2(0.430110008, 0.0683600008), Vec2(0.404700011, 0.0839999989), Vec2(0.385479987, 0.0738499984), Vec2(0.419149995, 0.0969699994), Vec2(0.430079997, 0.11163), Vec2(0.410869986, 0.123989999), Vec2(0.398799986, 0.11163), Vec2(0.430079997, 0.11163), Vec2(0.438470006, 0.127269998), Vec2(0.420630008, 0.137559995), Vec2(0.410869986, 0.123989999), Vec2(0.451660007, 0.101489998), Vec2(0.457980007, 0.119110003), Vec2(0.438470006, 0.127269998), Vec2(0.430079997, 0.11163), Vec2(0.442900002, 0.0843499973), Vec2(0.451660007, 0.101489998), Vec2(0.430079997, 0.11163), Vec2(0.419149995, 0.0969699994), Vec2(0.470209986, 0.0749899969), Vec2(0.475340009, 0.0944299996), Vec2(0.451660007, 0.101489998), Vec2(0.442900002, 0.0843499973), Vec2(0.475340009, 0.0944299996), Vec2(0.478810012, 0.11366), Vec2(0.457980007, 0.119110003), Vec2(0.451660007, 0.101489998), Vec2(0.500389993, 0.0915099978), Vec2(0.500389993, 0.111529998), Vec2(0.478810012, 0.11366), Vec2(0.475340009, 0.0944299996), Vec2(0.500389993, 0.0707300007), Vec2(0.500389993, 0.0915099978), Vec2(0.475340009, 0.0944299996), Vec2(0.470209986, 0.0749899969), Vec2(0.444700003, 0.03737), Vec2(0.461699992, 0.0555999987), Vec2(0.430110008, 0.0683600008), Vec2(0.410430014, 0.0550500005), Vec2(0.461699992, 0.0555999987), Vec2(0.470209986, 0.0749899969), Vec2(0.442900002, 0.0843499973), Vec2(0.430110008, 0.0683600008), Vec2(0.500389993, 0.0486599989), Vec2(0.500389993, 0.0707300007), Vec2(0.470209986, 0.0749899969), Vec2(0.461699992, 0.0555999987), Vec2(0.500389993, 0.0235900003), Vec2(0.500389993, 0.0486599989), Vec2(0.461699992, 0.0555999987), Vec2(0.444700003, 0.03737), Vec2(0.554970026, 0.0373000018), Vec2(0.538860023, 0.0546699986), Vec2(0.500389993, 0.0486599989), Vec2(0.500389993, 0.0235900003), Vec2(0.538860023, 0.0546699986), Vec2(0.530470014, 0.0741500035), Vec2(0.500389993, 0.0707300007), Vec2(0.500389993, 0.0486599989), Vec2(0.570439994, 0.0678500012), Vec2(0.557780027, 0.0835099965), Vec2(0.530470014, 0.0741500035), Vec2(0.538860023, 0.0546699986), Vec2(0.589569986, 0.0550599992), Vec2(0.570439994, 0.0678500012), Vec2(0.538860023, 0.0546699986), Vec2(0.554970026, 0.0373000018), Vec2(0.530470014, 0.0741500035), Vec2(0.525370002, 0.0937900022), Vec2(0.500389993, 0.0915099978), Vec2(0.500389993, 0.0707300007), Vec2(0.525370002, 0.0937900022), Vec2(0.521920025, 0.113179997), Vec2(0.500389993, 0.111529998), Vec2(0.500389993, 0.0915099978), Vec2(0.54904002, 0.100620002), Vec2(0.542729974, 0.118330002), Vec2(0.521920025, 0.113179997), Vec2(0.525370002, 0.0937900022), Vec2(0.557780027, 0.0835099965), Vec2(0.54904002, 0.100620002), Vec2(0.525370002, 0.0937900022), Vec2(0.530470014, 0.0741500035), Vec2(0.581560016, 0.0963900015), Vec2(0.570640028, 0.110820003), Vec2(0.54904002, 0.100620002), Vec2(0.557780027, 0.0835099965), Vec2(0.570640028, 0.110820003), Vec2(0.562250018, 0.126409993), Vec2(0.542729974, 0.118330002), Vec2(0.54904002, 0.100620002), Vec2(0.589890003, 0.123389997), Vec2(0.580110013, 0.136790007), Vec2(0.562250018, 0.126409993), Vec2(0.570640028, 0.110820003), Vec2(0.60194999, 0.111340001), Vec2(0.589890003, 0.123389997), Vec2(0.570640028, 0.110820003), Vec2(0.581560016, 0.0963900015), Vec2(0.614889979, 0.0740899965), Vec2(0.595910013, 0.0838200003), Vec2(0.570439994, 0.0678500012), Vec2(0.589569986, 0.0550599992), Vec2(0.595910013, 0.0838200003), Vec2(0.581560016, 0.0963900015), Vec2(0.557780027, 0.0835099965), Vec2(0.570439994, 0.0678500012), Vec2(0.616760015, 0.101180002), Vec2(0.60194999, 0.111340001), Vec2(0.581560016, 0.0963900015), Vec2(0.595910013, 0.0838200003), Vec2(0.634829998, 0.0935700014), Vec2(0.616760015, 0.101180002), Vec2(0.595910013, 0.0838200003), Vec2(0.614889979, 0.0740899965), Vec2(0.521920025, 0.113179997), Vec2(0.519439995, 0.132259995), Vec2(0.500389993, 0.130999997), Vec2(0.500389993, 0.111529998), Vec2(0.519439995, 0.132259995), Vec2(0.517610013, 0.151030004), Vec2(0.500389993, 0.150049999), Vec2(0.500389993, 0.130999997), Vec2(0.538030028, 0.136240005), Vec2(0.534510016, 0.154170007), Vec2(0.517610013, 0.151030004), Vec2(0.519439995, 0.132259995), Vec2(0.542729974, 0.118330002), Vec2(0.538030028, 0.136240005), Vec2(0.519439995, 0.132259995), Vec2(0.521920025, 0.113179997), Vec2(0.517610013, 0.151030004), Vec2(0.516279995, 0.169579998), Vec2(0.500389993, 0.168799996), Vec2(0.500389993, 0.150049999), Vec2(0.516279995, 0.169579998), Vec2(0.515349984, 0.188010007), Vec2(0.500389993, 0.187380001), Vec2(0.500389993, 0.168799996), Vec2(0.531910002, 0.172079995), Vec2(0.530099988, 0.190019995), Vec2(0.515349984, 0.188010007), Vec2(0.516279995, 0.169579998), Vec2(0.534510016, 0.154170007), Vec2(0.531910002, 0.172079995), Vec2(0.516279995, 0.169579998), Vec2(0.517610013, 0.151030004), Vec2(0.550750017, 0.159290001), Vec2(0.547029972, 0.176170006), Vec2(0.531910002, 0.172079995), Vec2(0.534510016, 0.154170007), Vec2(0.547029972, 0.176170006), Vec2(0.544420004, 0.193299994), Vec2(0.530099988, 0.190019995), Vec2(0.531910002, 0.172079995), Vec2(0.561360002, 0.181649998), Vec2(0.558099985, 0.19765), Vec2(0.544420004, 0.193299994), Vec2(0.547029972, 0.176170006), Vec2(0.566039979, 0.166130006), Vec2(0.561360002, 0.181649998), Vec2(0.547029972, 0.176170006), Vec2(0.550750017, 0.159290001), Vec2(0.562250018, 0.126409993), Vec2(0.555750012, 0.142660007), Vec2(0.538030028, 0.136240005), Vec2(0.542729974, 0.118330002), Vec2(0.555750012, 0.142660007), Vec2(0.550750017, 0.159290001), Vec2(0.534510016, 0.154170007), Vec2(0.538030028, 0.136240005), Vec2(0.572250009, 0.151130006), Vec2(0.566039979, 0.166130006), Vec2(0.550750017, 0.159290001), Vec2(0.555750012, 0.142660007), Vec2(0.580110013, 0.136790007), Vec2(0.572250009, 0.151130006), Vec2(0.555750012, 0.142660007), Vec2(0.562250018, 0.126409993), Vec2(0.59612, 0.14892), Vec2(0.587260008, 0.161269993), Vec2(0.572250009, 0.151130006), Vec2(0.580110013, 0.136790007), Vec2(0.587260008, 0.161269993), Vec2(0.5801, 0.17441), Vec2(0.566039979, 0.166130006), Vec2(0.572250009, 0.151130006), Vec2(0.600589991, 0.172800004), Vec2(0.59266001, 0.183919996), Vec2(0.5801, 0.17441), Vec2(0.587260008, 0.161269993), Vec2(0.610159993, 0.162400007), Vec2(0.600589991, 0.172800004), Vec2(0.587260008, 0.161269993), Vec2(0.59612, 0.14892), Vec2(0.5801, 0.17441), Vec2(0.574630022, 0.188250005), Vec2(0.561360002, 0.181649998), Vec2(0.566039979, 0.166130006), Vec2(0.574630022, 0.188250005), Vec2(0.570869982, 0.202779993), Vec2(0.558099985, 0.19765), Vec2(0.561360002, 0.181649998), Vec2(0.58653003, 0.195720002), Vec2(0.582449973, 0.208340004), Vec2(0.570869982, 0.202779993), Vec2(0.574630022, 0.188250005), Vec2(0.59266001, 0.183919996), Vec2(0.58653003, 0.195720002), Vec2(0.574630022, 0.188250005), Vec2(0.5801, 0.17441), Vec2(0.603410006, 0.194590002), Vec2(0.596599996, 0.203909993), Vec2(0.58653003, 0.195720002), Vec2(0.59266001, 0.183919996), Vec2(0.596599996, 0.203909993), Vec2(0.592339993, 0.213760003), Vec2(0.582449973, 0.208340004), Vec2(0.58653003, 0.195720002), Vec2(0.604160011, 0.213080004), Vec2(0.598919988, 0.217739999), Vec2(0.592339993, 0.213760003), Vec2(0.596599996, 0.203909993), Vec2(0.612079978, 0.206560001), Vec2(0.604160011, 0.213080004), Vec2(0.596599996, 0.203909993), Vec2(0.603410006, 0.194590002), Vec2(0.622179985, 0.177019998), Vec2(0.612049997, 0.18558), Vec2(0.600589991, 0.172800004), Vec2(0.610159993, 0.162400007), Vec2(0.612049997, 0.18558), Vec2(0.603410006, 0.194590002), Vec2(0.59266001, 0.183919996), Vec2(0.600589991, 0.172800004), Vec2(0.621510029, 0.199560001), Vec2(0.612079978, 0.206560001), Vec2(0.603410006, 0.194590002), Vec2(0.612049997, 0.18558), Vec2(0.632189989, 0.192650005), Vec2(0.621510029, 0.199560001), Vec2(0.612049997, 0.18558), Vec2(0.622179985, 0.177019998), Vec2(0.65109998, 0.113219999), Vec2(0.634060025, 0.119309999), Vec2(0.616760015, 0.101180002), Vec2(0.634829998, 0.0935700014), Vec2(0.634060025, 0.119309999), Vec2(0.619329989, 0.127570003), Vec2(0.60194999, 0.111340001), Vec2(0.616760015, 0.101180002), Vec2(0.648519993, 0.137889996), Vec2(0.634079993, 0.144649997), Vec2(0.619329989, 0.127570003), Vec2(0.634060025, 0.119309999), Vec2(0.664640009, 0.132939994), Vec2(0.648519993, 0.137889996), Vec2(0.634060025, 0.119309999), Vec2(0.65109998, 0.113219999), Vec2(0.619329989, 0.127570003), Vec2(0.606750011, 0.137569994), Vec2(0.589890003, 0.123389997), Vec2(0.60194999, 0.111340001), Vec2(0.606750011, 0.137569994), Vec2(0.59612, 0.14892), Vec2(0.580110013, 0.136790007), Vec2(0.589890003, 0.123389997), Vec2(0.621309996, 0.152930006), Vec2(0.610159993, 0.162400007), Vec2(0.59612, 0.14892), Vec2(0.606750011, 0.137569994), Vec2(0.634079993, 0.144649997), Vec2(0.621309996, 0.152930006), Vec2(0.606750011, 0.137569994), Vec2(0.619329989, 0.127570003), Vec2(0.646520019, 0.16234), Vec2(0.63369, 0.169180006), Vec2(0.621309996, 0.152930006), Vec2(0.634079993, 0.144649997), Vec2(0.63369, 0.169180006), Vec2(0.622179985, 0.177019998), Vec2(0.610159993, 0.162400007), Vec2(0.621309996, 0.152930006), Vec2(0.643999994, 0.186210006), Vec2(0.632189989, 0.192650005), Vec2(0.622179985, 0.177019998), Vec2(0.63369, 0.169180006), Vec2(0.656889975, 0.180539995), Vec2(0.643999994, 0.186210006), Vec2(0.63369, 0.169180006), Vec2(0.646520019, 0.16234), Vec2(0.67602998, 0.152689993), Vec2(0.660650015, 0.156760007), Vec2(0.648519993, 0.137889996), Vec2(0.664640009, 0.132939994), Vec2(0.660650015, 0.156760007), Vec2(0.646520019, 0.16234), Vec2(0.634079993, 0.144649997), Vec2(0.648519993, 0.137889996), Vec2(0.670799971, 0.175909996), Vec2(0.656889975, 0.180539995), Vec2(0.646520019, 0.16234), Vec2(0.660650015, 0.156760007), Vec2(0.685660005, 0.172519997), Vec2(0.670799971, 0.175909996), Vec2(0.660650015, 0.156760007), Vec2(0.67602998, 0.152689993), Vec2(0.858929992, 0.0961600021), Vec2(0.830470026, 0.0758399963), Vec2(0.841040015, 0.0580400005), Vec2(0.871450007, 0.0797699988), Vec2(0.830470026, 0.0758399963), Vec2(0.799139977, 0.0584900007), Vec2(0.807600021, 0.0392899998), Vec2(0.841040015, 0.0580400005), Vec2(0.821529984, 0.0930500031), Vec2(0.792649984, 0.0770500004), Vec2(0.799139977, 0.0584900007), Vec2(0.830470026, 0.0758399963), Vec2(0.847829998, 0.111960001), Vec2(0.821529984, 0.0930500031), Vec2(0.830470026, 0.0758399963), Vec2(0.858929992, 0.0961600021), Vec2(0.799139977, 0.0584900007), Vec2(0.764919996, 0.0443399996), Vec2(0.770950019, 0.0238300003), Vec2(0.807600021, 0.0392899998), Vec2(0.764919996, 0.0443399996), Vec2(0.727729976, 0.0337300003), Vec2(0.730799973, 0.0120599996), Vec2(0.770950019, 0.0238300003), Vec2(0.76135999, 0.0641499981), Vec2(0.727869987, 0.0545599982), Vec2(0.727729976, 0.0337300003), Vec2(0.764919996, 0.0443399996), Vec2(0.792649984, 0.0770500004), Vec2(0.76135999, 0.0641499981), Vec2(0.764919996, 0.0443399996), Vec2(0.799139977, 0.0584900007), Vec2(0.787840009, 0.0951000005), Vec2(0.7597, 0.0834600031), Vec2(0.76135999, 0.0641499981), Vec2(0.792649984, 0.0770500004), Vec2(0.7597, 0.0834600031), Vec2(0.730069995, 0.0748599991), Vec2(0.727869987, 0.0545599982), Vec2(0.76135999, 0.0641499981), Vec2(0.75940001, 0.102349997), Vec2(0.733410001, 0.0947899967), Vec2(0.730069995, 0.0748599991), Vec2(0.7597, 0.0834600031), Vec2(0.784370005, 0.112669997), Vec2(0.75940001, 0.102349997), Vec2(0.7597, 0.0834600031), Vec2(0.787840009, 0.0951000005), Vec2(0.838029981, 0.127169997), Vec2(0.814050019, 0.109700002), Vec2(0.821529984, 0.0930500031), Vec2(0.847829998, 0.111960001), Vec2(0.814050019, 0.109700002), Vec2(0.787840009, 0.0951000005), Vec2(0.792649984, 0.0770500004), Vec2(0.821529984, 0.0930500031), Vec2(0.807829976, 0.125780001), Vec2(0.784370005, 0.112669997), Vec2(0.787840009, 0.0951000005), Vec2(0.814050019, 0.109700002), Vec2(0.829349995, 0.141719997), Vec2(0.807829976, 0.125780001), Vec2(0.814050019, 0.109700002), Vec2(0.838029981, 0.127169997), Vec2(0.727729976, 0.0337300003), Vec2(0.687520027, 0.0271099992), Vec2(0.686619997, 0.00461000018), Vec2(0.730799973, 0.0120599996), Vec2(0.687520027, 0.0271099992), Vec2(0.644299984, 0.02513), Vec2(0.63707, 0.00246000011), Vec2(0.686619997, 0.00461000018), Vec2(0.692600012, 0.0485499986), Vec2(0.656340003, 0.0464400016), Vec2(0.644299984, 0.02513), Vec2(0.687520027, 0.0271099992), Vec2(0.727869987, 0.0545599982), Vec2(0.692600012, 0.0485499986), Vec2(0.687520027, 0.0271099992), Vec2(0.727729976, 0.0337300003), Vec2(0.644299984, 0.02513), Vec2(0.598770022, 0.0284499992), Vec2(0.578649998, 0.0076700002), Vec2(0.63707, 0.00246000011), Vec2(0.598770022, 0.0284499992), Vec2(0.554970026, 0.0373000018), Vec2(0.500389993, 0.0235900003), Vec2(0.578649998, 0.0076700002), Vec2(0.620769978, 0.048489999), Vec2(0.589569986, 0.0550599992), Vec2(0.554970026, 0.0373000018), Vec2(0.598770022, 0.0284499992), Vec2(0.656340003, 0.0464400016), Vec2(0.620769978, 0.048489999), Vec2(0.598770022, 0.0284499992), Vec2(0.644299984, 0.02513), Vec2(0.669089973, 0.0673699975), Vec2(0.640150011, 0.068810001), Vec2(0.620769978, 0.048489999), Vec2(0.656340003, 0.0464400016), Vec2(0.640150011, 0.068810001), Vec2(0.614889979, 0.0740899965), Vec2(0.589569986, 0.0550599992), Vec2(0.620769978, 0.048489999), Vec2(0.656589985, 0.089259997), Vec2(0.634829998, 0.0935700014), Vec2(0.614889979, 0.0740899965), Vec2(0.640150011, 0.068810001), Vec2(0.681060016, 0.0881400034), Vec2(0.656589985, 0.089259997), Vec2(0.640150011, 0.068810001), Vec2(0.669089973, 0.0673699975), Vec2(0.730069995, 0.0748599991), Vec2(0.699549973, 0.0694399998), Vec2(0.692600012, 0.0485499986), Vec2(0.727869987, 0.0545599982), Vec2(0.699549973, 0.0694399998), Vec2(0.669089973, 0.0673699975), Vec2(0.656340003, 0.0464400016), Vec2(0.692600012, 0.0485499986), Vec2(0.707019985, 0.0900299996), Vec2(0.681060016, 0.0881400034), Vec2(0.669089973, 0.0673699975), Vec2(0.699549973, 0.0694399998), Vec2(0.733410001, 0.0947899967), Vec2(0.707019985, 0.0900299996), Vec2(0.699549973, 0.0694399998), Vec2(0.730069995, 0.0748599991), Vec2(0.737330019, 0.114430003), Vec2(0.714359999, 0.110380001), Vec2(0.707019985, 0.0900299996), Vec2(0.733410001, 0.0947899967), Vec2(0.714359999, 0.110380001), Vec2(0.691839993, 0.108769998), Vec2(0.681060016, 0.0881400034), Vec2(0.707019985, 0.0900299996), Vec2(0.721369982, 0.130539998), Vec2(0.701439977, 0.129240006), Vec2(0.691839993, 0.108769998), Vec2(0.714359999, 0.110380001), Vec2(0.741609991, 0.133860007), Vec2(0.721369982, 0.130539998), Vec2(0.714359999, 0.110380001), Vec2(0.737330019, 0.114430003), Vec2(0.691839993, 0.108769998), Vec2(0.670520008, 0.109690003), Vec2(0.656589985, 0.089259997), Vec2(0.681060016, 0.0881400034), Vec2(0.670520008, 0.109690003), Vec2(0.65109998, 0.113219999), Vec2(0.634829998, 0.0935700014), Vec2(0.656589985, 0.089259997), Vec2(0.682380021, 0.130030006), Vec2(0.664640009, 0.132939994), Vec2(0.65109998, 0.113219999), Vec2(0.670520008, 0.109690003), Vec2(0.701439977, 0.129240006), Vec2(0.682380021, 0.130030006), Vec2(0.670520008, 0.109690003), Vec2(0.691839993, 0.108769998), Vec2(0.710009992, 0.149580002), Vec2(0.692550004, 0.15027), Vec2(0.682380021, 0.130030006), Vec2(0.701439977, 0.129240006), Vec2(0.692550004, 0.15027), Vec2(0.67602998, 0.152689993), Vec2(0.664640009, 0.132939994), Vec2(0.682380021, 0.130030006), Vec2(0.701359987, 0.170489997), Vec2(0.685660005, 0.172519997), Vec2(0.67602998, 0.152689993), Vec2(0.692550004, 0.15027), Vec2(0.717710018, 0.169870004), Vec2(0.701359987, 0.170489997), Vec2(0.692550004, 0.15027), Vec2(0.710009992, 0.149580002), Vec2(0.746219993, 0.153190002), Vec2(0.728049994, 0.150580004), Vec2(0.721369982, 0.130539998), Vec2(0.741609991, 0.133860007), Vec2(0.728049994, 0.150580004), Vec2(0.710009992, 0.149580002), Vec2(0.701439977, 0.129240006), Vec2(0.721369982, 0.130539998), Vec2(0.734449983, 0.170599997), Vec2(0.717710018, 0.169870004), Vec2(0.710009992, 0.149580002), Vec2(0.728049994, 0.150580004), Vec2(0.751190007, 0.172560006), Vec2(0.734449983, 0.170599997), Vec2(0.728049994, 0.150580004), Vec2(0.746219993, 0.153190002), Vec2(0.821680009, 0.155430004), Vec2(0.802730024, 0.141210005), Vec2(0.807829976, 0.125780001), Vec2(0.829349995, 0.141719997), Vec2(0.802730024, 0.141210005), Vec2(0.78204, 0.129749998), Vec2(0.784370005, 0.112669997), Vec2(0.807829976, 0.125780001), Vec2(0.79877001, 0.155890003), Vec2(0.780830026, 0.146410003), Vec2(0.78204, 0.129749998), Vec2(0.802730024, 0.141210005), Vec2(0.814970016, 0.168009996), Vec2(0.79877001, 0.155890003), Vec2(0.802730024, 0.141210005), Vec2(0.821680009, 0.155430004), Vec2(0.78204, 0.129749998), Vec2(0.76007998, 0.12088), Vec2(0.75940001, 0.102349997), Vec2(0.784370005, 0.112669997), Vec2(0.76007998, 0.12088), Vec2(0.737330019, 0.114430003), Vec2(0.733410001, 0.0947899967), Vec2(0.75940001, 0.102349997), Vec2(0.761609972, 0.139139995), Vec2(0.741609991, 0.133860007), Vec2(0.737330019, 0.114430003), Vec2(0.76007998, 0.12088), Vec2(0.780830026, 0.146410003), Vec2(0.761609972, 0.139139995), Vec2(0.76007998, 0.12088), Vec2(0.78204, 0.129749998), Vec2(0.780969977, 0.16279), Vec2(0.764050007, 0.157289997), Vec2(0.761609972, 0.139139995), Vec2(0.780830026, 0.146410003), Vec2(0.764050007, 0.157289997), Vec2(0.746219993, 0.153190002), Vec2(0.741609991, 0.133860007), Vec2(0.761609972, 0.139139995), Vec2(0.767509997, 0.175549999), Vec2(0.751190007, 0.172560006), Vec2(0.746219993, 0.153190002), Vec2(0.764050007, 0.157289997), Vec2(0.782850027, 0.179260001), Vec2(0.767509997, 0.175549999), Vec2(0.764050007, 0.157289997), Vec2(0.780969977, 0.16279), Vec2(0.809329987, 0.178929999), Vec2(0.796320021, 0.16979), Vec2(0.79877001, 0.155890003), Vec2(0.814970016, 0.168009996), Vec2(0.796320021, 0.16979), Vec2(0.780969977, 0.16279), Vec2(0.780830026, 0.146410003), Vec2(0.79877001, 0.155890003), Vec2(0.796360016, 0.183239996), Vec2(0.782850027, 0.179260001), Vec2(0.780969977, 0.16279), Vec2(0.796320021, 0.16979), Vec2(0.805589974, 0.186350003), Vec2(0.796360016, 0.183239996), Vec2(0.796320021, 0.16979), Vec2(0.809329987, 0.178929999), Vec2(0.190530002, 0.502749979), Vec2(0.179619998, 0.489800006), Vec2(0.188820004, 0.484710008), Vec2(0.194230005, 0.495350003), Vec2(0.179619998, 0.489800006), Vec2(0.169829994, 0.473269999), Vec2(0.181649998, 0.468769997), Vec2(0.188820004, 0.484710008), Vec2(0.170719996, 0.498369992), Vec2(0.158350006, 0.480349988), Vec2(0.169829994, 0.473269999), Vec2(0.179619998, 0.489800006), Vec2(0.184980005, 0.513610005), Vec2(0.170719996, 0.498369992), Vec2(0.179619998, 0.489800006), Vec2(0.190530002, 0.502749979), Vec2(0.169829994, 0.473269999), Vec2(0.161090001, 0.454160005), Vec2(0.174510002, 0.450219989), Vec2(0.181649998, 0.468769997), Vec2(0.161090001, 0.454160005), Vec2(0.153569996, 0.433169991), Vec2(0.168099999, 0.429879993), Vec2(0.174510002, 0.450219989), Vec2(0.147750005, 0.460040003), Vec2(0.138909996, 0.437940001), Vec2(0.153569996, 0.433169991), Vec2(0.161090001, 0.454160005), Vec2(0.158350006, 0.480349988), Vec2(0.147750005, 0.460040003), Vec2(0.161090001, 0.454160005), Vec2(0.169829994, 0.473269999), Vec2(0.146709993, 0.489329994), Vec2(0.134210005, 0.467550009), Vec2(0.147750005, 0.460040003), Vec2(0.158350006, 0.480349988), Vec2(0.134210005, 0.467550009), Vec2(0.123899996, 0.44400999), Vec2(0.138909996, 0.437940001), Vec2(0.147750005, 0.460040003), Vec2(0.120169997, 0.476319999), Vec2(0.108309999, 0.451160014), Vec2(0.123899996, 0.44400999), Vec2(0.134210005, 0.467550009), Vec2(0.134550005, 0.499680012), Vec2(0.120169997, 0.476319999), Vec2(0.134210005, 0.467550009), Vec2(0.146709993, 0.489329994), Vec2(0.178340003, 0.52609998), Vec2(0.161420003, 0.508979976), Vec2(0.170719996, 0.498369992), Vec2(0.184980005, 0.513610005), Vec2(0.161420003, 0.508979976), Vec2(0.146709993, 0.489329994), Vec2(0.158350006, 0.480349988), Vec2(0.170719996, 0.498369992), Vec2(0.151419997, 0.520910025), Vec2(0.134550005, 0.499680012), Vec2(0.146709993, 0.489329994), Vec2(0.161420003, 0.508979976), Vec2(0.170719996, 0.539680004), Vec2(0.151419997, 0.520910025), Vec2(0.161420003, 0.508979976), Vec2(0.178340003, 0.52609998), Vec2(0.153569996, 0.433169991), Vec2(0.147499993, 0.410809994), Vec2(0.162780002, 0.408250004), Vec2(0.168099999, 0.429879993), Vec2(0.147499993, 0.410809994), Vec2(0.143040001, 0.387490004), Vec2(0.158830002, 0.385720015), Vec2(0.162780002, 0.408250004), Vec2(0.131899998, 0.41444999), Vec2(0.126809999, 0.389970005), Vec2(0.143040001, 0.387490004), Vec2(0.147499993, 0.410809994), Vec2(0.138909996, 0.437940001), Vec2(0.131899998, 0.41444999), Vec2(0.147499993, 0.410809994), Vec2(0.153569996, 0.433169991), Vec2(0.143040001, 0.387490004), Vec2(0.140310004, 0.363550007), Vec2(0.156379998, 0.362619996), Vec2(0.158830002, 0.385720015), Vec2(0.140310004, 0.363550007), Vec2(0.139359996, 0.339329988), Vec2(0.155520007, 0.339249998), Vec2(0.156379998, 0.362619996), Vec2(0.123709999, 0.364850014), Vec2(0.12263, 0.339430004), Vec2(0.139359996, 0.339329988), Vec2(0.140310004, 0.363550007), Vec2(0.126809999, 0.389970005), Vec2(0.123709999, 0.364850014), Vec2(0.140310004, 0.363550007), Vec2(0.143040001, 0.387490004), Vec2(0.109949999, 0.393119991), Vec2(0.106409997, 0.36649999), Vec2(0.123709999, 0.364850014), Vec2(0.126809999, 0.389970005), Vec2(0.106409997, 0.36649999), Vec2(0.105169997, 0.339560002), Vec2(0.12263, 0.339430004), Vec2(0.123709999, 0.364850014), Vec2(0.0882600024, 0.368470013), Vec2(0.0868399963, 0.339709997), Vec2(0.105169997, 0.339560002), Vec2(0.106409997, 0.36649999), Vec2(0.0923099965, 0.396869987), Vec2(0.0882600024, 0.368470013), Vec2(0.106409997, 0.36649999), Vec2(0.109949999, 0.393119991), Vec2(0.123899996, 0.44400999), Vec2(0.115790002, 0.419070005), Vec2(0.131899998, 0.41444999), Vec2(0.138909996, 0.437940001), Vec2(0.115790002, 0.419070005), Vec2(0.109949999, 0.393119991), Vec2(0.126809999, 0.389970005), Vec2(0.131899998, 0.41444999), Vec2(0.0990099981, 0.424549997), Vec2(0.0923099965, 0.396869987), Vec2(0.109949999, 0.393119991), Vec2(0.115790002, 0.419070005), Vec2(0.108309999, 0.451160014), Vec2(0.0990099981, 0.424549997), Vec2(0.115790002, 0.419070005), Vec2(0.123899996, 0.44400999), Vec2(0.091959998, 0.459190011), Vec2(0.0813800022, 0.43077001), Vec2(0.0990099981, 0.424549997), Vec2(0.108309999, 0.451160014), Vec2(0.0813800022, 0.43077001), Vec2(0.0737499967, 0.401149988), Vec2(0.0923099965, 0.396869987), Vec2(0.0990099981, 0.424549997), Vec2(0.0627800003, 0.43761), Vec2(0.0541299991, 0.405900002), Vec2(0.0737499967, 0.401149988), Vec2(0.0813800022, 0.43077001), Vec2(0.0746800005, 0.46796), Vec2(0.0627800003, 0.43761), Vec2(0.0813800022, 0.43077001), Vec2(0.091959998, 0.459190011), Vec2(0.0737499967, 0.401149988), Vec2(0.0691199973, 0.370730013), Vec2(0.0882600024, 0.368470013), Vec2(0.0923099965, 0.396869987), Vec2(0.0691199973, 0.370730013), Vec2(0.0674899966, 0.339899987), Vec2(0.0868399963, 0.339709997), Vec2(0.0882600024, 0.368470013), Vec2(0.0488499999, 0.373259991), Vec2(0.0469899997, 0.340140015), Vec2(0.0674899966, 0.339899987), Vec2(0.0691199973, 0.370730013), Vec2(0.0541299991, 0.405900002), Vec2(0.0488499999, 0.373259991), Vec2(0.0691199973, 0.370730013), Vec2(0.0737499967, 0.401149988), Vec2(0.0333099999, 0.411060005), Vec2(0.0273199994, 0.376029998), Vec2(0.0488499999, 0.373259991), Vec2(0.0541299991, 0.405900002), Vec2(0.0273199994, 0.376029998), Vec2(0.0252, 0.340420008), Vec2(0.0469899997, 0.340140015), Vec2(0.0488499999, 0.373259991), Vec2(0.00437000021, 0.379020005), Vec2(0.00194999995, 0.340770006), Vec2(0.0252, 0.340420008), Vec2(0.0273199994, 0.376029998), Vec2(0.0111199999, 0.416570008), Vec2(0.00437000021, 0.379020005), Vec2(0.0273199994, 0.376029998), Vec2(0.0333099999, 0.411060005), Vec2(0.0563400015, 0.47736001), Vec2(0.0430399999, 0.444990009), Vec2(0.0627800003, 0.43761), Vec2(0.0746800005, 0.46796), Vec2(0.0430399999, 0.444990009), Vec2(0.0333099999, 0.411060005), Vec2(0.0541299991, 0.405900002), Vec2(0.0627800003, 0.43761), Vec2(0.0220100004, 0.452829987), Vec2(0.0111199999, 0.416570008), Vec2(0.0333099999, 0.411060005), Vec2(0.0430399999, 0.444990009), Vec2(0.03675, 0.487300009), Vec2(0.0220100004, 0.452829987), Vec2(0.0430399999, 0.444990009), Vec2(0.0563400015, 0.47736001), Vec2(0.162070006, 0.554069996), Vec2(0.140530005, 0.533789992), Vec2(0.151419997, 0.520910025), Vec2(0.170719996, 0.539680004), Vec2(0.140530005, 0.533789992), Vec2(0.121610001, 0.511030018), Vec2(0.134550005, 0.499680012), Vec2(0.151419997, 0.520910025), Vec2(0.128629997, 0.547410011), Vec2(0.10774, 0.523159981), Vec2(0.121610001, 0.511030018), Vec2(0.140530005, 0.533789992), Vec2(0.152280003, 0.569109976), Vec2(0.128629997, 0.547410011), Vec2(0.140530005, 0.533789992), Vec2(0.162070006, 0.554069996), Vec2(0.121610001, 0.511030018), Vec2(0.105400003, 0.486059994), Vec2(0.120169997, 0.476319999), Vec2(0.134550005, 0.499680012), Vec2(0.105400003, 0.486059994), Vec2(0.091959998, 0.459190011), Vec2(0.108309999, 0.451160014), Vec2(0.120169997, 0.476319999), Vec2(0.0897200033, 0.496589988), Vec2(0.0746800005, 0.46796), Vec2(0.091959998, 0.459190011), Vec2(0.105400003, 0.486059994), Vec2(0.10774, 0.523159981), Vec2(0.0897200033, 0.496589988), Vec2(0.105400003, 0.486059994), Vec2(0.121610001, 0.511030018), Vec2(0.0927900001, 0.535969973), Vec2(0.0729900002, 0.507790029), Vec2(0.0897200033, 0.496589988), Vec2(0.10774, 0.523159981), Vec2(0.0729900002, 0.507790029), Vec2(0.0563400015, 0.47736001), Vec2(0.0746800005, 0.46796), Vec2(0.0897200033, 0.496589988), Vec2(0.0550500005, 0.519580007), Vec2(0.03675, 0.487300009), Vec2(0.0563400015, 0.47736001), Vec2(0.0729900002, 0.507790029), Vec2(0.0766099989, 0.549399972), Vec2(0.0550500005, 0.519580007), Vec2(0.0729900002, 0.507790029), Vec2(0.0927900001, 0.535969973), Vec2(0.141220003, 0.584730029), Vec2(0.115560003, 0.561670005), Vec2(0.128629997, 0.547410011), Vec2(0.152280003, 0.569109976), Vec2(0.115560003, 0.561670005), Vec2(0.0927900001, 0.535969973), Vec2(0.10774, 0.523159981), Vec2(0.128629997, 0.547410011), Vec2(0.101209998, 0.576569974), Vec2(0.0766099989, 0.549399972), Vec2(0.0927900001, 0.535969973), Vec2(0.115560003, 0.561670005), Vec2(0.128780007, 0.600870013), Vec2(0.101209998, 0.576569974), Vec2(0.115560003, 0.561670005), Vec2(0.141220003, 0.584730029), Vec2(0.139359996, 0.339329988), Vec2(0.140200004, 0.315100014), Vec2(0.156289995, 0.315869987), Vec2(0.155520007, 0.339249998), Vec2(0.140200004, 0.315100014), Vec2(0.142829999, 0.291150004), Vec2(0.158659995, 0.292769998), Vec2(0.156289995, 0.315869987), Vec2(0.123570003, 0.31400001), Vec2(0.126540005, 0.288850009), Vec2(0.142829999, 0.291150004), Vec2(0.140200004, 0.315100014), Vec2(0.12263, 0.339430004), Vec2(0.123570003, 0.31400001), Vec2(0.140200004, 0.315100014), Vec2(0.139359996, 0.339329988), Vec2(0.142829999, 0.291150004), Vec2(0.147200003, 0.26778999), Vec2(0.162550002, 0.270229995), Vec2(0.158659995, 0.292769998), Vec2(0.147200003, 0.26778999), Vec2(0.153209999, 0.245409995), Vec2(0.167820007, 0.248590007), Vec2(0.162550002, 0.270229995), Vec2(0.131530002, 0.264319986), Vec2(0.138469994, 0.240779996), Vec2(0.153209999, 0.245409995), Vec2(0.147200003, 0.26778999), Vec2(0.126540005, 0.288850009), Vec2(0.131530002, 0.264319986), Vec2(0.147200003, 0.26778999), Vec2(0.142829999, 0.291150004), Vec2(0.109630004, 0.285939991), Vec2(0.115340002, 0.259909987), Vec2(0.131530002, 0.264319986), Vec2(0.126540005, 0.288850009), Vec2(0.115340002, 0.259909987), Vec2(0.123360001, 0.234899998), Vec2(0.138469994, 0.240779996), Vec2(0.131530002, 0.264319986), Vec2(0.0984599963, 0.254700005), Vec2(0.107660003, 0.227980003), Vec2(0.123360001, 0.234899998), Vec2(0.115340002, 0.259909987), Vec2(0.0919200033, 0.282480001), Vec2(0.0984599963, 0.254700005), Vec2(0.115340002, 0.259909987), Vec2(0.109630004, 0.285939991), Vec2(0.105169997, 0.339560002), Vec2(0.106239997, 0.312599987), Vec2(0.123570003, 0.31400001), Vec2(0.12263, 0.339430004), Vec2(0.106239997, 0.312599987), Vec2(0.109630004, 0.285939991), Vec2(0.126540005, 0.288850009), Vec2(0.123570003, 0.31400001), Vec2(0.088059999, 0.310939997), Vec2(0.0919200033, 0.282480001), Vec2(0.109630004, 0.285939991), Vec2(0.106239997, 0.312599987), Vec2(0.0868399963, 0.339709997), Vec2(0.088059999, 0.310939997), Vec2(0.106239997, 0.312599987), Vec2(0.105169997, 0.339560002), Vec2(0.153209999, 0.245409995), Vec2(0.160699993, 0.22439), Vec2(0.174219996, 0.228259996), Vec2(0.167820007, 0.248590007), Vec2(0.160699993, 0.22439), Vec2(0.169459999, 0.205270007), Vec2(0.181370005, 0.209729999), Vec2(0.174219996, 0.228259996), Vec2(0.147269994, 0.218620002), Vec2(0.157890007, 0.198280007), Vec2(0.169459999, 0.205270007), Vec2(0.160699993, 0.22439), Vec2(0.138469994, 0.240779996), Vec2(0.147269994, 0.218620002), Vec2(0.160699993, 0.22439), Vec2(0.153209999, 0.245409995), Vec2(0.169459999, 0.205270007), Vec2(0.179299995, 0.18874), Vec2(0.188590005, 0.19382), Vec2(0.181370005, 0.209729999), Vec2(0.179299995, 0.18874), Vec2(0.190329999, 0.175870001), Vec2(0.194059998, 0.183160007), Vec2(0.188590005, 0.19382), Vec2(0.170330003, 0.180250004), Vec2(0.184719995, 0.165069997), Vec2(0.190329999, 0.175870001), Vec2(0.179299995, 0.18874), Vec2(0.157890007, 0.198280007), Vec2(0.170330003, 0.180250004), Vec2(0.179299995, 0.18874), Vec2(0.169459999, 0.205270007), Vec2(0.146139994, 0.18942), Vec2(0.160929993, 0.169740006), Vec2(0.170330003, 0.180250004), Vec2(0.157890007, 0.198280007), Vec2(0.160929993, 0.169740006), Vec2(0.177990004, 0.152649999), Vec2(0.184719995, 0.165069997), Vec2(0.170330003, 0.180250004), Vec2(0.150800005, 0.157920003), Vec2(0.17024, 0.139139995), Vec2(0.177990004, 0.152649999), Vec2(0.160929993, 0.169740006), Vec2(0.133849993, 0.179220006), Vec2(0.150800005, 0.157920003), Vec2(0.160929993, 0.169740006), Vec2(0.146139994, 0.18942), Vec2(0.123360001, 0.234899998), Vec2(0.133619994, 0.211270005), Vec2(0.147269994, 0.218620002), Vec2(0.138469994, 0.240779996), Vec2(0.133619994, 0.211270005), Vec2(0.146139994, 0.18942), Vec2(0.157890007, 0.198280007), Vec2(0.147269994, 0.218620002), Vec2(0.119460002, 0.202700004), Vec2(0.133849993, 0.179220006), Vec2(0.146139994, 0.18942), Vec2(0.133619994, 0.211270005), Vec2(0.107660003, 0.227980003), Vec2(0.119460002, 0.202700004), Vec2(0.133619994, 0.211270005), Vec2(0.123360001, 0.234899998), Vec2(0.091169998, 0.22022), Vec2(0.104549997, 0.193179995), Vec2(0.119460002, 0.202700004), Vec2(0.107660003, 0.227980003), Vec2(0.104549997, 0.193179995), Vec2(0.12077, 0.168050006), Vec2(0.133849993, 0.179220006), Vec2(0.119460002, 0.202700004), Vec2(0.0886899978, 0.182919994), Vec2(0.106720001, 0.156110004), Vec2(0.12077, 0.168050006), Vec2(0.104549997, 0.193179995), Vec2(0.073739998, 0.211789995), Vec2(0.0886899978, 0.182919994), Vec2(0.104549997, 0.193179995), Vec2(0.091169998, 0.22022), Vec2(0.12077, 0.168050006), Vec2(0.139770001, 0.145150006), Vec2(0.150800005, 0.157920003), Vec2(0.133849993, 0.179220006), Vec2(0.139770001, 0.145150006), Vec2(0.161449999, 0.124810003), Vec2(0.17024, 0.139139995), Vec2(0.150800005, 0.157920003), Vec2(0.127690002, 0.131650001), Vec2(0.15151, 0.109810002), Vec2(0.161449999, 0.124810003), Vec2(0.139770001, 0.145150006), Vec2(0.106720001, 0.156110004), Vec2(0.127690002, 0.131650001), Vec2(0.139770001, 0.145150006), Vec2(0.12077, 0.168050006), Vec2(0.0915599987, 0.143519998), Vec2(0.114440002, 0.1175), Vec2(0.127690002, 0.131650001), Vec2(0.106720001, 0.156110004), Vec2(0.114440002, 0.1175), Vec2(0.140279993, 0.0941800028), Vec2(0.15151, 0.109810002), Vec2(0.127690002, 0.131650001), Vec2(0.0998800024, 0.102739997), Vec2(0.127639994, 0.0779199973), Vec2(0.140279993, 0.0941800028), Vec2(0.114440002, 0.1175), Vec2(0.0751499981, 0.130360007), Vec2(0.0998800024, 0.102739997), Vec2(0.114440002, 0.1175), Vec2(0.0915599987, 0.143519998), Vec2(0.0551999994, 0.202790007), Vec2(0.0717599988, 0.172040001), Vec2(0.0886899978, 0.182919994), Vec2(0.073739998, 0.211789995), Vec2(0.0717599988, 0.172040001), Vec2(0.0915599987, 0.143519998), Vec2(0.106720001, 0.156110004), Vec2(0.0886899978, 0.182919994), Vec2(0.0535599999, 0.160620004), Vec2(0.0751499981, 0.130360007), Vec2(0.0915599987, 0.143519998), Vec2(0.0717599988, 0.172040001), Vec2(0.035360001, 0.193320006), Vec2(0.0535599999, 0.160620004), Vec2(0.0717599988, 0.172040001), Vec2(0.0551999994, 0.202790007), Vec2(0.0674899966, 0.339899987), Vec2(0.0688799992, 0.309049994), Vec2(0.088059999, 0.310939997), Vec2(0.0868399963, 0.339709997), Vec2(0.0688799992, 0.309049994), Vec2(0.0732899979, 0.278549999), Vec2(0.0919200033, 0.282480001), Vec2(0.088059999, 0.310939997), Vec2(0.048560001, 0.306980014), Vec2(0.0535699986, 0.274230003), Vec2(0.0732899979, 0.278549999), Vec2(0.0688799992, 0.309049994), Vec2(0.0469899997, 0.340140015), Vec2(0.048560001, 0.306980014), Vec2(0.0688799992, 0.309049994), Vec2(0.0674899966, 0.339899987), Vec2(0.0732899979, 0.278549999), Vec2(0.0807299986, 0.248809993), Vec2(0.0984599963, 0.254700005), Vec2(0.0919200033, 0.282480001), Vec2(0.0807299986, 0.248809993), Vec2(0.091169998, 0.22022), Vec2(0.107660003, 0.227980003), Vec2(0.0984599963, 0.254700005), Vec2(0.0619900003, 0.242359996), Vec2(0.073739998, 0.211789995), Vec2(0.091169998, 0.22022), Vec2(0.0807299986, 0.248809993), Vec2(0.0535699986, 0.274230003), Vec2(0.0619900003, 0.242359996), Vec2(0.0807299986, 0.248809993), Vec2(0.0732899979, 0.278549999), Vec2(0.0326200016, 0.269600004), Vec2(0.0420899987, 0.23545), Vec2(0.0619900003, 0.242359996), Vec2(0.0535699986, 0.274230003), Vec2(0.0420899987, 0.23545), Vec2(0.0551999994, 0.202790007), Vec2(0.073739998, 0.211789995), Vec2(0.0619900003, 0.242359996), Vec2(0.0208400004, 0.228159994), Vec2(0.035360001, 0.193320006), Vec2(0.0551999994, 0.202790007), Vec2(0.0420899987, 0.23545), Vec2(0.01028, 0.264710009), Vec2(0.0208400004, 0.228159994), Vec2(0.0420899987, 0.23545), Vec2(0.0326200016, 0.269600004), Vec2(0.0252, 0.340420008), Vec2(0.0269699991, 0.304760009), Vec2(0.048560001, 0.306980014), Vec2(0.0469899997, 0.340140015), Vec2(0.0269699991, 0.304760009), Vec2(0.0326200016, 0.269600004), Vec2(0.0535699986, 0.274230003), Vec2(0.048560001, 0.306980014), Vec2(0.00393000012, 0.302450001), Vec2(0.01028, 0.264710009), Vec2(0.0326200016, 0.269600004), Vec2(0.0269699991, 0.304760009), Vec2(0.00194999995, 0.340770006), Vec2(0.00393000012, 0.302450001), Vec2(0.0269699991, 0.304760009), Vec2(0.0252, 0.340420008), Vec2(0.974789977, 0.340249985), Vec2(0.97262001, 0.304729998), Vec2(0.995580018, 0.301730007), Vec2(0.99804002, 0.339870006), Vec2(0.97262001, 0.304729998), Vec2(0.966620028, 0.269789994), Vec2(0.988810003, 0.264270008), Vec2(0.995580018, 0.301730007), Vec2(0.951080024, 0.307520002), Vec2(0.945779979, 0.274960011), Vec2(0.966620028, 0.269789994), Vec2(0.97262001, 0.304729998), Vec2(0.952979982, 0.340559989), Vec2(0.951080024, 0.307520002), Vec2(0.97262001, 0.304729998), Vec2(0.974789977, 0.340249985), Vec2(0.966620028, 0.269789994), Vec2(0.956900001, 0.235929996), Vec2(0.977940023, 0.228100002), Vec2(0.988810003, 0.264270008), Vec2(0.956900001, 0.235929996), Vec2(0.94362998, 0.203610003), Vec2(0.963230014, 0.193680003), Vec2(0.977940023, 0.228100002), Vec2(0.937150002, 0.243320003), Vec2(0.925260007, 0.213019997), Vec2(0.94362998, 0.203610003), Vec2(0.956900001, 0.235929996), Vec2(0.945779979, 0.274960011), Vec2(0.937150002, 0.243320003), Vec2(0.956900001, 0.235929996), Vec2(0.966620028, 0.269789994), Vec2(0.92614001, 0.279740006), Vec2(0.918519974, 0.25018999), Vec2(0.937150002, 0.243320003), Vec2(0.945779979, 0.274960011), Vec2(0.918519974, 0.25018999), Vec2(0.907970011, 0.221829996), Vec2(0.925260007, 0.213019997), Vec2(0.937150002, 0.243320003), Vec2(0.900849998, 0.256449997), Vec2(0.891579986, 0.22992), Vec2(0.907970011, 0.221829996), Vec2(0.918519974, 0.25018999), Vec2(0.907540023, 0.284049988), Vec2(0.900849998, 0.256449997), Vec2(0.918519974, 0.25018999), Vec2(0.92614001, 0.279740006), Vec2(0.932449996, 0.340810001), Vec2(0.930779994, 0.310070008), Vec2(0.951080024, 0.307520002), Vec2(0.952979982, 0.340559989), Vec2(0.930779994, 0.310070008), Vec2(0.92614001, 0.279740006), Vec2(0.945779979, 0.274960011), Vec2(0.951080024, 0.307520002), Vec2(0.911599994, 0.312359989), Vec2(0.907540023, 0.284049988), Vec2(0.92614001, 0.279740006), Vec2(0.930779994, 0.310070008), Vec2(0.913049996, 0.341019988), Vec2(0.911599994, 0.312359989), Vec2(0.930779994, 0.310070008), Vec2(0.932449996, 0.340810001), Vec2(0.94362998, 0.203610003), Vec2(0.92701, 0.173199996), Vec2(0.944980025, 0.161420003), Vec2(0.963230014, 0.193680003), Vec2(0.92701, 0.173199996), Vec2(0.907260001, 0.145009995), Vec2(0.92347002, 0.131569996), Vec2(0.944980025, 0.161420003), Vec2(0.910269976, 0.184430003), Vec2(0.892289996, 0.157879993), Vec2(0.907260001, 0.145009995), Vec2(0.92701, 0.173199996), Vec2(0.925260007, 0.213019997), Vec2(0.910269976, 0.184430003), Vec2(0.92701, 0.173199996), Vec2(0.94362998, 0.203610003), Vec2(0.907260001, 0.145009995), Vec2(0.884530008, 0.119269997), Vec2(0.89892, 0.104319997), Vec2(0.92347002, 0.131569996), Vec2(0.884530008, 0.119269997), Vec2(0.858929992, 0.0961600021), Vec2(0.871450007, 0.0797699988), Vec2(0.89892, 0.104319997), Vec2(0.871450007, 0.133640006), Vec2(0.847829998, 0.111960001), Vec2(0.858929992, 0.0961600021), Vec2(0.884530008, 0.119269997), Vec2(0.892289996, 0.157879993), Vec2(0.871450007, 0.133640006), Vec2(0.884530008, 0.119269997), Vec2(0.907260001, 0.145009995), Vec2(0.878390014, 0.170100003), Vec2(0.859520018, 0.147379994), Vec2(0.871450007, 0.133640006), Vec2(0.892289996, 0.157879993), Vec2(0.859520018, 0.147379994), Vec2(0.838029981, 0.127169997), Vec2(0.847829998, 0.111960001), Vec2(0.871450007, 0.133640006), Vec2(0.848609984, 0.160390005), Vec2(0.829349995, 0.141719997), Vec2(0.838029981, 0.127169997), Vec2(0.859520018, 0.147379994), Vec2(0.865429997, 0.181539997), Vec2(0.848609984, 0.160390005), Vec2(0.859520018, 0.147379994), Vec2(0.878390014, 0.170100003), Vec2(0.907970011, 0.221829996), Vec2(0.894569993, 0.195020005), Vec2(0.910269976, 0.184430003), Vec2(0.925260007, 0.213019997), Vec2(0.894569993, 0.195020005), Vec2(0.878390014, 0.170100003), Vec2(0.892289996, 0.157879993), Vec2(0.910269976, 0.184430003), Vec2(0.879760027, 0.204840004), Vec2(0.865429997, 0.181539997), Vec2(0.878390014, 0.170100003), Vec2(0.894569993, 0.195020005), Vec2(0.891579986, 0.22992), Vec2(0.879760027, 0.204840004), Vec2(0.894569993, 0.195020005), Vec2(0.907970011, 0.221829996), Vec2(0.875940025, 0.237130001), Vec2(0.865670025, 0.213679999), Vec2(0.879760027, 0.204840004), Vec2(0.891579986, 0.22992), Vec2(0.865670025, 0.213679999), Vec2(0.853219986, 0.191980004), Vec2(0.865429997, 0.181539997), Vec2(0.879760027, 0.204840004), Vec2(0.85206002, 0.221249998), Vec2(0.841509998, 0.20104), Vec2(0.853219986, 0.191980004), Vec2(0.865670025, 0.213679999), Vec2(0.86085999, 0.243249997), Vec2(0.85206002, 0.221249998), Vec2(0.865670025, 0.213679999), Vec2(0.875940025, 0.237130001), Vec2(0.853219986, 0.191980004), Vec2(0.838559985, 0.172429994), Vec2(0.848609984, 0.160390005), Vec2(0.865429997, 0.181539997), Vec2(0.838559985, 0.172429994), Vec2(0.821680009, 0.155430004), Vec2(0.829349995, 0.141719997), Vec2(0.848609984, 0.160390005), Vec2(0.829190016, 0.183129996), Vec2(0.814970016, 0.168009996), Vec2(0.821680009, 0.155430004), Vec2(0.838559985, 0.172429994), Vec2(0.841509998, 0.20104), Vec2(0.829190016, 0.183129996), Vec2(0.838559985, 0.172429994), Vec2(0.853219986, 0.191980004), Vec2(0.829970002, 0.208179995), Vec2(0.820230007, 0.191760004), Vec2(0.829190016, 0.183129996), Vec2(0.841509998, 0.20104), Vec2(0.820230007, 0.191760004), Vec2(0.809329987, 0.178929999), Vec2(0.814970016, 0.168009996), Vec2(0.829190016, 0.183129996), Vec2(0.810959995, 0.196899995), Vec2(0.805589974, 0.186350003), Vec2(0.809329987, 0.178929999), Vec2(0.820230007, 0.191760004), Vec2(0.818069994, 0.212720007), Vec2(0.810959995, 0.196899995), Vec2(0.820230007, 0.191760004), Vec2(0.829970002, 0.208179995), Vec2(0.846109986, 0.248060003), Vec2(0.838649988, 0.227180004), Vec2(0.85206002, 0.221249998), Vec2(0.86085999, 0.243249997), Vec2(0.838649988, 0.227180004), Vec2(0.829970002, 0.208179995), Vec2(0.841509998, 0.20104), Vec2(0.85206002, 0.221249998), Vec2(0.825139999, 0.23116), Vec2(0.818069994, 0.212720007), Vec2(0.829970002, 0.208179995), Vec2(0.838649988, 0.227180004), Vec2(0.831499994, 0.251370013), Vec2(0.825139999, 0.23116), Vec2(0.838649988, 0.227180004), Vec2(0.846109986, 0.248060003), Vec2(0.894659996, 0.34119001), Vec2(0.89339, 0.314350009), Vec2(0.911599994, 0.312359989), Vec2(0.913049996, 0.341019988), Vec2(0.89339, 0.314350009), Vec2(0.889840007, 0.287829995), Vec2(0.907540023, 0.284049988), Vec2(0.911599994, 0.312359989), Vec2(0.876020014, 0.316009998), Vec2(0.872910023, 0.291000009), Vec2(0.889840007, 0.287829995), Vec2(0.89339, 0.314350009), Vec2(0.877139986, 0.341320008), Vec2(0.876020014, 0.316009998), Vec2(0.89339, 0.314350009), Vec2(0.894659996, 0.34119001), Vec2(0.889840007, 0.287829995), Vec2(0.884010017, 0.261970013), Vec2(0.900849998, 0.256449997), Vec2(0.907540023, 0.284049988), Vec2(0.884010017, 0.261970013), Vec2(0.875940025, 0.237130001), Vec2(0.891579986, 0.22992), Vec2(0.900849998, 0.256449997), Vec2(0.867839992, 0.266629994), Vec2(0.86085999, 0.243249997), Vec2(0.875940025, 0.237130001), Vec2(0.884010017, 0.261970013), Vec2(0.872910023, 0.291000009), Vec2(0.867839992, 0.266629994), Vec2(0.884010017, 0.261970013), Vec2(0.889840007, 0.287829995), Vec2(0.856589973, 0.293500006), Vec2(0.852150023, 0.270300001), Vec2(0.867839992, 0.266629994), Vec2(0.872910023, 0.291000009), Vec2(0.852150023, 0.270300001), Vec2(0.846109986, 0.248060003), Vec2(0.86085999, 0.243249997), Vec2(0.867839992, 0.266629994), Vec2(0.836769998, 0.272879988), Vec2(0.831499994, 0.251370013), Vec2(0.846109986, 0.248060003), Vec2(0.852150023, 0.270300001), Vec2(0.840709984, 0.29528001), Vec2(0.836769998, 0.272879988), Vec2(0.852150023, 0.270300001), Vec2(0.856589973, 0.293500006), Vec2(0.860319972, 0.341419995), Vec2(0.859329998, 0.317319989), Vec2(0.876020014, 0.316009998), Vec2(0.877139986, 0.341320008), Vec2(0.859329998, 0.317319989), Vec2(0.856589973, 0.293500006), Vec2(0.872910023, 0.291000009), Vec2(0.876020014, 0.316009998), Vec2(0.843159974, 0.31825), Vec2(0.840709984, 0.29528001), Vec2(0.856589973, 0.293500006), Vec2(0.859329998, 0.317319989), Vec2(0.844060004, 0.341500014), Vec2(0.843159974, 0.31825), Vec2(0.859329998, 0.317319989), Vec2(0.860319972, 0.341419995), Vec2(0.860819995, 0.586709976), Vec2(0.886500001, 0.563220024), Vec2(0.901189983, 0.577929974), Vec2(0.873660028, 0.603190005), Vec2(0.886500001, 0.563220024), Vec2(0.909210026, 0.537039995), Vec2(0.925719976, 0.55013001), Vec2(0.901189983, 0.577929974), Vec2(0.873160005, 0.549000025), Vec2(0.893980026, 0.524460018), Vec2(0.909210026, 0.537039995), Vec2(0.886500001, 0.563220024), Vec2(0.849479973, 0.570919991), Vec2(0.873160005, 0.549000025), Vec2(0.886500001, 0.563220024), Vec2(0.860819995, 0.586709976), Vec2(0.909210026, 0.537039995), Vec2(0.928849995, 0.508440018), Vec2(0.947109997, 0.519770026), Vec2(0.925719976, 0.55013001), Vec2(0.928849995, 0.508440018), Vec2(0.945240021, 0.47766), Vec2(0.965120018, 0.487029999), Vec2(0.947109997, 0.519770026), Vec2(0.911849976, 0.497590005), Vec2(0.926649988, 0.468699992), Vec2(0.945240021, 0.47766), Vec2(0.928849995, 0.508440018), Vec2(0.893980026, 0.524460018), Vec2(0.911849976, 0.497590005), Vec2(0.928849995, 0.508440018), Vec2(0.909210026, 0.537039995), Vec2(0.879869998, 0.512470007), Vec2(0.895940006, 0.487309992), Vec2(0.911849976, 0.497590005), Vec2(0.893980026, 0.524460018), Vec2(0.895940006, 0.487309992), Vec2(0.909169972, 0.460269988), Vec2(0.926649988, 0.468699992), Vec2(0.911849976, 0.497590005), Vec2(0.880970001, 0.477750003), Vec2(0.892629981, 0.452490002), Vec2(0.909169972, 0.460269988), Vec2(0.895940006, 0.487309992), Vec2(0.866729975, 0.501209974), Vec2(0.880970001, 0.477750003), Vec2(0.895940006, 0.487309992), Vec2(0.879869998, 0.512470007), Vec2(0.839460015, 0.555760026), Vec2(0.861020029, 0.535390019), Vec2(0.873160005, 0.549000025), Vec2(0.849479973, 0.570919991), Vec2(0.861020029, 0.535390019), Vec2(0.879869998, 0.512470007), Vec2(0.893980026, 0.524460018), Vec2(0.873160005, 0.549000025), Vec2(0.849919975, 0.522520006), Vec2(0.866729975, 0.501209974), Vec2(0.879869998, 0.512470007), Vec2(0.861020029, 0.535390019), Vec2(0.830600023, 0.541279972), Vec2(0.849919975, 0.522520006), Vec2(0.861020029, 0.535390019), Vec2(0.839460015, 0.555760026), Vec2(0.945240021, 0.47766), Vec2(0.958199978, 0.445010006), Vec2(0.979480028, 0.452219993), Vec2(0.965120018, 0.487029999), Vec2(0.958199978, 0.445010006), Vec2(0.967530012, 0.41091001), Vec2(0.989899993, 0.41573), Vec2(0.979480028, 0.452219993), Vec2(0.938260019, 0.438149989), Vec2(0.946560025, 0.406320006), Vec2(0.967530012, 0.41091001), Vec2(0.958199978, 0.445010006), Vec2(0.926649988, 0.468699992), Vec2(0.938260019, 0.438149989), Vec2(0.958199978, 0.445010006), Vec2(0.945240021, 0.47766), Vec2(0.967530012, 0.41091001), Vec2(0.973089993, 0.375820011), Vec2(0.996140003, 0.378089994), Vec2(0.989899993, 0.41573), Vec2(0.973089993, 0.375820011), Vec2(0.974789977, 0.340249985), Vec2(0.99804002, 0.339870006), Vec2(0.996140003, 0.378089994), Vec2(0.951479971, 0.373640001), Vec2(0.952979982, 0.340559989), Vec2(0.974789977, 0.340249985), Vec2(0.973089993, 0.375820011), Vec2(0.946560025, 0.406320006), Vec2(0.951479971, 0.373640001), Vec2(0.973089993, 0.375820011), Vec2(0.967530012, 0.41091001), Vec2(0.926810026, 0.402020007), Vec2(0.931129992, 0.371589988), Vec2(0.951479971, 0.373640001), Vec2(0.946560025, 0.406320006), Vec2(0.931129992, 0.371589988), Vec2(0.932449996, 0.340810001), Vec2(0.952979982, 0.340559989), Vec2(0.951479971, 0.373640001), Vec2(0.911899984, 0.369709998), Vec2(0.913049996, 0.341019988), Vec2(0.932449996, 0.340810001), Vec2(0.931129992, 0.371589988), Vec2(0.90812999, 0.398090005), Vec2(0.911899984, 0.369709998), Vec2(0.931129992, 0.371589988), Vec2(0.926810026, 0.402020007), Vec2(0.909169972, 0.460269988), Vec2(0.919480026, 0.431710005), Vec2(0.938260019, 0.438149989), Vec2(0.926649988, 0.468699992), Vec2(0.919480026, 0.431710005), Vec2(0.926810026, 0.402020007), Vec2(0.946560025, 0.406320006), Vec2(0.938260019, 0.438149989), Vec2(0.90170002, 0.425810009), Vec2(0.90812999, 0.398090005), Vec2(0.926810026, 0.402020007), Vec2(0.919480026, 0.431710005), Vec2(0.892629981, 0.452490002), Vec2(0.90170002, 0.425810009), Vec2(0.919480026, 0.431710005), Vec2(0.909169972, 0.460269988), Vec2(0.876869977, 0.445529997), Vec2(0.884760022, 0.42058), Vec2(0.90170002, 0.425810009), Vec2(0.892629981, 0.452490002), Vec2(0.884760022, 0.42058), Vec2(0.890359998, 0.394630015), Vec2(0.90812999, 0.398090005), Vec2(0.90170002, 0.425810009), Vec2(0.868499994, 0.41613999), Vec2(0.873380005, 0.391689986), Vec2(0.890359998, 0.394630015), Vec2(0.884760022, 0.42058), Vec2(0.861689985, 0.439610004), Vec2(0.868499994, 0.41613999), Vec2(0.884760022, 0.42058), Vec2(0.876869977, 0.445529997), Vec2(0.890359998, 0.394630015), Vec2(0.893660009, 0.368050009), Vec2(0.911899984, 0.369709998), Vec2(0.90812999, 0.398090005), Vec2(0.893660009, 0.368050009), Vec2(0.894659996, 0.34119001), Vec2(0.913049996, 0.341019988), Vec2(0.911899984, 0.369709998), Vec2(0.876259983, 0.366640002), Vec2(0.877139986, 0.341320008), Vec2(0.894659996, 0.34119001), Vec2(0.893660009, 0.368050009), Vec2(0.873380005, 0.391689986), Vec2(0.876259983, 0.366640002), Vec2(0.893660009, 0.368050009), Vec2(0.890359998, 0.394630015), Vec2(0.857010007, 0.389380008), Vec2(0.859549999, 0.365539998), Vec2(0.876259983, 0.366640002), Vec2(0.873380005, 0.391689986), Vec2(0.859549999, 0.365539998), Vec2(0.860319972, 0.341419995), Vec2(0.877139986, 0.341320008), Vec2(0.876259983, 0.366640002), Vec2(0.843360007, 0.364749998), Vec2(0.844060004, 0.341500014), Vec2(0.860319972, 0.341419995), Vec2(0.859549999, 0.365539998), Vec2(0.841090024, 0.38775), Vec2(0.843360007, 0.364749998), Vec2(0.859549999, 0.365539998), Vec2(0.857010007, 0.389380008), Vec2(0.846870005, 0.434949994), Vec2(0.852750003, 0.412640005), Vec2(0.868499994, 0.41613999), Vec2(0.861689985, 0.439610004), Vec2(0.852750003, 0.412640005), Vec2(0.857010007, 0.389380008), Vec2(0.873380005, 0.391689986), Vec2(0.868499994, 0.41613999), Vec2(0.83732003, 0.410189986), Vec2(0.841090024, 0.38775), Vec2(0.857010007, 0.389380008), Vec2(0.852750003, 0.412640005), Vec2(0.832189977, 0.431739986), Vec2(0.83732003, 0.410189986), Vec2(0.852750003, 0.412640005), Vec2(0.846870005, 0.434949994), Vec2(0.822780013, 0.527639985), Vec2(0.839720011, 0.510590017), Vec2(0.849919975, 0.522520006), Vec2(0.830600023, 0.541279972), Vec2(0.839720011, 0.510590017), Vec2(0.854369998, 0.490940005), Vec2(0.866729975, 0.501209974), Vec2(0.849919975, 0.522520006), Vec2(0.830229998, 0.499989986), Vec2(0.84254998, 0.482010007), Vec2(0.854369998, 0.490940005), Vec2(0.839720011, 0.510590017), Vec2(0.815949976, 0.515120029), Vec2(0.830229998, 0.499989986), Vec2(0.839720011, 0.510590017), Vec2(0.822780013, 0.527639985), Vec2(0.854369998, 0.490940005), Vec2(0.866739988, 0.469119996), Vec2(0.880970001, 0.477750003), Vec2(0.866729975, 0.501209974), Vec2(0.866739988, 0.469119996), Vec2(0.876869977, 0.445529997), Vec2(0.892629981, 0.452490002), Vec2(0.880970001, 0.477750003), Vec2(0.853020012, 0.461710006), Vec2(0.861689985, 0.439610004), Vec2(0.876869977, 0.445529997), Vec2(0.866739988, 0.469119996), Vec2(0.84254998, 0.482010007), Vec2(0.853020012, 0.461710006), Vec2(0.866739988, 0.469119996), Vec2(0.854369998, 0.490940005), Vec2(0.830900013, 0.474970013), Vec2(0.839519978, 0.455900013), Vec2(0.853020012, 0.461710006), Vec2(0.84254998, 0.482010007), Vec2(0.839519978, 0.455900013), Vec2(0.846870005, 0.434949994), Vec2(0.861689985, 0.439610004), Vec2(0.853020012, 0.461710006), Vec2(0.825929999, 0.452010006), Vec2(0.832189977, 0.431739986), Vec2(0.846870005, 0.434949994), Vec2(0.839519978, 0.455900013), Vec2(0.81892997, 0.470479995), Vec2(0.825929999, 0.452010006), Vec2(0.839519978, 0.455900013), Vec2(0.830900013, 0.474970013), Vec2(0.810230017, 0.504260004), Vec2(0.821179986, 0.491450012), Vec2(0.830229998, 0.499989986), Vec2(0.815949976, 0.515120029), Vec2(0.821179986, 0.491450012), Vec2(0.830900013, 0.474970013), Vec2(0.84254998, 0.482010007), Vec2(0.830229998, 0.499989986), Vec2(0.811839998, 0.486330003), Vec2(0.81892997, 0.470479995), Vec2(0.830900013, 0.474970013), Vec2(0.821179986, 0.491450012), Vec2(0.806450009, 0.496930003), Vec2(0.811839998, 0.486330003), Vec2(0.821179986, 0.491450012), Vec2(0.810230017, 0.504260004), Vec2(0.203470007, 0.498450011), Vec2(0.203679994, 0.511870027), Vec2(0.190530002, 0.502749979), Vec2(0.194230005, 0.495350003), Vec2(0.203679994, 0.511870027), Vec2(0.201320007, 0.525730014), Vec2(0.184980005, 0.513610005), Vec2(0.190530002, 0.502749979), Vec2(0.219099998, 0.518850029), Vec2(0.219359994, 0.535220027), Vec2(0.201320007, 0.525730014), Vec2(0.203679994, 0.511870027), Vec2(0.217020005, 0.502390027), Vec2(0.219099998, 0.518850029), Vec2(0.203679994, 0.511870027), Vec2(0.203470007, 0.498450011), Vec2(0.201320007, 0.525730014), Vec2(0.19743, 0.540340006), Vec2(0.178340003, 0.52609998), Vec2(0.184980005, 0.513610005), Vec2(0.19743, 0.540340006), Vec2(0.192340001, 0.555649996), Vec2(0.170719996, 0.539680004), Vec2(0.178340003, 0.52609998), Vec2(0.218219995, 0.55181998), Vec2(0.215890005, 0.56882), Vec2(0.192340001, 0.555649996), Vec2(0.19743, 0.540340006), Vec2(0.219359994, 0.535220027), Vec2(0.218219995, 0.55181998), Vec2(0.19743, 0.540340006), Vec2(0.201320007, 0.525730014), Vec2(0.238639995, 0.542479992), Vec2(0.240270004, 0.56072998), Vec2(0.218219995, 0.55181998), Vec2(0.219359994, 0.535220027), Vec2(0.240270004, 0.56072998), Vec2(0.240960002, 0.579200029), Vec2(0.215890005, 0.56882), Vec2(0.218219995, 0.55181998), Vec2(0.263069987, 0.567149997), Vec2(0.267040014, 0.586799979), Vec2(0.240960002, 0.579200029), Vec2(0.240270004, 0.56072998), Vec2(0.258659989, 0.547689974), Vec2(0.263069987, 0.567149997), Vec2(0.240270004, 0.56072998), Vec2(0.238639995, 0.542479992), Vec2(0.232360005, 0.506039977), Vec2(0.236039996, 0.524320006), Vec2(0.219099998, 0.518850029), Vec2(0.217020005, 0.502390027), Vec2(0.236039996, 0.524320006), Vec2(0.238639995, 0.542479992), Vec2(0.219359994, 0.535220027), Vec2(0.219099998, 0.518850029), Vec2(0.253850013, 0.528330028), Vec2(0.258659989, 0.547689974), Vec2(0.238639995, 0.542479992), Vec2(0.236039996, 0.524320006), Vec2(0.248649999, 0.508920014), Vec2(0.253850013, 0.528330028), Vec2(0.236039996, 0.524320006), Vec2(0.232360005, 0.506039977), Vec2(0.192340001, 0.555649996), Vec2(0.186110005, 0.571579993), Vec2(0.162070006, 0.554069996), Vec2(0.170719996, 0.539680004), Vec2(0.186110005, 0.571579993), Vec2(0.17859, 0.588069975), Vec2(0.152280003, 0.569109976), Vec2(0.162070006, 0.554069996), Vec2(0.212380007, 0.586239994), Vec2(0.20747, 0.604120016), Vec2(0.17859, 0.588069975), Vec2(0.186110005, 0.571579993), Vec2(0.215890005, 0.56882), Vec2(0.212380007, 0.586239994), Vec2(0.186110005, 0.571579993), Vec2(0.192340001, 0.555649996), Vec2(0.17859, 0.588069975), Vec2(0.169599995, 0.605099976), Vec2(0.141220003, 0.584730029), Vec2(0.152280003, 0.569109976), Vec2(0.169599995, 0.605099976), Vec2(0.158940002, 0.622770011), Vec2(0.128780007, 0.600870013), Vec2(0.141220003, 0.584730029), Vec2(0.200859994, 0.62252003), Vec2(0.192269996, 0.641589999), Vec2(0.158940002, 0.622770011), Vec2(0.169599995, 0.605099976), Vec2(0.20747, 0.604120016), Vec2(0.200859994, 0.62252003), Vec2(0.169599995, 0.605099976), Vec2(0.17859, 0.588069975), Vec2(0.238780007, 0.617120028), Vec2(0.235039994, 0.636740029), Vec2(0.200859994, 0.62252003), Vec2(0.20747, 0.604120016), Vec2(0.235039994, 0.636740029), Vec2(0.228850007, 0.657119989), Vec2(0.192269996, 0.641589999), Vec2(0.200859994, 0.62252003), Vec2(0.272190005, 0.647440016), Vec2(0.268929988, 0.668900013), Vec2(0.228850007, 0.657119989), Vec2(0.235039994, 0.636740029), Vec2(0.272309989, 0.626839995), Vec2(0.272190005, 0.647440016), Vec2(0.235039994, 0.636740029), Vec2(0.238780007, 0.617120028), Vec2(0.240960002, 0.579200029), Vec2(0.240580007, 0.597980022), Vec2(0.212380007, 0.586239994), Vec2(0.215890005, 0.56882), Vec2(0.240580007, 0.597980022), Vec2(0.238780007, 0.617120028), Vec2(0.20747, 0.604120016), Vec2(0.212380007, 0.586239994), Vec2(0.270300001, 0.606679976), Vec2(0.272309989, 0.626839995), Vec2(0.238780007, 0.617120028), Vec2(0.240580007, 0.597980022), Vec2(0.267040014, 0.586799979), Vec2(0.270300001, 0.606679976), Vec2(0.240580007, 0.597980022), Vec2(0.240960002, 0.579200029), Vec2(0.293480009, 0.591530025), Vec2(0.300940007, 0.612169981), Vec2(0.270300001, 0.606679976), Vec2(0.267040014, 0.586799979), Vec2(0.300940007, 0.612169981), Vec2(0.307700008, 0.63301003), Vec2(0.272309989, 0.626839995), Vec2(0.270300001, 0.606679976), Vec2(0.331440002, 0.614180028), Vec2(0.344150007, 0.635249972), Vec2(0.307700008, 0.63301003), Vec2(0.300940007, 0.612169981), Vec2(0.319370002, 0.593249977), Vec2(0.331440002, 0.614180028), Vec2(0.300940007, 0.612169981), Vec2(0.293480009, 0.591530025), Vec2(0.307700008, 0.63301003), Vec2(0.312409997, 0.654190004), Vec2(0.272190005, 0.647440016), Vec2(0.272309989, 0.626839995), Vec2(0.312409997, 0.654190004), Vec2(0.313010007, 0.67632997), Vec2(0.268929988, 0.668900013), Vec2(0.272190005, 0.647440016), Vec2(0.355780005, 0.656459987), Vec2(0.362320006, 0.678409994), Vec2(0.313010007, 0.67632997), Vec2(0.312409997, 0.654190004), Vec2(0.344150007, 0.635249972), Vec2(0.355780005, 0.656459987), Vec2(0.312409997, 0.654190004), Vec2(0.307700008, 0.63301003), Vec2(0.379680008, 0.633029997), Vec2(0.401789993, 0.653450012), Vec2(0.355780005, 0.656459987), Vec2(0.344150007, 0.635249972), Vec2(0.401789993, 0.653450012), Vec2(0.420439988, 0.673370004), Vec2(0.362320006, 0.678409994), Vec2(0.355780005, 0.656459987), Vec2(0.444310009, 0.643970013), Vec2(0.500389993, 0.658290029), Vec2(0.420439988, 0.673370004), Vec2(0.401789993, 0.653450012), Vec2(0.409880012, 0.625890017), Vec2(0.444310009, 0.643970013), Vec2(0.401789993, 0.653450012), Vec2(0.379680008, 0.633029997), Vec2(0.343589991, 0.591830015), Vec2(0.360130012, 0.612429976), Vec2(0.331440002, 0.614180028), Vec2(0.319370002, 0.593249977), Vec2(0.360130012, 0.612429976), Vec2(0.379680008, 0.633029997), Vec2(0.344150007, 0.635249972), Vec2(0.331440002, 0.614180028), Vec2(0.384849995, 0.606750011), Vec2(0.409880012, 0.625890017), Vec2(0.379680008, 0.633029997), Vec2(0.360130012, 0.612429976), Vec2(0.365060002, 0.587239981), Vec2(0.384849995, 0.606750011), Vec2(0.360130012, 0.612429976), Vec2(0.343589991, 0.591830015), Vec2(0.265329987, 0.510739982), Vec2(0.271970004, 0.530799985), Vec2(0.253850013, 0.528330028), Vec2(0.248649999, 0.508920014), Vec2(0.271970004, 0.530799985), Vec2(0.278849989, 0.550880015), Vec2(0.258659989, 0.547689974), Vec2(0.253850013, 0.528330028), Vec2(0.289909989, 0.531620026), Vec2(0.298669994, 0.551989973), Vec2(0.278849989, 0.550880015), Vec2(0.271970004, 0.530799985), Vec2(0.281960011, 0.511309981), Vec2(0.289909989, 0.531620026), Vec2(0.271970004, 0.530799985), Vec2(0.265329987, 0.510739982), Vec2(0.278849989, 0.550880015), Vec2(0.286029994, 0.57111001), Vec2(0.263069987, 0.567149997), Vec2(0.258659989, 0.547689974), Vec2(0.286029994, 0.57111001), Vec2(0.293480009, 0.591530025), Vec2(0.267040014, 0.586799979), Vec2(0.263069987, 0.567149997), Vec2(0.30844, 0.572520018), Vec2(0.319370002, 0.593249977), Vec2(0.293480009, 0.591530025), Vec2(0.286029994, 0.57111001), Vec2(0.298669994, 0.551989973), Vec2(0.30844, 0.572520018), Vec2(0.286029994, 0.57111001), Vec2(0.278849989, 0.550880015), Vec2(0.317589998, 0.550979972), Vec2(0.329569995, 0.571330011), Vec2(0.30844, 0.572520018), Vec2(0.298669994, 0.551989973), Vec2(0.329569995, 0.571330011), Vec2(0.343589991, 0.591830015), Vec2(0.319370002, 0.593249977), Vec2(0.30844, 0.572520018), Vec2(0.348800004, 0.567589998), Vec2(0.365060002, 0.587239981), Vec2(0.343589991, 0.591830015), Vec2(0.329569995, 0.571330011), Vec2(0.335189998, 0.547879994), Vec2(0.348800004, 0.567589998), Vec2(0.329569995, 0.571330011), Vec2(0.317589998, 0.550979972), Vec2(0.298220009, 0.510519981), Vec2(0.307240009, 0.530740023), Vec2(0.289909989, 0.531620026), Vec2(0.281960011, 0.511309981), Vec2(0.307240009, 0.530740023), Vec2(0.317589998, 0.550979972), Vec2(0.298669994, 0.551989973), Vec2(0.289909989, 0.531620026), Vec2(0.323650002, 0.528159976), Vec2(0.335189998, 0.547879994), Vec2(0.317589998, 0.550979972), Vec2(0.307240009, 0.530740023), Vec2(0.313829988, 0.508350015), Vec2(0.323650002, 0.528159976), Vec2(0.307240009, 0.530740023), Vec2(0.298220009, 0.510519981), Vec2(0.842700005, 0.625060022), Vec2(0.832099974, 0.607219994), Vec2(0.860819995, 0.586709976), Vec2(0.873660028, 0.603190005), Vec2(0.832099974, 0.607219994), Vec2(0.823029995, 0.590030015), Vec2(0.849479973, 0.570919991), Vec2(0.860819995, 0.586709976), Vec2(0.800450027, 0.624689996), Vec2(0.793940008, 0.606140018), Vec2(0.823029995, 0.590030015), Vec2(0.832099974, 0.607219994), Vec2(0.80884999, 0.643920004), Vec2(0.800450027, 0.624689996), Vec2(0.832099974, 0.607219994), Vec2(0.842700005, 0.625060022), Vec2(0.823029995, 0.590030015), Vec2(0.815410018, 0.573409975), Vec2(0.839460015, 0.555760026), Vec2(0.849479973, 0.570919991), Vec2(0.815410018, 0.573409975), Vec2(0.809050024, 0.557370007), Vec2(0.830600023, 0.541279972), Vec2(0.839460015, 0.555760026), Vec2(0.789049983, 0.588119984), Vec2(0.785489976, 0.570590019), Vec2(0.809050024, 0.557370007), Vec2(0.815410018, 0.573409975), Vec2(0.793940008, 0.606140018), Vec2(0.789049983, 0.588119984), Vec2(0.815410018, 0.573409975), Vec2(0.823029995, 0.590030015), Vec2(0.762390018, 0.619090021), Vec2(0.760730028, 0.599810004), Vec2(0.789049983, 0.588119984), Vec2(0.793940008, 0.606140018), Vec2(0.760730028, 0.599810004), Vec2(0.760389984, 0.580959976), Vec2(0.785489976, 0.570590019), Vec2(0.789049983, 0.588119984), Vec2(0.730910003, 0.608399987), Vec2(0.734250009, 0.58851999), Vec2(0.760389984, 0.580959976), Vec2(0.760730028, 0.599810004), Vec2(0.728670001, 0.628660023), Vec2(0.730910003, 0.608399987), Vec2(0.760730028, 0.599810004), Vec2(0.762390018, 0.619090021), Vec2(0.771799982, 0.659430027), Vec2(0.765900016, 0.638890028), Vec2(0.800450027, 0.624689996), Vec2(0.80884999, 0.643920004), Vec2(0.765900016, 0.638890028), Vec2(0.762390018, 0.619090021), Vec2(0.793940008, 0.606140018), Vec2(0.800450027, 0.624689996), Vec2(0.728420019, 0.649460018), Vec2(0.728670001, 0.628660023), Vec2(0.762390018, 0.619090021), Vec2(0.765900016, 0.638890028), Vec2(0.731289983, 0.671140015), Vec2(0.728420019, 0.649460018), Vec2(0.765900016, 0.638890028), Vec2(0.771799982, 0.659430027), Vec2(0.809050024, 0.557370007), Vec2(0.803820014, 0.541989982), Vec2(0.822780013, 0.527639985), Vec2(0.830600023, 0.541279972), Vec2(0.803820014, 0.541989982), Vec2(0.799759984, 0.527360022), Vec2(0.815949976, 0.515120029), Vec2(0.822780013, 0.527639985), Vec2(0.783070028, 0.553539991), Vec2(0.781769991, 0.536920011), Vec2(0.799759984, 0.527360022), Vec2(0.803820014, 0.541989982), Vec2(0.785489976, 0.570590019), Vec2(0.783070028, 0.553539991), Vec2(0.803820014, 0.541989982), Vec2(0.809050024, 0.557370007), Vec2(0.799759984, 0.527360022), Vec2(0.797219992, 0.513509989), Vec2(0.810230017, 0.504260004), Vec2(0.815949976, 0.515120029), Vec2(0.797219992, 0.513509989), Vec2(0.797230005, 0.500100017), Vec2(0.806450009, 0.496930003), Vec2(0.810230017, 0.504260004), Vec2(0.781840026, 0.520579994), Vec2(0.783689976, 0.504140019), Vec2(0.797230005, 0.500100017), Vec2(0.797219992, 0.513509989), Vec2(0.781769991, 0.536920011), Vec2(0.781840026, 0.520579994), Vec2(0.797219992, 0.513509989), Vec2(0.799759984, 0.527360022), Vec2(0.762480021, 0.544250011), Vec2(0.764869988, 0.526130021), Vec2(0.781840026, 0.520579994), Vec2(0.781769991, 0.536920011), Vec2(0.764869988, 0.526130021), Vec2(0.768320024, 0.5079), Vec2(0.783689976, 0.504140019), Vec2(0.781840026, 0.520579994), Vec2(0.746990025, 0.530250013), Vec2(0.751950026, 0.510909975), Vec2(0.768320024, 0.5079), Vec2(0.764869988, 0.526130021), Vec2(0.742399991, 0.549539983), Vec2(0.746990025, 0.530250013), Vec2(0.764869988, 0.526130021), Vec2(0.762480021, 0.544250011), Vec2(0.760389984, 0.580959976), Vec2(0.761009991, 0.562470019), Vec2(0.783070028, 0.553539991), Vec2(0.785489976, 0.570590019), Vec2(0.761009991, 0.562470019), Vec2(0.762480021, 0.544250011), Vec2(0.781769991, 0.536920011), Vec2(0.783070028, 0.553539991), Vec2(0.738150001, 0.56892997), Vec2(0.742399991, 0.549539983), Vec2(0.762480021, 0.544250011), Vec2(0.761009991, 0.562470019), Vec2(0.734250009, 0.58851999), Vec2(0.738150001, 0.56892997), Vec2(0.761009991, 0.562470019), Vec2(0.760389984, 0.580959976), Vec2(0.707710028, 0.593240023), Vec2(0.715059996, 0.572960019), Vec2(0.738150001, 0.56892997), Vec2(0.734250009, 0.58851999), Vec2(0.715059996, 0.572960019), Vec2(0.722069979, 0.552860022), Vec2(0.742399991, 0.549539983), Vec2(0.738150001, 0.56892997), Vec2(0.692430019, 0.574530005), Vec2(0.702040017, 0.554139972), Vec2(0.722069979, 0.552860022), Vec2(0.715059996, 0.572960019), Vec2(0.681620002, 0.595070004), Vec2(0.692430019, 0.574530005), Vec2(0.715059996, 0.572960019), Vec2(0.707710028, 0.593240023), Vec2(0.722069979, 0.552860022), Vec2(0.728739977, 0.532869995), Vec2(0.746990025, 0.530250013), Vec2(0.742399991, 0.549539983), Vec2(0.728739977, 0.532869995), Vec2(0.73514998, 0.512889981), Vec2(0.751950026, 0.510909975), Vec2(0.746990025, 0.530250013), Vec2(0.71063, 0.533869982), Vec2(0.718360007, 0.513629973), Vec2(0.73514998, 0.512889981), Vec2(0.728739977, 0.532869995), Vec2(0.702040017, 0.554139972), Vec2(0.71063, 0.533869982), Vec2(0.728739977, 0.532869995), Vec2(0.722069979, 0.552860022), Vec2(0.682889998, 0.553330004), Vec2(0.693090022, 0.533169985), Vec2(0.71063, 0.533869982), Vec2(0.702040017, 0.554139972), Vec2(0.693090022, 0.533169985), Vec2(0.701950014, 0.513010025), Vec2(0.718360007, 0.513629973), Vec2(0.71063, 0.533869982), Vec2(0.676490009, 0.530740023), Vec2(0.686190009, 0.51098001), Vec2(0.701950014, 0.513010025), Vec2(0.693090022, 0.533169985), Vec2(0.665059984, 0.550390005), Vec2(0.676490009, 0.530740023), Vec2(0.693090022, 0.533169985), Vec2(0.682889998, 0.553330004), Vec2(0.657029986, 0.593879998), Vec2(0.671000004, 0.573570013), Vec2(0.692430019, 0.574530005), Vec2(0.681620002, 0.595070004), Vec2(0.671000004, 0.573570013), Vec2(0.682889998, 0.553330004), Vec2(0.702040017, 0.554139972), Vec2(0.692430019, 0.574530005), Vec2(0.651480019, 0.569999993), Vec2(0.665059984, 0.550390005), Vec2(0.682889998, 0.553330004), Vec2(0.671000004, 0.573570013), Vec2(0.635169983, 0.589510024), Vec2(0.651480019, 0.569999993), Vec2(0.671000004, 0.573570013), Vec2(0.657029986, 0.593879998), Vec2(0.686789989, 0.678439975), Vec2(0.687950015, 0.65595001), Vec2(0.728420019, 0.649460018), Vec2(0.731289983, 0.671140015), Vec2(0.687950015, 0.65595001), Vec2(0.693180025, 0.634570003), Vec2(0.728670001, 0.628660023), Vec2(0.728420019, 0.649460018), Vec2(0.644529998, 0.657729983), Vec2(0.656729996, 0.636539996), Vec2(0.693180025, 0.634570003), Vec2(0.687950015, 0.65595001), Vec2(0.637009978, 0.680320024), Vec2(0.644529998, 0.657729983), Vec2(0.687950015, 0.65595001), Vec2(0.686789989, 0.678439975), Vec2(0.693180025, 0.634570003), Vec2(0.700209975, 0.613749981), Vec2(0.730910003, 0.608399987), Vec2(0.728670001, 0.628660023), Vec2(0.700209975, 0.613749981), Vec2(0.707710028, 0.593240023), Vec2(0.734250009, 0.58851999), Vec2(0.730910003, 0.608399987), Vec2(0.669589996, 0.615740001), Vec2(0.681620002, 0.595070004), Vec2(0.707710028, 0.593240023), Vec2(0.700209975, 0.613749981), Vec2(0.656729996, 0.636539996), Vec2(0.669589996, 0.615740001), Vec2(0.700209975, 0.613749981), Vec2(0.693180025, 0.634570003), Vec2(0.621029973, 0.634329975), Vec2(0.640519977, 0.614189982), Vec2(0.669589996, 0.615740001), Vec2(0.656729996, 0.636539996), Vec2(0.640519977, 0.614189982), Vec2(0.657029986, 0.593879998), Vec2(0.681620002, 0.595070004), Vec2(0.669589996, 0.615740001), Vec2(0.615159988, 0.608810008), Vec2(0.635169983, 0.589510024), Vec2(0.657029986, 0.593879998), Vec2(0.640519977, 0.614189982), Vec2(0.589739978, 0.627610028), Vec2(0.615159988, 0.608810008), Vec2(0.640519977, 0.614189982), Vec2(0.621029973, 0.634329975), Vec2(0.578499973, 0.674719989), Vec2(0.598869979, 0.654150009), Vec2(0.644529998, 0.657729983), Vec2(0.637009978, 0.680320024), Vec2(0.598869979, 0.654150009), Vec2(0.621029973, 0.634329975), Vec2(0.656729996, 0.636539996), Vec2(0.644529998, 0.657729983), Vec2(0.555029988, 0.645049989), Vec2(0.589739978, 0.627610028), Vec2(0.621029973, 0.634329975), Vec2(0.598869979, 0.654150009), Vec2(0.500389993, 0.658290029), Vec2(0.555029988, 0.645049989), Vec2(0.598869979, 0.654150009), Vec2(0.578499973, 0.674719989), Vec2(0.500389993, 0.63331002), Vec2(0.538890004, 0.62766999), Vec2(0.555029988, 0.645049989), Vec2(0.500389993, 0.658290029), Vec2(0.538890004, 0.62766999), Vec2(0.570550025, 0.614780009), Vec2(0.589739978, 0.627610028), Vec2(0.555029988, 0.645049989), Vec2(0.530480027, 0.608229995), Vec2(0.557850003, 0.599129975), Vec2(0.570550025, 0.614780009), Vec2(0.538890004, 0.62766999), Vec2(0.500389993, 0.611329973), Vec2(0.530480027, 0.608229995), Vec2(0.538890004, 0.62766999), Vec2(0.500389993, 0.63331002), Vec2(0.570550025, 0.614780009), Vec2(0.596099973, 0.599039972), Vec2(0.615159988, 0.608810008), Vec2(0.589739978, 0.627610028), Vec2(0.596099973, 0.599039972), Vec2(0.617009997, 0.581849992), Vec2(0.635169983, 0.589510024), Vec2(0.615159988, 0.608810008), Vec2(0.581690013, 0.586449981), Vec2(0.602129996, 0.571669996), Vec2(0.617009997, 0.581849992), Vec2(0.596099973, 0.599039972), Vec2(0.557850003, 0.599129975), Vec2(0.581690013, 0.586449981), Vec2(0.596099973, 0.599039972), Vec2(0.570550025, 0.614780009), Vec2(0.549090028, 0.582029998), Vec2(0.570729971, 0.572009981), Vec2(0.581690013, 0.586449981), Vec2(0.557850003, 0.599129975), Vec2(0.570729971, 0.572009981), Vec2(0.590020001, 0.559599996), Vec2(0.602129996, 0.571669996), Vec2(0.581690013, 0.586449981), Vec2(0.562319994, 0.556420028), Vec2(0.58020997, 0.54618001), Vec2(0.590020001, 0.559599996), Vec2(0.570729971, 0.572009981), Vec2(0.542770028, 0.564339995), Vec2(0.562319994, 0.556420028), Vec2(0.570729971, 0.572009981), Vec2(0.549090028, 0.582029998), Vec2(0.500389993, 0.590650022), Vec2(0.525390029, 0.588639975), Vec2(0.530480027, 0.608229995), Vec2(0.500389993, 0.611329973), Vec2(0.525390029, 0.588639975), Vec2(0.549090028, 0.582029998), Vec2(0.557850003, 0.599129975), Vec2(0.530480027, 0.608229995), Vec2(0.521939993, 0.569310009), Vec2(0.542770028, 0.564339995), Vec2(0.549090028, 0.582029998), Vec2(0.525390029, 0.588639975), Vec2(0.500389993, 0.570739985), Vec2(0.521939993, 0.569310009), Vec2(0.525390029, 0.588639975), Vec2(0.500389993, 0.590650022), Vec2(0.617009997, 0.581849992), Vec2(0.634360015, 0.563870013), Vec2(0.651480019, 0.569999993), Vec2(0.635169983, 0.589510024), Vec2(0.634360015, 0.563870013), Vec2(0.648859978, 0.545419991), Vec2(0.665059984, 0.550390005), Vec2(0.651480019, 0.569999993), Vec2(0.619560003, 0.55558002), Vec2(0.634360015, 0.538630009), Vec2(0.648859978, 0.545419991), Vec2(0.634360015, 0.563870013), Vec2(0.602129996, 0.571669996), Vec2(0.619560003, 0.55558002), Vec2(0.634360015, 0.563870013), Vec2(0.617009997, 0.581849992), Vec2(0.648859978, 0.545419991), Vec2(0.661040008, 0.526639998), Vec2(0.676490009, 0.530740023), Vec2(0.665059984, 0.550390005), Vec2(0.661040008, 0.526639998), Vec2(0.671270013, 0.507589996), Vec2(0.686190009, 0.51098001), Vec2(0.676490009, 0.530740023), Vec2(0.64684999, 0.52105999), Vec2(0.657299995, 0.502950013), Vec2(0.671270013, 0.507589996), Vec2(0.661040008, 0.526639998), Vec2(0.634360015, 0.538630009), Vec2(0.64684999, 0.52105999), Vec2(0.661040008, 0.526639998), Vec2(0.648859978, 0.545419991), Vec2(0.621529996, 0.530330002), Vec2(0.633970022, 0.514190018), Vec2(0.64684999, 0.52105999), Vec2(0.634360015, 0.538630009), Vec2(0.633970022, 0.514190018), Vec2(0.644360006, 0.497269988), Vec2(0.657299995, 0.502950013), Vec2(0.64684999, 0.52105999), Vec2(0.622420013, 0.50632), Vec2(0.632510006, 0.490810007), Vec2(0.644360006, 0.497269988), Vec2(0.633970022, 0.514190018), Vec2(0.610329986, 0.520829976), Vec2(0.622420013, 0.50632), Vec2(0.633970022, 0.514190018), Vec2(0.621529996, 0.530330002), Vec2(0.590020001, 0.559599996), Vec2(0.606920004, 0.545560002), Vec2(0.619560003, 0.55558002), Vec2(0.602129996, 0.571669996), Vec2(0.606920004, 0.545560002), Vec2(0.621529996, 0.530330002), Vec2(0.634360015, 0.538630009), Vec2(0.619560003, 0.55558002), Vec2(0.596249998, 0.534189999), Vec2(0.610329986, 0.520829976), Vec2(0.621529996, 0.530330002), Vec2(0.606920004, 0.545560002), Vec2(0.58020997, 0.54618001), Vec2(0.596249998, 0.534189999), Vec2(0.606920004, 0.545560002), Vec2(0.590020001, 0.559599996), Vec2(0.572329998, 0.531830013), Vec2(0.587379992, 0.521820009), Vec2(0.596249998, 0.534189999), Vec2(0.58020997, 0.54618001), Vec2(0.587379992, 0.521820009), Vec2(0.600750029, 0.510399997), Vec2(0.610329986, 0.520829976), Vec2(0.596249998, 0.534189999), Vec2(0.580219984, 0.508660018), Vec2(0.592819989, 0.499260008), Vec2(0.600750029, 0.510399997), Vec2(0.587379992, 0.521820009), Vec2(0.566129982, 0.516830027), Vec2(0.580219984, 0.508660018), Vec2(0.587379992, 0.521820009), Vec2(0.572329998, 0.531830013), Vec2(0.600750029, 0.510399997), Vec2(0.612269998, 0.49774), Vec2(0.622420013, 0.50632), Vec2(0.610329986, 0.520829976), Vec2(0.612269998, 0.49774), Vec2(0.621800005, 0.483859986), Vec2(0.632510006, 0.490810007), Vec2(0.622420013, 0.50632), Vec2(0.603630006, 0.488689989), Vec2(0.612360001, 0.476819992), Vec2(0.621800005, 0.483859986), Vec2(0.612269998, 0.49774), Vec2(0.592819989, 0.499260008), Vec2(0.603630006, 0.488689989), Vec2(0.612269998, 0.49774), Vec2(0.600750029, 0.510399997), Vec2(0.58671999, 0.487450004), Vec2(0.596840024, 0.479360014), Vec2(0.603630006, 0.488689989), Vec2(0.592819989, 0.499260008), Vec2(0.596840024, 0.479360014), Vec2(0.604449987, 0.47025001), Vec2(0.612360001, 0.476819992), Vec2(0.603630006, 0.488689989), Vec2(0.592630029, 0.469500005), Vec2(0.599250019, 0.465579987), Vec2(0.604449987, 0.47025001), Vec2(0.596840024, 0.479360014), Vec2(0.582710028, 0.474830002), Vec2(0.592630029, 0.469500005), Vec2(0.596840024, 0.479360014), Vec2(0.58671999, 0.487450004), Vec2(0.561479986, 0.501309991), Vec2(0.574779987, 0.494819999), Vec2(0.580219984, 0.508660018), Vec2(0.566129982, 0.516830027), Vec2(0.574779987, 0.494819999), Vec2(0.58671999, 0.487450004), Vec2(0.592819989, 0.499260008), Vec2(0.580219984, 0.508660018), Vec2(0.571099997, 0.480280012), Vec2(0.582710028, 0.474830002), Vec2(0.58671999, 0.487450004), Vec2(0.574779987, 0.494819999), Vec2(0.558290005, 0.485320002), Vec2(0.571099997, 0.480280012), Vec2(0.574779987, 0.494819999), Vec2(0.561479986, 0.501309991), Vec2(0.500389993, 0.551400006), Vec2(0.519469976, 0.550300002), Vec2(0.521939993, 0.569310009), Vec2(0.500389993, 0.570739985), Vec2(0.519469976, 0.550300002), Vec2(0.538079977, 0.546459973), Vec2(0.542770028, 0.564339995), Vec2(0.521939993, 0.569310009), Vec2(0.517650008, 0.531599998), Vec2(0.534569979, 0.528569996), Vec2(0.538079977, 0.546459973), Vec2(0.519469976, 0.550300002), Vec2(0.500389993, 0.532480001), Vec2(0.517650008, 0.531599998), Vec2(0.519469976, 0.550300002), Vec2(0.500389993, 0.551400006), Vec2(0.538079977, 0.546459973), Vec2(0.555809975, 0.540170014), Vec2(0.562319994, 0.556420028), Vec2(0.542770028, 0.564339995), Vec2(0.555809975, 0.540170014), Vec2(0.572329998, 0.531830013), Vec2(0.58020997, 0.54618001), Vec2(0.562319994, 0.556420028), Vec2(0.550819993, 0.523559988), Vec2(0.566129982, 0.516830027), Vec2(0.572329998, 0.531830013), Vec2(0.555809975, 0.540170014), Vec2(0.534569979, 0.528569996), Vec2(0.550819993, 0.523559988), Vec2(0.555809975, 0.540170014), Vec2(0.538079977, 0.546459973), Vec2(0.531989992, 0.510689974), Vec2(0.547129989, 0.506690025), Vec2(0.550819993, 0.523559988), Vec2(0.534569979, 0.528569996), Vec2(0.547129989, 0.506690025), Vec2(0.561479986, 0.501309991), Vec2(0.566129982, 0.516830027), Vec2(0.550819993, 0.523559988), Vec2(0.544579983, 0.489589989), Vec2(0.558290005, 0.485320002), Vec2(0.561479986, 0.501309991), Vec2(0.547129989, 0.506690025), Vec2(0.530219972, 0.492810011), Vec2(0.544579983, 0.489589989), Vec2(0.547129989, 0.506690025), Vec2(0.531989992, 0.510689974), Vec2(0.500389993, 0.513880014), Vec2(0.516330004, 0.513119996), Vec2(0.517650008, 0.531599998), Vec2(0.500389993, 0.532480001), Vec2(0.516330004, 0.513119996), Vec2(0.531989992, 0.510689974), Vec2(0.534569979, 0.528569996), Vec2(0.517650008, 0.531599998), Vec2(0.51542002, 0.494789988), Vec2(0.530219972, 0.492810011), Vec2(0.531989992, 0.510689974), Vec2(0.516330004, 0.513119996), Vec2(0.500389993, 0.49544999), Vec2(0.51542002, 0.494789988), Vec2(0.516330004, 0.513119996), Vec2(0.500389993, 0.513880014), Vec2(0.328619987, 0.504840016), Vec2(0.338959992, 0.523949981), Vec2(0.323650002, 0.528159976), Vec2(0.313829988, 0.508350015), Vec2(0.338959992, 0.523949981), Vec2(0.351229995, 0.542800009), Vec2(0.335189998, 0.547879994), Vec2(0.323650002, 0.528159976), Vec2(0.35304001, 0.518280029), Vec2(0.365619987, 0.535939991), Vec2(0.351229995, 0.542800009), Vec2(0.338959992, 0.523949981), Vec2(0.342489988, 0.500119984), Vec2(0.35304001, 0.518280029), Vec2(0.338959992, 0.523949981), Vec2(0.328619987, 0.504840016), Vec2(0.351229995, 0.542800009), Vec2(0.365790009, 0.561370015), Vec2(0.348800004, 0.567589998), Vec2(0.335189998, 0.547879994), Vec2(0.365790009, 0.561370015), Vec2(0.383150011, 0.57950002), Vec2(0.365060002, 0.587239981), Vec2(0.348800004, 0.567589998), Vec2(0.380490005, 0.552999973), Vec2(0.397969991, 0.56923002), Vec2(0.383150011, 0.57950002), Vec2(0.365790009, 0.561370015), Vec2(0.365619987, 0.535939991), Vec2(0.380490005, 0.552999973), Vec2(0.365790009, 0.561370015), Vec2(0.351229995, 0.542800009), Vec2(0.37834999, 0.527589977), Vec2(0.393029988, 0.542940021), Vec2(0.380490005, 0.552999973), Vec2(0.365619987, 0.535939991), Vec2(0.393029988, 0.542940021), Vec2(0.409999996, 0.557139993), Vec2(0.397969991, 0.56923002), Vec2(0.380490005, 0.552999973), Vec2(0.403629988, 0.531610012), Vec2(0.419750005, 0.543820024), Vec2(0.409999996, 0.557139993), Vec2(0.393029988, 0.542940021), Vec2(0.389479995, 0.518100023), Vec2(0.403629988, 0.531610012), Vec2(0.393029988, 0.542940021), Vec2(0.37834999, 0.527589977), Vec2(0.355369985, 0.494399995), Vec2(0.365839988, 0.511370003), Vec2(0.35304001, 0.518280029), Vec2(0.342489988, 0.500119984), Vec2(0.365839988, 0.511370003), Vec2(0.37834999, 0.527589977), Vec2(0.365619987, 0.535939991), Vec2(0.35304001, 0.518280029), Vec2(0.377339989, 0.503499985), Vec2(0.389479995, 0.518100023), Vec2(0.37834999, 0.527589977), Vec2(0.365839988, 0.511370003), Vec2(0.367210001, 0.48793), Vec2(0.377339989, 0.503499985), Vec2(0.365839988, 0.511370003), Vec2(0.355369985, 0.494399995), Vec2(0.383150011, 0.57950002), Vec2(0.404040009, 0.596889973), Vec2(0.384849995, 0.606750011), Vec2(0.365060002, 0.587239981), Vec2(0.404040009, 0.596889973), Vec2(0.4296, 0.612860024), Vec2(0.409880012, 0.625890017), Vec2(0.384849995, 0.606750011), Vec2(0.418469995, 0.584190011), Vec2(0.442400008, 0.597109973), Vec2(0.4296, 0.612860024), Vec2(0.404040009, 0.596889973), Vec2(0.397969991, 0.56923002), Vec2(0.418469995, 0.584190011), Vec2(0.404040009, 0.596889973), Vec2(0.383150011, 0.57950002), Vec2(0.4296, 0.612860024), Vec2(0.461400002, 0.625970006), Vec2(0.444310009, 0.643970013), Vec2(0.409880012, 0.625890017), Vec2(0.461400002, 0.625970006), Vec2(0.500389993, 0.63331002), Vec2(0.500389993, 0.658290029), Vec2(0.444310009, 0.643970013), Vec2(0.469940007, 0.606760025), Vec2(0.500389993, 0.611329973), Vec2(0.500389993, 0.63331002), Vec2(0.461400002, 0.625970006), Vec2(0.442400008, 0.597109973), Vec2(0.469940007, 0.606760025), Vec2(0.461400002, 0.625970006), Vec2(0.4296, 0.612860024), Vec2(0.451160014, 0.580179989), Vec2(0.475080013, 0.587490022), Vec2(0.469940007, 0.606760025), Vec2(0.442400008, 0.597109973), Vec2(0.475080013, 0.587490022), Vec2(0.500389993, 0.590650022), Vec2(0.500389993, 0.611329973), Vec2(0.469940007, 0.606760025), Vec2(0.478560001, 0.56844002), Vec2(0.500389993, 0.570739985), Vec2(0.500389993, 0.590650022), Vec2(0.475080013, 0.587490022), Vec2(0.457489997, 0.562780023), Vec2(0.478560001, 0.56844002), Vec2(0.475080013, 0.587490022), Vec2(0.451160014, 0.580179989), Vec2(0.409999996, 0.557139993), Vec2(0.42938, 0.569769979), Vec2(0.418469995, 0.584190011), Vec2(0.397969991, 0.56923002), Vec2(0.42938, 0.569769979), Vec2(0.451160014, 0.580179989), Vec2(0.442400008, 0.597109973), Vec2(0.418469995, 0.584190011), Vec2(0.437759995, 0.554369986), Vec2(0.457489997, 0.562780023), Vec2(0.451160014, 0.580179989), Vec2(0.42938, 0.569769979), Vec2(0.419750005, 0.543820024), Vec2(0.437759995, 0.554369986), Vec2(0.42938, 0.569769979), Vec2(0.409999996, 0.557139993), Vec2(0.42761001, 0.52967), Vec2(0.444270015, 0.538399994), Vec2(0.437759995, 0.554369986), Vec2(0.419750005, 0.543820024), Vec2(0.444270015, 0.538399994), Vec2(0.46221, 0.54519999), Vec2(0.457489997, 0.562780023), Vec2(0.437759995, 0.554369986), Vec2(0.449299991, 0.522080004), Vec2(0.465770006, 0.527589977), Vec2(0.46221, 0.54519999), Vec2(0.444270015, 0.538399994), Vec2(0.433840007, 0.514919996), Vec2(0.449299991, 0.522080004), Vec2(0.444270015, 0.538399994), Vec2(0.42761001, 0.52967), Vec2(0.46221, 0.54519999), Vec2(0.481059998, 0.549660027), Vec2(0.478560001, 0.56844002), Vec2(0.457489997, 0.562780023), Vec2(0.481059998, 0.549660027), Vec2(0.500389993, 0.551400006), Vec2(0.500389993, 0.570739985), Vec2(0.478560001, 0.56844002), Vec2(0.482910007, 0.531140029), Vec2(0.500389993, 0.532480001), Vec2(0.500389993, 0.551400006), Vec2(0.481059998, 0.549660027), Vec2(0.465770006, 0.527589977), Vec2(0.482910007, 0.531140029), Vec2(0.481059998, 0.549660027), Vec2(0.46221, 0.54519999), Vec2(0.468409985, 0.509959996), Vec2(0.484270006, 0.512830019), Vec2(0.482910007, 0.531140029), Vec2(0.465770006, 0.527589977), Vec2(0.484270006, 0.512830019), Vec2(0.500389993, 0.513880014), Vec2(0.500389993, 0.532480001), Vec2(0.482910007, 0.531140029), Vec2(0.485249996, 0.494610012), Vec2(0.500389993, 0.49544999), Vec2(0.500389993, 0.513880014), Vec2(0.484270006, 0.512830019), Vec2(0.470310003, 0.492269993), Vec2(0.485249996, 0.494610012), Vec2(0.484270006, 0.512830019), Vec2(0.468409985, 0.509959996), Vec2(0.43858999, 0.499669999), Vec2(0.453090012, 0.505490005), Vec2(0.449299991, 0.522080004), Vec2(0.433840007, 0.514919996), Vec2(0.453090012, 0.505490005), Vec2(0.468409985, 0.509959996), Vec2(0.465770006, 0.527589977), Vec2(0.449299991, 0.522080004), Vec2(0.455799997, 0.488629997), Vec2(0.470310003, 0.492269993), Vec2(0.468409985, 0.509959996), Vec2(0.453090012, 0.505490005), Vec2(0.441960007, 0.483940005), Vec2(0.455799997, 0.488629997), Vec2(0.453090012, 0.505490005), Vec2(0.43858999, 0.499669999), Vec2(0.377939999, 0.481029987), Vec2(0.387490004, 0.494980007), Vec2(0.377339989, 0.503499985), Vec2(0.367210001, 0.48793), Vec2(0.387490004, 0.494980007), Vec2(0.399040014, 0.507770002), Vec2(0.389479995, 0.518100023), Vec2(0.377339989, 0.503499985), Vec2(0.39616999, 0.486059994), Vec2(0.407000005, 0.496780008), Vec2(0.399040014, 0.507770002), Vec2(0.387490004, 0.494980007), Vec2(0.38745001, 0.474099994), Vec2(0.39616999, 0.486059994), Vec2(0.387490004, 0.494980007), Vec2(0.377939999, 0.481029987), Vec2(0.399040014, 0.507770002), Vec2(0.412470013, 0.519370019), Vec2(0.403629988, 0.531610012), Vec2(0.389479995, 0.518100023), Vec2(0.412470013, 0.519370019), Vec2(0.42761001, 0.52967), Vec2(0.419750005, 0.543820024), Vec2(0.403629988, 0.531610012), Vec2(0.419649988, 0.506420016), Vec2(0.433840007, 0.514919996), Vec2(0.42761001, 0.52967), Vec2(0.412470013, 0.519370019), Vec2(0.407000005, 0.496780008), Vec2(0.419649988, 0.506420016), Vec2(0.412470013, 0.519370019), Vec2(0.399040014, 0.507770002), Vec2(0.413190007, 0.485159993), Vec2(0.425190002, 0.492810011), Vec2(0.419649988, 0.506420016), Vec2(0.407000005, 0.496780008), Vec2(0.425190002, 0.492810011), Vec2(0.43858999, 0.499669999), Vec2(0.433840007, 0.514919996), Vec2(0.419649988, 0.506420016), Vec2(0.429049999, 0.478509992), Vec2(0.441960007, 0.483940005), Vec2(0.43858999, 0.499669999), Vec2(0.425190002, 0.492810011), Vec2(0.417360008, 0.472730011), Vec2(0.429049999, 0.478509992), Vec2(0.425190002, 0.492810011), Vec2(0.413190007, 0.485159993), Vec2(0.39546001, 0.467680007), Vec2(0.403050005, 0.476880014), Vec2(0.39616999, 0.486059994), Vec2(0.38745001, 0.474099994), Vec2(0.403050005, 0.476880014), Vec2(0.413190007, 0.485159993), Vec2(0.407000005, 0.496780008), Vec2(0.39616999, 0.486059994), Vec2(0.407389998, 0.467159986), Vec2(0.417360008, 0.472730011), Vec2(0.413190007, 0.485159993), Vec2(0.403050005, 0.476880014), Vec2(0.400750011, 0.463099986), Vec2(0.407389998, 0.467159986), Vec2(0.403050005, 0.476880014), Vec2(0.39546001, 0.467680007)}, + ["subd_fvar_linear"] = "corners plus1", + ["primitive_attributes"] = { UserData("/sphere2/sphere.primvars:dwa_mesh_file_translator_version"), UserData("/sphere2/sphere.primvars:dwa_mesh_translator_version"), UserData("/sphere2/sphere.primvars:name"), UserData("/sphere2/sphere.primvars:primId"), UserData("/sphere2/sphere.primvars:subd__hi"), UserData("/sphere2/sphere.primvars:subd__lo")}, +} + +RdlMeshGeometry("/wall") { + ["node_xform"] = blur(Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1), Mat4(20, 0, 0, 0, 0, 0, 1, 0, 0, -10, 0, 0, 0, 5, -10, 1)), + ["face_vertex_count"] = { 4}, + ["vertices_by_index"] = { 0, 1, 3, 2}, + ["vertex_list_0"] = { Vec3(-0.5, 0, 0.5), Vec3(0.5, 0, 0.5), Vec3(-0.5, 0, -0.5), Vec3(0.5, 0, -0.5)}, + ["subd_fvar_linear"] = "corners plus1", + ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, +} + +GeometrySet("/DEFAULT/allGeometry") { + RdlMeshGeometry("/floor"), + RdlMeshGeometry("/sphere1/sphere"), + RdlMeshGeometry("/sphere2/sphere"), + RdlMeshGeometry("/wall"), +} + +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet4ABD9"), undef(), undef()}, + {RdlMeshGeometry("/sphere1/sphere"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet4ABD9"), undef(), undef()}, + {RdlMeshGeometry("/sphere1/sphere"), "sphere", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet4ABD9"), undef(), undef()}, + {RdlMeshGeometry("/sphere2/sphere"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet13F8D"), undef(), undef()}, + {RdlMeshGeometry("/sphere2/sphere"), "sphere", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet13F8D"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet4ABD9"), undef(), undef()}, +} + +DwaBaseMaterial("/surface/baseMtl") { +} + +SpotLight("/spot") { + ["node_xform"] = blur(Mat4(0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 9, -8, 1), Mat4(0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 9, -8, 1)), + ["intensity"] = 0.200000003, + ["light_filters"] = { ColorRampLightFilter("/colorRamp"), BarnDoorLightFilter("/barnDoor")}, + ["lens_radius"] = 0.5, + ["outer_cone_angle"] = 90, + ["inner_cone_angle"] = 90, +} + +LightFilterSet("LightFilterSet13F8D") { + BarnDoorLightFilter("/barnDoor"), +} + +LightFilterSet("LightFilterSet4ABD9") { + BarnDoorLightFilter("/barnDoor"), + ColorRampLightFilter("/colorRamp"), +} + +LightSet("LightSet164831") { + SpotLight("/spot"), +} + +PerspectiveCamera("/camera") { + ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 5, 10, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 5, 10, 1)), + ["near"] = 0.00999999978, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = blur(300, 300), + ["film_width_aperture"] = 240, +} + +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 5, 10, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 5, 10, 1)), + ["near"] = 0.00999999978, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = blur(300, 300), + ["film_width_aperture"] = 240, +} + +UserData("/sphere1/sphere.primvars:dwa_mesh_file_translator_version") { + ["float_key"] = "dwa_mesh_file_translator_version", + ["float_values_0"] = { 1.40129846e-45}, + ["rate"] = "constant", +} + +UserData("/wall.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, + ["rate"] = "constant", +} + +UserData("/sphere2/sphere.primvars:subd__lo") { + ["float_key"] = "subd__lo", + ["float_values_0"] = { 1.40129846e-45}, + ["rate"] = "constant", +} + +UserData("/sphere2/sphere.primvars:subd__hi") { + ["float_key"] = "subd__hi", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +ColorRampLightFilter("/colorRamp") { + ["colors"] = { Rgb(0, 0, 1), Rgb(1, 0, 0)}, + ["distances"] = { 4, 8}, + ["interpolation_types"] = { 0, 0}, +} + +UserData("/sphere1/sphere.primvars:name") { + ["string_key"] = "name", + ["string_values"] = { ""}, + ["rate"] = "constant", +} + +UserData("/floor.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 0}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +UserData("/sphere1/sphere.primvars:dwa_mesh_translator_version") { + ["float_key"] = "dwa_mesh_translator_version", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +UserData("/sphere2/sphere.primvars:dwa_mesh_translator_version") { + ["float_key"] = "dwa_mesh_translator_version", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +UserData("/sphere2/sphere.primvars:name") { + ["string_key"] = "name", + ["string_values"] = { ""}, + ["rate"] = "constant", +} + +UserData("/sphere1/sphere.primvars:subd__hi") { + ["float_key"] = "subd__hi", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +UserData("/sphere1/sphere.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 2}, + ["rate"] = "constant", +} + +BarnDoorLightFilter("/barnDoor") { + ["projector_focal_distance"] = 9, + ["projector_height"] = 0.5, + ["pre_barn_mode"] = "black", + ["pre_barn_distance"] = 0, + ["edge_scale_bottom"] = 0.109999999, + ["edge_scale_left"] = 0.5, + ["edge_scale_right"] = 10, + ["density"] = 0.949999988, + ["radius"] = 0.200000003, + ["edge"] = 0.200000003, + ["mode"] = "physical", + ["rotation"] = 35, +} + +UserData("/sphere2/sphere.primvars:dwa_mesh_file_translator_version") { + ["float_key"] = "dwa_mesh_file_translator_version", + ["float_values_0"] = { 1.40129846e-45}, + ["rate"] = "constant", +} + +UserData("/sphere1/sphere.primvars:subd__lo") { + ["float_key"] = "subd__lo", + ["float_values_0"] = { 1.40129846e-45}, + ["rate"] = "constant", +} + +UserData("/sphere2/sphere.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 3}, + ["rate"] = "constant", +} diff --git a/testSuite/light/filter/barn_door/barn_door.usd b/hats/lightfilter/lightfilter_linking.usd similarity index 63% rename from testSuite/light/filter/barn_door/barn_door.usd rename to hats/lightfilter/lightfilter_linking.usd index af8872c..e1fe9b9 100644 --- a/testSuite/light/filter/barn_door/barn_door.usd +++ b/hats/lightfilter/lightfilter_linking.usd @@ -5,7 +5,7 @@ def Camera "camera" matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), - (0, 0, 20, 1) ) + (0, 5, 10, 1) ) uniform token[] xformOpOrder = ["xformOp:transform"] float focalLength = 300; @@ -13,7 +13,7 @@ def Camera "camera" float verticalAperture = 240 float2 clippingRange = (0.01, 10000) } -def Mesh "floor" +def Mesh "floor" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -28,7 +28,7 @@ def Mesh "floor" rel material:binding = } -def Mesh "wall" +def Mesh "wall" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -43,17 +43,49 @@ def Mesh "wall" rel material:binding = } +def "sphere1" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ + prepend apiSchemas = ["MaterialBindingAPI"]) +{ + matrix4d xformOp:transform = ( (2, 0, 0, 0), + (0, 2, 0, 0), + (0, 0, 2, 0), + (-2, 2, -6, 1) ) + uniform token[] xformOpOrder = ["xformOp:transform"] + rel material:binding = +} + +def "sphere2" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ + prepend apiSchemas = ["MaterialBindingAPI"]) +{ + matrix4d xformOp:transform = ( (2, 0, 0, 0), + (0, 2, 0, 0), + (0, 0, 2, 0), + (2, 2, -6, 1) ) + uniform token[] xformOpOrder = ["xformOp:transform"] + rel material:binding = +} + def Material "surface" { color4f outputs:moonray:surface.connect = def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } - + +def MoonrayLightFilter "colorRamp" +{ + uniform token moonray:class = "ColorRampLightFilter" + color3f[] moonray:colors = [ (0, 0, 1), (1, 0, 0)] + float[] moonray:distances = [4.0, 8.0] + int[] moonray:interpolation_types = [0, 0] + bool collection:filterLink:includeRoot = false + rel collection:filterLink:includes = [,,] +} + def MoonrayLightFilter "barnDoor" { uniform token moonray:class = "BarnDoorLightFilter" @@ -83,5 +115,5 @@ def DiskLight "spot" float inputs:intensity = 0.2 float inputs:shaping:cone:angle = 45 bool inputs:normalize = true - append rel light:filters = + append rel light:filters = [,] } \ No newline at end of file diff --git a/hats/lightfilter/lightfilter_rod.canonical.rdla b/hats/lightfilter/lightfilter_rod.canonical.rdla index 2c29ab6..e9271ea 100644 --- a/hats/lightfilter/lightfilter_rod.canonical.rdla +++ b/hats/lightfilter/lightfilter_rod.canonical.rdla @@ -1,6 +1,8 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -22,17 +24,17 @@ RdlMeshGeometry("/wall") { ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/floor"), RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet111FC"), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet111FC"), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet111FC"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet111FC"), undef(), undef()}, } -BaseMaterial("/surface/baseMtl") { +DwaBaseMaterial("/surface/baseMtl") { } SpotLight("/spot") { @@ -61,7 +63,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -76,6 +78,26 @@ UserData("/floor.primvars:primId") { ["rate"] = "constant", } +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + RodLightFilter("/rod") { ["node_xform"] = blur(Mat4(0.89000000000000001, 0.01, -0.44335140454101996, 0, 0.089999999999999997, 0.96999999999999997, 0.19, 0, 0.42999999999999999, -0.20999999999999999, 0.87, 0, 8, 13, -6, 1), Mat4(0.89000000000000001, 0.01, -0.44335140454101996, 0, 0.089999999999999997, 0.96999999999999997, 0.19, 0, 0.42999999999999999, -0.20999999999999999, 0.87, 0, 8, 13, -6, 1)), ["width"] = 10, @@ -86,8 +108,21 @@ RodLightFilter("/rod") { ["color"] = Rgb(1, 0, 0.300000012), } +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + UserData("/wall.primvars:primId") { ["float_key"] = "primId", ["float_values_0"] = { 1}, ["rate"] = "constant", } + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/lightfilter/lightfilter_rod.usd b/hats/lightfilter/lightfilter_rod.usd index 3e3d28d..5929139 100644 --- a/hats/lightfilter/lightfilter_rod.usd +++ b/hats/lightfilter/lightfilter_rod.usd @@ -13,7 +13,7 @@ def Camera "camera" float verticalAperture = 240 float2 clippingRange = (0.01, 10000) } -def Mesh "floor" +def Mesh "floor" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -28,7 +28,7 @@ def Mesh "floor" rel material:binding = } -def Mesh "wall" +def Mesh "wall" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -43,13 +43,13 @@ def Mesh "wall" rel material:binding = } -def Material "surface" +def Material "surface" { color4f outputs:moonray:surface.connect = def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/lightfilter/lightfilter_vdb.canonical.rdla b/hats/lightfilter/lightfilter_vdb.canonical.rdla index 66d3a83..e4f82e3 100644 --- a/hats/lightfilter/lightfilter_vdb.canonical.rdla +++ b/hats/lightfilter/lightfilter_vdb.canonical.rdla @@ -1,6 +1,8 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } @@ -22,17 +24,17 @@ RdlMeshGeometry("/wall") { ["primitive_attributes"] = { UserData("/wall.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/floor"), RdlMeshGeometry("/wall"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/floor"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet0FE9B"), undef(), undef()}, - {RdlMeshGeometry("/wall"), "", BaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet0FE9B"), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/floor"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet0FE9B"), undef(), undef()}, + {RdlMeshGeometry("/wall"), "", DwaBaseMaterial("/surface/baseMtl"), LightSet("LightSet164831"), undef(), undef(), LightFilterSet("LightFilterSet0FE9B"), undef(), undef()}, } -BaseMaterial("/surface/baseMtl") { +DwaBaseMaterial("/surface/baseMtl") { } SpotLight("/spot") { @@ -61,7 +63,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 20, 1)), ["near"] = 0.00999999978, ["mb_shutter_open"] = 0, @@ -70,10 +72,18 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } -UserData("/wall.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/floor.primvars:primId") { @@ -82,6 +92,24 @@ UserData("/floor.primvars:primId") { ["rate"] = "constant", } +UserData("/wall.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + VdbLightFilter("/vdb") { ["node_xform"] = blur(Mat4(0.02, 0, 0, 0, 0, 0.050000000000000003, 0, 0, 0, 0, 0.01, 0, 0, 1, -8, 1), Mat4(0.02, 0, 0, 0, 0, 0.050000000000000003, 0, 0, 0, 0, 0.01, 0, 0, 1, -8, 1)), ["vdb_map"] = "/work/gshad/moonshine_test/rats_data/light/filter/vdb/textures/torus.vdb", @@ -93,3 +121,10 @@ VdbLightFilter("/vdb") { ["vdb_interpolation_type"] = "quadratic", ["invert_density"] = true, } + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/lightfilter/lightfilter_vdb.usd b/hats/lightfilter/lightfilter_vdb.usd index 81b106e..9e05464 100644 --- a/hats/lightfilter/lightfilter_vdb.usd +++ b/hats/lightfilter/lightfilter_vdb.usd @@ -13,7 +13,7 @@ def Camera "camera" float verticalAperture = 240 float2 clippingRange = (0.01, 10000) } -def Mesh "floor" +def Mesh "floor" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -28,7 +28,7 @@ def Mesh "floor" rel material:binding = } -def Mesh "wall" +def Mesh "wall" (prepend apiSchemas = ["MaterialBindingAPI"]) { float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] int[] faceVertexCounts = [4] @@ -49,7 +49,7 @@ def Material "surface" def Shader "baseMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface } } diff --git a/hats/material/CMakeLists.txt b/hats/material/CMakeLists.txt index 71ce178..a1e0758 100644 --- a/hats/material/CMakeLists.txt +++ b/hats/material/CMakeLists.txt @@ -6,4 +6,5 @@ add_hats_test(material_dwabase_defaults CAMERA camera) add_hats_test(material_dwabase_normal CAMERA camera) add_hats_test(material_dwametal_defaults CAMERA camera) add_hats_test(material_udim CAMERA camera) +add_hats_test(material_accent CAMERA camera) diff --git a/hats/material/material_accent.canonical.rdla b/hats/material/material_accent.canonical.rdla new file mode 100644 index 0000000..a686822 --- /dev/null +++ b/hats/material/material_accent.canonical.rdla @@ -0,0 +1,313 @@ +SceneVariables { + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 700, + ["enable_motion_blur"] = false, +} + +RdlMeshGeometry("/sphere1/sphere") { + ["node_xform"] = blur(Mat4(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 6, 2, 0, 1), Mat4(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 6, 2, 0, 1)), + ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + ["vertices_by_index"] = { 3, 2, 1, 0, 2, 5, 4, 1, 7, 6, 5, 2, 8, 7, 2, 3, 5, 10, 9, 4, 10, 12, 11, 9, 14, 13, 12, 10, 6, 14, 10, 5, 16, 15, 14, 6, 15, 17, 13, 14, 19, 18, 17, 15, 20, 19, 15, 16, 22, 21, 7, 8, 21, 16, 6, 7, 23, 20, 16, 21, 24, 23, 21, 22, 12, 26, 25, 11, 26, 28, 27, 25, 30, 29, 28, 26, 13, 30, 26, 12, 28, 32, 31, 27, 32, 34, 33, 31, 36, 35, 34, 32, 29, 36, 32, 28, 38, 37, 36, 29, 37, 39, 35, 36, 41, 40, 39, 37, 42, 41, 37, 38, 17, 43, 30, 13, 43, 38, 29, 30, 44, 42, 38, 43, 18, 44, 43, 17, 46, 45, 44, 18, 45, 47, 42, 44, 49, 48, 47, 45, 50, 49, 45, 46, 47, 51, 41, 42, 51, 52, 40, 41, 54, 53, 52, 51, 48, 54, 51, 47, 56, 55, 54, 48, 55, 57, 53, 54, 59, 58, 57, 55, 60, 59, 55, 56, 62, 61, 49, 50, 61, 56, 48, 49, 63, 60, 56, 61, 64, 63, 61, 62, 66, 65, 23, 24, 65, 67, 20, 23, 69, 68, 67, 65, 70, 69, 65, 66, 67, 71, 19, 20, 71, 46, 18, 19, 72, 50, 46, 71, 68, 72, 71, 67, 74, 73, 72, 68, 73, 62, 50, 72, 75, 64, 62, 73, 76, 75, 73, 74, 78, 77, 69, 70, 77, 74, 68, 69, 79, 76, 74, 77, 80, 79, 77, 78, 34, 82, 81, 33, 82, 84, 83, 81, 86, 85, 84, 82, 35, 86, 82, 34, 84, 88, 87, 83, 88, 90, 89, 87, 92, 91, 90, 88, 85, 92, 88, 84, 94, 93, 92, 85, 93, 95, 91, 92, 97, 96, 95, 93, 98, 97, 93, 94, 39, 99, 86, 35, 99, 94, 85, 86, 100, 98, 94, 99, 40, 100, 99, 39, 90, 102, 101, 89, 102, 104, 103, 101, 106, 105, 104, 102, 91, 106, 102, 90, 104, 108, 107, 103, 108, 110, 109, 107, 112, 111, 110, 108, 105, 112, 108, 104, 114, 113, 112, 105, 113, 115, 111, 112, 117, 116, 115, 113, 118, 117, 113, 114, 95, 119, 106, 91, 119, 114, 105, 106, 120, 118, 114, 119, 96, 120, 119, 95, 122, 121, 120, 96, 121, 123, 118, 120, 125, 124, 123, 121, 126, 125, 121, 122, 123, 127, 117, 118, 127, 128, 116, 117, 130, 129, 128, 127, 124, 130, 127, 123, 132, 131, 130, 124, 131, 133, 129, 130, 135, 134, 133, 131, 136, 135, 131, 132, 138, 137, 125, 126, 137, 132, 124, 125, 139, 136, 132, 137, 140, 139, 137, 138, 52, 141, 100, 40, 141, 142, 98, 100, 144, 143, 142, 141, 53, 144, 141, 52, 142, 145, 97, 98, 145, 122, 96, 97, 146, 126, 122, 145, 143, 146, 145, 142, 148, 147, 146, 143, 147, 138, 126, 146, 149, 140, 138, 147, 150, 149, 147, 148, 57, 151, 144, 53, 151, 148, 143, 144, 152, 150, 148, 151, 58, 152, 151, 57, 154, 153, 152, 58, 153, 155, 150, 152, 157, 156, 155, 153, 158, 157, 153, 154, 155, 159, 149, 150, 159, 160, 140, 149, 162, 161, 160, 159, 156, 162, 159, 155, 164, 163, 162, 156, 163, 165, 161, 162, 167, 166, 165, 163, 168, 167, 163, 164, 170, 169, 157, 158, 169, 164, 156, 157, 171, 168, 164, 169, 172, 171, 169, 170, 160, 173, 139, 140, 173, 174, 136, 139, 176, 175, 174, 173, 161, 176, 173, 160, 174, 177, 135, 136, 177, 178, 134, 135, 180, 179, 178, 177, 175, 180, 177, 174, 182, 181, 180, 175, 181, 183, 179, 180, 185, 184, 183, 181, 186, 185, 181, 182, 165, 187, 176, 161, 187, 182, 175, 176, 188, 186, 182, 187, 166, 188, 187, 165, 190, 189, 188, 166, 189, 191, 186, 188, 193, 192, 191, 189, 194, 193, 189, 190, 191, 195, 185, 186, 195, 196, 184, 185, 198, 197, 196, 195, 192, 198, 195, 191, 200, 199, 198, 192, 199, 201, 197, 198, 203, 202, 201, 199, 204, 203, 199, 200, 206, 205, 193, 194, 205, 200, 192, 193, 207, 204, 200, 205, 208, 207, 205, 206, 210, 209, 171, 172, 209, 211, 168, 171, 213, 212, 211, 209, 214, 213, 209, 210, 211, 215, 167, 168, 215, 190, 166, 167, 216, 194, 190, 215, 212, 216, 215, 211, 218, 217, 216, 212, 217, 206, 194, 216, 219, 208, 206, 217, 220, 219, 217, 218, 222, 221, 213, 214, 221, 218, 212, 213, 223, 220, 218, 221, 224, 223, 221, 222, 226, 225, 79, 80, 225, 227, 76, 79, 229, 228, 227, 225, 230, 229, 225, 226, 227, 231, 75, 76, 231, 232, 64, 75, 234, 233, 232, 231, 228, 234, 231, 227, 236, 235, 234, 228, 235, 237, 233, 234, 239, 238, 237, 235, 240, 239, 235, 236, 242, 241, 229, 230, 241, 236, 228, 229, 243, 240, 236, 241, 244, 243, 241, 242, 232, 245, 63, 64, 245, 246, 60, 63, 248, 247, 246, 245, 233, 248, 245, 232, 246, 249, 59, 60, 249, 154, 58, 59, 250, 158, 154, 249, 247, 250, 249, 246, 252, 251, 250, 247, 251, 170, 158, 250, 253, 172, 170, 251, 254, 253, 251, 252, 237, 255, 248, 233, 255, 252, 247, 248, 256, 254, 252, 255, 238, 256, 255, 237, 258, 257, 256, 238, 257, 259, 254, 256, 261, 260, 259, 257, 262, 261, 257, 258, 259, 263, 253, 254, 263, 210, 172, 253, 264, 214, 210, 263, 260, 264, 263, 259, 266, 265, 264, 260, 265, 222, 214, 264, 267, 224, 222, 265, 268, 267, 265, 266, 270, 269, 261, 262, 269, 266, 260, 261, 271, 268, 266, 269, 272, 271, 269, 270, 274, 273, 243, 244, 273, 275, 240, 243, 277, 276, 275, 273, 278, 277, 273, 274, 275, 279, 239, 240, 279, 258, 238, 239, 280, 262, 258, 279, 276, 280, 279, 275, 282, 281, 280, 276, 281, 270, 262, 280, 283, 272, 270, 281, 284, 283, 281, 282, 286, 285, 277, 278, 285, 282, 276, 277, 287, 284, 282, 285, 288, 287, 285, 286, 290, 289, 107, 109, 289, 291, 103, 107, 293, 292, 291, 289, 294, 293, 289, 290, 291, 295, 101, 103, 295, 296, 89, 101, 298, 297, 296, 295, 292, 298, 295, 291, 300, 299, 298, 292, 299, 301, 297, 298, 303, 302, 301, 299, 304, 303, 299, 300, 306, 305, 293, 294, 305, 300, 292, 293, 307, 304, 300, 305, 308, 307, 305, 306, 296, 309, 87, 89, 309, 310, 83, 87, 312, 311, 310, 309, 297, 312, 309, 296, 310, 313, 81, 83, 313, 314, 33, 81, 316, 315, 314, 313, 311, 316, 313, 310, 318, 317, 316, 311, 317, 319, 315, 316, 321, 320, 319, 317, 322, 321, 317, 318, 301, 323, 312, 297, 323, 318, 311, 312, 324, 322, 318, 323, 302, 324, 323, 301, 326, 325, 324, 302, 325, 327, 322, 324, 329, 328, 327, 325, 330, 329, 325, 326, 327, 331, 321, 322, 331, 332, 320, 321, 334, 333, 332, 331, 328, 334, 331, 327, 336, 335, 334, 328, 335, 337, 333, 334, 339, 338, 337, 335, 340, 339, 335, 336, 342, 341, 329, 330, 341, 336, 328, 329, 343, 340, 336, 341, 344, 343, 341, 342, 346, 345, 307, 308, 345, 347, 304, 307, 349, 348, 347, 345, 350, 349, 345, 346, 347, 351, 303, 304, 351, 326, 302, 303, 352, 330, 326, 351, 348, 352, 351, 347, 354, 353, 352, 348, 353, 342, 330, 352, 355, 344, 342, 353, 356, 355, 353, 354, 358, 357, 349, 350, 357, 354, 348, 349, 359, 356, 354, 357, 360, 359, 357, 358, 314, 361, 31, 33, 361, 362, 27, 31, 364, 363, 362, 361, 315, 364, 361, 314, 362, 365, 25, 27, 365, 366, 11, 25, 368, 367, 366, 365, 363, 368, 365, 362, 370, 369, 368, 363, 369, 371, 367, 368, 373, 372, 371, 369, 374, 373, 369, 370, 319, 375, 364, 315, 375, 370, 363, 364, 376, 374, 370, 375, 320, 376, 375, 319, 366, 377, 9, 11, 377, 378, 4, 9, 380, 379, 378, 377, 367, 380, 377, 366, 378, 381, 1, 4, 381, 382, 0, 1, 384, 383, 382, 381, 379, 384, 381, 378, 386, 385, 384, 379, 385, 387, 383, 384, 389, 388, 387, 385, 390, 389, 385, 386, 371, 391, 380, 367, 391, 386, 379, 380, 392, 390, 386, 391, 372, 392, 391, 371, 394, 393, 392, 372, 393, 395, 390, 392, 397, 396, 395, 393, 398, 397, 393, 394, 395, 399, 389, 390, 399, 400, 388, 389, 402, 401, 400, 399, 396, 402, 399, 395, 404, 403, 402, 396, 403, 405, 401, 402, 407, 406, 405, 403, 408, 407, 403, 404, 410, 409, 397, 398, 409, 404, 396, 397, 411, 408, 404, 409, 412, 411, 409, 410, 332, 413, 376, 320, 413, 414, 374, 376, 416, 415, 414, 413, 333, 416, 413, 332, 414, 417, 373, 374, 417, 394, 372, 373, 418, 398, 394, 417, 415, 418, 417, 414, 420, 419, 418, 415, 419, 410, 398, 418, 421, 412, 410, 419, 422, 421, 419, 420, 337, 423, 416, 333, 423, 420, 415, 416, 424, 422, 420, 423, 338, 424, 423, 337, 426, 425, 424, 338, 425, 427, 422, 424, 429, 428, 427, 425, 430, 429, 425, 426, 427, 431, 421, 422, 431, 432, 412, 421, 434, 433, 432, 431, 428, 434, 431, 427, 436, 435, 434, 428, 435, 437, 433, 434, 439, 438, 437, 435, 440, 439, 435, 436, 442, 441, 429, 430, 441, 436, 428, 429, 443, 440, 436, 441, 444, 443, 441, 442, 432, 445, 411, 412, 445, 446, 408, 411, 448, 447, 446, 445, 433, 448, 445, 432, 446, 449, 407, 408, 449, 450, 406, 407, 452, 451, 450, 449, 447, 452, 449, 446, 454, 453, 452, 447, 453, 455, 451, 452, 457, 456, 455, 453, 458, 457, 453, 454, 437, 459, 448, 433, 459, 454, 447, 448, 460, 458, 454, 459, 438, 460, 459, 437, 462, 461, 460, 438, 461, 463, 458, 460, 465, 464, 463, 461, 466, 465, 461, 462, 463, 467, 457, 458, 467, 468, 456, 457, 470, 469, 468, 467, 464, 470, 467, 463, 472, 471, 470, 464, 471, 473, 469, 470, 475, 474, 473, 471, 476, 475, 471, 472, 478, 477, 465, 466, 477, 472, 464, 465, 479, 476, 472, 477, 480, 479, 477, 478, 482, 481, 443, 444, 481, 483, 440, 443, 485, 484, 483, 481, 486, 485, 481, 482, 483, 487, 439, 440, 487, 462, 438, 439, 488, 466, 462, 487, 484, 488, 487, 483, 490, 489, 488, 484, 489, 478, 466, 488, 491, 480, 478, 489, 492, 491, 489, 490, 494, 493, 485, 486, 493, 490, 484, 485, 495, 492, 490, 493, 496, 495, 493, 494, 498, 497, 359, 360, 497, 499, 356, 359, 501, 500, 499, 497, 502, 501, 497, 498, 499, 503, 355, 356, 503, 504, 344, 355, 506, 505, 504, 503, 500, 506, 503, 499, 508, 507, 506, 500, 507, 509, 505, 506, 511, 510, 509, 507, 512, 511, 507, 508, 514, 513, 501, 502, 513, 508, 500, 501, 515, 512, 508, 513, 516, 515, 513, 514, 504, 517, 343, 344, 517, 518, 340, 343, 520, 519, 518, 517, 505, 520, 517, 504, 518, 521, 339, 340, 521, 426, 338, 339, 522, 430, 426, 521, 519, 522, 521, 518, 524, 523, 522, 519, 523, 442, 430, 522, 525, 444, 442, 523, 526, 525, 523, 524, 509, 527, 520, 505, 527, 524, 519, 520, 528, 526, 524, 527, 510, 528, 527, 509, 530, 529, 528, 510, 529, 531, 526, 528, 533, 532, 531, 529, 534, 533, 529, 530, 531, 535, 525, 526, 535, 482, 444, 525, 536, 486, 482, 535, 532, 536, 535, 531, 538, 537, 536, 532, 537, 494, 486, 536, 539, 496, 494, 537, 540, 539, 537, 538, 542, 541, 533, 534, 541, 538, 532, 533, 543, 540, 538, 541, 544, 543, 541, 542, 546, 545, 515, 516, 545, 547, 512, 515, 549, 548, 547, 545, 550, 549, 545, 546, 547, 551, 511, 512, 551, 530, 510, 511, 552, 534, 530, 551, 548, 552, 551, 547, 554, 553, 552, 548, 553, 542, 534, 552, 555, 544, 542, 553, 556, 555, 553, 554, 558, 557, 549, 550, 557, 554, 548, 549, 559, 556, 554, 557, 560, 559, 557, 558, 562, 561, 559, 560, 561, 563, 556, 559, 565, 564, 563, 561, 566, 565, 561, 562, 563, 567, 555, 556, 567, 568, 544, 555, 570, 569, 568, 567, 564, 570, 567, 563, 572, 571, 570, 564, 571, 573, 569, 570, 575, 574, 573, 571, 576, 575, 571, 572, 578, 577, 565, 566, 577, 572, 564, 565, 579, 576, 572, 577, 580, 579, 577, 578, 568, 581, 543, 544, 581, 582, 540, 543, 584, 583, 582, 581, 569, 584, 581, 568, 582, 585, 539, 540, 585, 586, 496, 539, 588, 587, 586, 585, 583, 588, 585, 582, 590, 589, 588, 583, 589, 591, 587, 588, 593, 592, 591, 589, 594, 593, 589, 590, 573, 595, 584, 569, 595, 590, 583, 584, 596, 594, 590, 595, 574, 596, 595, 573, 598, 597, 596, 574, 597, 599, 594, 596, 601, 600, 599, 597, 602, 601, 597, 598, 599, 603, 593, 594, 603, 604, 592, 593, 606, 605, 604, 603, 600, 606, 603, 599, 608, 607, 606, 600, 607, 609, 605, 606, 611, 610, 609, 607, 612, 611, 607, 608, 614, 613, 601, 602, 613, 608, 600, 601, 615, 612, 608, 613, 616, 615, 613, 614, 618, 617, 579, 580, 617, 619, 576, 579, 621, 620, 619, 617, 622, 621, 617, 618, 619, 623, 575, 576, 623, 598, 574, 575, 624, 602, 598, 623, 620, 624, 623, 619, 626, 625, 624, 620, 625, 614, 602, 624, 627, 616, 614, 625, 628, 627, 625, 626, 630, 629, 621, 622, 629, 626, 620, 621, 631, 628, 626, 629, 632, 631, 629, 630, 586, 633, 495, 496, 633, 634, 492, 495, 636, 635, 634, 633, 587, 636, 633, 586, 634, 637, 491, 492, 637, 638, 480, 491, 640, 639, 638, 637, 635, 640, 637, 634, 642, 641, 640, 635, 641, 643, 639, 640, 645, 644, 643, 641, 646, 645, 641, 642, 591, 647, 636, 587, 647, 642, 635, 636, 648, 646, 642, 647, 592, 648, 647, 591, 638, 649, 479, 480, 649, 650, 476, 479, 652, 651, 650, 649, 639, 652, 649, 638, 650, 653, 475, 476, 653, 654, 474, 475, 656, 655, 654, 653, 651, 656, 653, 650, 658, 657, 656, 651, 657, 659, 655, 656, 661, 660, 659, 657, 662, 661, 657, 658, 643, 663, 652, 639, 663, 658, 651, 652, 664, 662, 658, 663, 644, 664, 663, 643, 666, 665, 664, 644, 665, 667, 662, 664, 669, 668, 667, 665, 670, 669, 665, 666, 667, 671, 661, 662, 671, 672, 660, 661, 674, 673, 672, 671, 668, 674, 671, 667, 676, 675, 674, 668, 675, 677, 673, 674, 679, 678, 677, 675, 680, 679, 675, 676, 682, 681, 669, 670, 681, 676, 668, 669, 683, 680, 676, 681, 684, 683, 681, 682, 604, 685, 648, 592, 685, 686, 646, 648, 688, 687, 686, 685, 605, 688, 685, 604, 686, 689, 645, 646, 689, 666, 644, 645, 690, 670, 666, 689, 687, 690, 689, 686, 692, 691, 690, 687, 691, 682, 670, 690, 693, 684, 682, 691, 694, 693, 691, 692, 609, 695, 688, 605, 695, 692, 687, 688, 696, 694, 692, 695, 610, 696, 695, 609, 698, 697, 696, 610, 697, 699, 694, 696, 701, 700, 699, 697, 702, 701, 697, 698, 699, 703, 693, 694, 703, 704, 684, 693, 706, 705, 704, 703, 700, 706, 703, 699, 708, 707, 706, 700, 707, 709, 705, 706, 711, 710, 709, 707, 712, 711, 707, 708, 714, 713, 701, 702, 713, 708, 700, 701, 715, 712, 708, 713, 716, 715, 713, 714, 704, 717, 683, 684, 717, 718, 680, 683, 720, 719, 718, 717, 705, 720, 717, 704, 718, 721, 679, 680, 721, 722, 678, 679, 724, 723, 722, 721, 719, 724, 721, 718, 726, 725, 724, 719, 725, 727, 723, 724, 729, 728, 727, 725, 730, 729, 725, 726, 709, 731, 720, 705, 731, 726, 719, 720, 732, 730, 726, 731, 710, 732, 731, 709, 734, 733, 732, 710, 733, 735, 730, 732, 737, 736, 735, 733, 738, 737, 733, 734, 735, 739, 729, 730, 739, 740, 728, 729, 742, 741, 740, 739, 736, 742, 739, 735, 744, 743, 742, 736, 743, 745, 741, 742, 747, 746, 745, 743, 748, 747, 743, 744, 750, 749, 737, 738, 749, 744, 736, 737, 751, 748, 744, 749, 752, 751, 749, 750, 754, 753, 715, 716, 753, 755, 712, 715, 757, 756, 755, 753, 758, 757, 753, 754, 755, 759, 711, 712, 759, 734, 710, 711, 760, 738, 734, 759, 756, 760, 759, 755, 762, 761, 760, 756, 761, 750, 738, 760, 763, 752, 750, 761, 764, 763, 761, 762, 766, 765, 757, 758, 765, 762, 756, 757, 767, 764, 762, 765, 768, 767, 765, 766, 770, 769, 631, 632, 769, 771, 628, 631, 773, 772, 771, 769, 774, 773, 769, 770, 771, 775, 627, 628, 775, 776, 616, 627, 778, 777, 776, 775, 772, 778, 775, 771, 780, 779, 778, 772, 779, 781, 777, 778, 783, 782, 781, 779, 784, 783, 779, 780, 786, 785, 773, 774, 785, 780, 772, 773, 787, 784, 780, 785, 788, 787, 785, 786, 776, 789, 615, 616, 789, 790, 612, 615, 792, 791, 790, 789, 777, 792, 789, 776, 790, 793, 611, 612, 793, 698, 610, 611, 794, 702, 698, 793, 791, 794, 793, 790, 796, 795, 794, 791, 795, 714, 702, 794, 797, 716, 714, 795, 798, 797, 795, 796, 781, 799, 792, 777, 799, 796, 791, 792, 800, 798, 796, 799, 782, 800, 799, 781, 802, 801, 800, 782, 801, 803, 798, 800, 805, 804, 803, 801, 806, 805, 801, 802, 803, 807, 797, 798, 807, 754, 716, 797, 808, 758, 754, 807, 804, 808, 807, 803, 810, 809, 808, 804, 809, 766, 758, 808, 811, 768, 766, 809, 812, 811, 809, 810, 814, 813, 805, 806, 813, 810, 804, 805, 815, 812, 810, 813, 816, 815, 813, 814, 818, 817, 787, 788, 817, 819, 784, 787, 821, 820, 819, 817, 822, 821, 817, 818, 819, 823, 783, 784, 823, 802, 782, 783, 824, 806, 802, 823, 820, 824, 823, 819, 826, 825, 824, 820, 825, 814, 806, 824, 827, 816, 814, 825, 828, 827, 825, 826, 830, 829, 821, 822, 829, 826, 820, 821, 831, 828, 826, 829, 832, 831, 829, 830, 834, 833, 201, 202, 833, 835, 197, 201, 837, 836, 835, 833, 838, 837, 833, 834, 835, 839, 196, 197, 839, 840, 184, 196, 842, 841, 840, 839, 836, 842, 839, 835, 844, 843, 842, 836, 843, 845, 841, 842, 847, 846, 845, 843, 848, 847, 843, 844, 850, 849, 837, 838, 849, 844, 836, 837, 851, 848, 844, 849, 852, 851, 849, 850, 840, 853, 183, 184, 853, 854, 179, 183, 856, 855, 854, 853, 841, 856, 853, 840, 854, 857, 178, 179, 857, 858, 134, 178, 860, 859, 858, 857, 855, 860, 857, 854, 862, 861, 860, 855, 861, 863, 859, 860, 865, 864, 863, 861, 866, 865, 861, 862, 845, 867, 856, 841, 867, 862, 855, 856, 868, 866, 862, 867, 846, 868, 867, 845, 870, 869, 868, 846, 869, 871, 866, 868, 873, 872, 871, 869, 874, 873, 869, 870, 871, 875, 865, 866, 875, 876, 864, 865, 878, 877, 876, 875, 872, 878, 875, 871, 880, 879, 878, 872, 879, 881, 877, 878, 883, 882, 881, 879, 884, 883, 879, 880, 886, 885, 873, 874, 885, 880, 872, 873, 887, 884, 880, 885, 888, 887, 885, 886, 890, 889, 851, 852, 889, 891, 848, 851, 893, 892, 891, 889, 894, 893, 889, 890, 891, 895, 847, 848, 895, 870, 846, 847, 896, 874, 870, 895, 892, 896, 895, 891, 898, 897, 896, 892, 897, 886, 874, 896, 899, 888, 886, 897, 900, 899, 897, 898, 902, 901, 893, 894, 901, 898, 892, 893, 903, 900, 898, 901, 904, 903, 901, 902, 858, 905, 133, 134, 905, 906, 129, 133, 908, 907, 906, 905, 859, 908, 905, 858, 906, 909, 128, 129, 909, 910, 116, 128, 912, 911, 910, 909, 907, 912, 909, 906, 914, 913, 912, 907, 913, 915, 911, 912, 917, 916, 915, 913, 918, 917, 913, 914, 863, 919, 908, 859, 919, 914, 907, 908, 920, 918, 914, 919, 864, 920, 919, 863, 910, 921, 115, 116, 921, 922, 111, 115, 924, 923, 922, 921, 911, 924, 921, 910, 922, 925, 110, 111, 925, 290, 109, 110, 926, 294, 290, 925, 923, 926, 925, 922, 928, 927, 926, 923, 927, 306, 294, 926, 929, 308, 306, 927, 930, 929, 927, 928, 915, 931, 924, 911, 931, 928, 923, 924, 932, 930, 928, 931, 916, 932, 931, 915, 934, 933, 932, 916, 933, 935, 930, 932, 937, 936, 935, 933, 938, 937, 933, 934, 935, 939, 929, 930, 939, 346, 308, 929, 940, 350, 346, 939, 936, 940, 939, 935, 942, 941, 940, 936, 941, 358, 350, 940, 943, 360, 358, 941, 944, 943, 941, 942, 946, 945, 937, 938, 945, 942, 936, 937, 947, 944, 942, 945, 948, 947, 945, 946, 876, 949, 920, 864, 949, 950, 918, 920, 952, 951, 950, 949, 877, 952, 949, 876, 950, 953, 917, 918, 953, 934, 916, 917, 954, 938, 934, 953, 951, 954, 953, 950, 956, 955, 954, 951, 955, 946, 938, 954, 957, 948, 946, 955, 958, 957, 955, 956, 881, 959, 952, 877, 959, 956, 951, 952, 960, 958, 956, 959, 882, 960, 959, 881, 962, 961, 960, 882, 961, 963, 958, 960, 965, 964, 963, 961, 966, 965, 961, 962, 963, 967, 957, 958, 967, 968, 948, 957, 970, 969, 968, 967, 964, 970, 967, 963, 972, 971, 970, 964, 971, 973, 969, 970, 975, 974, 973, 971, 976, 975, 971, 972, 978, 977, 965, 966, 977, 972, 964, 965, 979, 976, 972, 977, 980, 979, 977, 978, 968, 981, 947, 948, 981, 982, 944, 947, 984, 983, 982, 981, 969, 984, 981, 968, 982, 985, 943, 944, 985, 498, 360, 943, 986, 502, 498, 985, 983, 986, 985, 982, 988, 987, 986, 983, 987, 514, 502, 986, 989, 516, 514, 987, 990, 989, 987, 988, 973, 991, 984, 969, 991, 988, 983, 984, 992, 990, 988, 991, 974, 992, 991, 973, 994, 993, 992, 974, 993, 995, 990, 992, 997, 996, 995, 993, 998, 997, 993, 994, 995, 999, 989, 990, 999, 546, 516, 989, 1000, 550, 546, 999, 996, 1000, 999, 995, 1002, 1001, 1000, 996, 1001, 558, 550, 1000, 562, 560, 558, 1001, 566, 562, 1001, 1002, 1004, 1003, 997, 998, 1003, 1002, 996, 997, 578, 566, 1002, 1003, 580, 578, 1003, 1004, 1006, 1005, 979, 980, 1005, 1007, 976, 979, 1009, 1008, 1007, 1005, 1010, 1009, 1005, 1006, 1007, 1011, 975, 976, 1011, 994, 974, 975, 1012, 998, 994, 1011, 1008, 1012, 1011, 1007, 1014, 1013, 1012, 1008, 1013, 1004, 998, 1012, 618, 580, 1004, 1013, 622, 618, 1013, 1014, 1016, 1015, 1009, 1010, 1015, 1014, 1008, 1009, 630, 622, 1014, 1015, 632, 630, 1015, 1016, 1018, 1017, 903, 904, 1017, 1019, 900, 903, 1021, 1020, 1019, 1017, 1022, 1021, 1017, 1018, 1019, 1023, 899, 900, 1023, 1024, 888, 899, 1026, 1025, 1024, 1023, 1020, 1026, 1023, 1019, 1028, 1027, 1026, 1020, 1027, 1029, 1025, 1026, 1031, 1030, 1029, 1027, 1032, 1031, 1027, 1028, 1034, 1033, 1021, 1022, 1033, 1028, 1020, 1021, 1035, 1032, 1028, 1033, 1036, 1035, 1033, 1034, 1024, 1037, 887, 888, 1037, 1038, 884, 887, 1040, 1039, 1038, 1037, 1025, 1040, 1037, 1024, 1038, 1041, 883, 884, 1041, 962, 882, 883, 1042, 966, 962, 1041, 1039, 1042, 1041, 1038, 1044, 1043, 1042, 1039, 1043, 978, 966, 1042, 1045, 980, 978, 1043, 1046, 1045, 1043, 1044, 1029, 1047, 1040, 1025, 1047, 1044, 1039, 1040, 1048, 1046, 1044, 1047, 1030, 1048, 1047, 1029, 1050, 1049, 1048, 1030, 1049, 1051, 1046, 1048, 1053, 1052, 1051, 1049, 1054, 1053, 1049, 1050, 1051, 1055, 1045, 1046, 1055, 1006, 980, 1045, 1056, 1010, 1006, 1055, 1052, 1056, 1055, 1051, 1058, 1057, 1056, 1052, 1057, 1016, 1010, 1056, 770, 632, 1016, 1057, 774, 770, 1057, 1058, 1060, 1059, 1053, 1054, 1059, 1058, 1052, 1053, 786, 774, 1058, 1059, 788, 786, 1059, 1060, 1062, 1061, 1035, 1036, 1061, 1063, 1032, 1035, 1065, 1064, 1063, 1061, 1066, 1065, 1061, 1062, 1063, 1067, 1031, 1032, 1067, 1050, 1030, 1031, 1068, 1054, 1050, 1067, 1064, 1068, 1067, 1063, 1070, 1069, 1068, 1064, 1069, 1060, 1054, 1068, 818, 788, 1060, 1069, 822, 818, 1069, 1070, 1072, 1071, 1065, 1066, 1071, 1070, 1064, 1065, 830, 822, 1070, 1071, 832, 830, 1071, 1072, 1074, 1073, 287, 288, 1073, 1075, 284, 287, 1077, 1076, 1075, 1073, 1078, 1077, 1073, 1074, 1075, 1079, 283, 284, 1079, 1080, 272, 283, 1082, 1081, 1080, 1079, 1076, 1082, 1079, 1075, 1084, 1083, 1082, 1076, 1083, 1085, 1081, 1082, 1087, 1086, 1085, 1083, 1088, 1087, 1083, 1084, 1090, 1089, 1077, 1078, 1089, 1084, 1076, 1077, 1091, 1088, 1084, 1089, 1092, 1091, 1089, 1090, 1080, 1093, 271, 272, 1093, 1094, 268, 271, 1096, 1095, 1094, 1093, 1081, 1096, 1093, 1080, 1094, 1097, 267, 268, 1097, 1098, 224, 267, 1100, 1099, 1098, 1097, 1095, 1100, 1097, 1094, 1102, 1101, 1100, 1095, 1101, 1103, 1099, 1100, 1105, 1104, 1103, 1101, 1106, 1105, 1101, 1102, 1085, 1107, 1096, 1081, 1107, 1102, 1095, 1096, 1108, 1106, 1102, 1107, 1086, 1108, 1107, 1085, 1110, 1109, 1108, 1086, 1109, 1111, 1106, 1108, 1113, 1112, 1111, 1109, 1114, 1113, 1109, 1110, 1111, 1115, 1105, 1106, 1115, 1116, 1104, 1105, 1118, 1117, 1116, 1115, 1112, 1118, 1115, 1111, 1120, 1119, 1118, 1112, 1119, 1121, 1117, 1118, 1123, 1122, 1121, 1119, 1124, 1123, 1119, 1120, 1126, 1125, 1113, 1114, 1125, 1120, 1112, 1113, 1127, 1124, 1120, 1125, 1128, 1127, 1125, 1126, 1130, 1129, 1091, 1092, 1129, 1131, 1088, 1091, 1133, 1132, 1131, 1129, 1134, 1133, 1129, 1130, 1131, 1135, 1087, 1088, 1135, 1110, 1086, 1087, 1136, 1114, 1110, 1135, 1132, 1136, 1135, 1131, 1138, 1137, 1136, 1132, 1137, 1126, 1114, 1136, 1139, 1128, 1126, 1137, 1140, 1139, 1137, 1138, 1142, 1141, 1133, 1134, 1141, 1138, 1132, 1133, 1143, 1140, 1138, 1141, 1144, 1143, 1141, 1142, 1098, 1145, 223, 224, 1145, 1146, 220, 223, 1148, 1147, 1146, 1145, 1099, 1148, 1145, 1098, 1146, 1149, 219, 220, 1149, 1150, 208, 219, 1152, 1151, 1150, 1149, 1147, 1152, 1149, 1146, 1154, 1153, 1152, 1147, 1153, 1155, 1151, 1152, 1157, 1156, 1155, 1153, 1158, 1157, 1153, 1154, 1103, 1159, 1148, 1099, 1159, 1154, 1147, 1148, 1160, 1158, 1154, 1159, 1104, 1160, 1159, 1103, 1150, 1161, 207, 208, 1161, 1162, 204, 207, 1164, 1163, 1162, 1161, 1151, 1164, 1161, 1150, 1162, 1165, 203, 204, 1165, 834, 202, 203, 1166, 838, 834, 1165, 1163, 1166, 1165, 1162, 1168, 1167, 1166, 1163, 1167, 850, 838, 1166, 1169, 852, 850, 1167, 1170, 1169, 1167, 1168, 1155, 1171, 1164, 1151, 1171, 1168, 1163, 1164, 1172, 1170, 1168, 1171, 1156, 1172, 1171, 1155, 1174, 1173, 1172, 1156, 1173, 1175, 1170, 1172, 1177, 1176, 1175, 1173, 1178, 1177, 1173, 1174, 1175, 1179, 1169, 1170, 1179, 890, 852, 1169, 1180, 894, 890, 1179, 1176, 1180, 1179, 1175, 1182, 1181, 1180, 1176, 1181, 902, 894, 1180, 1183, 904, 902, 1181, 1184, 1183, 1181, 1182, 1186, 1185, 1177, 1178, 1185, 1182, 1176, 1177, 1187, 1184, 1182, 1185, 1188, 1187, 1185, 1186, 1116, 1189, 1160, 1104, 1189, 1190, 1158, 1160, 1192, 1191, 1190, 1189, 1117, 1192, 1189, 1116, 1190, 1193, 1157, 1158, 1193, 1174, 1156, 1157, 1194, 1178, 1174, 1193, 1191, 1194, 1193, 1190, 1196, 1195, 1194, 1191, 1195, 1186, 1178, 1194, 1197, 1188, 1186, 1195, 1198, 1197, 1195, 1196, 1121, 1199, 1192, 1117, 1199, 1196, 1191, 1192, 1200, 1198, 1196, 1199, 1122, 1200, 1199, 1121, 1202, 1201, 1200, 1122, 1201, 1203, 1198, 1200, 1205, 1204, 1203, 1201, 1206, 1205, 1201, 1202, 1203, 1207, 1197, 1198, 1207, 1208, 1188, 1197, 1210, 1209, 1208, 1207, 1204, 1210, 1207, 1203, 1212, 1211, 1210, 1204, 1211, 1213, 1209, 1210, 1215, 1214, 1213, 1211, 1216, 1215, 1211, 1212, 1218, 1217, 1205, 1206, 1217, 1212, 1204, 1205, 1219, 1216, 1212, 1217, 1220, 1219, 1217, 1218, 1208, 1221, 1187, 1188, 1221, 1222, 1184, 1187, 1224, 1223, 1222, 1221, 1209, 1224, 1221, 1208, 1222, 1225, 1183, 1184, 1225, 1018, 904, 1183, 1226, 1022, 1018, 1225, 1223, 1226, 1225, 1222, 1228, 1227, 1226, 1223, 1227, 1034, 1022, 1226, 1229, 1036, 1034, 1227, 1230, 1229, 1227, 1228, 1213, 1231, 1224, 1209, 1231, 1228, 1223, 1224, 1232, 1230, 1228, 1231, 1214, 1232, 1231, 1213, 1234, 1233, 1232, 1214, 1233, 1235, 1230, 1232, 1237, 1236, 1235, 1233, 1238, 1237, 1233, 1234, 1235, 1239, 1229, 1230, 1239, 1062, 1036, 1229, 1240, 1066, 1062, 1239, 1236, 1240, 1239, 1235, 1242, 1241, 1240, 1236, 1241, 1072, 1066, 1240, 831, 832, 1072, 1241, 828, 831, 1241, 1242, 1244, 1243, 1237, 1238, 1243, 1242, 1236, 1237, 827, 828, 1242, 1243, 816, 827, 1243, 1244, 1246, 1245, 1219, 1220, 1245, 1247, 1216, 1219, 1249, 1248, 1247, 1245, 1250, 1249, 1245, 1246, 1247, 1251, 1215, 1216, 1251, 1234, 1214, 1215, 1252, 1238, 1234, 1251, 1248, 1252, 1251, 1247, 1254, 1253, 1252, 1248, 1253, 1244, 1238, 1252, 815, 816, 1244, 1253, 812, 815, 1253, 1254, 1256, 1255, 1249, 1250, 1255, 1254, 1248, 1249, 811, 812, 1254, 1255, 768, 811, 1255, 1256, 1258, 1257, 1143, 1144, 1257, 1259, 1140, 1143, 1261, 1260, 1259, 1257, 1262, 1261, 1257, 1258, 1259, 1263, 1139, 1140, 1263, 1264, 1128, 1139, 1266, 1265, 1264, 1263, 1260, 1266, 1263, 1259, 1268, 1267, 1266, 1260, 1267, 1269, 1265, 1266, 1271, 1270, 1269, 1267, 1272, 1271, 1267, 1268, 1274, 1273, 1261, 1262, 1273, 1268, 1260, 1261, 1275, 1272, 1268, 1273, 1276, 1275, 1273, 1274, 1264, 1277, 1127, 1128, 1277, 1278, 1124, 1127, 1280, 1279, 1278, 1277, 1265, 1280, 1277, 1264, 1278, 1281, 1123, 1124, 1281, 1202, 1122, 1123, 1282, 1206, 1202, 1281, 1279, 1282, 1281, 1278, 1284, 1283, 1282, 1279, 1283, 1218, 1206, 1282, 1285, 1220, 1218, 1283, 1286, 1285, 1283, 1284, 1269, 1287, 1280, 1265, 1287, 1284, 1279, 1280, 1288, 1286, 1284, 1287, 1270, 1288, 1287, 1269, 1290, 1289, 1288, 1270, 1289, 1291, 1286, 1288, 1293, 1292, 1291, 1289, 1294, 1293, 1289, 1290, 1291, 1295, 1285, 1286, 1295, 1246, 1220, 1285, 1296, 1250, 1246, 1295, 1292, 1296, 1295, 1291, 1298, 1297, 1296, 1292, 1297, 1256, 1250, 1296, 767, 768, 1256, 1297, 764, 767, 1297, 1298, 1300, 1299, 1293, 1294, 1299, 1298, 1292, 1293, 763, 764, 1298, 1299, 752, 763, 1299, 1300, 1302, 1301, 1275, 1276, 1301, 1303, 1272, 1275, 1305, 1304, 1303, 1301, 1306, 1305, 1301, 1302, 1303, 1307, 1271, 1272, 1307, 1290, 1270, 1271, 1308, 1294, 1290, 1307, 1304, 1308, 1307, 1303, 1310, 1309, 1308, 1304, 1309, 1300, 1294, 1308, 751, 752, 1300, 1309, 748, 751, 1309, 1310, 1312, 1311, 1305, 1306, 1311, 1310, 1304, 1305, 747, 748, 1310, 1311, 746, 747, 1311, 1312, 286, 1313, 1074, 288, 1313, 1314, 1078, 1074, 1316, 1315, 1314, 1313, 278, 1316, 1313, 286, 1314, 1317, 1090, 1078, 1317, 1318, 1092, 1090, 1320, 1319, 1318, 1317, 1315, 1320, 1317, 1314, 1322, 1321, 1320, 1315, 1321, 1323, 1319, 1320, 1325, 1324, 1323, 1321, 1326, 1325, 1321, 1322, 274, 1327, 1316, 278, 1327, 1322, 1315, 1316, 1328, 1326, 1322, 1327, 244, 1328, 1327, 274, 1318, 1329, 1130, 1092, 1329, 1330, 1134, 1130, 1332, 1331, 1330, 1329, 1319, 1332, 1329, 1318, 1330, 1333, 1142, 1134, 1333, 1334, 1144, 1142, 1336, 1335, 1334, 1333, 1331, 1336, 1333, 1330, 1338, 1337, 1336, 1331, 1337, 1339, 1335, 1336, 1341, 1340, 1339, 1337, 1342, 1341, 1337, 1338, 1323, 1343, 1332, 1319, 1343, 1338, 1331, 1332, 1344, 1342, 1338, 1343, 1324, 1344, 1343, 1323, 1346, 1345, 1344, 1324, 1345, 1347, 1342, 1344, 1349, 1348, 1347, 1345, 1350, 1349, 1345, 1346, 1347, 1351, 1341, 1342, 1351, 1352, 1340, 1341, 1354, 1353, 1352, 1351, 1348, 1354, 1351, 1347, 1356, 1355, 1354, 1348, 1355, 1357, 1353, 1354, 1359, 1358, 1357, 1355, 1360, 1359, 1355, 1356, 1362, 1361, 1349, 1350, 1361, 1356, 1348, 1349, 1363, 1360, 1356, 1361, 1364, 1363, 1361, 1362, 242, 1365, 1328, 244, 1365, 1366, 1326, 1328, 1368, 1367, 1366, 1365, 230, 1368, 1365, 242, 1366, 1369, 1325, 1326, 1369, 1346, 1324, 1325, 1370, 1350, 1346, 1369, 1367, 1370, 1369, 1366, 1372, 1371, 1370, 1367, 1371, 1362, 1350, 1370, 1373, 1364, 1362, 1371, 1374, 1373, 1371, 1372, 226, 1375, 1368, 230, 1375, 1372, 1367, 1368, 1376, 1374, 1372, 1375, 80, 1376, 1375, 226, 1334, 1377, 1258, 1144, 1377, 1378, 1262, 1258, 1380, 1379, 1378, 1377, 1335, 1380, 1377, 1334, 1378, 1381, 1274, 1262, 1381, 1382, 1276, 1274, 1384, 1383, 1382, 1381, 1379, 1384, 1381, 1378, 1386, 1385, 1384, 1379, 1385, 1387, 1383, 1384, 1389, 1388, 1387, 1385, 1390, 1389, 1385, 1386, 1339, 1391, 1380, 1335, 1391, 1386, 1379, 1380, 1392, 1390, 1386, 1391, 1340, 1392, 1391, 1339, 1382, 1393, 1302, 1276, 1393, 1394, 1306, 1302, 1396, 1395, 1394, 1393, 1383, 1396, 1393, 1382, 1394, 1397, 1312, 1306, 1397, 745, 746, 1312, 1398, 741, 745, 1397, 1395, 1398, 1397, 1394, 1400, 1399, 1398, 1395, 1399, 740, 741, 1398, 1401, 728, 740, 1399, 1402, 1401, 1399, 1400, 1387, 1403, 1396, 1383, 1403, 1400, 1395, 1396, 1404, 1402, 1400, 1403, 1388, 1404, 1403, 1387, 1406, 1405, 1404, 1388, 1405, 1407, 1402, 1404, 1409, 1408, 1407, 1405, 1410, 1409, 1405, 1406, 1407, 1411, 1401, 1402, 1411, 727, 728, 1401, 1412, 723, 727, 1411, 1408, 1412, 1411, 1407, 1414, 1413, 1412, 1408, 1413, 722, 723, 1412, 1415, 678, 722, 1413, 1416, 1415, 1413, 1414, 1418, 1417, 1409, 1410, 1417, 1414, 1408, 1409, 1419, 1416, 1414, 1417, 1420, 1419, 1417, 1418, 1352, 1421, 1392, 1340, 1421, 1422, 1390, 1392, 1424, 1423, 1422, 1421, 1353, 1424, 1421, 1352, 1422, 1425, 1389, 1390, 1425, 1406, 1388, 1389, 1426, 1410, 1406, 1425, 1423, 1426, 1425, 1422, 1428, 1427, 1426, 1423, 1427, 1418, 1410, 1426, 1429, 1420, 1418, 1427, 1430, 1429, 1427, 1428, 1357, 1431, 1424, 1353, 1431, 1428, 1423, 1424, 1432, 1430, 1428, 1431, 1358, 1432, 1431, 1357, 1434, 1433, 1432, 1358, 1433, 1435, 1430, 1432, 1437, 1436, 1435, 1433, 1438, 1437, 1433, 1434, 1435, 1439, 1429, 1430, 1439, 1440, 1420, 1429, 1442, 1441, 1440, 1439, 1436, 1442, 1439, 1435, 1444, 1443, 1442, 1436, 1443, 1445, 1441, 1442, 1447, 1446, 1445, 1443, 1448, 1447, 1443, 1444, 1450, 1449, 1437, 1438, 1449, 1444, 1436, 1437, 1451, 1448, 1444, 1449, 1452, 1451, 1449, 1450, 1440, 1453, 1419, 1420, 1453, 1454, 1416, 1419, 1456, 1455, 1454, 1453, 1441, 1456, 1453, 1440, 1454, 1457, 1415, 1416, 1457, 677, 678, 1415, 1458, 673, 677, 1457, 1455, 1458, 1457, 1454, 1460, 1459, 1458, 1455, 1459, 672, 673, 1458, 1461, 660, 672, 1459, 1462, 1461, 1459, 1460, 1445, 1463, 1456, 1441, 1463, 1460, 1455, 1456, 1464, 1462, 1460, 1463, 1446, 1464, 1463, 1445, 1466, 1465, 1464, 1446, 1465, 1467, 1462, 1464, 1469, 1468, 1467, 1465, 1470, 1469, 1465, 1466, 1467, 1471, 1461, 1462, 1471, 659, 660, 1461, 1472, 655, 659, 1471, 1468, 1472, 1471, 1467, 1474, 1473, 1472, 1468, 1473, 654, 655, 1472, 473, 474, 654, 1473, 469, 473, 1473, 1474, 1476, 1475, 1469, 1470, 1475, 1474, 1468, 1469, 468, 469, 1474, 1475, 456, 468, 1475, 1476, 1478, 1477, 1451, 1452, 1477, 1479, 1448, 1451, 1481, 1480, 1479, 1477, 1482, 1481, 1477, 1478, 1479, 1483, 1447, 1448, 1483, 1466, 1446, 1447, 1484, 1470, 1466, 1483, 1480, 1484, 1483, 1479, 1486, 1485, 1484, 1480, 1485, 1476, 1470, 1484, 455, 456, 1476, 1485, 451, 455, 1485, 1486, 1488, 1487, 1481, 1482, 1487, 1486, 1480, 1481, 450, 451, 1486, 1487, 406, 450, 1487, 1488, 78, 1489, 1376, 80, 1489, 1490, 1374, 1376, 1492, 1491, 1490, 1489, 70, 1492, 1489, 78, 1490, 1493, 1373, 1374, 1493, 1494, 1364, 1373, 1496, 1495, 1494, 1493, 1491, 1496, 1493, 1490, 1498, 1497, 1496, 1491, 1497, 1499, 1495, 1496, 1501, 1500, 1499, 1497, 1502, 1501, 1497, 1498, 66, 1503, 1492, 70, 1503, 1498, 1491, 1492, 1504, 1502, 1498, 1503, 24, 1504, 1503, 66, 1494, 1505, 1363, 1364, 1505, 1506, 1360, 1363, 1508, 1507, 1506, 1505, 1495, 1508, 1505, 1494, 1506, 1509, 1359, 1360, 1509, 1434, 1358, 1359, 1510, 1438, 1434, 1509, 1507, 1510, 1509, 1506, 1512, 1511, 1510, 1507, 1511, 1450, 1438, 1510, 1513, 1452, 1450, 1511, 1514, 1513, 1511, 1512, 1499, 1515, 1508, 1495, 1515, 1512, 1507, 1508, 1516, 1514, 1512, 1515, 1500, 1516, 1515, 1499, 1518, 1517, 1516, 1500, 1517, 1519, 1514, 1516, 1521, 1520, 1519, 1517, 1522, 1521, 1517, 1518, 1519, 1523, 1513, 1514, 1523, 1478, 1452, 1513, 1524, 1482, 1478, 1523, 1520, 1524, 1523, 1519, 1526, 1525, 1524, 1520, 1525, 1488, 1482, 1524, 405, 406, 1488, 1525, 401, 405, 1525, 1526, 1528, 1527, 1521, 1522, 1527, 1526, 1520, 1521, 400, 401, 1526, 1527, 388, 400, 1527, 1528, 22, 1529, 1504, 24, 1529, 1530, 1502, 1504, 1532, 1531, 1530, 1529, 8, 1532, 1529, 22, 1530, 1533, 1501, 1502, 1533, 1518, 1500, 1501, 1534, 1522, 1518, 1533, 1531, 1534, 1533, 1530, 1536, 1535, 1534, 1531, 1535, 1528, 1522, 1534, 387, 388, 1528, 1535, 383, 387, 1535, 1536, 3, 1537, 1532, 8, 1537, 1536, 1531, 1532, 382, 383, 1536, 1537, 0, 382, 1537, 3}, + ["vertex_list_0"] = { Vec3(0.579348564, -0.579348981, -0.579348385), Vec3(0.596732914, -0.54291594, -0.596732557), Vec3(0.63434422, -0.549794436, -0.54979378), Vec3(0.596732855, -0.596733212, -0.542915344), Vec3(0.620292306, -0.487256616, -0.620291829), Vec3(0.667616367, -0.491493762, -0.565391183), Vec3(0.708671987, -0.502360821, -0.502360284), Vec3(0.667616248, -0.565391779, -0.491493225), Vec3(0.620292008, -0.620292485, -0.48725608), Vec3(0.644162357, -0.420784384, -0.644161999), Vec3(0.697528541, -0.423737824, -0.58382374), Vec3(0.666017115, -0.346116602, -0.666016579), Vec3(0.723508716, -0.348251581, -0.601838231), Vec3(0.774297893, -0.354056209, -0.531092048), Vec3(0.744235635, -0.431635082, -0.516483486), Vec3(0.784516275, -0.442427874, -0.442427486), Vec3(0.744235456, -0.516483963, -0.431634724), Vec3(0.818292201, -0.362190068, -0.454053998), Vec3(0.855216682, -0.371180326, -0.371180207), Vec3(0.81829226, -0.454054296, -0.362189889), Vec3(0.774297655, -0.531092465, -0.35405609), Vec3(0.697528243, -0.583824277, -0.423737466), Vec3(0.644162059, -0.644162595, -0.420783937), Vec3(0.723508298, -0.601838648, -0.348251283), Vec3(0.666016638, -0.666017175, -0.346116245), Vec3(0.684359193, -0.265069962, -0.684358478), Vec3(0.744725943, -0.266581923, -0.617472708), Vec3(0.698144972, -0.179295748, -0.698144138), Vec3(0.760417521, -0.180270016, -0.62946409), Vec3(0.816099763, -0.182947308, -0.554494321), Vec3(0.798436761, -0.270720929, -0.544206679), Vec3(0.706678092, -0.090409331, -0.706677675), Vec3(0.770023227, -0.0908876285, -0.636995018), Vec3(0.709564328, -3.10169987e-08, -0.709563732), Vec3(0.773250937, -1.55084994e-08, -0.639564753), Vec3(0.830428481, 0, -0.563331544), Vec3(0.826835215, -0.0922052264, -0.561065972), Vec3(0.87669909, -0.0940981954, -0.479050994), Vec3(0.864822745, -0.186774924, -0.47343722), Vec3(0.880668521, 0, -0.481007814), Vec3(0.923328996, 1.55084994e-08, -0.392938048), Vec3(0.918992639, -0.0962664708, -0.391308814), Vec3(0.9060269, -0.191126719, -0.38668409), Vec3(0.845220864, -0.276593149, -0.464806527), Vec3(0.884631991, -0.283191711, -0.379697651), Vec3(0.916101098, -0.289564282, -0.289564282), Vec3(0.884631872, -0.379697829, -0.283191681), Vec3(0.939039052, -0.195391074, -0.294890076), Vec3(0.963182211, -0.199005798, -0.199005842), Vec3(0.939038992, -0.294890106, -0.195391178), Vec3(0.90602684, -0.386684269, -0.191126764), Vec3(0.952974856, -0.0984107032, -0.298469096), Vec3(0.95764482, 4.65254999e-08, -0.299741089), Vec3(0.982842922, 6.20339975e-08, -0.202340767), Vec3(0.977899373, -0.100244105, -0.201462179), Vec3(0.993134081, -0.101498291, -0.101498388), Vec3(0.977899373, -0.201462135, -0.100244232), Vec3(0.998260677, 7.75425022e-08, -0.101948649), Vec3(1.00345218, 9.30509998e-08, -3.10169987e-08), Vec3(0.998260677, -0.101948552, -4.65254999e-08), Vec3(0.982842922, -0.202340722, -6.20339975e-08), Vec3(0.952974737, -0.298469186, -0.0984108299), Vec3(0.918992519, -0.391309083, -0.0962665975), Vec3(0.95764482, -0.299741149, -7.75425022e-08), Vec3(0.923328876, -0.392938346, -9.30509998e-08), Vec3(0.744725466, -0.617473304, -0.266581744), Vec3(0.684358537, -0.684359193, -0.265069693), Vec3(0.798436582, -0.544207096, -0.270720869), Vec3(0.816099346, -0.554494798, -0.182947293), Vec3(0.760417104, -0.629464567, -0.180269986), Vec3(0.698144317, -0.698144794, -0.179295674), Vec3(0.845220745, -0.464806795, -0.276593119), Vec3(0.864822567, -0.473437458, -0.186775029), Vec3(0.876698971, -0.479051292, -0.0940983072), Vec3(0.826835096, -0.56106621, -0.0922053233), Vec3(0.880668283, -0.481008321, -1.08559497e-07), Vec3(0.830428183, -0.563331902, -1.08559497e-07), Vec3(0.77002275, -0.636995494, -0.0908876732), Vec3(0.706677675, -0.706678212, -0.0904093757), Vec3(0.77325052, -0.639565229, -1.24067995e-07), Vec3(0.709563851, -0.709564269, -1.395765e-07), Vec3(0.706678212, 0.0904092491, -0.706677675), Vec3(0.770023227, 0.0908875614, -0.636995018), Vec3(0.698144853, 0.179295629, -0.698144376), Vec3(0.760417461, 0.180269867, -0.629464149), Vec3(0.816099703, 0.182947189, -0.554494262), Vec3(0.826835275, 0.0922051966, -0.561065912), Vec3(0.684359193, 0.265069664, -0.684358478), Vec3(0.744726002, 0.266581744, -0.617472708), Vec3(0.666017234, 0.346116304, -0.666016579), Vec3(0.723508894, 0.348251313, -0.601838171), Vec3(0.774298072, 0.35405606, -0.531091988), Vec3(0.79843694, 0.27072072, -0.54420656), Vec3(0.845221043, 0.27659297, -0.464806318), Vec3(0.864822805, 0.186774924, -0.473437071), Vec3(0.818292499, 0.362189829, -0.454053849), Vec3(0.85521692, 0.371180117, -0.371180028), Vec3(0.884632111, 0.283191532, -0.379697472), Vec3(0.906026959, 0.191126704, -0.386683911), Vec3(0.87669915, 0.0940981954, -0.479050905), Vec3(0.918992639, 0.0962665007, -0.391308814), Vec3(0.644162476, 0.420784116, -0.644162059), Vec3(0.69752878, 0.423737556, -0.58382374), Vec3(0.620292306, 0.487256318, -0.620291948), Vec3(0.667616606, 0.491493464, -0.565391123), Vec3(0.708672285, 0.502360404, -0.502360225), Vec3(0.744235814, 0.431634784, -0.516483486), Vec3(0.596733153, 0.542915642, -0.596732676), Vec3(0.634344518, 0.549794078, -0.54979378), Vec3(0.579348922, 0.579348564, -0.579348505), Vec3(0.596733212, 0.596732795, -0.542915463), Vec3(0.620292366, 0.620292008, -0.487256199), Vec3(0.667616546, 0.565391302, -0.491493255), Vec3(0.69752866, 0.583823919, -0.423737407), Vec3(0.744235814, 0.516483605, -0.431634665), Vec3(0.644162476, 0.644162178, -0.420784026), Vec3(0.666017234, 0.666016638, -0.346116155), Vec3(0.723508894, 0.601838231, -0.348251313), Vec3(0.774298131, 0.531091928, -0.354055911), Vec3(0.784516573, 0.442427397, -0.442427337), Vec3(0.818292499, 0.454053938, -0.36218968), Vec3(0.845220983, 0.464806467, -0.27659291), Vec3(0.884632111, 0.379697502, -0.283191442), Vec3(0.79843688, 0.544206679, -0.270720661), Vec3(0.816099823, 0.554494321, -0.182947174), Vec3(0.864822805, 0.47343722, -0.186774805), Vec3(0.9060269, 0.38668409, -0.191126645), Vec3(0.744726002, 0.617472827, -0.266581625), Vec3(0.684359252, 0.684358597, -0.265069604), Vec3(0.698144913, 0.698144376, -0.17929554), Vec3(0.76041764, 0.62946409, -0.180269808), Vec3(0.770023167, 0.636995077, -0.090887472), Vec3(0.826835215, 0.561066031, -0.092205137), Vec3(0.706678152, 0.706677735, -0.0904091597), Vec3(0.709564328, 0.709563732, 9.30509998e-08), Vec3(0.773250818, 0.639564812, 7.75425022e-08), Vec3(0.830428481, 0.563331664, 6.20339975e-08), Vec3(0.87669909, 0.479051024, -0.0940981209), Vec3(0.918992579, 0.391308874, -0.0962664261), Vec3(0.880668461, 0.481007993, 6.20339975e-08), Vec3(0.923328936, 0.392938137, 3.10169987e-08), Vec3(0.952974796, 0.0984107703, -0.298469096), Vec3(0.939038992, 0.195391163, -0.294890046), Vec3(0.963182271, 0.199005887, -0.199005768), Vec3(0.977899373, 0.100244246, -0.20146215), Vec3(0.916101277, 0.289564252, -0.289564043), Vec3(0.939038992, 0.294890076, -0.195391029), Vec3(0.952974796, 0.298469156, -0.0984106883), Vec3(0.977899373, 0.201462224, -0.10024415), Vec3(0.95764488, 0.299741209, 1.55084994e-08), Vec3(0.982842922, 0.202340826, 0), Vec3(0.993134201, 0.101498418, -0.101498358), Vec3(0.998260498, 0.101948723, 0), Vec3(0.993134201, 0.101498447, 0.101498343), Vec3(0.998260677, 1.24067995e-07, 0.101948597), Vec3(0.977899432, 0.201462209, 0.100244217), Vec3(0.963182211, 0.199005961, 0.199005842), Vec3(0.977899373, 0.100244306, 0.201462224), Vec3(0.982842922, 1.395765e-07, 0.202340767), Vec3(0.952974737, 0.298469216, 0.0984107703), Vec3(0.918992519, 0.391309023, 0.0962665603), Vec3(0.90602684, 0.386684179, 0.191126823), Vec3(0.939038992, 0.294890195, 0.195391178), Vec3(0.916101158, 0.289564312, 0.289564312), Vec3(0.939038932, 0.195391253, 0.294890136), Vec3(0.884631932, 0.37969774, 0.28319177), Vec3(0.855216682, 0.371180236, 0.371180445), Vec3(0.884631872, 0.28319177, 0.379697889), Vec3(0.906026781, 0.191126883, 0.386684299), Vec3(0.952974737, 0.0984109119, 0.298469216), Vec3(0.95764488, 1.55085004e-07, 0.299741209), Vec3(0.91899246, 0.0962666869, 0.391309142), Vec3(0.923328817, 1.86102e-07, 0.392938405), Vec3(0.87669909, 0.479050994, 0.094098255), Vec3(0.826835155, 0.561066031, 0.0922053084), Vec3(0.816099524, 0.5544945, 0.182947323), Vec3(0.864822686, 0.47343725, 0.186775029), Vec3(0.770023227, 0.636995018, 0.0908876732), Vec3(0.706678152, 0.706677675, 0.0904093906), Vec3(0.698144794, 0.698144317, 0.179295778), Vec3(0.760417521, 0.62946403, 0.180270046), Vec3(0.744725883, 0.617472887, 0.266581893), Vec3(0.798436761, 0.544206738, 0.270721018), Vec3(0.684359014, 0.684358597, 0.265069932), Vec3(0.666016936, 0.666016638, 0.346116632), Vec3(0.723508656, 0.601838291, 0.348251611), Vec3(0.774297833, 0.531092048, 0.354056329), Vec3(0.845220745, 0.464806527, 0.276593179), Vec3(0.81829232, 0.454054058, 0.362190098), Vec3(0.784516215, 0.442427576, 0.442427844), Vec3(0.818292141, 0.362189919, 0.454054356), Vec3(0.744235575, 0.516483605, 0.431635141), Vec3(0.708671927, 0.502360463, 0.502360821), Vec3(0.744235456, 0.431634873, 0.516483963), Vec3(0.774297595, 0.35405615, 0.531092525), Vec3(0.697528481, 0.58382386, 0.423737824), Vec3(0.644162297, 0.64416194, 0.420784533), Vec3(0.620292127, 0.620291829, 0.487256825), Vec3(0.667616308, 0.565391183, 0.491493762), Vec3(0.634344161, 0.54979378, 0.549794495), Vec3(0.667616129, 0.491493285, 0.565391779), Vec3(0.596732855, 0.596732616, 0.542916059), Vec3(0.579348505, 0.579348266, 0.579349041), Vec3(0.596732736, 0.542915344, 0.596733212), Vec3(0.620291948, 0.487256169, 0.620292425), Vec3(0.697528243, 0.423737615, 0.583824277), Vec3(0.723508358, 0.348251373, 0.601838708), Vec3(0.64416194, 0.420784086, 0.644162595), Vec3(0.666016579, 0.346116334, 0.666017175), Vec3(0.876698911, 0.0940983966, 0.479051352), Vec3(0.880668283, 2.01610504e-07, 0.481008321), Vec3(0.864822447, 0.186775044, 0.473437607), Vec3(0.816099405, 0.182947397, 0.554494858), Vec3(0.826835036, 0.0922053978, 0.561066329), Vec3(0.830428123, 2.17118995e-07, 0.563332021), Vec3(0.845220685, 0.276593149, 0.464806825), Vec3(0.798436522, 0.270720899, 0.544207156), Vec3(0.744725406, 0.266581863, 0.617473364), Vec3(0.760417044, 0.180270046, 0.629464626), Vec3(0.684358537, 0.265069813, 0.684359193), Vec3(0.698144197, 0.179295748, 0.698144913), Vec3(0.77002275, 0.090887785, 0.636995614), Vec3(0.773250341, 2.32627499e-07, 0.639565289), Vec3(0.706677675, 0.0904094651, 0.706678212), Vec3(0.709563732, 2.32627499e-07, 0.709564328), Vec3(0.77002275, -0.636995554, 0.0908874422), Vec3(0.706677675, -0.706678152, 0.0904090926), Vec3(0.826835036, -0.56106627, 0.0922050923), Vec3(0.816099524, -0.554494739, 0.182947144), Vec3(0.760417283, -0.629464507, 0.180269778), Vec3(0.698144376, -0.698144794, 0.179295495), Vec3(0.876698971, -0.479051322, 0.094098106), Vec3(0.918992519, -0.391309053, 0.0962664261), Vec3(0.90602684, -0.386684179, 0.191126645), Vec3(0.864822686, -0.473437369, 0.186774835), Vec3(0.845220804, -0.464806676, 0.276593059), Vec3(0.798436701, -0.544206917, 0.27072075), Vec3(0.884632051, -0.37969774, 0.283191621), Vec3(0.855216682, -0.371180236, 0.371180266), Vec3(0.81829232, -0.454054147, 0.362189889), Vec3(0.774297774, -0.531092227, 0.35405609), Vec3(0.744725645, -0.617473245, 0.266581625), Vec3(0.684358776, -0.684359133, 0.265069574), Vec3(0.723508537, -0.601838589, 0.348251343), Vec3(0.666016698, -0.666017115, 0.346116245), Vec3(0.952974796, -0.298469186, 0.0984106734), Vec3(0.977899373, -0.201462135, 0.10024412), Vec3(0.963182271, -0.199005723, 0.199005798), Vec3(0.939038992, -0.294890076, 0.195391148), Vec3(0.993134201, -0.101498231, 0.101498291), Vec3(0.977899432, -0.100244045, 0.201462165), Vec3(0.952974796, -0.098410584, 0.298469245), Vec3(0.939038932, -0.195390999, 0.294890106), Vec3(0.918992579, -0.0962663144, 0.391309053), Vec3(0.90602684, -0.1911266, 0.386684209), Vec3(0.916101098, -0.289564282, 0.289564312), Vec3(0.884632051, -0.283191562, 0.379697859), Vec3(0.845220804, -0.27659294, 0.464806736), Vec3(0.81829232, -0.362189829, 0.454054207), Vec3(0.864822745, -0.186774746, 0.473437518), Vec3(0.816099584, -0.182947055, 0.554494739), Vec3(0.798436642, -0.270720631, 0.544207036), Vec3(0.774297833, -0.354055971, 0.531092286), Vec3(0.876698971, -0.0940979943, 0.479051322), Vec3(0.826835036, -0.0922049806, 0.561066329), Vec3(0.77002275, -0.0908873305, 0.636995554), Vec3(0.760417163, -0.180269673, 0.629464626), Vec3(0.706677675, -0.0904090181, 0.706678152), Vec3(0.698144436, -0.179295361, 0.698144853), Vec3(0.744725585, -0.266581506, 0.617473304), Vec3(0.723508537, -0.348251224, 0.601838589), Vec3(0.684358776, -0.265069485, 0.684359193), Vec3(0.666016757, -0.346116185, 0.666017175), Vec3(0.697528303, -0.583824158, 0.423737615), Vec3(0.644162178, -0.644162416, 0.420784056), Vec3(0.744235575, -0.516483724, 0.431634963), Vec3(0.708671868, -0.502360582, 0.502360702), Vec3(0.667616189, -0.5653916, 0.491493523), Vec3(0.620292068, -0.620292246, 0.487256259), Vec3(0.784516335, -0.442427546, 0.442427576), Vec3(0.744235456, -0.431634814, 0.516483903), Vec3(0.697528243, -0.423737556, 0.583824217), Vec3(0.667616189, -0.491493493, 0.56539166), Vec3(0.644162118, -0.420784056, 0.644162476), Vec3(0.620292068, -0.487256318, 0.620292127), Vec3(0.634344041, -0.549794137, 0.549794197), Vec3(0.596732795, -0.596733034, 0.542915702), Vec3(0.596732736, -0.542915702, 0.596732974), Vec3(0.579348505, -0.579348624, 0.579348683), Vec3(0.549794436, 0.549794137, -0.634343982), Vec3(0.542915821, 0.596732914, -0.596732795), Vec3(0.56539166, 0.491493493, -0.667616129), Vec3(0.502360761, 0.502360582, -0.708671808), Vec3(0.491493732, 0.565391541, -0.667616129), Vec3(0.487256616, 0.620292008, -0.620292008), Vec3(0.583824337, 0.423737645, -0.697528183), Vec3(0.601838708, 0.348251402, -0.723508358), Vec3(0.531092465, 0.35405612, -0.774297595), Vec3(0.516483963, 0.431634963, -0.744235337), Vec3(0.442427844, 0.442427635, -0.784516156), Vec3(0.431635082, 0.516483843, -0.744235337), Vec3(0.454054385, 0.362190008, -0.818292022), Vec3(0.371180505, 0.371180475, -0.855216503), Vec3(0.362190098, 0.454054266, -0.818292081), Vec3(0.354056299, 0.531092405, -0.774297655), Vec3(0.423737854, 0.583824039, -0.697528243), Vec3(0.420784324, 0.644162238, -0.644162118), Vec3(0.348251522, 0.60183847, -0.723508477), Vec3(0.346116513, 0.666016817, -0.666016817), Vec3(0.617473364, 0.266581744, -0.744725406), Vec3(0.629464746, 0.180269927, -0.760416985), Vec3(0.554494917, 0.182947248, -0.816099286), Vec3(0.544207156, 0.270720869, -0.798436522), Vec3(0.636995614, 0.0908875614, -0.77002269), Vec3(0.639565349, -3.10169987e-08, -0.773250401), Vec3(0.56333214, -4.65254999e-08, -0.830428064), Vec3(0.561066508, 0.0922052115, -0.826834917), Vec3(0.47905162, 0.0940982103, -0.876698732), Vec3(0.473437697, 0.186774954, -0.864822447), Vec3(0.481008559, -6.20339975e-08, -0.880668163), Vec3(0.392938614, -6.20339975e-08, -0.923328698), Vec3(0.391309351, 0.0962665007, -0.9189924), Vec3(0.386684537, 0.191126794, -0.906026721), Vec3(0.464806944, 0.276593119, -0.845220566), Vec3(0.379697978, 0.28319177, -0.884631813), Vec3(0.28956458, 0.28956449, -0.916101038), Vec3(0.28319186, 0.379697889, -0.884631813), Vec3(0.294890344, 0.195391238, -0.939038873), Vec3(0.199006036, 0.199005991, -0.963182211), Vec3(0.195391312, 0.294890344, -0.939038932), Vec3(0.191126883, 0.386684388, -0.906026781), Vec3(0.298469514, 0.0984107703, -0.952974677), Vec3(0.299741477, -6.20339975e-08, -0.957644701), Vec3(0.202340946, -7.75425022e-08, -0.982842922), Vec3(0.201462418, 0.100244217, -0.977899313), Vec3(0.101498447, 0.101498388, -0.993134081), Vec3(0.100244276, 0.201462284, -0.977899373), Vec3(0.101948723, -7.75425022e-08, -0.998260498), Vec3(-3.10169987e-08, -7.75425022e-08, -1.00345218), Vec3(-1.55084994e-08, 0.101948664, -0.998260677), Vec3(-3.10169987e-08, 0.202340871, -0.982842922), Vec3(0.098410815, 0.298469394, -0.952974677), Vec3(0.0962665826, 0.391309261, -0.91899246), Vec3(-3.10169987e-08, 0.299741328, -0.957644761), Vec3(-3.10169987e-08, 0.392938465, -0.923328817), Vec3(0.266581893, 0.617473125, -0.744725645), Vec3(0.265069902, 0.684358835, -0.684358835), Vec3(0.270721018, 0.544206977, -0.798436582), Vec3(0.182947323, 0.554494739, -0.816099405), Vec3(0.180270001, 0.629464447, -0.760417283), Vec3(0.179295719, 0.698144615, -0.698144555), Vec3(0.276593238, 0.464806765, -0.845220625), Vec3(0.186775088, 0.473437577, -0.864822447), Vec3(0.094098255, 0.479051411, -0.876698852), Vec3(0.0922052413, 0.56106627, -0.826835096), Vec3(-3.10169987e-08, 0.481008351, -0.880668223), Vec3(-3.10169987e-08, 0.563331902, -0.830428243), Vec3(0.0908876136, 0.636995435, -0.770022869), Vec3(0.0904092789, 0.706677914, -0.706677914), Vec3(-3.10169987e-08, 0.639565229, -0.77325052), Vec3(-3.10169987e-08, 0.70956403, -0.709563971), Vec3(0.636995673, -0.0908876732, -0.77002269), Vec3(0.629464746, -0.180270061, -0.760416925), Vec3(0.554494917, -0.182947397, -0.816099226), Vec3(0.561066508, -0.0922053531, -0.826834917), Vec3(0.617473304, -0.266581982, -0.744725406), Vec3(0.601838648, -0.3482517, -0.723508239), Vec3(0.531092405, -0.354056418, -0.774297535), Vec3(0.544207156, -0.270721078, -0.798436463), Vec3(0.464806944, -0.276593328, -0.845220566), Vec3(0.473437726, -0.186775163, -0.864822447), Vec3(0.454054385, -0.362190276, -0.818291903), Vec3(0.371180475, -0.371180713, -0.855216384), Vec3(0.379697978, -0.283192009, -0.884631813), Vec3(0.386684448, -0.191126972, -0.906026661), Vec3(0.47905159, -0.0940983519, -0.876698792), Vec3(0.391309321, -0.096266672, -0.9189924), Vec3(0.583824158, -0.423737973, -0.697528124), Vec3(0.5653916, -0.491493762, -0.66761601), Vec3(0.502360642, -0.502361, -0.708671629), Vec3(0.516483903, -0.431635261, -0.744235277), Vec3(0.549794137, -0.549794555, -0.634343863), Vec3(0.542915463, -0.596733272, -0.596732557), Vec3(0.487256259, -0.620292604, -0.62029165), Vec3(0.491493523, -0.565391958, -0.667615891), Vec3(0.423737615, -0.583824337, -0.697528124), Vec3(0.431634963, -0.516484201, -0.744235277), Vec3(0.420784116, -0.644162714, -0.64416182), Vec3(0.346116334, -0.666017413, -0.6660164), Vec3(0.348251402, -0.601839006, -0.72350812), Vec3(0.35405618, -0.531092763, -0.774297416), Vec3(0.442427784, -0.442428052, -0.784516096), Vec3(0.362190068, -0.454054564, -0.818291903), Vec3(0.276593208, -0.464807153, -0.845220447), Vec3(0.28319183, -0.379698128, -0.884631693), Vec3(0.270720869, -0.544207335, -0.798436344), Vec3(0.182947293, -0.554495156, -0.816099226), Vec3(0.186775029, -0.473438025, -0.864822268), Vec3(0.191126853, -0.386684716, -0.906026602), Vec3(0.266581804, -0.617473602, -0.744725287), Vec3(0.265069693, -0.684359431, -0.684358358), Vec3(0.179295585, -0.698145151, -0.698144019), Vec3(0.180269927, -0.629464924, -0.760416925), Vec3(0.0908875465, -0.636995971, -0.770022452), Vec3(0.0922052115, -0.561066806, -0.826834679), Vec3(0.0904092044, -0.706678569, -0.706677377), Vec3(-3.10169987e-08, -0.709564626, -0.709563434), Vec3(-1.55084994e-08, -0.639565766, -0.773250043), Vec3(-3.10169987e-08, -0.563332438, -0.830427825), Vec3(0.0940982252, -0.479051828, -0.876698613), Vec3(0.0962665305, -0.39130953, -0.918992281), Vec3(-3.10169987e-08, -0.481008708, -0.880668044), Vec3(-3.10169987e-08, -0.392938763, -0.923328638), Vec3(0.298469454, -0.0984109119, -0.952974677), Vec3(0.294890344, -0.195391402, -0.939038813), Vec3(0.199006081, -0.19900623, -0.963182092), Vec3(0.201462343, -0.100244373, -0.977899373), Vec3(0.28956458, -0.289564699, -0.916100979), Vec3(0.195391282, -0.294890523, -0.939038813), Vec3(0.0984108299, -0.298469603, -0.952974617), Vec3(0.100244276, -0.201462492, -0.977899313), Vec3(-3.10169987e-08, -0.299741685, -0.957644761), Vec3(-3.10169987e-08, -0.202341124, -0.982842863), Vec3(0.101498432, -0.101498574, -0.993134081), Vec3(-3.10169987e-08, -0.10194885, -0.998260498), Vec3(-0.101498529, -0.101498559, -0.993134081), Vec3(-0.101948768, -6.20339975e-08, -0.998260677), Vec3(-0.100244336, -0.201462507, -0.977899373), Vec3(-0.19900614, -0.1990062, -0.963182092), Vec3(-0.201462492, -0.100244388, -0.977899313), Vec3(-0.202340975, -7.75425022e-08, -0.982842922), Vec3(-0.0984109119, -0.298469603, -0.952974617), Vec3(-0.0962666422, -0.3913095, -0.918992281), Vec3(-0.191126928, -0.386684775, -0.906026602), Vec3(-0.195391387, -0.294890523, -0.939038694), Vec3(-0.289564669, -0.289564699, -0.916100979), Vec3(-0.294890493, -0.195391446, -0.939038813), Vec3(-0.283191919, -0.379698187, -0.884631693), Vec3(-0.371180534, -0.371180683, -0.855216444), Vec3(-0.379697978, -0.283192009, -0.884631693), Vec3(-0.386684537, -0.191127017, -0.906026661), Vec3(-0.298469603, -0.0984109566, -0.952974617), Vec3(-0.299741566, -7.75425022e-08, -0.957644761), Vec3(-0.39130941, -0.0962666571, -0.9189924), Vec3(-0.392938703, -6.20339975e-08, -0.923328638), Vec3(-0.0940983221, -0.479051888, -0.876698673), Vec3(-0.0922052786, -0.561066806, -0.826834679), Vec3(-0.182947397, -0.554495275, -0.816099167), Vec3(-0.186775118, -0.473437995, -0.864822268), Vec3(-0.0908876136, -0.636995971, -0.770022452), Vec3(-0.0904092789, -0.706678569, -0.706677318), Vec3(-0.179295659, -0.698145211, -0.698143959), Vec3(-0.180270001, -0.629465044, -0.760416746), Vec3(-0.266581804, -0.617473602, -0.744725227), Vec3(-0.270721018, -0.544207394, -0.798436284), Vec3(-0.265069783, -0.684359431, -0.684358299), Vec3(-0.346116394, -0.666017354, -0.6660164), Vec3(-0.348251522, -0.601838827, -0.723508179), Vec3(-0.354056299, -0.531092763, -0.774297357), Vec3(-0.276593298, -0.464807212, -0.845220387), Vec3(-0.362190187, -0.454054564, -0.818291903), Vec3(-0.442427903, -0.442428023, -0.784515977), Vec3(-0.454054445, -0.362190276, -0.818291903), Vec3(-0.431635112, -0.516484201, -0.744235218), Vec3(-0.502360761, -0.502361, -0.708671629), Vec3(-0.516484022, -0.431635231, -0.744235218), Vec3(-0.531092465, -0.354056418, -0.774297476), Vec3(-0.423737764, -0.583824396, -0.697528005), Vec3(-0.420784116, -0.644162714, -0.64416182), Vec3(-0.487256378, -0.620292604, -0.62029165), Vec3(-0.491493583, -0.565391958, -0.667615831), Vec3(-0.549794257, -0.549794495, -0.634343743), Vec3(-0.56539166, -0.491493821, -0.667615891), Vec3(-0.542915702, -0.596733212, -0.596732557), Vec3(-0.579348683, -0.579348862, -0.579348266), Vec3(-0.596732974, -0.542915821, -0.596732616), Vec3(-0.620292246, -0.487256676, -0.62029171), Vec3(-0.583824277, -0.423737943, -0.697528064), Vec3(-0.601838648, -0.348251611, -0.723508179), Vec3(-0.644162416, -0.420784414, -0.64416182), Vec3(-0.666017115, -0.346116543, -0.666016519), Vec3(-0.47905165, -0.094098337, -0.876698732), Vec3(-0.481008559, -6.20339975e-08, -0.880668104), Vec3(-0.473437756, -0.186775133, -0.864822447), Vec3(-0.554495096, -0.182947442, -0.816099226), Vec3(-0.561066449, -0.0922053382, -0.826834917), Vec3(-0.5633322, -4.65254999e-08, -0.830428064), Vec3(-0.464807004, -0.276593328, -0.845220566), Vec3(-0.544207156, -0.270721048, -0.798436403), Vec3(-0.617473423, -0.266581982, -0.744725347), Vec3(-0.629464746, -0.180270046, -0.760416925), Vec3(-0.684359193, -0.265069902, -0.684358537), Vec3(-0.698144972, -0.179295719, -0.698144197), Vec3(-0.636995614, -0.0908876583, -0.77002269), Vec3(-0.639565408, -3.10169987e-08, -0.773250341), Vec3(-0.706678212, -0.0904093161, -0.706677616), Vec3(-0.709564388, -1.55084994e-08, -0.709563732), Vec3(-0.0908876732, 0.636995435, -0.770022869), Vec3(-0.0904093459, 0.706677854, -0.706677854), Vec3(-0.0922053233, 0.56106621, -0.826835096), Vec3(-0.182947382, 0.554494679, -0.816099405), Vec3(-0.180270046, 0.629464447, -0.760417283), Vec3(-0.179295778, 0.698144555, -0.698144495), Vec3(-0.0940982923, 0.479051322, -0.876698971), Vec3(-0.0962666422, 0.391309172, -0.91899246), Vec3(-0.191126928, 0.386684328, -0.906026781), Vec3(-0.186775103, 0.473437399, -0.864822626), Vec3(-0.276593268, 0.464806646, -0.845220685), Vec3(-0.270721018, 0.544206858, -0.798436642), Vec3(-0.283191949, 0.37969777, -0.884631813), Vec3(-0.371180594, 0.371180356, -0.855216563), Vec3(-0.362190217, 0.454054058, -0.818292081), Vec3(-0.354056448, 0.531092167, -0.774297774), Vec3(-0.266581893, 0.617473006, -0.744725645), Vec3(-0.265069932, 0.684358895, -0.684358776), Vec3(-0.348251551, 0.60183847, -0.723508418), Vec3(-0.346116602, 0.666016877, -0.666016817), Vec3(-0.0984108895, 0.298469335, -0.952974677), Vec3(-0.100244321, 0.201462284, -0.977899313), Vec3(-0.199006096, 0.199005947, -0.963182151), Vec3(-0.195391372, 0.294890255, -0.939038932), Vec3(-0.101498514, 0.101498373, -0.993134201), Vec3(-0.201462463, 0.100244202, -0.977899373), Vec3(-0.298469573, 0.0984107703, -0.952974677), Vec3(-0.294890434, 0.195391223, -0.939038873), Vec3(-0.391309351, 0.0962665156, -0.9189924), Vec3(-0.386684537, 0.191126794, -0.906026661), Vec3(-0.28956458, 0.289564401, -0.916101038), Vec3(-0.379697978, 0.283191681, -0.884631813), Vec3(-0.464807004, 0.276593089, -0.845220506), Vec3(-0.454054534, 0.362190008, -0.818292081), Vec3(-0.473437726, 0.186774924, -0.864822447), Vec3(-0.554495096, 0.182947278, -0.816099226), Vec3(-0.544207275, 0.270720869, -0.798436463), Vec3(-0.531092584, 0.35405609, -0.774297595), Vec3(-0.47905165, 0.0940981954, -0.876698792), Vec3(-0.561066628, 0.0922052413, -0.826834857), Vec3(-0.636995673, 0.0908875614, -0.77002269), Vec3(-0.629464805, 0.180269927, -0.760416925), Vec3(-0.706678271, 0.090409264, -0.706677675), Vec3(-0.698144972, 0.179295644, -0.698144197), Vec3(-0.617473483, 0.266581804, -0.744725406), Vec3(-0.601838708, 0.348251373, -0.723508358), Vec3(-0.684359252, 0.265069723, -0.684358478), Vec3(-0.666017234, 0.346116334, -0.666016579), Vec3(-0.423737913, 0.583824039, -0.697528243), Vec3(-0.420784324, 0.644162238, -0.644162118), Vec3(-0.431635171, 0.516483724, -0.744235456), Vec3(-0.50236088, 0.502360582, -0.708671808), Vec3(-0.491493732, 0.565391421, -0.667616129), Vec3(-0.487256646, 0.620292068, -0.620292068), Vec3(-0.442427963, 0.442427576, -0.784516156), Vec3(-0.516484082, 0.431634843, -0.744235337), Vec3(-0.583824277, 0.423737675, -0.697528183), Vec3(-0.565391839, 0.491493493, -0.667616069), Vec3(-0.644162655, 0.420784116, -0.64416188), Vec3(-0.620292485, 0.487256318, -0.62029171), Vec3(-0.549794495, 0.549794137, -0.634344041), Vec3(-0.542915881, 0.596732795, -0.596732676), Vec3(-0.596733212, 0.542915463, -0.596732676), Vec3(-0.579348862, 0.579348385, -0.579348564), Vec3(-0.634344459, 0.549794078, -0.549793839), Vec3(-0.596733212, 0.596732736, -0.542915404), Vec3(-0.667616665, 0.491493344, -0.565391123), Vec3(-0.708672285, 0.502360404, -0.502360225), Vec3(-0.667616606, 0.565391362, -0.491493195), Vec3(-0.620292485, 0.620291948, -0.48725614), Vec3(-0.69752878, 0.423737556, -0.58382374), Vec3(-0.723509014, 0.348251373, -0.601838052), Vec3(-0.774298131, 0.35405609, -0.531091869), Vec3(-0.744235814, 0.431634814, -0.516483426), Vec3(-0.784516573, 0.442427456, -0.442427337), Vec3(-0.744235754, 0.516483605, -0.431634635), Vec3(-0.818292379, 0.362189829, -0.454053849), Vec3(-0.855216861, 0.371180147, -0.371180087), Vec3(-0.818292439, 0.454053879, -0.362189651), Vec3(-0.774298072, 0.531092048, -0.354055911), Vec3(-0.69752866, 0.58382386, -0.423737377), Vec3(-0.644162655, 0.644161999, -0.420783937), Vec3(-0.723508894, 0.601838171, -0.348251253), Vec3(-0.666017234, 0.666016579, -0.346116126), Vec3(-0.744726062, 0.266581774, -0.617472589), Vec3(-0.7604177, 0.180269912, -0.629463971), Vec3(-0.816099882, 0.182947204, -0.554494262), Vec3(-0.79843694, 0.27072078, -0.54420656), Vec3(-0.770023227, 0.0908875465, -0.636994958), Vec3(-0.773250937, -1.55084994e-08, -0.639564574), Vec3(-0.830428481, 0, -0.563331485), Vec3(-0.826835394, 0.0922051966, -0.561065733), Vec3(-0.876699209, 0.0940982103, -0.479050845), Vec3(-0.864822805, 0.186774939, -0.473437041), Vec3(-0.880668521, 0, -0.481007785), Vec3(-0.923328996, 1.55084994e-08, -0.392938018), Vec3(-0.918992698, 0.0962664858, -0.391308725), Vec3(-0.906027019, 0.191126734, -0.386683911), Vec3(-0.845220983, 0.27659297, -0.464806288), Vec3(-0.884632111, 0.283191562, -0.379697442), Vec3(-0.916101277, 0.289564282, -0.289564103), Vec3(-0.884632111, 0.379697502, -0.283191383), Vec3(-0.939039111, 0.195391104, -0.294889927), Vec3(-0.963182271, 0.199005827, -0.199005693), Vec3(-0.939039111, 0.294890046, -0.195390984), Vec3(-0.906026959, 0.38668406, -0.191126585), Vec3(-0.952974856, 0.0984107554, -0.298468947), Vec3(-0.95764488, 3.10169987e-08, -0.299741), Vec3(-0.982842922, 4.65254999e-08, -0.202340692), Vec3(-0.977899432, 0.100244232, -0.201462075), Vec3(-0.993134081, 0.101498403, -0.101498291), Vec3(-0.977899373, 0.201462194, -0.10024409), Vec3(-0.998260677, 6.20339975e-08, -0.101948567), Vec3(-1.00345218, 7.75425022e-08, 4.65254999e-08), Vec3(-0.998260498, 0.101948693, 4.65254999e-08), Vec3(-0.982842922, 0.202340797, 7.75425022e-08), Vec3(-0.952974796, 0.298469156, -0.0984106287), Vec3(-0.918992639, 0.391308784, -0.096266374), Vec3(-0.95764482, 0.299741119, 9.30509998e-08), Vec3(-0.923328936, 0.392938137, 1.08559497e-07), Vec3(-0.744726002, 0.617472827, -0.266581535), Vec3(-0.684359193, 0.684358537, -0.265069604), Vec3(-0.798436999, 0.54420656, -0.270720631), Vec3(-0.816099763, 0.554494262, -0.182947025), Vec3(-0.760417759, 0.629463911, -0.180269718), Vec3(-0.698144853, 0.698144317, -0.17929551), Vec3(-0.845220923, 0.464806408, -0.276592791), Vec3(-0.864822865, 0.47343725, -0.18677476), Vec3(-0.87669915, 0.479050964, -0.0940980539), Vec3(-0.826835334, 0.561065912, -0.0922050551), Vec3(-0.880668461, 0.481007904, 1.24067995e-07), Vec3(-0.830428481, 0.563331664, 1.24067995e-07), Vec3(-0.770023286, 0.636995018, -0.0908874273), Vec3(-0.706678212, 0.706677675, -0.090409115), Vec3(-0.773250878, 0.639564753, 1.395765e-07), Vec3(-0.709564328, 0.709563732, 1.395765e-07), Vec3(-0.770023227, -0.0908876136, -0.636995018), Vec3(-0.76041764, -0.180269986, -0.62946403), Vec3(-0.816099763, -0.182947308, -0.554494321), Vec3(-0.826835334, -0.0922052264, -0.561065853), Vec3(-0.744726002, -0.266581833, -0.617472649), Vec3(-0.723508775, -0.348251522, -0.601838171), Vec3(-0.774298012, -0.35405612, -0.531091928), Vec3(-0.79843688, -0.270720929, -0.544206619), Vec3(-0.845220923, -0.276593119, -0.464806437), Vec3(-0.864822805, -0.186774969, -0.47343713), Vec3(-0.818292439, -0.362190008, -0.454053849), Vec3(-0.855216742, -0.371180296, -0.371180087), Vec3(-0.884632051, -0.283191621, -0.379697472), Vec3(-0.906026959, -0.191126734, -0.386683941), Vec3(-0.87669915, -0.0940981954, -0.479050905), Vec3(-0.918992639, -0.0962664708, -0.391308814), Vec3(-0.697528601, -0.423737824, -0.58382374), Vec3(-0.667616427, -0.491493702, -0.565391183), Vec3(-0.708672106, -0.502360761, -0.502360225), Vec3(-0.744235694, -0.431634992, -0.516483426), Vec3(-0.63434422, -0.549794436, -0.549793839), Vec3(-0.596732795, -0.596733212, -0.542915344), Vec3(-0.620292068, -0.620292425, -0.48725605), Vec3(-0.667616308, -0.565391719, -0.491493255), Vec3(-0.697528422, -0.583824277, -0.423737407), Vec3(-0.744235635, -0.516483903, -0.431634635), Vec3(-0.644162118, -0.644162536, -0.420783907), Vec3(-0.666016698, -0.666017175, -0.346116185), Vec3(-0.723508477, -0.601838589, -0.348251313), Vec3(-0.774297833, -0.531092405, -0.354055941), Vec3(-0.784516335, -0.442427784, -0.442427397), Vec3(-0.81829232, -0.454054266, -0.36218977), Vec3(-0.845220804, -0.464806765, -0.27659297), Vec3(-0.884631991, -0.37969777, -0.283191562), Vec3(-0.798436642, -0.544206977, -0.27072072), Vec3(-0.816099405, -0.554494679, -0.182947218), Vec3(-0.864822626, -0.473437458, -0.18677488), Vec3(-0.90602684, -0.386684269, -0.191126719), Vec3(-0.744725585, -0.617473245, -0.266581684), Vec3(-0.684358597, -0.684359193, -0.265069634), Vec3(-0.698144317, -0.698145032, -0.179295644), Vec3(-0.760417163, -0.629464567, -0.180269927), Vec3(-0.77002275, -0.636995494, -0.0908876285), Vec3(-0.826835036, -0.561066329, -0.0922052413), Vec3(-0.706677675, -0.706678212, -0.090409331), Vec3(-0.709563851, -0.709564209, -1.08559497e-07), Vec3(-0.773250461, -0.639565289, -7.75425022e-08), Vec3(-0.830428123, -0.563331962, -6.20339975e-08), Vec3(-0.876698911, -0.479051381, -0.0940982252), Vec3(-0.918992519, -0.391309053, -0.0962665007), Vec3(-0.880668283, -0.481008321, -3.10169987e-08), Vec3(-0.923328876, -0.392938346, -1.55084994e-08), Vec3(-0.952974796, -0.0984107032, -0.298469037), Vec3(-0.939038932, -0.195391148, -0.294890046), Vec3(-0.963182271, -0.199005872, -0.199005798), Vec3(-0.977899373, -0.100244164, -0.20146212), Vec3(-0.916101158, -0.289564282, -0.289564222), Vec3(-0.939038992, -0.294890165, -0.195391074), Vec3(-0.952974796, -0.298469216, -0.0984107256), Vec3(-0.977899373, -0.201462135, -0.10024415), Vec3(-0.95764488, -0.299741179, 0), Vec3(-0.982842922, -0.202340752, 0), Vec3(-0.993134081, -0.101498291, -0.101498306), Vec3(-0.998260677, -0.101948567, 1.55084994e-08), Vec3(-0.993134201, -0.101498291, 0.101498403), Vec3(-0.998260677, 9.30509998e-08, 0.101948664), Vec3(-0.977899373, -0.201462135, 0.100244217), Vec3(-0.963182211, -0.199005783, 0.199005857), Vec3(-0.977899373, -0.10024409, 0.201462224), Vec3(-0.982842982, 1.08559497e-07, 0.202340797), Vec3(-0.952974737, -0.298469186, 0.0984107554), Vec3(-0.918992519, -0.391309083, 0.0962664858), Vec3(-0.906026781, -0.386684299, 0.191126749), Vec3(-0.939038992, -0.294890136, 0.195391178), Vec3(-0.916101158, -0.289564282, 0.289564312), Vec3(-0.939038932, -0.195391044, 0.294890165), Vec3(-0.884631872, -0.37969777, 0.283191711), Vec3(-0.855216682, -0.371180236, 0.371180415), Vec3(-0.884631872, -0.283191592, 0.379697859), Vec3(-0.906026781, -0.19112666, 0.386684328), Vec3(-0.952974737, -0.0984106287, 0.298469216), Vec3(-0.95764488, 1.24067995e-07, 0.299741238), Vec3(-0.918992519, -0.0962663591, 0.391309083), Vec3(-0.923328817, 1.395765e-07, 0.392938435), Vec3(-0.876698971, -0.479051322, 0.0940981656), Vec3(-0.826835036, -0.56106627, 0.0922051519), Vec3(-0.816099524, -0.554494739, 0.182947204), Vec3(-0.864822686, -0.473437428, 0.186774909), Vec3(-0.77002281, -0.636995494, 0.090887472), Vec3(-0.706677675, -0.706678212, 0.0904091299), Vec3(-0.698144436, -0.698144853, 0.179295495), Vec3(-0.760417283, -0.629464507, 0.180269793), Vec3(-0.744725645, -0.617473185, 0.266581744), Vec3(-0.798436642, -0.544206977, 0.27072078), Vec3(-0.684358776, -0.684359133, 0.265069634), Vec3(-0.666016638, -0.666017115, 0.346116304), Vec3(-0.723508418, -0.601838589, 0.348251373), Vec3(-0.774297714, -0.531092346, 0.35405609), Vec3(-0.845220685, -0.464806706, 0.276593029), Vec3(-0.81829226, -0.454054207, 0.362190008), Vec3(-0.784516215, -0.442427605, 0.442427725), Vec3(-0.81829226, -0.362189889, 0.454054296), Vec3(-0.744235575, -0.516483724, 0.431634963), Vec3(-0.708671808, -0.502360642, 0.502360761), Vec3(-0.744235456, -0.431634873, 0.516483903), Vec3(-0.774297774, -0.35405606, 0.531092405), Vec3(-0.697528303, -0.583824098, 0.423737675), Vec3(-0.644162118, -0.644162416, 0.420784175), Vec3(-0.620291948, -0.620292127, 0.487256467), Vec3(-0.667616189, -0.5653916, 0.491493553), Vec3(-0.634344101, -0.549794197, 0.549794137), Vec3(-0.667616189, -0.491493493, 0.5653916), Vec3(-0.596732616, -0.596733034, 0.542915761), Vec3(-0.579348385, -0.579348624, 0.579348624), Vec3(-0.596732676, -0.542915702, 0.596733093), Vec3(-0.620292008, -0.487256348, 0.620292306), Vec3(-0.697528243, -0.423737615, 0.583824217), Vec3(-0.723508418, -0.348251343, 0.601838648), Vec3(-0.644162118, -0.420784056, 0.644162476), Vec3(-0.666016698, -0.346116155, 0.666017175), Vec3(-0.876698911, -0.094098039, 0.479051352), Vec3(-0.880668223, 1.55085004e-07, 0.481008351), Vec3(-0.864822567, -0.186774775, 0.473437607), Vec3(-0.816099465, -0.182947099, 0.554494858), Vec3(-0.826835036, -0.0922050402, 0.561066389), Vec3(-0.830428123, 1.70593495e-07, 0.563332021), Vec3(-0.845220745, -0.276593029, 0.464806795), Vec3(-0.798436642, -0.27072069, 0.544207036), Vec3(-0.744725585, -0.266581565, 0.617473304), Vec3(-0.760417163, -0.180269718, 0.629464626), Vec3(-0.684358597, -0.265069515, 0.684359133), Vec3(-0.698144376, -0.179295376, 0.698144853), Vec3(-0.77002275, -0.0908873752, 0.636995614), Vec3(-0.773250341, 1.70593495e-07, 0.639565289), Vec3(-0.706677675, -0.0904090479, 0.706678271), Vec3(-0.709563732, 1.86102e-07, 0.709564328), Vec3(-0.770023167, 0.636995077, 0.0908877328), Vec3(-0.706678092, 0.706677675, 0.0904094502), Vec3(-0.826835155, 0.561066031, 0.0922053382), Vec3(-0.816099644, 0.5544945, 0.182947397), Vec3(-0.760417402, 0.629464149, 0.180270121), Vec3(-0.698144794, 0.698144376, 0.179295853), Vec3(-0.87669909, 0.479050964, 0.0940983221), Vec3(-0.918992579, 0.391308874, 0.0962665975), Vec3(-0.90602684, 0.38668409, 0.191126853), Vec3(-0.864822686, 0.47343722, 0.186775044), Vec3(-0.845220864, 0.464806467, 0.276593238), Vec3(-0.798436761, 0.544206679, 0.270721018), Vec3(-0.884631932, 0.379697651, 0.283191741), Vec3(-0.855216682, 0.371180207, 0.371180356), Vec3(-0.818292379, 0.454053909, 0.362190098), Vec3(-0.774297893, 0.531091988, 0.354056239), Vec3(-0.744725823, 0.617472827, 0.266581953), Vec3(-0.684359014, 0.684358597, 0.265069991), Vec3(-0.723508656, 0.601838231, 0.3482517), Vec3(-0.666017056, 0.666016579, 0.346116662), Vec3(-0.952974737, 0.298469186, 0.0984108299), Vec3(-0.977899432, 0.201462224, 0.100244276), Vec3(-0.963182211, 0.199005857, 0.199005917), Vec3(-0.939038932, 0.294890046, 0.195391238), Vec3(-0.993134081, 0.101498418, 0.101498403), Vec3(-0.977899313, 0.100244276, 0.201462194), Vec3(-0.952974737, 0.0984108597, 0.298469245), Vec3(-0.939038992, 0.195391223, 0.294890195), Vec3(-0.918992519, 0.0962666422, 0.391309142), Vec3(-0.906026781, 0.191126853, 0.386684299), Vec3(-0.916101098, 0.289564282, 0.289564341), Vec3(-0.884631872, 0.283191651, 0.379697859), Vec3(-0.845220685, 0.276593149, 0.464806825), Vec3(-0.81829226, 0.362189859, 0.454054326), Vec3(-0.864822567, 0.186775029, 0.473437518), Vec3(-0.816099346, 0.182947308, 0.554494739), Vec3(-0.798436522, 0.27072084, 0.544207096), Vec3(-0.774297714, 0.354056001, 0.531092465), Vec3(-0.876698911, 0.094098337, 0.479051322), Vec3(-0.826834977, 0.0922053531, 0.561066389), Vec3(-0.77002275, 0.090887703, 0.636995554), Vec3(-0.760417104, 0.180270001, 0.629464626), Vec3(-0.706677675, 0.0904094055, 0.706678152), Vec3(-0.698144257, 0.179295689, 0.698144853), Vec3(-0.744725525, 0.266581714, 0.617473304), Vec3(-0.723508358, 0.348251343, 0.601838708), Vec3(-0.684358597, 0.265069634, 0.684359252), Vec3(-0.666016579, 0.346116185, 0.666017234), Vec3(-0.697528541, 0.58382374, 0.423737973), Vec3(-0.644162297, 0.64416188, 0.420784503), Vec3(-0.744235635, 0.516483545, 0.431635082), Vec3(-0.708672047, 0.502360344, 0.50236088), Vec3(-0.667616308, 0.565391183, 0.491493851), Vec3(-0.620292127, 0.62029165, 0.487256825), Vec3(-0.784516335, 0.442427427, 0.442427814), Vec3(-0.744235456, 0.431634724, 0.516484022), Vec3(-0.697528243, 0.423737466, 0.583824277), Vec3(-0.667616189, 0.491493165, 0.565391958), Vec3(-0.644161999, 0.420783937, 0.644162595), Vec3(-0.620291948, 0.48725608, 0.620292485), Vec3(-0.63434422, 0.54979372, 0.549794555), Vec3(-0.596732914, 0.596732557, 0.542916119), Vec3(-0.596732914, 0.542915344, 0.596733272), Vec3(-0.579348564, 0.579348207, 0.579348922), Vec3(0.549794137, 0.634343863, 0.549794555), Vec3(0.542915463, 0.596732557, 0.596733272), Vec3(0.565391481, 0.667615891, 0.49149394), Vec3(0.502360642, 0.708671629, 0.502361059), Vec3(0.491493434, 0.667615891, 0.565392017), Vec3(0.487256318, 0.62029165, 0.620292604), Vec3(0.583824158, 0.697528124, 0.423738003), Vec3(0.601838648, 0.723508239, 0.34825179), Vec3(0.531092405, 0.774297535, 0.354056418), Vec3(0.516483903, 0.744235277, 0.43163532), Vec3(0.442427725, 0.784516096, 0.442428052), Vec3(0.431634933, 0.744235218, 0.516484261), Vec3(0.454054356, 0.818291903, 0.362190306), Vec3(0.371180445, 0.855216384, 0.371180713), Vec3(0.362190068, 0.818291903, 0.454054624), Vec3(0.35405609, 0.774297416, 0.531092823), Vec3(0.423737526, 0.697528064, 0.583824575), Vec3(0.420784086, 0.644161761, 0.644162774), Vec3(0.348251373, 0.72350812, 0.601839006), Vec3(0.346116155, 0.6660164, 0.666017413), Vec3(0.617473304, 0.744725406, 0.266582012), Vec3(0.629464626, 0.760416985, 0.180270106), Vec3(0.554494798, 0.816099405, 0.182947487), Vec3(0.544207156, 0.798436463, 0.270721167), Vec3(0.636995614, 0.77002275, 0.0908877179), Vec3(0.639565349, 0.773250401, 1.08559497e-07), Vec3(0.56333214, 0.830428064, 1.24067995e-07), Vec3(0.561066329, 0.826834917, 0.0922053978), Vec3(0.47905159, 0.876698792, 0.0940984264), Vec3(0.473437756, 0.864822447, 0.186775222), Vec3(0.4810085, 0.880668163, 1.395765e-07), Vec3(0.392938614, 0.923328698, 1.55085004e-07), Vec3(0.391309291, 0.9189924, 0.0962667614), Vec3(0.386684448, 0.906026721, 0.191127092), Vec3(0.464806885, 0.845220506, 0.276593387), Vec3(0.379697919, 0.884631693, 0.283192039), Vec3(0.28956452, 0.916100979, 0.289564759), Vec3(0.2831918, 0.884631693, 0.379698217), Vec3(0.294890314, 0.939038873, 0.195391491), Vec3(0.199006006, 0.963182092, 0.199006304), Vec3(0.195391282, 0.939038813, 0.294890642), Vec3(0.191126853, 0.906026602, 0.386684746), Vec3(0.298469424, 0.952974677, 0.0984110162), Vec3(0.299741387, 0.957644761, 1.55085004e-07), Vec3(0.202340886, 0.982842922, 1.70593495e-07), Vec3(0.201462358, 0.977899313, 0.100244492), Vec3(0.101498447, 0.993134081, 0.101498663), Vec3(0.100244276, 0.977899313, 0.201462612), Vec3(0.101948708, 0.998260498, 1.70593495e-07), Vec3(-1.55084994e-08, 1.00345218, 1.70593495e-07), Vec3(-3.10169987e-08, 0.998260677, 0.101948909), Vec3(-3.10169987e-08, 0.982842863, 0.202341184), Vec3(0.0984108001, 0.952974617, 0.298469812), Vec3(0.0962665305, 0.918992221, 0.391309649), Vec3(-3.10169987e-08, 0.957644641, 0.299741715), Vec3(-3.10169987e-08, 0.923328578, 0.392938942), Vec3(0.266581774, 0.744725287, 0.617473543), Vec3(0.265069634, 0.684358358, 0.684359431), Vec3(0.270720899, 0.798436344, 0.544207394), Vec3(0.182947263, 0.816099226, 0.554495215), Vec3(0.180269867, 0.760416925, 0.629464984), Vec3(0.17929554, 0.698143959, 0.698145211), Vec3(0.276593149, 0.845220387, 0.464807242), Vec3(0.186774969, 0.864822328, 0.473437965), Vec3(0.0940982103, 0.876698673, 0.479051888), Vec3(0.0922052264, 0.826834679, 0.561066866), Vec3(-3.10169987e-08, 0.880667984, 0.481008857), Vec3(-3.10169987e-08, 0.830427825, 0.563332498), Vec3(0.0908875465, 0.770022511, 0.636996031), Vec3(0.0904091895, 0.706677258, 0.706678569), Vec3(-3.10169987e-08, 0.773250103, 0.639565706), Vec3(-3.10169987e-08, 0.709563375, 0.709564686), Vec3(0.636995554, 0.77002275, -0.0908874869), Vec3(0.629464626, 0.760417104, -0.180269793), Vec3(0.554494917, 0.816099405, -0.182947189), Vec3(0.561066508, 0.826834917, -0.0922051072), Vec3(0.617473304, 0.744725525, -0.266581684), Vec3(0.601838648, 0.723508298, -0.348251283), Vec3(0.531092405, 0.774297714, -0.354056001), Vec3(0.544207156, 0.798436522, -0.27072072), Vec3(0.464806885, 0.845220685, -0.276593029), Vec3(0.473437697, 0.864822447, -0.18677485), Vec3(0.454054385, 0.818292201, -0.362189859), Vec3(0.371180534, 0.855216563, -0.371180326), Vec3(0.379697949, 0.884631813, -0.283191651), Vec3(0.386684448, 0.906026721, -0.191126689), Vec3(0.47905153, 0.876698792, -0.094098106), Vec3(0.391309321, 0.9189924, -0.0962664261), Vec3(0.583824277, 0.697528243, -0.423737496), Vec3(0.565391719, 0.667616129, -0.491493344), Vec3(0.502360821, 0.708671987, -0.502360463), Vec3(0.516484022, 0.744235456, -0.431634754), Vec3(0.549794316, 0.634344161, -0.549793899), Vec3(0.491493672, 0.667616248, -0.565391362), Vec3(0.423737824, 0.697528303, -0.583823979), Vec3(0.431635112, 0.744235456, -0.516483665), Vec3(0.348251551, 0.723508537, -0.60183847), Vec3(0.354056329, 0.774297655, -0.531092227), Vec3(0.442427874, 0.784516156, -0.442427576), Vec3(0.362190068, 0.818292201, -0.454054058), Vec3(0.276593238, 0.845220685, -0.464806616), Vec3(0.28319186, 0.884631872, -0.37969774), Vec3(0.270720959, 0.798436642, -0.544206917), Vec3(0.182947278, 0.816099524, -0.55449456), Vec3(0.186775029, 0.864822745, -0.473437399), Vec3(0.191126883, 0.906026781, -0.386684269), Vec3(0.266581893, 0.744725704, -0.617473006), Vec3(0.180269986, 0.760417342, -0.629464388), Vec3(0.0908876136, 0.770022929, -0.636995375), Vec3(0.0922052562, 0.826835155, -0.56106621), Vec3(-3.10169987e-08, 0.77325058, -0.639565051), Vec3(-3.10169987e-08, 0.830428302, -0.563331723), Vec3(0.094098255, 0.876698971, -0.479051292), Vec3(0.0962665454, 0.918992519, -0.391309053), Vec3(-3.10169987e-08, 0.880668342, -0.481008142), Vec3(-3.10169987e-08, 0.923328876, -0.392938346), Vec3(0.298469454, 0.952974737, -0.0984106734), Vec3(0.294890255, 0.939038873, -0.195391074), Vec3(0.199006021, 0.963182211, -0.199005842), Vec3(0.201462358, 0.977899373, -0.100244105), Vec3(0.28956458, 0.916101098, -0.289564341), Vec3(0.195391282, 0.939038992, -0.294890165), Vec3(0.0984108299, 0.952974737, -0.298469216), Vec3(0.100244246, 0.977899373, -0.201462194), Vec3(-3.10169987e-08, 0.95764488, -0.299741209), Vec3(-3.10169987e-08, 0.982842863, -0.202340782), Vec3(0.101498432, 0.993134201, -0.101498276), Vec3(-3.10169987e-08, 0.998260677, -0.101948552), Vec3(-0.101498492, 0.993134201, -0.101498291), Vec3(-0.101948783, 0.998260498, 1.70593495e-07), Vec3(-0.100244336, 0.977899373, -0.201462209), Vec3(-0.199006096, 0.963182151, -0.199005842), Vec3(-0.201462403, 0.977899373, -0.10024409), Vec3(-0.202340961, 0.982842922, 1.70593495e-07), Vec3(-0.0984108895, 0.952974737, -0.298469216), Vec3(-0.0962666273, 0.918992519, -0.391309053), Vec3(-0.191126958, 0.906026781, -0.386684239), Vec3(-0.195391357, 0.939038873, -0.294890136), Vec3(-0.28956461, 0.916101098, -0.289564341), Vec3(-0.294890463, 0.939038873, -0.195391133), Vec3(-0.283191919, 0.884631872, -0.37969777), Vec3(-0.371180505, 0.855216622, -0.371180207), Vec3(-0.379698038, 0.884631813, -0.283191681), Vec3(-0.386684537, 0.906026721, -0.191126704), Vec3(-0.298469603, 0.952974677, -0.0984106734), Vec3(-0.299741536, 0.957644761, 1.70593495e-07), Vec3(-0.39130941, 0.918992341, -0.0962664112), Vec3(-0.392938703, 0.923328698, 1.70593495e-07), Vec3(-0.0940983221, 0.876698971, -0.479051322), Vec3(-0.0922053382, 0.826835155, -0.561066091), Vec3(-0.182947397, 0.816099524, -0.554494679), Vec3(-0.186775133, 0.864822626, -0.473437369), Vec3(-0.0908876732, 0.770022929, -0.636995375), Vec3(-0.180270076, 0.760417342, -0.629464328), Vec3(-0.266581953, 0.744725764, -0.617472947), Vec3(-0.270721048, 0.798436582, -0.544206858), Vec3(-0.348251611, 0.723508596, -0.601838291), Vec3(-0.354056358, 0.774297714, -0.531092167), Vec3(-0.276593298, 0.845220685, -0.464806646), Vec3(-0.362190217, 0.818292081, -0.454054058), Vec3(-0.442427903, 0.784516156, -0.442427546), Vec3(-0.454054505, 0.818292141, -0.362189889), Vec3(-0.431635141, 0.744235456, -0.516483724), Vec3(-0.50236088, 0.708671808, -0.502360463), Vec3(-0.516484141, 0.744235337, -0.431634814), Vec3(-0.531092525, 0.774297595, -0.35405609), Vec3(-0.423737943, 0.697528303, -0.58382386), Vec3(-0.491493732, 0.667616189, -0.565391302), Vec3(-0.549794495, 0.634344101, -0.549793899), Vec3(-0.565391839, 0.667616189, -0.491493315), Vec3(-0.583824337, 0.697528243, -0.423737556), Vec3(-0.601838708, 0.723508358, -0.348251373), Vec3(-0.47905159, 0.876698792, -0.094098106), Vec3(-0.481008559, 0.880668104, 1.70593495e-07), Vec3(-0.473437697, 0.864822447, -0.186774865), Vec3(-0.554494977, 0.816099286, -0.182947159), Vec3(-0.561066449, 0.826834917, -0.09220507), Vec3(-0.5633322, 0.830428064, 1.55085004e-07), Vec3(-0.464806914, 0.845220625, -0.276593029), Vec3(-0.544207156, 0.798436522, -0.27072078), Vec3(-0.617473423, 0.744725466, -0.266581714), Vec3(-0.629464805, 0.760416925, -0.180269793), Vec3(-0.636995614, 0.77002275, -0.0908874571), Vec3(-0.639565408, 0.773250341, 1.55085004e-07), Vec3(-0.0908876136, 0.770022452, 0.636996031), Vec3(-0.090409264, 0.706677258, 0.706678569), Vec3(-0.0922052562, 0.826834619, 0.561066926), Vec3(-0.182947308, 0.816099048, 0.554495335), Vec3(-0.180269942, 0.760416746, 0.629465044), Vec3(-0.179295629, 0.698143959, 0.698145151), Vec3(-0.0940982699, 0.876698613, 0.479051888), Vec3(-0.0962666124, 0.918992281, 0.391309649), Vec3(-0.191126883, 0.906026542, 0.386684775), Vec3(-0.186775059, 0.864822268, 0.473438054), Vec3(-0.276593179, 0.845220327, 0.464807272), Vec3(-0.270720959, 0.798436284, 0.544207513), Vec3(-0.28319186, 0.884631753, 0.379698277), Vec3(-0.371180475, 0.855216384, 0.371180713), Vec3(-0.362190008, 0.818291903, 0.454054713), Vec3(-0.35405615, 0.774297357, 0.531092942), Vec3(-0.266581804, 0.744725168, 0.617473722), Vec3(-0.265069723, 0.684358299, 0.684359431), Vec3(-0.348251402, 0.72350812, 0.601839006), Vec3(-0.346116304, 0.666016281, 0.666017473), Vec3(-0.0984108895, 0.952974558, 0.298469722), Vec3(-0.100244306, 0.977899313, 0.201462612), Vec3(-0.199006096, 0.963182092, 0.199006259), Vec3(-0.195391372, 0.939038754, 0.294890672), Vec3(-0.101498477, 0.993134081, 0.101498663), Vec3(-0.201462388, 0.977899313, 0.100244492), Vec3(-0.298469514, 0.952974617, 0.0984110162), Vec3(-0.294890463, 0.939038813, 0.195391536), Vec3(-0.391309351, 0.918992341, 0.0962667614), Vec3(-0.386684507, 0.906026661, 0.191127077), Vec3(-0.28956455, 0.916100979, 0.289564729), Vec3(-0.379697949, 0.884631693, 0.283192039), Vec3(-0.464806855, 0.845220506, 0.276593417), Vec3(-0.454054326, 0.818291903, 0.362190306), Vec3(-0.473437756, 0.864822447, 0.186775237), Vec3(-0.554494917, 0.816099226, 0.182947487), Vec3(-0.544207096, 0.798436463, 0.270721197), Vec3(-0.531092405, 0.774297476, 0.354056507), Vec3(-0.47905156, 0.876698792, 0.0940984413), Vec3(-0.561066449, 0.826834917, 0.0922054276), Vec3(-0.636995614, 0.77002269, 0.090887785), Vec3(-0.629464686, 0.760416925, 0.18027015), Vec3(-0.617473245, 0.744725406, 0.266581982), Vec3(-0.601838589, 0.723508239, 0.348251849), Vec3(-0.423737615, 0.697528005, 0.583824575), Vec3(-0.420784116, 0.644161701, 0.644162774), Vec3(-0.431634933, 0.744235218, 0.51648432), Vec3(-0.502360642, 0.708671629, 0.502361119), Vec3(-0.491493464, 0.667615891, 0.565391958), Vec3(-0.487256259, 0.62029165, 0.620292664), Vec3(-0.442427725, 0.784515977, 0.442428142), Vec3(-0.516483903, 0.744235277, 0.43163532), Vec3(-0.583824158, 0.697528124, 0.423737973), Vec3(-0.56539166, 0.667615891, 0.491493911), Vec3(-0.549794197, 0.634343743, 0.549794614), Vec3(-0.542915702, 0.596732557, 0.596733272), Vec3(0.549794018, -0.549794137, 0.634344399), Vec3(0.542915404, -0.596732914, 0.596733034), Vec3(0.565391362, -0.491493374, 0.667616487), Vec3(0.502360463, -0.502360523, 0.708672106), Vec3(0.491493315, -0.565391421, 0.667616487), Vec3(0.487256259, -0.620292127, 0.620292127), Vec3(0.583823919, -0.423737466, 0.69752866), Vec3(0.601838231, -0.348251224, 0.723508775), Vec3(0.531092048, -0.354055941, 0.774298072), Vec3(0.516483545, -0.431634665, 0.744235814), Vec3(0.442427367, -0.442427367, 0.784516573), Vec3(0.431634724, -0.516483545, 0.744235754), Vec3(0.454053938, -0.362189651, 0.818292499), Vec3(0.371180117, -0.371180058, 0.85521692), Vec3(0.36218977, -0.454053819, 0.818292439), Vec3(0.354055941, -0.531091988, 0.774298072), Vec3(0.423737526, -0.583823919, 0.69752866), Vec3(0.420784026, -0.644162297, 0.644162297), Vec3(0.348251343, -0.601838291, 0.723508775), Vec3(0.346116185, -0.666016817, 0.666017115), Vec3(0.617472887, -0.266581506, 0.744726002), Vec3(0.62946409, -0.180269659, 0.76041764), Vec3(0.554494262, -0.18294695, 0.816099882), Vec3(0.544206619, -0.270720541, 0.79843694), Vec3(0.636995018, -0.0908873007, 0.770023227), Vec3(0.639564574, 2.32627499e-07, 0.773250937), Vec3(0.563331485, 2.4813599e-07, 0.830428481), Vec3(0.561065793, -0.092204906, 0.826835394), Vec3(0.479050845, -0.0940978825, 0.876699269), Vec3(0.47343713, -0.186774597, 0.864822865), Vec3(0.481007755, 2.4813599e-07, 0.880668581), Vec3(0.392937869, 2.4813599e-07, 0.923329055), Vec3(0.391308635, -0.0962661728, 0.918992758), Vec3(0.386683911, -0.191126406, 0.906027079), Vec3(0.464806408, -0.276592761, 0.845221043), Vec3(0.379697472, -0.283191293, 0.88463223), Vec3(0.289564103, -0.289563954, 0.916101336), Vec3(0.283191383, -0.379697323, 0.88463223), Vec3(0.294889867, -0.195390731, 0.939039171), Vec3(0.199005693, -0.199005499, 0.96318233), Vec3(0.195390999, -0.294889718, 0.939039111), Vec3(0.1911266, -0.386683851, 0.906027079), Vec3(0.298468858, -0.0984104276, 0.952974916), Vec3(0.299740821, 2.4813599e-07, 0.957644999), Vec3(0.202340484, 2.4813599e-07, 0.982842982), Vec3(0.201461986, -0.100243859, 0.977899432), Vec3(0.101498231, -0.101498, 0.993134201), Vec3(0.10024406, -0.201461762, 0.977899492), Vec3(0.101948492, 2.4813599e-07, 0.998260677), Vec3(-3.10169987e-08, 2.4813599e-07, 1.00345218), Vec3(-3.10169987e-08, -0.101948276, 0.998260677), Vec3(-1.55084994e-08, -0.202340335, 0.982843041), Vec3(0.0984106436, -0.298468739, 0.952974975), Vec3(0.0962664112, -0.391308665, 0.918992698), Vec3(-1.55084994e-08, -0.299740791, 0.957645059), Vec3(-3.10169987e-08, -0.392937809, 0.923329055), Vec3(0.266581625, -0.617472827, 0.744725943), Vec3(0.265069664, -0.684358835, 0.684358895), Vec3(0.27072069, -0.544206619, 0.79843694), Vec3(0.182947144, -0.5544945, 0.816099703), Vec3(0.180269808, -0.629464149, 0.760417521), Vec3(0.179295525, -0.698144555, 0.698144555), Vec3(0.27659288, -0.464806318, 0.845221102), Vec3(0.186774775, -0.473437071, 0.864822865), Vec3(0.094098106, -0.479050905, 0.876699209), Vec3(0.092205137, -0.561066091, 0.826835155), Vec3(-3.10169987e-08, -0.481007785, 0.880668521), Vec3(-3.10169987e-08, -0.563331604, 0.830428481), Vec3(0.0908875018, -0.636995137, 0.770023108), Vec3(0.0904091746, -0.706677854, 0.706677973), Vec3(-1.55084994e-08, -0.639564872, 0.773250699), Vec3(-3.10169987e-08, -0.70956403, 0.70956403), Vec3(0.636994958, 0.0908877626, 0.770023286), Vec3(0.62946403, 0.180269986, 0.76041764), Vec3(0.554494143, 0.182947278, 0.816099823), Vec3(0.561065674, 0.0922053829, 0.826835394), Vec3(0.617472649, 0.266581774, 0.744726002), Vec3(0.601838052, 0.348251313, 0.723508894), Vec3(0.531091869, 0.354055971, 0.774298191), Vec3(0.54420644, 0.27072084, 0.798436999), Vec3(0.464806139, 0.276593, 0.845221102), Vec3(0.473436922, 0.186774969, 0.864822924), Vec3(0.45405373, 0.36218971, 0.818292618), Vec3(0.371179938, 0.371180087, 0.85521698), Vec3(0.379697233, 0.283191502, 0.88463217), Vec3(0.386683762, 0.191126779, 0.906027019), Vec3(0.479050756, 0.0940983668, 0.876699209), Vec3(0.391308576, 0.0962666422, 0.918992698), Vec3(0.583823681, 0.423737437, 0.697528899), Vec3(0.565391183, 0.491493225, 0.667616725), Vec3(0.502360225, 0.502360284, 0.708672464), Vec3(0.516483307, 0.431634635, 0.744236052), Vec3(0.549793839, 0.549793899, 0.634344637), Vec3(0.491493225, 0.565391064, 0.667616785), Vec3(0.423737466, 0.583823562, 0.697529018), Vec3(0.431634605, 0.516483307, 0.744236052), Vec3(0.348251224, 0.601837933, 0.723509133), Vec3(0.354055882, 0.531091809, 0.774298251), Vec3(0.442427337, 0.442427367, 0.784516633), Vec3(0.362189621, 0.45405376, 0.818292677), Vec3(0.276592851, 0.464806199, 0.845221162), Vec3(0.283191323, 0.379697382, 0.88463217), Vec3(0.270720661, 0.544206321, 0.798437119), Vec3(0.18294704, 0.554494083, 0.816100061), Vec3(0.186774716, 0.473436892, 0.864822984), Vec3(0.191126511, 0.386683851, 0.906027079), Vec3(0.266581565, 0.617472529, 0.744726241), Vec3(0.180269763, 0.629463851, 0.760417819), Vec3(0.0908875018, 0.63699466, 0.770023525), Vec3(0.0922051221, 0.561065555, 0.826835513), Vec3(-3.10169987e-08, 0.639564395, 0.773251176), Vec3(-3.10169987e-08, 0.563331187, 0.83042872), Vec3(0.0940980688, 0.479050845, 0.876699269), Vec3(0.0962663442, 0.391308635, 0.918992698), Vec3(-3.10169987e-08, 0.481007755, 0.880668581), Vec3(-3.10169987e-08, 0.392937899, 0.923328996), Vec3(0.298468769, 0.0984108895, 0.952974856), Vec3(0.294889838, 0.195391133, 0.939039111), Vec3(0.199005604, 0.199005857, 0.963182271), Vec3(0.201461926, 0.100244306, 0.977899432), Vec3(0.289563894, 0.289564192, 0.916101277), Vec3(0.195390895, 0.294890016, 0.939039111), Vec3(0.0984105989, 0.298468977, 0.952974856), Vec3(0.100244015, 0.20146215, 0.977899432), Vec3(-3.10169987e-08, 0.29974097, 0.95764488), Vec3(-3.10169987e-08, 0.202340722, 0.982842922), Vec3(0.101498187, 0.101498462, 0.993134081), Vec3(-3.10169987e-08, 0.101948753, 0.998260498), Vec3(-0.101498291, 0.101498462, 0.993134201), Vec3(-0.101948567, 2.4813599e-07, 0.998260677), Vec3(-0.100244105, 0.201462179, 0.977899373), Vec3(-0.199005693, 0.199005842, 0.963182271), Vec3(-0.201461971, 0.100244291, 0.977899373), Vec3(-0.202340558, 2.4813599e-07, 0.982842982), Vec3(-0.0984106734, 0.298469037, 0.952974796), Vec3(-0.096266441, 0.391308725, 0.918992698), Vec3(-0.1911266, 0.386683881, 0.906027019), Vec3(-0.195390984, 0.294890016, 0.939038992), Vec3(-0.289564043, 0.289564103, 0.916101217), Vec3(-0.294889867, 0.195391104, 0.939039111), Vec3(-0.283191413, 0.379697472, 0.884632111), Vec3(-0.371180028, 0.371180028, 0.85521692), Vec3(-0.379697472, 0.283191502, 0.88463217), Vec3(-0.386683881, 0.191126764, 0.906027019), Vec3(-0.298468888, 0.0984108895, 0.952974856), Vec3(-0.29974094, 2.32627499e-07, 0.95764488), Vec3(-0.391308665, 0.0962666571, 0.918992698), Vec3(-0.392937928, 2.32627499e-07, 0.923328996), Vec3(-0.0940981358, 0.479050696, 0.876699269), Vec3(-0.0922051817, 0.561065555, 0.826835513), Vec3(-0.182947114, 0.554494083, 0.816099942), Vec3(-0.18677476, 0.473436892, 0.864822984), Vec3(-0.0908875763, 0.63699466, 0.770023525), Vec3(-0.180269867, 0.629463792, 0.760417819), Vec3(-0.266581625, 0.61747241, 0.744726241), Vec3(-0.270720661, 0.544206321, 0.798437119), Vec3(-0.348251343, 0.601837814, 0.723509133), Vec3(-0.354055971, 0.53109169, 0.774298251), Vec3(-0.27659288, 0.464806199, 0.845221162), Vec3(-0.36218971, 0.45405376, 0.818292499), Vec3(-0.442427367, 0.442427367, 0.784516633), Vec3(-0.454053819, 0.36218971, 0.818292499), Vec3(-0.431634635, 0.516483366, 0.744235992), Vec3(-0.502360404, 0.502360225, 0.708672285), Vec3(-0.516483486, 0.431634665, 0.744235873), Vec3(-0.531091928, 0.354055911, 0.774298131), Vec3(-0.423737496, 0.583823442, 0.697529018), Vec3(-0.491493374, 0.565391123, 0.667616665), Vec3(-0.549794078, 0.54979372, 0.634344637), Vec3(-0.565391421, 0.491493136, 0.667616665), Vec3(-0.58382374, 0.423737377, 0.697528839), Vec3(-0.601838171, 0.348251283, 0.723508835), Vec3(-0.479050815, 0.0940983519, 0.876699269), Vec3(-0.481007755, 2.17118995e-07, 0.880668581), Vec3(-0.473437011, 0.186774969, 0.864822865), Vec3(-0.554494262, 0.182947293, 0.816099882), Vec3(-0.561065674, 0.092205368, 0.826835394), Vec3(-0.563331485, 2.01610504e-07, 0.830428481), Vec3(-0.464806318, 0.276593, 0.845221043), Vec3(-0.54420656, 0.27072075, 0.79843688), Vec3(-0.617472708, 0.266581595, 0.744726002), Vec3(-0.62946403, 0.180269971, 0.76041764), Vec3(-0.636994958, 0.090887703, 0.770023227), Vec3(-0.639564753, 2.01610504e-07, 0.773250937), Vec3(-0.0908875465, -0.636995137, 0.770023167), Vec3(-0.0904092193, -0.706677854, 0.706677914), Vec3(-0.0922052115, -0.561065853, 0.826835275), Vec3(-0.182947204, -0.554494381, 0.816099763), Vec3(-0.180269867, -0.629464209, 0.760417461), Vec3(-0.179295614, -0.698144555, 0.698144615), Vec3(-0.0940981656, -0.479050905, 0.876699209), Vec3(-0.0962664858, -0.391308635, 0.918992698), Vec3(-0.19112663, -0.386683881, 0.906027019), Vec3(-0.186774835, -0.473437041, 0.864822865), Vec3(-0.27659288, -0.464806288, 0.845221043), Vec3(-0.27072072, -0.544206679, 0.79843688), Vec3(-0.283191532, -0.379697353, 0.88463223), Vec3(-0.371180117, -0.371179938, 0.85521692), Vec3(-0.36218977, -0.454053789, 0.818292439), Vec3(-0.354055941, -0.531091988, 0.774298072), Vec3(-0.266581714, -0.617472947, 0.744725883), Vec3(-0.265069664, -0.684358895, 0.684358835), Vec3(-0.348251343, -0.601838231, 0.723508775), Vec3(-0.346116126, -0.666016817, 0.666016996), Vec3(-0.0984107032, -0.298468769, 0.952974916), Vec3(-0.100244135, -0.201461777, 0.977899432), Vec3(-0.199005708, -0.199005425, 0.96318233), Vec3(-0.195390999, -0.294889748, 0.939039171), Vec3(-0.101498291, -0.101498, 0.993134201), Vec3(-0.201461986, -0.100243844, 0.977899432), Vec3(-0.298468888, -0.0984104276, 0.952974856), Vec3(-0.294889897, -0.195390776, 0.939039171), Vec3(-0.391308755, -0.0962661728, 0.918992698), Vec3(-0.386683851, -0.191126391, 0.906027079), Vec3(-0.289564043, -0.289563864, 0.916101336), Vec3(-0.379697382, -0.283191234, 0.88463223), Vec3(-0.464806348, -0.276592731, 0.845221102), Vec3(-0.454053909, -0.362189621, 0.818292558), Vec3(-0.473437041, -0.186774552, 0.864823043), Vec3(-0.554494262, -0.18294692, 0.816099882), Vec3(-0.54420656, -0.270720541, 0.798437059), Vec3(-0.531091988, -0.354055822, 0.774298131), Vec3(-0.479050845, -0.0940979198, 0.876699209), Vec3(-0.561065853, -0.0922049507, 0.826835334), Vec3(-0.636994958, -0.0908873305, 0.770023286), Vec3(-0.62946403, -0.180269644, 0.760417759), Vec3(-0.617472768, -0.266581416, 0.744726062), Vec3(-0.601838231, -0.348251253, 0.723508835), Vec3(-0.423737496, -0.583823979, 0.697528601), Vec3(-0.420784026, -0.644162238, 0.644162357), Vec3(-0.431634754, -0.516483605, 0.744235754), Vec3(-0.502360404, -0.502360463, 0.708672225), Vec3(-0.491493255, -0.565391421, 0.667616487), Vec3(-0.487256259, -0.620292068, 0.620292246), Vec3(-0.442427456, -0.442427367, 0.784516513), Vec3(-0.516483486, -0.431634694, 0.744235814), Vec3(-0.583823919, -0.423737496, 0.69752866), Vec3(-0.565391362, -0.491493344, 0.667616546), Vec3(-0.549794018, -0.549794137, 0.634344339), Vec3(-0.542915404, -0.596732974, 0.596733093), Vec3(0.549793899, -0.634344399, 0.549794137), Vec3(0.491493315, -0.667616367, 0.565391481), Vec3(0.502360404, -0.708672225, 0.502360523), Vec3(0.565391362, -0.667616427, 0.491493434), Vec3(0.423737496, -0.697528601, 0.583824039), Vec3(0.348251343, -0.723508596, 0.60183841), Vec3(0.354056001, -0.774298012, 0.531092048), Vec3(0.431634724, -0.744235694, 0.516483605), Vec3(0.442427367, -0.784516573, 0.442427427), Vec3(0.516483545, -0.744235754, 0.431634724), Vec3(0.3621898, -0.818292499, 0.454053938), Vec3(0.371180087, -0.855216861, 0.371180058), Vec3(0.454053879, -0.818292439, 0.36218977), Vec3(0.531091988, -0.774298072, 0.354055911), Vec3(0.58382386, -0.69752866, 0.423737526), Vec3(0.601838291, -0.723508775, 0.348251313), Vec3(0.266581625, -0.744725823, 0.617472947), Vec3(0.180269808, -0.760417402, 0.629464328), Vec3(0.182947159, -0.816099703, 0.554494441), Vec3(0.27072072, -0.798436821, 0.544206679), Vec3(0.0908875018, -0.770023048, 0.636995256), Vec3(-3.10169987e-08, -0.773250759, 0.639564931), Vec3(-3.10169987e-08, -0.830428481, 0.563331664), Vec3(0.092205137, -0.826835215, 0.561066031), Vec3(0.0940980837, -0.876699209, 0.479050905), Vec3(0.18677479, -0.864822805, 0.47343719), Vec3(-3.10169987e-08, -0.880668461, 0.481007904), Vec3(-3.10169987e-08, -0.923328996, 0.392937899), Vec3(0.0962664112, -0.918992698, 0.391308665), Vec3(0.1911266, -0.906026959, 0.386683911), Vec3(0.276592851, -0.845220923, 0.464806437), Vec3(0.283191442, -0.88463217, 0.379697472), Vec3(0.289564043, -0.916101336, 0.289564013), Vec3(0.379697472, -0.88463217, 0.283191383), Vec3(0.19539094, -0.939039111, 0.294889778), Vec3(0.199005663, -0.96318233, 0.199005574), Vec3(0.294889897, -0.939039111, 0.19539085), Vec3(0.386683941, -0.906027019, 0.191126525), Vec3(0.0984106287, -0.952974856, 0.298468828), Vec3(-3.10169987e-08, -0.957644999, 0.299740911), Vec3(-3.10169987e-08, -0.982842982, 0.202340469), Vec3(0.10024406, -0.977899432, 0.201461852), Vec3(0.101498216, -0.993134201, 0.10149809), Vec3(0.201462016, -0.977899432, 0.100243933), Vec3(-3.10169987e-08, -0.998260677, 0.101948351), Vec3(-3.10169987e-08, -1.00345218, -1.70593495e-07), Vec3(0.101948477, -0.998260677, -1.70593495e-07), Vec3(0.202340543, -0.982842922, -1.55085004e-07), Vec3(0.298468888, -0.952974856, 0.098410517), Vec3(0.391308665, -0.918992698, 0.0962662846), Vec3(0.299740881, -0.957644939, -1.55085004e-07), Vec3(0.392937899, -0.923329055, -1.55085004e-07), Vec3(0.617472827, -0.744725943, 0.266581565), Vec3(0.544206619, -0.79843688, 0.270720661), Vec3(0.554494262, -0.816099882, 0.18294704), Vec3(0.62946403, -0.76041764, 0.180269703), Vec3(0.464806318, -0.845221102, 0.276592851), Vec3(0.47343713, -0.864822805, 0.186774716), Vec3(0.479050905, -0.876699209, 0.0940979943), Vec3(0.561065793, -0.826835334, 0.0922050104), Vec3(0.481007755, -0.880668581, -1.55085004e-07), Vec3(0.563331485, -0.830428481, -1.55085004e-07), Vec3(0.636995018, -0.770023227, 0.0908873901), Vec3(0.639564753, -0.773250937, -1.55085004e-07), Vec3(-0.0908875614, -0.770023048, 0.636995256), Vec3(-0.180269912, -0.760417342, 0.629464328), Vec3(-0.182947204, -0.816099644, 0.55449456), Vec3(-0.0922052115, -0.826835215, 0.561066031), Vec3(-0.266581744, -0.744725883, 0.617472947), Vec3(-0.348251343, -0.723508656, 0.60183847), Vec3(-0.354055941, -0.774297953, 0.531092167), Vec3(-0.27072072, -0.798436761, 0.544206738), Vec3(-0.276592851, -0.845220923, 0.464806378), Vec3(-0.18677485, -0.864822865, 0.47343722), Vec3(-0.3621898, -0.818292499, 0.454053938), Vec3(-0.371180028, -0.85521692, 0.371180028), Vec3(-0.283191472, -0.884632111, 0.379697442), Vec3(-0.19112663, -0.906027019, 0.386683881), Vec3(-0.0940981805, -0.87669915, 0.479050905), Vec3(-0.0962664708, -0.918992698, 0.391308635), Vec3(-0.423737466, -0.697528541, 0.583824039), Vec3(-0.491493255, -0.667616367, 0.565391541), Vec3(-0.502360344, -0.708672225, 0.502360582), Vec3(-0.431634635, -0.744235694, 0.516483665), Vec3(-0.549793899, -0.634344339, 0.549794137), Vec3(-0.565391302, -0.667616546, 0.491493434), Vec3(-0.583823919, -0.69752866, 0.423737526), Vec3(-0.516483605, -0.744235694, 0.431634754), Vec3(-0.601838231, -0.723508835, 0.348251343), Vec3(-0.531091988, -0.774298072, 0.354055941), Vec3(-0.442427367, -0.784516513, 0.442427486), Vec3(-0.454053909, -0.818292499, 0.36218974), Vec3(-0.464806318, -0.845221102, 0.276592821), Vec3(-0.379697472, -0.88463217, 0.283191353), Vec3(-0.54420656, -0.79843694, 0.270720631), Vec3(-0.554494321, -0.816099823, 0.18294704), Vec3(-0.473437101, -0.864822984, 0.186774671), Vec3(-0.386683881, -0.906027079, 0.191126481), Vec3(-0.617472827, -0.744726002, 0.266581595), Vec3(-0.62946409, -0.760417521, 0.180269763), Vec3(-0.636995077, -0.770023167, 0.0908874273), Vec3(-0.561065972, -0.826835215, 0.0922050104), Vec3(-0.639564753, -0.773250937, -1.24067995e-07), Vec3(-0.563331485, -0.830428481, -1.24067995e-07), Vec3(-0.479050905, -0.87669915, 0.0940979943), Vec3(-0.391308725, -0.918992698, 0.0962662548), Vec3(-0.481007844, -0.880668521, -1.395765e-07), Vec3(-0.392937988, -0.923328996, -1.55085004e-07), Vec3(-0.0984107032, -0.952974856, 0.298468858), Vec3(-0.195390984, -0.939039111, 0.294889748), Vec3(-0.199005768, -0.96318233, 0.199005574), Vec3(-0.100244105, -0.977899432, 0.201461866), Vec3(-0.289564013, -0.916101277, 0.289564013), Vec3(-0.294889957, -0.939039111, 0.195390835), Vec3(-0.298468947, -0.952974856, 0.0984105021), Vec3(-0.20146203, -0.977899432, 0.100243933), Vec3(-0.29974094, -0.957644939, -1.55085004e-07), Vec3(-0.202340558, -0.982842982, -1.70593495e-07), Vec3(-0.101498291, -0.993134201, 0.10149809), Vec3(-0.101948567, -0.998260677, -1.70593495e-07), Vec3(-0.101498291, -0.993134201, -0.101498388), Vec3(-3.10169987e-08, -0.998260498, -0.101948693), Vec3(-0.201461956, -0.977899432, -0.100244217), Vec3(-0.199005648, -0.963182271, -0.199005738), Vec3(-0.100244075, -0.977899373, -0.201462045), Vec3(-3.10169987e-08, -0.982842982, -0.202340662), Vec3(-0.298468828, -0.952974916, -0.0984107703), Vec3(-0.391308695, -0.918992698, -0.0962665603), Vec3(-0.386683851, -0.906027019, -0.19112666), Vec3(-0.294889838, -0.939039111, -0.195391014), Vec3(-0.289564103, -0.916101336, -0.289564103), Vec3(-0.195390955, -0.939039111, -0.294889867), Vec3(-0.379697442, -0.884632111, -0.283191472), Vec3(-0.371180028, -0.85521692, -0.371180028), Vec3(-0.283191413, -0.88463217, -0.379697323), Vec3(-0.19112657, -0.906027079, -0.386683792), Vec3(-0.0984106734, -0.952974856, -0.298468918), Vec3(-3.10169987e-08, -0.957644999, -0.29974094), Vec3(-0.096266441, -0.918992758, -0.391308576), Vec3(-3.10169987e-08, -0.923329055, -0.392937839), Vec3(-0.479050845, -0.876699209, -0.0940982699), Vec3(-0.561065793, -0.826835334, -0.0922052786), Vec3(-0.554494262, -0.816099823, -0.182947204), Vec3(-0.473437011, -0.864822924, -0.186774909), Vec3(-0.636995018, -0.770023227, -0.0908876434), Vec3(-0.62946403, -0.76041764, -0.180269882), Vec3(-0.617472768, -0.744726002, -0.266581684), Vec3(-0.5442065, -0.798436999, -0.27072072), Vec3(-0.601838231, -0.723508835, -0.348251313), Vec3(-0.531091928, -0.774298072, -0.354055882), Vec3(-0.464806318, -0.845221043, -0.27659294), Vec3(-0.454053849, -0.818292558, -0.36218971), Vec3(-0.442427367, -0.784516633, -0.442427307), Vec3(-0.36218971, -0.818292618, -0.454053819), Vec3(-0.516483486, -0.744235873, -0.431634605), Vec3(-0.502360404, -0.708672285, -0.502360284), Vec3(-0.431634754, -0.744235873, -0.516483366), Vec3(-0.354055941, -0.774298251, -0.53109175), Vec3(-0.58382386, -0.69752866, -0.423737407), Vec3(-0.565391362, -0.667616606, -0.491493165), Vec3(-0.549794137, -0.634344578, -0.54979378), Vec3(-0.491493464, -0.667616665, -0.565391064), Vec3(-0.423737496, -0.697528958, -0.583823621), Vec3(-0.348251373, -0.723509073, -0.601837933), Vec3(-0.0940981507, -0.876699269, -0.479050696), Vec3(-3.10169987e-08, -0.88066864, -0.481007576), Vec3(-0.18677482, -0.864822924, -0.473436952), Vec3(-0.182947159, -0.816099942, -0.554494083), Vec3(-0.0922051966, -0.826835513, -0.561065555), Vec3(-3.10169987e-08, -0.83042872, -0.563331246), Vec3(-0.27659288, -0.845221043, -0.464806169), Vec3(-0.27072072, -0.798437119, -0.544206262), Vec3(-0.266581744, -0.744726181, -0.61747247), Vec3(-0.180269912, -0.760417759, -0.629463851), Vec3(-0.0908875614, -0.770023465, -0.63699472), Vec3(-3.10169987e-08, -0.773251176, -0.639564395), Vec3(0.636994958, -0.770023286, -0.0908876583), Vec3(0.561065793, -0.826835334, -0.0922053084), Vec3(0.554494262, -0.816099882, -0.182947204), Vec3(0.62946403, -0.76041764, -0.180269912), Vec3(0.479050815, -0.876699209, -0.094098255), Vec3(0.391308635, -0.918992698, -0.0962665454), Vec3(0.386683822, -0.906027019, -0.19112666), Vec3(0.473436981, -0.864822924, -0.18677488), Vec3(0.464806199, -0.845221102, -0.27659291), Vec3(0.5442065, -0.79843694, -0.27072072), Vec3(0.379697382, -0.88463223, -0.283191532), Vec3(0.371179968, -0.85521698, -0.371180058), Vec3(0.454053849, -0.818292618, -0.362189621), Vec3(0.531091928, -0.774298072, -0.354055911), Vec3(0.617472768, -0.744726002, -0.266581744), Vec3(0.601838171, -0.723508954, -0.348251313), Vec3(0.298468769, -0.952974856, -0.0984108001), Vec3(0.201461941, -0.977899432, -0.100244246), Vec3(0.199005619, -0.96318233, -0.199005738), Vec3(0.294889808, -0.939039111, -0.195391014), Vec3(0.101498187, -0.993134201, -0.101498403), Vec3(0.100244015, -0.977899373, -0.201462075), Vec3(0.0984106138, -0.952974856, -0.298468888), Vec3(0.19539091, -0.939039052, -0.294889838), Vec3(0.0962663591, -0.918992758, -0.391308576), Vec3(0.19112654, -0.906027079, -0.386683851), Vec3(0.289563954, -0.916101277, -0.289564013), Vec3(0.283191353, -0.88463217, -0.379697323), Vec3(0.27659288, -0.845221102, -0.464806199), Vec3(0.362189621, -0.818292618, -0.454053819), Vec3(0.18677476, -0.864822984, -0.473436892), Vec3(0.182947084, -0.816099942, -0.554494083), Vec3(0.270720631, -0.798437119, -0.544206381), Vec3(0.354055911, -0.774298251, -0.531091809), Vec3(0.0940980837, -0.876699328, -0.479050636), Vec3(0.092205137, -0.826835573, -0.561065495), Vec3(0.0908875167, -0.770023525, -0.63699466), Vec3(0.180269793, -0.760417819, -0.629463851), Vec3(0.266581625, -0.744726241, -0.617472529), Vec3(0.348251313, -0.723509073, -0.601837933), Vec3(0.5838238, -0.697528839, -0.423737377), Vec3(0.516483426, -0.744236052, -0.431634575), Vec3(0.502360344, -0.708672345, -0.502360284), Vec3(0.565391302, -0.667616665, -0.491493255), Vec3(0.442427307, -0.784516633, -0.442427307), Vec3(0.431634635, -0.744235992, -0.516483366), Vec3(0.423737496, -0.697528958, -0.583823562), Vec3(0.491493404, -0.667616665, -0.565391123), Vec3(0.549794078, -0.634344697, -0.54979378)}, + ["orientation"] = "left-handed", + ["part_list"] = { "sphere"}, + ["part_face_count_list"] = { 1536}, + ["part_face_indices"] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535}, + ["uv_list"] = { Vec2(0.39546001, 0.467680007), Vec2(0.390460014, 0.456429988), Vec2(0.399419993, 0.454439998), Vec2(0.400750011, 0.463099986), Vec2(0.390460014, 0.456429988), Vec2(0.386909992, 0.442909986), Vec2(0.397700012, 0.441610008), Vec2(0.399419993, 0.454439998), Vec2(0.380849987, 0.460709989), Vec2(0.375930011, 0.445899993), Vec2(0.386909992, 0.442909986), Vec2(0.390460014, 0.456429988), Vec2(0.38745001, 0.474099994), Vec2(0.380849987, 0.460709989), Vec2(0.390460014, 0.456429988), Vec2(0.39546001, 0.467680007), Vec2(0.386909992, 0.442909986), Vec2(0.384169996, 0.427769989), Vec2(0.395999998, 0.426840007), Vec2(0.397700012, 0.441610008), Vec2(0.384169996, 0.427769989), Vec2(0.382019997, 0.411460012), Vec2(0.394499987, 0.410809994), Vec2(0.395999998, 0.426840007), Vec2(0.372229993, 0.429919988), Vec2(0.369439989, 0.412990004), Vec2(0.382019997, 0.411460012), Vec2(0.384169996, 0.427769989), Vec2(0.375930011, 0.445899993), Vec2(0.372229993, 0.429919988), Vec2(0.384169996, 0.427769989), Vec2(0.386909992, 0.442909986), Vec2(0.364499986, 0.44986999), Vec2(0.360020012, 0.432889998), Vec2(0.372229993, 0.429919988), Vec2(0.375930011, 0.445899993), Vec2(0.360020012, 0.432889998), Vec2(0.356640011, 0.415170014), Vec2(0.369439989, 0.412990004), Vec2(0.372229993, 0.429919988), Vec2(0.347409993, 0.436250001), Vec2(0.343519986, 0.417690009), Vec2(0.356640011, 0.415170014), Vec2(0.360020012, 0.432889998), Vec2(0.352490008, 0.4542), Vec2(0.347409993, 0.436250001), Vec2(0.360020012, 0.432889998), Vec2(0.364499986, 0.44986999), Vec2(0.377939999, 0.481029987), Vec2(0.370359987, 0.465959996), Vec2(0.380849987, 0.460709989), Vec2(0.38745001, 0.474099994), Vec2(0.370359987, 0.465959996), Vec2(0.364499986, 0.44986999), Vec2(0.375930011, 0.445899993), Vec2(0.380849987, 0.460709989), Vec2(0.358999997, 0.471460015), Vec2(0.352490008, 0.4542), Vec2(0.364499986, 0.44986999), Vec2(0.370359987, 0.465959996), Vec2(0.367210001, 0.48793), Vec2(0.358999997, 0.471460015), Vec2(0.370359987, 0.465959996), Vec2(0.377939999, 0.481029987), Vec2(0.382019997, 0.411460012), Vec2(0.380380005, 0.394320011), Vec2(0.393269986, 0.393909991), Vec2(0.394499987, 0.410809994), Vec2(0.380380005, 0.394320011), Vec2(0.379240006, 0.376610011), Vec2(0.392369986, 0.376419991), Vec2(0.393269986, 0.393909991), Vec2(0.367379993, 0.395350009), Vec2(0.365979999, 0.377200007), Vec2(0.379240006, 0.376610011), Vec2(0.380380005, 0.394320011), Vec2(0.369439989, 0.412990004), Vec2(0.367379993, 0.395350009), Vec2(0.380380005, 0.394320011), Vec2(0.382019997, 0.411460012), Vec2(0.379240006, 0.376610011), Vec2(0.378580004, 0.358559996), Vec2(0.391840011, 0.358579993), Vec2(0.392369986, 0.376419991), Vec2(0.378580004, 0.358559996), Vec2(0.378399998, 0.340350002), Vec2(0.391689986, 0.340579987), Vec2(0.391840011, 0.358579993), Vec2(0.365179986, 0.358729988), Vec2(0.364960015, 0.340110004), Vec2(0.378399998, 0.340350002), Vec2(0.378580004, 0.358559996), Vec2(0.365979999, 0.377200007), Vec2(0.365179986, 0.358729988), Vec2(0.378580004, 0.358559996), Vec2(0.379240006, 0.376610011), Vec2(0.352490008, 0.378089994), Vec2(0.351550013, 0.359059989), Vec2(0.365179986, 0.358729988), Vec2(0.365979999, 0.377200007), Vec2(0.351550013, 0.359059989), Vec2(0.351289988, 0.339890003), Vec2(0.364960015, 0.340110004), Vec2(0.365179986, 0.358729988), Vec2(0.337650001, 0.359490007), Vec2(0.337339997, 0.33969), Vec2(0.351289988, 0.339890003), Vec2(0.351550013, 0.359059989), Vec2(0.338739991, 0.379180014), Vec2(0.337650001, 0.359490007), Vec2(0.351550013, 0.359059989), Vec2(0.352490008, 0.378089994), Vec2(0.356640011, 0.415170014), Vec2(0.354169995, 0.39684999), Vec2(0.367379993, 0.395350009), Vec2(0.369439989, 0.412990004), Vec2(0.354169995, 0.39684999), Vec2(0.352490008, 0.378089994), Vec2(0.365979999, 0.377200007), Vec2(0.367379993, 0.395350009), Vec2(0.34066999, 0.398629993), Vec2(0.338739991, 0.379180014), Vec2(0.352490008, 0.378089994), Vec2(0.354169995, 0.39684999), Vec2(0.343519986, 0.417690009), Vec2(0.34066999, 0.398629993), Vec2(0.354169995, 0.39684999), Vec2(0.356640011, 0.415170014), Vec2(0.330040008, 0.420289993), Vec2(0.326860011, 0.400489986), Vec2(0.34066999, 0.398629993), Vec2(0.343519986, 0.417690009), Vec2(0.326860011, 0.400489986), Vec2(0.324690014, 0.380349994), Vec2(0.338739991, 0.379180014), Vec2(0.34066999, 0.398629993), Vec2(0.312739998, 0.402269989), Vec2(0.310350001, 0.381489992), Vec2(0.324690014, 0.380349994), Vec2(0.326860011, 0.400489986), Vec2(0.316179991, 0.422729999), Vec2(0.312739998, 0.402269989), Vec2(0.326860011, 0.400489986), Vec2(0.330040008, 0.420289993), Vec2(0.324690014, 0.380349994), Vec2(0.323460013, 0.359990001), Vec2(0.337650001, 0.359490007), Vec2(0.338739991, 0.379180014), Vec2(0.323460013, 0.359990001), Vec2(0.323089987, 0.339509994), Vec2(0.337339997, 0.33969), Vec2(0.337650001, 0.359490007), Vec2(0.308970004, 0.360480011), Vec2(0.308560014, 0.339359999), Vec2(0.323089987, 0.339509994), Vec2(0.323460013, 0.359990001), Vec2(0.310350001, 0.381489992), Vec2(0.308970004, 0.360480011), Vec2(0.323460013, 0.359990001), Vec2(0.324690014, 0.380349994), Vec2(0.295740008, 0.382490009), Vec2(0.294230014, 0.360920012), Vec2(0.308970004, 0.360480011), Vec2(0.310350001, 0.381489992), Vec2(0.294230014, 0.360920012), Vec2(0.293760002, 0.339240015), Vec2(0.308560014, 0.339359999), Vec2(0.308970004, 0.360480011), Vec2(0.279269993, 0.361259997), Vec2(0.278759986, 0.339150012), Vec2(0.293760002, 0.339240015), Vec2(0.294230014, 0.360920012), Vec2(0.280889988, 0.383249998), Vec2(0.279269993, 0.361259997), Vec2(0.294230014, 0.360920012), Vec2(0.295740008, 0.382490009), Vec2(0.301970005, 0.42482999), Vec2(0.298310012, 0.403829992), Vec2(0.312739998, 0.402269989), Vec2(0.316179991, 0.422729999), Vec2(0.298310012, 0.403829992), Vec2(0.295740008, 0.382490009), Vec2(0.310350001, 0.381489992), Vec2(0.312739998, 0.402269989), Vec2(0.283609986, 0.405010015), Vec2(0.280889988, 0.383249998), Vec2(0.295740008, 0.382490009), Vec2(0.298310012, 0.403829992), Vec2(0.287420005, 0.426429987), Vec2(0.283609986, 0.405010015), Vec2(0.298310012, 0.403829992), Vec2(0.301970005, 0.42482999), Vec2(0.355369985, 0.494399995), Vec2(0.346780002, 0.476749986), Vec2(0.358999997, 0.471460015), Vec2(0.367210001, 0.48793), Vec2(0.346780002, 0.476749986), Vec2(0.339839995, 0.45848), Vec2(0.352490008, 0.4542), Vec2(0.358999997, 0.471460015), Vec2(0.333739996, 0.481489986), Vec2(0.326559991, 0.462370008), Vec2(0.339839995, 0.45848), Vec2(0.346780002, 0.476749986), Vec2(0.342489988, 0.500119984), Vec2(0.333739996, 0.481489986), Vec2(0.346780002, 0.476749986), Vec2(0.355369985, 0.494399995), Vec2(0.339839995, 0.45848), Vec2(0.334320009, 0.439639986), Vec2(0.347409993, 0.436250001), Vec2(0.352490008, 0.4542), Vec2(0.334320009, 0.439639986), Vec2(0.330040008, 0.420289993), Vec2(0.343519986, 0.417690009), Vec2(0.347409993, 0.436250001), Vec2(0.320760012, 0.442779988), Vec2(0.316179991, 0.422729999), Vec2(0.330040008, 0.420289993), Vec2(0.334320009, 0.439639986), Vec2(0.326559991, 0.462370008), Vec2(0.320760012, 0.442779988), Vec2(0.334320009, 0.439639986), Vec2(0.339839995, 0.45848), Vec2(0.312700003, 0.465640008), Vec2(0.306739986, 0.445450008), Vec2(0.320760012, 0.442779988), Vec2(0.326559991, 0.462370008), Vec2(0.306739986, 0.445450008), Vec2(0.301970005, 0.42482999), Vec2(0.316179991, 0.422729999), Vec2(0.320760012, 0.442779988), Vec2(0.292309999, 0.447459996), Vec2(0.287420005, 0.426429987), Vec2(0.301970005, 0.42482999), Vec2(0.306739986, 0.445450008), Vec2(0.298299998, 0.468100011), Vec2(0.292309999, 0.447459996), Vec2(0.306739986, 0.445450008), Vec2(0.312700003, 0.465640008), Vec2(0.328619987, 0.504840016), Vec2(0.319940001, 0.485419989), Vec2(0.333739996, 0.481489986), Vec2(0.342489988, 0.500119984), Vec2(0.319940001, 0.485419989), Vec2(0.312700003, 0.465640008), Vec2(0.326559991, 0.462370008), Vec2(0.333739996, 0.481489986), Vec2(0.305429995, 0.488370001), Vec2(0.298299998, 0.468100011), Vec2(0.312700003, 0.465640008), Vec2(0.319940001, 0.485419989), Vec2(0.313829988, 0.508350015), Vec2(0.305429995, 0.488370001), Vec2(0.319940001, 0.485419989), Vec2(0.328619987, 0.504840016), Vec2(0.378399998, 0.340350002), Vec2(0.378690004, 0.322140008), Vec2(0.391930014, 0.32258001), Vec2(0.391689986, 0.340579987), Vec2(0.378690004, 0.322140008), Vec2(0.379449993, 0.304089993), Vec2(0.392560005, 0.304740012), Vec2(0.391930014, 0.32258001), Vec2(0.365289986, 0.321500003), Vec2(0.3662, 0.303050011), Vec2(0.379449993, 0.304089993), Vec2(0.378690004, 0.322140008), Vec2(0.364960015, 0.340110004), Vec2(0.365289986, 0.321500003), Vec2(0.378690004, 0.322140008), Vec2(0.378399998, 0.340350002), Vec2(0.379449993, 0.304089993), Vec2(0.380699992, 0.28639999), Vec2(0.393559992, 0.28727001), Vec2(0.392560005, 0.304740012), Vec2(0.380699992, 0.28639999), Vec2(0.382450014, 0.26929), Vec2(0.394899994, 0.27037999), Vec2(0.393559992, 0.28727001), Vec2(0.367720008, 0.284920007), Vec2(0.369899988, 0.267320007), Vec2(0.382450014, 0.26929), Vec2(0.380699992, 0.28639999), Vec2(0.3662, 0.303050011), Vec2(0.367720008, 0.284920007), Vec2(0.380699992, 0.28639999), Vec2(0.379449993, 0.304089993), Vec2(0.352730006, 0.301719993), Vec2(0.354519993, 0.282999992), Vec2(0.367720008, 0.284920007), Vec2(0.3662, 0.303050011), Vec2(0.354519993, 0.282999992), Vec2(0.357120007, 0.26473999), Vec2(0.369899988, 0.267320007), Vec2(0.367720008, 0.284920007), Vec2(0.341039985, 0.280840009), Vec2(0.344020009, 0.261860013), Vec2(0.357120007, 0.26473999), Vec2(0.354519993, 0.282999992), Vec2(0.338979989, 0.30024001), Vec2(0.341039985, 0.280840009), Vec2(0.354519993, 0.282999992), Vec2(0.352730006, 0.301719993), Vec2(0.351289988, 0.339890003), Vec2(0.351669997, 0.320740014), Vec2(0.365289986, 0.321500003), Vec2(0.364960015, 0.340110004), Vec2(0.351669997, 0.320740014), Vec2(0.352730006, 0.301719993), Vec2(0.3662, 0.303050011), Vec2(0.365289986, 0.321500003), Vec2(0.337769985, 0.319900006), Vec2(0.338979989, 0.30024001), Vec2(0.352730006, 0.301719993), Vec2(0.351669997, 0.320740014), Vec2(0.337339997, 0.33969), Vec2(0.337769985, 0.319900006), Vec2(0.351669997, 0.320740014), Vec2(0.351289988, 0.339890003), Vec2(0.382450014, 0.26929), Vec2(0.384719998, 0.253010005), Vec2(0.396519989, 0.254370004), Vec2(0.394899994, 0.27037999), Vec2(0.384719998, 0.253010005), Vec2(0.387580007, 0.237920001), Vec2(0.398339987, 0.239610001), Vec2(0.396519989, 0.254370004), Vec2(0.37281999, 0.250459999), Vec2(0.376650006, 0.234569997), Vec2(0.387580007, 0.237920001), Vec2(0.384719998, 0.253010005), Vec2(0.369899988, 0.267320007), Vec2(0.37281999, 0.250459999), Vec2(0.384719998, 0.253010005), Vec2(0.382450014, 0.26929), Vec2(0.387580007, 0.237920001), Vec2(0.391250014, 0.224490002), Vec2(0.400180012, 0.226799995), Vec2(0.398339987, 0.239610001), Vec2(0.391250014, 0.224490002), Vec2(0.396369994, 0.213410005), Vec2(0.401600003, 0.218140006), Vec2(0.400180012, 0.226799995), Vec2(0.381689996, 0.219909996), Vec2(0.388429999, 0.206740007), Vec2(0.396369994, 0.213410005), Vec2(0.391250014, 0.224490002), Vec2(0.376650006, 0.234569997), Vec2(0.381689996, 0.219909996), Vec2(0.391250014, 0.224490002), Vec2(0.387580007, 0.237920001), Vec2(0.365249991, 0.23026), Vec2(0.371250004, 0.21435), Vec2(0.381689996, 0.219909996), Vec2(0.376650006, 0.234569997), Vec2(0.371250004, 0.21435), Vec2(0.378960013, 0.199540004), Vec2(0.388429999, 0.206740007), Vec2(0.381689996, 0.219909996), Vec2(0.359890014, 0.208550006), Vec2(0.368229985, 0.192359999), Vec2(0.378960013, 0.199540004), Vec2(0.371250004, 0.21435), Vec2(0.353249997, 0.225600004), Vec2(0.359890014, 0.208550006), Vec2(0.371250004, 0.21435), Vec2(0.365249991, 0.23026), Vec2(0.357120007, 0.26473999), Vec2(0.360639989, 0.247109994), Vec2(0.37281999, 0.250459999), Vec2(0.369899988, 0.267320007), Vec2(0.360639989, 0.247109994), Vec2(0.365249991, 0.23026), Vec2(0.376650006, 0.234569997), Vec2(0.37281999, 0.250459999), Vec2(0.348030001, 0.243410006), Vec2(0.353249997, 0.225600004), Vec2(0.365249991, 0.23026), Vec2(0.360639989, 0.247109994), Vec2(0.344020009, 0.261860013), Vec2(0.348030001, 0.243410006), Vec2(0.360639989, 0.247109994), Vec2(0.357120007, 0.26473999), Vec2(0.330529988, 0.258929998), Vec2(0.334939986, 0.239710003), Vec2(0.348030001, 0.243410006), Vec2(0.344020009, 0.261860013), Vec2(0.334939986, 0.239710003), Vec2(0.34059, 0.221029997), Vec2(0.353249997, 0.225600004), Vec2(0.348030001, 0.243410006), Vec2(0.321339995, 0.236300007), Vec2(0.327270001, 0.216879994), Vec2(0.34059, 0.221029997), Vec2(0.334939986, 0.239710003), Vec2(0.316650003, 0.256209999), Vec2(0.321339995, 0.236300007), Vec2(0.334939986, 0.239710003), Vec2(0.330529988, 0.258929998), Vec2(0.34059, 0.221029997), Vec2(0.347649992, 0.202979997), Vec2(0.359890014, 0.208550006), Vec2(0.353249997, 0.225600004), Vec2(0.347649992, 0.202979997), Vec2(0.356359988, 0.185609996), Vec2(0.368229985, 0.192359999), Vec2(0.359890014, 0.208550006), Vec2(0.334560007, 0.197980002), Vec2(0.343409985, 0.179619998), Vec2(0.356359988, 0.185609996), Vec2(0.347649992, 0.202979997), Vec2(0.327270001, 0.216879994), Vec2(0.334560007, 0.197980002), Vec2(0.347649992, 0.202979997), Vec2(0.34059, 0.221029997), Vec2(0.313340008, 0.213379994), Vec2(0.320679992, 0.19382), Vec2(0.334560007, 0.197980002), Vec2(0.327270001, 0.216879994), Vec2(0.320679992, 0.19382), Vec2(0.329450011, 0.174649999), Vec2(0.343409985, 0.179619998), Vec2(0.334560007, 0.197980002), Vec2(0.30607, 0.190669999), Vec2(0.314539999, 0.170929998), Vec2(0.329450011, 0.174649999), Vec2(0.320679992, 0.19382), Vec2(0.298839986, 0.21074), Vec2(0.30607, 0.190669999), Vec2(0.320679992, 0.19382), Vec2(0.313340008, 0.213379994), Vec2(0.302390009, 0.253879994), Vec2(0.30726999, 0.233400002), Vec2(0.321339995, 0.236300007), Vec2(0.316650003, 0.256209999), Vec2(0.30726999, 0.233400002), Vec2(0.313340008, 0.213379994), Vec2(0.327270001, 0.216879994), Vec2(0.321339995, 0.236300007), Vec2(0.292760015, 0.231199995), Vec2(0.298839986, 0.21074), Vec2(0.313340008, 0.213379994), Vec2(0.30726999, 0.233400002), Vec2(0.287779987, 0.252099991), Vec2(0.292760015, 0.231199995), Vec2(0.30726999, 0.233400002), Vec2(0.302390009, 0.253879994), Vec2(0.323089987, 0.339509994), Vec2(0.323570013, 0.319050014), Vec2(0.337769985, 0.319900006), Vec2(0.337339997, 0.33969), Vec2(0.323570013, 0.319050014), Vec2(0.324930012, 0.298720002), Vec2(0.338979989, 0.30024001), Vec2(0.337769985, 0.319900006), Vec2(0.309089988, 0.318260014), Vec2(0.310579985, 0.297289997), Vec2(0.324930012, 0.298720002), Vec2(0.323570013, 0.319050014), Vec2(0.308560014, 0.339359999), Vec2(0.309089988, 0.318260014), Vec2(0.323570013, 0.319050014), Vec2(0.323089987, 0.339509994), Vec2(0.324930012, 0.298720002), Vec2(0.327230006, 0.278640002), Vec2(0.341039985, 0.280840009), Vec2(0.338979989, 0.30024001), Vec2(0.327230006, 0.278640002), Vec2(0.330529988, 0.258929998), Vec2(0.344020009, 0.261860013), Vec2(0.341039985, 0.280840009), Vec2(0.313080013, 0.276569992), Vec2(0.316650003, 0.256209999), Vec2(0.330529988, 0.258929998), Vec2(0.327230006, 0.278640002), Vec2(0.310579985, 0.297289997), Vec2(0.313080013, 0.276569992), Vec2(0.327230006, 0.278640002), Vec2(0.324930012, 0.298720002), Vec2(0.295949996, 0.296050012), Vec2(0.298619986, 0.274780005), Vec2(0.313080013, 0.276569992), Vec2(0.310579985, 0.297289997), Vec2(0.298619986, 0.274780005), Vec2(0.302390009, 0.253879994), Vec2(0.316650003, 0.256209999), Vec2(0.313080013, 0.276569992), Vec2(0.283879995, 0.273420006), Vec2(0.287779987, 0.252099991), Vec2(0.302390009, 0.253879994), Vec2(0.298619986, 0.274780005), Vec2(0.281069994, 0.295100003), Vec2(0.283879995, 0.273420006), Vec2(0.298619986, 0.274780005), Vec2(0.295949996, 0.296050012), Vec2(0.293760002, 0.339240015), Vec2(0.294330001, 0.317570001), Vec2(0.309089988, 0.318260014), Vec2(0.308560014, 0.339359999), Vec2(0.294330001, 0.317570001), Vec2(0.295949996, 0.296050012), Vec2(0.310579985, 0.297289997), Vec2(0.309089988, 0.318260014), Vec2(0.279359996, 0.31705001), Vec2(0.281069994, 0.295100003), Vec2(0.295949996, 0.296050012), Vec2(0.294330001, 0.317570001), Vec2(0.278759986, 0.339150012), Vec2(0.279359996, 0.31705001), Vec2(0.294330001, 0.317570001), Vec2(0.293760002, 0.339240015), Vec2(0.263590008, 0.33908999), Vec2(0.264219999, 0.316720009), Vec2(0.279359996, 0.31705001), Vec2(0.278759986, 0.339150012), Vec2(0.264219999, 0.316720009), Vec2(0.266000003, 0.294499993), Vec2(0.281069994, 0.295100003), Vec2(0.279359996, 0.31705001), Vec2(0.248960003, 0.31656), Vec2(0.250800014, 0.294209987), Vec2(0.266000003, 0.294499993), Vec2(0.264219999, 0.316720009), Vec2(0.248319998, 0.339060009), Vec2(0.248960003, 0.31656), Vec2(0.264219999, 0.316720009), Vec2(0.263590008, 0.33908999), Vec2(0.266000003, 0.294499993), Vec2(0.268900007, 0.272549987), Vec2(0.283879995, 0.273420006), Vec2(0.281069994, 0.295100003), Vec2(0.268900007, 0.272549987), Vec2(0.272879988, 0.250959992), Vec2(0.287779987, 0.252099991), Vec2(0.283879995, 0.273420006), Vec2(0.25376001, 0.272139996), Vec2(0.257770002, 0.250429988), Vec2(0.272879988, 0.250959992), Vec2(0.268900007, 0.272549987), Vec2(0.250800014, 0.294209987), Vec2(0.25376001, 0.272139996), Vec2(0.268900007, 0.272549987), Vec2(0.266000003, 0.294499993), Vec2(0.235520005, 0.294160008), Vec2(0.238519996, 0.272080004), Vec2(0.25376001, 0.272139996), Vec2(0.250800014, 0.294209987), Vec2(0.238519996, 0.272080004), Vec2(0.242550001, 0.250389993), Vec2(0.257770002, 0.250429988), Vec2(0.25376001, 0.272139996), Vec2(0.223269999, 0.272210002), Vec2(0.227329999, 0.250649989), Vec2(0.242550001, 0.250389993), Vec2(0.238519996, 0.272080004), Vec2(0.220210001, 0.294230014), Vec2(0.223269999, 0.272210002), Vec2(0.238519996, 0.272080004), Vec2(0.235520005, 0.294160008), Vec2(0.232999995, 0.339049995), Vec2(0.23364, 0.316529989), Vec2(0.248960003, 0.31656), Vec2(0.248319998, 0.339060009), Vec2(0.23364, 0.316529989), Vec2(0.235520005, 0.294160008), Vec2(0.250800014, 0.294209987), Vec2(0.248960003, 0.31656), Vec2(0.2183, 0.31656), Vec2(0.220210001, 0.294230014), Vec2(0.235520005, 0.294160008), Vec2(0.23364, 0.316529989), Vec2(0.217649996, 0.339060009), Vec2(0.2183, 0.31656), Vec2(0.23364, 0.316529989), Vec2(0.232999995, 0.339049995), Vec2(0.272879988, 0.250959992), Vec2(0.277880013, 0.229790002), Vec2(0.292760015, 0.231199995), Vec2(0.287779987, 0.252099991), Vec2(0.277880013, 0.229790002), Vec2(0.283870012, 0.209040001), Vec2(0.298839986, 0.21074), Vec2(0.292760015, 0.231199995), Vec2(0.262730002, 0.229149997), Vec2(0.268539995, 0.208299994), Vec2(0.283870012, 0.209040001), Vec2(0.277880013, 0.229790002), Vec2(0.257770002, 0.250429988), Vec2(0.262730002, 0.229149997), Vec2(0.277880013, 0.229790002), Vec2(0.272879988, 0.250959992), Vec2(0.283870012, 0.209040001), Vec2(0.290829986, 0.188659996), Vec2(0.30607, 0.190669999), Vec2(0.298839986, 0.21074), Vec2(0.290829986, 0.188659996), Vec2(0.298799992, 0.168559998), Vec2(0.314539999, 0.170929998), Vec2(0.30607, 0.190669999), Vec2(0.27511999, 0.187820002), Vec2(0.282409996, 0.167600006), Vec2(0.298799992, 0.168559998), Vec2(0.290829986, 0.188659996), Vec2(0.268539995, 0.208299994), Vec2(0.27511999, 0.187820002), Vec2(0.290829986, 0.188659996), Vec2(0.283870012, 0.209040001), Vec2(0.253039986, 0.208399996), Vec2(0.259160012, 0.188060001), Vec2(0.27511999, 0.187820002), Vec2(0.268539995, 0.208299994), Vec2(0.259160012, 0.188060001), Vec2(0.265639991, 0.168019995), Vec2(0.282409996, 0.167600006), Vec2(0.27511999, 0.187820002), Vec2(0.243239999, 0.189260006), Vec2(0.248820007, 0.169729993), Vec2(0.265639991, 0.168019995), Vec2(0.259160012, 0.188060001), Vec2(0.23759, 0.209179997), Vec2(0.243239999, 0.189260006), Vec2(0.259160012, 0.188060001), Vec2(0.253039986, 0.208399996), Vec2(0.242550001, 0.250389993), Vec2(0.247439995, 0.229159996), Vec2(0.262730002, 0.229149997), Vec2(0.257770002, 0.250429988), Vec2(0.247439995, 0.229159996), Vec2(0.253039986, 0.208399996), Vec2(0.268539995, 0.208299994), Vec2(0.262730002, 0.229149997), Vec2(0.232189998, 0.229629993), Vec2(0.23759, 0.209179997), Vec2(0.253039986, 0.208399996), Vec2(0.247439995, 0.229159996), Vec2(0.227329999, 0.250649989), Vec2(0.232189998, 0.229629993), Vec2(0.247439995, 0.229159996), Vec2(0.242550001, 0.250389993), Vec2(0.21221, 0.250970006), Vec2(0.217130005, 0.230279997), Vec2(0.232189998, 0.229629993), Vec2(0.227329999, 0.250649989), Vec2(0.217130005, 0.230279997), Vec2(0.222450003, 0.210339993), Vec2(0.23759, 0.209179997), Vec2(0.232189998, 0.229629993), Vec2(0.202399999, 0.230660006), Vec2(0.207870007, 0.211359993), Vec2(0.222450003, 0.210339993), Vec2(0.217130005, 0.230279997), Vec2(0.197249994, 0.251010001), Vec2(0.202399999, 0.230660006), Vec2(0.217130005, 0.230279997), Vec2(0.21221, 0.250970006), Vec2(0.222450003, 0.210339993), Vec2(0.227709994, 0.191129997), Vec2(0.243239999, 0.189260006), Vec2(0.23759, 0.209179997), Vec2(0.227709994, 0.191129997), Vec2(0.232409999, 0.172529995), Vec2(0.248820007, 0.169729993), Vec2(0.243239999, 0.189260006), Vec2(0.213009998, 0.193220004), Vec2(0.216959998, 0.176129997), Vec2(0.232409999, 0.172529995), Vec2(0.227709994, 0.191129997), Vec2(0.207870007, 0.211359993), Vec2(0.213009998, 0.193220004), Vec2(0.227709994, 0.191129997), Vec2(0.222450003, 0.210339993), Vec2(0.194120005, 0.211500004), Vec2(0.199719995, 0.194680005), Vec2(0.213009998, 0.193220004), Vec2(0.207870007, 0.211359993), Vec2(0.199719995, 0.194680005), Vec2(0.203339994, 0.180059999), Vec2(0.216959998, 0.176129997), Vec2(0.213009998, 0.193220004), Vec2(0.188590005, 0.19382), Vec2(0.194059998, 0.183160007), Vec2(0.203339994, 0.180059999), Vec2(0.199719995, 0.194680005), Vec2(0.181370005, 0.209729999), Vec2(0.188590005, 0.19382), Vec2(0.199719995, 0.194680005), Vec2(0.194120005, 0.211500004), Vec2(0.182459995, 0.250360012), Vec2(0.188079998, 0.230199993), Vec2(0.202399999, 0.230660006), Vec2(0.197249994, 0.251010001), Vec2(0.188079998, 0.230199993), Vec2(0.194120005, 0.211500004), Vec2(0.207870007, 0.211359993), Vec2(0.202399999, 0.230660006), Vec2(0.174219996, 0.228259996), Vec2(0.181370005, 0.209729999), Vec2(0.194120005, 0.211500004), Vec2(0.188079998, 0.230199993), Vec2(0.167820007, 0.248590007), Vec2(0.174219996, 0.228259996), Vec2(0.188079998, 0.230199993), Vec2(0.182459995, 0.250360012), Vec2(0.202270001, 0.33908999), Vec2(0.202940002, 0.316599995), Vec2(0.2183, 0.31656), Vec2(0.217649996, 0.339060009), Vec2(0.202940002, 0.316599995), Vec2(0.204899997, 0.294290006), Vec2(0.220210001, 0.294230014), Vec2(0.2183, 0.31656), Vec2(0.187529996, 0.316549987), Vec2(0.189579993, 0.294180006), Vec2(0.204899997, 0.294290006), Vec2(0.202940002, 0.316599995), Vec2(0.186849996, 0.339130014), Vec2(0.187529996, 0.316549987), Vec2(0.202940002, 0.316599995), Vec2(0.202270001, 0.33908999), Vec2(0.204899997, 0.294290006), Vec2(0.208049998, 0.272350013), Vec2(0.223269999, 0.272210002), Vec2(0.220210001, 0.294230014), Vec2(0.208049998, 0.272350013), Vec2(0.21221, 0.250970006), Vec2(0.227329999, 0.250649989), Vec2(0.223269999, 0.272210002), Vec2(0.192880005, 0.27226001), Vec2(0.197249994, 0.251010001), Vec2(0.21221, 0.250970006), Vec2(0.208049998, 0.272350013), Vec2(0.189579993, 0.294180006), Vec2(0.192880005, 0.27226001), Vec2(0.208049998, 0.272350013), Vec2(0.204899997, 0.294290006), Vec2(0.17419, 0.293740004), Vec2(0.177729994, 0.271649987), Vec2(0.192880005, 0.27226001), Vec2(0.189579993, 0.294180006), Vec2(0.177729994, 0.271649987), Vec2(0.182459995, 0.250360012), Vec2(0.197249994, 0.251010001), Vec2(0.192880005, 0.27226001), Vec2(0.162550002, 0.270229995), Vec2(0.167820007, 0.248590007), Vec2(0.182459995, 0.250360012), Vec2(0.177729994, 0.271649987), Vec2(0.158659995, 0.292769998), Vec2(0.162550002, 0.270229995), Vec2(0.177729994, 0.271649987), Vec2(0.17419, 0.293740004), Vec2(0.171299994, 0.339179993), Vec2(0.172020003, 0.316339999), Vec2(0.187529996, 0.316549987), Vec2(0.186849996, 0.339130014), Vec2(0.172020003, 0.316339999), Vec2(0.17419, 0.293740004), Vec2(0.189579993, 0.294180006), Vec2(0.187529996, 0.316549987), Vec2(0.156289995, 0.315869987), Vec2(0.158659995, 0.292769998), Vec2(0.17419, 0.293740004), Vec2(0.172020003, 0.316339999), Vec2(0.155520007, 0.339249998), Vec2(0.156289995, 0.315869987), Vec2(0.172020003, 0.316339999), Vec2(0.171299994, 0.339179993), Vec2(0.298220009, 0.510519981), Vec2(0.290320009, 0.490200013), Vec2(0.305429995, 0.488370001), Vec2(0.313829988, 0.508350015), Vec2(0.290320009, 0.490200013), Vec2(0.28343001, 0.469639987), Vec2(0.298299998, 0.468100011), Vec2(0.305429995, 0.488370001), Vec2(0.27474001, 0.490909994), Vec2(0.268220007, 0.470270008), Vec2(0.28343001, 0.469639987), Vec2(0.290320009, 0.490200013), Vec2(0.281960011, 0.511309981), Vec2(0.27474001, 0.490909994), Vec2(0.290320009, 0.490200013), Vec2(0.298220009, 0.510519981), Vec2(0.28343001, 0.469639987), Vec2(0.277520001, 0.448729992), Vec2(0.292309999, 0.447459996), Vec2(0.298299998, 0.468100011), Vec2(0.277520001, 0.448729992), Vec2(0.272599995, 0.427439988), Vec2(0.287420005, 0.426429987), Vec2(0.292309999, 0.447459996), Vec2(0.262470007, 0.449279994), Vec2(0.257569999, 0.427890003), Vec2(0.272599995, 0.427439988), Vec2(0.277520001, 0.448729992), Vec2(0.268220007, 0.470270008), Vec2(0.262470007, 0.449279994), Vec2(0.277520001, 0.448729992), Vec2(0.28343001, 0.469639987), Vec2(0.252840012, 0.470090002), Vec2(0.24729, 0.449220002), Vec2(0.262470007, 0.449279994), Vec2(0.268220007, 0.470270008), Vec2(0.24729, 0.449220002), Vec2(0.242430001, 0.427890003), Vec2(0.257569999, 0.427890003), Vec2(0.262470007, 0.449279994), Vec2(0.232130006, 0.448720008), Vec2(0.227300003, 0.427630007), Vec2(0.242430001, 0.427890003), Vec2(0.24729, 0.449220002), Vec2(0.237509996, 0.469260007), Vec2(0.232130006, 0.448720008), Vec2(0.24729, 0.449220002), Vec2(0.252840012, 0.470090002), Vec2(0.265329987, 0.510739982), Vec2(0.25891, 0.490559995), Vec2(0.27474001, 0.490909994), Vec2(0.281960011, 0.511309981), Vec2(0.25891, 0.490559995), Vec2(0.252840012, 0.470090002), Vec2(0.268220007, 0.470270008), Vec2(0.27474001, 0.490909994), Vec2(0.24312, 0.489289999), Vec2(0.237509996, 0.469260007), Vec2(0.252840012, 0.470090002), Vec2(0.25891, 0.490559995), Vec2(0.248649999, 0.508920014), Vec2(0.24312, 0.489289999), Vec2(0.25891, 0.490559995), Vec2(0.265329987, 0.510739982), Vec2(0.272599995, 0.427439988), Vec2(0.268700004, 0.405750006), Vec2(0.283609986, 0.405010015), Vec2(0.287420005, 0.426429987), Vec2(0.268700004, 0.405750006), Vec2(0.265859991, 0.383729994), Vec2(0.280889988, 0.383249998), Vec2(0.283609986, 0.405010015), Vec2(0.253609985, 0.406089991), Vec2(0.250699997, 0.383949995), Vec2(0.265859991, 0.383729994), Vec2(0.268700004, 0.405750006), Vec2(0.257569999, 0.427890003), Vec2(0.253609985, 0.406089991), Vec2(0.268700004, 0.405750006), Vec2(0.272599995, 0.427439988), Vec2(0.265859991, 0.383729994), Vec2(0.264149994, 0.361470014), Vec2(0.279269993, 0.361259997), Vec2(0.280889988, 0.383249998), Vec2(0.264149994, 0.361470014), Vec2(0.263590008, 0.33908999), Vec2(0.278759986, 0.339150012), Vec2(0.279269993, 0.361259997), Vec2(0.248919994, 0.361559987), Vec2(0.248319998, 0.339060009), Vec2(0.263590008, 0.33908999), Vec2(0.264149994, 0.361470014), Vec2(0.250699997, 0.383949995), Vec2(0.248919994, 0.361559987), Vec2(0.264149994, 0.361470014), Vec2(0.265859991, 0.383729994), Vec2(0.235469997, 0.383980006), Vec2(0.233620003, 0.361580014), Vec2(0.248919994, 0.361559987), Vec2(0.250699997, 0.383949995), Vec2(0.233620003, 0.361580014), Vec2(0.232999995, 0.339049995), Vec2(0.248319998, 0.339060009), Vec2(0.248919994, 0.361559987), Vec2(0.2183, 0.361570001), Vec2(0.217649996, 0.339060009), Vec2(0.232999995, 0.339049995), Vec2(0.233620003, 0.361580014), Vec2(0.220200002, 0.383929998), Vec2(0.2183, 0.361570001), Vec2(0.233620003, 0.361580014), Vec2(0.235469997, 0.383980006), Vec2(0.242430001, 0.427890003), Vec2(0.238440007, 0.406120002), Vec2(0.253609985, 0.406089991), Vec2(0.257569999, 0.427890003), Vec2(0.238440007, 0.406120002), Vec2(0.235469997, 0.383980006), Vec2(0.250699997, 0.383949995), Vec2(0.253609985, 0.406089991), Vec2(0.223250002, 0.405999988), Vec2(0.220200002, 0.383929998), Vec2(0.235469997, 0.383980006), Vec2(0.238440007, 0.406120002), Vec2(0.227300003, 0.427630007), Vec2(0.223250002, 0.405999988), Vec2(0.238440007, 0.406120002), Vec2(0.242430001, 0.427890003), Vec2(0.212249994, 0.427329987), Vec2(0.208090007, 0.405889988), Vec2(0.223250002, 0.405999988), Vec2(0.227300003, 0.427630007), Vec2(0.208090007, 0.405889988), Vec2(0.204940006, 0.383920014), Vec2(0.220200002, 0.383929998), Vec2(0.223250002, 0.405999988), Vec2(0.192990005, 0.406040013), Vec2(0.189659998, 0.384090006), Vec2(0.204940006, 0.383920014), Vec2(0.208090007, 0.405889988), Vec2(0.197369993, 0.427329987), Vec2(0.192990005, 0.406040013), Vec2(0.208090007, 0.405889988), Vec2(0.212249994, 0.427329987), Vec2(0.204940006, 0.383920014), Vec2(0.202959999, 0.361589998), Vec2(0.2183, 0.361570001), Vec2(0.220200002, 0.383929998), Vec2(0.202959999, 0.361589998), Vec2(0.202270001, 0.33908999), Vec2(0.217649996, 0.339060009), Vec2(0.2183, 0.361570001), Vec2(0.187570006, 0.361710012), Vec2(0.186849996, 0.339130014), Vec2(0.202270001, 0.33908999), Vec2(0.202959999, 0.361589998), Vec2(0.189659998, 0.384090006), Vec2(0.187570006, 0.361710012), Vec2(0.202959999, 0.361589998), Vec2(0.204940006, 0.383920014), Vec2(0.174319997, 0.384629995), Vec2(0.172079995, 0.362019986), Vec2(0.187570006, 0.361710012), Vec2(0.189659998, 0.384090006), Vec2(0.172079995, 0.362019986), Vec2(0.171299994, 0.339179993), Vec2(0.186849996, 0.339130014), Vec2(0.187570006, 0.361710012), Vec2(0.156379998, 0.362619996), Vec2(0.155520007, 0.339249998), Vec2(0.171299994, 0.339179993), Vec2(0.172079995, 0.362019986), Vec2(0.158830002, 0.385720015), Vec2(0.156379998, 0.362619996), Vec2(0.172079995, 0.362019986), Vec2(0.174319997, 0.384629995), Vec2(0.182659999, 0.428039998), Vec2(0.177900001, 0.406729996), Vec2(0.192990005, 0.406040013), Vec2(0.197369993, 0.427329987), Vec2(0.177900001, 0.406729996), Vec2(0.174319997, 0.384629995), Vec2(0.189659998, 0.384090006), Vec2(0.192990005, 0.406040013), Vec2(0.162780002, 0.408250004), Vec2(0.158830002, 0.385720015), Vec2(0.174319997, 0.384629995), Vec2(0.177900001, 0.406729996), Vec2(0.168099999, 0.429879993), Vec2(0.162780002, 0.408250004), Vec2(0.177900001, 0.406729996), Vec2(0.182659999, 0.428039998), Vec2(0.232360005, 0.506039977), Vec2(0.227699995, 0.487379998), Vec2(0.24312, 0.489289999), Vec2(0.248649999, 0.508920014), Vec2(0.227699995, 0.487379998), Vec2(0.222460002, 0.468100011), Vec2(0.237509996, 0.469260007), Vec2(0.24312, 0.489289999), Vec2(0.213090003, 0.485280007), Vec2(0.207969993, 0.467079997), Vec2(0.222460002, 0.468100011), Vec2(0.227699995, 0.487379998), Vec2(0.217020005, 0.502390027), Vec2(0.213090003, 0.485280007), Vec2(0.227699995, 0.487379998), Vec2(0.232360005, 0.506039977), Vec2(0.222460002, 0.468100011), Vec2(0.217160001, 0.448089987), Vec2(0.232130006, 0.448720008), Vec2(0.237509996, 0.469260007), Vec2(0.217160001, 0.448089987), Vec2(0.212249994, 0.427329987), Vec2(0.227300003, 0.427630007), Vec2(0.232130006, 0.448720008), Vec2(0.202509999, 0.447730005), Vec2(0.197369993, 0.427329987), Vec2(0.212249994, 0.427329987), Vec2(0.217160001, 0.448089987), Vec2(0.207969993, 0.467079997), Vec2(0.202509999, 0.447730005), Vec2(0.217160001, 0.448089987), Vec2(0.222460002, 0.468100011), Vec2(0.194309995, 0.466969997), Vec2(0.18829, 0.448229998), Vec2(0.202509999, 0.447730005), Vec2(0.207969993, 0.467079997), Vec2(0.18829, 0.448229998), Vec2(0.182659999, 0.428039998), Vec2(0.197369993, 0.427329987), Vec2(0.202509999, 0.447730005), Vec2(0.174510002, 0.450219989), Vec2(0.168099999, 0.429879993), Vec2(0.182659999, 0.428039998), Vec2(0.18829, 0.448229998), Vec2(0.181649998, 0.468769997), Vec2(0.174510002, 0.450219989), Vec2(0.18829, 0.448229998), Vec2(0.194309995, 0.466969997), Vec2(0.203470007, 0.498450011), Vec2(0.199880004, 0.483830005), Vec2(0.213090003, 0.485280007), Vec2(0.217020005, 0.502390027), Vec2(0.199880004, 0.483830005), Vec2(0.194309995, 0.466969997), Vec2(0.207969993, 0.467079997), Vec2(0.213090003, 0.485280007), Vec2(0.188820004, 0.484710008), Vec2(0.181649998, 0.468769997), Vec2(0.194309995, 0.466969997), Vec2(0.199880004, 0.483830005), Vec2(0.194230005, 0.495350003), Vec2(0.188820004, 0.484710008), Vec2(0.199880004, 0.483830005), Vec2(0.203470007, 0.498450011), Vec2(0.40823999, 0.214259997), Vec2(0.409579992, 0.225759998), Vec2(0.400180012, 0.226799995), Vec2(0.401600003, 0.218140006), Vec2(0.409579992, 0.225759998), Vec2(0.409310013, 0.23928), Vec2(0.398339987, 0.239610001), Vec2(0.400180012, 0.226799995), Vec2(0.420230001, 0.222589999), Vec2(0.420819998, 0.237360001), Vec2(0.409310013, 0.23928), Vec2(0.409579992, 0.225759998), Vec2(0.418190002, 0.208949998), Vec2(0.420230001, 0.222589999), Vec2(0.409579992, 0.225759998), Vec2(0.40823999, 0.214259997), Vec2(0.409310013, 0.23928), Vec2(0.40843001, 0.254330009), Vec2(0.396519989, 0.254370004), Vec2(0.398339987, 0.239610001), Vec2(0.40843001, 0.254330009), Vec2(0.407380015, 0.270489991), Vec2(0.394899994, 0.27037999), Vec2(0.396519989, 0.254370004), Vec2(0.420599997, 0.253129989), Vec2(0.42001, 0.269749999), Vec2(0.407380015, 0.270489991), Vec2(0.40843001, 0.254330009), Vec2(0.420819998, 0.237360001), Vec2(0.420599997, 0.253129989), Vec2(0.40843001, 0.254330009), Vec2(0.409310013, 0.23928), Vec2(0.432960004, 0.234589994), Vec2(0.433129996, 0.251199991), Vec2(0.420599997, 0.253129989), Vec2(0.420819998, 0.237360001), Vec2(0.433129996, 0.251199991), Vec2(0.432870001, 0.268429995), Vec2(0.42001, 0.269749999), Vec2(0.420599997, 0.253129989), Vec2(0.446029991, 0.248999998), Vec2(0.445980012, 0.266840011), Vec2(0.432870001, 0.268429995), Vec2(0.433129996, 0.251199991), Vec2(0.445679992, 0.23161), Vec2(0.446029991, 0.248999998), Vec2(0.433129996, 0.251199991), Vec2(0.432960004, 0.234589994), Vec2(0.429830015, 0.203459993), Vec2(0.432000011, 0.218669996), Vec2(0.420230001, 0.222589999), Vec2(0.418190002, 0.208949998), Vec2(0.432000011, 0.218669996), Vec2(0.432960004, 0.234589994), Vec2(0.420819998, 0.237360001), Vec2(0.420230001, 0.222589999), Vec2(0.444660008, 0.214709997), Vec2(0.445679992, 0.23161), Vec2(0.432960004, 0.234589994), Vec2(0.432000011, 0.218669996), Vec2(0.44264999, 0.198310003), Vec2(0.444660008, 0.214709997), Vec2(0.432000011, 0.218669996), Vec2(0.429830015, 0.203459993), Vec2(0.407380015, 0.270489991), Vec2(0.406410009, 0.287449986), Vec2(0.393559992, 0.28727001), Vec2(0.394899994, 0.27037999), Vec2(0.406410009, 0.287449986), Vec2(0.405629992, 0.304960012), Vec2(0.392560005, 0.304740012), Vec2(0.393559992, 0.28727001), Vec2(0.419349998, 0.287019998), Vec2(0.418760002, 0.304780006), Vec2(0.405629992, 0.304960012), Vec2(0.406410009, 0.287449986), Vec2(0.42001, 0.269749999), Vec2(0.419349998, 0.287019998), Vec2(0.406410009, 0.287449986), Vec2(0.407380015, 0.270489991), Vec2(0.405629992, 0.304960012), Vec2(0.405119985, 0.32280001), Vec2(0.391930014, 0.32258001), Vec2(0.392560005, 0.304740012), Vec2(0.405119985, 0.32280001), Vec2(0.404920012, 0.340810001), Vec2(0.391689986, 0.340579987), Vec2(0.391930014, 0.32258001), Vec2(0.418350011, 0.322829992), Vec2(0.418179989, 0.341030002), Vec2(0.404920012, 0.340810001), Vec2(0.405119985, 0.32280001), Vec2(0.418760002, 0.304780006), Vec2(0.418350011, 0.322829992), Vec2(0.405119985, 0.32280001), Vec2(0.405629992, 0.304960012), Vec2(0.432020009, 0.304309994), Vec2(0.431690007, 0.322710007), Vec2(0.418350011, 0.322829992), Vec2(0.418760002, 0.304780006), Vec2(0.431690007, 0.322710007), Vec2(0.431549996, 0.341219991), Vec2(0.418179989, 0.341030002), Vec2(0.418350011, 0.322829992), Vec2(0.445179999, 0.322490007), Vec2(0.445060015, 0.341390014), Vec2(0.431549996, 0.341219991), Vec2(0.431690007, 0.322710007), Vec2(0.445430011, 0.303689986), Vec2(0.445179999, 0.322490007), Vec2(0.431690007, 0.322710007), Vec2(0.432020009, 0.304309994), Vec2(0.432870001, 0.268429995), Vec2(0.432440013, 0.286170006), Vec2(0.419349998, 0.287019998), Vec2(0.42001, 0.269749999), Vec2(0.432440013, 0.286170006), Vec2(0.432020009, 0.304309994), Vec2(0.418760002, 0.304780006), Vec2(0.419349998, 0.287019998), Vec2(0.445730001, 0.285100013), Vec2(0.445430011, 0.303689986), Vec2(0.432020009, 0.304309994), Vec2(0.432440013, 0.286170006), Vec2(0.445980012, 0.266840011), Vec2(0.445730001, 0.285100013), Vec2(0.432440013, 0.286170006), Vec2(0.432870001, 0.268429995), Vec2(0.459340006, 0.265280008), Vec2(0.459210008, 0.284009993), Vec2(0.445730001, 0.285100013), Vec2(0.445980012, 0.266840011), Vec2(0.459210008, 0.284009993), Vec2(0.458999991, 0.30302), Vec2(0.445430011, 0.303689986), Vec2(0.445730001, 0.285100013), Vec2(0.472840011, 0.283050001), Vec2(0.472710013, 0.30241999), Vec2(0.458999991, 0.30302), Vec2(0.459210008, 0.284009993), Vec2(0.472909987, 0.263940006), Vec2(0.472840011, 0.283050001), Vec2(0.459210008, 0.284009993), Vec2(0.459340006, 0.265280008), Vec2(0.458999991, 0.30302), Vec2(0.458819985, 0.322230011), Vec2(0.445179999, 0.322490007), Vec2(0.445430011, 0.303689986), Vec2(0.458819985, 0.322230011), Vec2(0.458730012, 0.341520011), Vec2(0.445060015, 0.341390014), Vec2(0.445179999, 0.322490007), Vec2(0.472589999, 0.321969986), Vec2(0.472530007, 0.341619998), Vec2(0.458730012, 0.341520011), Vec2(0.458819985, 0.322230011), Vec2(0.472710013, 0.30241999), Vec2(0.472589999, 0.321969986), Vec2(0.458819985, 0.322230011), Vec2(0.458999991, 0.30302), Vec2(0.486530006, 0.301999986), Vec2(0.486470014, 0.32179001), Vec2(0.472589999, 0.321969986), Vec2(0.472710013, 0.30241999), Vec2(0.486470014, 0.32179001), Vec2(0.486429989, 0.341670007), Vec2(0.472530007, 0.341619998), Vec2(0.472589999, 0.321969986), Vec2(0.500389993, 0.321709991), Vec2(0.500389993, 0.341690004), Vec2(0.486429989, 0.341670007), Vec2(0.486470014, 0.32179001), Vec2(0.500389993, 0.301829994), Vec2(0.500389993, 0.321709991), Vec2(0.486470014, 0.32179001), Vec2(0.486530006, 0.301999986), Vec2(0.486620009, 0.263029993), Vec2(0.486589998, 0.282389998), Vec2(0.472840011, 0.283050001), Vec2(0.472909987, 0.263940006), Vec2(0.486589998, 0.282389998), Vec2(0.486530006, 0.301999986), Vec2(0.472710013, 0.30241999), Vec2(0.472840011, 0.283050001), Vec2(0.500389993, 0.282130003), Vec2(0.500389993, 0.301829994), Vec2(0.486530006, 0.301999986), Vec2(0.486589998, 0.282389998), Vec2(0.500389993, 0.26267001), Vec2(0.500389993, 0.282130003), Vec2(0.486589998, 0.282389998), Vec2(0.486620009, 0.263029993), Vec2(0.456360012, 0.193859994), Vec2(0.458009988, 0.21119), Vec2(0.444660008, 0.214709997), Vec2(0.44264999, 0.198310003), Vec2(0.458009988, 0.21119), Vec2(0.458920002, 0.228850007), Vec2(0.445679992, 0.23161), Vec2(0.444660008, 0.214709997), Vec2(0.471870005, 0.208409995), Vec2(0.472539991, 0.226630002), Vec2(0.458920002, 0.228850007), Vec2(0.458009988, 0.21119), Vec2(0.470699996, 0.190410003), Vec2(0.471870005, 0.208409995), Vec2(0.458009988, 0.21119), Vec2(0.456360012, 0.193859994), Vec2(0.458920002, 0.228850007), Vec2(0.459300011, 0.246879995), Vec2(0.446029991, 0.248999998), Vec2(0.445679992, 0.23161), Vec2(0.459300011, 0.246879995), Vec2(0.459340006, 0.265280008), Vec2(0.445980012, 0.266840011), Vec2(0.446029991, 0.248999998), Vec2(0.472840011, 0.245130002), Vec2(0.472909987, 0.263940006), Vec2(0.459340006, 0.265280008), Vec2(0.459300011, 0.246879995), Vec2(0.472539991, 0.226630002), Vec2(0.472840011, 0.245130002), Vec2(0.459300011, 0.246879995), Vec2(0.458920002, 0.228850007), Vec2(0.486409992, 0.225170001), Vec2(0.486570001, 0.243959993), Vec2(0.472840011, 0.245130002), Vec2(0.472539991, 0.226630002), Vec2(0.486570001, 0.243959993), Vec2(0.486620009, 0.263029993), Vec2(0.472909987, 0.263940006), Vec2(0.472840011, 0.245130002), Vec2(0.500389993, 0.243509993), Vec2(0.500389993, 0.26267001), Vec2(0.486620009, 0.263029993), Vec2(0.486570001, 0.243959993), Vec2(0.500389993, 0.224610001), Vec2(0.500389993, 0.243509993), Vec2(0.486570001, 0.243959993), Vec2(0.486409992, 0.225170001), Vec2(0.485439986, 0.188199997), Vec2(0.48605001, 0.206609994), Vec2(0.471870005, 0.208409995), Vec2(0.470699996, 0.190410003), Vec2(0.48605001, 0.206609994), Vec2(0.486409992, 0.225170001), Vec2(0.472539991, 0.226630002), Vec2(0.471870005, 0.208409995), Vec2(0.500389993, 0.205939993), Vec2(0.500389993, 0.224610001), Vec2(0.486409992, 0.225170001), Vec2(0.48605001, 0.206609994), Vec2(0.500389993, 0.187380001), Vec2(0.500389993, 0.205939993), Vec2(0.48605001, 0.206609994), Vec2(0.485439986, 0.188199997), Vec2(0.404920012, 0.340810001), Vec2(0.405030012, 0.358819991), Vec2(0.391840011, 0.358579993), Vec2(0.391689986, 0.340579987), Vec2(0.405030012, 0.358819991), Vec2(0.40546, 0.376670003), Vec2(0.392369986, 0.376419991), Vec2(0.391840011, 0.358579993), Vec2(0.418269992, 0.359230012), Vec2(0.418599993, 0.377279997), Vec2(0.40546, 0.376670003), Vec2(0.405030012, 0.358819991), Vec2(0.418179989, 0.341030002), Vec2(0.418269992, 0.359230012), Vec2(0.405030012, 0.358819991), Vec2(0.404920012, 0.340810001), Vec2(0.40546, 0.376670003), Vec2(0.40614, 0.39418), Vec2(0.393269986, 0.393909991), Vec2(0.392369986, 0.376419991), Vec2(0.40614, 0.39418), Vec2(0.407000005, 0.411139995), Vec2(0.394499987, 0.410809994), Vec2(0.393269986, 0.393909991), Vec2(0.419090003, 0.395029992), Vec2(0.419660002, 0.412299991), Vec2(0.407000005, 0.411139995), Vec2(0.40614, 0.39418), Vec2(0.418599993, 0.377279997), Vec2(0.419090003, 0.395029992), Vec2(0.40614, 0.39418), Vec2(0.40546, 0.376670003), Vec2(0.431870013, 0.378129989), Vec2(0.432209998, 0.396259993), Vec2(0.419090003, 0.395029992), Vec2(0.418599993, 0.377279997), Vec2(0.432209998, 0.396259993), Vec2(0.432550013, 0.413989991), Vec2(0.419660002, 0.412299991), Vec2(0.419090003, 0.395029992), Vec2(0.445520014, 0.397650003), Vec2(0.44569999, 0.415879995), Vec2(0.432550013, 0.413989991), Vec2(0.432209998, 0.396259993), Vec2(0.445289999, 0.379079998), Vec2(0.445520014, 0.397650003), Vec2(0.432209998, 0.396259993), Vec2(0.431870013, 0.378129989), Vec2(0.431549996, 0.341219991), Vec2(0.431620002, 0.359739989), Vec2(0.418269992, 0.359230012), Vec2(0.418179989, 0.341030002), Vec2(0.431620002, 0.359739989), Vec2(0.431870013, 0.378129989), Vec2(0.418599993, 0.377279997), Vec2(0.418269992, 0.359230012), Vec2(0.445109993, 0.360289991), Vec2(0.445289999, 0.379079998), Vec2(0.431870013, 0.378129989), Vec2(0.431620002, 0.359739989), Vec2(0.445060015, 0.341390014), Vec2(0.445109993, 0.360289991), Vec2(0.431620002, 0.359739989), Vec2(0.431549996, 0.341219991), Vec2(0.407000005, 0.411139995), Vec2(0.40794, 0.427300006), Vec2(0.395999998, 0.426840007), Vec2(0.394499987, 0.410809994), Vec2(0.40794, 0.427300006), Vec2(0.408710003, 0.442330003), Vec2(0.397700012, 0.441610008), Vec2(0.395999998, 0.426840007), Vec2(0.420139998, 0.42888999), Vec2(0.420249999, 0.44461), Vec2(0.408710003, 0.442330003), Vec2(0.40794, 0.427300006), Vec2(0.419660002, 0.412299991), Vec2(0.420139998, 0.42888999), Vec2(0.40794, 0.427300006), Vec2(0.407000005, 0.411139995), Vec2(0.408710003, 0.442330003), Vec2(0.408850014, 0.455799997), Vec2(0.399419993, 0.454439998), Vec2(0.397700012, 0.441610008), Vec2(0.408850014, 0.455799997), Vec2(0.407389998, 0.467159986), Vec2(0.400750011, 0.463099986), Vec2(0.399419993, 0.454439998), Vec2(0.419539988, 0.45927), Vec2(0.417360008, 0.472730011), Vec2(0.407389998, 0.467159986), Vec2(0.408850014, 0.455799997), Vec2(0.420249999, 0.44461), Vec2(0.419539988, 0.45927), Vec2(0.408850014, 0.455799997), Vec2(0.408710003, 0.442330003), Vec2(0.432429999, 0.447699994), Vec2(0.431360006, 0.463499993), Vec2(0.419539988, 0.45927), Vec2(0.420249999, 0.44461), Vec2(0.431360006, 0.463499993), Vec2(0.429049999, 0.478509992), Vec2(0.417360008, 0.472730011), Vec2(0.419539988, 0.45927), Vec2(0.444110006, 0.467729986), Vec2(0.441960007, 0.483940005), Vec2(0.429049999, 0.478509992), Vec2(0.431360006, 0.463499993), Vec2(0.445230007, 0.450969994), Vec2(0.444110006, 0.467729986), Vec2(0.431360006, 0.463499993), Vec2(0.432429999, 0.447699994), Vec2(0.432550013, 0.413989991), Vec2(0.432709992, 0.431169987), Vec2(0.420139998, 0.42888999), Vec2(0.419660002, 0.412299991), Vec2(0.432709992, 0.431169987), Vec2(0.432429999, 0.447699994), Vec2(0.420249999, 0.44461), Vec2(0.420139998, 0.42888999), Vec2(0.445670009, 0.433670014), Vec2(0.445230007, 0.450969994), Vec2(0.432429999, 0.447699994), Vec2(0.432709992, 0.431169987), Vec2(0.44569999, 0.415879995), Vec2(0.445670009, 0.433670014), Vec2(0.432709992, 0.431169987), Vec2(0.432550013, 0.413989991), Vec2(0.459109992, 0.417690009), Vec2(0.459010005, 0.43603), Vec2(0.445670009, 0.433670014), Vec2(0.44569999, 0.415879995), Vec2(0.459010005, 0.43603), Vec2(0.45855999, 0.453960001), Vec2(0.445230007, 0.450969994), Vec2(0.445670009, 0.433670014), Vec2(0.472640008, 0.437940001), Vec2(0.472290009, 0.456349999), Vec2(0.45855999, 0.453960001), Vec2(0.459010005, 0.43603), Vec2(0.472750008, 0.419200003), Vec2(0.472640008, 0.437940001), Vec2(0.459010005, 0.43603), Vec2(0.459109992, 0.417690009), Vec2(0.45855999, 0.453960001), Vec2(0.457569987, 0.471489996), Vec2(0.444110006, 0.467729986), Vec2(0.445230007, 0.450969994), Vec2(0.457569987, 0.471489996), Vec2(0.455799997, 0.488629997), Vec2(0.441960007, 0.483940005), Vec2(0.444110006, 0.467729986), Vec2(0.471569985, 0.474440008), Vec2(0.470310003, 0.492269993), Vec2(0.455799997, 0.488629997), Vec2(0.457569987, 0.471489996), Vec2(0.472290009, 0.456349999), Vec2(0.471569985, 0.474440008), Vec2(0.457569987, 0.471489996), Vec2(0.45855999, 0.453960001), Vec2(0.48627001, 0.457899988), Vec2(0.485900015, 0.476350009), Vec2(0.471569985, 0.474440008), Vec2(0.472290009, 0.456349999), Vec2(0.485900015, 0.476350009), Vec2(0.485249996, 0.494610012), Vec2(0.470310003, 0.492269993), Vec2(0.471569985, 0.474440008), Vec2(0.500389993, 0.476999998), Vec2(0.500389993, 0.49544999), Vec2(0.485249996, 0.494610012), Vec2(0.485900015, 0.476350009), Vec2(0.500389993, 0.458429992), Vec2(0.500389993, 0.476999998), Vec2(0.485900015, 0.476350009), Vec2(0.48627001, 0.457899988), Vec2(0.486530006, 0.42019999), Vec2(0.48646, 0.439200014), Vec2(0.472640008, 0.437940001), Vec2(0.472750008, 0.419200003), Vec2(0.48646, 0.439200014), Vec2(0.48627001, 0.457899988), Vec2(0.472290009, 0.456349999), Vec2(0.472640008, 0.437940001), Vec2(0.500389993, 0.439639986), Vec2(0.500389993, 0.458429992), Vec2(0.48627001, 0.457899988), Vec2(0.48646, 0.439200014), Vec2(0.500389993, 0.420549989), Vec2(0.500389993, 0.439639986), Vec2(0.48646, 0.439200014), Vec2(0.486530006, 0.42019999), Vec2(0.458730012, 0.341520011), Vec2(0.458759993, 0.360819995), Vec2(0.445109993, 0.360289991), Vec2(0.445060015, 0.341390014), Vec2(0.458759993, 0.360819995), Vec2(0.458889991, 0.380010009), Vec2(0.445289999, 0.379079998), Vec2(0.445109993, 0.360289991), Vec2(0.472550005, 0.361259997), Vec2(0.472629994, 0.380789995), Vec2(0.458889991, 0.380010009), Vec2(0.458759993, 0.360819995), Vec2(0.472530007, 0.341619998), Vec2(0.472550005, 0.361259997), Vec2(0.458759993, 0.360819995), Vec2(0.458730012, 0.341520011), Vec2(0.458889991, 0.380010009), Vec2(0.459039986, 0.398999989), Vec2(0.445520014, 0.397650003), Vec2(0.445289999, 0.379079998), Vec2(0.459039986, 0.398999989), Vec2(0.459109992, 0.417690009), Vec2(0.44569999, 0.415879995), Vec2(0.445520014, 0.397650003), Vec2(0.472719997, 0.400130004), Vec2(0.472750008, 0.419200003), Vec2(0.459109992, 0.417690009), Vec2(0.459039986, 0.398999989), Vec2(0.472629994, 0.380789995), Vec2(0.472719997, 0.400130004), Vec2(0.459039986, 0.398999989), Vec2(0.458889991, 0.380010009), Vec2(0.486479998, 0.38132), Vec2(0.486519992, 0.400889993), Vec2(0.472719997, 0.400130004), Vec2(0.472629994, 0.380789995), Vec2(0.486519992, 0.400889993), Vec2(0.486530006, 0.42019999), Vec2(0.472750008, 0.419200003), Vec2(0.472719997, 0.400130004), Vec2(0.500389993, 0.401169986), Vec2(0.500389993, 0.420549989), Vec2(0.486530006, 0.42019999), Vec2(0.486519992, 0.400889993), Vec2(0.500389993, 0.38150999), Vec2(0.500389993, 0.401169986), Vec2(0.486519992, 0.400889993), Vec2(0.486479998, 0.38132), Vec2(0.486429989, 0.341670007), Vec2(0.486440003, 0.361550003), Vec2(0.472550005, 0.361259997), Vec2(0.472530007, 0.341619998), Vec2(0.486440003, 0.361550003), Vec2(0.486479998, 0.38132), Vec2(0.472629994, 0.380789995), Vec2(0.472550005, 0.361259997), Vec2(0.500389993, 0.361660004), Vec2(0.500389993, 0.38150999), Vec2(0.486479998, 0.38132), Vec2(0.486440003, 0.361550003), Vec2(0.500389993, 0.341690004), Vec2(0.500389993, 0.361660004), Vec2(0.486440003, 0.361550003), Vec2(0.486429989, 0.341670007), Vec2(0.514370024, 0.34167999), Vec2(0.514360011, 0.361570001), Vec2(0.500389993, 0.361660004), Vec2(0.500389993, 0.341690004), Vec2(0.514360011, 0.361570001), Vec2(0.514310002, 0.381350011), Vec2(0.500389993, 0.38150999), Vec2(0.500389993, 0.361660004), Vec2(0.528249979, 0.36135), Vec2(0.528159976, 0.380919993), Vec2(0.514310002, 0.381350011), Vec2(0.514360011, 0.361570001), Vec2(0.52828002, 0.341670007), Vec2(0.528249979, 0.36135), Vec2(0.514360011, 0.361570001), Vec2(0.514370024, 0.34167999), Vec2(0.514310002, 0.381350011), Vec2(0.514259994, 0.400929987), Vec2(0.500389993, 0.401169986), Vec2(0.500389993, 0.38150999), Vec2(0.514259994, 0.400929987), Vec2(0.51424998, 0.420240015), Vec2(0.500389993, 0.420549989), Vec2(0.500389993, 0.401169986), Vec2(0.528069973, 0.400290012), Vec2(0.528020024, 0.419380009), Vec2(0.51424998, 0.420240015), Vec2(0.514259994, 0.400929987), Vec2(0.528159976, 0.380919993), Vec2(0.528069973, 0.400290012), Vec2(0.514259994, 0.400929987), Vec2(0.514310002, 0.381350011), Vec2(0.541880012, 0.380290002), Vec2(0.541719973, 0.399340004), Vec2(0.528069973, 0.400290012), Vec2(0.528159976, 0.380919993), Vec2(0.541719973, 0.399340004), Vec2(0.54163003, 0.418099999), Vec2(0.528020024, 0.419380009), Vec2(0.528069973, 0.400290012), Vec2(0.555180013, 0.398220003), Vec2(0.55497998, 0.41655001), Vec2(0.54163003, 0.418099999), Vec2(0.541719973, 0.399340004), Vec2(0.555419981, 0.379559994), Vec2(0.555180013, 0.398220003), Vec2(0.541719973, 0.399340004), Vec2(0.541880012, 0.380290002), Vec2(0.542050004, 0.341659993), Vec2(0.542010009, 0.361030012), Vec2(0.528249979, 0.36135), Vec2(0.52828002, 0.341670007), Vec2(0.542010009, 0.361030012), Vec2(0.541880012, 0.380290002), Vec2(0.528159976, 0.380919993), Vec2(0.528249979, 0.36135), Vec2(0.555599988, 0.360659987), Vec2(0.555419981, 0.379559994), Vec2(0.541880012, 0.380290002), Vec2(0.542010009, 0.361030012), Vec2(0.555649996, 0.341650009), Vec2(0.555599988, 0.360659987), Vec2(0.542010009, 0.361030012), Vec2(0.542050004, 0.341659993), Vec2(0.51424998, 0.420240015), Vec2(0.514299989, 0.439249992), Vec2(0.500389993, 0.439639986), Vec2(0.500389993, 0.420549989), Vec2(0.514299989, 0.439249992), Vec2(0.514469981, 0.457969993), Vec2(0.500389993, 0.458429992), Vec2(0.500389993, 0.439639986), Vec2(0.528110027, 0.438169986), Vec2(0.528419971, 0.456629992), Vec2(0.514469981, 0.457969993), Vec2(0.514299989, 0.439249992), Vec2(0.528020024, 0.419380009), Vec2(0.528110027, 0.438169986), Vec2(0.514299989, 0.439249992), Vec2(0.51424998, 0.420240015), Vec2(0.514469981, 0.457969993), Vec2(0.51481998, 0.476440012), Vec2(0.500389993, 0.476999998), Vec2(0.500389993, 0.458429992), Vec2(0.51481998, 0.476440012), Vec2(0.51542002, 0.494789988), Vec2(0.500389993, 0.49544999), Vec2(0.500389993, 0.476999998), Vec2(0.529079974, 0.474819988), Vec2(0.530219972, 0.492810011), Vec2(0.51542002, 0.494789988), Vec2(0.51481998, 0.476440012), Vec2(0.528419971, 0.456629992), Vec2(0.529079974, 0.474819988), Vec2(0.51481998, 0.476440012), Vec2(0.514469981, 0.457969993), Vec2(0.542089999, 0.454540014), Vec2(0.542980015, 0.472220004), Vec2(0.529079974, 0.474819988), Vec2(0.528419971, 0.456629992), Vec2(0.542980015, 0.472220004), Vec2(0.544579983, 0.489589989), Vec2(0.530219972, 0.492810011), Vec2(0.529079974, 0.474819988), Vec2(0.556349993, 0.468840003), Vec2(0.558290005, 0.485320002), Vec2(0.544579983, 0.489589989), Vec2(0.542980015, 0.472220004), Vec2(0.555329978, 0.451889992), Vec2(0.556349993, 0.468840003), Vec2(0.542980015, 0.472220004), Vec2(0.542089999, 0.454540014), Vec2(0.54163003, 0.418099999), Vec2(0.541700006, 0.436500013), Vec2(0.528110027, 0.438169986), Vec2(0.528020024, 0.419380009), Vec2(0.541700006, 0.436500013), Vec2(0.542089999, 0.454540014), Vec2(0.528419971, 0.456629992), Vec2(0.528110027, 0.438169986), Vec2(0.554970026, 0.434450001), Vec2(0.555329978, 0.451889992), Vec2(0.542089999, 0.454540014), Vec2(0.541700006, 0.436500013), Vec2(0.55497998, 0.41655001), Vec2(0.554970026, 0.434450001), Vec2(0.541700006, 0.436500013), Vec2(0.54163003, 0.418099999), Vec2(0.568040013, 0.414950013), Vec2(0.56783998, 0.43226999), Vec2(0.554970026, 0.434450001), Vec2(0.55497998, 0.41655001), Vec2(0.56783998, 0.43226999), Vec2(0.568040013, 0.44896999), Vec2(0.555329978, 0.451889992), Vec2(0.554970026, 0.434450001), Vec2(0.58029002, 0.430319995), Vec2(0.580110013, 0.446209997), Vec2(0.568040013, 0.44896999), Vec2(0.56783998, 0.43226999), Vec2(0.58081001, 0.41358), Vec2(0.58029002, 0.430319995), Vec2(0.56783998, 0.43226999), Vec2(0.568040013, 0.414950013), Vec2(0.568040013, 0.44896999), Vec2(0.568989992, 0.464980006), Vec2(0.556349993, 0.468840003), Vec2(0.555329978, 0.451889992), Vec2(0.568989992, 0.464980006), Vec2(0.571099997, 0.480280012), Vec2(0.558290005, 0.485320002), Vec2(0.556349993, 0.468840003), Vec2(0.580709994, 0.461080015), Vec2(0.582710028, 0.474830002), Vec2(0.571099997, 0.480280012), Vec2(0.568989992, 0.464980006), Vec2(0.580110013, 0.446209997), Vec2(0.580709994, 0.461080015), Vec2(0.568989992, 0.464980006), Vec2(0.568040013, 0.44896999), Vec2(0.591530025, 0.444249988), Vec2(0.591300011, 0.457899988), Vec2(0.580709994, 0.461080015), Vec2(0.580110013, 0.446209997), Vec2(0.591300011, 0.457899988), Vec2(0.592630029, 0.469500005), Vec2(0.582710028, 0.474830002), Vec2(0.580709994, 0.461080015), Vec2(0.600619972, 0.456800014), Vec2(0.599250019, 0.465579987), Vec2(0.592630029, 0.469500005), Vec2(0.591300011, 0.457899988), Vec2(0.602400005, 0.443830013), Vec2(0.600619972, 0.456800014), Vec2(0.591300011, 0.457899988), Vec2(0.591530025, 0.444249988), Vec2(0.593330026, 0.412739992), Vec2(0.59236002, 0.429049999), Vec2(0.58029002, 0.430319995), Vec2(0.58081001, 0.41358), Vec2(0.59236002, 0.429049999), Vec2(0.591530025, 0.444249988), Vec2(0.580110013, 0.446209997), Vec2(0.58029002, 0.430319995), Vec2(0.604139984, 0.428909987), Vec2(0.602400005, 0.443830013), Vec2(0.591530025, 0.444249988), Vec2(0.59236002, 0.429049999), Vec2(0.605679989, 0.412710011), Vec2(0.604139984, 0.428909987), Vec2(0.59236002, 0.429049999), Vec2(0.593330026, 0.412739992), Vec2(0.569060028, 0.341659993), Vec2(0.569000006, 0.360320002), Vec2(0.555599988, 0.360659987), Vec2(0.555649996, 0.341650009), Vec2(0.569000006, 0.360320002), Vec2(0.568759978, 0.378839999), Vec2(0.555419981, 0.379559994), Vec2(0.555599988, 0.360659987), Vec2(0.582220018, 0.360040009), Vec2(0.581900001, 0.378259987), Vec2(0.568759978, 0.378839999), Vec2(0.569000006, 0.360320002), Vec2(0.582300007, 0.34167999), Vec2(0.582220018, 0.360040009), Vec2(0.569000006, 0.360320002), Vec2(0.569060028, 0.341659993), Vec2(0.568759978, 0.378839999), Vec2(0.568400025, 0.397100002), Vec2(0.555180013, 0.398220003), Vec2(0.555419981, 0.379559994), Vec2(0.568400025, 0.397100002), Vec2(0.568040013, 0.414950013), Vec2(0.55497998, 0.41655001), Vec2(0.555180013, 0.398220003), Vec2(0.581399977, 0.396160007), Vec2(0.58081001, 0.41358), Vec2(0.568040013, 0.414950013), Vec2(0.568400025, 0.397100002), Vec2(0.581900001, 0.378259987), Vec2(0.581399977, 0.396160007), Vec2(0.568400025, 0.397100002), Vec2(0.568759978, 0.378839999), Vec2(0.594889998, 0.377929986), Vec2(0.594210029, 0.395610005), Vec2(0.581399977, 0.396160007), Vec2(0.581900001, 0.378259987), Vec2(0.594210029, 0.395610005), Vec2(0.593330026, 0.412739992), Vec2(0.58081001, 0.41358), Vec2(0.581399977, 0.396160007), Vec2(0.60690999, 0.395639986), Vec2(0.605679989, 0.412710011), Vec2(0.593330026, 0.412739992), Vec2(0.594210029, 0.395610005), Vec2(0.60781002, 0.37797001), Vec2(0.60690999, 0.395639986), Vec2(0.594210029, 0.395610005), Vec2(0.594889998, 0.377929986), Vec2(0.595399976, 0.341699988), Vec2(0.595300019, 0.359899998), Vec2(0.582220018, 0.360040009), Vec2(0.582300007, 0.34167999), Vec2(0.595300019, 0.359899998), Vec2(0.594889998, 0.377929986), Vec2(0.581900001, 0.378259987), Vec2(0.582220018, 0.360040009), Vec2(0.608319998, 0.359939992), Vec2(0.60781002, 0.37797001), Vec2(0.594889998, 0.377929986), Vec2(0.595300019, 0.359899998), Vec2(0.608460009, 0.341729999), Vec2(0.608319998, 0.359939992), Vec2(0.595300019, 0.359899998), Vec2(0.595399976, 0.341699988), Vec2(0.515349984, 0.188010007), Vec2(0.514750004, 0.20645), Vec2(0.500389993, 0.205939993), Vec2(0.500389993, 0.187380001), Vec2(0.514750004, 0.20645), Vec2(0.514400005, 0.225030005), Vec2(0.500389993, 0.224610001), Vec2(0.500389993, 0.205939993), Vec2(0.528930008, 0.208079994), Vec2(0.528270006, 0.226349995), Vec2(0.514400005, 0.225030005), Vec2(0.514750004, 0.20645), Vec2(0.530099988, 0.190019995), Vec2(0.528930008, 0.208079994), Vec2(0.514750004, 0.20645), Vec2(0.515349984, 0.188010007), Vec2(0.514400005, 0.225030005), Vec2(0.514230013, 0.243839994), Vec2(0.500389993, 0.243509993), Vec2(0.500389993, 0.224610001), Vec2(0.514230013, 0.243839994), Vec2(0.514190018, 0.26293999), Vec2(0.500389993, 0.26267001), Vec2(0.500389993, 0.243509993), Vec2(0.527970016, 0.244910002), Vec2(0.527899981, 0.263770014), Vec2(0.514190018, 0.26293999), Vec2(0.514230013, 0.243839994), Vec2(0.528270006, 0.226349995), Vec2(0.527970016, 0.244910002), Vec2(0.514230013, 0.243839994), Vec2(0.514400005, 0.225030005), Vec2(0.541869998, 0.22845), Vec2(0.541490018, 0.246560007), Vec2(0.527970016, 0.244910002), Vec2(0.528270006, 0.226349995), Vec2(0.541490018, 0.246560007), Vec2(0.54144001, 0.265049994), Vec2(0.527899981, 0.263770014), Vec2(0.527970016, 0.244910002), Vec2(0.554700017, 0.248630002), Vec2(0.554740012, 0.266600013), Vec2(0.54144001, 0.265049994), Vec2(0.541490018, 0.246560007), Vec2(0.555060029, 0.231140003), Vec2(0.554700017, 0.248630002), Vec2(0.541490018, 0.246560007), Vec2(0.541869998, 0.22845), Vec2(0.544420004, 0.193299994), Vec2(0.542779982, 0.210710004), Vec2(0.528930008, 0.208079994), Vec2(0.530099988, 0.190019995), Vec2(0.542779982, 0.210710004), Vec2(0.541869998, 0.22845), Vec2(0.528270006, 0.226349995), Vec2(0.528930008, 0.208079994), Vec2(0.556089997, 0.214139998), Vec2(0.555060029, 0.231140003), Vec2(0.541869998, 0.22845), Vec2(0.542779982, 0.210710004), Vec2(0.558099985, 0.19765), Vec2(0.556089997, 0.214139998), Vec2(0.542779982, 0.210710004), Vec2(0.544420004, 0.193299994), Vec2(0.514190018, 0.26293999), Vec2(0.514219999, 0.282319993), Vec2(0.500389993, 0.282130003), Vec2(0.500389993, 0.26267001), Vec2(0.514219999, 0.282319993), Vec2(0.514280021, 0.301959991), Vec2(0.500389993, 0.301829994), Vec2(0.500389993, 0.282130003), Vec2(0.527970016, 0.28294), Vec2(0.528100014, 0.302370012), Vec2(0.514280021, 0.301959991), Vec2(0.514219999, 0.282319993), Vec2(0.527899981, 0.263770014), Vec2(0.527970016, 0.28294), Vec2(0.514219999, 0.282319993), Vec2(0.514190018, 0.26293999), Vec2(0.514280021, 0.301959991), Vec2(0.514339983, 0.321770012), Vec2(0.500389993, 0.321709991), Vec2(0.500389993, 0.301829994), Vec2(0.514339983, 0.321770012), Vec2(0.514370024, 0.34167999), Vec2(0.500389993, 0.341690004), Vec2(0.500389993, 0.321709991), Vec2(0.528219998, 0.321969986), Vec2(0.52828002, 0.341670007), Vec2(0.514370024, 0.34167999), Vec2(0.514339983, 0.321770012), Vec2(0.528100014, 0.302370012), Vec2(0.528219998, 0.321969986), Vec2(0.514339983, 0.321770012), Vec2(0.514280021, 0.301959991), Vec2(0.541779995, 0.302980006), Vec2(0.541960001, 0.322270006), Vec2(0.528219998, 0.321969986), Vec2(0.528100014, 0.302370012), Vec2(0.541960001, 0.322270006), Vec2(0.542050004, 0.341659993), Vec2(0.52828002, 0.341670007), Vec2(0.528219998, 0.321969986), Vec2(0.555530012, 0.322629988), Vec2(0.555649996, 0.341650009), Vec2(0.542050004, 0.341659993), Vec2(0.541960001, 0.322270006), Vec2(0.55528003, 0.303710014), Vec2(0.555530012, 0.322629988), Vec2(0.541960001, 0.322270006), Vec2(0.541779995, 0.302980006), Vec2(0.54144001, 0.265049994), Vec2(0.541580021, 0.283870012), Vec2(0.527970016, 0.28294), Vec2(0.527899981, 0.263770014), Vec2(0.541580021, 0.283870012), Vec2(0.541779995, 0.302980006), Vec2(0.528100014, 0.302370012), Vec2(0.527970016, 0.28294), Vec2(0.55497998, 0.284990013), Vec2(0.55528003, 0.303710014), Vec2(0.541779995, 0.302980006), Vec2(0.541580021, 0.283870012), Vec2(0.554740012, 0.266600013), Vec2(0.55497998, 0.284990013), Vec2(0.541580021, 0.283870012), Vec2(0.54144001, 0.265049994), Vec2(0.567749977, 0.268229991), Vec2(0.568159997, 0.286139995), Vec2(0.55497998, 0.284990013), Vec2(0.554740012, 0.266600013), Vec2(0.568159997, 0.286139995), Vec2(0.568579972, 0.304439992), Vec2(0.55528003, 0.303710014), Vec2(0.55497998, 0.284990013), Vec2(0.581120014, 0.287120014), Vec2(0.581700027, 0.305070013), Vec2(0.568579972, 0.304439992), Vec2(0.568159997, 0.286139995), Vec2(0.58047998, 0.269659996), Vec2(0.581120014, 0.287120014), Vec2(0.568159997, 0.286139995), Vec2(0.567749977, 0.268229991), Vec2(0.568579972, 0.304439992), Vec2(0.568910003, 0.32299), Vec2(0.555530012, 0.322629988), Vec2(0.55528003, 0.303710014), Vec2(0.568910003, 0.32299), Vec2(0.569060028, 0.341659993), Vec2(0.555649996, 0.341650009), Vec2(0.555530012, 0.322629988), Vec2(0.582109988, 0.323300004), Vec2(0.582300007, 0.34167999), Vec2(0.569060028, 0.341659993), Vec2(0.568910003, 0.32299), Vec2(0.581700027, 0.305070013), Vec2(0.582109988, 0.323300004), Vec2(0.568910003, 0.32299), Vec2(0.568579972, 0.304439992), Vec2(0.594669998, 0.305449992), Vec2(0.595189989, 0.323500007), Vec2(0.582109988, 0.323300004), Vec2(0.581700027, 0.305070013), Vec2(0.595189989, 0.323500007), Vec2(0.595399976, 0.341699988), Vec2(0.582300007, 0.34167999), Vec2(0.582109988, 0.323300004), Vec2(0.608200014, 0.323529989), Vec2(0.608460009, 0.341729999), Vec2(0.595399976, 0.341699988), Vec2(0.595189989, 0.323500007), Vec2(0.607569993, 0.305489987), Vec2(0.608200014, 0.323529989), Vec2(0.595189989, 0.323500007), Vec2(0.594669998, 0.305449992), Vec2(0.59296, 0.270579994), Vec2(0.593900025, 0.287739992), Vec2(0.581120014, 0.287120014), Vec2(0.58047998, 0.269659996), Vec2(0.593900025, 0.287739992), Vec2(0.594669998, 0.305449992), Vec2(0.581700027, 0.305070013), Vec2(0.581120014, 0.287120014), Vec2(0.606580019, 0.287800014), Vec2(0.607569993, 0.305489987), Vec2(0.594669998, 0.305449992), Vec2(0.593900025, 0.287739992), Vec2(0.605279982, 0.270709991), Vec2(0.606580019, 0.287800014), Vec2(0.593900025, 0.287739992), Vec2(0.59296, 0.270579994), Vec2(0.570869982, 0.202779993), Vec2(0.568690002, 0.21807), Vec2(0.556089997, 0.214139998), Vec2(0.558099985, 0.19765), Vec2(0.568690002, 0.21807), Vec2(0.567719996, 0.234109998), Vec2(0.555060029, 0.231140003), Vec2(0.556089997, 0.214139998), Vec2(0.580380023, 0.222039998), Vec2(0.579750001, 0.236929998), Vec2(0.567719996, 0.234109998), Vec2(0.568690002, 0.21807), Vec2(0.582449973, 0.208340004), Vec2(0.580380023, 0.222039998), Vec2(0.568690002, 0.21807), Vec2(0.570869982, 0.202779993), Vec2(0.567719996, 0.234109998), Vec2(0.567520022, 0.250849992), Vec2(0.554700017, 0.248630002), Vec2(0.555060029, 0.231140003), Vec2(0.567520022, 0.250849992), Vec2(0.567749977, 0.268229991), Vec2(0.554740012, 0.266600013), Vec2(0.554700017, 0.248630002), Vec2(0.579930007, 0.25286001), Vec2(0.58047998, 0.269659996), Vec2(0.567749977, 0.268229991), Vec2(0.567520022, 0.250849992), Vec2(0.579750001, 0.236929998), Vec2(0.579930007, 0.25286001), Vec2(0.567520022, 0.250849992), Vec2(0.567719996, 0.234109998), Vec2(0.591139972, 0.238989994), Vec2(0.591960013, 0.254220009), Vec2(0.579930007, 0.25286001), Vec2(0.579750001, 0.236929998), Vec2(0.591960013, 0.254220009), Vec2(0.59296, 0.270579994), Vec2(0.58047998, 0.269659996), Vec2(0.579930007, 0.25286001), Vec2(0.603709996, 0.254489988), Vec2(0.605279982, 0.270709991), Vec2(0.59296, 0.270579994), Vec2(0.591960013, 0.254220009), Vec2(0.601979971, 0.239529997), Vec2(0.603709996, 0.254489988), Vec2(0.591960013, 0.254220009), Vec2(0.591139972, 0.238989994), Vec2(0.592339993, 0.213760003), Vec2(0.590939999, 0.225309998), Vec2(0.580380023, 0.222039998), Vec2(0.582449973, 0.208340004), Vec2(0.590939999, 0.225309998), Vec2(0.591139972, 0.238989994), Vec2(0.579750001, 0.236929998), Vec2(0.580380023, 0.222039998), Vec2(0.600239992, 0.226530001), Vec2(0.601979971, 0.239529997), Vec2(0.591139972, 0.238989994), Vec2(0.590939999, 0.225309998), Vec2(0.598919988, 0.217739999), Vec2(0.600239992, 0.226530001), Vec2(0.590939999, 0.225309998), Vec2(0.592339993, 0.213760003), Vec2(0.604160011, 0.213080004), Vec2(0.609080017, 0.224439994), Vec2(0.600239992, 0.226530001), Vec2(0.598919988, 0.217739999), Vec2(0.609080017, 0.224439994), Vec2(0.612609982, 0.238089994), Vec2(0.601979971, 0.239529997), Vec2(0.600239992, 0.226530001), Vec2(0.618579984, 0.220070004), Vec2(0.623449981, 0.234990001), Vec2(0.612609982, 0.238089994), Vec2(0.609080017, 0.224439994), Vec2(0.612079978, 0.206560001), Vec2(0.618579984, 0.220070004), Vec2(0.609080017, 0.224439994), Vec2(0.604160011, 0.213080004), Vec2(0.612609982, 0.238089994), Vec2(0.615369976, 0.253399998), Vec2(0.603709996, 0.254489988), Vec2(0.601979971, 0.239529997), Vec2(0.615369976, 0.253399998), Vec2(0.617569983, 0.269879997), Vec2(0.605279982, 0.270709991), Vec2(0.603709996, 0.254489988), Vec2(0.627149999, 0.251120001), Vec2(0.629980028, 0.268189996), Vec2(0.617569983, 0.269879997), Vec2(0.615369976, 0.253399998), Vec2(0.623449981, 0.234990001), Vec2(0.627149999, 0.251120001), Vec2(0.615369976, 0.253399998), Vec2(0.612609982, 0.238089994), Vec2(0.634760022, 0.230949998), Vec2(0.639219999, 0.248050004), Vec2(0.627149999, 0.251120001), Vec2(0.623449981, 0.234990001), Vec2(0.639219999, 0.248050004), Vec2(0.642620027, 0.265899986), Vec2(0.629980028, 0.268189996), Vec2(0.627149999, 0.251120001), Vec2(0.651730001, 0.244619995), Vec2(0.655610025, 0.263289988), Vec2(0.642620027, 0.265899986), Vec2(0.639219999, 0.248050004), Vec2(0.646690011, 0.226569995), Vec2(0.651730001, 0.244619995), Vec2(0.639219999, 0.248050004), Vec2(0.634760022, 0.230949998), Vec2(0.621510029, 0.199560001), Vec2(0.628970027, 0.214750007), Vec2(0.618579984, 0.220070004), Vec2(0.612079978, 0.206560001), Vec2(0.628970027, 0.214750007), Vec2(0.634760022, 0.230949998), Vec2(0.623449981, 0.234990001), Vec2(0.618579984, 0.220070004), Vec2(0.640259981, 0.209220007), Vec2(0.646690011, 0.226569995), Vec2(0.634760022, 0.230949998), Vec2(0.628970027, 0.214750007), Vec2(0.632189989, 0.192650005), Vec2(0.640259981, 0.209220007), Vec2(0.628970027, 0.214750007), Vec2(0.621510029, 0.199560001), Vec2(0.617569983, 0.269879997), Vec2(0.619279981, 0.287209988), Vec2(0.606580019, 0.287800014), Vec2(0.605279982, 0.270709991), Vec2(0.619279981, 0.287209988), Vec2(0.620509982, 0.305099994), Vec2(0.607569993, 0.305489987), Vec2(0.606580019, 0.287800014), Vec2(0.632099986, 0.286000013), Vec2(0.633580029, 0.304329991), Vec2(0.620509982, 0.305099994), Vec2(0.619279981, 0.287209988), Vec2(0.629980028, 0.268189996), Vec2(0.632099986, 0.286000013), Vec2(0.619279981, 0.287209988), Vec2(0.617569983, 0.269879997), Vec2(0.620509982, 0.305099994), Vec2(0.621259987, 0.323350012), Vec2(0.608200014, 0.323529989), Vec2(0.607569993, 0.305489987), Vec2(0.621259987, 0.323350012), Vec2(0.621559978, 0.341769993), Vec2(0.608460009, 0.341729999), Vec2(0.608200014, 0.323529989), Vec2(0.63448, 0.32299), Vec2(0.634819984, 0.341800004), Vec2(0.621559978, 0.341769993), Vec2(0.621259987, 0.323350012), Vec2(0.633580029, 0.304329991), Vec2(0.63448, 0.32299), Vec2(0.621259987, 0.323350012), Vec2(0.620509982, 0.305099994), Vec2(0.646889985, 0.303279996), Vec2(0.647930026, 0.322479993), Vec2(0.63448, 0.32299), Vec2(0.633580029, 0.304329991), Vec2(0.647930026, 0.322479993), Vec2(0.648320019, 0.341820002), Vec2(0.634819984, 0.341800004), Vec2(0.63448, 0.32299), Vec2(0.661679983, 0.321880013), Vec2(0.662109971, 0.341839999), Vec2(0.648320019, 0.341820002), Vec2(0.647930026, 0.322479993), Vec2(0.660489976, 0.302049994), Vec2(0.661679983, 0.321880013), Vec2(0.647930026, 0.322479993), Vec2(0.646889985, 0.303279996), Vec2(0.642620027, 0.265899986), Vec2(0.645139992, 0.284359992), Vec2(0.632099986, 0.286000013), Vec2(0.629980028, 0.268189996), Vec2(0.645139992, 0.284359992), Vec2(0.646889985, 0.303279996), Vec2(0.633580029, 0.304329991), Vec2(0.632099986, 0.286000013), Vec2(0.658490002, 0.282469988), Vec2(0.660489976, 0.302049994), Vec2(0.646889985, 0.303279996), Vec2(0.645139992, 0.284359992), Vec2(0.655610025, 0.263289988), Vec2(0.658490002, 0.282469988), Vec2(0.645139992, 0.284359992), Vec2(0.642620027, 0.265899986), Vec2(0.668990016, 0.260639995), Vec2(0.672190011, 0.280519992), Vec2(0.658490002, 0.282469988), Vec2(0.655610025, 0.263289988), Vec2(0.672190011, 0.280519992), Vec2(0.674409986, 0.300760001), Vec2(0.660489976, 0.302049994), Vec2(0.658490002, 0.282469988), Vec2(0.686230004, 0.278679997), Vec2(0.688660026, 0.299529999), Vec2(0.674409986, 0.300760001), Vec2(0.672190011, 0.280519992), Vec2(0.682789981, 0.258159995), Vec2(0.686230004, 0.278679997), Vec2(0.672190011, 0.280519992), Vec2(0.668990016, 0.260639995), Vec2(0.674409986, 0.300760001), Vec2(0.675740004, 0.321240008), Vec2(0.661679983, 0.321880013), Vec2(0.660489976, 0.302049994), Vec2(0.675740004, 0.321240008), Vec2(0.67622, 0.341839999), Vec2(0.662109971, 0.341839999), Vec2(0.661679983, 0.321880013), Vec2(0.690119982, 0.320630014), Vec2(0.690649986, 0.341839999), Vec2(0.67622, 0.341839999), Vec2(0.675740004, 0.321240008), Vec2(0.688660026, 0.299529999), Vec2(0.690119982, 0.320630014), Vec2(0.675740004, 0.321240008), Vec2(0.674409986, 0.300760001), Vec2(0.703209996, 0.29846999), Vec2(0.704789996, 0.320089996), Vec2(0.690119982, 0.320630014), Vec2(0.688660026, 0.299529999), Vec2(0.704789996, 0.320089996), Vec2(0.705359995, 0.341829985), Vec2(0.690649986, 0.341839999), Vec2(0.690119982, 0.320630014), Vec2(0.719709992, 0.319680005), Vec2(0.720319986, 0.341809988), Vec2(0.705359995, 0.341829985), Vec2(0.704789996, 0.320089996), Vec2(0.718029976, 0.297670007), Vec2(0.719709992, 0.319680005), Vec2(0.704789996, 0.320089996), Vec2(0.703209996, 0.29846999), Vec2(0.696969986, 0.256069988), Vec2(0.700609982, 0.277099997), Vec2(0.686230004, 0.278679997), Vec2(0.682789981, 0.258159995), Vec2(0.700609982, 0.277099997), Vec2(0.703209996, 0.29846999), Vec2(0.688660026, 0.299529999), Vec2(0.686230004, 0.278679997), Vec2(0.71529001, 0.275920004), Vec2(0.718029976, 0.297670007), Vec2(0.703209996, 0.29846999), Vec2(0.700609982, 0.277099997), Vec2(0.711520016, 0.254500002), Vec2(0.71529001, 0.275920004), Vec2(0.700609982, 0.277099997), Vec2(0.696969986, 0.256069988), Vec2(0.643999994, 0.186210006), Vec2(0.652450025, 0.203940004), Vec2(0.640259981, 0.209220007), Vec2(0.632189989, 0.192650005), Vec2(0.652450025, 0.203940004), Vec2(0.659280002, 0.222289994), Vec2(0.646690011, 0.226569995), Vec2(0.640259981, 0.209220007), Vec2(0.665480018, 0.199249998), Vec2(0.672529995, 0.218419999), Vec2(0.659280002, 0.222289994), Vec2(0.652450025, 0.203940004), Vec2(0.656889975, 0.180539995), Vec2(0.665480018, 0.199249998), Vec2(0.652450025, 0.203940004), Vec2(0.643999994, 0.186210006), Vec2(0.659280002, 0.222289994), Vec2(0.664730012, 0.2412), Vec2(0.651730001, 0.244619995), Vec2(0.646690011, 0.226569995), Vec2(0.664730012, 0.2412), Vec2(0.668990016, 0.260639995), Vec2(0.655610025, 0.263289988), Vec2(0.651730001, 0.244619995), Vec2(0.678250015, 0.238059998), Vec2(0.682789981, 0.258159995), Vec2(0.668990016, 0.260639995), Vec2(0.664730012, 0.2412), Vec2(0.672529995, 0.218419999), Vec2(0.678250015, 0.238059998), Vec2(0.664730012, 0.2412), Vec2(0.659280002, 0.222289994), Vec2(0.686399996, 0.215200007), Vec2(0.692260027, 0.235430002), Vec2(0.678250015, 0.238059998), Vec2(0.672529995, 0.218419999), Vec2(0.692260027, 0.235430002), Vec2(0.696969986, 0.256069988), Vec2(0.682789981, 0.258159995), Vec2(0.678250015, 0.238059998), Vec2(0.706700027, 0.233459994), Vec2(0.711520016, 0.254500002), Vec2(0.696969986, 0.256069988), Vec2(0.692260027, 0.235430002), Vec2(0.700839996, 0.212830007), Vec2(0.706700027, 0.233459994), Vec2(0.692260027, 0.235430002), Vec2(0.686399996, 0.215200007), Vec2(0.670799971, 0.175909996), Vec2(0.679310024, 0.195380002), Vec2(0.665480018, 0.199249998), Vec2(0.656889975, 0.180539995), Vec2(0.679310024, 0.195380002), Vec2(0.686399996, 0.215200007), Vec2(0.672529995, 0.218419999), Vec2(0.665480018, 0.199249998), Vec2(0.693859994, 0.192540005), Vec2(0.700839996, 0.212830007), Vec2(0.686399996, 0.215200007), Vec2(0.679310024, 0.195380002), Vec2(0.685660005, 0.172519997), Vec2(0.693859994, 0.192540005), Vec2(0.679310024, 0.195380002), Vec2(0.670799971, 0.175909996), Vec2(0.621559978, 0.341769993), Vec2(0.621389985, 0.360179991), Vec2(0.608319998, 0.359939992), Vec2(0.608460009, 0.341729999), Vec2(0.621389985, 0.360179991), Vec2(0.62075001, 0.378430009), Vec2(0.60781002, 0.37797001), Vec2(0.608319998, 0.359939992), Vec2(0.634609997, 0.360610008), Vec2(0.633840024, 0.379260004), Vec2(0.62075001, 0.378430009), Vec2(0.621389985, 0.360179991), Vec2(0.634819984, 0.341800004), Vec2(0.634609997, 0.360610008), Vec2(0.621389985, 0.360179991), Vec2(0.621559978, 0.341769993), Vec2(0.62075001, 0.378430009), Vec2(0.619620025, 0.396319985), Vec2(0.60690999, 0.395639986), Vec2(0.60781002, 0.37797001), Vec2(0.619620025, 0.396319985), Vec2(0.617980003, 0.413639992), Vec2(0.605679989, 0.412710011), Vec2(0.60690999, 0.395639986), Vec2(0.632449985, 0.397599995), Vec2(0.630400002, 0.415399998), Vec2(0.617980003, 0.413639992), Vec2(0.619620025, 0.396319985), Vec2(0.633840024, 0.379260004), Vec2(0.632449985, 0.397599995), Vec2(0.619620025, 0.396319985), Vec2(0.62075001, 0.378430009), Vec2(0.64714998, 0.380369991), Vec2(0.645500004, 0.399289995), Vec2(0.632449985, 0.397599995), Vec2(0.633840024, 0.379260004), Vec2(0.645500004, 0.399289995), Vec2(0.643050015, 0.417750001), Vec2(0.630400002, 0.415399998), Vec2(0.632449985, 0.397599995), Vec2(0.658850014, 0.40121001), Vec2(0.656040013, 0.420399994), Vec2(0.643050015, 0.417750001), Vec2(0.645500004, 0.399289995), Vec2(0.660749972, 0.381630003), Vec2(0.658850014, 0.40121001), Vec2(0.645500004, 0.399289995), Vec2(0.64714998, 0.380369991), Vec2(0.648320019, 0.341820002), Vec2(0.648069978, 0.36116001), Vec2(0.634609997, 0.360610008), Vec2(0.634819984, 0.341800004), Vec2(0.648069978, 0.36116001), Vec2(0.64714998, 0.380369991), Vec2(0.633840024, 0.379260004), Vec2(0.634609997, 0.360610008), Vec2(0.661809981, 0.361799985), Vec2(0.660749972, 0.381630003), Vec2(0.64714998, 0.380369991), Vec2(0.648069978, 0.36116001), Vec2(0.662109971, 0.341839999), Vec2(0.661809981, 0.361799985), Vec2(0.648069978, 0.36116001), Vec2(0.648320019, 0.341820002), Vec2(0.617980003, 0.413639992), Vec2(0.615819991, 0.430110008), Vec2(0.604139984, 0.428909987), Vec2(0.605679989, 0.412710011), Vec2(0.615819991, 0.430110008), Vec2(0.613049984, 0.445389986), Vec2(0.602400005, 0.443830013), Vec2(0.604139984, 0.428909987), Vec2(0.627600014, 0.432469994), Vec2(0.623899996, 0.448570013), Vec2(0.613049984, 0.445389986), Vec2(0.615819991, 0.430110008), Vec2(0.630400002, 0.415399998), Vec2(0.627600014, 0.432469994), Vec2(0.615819991, 0.430110008), Vec2(0.617980003, 0.413639992), Vec2(0.613049984, 0.445389986), Vec2(0.60947001, 0.458999991), Vec2(0.600619972, 0.456800014), Vec2(0.602400005, 0.443830013), Vec2(0.60947001, 0.458999991), Vec2(0.604449987, 0.47025001), Vec2(0.599250019, 0.465579987), Vec2(0.600619972, 0.456800014), Vec2(0.618969977, 0.463429987), Vec2(0.612360001, 0.476819992), Vec2(0.604449987, 0.47025001), Vec2(0.60947001, 0.458999991), Vec2(0.623899996, 0.448570013), Vec2(0.618969977, 0.463429987), Vec2(0.60947001, 0.458999991), Vec2(0.613049984, 0.445389986), Vec2(0.635219991, 0.452659994), Vec2(0.629369974, 0.468800008), Vec2(0.618969977, 0.463429987), Vec2(0.623899996, 0.448570013), Vec2(0.629369974, 0.468800008), Vec2(0.621800005, 0.483859986), Vec2(0.612360001, 0.476819992), Vec2(0.618969977, 0.463429987), Vec2(0.640680015, 0.474359989), Vec2(0.632510006, 0.490810007), Vec2(0.621800005, 0.483859986), Vec2(0.629369974, 0.468800008), Vec2(0.64714998, 0.457069993), Vec2(0.640680015, 0.474359989), Vec2(0.629369974, 0.468800008), Vec2(0.635219991, 0.452659994), Vec2(0.643050015, 0.417750001), Vec2(0.639680028, 0.435589999), Vec2(0.627600014, 0.432469994), Vec2(0.630400002, 0.415399998), Vec2(0.639680028, 0.435589999), Vec2(0.635219991, 0.452659994), Vec2(0.623899996, 0.448570013), Vec2(0.627600014, 0.432469994), Vec2(0.652199984, 0.439049989), Vec2(0.64714998, 0.457069993), Vec2(0.635219991, 0.452659994), Vec2(0.639680028, 0.435589999), Vec2(0.656040013, 0.420399994), Vec2(0.652199984, 0.439049989), Vec2(0.639680028, 0.435589999), Vec2(0.643050015, 0.417750001), Vec2(0.669430017, 0.42306), Vec2(0.665210009, 0.442490011), Vec2(0.652199984, 0.439049989), Vec2(0.656040013, 0.420399994), Vec2(0.665210009, 0.442490011), Vec2(0.659759998, 0.461369991), Vec2(0.64714998, 0.457069993), Vec2(0.652199984, 0.439049989), Vec2(0.678749979, 0.44562), Vec2(0.673039973, 0.465229988), Vec2(0.659759998, 0.461369991), Vec2(0.665210009, 0.442490011), Vec2(0.683239996, 0.425529987), Vec2(0.678749979, 0.44562), Vec2(0.665210009, 0.442490011), Vec2(0.669430017, 0.42306), Vec2(0.659759998, 0.461369991), Vec2(0.652890027, 0.479649991), Vec2(0.640680015, 0.474359989), Vec2(0.64714998, 0.457069993), Vec2(0.652890027, 0.479649991), Vec2(0.644360006, 0.497269988), Vec2(0.632510006, 0.490810007), Vec2(0.640680015, 0.474359989), Vec2(0.665960014, 0.484349996), Vec2(0.657299995, 0.502950013), Vec2(0.644360006, 0.497269988), Vec2(0.652890027, 0.479649991), Vec2(0.673039973, 0.465229988), Vec2(0.665960014, 0.484349996), Vec2(0.652890027, 0.479649991), Vec2(0.659759998, 0.461369991), Vec2(0.686940014, 0.468430012), Vec2(0.679830015, 0.488200009), Vec2(0.665960014, 0.484349996), Vec2(0.673039973, 0.465229988), Vec2(0.679830015, 0.488200009), Vec2(0.671270013, 0.507589996), Vec2(0.657299995, 0.502950013), Vec2(0.665960014, 0.484349996), Vec2(0.694429994, 0.491030008), Vec2(0.686190009, 0.51098001), Vec2(0.671270013, 0.507589996), Vec2(0.679830015, 0.488200009), Vec2(0.701409996, 0.470789999), Vec2(0.694429994, 0.491030008), Vec2(0.679830015, 0.488200009), Vec2(0.686940014, 0.468430012), Vec2(0.697440028, 0.42761001), Vec2(0.692780018, 0.448240012), Vec2(0.678749979, 0.44562), Vec2(0.683239996, 0.425529987), Vec2(0.692780018, 0.448240012), Vec2(0.686940014, 0.468430012), Vec2(0.673039973, 0.465229988), Vec2(0.678749979, 0.44562), Vec2(0.707249999, 0.45017001), Vec2(0.701409996, 0.470789999), Vec2(0.686940014, 0.468430012), Vec2(0.692780018, 0.448240012), Vec2(0.712010026, 0.429140002), Vec2(0.707249999, 0.45017001), Vec2(0.692780018, 0.448240012), Vec2(0.697440028, 0.42761001), Vec2(0.67622, 0.341839999), Vec2(0.675880015, 0.36243999), Vec2(0.661809981, 0.361799985), Vec2(0.662109971, 0.341839999), Vec2(0.675880015, 0.36243999), Vec2(0.674679995, 0.382930011), Vec2(0.660749972, 0.381630003), Vec2(0.661809981, 0.361799985), Vec2(0.690259993, 0.363059998), Vec2(0.688929975, 0.384149998), Vec2(0.674679995, 0.382930011), Vec2(0.675880015, 0.36243999), Vec2(0.690649986, 0.341839999), Vec2(0.690259993, 0.363059998), Vec2(0.675880015, 0.36243999), Vec2(0.67622, 0.341839999), Vec2(0.674679995, 0.382930011), Vec2(0.672550023, 0.403180003), Vec2(0.658850014, 0.40121001), Vec2(0.660749972, 0.381630003), Vec2(0.672550023, 0.403180003), Vec2(0.669430017, 0.42306), Vec2(0.656040013, 0.420399994), Vec2(0.658850014, 0.40121001), Vec2(0.686609983, 0.405010015), Vec2(0.683239996, 0.425529987), Vec2(0.669430017, 0.42306), Vec2(0.672550023, 0.403180003), Vec2(0.688929975, 0.384149998), Vec2(0.686609983, 0.405010015), Vec2(0.672550023, 0.403180003), Vec2(0.674679995, 0.382930011), Vec2(0.703480005, 0.38519001), Vec2(0.700999975, 0.406569988), Vec2(0.686609983, 0.405010015), Vec2(0.688929975, 0.384149998), Vec2(0.700999975, 0.406569988), Vec2(0.697440028, 0.42761001), Vec2(0.683239996, 0.425529987), Vec2(0.686609983, 0.405010015), Vec2(0.715690017, 0.40772), Vec2(0.712010026, 0.429140002), Vec2(0.697440028, 0.42761001), Vec2(0.700999975, 0.406569988), Vec2(0.718309999, 0.385960013), Vec2(0.715690017, 0.40772), Vec2(0.700999975, 0.406569988), Vec2(0.703480005, 0.38519001), Vec2(0.705359995, 0.341829985), Vec2(0.704930007, 0.363570005), Vec2(0.690259993, 0.363059998), Vec2(0.690649986, 0.341839999), Vec2(0.704930007, 0.363570005), Vec2(0.703480005, 0.38519001), Vec2(0.688929975, 0.384149998), Vec2(0.690259993, 0.363059998), Vec2(0.719850004, 0.363950014), Vec2(0.718309999, 0.385960013), Vec2(0.703480005, 0.38519001), Vec2(0.704930007, 0.363570005), Vec2(0.720319986, 0.341809988), Vec2(0.719850004, 0.363950014), Vec2(0.704930007, 0.363570005), Vec2(0.705359995, 0.341829985), Vec2(0.735469997, 0.341789991), Vec2(0.734979987, 0.364160001), Vec2(0.719850004, 0.363950014), Vec2(0.720319986, 0.341809988), Vec2(0.734979987, 0.364160001), Vec2(0.733349979, 0.386409998), Vec2(0.718309999, 0.385960013), Vec2(0.719850004, 0.363950014), Vec2(0.750240028, 0.364219993), Vec2(0.748560011, 0.386559993), Vec2(0.733349979, 0.386409998), Vec2(0.734979987, 0.364160001), Vec2(0.750760019, 0.34176001), Vec2(0.750240028, 0.364219993), Vec2(0.734979987, 0.364160001), Vec2(0.735469997, 0.341789991), Vec2(0.733349979, 0.386409998), Vec2(0.730639994, 0.408399999), Vec2(0.715690017, 0.40772), Vec2(0.718309999, 0.385960013), Vec2(0.730639994, 0.408399999), Vec2(0.726880014, 0.430059999), Vec2(0.712010026, 0.429140002), Vec2(0.715690017, 0.40772), Vec2(0.745779991, 0.408650011), Vec2(0.741980016, 0.43039), Vec2(0.726880014, 0.430059999), Vec2(0.730639994, 0.408399999), Vec2(0.748560011, 0.386559993), Vec2(0.745779991, 0.408650011), Vec2(0.730639994, 0.408399999), Vec2(0.733349979, 0.386409998), Vec2(0.763859987, 0.386510015), Vec2(0.761030018, 0.408580005), Vec2(0.745779991, 0.408650011), Vec2(0.748560011, 0.386559993), Vec2(0.761030018, 0.408580005), Vec2(0.757200003, 0.430269986), Vec2(0.741980016, 0.43039), Vec2(0.745779991, 0.408650011), Vec2(0.776319981, 0.408340007), Vec2(0.772440016, 0.429879993), Vec2(0.757200003, 0.430269986), Vec2(0.761030018, 0.408580005), Vec2(0.779209971, 0.386370003), Vec2(0.776319981, 0.408340007), Vec2(0.761030018, 0.408580005), Vec2(0.763859987, 0.386510015), Vec2(0.766129971, 0.341720015), Vec2(0.765590012, 0.364190012), Vec2(0.750240028, 0.364219993), Vec2(0.750760019, 0.34176001), Vec2(0.765590012, 0.364190012), Vec2(0.763859987, 0.386510015), Vec2(0.748560011, 0.386559993), Vec2(0.750240028, 0.364219993), Vec2(0.780990005, 0.364100009), Vec2(0.779209971, 0.386370003), Vec2(0.763859987, 0.386510015), Vec2(0.765590012, 0.364190012), Vec2(0.78154999, 0.341690004), Vec2(0.780990005, 0.364100009), Vec2(0.765590012, 0.364190012), Vec2(0.766129971, 0.341720015), Vec2(0.726880014, 0.430059999), Vec2(0.722109973, 0.451330006), Vec2(0.707249999, 0.45017001), Vec2(0.712010026, 0.429140002), Vec2(0.722109973, 0.451330006), Vec2(0.716369987, 0.472200006), Vec2(0.701409996, 0.470789999), Vec2(0.707249999, 0.45017001), Vec2(0.73724997, 0.451739997), Vec2(0.73168999, 0.472680002), Vec2(0.716369987, 0.472200006), Vec2(0.722109973, 0.451330006), Vec2(0.741980016, 0.43039), Vec2(0.73724997, 0.451739997), Vec2(0.722109973, 0.451330006), Vec2(0.726880014, 0.430059999), Vec2(0.716369987, 0.472200006), Vec2(0.709670007, 0.492729992), Vec2(0.694429994, 0.491030008), Vec2(0.701409996, 0.470789999), Vec2(0.709670007, 0.492729992), Vec2(0.701950014, 0.513010025), Vec2(0.686190009, 0.51098001), Vec2(0.694429994, 0.491030008), Vec2(0.725380003, 0.493279994), Vec2(0.718360007, 0.513629973), Vec2(0.701950014, 0.513010025), Vec2(0.709670007, 0.492729992), Vec2(0.73168999, 0.472680002), Vec2(0.725380003, 0.493279994), Vec2(0.709670007, 0.492729992), Vec2(0.716369987, 0.472200006), Vec2(0.747179985, 0.472339988), Vec2(0.741330028, 0.492760003), Vec2(0.725380003, 0.493279994), Vec2(0.73168999, 0.472680002), Vec2(0.741330028, 0.492760003), Vec2(0.73514998, 0.512889981), Vec2(0.718360007, 0.513629973), Vec2(0.725380003, 0.493279994), Vec2(0.757239997, 0.491329998), Vec2(0.751950026, 0.510909975), Vec2(0.73514998, 0.512889981), Vec2(0.741330028, 0.492760003), Vec2(0.762629986, 0.471359998), Vec2(0.757239997, 0.491329998), Vec2(0.741330028, 0.492760003), Vec2(0.747179985, 0.472339988), Vec2(0.757200003, 0.430269986), Vec2(0.752529979, 0.45153001), Vec2(0.73724997, 0.451739997), Vec2(0.741980016, 0.43039), Vec2(0.752529979, 0.45153001), Vec2(0.747179985, 0.472339988), Vec2(0.73168999, 0.472680002), Vec2(0.73724997, 0.451739997), Vec2(0.76779002, 0.450899988), Vec2(0.762629986, 0.471359998), Vec2(0.747179985, 0.472339988), Vec2(0.752529979, 0.45153001), Vec2(0.772440016, 0.429879993), Vec2(0.76779002, 0.450899988), Vec2(0.752529979, 0.45153001), Vec2(0.757200003, 0.430269986), Vec2(0.787599981, 0.429459989), Vec2(0.782880008, 0.450129986), Vec2(0.76779002, 0.450899988), Vec2(0.772440016, 0.429879993), Vec2(0.782880008, 0.450129986), Vec2(0.777769983, 0.470059991), Vec2(0.762629986, 0.471359998), Vec2(0.76779002, 0.450899988), Vec2(0.79764998, 0.449660003), Vec2(0.792360008, 0.468919992), Vec2(0.777769983, 0.470059991), Vec2(0.782880008, 0.450129986), Vec2(0.802619994, 0.429349989), Vec2(0.79764998, 0.449660003), Vec2(0.782880008, 0.450129986), Vec2(0.787599981, 0.429459989), Vec2(0.777769983, 0.470059991), Vec2(0.77275002, 0.489270002), Vec2(0.757239997, 0.491329998), Vec2(0.762629986, 0.471359998), Vec2(0.77275002, 0.489270002), Vec2(0.768320024, 0.5079), Vec2(0.751950026, 0.510909975), Vec2(0.757239997, 0.491329998), Vec2(0.787419975, 0.487049997), Vec2(0.783689976, 0.504140019), Vec2(0.768320024, 0.5079), Vec2(0.77275002, 0.489270002), Vec2(0.792360008, 0.468919992), Vec2(0.787419975, 0.487049997), Vec2(0.77275002, 0.489270002), Vec2(0.777769983, 0.470059991), Vec2(0.806129992, 0.468719989), Vec2(0.800689995, 0.485509992), Vec2(0.787419975, 0.487049997), Vec2(0.792360008, 0.468919992), Vec2(0.800689995, 0.485509992), Vec2(0.797230005, 0.500100017), Vec2(0.783689976, 0.504140019), Vec2(0.787419975, 0.487049997), Vec2(0.811839998, 0.486330003), Vec2(0.806450009, 0.496930003), Vec2(0.797230005, 0.500100017), Vec2(0.800689995, 0.485509992), Vec2(0.81892997, 0.470479995), Vec2(0.811839998, 0.486330003), Vec2(0.800689995, 0.485509992), Vec2(0.806129992, 0.468719989), Vec2(0.817470014, 0.429969996), Vec2(0.81200999, 0.450069994), Vec2(0.79764998, 0.449660003), Vec2(0.802619994, 0.429349989), Vec2(0.81200999, 0.450069994), Vec2(0.806129992, 0.468719989), Vec2(0.792360008, 0.468919992), Vec2(0.79764998, 0.449660003), Vec2(0.825929999, 0.452010006), Vec2(0.81892997, 0.470479995), Vec2(0.806129992, 0.468719989), Vec2(0.81200999, 0.450069994), Vec2(0.832189977, 0.431739986), Vec2(0.825929999, 0.452010006), Vec2(0.81200999, 0.450069994), Vec2(0.817470014, 0.429969996), Vec2(0.797010005, 0.341650009), Vec2(0.796429992, 0.364039987), Vec2(0.780990005, 0.364100009), Vec2(0.78154999, 0.341690004), Vec2(0.796429992, 0.364039987), Vec2(0.794589996, 0.386260003), Vec2(0.779209971, 0.386370003), Vec2(0.780990005, 0.364100009), Vec2(0.811930001, 0.364069998), Vec2(0.809989989, 0.386330009), Vec2(0.794589996, 0.386260003), Vec2(0.796429992, 0.364039987), Vec2(0.812529981, 0.341610014), Vec2(0.811930001, 0.364069998), Vec2(0.796429992, 0.364039987), Vec2(0.797010005, 0.341650009), Vec2(0.794589996, 0.386260003), Vec2(0.791589975, 0.408120006), Vec2(0.776319981, 0.408340007), Vec2(0.779209971, 0.386370003), Vec2(0.791589975, 0.408120006), Vec2(0.787599981, 0.429459989), Vec2(0.772440016, 0.429879993), Vec2(0.776319981, 0.408340007), Vec2(0.806829989, 0.408170015), Vec2(0.802619994, 0.429349989), Vec2(0.787599981, 0.429459989), Vec2(0.791589975, 0.408120006), Vec2(0.809989989, 0.386330009), Vec2(0.806829989, 0.408170015), Vec2(0.791589975, 0.408120006), Vec2(0.794589996, 0.386260003), Vec2(0.825460017, 0.38677001), Vec2(0.822049975, 0.408760011), Vec2(0.806829989, 0.408170015), Vec2(0.809989989, 0.386330009), Vec2(0.822049975, 0.408760011), Vec2(0.817470014, 0.429969996), Vec2(0.802619994, 0.429349989), Vec2(0.806829989, 0.408170015), Vec2(0.83732003, 0.410189986), Vec2(0.832189977, 0.431739986), Vec2(0.817470014, 0.429969996), Vec2(0.822049975, 0.408760011), Vec2(0.841090024, 0.38775), Vec2(0.83732003, 0.410189986), Vec2(0.822049975, 0.408760011), Vec2(0.825460017, 0.38677001), Vec2(0.828180015, 0.341560006), Vec2(0.82753998, 0.364279985), Vec2(0.811930001, 0.364069998), Vec2(0.812529981, 0.341610014), Vec2(0.82753998, 0.364279985), Vec2(0.825460017, 0.38677001), Vec2(0.809989989, 0.386330009), Vec2(0.811930001, 0.364069998), Vec2(0.843360007, 0.364749998), Vec2(0.841090024, 0.38775), Vec2(0.825460017, 0.38677001), Vec2(0.82753998, 0.364279985), Vec2(0.844060004, 0.341500014), Vec2(0.843360007, 0.364749998), Vec2(0.82753998, 0.364279985), Vec2(0.828180015, 0.341560006), Vec2(0.701359987, 0.170489997), Vec2(0.70905, 0.190830007), Vec2(0.693859994, 0.192540005), Vec2(0.685660005, 0.172519997), Vec2(0.70905, 0.190830007), Vec2(0.715759993, 0.211380005), Vec2(0.700839996, 0.212830007), Vec2(0.693859994, 0.192540005), Vec2(0.724709988, 0.190249994), Vec2(0.731040001, 0.210859999), Vec2(0.715759993, 0.211380005), Vec2(0.70905, 0.190830007), Vec2(0.717710018, 0.169870004), Vec2(0.724709988, 0.190249994), Vec2(0.70905, 0.190830007), Vec2(0.701359987, 0.170489997), Vec2(0.715759993, 0.211380005), Vec2(0.721539974, 0.232270002), Vec2(0.706700027, 0.233459994), Vec2(0.700839996, 0.212830007), Vec2(0.721539974, 0.232270002), Vec2(0.726369977, 0.253540009), Vec2(0.711520016, 0.254500002), Vec2(0.706700027, 0.233459994), Vec2(0.73664999, 0.231810004), Vec2(0.741460025, 0.253149986), Vec2(0.726369977, 0.253540009), Vec2(0.721539974, 0.232270002), Vec2(0.731040001, 0.210859999), Vec2(0.73664999, 0.231810004), Vec2(0.721539974, 0.232270002), Vec2(0.715759993, 0.211380005), Vec2(0.746500015, 0.211160004), Vec2(0.751909971, 0.231959999), Vec2(0.73664999, 0.231810004), Vec2(0.731040001, 0.210859999), Vec2(0.751909971, 0.231959999), Vec2(0.756659985, 0.253210008), Vec2(0.741460025, 0.253149986), Vec2(0.73664999, 0.231810004), Vec2(0.767149985, 0.232529998), Vec2(0.771889985, 0.253529996), Vec2(0.756659985, 0.253210008), Vec2(0.751909971, 0.231959999), Vec2(0.761910021, 0.212080002), Vec2(0.767149985, 0.232529998), Vec2(0.751909971, 0.231959999), Vec2(0.746500015, 0.211160004), Vec2(0.734449983, 0.170599997), Vec2(0.740620017, 0.190740004), Vec2(0.724709988, 0.190249994), Vec2(0.717710018, 0.169870004), Vec2(0.740620017, 0.190740004), Vec2(0.746500015, 0.211160004), Vec2(0.731040001, 0.210859999), Vec2(0.724709988, 0.190249994), Vec2(0.756479979, 0.192129999), Vec2(0.761910021, 0.212080002), Vec2(0.746500015, 0.211160004), Vec2(0.740620017, 0.190740004), Vec2(0.751190007, 0.172560006), Vec2(0.756479979, 0.192129999), Vec2(0.740620017, 0.190740004), Vec2(0.734449983, 0.170599997), Vec2(0.726369977, 0.253540009), Vec2(0.730229974, 0.275189996), Vec2(0.71529001, 0.275920004), Vec2(0.711520016, 0.254500002), Vec2(0.730229974, 0.275189996), Vec2(0.733070016, 0.297179997), Vec2(0.718029976, 0.297670007), Vec2(0.71529001, 0.275920004), Vec2(0.745360017, 0.274879992), Vec2(0.748260021, 0.296959996), Vec2(0.733070016, 0.297179997), Vec2(0.730229974, 0.275189996), Vec2(0.741460025, 0.253149986), Vec2(0.745360017, 0.274879992), Vec2(0.730229974, 0.275189996), Vec2(0.726369977, 0.253540009), Vec2(0.733070016, 0.297179997), Vec2(0.734830022, 0.31942001), Vec2(0.719709992, 0.319680005), Vec2(0.718029976, 0.297670007), Vec2(0.734830022, 0.31942001), Vec2(0.735469997, 0.341789991), Vec2(0.720319986, 0.341809988), Vec2(0.719709992, 0.319680005), Vec2(0.750090003, 0.319290012), Vec2(0.750760019, 0.34176001), Vec2(0.735469997, 0.341789991), Vec2(0.734830022, 0.31942001), Vec2(0.748260021, 0.296959996), Vec2(0.750090003, 0.319290012), Vec2(0.734830022, 0.31942001), Vec2(0.733070016, 0.297179997), Vec2(0.763559997, 0.296950012), Vec2(0.765439987, 0.319270015), Vec2(0.750090003, 0.319290012), Vec2(0.748260021, 0.296959996), Vec2(0.765439987, 0.319270015), Vec2(0.766129971, 0.341720015), Vec2(0.750760019, 0.34176001), Vec2(0.750090003, 0.319290012), Vec2(0.78083998, 0.319279999), Vec2(0.78154999, 0.341690004), Vec2(0.766129971, 0.341720015), Vec2(0.765439987, 0.319270015), Vec2(0.778909981, 0.297019988), Vec2(0.78083998, 0.319279999), Vec2(0.765439987, 0.319270015), Vec2(0.763559997, 0.296950012), Vec2(0.756659985, 0.253210008), Vec2(0.760599971, 0.274890006), Vec2(0.745360017, 0.274879992), Vec2(0.741460025, 0.253149986), Vec2(0.760599971, 0.274890006), Vec2(0.763559997, 0.296950012), Vec2(0.748260021, 0.296959996), Vec2(0.745360017, 0.274879992), Vec2(0.775870025, 0.275059998), Vec2(0.778909981, 0.297019988), Vec2(0.763559997, 0.296950012), Vec2(0.760599971, 0.274890006), Vec2(0.771889985, 0.253529996), Vec2(0.775870025, 0.275059998), Vec2(0.760599971, 0.274890006), Vec2(0.756659985, 0.253210008), Vec2(0.787029982, 0.253879994), Vec2(0.791130006, 0.275200009), Vec2(0.775870025, 0.275059998), Vec2(0.771889985, 0.253529996), Vec2(0.791130006, 0.275200009), Vec2(0.794269979, 0.297049999), Vec2(0.778909981, 0.297019988), Vec2(0.775870025, 0.275059998), Vec2(0.806349993, 0.275079995), Vec2(0.809660017, 0.296900004), Vec2(0.794269979, 0.297049999), Vec2(0.791130006, 0.275200009), Vec2(0.802020013, 0.253919989), Vec2(0.806349993, 0.275079995), Vec2(0.791130006, 0.275200009), Vec2(0.787029982, 0.253879994), Vec2(0.794269979, 0.297049999), Vec2(0.796270013, 0.319260001), Vec2(0.78083998, 0.319279999), Vec2(0.778909981, 0.297019988), Vec2(0.796270013, 0.319260001), Vec2(0.797010005, 0.341650009), Vec2(0.78154999, 0.341690004), Vec2(0.78083998, 0.319279999), Vec2(0.811760008, 0.319150001), Vec2(0.812529981, 0.341610014), Vec2(0.797010005, 0.341650009), Vec2(0.796270013, 0.319260001), Vec2(0.809660017, 0.296900004), Vec2(0.811760008, 0.319150001), Vec2(0.796270013, 0.319260001), Vec2(0.794269979, 0.297049999), Vec2(0.825110018, 0.29637), Vec2(0.82735002, 0.318839997), Vec2(0.811760008, 0.319150001), Vec2(0.809660017, 0.296900004), Vec2(0.82735002, 0.318839997), Vec2(0.828180015, 0.341560006), Vec2(0.812529981, 0.341610014), Vec2(0.811760008, 0.319150001), Vec2(0.843159974, 0.31825), Vec2(0.844060004, 0.341500014), Vec2(0.828180015, 0.341560006), Vec2(0.82735002, 0.318839997), Vec2(0.840709984, 0.29528001), Vec2(0.843159974, 0.31825), Vec2(0.82735002, 0.318839997), Vec2(0.825110018, 0.29637), Vec2(0.816829979, 0.253230006), Vec2(0.821539998, 0.274399996), Vec2(0.806349993, 0.275079995), Vec2(0.802020013, 0.253919989), Vec2(0.821539998, 0.274399996), Vec2(0.825110018, 0.29637), Vec2(0.809660017, 0.296900004), Vec2(0.806349993, 0.275079995), Vec2(0.836769998, 0.272879988), Vec2(0.840709984, 0.29528001), Vec2(0.825110018, 0.29637), Vec2(0.821539998, 0.274399996), Vec2(0.831499994, 0.251370013), Vec2(0.836769998, 0.272879988), Vec2(0.821539998, 0.274399996), Vec2(0.816829979, 0.253230006), Vec2(0.767509997, 0.175549999), Vec2(0.77196002, 0.194130003), Vec2(0.756479979, 0.192129999), Vec2(0.751190007, 0.172560006), Vec2(0.77196002, 0.194130003), Vec2(0.777029991, 0.213320002), Vec2(0.761910021, 0.212080002), Vec2(0.756479979, 0.192129999), Vec2(0.786610007, 0.196290001), Vec2(0.791599989, 0.214389995), Vec2(0.777029991, 0.213320002), Vec2(0.77196002, 0.194130003), Vec2(0.782850027, 0.179260001), Vec2(0.786610007, 0.196290001), Vec2(0.77196002, 0.194130003), Vec2(0.767509997, 0.175549999), Vec2(0.777029991, 0.213320002), Vec2(0.782209992, 0.233229995), Vec2(0.767149985, 0.232529998), Vec2(0.761910021, 0.212080002), Vec2(0.782209992, 0.233229995), Vec2(0.787029982, 0.253879994), Vec2(0.771889985, 0.253529996), Vec2(0.767149985, 0.232529998), Vec2(0.796949983, 0.233630002), Vec2(0.802020013, 0.253919989), Vec2(0.787029982, 0.253879994), Vec2(0.782209992, 0.233229995), Vec2(0.791599989, 0.214389995), Vec2(0.796949983, 0.233630002), Vec2(0.782209992, 0.233229995), Vec2(0.777029991, 0.213320002), Vec2(0.805339992, 0.214530006), Vec2(0.811269999, 0.233150005), Vec2(0.796949983, 0.233630002), Vec2(0.791599989, 0.214389995), Vec2(0.811269999, 0.233150005), Vec2(0.816829979, 0.253230006), Vec2(0.802020013, 0.253919989), Vec2(0.796949983, 0.233630002), Vec2(0.825139999, 0.23116), Vec2(0.831499994, 0.251370013), Vec2(0.816829979, 0.253230006), Vec2(0.811269999, 0.233150005), Vec2(0.818069994, 0.212720007), Vec2(0.825139999, 0.23116), Vec2(0.811269999, 0.233150005), Vec2(0.805339992, 0.214530006), Vec2(0.796360016, 0.183239996), Vec2(0.799860001, 0.19777), Vec2(0.786610007, 0.196290001), Vec2(0.782850027, 0.179260001), Vec2(0.799860001, 0.19777), Vec2(0.805339992, 0.214530006), Vec2(0.791599989, 0.214389995), Vec2(0.786610007, 0.196290001), Vec2(0.810959995, 0.196899995), Vec2(0.818069994, 0.212720007), Vec2(0.805339992, 0.214530006), Vec2(0.799860001, 0.19777), Vec2(0.805589974, 0.186350003), Vec2(0.810959995, 0.196899995), Vec2(0.799860001, 0.19777), Vec2(0.796360016, 0.183239996), Vec2(0.190329999, 0.175870001), Vec2(0.203549996, 0.166720003), Vec2(0.203339994, 0.180059999), Vec2(0.194059998, 0.183160007), Vec2(0.203549996, 0.166720003), Vec2(0.219060004, 0.159769997), Vec2(0.216959998, 0.176129997), Vec2(0.203339994, 0.180059999), Vec2(0.201140001, 0.152940005), Vec2(0.219300002, 0.143490002), Vec2(0.219060004, 0.159769997), Vec2(0.203549996, 0.166720003), Vec2(0.184719995, 0.165069997), Vec2(0.201140001, 0.152940005), Vec2(0.203549996, 0.166720003), Vec2(0.190329999, 0.175870001), Vec2(0.219060004, 0.159769997), Vec2(0.23612, 0.154369995), Vec2(0.232409999, 0.172529995), Vec2(0.216959998, 0.176129997), Vec2(0.23612, 0.154369995), Vec2(0.254070014, 0.150460005), Vec2(0.248820007, 0.169729993), Vec2(0.232409999, 0.172529995), Vec2(0.23872, 0.136319995), Vec2(0.258879989, 0.131229997), Vec2(0.254070014, 0.150460005), Vec2(0.23612, 0.154369995), Vec2(0.219300002, 0.143490002), Vec2(0.23872, 0.136319995), Vec2(0.23612, 0.154369995), Vec2(0.219060004, 0.159769997), Vec2(0.218099996, 0.126959994), Vec2(0.240309998, 0.118160002), Vec2(0.23872, 0.136319995), Vec2(0.219300002, 0.143490002), Vec2(0.240309998, 0.118160002), Vec2(0.263280004, 0.111900002), Vec2(0.258879989, 0.131229997), Vec2(0.23872, 0.136319995), Vec2(0.240970001, 0.0997700021), Vec2(0.267230004, 0.0923700035), Vec2(0.263280004, 0.111900002), Vec2(0.240309998, 0.118160002), Vec2(0.215719998, 0.110040002), Vec2(0.240970001, 0.0997700021), Vec2(0.240309998, 0.118160002), Vec2(0.218099996, 0.126959994), Vec2(0.177990004, 0.152649999), Vec2(0.197170004, 0.138410002), Vec2(0.201140001, 0.152940005), Vec2(0.184719995, 0.165069997), Vec2(0.197170004, 0.138410002), Vec2(0.218099996, 0.126959994), Vec2(0.219300002, 0.143490002), Vec2(0.201140001, 0.152940005), Vec2(0.192000002, 0.123149998), Vec2(0.215719998, 0.110040002), Vec2(0.218099996, 0.126959994), Vec2(0.197170004, 0.138410002), Vec2(0.17024, 0.139139995), Vec2(0.192000002, 0.123149998), Vec2(0.197170004, 0.138410002), Vec2(0.177990004, 0.152649999), Vec2(0.254070014, 0.150460005), Vec2(0.272329986, 0.14813), Vec2(0.265639991, 0.168019995), Vec2(0.248820007, 0.169729993), Vec2(0.272329986, 0.14813), Vec2(0.290410012, 0.147479996), Vec2(0.282409996, 0.167600006), Vec2(0.265639991, 0.168019995), Vec2(0.279229999, 0.128209993), Vec2(0.299199998, 0.127309993), Vec2(0.290410012, 0.147479996), Vec2(0.272329986, 0.14813), Vec2(0.258879989, 0.131229997), Vec2(0.279229999, 0.128209993), Vec2(0.272329986, 0.14813), Vec2(0.254070014, 0.150460005), Vec2(0.290410012, 0.147479996), Vec2(0.307880014, 0.148560002), Vec2(0.298799992, 0.168559998), Vec2(0.282409996, 0.167600006), Vec2(0.307880014, 0.148560002), Vec2(0.324429989, 0.151360005), Vec2(0.314539999, 0.170929998), Vec2(0.298799992, 0.168559998), Vec2(0.31825, 0.128549993), Vec2(0.335970014, 0.131889999), Vec2(0.324429989, 0.151360005), Vec2(0.307880014, 0.148560002), Vec2(0.299199998, 0.127309993), Vec2(0.31825, 0.128549993), Vec2(0.307880014, 0.148560002), Vec2(0.290410012, 0.147479996), Vec2(0.308959991, 0.106980003), Vec2(0.330220014, 0.108429998), Vec2(0.31825, 0.128549993), Vec2(0.299199998, 0.127309993), Vec2(0.330220014, 0.108429998), Vec2(0.349559993, 0.112450004), Vec2(0.335970014, 0.131889999), Vec2(0.31825, 0.128549993), Vec2(0.344199985, 0.0881799981), Vec2(0.365759999, 0.0930700004), Vec2(0.349559993, 0.112450004), Vec2(0.330220014, 0.108429998), Vec2(0.319869995, 0.0864500031), Vec2(0.344199985, 0.0881799981), Vec2(0.330220014, 0.108429998), Vec2(0.308959991, 0.106980003), Vec2(0.263280004, 0.111900002), Vec2(0.28639999, 0.108149998), Vec2(0.279229999, 0.128209993), Vec2(0.258879989, 0.131229997), Vec2(0.28639999, 0.108149998), Vec2(0.308959991, 0.106980003), Vec2(0.299199998, 0.127309993), Vec2(0.279229999, 0.128209993), Vec2(0.293839991, 0.0878800005), Vec2(0.319869995, 0.0864500031), Vec2(0.308959991, 0.106980003), Vec2(0.28639999, 0.108149998), Vec2(0.267230004, 0.0923700035), Vec2(0.293839991, 0.0878800005), Vec2(0.28639999, 0.108149998), Vec2(0.263280004, 0.111900002), Vec2(0.270520002, 0.0725800022), Vec2(0.301319987, 0.0673900023), Vec2(0.293839991, 0.0878800005), Vec2(0.267230004, 0.0923700035), Vec2(0.301319987, 0.0673900023), Vec2(0.331950009, 0.0657199994), Vec2(0.319869995, 0.0864500031), Vec2(0.293839991, 0.0878800005), Vec2(0.308180004, 0.046670001), Vec2(0.34472999, 0.0448499992), Vec2(0.331950009, 0.0657199994), Vec2(0.301319987, 0.0673900023), Vec2(0.272610009, 0.0524899997), Vec2(0.308180004, 0.046670001), Vec2(0.301319987, 0.0673900023), Vec2(0.270520002, 0.0725800022), Vec2(0.331950009, 0.0657199994), Vec2(0.360720009, 0.0678299963), Vec2(0.344199985, 0.0881799981), Vec2(0.319869995, 0.0864500031), Vec2(0.360720009, 0.0678299963), Vec2(0.385479987, 0.0738499984), Vec2(0.365759999, 0.0930700004), Vec2(0.344199985, 0.0881799981), Vec2(0.380259991, 0.0475100018), Vec2(0.410430014, 0.0550500005), Vec2(0.385479987, 0.0738499984), Vec2(0.360720009, 0.0678299963), Vec2(0.34472999, 0.0448499992), Vec2(0.380259991, 0.0475100018), Vec2(0.360720009, 0.0678299963), Vec2(0.331950009, 0.0657199994), Vec2(0.356539994, 0.0238000005), Vec2(0.402429998, 0.0273899995), Vec2(0.380259991, 0.0475100018), Vec2(0.34472999, 0.0448499992), Vec2(0.402429998, 0.0273899995), Vec2(0.444700003, 0.03737), Vec2(0.410430014, 0.0550500005), Vec2(0.380259991, 0.0475100018), Vec2(0.421299994, 0.00769999996), Vec2(0.500389993, 0.0235900003), Vec2(0.444700003, 0.03737), Vec2(0.402429998, 0.0273899995), Vec2(0.363460004, 0.00194999995), Vec2(0.421299994, 0.00769999996), Vec2(0.402429998, 0.0273899995), Vec2(0.356539994, 0.0238000005), Vec2(0.272680014, 0.0319099985), Vec2(0.31310001, 0.0255600009), Vec2(0.308180004, 0.046670001), Vec2(0.272610009, 0.0524899997), Vec2(0.31310001, 0.0255600009), Vec2(0.356539994, 0.0238000005), Vec2(0.34472999, 0.0448499992), Vec2(0.308180004, 0.046670001), Vec2(0.314090014, 0.00343000004), Vec2(0.363460004, 0.00194999995), Vec2(0.356539994, 0.0238000005), Vec2(0.31310001, 0.0255600009), Vec2(0.269739985, 0.0104), Vec2(0.314090014, 0.00343000004), Vec2(0.31310001, 0.0255600009), Vec2(0.272680014, 0.0319099985), Vec2(0.161449999, 0.124810003), Vec2(0.185670003, 0.107270002), Vec2(0.192000002, 0.123149998), Vec2(0.17024, 0.139139995), Vec2(0.185670003, 0.107270002), Vec2(0.212149993, 0.0926600024), Vec2(0.215719998, 0.110040002), Vec2(0.192000002, 0.123149998), Vec2(0.178069994, 0.0908000022), Vec2(0.207230002, 0.0747900009), Vec2(0.212149993, 0.0926600024), Vec2(0.185670003, 0.107270002), Vec2(0.15151, 0.109810002), Vec2(0.178069994, 0.0908000022), Vec2(0.185670003, 0.107270002), Vec2(0.161449999, 0.124810003), Vec2(0.212149993, 0.0926600024), Vec2(0.240580007, 0.0810599998), Vec2(0.240970001, 0.0997700021), Vec2(0.215719998, 0.110040002), Vec2(0.240580007, 0.0810599998), Vec2(0.270520002, 0.0725800022), Vec2(0.267230004, 0.0923700035), Vec2(0.240970001, 0.0997700021), Vec2(0.23883, 0.0619499981), Vec2(0.272610009, 0.0524899997), Vec2(0.270520002, 0.0725800022), Vec2(0.240580007, 0.0810599998), Vec2(0.207230002, 0.0747900009), Vec2(0.23883, 0.0619499981), Vec2(0.240580007, 0.0810599998), Vec2(0.212149993, 0.0926600024), Vec2(0.200680003, 0.0563700013), Vec2(0.23522, 0.0423199981), Vec2(0.23883, 0.0619499981), Vec2(0.207230002, 0.0747900009), Vec2(0.23522, 0.0423199981), Vec2(0.272680014, 0.0319099985), Vec2(0.272610009, 0.0524899997), Vec2(0.23883, 0.0619499981), Vec2(0.229269996, 0.0218700003), Vec2(0.269739985, 0.0104), Vec2(0.272680014, 0.0319099985), Vec2(0.23522, 0.0423199981), Vec2(0.192220002, 0.0372299999), Vec2(0.229269996, 0.0218700003), Vec2(0.23522, 0.0423199981), Vec2(0.200680003, 0.0563700013), Vec2(0.140279993, 0.0941800028), Vec2(0.169029996, 0.073739998), Vec2(0.178069994, 0.0908000022), Vec2(0.15151, 0.109810002), Vec2(0.169029996, 0.073739998), Vec2(0.200680003, 0.0563700013), Vec2(0.207230002, 0.0747900009), Vec2(0.178069994, 0.0908000022), Vec2(0.15839, 0.0560199991), Vec2(0.192220002, 0.0372299999), Vec2(0.200680003, 0.0563700013), Vec2(0.169029996, 0.073739998), Vec2(0.127639994, 0.0779199973), Vec2(0.15839, 0.0560199991), Vec2(0.169029996, 0.073739998), Vec2(0.140279993, 0.0941800028), Vec2(0.324429989, 0.151360005), Vec2(0.339850008, 0.1558), Vec2(0.329450011, 0.174649999), Vec2(0.314539999, 0.170929998), Vec2(0.339850008, 0.1558), Vec2(0.35402, 0.161730006), Vec2(0.343409985, 0.179619998), Vec2(0.329450011, 0.174649999), Vec2(0.352120012, 0.137219995), Vec2(0.366600007, 0.144350007), Vec2(0.35402, 0.161730006), Vec2(0.339850008, 0.1558), Vec2(0.335970014, 0.131889999), Vec2(0.352120012, 0.137219995), Vec2(0.339850008, 0.1558), Vec2(0.324429989, 0.151360005), Vec2(0.35402, 0.161730006), Vec2(0.36688, 0.168909997), Vec2(0.356359988, 0.185609996), Vec2(0.343409985, 0.179619998), Vec2(0.36688, 0.168909997), Vec2(0.378410012, 0.177039996), Vec2(0.368229985, 0.192359999), Vec2(0.356359988, 0.185609996), Vec2(0.379379988, 0.152960002), Vec2(0.390540004, 0.162719995), Vec2(0.378410012, 0.177039996), Vec2(0.36688, 0.168909997), Vec2(0.366600007, 0.144350007), Vec2(0.379379988, 0.152960002), Vec2(0.36688, 0.168909997), Vec2(0.35402, 0.161730006), Vec2(0.381410003, 0.127570003), Vec2(0.393999994, 0.137899995), Vec2(0.379379988, 0.152960002), Vec2(0.366600007, 0.144350007), Vec2(0.393999994, 0.137899995), Vec2(0.404619992, 0.149489999), Vec2(0.390540004, 0.162719995), Vec2(0.379379988, 0.152960002), Vec2(0.410869986, 0.123989999), Vec2(0.420630008, 0.137559995), Vec2(0.404619992, 0.149489999), Vec2(0.393999994, 0.137899995), Vec2(0.398799986, 0.11163), Vec2(0.410869986, 0.123989999), Vec2(0.393999994, 0.137899995), Vec2(0.381410003, 0.127570003), Vec2(0.349559993, 0.112450004), Vec2(0.366649985, 0.118940003), Vec2(0.352120012, 0.137219995), Vec2(0.335970014, 0.131889999), Vec2(0.366649985, 0.118940003), Vec2(0.381410003, 0.127570003), Vec2(0.366600007, 0.144350007), Vec2(0.352120012, 0.137219995), Vec2(0.383920014, 0.101089999), Vec2(0.398799986, 0.11163), Vec2(0.381410003, 0.127570003), Vec2(0.366649985, 0.118940003), Vec2(0.365759999, 0.0930700004), Vec2(0.383920014, 0.101089999), Vec2(0.366649985, 0.118940003), Vec2(0.349559993, 0.112450004), Vec2(0.378410012, 0.177039996), Vec2(0.388550013, 0.185829997), Vec2(0.378960013, 0.199540004), Vec2(0.368229985, 0.192359999), Vec2(0.388550013, 0.185829997), Vec2(0.397190005, 0.194999993), Vec2(0.388429999, 0.206740007), Vec2(0.378960013, 0.199540004), Vec2(0.400099993, 0.173299998), Vec2(0.408010006, 0.184530005), Vec2(0.397190005, 0.194999993), Vec2(0.388550013, 0.185829997), Vec2(0.390540004, 0.162719995), Vec2(0.400099993, 0.173299998), Vec2(0.388550013, 0.185829997), Vec2(0.378410012, 0.177039996), Vec2(0.397190005, 0.194999993), Vec2(0.404000014, 0.204390004), Vec2(0.396369994, 0.213410005), Vec2(0.388429999, 0.206740007), Vec2(0.404000014, 0.204390004), Vec2(0.40823999, 0.214259997), Vec2(0.401600003, 0.218140006), Vec2(0.396369994, 0.213410005), Vec2(0.414130002, 0.196360007), Vec2(0.418190002, 0.208949998), Vec2(0.40823999, 0.214259997), Vec2(0.404000014, 0.204390004), Vec2(0.408010006, 0.184530005), Vec2(0.414130002, 0.196360007), Vec2(0.404000014, 0.204390004), Vec2(0.397190005, 0.194999993), Vec2(0.420610011, 0.175160006), Vec2(0.426070005, 0.188979998), Vec2(0.414130002, 0.196360007), Vec2(0.408010006, 0.184530005), Vec2(0.426070005, 0.188979998), Vec2(0.429830015, 0.203459993), Vec2(0.418190002, 0.208949998), Vec2(0.414130002, 0.196360007), Vec2(0.43937999, 0.182390004), Vec2(0.44264999, 0.198310003), Vec2(0.429830015, 0.203459993), Vec2(0.426070005, 0.188979998), Vec2(0.434689999, 0.166930005), Vec2(0.43937999, 0.182390004), Vec2(0.426070005, 0.188979998), Vec2(0.420610011, 0.175160006), Vec2(0.404619992, 0.149489999), Vec2(0.413459986, 0.161980003), Vec2(0.400099993, 0.173299998), Vec2(0.390540004, 0.162719995), Vec2(0.413459986, 0.161980003), Vec2(0.420610011, 0.175160006), Vec2(0.408010006, 0.184530005), Vec2(0.400099993, 0.173299998), Vec2(0.428490013, 0.15196), Vec2(0.434689999, 0.166930005), Vec2(0.420610011, 0.175160006), Vec2(0.413459986, 0.161980003), Vec2(0.420630008, 0.137559995), Vec2(0.428490013, 0.15196), Vec2(0.413459986, 0.161980003), Vec2(0.404619992, 0.149489999), Vec2(0.438470006, 0.127269998), Vec2(0.444979995, 0.143480003), Vec2(0.428490013, 0.15196), Vec2(0.420630008, 0.137559995), Vec2(0.444979995, 0.143480003), Vec2(0.449990004, 0.160019994), Vec2(0.434689999, 0.166930005), Vec2(0.428490013, 0.15196), Vec2(0.462700009, 0.136889994), Vec2(0.466239989, 0.154719993), Vec2(0.449990004, 0.160019994), Vec2(0.444979995, 0.143480003), Vec2(0.457980007, 0.119110003), Vec2(0.462700009, 0.136889994), Vec2(0.444979995, 0.143480003), Vec2(0.438470006, 0.127269998), Vec2(0.449990004, 0.160019994), Vec2(0.453729987, 0.176819995), Vec2(0.43937999, 0.182390004), Vec2(0.434689999, 0.166930005), Vec2(0.453729987, 0.176819995), Vec2(0.456360012, 0.193859994), Vec2(0.44264999, 0.198310003), Vec2(0.43937999, 0.182390004), Vec2(0.46886, 0.172539994), Vec2(0.470699996, 0.190410003), Vec2(0.456360012, 0.193859994), Vec2(0.453729987, 0.176819995), Vec2(0.466239989, 0.154719993), Vec2(0.46886, 0.172539994), Vec2(0.453729987, 0.176819995), Vec2(0.449990004, 0.160019994), Vec2(0.483150005, 0.151309997), Vec2(0.484499991, 0.169809997), Vec2(0.46886, 0.172539994), Vec2(0.466239989, 0.154719993), Vec2(0.484499991, 0.169809997), Vec2(0.485439986, 0.188199997), Vec2(0.470699996, 0.190410003), Vec2(0.46886, 0.172539994), Vec2(0.500389993, 0.168799996), Vec2(0.500389993, 0.187380001), Vec2(0.485439986, 0.188199997), Vec2(0.484499991, 0.169809997), Vec2(0.500389993, 0.150049999), Vec2(0.500389993, 0.168799996), Vec2(0.484499991, 0.169809997), Vec2(0.483150005, 0.151309997), Vec2(0.478810012, 0.11366), Vec2(0.48131001, 0.132609993), Vec2(0.462700009, 0.136889994), Vec2(0.457980007, 0.119110003), Vec2(0.48131001, 0.132609993), Vec2(0.483150005, 0.151309997), Vec2(0.466239989, 0.154719993), Vec2(0.462700009, 0.136889994), Vec2(0.500389993, 0.130999997), Vec2(0.500389993, 0.150049999), Vec2(0.483150005, 0.151309997), Vec2(0.48131001, 0.132609993), Vec2(0.500389993, 0.111529998), Vec2(0.500389993, 0.130999997), Vec2(0.48131001, 0.132609993), Vec2(0.478810012, 0.11366), Vec2(0.385479987, 0.0738499984), Vec2(0.404700011, 0.0839999989), Vec2(0.383920014, 0.101089999), Vec2(0.365759999, 0.0930700004), Vec2(0.404700011, 0.0839999989), Vec2(0.419149995, 0.0969699994), Vec2(0.398799986, 0.11163), Vec2(0.383920014, 0.101089999), Vec2(0.430110008, 0.0683600008), Vec2(0.442900002, 0.0843499973), Vec2(0.419149995, 0.0969699994), Vec2(0.404700011, 0.0839999989), Vec2(0.410430014, 0.0550500005), Vec2(0.430110008, 0.0683600008), Vec2(0.404700011, 0.0839999989), Vec2(0.385479987, 0.0738499984), Vec2(0.419149995, 0.0969699994), Vec2(0.430079997, 0.11163), Vec2(0.410869986, 0.123989999), Vec2(0.398799986, 0.11163), Vec2(0.430079997, 0.11163), Vec2(0.438470006, 0.127269998), Vec2(0.420630008, 0.137559995), Vec2(0.410869986, 0.123989999), Vec2(0.451660007, 0.101489998), Vec2(0.457980007, 0.119110003), Vec2(0.438470006, 0.127269998), Vec2(0.430079997, 0.11163), Vec2(0.442900002, 0.0843499973), Vec2(0.451660007, 0.101489998), Vec2(0.430079997, 0.11163), Vec2(0.419149995, 0.0969699994), Vec2(0.470209986, 0.0749899969), Vec2(0.475340009, 0.0944299996), Vec2(0.451660007, 0.101489998), Vec2(0.442900002, 0.0843499973), Vec2(0.475340009, 0.0944299996), Vec2(0.478810012, 0.11366), Vec2(0.457980007, 0.119110003), Vec2(0.451660007, 0.101489998), Vec2(0.500389993, 0.0915099978), Vec2(0.500389993, 0.111529998), Vec2(0.478810012, 0.11366), Vec2(0.475340009, 0.0944299996), Vec2(0.500389993, 0.0707300007), Vec2(0.500389993, 0.0915099978), Vec2(0.475340009, 0.0944299996), Vec2(0.470209986, 0.0749899969), Vec2(0.444700003, 0.03737), Vec2(0.461699992, 0.0555999987), Vec2(0.430110008, 0.0683600008), Vec2(0.410430014, 0.0550500005), Vec2(0.461699992, 0.0555999987), Vec2(0.470209986, 0.0749899969), Vec2(0.442900002, 0.0843499973), Vec2(0.430110008, 0.0683600008), Vec2(0.500389993, 0.0486599989), Vec2(0.500389993, 0.0707300007), Vec2(0.470209986, 0.0749899969), Vec2(0.461699992, 0.0555999987), Vec2(0.500389993, 0.0235900003), Vec2(0.500389993, 0.0486599989), Vec2(0.461699992, 0.0555999987), Vec2(0.444700003, 0.03737), Vec2(0.554970026, 0.0373000018), Vec2(0.538860023, 0.0546699986), Vec2(0.500389993, 0.0486599989), Vec2(0.500389993, 0.0235900003), Vec2(0.538860023, 0.0546699986), Vec2(0.530470014, 0.0741500035), Vec2(0.500389993, 0.0707300007), Vec2(0.500389993, 0.0486599989), Vec2(0.570439994, 0.0678500012), Vec2(0.557780027, 0.0835099965), Vec2(0.530470014, 0.0741500035), Vec2(0.538860023, 0.0546699986), Vec2(0.589569986, 0.0550599992), Vec2(0.570439994, 0.0678500012), Vec2(0.538860023, 0.0546699986), Vec2(0.554970026, 0.0373000018), Vec2(0.530470014, 0.0741500035), Vec2(0.525370002, 0.0937900022), Vec2(0.500389993, 0.0915099978), Vec2(0.500389993, 0.0707300007), Vec2(0.525370002, 0.0937900022), Vec2(0.521920025, 0.113179997), Vec2(0.500389993, 0.111529998), Vec2(0.500389993, 0.0915099978), Vec2(0.54904002, 0.100620002), Vec2(0.542729974, 0.118330002), Vec2(0.521920025, 0.113179997), Vec2(0.525370002, 0.0937900022), Vec2(0.557780027, 0.0835099965), Vec2(0.54904002, 0.100620002), Vec2(0.525370002, 0.0937900022), Vec2(0.530470014, 0.0741500035), Vec2(0.581560016, 0.0963900015), Vec2(0.570640028, 0.110820003), Vec2(0.54904002, 0.100620002), Vec2(0.557780027, 0.0835099965), Vec2(0.570640028, 0.110820003), Vec2(0.562250018, 0.126409993), Vec2(0.542729974, 0.118330002), Vec2(0.54904002, 0.100620002), Vec2(0.589890003, 0.123389997), Vec2(0.580110013, 0.136790007), Vec2(0.562250018, 0.126409993), Vec2(0.570640028, 0.110820003), Vec2(0.60194999, 0.111340001), Vec2(0.589890003, 0.123389997), Vec2(0.570640028, 0.110820003), Vec2(0.581560016, 0.0963900015), Vec2(0.614889979, 0.0740899965), Vec2(0.595910013, 0.0838200003), Vec2(0.570439994, 0.0678500012), Vec2(0.589569986, 0.0550599992), Vec2(0.595910013, 0.0838200003), Vec2(0.581560016, 0.0963900015), Vec2(0.557780027, 0.0835099965), Vec2(0.570439994, 0.0678500012), Vec2(0.616760015, 0.101180002), Vec2(0.60194999, 0.111340001), Vec2(0.581560016, 0.0963900015), Vec2(0.595910013, 0.0838200003), Vec2(0.634829998, 0.0935700014), Vec2(0.616760015, 0.101180002), Vec2(0.595910013, 0.0838200003), Vec2(0.614889979, 0.0740899965), Vec2(0.521920025, 0.113179997), Vec2(0.519439995, 0.132259995), Vec2(0.500389993, 0.130999997), Vec2(0.500389993, 0.111529998), Vec2(0.519439995, 0.132259995), Vec2(0.517610013, 0.151030004), Vec2(0.500389993, 0.150049999), Vec2(0.500389993, 0.130999997), Vec2(0.538030028, 0.136240005), Vec2(0.534510016, 0.154170007), Vec2(0.517610013, 0.151030004), Vec2(0.519439995, 0.132259995), Vec2(0.542729974, 0.118330002), Vec2(0.538030028, 0.136240005), Vec2(0.519439995, 0.132259995), Vec2(0.521920025, 0.113179997), Vec2(0.517610013, 0.151030004), Vec2(0.516279995, 0.169579998), Vec2(0.500389993, 0.168799996), Vec2(0.500389993, 0.150049999), Vec2(0.516279995, 0.169579998), Vec2(0.515349984, 0.188010007), Vec2(0.500389993, 0.187380001), Vec2(0.500389993, 0.168799996), Vec2(0.531910002, 0.172079995), Vec2(0.530099988, 0.190019995), Vec2(0.515349984, 0.188010007), Vec2(0.516279995, 0.169579998), Vec2(0.534510016, 0.154170007), Vec2(0.531910002, 0.172079995), Vec2(0.516279995, 0.169579998), Vec2(0.517610013, 0.151030004), Vec2(0.550750017, 0.159290001), Vec2(0.547029972, 0.176170006), Vec2(0.531910002, 0.172079995), Vec2(0.534510016, 0.154170007), Vec2(0.547029972, 0.176170006), Vec2(0.544420004, 0.193299994), Vec2(0.530099988, 0.190019995), Vec2(0.531910002, 0.172079995), Vec2(0.561360002, 0.181649998), Vec2(0.558099985, 0.19765), Vec2(0.544420004, 0.193299994), Vec2(0.547029972, 0.176170006), Vec2(0.566039979, 0.166130006), Vec2(0.561360002, 0.181649998), Vec2(0.547029972, 0.176170006), Vec2(0.550750017, 0.159290001), Vec2(0.562250018, 0.126409993), Vec2(0.555750012, 0.142660007), Vec2(0.538030028, 0.136240005), Vec2(0.542729974, 0.118330002), Vec2(0.555750012, 0.142660007), Vec2(0.550750017, 0.159290001), Vec2(0.534510016, 0.154170007), Vec2(0.538030028, 0.136240005), Vec2(0.572250009, 0.151130006), Vec2(0.566039979, 0.166130006), Vec2(0.550750017, 0.159290001), Vec2(0.555750012, 0.142660007), Vec2(0.580110013, 0.136790007), Vec2(0.572250009, 0.151130006), Vec2(0.555750012, 0.142660007), Vec2(0.562250018, 0.126409993), Vec2(0.59612, 0.14892), Vec2(0.587260008, 0.161269993), Vec2(0.572250009, 0.151130006), Vec2(0.580110013, 0.136790007), Vec2(0.587260008, 0.161269993), Vec2(0.5801, 0.17441), Vec2(0.566039979, 0.166130006), Vec2(0.572250009, 0.151130006), Vec2(0.600589991, 0.172800004), Vec2(0.59266001, 0.183919996), Vec2(0.5801, 0.17441), Vec2(0.587260008, 0.161269993), Vec2(0.610159993, 0.162400007), Vec2(0.600589991, 0.172800004), Vec2(0.587260008, 0.161269993), Vec2(0.59612, 0.14892), Vec2(0.5801, 0.17441), Vec2(0.574630022, 0.188250005), Vec2(0.561360002, 0.181649998), Vec2(0.566039979, 0.166130006), Vec2(0.574630022, 0.188250005), Vec2(0.570869982, 0.202779993), Vec2(0.558099985, 0.19765), Vec2(0.561360002, 0.181649998), Vec2(0.58653003, 0.195720002), Vec2(0.582449973, 0.208340004), Vec2(0.570869982, 0.202779993), Vec2(0.574630022, 0.188250005), Vec2(0.59266001, 0.183919996), Vec2(0.58653003, 0.195720002), Vec2(0.574630022, 0.188250005), Vec2(0.5801, 0.17441), Vec2(0.603410006, 0.194590002), Vec2(0.596599996, 0.203909993), Vec2(0.58653003, 0.195720002), Vec2(0.59266001, 0.183919996), Vec2(0.596599996, 0.203909993), Vec2(0.592339993, 0.213760003), Vec2(0.582449973, 0.208340004), Vec2(0.58653003, 0.195720002), Vec2(0.604160011, 0.213080004), Vec2(0.598919988, 0.217739999), Vec2(0.592339993, 0.213760003), Vec2(0.596599996, 0.203909993), Vec2(0.612079978, 0.206560001), Vec2(0.604160011, 0.213080004), Vec2(0.596599996, 0.203909993), Vec2(0.603410006, 0.194590002), Vec2(0.622179985, 0.177019998), Vec2(0.612049997, 0.18558), Vec2(0.600589991, 0.172800004), Vec2(0.610159993, 0.162400007), Vec2(0.612049997, 0.18558), Vec2(0.603410006, 0.194590002), Vec2(0.59266001, 0.183919996), Vec2(0.600589991, 0.172800004), Vec2(0.621510029, 0.199560001), Vec2(0.612079978, 0.206560001), Vec2(0.603410006, 0.194590002), Vec2(0.612049997, 0.18558), Vec2(0.632189989, 0.192650005), Vec2(0.621510029, 0.199560001), Vec2(0.612049997, 0.18558), Vec2(0.622179985, 0.177019998), Vec2(0.65109998, 0.113219999), Vec2(0.634060025, 0.119309999), Vec2(0.616760015, 0.101180002), Vec2(0.634829998, 0.0935700014), Vec2(0.634060025, 0.119309999), Vec2(0.619329989, 0.127570003), Vec2(0.60194999, 0.111340001), Vec2(0.616760015, 0.101180002), Vec2(0.648519993, 0.137889996), Vec2(0.634079993, 0.144649997), Vec2(0.619329989, 0.127570003), Vec2(0.634060025, 0.119309999), Vec2(0.664640009, 0.132939994), Vec2(0.648519993, 0.137889996), Vec2(0.634060025, 0.119309999), Vec2(0.65109998, 0.113219999), Vec2(0.619329989, 0.127570003), Vec2(0.606750011, 0.137569994), Vec2(0.589890003, 0.123389997), Vec2(0.60194999, 0.111340001), Vec2(0.606750011, 0.137569994), Vec2(0.59612, 0.14892), Vec2(0.580110013, 0.136790007), Vec2(0.589890003, 0.123389997), Vec2(0.621309996, 0.152930006), Vec2(0.610159993, 0.162400007), Vec2(0.59612, 0.14892), Vec2(0.606750011, 0.137569994), Vec2(0.634079993, 0.144649997), Vec2(0.621309996, 0.152930006), Vec2(0.606750011, 0.137569994), Vec2(0.619329989, 0.127570003), Vec2(0.646520019, 0.16234), Vec2(0.63369, 0.169180006), Vec2(0.621309996, 0.152930006), Vec2(0.634079993, 0.144649997), Vec2(0.63369, 0.169180006), Vec2(0.622179985, 0.177019998), Vec2(0.610159993, 0.162400007), Vec2(0.621309996, 0.152930006), Vec2(0.643999994, 0.186210006), Vec2(0.632189989, 0.192650005), Vec2(0.622179985, 0.177019998), Vec2(0.63369, 0.169180006), Vec2(0.656889975, 0.180539995), Vec2(0.643999994, 0.186210006), Vec2(0.63369, 0.169180006), Vec2(0.646520019, 0.16234), Vec2(0.67602998, 0.152689993), Vec2(0.660650015, 0.156760007), Vec2(0.648519993, 0.137889996), Vec2(0.664640009, 0.132939994), Vec2(0.660650015, 0.156760007), Vec2(0.646520019, 0.16234), Vec2(0.634079993, 0.144649997), Vec2(0.648519993, 0.137889996), Vec2(0.670799971, 0.175909996), Vec2(0.656889975, 0.180539995), Vec2(0.646520019, 0.16234), Vec2(0.660650015, 0.156760007), Vec2(0.685660005, 0.172519997), Vec2(0.670799971, 0.175909996), Vec2(0.660650015, 0.156760007), Vec2(0.67602998, 0.152689993), Vec2(0.858929992, 0.0961600021), Vec2(0.830470026, 0.0758399963), Vec2(0.841040015, 0.0580400005), Vec2(0.871450007, 0.0797699988), Vec2(0.830470026, 0.0758399963), Vec2(0.799139977, 0.0584900007), Vec2(0.807600021, 0.0392899998), Vec2(0.841040015, 0.0580400005), Vec2(0.821529984, 0.0930500031), Vec2(0.792649984, 0.0770500004), Vec2(0.799139977, 0.0584900007), Vec2(0.830470026, 0.0758399963), Vec2(0.847829998, 0.111960001), Vec2(0.821529984, 0.0930500031), Vec2(0.830470026, 0.0758399963), Vec2(0.858929992, 0.0961600021), Vec2(0.799139977, 0.0584900007), Vec2(0.764919996, 0.0443399996), Vec2(0.770950019, 0.0238300003), Vec2(0.807600021, 0.0392899998), Vec2(0.764919996, 0.0443399996), Vec2(0.727729976, 0.0337300003), Vec2(0.730799973, 0.0120599996), Vec2(0.770950019, 0.0238300003), Vec2(0.76135999, 0.0641499981), Vec2(0.727869987, 0.0545599982), Vec2(0.727729976, 0.0337300003), Vec2(0.764919996, 0.0443399996), Vec2(0.792649984, 0.0770500004), Vec2(0.76135999, 0.0641499981), Vec2(0.764919996, 0.0443399996), Vec2(0.799139977, 0.0584900007), Vec2(0.787840009, 0.0951000005), Vec2(0.7597, 0.0834600031), Vec2(0.76135999, 0.0641499981), Vec2(0.792649984, 0.0770500004), Vec2(0.7597, 0.0834600031), Vec2(0.730069995, 0.0748599991), Vec2(0.727869987, 0.0545599982), Vec2(0.76135999, 0.0641499981), Vec2(0.75940001, 0.102349997), Vec2(0.733410001, 0.0947899967), Vec2(0.730069995, 0.0748599991), Vec2(0.7597, 0.0834600031), Vec2(0.784370005, 0.112669997), Vec2(0.75940001, 0.102349997), Vec2(0.7597, 0.0834600031), Vec2(0.787840009, 0.0951000005), Vec2(0.838029981, 0.127169997), Vec2(0.814050019, 0.109700002), Vec2(0.821529984, 0.0930500031), Vec2(0.847829998, 0.111960001), Vec2(0.814050019, 0.109700002), Vec2(0.787840009, 0.0951000005), Vec2(0.792649984, 0.0770500004), Vec2(0.821529984, 0.0930500031), Vec2(0.807829976, 0.125780001), Vec2(0.784370005, 0.112669997), Vec2(0.787840009, 0.0951000005), Vec2(0.814050019, 0.109700002), Vec2(0.829349995, 0.141719997), Vec2(0.807829976, 0.125780001), Vec2(0.814050019, 0.109700002), Vec2(0.838029981, 0.127169997), Vec2(0.727729976, 0.0337300003), Vec2(0.687520027, 0.0271099992), Vec2(0.686619997, 0.00461000018), Vec2(0.730799973, 0.0120599996), Vec2(0.687520027, 0.0271099992), Vec2(0.644299984, 0.02513), Vec2(0.63707, 0.00246000011), Vec2(0.686619997, 0.00461000018), Vec2(0.692600012, 0.0485499986), Vec2(0.656340003, 0.0464400016), Vec2(0.644299984, 0.02513), Vec2(0.687520027, 0.0271099992), Vec2(0.727869987, 0.0545599982), Vec2(0.692600012, 0.0485499986), Vec2(0.687520027, 0.0271099992), Vec2(0.727729976, 0.0337300003), Vec2(0.644299984, 0.02513), Vec2(0.598770022, 0.0284499992), Vec2(0.578649998, 0.0076700002), Vec2(0.63707, 0.00246000011), Vec2(0.598770022, 0.0284499992), Vec2(0.554970026, 0.0373000018), Vec2(0.500389993, 0.0235900003), Vec2(0.578649998, 0.0076700002), Vec2(0.620769978, 0.048489999), Vec2(0.589569986, 0.0550599992), Vec2(0.554970026, 0.0373000018), Vec2(0.598770022, 0.0284499992), Vec2(0.656340003, 0.0464400016), Vec2(0.620769978, 0.048489999), Vec2(0.598770022, 0.0284499992), Vec2(0.644299984, 0.02513), Vec2(0.669089973, 0.0673699975), Vec2(0.640150011, 0.068810001), Vec2(0.620769978, 0.048489999), Vec2(0.656340003, 0.0464400016), Vec2(0.640150011, 0.068810001), Vec2(0.614889979, 0.0740899965), Vec2(0.589569986, 0.0550599992), Vec2(0.620769978, 0.048489999), Vec2(0.656589985, 0.089259997), Vec2(0.634829998, 0.0935700014), Vec2(0.614889979, 0.0740899965), Vec2(0.640150011, 0.068810001), Vec2(0.681060016, 0.0881400034), Vec2(0.656589985, 0.089259997), Vec2(0.640150011, 0.068810001), Vec2(0.669089973, 0.0673699975), Vec2(0.730069995, 0.0748599991), Vec2(0.699549973, 0.0694399998), Vec2(0.692600012, 0.0485499986), Vec2(0.727869987, 0.0545599982), Vec2(0.699549973, 0.0694399998), Vec2(0.669089973, 0.0673699975), Vec2(0.656340003, 0.0464400016), Vec2(0.692600012, 0.0485499986), Vec2(0.707019985, 0.0900299996), Vec2(0.681060016, 0.0881400034), Vec2(0.669089973, 0.0673699975), Vec2(0.699549973, 0.0694399998), Vec2(0.733410001, 0.0947899967), Vec2(0.707019985, 0.0900299996), Vec2(0.699549973, 0.0694399998), Vec2(0.730069995, 0.0748599991), Vec2(0.737330019, 0.114430003), Vec2(0.714359999, 0.110380001), Vec2(0.707019985, 0.0900299996), Vec2(0.733410001, 0.0947899967), Vec2(0.714359999, 0.110380001), Vec2(0.691839993, 0.108769998), Vec2(0.681060016, 0.0881400034), Vec2(0.707019985, 0.0900299996), Vec2(0.721369982, 0.130539998), Vec2(0.701439977, 0.129240006), Vec2(0.691839993, 0.108769998), Vec2(0.714359999, 0.110380001), Vec2(0.741609991, 0.133860007), Vec2(0.721369982, 0.130539998), Vec2(0.714359999, 0.110380001), Vec2(0.737330019, 0.114430003), Vec2(0.691839993, 0.108769998), Vec2(0.670520008, 0.109690003), Vec2(0.656589985, 0.089259997), Vec2(0.681060016, 0.0881400034), Vec2(0.670520008, 0.109690003), Vec2(0.65109998, 0.113219999), Vec2(0.634829998, 0.0935700014), Vec2(0.656589985, 0.089259997), Vec2(0.682380021, 0.130030006), Vec2(0.664640009, 0.132939994), Vec2(0.65109998, 0.113219999), Vec2(0.670520008, 0.109690003), Vec2(0.701439977, 0.129240006), Vec2(0.682380021, 0.130030006), Vec2(0.670520008, 0.109690003), Vec2(0.691839993, 0.108769998), Vec2(0.710009992, 0.149580002), Vec2(0.692550004, 0.15027), Vec2(0.682380021, 0.130030006), Vec2(0.701439977, 0.129240006), Vec2(0.692550004, 0.15027), Vec2(0.67602998, 0.152689993), Vec2(0.664640009, 0.132939994), Vec2(0.682380021, 0.130030006), Vec2(0.701359987, 0.170489997), Vec2(0.685660005, 0.172519997), Vec2(0.67602998, 0.152689993), Vec2(0.692550004, 0.15027), Vec2(0.717710018, 0.169870004), Vec2(0.701359987, 0.170489997), Vec2(0.692550004, 0.15027), Vec2(0.710009992, 0.149580002), Vec2(0.746219993, 0.153190002), Vec2(0.728049994, 0.150580004), Vec2(0.721369982, 0.130539998), Vec2(0.741609991, 0.133860007), Vec2(0.728049994, 0.150580004), Vec2(0.710009992, 0.149580002), Vec2(0.701439977, 0.129240006), Vec2(0.721369982, 0.130539998), Vec2(0.734449983, 0.170599997), Vec2(0.717710018, 0.169870004), Vec2(0.710009992, 0.149580002), Vec2(0.728049994, 0.150580004), Vec2(0.751190007, 0.172560006), Vec2(0.734449983, 0.170599997), Vec2(0.728049994, 0.150580004), Vec2(0.746219993, 0.153190002), Vec2(0.821680009, 0.155430004), Vec2(0.802730024, 0.141210005), Vec2(0.807829976, 0.125780001), Vec2(0.829349995, 0.141719997), Vec2(0.802730024, 0.141210005), Vec2(0.78204, 0.129749998), Vec2(0.784370005, 0.112669997), Vec2(0.807829976, 0.125780001), Vec2(0.79877001, 0.155890003), Vec2(0.780830026, 0.146410003), Vec2(0.78204, 0.129749998), Vec2(0.802730024, 0.141210005), Vec2(0.814970016, 0.168009996), Vec2(0.79877001, 0.155890003), Vec2(0.802730024, 0.141210005), Vec2(0.821680009, 0.155430004), Vec2(0.78204, 0.129749998), Vec2(0.76007998, 0.12088), Vec2(0.75940001, 0.102349997), Vec2(0.784370005, 0.112669997), Vec2(0.76007998, 0.12088), Vec2(0.737330019, 0.114430003), Vec2(0.733410001, 0.0947899967), Vec2(0.75940001, 0.102349997), Vec2(0.761609972, 0.139139995), Vec2(0.741609991, 0.133860007), Vec2(0.737330019, 0.114430003), Vec2(0.76007998, 0.12088), Vec2(0.780830026, 0.146410003), Vec2(0.761609972, 0.139139995), Vec2(0.76007998, 0.12088), Vec2(0.78204, 0.129749998), Vec2(0.780969977, 0.16279), Vec2(0.764050007, 0.157289997), Vec2(0.761609972, 0.139139995), Vec2(0.780830026, 0.146410003), Vec2(0.764050007, 0.157289997), Vec2(0.746219993, 0.153190002), Vec2(0.741609991, 0.133860007), Vec2(0.761609972, 0.139139995), Vec2(0.767509997, 0.175549999), Vec2(0.751190007, 0.172560006), Vec2(0.746219993, 0.153190002), Vec2(0.764050007, 0.157289997), Vec2(0.782850027, 0.179260001), Vec2(0.767509997, 0.175549999), Vec2(0.764050007, 0.157289997), Vec2(0.780969977, 0.16279), Vec2(0.809329987, 0.178929999), Vec2(0.796320021, 0.16979), Vec2(0.79877001, 0.155890003), Vec2(0.814970016, 0.168009996), Vec2(0.796320021, 0.16979), Vec2(0.780969977, 0.16279), Vec2(0.780830026, 0.146410003), Vec2(0.79877001, 0.155890003), Vec2(0.796360016, 0.183239996), Vec2(0.782850027, 0.179260001), Vec2(0.780969977, 0.16279), Vec2(0.796320021, 0.16979), Vec2(0.805589974, 0.186350003), Vec2(0.796360016, 0.183239996), Vec2(0.796320021, 0.16979), Vec2(0.809329987, 0.178929999), Vec2(0.190530002, 0.502749979), Vec2(0.179619998, 0.489800006), Vec2(0.188820004, 0.484710008), Vec2(0.194230005, 0.495350003), Vec2(0.179619998, 0.489800006), Vec2(0.169829994, 0.473269999), Vec2(0.181649998, 0.468769997), Vec2(0.188820004, 0.484710008), Vec2(0.170719996, 0.498369992), Vec2(0.158350006, 0.480349988), Vec2(0.169829994, 0.473269999), Vec2(0.179619998, 0.489800006), Vec2(0.184980005, 0.513610005), Vec2(0.170719996, 0.498369992), Vec2(0.179619998, 0.489800006), Vec2(0.190530002, 0.502749979), Vec2(0.169829994, 0.473269999), Vec2(0.161090001, 0.454160005), Vec2(0.174510002, 0.450219989), Vec2(0.181649998, 0.468769997), Vec2(0.161090001, 0.454160005), Vec2(0.153569996, 0.433169991), Vec2(0.168099999, 0.429879993), Vec2(0.174510002, 0.450219989), Vec2(0.147750005, 0.460040003), Vec2(0.138909996, 0.437940001), Vec2(0.153569996, 0.433169991), Vec2(0.161090001, 0.454160005), Vec2(0.158350006, 0.480349988), Vec2(0.147750005, 0.460040003), Vec2(0.161090001, 0.454160005), Vec2(0.169829994, 0.473269999), Vec2(0.146709993, 0.489329994), Vec2(0.134210005, 0.467550009), Vec2(0.147750005, 0.460040003), Vec2(0.158350006, 0.480349988), Vec2(0.134210005, 0.467550009), Vec2(0.123899996, 0.44400999), Vec2(0.138909996, 0.437940001), Vec2(0.147750005, 0.460040003), Vec2(0.120169997, 0.476319999), Vec2(0.108309999, 0.451160014), Vec2(0.123899996, 0.44400999), Vec2(0.134210005, 0.467550009), Vec2(0.134550005, 0.499680012), Vec2(0.120169997, 0.476319999), Vec2(0.134210005, 0.467550009), Vec2(0.146709993, 0.489329994), Vec2(0.178340003, 0.52609998), Vec2(0.161420003, 0.508979976), Vec2(0.170719996, 0.498369992), Vec2(0.184980005, 0.513610005), Vec2(0.161420003, 0.508979976), Vec2(0.146709993, 0.489329994), Vec2(0.158350006, 0.480349988), Vec2(0.170719996, 0.498369992), Vec2(0.151419997, 0.520910025), Vec2(0.134550005, 0.499680012), Vec2(0.146709993, 0.489329994), Vec2(0.161420003, 0.508979976), Vec2(0.170719996, 0.539680004), Vec2(0.151419997, 0.520910025), Vec2(0.161420003, 0.508979976), Vec2(0.178340003, 0.52609998), Vec2(0.153569996, 0.433169991), Vec2(0.147499993, 0.410809994), Vec2(0.162780002, 0.408250004), Vec2(0.168099999, 0.429879993), Vec2(0.147499993, 0.410809994), Vec2(0.143040001, 0.387490004), Vec2(0.158830002, 0.385720015), Vec2(0.162780002, 0.408250004), Vec2(0.131899998, 0.41444999), Vec2(0.126809999, 0.389970005), Vec2(0.143040001, 0.387490004), Vec2(0.147499993, 0.410809994), Vec2(0.138909996, 0.437940001), Vec2(0.131899998, 0.41444999), Vec2(0.147499993, 0.410809994), Vec2(0.153569996, 0.433169991), Vec2(0.143040001, 0.387490004), Vec2(0.140310004, 0.363550007), Vec2(0.156379998, 0.362619996), Vec2(0.158830002, 0.385720015), Vec2(0.140310004, 0.363550007), Vec2(0.139359996, 0.339329988), Vec2(0.155520007, 0.339249998), Vec2(0.156379998, 0.362619996), Vec2(0.123709999, 0.364850014), Vec2(0.12263, 0.339430004), Vec2(0.139359996, 0.339329988), Vec2(0.140310004, 0.363550007), Vec2(0.126809999, 0.389970005), Vec2(0.123709999, 0.364850014), Vec2(0.140310004, 0.363550007), Vec2(0.143040001, 0.387490004), Vec2(0.109949999, 0.393119991), Vec2(0.106409997, 0.36649999), Vec2(0.123709999, 0.364850014), Vec2(0.126809999, 0.389970005), Vec2(0.106409997, 0.36649999), Vec2(0.105169997, 0.339560002), Vec2(0.12263, 0.339430004), Vec2(0.123709999, 0.364850014), Vec2(0.0882600024, 0.368470013), Vec2(0.0868399963, 0.339709997), Vec2(0.105169997, 0.339560002), Vec2(0.106409997, 0.36649999), Vec2(0.0923099965, 0.396869987), Vec2(0.0882600024, 0.368470013), Vec2(0.106409997, 0.36649999), Vec2(0.109949999, 0.393119991), Vec2(0.123899996, 0.44400999), Vec2(0.115790002, 0.419070005), Vec2(0.131899998, 0.41444999), Vec2(0.138909996, 0.437940001), Vec2(0.115790002, 0.419070005), Vec2(0.109949999, 0.393119991), Vec2(0.126809999, 0.389970005), Vec2(0.131899998, 0.41444999), Vec2(0.0990099981, 0.424549997), Vec2(0.0923099965, 0.396869987), Vec2(0.109949999, 0.393119991), Vec2(0.115790002, 0.419070005), Vec2(0.108309999, 0.451160014), Vec2(0.0990099981, 0.424549997), Vec2(0.115790002, 0.419070005), Vec2(0.123899996, 0.44400999), Vec2(0.091959998, 0.459190011), Vec2(0.0813800022, 0.43077001), Vec2(0.0990099981, 0.424549997), Vec2(0.108309999, 0.451160014), Vec2(0.0813800022, 0.43077001), Vec2(0.0737499967, 0.401149988), Vec2(0.0923099965, 0.396869987), Vec2(0.0990099981, 0.424549997), Vec2(0.0627800003, 0.43761), Vec2(0.0541299991, 0.405900002), Vec2(0.0737499967, 0.401149988), Vec2(0.0813800022, 0.43077001), Vec2(0.0746800005, 0.46796), Vec2(0.0627800003, 0.43761), Vec2(0.0813800022, 0.43077001), Vec2(0.091959998, 0.459190011), Vec2(0.0737499967, 0.401149988), Vec2(0.0691199973, 0.370730013), Vec2(0.0882600024, 0.368470013), Vec2(0.0923099965, 0.396869987), Vec2(0.0691199973, 0.370730013), Vec2(0.0674899966, 0.339899987), Vec2(0.0868399963, 0.339709997), Vec2(0.0882600024, 0.368470013), Vec2(0.0488499999, 0.373259991), Vec2(0.0469899997, 0.340140015), Vec2(0.0674899966, 0.339899987), Vec2(0.0691199973, 0.370730013), Vec2(0.0541299991, 0.405900002), Vec2(0.0488499999, 0.373259991), Vec2(0.0691199973, 0.370730013), Vec2(0.0737499967, 0.401149988), Vec2(0.0333099999, 0.411060005), Vec2(0.0273199994, 0.376029998), Vec2(0.0488499999, 0.373259991), Vec2(0.0541299991, 0.405900002), Vec2(0.0273199994, 0.376029998), Vec2(0.0252, 0.340420008), Vec2(0.0469899997, 0.340140015), Vec2(0.0488499999, 0.373259991), Vec2(0.00437000021, 0.379020005), Vec2(0.00194999995, 0.340770006), Vec2(0.0252, 0.340420008), Vec2(0.0273199994, 0.376029998), Vec2(0.0111199999, 0.416570008), Vec2(0.00437000021, 0.379020005), Vec2(0.0273199994, 0.376029998), Vec2(0.0333099999, 0.411060005), Vec2(0.0563400015, 0.47736001), Vec2(0.0430399999, 0.444990009), Vec2(0.0627800003, 0.43761), Vec2(0.0746800005, 0.46796), Vec2(0.0430399999, 0.444990009), Vec2(0.0333099999, 0.411060005), Vec2(0.0541299991, 0.405900002), Vec2(0.0627800003, 0.43761), Vec2(0.0220100004, 0.452829987), Vec2(0.0111199999, 0.416570008), Vec2(0.0333099999, 0.411060005), Vec2(0.0430399999, 0.444990009), Vec2(0.03675, 0.487300009), Vec2(0.0220100004, 0.452829987), Vec2(0.0430399999, 0.444990009), Vec2(0.0563400015, 0.47736001), Vec2(0.162070006, 0.554069996), Vec2(0.140530005, 0.533789992), Vec2(0.151419997, 0.520910025), Vec2(0.170719996, 0.539680004), Vec2(0.140530005, 0.533789992), Vec2(0.121610001, 0.511030018), Vec2(0.134550005, 0.499680012), Vec2(0.151419997, 0.520910025), Vec2(0.128629997, 0.547410011), Vec2(0.10774, 0.523159981), Vec2(0.121610001, 0.511030018), Vec2(0.140530005, 0.533789992), Vec2(0.152280003, 0.569109976), Vec2(0.128629997, 0.547410011), Vec2(0.140530005, 0.533789992), Vec2(0.162070006, 0.554069996), Vec2(0.121610001, 0.511030018), Vec2(0.105400003, 0.486059994), Vec2(0.120169997, 0.476319999), Vec2(0.134550005, 0.499680012), Vec2(0.105400003, 0.486059994), Vec2(0.091959998, 0.459190011), Vec2(0.108309999, 0.451160014), Vec2(0.120169997, 0.476319999), Vec2(0.0897200033, 0.496589988), Vec2(0.0746800005, 0.46796), Vec2(0.091959998, 0.459190011), Vec2(0.105400003, 0.486059994), Vec2(0.10774, 0.523159981), Vec2(0.0897200033, 0.496589988), Vec2(0.105400003, 0.486059994), Vec2(0.121610001, 0.511030018), Vec2(0.0927900001, 0.535969973), Vec2(0.0729900002, 0.507790029), Vec2(0.0897200033, 0.496589988), Vec2(0.10774, 0.523159981), Vec2(0.0729900002, 0.507790029), Vec2(0.0563400015, 0.47736001), Vec2(0.0746800005, 0.46796), Vec2(0.0897200033, 0.496589988), Vec2(0.0550500005, 0.519580007), Vec2(0.03675, 0.487300009), Vec2(0.0563400015, 0.47736001), Vec2(0.0729900002, 0.507790029), Vec2(0.0766099989, 0.549399972), Vec2(0.0550500005, 0.519580007), Vec2(0.0729900002, 0.507790029), Vec2(0.0927900001, 0.535969973), Vec2(0.141220003, 0.584730029), Vec2(0.115560003, 0.561670005), Vec2(0.128629997, 0.547410011), Vec2(0.152280003, 0.569109976), Vec2(0.115560003, 0.561670005), Vec2(0.0927900001, 0.535969973), Vec2(0.10774, 0.523159981), Vec2(0.128629997, 0.547410011), Vec2(0.101209998, 0.576569974), Vec2(0.0766099989, 0.549399972), Vec2(0.0927900001, 0.535969973), Vec2(0.115560003, 0.561670005), Vec2(0.128780007, 0.600870013), Vec2(0.101209998, 0.576569974), Vec2(0.115560003, 0.561670005), Vec2(0.141220003, 0.584730029), Vec2(0.139359996, 0.339329988), Vec2(0.140200004, 0.315100014), Vec2(0.156289995, 0.315869987), Vec2(0.155520007, 0.339249998), Vec2(0.140200004, 0.315100014), Vec2(0.142829999, 0.291150004), Vec2(0.158659995, 0.292769998), Vec2(0.156289995, 0.315869987), Vec2(0.123570003, 0.31400001), Vec2(0.126540005, 0.288850009), Vec2(0.142829999, 0.291150004), Vec2(0.140200004, 0.315100014), Vec2(0.12263, 0.339430004), Vec2(0.123570003, 0.31400001), Vec2(0.140200004, 0.315100014), Vec2(0.139359996, 0.339329988), Vec2(0.142829999, 0.291150004), Vec2(0.147200003, 0.26778999), Vec2(0.162550002, 0.270229995), Vec2(0.158659995, 0.292769998), Vec2(0.147200003, 0.26778999), Vec2(0.153209999, 0.245409995), Vec2(0.167820007, 0.248590007), Vec2(0.162550002, 0.270229995), Vec2(0.131530002, 0.264319986), Vec2(0.138469994, 0.240779996), Vec2(0.153209999, 0.245409995), Vec2(0.147200003, 0.26778999), Vec2(0.126540005, 0.288850009), Vec2(0.131530002, 0.264319986), Vec2(0.147200003, 0.26778999), Vec2(0.142829999, 0.291150004), Vec2(0.109630004, 0.285939991), Vec2(0.115340002, 0.259909987), Vec2(0.131530002, 0.264319986), Vec2(0.126540005, 0.288850009), Vec2(0.115340002, 0.259909987), Vec2(0.123360001, 0.234899998), Vec2(0.138469994, 0.240779996), Vec2(0.131530002, 0.264319986), Vec2(0.0984599963, 0.254700005), Vec2(0.107660003, 0.227980003), Vec2(0.123360001, 0.234899998), Vec2(0.115340002, 0.259909987), Vec2(0.0919200033, 0.282480001), Vec2(0.0984599963, 0.254700005), Vec2(0.115340002, 0.259909987), Vec2(0.109630004, 0.285939991), Vec2(0.105169997, 0.339560002), Vec2(0.106239997, 0.312599987), Vec2(0.123570003, 0.31400001), Vec2(0.12263, 0.339430004), Vec2(0.106239997, 0.312599987), Vec2(0.109630004, 0.285939991), Vec2(0.126540005, 0.288850009), Vec2(0.123570003, 0.31400001), Vec2(0.088059999, 0.310939997), Vec2(0.0919200033, 0.282480001), Vec2(0.109630004, 0.285939991), Vec2(0.106239997, 0.312599987), Vec2(0.0868399963, 0.339709997), Vec2(0.088059999, 0.310939997), Vec2(0.106239997, 0.312599987), Vec2(0.105169997, 0.339560002), Vec2(0.153209999, 0.245409995), Vec2(0.160699993, 0.22439), Vec2(0.174219996, 0.228259996), Vec2(0.167820007, 0.248590007), Vec2(0.160699993, 0.22439), Vec2(0.169459999, 0.205270007), Vec2(0.181370005, 0.209729999), Vec2(0.174219996, 0.228259996), Vec2(0.147269994, 0.218620002), Vec2(0.157890007, 0.198280007), Vec2(0.169459999, 0.205270007), Vec2(0.160699993, 0.22439), Vec2(0.138469994, 0.240779996), Vec2(0.147269994, 0.218620002), Vec2(0.160699993, 0.22439), Vec2(0.153209999, 0.245409995), Vec2(0.169459999, 0.205270007), Vec2(0.179299995, 0.18874), Vec2(0.188590005, 0.19382), Vec2(0.181370005, 0.209729999), Vec2(0.179299995, 0.18874), Vec2(0.190329999, 0.175870001), Vec2(0.194059998, 0.183160007), Vec2(0.188590005, 0.19382), Vec2(0.170330003, 0.180250004), Vec2(0.184719995, 0.165069997), Vec2(0.190329999, 0.175870001), Vec2(0.179299995, 0.18874), Vec2(0.157890007, 0.198280007), Vec2(0.170330003, 0.180250004), Vec2(0.179299995, 0.18874), Vec2(0.169459999, 0.205270007), Vec2(0.146139994, 0.18942), Vec2(0.160929993, 0.169740006), Vec2(0.170330003, 0.180250004), Vec2(0.157890007, 0.198280007), Vec2(0.160929993, 0.169740006), Vec2(0.177990004, 0.152649999), Vec2(0.184719995, 0.165069997), Vec2(0.170330003, 0.180250004), Vec2(0.150800005, 0.157920003), Vec2(0.17024, 0.139139995), Vec2(0.177990004, 0.152649999), Vec2(0.160929993, 0.169740006), Vec2(0.133849993, 0.179220006), Vec2(0.150800005, 0.157920003), Vec2(0.160929993, 0.169740006), Vec2(0.146139994, 0.18942), Vec2(0.123360001, 0.234899998), Vec2(0.133619994, 0.211270005), Vec2(0.147269994, 0.218620002), Vec2(0.138469994, 0.240779996), Vec2(0.133619994, 0.211270005), Vec2(0.146139994, 0.18942), Vec2(0.157890007, 0.198280007), Vec2(0.147269994, 0.218620002), Vec2(0.119460002, 0.202700004), Vec2(0.133849993, 0.179220006), Vec2(0.146139994, 0.18942), Vec2(0.133619994, 0.211270005), Vec2(0.107660003, 0.227980003), Vec2(0.119460002, 0.202700004), Vec2(0.133619994, 0.211270005), Vec2(0.123360001, 0.234899998), Vec2(0.091169998, 0.22022), Vec2(0.104549997, 0.193179995), Vec2(0.119460002, 0.202700004), Vec2(0.107660003, 0.227980003), Vec2(0.104549997, 0.193179995), Vec2(0.12077, 0.168050006), Vec2(0.133849993, 0.179220006), Vec2(0.119460002, 0.202700004), Vec2(0.0886899978, 0.182919994), Vec2(0.106720001, 0.156110004), Vec2(0.12077, 0.168050006), Vec2(0.104549997, 0.193179995), Vec2(0.073739998, 0.211789995), Vec2(0.0886899978, 0.182919994), Vec2(0.104549997, 0.193179995), Vec2(0.091169998, 0.22022), Vec2(0.12077, 0.168050006), Vec2(0.139770001, 0.145150006), Vec2(0.150800005, 0.157920003), Vec2(0.133849993, 0.179220006), Vec2(0.139770001, 0.145150006), Vec2(0.161449999, 0.124810003), Vec2(0.17024, 0.139139995), Vec2(0.150800005, 0.157920003), Vec2(0.127690002, 0.131650001), Vec2(0.15151, 0.109810002), Vec2(0.161449999, 0.124810003), Vec2(0.139770001, 0.145150006), Vec2(0.106720001, 0.156110004), Vec2(0.127690002, 0.131650001), Vec2(0.139770001, 0.145150006), Vec2(0.12077, 0.168050006), Vec2(0.0915599987, 0.143519998), Vec2(0.114440002, 0.1175), Vec2(0.127690002, 0.131650001), Vec2(0.106720001, 0.156110004), Vec2(0.114440002, 0.1175), Vec2(0.140279993, 0.0941800028), Vec2(0.15151, 0.109810002), Vec2(0.127690002, 0.131650001), Vec2(0.0998800024, 0.102739997), Vec2(0.127639994, 0.0779199973), Vec2(0.140279993, 0.0941800028), Vec2(0.114440002, 0.1175), Vec2(0.0751499981, 0.130360007), Vec2(0.0998800024, 0.102739997), Vec2(0.114440002, 0.1175), Vec2(0.0915599987, 0.143519998), Vec2(0.0551999994, 0.202790007), Vec2(0.0717599988, 0.172040001), Vec2(0.0886899978, 0.182919994), Vec2(0.073739998, 0.211789995), Vec2(0.0717599988, 0.172040001), Vec2(0.0915599987, 0.143519998), Vec2(0.106720001, 0.156110004), Vec2(0.0886899978, 0.182919994), Vec2(0.0535599999, 0.160620004), Vec2(0.0751499981, 0.130360007), Vec2(0.0915599987, 0.143519998), Vec2(0.0717599988, 0.172040001), Vec2(0.035360001, 0.193320006), Vec2(0.0535599999, 0.160620004), Vec2(0.0717599988, 0.172040001), Vec2(0.0551999994, 0.202790007), Vec2(0.0674899966, 0.339899987), Vec2(0.0688799992, 0.309049994), Vec2(0.088059999, 0.310939997), Vec2(0.0868399963, 0.339709997), Vec2(0.0688799992, 0.309049994), Vec2(0.0732899979, 0.278549999), Vec2(0.0919200033, 0.282480001), Vec2(0.088059999, 0.310939997), Vec2(0.048560001, 0.306980014), Vec2(0.0535699986, 0.274230003), Vec2(0.0732899979, 0.278549999), Vec2(0.0688799992, 0.309049994), Vec2(0.0469899997, 0.340140015), Vec2(0.048560001, 0.306980014), Vec2(0.0688799992, 0.309049994), Vec2(0.0674899966, 0.339899987), Vec2(0.0732899979, 0.278549999), Vec2(0.0807299986, 0.248809993), Vec2(0.0984599963, 0.254700005), Vec2(0.0919200033, 0.282480001), Vec2(0.0807299986, 0.248809993), Vec2(0.091169998, 0.22022), Vec2(0.107660003, 0.227980003), Vec2(0.0984599963, 0.254700005), Vec2(0.0619900003, 0.242359996), Vec2(0.073739998, 0.211789995), Vec2(0.091169998, 0.22022), Vec2(0.0807299986, 0.248809993), Vec2(0.0535699986, 0.274230003), Vec2(0.0619900003, 0.242359996), Vec2(0.0807299986, 0.248809993), Vec2(0.0732899979, 0.278549999), Vec2(0.0326200016, 0.269600004), Vec2(0.0420899987, 0.23545), Vec2(0.0619900003, 0.242359996), Vec2(0.0535699986, 0.274230003), Vec2(0.0420899987, 0.23545), Vec2(0.0551999994, 0.202790007), Vec2(0.073739998, 0.211789995), Vec2(0.0619900003, 0.242359996), Vec2(0.0208400004, 0.228159994), Vec2(0.035360001, 0.193320006), Vec2(0.0551999994, 0.202790007), Vec2(0.0420899987, 0.23545), Vec2(0.01028, 0.264710009), Vec2(0.0208400004, 0.228159994), Vec2(0.0420899987, 0.23545), Vec2(0.0326200016, 0.269600004), Vec2(0.0252, 0.340420008), Vec2(0.0269699991, 0.304760009), Vec2(0.048560001, 0.306980014), Vec2(0.0469899997, 0.340140015), Vec2(0.0269699991, 0.304760009), Vec2(0.0326200016, 0.269600004), Vec2(0.0535699986, 0.274230003), Vec2(0.048560001, 0.306980014), Vec2(0.00393000012, 0.302450001), Vec2(0.01028, 0.264710009), Vec2(0.0326200016, 0.269600004), Vec2(0.0269699991, 0.304760009), Vec2(0.00194999995, 0.340770006), Vec2(0.00393000012, 0.302450001), Vec2(0.0269699991, 0.304760009), Vec2(0.0252, 0.340420008), Vec2(0.974789977, 0.340249985), Vec2(0.97262001, 0.304729998), Vec2(0.995580018, 0.301730007), Vec2(0.99804002, 0.339870006), Vec2(0.97262001, 0.304729998), Vec2(0.966620028, 0.269789994), Vec2(0.988810003, 0.264270008), Vec2(0.995580018, 0.301730007), Vec2(0.951080024, 0.307520002), Vec2(0.945779979, 0.274960011), Vec2(0.966620028, 0.269789994), Vec2(0.97262001, 0.304729998), Vec2(0.952979982, 0.340559989), Vec2(0.951080024, 0.307520002), Vec2(0.97262001, 0.304729998), Vec2(0.974789977, 0.340249985), Vec2(0.966620028, 0.269789994), Vec2(0.956900001, 0.235929996), Vec2(0.977940023, 0.228100002), Vec2(0.988810003, 0.264270008), Vec2(0.956900001, 0.235929996), Vec2(0.94362998, 0.203610003), Vec2(0.963230014, 0.193680003), Vec2(0.977940023, 0.228100002), Vec2(0.937150002, 0.243320003), Vec2(0.925260007, 0.213019997), Vec2(0.94362998, 0.203610003), Vec2(0.956900001, 0.235929996), Vec2(0.945779979, 0.274960011), Vec2(0.937150002, 0.243320003), Vec2(0.956900001, 0.235929996), Vec2(0.966620028, 0.269789994), Vec2(0.92614001, 0.279740006), Vec2(0.918519974, 0.25018999), Vec2(0.937150002, 0.243320003), Vec2(0.945779979, 0.274960011), Vec2(0.918519974, 0.25018999), Vec2(0.907970011, 0.221829996), Vec2(0.925260007, 0.213019997), Vec2(0.937150002, 0.243320003), Vec2(0.900849998, 0.256449997), Vec2(0.891579986, 0.22992), Vec2(0.907970011, 0.221829996), Vec2(0.918519974, 0.25018999), Vec2(0.907540023, 0.284049988), Vec2(0.900849998, 0.256449997), Vec2(0.918519974, 0.25018999), Vec2(0.92614001, 0.279740006), Vec2(0.932449996, 0.340810001), Vec2(0.930779994, 0.310070008), Vec2(0.951080024, 0.307520002), Vec2(0.952979982, 0.340559989), Vec2(0.930779994, 0.310070008), Vec2(0.92614001, 0.279740006), Vec2(0.945779979, 0.274960011), Vec2(0.951080024, 0.307520002), Vec2(0.911599994, 0.312359989), Vec2(0.907540023, 0.284049988), Vec2(0.92614001, 0.279740006), Vec2(0.930779994, 0.310070008), Vec2(0.913049996, 0.341019988), Vec2(0.911599994, 0.312359989), Vec2(0.930779994, 0.310070008), Vec2(0.932449996, 0.340810001), Vec2(0.94362998, 0.203610003), Vec2(0.92701, 0.173199996), Vec2(0.944980025, 0.161420003), Vec2(0.963230014, 0.193680003), Vec2(0.92701, 0.173199996), Vec2(0.907260001, 0.145009995), Vec2(0.92347002, 0.131569996), Vec2(0.944980025, 0.161420003), Vec2(0.910269976, 0.184430003), Vec2(0.892289996, 0.157879993), Vec2(0.907260001, 0.145009995), Vec2(0.92701, 0.173199996), Vec2(0.925260007, 0.213019997), Vec2(0.910269976, 0.184430003), Vec2(0.92701, 0.173199996), Vec2(0.94362998, 0.203610003), Vec2(0.907260001, 0.145009995), Vec2(0.884530008, 0.119269997), Vec2(0.89892, 0.104319997), Vec2(0.92347002, 0.131569996), Vec2(0.884530008, 0.119269997), Vec2(0.858929992, 0.0961600021), Vec2(0.871450007, 0.0797699988), Vec2(0.89892, 0.104319997), Vec2(0.871450007, 0.133640006), Vec2(0.847829998, 0.111960001), Vec2(0.858929992, 0.0961600021), Vec2(0.884530008, 0.119269997), Vec2(0.892289996, 0.157879993), Vec2(0.871450007, 0.133640006), Vec2(0.884530008, 0.119269997), Vec2(0.907260001, 0.145009995), Vec2(0.878390014, 0.170100003), Vec2(0.859520018, 0.147379994), Vec2(0.871450007, 0.133640006), Vec2(0.892289996, 0.157879993), Vec2(0.859520018, 0.147379994), Vec2(0.838029981, 0.127169997), Vec2(0.847829998, 0.111960001), Vec2(0.871450007, 0.133640006), Vec2(0.848609984, 0.160390005), Vec2(0.829349995, 0.141719997), Vec2(0.838029981, 0.127169997), Vec2(0.859520018, 0.147379994), Vec2(0.865429997, 0.181539997), Vec2(0.848609984, 0.160390005), Vec2(0.859520018, 0.147379994), Vec2(0.878390014, 0.170100003), Vec2(0.907970011, 0.221829996), Vec2(0.894569993, 0.195020005), Vec2(0.910269976, 0.184430003), Vec2(0.925260007, 0.213019997), Vec2(0.894569993, 0.195020005), Vec2(0.878390014, 0.170100003), Vec2(0.892289996, 0.157879993), Vec2(0.910269976, 0.184430003), Vec2(0.879760027, 0.204840004), Vec2(0.865429997, 0.181539997), Vec2(0.878390014, 0.170100003), Vec2(0.894569993, 0.195020005), Vec2(0.891579986, 0.22992), Vec2(0.879760027, 0.204840004), Vec2(0.894569993, 0.195020005), Vec2(0.907970011, 0.221829996), Vec2(0.875940025, 0.237130001), Vec2(0.865670025, 0.213679999), Vec2(0.879760027, 0.204840004), Vec2(0.891579986, 0.22992), Vec2(0.865670025, 0.213679999), Vec2(0.853219986, 0.191980004), Vec2(0.865429997, 0.181539997), Vec2(0.879760027, 0.204840004), Vec2(0.85206002, 0.221249998), Vec2(0.841509998, 0.20104), Vec2(0.853219986, 0.191980004), Vec2(0.865670025, 0.213679999), Vec2(0.86085999, 0.243249997), Vec2(0.85206002, 0.221249998), Vec2(0.865670025, 0.213679999), Vec2(0.875940025, 0.237130001), Vec2(0.853219986, 0.191980004), Vec2(0.838559985, 0.172429994), Vec2(0.848609984, 0.160390005), Vec2(0.865429997, 0.181539997), Vec2(0.838559985, 0.172429994), Vec2(0.821680009, 0.155430004), Vec2(0.829349995, 0.141719997), Vec2(0.848609984, 0.160390005), Vec2(0.829190016, 0.183129996), Vec2(0.814970016, 0.168009996), Vec2(0.821680009, 0.155430004), Vec2(0.838559985, 0.172429994), Vec2(0.841509998, 0.20104), Vec2(0.829190016, 0.183129996), Vec2(0.838559985, 0.172429994), Vec2(0.853219986, 0.191980004), Vec2(0.829970002, 0.208179995), Vec2(0.820230007, 0.191760004), Vec2(0.829190016, 0.183129996), Vec2(0.841509998, 0.20104), Vec2(0.820230007, 0.191760004), Vec2(0.809329987, 0.178929999), Vec2(0.814970016, 0.168009996), Vec2(0.829190016, 0.183129996), Vec2(0.810959995, 0.196899995), Vec2(0.805589974, 0.186350003), Vec2(0.809329987, 0.178929999), Vec2(0.820230007, 0.191760004), Vec2(0.818069994, 0.212720007), Vec2(0.810959995, 0.196899995), Vec2(0.820230007, 0.191760004), Vec2(0.829970002, 0.208179995), Vec2(0.846109986, 0.248060003), Vec2(0.838649988, 0.227180004), Vec2(0.85206002, 0.221249998), Vec2(0.86085999, 0.243249997), Vec2(0.838649988, 0.227180004), Vec2(0.829970002, 0.208179995), Vec2(0.841509998, 0.20104), Vec2(0.85206002, 0.221249998), Vec2(0.825139999, 0.23116), Vec2(0.818069994, 0.212720007), Vec2(0.829970002, 0.208179995), Vec2(0.838649988, 0.227180004), Vec2(0.831499994, 0.251370013), Vec2(0.825139999, 0.23116), Vec2(0.838649988, 0.227180004), Vec2(0.846109986, 0.248060003), Vec2(0.894659996, 0.34119001), Vec2(0.89339, 0.314350009), Vec2(0.911599994, 0.312359989), Vec2(0.913049996, 0.341019988), Vec2(0.89339, 0.314350009), Vec2(0.889840007, 0.287829995), Vec2(0.907540023, 0.284049988), Vec2(0.911599994, 0.312359989), Vec2(0.876020014, 0.316009998), Vec2(0.872910023, 0.291000009), Vec2(0.889840007, 0.287829995), Vec2(0.89339, 0.314350009), Vec2(0.877139986, 0.341320008), Vec2(0.876020014, 0.316009998), Vec2(0.89339, 0.314350009), Vec2(0.894659996, 0.34119001), Vec2(0.889840007, 0.287829995), Vec2(0.884010017, 0.261970013), Vec2(0.900849998, 0.256449997), Vec2(0.907540023, 0.284049988), Vec2(0.884010017, 0.261970013), Vec2(0.875940025, 0.237130001), Vec2(0.891579986, 0.22992), Vec2(0.900849998, 0.256449997), Vec2(0.867839992, 0.266629994), Vec2(0.86085999, 0.243249997), Vec2(0.875940025, 0.237130001), Vec2(0.884010017, 0.261970013), Vec2(0.872910023, 0.291000009), Vec2(0.867839992, 0.266629994), Vec2(0.884010017, 0.261970013), Vec2(0.889840007, 0.287829995), Vec2(0.856589973, 0.293500006), Vec2(0.852150023, 0.270300001), Vec2(0.867839992, 0.266629994), Vec2(0.872910023, 0.291000009), Vec2(0.852150023, 0.270300001), Vec2(0.846109986, 0.248060003), Vec2(0.86085999, 0.243249997), Vec2(0.867839992, 0.266629994), Vec2(0.836769998, 0.272879988), Vec2(0.831499994, 0.251370013), Vec2(0.846109986, 0.248060003), Vec2(0.852150023, 0.270300001), Vec2(0.840709984, 0.29528001), Vec2(0.836769998, 0.272879988), Vec2(0.852150023, 0.270300001), Vec2(0.856589973, 0.293500006), Vec2(0.860319972, 0.341419995), Vec2(0.859329998, 0.317319989), Vec2(0.876020014, 0.316009998), Vec2(0.877139986, 0.341320008), Vec2(0.859329998, 0.317319989), Vec2(0.856589973, 0.293500006), Vec2(0.872910023, 0.291000009), Vec2(0.876020014, 0.316009998), Vec2(0.843159974, 0.31825), Vec2(0.840709984, 0.29528001), Vec2(0.856589973, 0.293500006), Vec2(0.859329998, 0.317319989), Vec2(0.844060004, 0.341500014), Vec2(0.843159974, 0.31825), Vec2(0.859329998, 0.317319989), Vec2(0.860319972, 0.341419995), Vec2(0.860819995, 0.586709976), Vec2(0.886500001, 0.563220024), Vec2(0.901189983, 0.577929974), Vec2(0.873660028, 0.603190005), Vec2(0.886500001, 0.563220024), Vec2(0.909210026, 0.537039995), Vec2(0.925719976, 0.55013001), Vec2(0.901189983, 0.577929974), Vec2(0.873160005, 0.549000025), Vec2(0.893980026, 0.524460018), Vec2(0.909210026, 0.537039995), Vec2(0.886500001, 0.563220024), Vec2(0.849479973, 0.570919991), Vec2(0.873160005, 0.549000025), Vec2(0.886500001, 0.563220024), Vec2(0.860819995, 0.586709976), Vec2(0.909210026, 0.537039995), Vec2(0.928849995, 0.508440018), Vec2(0.947109997, 0.519770026), Vec2(0.925719976, 0.55013001), Vec2(0.928849995, 0.508440018), Vec2(0.945240021, 0.47766), Vec2(0.965120018, 0.487029999), Vec2(0.947109997, 0.519770026), Vec2(0.911849976, 0.497590005), Vec2(0.926649988, 0.468699992), Vec2(0.945240021, 0.47766), Vec2(0.928849995, 0.508440018), Vec2(0.893980026, 0.524460018), Vec2(0.911849976, 0.497590005), Vec2(0.928849995, 0.508440018), Vec2(0.909210026, 0.537039995), Vec2(0.879869998, 0.512470007), Vec2(0.895940006, 0.487309992), Vec2(0.911849976, 0.497590005), Vec2(0.893980026, 0.524460018), Vec2(0.895940006, 0.487309992), Vec2(0.909169972, 0.460269988), Vec2(0.926649988, 0.468699992), Vec2(0.911849976, 0.497590005), Vec2(0.880970001, 0.477750003), Vec2(0.892629981, 0.452490002), Vec2(0.909169972, 0.460269988), Vec2(0.895940006, 0.487309992), Vec2(0.866729975, 0.501209974), Vec2(0.880970001, 0.477750003), Vec2(0.895940006, 0.487309992), Vec2(0.879869998, 0.512470007), Vec2(0.839460015, 0.555760026), Vec2(0.861020029, 0.535390019), Vec2(0.873160005, 0.549000025), Vec2(0.849479973, 0.570919991), Vec2(0.861020029, 0.535390019), Vec2(0.879869998, 0.512470007), Vec2(0.893980026, 0.524460018), Vec2(0.873160005, 0.549000025), Vec2(0.849919975, 0.522520006), Vec2(0.866729975, 0.501209974), Vec2(0.879869998, 0.512470007), Vec2(0.861020029, 0.535390019), Vec2(0.830600023, 0.541279972), Vec2(0.849919975, 0.522520006), Vec2(0.861020029, 0.535390019), Vec2(0.839460015, 0.555760026), Vec2(0.945240021, 0.47766), Vec2(0.958199978, 0.445010006), Vec2(0.979480028, 0.452219993), Vec2(0.965120018, 0.487029999), Vec2(0.958199978, 0.445010006), Vec2(0.967530012, 0.41091001), Vec2(0.989899993, 0.41573), Vec2(0.979480028, 0.452219993), Vec2(0.938260019, 0.438149989), Vec2(0.946560025, 0.406320006), Vec2(0.967530012, 0.41091001), Vec2(0.958199978, 0.445010006), Vec2(0.926649988, 0.468699992), Vec2(0.938260019, 0.438149989), Vec2(0.958199978, 0.445010006), Vec2(0.945240021, 0.47766), Vec2(0.967530012, 0.41091001), Vec2(0.973089993, 0.375820011), Vec2(0.996140003, 0.378089994), Vec2(0.989899993, 0.41573), Vec2(0.973089993, 0.375820011), Vec2(0.974789977, 0.340249985), Vec2(0.99804002, 0.339870006), Vec2(0.996140003, 0.378089994), Vec2(0.951479971, 0.373640001), Vec2(0.952979982, 0.340559989), Vec2(0.974789977, 0.340249985), Vec2(0.973089993, 0.375820011), Vec2(0.946560025, 0.406320006), Vec2(0.951479971, 0.373640001), Vec2(0.973089993, 0.375820011), Vec2(0.967530012, 0.41091001), Vec2(0.926810026, 0.402020007), Vec2(0.931129992, 0.371589988), Vec2(0.951479971, 0.373640001), Vec2(0.946560025, 0.406320006), Vec2(0.931129992, 0.371589988), Vec2(0.932449996, 0.340810001), Vec2(0.952979982, 0.340559989), Vec2(0.951479971, 0.373640001), Vec2(0.911899984, 0.369709998), Vec2(0.913049996, 0.341019988), Vec2(0.932449996, 0.340810001), Vec2(0.931129992, 0.371589988), Vec2(0.90812999, 0.398090005), Vec2(0.911899984, 0.369709998), Vec2(0.931129992, 0.371589988), Vec2(0.926810026, 0.402020007), Vec2(0.909169972, 0.460269988), Vec2(0.919480026, 0.431710005), Vec2(0.938260019, 0.438149989), Vec2(0.926649988, 0.468699992), Vec2(0.919480026, 0.431710005), Vec2(0.926810026, 0.402020007), Vec2(0.946560025, 0.406320006), Vec2(0.938260019, 0.438149989), Vec2(0.90170002, 0.425810009), Vec2(0.90812999, 0.398090005), Vec2(0.926810026, 0.402020007), Vec2(0.919480026, 0.431710005), Vec2(0.892629981, 0.452490002), Vec2(0.90170002, 0.425810009), Vec2(0.919480026, 0.431710005), Vec2(0.909169972, 0.460269988), Vec2(0.876869977, 0.445529997), Vec2(0.884760022, 0.42058), Vec2(0.90170002, 0.425810009), Vec2(0.892629981, 0.452490002), Vec2(0.884760022, 0.42058), Vec2(0.890359998, 0.394630015), Vec2(0.90812999, 0.398090005), Vec2(0.90170002, 0.425810009), Vec2(0.868499994, 0.41613999), Vec2(0.873380005, 0.391689986), Vec2(0.890359998, 0.394630015), Vec2(0.884760022, 0.42058), Vec2(0.861689985, 0.439610004), Vec2(0.868499994, 0.41613999), Vec2(0.884760022, 0.42058), Vec2(0.876869977, 0.445529997), Vec2(0.890359998, 0.394630015), Vec2(0.893660009, 0.368050009), Vec2(0.911899984, 0.369709998), Vec2(0.90812999, 0.398090005), Vec2(0.893660009, 0.368050009), Vec2(0.894659996, 0.34119001), Vec2(0.913049996, 0.341019988), Vec2(0.911899984, 0.369709998), Vec2(0.876259983, 0.366640002), Vec2(0.877139986, 0.341320008), Vec2(0.894659996, 0.34119001), Vec2(0.893660009, 0.368050009), Vec2(0.873380005, 0.391689986), Vec2(0.876259983, 0.366640002), Vec2(0.893660009, 0.368050009), Vec2(0.890359998, 0.394630015), Vec2(0.857010007, 0.389380008), Vec2(0.859549999, 0.365539998), Vec2(0.876259983, 0.366640002), Vec2(0.873380005, 0.391689986), Vec2(0.859549999, 0.365539998), Vec2(0.860319972, 0.341419995), Vec2(0.877139986, 0.341320008), Vec2(0.876259983, 0.366640002), Vec2(0.843360007, 0.364749998), Vec2(0.844060004, 0.341500014), Vec2(0.860319972, 0.341419995), Vec2(0.859549999, 0.365539998), Vec2(0.841090024, 0.38775), Vec2(0.843360007, 0.364749998), Vec2(0.859549999, 0.365539998), Vec2(0.857010007, 0.389380008), Vec2(0.846870005, 0.434949994), Vec2(0.852750003, 0.412640005), Vec2(0.868499994, 0.41613999), Vec2(0.861689985, 0.439610004), Vec2(0.852750003, 0.412640005), Vec2(0.857010007, 0.389380008), Vec2(0.873380005, 0.391689986), Vec2(0.868499994, 0.41613999), Vec2(0.83732003, 0.410189986), Vec2(0.841090024, 0.38775), Vec2(0.857010007, 0.389380008), Vec2(0.852750003, 0.412640005), Vec2(0.832189977, 0.431739986), Vec2(0.83732003, 0.410189986), Vec2(0.852750003, 0.412640005), Vec2(0.846870005, 0.434949994), Vec2(0.822780013, 0.527639985), Vec2(0.839720011, 0.510590017), Vec2(0.849919975, 0.522520006), Vec2(0.830600023, 0.541279972), Vec2(0.839720011, 0.510590017), Vec2(0.854369998, 0.490940005), Vec2(0.866729975, 0.501209974), Vec2(0.849919975, 0.522520006), Vec2(0.830229998, 0.499989986), Vec2(0.84254998, 0.482010007), Vec2(0.854369998, 0.490940005), Vec2(0.839720011, 0.510590017), Vec2(0.815949976, 0.515120029), Vec2(0.830229998, 0.499989986), Vec2(0.839720011, 0.510590017), Vec2(0.822780013, 0.527639985), Vec2(0.854369998, 0.490940005), Vec2(0.866739988, 0.469119996), Vec2(0.880970001, 0.477750003), Vec2(0.866729975, 0.501209974), Vec2(0.866739988, 0.469119996), Vec2(0.876869977, 0.445529997), Vec2(0.892629981, 0.452490002), Vec2(0.880970001, 0.477750003), Vec2(0.853020012, 0.461710006), Vec2(0.861689985, 0.439610004), Vec2(0.876869977, 0.445529997), Vec2(0.866739988, 0.469119996), Vec2(0.84254998, 0.482010007), Vec2(0.853020012, 0.461710006), Vec2(0.866739988, 0.469119996), Vec2(0.854369998, 0.490940005), Vec2(0.830900013, 0.474970013), Vec2(0.839519978, 0.455900013), Vec2(0.853020012, 0.461710006), Vec2(0.84254998, 0.482010007), Vec2(0.839519978, 0.455900013), Vec2(0.846870005, 0.434949994), Vec2(0.861689985, 0.439610004), Vec2(0.853020012, 0.461710006), Vec2(0.825929999, 0.452010006), Vec2(0.832189977, 0.431739986), Vec2(0.846870005, 0.434949994), Vec2(0.839519978, 0.455900013), Vec2(0.81892997, 0.470479995), Vec2(0.825929999, 0.452010006), Vec2(0.839519978, 0.455900013), Vec2(0.830900013, 0.474970013), Vec2(0.810230017, 0.504260004), Vec2(0.821179986, 0.491450012), Vec2(0.830229998, 0.499989986), Vec2(0.815949976, 0.515120029), Vec2(0.821179986, 0.491450012), Vec2(0.830900013, 0.474970013), Vec2(0.84254998, 0.482010007), Vec2(0.830229998, 0.499989986), Vec2(0.811839998, 0.486330003), Vec2(0.81892997, 0.470479995), Vec2(0.830900013, 0.474970013), Vec2(0.821179986, 0.491450012), Vec2(0.806450009, 0.496930003), Vec2(0.811839998, 0.486330003), Vec2(0.821179986, 0.491450012), Vec2(0.810230017, 0.504260004), Vec2(0.203470007, 0.498450011), Vec2(0.203679994, 0.511870027), Vec2(0.190530002, 0.502749979), Vec2(0.194230005, 0.495350003), Vec2(0.203679994, 0.511870027), Vec2(0.201320007, 0.525730014), Vec2(0.184980005, 0.513610005), Vec2(0.190530002, 0.502749979), Vec2(0.219099998, 0.518850029), Vec2(0.219359994, 0.535220027), Vec2(0.201320007, 0.525730014), Vec2(0.203679994, 0.511870027), Vec2(0.217020005, 0.502390027), Vec2(0.219099998, 0.518850029), Vec2(0.203679994, 0.511870027), Vec2(0.203470007, 0.498450011), Vec2(0.201320007, 0.525730014), Vec2(0.19743, 0.540340006), Vec2(0.178340003, 0.52609998), Vec2(0.184980005, 0.513610005), Vec2(0.19743, 0.540340006), Vec2(0.192340001, 0.555649996), Vec2(0.170719996, 0.539680004), Vec2(0.178340003, 0.52609998), Vec2(0.218219995, 0.55181998), Vec2(0.215890005, 0.56882), Vec2(0.192340001, 0.555649996), Vec2(0.19743, 0.540340006), Vec2(0.219359994, 0.535220027), Vec2(0.218219995, 0.55181998), Vec2(0.19743, 0.540340006), Vec2(0.201320007, 0.525730014), Vec2(0.238639995, 0.542479992), Vec2(0.240270004, 0.56072998), Vec2(0.218219995, 0.55181998), Vec2(0.219359994, 0.535220027), Vec2(0.240270004, 0.56072998), Vec2(0.240960002, 0.579200029), Vec2(0.215890005, 0.56882), Vec2(0.218219995, 0.55181998), Vec2(0.263069987, 0.567149997), Vec2(0.267040014, 0.586799979), Vec2(0.240960002, 0.579200029), Vec2(0.240270004, 0.56072998), Vec2(0.258659989, 0.547689974), Vec2(0.263069987, 0.567149997), Vec2(0.240270004, 0.56072998), Vec2(0.238639995, 0.542479992), Vec2(0.232360005, 0.506039977), Vec2(0.236039996, 0.524320006), Vec2(0.219099998, 0.518850029), Vec2(0.217020005, 0.502390027), Vec2(0.236039996, 0.524320006), Vec2(0.238639995, 0.542479992), Vec2(0.219359994, 0.535220027), Vec2(0.219099998, 0.518850029), Vec2(0.253850013, 0.528330028), Vec2(0.258659989, 0.547689974), Vec2(0.238639995, 0.542479992), Vec2(0.236039996, 0.524320006), Vec2(0.248649999, 0.508920014), Vec2(0.253850013, 0.528330028), Vec2(0.236039996, 0.524320006), Vec2(0.232360005, 0.506039977), Vec2(0.192340001, 0.555649996), Vec2(0.186110005, 0.571579993), Vec2(0.162070006, 0.554069996), Vec2(0.170719996, 0.539680004), Vec2(0.186110005, 0.571579993), Vec2(0.17859, 0.588069975), Vec2(0.152280003, 0.569109976), Vec2(0.162070006, 0.554069996), Vec2(0.212380007, 0.586239994), Vec2(0.20747, 0.604120016), Vec2(0.17859, 0.588069975), Vec2(0.186110005, 0.571579993), Vec2(0.215890005, 0.56882), Vec2(0.212380007, 0.586239994), Vec2(0.186110005, 0.571579993), Vec2(0.192340001, 0.555649996), Vec2(0.17859, 0.588069975), Vec2(0.169599995, 0.605099976), Vec2(0.141220003, 0.584730029), Vec2(0.152280003, 0.569109976), Vec2(0.169599995, 0.605099976), Vec2(0.158940002, 0.622770011), Vec2(0.128780007, 0.600870013), Vec2(0.141220003, 0.584730029), Vec2(0.200859994, 0.62252003), Vec2(0.192269996, 0.641589999), Vec2(0.158940002, 0.622770011), Vec2(0.169599995, 0.605099976), Vec2(0.20747, 0.604120016), Vec2(0.200859994, 0.62252003), Vec2(0.169599995, 0.605099976), Vec2(0.17859, 0.588069975), Vec2(0.238780007, 0.617120028), Vec2(0.235039994, 0.636740029), Vec2(0.200859994, 0.62252003), Vec2(0.20747, 0.604120016), Vec2(0.235039994, 0.636740029), Vec2(0.228850007, 0.657119989), Vec2(0.192269996, 0.641589999), Vec2(0.200859994, 0.62252003), Vec2(0.272190005, 0.647440016), Vec2(0.268929988, 0.668900013), Vec2(0.228850007, 0.657119989), Vec2(0.235039994, 0.636740029), Vec2(0.272309989, 0.626839995), Vec2(0.272190005, 0.647440016), Vec2(0.235039994, 0.636740029), Vec2(0.238780007, 0.617120028), Vec2(0.240960002, 0.579200029), Vec2(0.240580007, 0.597980022), Vec2(0.212380007, 0.586239994), Vec2(0.215890005, 0.56882), Vec2(0.240580007, 0.597980022), Vec2(0.238780007, 0.617120028), Vec2(0.20747, 0.604120016), Vec2(0.212380007, 0.586239994), Vec2(0.270300001, 0.606679976), Vec2(0.272309989, 0.626839995), Vec2(0.238780007, 0.617120028), Vec2(0.240580007, 0.597980022), Vec2(0.267040014, 0.586799979), Vec2(0.270300001, 0.606679976), Vec2(0.240580007, 0.597980022), Vec2(0.240960002, 0.579200029), Vec2(0.293480009, 0.591530025), Vec2(0.300940007, 0.612169981), Vec2(0.270300001, 0.606679976), Vec2(0.267040014, 0.586799979), Vec2(0.300940007, 0.612169981), Vec2(0.307700008, 0.63301003), Vec2(0.272309989, 0.626839995), Vec2(0.270300001, 0.606679976), Vec2(0.331440002, 0.614180028), Vec2(0.344150007, 0.635249972), Vec2(0.307700008, 0.63301003), Vec2(0.300940007, 0.612169981), Vec2(0.319370002, 0.593249977), Vec2(0.331440002, 0.614180028), Vec2(0.300940007, 0.612169981), Vec2(0.293480009, 0.591530025), Vec2(0.307700008, 0.63301003), Vec2(0.312409997, 0.654190004), Vec2(0.272190005, 0.647440016), Vec2(0.272309989, 0.626839995), Vec2(0.312409997, 0.654190004), Vec2(0.313010007, 0.67632997), Vec2(0.268929988, 0.668900013), Vec2(0.272190005, 0.647440016), Vec2(0.355780005, 0.656459987), Vec2(0.362320006, 0.678409994), Vec2(0.313010007, 0.67632997), Vec2(0.312409997, 0.654190004), Vec2(0.344150007, 0.635249972), Vec2(0.355780005, 0.656459987), Vec2(0.312409997, 0.654190004), Vec2(0.307700008, 0.63301003), Vec2(0.379680008, 0.633029997), Vec2(0.401789993, 0.653450012), Vec2(0.355780005, 0.656459987), Vec2(0.344150007, 0.635249972), Vec2(0.401789993, 0.653450012), Vec2(0.420439988, 0.673370004), Vec2(0.362320006, 0.678409994), Vec2(0.355780005, 0.656459987), Vec2(0.444310009, 0.643970013), Vec2(0.500389993, 0.658290029), Vec2(0.420439988, 0.673370004), Vec2(0.401789993, 0.653450012), Vec2(0.409880012, 0.625890017), Vec2(0.444310009, 0.643970013), Vec2(0.401789993, 0.653450012), Vec2(0.379680008, 0.633029997), Vec2(0.343589991, 0.591830015), Vec2(0.360130012, 0.612429976), Vec2(0.331440002, 0.614180028), Vec2(0.319370002, 0.593249977), Vec2(0.360130012, 0.612429976), Vec2(0.379680008, 0.633029997), Vec2(0.344150007, 0.635249972), Vec2(0.331440002, 0.614180028), Vec2(0.384849995, 0.606750011), Vec2(0.409880012, 0.625890017), Vec2(0.379680008, 0.633029997), Vec2(0.360130012, 0.612429976), Vec2(0.365060002, 0.587239981), Vec2(0.384849995, 0.606750011), Vec2(0.360130012, 0.612429976), Vec2(0.343589991, 0.591830015), Vec2(0.265329987, 0.510739982), Vec2(0.271970004, 0.530799985), Vec2(0.253850013, 0.528330028), Vec2(0.248649999, 0.508920014), Vec2(0.271970004, 0.530799985), Vec2(0.278849989, 0.550880015), Vec2(0.258659989, 0.547689974), Vec2(0.253850013, 0.528330028), Vec2(0.289909989, 0.531620026), Vec2(0.298669994, 0.551989973), Vec2(0.278849989, 0.550880015), Vec2(0.271970004, 0.530799985), Vec2(0.281960011, 0.511309981), Vec2(0.289909989, 0.531620026), Vec2(0.271970004, 0.530799985), Vec2(0.265329987, 0.510739982), Vec2(0.278849989, 0.550880015), Vec2(0.286029994, 0.57111001), Vec2(0.263069987, 0.567149997), Vec2(0.258659989, 0.547689974), Vec2(0.286029994, 0.57111001), Vec2(0.293480009, 0.591530025), Vec2(0.267040014, 0.586799979), Vec2(0.263069987, 0.567149997), Vec2(0.30844, 0.572520018), Vec2(0.319370002, 0.593249977), Vec2(0.293480009, 0.591530025), Vec2(0.286029994, 0.57111001), Vec2(0.298669994, 0.551989973), Vec2(0.30844, 0.572520018), Vec2(0.286029994, 0.57111001), Vec2(0.278849989, 0.550880015), Vec2(0.317589998, 0.550979972), Vec2(0.329569995, 0.571330011), Vec2(0.30844, 0.572520018), Vec2(0.298669994, 0.551989973), Vec2(0.329569995, 0.571330011), Vec2(0.343589991, 0.591830015), Vec2(0.319370002, 0.593249977), Vec2(0.30844, 0.572520018), Vec2(0.348800004, 0.567589998), Vec2(0.365060002, 0.587239981), Vec2(0.343589991, 0.591830015), Vec2(0.329569995, 0.571330011), Vec2(0.335189998, 0.547879994), Vec2(0.348800004, 0.567589998), Vec2(0.329569995, 0.571330011), Vec2(0.317589998, 0.550979972), Vec2(0.298220009, 0.510519981), Vec2(0.307240009, 0.530740023), Vec2(0.289909989, 0.531620026), Vec2(0.281960011, 0.511309981), Vec2(0.307240009, 0.530740023), Vec2(0.317589998, 0.550979972), Vec2(0.298669994, 0.551989973), Vec2(0.289909989, 0.531620026), Vec2(0.323650002, 0.528159976), Vec2(0.335189998, 0.547879994), Vec2(0.317589998, 0.550979972), Vec2(0.307240009, 0.530740023), Vec2(0.313829988, 0.508350015), Vec2(0.323650002, 0.528159976), Vec2(0.307240009, 0.530740023), Vec2(0.298220009, 0.510519981), Vec2(0.842700005, 0.625060022), Vec2(0.832099974, 0.607219994), Vec2(0.860819995, 0.586709976), Vec2(0.873660028, 0.603190005), Vec2(0.832099974, 0.607219994), Vec2(0.823029995, 0.590030015), Vec2(0.849479973, 0.570919991), Vec2(0.860819995, 0.586709976), Vec2(0.800450027, 0.624689996), Vec2(0.793940008, 0.606140018), Vec2(0.823029995, 0.590030015), Vec2(0.832099974, 0.607219994), Vec2(0.80884999, 0.643920004), Vec2(0.800450027, 0.624689996), Vec2(0.832099974, 0.607219994), Vec2(0.842700005, 0.625060022), Vec2(0.823029995, 0.590030015), Vec2(0.815410018, 0.573409975), Vec2(0.839460015, 0.555760026), Vec2(0.849479973, 0.570919991), Vec2(0.815410018, 0.573409975), Vec2(0.809050024, 0.557370007), Vec2(0.830600023, 0.541279972), Vec2(0.839460015, 0.555760026), Vec2(0.789049983, 0.588119984), Vec2(0.785489976, 0.570590019), Vec2(0.809050024, 0.557370007), Vec2(0.815410018, 0.573409975), Vec2(0.793940008, 0.606140018), Vec2(0.789049983, 0.588119984), Vec2(0.815410018, 0.573409975), Vec2(0.823029995, 0.590030015), Vec2(0.762390018, 0.619090021), Vec2(0.760730028, 0.599810004), Vec2(0.789049983, 0.588119984), Vec2(0.793940008, 0.606140018), Vec2(0.760730028, 0.599810004), Vec2(0.760389984, 0.580959976), Vec2(0.785489976, 0.570590019), Vec2(0.789049983, 0.588119984), Vec2(0.730910003, 0.608399987), Vec2(0.734250009, 0.58851999), Vec2(0.760389984, 0.580959976), Vec2(0.760730028, 0.599810004), Vec2(0.728670001, 0.628660023), Vec2(0.730910003, 0.608399987), Vec2(0.760730028, 0.599810004), Vec2(0.762390018, 0.619090021), Vec2(0.771799982, 0.659430027), Vec2(0.765900016, 0.638890028), Vec2(0.800450027, 0.624689996), Vec2(0.80884999, 0.643920004), Vec2(0.765900016, 0.638890028), Vec2(0.762390018, 0.619090021), Vec2(0.793940008, 0.606140018), Vec2(0.800450027, 0.624689996), Vec2(0.728420019, 0.649460018), Vec2(0.728670001, 0.628660023), Vec2(0.762390018, 0.619090021), Vec2(0.765900016, 0.638890028), Vec2(0.731289983, 0.671140015), Vec2(0.728420019, 0.649460018), Vec2(0.765900016, 0.638890028), Vec2(0.771799982, 0.659430027), Vec2(0.809050024, 0.557370007), Vec2(0.803820014, 0.541989982), Vec2(0.822780013, 0.527639985), Vec2(0.830600023, 0.541279972), Vec2(0.803820014, 0.541989982), Vec2(0.799759984, 0.527360022), Vec2(0.815949976, 0.515120029), Vec2(0.822780013, 0.527639985), Vec2(0.783070028, 0.553539991), Vec2(0.781769991, 0.536920011), Vec2(0.799759984, 0.527360022), Vec2(0.803820014, 0.541989982), Vec2(0.785489976, 0.570590019), Vec2(0.783070028, 0.553539991), Vec2(0.803820014, 0.541989982), Vec2(0.809050024, 0.557370007), Vec2(0.799759984, 0.527360022), Vec2(0.797219992, 0.513509989), Vec2(0.810230017, 0.504260004), Vec2(0.815949976, 0.515120029), Vec2(0.797219992, 0.513509989), Vec2(0.797230005, 0.500100017), Vec2(0.806450009, 0.496930003), Vec2(0.810230017, 0.504260004), Vec2(0.781840026, 0.520579994), Vec2(0.783689976, 0.504140019), Vec2(0.797230005, 0.500100017), Vec2(0.797219992, 0.513509989), Vec2(0.781769991, 0.536920011), Vec2(0.781840026, 0.520579994), Vec2(0.797219992, 0.513509989), Vec2(0.799759984, 0.527360022), Vec2(0.762480021, 0.544250011), Vec2(0.764869988, 0.526130021), Vec2(0.781840026, 0.520579994), Vec2(0.781769991, 0.536920011), Vec2(0.764869988, 0.526130021), Vec2(0.768320024, 0.5079), Vec2(0.783689976, 0.504140019), Vec2(0.781840026, 0.520579994), Vec2(0.746990025, 0.530250013), Vec2(0.751950026, 0.510909975), Vec2(0.768320024, 0.5079), Vec2(0.764869988, 0.526130021), Vec2(0.742399991, 0.549539983), Vec2(0.746990025, 0.530250013), Vec2(0.764869988, 0.526130021), Vec2(0.762480021, 0.544250011), Vec2(0.760389984, 0.580959976), Vec2(0.761009991, 0.562470019), Vec2(0.783070028, 0.553539991), Vec2(0.785489976, 0.570590019), Vec2(0.761009991, 0.562470019), Vec2(0.762480021, 0.544250011), Vec2(0.781769991, 0.536920011), Vec2(0.783070028, 0.553539991), Vec2(0.738150001, 0.56892997), Vec2(0.742399991, 0.549539983), Vec2(0.762480021, 0.544250011), Vec2(0.761009991, 0.562470019), Vec2(0.734250009, 0.58851999), Vec2(0.738150001, 0.56892997), Vec2(0.761009991, 0.562470019), Vec2(0.760389984, 0.580959976), Vec2(0.707710028, 0.593240023), Vec2(0.715059996, 0.572960019), Vec2(0.738150001, 0.56892997), Vec2(0.734250009, 0.58851999), Vec2(0.715059996, 0.572960019), Vec2(0.722069979, 0.552860022), Vec2(0.742399991, 0.549539983), Vec2(0.738150001, 0.56892997), Vec2(0.692430019, 0.574530005), Vec2(0.702040017, 0.554139972), Vec2(0.722069979, 0.552860022), Vec2(0.715059996, 0.572960019), Vec2(0.681620002, 0.595070004), Vec2(0.692430019, 0.574530005), Vec2(0.715059996, 0.572960019), Vec2(0.707710028, 0.593240023), Vec2(0.722069979, 0.552860022), Vec2(0.728739977, 0.532869995), Vec2(0.746990025, 0.530250013), Vec2(0.742399991, 0.549539983), Vec2(0.728739977, 0.532869995), Vec2(0.73514998, 0.512889981), Vec2(0.751950026, 0.510909975), Vec2(0.746990025, 0.530250013), Vec2(0.71063, 0.533869982), Vec2(0.718360007, 0.513629973), Vec2(0.73514998, 0.512889981), Vec2(0.728739977, 0.532869995), Vec2(0.702040017, 0.554139972), Vec2(0.71063, 0.533869982), Vec2(0.728739977, 0.532869995), Vec2(0.722069979, 0.552860022), Vec2(0.682889998, 0.553330004), Vec2(0.693090022, 0.533169985), Vec2(0.71063, 0.533869982), Vec2(0.702040017, 0.554139972), Vec2(0.693090022, 0.533169985), Vec2(0.701950014, 0.513010025), Vec2(0.718360007, 0.513629973), Vec2(0.71063, 0.533869982), Vec2(0.676490009, 0.530740023), Vec2(0.686190009, 0.51098001), Vec2(0.701950014, 0.513010025), Vec2(0.693090022, 0.533169985), Vec2(0.665059984, 0.550390005), Vec2(0.676490009, 0.530740023), Vec2(0.693090022, 0.533169985), Vec2(0.682889998, 0.553330004), Vec2(0.657029986, 0.593879998), Vec2(0.671000004, 0.573570013), Vec2(0.692430019, 0.574530005), Vec2(0.681620002, 0.595070004), Vec2(0.671000004, 0.573570013), Vec2(0.682889998, 0.553330004), Vec2(0.702040017, 0.554139972), Vec2(0.692430019, 0.574530005), Vec2(0.651480019, 0.569999993), Vec2(0.665059984, 0.550390005), Vec2(0.682889998, 0.553330004), Vec2(0.671000004, 0.573570013), Vec2(0.635169983, 0.589510024), Vec2(0.651480019, 0.569999993), Vec2(0.671000004, 0.573570013), Vec2(0.657029986, 0.593879998), Vec2(0.686789989, 0.678439975), Vec2(0.687950015, 0.65595001), Vec2(0.728420019, 0.649460018), Vec2(0.731289983, 0.671140015), Vec2(0.687950015, 0.65595001), Vec2(0.693180025, 0.634570003), Vec2(0.728670001, 0.628660023), Vec2(0.728420019, 0.649460018), Vec2(0.644529998, 0.657729983), Vec2(0.656729996, 0.636539996), Vec2(0.693180025, 0.634570003), Vec2(0.687950015, 0.65595001), Vec2(0.637009978, 0.680320024), Vec2(0.644529998, 0.657729983), Vec2(0.687950015, 0.65595001), Vec2(0.686789989, 0.678439975), Vec2(0.693180025, 0.634570003), Vec2(0.700209975, 0.613749981), Vec2(0.730910003, 0.608399987), Vec2(0.728670001, 0.628660023), Vec2(0.700209975, 0.613749981), Vec2(0.707710028, 0.593240023), Vec2(0.734250009, 0.58851999), Vec2(0.730910003, 0.608399987), Vec2(0.669589996, 0.615740001), Vec2(0.681620002, 0.595070004), Vec2(0.707710028, 0.593240023), Vec2(0.700209975, 0.613749981), Vec2(0.656729996, 0.636539996), Vec2(0.669589996, 0.615740001), Vec2(0.700209975, 0.613749981), Vec2(0.693180025, 0.634570003), Vec2(0.621029973, 0.634329975), Vec2(0.640519977, 0.614189982), Vec2(0.669589996, 0.615740001), Vec2(0.656729996, 0.636539996), Vec2(0.640519977, 0.614189982), Vec2(0.657029986, 0.593879998), Vec2(0.681620002, 0.595070004), Vec2(0.669589996, 0.615740001), Vec2(0.615159988, 0.608810008), Vec2(0.635169983, 0.589510024), Vec2(0.657029986, 0.593879998), Vec2(0.640519977, 0.614189982), Vec2(0.589739978, 0.627610028), Vec2(0.615159988, 0.608810008), Vec2(0.640519977, 0.614189982), Vec2(0.621029973, 0.634329975), Vec2(0.578499973, 0.674719989), Vec2(0.598869979, 0.654150009), Vec2(0.644529998, 0.657729983), Vec2(0.637009978, 0.680320024), Vec2(0.598869979, 0.654150009), Vec2(0.621029973, 0.634329975), Vec2(0.656729996, 0.636539996), Vec2(0.644529998, 0.657729983), Vec2(0.555029988, 0.645049989), Vec2(0.589739978, 0.627610028), Vec2(0.621029973, 0.634329975), Vec2(0.598869979, 0.654150009), Vec2(0.500389993, 0.658290029), Vec2(0.555029988, 0.645049989), Vec2(0.598869979, 0.654150009), Vec2(0.578499973, 0.674719989), Vec2(0.500389993, 0.63331002), Vec2(0.538890004, 0.62766999), Vec2(0.555029988, 0.645049989), Vec2(0.500389993, 0.658290029), Vec2(0.538890004, 0.62766999), Vec2(0.570550025, 0.614780009), Vec2(0.589739978, 0.627610028), Vec2(0.555029988, 0.645049989), Vec2(0.530480027, 0.608229995), Vec2(0.557850003, 0.599129975), Vec2(0.570550025, 0.614780009), Vec2(0.538890004, 0.62766999), Vec2(0.500389993, 0.611329973), Vec2(0.530480027, 0.608229995), Vec2(0.538890004, 0.62766999), Vec2(0.500389993, 0.63331002), Vec2(0.570550025, 0.614780009), Vec2(0.596099973, 0.599039972), Vec2(0.615159988, 0.608810008), Vec2(0.589739978, 0.627610028), Vec2(0.596099973, 0.599039972), Vec2(0.617009997, 0.581849992), Vec2(0.635169983, 0.589510024), Vec2(0.615159988, 0.608810008), Vec2(0.581690013, 0.586449981), Vec2(0.602129996, 0.571669996), Vec2(0.617009997, 0.581849992), Vec2(0.596099973, 0.599039972), Vec2(0.557850003, 0.599129975), Vec2(0.581690013, 0.586449981), Vec2(0.596099973, 0.599039972), Vec2(0.570550025, 0.614780009), Vec2(0.549090028, 0.582029998), Vec2(0.570729971, 0.572009981), Vec2(0.581690013, 0.586449981), Vec2(0.557850003, 0.599129975), Vec2(0.570729971, 0.572009981), Vec2(0.590020001, 0.559599996), Vec2(0.602129996, 0.571669996), Vec2(0.581690013, 0.586449981), Vec2(0.562319994, 0.556420028), Vec2(0.58020997, 0.54618001), Vec2(0.590020001, 0.559599996), Vec2(0.570729971, 0.572009981), Vec2(0.542770028, 0.564339995), Vec2(0.562319994, 0.556420028), Vec2(0.570729971, 0.572009981), Vec2(0.549090028, 0.582029998), Vec2(0.500389993, 0.590650022), Vec2(0.525390029, 0.588639975), Vec2(0.530480027, 0.608229995), Vec2(0.500389993, 0.611329973), Vec2(0.525390029, 0.588639975), Vec2(0.549090028, 0.582029998), Vec2(0.557850003, 0.599129975), Vec2(0.530480027, 0.608229995), Vec2(0.521939993, 0.569310009), Vec2(0.542770028, 0.564339995), Vec2(0.549090028, 0.582029998), Vec2(0.525390029, 0.588639975), Vec2(0.500389993, 0.570739985), Vec2(0.521939993, 0.569310009), Vec2(0.525390029, 0.588639975), Vec2(0.500389993, 0.590650022), Vec2(0.617009997, 0.581849992), Vec2(0.634360015, 0.563870013), Vec2(0.651480019, 0.569999993), Vec2(0.635169983, 0.589510024), Vec2(0.634360015, 0.563870013), Vec2(0.648859978, 0.545419991), Vec2(0.665059984, 0.550390005), Vec2(0.651480019, 0.569999993), Vec2(0.619560003, 0.55558002), Vec2(0.634360015, 0.538630009), Vec2(0.648859978, 0.545419991), Vec2(0.634360015, 0.563870013), Vec2(0.602129996, 0.571669996), Vec2(0.619560003, 0.55558002), Vec2(0.634360015, 0.563870013), Vec2(0.617009997, 0.581849992), Vec2(0.648859978, 0.545419991), Vec2(0.661040008, 0.526639998), Vec2(0.676490009, 0.530740023), Vec2(0.665059984, 0.550390005), Vec2(0.661040008, 0.526639998), Vec2(0.671270013, 0.507589996), Vec2(0.686190009, 0.51098001), Vec2(0.676490009, 0.530740023), Vec2(0.64684999, 0.52105999), Vec2(0.657299995, 0.502950013), Vec2(0.671270013, 0.507589996), Vec2(0.661040008, 0.526639998), Vec2(0.634360015, 0.538630009), Vec2(0.64684999, 0.52105999), Vec2(0.661040008, 0.526639998), Vec2(0.648859978, 0.545419991), Vec2(0.621529996, 0.530330002), Vec2(0.633970022, 0.514190018), Vec2(0.64684999, 0.52105999), Vec2(0.634360015, 0.538630009), Vec2(0.633970022, 0.514190018), Vec2(0.644360006, 0.497269988), Vec2(0.657299995, 0.502950013), Vec2(0.64684999, 0.52105999), Vec2(0.622420013, 0.50632), Vec2(0.632510006, 0.490810007), Vec2(0.644360006, 0.497269988), Vec2(0.633970022, 0.514190018), Vec2(0.610329986, 0.520829976), Vec2(0.622420013, 0.50632), Vec2(0.633970022, 0.514190018), Vec2(0.621529996, 0.530330002), Vec2(0.590020001, 0.559599996), Vec2(0.606920004, 0.545560002), Vec2(0.619560003, 0.55558002), Vec2(0.602129996, 0.571669996), Vec2(0.606920004, 0.545560002), Vec2(0.621529996, 0.530330002), Vec2(0.634360015, 0.538630009), Vec2(0.619560003, 0.55558002), Vec2(0.596249998, 0.534189999), Vec2(0.610329986, 0.520829976), Vec2(0.621529996, 0.530330002), Vec2(0.606920004, 0.545560002), Vec2(0.58020997, 0.54618001), Vec2(0.596249998, 0.534189999), Vec2(0.606920004, 0.545560002), Vec2(0.590020001, 0.559599996), Vec2(0.572329998, 0.531830013), Vec2(0.587379992, 0.521820009), Vec2(0.596249998, 0.534189999), Vec2(0.58020997, 0.54618001), Vec2(0.587379992, 0.521820009), Vec2(0.600750029, 0.510399997), Vec2(0.610329986, 0.520829976), Vec2(0.596249998, 0.534189999), Vec2(0.580219984, 0.508660018), Vec2(0.592819989, 0.499260008), Vec2(0.600750029, 0.510399997), Vec2(0.587379992, 0.521820009), Vec2(0.566129982, 0.516830027), Vec2(0.580219984, 0.508660018), Vec2(0.587379992, 0.521820009), Vec2(0.572329998, 0.531830013), Vec2(0.600750029, 0.510399997), Vec2(0.612269998, 0.49774), Vec2(0.622420013, 0.50632), Vec2(0.610329986, 0.520829976), Vec2(0.612269998, 0.49774), Vec2(0.621800005, 0.483859986), Vec2(0.632510006, 0.490810007), Vec2(0.622420013, 0.50632), Vec2(0.603630006, 0.488689989), Vec2(0.612360001, 0.476819992), Vec2(0.621800005, 0.483859986), Vec2(0.612269998, 0.49774), Vec2(0.592819989, 0.499260008), Vec2(0.603630006, 0.488689989), Vec2(0.612269998, 0.49774), Vec2(0.600750029, 0.510399997), Vec2(0.58671999, 0.487450004), Vec2(0.596840024, 0.479360014), Vec2(0.603630006, 0.488689989), Vec2(0.592819989, 0.499260008), Vec2(0.596840024, 0.479360014), Vec2(0.604449987, 0.47025001), Vec2(0.612360001, 0.476819992), Vec2(0.603630006, 0.488689989), Vec2(0.592630029, 0.469500005), Vec2(0.599250019, 0.465579987), Vec2(0.604449987, 0.47025001), Vec2(0.596840024, 0.479360014), Vec2(0.582710028, 0.474830002), Vec2(0.592630029, 0.469500005), Vec2(0.596840024, 0.479360014), Vec2(0.58671999, 0.487450004), Vec2(0.561479986, 0.501309991), Vec2(0.574779987, 0.494819999), Vec2(0.580219984, 0.508660018), Vec2(0.566129982, 0.516830027), Vec2(0.574779987, 0.494819999), Vec2(0.58671999, 0.487450004), Vec2(0.592819989, 0.499260008), Vec2(0.580219984, 0.508660018), Vec2(0.571099997, 0.480280012), Vec2(0.582710028, 0.474830002), Vec2(0.58671999, 0.487450004), Vec2(0.574779987, 0.494819999), Vec2(0.558290005, 0.485320002), Vec2(0.571099997, 0.480280012), Vec2(0.574779987, 0.494819999), Vec2(0.561479986, 0.501309991), Vec2(0.500389993, 0.551400006), Vec2(0.519469976, 0.550300002), Vec2(0.521939993, 0.569310009), Vec2(0.500389993, 0.570739985), Vec2(0.519469976, 0.550300002), Vec2(0.538079977, 0.546459973), Vec2(0.542770028, 0.564339995), Vec2(0.521939993, 0.569310009), Vec2(0.517650008, 0.531599998), Vec2(0.534569979, 0.528569996), Vec2(0.538079977, 0.546459973), Vec2(0.519469976, 0.550300002), Vec2(0.500389993, 0.532480001), Vec2(0.517650008, 0.531599998), Vec2(0.519469976, 0.550300002), Vec2(0.500389993, 0.551400006), Vec2(0.538079977, 0.546459973), Vec2(0.555809975, 0.540170014), Vec2(0.562319994, 0.556420028), Vec2(0.542770028, 0.564339995), Vec2(0.555809975, 0.540170014), Vec2(0.572329998, 0.531830013), Vec2(0.58020997, 0.54618001), Vec2(0.562319994, 0.556420028), Vec2(0.550819993, 0.523559988), Vec2(0.566129982, 0.516830027), Vec2(0.572329998, 0.531830013), Vec2(0.555809975, 0.540170014), Vec2(0.534569979, 0.528569996), Vec2(0.550819993, 0.523559988), Vec2(0.555809975, 0.540170014), Vec2(0.538079977, 0.546459973), Vec2(0.531989992, 0.510689974), Vec2(0.547129989, 0.506690025), Vec2(0.550819993, 0.523559988), Vec2(0.534569979, 0.528569996), Vec2(0.547129989, 0.506690025), Vec2(0.561479986, 0.501309991), Vec2(0.566129982, 0.516830027), Vec2(0.550819993, 0.523559988), Vec2(0.544579983, 0.489589989), Vec2(0.558290005, 0.485320002), Vec2(0.561479986, 0.501309991), Vec2(0.547129989, 0.506690025), Vec2(0.530219972, 0.492810011), Vec2(0.544579983, 0.489589989), Vec2(0.547129989, 0.506690025), Vec2(0.531989992, 0.510689974), Vec2(0.500389993, 0.513880014), Vec2(0.516330004, 0.513119996), Vec2(0.517650008, 0.531599998), Vec2(0.500389993, 0.532480001), Vec2(0.516330004, 0.513119996), Vec2(0.531989992, 0.510689974), Vec2(0.534569979, 0.528569996), Vec2(0.517650008, 0.531599998), Vec2(0.51542002, 0.494789988), Vec2(0.530219972, 0.492810011), Vec2(0.531989992, 0.510689974), Vec2(0.516330004, 0.513119996), Vec2(0.500389993, 0.49544999), Vec2(0.51542002, 0.494789988), Vec2(0.516330004, 0.513119996), Vec2(0.500389993, 0.513880014), Vec2(0.328619987, 0.504840016), Vec2(0.338959992, 0.523949981), Vec2(0.323650002, 0.528159976), Vec2(0.313829988, 0.508350015), Vec2(0.338959992, 0.523949981), Vec2(0.351229995, 0.542800009), Vec2(0.335189998, 0.547879994), Vec2(0.323650002, 0.528159976), Vec2(0.35304001, 0.518280029), Vec2(0.365619987, 0.535939991), Vec2(0.351229995, 0.542800009), Vec2(0.338959992, 0.523949981), Vec2(0.342489988, 0.500119984), Vec2(0.35304001, 0.518280029), Vec2(0.338959992, 0.523949981), Vec2(0.328619987, 0.504840016), Vec2(0.351229995, 0.542800009), Vec2(0.365790009, 0.561370015), Vec2(0.348800004, 0.567589998), Vec2(0.335189998, 0.547879994), Vec2(0.365790009, 0.561370015), Vec2(0.383150011, 0.57950002), Vec2(0.365060002, 0.587239981), Vec2(0.348800004, 0.567589998), Vec2(0.380490005, 0.552999973), Vec2(0.397969991, 0.56923002), Vec2(0.383150011, 0.57950002), Vec2(0.365790009, 0.561370015), Vec2(0.365619987, 0.535939991), Vec2(0.380490005, 0.552999973), Vec2(0.365790009, 0.561370015), Vec2(0.351229995, 0.542800009), Vec2(0.37834999, 0.527589977), Vec2(0.393029988, 0.542940021), Vec2(0.380490005, 0.552999973), Vec2(0.365619987, 0.535939991), Vec2(0.393029988, 0.542940021), Vec2(0.409999996, 0.557139993), Vec2(0.397969991, 0.56923002), Vec2(0.380490005, 0.552999973), Vec2(0.403629988, 0.531610012), Vec2(0.419750005, 0.543820024), Vec2(0.409999996, 0.557139993), Vec2(0.393029988, 0.542940021), Vec2(0.389479995, 0.518100023), Vec2(0.403629988, 0.531610012), Vec2(0.393029988, 0.542940021), Vec2(0.37834999, 0.527589977), Vec2(0.355369985, 0.494399995), Vec2(0.365839988, 0.511370003), Vec2(0.35304001, 0.518280029), Vec2(0.342489988, 0.500119984), Vec2(0.365839988, 0.511370003), Vec2(0.37834999, 0.527589977), Vec2(0.365619987, 0.535939991), Vec2(0.35304001, 0.518280029), Vec2(0.377339989, 0.503499985), Vec2(0.389479995, 0.518100023), Vec2(0.37834999, 0.527589977), Vec2(0.365839988, 0.511370003), Vec2(0.367210001, 0.48793), Vec2(0.377339989, 0.503499985), Vec2(0.365839988, 0.511370003), Vec2(0.355369985, 0.494399995), Vec2(0.383150011, 0.57950002), Vec2(0.404040009, 0.596889973), Vec2(0.384849995, 0.606750011), Vec2(0.365060002, 0.587239981), Vec2(0.404040009, 0.596889973), Vec2(0.4296, 0.612860024), Vec2(0.409880012, 0.625890017), Vec2(0.384849995, 0.606750011), Vec2(0.418469995, 0.584190011), Vec2(0.442400008, 0.597109973), Vec2(0.4296, 0.612860024), Vec2(0.404040009, 0.596889973), Vec2(0.397969991, 0.56923002), Vec2(0.418469995, 0.584190011), Vec2(0.404040009, 0.596889973), Vec2(0.383150011, 0.57950002), Vec2(0.4296, 0.612860024), Vec2(0.461400002, 0.625970006), Vec2(0.444310009, 0.643970013), Vec2(0.409880012, 0.625890017), Vec2(0.461400002, 0.625970006), Vec2(0.500389993, 0.63331002), Vec2(0.500389993, 0.658290029), Vec2(0.444310009, 0.643970013), Vec2(0.469940007, 0.606760025), Vec2(0.500389993, 0.611329973), Vec2(0.500389993, 0.63331002), Vec2(0.461400002, 0.625970006), Vec2(0.442400008, 0.597109973), Vec2(0.469940007, 0.606760025), Vec2(0.461400002, 0.625970006), Vec2(0.4296, 0.612860024), Vec2(0.451160014, 0.580179989), Vec2(0.475080013, 0.587490022), Vec2(0.469940007, 0.606760025), Vec2(0.442400008, 0.597109973), Vec2(0.475080013, 0.587490022), Vec2(0.500389993, 0.590650022), Vec2(0.500389993, 0.611329973), Vec2(0.469940007, 0.606760025), Vec2(0.478560001, 0.56844002), Vec2(0.500389993, 0.570739985), Vec2(0.500389993, 0.590650022), Vec2(0.475080013, 0.587490022), Vec2(0.457489997, 0.562780023), Vec2(0.478560001, 0.56844002), Vec2(0.475080013, 0.587490022), Vec2(0.451160014, 0.580179989), Vec2(0.409999996, 0.557139993), Vec2(0.42938, 0.569769979), Vec2(0.418469995, 0.584190011), Vec2(0.397969991, 0.56923002), Vec2(0.42938, 0.569769979), Vec2(0.451160014, 0.580179989), Vec2(0.442400008, 0.597109973), Vec2(0.418469995, 0.584190011), Vec2(0.437759995, 0.554369986), Vec2(0.457489997, 0.562780023), Vec2(0.451160014, 0.580179989), Vec2(0.42938, 0.569769979), Vec2(0.419750005, 0.543820024), Vec2(0.437759995, 0.554369986), Vec2(0.42938, 0.569769979), Vec2(0.409999996, 0.557139993), Vec2(0.42761001, 0.52967), Vec2(0.444270015, 0.538399994), Vec2(0.437759995, 0.554369986), Vec2(0.419750005, 0.543820024), Vec2(0.444270015, 0.538399994), Vec2(0.46221, 0.54519999), Vec2(0.457489997, 0.562780023), Vec2(0.437759995, 0.554369986), Vec2(0.449299991, 0.522080004), Vec2(0.465770006, 0.527589977), Vec2(0.46221, 0.54519999), Vec2(0.444270015, 0.538399994), Vec2(0.433840007, 0.514919996), Vec2(0.449299991, 0.522080004), Vec2(0.444270015, 0.538399994), Vec2(0.42761001, 0.52967), Vec2(0.46221, 0.54519999), Vec2(0.481059998, 0.549660027), Vec2(0.478560001, 0.56844002), Vec2(0.457489997, 0.562780023), Vec2(0.481059998, 0.549660027), Vec2(0.500389993, 0.551400006), Vec2(0.500389993, 0.570739985), Vec2(0.478560001, 0.56844002), Vec2(0.482910007, 0.531140029), Vec2(0.500389993, 0.532480001), Vec2(0.500389993, 0.551400006), Vec2(0.481059998, 0.549660027), Vec2(0.465770006, 0.527589977), Vec2(0.482910007, 0.531140029), Vec2(0.481059998, 0.549660027), Vec2(0.46221, 0.54519999), Vec2(0.468409985, 0.509959996), Vec2(0.484270006, 0.512830019), Vec2(0.482910007, 0.531140029), Vec2(0.465770006, 0.527589977), Vec2(0.484270006, 0.512830019), Vec2(0.500389993, 0.513880014), Vec2(0.500389993, 0.532480001), Vec2(0.482910007, 0.531140029), Vec2(0.485249996, 0.494610012), Vec2(0.500389993, 0.49544999), Vec2(0.500389993, 0.513880014), Vec2(0.484270006, 0.512830019), Vec2(0.470310003, 0.492269993), Vec2(0.485249996, 0.494610012), Vec2(0.484270006, 0.512830019), Vec2(0.468409985, 0.509959996), Vec2(0.43858999, 0.499669999), Vec2(0.453090012, 0.505490005), Vec2(0.449299991, 0.522080004), Vec2(0.433840007, 0.514919996), Vec2(0.453090012, 0.505490005), Vec2(0.468409985, 0.509959996), Vec2(0.465770006, 0.527589977), Vec2(0.449299991, 0.522080004), Vec2(0.455799997, 0.488629997), Vec2(0.470310003, 0.492269993), Vec2(0.468409985, 0.509959996), Vec2(0.453090012, 0.505490005), Vec2(0.441960007, 0.483940005), Vec2(0.455799997, 0.488629997), Vec2(0.453090012, 0.505490005), Vec2(0.43858999, 0.499669999), Vec2(0.377939999, 0.481029987), Vec2(0.387490004, 0.494980007), Vec2(0.377339989, 0.503499985), Vec2(0.367210001, 0.48793), Vec2(0.387490004, 0.494980007), Vec2(0.399040014, 0.507770002), Vec2(0.389479995, 0.518100023), Vec2(0.377339989, 0.503499985), Vec2(0.39616999, 0.486059994), Vec2(0.407000005, 0.496780008), Vec2(0.399040014, 0.507770002), Vec2(0.387490004, 0.494980007), Vec2(0.38745001, 0.474099994), Vec2(0.39616999, 0.486059994), Vec2(0.387490004, 0.494980007), Vec2(0.377939999, 0.481029987), Vec2(0.399040014, 0.507770002), Vec2(0.412470013, 0.519370019), Vec2(0.403629988, 0.531610012), Vec2(0.389479995, 0.518100023), Vec2(0.412470013, 0.519370019), Vec2(0.42761001, 0.52967), Vec2(0.419750005, 0.543820024), Vec2(0.403629988, 0.531610012), Vec2(0.419649988, 0.506420016), Vec2(0.433840007, 0.514919996), Vec2(0.42761001, 0.52967), Vec2(0.412470013, 0.519370019), Vec2(0.407000005, 0.496780008), Vec2(0.419649988, 0.506420016), Vec2(0.412470013, 0.519370019), Vec2(0.399040014, 0.507770002), Vec2(0.413190007, 0.485159993), Vec2(0.425190002, 0.492810011), Vec2(0.419649988, 0.506420016), Vec2(0.407000005, 0.496780008), Vec2(0.425190002, 0.492810011), Vec2(0.43858999, 0.499669999), Vec2(0.433840007, 0.514919996), Vec2(0.419649988, 0.506420016), Vec2(0.429049999, 0.478509992), Vec2(0.441960007, 0.483940005), Vec2(0.43858999, 0.499669999), Vec2(0.425190002, 0.492810011), Vec2(0.417360008, 0.472730011), Vec2(0.429049999, 0.478509992), Vec2(0.425190002, 0.492810011), Vec2(0.413190007, 0.485159993), Vec2(0.39546001, 0.467680007), Vec2(0.403050005, 0.476880014), Vec2(0.39616999, 0.486059994), Vec2(0.38745001, 0.474099994), Vec2(0.403050005, 0.476880014), Vec2(0.413190007, 0.485159993), Vec2(0.407000005, 0.496780008), Vec2(0.39616999, 0.486059994), Vec2(0.407389998, 0.467159986), Vec2(0.417360008, 0.472730011), Vec2(0.413190007, 0.485159993), Vec2(0.403050005, 0.476880014), Vec2(0.400750011, 0.463099986), Vec2(0.407389998, 0.467159986), Vec2(0.403050005, 0.476880014), Vec2(0.39546001, 0.467680007)}, + ["subd_fvar_linear"] = "corners plus1", + ["primitive_attributes"] = { UserData("/sphere1/sphere.primvars:dwa_mesh_file_translator_version"), UserData("/sphere1/sphere.primvars:dwa_mesh_translator_version"), UserData("/sphere1/sphere.primvars:name"), UserData("/sphere1/sphere.primvars:primId"), UserData("/sphere1/sphere.primvars:subd__hi"), UserData("/sphere1/sphere.primvars:subd__lo")}, +} + +RdlMeshGeometry("/sphere2/sphere") { + ["node_xform"] = blur(Mat4(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 2, 0, 1), Mat4(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 2, 0, 1)), + ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + ["vertices_by_index"] = { 3, 2, 1, 0, 2, 5, 4, 1, 7, 6, 5, 2, 8, 7, 2, 3, 5, 10, 9, 4, 10, 12, 11, 9, 14, 13, 12, 10, 6, 14, 10, 5, 16, 15, 14, 6, 15, 17, 13, 14, 19, 18, 17, 15, 20, 19, 15, 16, 22, 21, 7, 8, 21, 16, 6, 7, 23, 20, 16, 21, 24, 23, 21, 22, 12, 26, 25, 11, 26, 28, 27, 25, 30, 29, 28, 26, 13, 30, 26, 12, 28, 32, 31, 27, 32, 34, 33, 31, 36, 35, 34, 32, 29, 36, 32, 28, 38, 37, 36, 29, 37, 39, 35, 36, 41, 40, 39, 37, 42, 41, 37, 38, 17, 43, 30, 13, 43, 38, 29, 30, 44, 42, 38, 43, 18, 44, 43, 17, 46, 45, 44, 18, 45, 47, 42, 44, 49, 48, 47, 45, 50, 49, 45, 46, 47, 51, 41, 42, 51, 52, 40, 41, 54, 53, 52, 51, 48, 54, 51, 47, 56, 55, 54, 48, 55, 57, 53, 54, 59, 58, 57, 55, 60, 59, 55, 56, 62, 61, 49, 50, 61, 56, 48, 49, 63, 60, 56, 61, 64, 63, 61, 62, 66, 65, 23, 24, 65, 67, 20, 23, 69, 68, 67, 65, 70, 69, 65, 66, 67, 71, 19, 20, 71, 46, 18, 19, 72, 50, 46, 71, 68, 72, 71, 67, 74, 73, 72, 68, 73, 62, 50, 72, 75, 64, 62, 73, 76, 75, 73, 74, 78, 77, 69, 70, 77, 74, 68, 69, 79, 76, 74, 77, 80, 79, 77, 78, 34, 82, 81, 33, 82, 84, 83, 81, 86, 85, 84, 82, 35, 86, 82, 34, 84, 88, 87, 83, 88, 90, 89, 87, 92, 91, 90, 88, 85, 92, 88, 84, 94, 93, 92, 85, 93, 95, 91, 92, 97, 96, 95, 93, 98, 97, 93, 94, 39, 99, 86, 35, 99, 94, 85, 86, 100, 98, 94, 99, 40, 100, 99, 39, 90, 102, 101, 89, 102, 104, 103, 101, 106, 105, 104, 102, 91, 106, 102, 90, 104, 108, 107, 103, 108, 110, 109, 107, 112, 111, 110, 108, 105, 112, 108, 104, 114, 113, 112, 105, 113, 115, 111, 112, 117, 116, 115, 113, 118, 117, 113, 114, 95, 119, 106, 91, 119, 114, 105, 106, 120, 118, 114, 119, 96, 120, 119, 95, 122, 121, 120, 96, 121, 123, 118, 120, 125, 124, 123, 121, 126, 125, 121, 122, 123, 127, 117, 118, 127, 128, 116, 117, 130, 129, 128, 127, 124, 130, 127, 123, 132, 131, 130, 124, 131, 133, 129, 130, 135, 134, 133, 131, 136, 135, 131, 132, 138, 137, 125, 126, 137, 132, 124, 125, 139, 136, 132, 137, 140, 139, 137, 138, 52, 141, 100, 40, 141, 142, 98, 100, 144, 143, 142, 141, 53, 144, 141, 52, 142, 145, 97, 98, 145, 122, 96, 97, 146, 126, 122, 145, 143, 146, 145, 142, 148, 147, 146, 143, 147, 138, 126, 146, 149, 140, 138, 147, 150, 149, 147, 148, 57, 151, 144, 53, 151, 148, 143, 144, 152, 150, 148, 151, 58, 152, 151, 57, 154, 153, 152, 58, 153, 155, 150, 152, 157, 156, 155, 153, 158, 157, 153, 154, 155, 159, 149, 150, 159, 160, 140, 149, 162, 161, 160, 159, 156, 162, 159, 155, 164, 163, 162, 156, 163, 165, 161, 162, 167, 166, 165, 163, 168, 167, 163, 164, 170, 169, 157, 158, 169, 164, 156, 157, 171, 168, 164, 169, 172, 171, 169, 170, 160, 173, 139, 140, 173, 174, 136, 139, 176, 175, 174, 173, 161, 176, 173, 160, 174, 177, 135, 136, 177, 178, 134, 135, 180, 179, 178, 177, 175, 180, 177, 174, 182, 181, 180, 175, 181, 183, 179, 180, 185, 184, 183, 181, 186, 185, 181, 182, 165, 187, 176, 161, 187, 182, 175, 176, 188, 186, 182, 187, 166, 188, 187, 165, 190, 189, 188, 166, 189, 191, 186, 188, 193, 192, 191, 189, 194, 193, 189, 190, 191, 195, 185, 186, 195, 196, 184, 185, 198, 197, 196, 195, 192, 198, 195, 191, 200, 199, 198, 192, 199, 201, 197, 198, 203, 202, 201, 199, 204, 203, 199, 200, 206, 205, 193, 194, 205, 200, 192, 193, 207, 204, 200, 205, 208, 207, 205, 206, 210, 209, 171, 172, 209, 211, 168, 171, 213, 212, 211, 209, 214, 213, 209, 210, 211, 215, 167, 168, 215, 190, 166, 167, 216, 194, 190, 215, 212, 216, 215, 211, 218, 217, 216, 212, 217, 206, 194, 216, 219, 208, 206, 217, 220, 219, 217, 218, 222, 221, 213, 214, 221, 218, 212, 213, 223, 220, 218, 221, 224, 223, 221, 222, 226, 225, 79, 80, 225, 227, 76, 79, 229, 228, 227, 225, 230, 229, 225, 226, 227, 231, 75, 76, 231, 232, 64, 75, 234, 233, 232, 231, 228, 234, 231, 227, 236, 235, 234, 228, 235, 237, 233, 234, 239, 238, 237, 235, 240, 239, 235, 236, 242, 241, 229, 230, 241, 236, 228, 229, 243, 240, 236, 241, 244, 243, 241, 242, 232, 245, 63, 64, 245, 246, 60, 63, 248, 247, 246, 245, 233, 248, 245, 232, 246, 249, 59, 60, 249, 154, 58, 59, 250, 158, 154, 249, 247, 250, 249, 246, 252, 251, 250, 247, 251, 170, 158, 250, 253, 172, 170, 251, 254, 253, 251, 252, 237, 255, 248, 233, 255, 252, 247, 248, 256, 254, 252, 255, 238, 256, 255, 237, 258, 257, 256, 238, 257, 259, 254, 256, 261, 260, 259, 257, 262, 261, 257, 258, 259, 263, 253, 254, 263, 210, 172, 253, 264, 214, 210, 263, 260, 264, 263, 259, 266, 265, 264, 260, 265, 222, 214, 264, 267, 224, 222, 265, 268, 267, 265, 266, 270, 269, 261, 262, 269, 266, 260, 261, 271, 268, 266, 269, 272, 271, 269, 270, 274, 273, 243, 244, 273, 275, 240, 243, 277, 276, 275, 273, 278, 277, 273, 274, 275, 279, 239, 240, 279, 258, 238, 239, 280, 262, 258, 279, 276, 280, 279, 275, 282, 281, 280, 276, 281, 270, 262, 280, 283, 272, 270, 281, 284, 283, 281, 282, 286, 285, 277, 278, 285, 282, 276, 277, 287, 284, 282, 285, 288, 287, 285, 286, 290, 289, 107, 109, 289, 291, 103, 107, 293, 292, 291, 289, 294, 293, 289, 290, 291, 295, 101, 103, 295, 296, 89, 101, 298, 297, 296, 295, 292, 298, 295, 291, 300, 299, 298, 292, 299, 301, 297, 298, 303, 302, 301, 299, 304, 303, 299, 300, 306, 305, 293, 294, 305, 300, 292, 293, 307, 304, 300, 305, 308, 307, 305, 306, 296, 309, 87, 89, 309, 310, 83, 87, 312, 311, 310, 309, 297, 312, 309, 296, 310, 313, 81, 83, 313, 314, 33, 81, 316, 315, 314, 313, 311, 316, 313, 310, 318, 317, 316, 311, 317, 319, 315, 316, 321, 320, 319, 317, 322, 321, 317, 318, 301, 323, 312, 297, 323, 318, 311, 312, 324, 322, 318, 323, 302, 324, 323, 301, 326, 325, 324, 302, 325, 327, 322, 324, 329, 328, 327, 325, 330, 329, 325, 326, 327, 331, 321, 322, 331, 332, 320, 321, 334, 333, 332, 331, 328, 334, 331, 327, 336, 335, 334, 328, 335, 337, 333, 334, 339, 338, 337, 335, 340, 339, 335, 336, 342, 341, 329, 330, 341, 336, 328, 329, 343, 340, 336, 341, 344, 343, 341, 342, 346, 345, 307, 308, 345, 347, 304, 307, 349, 348, 347, 345, 350, 349, 345, 346, 347, 351, 303, 304, 351, 326, 302, 303, 352, 330, 326, 351, 348, 352, 351, 347, 354, 353, 352, 348, 353, 342, 330, 352, 355, 344, 342, 353, 356, 355, 353, 354, 358, 357, 349, 350, 357, 354, 348, 349, 359, 356, 354, 357, 360, 359, 357, 358, 314, 361, 31, 33, 361, 362, 27, 31, 364, 363, 362, 361, 315, 364, 361, 314, 362, 365, 25, 27, 365, 366, 11, 25, 368, 367, 366, 365, 363, 368, 365, 362, 370, 369, 368, 363, 369, 371, 367, 368, 373, 372, 371, 369, 374, 373, 369, 370, 319, 375, 364, 315, 375, 370, 363, 364, 376, 374, 370, 375, 320, 376, 375, 319, 366, 377, 9, 11, 377, 378, 4, 9, 380, 379, 378, 377, 367, 380, 377, 366, 378, 381, 1, 4, 381, 382, 0, 1, 384, 383, 382, 381, 379, 384, 381, 378, 386, 385, 384, 379, 385, 387, 383, 384, 389, 388, 387, 385, 390, 389, 385, 386, 371, 391, 380, 367, 391, 386, 379, 380, 392, 390, 386, 391, 372, 392, 391, 371, 394, 393, 392, 372, 393, 395, 390, 392, 397, 396, 395, 393, 398, 397, 393, 394, 395, 399, 389, 390, 399, 400, 388, 389, 402, 401, 400, 399, 396, 402, 399, 395, 404, 403, 402, 396, 403, 405, 401, 402, 407, 406, 405, 403, 408, 407, 403, 404, 410, 409, 397, 398, 409, 404, 396, 397, 411, 408, 404, 409, 412, 411, 409, 410, 332, 413, 376, 320, 413, 414, 374, 376, 416, 415, 414, 413, 333, 416, 413, 332, 414, 417, 373, 374, 417, 394, 372, 373, 418, 398, 394, 417, 415, 418, 417, 414, 420, 419, 418, 415, 419, 410, 398, 418, 421, 412, 410, 419, 422, 421, 419, 420, 337, 423, 416, 333, 423, 420, 415, 416, 424, 422, 420, 423, 338, 424, 423, 337, 426, 425, 424, 338, 425, 427, 422, 424, 429, 428, 427, 425, 430, 429, 425, 426, 427, 431, 421, 422, 431, 432, 412, 421, 434, 433, 432, 431, 428, 434, 431, 427, 436, 435, 434, 428, 435, 437, 433, 434, 439, 438, 437, 435, 440, 439, 435, 436, 442, 441, 429, 430, 441, 436, 428, 429, 443, 440, 436, 441, 444, 443, 441, 442, 432, 445, 411, 412, 445, 446, 408, 411, 448, 447, 446, 445, 433, 448, 445, 432, 446, 449, 407, 408, 449, 450, 406, 407, 452, 451, 450, 449, 447, 452, 449, 446, 454, 453, 452, 447, 453, 455, 451, 452, 457, 456, 455, 453, 458, 457, 453, 454, 437, 459, 448, 433, 459, 454, 447, 448, 460, 458, 454, 459, 438, 460, 459, 437, 462, 461, 460, 438, 461, 463, 458, 460, 465, 464, 463, 461, 466, 465, 461, 462, 463, 467, 457, 458, 467, 468, 456, 457, 470, 469, 468, 467, 464, 470, 467, 463, 472, 471, 470, 464, 471, 473, 469, 470, 475, 474, 473, 471, 476, 475, 471, 472, 478, 477, 465, 466, 477, 472, 464, 465, 479, 476, 472, 477, 480, 479, 477, 478, 482, 481, 443, 444, 481, 483, 440, 443, 485, 484, 483, 481, 486, 485, 481, 482, 483, 487, 439, 440, 487, 462, 438, 439, 488, 466, 462, 487, 484, 488, 487, 483, 490, 489, 488, 484, 489, 478, 466, 488, 491, 480, 478, 489, 492, 491, 489, 490, 494, 493, 485, 486, 493, 490, 484, 485, 495, 492, 490, 493, 496, 495, 493, 494, 498, 497, 359, 360, 497, 499, 356, 359, 501, 500, 499, 497, 502, 501, 497, 498, 499, 503, 355, 356, 503, 504, 344, 355, 506, 505, 504, 503, 500, 506, 503, 499, 508, 507, 506, 500, 507, 509, 505, 506, 511, 510, 509, 507, 512, 511, 507, 508, 514, 513, 501, 502, 513, 508, 500, 501, 515, 512, 508, 513, 516, 515, 513, 514, 504, 517, 343, 344, 517, 518, 340, 343, 520, 519, 518, 517, 505, 520, 517, 504, 518, 521, 339, 340, 521, 426, 338, 339, 522, 430, 426, 521, 519, 522, 521, 518, 524, 523, 522, 519, 523, 442, 430, 522, 525, 444, 442, 523, 526, 525, 523, 524, 509, 527, 520, 505, 527, 524, 519, 520, 528, 526, 524, 527, 510, 528, 527, 509, 530, 529, 528, 510, 529, 531, 526, 528, 533, 532, 531, 529, 534, 533, 529, 530, 531, 535, 525, 526, 535, 482, 444, 525, 536, 486, 482, 535, 532, 536, 535, 531, 538, 537, 536, 532, 537, 494, 486, 536, 539, 496, 494, 537, 540, 539, 537, 538, 542, 541, 533, 534, 541, 538, 532, 533, 543, 540, 538, 541, 544, 543, 541, 542, 546, 545, 515, 516, 545, 547, 512, 515, 549, 548, 547, 545, 550, 549, 545, 546, 547, 551, 511, 512, 551, 530, 510, 511, 552, 534, 530, 551, 548, 552, 551, 547, 554, 553, 552, 548, 553, 542, 534, 552, 555, 544, 542, 553, 556, 555, 553, 554, 558, 557, 549, 550, 557, 554, 548, 549, 559, 556, 554, 557, 560, 559, 557, 558, 562, 561, 559, 560, 561, 563, 556, 559, 565, 564, 563, 561, 566, 565, 561, 562, 563, 567, 555, 556, 567, 568, 544, 555, 570, 569, 568, 567, 564, 570, 567, 563, 572, 571, 570, 564, 571, 573, 569, 570, 575, 574, 573, 571, 576, 575, 571, 572, 578, 577, 565, 566, 577, 572, 564, 565, 579, 576, 572, 577, 580, 579, 577, 578, 568, 581, 543, 544, 581, 582, 540, 543, 584, 583, 582, 581, 569, 584, 581, 568, 582, 585, 539, 540, 585, 586, 496, 539, 588, 587, 586, 585, 583, 588, 585, 582, 590, 589, 588, 583, 589, 591, 587, 588, 593, 592, 591, 589, 594, 593, 589, 590, 573, 595, 584, 569, 595, 590, 583, 584, 596, 594, 590, 595, 574, 596, 595, 573, 598, 597, 596, 574, 597, 599, 594, 596, 601, 600, 599, 597, 602, 601, 597, 598, 599, 603, 593, 594, 603, 604, 592, 593, 606, 605, 604, 603, 600, 606, 603, 599, 608, 607, 606, 600, 607, 609, 605, 606, 611, 610, 609, 607, 612, 611, 607, 608, 614, 613, 601, 602, 613, 608, 600, 601, 615, 612, 608, 613, 616, 615, 613, 614, 618, 617, 579, 580, 617, 619, 576, 579, 621, 620, 619, 617, 622, 621, 617, 618, 619, 623, 575, 576, 623, 598, 574, 575, 624, 602, 598, 623, 620, 624, 623, 619, 626, 625, 624, 620, 625, 614, 602, 624, 627, 616, 614, 625, 628, 627, 625, 626, 630, 629, 621, 622, 629, 626, 620, 621, 631, 628, 626, 629, 632, 631, 629, 630, 586, 633, 495, 496, 633, 634, 492, 495, 636, 635, 634, 633, 587, 636, 633, 586, 634, 637, 491, 492, 637, 638, 480, 491, 640, 639, 638, 637, 635, 640, 637, 634, 642, 641, 640, 635, 641, 643, 639, 640, 645, 644, 643, 641, 646, 645, 641, 642, 591, 647, 636, 587, 647, 642, 635, 636, 648, 646, 642, 647, 592, 648, 647, 591, 638, 649, 479, 480, 649, 650, 476, 479, 652, 651, 650, 649, 639, 652, 649, 638, 650, 653, 475, 476, 653, 654, 474, 475, 656, 655, 654, 653, 651, 656, 653, 650, 658, 657, 656, 651, 657, 659, 655, 656, 661, 660, 659, 657, 662, 661, 657, 658, 643, 663, 652, 639, 663, 658, 651, 652, 664, 662, 658, 663, 644, 664, 663, 643, 666, 665, 664, 644, 665, 667, 662, 664, 669, 668, 667, 665, 670, 669, 665, 666, 667, 671, 661, 662, 671, 672, 660, 661, 674, 673, 672, 671, 668, 674, 671, 667, 676, 675, 674, 668, 675, 677, 673, 674, 679, 678, 677, 675, 680, 679, 675, 676, 682, 681, 669, 670, 681, 676, 668, 669, 683, 680, 676, 681, 684, 683, 681, 682, 604, 685, 648, 592, 685, 686, 646, 648, 688, 687, 686, 685, 605, 688, 685, 604, 686, 689, 645, 646, 689, 666, 644, 645, 690, 670, 666, 689, 687, 690, 689, 686, 692, 691, 690, 687, 691, 682, 670, 690, 693, 684, 682, 691, 694, 693, 691, 692, 609, 695, 688, 605, 695, 692, 687, 688, 696, 694, 692, 695, 610, 696, 695, 609, 698, 697, 696, 610, 697, 699, 694, 696, 701, 700, 699, 697, 702, 701, 697, 698, 699, 703, 693, 694, 703, 704, 684, 693, 706, 705, 704, 703, 700, 706, 703, 699, 708, 707, 706, 700, 707, 709, 705, 706, 711, 710, 709, 707, 712, 711, 707, 708, 714, 713, 701, 702, 713, 708, 700, 701, 715, 712, 708, 713, 716, 715, 713, 714, 704, 717, 683, 684, 717, 718, 680, 683, 720, 719, 718, 717, 705, 720, 717, 704, 718, 721, 679, 680, 721, 722, 678, 679, 724, 723, 722, 721, 719, 724, 721, 718, 726, 725, 724, 719, 725, 727, 723, 724, 729, 728, 727, 725, 730, 729, 725, 726, 709, 731, 720, 705, 731, 726, 719, 720, 732, 730, 726, 731, 710, 732, 731, 709, 734, 733, 732, 710, 733, 735, 730, 732, 737, 736, 735, 733, 738, 737, 733, 734, 735, 739, 729, 730, 739, 740, 728, 729, 742, 741, 740, 739, 736, 742, 739, 735, 744, 743, 742, 736, 743, 745, 741, 742, 747, 746, 745, 743, 748, 747, 743, 744, 750, 749, 737, 738, 749, 744, 736, 737, 751, 748, 744, 749, 752, 751, 749, 750, 754, 753, 715, 716, 753, 755, 712, 715, 757, 756, 755, 753, 758, 757, 753, 754, 755, 759, 711, 712, 759, 734, 710, 711, 760, 738, 734, 759, 756, 760, 759, 755, 762, 761, 760, 756, 761, 750, 738, 760, 763, 752, 750, 761, 764, 763, 761, 762, 766, 765, 757, 758, 765, 762, 756, 757, 767, 764, 762, 765, 768, 767, 765, 766, 770, 769, 631, 632, 769, 771, 628, 631, 773, 772, 771, 769, 774, 773, 769, 770, 771, 775, 627, 628, 775, 776, 616, 627, 778, 777, 776, 775, 772, 778, 775, 771, 780, 779, 778, 772, 779, 781, 777, 778, 783, 782, 781, 779, 784, 783, 779, 780, 786, 785, 773, 774, 785, 780, 772, 773, 787, 784, 780, 785, 788, 787, 785, 786, 776, 789, 615, 616, 789, 790, 612, 615, 792, 791, 790, 789, 777, 792, 789, 776, 790, 793, 611, 612, 793, 698, 610, 611, 794, 702, 698, 793, 791, 794, 793, 790, 796, 795, 794, 791, 795, 714, 702, 794, 797, 716, 714, 795, 798, 797, 795, 796, 781, 799, 792, 777, 799, 796, 791, 792, 800, 798, 796, 799, 782, 800, 799, 781, 802, 801, 800, 782, 801, 803, 798, 800, 805, 804, 803, 801, 806, 805, 801, 802, 803, 807, 797, 798, 807, 754, 716, 797, 808, 758, 754, 807, 804, 808, 807, 803, 810, 809, 808, 804, 809, 766, 758, 808, 811, 768, 766, 809, 812, 811, 809, 810, 814, 813, 805, 806, 813, 810, 804, 805, 815, 812, 810, 813, 816, 815, 813, 814, 818, 817, 787, 788, 817, 819, 784, 787, 821, 820, 819, 817, 822, 821, 817, 818, 819, 823, 783, 784, 823, 802, 782, 783, 824, 806, 802, 823, 820, 824, 823, 819, 826, 825, 824, 820, 825, 814, 806, 824, 827, 816, 814, 825, 828, 827, 825, 826, 830, 829, 821, 822, 829, 826, 820, 821, 831, 828, 826, 829, 832, 831, 829, 830, 834, 833, 201, 202, 833, 835, 197, 201, 837, 836, 835, 833, 838, 837, 833, 834, 835, 839, 196, 197, 839, 840, 184, 196, 842, 841, 840, 839, 836, 842, 839, 835, 844, 843, 842, 836, 843, 845, 841, 842, 847, 846, 845, 843, 848, 847, 843, 844, 850, 849, 837, 838, 849, 844, 836, 837, 851, 848, 844, 849, 852, 851, 849, 850, 840, 853, 183, 184, 853, 854, 179, 183, 856, 855, 854, 853, 841, 856, 853, 840, 854, 857, 178, 179, 857, 858, 134, 178, 860, 859, 858, 857, 855, 860, 857, 854, 862, 861, 860, 855, 861, 863, 859, 860, 865, 864, 863, 861, 866, 865, 861, 862, 845, 867, 856, 841, 867, 862, 855, 856, 868, 866, 862, 867, 846, 868, 867, 845, 870, 869, 868, 846, 869, 871, 866, 868, 873, 872, 871, 869, 874, 873, 869, 870, 871, 875, 865, 866, 875, 876, 864, 865, 878, 877, 876, 875, 872, 878, 875, 871, 880, 879, 878, 872, 879, 881, 877, 878, 883, 882, 881, 879, 884, 883, 879, 880, 886, 885, 873, 874, 885, 880, 872, 873, 887, 884, 880, 885, 888, 887, 885, 886, 890, 889, 851, 852, 889, 891, 848, 851, 893, 892, 891, 889, 894, 893, 889, 890, 891, 895, 847, 848, 895, 870, 846, 847, 896, 874, 870, 895, 892, 896, 895, 891, 898, 897, 896, 892, 897, 886, 874, 896, 899, 888, 886, 897, 900, 899, 897, 898, 902, 901, 893, 894, 901, 898, 892, 893, 903, 900, 898, 901, 904, 903, 901, 902, 858, 905, 133, 134, 905, 906, 129, 133, 908, 907, 906, 905, 859, 908, 905, 858, 906, 909, 128, 129, 909, 910, 116, 128, 912, 911, 910, 909, 907, 912, 909, 906, 914, 913, 912, 907, 913, 915, 911, 912, 917, 916, 915, 913, 918, 917, 913, 914, 863, 919, 908, 859, 919, 914, 907, 908, 920, 918, 914, 919, 864, 920, 919, 863, 910, 921, 115, 116, 921, 922, 111, 115, 924, 923, 922, 921, 911, 924, 921, 910, 922, 925, 110, 111, 925, 290, 109, 110, 926, 294, 290, 925, 923, 926, 925, 922, 928, 927, 926, 923, 927, 306, 294, 926, 929, 308, 306, 927, 930, 929, 927, 928, 915, 931, 924, 911, 931, 928, 923, 924, 932, 930, 928, 931, 916, 932, 931, 915, 934, 933, 932, 916, 933, 935, 930, 932, 937, 936, 935, 933, 938, 937, 933, 934, 935, 939, 929, 930, 939, 346, 308, 929, 940, 350, 346, 939, 936, 940, 939, 935, 942, 941, 940, 936, 941, 358, 350, 940, 943, 360, 358, 941, 944, 943, 941, 942, 946, 945, 937, 938, 945, 942, 936, 937, 947, 944, 942, 945, 948, 947, 945, 946, 876, 949, 920, 864, 949, 950, 918, 920, 952, 951, 950, 949, 877, 952, 949, 876, 950, 953, 917, 918, 953, 934, 916, 917, 954, 938, 934, 953, 951, 954, 953, 950, 956, 955, 954, 951, 955, 946, 938, 954, 957, 948, 946, 955, 958, 957, 955, 956, 881, 959, 952, 877, 959, 956, 951, 952, 960, 958, 956, 959, 882, 960, 959, 881, 962, 961, 960, 882, 961, 963, 958, 960, 965, 964, 963, 961, 966, 965, 961, 962, 963, 967, 957, 958, 967, 968, 948, 957, 970, 969, 968, 967, 964, 970, 967, 963, 972, 971, 970, 964, 971, 973, 969, 970, 975, 974, 973, 971, 976, 975, 971, 972, 978, 977, 965, 966, 977, 972, 964, 965, 979, 976, 972, 977, 980, 979, 977, 978, 968, 981, 947, 948, 981, 982, 944, 947, 984, 983, 982, 981, 969, 984, 981, 968, 982, 985, 943, 944, 985, 498, 360, 943, 986, 502, 498, 985, 983, 986, 985, 982, 988, 987, 986, 983, 987, 514, 502, 986, 989, 516, 514, 987, 990, 989, 987, 988, 973, 991, 984, 969, 991, 988, 983, 984, 992, 990, 988, 991, 974, 992, 991, 973, 994, 993, 992, 974, 993, 995, 990, 992, 997, 996, 995, 993, 998, 997, 993, 994, 995, 999, 989, 990, 999, 546, 516, 989, 1000, 550, 546, 999, 996, 1000, 999, 995, 1002, 1001, 1000, 996, 1001, 558, 550, 1000, 562, 560, 558, 1001, 566, 562, 1001, 1002, 1004, 1003, 997, 998, 1003, 1002, 996, 997, 578, 566, 1002, 1003, 580, 578, 1003, 1004, 1006, 1005, 979, 980, 1005, 1007, 976, 979, 1009, 1008, 1007, 1005, 1010, 1009, 1005, 1006, 1007, 1011, 975, 976, 1011, 994, 974, 975, 1012, 998, 994, 1011, 1008, 1012, 1011, 1007, 1014, 1013, 1012, 1008, 1013, 1004, 998, 1012, 618, 580, 1004, 1013, 622, 618, 1013, 1014, 1016, 1015, 1009, 1010, 1015, 1014, 1008, 1009, 630, 622, 1014, 1015, 632, 630, 1015, 1016, 1018, 1017, 903, 904, 1017, 1019, 900, 903, 1021, 1020, 1019, 1017, 1022, 1021, 1017, 1018, 1019, 1023, 899, 900, 1023, 1024, 888, 899, 1026, 1025, 1024, 1023, 1020, 1026, 1023, 1019, 1028, 1027, 1026, 1020, 1027, 1029, 1025, 1026, 1031, 1030, 1029, 1027, 1032, 1031, 1027, 1028, 1034, 1033, 1021, 1022, 1033, 1028, 1020, 1021, 1035, 1032, 1028, 1033, 1036, 1035, 1033, 1034, 1024, 1037, 887, 888, 1037, 1038, 884, 887, 1040, 1039, 1038, 1037, 1025, 1040, 1037, 1024, 1038, 1041, 883, 884, 1041, 962, 882, 883, 1042, 966, 962, 1041, 1039, 1042, 1041, 1038, 1044, 1043, 1042, 1039, 1043, 978, 966, 1042, 1045, 980, 978, 1043, 1046, 1045, 1043, 1044, 1029, 1047, 1040, 1025, 1047, 1044, 1039, 1040, 1048, 1046, 1044, 1047, 1030, 1048, 1047, 1029, 1050, 1049, 1048, 1030, 1049, 1051, 1046, 1048, 1053, 1052, 1051, 1049, 1054, 1053, 1049, 1050, 1051, 1055, 1045, 1046, 1055, 1006, 980, 1045, 1056, 1010, 1006, 1055, 1052, 1056, 1055, 1051, 1058, 1057, 1056, 1052, 1057, 1016, 1010, 1056, 770, 632, 1016, 1057, 774, 770, 1057, 1058, 1060, 1059, 1053, 1054, 1059, 1058, 1052, 1053, 786, 774, 1058, 1059, 788, 786, 1059, 1060, 1062, 1061, 1035, 1036, 1061, 1063, 1032, 1035, 1065, 1064, 1063, 1061, 1066, 1065, 1061, 1062, 1063, 1067, 1031, 1032, 1067, 1050, 1030, 1031, 1068, 1054, 1050, 1067, 1064, 1068, 1067, 1063, 1070, 1069, 1068, 1064, 1069, 1060, 1054, 1068, 818, 788, 1060, 1069, 822, 818, 1069, 1070, 1072, 1071, 1065, 1066, 1071, 1070, 1064, 1065, 830, 822, 1070, 1071, 832, 830, 1071, 1072, 1074, 1073, 287, 288, 1073, 1075, 284, 287, 1077, 1076, 1075, 1073, 1078, 1077, 1073, 1074, 1075, 1079, 283, 284, 1079, 1080, 272, 283, 1082, 1081, 1080, 1079, 1076, 1082, 1079, 1075, 1084, 1083, 1082, 1076, 1083, 1085, 1081, 1082, 1087, 1086, 1085, 1083, 1088, 1087, 1083, 1084, 1090, 1089, 1077, 1078, 1089, 1084, 1076, 1077, 1091, 1088, 1084, 1089, 1092, 1091, 1089, 1090, 1080, 1093, 271, 272, 1093, 1094, 268, 271, 1096, 1095, 1094, 1093, 1081, 1096, 1093, 1080, 1094, 1097, 267, 268, 1097, 1098, 224, 267, 1100, 1099, 1098, 1097, 1095, 1100, 1097, 1094, 1102, 1101, 1100, 1095, 1101, 1103, 1099, 1100, 1105, 1104, 1103, 1101, 1106, 1105, 1101, 1102, 1085, 1107, 1096, 1081, 1107, 1102, 1095, 1096, 1108, 1106, 1102, 1107, 1086, 1108, 1107, 1085, 1110, 1109, 1108, 1086, 1109, 1111, 1106, 1108, 1113, 1112, 1111, 1109, 1114, 1113, 1109, 1110, 1111, 1115, 1105, 1106, 1115, 1116, 1104, 1105, 1118, 1117, 1116, 1115, 1112, 1118, 1115, 1111, 1120, 1119, 1118, 1112, 1119, 1121, 1117, 1118, 1123, 1122, 1121, 1119, 1124, 1123, 1119, 1120, 1126, 1125, 1113, 1114, 1125, 1120, 1112, 1113, 1127, 1124, 1120, 1125, 1128, 1127, 1125, 1126, 1130, 1129, 1091, 1092, 1129, 1131, 1088, 1091, 1133, 1132, 1131, 1129, 1134, 1133, 1129, 1130, 1131, 1135, 1087, 1088, 1135, 1110, 1086, 1087, 1136, 1114, 1110, 1135, 1132, 1136, 1135, 1131, 1138, 1137, 1136, 1132, 1137, 1126, 1114, 1136, 1139, 1128, 1126, 1137, 1140, 1139, 1137, 1138, 1142, 1141, 1133, 1134, 1141, 1138, 1132, 1133, 1143, 1140, 1138, 1141, 1144, 1143, 1141, 1142, 1098, 1145, 223, 224, 1145, 1146, 220, 223, 1148, 1147, 1146, 1145, 1099, 1148, 1145, 1098, 1146, 1149, 219, 220, 1149, 1150, 208, 219, 1152, 1151, 1150, 1149, 1147, 1152, 1149, 1146, 1154, 1153, 1152, 1147, 1153, 1155, 1151, 1152, 1157, 1156, 1155, 1153, 1158, 1157, 1153, 1154, 1103, 1159, 1148, 1099, 1159, 1154, 1147, 1148, 1160, 1158, 1154, 1159, 1104, 1160, 1159, 1103, 1150, 1161, 207, 208, 1161, 1162, 204, 207, 1164, 1163, 1162, 1161, 1151, 1164, 1161, 1150, 1162, 1165, 203, 204, 1165, 834, 202, 203, 1166, 838, 834, 1165, 1163, 1166, 1165, 1162, 1168, 1167, 1166, 1163, 1167, 850, 838, 1166, 1169, 852, 850, 1167, 1170, 1169, 1167, 1168, 1155, 1171, 1164, 1151, 1171, 1168, 1163, 1164, 1172, 1170, 1168, 1171, 1156, 1172, 1171, 1155, 1174, 1173, 1172, 1156, 1173, 1175, 1170, 1172, 1177, 1176, 1175, 1173, 1178, 1177, 1173, 1174, 1175, 1179, 1169, 1170, 1179, 890, 852, 1169, 1180, 894, 890, 1179, 1176, 1180, 1179, 1175, 1182, 1181, 1180, 1176, 1181, 902, 894, 1180, 1183, 904, 902, 1181, 1184, 1183, 1181, 1182, 1186, 1185, 1177, 1178, 1185, 1182, 1176, 1177, 1187, 1184, 1182, 1185, 1188, 1187, 1185, 1186, 1116, 1189, 1160, 1104, 1189, 1190, 1158, 1160, 1192, 1191, 1190, 1189, 1117, 1192, 1189, 1116, 1190, 1193, 1157, 1158, 1193, 1174, 1156, 1157, 1194, 1178, 1174, 1193, 1191, 1194, 1193, 1190, 1196, 1195, 1194, 1191, 1195, 1186, 1178, 1194, 1197, 1188, 1186, 1195, 1198, 1197, 1195, 1196, 1121, 1199, 1192, 1117, 1199, 1196, 1191, 1192, 1200, 1198, 1196, 1199, 1122, 1200, 1199, 1121, 1202, 1201, 1200, 1122, 1201, 1203, 1198, 1200, 1205, 1204, 1203, 1201, 1206, 1205, 1201, 1202, 1203, 1207, 1197, 1198, 1207, 1208, 1188, 1197, 1210, 1209, 1208, 1207, 1204, 1210, 1207, 1203, 1212, 1211, 1210, 1204, 1211, 1213, 1209, 1210, 1215, 1214, 1213, 1211, 1216, 1215, 1211, 1212, 1218, 1217, 1205, 1206, 1217, 1212, 1204, 1205, 1219, 1216, 1212, 1217, 1220, 1219, 1217, 1218, 1208, 1221, 1187, 1188, 1221, 1222, 1184, 1187, 1224, 1223, 1222, 1221, 1209, 1224, 1221, 1208, 1222, 1225, 1183, 1184, 1225, 1018, 904, 1183, 1226, 1022, 1018, 1225, 1223, 1226, 1225, 1222, 1228, 1227, 1226, 1223, 1227, 1034, 1022, 1226, 1229, 1036, 1034, 1227, 1230, 1229, 1227, 1228, 1213, 1231, 1224, 1209, 1231, 1228, 1223, 1224, 1232, 1230, 1228, 1231, 1214, 1232, 1231, 1213, 1234, 1233, 1232, 1214, 1233, 1235, 1230, 1232, 1237, 1236, 1235, 1233, 1238, 1237, 1233, 1234, 1235, 1239, 1229, 1230, 1239, 1062, 1036, 1229, 1240, 1066, 1062, 1239, 1236, 1240, 1239, 1235, 1242, 1241, 1240, 1236, 1241, 1072, 1066, 1240, 831, 832, 1072, 1241, 828, 831, 1241, 1242, 1244, 1243, 1237, 1238, 1243, 1242, 1236, 1237, 827, 828, 1242, 1243, 816, 827, 1243, 1244, 1246, 1245, 1219, 1220, 1245, 1247, 1216, 1219, 1249, 1248, 1247, 1245, 1250, 1249, 1245, 1246, 1247, 1251, 1215, 1216, 1251, 1234, 1214, 1215, 1252, 1238, 1234, 1251, 1248, 1252, 1251, 1247, 1254, 1253, 1252, 1248, 1253, 1244, 1238, 1252, 815, 816, 1244, 1253, 812, 815, 1253, 1254, 1256, 1255, 1249, 1250, 1255, 1254, 1248, 1249, 811, 812, 1254, 1255, 768, 811, 1255, 1256, 1258, 1257, 1143, 1144, 1257, 1259, 1140, 1143, 1261, 1260, 1259, 1257, 1262, 1261, 1257, 1258, 1259, 1263, 1139, 1140, 1263, 1264, 1128, 1139, 1266, 1265, 1264, 1263, 1260, 1266, 1263, 1259, 1268, 1267, 1266, 1260, 1267, 1269, 1265, 1266, 1271, 1270, 1269, 1267, 1272, 1271, 1267, 1268, 1274, 1273, 1261, 1262, 1273, 1268, 1260, 1261, 1275, 1272, 1268, 1273, 1276, 1275, 1273, 1274, 1264, 1277, 1127, 1128, 1277, 1278, 1124, 1127, 1280, 1279, 1278, 1277, 1265, 1280, 1277, 1264, 1278, 1281, 1123, 1124, 1281, 1202, 1122, 1123, 1282, 1206, 1202, 1281, 1279, 1282, 1281, 1278, 1284, 1283, 1282, 1279, 1283, 1218, 1206, 1282, 1285, 1220, 1218, 1283, 1286, 1285, 1283, 1284, 1269, 1287, 1280, 1265, 1287, 1284, 1279, 1280, 1288, 1286, 1284, 1287, 1270, 1288, 1287, 1269, 1290, 1289, 1288, 1270, 1289, 1291, 1286, 1288, 1293, 1292, 1291, 1289, 1294, 1293, 1289, 1290, 1291, 1295, 1285, 1286, 1295, 1246, 1220, 1285, 1296, 1250, 1246, 1295, 1292, 1296, 1295, 1291, 1298, 1297, 1296, 1292, 1297, 1256, 1250, 1296, 767, 768, 1256, 1297, 764, 767, 1297, 1298, 1300, 1299, 1293, 1294, 1299, 1298, 1292, 1293, 763, 764, 1298, 1299, 752, 763, 1299, 1300, 1302, 1301, 1275, 1276, 1301, 1303, 1272, 1275, 1305, 1304, 1303, 1301, 1306, 1305, 1301, 1302, 1303, 1307, 1271, 1272, 1307, 1290, 1270, 1271, 1308, 1294, 1290, 1307, 1304, 1308, 1307, 1303, 1310, 1309, 1308, 1304, 1309, 1300, 1294, 1308, 751, 752, 1300, 1309, 748, 751, 1309, 1310, 1312, 1311, 1305, 1306, 1311, 1310, 1304, 1305, 747, 748, 1310, 1311, 746, 747, 1311, 1312, 286, 1313, 1074, 288, 1313, 1314, 1078, 1074, 1316, 1315, 1314, 1313, 278, 1316, 1313, 286, 1314, 1317, 1090, 1078, 1317, 1318, 1092, 1090, 1320, 1319, 1318, 1317, 1315, 1320, 1317, 1314, 1322, 1321, 1320, 1315, 1321, 1323, 1319, 1320, 1325, 1324, 1323, 1321, 1326, 1325, 1321, 1322, 274, 1327, 1316, 278, 1327, 1322, 1315, 1316, 1328, 1326, 1322, 1327, 244, 1328, 1327, 274, 1318, 1329, 1130, 1092, 1329, 1330, 1134, 1130, 1332, 1331, 1330, 1329, 1319, 1332, 1329, 1318, 1330, 1333, 1142, 1134, 1333, 1334, 1144, 1142, 1336, 1335, 1334, 1333, 1331, 1336, 1333, 1330, 1338, 1337, 1336, 1331, 1337, 1339, 1335, 1336, 1341, 1340, 1339, 1337, 1342, 1341, 1337, 1338, 1323, 1343, 1332, 1319, 1343, 1338, 1331, 1332, 1344, 1342, 1338, 1343, 1324, 1344, 1343, 1323, 1346, 1345, 1344, 1324, 1345, 1347, 1342, 1344, 1349, 1348, 1347, 1345, 1350, 1349, 1345, 1346, 1347, 1351, 1341, 1342, 1351, 1352, 1340, 1341, 1354, 1353, 1352, 1351, 1348, 1354, 1351, 1347, 1356, 1355, 1354, 1348, 1355, 1357, 1353, 1354, 1359, 1358, 1357, 1355, 1360, 1359, 1355, 1356, 1362, 1361, 1349, 1350, 1361, 1356, 1348, 1349, 1363, 1360, 1356, 1361, 1364, 1363, 1361, 1362, 242, 1365, 1328, 244, 1365, 1366, 1326, 1328, 1368, 1367, 1366, 1365, 230, 1368, 1365, 242, 1366, 1369, 1325, 1326, 1369, 1346, 1324, 1325, 1370, 1350, 1346, 1369, 1367, 1370, 1369, 1366, 1372, 1371, 1370, 1367, 1371, 1362, 1350, 1370, 1373, 1364, 1362, 1371, 1374, 1373, 1371, 1372, 226, 1375, 1368, 230, 1375, 1372, 1367, 1368, 1376, 1374, 1372, 1375, 80, 1376, 1375, 226, 1334, 1377, 1258, 1144, 1377, 1378, 1262, 1258, 1380, 1379, 1378, 1377, 1335, 1380, 1377, 1334, 1378, 1381, 1274, 1262, 1381, 1382, 1276, 1274, 1384, 1383, 1382, 1381, 1379, 1384, 1381, 1378, 1386, 1385, 1384, 1379, 1385, 1387, 1383, 1384, 1389, 1388, 1387, 1385, 1390, 1389, 1385, 1386, 1339, 1391, 1380, 1335, 1391, 1386, 1379, 1380, 1392, 1390, 1386, 1391, 1340, 1392, 1391, 1339, 1382, 1393, 1302, 1276, 1393, 1394, 1306, 1302, 1396, 1395, 1394, 1393, 1383, 1396, 1393, 1382, 1394, 1397, 1312, 1306, 1397, 745, 746, 1312, 1398, 741, 745, 1397, 1395, 1398, 1397, 1394, 1400, 1399, 1398, 1395, 1399, 740, 741, 1398, 1401, 728, 740, 1399, 1402, 1401, 1399, 1400, 1387, 1403, 1396, 1383, 1403, 1400, 1395, 1396, 1404, 1402, 1400, 1403, 1388, 1404, 1403, 1387, 1406, 1405, 1404, 1388, 1405, 1407, 1402, 1404, 1409, 1408, 1407, 1405, 1410, 1409, 1405, 1406, 1407, 1411, 1401, 1402, 1411, 727, 728, 1401, 1412, 723, 727, 1411, 1408, 1412, 1411, 1407, 1414, 1413, 1412, 1408, 1413, 722, 723, 1412, 1415, 678, 722, 1413, 1416, 1415, 1413, 1414, 1418, 1417, 1409, 1410, 1417, 1414, 1408, 1409, 1419, 1416, 1414, 1417, 1420, 1419, 1417, 1418, 1352, 1421, 1392, 1340, 1421, 1422, 1390, 1392, 1424, 1423, 1422, 1421, 1353, 1424, 1421, 1352, 1422, 1425, 1389, 1390, 1425, 1406, 1388, 1389, 1426, 1410, 1406, 1425, 1423, 1426, 1425, 1422, 1428, 1427, 1426, 1423, 1427, 1418, 1410, 1426, 1429, 1420, 1418, 1427, 1430, 1429, 1427, 1428, 1357, 1431, 1424, 1353, 1431, 1428, 1423, 1424, 1432, 1430, 1428, 1431, 1358, 1432, 1431, 1357, 1434, 1433, 1432, 1358, 1433, 1435, 1430, 1432, 1437, 1436, 1435, 1433, 1438, 1437, 1433, 1434, 1435, 1439, 1429, 1430, 1439, 1440, 1420, 1429, 1442, 1441, 1440, 1439, 1436, 1442, 1439, 1435, 1444, 1443, 1442, 1436, 1443, 1445, 1441, 1442, 1447, 1446, 1445, 1443, 1448, 1447, 1443, 1444, 1450, 1449, 1437, 1438, 1449, 1444, 1436, 1437, 1451, 1448, 1444, 1449, 1452, 1451, 1449, 1450, 1440, 1453, 1419, 1420, 1453, 1454, 1416, 1419, 1456, 1455, 1454, 1453, 1441, 1456, 1453, 1440, 1454, 1457, 1415, 1416, 1457, 677, 678, 1415, 1458, 673, 677, 1457, 1455, 1458, 1457, 1454, 1460, 1459, 1458, 1455, 1459, 672, 673, 1458, 1461, 660, 672, 1459, 1462, 1461, 1459, 1460, 1445, 1463, 1456, 1441, 1463, 1460, 1455, 1456, 1464, 1462, 1460, 1463, 1446, 1464, 1463, 1445, 1466, 1465, 1464, 1446, 1465, 1467, 1462, 1464, 1469, 1468, 1467, 1465, 1470, 1469, 1465, 1466, 1467, 1471, 1461, 1462, 1471, 659, 660, 1461, 1472, 655, 659, 1471, 1468, 1472, 1471, 1467, 1474, 1473, 1472, 1468, 1473, 654, 655, 1472, 473, 474, 654, 1473, 469, 473, 1473, 1474, 1476, 1475, 1469, 1470, 1475, 1474, 1468, 1469, 468, 469, 1474, 1475, 456, 468, 1475, 1476, 1478, 1477, 1451, 1452, 1477, 1479, 1448, 1451, 1481, 1480, 1479, 1477, 1482, 1481, 1477, 1478, 1479, 1483, 1447, 1448, 1483, 1466, 1446, 1447, 1484, 1470, 1466, 1483, 1480, 1484, 1483, 1479, 1486, 1485, 1484, 1480, 1485, 1476, 1470, 1484, 455, 456, 1476, 1485, 451, 455, 1485, 1486, 1488, 1487, 1481, 1482, 1487, 1486, 1480, 1481, 450, 451, 1486, 1487, 406, 450, 1487, 1488, 78, 1489, 1376, 80, 1489, 1490, 1374, 1376, 1492, 1491, 1490, 1489, 70, 1492, 1489, 78, 1490, 1493, 1373, 1374, 1493, 1494, 1364, 1373, 1496, 1495, 1494, 1493, 1491, 1496, 1493, 1490, 1498, 1497, 1496, 1491, 1497, 1499, 1495, 1496, 1501, 1500, 1499, 1497, 1502, 1501, 1497, 1498, 66, 1503, 1492, 70, 1503, 1498, 1491, 1492, 1504, 1502, 1498, 1503, 24, 1504, 1503, 66, 1494, 1505, 1363, 1364, 1505, 1506, 1360, 1363, 1508, 1507, 1506, 1505, 1495, 1508, 1505, 1494, 1506, 1509, 1359, 1360, 1509, 1434, 1358, 1359, 1510, 1438, 1434, 1509, 1507, 1510, 1509, 1506, 1512, 1511, 1510, 1507, 1511, 1450, 1438, 1510, 1513, 1452, 1450, 1511, 1514, 1513, 1511, 1512, 1499, 1515, 1508, 1495, 1515, 1512, 1507, 1508, 1516, 1514, 1512, 1515, 1500, 1516, 1515, 1499, 1518, 1517, 1516, 1500, 1517, 1519, 1514, 1516, 1521, 1520, 1519, 1517, 1522, 1521, 1517, 1518, 1519, 1523, 1513, 1514, 1523, 1478, 1452, 1513, 1524, 1482, 1478, 1523, 1520, 1524, 1523, 1519, 1526, 1525, 1524, 1520, 1525, 1488, 1482, 1524, 405, 406, 1488, 1525, 401, 405, 1525, 1526, 1528, 1527, 1521, 1522, 1527, 1526, 1520, 1521, 400, 401, 1526, 1527, 388, 400, 1527, 1528, 22, 1529, 1504, 24, 1529, 1530, 1502, 1504, 1532, 1531, 1530, 1529, 8, 1532, 1529, 22, 1530, 1533, 1501, 1502, 1533, 1518, 1500, 1501, 1534, 1522, 1518, 1533, 1531, 1534, 1533, 1530, 1536, 1535, 1534, 1531, 1535, 1528, 1522, 1534, 387, 388, 1528, 1535, 383, 387, 1535, 1536, 3, 1537, 1532, 8, 1537, 1536, 1531, 1532, 382, 383, 1536, 1537, 0, 382, 1537, 3}, + ["vertex_list_0"] = { Vec3(0.579348564, -0.579348981, -0.579348385), Vec3(0.596732914, -0.54291594, -0.596732557), Vec3(0.63434422, -0.549794436, -0.54979378), Vec3(0.596732855, -0.596733212, -0.542915344), Vec3(0.620292306, -0.487256616, -0.620291829), Vec3(0.667616367, -0.491493762, -0.565391183), Vec3(0.708671987, -0.502360821, -0.502360284), Vec3(0.667616248, -0.565391779, -0.491493225), Vec3(0.620292008, -0.620292485, -0.48725608), Vec3(0.644162357, -0.420784384, -0.644161999), Vec3(0.697528541, -0.423737824, -0.58382374), Vec3(0.666017115, -0.346116602, -0.666016579), Vec3(0.723508716, -0.348251581, -0.601838231), Vec3(0.774297893, -0.354056209, -0.531092048), Vec3(0.744235635, -0.431635082, -0.516483486), Vec3(0.784516275, -0.442427874, -0.442427486), Vec3(0.744235456, -0.516483963, -0.431634724), Vec3(0.818292201, -0.362190068, -0.454053998), Vec3(0.855216682, -0.371180326, -0.371180207), Vec3(0.81829226, -0.454054296, -0.362189889), Vec3(0.774297655, -0.531092465, -0.35405609), Vec3(0.697528243, -0.583824277, -0.423737466), Vec3(0.644162059, -0.644162595, -0.420783937), Vec3(0.723508298, -0.601838648, -0.348251283), Vec3(0.666016638, -0.666017175, -0.346116245), Vec3(0.684359193, -0.265069962, -0.684358478), Vec3(0.744725943, -0.266581923, -0.617472708), Vec3(0.698144972, -0.179295748, -0.698144138), Vec3(0.760417521, -0.180270016, -0.62946409), Vec3(0.816099763, -0.182947308, -0.554494321), Vec3(0.798436761, -0.270720929, -0.544206679), Vec3(0.706678092, -0.090409331, -0.706677675), Vec3(0.770023227, -0.0908876285, -0.636995018), Vec3(0.709564328, -3.10169987e-08, -0.709563732), Vec3(0.773250937, -1.55084994e-08, -0.639564753), Vec3(0.830428481, 0, -0.563331544), Vec3(0.826835215, -0.0922052264, -0.561065972), Vec3(0.87669909, -0.0940981954, -0.479050994), Vec3(0.864822745, -0.186774924, -0.47343722), Vec3(0.880668521, 0, -0.481007814), Vec3(0.923328996, 1.55084994e-08, -0.392938048), Vec3(0.918992639, -0.0962664708, -0.391308814), Vec3(0.9060269, -0.191126719, -0.38668409), Vec3(0.845220864, -0.276593149, -0.464806527), Vec3(0.884631991, -0.283191711, -0.379697651), Vec3(0.916101098, -0.289564282, -0.289564282), Vec3(0.884631872, -0.379697829, -0.283191681), Vec3(0.939039052, -0.195391074, -0.294890076), Vec3(0.963182211, -0.199005798, -0.199005842), Vec3(0.939038992, -0.294890106, -0.195391178), Vec3(0.90602684, -0.386684269, -0.191126764), Vec3(0.952974856, -0.0984107032, -0.298469096), Vec3(0.95764482, 4.65254999e-08, -0.299741089), Vec3(0.982842922, 6.20339975e-08, -0.202340767), Vec3(0.977899373, -0.100244105, -0.201462179), Vec3(0.993134081, -0.101498291, -0.101498388), Vec3(0.977899373, -0.201462135, -0.100244232), Vec3(0.998260677, 7.75425022e-08, -0.101948649), Vec3(1.00345218, 9.30509998e-08, -3.10169987e-08), Vec3(0.998260677, -0.101948552, -4.65254999e-08), Vec3(0.982842922, -0.202340722, -6.20339975e-08), Vec3(0.952974737, -0.298469186, -0.0984108299), Vec3(0.918992519, -0.391309083, -0.0962665975), Vec3(0.95764482, -0.299741149, -7.75425022e-08), Vec3(0.923328876, -0.392938346, -9.30509998e-08), Vec3(0.744725466, -0.617473304, -0.266581744), Vec3(0.684358537, -0.684359193, -0.265069693), Vec3(0.798436582, -0.544207096, -0.270720869), Vec3(0.816099346, -0.554494798, -0.182947293), Vec3(0.760417104, -0.629464567, -0.180269986), Vec3(0.698144317, -0.698144794, -0.179295674), Vec3(0.845220745, -0.464806795, -0.276593119), Vec3(0.864822567, -0.473437458, -0.186775029), Vec3(0.876698971, -0.479051292, -0.0940983072), Vec3(0.826835096, -0.56106621, -0.0922053233), Vec3(0.880668283, -0.481008321, -1.08559497e-07), Vec3(0.830428183, -0.563331902, -1.08559497e-07), Vec3(0.77002275, -0.636995494, -0.0908876732), Vec3(0.706677675, -0.706678212, -0.0904093757), Vec3(0.77325052, -0.639565229, -1.24067995e-07), Vec3(0.709563851, -0.709564269, -1.395765e-07), Vec3(0.706678212, 0.0904092491, -0.706677675), Vec3(0.770023227, 0.0908875614, -0.636995018), Vec3(0.698144853, 0.179295629, -0.698144376), Vec3(0.760417461, 0.180269867, -0.629464149), Vec3(0.816099703, 0.182947189, -0.554494262), Vec3(0.826835275, 0.0922051966, -0.561065912), Vec3(0.684359193, 0.265069664, -0.684358478), Vec3(0.744726002, 0.266581744, -0.617472708), Vec3(0.666017234, 0.346116304, -0.666016579), Vec3(0.723508894, 0.348251313, -0.601838171), Vec3(0.774298072, 0.35405606, -0.531091988), Vec3(0.79843694, 0.27072072, -0.54420656), Vec3(0.845221043, 0.27659297, -0.464806318), Vec3(0.864822805, 0.186774924, -0.473437071), Vec3(0.818292499, 0.362189829, -0.454053849), Vec3(0.85521692, 0.371180117, -0.371180028), Vec3(0.884632111, 0.283191532, -0.379697472), Vec3(0.906026959, 0.191126704, -0.386683911), Vec3(0.87669915, 0.0940981954, -0.479050905), Vec3(0.918992639, 0.0962665007, -0.391308814), Vec3(0.644162476, 0.420784116, -0.644162059), Vec3(0.69752878, 0.423737556, -0.58382374), Vec3(0.620292306, 0.487256318, -0.620291948), Vec3(0.667616606, 0.491493464, -0.565391123), Vec3(0.708672285, 0.502360404, -0.502360225), Vec3(0.744235814, 0.431634784, -0.516483486), Vec3(0.596733153, 0.542915642, -0.596732676), Vec3(0.634344518, 0.549794078, -0.54979378), Vec3(0.579348922, 0.579348564, -0.579348505), Vec3(0.596733212, 0.596732795, -0.542915463), Vec3(0.620292366, 0.620292008, -0.487256199), Vec3(0.667616546, 0.565391302, -0.491493255), Vec3(0.69752866, 0.583823919, -0.423737407), Vec3(0.744235814, 0.516483605, -0.431634665), Vec3(0.644162476, 0.644162178, -0.420784026), Vec3(0.666017234, 0.666016638, -0.346116155), Vec3(0.723508894, 0.601838231, -0.348251313), Vec3(0.774298131, 0.531091928, -0.354055911), Vec3(0.784516573, 0.442427397, -0.442427337), Vec3(0.818292499, 0.454053938, -0.36218968), Vec3(0.845220983, 0.464806467, -0.27659291), Vec3(0.884632111, 0.379697502, -0.283191442), Vec3(0.79843688, 0.544206679, -0.270720661), Vec3(0.816099823, 0.554494321, -0.182947174), Vec3(0.864822805, 0.47343722, -0.186774805), Vec3(0.9060269, 0.38668409, -0.191126645), Vec3(0.744726002, 0.617472827, -0.266581625), Vec3(0.684359252, 0.684358597, -0.265069604), Vec3(0.698144913, 0.698144376, -0.17929554), Vec3(0.76041764, 0.62946409, -0.180269808), Vec3(0.770023167, 0.636995077, -0.090887472), Vec3(0.826835215, 0.561066031, -0.092205137), Vec3(0.706678152, 0.706677735, -0.0904091597), Vec3(0.709564328, 0.709563732, 9.30509998e-08), Vec3(0.773250818, 0.639564812, 7.75425022e-08), Vec3(0.830428481, 0.563331664, 6.20339975e-08), Vec3(0.87669909, 0.479051024, -0.0940981209), Vec3(0.918992579, 0.391308874, -0.0962664261), Vec3(0.880668461, 0.481007993, 6.20339975e-08), Vec3(0.923328936, 0.392938137, 3.10169987e-08), Vec3(0.952974796, 0.0984107703, -0.298469096), Vec3(0.939038992, 0.195391163, -0.294890046), Vec3(0.963182271, 0.199005887, -0.199005768), Vec3(0.977899373, 0.100244246, -0.20146215), Vec3(0.916101277, 0.289564252, -0.289564043), Vec3(0.939038992, 0.294890076, -0.195391029), Vec3(0.952974796, 0.298469156, -0.0984106883), Vec3(0.977899373, 0.201462224, -0.10024415), Vec3(0.95764488, 0.299741209, 1.55084994e-08), Vec3(0.982842922, 0.202340826, 0), Vec3(0.993134201, 0.101498418, -0.101498358), Vec3(0.998260498, 0.101948723, 0), Vec3(0.993134201, 0.101498447, 0.101498343), Vec3(0.998260677, 1.24067995e-07, 0.101948597), Vec3(0.977899432, 0.201462209, 0.100244217), Vec3(0.963182211, 0.199005961, 0.199005842), Vec3(0.977899373, 0.100244306, 0.201462224), Vec3(0.982842922, 1.395765e-07, 0.202340767), Vec3(0.952974737, 0.298469216, 0.0984107703), Vec3(0.918992519, 0.391309023, 0.0962665603), Vec3(0.90602684, 0.386684179, 0.191126823), Vec3(0.939038992, 0.294890195, 0.195391178), Vec3(0.916101158, 0.289564312, 0.289564312), Vec3(0.939038932, 0.195391253, 0.294890136), Vec3(0.884631932, 0.37969774, 0.28319177), Vec3(0.855216682, 0.371180236, 0.371180445), Vec3(0.884631872, 0.28319177, 0.379697889), Vec3(0.906026781, 0.191126883, 0.386684299), Vec3(0.952974737, 0.0984109119, 0.298469216), Vec3(0.95764488, 1.55085004e-07, 0.299741209), Vec3(0.91899246, 0.0962666869, 0.391309142), Vec3(0.923328817, 1.86102e-07, 0.392938405), Vec3(0.87669909, 0.479050994, 0.094098255), Vec3(0.826835155, 0.561066031, 0.0922053084), Vec3(0.816099524, 0.5544945, 0.182947323), Vec3(0.864822686, 0.47343725, 0.186775029), Vec3(0.770023227, 0.636995018, 0.0908876732), Vec3(0.706678152, 0.706677675, 0.0904093906), Vec3(0.698144794, 0.698144317, 0.179295778), Vec3(0.760417521, 0.62946403, 0.180270046), Vec3(0.744725883, 0.617472887, 0.266581893), Vec3(0.798436761, 0.544206738, 0.270721018), Vec3(0.684359014, 0.684358597, 0.265069932), Vec3(0.666016936, 0.666016638, 0.346116632), Vec3(0.723508656, 0.601838291, 0.348251611), Vec3(0.774297833, 0.531092048, 0.354056329), Vec3(0.845220745, 0.464806527, 0.276593179), Vec3(0.81829232, 0.454054058, 0.362190098), Vec3(0.784516215, 0.442427576, 0.442427844), Vec3(0.818292141, 0.362189919, 0.454054356), Vec3(0.744235575, 0.516483605, 0.431635141), Vec3(0.708671927, 0.502360463, 0.502360821), Vec3(0.744235456, 0.431634873, 0.516483963), Vec3(0.774297595, 0.35405615, 0.531092525), Vec3(0.697528481, 0.58382386, 0.423737824), Vec3(0.644162297, 0.64416194, 0.420784533), Vec3(0.620292127, 0.620291829, 0.487256825), Vec3(0.667616308, 0.565391183, 0.491493762), Vec3(0.634344161, 0.54979378, 0.549794495), Vec3(0.667616129, 0.491493285, 0.565391779), Vec3(0.596732855, 0.596732616, 0.542916059), Vec3(0.579348505, 0.579348266, 0.579349041), Vec3(0.596732736, 0.542915344, 0.596733212), Vec3(0.620291948, 0.487256169, 0.620292425), Vec3(0.697528243, 0.423737615, 0.583824277), Vec3(0.723508358, 0.348251373, 0.601838708), Vec3(0.64416194, 0.420784086, 0.644162595), Vec3(0.666016579, 0.346116334, 0.666017175), Vec3(0.876698911, 0.0940983966, 0.479051352), Vec3(0.880668283, 2.01610504e-07, 0.481008321), Vec3(0.864822447, 0.186775044, 0.473437607), Vec3(0.816099405, 0.182947397, 0.554494858), Vec3(0.826835036, 0.0922053978, 0.561066329), Vec3(0.830428123, 2.17118995e-07, 0.563332021), Vec3(0.845220685, 0.276593149, 0.464806825), Vec3(0.798436522, 0.270720899, 0.544207156), Vec3(0.744725406, 0.266581863, 0.617473364), Vec3(0.760417044, 0.180270046, 0.629464626), Vec3(0.684358537, 0.265069813, 0.684359193), Vec3(0.698144197, 0.179295748, 0.698144913), Vec3(0.77002275, 0.090887785, 0.636995614), Vec3(0.773250341, 2.32627499e-07, 0.639565289), Vec3(0.706677675, 0.0904094651, 0.706678212), Vec3(0.709563732, 2.32627499e-07, 0.709564328), Vec3(0.77002275, -0.636995554, 0.0908874422), Vec3(0.706677675, -0.706678152, 0.0904090926), Vec3(0.826835036, -0.56106627, 0.0922050923), Vec3(0.816099524, -0.554494739, 0.182947144), Vec3(0.760417283, -0.629464507, 0.180269778), Vec3(0.698144376, -0.698144794, 0.179295495), Vec3(0.876698971, -0.479051322, 0.094098106), Vec3(0.918992519, -0.391309053, 0.0962664261), Vec3(0.90602684, -0.386684179, 0.191126645), Vec3(0.864822686, -0.473437369, 0.186774835), Vec3(0.845220804, -0.464806676, 0.276593059), Vec3(0.798436701, -0.544206917, 0.27072075), Vec3(0.884632051, -0.37969774, 0.283191621), Vec3(0.855216682, -0.371180236, 0.371180266), Vec3(0.81829232, -0.454054147, 0.362189889), Vec3(0.774297774, -0.531092227, 0.35405609), Vec3(0.744725645, -0.617473245, 0.266581625), Vec3(0.684358776, -0.684359133, 0.265069574), Vec3(0.723508537, -0.601838589, 0.348251343), Vec3(0.666016698, -0.666017115, 0.346116245), Vec3(0.952974796, -0.298469186, 0.0984106734), Vec3(0.977899373, -0.201462135, 0.10024412), Vec3(0.963182271, -0.199005723, 0.199005798), Vec3(0.939038992, -0.294890076, 0.195391148), Vec3(0.993134201, -0.101498231, 0.101498291), Vec3(0.977899432, -0.100244045, 0.201462165), Vec3(0.952974796, -0.098410584, 0.298469245), Vec3(0.939038932, -0.195390999, 0.294890106), Vec3(0.918992579, -0.0962663144, 0.391309053), Vec3(0.90602684, -0.1911266, 0.386684209), Vec3(0.916101098, -0.289564282, 0.289564312), Vec3(0.884632051, -0.283191562, 0.379697859), Vec3(0.845220804, -0.27659294, 0.464806736), Vec3(0.81829232, -0.362189829, 0.454054207), Vec3(0.864822745, -0.186774746, 0.473437518), Vec3(0.816099584, -0.182947055, 0.554494739), Vec3(0.798436642, -0.270720631, 0.544207036), Vec3(0.774297833, -0.354055971, 0.531092286), Vec3(0.876698971, -0.0940979943, 0.479051322), Vec3(0.826835036, -0.0922049806, 0.561066329), Vec3(0.77002275, -0.0908873305, 0.636995554), Vec3(0.760417163, -0.180269673, 0.629464626), Vec3(0.706677675, -0.0904090181, 0.706678152), Vec3(0.698144436, -0.179295361, 0.698144853), Vec3(0.744725585, -0.266581506, 0.617473304), Vec3(0.723508537, -0.348251224, 0.601838589), Vec3(0.684358776, -0.265069485, 0.684359193), Vec3(0.666016757, -0.346116185, 0.666017175), Vec3(0.697528303, -0.583824158, 0.423737615), Vec3(0.644162178, -0.644162416, 0.420784056), Vec3(0.744235575, -0.516483724, 0.431634963), Vec3(0.708671868, -0.502360582, 0.502360702), Vec3(0.667616189, -0.5653916, 0.491493523), Vec3(0.620292068, -0.620292246, 0.487256259), Vec3(0.784516335, -0.442427546, 0.442427576), Vec3(0.744235456, -0.431634814, 0.516483903), Vec3(0.697528243, -0.423737556, 0.583824217), Vec3(0.667616189, -0.491493493, 0.56539166), Vec3(0.644162118, -0.420784056, 0.644162476), Vec3(0.620292068, -0.487256318, 0.620292127), Vec3(0.634344041, -0.549794137, 0.549794197), Vec3(0.596732795, -0.596733034, 0.542915702), Vec3(0.596732736, -0.542915702, 0.596732974), Vec3(0.579348505, -0.579348624, 0.579348683), Vec3(0.549794436, 0.549794137, -0.634343982), Vec3(0.542915821, 0.596732914, -0.596732795), Vec3(0.56539166, 0.491493493, -0.667616129), Vec3(0.502360761, 0.502360582, -0.708671808), Vec3(0.491493732, 0.565391541, -0.667616129), Vec3(0.487256616, 0.620292008, -0.620292008), Vec3(0.583824337, 0.423737645, -0.697528183), Vec3(0.601838708, 0.348251402, -0.723508358), Vec3(0.531092465, 0.35405612, -0.774297595), Vec3(0.516483963, 0.431634963, -0.744235337), Vec3(0.442427844, 0.442427635, -0.784516156), Vec3(0.431635082, 0.516483843, -0.744235337), Vec3(0.454054385, 0.362190008, -0.818292022), Vec3(0.371180505, 0.371180475, -0.855216503), Vec3(0.362190098, 0.454054266, -0.818292081), Vec3(0.354056299, 0.531092405, -0.774297655), Vec3(0.423737854, 0.583824039, -0.697528243), Vec3(0.420784324, 0.644162238, -0.644162118), Vec3(0.348251522, 0.60183847, -0.723508477), Vec3(0.346116513, 0.666016817, -0.666016817), Vec3(0.617473364, 0.266581744, -0.744725406), Vec3(0.629464746, 0.180269927, -0.760416985), Vec3(0.554494917, 0.182947248, -0.816099286), Vec3(0.544207156, 0.270720869, -0.798436522), Vec3(0.636995614, 0.0908875614, -0.77002269), Vec3(0.639565349, -3.10169987e-08, -0.773250401), Vec3(0.56333214, -4.65254999e-08, -0.830428064), Vec3(0.561066508, 0.0922052115, -0.826834917), Vec3(0.47905162, 0.0940982103, -0.876698732), Vec3(0.473437697, 0.186774954, -0.864822447), Vec3(0.481008559, -6.20339975e-08, -0.880668163), Vec3(0.392938614, -6.20339975e-08, -0.923328698), Vec3(0.391309351, 0.0962665007, -0.9189924), Vec3(0.386684537, 0.191126794, -0.906026721), Vec3(0.464806944, 0.276593119, -0.845220566), Vec3(0.379697978, 0.28319177, -0.884631813), Vec3(0.28956458, 0.28956449, -0.916101038), Vec3(0.28319186, 0.379697889, -0.884631813), Vec3(0.294890344, 0.195391238, -0.939038873), Vec3(0.199006036, 0.199005991, -0.963182211), Vec3(0.195391312, 0.294890344, -0.939038932), Vec3(0.191126883, 0.386684388, -0.906026781), Vec3(0.298469514, 0.0984107703, -0.952974677), Vec3(0.299741477, -6.20339975e-08, -0.957644701), Vec3(0.202340946, -7.75425022e-08, -0.982842922), Vec3(0.201462418, 0.100244217, -0.977899313), Vec3(0.101498447, 0.101498388, -0.993134081), Vec3(0.100244276, 0.201462284, -0.977899373), Vec3(0.101948723, -7.75425022e-08, -0.998260498), Vec3(-3.10169987e-08, -7.75425022e-08, -1.00345218), Vec3(-1.55084994e-08, 0.101948664, -0.998260677), Vec3(-3.10169987e-08, 0.202340871, -0.982842922), Vec3(0.098410815, 0.298469394, -0.952974677), Vec3(0.0962665826, 0.391309261, -0.91899246), Vec3(-3.10169987e-08, 0.299741328, -0.957644761), Vec3(-3.10169987e-08, 0.392938465, -0.923328817), Vec3(0.266581893, 0.617473125, -0.744725645), Vec3(0.265069902, 0.684358835, -0.684358835), Vec3(0.270721018, 0.544206977, -0.798436582), Vec3(0.182947323, 0.554494739, -0.816099405), Vec3(0.180270001, 0.629464447, -0.760417283), Vec3(0.179295719, 0.698144615, -0.698144555), Vec3(0.276593238, 0.464806765, -0.845220625), Vec3(0.186775088, 0.473437577, -0.864822447), Vec3(0.094098255, 0.479051411, -0.876698852), Vec3(0.0922052413, 0.56106627, -0.826835096), Vec3(-3.10169987e-08, 0.481008351, -0.880668223), Vec3(-3.10169987e-08, 0.563331902, -0.830428243), Vec3(0.0908876136, 0.636995435, -0.770022869), Vec3(0.0904092789, 0.706677914, -0.706677914), Vec3(-3.10169987e-08, 0.639565229, -0.77325052), Vec3(-3.10169987e-08, 0.70956403, -0.709563971), Vec3(0.636995673, -0.0908876732, -0.77002269), Vec3(0.629464746, -0.180270061, -0.760416925), Vec3(0.554494917, -0.182947397, -0.816099226), Vec3(0.561066508, -0.0922053531, -0.826834917), Vec3(0.617473304, -0.266581982, -0.744725406), Vec3(0.601838648, -0.3482517, -0.723508239), Vec3(0.531092405, -0.354056418, -0.774297535), Vec3(0.544207156, -0.270721078, -0.798436463), Vec3(0.464806944, -0.276593328, -0.845220566), Vec3(0.473437726, -0.186775163, -0.864822447), Vec3(0.454054385, -0.362190276, -0.818291903), Vec3(0.371180475, -0.371180713, -0.855216384), Vec3(0.379697978, -0.283192009, -0.884631813), Vec3(0.386684448, -0.191126972, -0.906026661), Vec3(0.47905159, -0.0940983519, -0.876698792), Vec3(0.391309321, -0.096266672, -0.9189924), Vec3(0.583824158, -0.423737973, -0.697528124), Vec3(0.5653916, -0.491493762, -0.66761601), Vec3(0.502360642, -0.502361, -0.708671629), Vec3(0.516483903, -0.431635261, -0.744235277), Vec3(0.549794137, -0.549794555, -0.634343863), Vec3(0.542915463, -0.596733272, -0.596732557), Vec3(0.487256259, -0.620292604, -0.62029165), Vec3(0.491493523, -0.565391958, -0.667615891), Vec3(0.423737615, -0.583824337, -0.697528124), Vec3(0.431634963, -0.516484201, -0.744235277), Vec3(0.420784116, -0.644162714, -0.64416182), Vec3(0.346116334, -0.666017413, -0.6660164), Vec3(0.348251402, -0.601839006, -0.72350812), Vec3(0.35405618, -0.531092763, -0.774297416), Vec3(0.442427784, -0.442428052, -0.784516096), Vec3(0.362190068, -0.454054564, -0.818291903), Vec3(0.276593208, -0.464807153, -0.845220447), Vec3(0.28319183, -0.379698128, -0.884631693), Vec3(0.270720869, -0.544207335, -0.798436344), Vec3(0.182947293, -0.554495156, -0.816099226), Vec3(0.186775029, -0.473438025, -0.864822268), Vec3(0.191126853, -0.386684716, -0.906026602), Vec3(0.266581804, -0.617473602, -0.744725287), Vec3(0.265069693, -0.684359431, -0.684358358), Vec3(0.179295585, -0.698145151, -0.698144019), Vec3(0.180269927, -0.629464924, -0.760416925), Vec3(0.0908875465, -0.636995971, -0.770022452), Vec3(0.0922052115, -0.561066806, -0.826834679), Vec3(0.0904092044, -0.706678569, -0.706677377), Vec3(-3.10169987e-08, -0.709564626, -0.709563434), Vec3(-1.55084994e-08, -0.639565766, -0.773250043), Vec3(-3.10169987e-08, -0.563332438, -0.830427825), Vec3(0.0940982252, -0.479051828, -0.876698613), Vec3(0.0962665305, -0.39130953, -0.918992281), Vec3(-3.10169987e-08, -0.481008708, -0.880668044), Vec3(-3.10169987e-08, -0.392938763, -0.923328638), Vec3(0.298469454, -0.0984109119, -0.952974677), Vec3(0.294890344, -0.195391402, -0.939038813), Vec3(0.199006081, -0.19900623, -0.963182092), Vec3(0.201462343, -0.100244373, -0.977899373), Vec3(0.28956458, -0.289564699, -0.916100979), Vec3(0.195391282, -0.294890523, -0.939038813), Vec3(0.0984108299, -0.298469603, -0.952974617), Vec3(0.100244276, -0.201462492, -0.977899313), Vec3(-3.10169987e-08, -0.299741685, -0.957644761), Vec3(-3.10169987e-08, -0.202341124, -0.982842863), Vec3(0.101498432, -0.101498574, -0.993134081), Vec3(-3.10169987e-08, -0.10194885, -0.998260498), Vec3(-0.101498529, -0.101498559, -0.993134081), Vec3(-0.101948768, -6.20339975e-08, -0.998260677), Vec3(-0.100244336, -0.201462507, -0.977899373), Vec3(-0.19900614, -0.1990062, -0.963182092), Vec3(-0.201462492, -0.100244388, -0.977899313), Vec3(-0.202340975, -7.75425022e-08, -0.982842922), Vec3(-0.0984109119, -0.298469603, -0.952974617), Vec3(-0.0962666422, -0.3913095, -0.918992281), Vec3(-0.191126928, -0.386684775, -0.906026602), Vec3(-0.195391387, -0.294890523, -0.939038694), Vec3(-0.289564669, -0.289564699, -0.916100979), Vec3(-0.294890493, -0.195391446, -0.939038813), Vec3(-0.283191919, -0.379698187, -0.884631693), Vec3(-0.371180534, -0.371180683, -0.855216444), Vec3(-0.379697978, -0.283192009, -0.884631693), Vec3(-0.386684537, -0.191127017, -0.906026661), Vec3(-0.298469603, -0.0984109566, -0.952974617), Vec3(-0.299741566, -7.75425022e-08, -0.957644761), Vec3(-0.39130941, -0.0962666571, -0.9189924), Vec3(-0.392938703, -6.20339975e-08, -0.923328638), Vec3(-0.0940983221, -0.479051888, -0.876698673), Vec3(-0.0922052786, -0.561066806, -0.826834679), Vec3(-0.182947397, -0.554495275, -0.816099167), Vec3(-0.186775118, -0.473437995, -0.864822268), Vec3(-0.0908876136, -0.636995971, -0.770022452), Vec3(-0.0904092789, -0.706678569, -0.706677318), Vec3(-0.179295659, -0.698145211, -0.698143959), Vec3(-0.180270001, -0.629465044, -0.760416746), Vec3(-0.266581804, -0.617473602, -0.744725227), Vec3(-0.270721018, -0.544207394, -0.798436284), Vec3(-0.265069783, -0.684359431, -0.684358299), Vec3(-0.346116394, -0.666017354, -0.6660164), Vec3(-0.348251522, -0.601838827, -0.723508179), Vec3(-0.354056299, -0.531092763, -0.774297357), Vec3(-0.276593298, -0.464807212, -0.845220387), Vec3(-0.362190187, -0.454054564, -0.818291903), Vec3(-0.442427903, -0.442428023, -0.784515977), Vec3(-0.454054445, -0.362190276, -0.818291903), Vec3(-0.431635112, -0.516484201, -0.744235218), Vec3(-0.502360761, -0.502361, -0.708671629), Vec3(-0.516484022, -0.431635231, -0.744235218), Vec3(-0.531092465, -0.354056418, -0.774297476), Vec3(-0.423737764, -0.583824396, -0.697528005), Vec3(-0.420784116, -0.644162714, -0.64416182), Vec3(-0.487256378, -0.620292604, -0.62029165), Vec3(-0.491493583, -0.565391958, -0.667615831), Vec3(-0.549794257, -0.549794495, -0.634343743), Vec3(-0.56539166, -0.491493821, -0.667615891), Vec3(-0.542915702, -0.596733212, -0.596732557), Vec3(-0.579348683, -0.579348862, -0.579348266), Vec3(-0.596732974, -0.542915821, -0.596732616), Vec3(-0.620292246, -0.487256676, -0.62029171), Vec3(-0.583824277, -0.423737943, -0.697528064), Vec3(-0.601838648, -0.348251611, -0.723508179), Vec3(-0.644162416, -0.420784414, -0.64416182), Vec3(-0.666017115, -0.346116543, -0.666016519), Vec3(-0.47905165, -0.094098337, -0.876698732), Vec3(-0.481008559, -6.20339975e-08, -0.880668104), Vec3(-0.473437756, -0.186775133, -0.864822447), Vec3(-0.554495096, -0.182947442, -0.816099226), Vec3(-0.561066449, -0.0922053382, -0.826834917), Vec3(-0.5633322, -4.65254999e-08, -0.830428064), Vec3(-0.464807004, -0.276593328, -0.845220566), Vec3(-0.544207156, -0.270721048, -0.798436403), Vec3(-0.617473423, -0.266581982, -0.744725347), Vec3(-0.629464746, -0.180270046, -0.760416925), Vec3(-0.684359193, -0.265069902, -0.684358537), Vec3(-0.698144972, -0.179295719, -0.698144197), Vec3(-0.636995614, -0.0908876583, -0.77002269), Vec3(-0.639565408, -3.10169987e-08, -0.773250341), Vec3(-0.706678212, -0.0904093161, -0.706677616), Vec3(-0.709564388, -1.55084994e-08, -0.709563732), Vec3(-0.0908876732, 0.636995435, -0.770022869), Vec3(-0.0904093459, 0.706677854, -0.706677854), Vec3(-0.0922053233, 0.56106621, -0.826835096), Vec3(-0.182947382, 0.554494679, -0.816099405), Vec3(-0.180270046, 0.629464447, -0.760417283), Vec3(-0.179295778, 0.698144555, -0.698144495), Vec3(-0.0940982923, 0.479051322, -0.876698971), Vec3(-0.0962666422, 0.391309172, -0.91899246), Vec3(-0.191126928, 0.386684328, -0.906026781), Vec3(-0.186775103, 0.473437399, -0.864822626), Vec3(-0.276593268, 0.464806646, -0.845220685), Vec3(-0.270721018, 0.544206858, -0.798436642), Vec3(-0.283191949, 0.37969777, -0.884631813), Vec3(-0.371180594, 0.371180356, -0.855216563), Vec3(-0.362190217, 0.454054058, -0.818292081), Vec3(-0.354056448, 0.531092167, -0.774297774), Vec3(-0.266581893, 0.617473006, -0.744725645), Vec3(-0.265069932, 0.684358895, -0.684358776), Vec3(-0.348251551, 0.60183847, -0.723508418), Vec3(-0.346116602, 0.666016877, -0.666016817), Vec3(-0.0984108895, 0.298469335, -0.952974677), Vec3(-0.100244321, 0.201462284, -0.977899313), Vec3(-0.199006096, 0.199005947, -0.963182151), Vec3(-0.195391372, 0.294890255, -0.939038932), Vec3(-0.101498514, 0.101498373, -0.993134201), Vec3(-0.201462463, 0.100244202, -0.977899373), Vec3(-0.298469573, 0.0984107703, -0.952974677), Vec3(-0.294890434, 0.195391223, -0.939038873), Vec3(-0.391309351, 0.0962665156, -0.9189924), Vec3(-0.386684537, 0.191126794, -0.906026661), Vec3(-0.28956458, 0.289564401, -0.916101038), Vec3(-0.379697978, 0.283191681, -0.884631813), Vec3(-0.464807004, 0.276593089, -0.845220506), Vec3(-0.454054534, 0.362190008, -0.818292081), Vec3(-0.473437726, 0.186774924, -0.864822447), Vec3(-0.554495096, 0.182947278, -0.816099226), Vec3(-0.544207275, 0.270720869, -0.798436463), Vec3(-0.531092584, 0.35405609, -0.774297595), Vec3(-0.47905165, 0.0940981954, -0.876698792), Vec3(-0.561066628, 0.0922052413, -0.826834857), Vec3(-0.636995673, 0.0908875614, -0.77002269), Vec3(-0.629464805, 0.180269927, -0.760416925), Vec3(-0.706678271, 0.090409264, -0.706677675), Vec3(-0.698144972, 0.179295644, -0.698144197), Vec3(-0.617473483, 0.266581804, -0.744725406), Vec3(-0.601838708, 0.348251373, -0.723508358), Vec3(-0.684359252, 0.265069723, -0.684358478), Vec3(-0.666017234, 0.346116334, -0.666016579), Vec3(-0.423737913, 0.583824039, -0.697528243), Vec3(-0.420784324, 0.644162238, -0.644162118), Vec3(-0.431635171, 0.516483724, -0.744235456), Vec3(-0.50236088, 0.502360582, -0.708671808), Vec3(-0.491493732, 0.565391421, -0.667616129), Vec3(-0.487256646, 0.620292068, -0.620292068), Vec3(-0.442427963, 0.442427576, -0.784516156), Vec3(-0.516484082, 0.431634843, -0.744235337), Vec3(-0.583824277, 0.423737675, -0.697528183), Vec3(-0.565391839, 0.491493493, -0.667616069), Vec3(-0.644162655, 0.420784116, -0.64416188), Vec3(-0.620292485, 0.487256318, -0.62029171), Vec3(-0.549794495, 0.549794137, -0.634344041), Vec3(-0.542915881, 0.596732795, -0.596732676), Vec3(-0.596733212, 0.542915463, -0.596732676), Vec3(-0.579348862, 0.579348385, -0.579348564), Vec3(-0.634344459, 0.549794078, -0.549793839), Vec3(-0.596733212, 0.596732736, -0.542915404), Vec3(-0.667616665, 0.491493344, -0.565391123), Vec3(-0.708672285, 0.502360404, -0.502360225), Vec3(-0.667616606, 0.565391362, -0.491493195), Vec3(-0.620292485, 0.620291948, -0.48725614), Vec3(-0.69752878, 0.423737556, -0.58382374), Vec3(-0.723509014, 0.348251373, -0.601838052), Vec3(-0.774298131, 0.35405609, -0.531091869), Vec3(-0.744235814, 0.431634814, -0.516483426), Vec3(-0.784516573, 0.442427456, -0.442427337), Vec3(-0.744235754, 0.516483605, -0.431634635), Vec3(-0.818292379, 0.362189829, -0.454053849), Vec3(-0.855216861, 0.371180147, -0.371180087), Vec3(-0.818292439, 0.454053879, -0.362189651), Vec3(-0.774298072, 0.531092048, -0.354055911), Vec3(-0.69752866, 0.58382386, -0.423737377), Vec3(-0.644162655, 0.644161999, -0.420783937), Vec3(-0.723508894, 0.601838171, -0.348251253), Vec3(-0.666017234, 0.666016579, -0.346116126), Vec3(-0.744726062, 0.266581774, -0.617472589), Vec3(-0.7604177, 0.180269912, -0.629463971), Vec3(-0.816099882, 0.182947204, -0.554494262), Vec3(-0.79843694, 0.27072078, -0.54420656), Vec3(-0.770023227, 0.0908875465, -0.636994958), Vec3(-0.773250937, -1.55084994e-08, -0.639564574), Vec3(-0.830428481, 0, -0.563331485), Vec3(-0.826835394, 0.0922051966, -0.561065733), Vec3(-0.876699209, 0.0940982103, -0.479050845), Vec3(-0.864822805, 0.186774939, -0.473437041), Vec3(-0.880668521, 0, -0.481007785), Vec3(-0.923328996, 1.55084994e-08, -0.392938018), Vec3(-0.918992698, 0.0962664858, -0.391308725), Vec3(-0.906027019, 0.191126734, -0.386683911), Vec3(-0.845220983, 0.27659297, -0.464806288), Vec3(-0.884632111, 0.283191562, -0.379697442), Vec3(-0.916101277, 0.289564282, -0.289564103), Vec3(-0.884632111, 0.379697502, -0.283191383), Vec3(-0.939039111, 0.195391104, -0.294889927), Vec3(-0.963182271, 0.199005827, -0.199005693), Vec3(-0.939039111, 0.294890046, -0.195390984), Vec3(-0.906026959, 0.38668406, -0.191126585), Vec3(-0.952974856, 0.0984107554, -0.298468947), Vec3(-0.95764488, 3.10169987e-08, -0.299741), Vec3(-0.982842922, 4.65254999e-08, -0.202340692), Vec3(-0.977899432, 0.100244232, -0.201462075), Vec3(-0.993134081, 0.101498403, -0.101498291), Vec3(-0.977899373, 0.201462194, -0.10024409), Vec3(-0.998260677, 6.20339975e-08, -0.101948567), Vec3(-1.00345218, 7.75425022e-08, 4.65254999e-08), Vec3(-0.998260498, 0.101948693, 4.65254999e-08), Vec3(-0.982842922, 0.202340797, 7.75425022e-08), Vec3(-0.952974796, 0.298469156, -0.0984106287), Vec3(-0.918992639, 0.391308784, -0.096266374), Vec3(-0.95764482, 0.299741119, 9.30509998e-08), Vec3(-0.923328936, 0.392938137, 1.08559497e-07), Vec3(-0.744726002, 0.617472827, -0.266581535), Vec3(-0.684359193, 0.684358537, -0.265069604), Vec3(-0.798436999, 0.54420656, -0.270720631), Vec3(-0.816099763, 0.554494262, -0.182947025), Vec3(-0.760417759, 0.629463911, -0.180269718), Vec3(-0.698144853, 0.698144317, -0.17929551), Vec3(-0.845220923, 0.464806408, -0.276592791), Vec3(-0.864822865, 0.47343725, -0.18677476), Vec3(-0.87669915, 0.479050964, -0.0940980539), Vec3(-0.826835334, 0.561065912, -0.0922050551), Vec3(-0.880668461, 0.481007904, 1.24067995e-07), Vec3(-0.830428481, 0.563331664, 1.24067995e-07), Vec3(-0.770023286, 0.636995018, -0.0908874273), Vec3(-0.706678212, 0.706677675, -0.090409115), Vec3(-0.773250878, 0.639564753, 1.395765e-07), Vec3(-0.709564328, 0.709563732, 1.395765e-07), Vec3(-0.770023227, -0.0908876136, -0.636995018), Vec3(-0.76041764, -0.180269986, -0.62946403), Vec3(-0.816099763, -0.182947308, -0.554494321), Vec3(-0.826835334, -0.0922052264, -0.561065853), Vec3(-0.744726002, -0.266581833, -0.617472649), Vec3(-0.723508775, -0.348251522, -0.601838171), Vec3(-0.774298012, -0.35405612, -0.531091928), Vec3(-0.79843688, -0.270720929, -0.544206619), Vec3(-0.845220923, -0.276593119, -0.464806437), Vec3(-0.864822805, -0.186774969, -0.47343713), Vec3(-0.818292439, -0.362190008, -0.454053849), Vec3(-0.855216742, -0.371180296, -0.371180087), Vec3(-0.884632051, -0.283191621, -0.379697472), Vec3(-0.906026959, -0.191126734, -0.386683941), Vec3(-0.87669915, -0.0940981954, -0.479050905), Vec3(-0.918992639, -0.0962664708, -0.391308814), Vec3(-0.697528601, -0.423737824, -0.58382374), Vec3(-0.667616427, -0.491493702, -0.565391183), Vec3(-0.708672106, -0.502360761, -0.502360225), Vec3(-0.744235694, -0.431634992, -0.516483426), Vec3(-0.63434422, -0.549794436, -0.549793839), Vec3(-0.596732795, -0.596733212, -0.542915344), Vec3(-0.620292068, -0.620292425, -0.48725605), Vec3(-0.667616308, -0.565391719, -0.491493255), Vec3(-0.697528422, -0.583824277, -0.423737407), Vec3(-0.744235635, -0.516483903, -0.431634635), Vec3(-0.644162118, -0.644162536, -0.420783907), Vec3(-0.666016698, -0.666017175, -0.346116185), Vec3(-0.723508477, -0.601838589, -0.348251313), Vec3(-0.774297833, -0.531092405, -0.354055941), Vec3(-0.784516335, -0.442427784, -0.442427397), Vec3(-0.81829232, -0.454054266, -0.36218977), Vec3(-0.845220804, -0.464806765, -0.27659297), Vec3(-0.884631991, -0.37969777, -0.283191562), Vec3(-0.798436642, -0.544206977, -0.27072072), Vec3(-0.816099405, -0.554494679, -0.182947218), Vec3(-0.864822626, -0.473437458, -0.18677488), Vec3(-0.90602684, -0.386684269, -0.191126719), Vec3(-0.744725585, -0.617473245, -0.266581684), Vec3(-0.684358597, -0.684359193, -0.265069634), Vec3(-0.698144317, -0.698145032, -0.179295644), Vec3(-0.760417163, -0.629464567, -0.180269927), Vec3(-0.77002275, -0.636995494, -0.0908876285), Vec3(-0.826835036, -0.561066329, -0.0922052413), Vec3(-0.706677675, -0.706678212, -0.090409331), Vec3(-0.709563851, -0.709564209, -1.08559497e-07), Vec3(-0.773250461, -0.639565289, -7.75425022e-08), Vec3(-0.830428123, -0.563331962, -6.20339975e-08), Vec3(-0.876698911, -0.479051381, -0.0940982252), Vec3(-0.918992519, -0.391309053, -0.0962665007), Vec3(-0.880668283, -0.481008321, -3.10169987e-08), Vec3(-0.923328876, -0.392938346, -1.55084994e-08), Vec3(-0.952974796, -0.0984107032, -0.298469037), Vec3(-0.939038932, -0.195391148, -0.294890046), Vec3(-0.963182271, -0.199005872, -0.199005798), Vec3(-0.977899373, -0.100244164, -0.20146212), Vec3(-0.916101158, -0.289564282, -0.289564222), Vec3(-0.939038992, -0.294890165, -0.195391074), Vec3(-0.952974796, -0.298469216, -0.0984107256), Vec3(-0.977899373, -0.201462135, -0.10024415), Vec3(-0.95764488, -0.299741179, 0), Vec3(-0.982842922, -0.202340752, 0), Vec3(-0.993134081, -0.101498291, -0.101498306), Vec3(-0.998260677, -0.101948567, 1.55084994e-08), Vec3(-0.993134201, -0.101498291, 0.101498403), Vec3(-0.998260677, 9.30509998e-08, 0.101948664), Vec3(-0.977899373, -0.201462135, 0.100244217), Vec3(-0.963182211, -0.199005783, 0.199005857), Vec3(-0.977899373, -0.10024409, 0.201462224), Vec3(-0.982842982, 1.08559497e-07, 0.202340797), Vec3(-0.952974737, -0.298469186, 0.0984107554), Vec3(-0.918992519, -0.391309083, 0.0962664858), Vec3(-0.906026781, -0.386684299, 0.191126749), Vec3(-0.939038992, -0.294890136, 0.195391178), Vec3(-0.916101158, -0.289564282, 0.289564312), Vec3(-0.939038932, -0.195391044, 0.294890165), Vec3(-0.884631872, -0.37969777, 0.283191711), Vec3(-0.855216682, -0.371180236, 0.371180415), Vec3(-0.884631872, -0.283191592, 0.379697859), Vec3(-0.906026781, -0.19112666, 0.386684328), Vec3(-0.952974737, -0.0984106287, 0.298469216), Vec3(-0.95764488, 1.24067995e-07, 0.299741238), Vec3(-0.918992519, -0.0962663591, 0.391309083), Vec3(-0.923328817, 1.395765e-07, 0.392938435), Vec3(-0.876698971, -0.479051322, 0.0940981656), Vec3(-0.826835036, -0.56106627, 0.0922051519), Vec3(-0.816099524, -0.554494739, 0.182947204), Vec3(-0.864822686, -0.473437428, 0.186774909), Vec3(-0.77002281, -0.636995494, 0.090887472), Vec3(-0.706677675, -0.706678212, 0.0904091299), Vec3(-0.698144436, -0.698144853, 0.179295495), Vec3(-0.760417283, -0.629464507, 0.180269793), Vec3(-0.744725645, -0.617473185, 0.266581744), Vec3(-0.798436642, -0.544206977, 0.27072078), Vec3(-0.684358776, -0.684359133, 0.265069634), Vec3(-0.666016638, -0.666017115, 0.346116304), Vec3(-0.723508418, -0.601838589, 0.348251373), Vec3(-0.774297714, -0.531092346, 0.35405609), Vec3(-0.845220685, -0.464806706, 0.276593029), Vec3(-0.81829226, -0.454054207, 0.362190008), Vec3(-0.784516215, -0.442427605, 0.442427725), Vec3(-0.81829226, -0.362189889, 0.454054296), Vec3(-0.744235575, -0.516483724, 0.431634963), Vec3(-0.708671808, -0.502360642, 0.502360761), Vec3(-0.744235456, -0.431634873, 0.516483903), Vec3(-0.774297774, -0.35405606, 0.531092405), Vec3(-0.697528303, -0.583824098, 0.423737675), Vec3(-0.644162118, -0.644162416, 0.420784175), Vec3(-0.620291948, -0.620292127, 0.487256467), Vec3(-0.667616189, -0.5653916, 0.491493553), Vec3(-0.634344101, -0.549794197, 0.549794137), Vec3(-0.667616189, -0.491493493, 0.5653916), Vec3(-0.596732616, -0.596733034, 0.542915761), Vec3(-0.579348385, -0.579348624, 0.579348624), Vec3(-0.596732676, -0.542915702, 0.596733093), Vec3(-0.620292008, -0.487256348, 0.620292306), Vec3(-0.697528243, -0.423737615, 0.583824217), Vec3(-0.723508418, -0.348251343, 0.601838648), Vec3(-0.644162118, -0.420784056, 0.644162476), Vec3(-0.666016698, -0.346116155, 0.666017175), Vec3(-0.876698911, -0.094098039, 0.479051352), Vec3(-0.880668223, 1.55085004e-07, 0.481008351), Vec3(-0.864822567, -0.186774775, 0.473437607), Vec3(-0.816099465, -0.182947099, 0.554494858), Vec3(-0.826835036, -0.0922050402, 0.561066389), Vec3(-0.830428123, 1.70593495e-07, 0.563332021), Vec3(-0.845220745, -0.276593029, 0.464806795), Vec3(-0.798436642, -0.27072069, 0.544207036), Vec3(-0.744725585, -0.266581565, 0.617473304), Vec3(-0.760417163, -0.180269718, 0.629464626), Vec3(-0.684358597, -0.265069515, 0.684359133), Vec3(-0.698144376, -0.179295376, 0.698144853), Vec3(-0.77002275, -0.0908873752, 0.636995614), Vec3(-0.773250341, 1.70593495e-07, 0.639565289), Vec3(-0.706677675, -0.0904090479, 0.706678271), Vec3(-0.709563732, 1.86102e-07, 0.709564328), Vec3(-0.770023167, 0.636995077, 0.0908877328), Vec3(-0.706678092, 0.706677675, 0.0904094502), Vec3(-0.826835155, 0.561066031, 0.0922053382), Vec3(-0.816099644, 0.5544945, 0.182947397), Vec3(-0.760417402, 0.629464149, 0.180270121), Vec3(-0.698144794, 0.698144376, 0.179295853), Vec3(-0.87669909, 0.479050964, 0.0940983221), Vec3(-0.918992579, 0.391308874, 0.0962665975), Vec3(-0.90602684, 0.38668409, 0.191126853), Vec3(-0.864822686, 0.47343722, 0.186775044), Vec3(-0.845220864, 0.464806467, 0.276593238), Vec3(-0.798436761, 0.544206679, 0.270721018), Vec3(-0.884631932, 0.379697651, 0.283191741), Vec3(-0.855216682, 0.371180207, 0.371180356), Vec3(-0.818292379, 0.454053909, 0.362190098), Vec3(-0.774297893, 0.531091988, 0.354056239), Vec3(-0.744725823, 0.617472827, 0.266581953), Vec3(-0.684359014, 0.684358597, 0.265069991), Vec3(-0.723508656, 0.601838231, 0.3482517), Vec3(-0.666017056, 0.666016579, 0.346116662), Vec3(-0.952974737, 0.298469186, 0.0984108299), Vec3(-0.977899432, 0.201462224, 0.100244276), Vec3(-0.963182211, 0.199005857, 0.199005917), Vec3(-0.939038932, 0.294890046, 0.195391238), Vec3(-0.993134081, 0.101498418, 0.101498403), Vec3(-0.977899313, 0.100244276, 0.201462194), Vec3(-0.952974737, 0.0984108597, 0.298469245), Vec3(-0.939038992, 0.195391223, 0.294890195), Vec3(-0.918992519, 0.0962666422, 0.391309142), Vec3(-0.906026781, 0.191126853, 0.386684299), Vec3(-0.916101098, 0.289564282, 0.289564341), Vec3(-0.884631872, 0.283191651, 0.379697859), Vec3(-0.845220685, 0.276593149, 0.464806825), Vec3(-0.81829226, 0.362189859, 0.454054326), Vec3(-0.864822567, 0.186775029, 0.473437518), Vec3(-0.816099346, 0.182947308, 0.554494739), Vec3(-0.798436522, 0.27072084, 0.544207096), Vec3(-0.774297714, 0.354056001, 0.531092465), Vec3(-0.876698911, 0.094098337, 0.479051322), Vec3(-0.826834977, 0.0922053531, 0.561066389), Vec3(-0.77002275, 0.090887703, 0.636995554), Vec3(-0.760417104, 0.180270001, 0.629464626), Vec3(-0.706677675, 0.0904094055, 0.706678152), Vec3(-0.698144257, 0.179295689, 0.698144853), Vec3(-0.744725525, 0.266581714, 0.617473304), Vec3(-0.723508358, 0.348251343, 0.601838708), Vec3(-0.684358597, 0.265069634, 0.684359252), Vec3(-0.666016579, 0.346116185, 0.666017234), Vec3(-0.697528541, 0.58382374, 0.423737973), Vec3(-0.644162297, 0.64416188, 0.420784503), Vec3(-0.744235635, 0.516483545, 0.431635082), Vec3(-0.708672047, 0.502360344, 0.50236088), Vec3(-0.667616308, 0.565391183, 0.491493851), Vec3(-0.620292127, 0.62029165, 0.487256825), Vec3(-0.784516335, 0.442427427, 0.442427814), Vec3(-0.744235456, 0.431634724, 0.516484022), Vec3(-0.697528243, 0.423737466, 0.583824277), Vec3(-0.667616189, 0.491493165, 0.565391958), Vec3(-0.644161999, 0.420783937, 0.644162595), Vec3(-0.620291948, 0.48725608, 0.620292485), Vec3(-0.63434422, 0.54979372, 0.549794555), Vec3(-0.596732914, 0.596732557, 0.542916119), Vec3(-0.596732914, 0.542915344, 0.596733272), Vec3(-0.579348564, 0.579348207, 0.579348922), Vec3(0.549794137, 0.634343863, 0.549794555), Vec3(0.542915463, 0.596732557, 0.596733272), Vec3(0.565391481, 0.667615891, 0.49149394), Vec3(0.502360642, 0.708671629, 0.502361059), Vec3(0.491493434, 0.667615891, 0.565392017), Vec3(0.487256318, 0.62029165, 0.620292604), Vec3(0.583824158, 0.697528124, 0.423738003), Vec3(0.601838648, 0.723508239, 0.34825179), Vec3(0.531092405, 0.774297535, 0.354056418), Vec3(0.516483903, 0.744235277, 0.43163532), Vec3(0.442427725, 0.784516096, 0.442428052), Vec3(0.431634933, 0.744235218, 0.516484261), Vec3(0.454054356, 0.818291903, 0.362190306), Vec3(0.371180445, 0.855216384, 0.371180713), Vec3(0.362190068, 0.818291903, 0.454054624), Vec3(0.35405609, 0.774297416, 0.531092823), Vec3(0.423737526, 0.697528064, 0.583824575), Vec3(0.420784086, 0.644161761, 0.644162774), Vec3(0.348251373, 0.72350812, 0.601839006), Vec3(0.346116155, 0.6660164, 0.666017413), Vec3(0.617473304, 0.744725406, 0.266582012), Vec3(0.629464626, 0.760416985, 0.180270106), Vec3(0.554494798, 0.816099405, 0.182947487), Vec3(0.544207156, 0.798436463, 0.270721167), Vec3(0.636995614, 0.77002275, 0.0908877179), Vec3(0.639565349, 0.773250401, 1.08559497e-07), Vec3(0.56333214, 0.830428064, 1.24067995e-07), Vec3(0.561066329, 0.826834917, 0.0922053978), Vec3(0.47905159, 0.876698792, 0.0940984264), Vec3(0.473437756, 0.864822447, 0.186775222), Vec3(0.4810085, 0.880668163, 1.395765e-07), Vec3(0.392938614, 0.923328698, 1.55085004e-07), Vec3(0.391309291, 0.9189924, 0.0962667614), Vec3(0.386684448, 0.906026721, 0.191127092), Vec3(0.464806885, 0.845220506, 0.276593387), Vec3(0.379697919, 0.884631693, 0.283192039), Vec3(0.28956452, 0.916100979, 0.289564759), Vec3(0.2831918, 0.884631693, 0.379698217), Vec3(0.294890314, 0.939038873, 0.195391491), Vec3(0.199006006, 0.963182092, 0.199006304), Vec3(0.195391282, 0.939038813, 0.294890642), Vec3(0.191126853, 0.906026602, 0.386684746), Vec3(0.298469424, 0.952974677, 0.0984110162), Vec3(0.299741387, 0.957644761, 1.55085004e-07), Vec3(0.202340886, 0.982842922, 1.70593495e-07), Vec3(0.201462358, 0.977899313, 0.100244492), Vec3(0.101498447, 0.993134081, 0.101498663), Vec3(0.100244276, 0.977899313, 0.201462612), Vec3(0.101948708, 0.998260498, 1.70593495e-07), Vec3(-1.55084994e-08, 1.00345218, 1.70593495e-07), Vec3(-3.10169987e-08, 0.998260677, 0.101948909), Vec3(-3.10169987e-08, 0.982842863, 0.202341184), Vec3(0.0984108001, 0.952974617, 0.298469812), Vec3(0.0962665305, 0.918992221, 0.391309649), Vec3(-3.10169987e-08, 0.957644641, 0.299741715), Vec3(-3.10169987e-08, 0.923328578, 0.392938942), Vec3(0.266581774, 0.744725287, 0.617473543), Vec3(0.265069634, 0.684358358, 0.684359431), Vec3(0.270720899, 0.798436344, 0.544207394), Vec3(0.182947263, 0.816099226, 0.554495215), Vec3(0.180269867, 0.760416925, 0.629464984), Vec3(0.17929554, 0.698143959, 0.698145211), Vec3(0.276593149, 0.845220387, 0.464807242), Vec3(0.186774969, 0.864822328, 0.473437965), Vec3(0.0940982103, 0.876698673, 0.479051888), Vec3(0.0922052264, 0.826834679, 0.561066866), Vec3(-3.10169987e-08, 0.880667984, 0.481008857), Vec3(-3.10169987e-08, 0.830427825, 0.563332498), Vec3(0.0908875465, 0.770022511, 0.636996031), Vec3(0.0904091895, 0.706677258, 0.706678569), Vec3(-3.10169987e-08, 0.773250103, 0.639565706), Vec3(-3.10169987e-08, 0.709563375, 0.709564686), Vec3(0.636995554, 0.77002275, -0.0908874869), Vec3(0.629464626, 0.760417104, -0.180269793), Vec3(0.554494917, 0.816099405, -0.182947189), Vec3(0.561066508, 0.826834917, -0.0922051072), Vec3(0.617473304, 0.744725525, -0.266581684), Vec3(0.601838648, 0.723508298, -0.348251283), Vec3(0.531092405, 0.774297714, -0.354056001), Vec3(0.544207156, 0.798436522, -0.27072072), Vec3(0.464806885, 0.845220685, -0.276593029), Vec3(0.473437697, 0.864822447, -0.18677485), Vec3(0.454054385, 0.818292201, -0.362189859), Vec3(0.371180534, 0.855216563, -0.371180326), Vec3(0.379697949, 0.884631813, -0.283191651), Vec3(0.386684448, 0.906026721, -0.191126689), Vec3(0.47905153, 0.876698792, -0.094098106), Vec3(0.391309321, 0.9189924, -0.0962664261), Vec3(0.583824277, 0.697528243, -0.423737496), Vec3(0.565391719, 0.667616129, -0.491493344), Vec3(0.502360821, 0.708671987, -0.502360463), Vec3(0.516484022, 0.744235456, -0.431634754), Vec3(0.549794316, 0.634344161, -0.549793899), Vec3(0.491493672, 0.667616248, -0.565391362), Vec3(0.423737824, 0.697528303, -0.583823979), Vec3(0.431635112, 0.744235456, -0.516483665), Vec3(0.348251551, 0.723508537, -0.60183847), Vec3(0.354056329, 0.774297655, -0.531092227), Vec3(0.442427874, 0.784516156, -0.442427576), Vec3(0.362190068, 0.818292201, -0.454054058), Vec3(0.276593238, 0.845220685, -0.464806616), Vec3(0.28319186, 0.884631872, -0.37969774), Vec3(0.270720959, 0.798436642, -0.544206917), Vec3(0.182947278, 0.816099524, -0.55449456), Vec3(0.186775029, 0.864822745, -0.473437399), Vec3(0.191126883, 0.906026781, -0.386684269), Vec3(0.266581893, 0.744725704, -0.617473006), Vec3(0.180269986, 0.760417342, -0.629464388), Vec3(0.0908876136, 0.770022929, -0.636995375), Vec3(0.0922052562, 0.826835155, -0.56106621), Vec3(-3.10169987e-08, 0.77325058, -0.639565051), Vec3(-3.10169987e-08, 0.830428302, -0.563331723), Vec3(0.094098255, 0.876698971, -0.479051292), Vec3(0.0962665454, 0.918992519, -0.391309053), Vec3(-3.10169987e-08, 0.880668342, -0.481008142), Vec3(-3.10169987e-08, 0.923328876, -0.392938346), Vec3(0.298469454, 0.952974737, -0.0984106734), Vec3(0.294890255, 0.939038873, -0.195391074), Vec3(0.199006021, 0.963182211, -0.199005842), Vec3(0.201462358, 0.977899373, -0.100244105), Vec3(0.28956458, 0.916101098, -0.289564341), Vec3(0.195391282, 0.939038992, -0.294890165), Vec3(0.0984108299, 0.952974737, -0.298469216), Vec3(0.100244246, 0.977899373, -0.201462194), Vec3(-3.10169987e-08, 0.95764488, -0.299741209), Vec3(-3.10169987e-08, 0.982842863, -0.202340782), Vec3(0.101498432, 0.993134201, -0.101498276), Vec3(-3.10169987e-08, 0.998260677, -0.101948552), Vec3(-0.101498492, 0.993134201, -0.101498291), Vec3(-0.101948783, 0.998260498, 1.70593495e-07), Vec3(-0.100244336, 0.977899373, -0.201462209), Vec3(-0.199006096, 0.963182151, -0.199005842), Vec3(-0.201462403, 0.977899373, -0.10024409), Vec3(-0.202340961, 0.982842922, 1.70593495e-07), Vec3(-0.0984108895, 0.952974737, -0.298469216), Vec3(-0.0962666273, 0.918992519, -0.391309053), Vec3(-0.191126958, 0.906026781, -0.386684239), Vec3(-0.195391357, 0.939038873, -0.294890136), Vec3(-0.28956461, 0.916101098, -0.289564341), Vec3(-0.294890463, 0.939038873, -0.195391133), Vec3(-0.283191919, 0.884631872, -0.37969777), Vec3(-0.371180505, 0.855216622, -0.371180207), Vec3(-0.379698038, 0.884631813, -0.283191681), Vec3(-0.386684537, 0.906026721, -0.191126704), Vec3(-0.298469603, 0.952974677, -0.0984106734), Vec3(-0.299741536, 0.957644761, 1.70593495e-07), Vec3(-0.39130941, 0.918992341, -0.0962664112), Vec3(-0.392938703, 0.923328698, 1.70593495e-07), Vec3(-0.0940983221, 0.876698971, -0.479051322), Vec3(-0.0922053382, 0.826835155, -0.561066091), Vec3(-0.182947397, 0.816099524, -0.554494679), Vec3(-0.186775133, 0.864822626, -0.473437369), Vec3(-0.0908876732, 0.770022929, -0.636995375), Vec3(-0.180270076, 0.760417342, -0.629464328), Vec3(-0.266581953, 0.744725764, -0.617472947), Vec3(-0.270721048, 0.798436582, -0.544206858), Vec3(-0.348251611, 0.723508596, -0.601838291), Vec3(-0.354056358, 0.774297714, -0.531092167), Vec3(-0.276593298, 0.845220685, -0.464806646), Vec3(-0.362190217, 0.818292081, -0.454054058), Vec3(-0.442427903, 0.784516156, -0.442427546), Vec3(-0.454054505, 0.818292141, -0.362189889), Vec3(-0.431635141, 0.744235456, -0.516483724), Vec3(-0.50236088, 0.708671808, -0.502360463), Vec3(-0.516484141, 0.744235337, -0.431634814), Vec3(-0.531092525, 0.774297595, -0.35405609), Vec3(-0.423737943, 0.697528303, -0.58382386), Vec3(-0.491493732, 0.667616189, -0.565391302), Vec3(-0.549794495, 0.634344101, -0.549793899), Vec3(-0.565391839, 0.667616189, -0.491493315), Vec3(-0.583824337, 0.697528243, -0.423737556), Vec3(-0.601838708, 0.723508358, -0.348251373), Vec3(-0.47905159, 0.876698792, -0.094098106), Vec3(-0.481008559, 0.880668104, 1.70593495e-07), Vec3(-0.473437697, 0.864822447, -0.186774865), Vec3(-0.554494977, 0.816099286, -0.182947159), Vec3(-0.561066449, 0.826834917, -0.09220507), Vec3(-0.5633322, 0.830428064, 1.55085004e-07), Vec3(-0.464806914, 0.845220625, -0.276593029), Vec3(-0.544207156, 0.798436522, -0.27072078), Vec3(-0.617473423, 0.744725466, -0.266581714), Vec3(-0.629464805, 0.760416925, -0.180269793), Vec3(-0.636995614, 0.77002275, -0.0908874571), Vec3(-0.639565408, 0.773250341, 1.55085004e-07), Vec3(-0.0908876136, 0.770022452, 0.636996031), Vec3(-0.090409264, 0.706677258, 0.706678569), Vec3(-0.0922052562, 0.826834619, 0.561066926), Vec3(-0.182947308, 0.816099048, 0.554495335), Vec3(-0.180269942, 0.760416746, 0.629465044), Vec3(-0.179295629, 0.698143959, 0.698145151), Vec3(-0.0940982699, 0.876698613, 0.479051888), Vec3(-0.0962666124, 0.918992281, 0.391309649), Vec3(-0.191126883, 0.906026542, 0.386684775), Vec3(-0.186775059, 0.864822268, 0.473438054), Vec3(-0.276593179, 0.845220327, 0.464807272), Vec3(-0.270720959, 0.798436284, 0.544207513), Vec3(-0.28319186, 0.884631753, 0.379698277), Vec3(-0.371180475, 0.855216384, 0.371180713), Vec3(-0.362190008, 0.818291903, 0.454054713), Vec3(-0.35405615, 0.774297357, 0.531092942), Vec3(-0.266581804, 0.744725168, 0.617473722), Vec3(-0.265069723, 0.684358299, 0.684359431), Vec3(-0.348251402, 0.72350812, 0.601839006), Vec3(-0.346116304, 0.666016281, 0.666017473), Vec3(-0.0984108895, 0.952974558, 0.298469722), Vec3(-0.100244306, 0.977899313, 0.201462612), Vec3(-0.199006096, 0.963182092, 0.199006259), Vec3(-0.195391372, 0.939038754, 0.294890672), Vec3(-0.101498477, 0.993134081, 0.101498663), Vec3(-0.201462388, 0.977899313, 0.100244492), Vec3(-0.298469514, 0.952974617, 0.0984110162), Vec3(-0.294890463, 0.939038813, 0.195391536), Vec3(-0.391309351, 0.918992341, 0.0962667614), Vec3(-0.386684507, 0.906026661, 0.191127077), Vec3(-0.28956455, 0.916100979, 0.289564729), Vec3(-0.379697949, 0.884631693, 0.283192039), Vec3(-0.464806855, 0.845220506, 0.276593417), Vec3(-0.454054326, 0.818291903, 0.362190306), Vec3(-0.473437756, 0.864822447, 0.186775237), Vec3(-0.554494917, 0.816099226, 0.182947487), Vec3(-0.544207096, 0.798436463, 0.270721197), Vec3(-0.531092405, 0.774297476, 0.354056507), Vec3(-0.47905156, 0.876698792, 0.0940984413), Vec3(-0.561066449, 0.826834917, 0.0922054276), Vec3(-0.636995614, 0.77002269, 0.090887785), Vec3(-0.629464686, 0.760416925, 0.18027015), Vec3(-0.617473245, 0.744725406, 0.266581982), Vec3(-0.601838589, 0.723508239, 0.348251849), Vec3(-0.423737615, 0.697528005, 0.583824575), Vec3(-0.420784116, 0.644161701, 0.644162774), Vec3(-0.431634933, 0.744235218, 0.51648432), Vec3(-0.502360642, 0.708671629, 0.502361119), Vec3(-0.491493464, 0.667615891, 0.565391958), Vec3(-0.487256259, 0.62029165, 0.620292664), Vec3(-0.442427725, 0.784515977, 0.442428142), Vec3(-0.516483903, 0.744235277, 0.43163532), Vec3(-0.583824158, 0.697528124, 0.423737973), Vec3(-0.56539166, 0.667615891, 0.491493911), Vec3(-0.549794197, 0.634343743, 0.549794614), Vec3(-0.542915702, 0.596732557, 0.596733272), Vec3(0.549794018, -0.549794137, 0.634344399), Vec3(0.542915404, -0.596732914, 0.596733034), Vec3(0.565391362, -0.491493374, 0.667616487), Vec3(0.502360463, -0.502360523, 0.708672106), Vec3(0.491493315, -0.565391421, 0.667616487), Vec3(0.487256259, -0.620292127, 0.620292127), Vec3(0.583823919, -0.423737466, 0.69752866), Vec3(0.601838231, -0.348251224, 0.723508775), Vec3(0.531092048, -0.354055941, 0.774298072), Vec3(0.516483545, -0.431634665, 0.744235814), Vec3(0.442427367, -0.442427367, 0.784516573), Vec3(0.431634724, -0.516483545, 0.744235754), Vec3(0.454053938, -0.362189651, 0.818292499), Vec3(0.371180117, -0.371180058, 0.85521692), Vec3(0.36218977, -0.454053819, 0.818292439), Vec3(0.354055941, -0.531091988, 0.774298072), Vec3(0.423737526, -0.583823919, 0.69752866), Vec3(0.420784026, -0.644162297, 0.644162297), Vec3(0.348251343, -0.601838291, 0.723508775), Vec3(0.346116185, -0.666016817, 0.666017115), Vec3(0.617472887, -0.266581506, 0.744726002), Vec3(0.62946409, -0.180269659, 0.76041764), Vec3(0.554494262, -0.18294695, 0.816099882), Vec3(0.544206619, -0.270720541, 0.79843694), Vec3(0.636995018, -0.0908873007, 0.770023227), Vec3(0.639564574, 2.32627499e-07, 0.773250937), Vec3(0.563331485, 2.4813599e-07, 0.830428481), Vec3(0.561065793, -0.092204906, 0.826835394), Vec3(0.479050845, -0.0940978825, 0.876699269), Vec3(0.47343713, -0.186774597, 0.864822865), Vec3(0.481007755, 2.4813599e-07, 0.880668581), Vec3(0.392937869, 2.4813599e-07, 0.923329055), Vec3(0.391308635, -0.0962661728, 0.918992758), Vec3(0.386683911, -0.191126406, 0.906027079), Vec3(0.464806408, -0.276592761, 0.845221043), Vec3(0.379697472, -0.283191293, 0.88463223), Vec3(0.289564103, -0.289563954, 0.916101336), Vec3(0.283191383, -0.379697323, 0.88463223), Vec3(0.294889867, -0.195390731, 0.939039171), Vec3(0.199005693, -0.199005499, 0.96318233), Vec3(0.195390999, -0.294889718, 0.939039111), Vec3(0.1911266, -0.386683851, 0.906027079), Vec3(0.298468858, -0.0984104276, 0.952974916), Vec3(0.299740821, 2.4813599e-07, 0.957644999), Vec3(0.202340484, 2.4813599e-07, 0.982842982), Vec3(0.201461986, -0.100243859, 0.977899432), Vec3(0.101498231, -0.101498, 0.993134201), Vec3(0.10024406, -0.201461762, 0.977899492), Vec3(0.101948492, 2.4813599e-07, 0.998260677), Vec3(-3.10169987e-08, 2.4813599e-07, 1.00345218), Vec3(-3.10169987e-08, -0.101948276, 0.998260677), Vec3(-1.55084994e-08, -0.202340335, 0.982843041), Vec3(0.0984106436, -0.298468739, 0.952974975), Vec3(0.0962664112, -0.391308665, 0.918992698), Vec3(-1.55084994e-08, -0.299740791, 0.957645059), Vec3(-3.10169987e-08, -0.392937809, 0.923329055), Vec3(0.266581625, -0.617472827, 0.744725943), Vec3(0.265069664, -0.684358835, 0.684358895), Vec3(0.27072069, -0.544206619, 0.79843694), Vec3(0.182947144, -0.5544945, 0.816099703), Vec3(0.180269808, -0.629464149, 0.760417521), Vec3(0.179295525, -0.698144555, 0.698144555), Vec3(0.27659288, -0.464806318, 0.845221102), Vec3(0.186774775, -0.473437071, 0.864822865), Vec3(0.094098106, -0.479050905, 0.876699209), Vec3(0.092205137, -0.561066091, 0.826835155), Vec3(-3.10169987e-08, -0.481007785, 0.880668521), Vec3(-3.10169987e-08, -0.563331604, 0.830428481), Vec3(0.0908875018, -0.636995137, 0.770023108), Vec3(0.0904091746, -0.706677854, 0.706677973), Vec3(-1.55084994e-08, -0.639564872, 0.773250699), Vec3(-3.10169987e-08, -0.70956403, 0.70956403), Vec3(0.636994958, 0.0908877626, 0.770023286), Vec3(0.62946403, 0.180269986, 0.76041764), Vec3(0.554494143, 0.182947278, 0.816099823), Vec3(0.561065674, 0.0922053829, 0.826835394), Vec3(0.617472649, 0.266581774, 0.744726002), Vec3(0.601838052, 0.348251313, 0.723508894), Vec3(0.531091869, 0.354055971, 0.774298191), Vec3(0.54420644, 0.27072084, 0.798436999), Vec3(0.464806139, 0.276593, 0.845221102), Vec3(0.473436922, 0.186774969, 0.864822924), Vec3(0.45405373, 0.36218971, 0.818292618), Vec3(0.371179938, 0.371180087, 0.85521698), Vec3(0.379697233, 0.283191502, 0.88463217), Vec3(0.386683762, 0.191126779, 0.906027019), Vec3(0.479050756, 0.0940983668, 0.876699209), Vec3(0.391308576, 0.0962666422, 0.918992698), Vec3(0.583823681, 0.423737437, 0.697528899), Vec3(0.565391183, 0.491493225, 0.667616725), Vec3(0.502360225, 0.502360284, 0.708672464), Vec3(0.516483307, 0.431634635, 0.744236052), Vec3(0.549793839, 0.549793899, 0.634344637), Vec3(0.491493225, 0.565391064, 0.667616785), Vec3(0.423737466, 0.583823562, 0.697529018), Vec3(0.431634605, 0.516483307, 0.744236052), Vec3(0.348251224, 0.601837933, 0.723509133), Vec3(0.354055882, 0.531091809, 0.774298251), Vec3(0.442427337, 0.442427367, 0.784516633), Vec3(0.362189621, 0.45405376, 0.818292677), Vec3(0.276592851, 0.464806199, 0.845221162), Vec3(0.283191323, 0.379697382, 0.88463217), Vec3(0.270720661, 0.544206321, 0.798437119), Vec3(0.18294704, 0.554494083, 0.816100061), Vec3(0.186774716, 0.473436892, 0.864822984), Vec3(0.191126511, 0.386683851, 0.906027079), Vec3(0.266581565, 0.617472529, 0.744726241), Vec3(0.180269763, 0.629463851, 0.760417819), Vec3(0.0908875018, 0.63699466, 0.770023525), Vec3(0.0922051221, 0.561065555, 0.826835513), Vec3(-3.10169987e-08, 0.639564395, 0.773251176), Vec3(-3.10169987e-08, 0.563331187, 0.83042872), Vec3(0.0940980688, 0.479050845, 0.876699269), Vec3(0.0962663442, 0.391308635, 0.918992698), Vec3(-3.10169987e-08, 0.481007755, 0.880668581), Vec3(-3.10169987e-08, 0.392937899, 0.923328996), Vec3(0.298468769, 0.0984108895, 0.952974856), Vec3(0.294889838, 0.195391133, 0.939039111), Vec3(0.199005604, 0.199005857, 0.963182271), Vec3(0.201461926, 0.100244306, 0.977899432), Vec3(0.289563894, 0.289564192, 0.916101277), Vec3(0.195390895, 0.294890016, 0.939039111), Vec3(0.0984105989, 0.298468977, 0.952974856), Vec3(0.100244015, 0.20146215, 0.977899432), Vec3(-3.10169987e-08, 0.29974097, 0.95764488), Vec3(-3.10169987e-08, 0.202340722, 0.982842922), Vec3(0.101498187, 0.101498462, 0.993134081), Vec3(-3.10169987e-08, 0.101948753, 0.998260498), Vec3(-0.101498291, 0.101498462, 0.993134201), Vec3(-0.101948567, 2.4813599e-07, 0.998260677), Vec3(-0.100244105, 0.201462179, 0.977899373), Vec3(-0.199005693, 0.199005842, 0.963182271), Vec3(-0.201461971, 0.100244291, 0.977899373), Vec3(-0.202340558, 2.4813599e-07, 0.982842982), Vec3(-0.0984106734, 0.298469037, 0.952974796), Vec3(-0.096266441, 0.391308725, 0.918992698), Vec3(-0.1911266, 0.386683881, 0.906027019), Vec3(-0.195390984, 0.294890016, 0.939038992), Vec3(-0.289564043, 0.289564103, 0.916101217), Vec3(-0.294889867, 0.195391104, 0.939039111), Vec3(-0.283191413, 0.379697472, 0.884632111), Vec3(-0.371180028, 0.371180028, 0.85521692), Vec3(-0.379697472, 0.283191502, 0.88463217), Vec3(-0.386683881, 0.191126764, 0.906027019), Vec3(-0.298468888, 0.0984108895, 0.952974856), Vec3(-0.29974094, 2.32627499e-07, 0.95764488), Vec3(-0.391308665, 0.0962666571, 0.918992698), Vec3(-0.392937928, 2.32627499e-07, 0.923328996), Vec3(-0.0940981358, 0.479050696, 0.876699269), Vec3(-0.0922051817, 0.561065555, 0.826835513), Vec3(-0.182947114, 0.554494083, 0.816099942), Vec3(-0.18677476, 0.473436892, 0.864822984), Vec3(-0.0908875763, 0.63699466, 0.770023525), Vec3(-0.180269867, 0.629463792, 0.760417819), Vec3(-0.266581625, 0.61747241, 0.744726241), Vec3(-0.270720661, 0.544206321, 0.798437119), Vec3(-0.348251343, 0.601837814, 0.723509133), Vec3(-0.354055971, 0.53109169, 0.774298251), Vec3(-0.27659288, 0.464806199, 0.845221162), Vec3(-0.36218971, 0.45405376, 0.818292499), Vec3(-0.442427367, 0.442427367, 0.784516633), Vec3(-0.454053819, 0.36218971, 0.818292499), Vec3(-0.431634635, 0.516483366, 0.744235992), Vec3(-0.502360404, 0.502360225, 0.708672285), Vec3(-0.516483486, 0.431634665, 0.744235873), Vec3(-0.531091928, 0.354055911, 0.774298131), Vec3(-0.423737496, 0.583823442, 0.697529018), Vec3(-0.491493374, 0.565391123, 0.667616665), Vec3(-0.549794078, 0.54979372, 0.634344637), Vec3(-0.565391421, 0.491493136, 0.667616665), Vec3(-0.58382374, 0.423737377, 0.697528839), Vec3(-0.601838171, 0.348251283, 0.723508835), Vec3(-0.479050815, 0.0940983519, 0.876699269), Vec3(-0.481007755, 2.17118995e-07, 0.880668581), Vec3(-0.473437011, 0.186774969, 0.864822865), Vec3(-0.554494262, 0.182947293, 0.816099882), Vec3(-0.561065674, 0.092205368, 0.826835394), Vec3(-0.563331485, 2.01610504e-07, 0.830428481), Vec3(-0.464806318, 0.276593, 0.845221043), Vec3(-0.54420656, 0.27072075, 0.79843688), Vec3(-0.617472708, 0.266581595, 0.744726002), Vec3(-0.62946403, 0.180269971, 0.76041764), Vec3(-0.636994958, 0.090887703, 0.770023227), Vec3(-0.639564753, 2.01610504e-07, 0.773250937), Vec3(-0.0908875465, -0.636995137, 0.770023167), Vec3(-0.0904092193, -0.706677854, 0.706677914), Vec3(-0.0922052115, -0.561065853, 0.826835275), Vec3(-0.182947204, -0.554494381, 0.816099763), Vec3(-0.180269867, -0.629464209, 0.760417461), Vec3(-0.179295614, -0.698144555, 0.698144615), Vec3(-0.0940981656, -0.479050905, 0.876699209), Vec3(-0.0962664858, -0.391308635, 0.918992698), Vec3(-0.19112663, -0.386683881, 0.906027019), Vec3(-0.186774835, -0.473437041, 0.864822865), Vec3(-0.27659288, -0.464806288, 0.845221043), Vec3(-0.27072072, -0.544206679, 0.79843688), Vec3(-0.283191532, -0.379697353, 0.88463223), Vec3(-0.371180117, -0.371179938, 0.85521692), Vec3(-0.36218977, -0.454053789, 0.818292439), Vec3(-0.354055941, -0.531091988, 0.774298072), Vec3(-0.266581714, -0.617472947, 0.744725883), Vec3(-0.265069664, -0.684358895, 0.684358835), Vec3(-0.348251343, -0.601838231, 0.723508775), Vec3(-0.346116126, -0.666016817, 0.666016996), Vec3(-0.0984107032, -0.298468769, 0.952974916), Vec3(-0.100244135, -0.201461777, 0.977899432), Vec3(-0.199005708, -0.199005425, 0.96318233), Vec3(-0.195390999, -0.294889748, 0.939039171), Vec3(-0.101498291, -0.101498, 0.993134201), Vec3(-0.201461986, -0.100243844, 0.977899432), Vec3(-0.298468888, -0.0984104276, 0.952974856), Vec3(-0.294889897, -0.195390776, 0.939039171), Vec3(-0.391308755, -0.0962661728, 0.918992698), Vec3(-0.386683851, -0.191126391, 0.906027079), Vec3(-0.289564043, -0.289563864, 0.916101336), Vec3(-0.379697382, -0.283191234, 0.88463223), Vec3(-0.464806348, -0.276592731, 0.845221102), Vec3(-0.454053909, -0.362189621, 0.818292558), Vec3(-0.473437041, -0.186774552, 0.864823043), Vec3(-0.554494262, -0.18294692, 0.816099882), Vec3(-0.54420656, -0.270720541, 0.798437059), Vec3(-0.531091988, -0.354055822, 0.774298131), Vec3(-0.479050845, -0.0940979198, 0.876699209), Vec3(-0.561065853, -0.0922049507, 0.826835334), Vec3(-0.636994958, -0.0908873305, 0.770023286), Vec3(-0.62946403, -0.180269644, 0.760417759), Vec3(-0.617472768, -0.266581416, 0.744726062), Vec3(-0.601838231, -0.348251253, 0.723508835), Vec3(-0.423737496, -0.583823979, 0.697528601), Vec3(-0.420784026, -0.644162238, 0.644162357), Vec3(-0.431634754, -0.516483605, 0.744235754), Vec3(-0.502360404, -0.502360463, 0.708672225), Vec3(-0.491493255, -0.565391421, 0.667616487), Vec3(-0.487256259, -0.620292068, 0.620292246), Vec3(-0.442427456, -0.442427367, 0.784516513), Vec3(-0.516483486, -0.431634694, 0.744235814), Vec3(-0.583823919, -0.423737496, 0.69752866), Vec3(-0.565391362, -0.491493344, 0.667616546), Vec3(-0.549794018, -0.549794137, 0.634344339), Vec3(-0.542915404, -0.596732974, 0.596733093), Vec3(0.549793899, -0.634344399, 0.549794137), Vec3(0.491493315, -0.667616367, 0.565391481), Vec3(0.502360404, -0.708672225, 0.502360523), Vec3(0.565391362, -0.667616427, 0.491493434), Vec3(0.423737496, -0.697528601, 0.583824039), Vec3(0.348251343, -0.723508596, 0.60183841), Vec3(0.354056001, -0.774298012, 0.531092048), Vec3(0.431634724, -0.744235694, 0.516483605), Vec3(0.442427367, -0.784516573, 0.442427427), Vec3(0.516483545, -0.744235754, 0.431634724), Vec3(0.3621898, -0.818292499, 0.454053938), Vec3(0.371180087, -0.855216861, 0.371180058), Vec3(0.454053879, -0.818292439, 0.36218977), Vec3(0.531091988, -0.774298072, 0.354055911), Vec3(0.58382386, -0.69752866, 0.423737526), Vec3(0.601838291, -0.723508775, 0.348251313), Vec3(0.266581625, -0.744725823, 0.617472947), Vec3(0.180269808, -0.760417402, 0.629464328), Vec3(0.182947159, -0.816099703, 0.554494441), Vec3(0.27072072, -0.798436821, 0.544206679), Vec3(0.0908875018, -0.770023048, 0.636995256), Vec3(-3.10169987e-08, -0.773250759, 0.639564931), Vec3(-3.10169987e-08, -0.830428481, 0.563331664), Vec3(0.092205137, -0.826835215, 0.561066031), Vec3(0.0940980837, -0.876699209, 0.479050905), Vec3(0.18677479, -0.864822805, 0.47343719), Vec3(-3.10169987e-08, -0.880668461, 0.481007904), Vec3(-3.10169987e-08, -0.923328996, 0.392937899), Vec3(0.0962664112, -0.918992698, 0.391308665), Vec3(0.1911266, -0.906026959, 0.386683911), Vec3(0.276592851, -0.845220923, 0.464806437), Vec3(0.283191442, -0.88463217, 0.379697472), Vec3(0.289564043, -0.916101336, 0.289564013), Vec3(0.379697472, -0.88463217, 0.283191383), Vec3(0.19539094, -0.939039111, 0.294889778), Vec3(0.199005663, -0.96318233, 0.199005574), Vec3(0.294889897, -0.939039111, 0.19539085), Vec3(0.386683941, -0.906027019, 0.191126525), Vec3(0.0984106287, -0.952974856, 0.298468828), Vec3(-3.10169987e-08, -0.957644999, 0.299740911), Vec3(-3.10169987e-08, -0.982842982, 0.202340469), Vec3(0.10024406, -0.977899432, 0.201461852), Vec3(0.101498216, -0.993134201, 0.10149809), Vec3(0.201462016, -0.977899432, 0.100243933), Vec3(-3.10169987e-08, -0.998260677, 0.101948351), Vec3(-3.10169987e-08, -1.00345218, -1.70593495e-07), Vec3(0.101948477, -0.998260677, -1.70593495e-07), Vec3(0.202340543, -0.982842922, -1.55085004e-07), Vec3(0.298468888, -0.952974856, 0.098410517), Vec3(0.391308665, -0.918992698, 0.0962662846), Vec3(0.299740881, -0.957644939, -1.55085004e-07), Vec3(0.392937899, -0.923329055, -1.55085004e-07), Vec3(0.617472827, -0.744725943, 0.266581565), Vec3(0.544206619, -0.79843688, 0.270720661), Vec3(0.554494262, -0.816099882, 0.18294704), Vec3(0.62946403, -0.76041764, 0.180269703), Vec3(0.464806318, -0.845221102, 0.276592851), Vec3(0.47343713, -0.864822805, 0.186774716), Vec3(0.479050905, -0.876699209, 0.0940979943), Vec3(0.561065793, -0.826835334, 0.0922050104), Vec3(0.481007755, -0.880668581, -1.55085004e-07), Vec3(0.563331485, -0.830428481, -1.55085004e-07), Vec3(0.636995018, -0.770023227, 0.0908873901), Vec3(0.639564753, -0.773250937, -1.55085004e-07), Vec3(-0.0908875614, -0.770023048, 0.636995256), Vec3(-0.180269912, -0.760417342, 0.629464328), Vec3(-0.182947204, -0.816099644, 0.55449456), Vec3(-0.0922052115, -0.826835215, 0.561066031), Vec3(-0.266581744, -0.744725883, 0.617472947), Vec3(-0.348251343, -0.723508656, 0.60183847), Vec3(-0.354055941, -0.774297953, 0.531092167), Vec3(-0.27072072, -0.798436761, 0.544206738), Vec3(-0.276592851, -0.845220923, 0.464806378), Vec3(-0.18677485, -0.864822865, 0.47343722), Vec3(-0.3621898, -0.818292499, 0.454053938), Vec3(-0.371180028, -0.85521692, 0.371180028), Vec3(-0.283191472, -0.884632111, 0.379697442), Vec3(-0.19112663, -0.906027019, 0.386683881), Vec3(-0.0940981805, -0.87669915, 0.479050905), Vec3(-0.0962664708, -0.918992698, 0.391308635), Vec3(-0.423737466, -0.697528541, 0.583824039), Vec3(-0.491493255, -0.667616367, 0.565391541), Vec3(-0.502360344, -0.708672225, 0.502360582), Vec3(-0.431634635, -0.744235694, 0.516483665), Vec3(-0.549793899, -0.634344339, 0.549794137), Vec3(-0.565391302, -0.667616546, 0.491493434), Vec3(-0.583823919, -0.69752866, 0.423737526), Vec3(-0.516483605, -0.744235694, 0.431634754), Vec3(-0.601838231, -0.723508835, 0.348251343), Vec3(-0.531091988, -0.774298072, 0.354055941), Vec3(-0.442427367, -0.784516513, 0.442427486), Vec3(-0.454053909, -0.818292499, 0.36218974), Vec3(-0.464806318, -0.845221102, 0.276592821), Vec3(-0.379697472, -0.88463217, 0.283191353), Vec3(-0.54420656, -0.79843694, 0.270720631), Vec3(-0.554494321, -0.816099823, 0.18294704), Vec3(-0.473437101, -0.864822984, 0.186774671), Vec3(-0.386683881, -0.906027079, 0.191126481), Vec3(-0.617472827, -0.744726002, 0.266581595), Vec3(-0.62946409, -0.760417521, 0.180269763), Vec3(-0.636995077, -0.770023167, 0.0908874273), Vec3(-0.561065972, -0.826835215, 0.0922050104), Vec3(-0.639564753, -0.773250937, -1.24067995e-07), Vec3(-0.563331485, -0.830428481, -1.24067995e-07), Vec3(-0.479050905, -0.87669915, 0.0940979943), Vec3(-0.391308725, -0.918992698, 0.0962662548), Vec3(-0.481007844, -0.880668521, -1.395765e-07), Vec3(-0.392937988, -0.923328996, -1.55085004e-07), Vec3(-0.0984107032, -0.952974856, 0.298468858), Vec3(-0.195390984, -0.939039111, 0.294889748), Vec3(-0.199005768, -0.96318233, 0.199005574), Vec3(-0.100244105, -0.977899432, 0.201461866), Vec3(-0.289564013, -0.916101277, 0.289564013), Vec3(-0.294889957, -0.939039111, 0.195390835), Vec3(-0.298468947, -0.952974856, 0.0984105021), Vec3(-0.20146203, -0.977899432, 0.100243933), Vec3(-0.29974094, -0.957644939, -1.55085004e-07), Vec3(-0.202340558, -0.982842982, -1.70593495e-07), Vec3(-0.101498291, -0.993134201, 0.10149809), Vec3(-0.101948567, -0.998260677, -1.70593495e-07), Vec3(-0.101498291, -0.993134201, -0.101498388), Vec3(-3.10169987e-08, -0.998260498, -0.101948693), Vec3(-0.201461956, -0.977899432, -0.100244217), Vec3(-0.199005648, -0.963182271, -0.199005738), Vec3(-0.100244075, -0.977899373, -0.201462045), Vec3(-3.10169987e-08, -0.982842982, -0.202340662), Vec3(-0.298468828, -0.952974916, -0.0984107703), Vec3(-0.391308695, -0.918992698, -0.0962665603), Vec3(-0.386683851, -0.906027019, -0.19112666), Vec3(-0.294889838, -0.939039111, -0.195391014), Vec3(-0.289564103, -0.916101336, -0.289564103), Vec3(-0.195390955, -0.939039111, -0.294889867), Vec3(-0.379697442, -0.884632111, -0.283191472), Vec3(-0.371180028, -0.85521692, -0.371180028), Vec3(-0.283191413, -0.88463217, -0.379697323), Vec3(-0.19112657, -0.906027079, -0.386683792), Vec3(-0.0984106734, -0.952974856, -0.298468918), Vec3(-3.10169987e-08, -0.957644999, -0.29974094), Vec3(-0.096266441, -0.918992758, -0.391308576), Vec3(-3.10169987e-08, -0.923329055, -0.392937839), Vec3(-0.479050845, -0.876699209, -0.0940982699), Vec3(-0.561065793, -0.826835334, -0.0922052786), Vec3(-0.554494262, -0.816099823, -0.182947204), Vec3(-0.473437011, -0.864822924, -0.186774909), Vec3(-0.636995018, -0.770023227, -0.0908876434), Vec3(-0.62946403, -0.76041764, -0.180269882), Vec3(-0.617472768, -0.744726002, -0.266581684), Vec3(-0.5442065, -0.798436999, -0.27072072), Vec3(-0.601838231, -0.723508835, -0.348251313), Vec3(-0.531091928, -0.774298072, -0.354055882), Vec3(-0.464806318, -0.845221043, -0.27659294), Vec3(-0.454053849, -0.818292558, -0.36218971), Vec3(-0.442427367, -0.784516633, -0.442427307), Vec3(-0.36218971, -0.818292618, -0.454053819), Vec3(-0.516483486, -0.744235873, -0.431634605), Vec3(-0.502360404, -0.708672285, -0.502360284), Vec3(-0.431634754, -0.744235873, -0.516483366), Vec3(-0.354055941, -0.774298251, -0.53109175), Vec3(-0.58382386, -0.69752866, -0.423737407), Vec3(-0.565391362, -0.667616606, -0.491493165), Vec3(-0.549794137, -0.634344578, -0.54979378), Vec3(-0.491493464, -0.667616665, -0.565391064), Vec3(-0.423737496, -0.697528958, -0.583823621), Vec3(-0.348251373, -0.723509073, -0.601837933), Vec3(-0.0940981507, -0.876699269, -0.479050696), Vec3(-3.10169987e-08, -0.88066864, -0.481007576), Vec3(-0.18677482, -0.864822924, -0.473436952), Vec3(-0.182947159, -0.816099942, -0.554494083), Vec3(-0.0922051966, -0.826835513, -0.561065555), Vec3(-3.10169987e-08, -0.83042872, -0.563331246), Vec3(-0.27659288, -0.845221043, -0.464806169), Vec3(-0.27072072, -0.798437119, -0.544206262), Vec3(-0.266581744, -0.744726181, -0.61747247), Vec3(-0.180269912, -0.760417759, -0.629463851), Vec3(-0.0908875614, -0.770023465, -0.63699472), Vec3(-3.10169987e-08, -0.773251176, -0.639564395), Vec3(0.636994958, -0.770023286, -0.0908876583), Vec3(0.561065793, -0.826835334, -0.0922053084), Vec3(0.554494262, -0.816099882, -0.182947204), Vec3(0.62946403, -0.76041764, -0.180269912), Vec3(0.479050815, -0.876699209, -0.094098255), Vec3(0.391308635, -0.918992698, -0.0962665454), Vec3(0.386683822, -0.906027019, -0.19112666), Vec3(0.473436981, -0.864822924, -0.18677488), Vec3(0.464806199, -0.845221102, -0.27659291), Vec3(0.5442065, -0.79843694, -0.27072072), Vec3(0.379697382, -0.88463223, -0.283191532), Vec3(0.371179968, -0.85521698, -0.371180058), Vec3(0.454053849, -0.818292618, -0.362189621), Vec3(0.531091928, -0.774298072, -0.354055911), Vec3(0.617472768, -0.744726002, -0.266581744), Vec3(0.601838171, -0.723508954, -0.348251313), Vec3(0.298468769, -0.952974856, -0.0984108001), Vec3(0.201461941, -0.977899432, -0.100244246), Vec3(0.199005619, -0.96318233, -0.199005738), Vec3(0.294889808, -0.939039111, -0.195391014), Vec3(0.101498187, -0.993134201, -0.101498403), Vec3(0.100244015, -0.977899373, -0.201462075), Vec3(0.0984106138, -0.952974856, -0.298468888), Vec3(0.19539091, -0.939039052, -0.294889838), Vec3(0.0962663591, -0.918992758, -0.391308576), Vec3(0.19112654, -0.906027079, -0.386683851), Vec3(0.289563954, -0.916101277, -0.289564013), Vec3(0.283191353, -0.88463217, -0.379697323), Vec3(0.27659288, -0.845221102, -0.464806199), Vec3(0.362189621, -0.818292618, -0.454053819), Vec3(0.18677476, -0.864822984, -0.473436892), Vec3(0.182947084, -0.816099942, -0.554494083), Vec3(0.270720631, -0.798437119, -0.544206381), Vec3(0.354055911, -0.774298251, -0.531091809), Vec3(0.0940980837, -0.876699328, -0.479050636), Vec3(0.092205137, -0.826835573, -0.561065495), Vec3(0.0908875167, -0.770023525, -0.63699466), Vec3(0.180269793, -0.760417819, -0.629463851), Vec3(0.266581625, -0.744726241, -0.617472529), Vec3(0.348251313, -0.723509073, -0.601837933), Vec3(0.5838238, -0.697528839, -0.423737377), Vec3(0.516483426, -0.744236052, -0.431634575), Vec3(0.502360344, -0.708672345, -0.502360284), Vec3(0.565391302, -0.667616665, -0.491493255), Vec3(0.442427307, -0.784516633, -0.442427307), Vec3(0.431634635, -0.744235992, -0.516483366), Vec3(0.423737496, -0.697528958, -0.583823562), Vec3(0.491493404, -0.667616665, -0.565391123), Vec3(0.549794078, -0.634344697, -0.54979378)}, + ["orientation"] = "left-handed", + ["part_list"] = { "sphere"}, + ["part_face_count_list"] = { 1536}, + ["part_face_indices"] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535}, + ["uv_list"] = { Vec2(0.39546001, 0.467680007), Vec2(0.390460014, 0.456429988), Vec2(0.399419993, 0.454439998), Vec2(0.400750011, 0.463099986), Vec2(0.390460014, 0.456429988), Vec2(0.386909992, 0.442909986), Vec2(0.397700012, 0.441610008), Vec2(0.399419993, 0.454439998), Vec2(0.380849987, 0.460709989), Vec2(0.375930011, 0.445899993), Vec2(0.386909992, 0.442909986), Vec2(0.390460014, 0.456429988), Vec2(0.38745001, 0.474099994), Vec2(0.380849987, 0.460709989), Vec2(0.390460014, 0.456429988), Vec2(0.39546001, 0.467680007), Vec2(0.386909992, 0.442909986), Vec2(0.384169996, 0.427769989), Vec2(0.395999998, 0.426840007), Vec2(0.397700012, 0.441610008), Vec2(0.384169996, 0.427769989), Vec2(0.382019997, 0.411460012), Vec2(0.394499987, 0.410809994), Vec2(0.395999998, 0.426840007), Vec2(0.372229993, 0.429919988), Vec2(0.369439989, 0.412990004), Vec2(0.382019997, 0.411460012), Vec2(0.384169996, 0.427769989), Vec2(0.375930011, 0.445899993), Vec2(0.372229993, 0.429919988), Vec2(0.384169996, 0.427769989), Vec2(0.386909992, 0.442909986), Vec2(0.364499986, 0.44986999), Vec2(0.360020012, 0.432889998), Vec2(0.372229993, 0.429919988), Vec2(0.375930011, 0.445899993), Vec2(0.360020012, 0.432889998), Vec2(0.356640011, 0.415170014), Vec2(0.369439989, 0.412990004), Vec2(0.372229993, 0.429919988), Vec2(0.347409993, 0.436250001), Vec2(0.343519986, 0.417690009), Vec2(0.356640011, 0.415170014), Vec2(0.360020012, 0.432889998), Vec2(0.352490008, 0.4542), Vec2(0.347409993, 0.436250001), Vec2(0.360020012, 0.432889998), Vec2(0.364499986, 0.44986999), Vec2(0.377939999, 0.481029987), Vec2(0.370359987, 0.465959996), Vec2(0.380849987, 0.460709989), Vec2(0.38745001, 0.474099994), Vec2(0.370359987, 0.465959996), Vec2(0.364499986, 0.44986999), Vec2(0.375930011, 0.445899993), Vec2(0.380849987, 0.460709989), Vec2(0.358999997, 0.471460015), Vec2(0.352490008, 0.4542), Vec2(0.364499986, 0.44986999), Vec2(0.370359987, 0.465959996), Vec2(0.367210001, 0.48793), Vec2(0.358999997, 0.471460015), Vec2(0.370359987, 0.465959996), Vec2(0.377939999, 0.481029987), Vec2(0.382019997, 0.411460012), Vec2(0.380380005, 0.394320011), Vec2(0.393269986, 0.393909991), Vec2(0.394499987, 0.410809994), Vec2(0.380380005, 0.394320011), Vec2(0.379240006, 0.376610011), Vec2(0.392369986, 0.376419991), Vec2(0.393269986, 0.393909991), Vec2(0.367379993, 0.395350009), Vec2(0.365979999, 0.377200007), Vec2(0.379240006, 0.376610011), Vec2(0.380380005, 0.394320011), Vec2(0.369439989, 0.412990004), Vec2(0.367379993, 0.395350009), Vec2(0.380380005, 0.394320011), Vec2(0.382019997, 0.411460012), Vec2(0.379240006, 0.376610011), Vec2(0.378580004, 0.358559996), Vec2(0.391840011, 0.358579993), Vec2(0.392369986, 0.376419991), Vec2(0.378580004, 0.358559996), Vec2(0.378399998, 0.340350002), Vec2(0.391689986, 0.340579987), Vec2(0.391840011, 0.358579993), Vec2(0.365179986, 0.358729988), Vec2(0.364960015, 0.340110004), Vec2(0.378399998, 0.340350002), Vec2(0.378580004, 0.358559996), Vec2(0.365979999, 0.377200007), Vec2(0.365179986, 0.358729988), Vec2(0.378580004, 0.358559996), Vec2(0.379240006, 0.376610011), Vec2(0.352490008, 0.378089994), Vec2(0.351550013, 0.359059989), Vec2(0.365179986, 0.358729988), Vec2(0.365979999, 0.377200007), Vec2(0.351550013, 0.359059989), Vec2(0.351289988, 0.339890003), Vec2(0.364960015, 0.340110004), Vec2(0.365179986, 0.358729988), Vec2(0.337650001, 0.359490007), Vec2(0.337339997, 0.33969), Vec2(0.351289988, 0.339890003), Vec2(0.351550013, 0.359059989), Vec2(0.338739991, 0.379180014), Vec2(0.337650001, 0.359490007), Vec2(0.351550013, 0.359059989), Vec2(0.352490008, 0.378089994), Vec2(0.356640011, 0.415170014), Vec2(0.354169995, 0.39684999), Vec2(0.367379993, 0.395350009), Vec2(0.369439989, 0.412990004), Vec2(0.354169995, 0.39684999), Vec2(0.352490008, 0.378089994), Vec2(0.365979999, 0.377200007), Vec2(0.367379993, 0.395350009), Vec2(0.34066999, 0.398629993), Vec2(0.338739991, 0.379180014), Vec2(0.352490008, 0.378089994), Vec2(0.354169995, 0.39684999), Vec2(0.343519986, 0.417690009), Vec2(0.34066999, 0.398629993), Vec2(0.354169995, 0.39684999), Vec2(0.356640011, 0.415170014), Vec2(0.330040008, 0.420289993), Vec2(0.326860011, 0.400489986), Vec2(0.34066999, 0.398629993), Vec2(0.343519986, 0.417690009), Vec2(0.326860011, 0.400489986), Vec2(0.324690014, 0.380349994), Vec2(0.338739991, 0.379180014), Vec2(0.34066999, 0.398629993), Vec2(0.312739998, 0.402269989), Vec2(0.310350001, 0.381489992), Vec2(0.324690014, 0.380349994), Vec2(0.326860011, 0.400489986), Vec2(0.316179991, 0.422729999), Vec2(0.312739998, 0.402269989), Vec2(0.326860011, 0.400489986), Vec2(0.330040008, 0.420289993), Vec2(0.324690014, 0.380349994), Vec2(0.323460013, 0.359990001), Vec2(0.337650001, 0.359490007), Vec2(0.338739991, 0.379180014), Vec2(0.323460013, 0.359990001), Vec2(0.323089987, 0.339509994), Vec2(0.337339997, 0.33969), Vec2(0.337650001, 0.359490007), Vec2(0.308970004, 0.360480011), Vec2(0.308560014, 0.339359999), Vec2(0.323089987, 0.339509994), Vec2(0.323460013, 0.359990001), Vec2(0.310350001, 0.381489992), Vec2(0.308970004, 0.360480011), Vec2(0.323460013, 0.359990001), Vec2(0.324690014, 0.380349994), Vec2(0.295740008, 0.382490009), Vec2(0.294230014, 0.360920012), Vec2(0.308970004, 0.360480011), Vec2(0.310350001, 0.381489992), Vec2(0.294230014, 0.360920012), Vec2(0.293760002, 0.339240015), Vec2(0.308560014, 0.339359999), Vec2(0.308970004, 0.360480011), Vec2(0.279269993, 0.361259997), Vec2(0.278759986, 0.339150012), Vec2(0.293760002, 0.339240015), Vec2(0.294230014, 0.360920012), Vec2(0.280889988, 0.383249998), Vec2(0.279269993, 0.361259997), Vec2(0.294230014, 0.360920012), Vec2(0.295740008, 0.382490009), Vec2(0.301970005, 0.42482999), Vec2(0.298310012, 0.403829992), Vec2(0.312739998, 0.402269989), Vec2(0.316179991, 0.422729999), Vec2(0.298310012, 0.403829992), Vec2(0.295740008, 0.382490009), Vec2(0.310350001, 0.381489992), Vec2(0.312739998, 0.402269989), Vec2(0.283609986, 0.405010015), Vec2(0.280889988, 0.383249998), Vec2(0.295740008, 0.382490009), Vec2(0.298310012, 0.403829992), Vec2(0.287420005, 0.426429987), Vec2(0.283609986, 0.405010015), Vec2(0.298310012, 0.403829992), Vec2(0.301970005, 0.42482999), Vec2(0.355369985, 0.494399995), Vec2(0.346780002, 0.476749986), Vec2(0.358999997, 0.471460015), Vec2(0.367210001, 0.48793), Vec2(0.346780002, 0.476749986), Vec2(0.339839995, 0.45848), Vec2(0.352490008, 0.4542), Vec2(0.358999997, 0.471460015), Vec2(0.333739996, 0.481489986), Vec2(0.326559991, 0.462370008), Vec2(0.339839995, 0.45848), Vec2(0.346780002, 0.476749986), Vec2(0.342489988, 0.500119984), Vec2(0.333739996, 0.481489986), Vec2(0.346780002, 0.476749986), Vec2(0.355369985, 0.494399995), Vec2(0.339839995, 0.45848), Vec2(0.334320009, 0.439639986), Vec2(0.347409993, 0.436250001), Vec2(0.352490008, 0.4542), Vec2(0.334320009, 0.439639986), Vec2(0.330040008, 0.420289993), Vec2(0.343519986, 0.417690009), Vec2(0.347409993, 0.436250001), Vec2(0.320760012, 0.442779988), Vec2(0.316179991, 0.422729999), Vec2(0.330040008, 0.420289993), Vec2(0.334320009, 0.439639986), Vec2(0.326559991, 0.462370008), Vec2(0.320760012, 0.442779988), Vec2(0.334320009, 0.439639986), Vec2(0.339839995, 0.45848), Vec2(0.312700003, 0.465640008), Vec2(0.306739986, 0.445450008), Vec2(0.320760012, 0.442779988), Vec2(0.326559991, 0.462370008), Vec2(0.306739986, 0.445450008), Vec2(0.301970005, 0.42482999), Vec2(0.316179991, 0.422729999), Vec2(0.320760012, 0.442779988), Vec2(0.292309999, 0.447459996), Vec2(0.287420005, 0.426429987), Vec2(0.301970005, 0.42482999), Vec2(0.306739986, 0.445450008), Vec2(0.298299998, 0.468100011), Vec2(0.292309999, 0.447459996), Vec2(0.306739986, 0.445450008), Vec2(0.312700003, 0.465640008), Vec2(0.328619987, 0.504840016), Vec2(0.319940001, 0.485419989), Vec2(0.333739996, 0.481489986), Vec2(0.342489988, 0.500119984), Vec2(0.319940001, 0.485419989), Vec2(0.312700003, 0.465640008), Vec2(0.326559991, 0.462370008), Vec2(0.333739996, 0.481489986), Vec2(0.305429995, 0.488370001), Vec2(0.298299998, 0.468100011), Vec2(0.312700003, 0.465640008), Vec2(0.319940001, 0.485419989), Vec2(0.313829988, 0.508350015), Vec2(0.305429995, 0.488370001), Vec2(0.319940001, 0.485419989), Vec2(0.328619987, 0.504840016), Vec2(0.378399998, 0.340350002), Vec2(0.378690004, 0.322140008), Vec2(0.391930014, 0.32258001), Vec2(0.391689986, 0.340579987), Vec2(0.378690004, 0.322140008), Vec2(0.379449993, 0.304089993), Vec2(0.392560005, 0.304740012), Vec2(0.391930014, 0.32258001), Vec2(0.365289986, 0.321500003), Vec2(0.3662, 0.303050011), Vec2(0.379449993, 0.304089993), Vec2(0.378690004, 0.322140008), Vec2(0.364960015, 0.340110004), Vec2(0.365289986, 0.321500003), Vec2(0.378690004, 0.322140008), Vec2(0.378399998, 0.340350002), Vec2(0.379449993, 0.304089993), Vec2(0.380699992, 0.28639999), Vec2(0.393559992, 0.28727001), Vec2(0.392560005, 0.304740012), Vec2(0.380699992, 0.28639999), Vec2(0.382450014, 0.26929), Vec2(0.394899994, 0.27037999), Vec2(0.393559992, 0.28727001), Vec2(0.367720008, 0.284920007), Vec2(0.369899988, 0.267320007), Vec2(0.382450014, 0.26929), Vec2(0.380699992, 0.28639999), Vec2(0.3662, 0.303050011), Vec2(0.367720008, 0.284920007), Vec2(0.380699992, 0.28639999), Vec2(0.379449993, 0.304089993), Vec2(0.352730006, 0.301719993), Vec2(0.354519993, 0.282999992), Vec2(0.367720008, 0.284920007), Vec2(0.3662, 0.303050011), Vec2(0.354519993, 0.282999992), Vec2(0.357120007, 0.26473999), Vec2(0.369899988, 0.267320007), Vec2(0.367720008, 0.284920007), Vec2(0.341039985, 0.280840009), Vec2(0.344020009, 0.261860013), Vec2(0.357120007, 0.26473999), Vec2(0.354519993, 0.282999992), Vec2(0.338979989, 0.30024001), Vec2(0.341039985, 0.280840009), Vec2(0.354519993, 0.282999992), Vec2(0.352730006, 0.301719993), Vec2(0.351289988, 0.339890003), Vec2(0.351669997, 0.320740014), Vec2(0.365289986, 0.321500003), Vec2(0.364960015, 0.340110004), Vec2(0.351669997, 0.320740014), Vec2(0.352730006, 0.301719993), Vec2(0.3662, 0.303050011), Vec2(0.365289986, 0.321500003), Vec2(0.337769985, 0.319900006), Vec2(0.338979989, 0.30024001), Vec2(0.352730006, 0.301719993), Vec2(0.351669997, 0.320740014), Vec2(0.337339997, 0.33969), Vec2(0.337769985, 0.319900006), Vec2(0.351669997, 0.320740014), Vec2(0.351289988, 0.339890003), Vec2(0.382450014, 0.26929), Vec2(0.384719998, 0.253010005), Vec2(0.396519989, 0.254370004), Vec2(0.394899994, 0.27037999), Vec2(0.384719998, 0.253010005), Vec2(0.387580007, 0.237920001), Vec2(0.398339987, 0.239610001), Vec2(0.396519989, 0.254370004), Vec2(0.37281999, 0.250459999), Vec2(0.376650006, 0.234569997), Vec2(0.387580007, 0.237920001), Vec2(0.384719998, 0.253010005), Vec2(0.369899988, 0.267320007), Vec2(0.37281999, 0.250459999), Vec2(0.384719998, 0.253010005), Vec2(0.382450014, 0.26929), Vec2(0.387580007, 0.237920001), Vec2(0.391250014, 0.224490002), Vec2(0.400180012, 0.226799995), Vec2(0.398339987, 0.239610001), Vec2(0.391250014, 0.224490002), Vec2(0.396369994, 0.213410005), Vec2(0.401600003, 0.218140006), Vec2(0.400180012, 0.226799995), Vec2(0.381689996, 0.219909996), Vec2(0.388429999, 0.206740007), Vec2(0.396369994, 0.213410005), Vec2(0.391250014, 0.224490002), Vec2(0.376650006, 0.234569997), Vec2(0.381689996, 0.219909996), Vec2(0.391250014, 0.224490002), Vec2(0.387580007, 0.237920001), Vec2(0.365249991, 0.23026), Vec2(0.371250004, 0.21435), Vec2(0.381689996, 0.219909996), Vec2(0.376650006, 0.234569997), Vec2(0.371250004, 0.21435), Vec2(0.378960013, 0.199540004), Vec2(0.388429999, 0.206740007), Vec2(0.381689996, 0.219909996), Vec2(0.359890014, 0.208550006), Vec2(0.368229985, 0.192359999), Vec2(0.378960013, 0.199540004), Vec2(0.371250004, 0.21435), Vec2(0.353249997, 0.225600004), Vec2(0.359890014, 0.208550006), Vec2(0.371250004, 0.21435), Vec2(0.365249991, 0.23026), Vec2(0.357120007, 0.26473999), Vec2(0.360639989, 0.247109994), Vec2(0.37281999, 0.250459999), Vec2(0.369899988, 0.267320007), Vec2(0.360639989, 0.247109994), Vec2(0.365249991, 0.23026), Vec2(0.376650006, 0.234569997), Vec2(0.37281999, 0.250459999), Vec2(0.348030001, 0.243410006), Vec2(0.353249997, 0.225600004), Vec2(0.365249991, 0.23026), Vec2(0.360639989, 0.247109994), Vec2(0.344020009, 0.261860013), Vec2(0.348030001, 0.243410006), Vec2(0.360639989, 0.247109994), Vec2(0.357120007, 0.26473999), Vec2(0.330529988, 0.258929998), Vec2(0.334939986, 0.239710003), Vec2(0.348030001, 0.243410006), Vec2(0.344020009, 0.261860013), Vec2(0.334939986, 0.239710003), Vec2(0.34059, 0.221029997), Vec2(0.353249997, 0.225600004), Vec2(0.348030001, 0.243410006), Vec2(0.321339995, 0.236300007), Vec2(0.327270001, 0.216879994), Vec2(0.34059, 0.221029997), Vec2(0.334939986, 0.239710003), Vec2(0.316650003, 0.256209999), Vec2(0.321339995, 0.236300007), Vec2(0.334939986, 0.239710003), Vec2(0.330529988, 0.258929998), Vec2(0.34059, 0.221029997), Vec2(0.347649992, 0.202979997), Vec2(0.359890014, 0.208550006), Vec2(0.353249997, 0.225600004), Vec2(0.347649992, 0.202979997), Vec2(0.356359988, 0.185609996), Vec2(0.368229985, 0.192359999), Vec2(0.359890014, 0.208550006), Vec2(0.334560007, 0.197980002), Vec2(0.343409985, 0.179619998), Vec2(0.356359988, 0.185609996), Vec2(0.347649992, 0.202979997), Vec2(0.327270001, 0.216879994), Vec2(0.334560007, 0.197980002), Vec2(0.347649992, 0.202979997), Vec2(0.34059, 0.221029997), Vec2(0.313340008, 0.213379994), Vec2(0.320679992, 0.19382), Vec2(0.334560007, 0.197980002), Vec2(0.327270001, 0.216879994), Vec2(0.320679992, 0.19382), Vec2(0.329450011, 0.174649999), Vec2(0.343409985, 0.179619998), Vec2(0.334560007, 0.197980002), Vec2(0.30607, 0.190669999), Vec2(0.314539999, 0.170929998), Vec2(0.329450011, 0.174649999), Vec2(0.320679992, 0.19382), Vec2(0.298839986, 0.21074), Vec2(0.30607, 0.190669999), Vec2(0.320679992, 0.19382), Vec2(0.313340008, 0.213379994), Vec2(0.302390009, 0.253879994), Vec2(0.30726999, 0.233400002), Vec2(0.321339995, 0.236300007), Vec2(0.316650003, 0.256209999), Vec2(0.30726999, 0.233400002), Vec2(0.313340008, 0.213379994), Vec2(0.327270001, 0.216879994), Vec2(0.321339995, 0.236300007), Vec2(0.292760015, 0.231199995), Vec2(0.298839986, 0.21074), Vec2(0.313340008, 0.213379994), Vec2(0.30726999, 0.233400002), Vec2(0.287779987, 0.252099991), Vec2(0.292760015, 0.231199995), Vec2(0.30726999, 0.233400002), Vec2(0.302390009, 0.253879994), Vec2(0.323089987, 0.339509994), Vec2(0.323570013, 0.319050014), Vec2(0.337769985, 0.319900006), Vec2(0.337339997, 0.33969), Vec2(0.323570013, 0.319050014), Vec2(0.324930012, 0.298720002), Vec2(0.338979989, 0.30024001), Vec2(0.337769985, 0.319900006), Vec2(0.309089988, 0.318260014), Vec2(0.310579985, 0.297289997), Vec2(0.324930012, 0.298720002), Vec2(0.323570013, 0.319050014), Vec2(0.308560014, 0.339359999), Vec2(0.309089988, 0.318260014), Vec2(0.323570013, 0.319050014), Vec2(0.323089987, 0.339509994), Vec2(0.324930012, 0.298720002), Vec2(0.327230006, 0.278640002), Vec2(0.341039985, 0.280840009), Vec2(0.338979989, 0.30024001), Vec2(0.327230006, 0.278640002), Vec2(0.330529988, 0.258929998), Vec2(0.344020009, 0.261860013), Vec2(0.341039985, 0.280840009), Vec2(0.313080013, 0.276569992), Vec2(0.316650003, 0.256209999), Vec2(0.330529988, 0.258929998), Vec2(0.327230006, 0.278640002), Vec2(0.310579985, 0.297289997), Vec2(0.313080013, 0.276569992), Vec2(0.327230006, 0.278640002), Vec2(0.324930012, 0.298720002), Vec2(0.295949996, 0.296050012), Vec2(0.298619986, 0.274780005), Vec2(0.313080013, 0.276569992), Vec2(0.310579985, 0.297289997), Vec2(0.298619986, 0.274780005), Vec2(0.302390009, 0.253879994), Vec2(0.316650003, 0.256209999), Vec2(0.313080013, 0.276569992), Vec2(0.283879995, 0.273420006), Vec2(0.287779987, 0.252099991), Vec2(0.302390009, 0.253879994), Vec2(0.298619986, 0.274780005), Vec2(0.281069994, 0.295100003), Vec2(0.283879995, 0.273420006), Vec2(0.298619986, 0.274780005), Vec2(0.295949996, 0.296050012), Vec2(0.293760002, 0.339240015), Vec2(0.294330001, 0.317570001), Vec2(0.309089988, 0.318260014), Vec2(0.308560014, 0.339359999), Vec2(0.294330001, 0.317570001), Vec2(0.295949996, 0.296050012), Vec2(0.310579985, 0.297289997), Vec2(0.309089988, 0.318260014), Vec2(0.279359996, 0.31705001), Vec2(0.281069994, 0.295100003), Vec2(0.295949996, 0.296050012), Vec2(0.294330001, 0.317570001), Vec2(0.278759986, 0.339150012), Vec2(0.279359996, 0.31705001), Vec2(0.294330001, 0.317570001), Vec2(0.293760002, 0.339240015), Vec2(0.263590008, 0.33908999), Vec2(0.264219999, 0.316720009), Vec2(0.279359996, 0.31705001), Vec2(0.278759986, 0.339150012), Vec2(0.264219999, 0.316720009), Vec2(0.266000003, 0.294499993), Vec2(0.281069994, 0.295100003), Vec2(0.279359996, 0.31705001), Vec2(0.248960003, 0.31656), Vec2(0.250800014, 0.294209987), Vec2(0.266000003, 0.294499993), Vec2(0.264219999, 0.316720009), Vec2(0.248319998, 0.339060009), Vec2(0.248960003, 0.31656), Vec2(0.264219999, 0.316720009), Vec2(0.263590008, 0.33908999), Vec2(0.266000003, 0.294499993), Vec2(0.268900007, 0.272549987), Vec2(0.283879995, 0.273420006), Vec2(0.281069994, 0.295100003), Vec2(0.268900007, 0.272549987), Vec2(0.272879988, 0.250959992), Vec2(0.287779987, 0.252099991), Vec2(0.283879995, 0.273420006), Vec2(0.25376001, 0.272139996), Vec2(0.257770002, 0.250429988), Vec2(0.272879988, 0.250959992), Vec2(0.268900007, 0.272549987), Vec2(0.250800014, 0.294209987), Vec2(0.25376001, 0.272139996), Vec2(0.268900007, 0.272549987), Vec2(0.266000003, 0.294499993), Vec2(0.235520005, 0.294160008), Vec2(0.238519996, 0.272080004), Vec2(0.25376001, 0.272139996), Vec2(0.250800014, 0.294209987), Vec2(0.238519996, 0.272080004), Vec2(0.242550001, 0.250389993), Vec2(0.257770002, 0.250429988), Vec2(0.25376001, 0.272139996), Vec2(0.223269999, 0.272210002), Vec2(0.227329999, 0.250649989), Vec2(0.242550001, 0.250389993), Vec2(0.238519996, 0.272080004), Vec2(0.220210001, 0.294230014), Vec2(0.223269999, 0.272210002), Vec2(0.238519996, 0.272080004), Vec2(0.235520005, 0.294160008), Vec2(0.232999995, 0.339049995), Vec2(0.23364, 0.316529989), Vec2(0.248960003, 0.31656), Vec2(0.248319998, 0.339060009), Vec2(0.23364, 0.316529989), Vec2(0.235520005, 0.294160008), Vec2(0.250800014, 0.294209987), Vec2(0.248960003, 0.31656), Vec2(0.2183, 0.31656), Vec2(0.220210001, 0.294230014), Vec2(0.235520005, 0.294160008), Vec2(0.23364, 0.316529989), Vec2(0.217649996, 0.339060009), Vec2(0.2183, 0.31656), Vec2(0.23364, 0.316529989), Vec2(0.232999995, 0.339049995), Vec2(0.272879988, 0.250959992), Vec2(0.277880013, 0.229790002), Vec2(0.292760015, 0.231199995), Vec2(0.287779987, 0.252099991), Vec2(0.277880013, 0.229790002), Vec2(0.283870012, 0.209040001), Vec2(0.298839986, 0.21074), Vec2(0.292760015, 0.231199995), Vec2(0.262730002, 0.229149997), Vec2(0.268539995, 0.208299994), Vec2(0.283870012, 0.209040001), Vec2(0.277880013, 0.229790002), Vec2(0.257770002, 0.250429988), Vec2(0.262730002, 0.229149997), Vec2(0.277880013, 0.229790002), Vec2(0.272879988, 0.250959992), Vec2(0.283870012, 0.209040001), Vec2(0.290829986, 0.188659996), Vec2(0.30607, 0.190669999), Vec2(0.298839986, 0.21074), Vec2(0.290829986, 0.188659996), Vec2(0.298799992, 0.168559998), Vec2(0.314539999, 0.170929998), Vec2(0.30607, 0.190669999), Vec2(0.27511999, 0.187820002), Vec2(0.282409996, 0.167600006), Vec2(0.298799992, 0.168559998), Vec2(0.290829986, 0.188659996), Vec2(0.268539995, 0.208299994), Vec2(0.27511999, 0.187820002), Vec2(0.290829986, 0.188659996), Vec2(0.283870012, 0.209040001), Vec2(0.253039986, 0.208399996), Vec2(0.259160012, 0.188060001), Vec2(0.27511999, 0.187820002), Vec2(0.268539995, 0.208299994), Vec2(0.259160012, 0.188060001), Vec2(0.265639991, 0.168019995), Vec2(0.282409996, 0.167600006), Vec2(0.27511999, 0.187820002), Vec2(0.243239999, 0.189260006), Vec2(0.248820007, 0.169729993), Vec2(0.265639991, 0.168019995), Vec2(0.259160012, 0.188060001), Vec2(0.23759, 0.209179997), Vec2(0.243239999, 0.189260006), Vec2(0.259160012, 0.188060001), Vec2(0.253039986, 0.208399996), Vec2(0.242550001, 0.250389993), Vec2(0.247439995, 0.229159996), Vec2(0.262730002, 0.229149997), Vec2(0.257770002, 0.250429988), Vec2(0.247439995, 0.229159996), Vec2(0.253039986, 0.208399996), Vec2(0.268539995, 0.208299994), Vec2(0.262730002, 0.229149997), Vec2(0.232189998, 0.229629993), Vec2(0.23759, 0.209179997), Vec2(0.253039986, 0.208399996), Vec2(0.247439995, 0.229159996), Vec2(0.227329999, 0.250649989), Vec2(0.232189998, 0.229629993), Vec2(0.247439995, 0.229159996), Vec2(0.242550001, 0.250389993), Vec2(0.21221, 0.250970006), Vec2(0.217130005, 0.230279997), Vec2(0.232189998, 0.229629993), Vec2(0.227329999, 0.250649989), Vec2(0.217130005, 0.230279997), Vec2(0.222450003, 0.210339993), Vec2(0.23759, 0.209179997), Vec2(0.232189998, 0.229629993), Vec2(0.202399999, 0.230660006), Vec2(0.207870007, 0.211359993), Vec2(0.222450003, 0.210339993), Vec2(0.217130005, 0.230279997), Vec2(0.197249994, 0.251010001), Vec2(0.202399999, 0.230660006), Vec2(0.217130005, 0.230279997), Vec2(0.21221, 0.250970006), Vec2(0.222450003, 0.210339993), Vec2(0.227709994, 0.191129997), Vec2(0.243239999, 0.189260006), Vec2(0.23759, 0.209179997), Vec2(0.227709994, 0.191129997), Vec2(0.232409999, 0.172529995), Vec2(0.248820007, 0.169729993), Vec2(0.243239999, 0.189260006), Vec2(0.213009998, 0.193220004), Vec2(0.216959998, 0.176129997), Vec2(0.232409999, 0.172529995), Vec2(0.227709994, 0.191129997), Vec2(0.207870007, 0.211359993), Vec2(0.213009998, 0.193220004), Vec2(0.227709994, 0.191129997), Vec2(0.222450003, 0.210339993), Vec2(0.194120005, 0.211500004), Vec2(0.199719995, 0.194680005), Vec2(0.213009998, 0.193220004), Vec2(0.207870007, 0.211359993), Vec2(0.199719995, 0.194680005), Vec2(0.203339994, 0.180059999), Vec2(0.216959998, 0.176129997), Vec2(0.213009998, 0.193220004), Vec2(0.188590005, 0.19382), Vec2(0.194059998, 0.183160007), Vec2(0.203339994, 0.180059999), Vec2(0.199719995, 0.194680005), Vec2(0.181370005, 0.209729999), Vec2(0.188590005, 0.19382), Vec2(0.199719995, 0.194680005), Vec2(0.194120005, 0.211500004), Vec2(0.182459995, 0.250360012), Vec2(0.188079998, 0.230199993), Vec2(0.202399999, 0.230660006), Vec2(0.197249994, 0.251010001), Vec2(0.188079998, 0.230199993), Vec2(0.194120005, 0.211500004), Vec2(0.207870007, 0.211359993), Vec2(0.202399999, 0.230660006), Vec2(0.174219996, 0.228259996), Vec2(0.181370005, 0.209729999), Vec2(0.194120005, 0.211500004), Vec2(0.188079998, 0.230199993), Vec2(0.167820007, 0.248590007), Vec2(0.174219996, 0.228259996), Vec2(0.188079998, 0.230199993), Vec2(0.182459995, 0.250360012), Vec2(0.202270001, 0.33908999), Vec2(0.202940002, 0.316599995), Vec2(0.2183, 0.31656), Vec2(0.217649996, 0.339060009), Vec2(0.202940002, 0.316599995), Vec2(0.204899997, 0.294290006), Vec2(0.220210001, 0.294230014), Vec2(0.2183, 0.31656), Vec2(0.187529996, 0.316549987), Vec2(0.189579993, 0.294180006), Vec2(0.204899997, 0.294290006), Vec2(0.202940002, 0.316599995), Vec2(0.186849996, 0.339130014), Vec2(0.187529996, 0.316549987), Vec2(0.202940002, 0.316599995), Vec2(0.202270001, 0.33908999), Vec2(0.204899997, 0.294290006), Vec2(0.208049998, 0.272350013), Vec2(0.223269999, 0.272210002), Vec2(0.220210001, 0.294230014), Vec2(0.208049998, 0.272350013), Vec2(0.21221, 0.250970006), Vec2(0.227329999, 0.250649989), Vec2(0.223269999, 0.272210002), Vec2(0.192880005, 0.27226001), Vec2(0.197249994, 0.251010001), Vec2(0.21221, 0.250970006), Vec2(0.208049998, 0.272350013), Vec2(0.189579993, 0.294180006), Vec2(0.192880005, 0.27226001), Vec2(0.208049998, 0.272350013), Vec2(0.204899997, 0.294290006), Vec2(0.17419, 0.293740004), Vec2(0.177729994, 0.271649987), Vec2(0.192880005, 0.27226001), Vec2(0.189579993, 0.294180006), Vec2(0.177729994, 0.271649987), Vec2(0.182459995, 0.250360012), Vec2(0.197249994, 0.251010001), Vec2(0.192880005, 0.27226001), Vec2(0.162550002, 0.270229995), Vec2(0.167820007, 0.248590007), Vec2(0.182459995, 0.250360012), Vec2(0.177729994, 0.271649987), Vec2(0.158659995, 0.292769998), Vec2(0.162550002, 0.270229995), Vec2(0.177729994, 0.271649987), Vec2(0.17419, 0.293740004), Vec2(0.171299994, 0.339179993), Vec2(0.172020003, 0.316339999), Vec2(0.187529996, 0.316549987), Vec2(0.186849996, 0.339130014), Vec2(0.172020003, 0.316339999), Vec2(0.17419, 0.293740004), Vec2(0.189579993, 0.294180006), Vec2(0.187529996, 0.316549987), Vec2(0.156289995, 0.315869987), Vec2(0.158659995, 0.292769998), Vec2(0.17419, 0.293740004), Vec2(0.172020003, 0.316339999), Vec2(0.155520007, 0.339249998), Vec2(0.156289995, 0.315869987), Vec2(0.172020003, 0.316339999), Vec2(0.171299994, 0.339179993), Vec2(0.298220009, 0.510519981), Vec2(0.290320009, 0.490200013), Vec2(0.305429995, 0.488370001), Vec2(0.313829988, 0.508350015), Vec2(0.290320009, 0.490200013), Vec2(0.28343001, 0.469639987), Vec2(0.298299998, 0.468100011), Vec2(0.305429995, 0.488370001), Vec2(0.27474001, 0.490909994), Vec2(0.268220007, 0.470270008), Vec2(0.28343001, 0.469639987), Vec2(0.290320009, 0.490200013), Vec2(0.281960011, 0.511309981), Vec2(0.27474001, 0.490909994), Vec2(0.290320009, 0.490200013), Vec2(0.298220009, 0.510519981), Vec2(0.28343001, 0.469639987), Vec2(0.277520001, 0.448729992), Vec2(0.292309999, 0.447459996), Vec2(0.298299998, 0.468100011), Vec2(0.277520001, 0.448729992), Vec2(0.272599995, 0.427439988), Vec2(0.287420005, 0.426429987), Vec2(0.292309999, 0.447459996), Vec2(0.262470007, 0.449279994), Vec2(0.257569999, 0.427890003), Vec2(0.272599995, 0.427439988), Vec2(0.277520001, 0.448729992), Vec2(0.268220007, 0.470270008), Vec2(0.262470007, 0.449279994), Vec2(0.277520001, 0.448729992), Vec2(0.28343001, 0.469639987), Vec2(0.252840012, 0.470090002), Vec2(0.24729, 0.449220002), Vec2(0.262470007, 0.449279994), Vec2(0.268220007, 0.470270008), Vec2(0.24729, 0.449220002), Vec2(0.242430001, 0.427890003), Vec2(0.257569999, 0.427890003), Vec2(0.262470007, 0.449279994), Vec2(0.232130006, 0.448720008), Vec2(0.227300003, 0.427630007), Vec2(0.242430001, 0.427890003), Vec2(0.24729, 0.449220002), Vec2(0.237509996, 0.469260007), Vec2(0.232130006, 0.448720008), Vec2(0.24729, 0.449220002), Vec2(0.252840012, 0.470090002), Vec2(0.265329987, 0.510739982), Vec2(0.25891, 0.490559995), Vec2(0.27474001, 0.490909994), Vec2(0.281960011, 0.511309981), Vec2(0.25891, 0.490559995), Vec2(0.252840012, 0.470090002), Vec2(0.268220007, 0.470270008), Vec2(0.27474001, 0.490909994), Vec2(0.24312, 0.489289999), Vec2(0.237509996, 0.469260007), Vec2(0.252840012, 0.470090002), Vec2(0.25891, 0.490559995), Vec2(0.248649999, 0.508920014), Vec2(0.24312, 0.489289999), Vec2(0.25891, 0.490559995), Vec2(0.265329987, 0.510739982), Vec2(0.272599995, 0.427439988), Vec2(0.268700004, 0.405750006), Vec2(0.283609986, 0.405010015), Vec2(0.287420005, 0.426429987), Vec2(0.268700004, 0.405750006), Vec2(0.265859991, 0.383729994), Vec2(0.280889988, 0.383249998), Vec2(0.283609986, 0.405010015), Vec2(0.253609985, 0.406089991), Vec2(0.250699997, 0.383949995), Vec2(0.265859991, 0.383729994), Vec2(0.268700004, 0.405750006), Vec2(0.257569999, 0.427890003), Vec2(0.253609985, 0.406089991), Vec2(0.268700004, 0.405750006), Vec2(0.272599995, 0.427439988), Vec2(0.265859991, 0.383729994), Vec2(0.264149994, 0.361470014), Vec2(0.279269993, 0.361259997), Vec2(0.280889988, 0.383249998), Vec2(0.264149994, 0.361470014), Vec2(0.263590008, 0.33908999), Vec2(0.278759986, 0.339150012), Vec2(0.279269993, 0.361259997), Vec2(0.248919994, 0.361559987), Vec2(0.248319998, 0.339060009), Vec2(0.263590008, 0.33908999), Vec2(0.264149994, 0.361470014), Vec2(0.250699997, 0.383949995), Vec2(0.248919994, 0.361559987), Vec2(0.264149994, 0.361470014), Vec2(0.265859991, 0.383729994), Vec2(0.235469997, 0.383980006), Vec2(0.233620003, 0.361580014), Vec2(0.248919994, 0.361559987), Vec2(0.250699997, 0.383949995), Vec2(0.233620003, 0.361580014), Vec2(0.232999995, 0.339049995), Vec2(0.248319998, 0.339060009), Vec2(0.248919994, 0.361559987), Vec2(0.2183, 0.361570001), Vec2(0.217649996, 0.339060009), Vec2(0.232999995, 0.339049995), Vec2(0.233620003, 0.361580014), Vec2(0.220200002, 0.383929998), Vec2(0.2183, 0.361570001), Vec2(0.233620003, 0.361580014), Vec2(0.235469997, 0.383980006), Vec2(0.242430001, 0.427890003), Vec2(0.238440007, 0.406120002), Vec2(0.253609985, 0.406089991), Vec2(0.257569999, 0.427890003), Vec2(0.238440007, 0.406120002), Vec2(0.235469997, 0.383980006), Vec2(0.250699997, 0.383949995), Vec2(0.253609985, 0.406089991), Vec2(0.223250002, 0.405999988), Vec2(0.220200002, 0.383929998), Vec2(0.235469997, 0.383980006), Vec2(0.238440007, 0.406120002), Vec2(0.227300003, 0.427630007), Vec2(0.223250002, 0.405999988), Vec2(0.238440007, 0.406120002), Vec2(0.242430001, 0.427890003), Vec2(0.212249994, 0.427329987), Vec2(0.208090007, 0.405889988), Vec2(0.223250002, 0.405999988), Vec2(0.227300003, 0.427630007), Vec2(0.208090007, 0.405889988), Vec2(0.204940006, 0.383920014), Vec2(0.220200002, 0.383929998), Vec2(0.223250002, 0.405999988), Vec2(0.192990005, 0.406040013), Vec2(0.189659998, 0.384090006), Vec2(0.204940006, 0.383920014), Vec2(0.208090007, 0.405889988), Vec2(0.197369993, 0.427329987), Vec2(0.192990005, 0.406040013), Vec2(0.208090007, 0.405889988), Vec2(0.212249994, 0.427329987), Vec2(0.204940006, 0.383920014), Vec2(0.202959999, 0.361589998), Vec2(0.2183, 0.361570001), Vec2(0.220200002, 0.383929998), Vec2(0.202959999, 0.361589998), Vec2(0.202270001, 0.33908999), Vec2(0.217649996, 0.339060009), Vec2(0.2183, 0.361570001), Vec2(0.187570006, 0.361710012), Vec2(0.186849996, 0.339130014), Vec2(0.202270001, 0.33908999), Vec2(0.202959999, 0.361589998), Vec2(0.189659998, 0.384090006), Vec2(0.187570006, 0.361710012), Vec2(0.202959999, 0.361589998), Vec2(0.204940006, 0.383920014), Vec2(0.174319997, 0.384629995), Vec2(0.172079995, 0.362019986), Vec2(0.187570006, 0.361710012), Vec2(0.189659998, 0.384090006), Vec2(0.172079995, 0.362019986), Vec2(0.171299994, 0.339179993), Vec2(0.186849996, 0.339130014), Vec2(0.187570006, 0.361710012), Vec2(0.156379998, 0.362619996), Vec2(0.155520007, 0.339249998), Vec2(0.171299994, 0.339179993), Vec2(0.172079995, 0.362019986), Vec2(0.158830002, 0.385720015), Vec2(0.156379998, 0.362619996), Vec2(0.172079995, 0.362019986), Vec2(0.174319997, 0.384629995), Vec2(0.182659999, 0.428039998), Vec2(0.177900001, 0.406729996), Vec2(0.192990005, 0.406040013), Vec2(0.197369993, 0.427329987), Vec2(0.177900001, 0.406729996), Vec2(0.174319997, 0.384629995), Vec2(0.189659998, 0.384090006), Vec2(0.192990005, 0.406040013), Vec2(0.162780002, 0.408250004), Vec2(0.158830002, 0.385720015), Vec2(0.174319997, 0.384629995), Vec2(0.177900001, 0.406729996), Vec2(0.168099999, 0.429879993), Vec2(0.162780002, 0.408250004), Vec2(0.177900001, 0.406729996), Vec2(0.182659999, 0.428039998), Vec2(0.232360005, 0.506039977), Vec2(0.227699995, 0.487379998), Vec2(0.24312, 0.489289999), Vec2(0.248649999, 0.508920014), Vec2(0.227699995, 0.487379998), Vec2(0.222460002, 0.468100011), Vec2(0.237509996, 0.469260007), Vec2(0.24312, 0.489289999), Vec2(0.213090003, 0.485280007), Vec2(0.207969993, 0.467079997), Vec2(0.222460002, 0.468100011), Vec2(0.227699995, 0.487379998), Vec2(0.217020005, 0.502390027), Vec2(0.213090003, 0.485280007), Vec2(0.227699995, 0.487379998), Vec2(0.232360005, 0.506039977), Vec2(0.222460002, 0.468100011), Vec2(0.217160001, 0.448089987), Vec2(0.232130006, 0.448720008), Vec2(0.237509996, 0.469260007), Vec2(0.217160001, 0.448089987), Vec2(0.212249994, 0.427329987), Vec2(0.227300003, 0.427630007), Vec2(0.232130006, 0.448720008), Vec2(0.202509999, 0.447730005), Vec2(0.197369993, 0.427329987), Vec2(0.212249994, 0.427329987), Vec2(0.217160001, 0.448089987), Vec2(0.207969993, 0.467079997), Vec2(0.202509999, 0.447730005), Vec2(0.217160001, 0.448089987), Vec2(0.222460002, 0.468100011), Vec2(0.194309995, 0.466969997), Vec2(0.18829, 0.448229998), Vec2(0.202509999, 0.447730005), Vec2(0.207969993, 0.467079997), Vec2(0.18829, 0.448229998), Vec2(0.182659999, 0.428039998), Vec2(0.197369993, 0.427329987), Vec2(0.202509999, 0.447730005), Vec2(0.174510002, 0.450219989), Vec2(0.168099999, 0.429879993), Vec2(0.182659999, 0.428039998), Vec2(0.18829, 0.448229998), Vec2(0.181649998, 0.468769997), Vec2(0.174510002, 0.450219989), Vec2(0.18829, 0.448229998), Vec2(0.194309995, 0.466969997), Vec2(0.203470007, 0.498450011), Vec2(0.199880004, 0.483830005), Vec2(0.213090003, 0.485280007), Vec2(0.217020005, 0.502390027), Vec2(0.199880004, 0.483830005), Vec2(0.194309995, 0.466969997), Vec2(0.207969993, 0.467079997), Vec2(0.213090003, 0.485280007), Vec2(0.188820004, 0.484710008), Vec2(0.181649998, 0.468769997), Vec2(0.194309995, 0.466969997), Vec2(0.199880004, 0.483830005), Vec2(0.194230005, 0.495350003), Vec2(0.188820004, 0.484710008), Vec2(0.199880004, 0.483830005), Vec2(0.203470007, 0.498450011), Vec2(0.40823999, 0.214259997), Vec2(0.409579992, 0.225759998), Vec2(0.400180012, 0.226799995), Vec2(0.401600003, 0.218140006), Vec2(0.409579992, 0.225759998), Vec2(0.409310013, 0.23928), Vec2(0.398339987, 0.239610001), Vec2(0.400180012, 0.226799995), Vec2(0.420230001, 0.222589999), Vec2(0.420819998, 0.237360001), Vec2(0.409310013, 0.23928), Vec2(0.409579992, 0.225759998), Vec2(0.418190002, 0.208949998), Vec2(0.420230001, 0.222589999), Vec2(0.409579992, 0.225759998), Vec2(0.40823999, 0.214259997), Vec2(0.409310013, 0.23928), Vec2(0.40843001, 0.254330009), Vec2(0.396519989, 0.254370004), Vec2(0.398339987, 0.239610001), Vec2(0.40843001, 0.254330009), Vec2(0.407380015, 0.270489991), Vec2(0.394899994, 0.27037999), Vec2(0.396519989, 0.254370004), Vec2(0.420599997, 0.253129989), Vec2(0.42001, 0.269749999), Vec2(0.407380015, 0.270489991), Vec2(0.40843001, 0.254330009), Vec2(0.420819998, 0.237360001), Vec2(0.420599997, 0.253129989), Vec2(0.40843001, 0.254330009), Vec2(0.409310013, 0.23928), Vec2(0.432960004, 0.234589994), Vec2(0.433129996, 0.251199991), Vec2(0.420599997, 0.253129989), Vec2(0.420819998, 0.237360001), Vec2(0.433129996, 0.251199991), Vec2(0.432870001, 0.268429995), Vec2(0.42001, 0.269749999), Vec2(0.420599997, 0.253129989), Vec2(0.446029991, 0.248999998), Vec2(0.445980012, 0.266840011), Vec2(0.432870001, 0.268429995), Vec2(0.433129996, 0.251199991), Vec2(0.445679992, 0.23161), Vec2(0.446029991, 0.248999998), Vec2(0.433129996, 0.251199991), Vec2(0.432960004, 0.234589994), Vec2(0.429830015, 0.203459993), Vec2(0.432000011, 0.218669996), Vec2(0.420230001, 0.222589999), Vec2(0.418190002, 0.208949998), Vec2(0.432000011, 0.218669996), Vec2(0.432960004, 0.234589994), Vec2(0.420819998, 0.237360001), Vec2(0.420230001, 0.222589999), Vec2(0.444660008, 0.214709997), Vec2(0.445679992, 0.23161), Vec2(0.432960004, 0.234589994), Vec2(0.432000011, 0.218669996), Vec2(0.44264999, 0.198310003), Vec2(0.444660008, 0.214709997), Vec2(0.432000011, 0.218669996), Vec2(0.429830015, 0.203459993), Vec2(0.407380015, 0.270489991), Vec2(0.406410009, 0.287449986), Vec2(0.393559992, 0.28727001), Vec2(0.394899994, 0.27037999), Vec2(0.406410009, 0.287449986), Vec2(0.405629992, 0.304960012), Vec2(0.392560005, 0.304740012), Vec2(0.393559992, 0.28727001), Vec2(0.419349998, 0.287019998), Vec2(0.418760002, 0.304780006), Vec2(0.405629992, 0.304960012), Vec2(0.406410009, 0.287449986), Vec2(0.42001, 0.269749999), Vec2(0.419349998, 0.287019998), Vec2(0.406410009, 0.287449986), Vec2(0.407380015, 0.270489991), Vec2(0.405629992, 0.304960012), Vec2(0.405119985, 0.32280001), Vec2(0.391930014, 0.32258001), Vec2(0.392560005, 0.304740012), Vec2(0.405119985, 0.32280001), Vec2(0.404920012, 0.340810001), Vec2(0.391689986, 0.340579987), Vec2(0.391930014, 0.32258001), Vec2(0.418350011, 0.322829992), Vec2(0.418179989, 0.341030002), Vec2(0.404920012, 0.340810001), Vec2(0.405119985, 0.32280001), Vec2(0.418760002, 0.304780006), Vec2(0.418350011, 0.322829992), Vec2(0.405119985, 0.32280001), Vec2(0.405629992, 0.304960012), Vec2(0.432020009, 0.304309994), Vec2(0.431690007, 0.322710007), Vec2(0.418350011, 0.322829992), Vec2(0.418760002, 0.304780006), Vec2(0.431690007, 0.322710007), Vec2(0.431549996, 0.341219991), Vec2(0.418179989, 0.341030002), Vec2(0.418350011, 0.322829992), Vec2(0.445179999, 0.322490007), Vec2(0.445060015, 0.341390014), Vec2(0.431549996, 0.341219991), Vec2(0.431690007, 0.322710007), Vec2(0.445430011, 0.303689986), Vec2(0.445179999, 0.322490007), Vec2(0.431690007, 0.322710007), Vec2(0.432020009, 0.304309994), Vec2(0.432870001, 0.268429995), Vec2(0.432440013, 0.286170006), Vec2(0.419349998, 0.287019998), Vec2(0.42001, 0.269749999), Vec2(0.432440013, 0.286170006), Vec2(0.432020009, 0.304309994), Vec2(0.418760002, 0.304780006), Vec2(0.419349998, 0.287019998), Vec2(0.445730001, 0.285100013), Vec2(0.445430011, 0.303689986), Vec2(0.432020009, 0.304309994), Vec2(0.432440013, 0.286170006), Vec2(0.445980012, 0.266840011), Vec2(0.445730001, 0.285100013), Vec2(0.432440013, 0.286170006), Vec2(0.432870001, 0.268429995), Vec2(0.459340006, 0.265280008), Vec2(0.459210008, 0.284009993), Vec2(0.445730001, 0.285100013), Vec2(0.445980012, 0.266840011), Vec2(0.459210008, 0.284009993), Vec2(0.458999991, 0.30302), Vec2(0.445430011, 0.303689986), Vec2(0.445730001, 0.285100013), Vec2(0.472840011, 0.283050001), Vec2(0.472710013, 0.30241999), Vec2(0.458999991, 0.30302), Vec2(0.459210008, 0.284009993), Vec2(0.472909987, 0.263940006), Vec2(0.472840011, 0.283050001), Vec2(0.459210008, 0.284009993), Vec2(0.459340006, 0.265280008), Vec2(0.458999991, 0.30302), Vec2(0.458819985, 0.322230011), Vec2(0.445179999, 0.322490007), Vec2(0.445430011, 0.303689986), Vec2(0.458819985, 0.322230011), Vec2(0.458730012, 0.341520011), Vec2(0.445060015, 0.341390014), Vec2(0.445179999, 0.322490007), Vec2(0.472589999, 0.321969986), Vec2(0.472530007, 0.341619998), Vec2(0.458730012, 0.341520011), Vec2(0.458819985, 0.322230011), Vec2(0.472710013, 0.30241999), Vec2(0.472589999, 0.321969986), Vec2(0.458819985, 0.322230011), Vec2(0.458999991, 0.30302), Vec2(0.486530006, 0.301999986), Vec2(0.486470014, 0.32179001), Vec2(0.472589999, 0.321969986), Vec2(0.472710013, 0.30241999), Vec2(0.486470014, 0.32179001), Vec2(0.486429989, 0.341670007), Vec2(0.472530007, 0.341619998), Vec2(0.472589999, 0.321969986), Vec2(0.500389993, 0.321709991), Vec2(0.500389993, 0.341690004), Vec2(0.486429989, 0.341670007), Vec2(0.486470014, 0.32179001), Vec2(0.500389993, 0.301829994), Vec2(0.500389993, 0.321709991), Vec2(0.486470014, 0.32179001), Vec2(0.486530006, 0.301999986), Vec2(0.486620009, 0.263029993), Vec2(0.486589998, 0.282389998), Vec2(0.472840011, 0.283050001), Vec2(0.472909987, 0.263940006), Vec2(0.486589998, 0.282389998), Vec2(0.486530006, 0.301999986), Vec2(0.472710013, 0.30241999), Vec2(0.472840011, 0.283050001), Vec2(0.500389993, 0.282130003), Vec2(0.500389993, 0.301829994), Vec2(0.486530006, 0.301999986), Vec2(0.486589998, 0.282389998), Vec2(0.500389993, 0.26267001), Vec2(0.500389993, 0.282130003), Vec2(0.486589998, 0.282389998), Vec2(0.486620009, 0.263029993), Vec2(0.456360012, 0.193859994), Vec2(0.458009988, 0.21119), Vec2(0.444660008, 0.214709997), Vec2(0.44264999, 0.198310003), Vec2(0.458009988, 0.21119), Vec2(0.458920002, 0.228850007), Vec2(0.445679992, 0.23161), Vec2(0.444660008, 0.214709997), Vec2(0.471870005, 0.208409995), Vec2(0.472539991, 0.226630002), Vec2(0.458920002, 0.228850007), Vec2(0.458009988, 0.21119), Vec2(0.470699996, 0.190410003), Vec2(0.471870005, 0.208409995), Vec2(0.458009988, 0.21119), Vec2(0.456360012, 0.193859994), Vec2(0.458920002, 0.228850007), Vec2(0.459300011, 0.246879995), Vec2(0.446029991, 0.248999998), Vec2(0.445679992, 0.23161), Vec2(0.459300011, 0.246879995), Vec2(0.459340006, 0.265280008), Vec2(0.445980012, 0.266840011), Vec2(0.446029991, 0.248999998), Vec2(0.472840011, 0.245130002), Vec2(0.472909987, 0.263940006), Vec2(0.459340006, 0.265280008), Vec2(0.459300011, 0.246879995), Vec2(0.472539991, 0.226630002), Vec2(0.472840011, 0.245130002), Vec2(0.459300011, 0.246879995), Vec2(0.458920002, 0.228850007), Vec2(0.486409992, 0.225170001), Vec2(0.486570001, 0.243959993), Vec2(0.472840011, 0.245130002), Vec2(0.472539991, 0.226630002), Vec2(0.486570001, 0.243959993), Vec2(0.486620009, 0.263029993), Vec2(0.472909987, 0.263940006), Vec2(0.472840011, 0.245130002), Vec2(0.500389993, 0.243509993), Vec2(0.500389993, 0.26267001), Vec2(0.486620009, 0.263029993), Vec2(0.486570001, 0.243959993), Vec2(0.500389993, 0.224610001), Vec2(0.500389993, 0.243509993), Vec2(0.486570001, 0.243959993), Vec2(0.486409992, 0.225170001), Vec2(0.485439986, 0.188199997), Vec2(0.48605001, 0.206609994), Vec2(0.471870005, 0.208409995), Vec2(0.470699996, 0.190410003), Vec2(0.48605001, 0.206609994), Vec2(0.486409992, 0.225170001), Vec2(0.472539991, 0.226630002), Vec2(0.471870005, 0.208409995), Vec2(0.500389993, 0.205939993), Vec2(0.500389993, 0.224610001), Vec2(0.486409992, 0.225170001), Vec2(0.48605001, 0.206609994), Vec2(0.500389993, 0.187380001), Vec2(0.500389993, 0.205939993), Vec2(0.48605001, 0.206609994), Vec2(0.485439986, 0.188199997), Vec2(0.404920012, 0.340810001), Vec2(0.405030012, 0.358819991), Vec2(0.391840011, 0.358579993), Vec2(0.391689986, 0.340579987), Vec2(0.405030012, 0.358819991), Vec2(0.40546, 0.376670003), Vec2(0.392369986, 0.376419991), Vec2(0.391840011, 0.358579993), Vec2(0.418269992, 0.359230012), Vec2(0.418599993, 0.377279997), Vec2(0.40546, 0.376670003), Vec2(0.405030012, 0.358819991), Vec2(0.418179989, 0.341030002), Vec2(0.418269992, 0.359230012), Vec2(0.405030012, 0.358819991), Vec2(0.404920012, 0.340810001), Vec2(0.40546, 0.376670003), Vec2(0.40614, 0.39418), Vec2(0.393269986, 0.393909991), Vec2(0.392369986, 0.376419991), Vec2(0.40614, 0.39418), Vec2(0.407000005, 0.411139995), Vec2(0.394499987, 0.410809994), Vec2(0.393269986, 0.393909991), Vec2(0.419090003, 0.395029992), Vec2(0.419660002, 0.412299991), Vec2(0.407000005, 0.411139995), Vec2(0.40614, 0.39418), Vec2(0.418599993, 0.377279997), Vec2(0.419090003, 0.395029992), Vec2(0.40614, 0.39418), Vec2(0.40546, 0.376670003), Vec2(0.431870013, 0.378129989), Vec2(0.432209998, 0.396259993), Vec2(0.419090003, 0.395029992), Vec2(0.418599993, 0.377279997), Vec2(0.432209998, 0.396259993), Vec2(0.432550013, 0.413989991), Vec2(0.419660002, 0.412299991), Vec2(0.419090003, 0.395029992), Vec2(0.445520014, 0.397650003), Vec2(0.44569999, 0.415879995), Vec2(0.432550013, 0.413989991), Vec2(0.432209998, 0.396259993), Vec2(0.445289999, 0.379079998), Vec2(0.445520014, 0.397650003), Vec2(0.432209998, 0.396259993), Vec2(0.431870013, 0.378129989), Vec2(0.431549996, 0.341219991), Vec2(0.431620002, 0.359739989), Vec2(0.418269992, 0.359230012), Vec2(0.418179989, 0.341030002), Vec2(0.431620002, 0.359739989), Vec2(0.431870013, 0.378129989), Vec2(0.418599993, 0.377279997), Vec2(0.418269992, 0.359230012), Vec2(0.445109993, 0.360289991), Vec2(0.445289999, 0.379079998), Vec2(0.431870013, 0.378129989), Vec2(0.431620002, 0.359739989), Vec2(0.445060015, 0.341390014), Vec2(0.445109993, 0.360289991), Vec2(0.431620002, 0.359739989), Vec2(0.431549996, 0.341219991), Vec2(0.407000005, 0.411139995), Vec2(0.40794, 0.427300006), Vec2(0.395999998, 0.426840007), Vec2(0.394499987, 0.410809994), Vec2(0.40794, 0.427300006), Vec2(0.408710003, 0.442330003), Vec2(0.397700012, 0.441610008), Vec2(0.395999998, 0.426840007), Vec2(0.420139998, 0.42888999), Vec2(0.420249999, 0.44461), Vec2(0.408710003, 0.442330003), Vec2(0.40794, 0.427300006), Vec2(0.419660002, 0.412299991), Vec2(0.420139998, 0.42888999), Vec2(0.40794, 0.427300006), Vec2(0.407000005, 0.411139995), Vec2(0.408710003, 0.442330003), Vec2(0.408850014, 0.455799997), Vec2(0.399419993, 0.454439998), Vec2(0.397700012, 0.441610008), Vec2(0.408850014, 0.455799997), Vec2(0.407389998, 0.467159986), Vec2(0.400750011, 0.463099986), Vec2(0.399419993, 0.454439998), Vec2(0.419539988, 0.45927), Vec2(0.417360008, 0.472730011), Vec2(0.407389998, 0.467159986), Vec2(0.408850014, 0.455799997), Vec2(0.420249999, 0.44461), Vec2(0.419539988, 0.45927), Vec2(0.408850014, 0.455799997), Vec2(0.408710003, 0.442330003), Vec2(0.432429999, 0.447699994), Vec2(0.431360006, 0.463499993), Vec2(0.419539988, 0.45927), Vec2(0.420249999, 0.44461), Vec2(0.431360006, 0.463499993), Vec2(0.429049999, 0.478509992), Vec2(0.417360008, 0.472730011), Vec2(0.419539988, 0.45927), Vec2(0.444110006, 0.467729986), Vec2(0.441960007, 0.483940005), Vec2(0.429049999, 0.478509992), Vec2(0.431360006, 0.463499993), Vec2(0.445230007, 0.450969994), Vec2(0.444110006, 0.467729986), Vec2(0.431360006, 0.463499993), Vec2(0.432429999, 0.447699994), Vec2(0.432550013, 0.413989991), Vec2(0.432709992, 0.431169987), Vec2(0.420139998, 0.42888999), Vec2(0.419660002, 0.412299991), Vec2(0.432709992, 0.431169987), Vec2(0.432429999, 0.447699994), Vec2(0.420249999, 0.44461), Vec2(0.420139998, 0.42888999), Vec2(0.445670009, 0.433670014), Vec2(0.445230007, 0.450969994), Vec2(0.432429999, 0.447699994), Vec2(0.432709992, 0.431169987), Vec2(0.44569999, 0.415879995), Vec2(0.445670009, 0.433670014), Vec2(0.432709992, 0.431169987), Vec2(0.432550013, 0.413989991), Vec2(0.459109992, 0.417690009), Vec2(0.459010005, 0.43603), Vec2(0.445670009, 0.433670014), Vec2(0.44569999, 0.415879995), Vec2(0.459010005, 0.43603), Vec2(0.45855999, 0.453960001), Vec2(0.445230007, 0.450969994), Vec2(0.445670009, 0.433670014), Vec2(0.472640008, 0.437940001), Vec2(0.472290009, 0.456349999), Vec2(0.45855999, 0.453960001), Vec2(0.459010005, 0.43603), Vec2(0.472750008, 0.419200003), Vec2(0.472640008, 0.437940001), Vec2(0.459010005, 0.43603), Vec2(0.459109992, 0.417690009), Vec2(0.45855999, 0.453960001), Vec2(0.457569987, 0.471489996), Vec2(0.444110006, 0.467729986), Vec2(0.445230007, 0.450969994), Vec2(0.457569987, 0.471489996), Vec2(0.455799997, 0.488629997), Vec2(0.441960007, 0.483940005), Vec2(0.444110006, 0.467729986), Vec2(0.471569985, 0.474440008), Vec2(0.470310003, 0.492269993), Vec2(0.455799997, 0.488629997), Vec2(0.457569987, 0.471489996), Vec2(0.472290009, 0.456349999), Vec2(0.471569985, 0.474440008), Vec2(0.457569987, 0.471489996), Vec2(0.45855999, 0.453960001), Vec2(0.48627001, 0.457899988), Vec2(0.485900015, 0.476350009), Vec2(0.471569985, 0.474440008), Vec2(0.472290009, 0.456349999), Vec2(0.485900015, 0.476350009), Vec2(0.485249996, 0.494610012), Vec2(0.470310003, 0.492269993), Vec2(0.471569985, 0.474440008), Vec2(0.500389993, 0.476999998), Vec2(0.500389993, 0.49544999), Vec2(0.485249996, 0.494610012), Vec2(0.485900015, 0.476350009), Vec2(0.500389993, 0.458429992), Vec2(0.500389993, 0.476999998), Vec2(0.485900015, 0.476350009), Vec2(0.48627001, 0.457899988), Vec2(0.486530006, 0.42019999), Vec2(0.48646, 0.439200014), Vec2(0.472640008, 0.437940001), Vec2(0.472750008, 0.419200003), Vec2(0.48646, 0.439200014), Vec2(0.48627001, 0.457899988), Vec2(0.472290009, 0.456349999), Vec2(0.472640008, 0.437940001), Vec2(0.500389993, 0.439639986), Vec2(0.500389993, 0.458429992), Vec2(0.48627001, 0.457899988), Vec2(0.48646, 0.439200014), Vec2(0.500389993, 0.420549989), Vec2(0.500389993, 0.439639986), Vec2(0.48646, 0.439200014), Vec2(0.486530006, 0.42019999), Vec2(0.458730012, 0.341520011), Vec2(0.458759993, 0.360819995), Vec2(0.445109993, 0.360289991), Vec2(0.445060015, 0.341390014), Vec2(0.458759993, 0.360819995), Vec2(0.458889991, 0.380010009), Vec2(0.445289999, 0.379079998), Vec2(0.445109993, 0.360289991), Vec2(0.472550005, 0.361259997), Vec2(0.472629994, 0.380789995), Vec2(0.458889991, 0.380010009), Vec2(0.458759993, 0.360819995), Vec2(0.472530007, 0.341619998), Vec2(0.472550005, 0.361259997), Vec2(0.458759993, 0.360819995), Vec2(0.458730012, 0.341520011), Vec2(0.458889991, 0.380010009), Vec2(0.459039986, 0.398999989), Vec2(0.445520014, 0.397650003), Vec2(0.445289999, 0.379079998), Vec2(0.459039986, 0.398999989), Vec2(0.459109992, 0.417690009), Vec2(0.44569999, 0.415879995), Vec2(0.445520014, 0.397650003), Vec2(0.472719997, 0.400130004), Vec2(0.472750008, 0.419200003), Vec2(0.459109992, 0.417690009), Vec2(0.459039986, 0.398999989), Vec2(0.472629994, 0.380789995), Vec2(0.472719997, 0.400130004), Vec2(0.459039986, 0.398999989), Vec2(0.458889991, 0.380010009), Vec2(0.486479998, 0.38132), Vec2(0.486519992, 0.400889993), Vec2(0.472719997, 0.400130004), Vec2(0.472629994, 0.380789995), Vec2(0.486519992, 0.400889993), Vec2(0.486530006, 0.42019999), Vec2(0.472750008, 0.419200003), Vec2(0.472719997, 0.400130004), Vec2(0.500389993, 0.401169986), Vec2(0.500389993, 0.420549989), Vec2(0.486530006, 0.42019999), Vec2(0.486519992, 0.400889993), Vec2(0.500389993, 0.38150999), Vec2(0.500389993, 0.401169986), Vec2(0.486519992, 0.400889993), Vec2(0.486479998, 0.38132), Vec2(0.486429989, 0.341670007), Vec2(0.486440003, 0.361550003), Vec2(0.472550005, 0.361259997), Vec2(0.472530007, 0.341619998), Vec2(0.486440003, 0.361550003), Vec2(0.486479998, 0.38132), Vec2(0.472629994, 0.380789995), Vec2(0.472550005, 0.361259997), Vec2(0.500389993, 0.361660004), Vec2(0.500389993, 0.38150999), Vec2(0.486479998, 0.38132), Vec2(0.486440003, 0.361550003), Vec2(0.500389993, 0.341690004), Vec2(0.500389993, 0.361660004), Vec2(0.486440003, 0.361550003), Vec2(0.486429989, 0.341670007), Vec2(0.514370024, 0.34167999), Vec2(0.514360011, 0.361570001), Vec2(0.500389993, 0.361660004), Vec2(0.500389993, 0.341690004), Vec2(0.514360011, 0.361570001), Vec2(0.514310002, 0.381350011), Vec2(0.500389993, 0.38150999), Vec2(0.500389993, 0.361660004), Vec2(0.528249979, 0.36135), Vec2(0.528159976, 0.380919993), Vec2(0.514310002, 0.381350011), Vec2(0.514360011, 0.361570001), Vec2(0.52828002, 0.341670007), Vec2(0.528249979, 0.36135), Vec2(0.514360011, 0.361570001), Vec2(0.514370024, 0.34167999), Vec2(0.514310002, 0.381350011), Vec2(0.514259994, 0.400929987), Vec2(0.500389993, 0.401169986), Vec2(0.500389993, 0.38150999), Vec2(0.514259994, 0.400929987), Vec2(0.51424998, 0.420240015), Vec2(0.500389993, 0.420549989), Vec2(0.500389993, 0.401169986), Vec2(0.528069973, 0.400290012), Vec2(0.528020024, 0.419380009), Vec2(0.51424998, 0.420240015), Vec2(0.514259994, 0.400929987), Vec2(0.528159976, 0.380919993), Vec2(0.528069973, 0.400290012), Vec2(0.514259994, 0.400929987), Vec2(0.514310002, 0.381350011), Vec2(0.541880012, 0.380290002), Vec2(0.541719973, 0.399340004), Vec2(0.528069973, 0.400290012), Vec2(0.528159976, 0.380919993), Vec2(0.541719973, 0.399340004), Vec2(0.54163003, 0.418099999), Vec2(0.528020024, 0.419380009), Vec2(0.528069973, 0.400290012), Vec2(0.555180013, 0.398220003), Vec2(0.55497998, 0.41655001), Vec2(0.54163003, 0.418099999), Vec2(0.541719973, 0.399340004), Vec2(0.555419981, 0.379559994), Vec2(0.555180013, 0.398220003), Vec2(0.541719973, 0.399340004), Vec2(0.541880012, 0.380290002), Vec2(0.542050004, 0.341659993), Vec2(0.542010009, 0.361030012), Vec2(0.528249979, 0.36135), Vec2(0.52828002, 0.341670007), Vec2(0.542010009, 0.361030012), Vec2(0.541880012, 0.380290002), Vec2(0.528159976, 0.380919993), Vec2(0.528249979, 0.36135), Vec2(0.555599988, 0.360659987), Vec2(0.555419981, 0.379559994), Vec2(0.541880012, 0.380290002), Vec2(0.542010009, 0.361030012), Vec2(0.555649996, 0.341650009), Vec2(0.555599988, 0.360659987), Vec2(0.542010009, 0.361030012), Vec2(0.542050004, 0.341659993), Vec2(0.51424998, 0.420240015), Vec2(0.514299989, 0.439249992), Vec2(0.500389993, 0.439639986), Vec2(0.500389993, 0.420549989), Vec2(0.514299989, 0.439249992), Vec2(0.514469981, 0.457969993), Vec2(0.500389993, 0.458429992), Vec2(0.500389993, 0.439639986), Vec2(0.528110027, 0.438169986), Vec2(0.528419971, 0.456629992), Vec2(0.514469981, 0.457969993), Vec2(0.514299989, 0.439249992), Vec2(0.528020024, 0.419380009), Vec2(0.528110027, 0.438169986), Vec2(0.514299989, 0.439249992), Vec2(0.51424998, 0.420240015), Vec2(0.514469981, 0.457969993), Vec2(0.51481998, 0.476440012), Vec2(0.500389993, 0.476999998), Vec2(0.500389993, 0.458429992), Vec2(0.51481998, 0.476440012), Vec2(0.51542002, 0.494789988), Vec2(0.500389993, 0.49544999), Vec2(0.500389993, 0.476999998), Vec2(0.529079974, 0.474819988), Vec2(0.530219972, 0.492810011), Vec2(0.51542002, 0.494789988), Vec2(0.51481998, 0.476440012), Vec2(0.528419971, 0.456629992), Vec2(0.529079974, 0.474819988), Vec2(0.51481998, 0.476440012), Vec2(0.514469981, 0.457969993), Vec2(0.542089999, 0.454540014), Vec2(0.542980015, 0.472220004), Vec2(0.529079974, 0.474819988), Vec2(0.528419971, 0.456629992), Vec2(0.542980015, 0.472220004), Vec2(0.544579983, 0.489589989), Vec2(0.530219972, 0.492810011), Vec2(0.529079974, 0.474819988), Vec2(0.556349993, 0.468840003), Vec2(0.558290005, 0.485320002), Vec2(0.544579983, 0.489589989), Vec2(0.542980015, 0.472220004), Vec2(0.555329978, 0.451889992), Vec2(0.556349993, 0.468840003), Vec2(0.542980015, 0.472220004), Vec2(0.542089999, 0.454540014), Vec2(0.54163003, 0.418099999), Vec2(0.541700006, 0.436500013), Vec2(0.528110027, 0.438169986), Vec2(0.528020024, 0.419380009), Vec2(0.541700006, 0.436500013), Vec2(0.542089999, 0.454540014), Vec2(0.528419971, 0.456629992), Vec2(0.528110027, 0.438169986), Vec2(0.554970026, 0.434450001), Vec2(0.555329978, 0.451889992), Vec2(0.542089999, 0.454540014), Vec2(0.541700006, 0.436500013), Vec2(0.55497998, 0.41655001), Vec2(0.554970026, 0.434450001), Vec2(0.541700006, 0.436500013), Vec2(0.54163003, 0.418099999), Vec2(0.568040013, 0.414950013), Vec2(0.56783998, 0.43226999), Vec2(0.554970026, 0.434450001), Vec2(0.55497998, 0.41655001), Vec2(0.56783998, 0.43226999), Vec2(0.568040013, 0.44896999), Vec2(0.555329978, 0.451889992), Vec2(0.554970026, 0.434450001), Vec2(0.58029002, 0.430319995), Vec2(0.580110013, 0.446209997), Vec2(0.568040013, 0.44896999), Vec2(0.56783998, 0.43226999), Vec2(0.58081001, 0.41358), Vec2(0.58029002, 0.430319995), Vec2(0.56783998, 0.43226999), Vec2(0.568040013, 0.414950013), Vec2(0.568040013, 0.44896999), Vec2(0.568989992, 0.464980006), Vec2(0.556349993, 0.468840003), Vec2(0.555329978, 0.451889992), Vec2(0.568989992, 0.464980006), Vec2(0.571099997, 0.480280012), Vec2(0.558290005, 0.485320002), Vec2(0.556349993, 0.468840003), Vec2(0.580709994, 0.461080015), Vec2(0.582710028, 0.474830002), Vec2(0.571099997, 0.480280012), Vec2(0.568989992, 0.464980006), Vec2(0.580110013, 0.446209997), Vec2(0.580709994, 0.461080015), Vec2(0.568989992, 0.464980006), Vec2(0.568040013, 0.44896999), Vec2(0.591530025, 0.444249988), Vec2(0.591300011, 0.457899988), Vec2(0.580709994, 0.461080015), Vec2(0.580110013, 0.446209997), Vec2(0.591300011, 0.457899988), Vec2(0.592630029, 0.469500005), Vec2(0.582710028, 0.474830002), Vec2(0.580709994, 0.461080015), Vec2(0.600619972, 0.456800014), Vec2(0.599250019, 0.465579987), Vec2(0.592630029, 0.469500005), Vec2(0.591300011, 0.457899988), Vec2(0.602400005, 0.443830013), Vec2(0.600619972, 0.456800014), Vec2(0.591300011, 0.457899988), Vec2(0.591530025, 0.444249988), Vec2(0.593330026, 0.412739992), Vec2(0.59236002, 0.429049999), Vec2(0.58029002, 0.430319995), Vec2(0.58081001, 0.41358), Vec2(0.59236002, 0.429049999), Vec2(0.591530025, 0.444249988), Vec2(0.580110013, 0.446209997), Vec2(0.58029002, 0.430319995), Vec2(0.604139984, 0.428909987), Vec2(0.602400005, 0.443830013), Vec2(0.591530025, 0.444249988), Vec2(0.59236002, 0.429049999), Vec2(0.605679989, 0.412710011), Vec2(0.604139984, 0.428909987), Vec2(0.59236002, 0.429049999), Vec2(0.593330026, 0.412739992), Vec2(0.569060028, 0.341659993), Vec2(0.569000006, 0.360320002), Vec2(0.555599988, 0.360659987), Vec2(0.555649996, 0.341650009), Vec2(0.569000006, 0.360320002), Vec2(0.568759978, 0.378839999), Vec2(0.555419981, 0.379559994), Vec2(0.555599988, 0.360659987), Vec2(0.582220018, 0.360040009), Vec2(0.581900001, 0.378259987), Vec2(0.568759978, 0.378839999), Vec2(0.569000006, 0.360320002), Vec2(0.582300007, 0.34167999), Vec2(0.582220018, 0.360040009), Vec2(0.569000006, 0.360320002), Vec2(0.569060028, 0.341659993), Vec2(0.568759978, 0.378839999), Vec2(0.568400025, 0.397100002), Vec2(0.555180013, 0.398220003), Vec2(0.555419981, 0.379559994), Vec2(0.568400025, 0.397100002), Vec2(0.568040013, 0.414950013), Vec2(0.55497998, 0.41655001), Vec2(0.555180013, 0.398220003), Vec2(0.581399977, 0.396160007), Vec2(0.58081001, 0.41358), Vec2(0.568040013, 0.414950013), Vec2(0.568400025, 0.397100002), Vec2(0.581900001, 0.378259987), Vec2(0.581399977, 0.396160007), Vec2(0.568400025, 0.397100002), Vec2(0.568759978, 0.378839999), Vec2(0.594889998, 0.377929986), Vec2(0.594210029, 0.395610005), Vec2(0.581399977, 0.396160007), Vec2(0.581900001, 0.378259987), Vec2(0.594210029, 0.395610005), Vec2(0.593330026, 0.412739992), Vec2(0.58081001, 0.41358), Vec2(0.581399977, 0.396160007), Vec2(0.60690999, 0.395639986), Vec2(0.605679989, 0.412710011), Vec2(0.593330026, 0.412739992), Vec2(0.594210029, 0.395610005), Vec2(0.60781002, 0.37797001), Vec2(0.60690999, 0.395639986), Vec2(0.594210029, 0.395610005), Vec2(0.594889998, 0.377929986), Vec2(0.595399976, 0.341699988), Vec2(0.595300019, 0.359899998), Vec2(0.582220018, 0.360040009), Vec2(0.582300007, 0.34167999), Vec2(0.595300019, 0.359899998), Vec2(0.594889998, 0.377929986), Vec2(0.581900001, 0.378259987), Vec2(0.582220018, 0.360040009), Vec2(0.608319998, 0.359939992), Vec2(0.60781002, 0.37797001), Vec2(0.594889998, 0.377929986), Vec2(0.595300019, 0.359899998), Vec2(0.608460009, 0.341729999), Vec2(0.608319998, 0.359939992), Vec2(0.595300019, 0.359899998), Vec2(0.595399976, 0.341699988), Vec2(0.515349984, 0.188010007), Vec2(0.514750004, 0.20645), Vec2(0.500389993, 0.205939993), Vec2(0.500389993, 0.187380001), Vec2(0.514750004, 0.20645), Vec2(0.514400005, 0.225030005), Vec2(0.500389993, 0.224610001), Vec2(0.500389993, 0.205939993), Vec2(0.528930008, 0.208079994), Vec2(0.528270006, 0.226349995), Vec2(0.514400005, 0.225030005), Vec2(0.514750004, 0.20645), Vec2(0.530099988, 0.190019995), Vec2(0.528930008, 0.208079994), Vec2(0.514750004, 0.20645), Vec2(0.515349984, 0.188010007), Vec2(0.514400005, 0.225030005), Vec2(0.514230013, 0.243839994), Vec2(0.500389993, 0.243509993), Vec2(0.500389993, 0.224610001), Vec2(0.514230013, 0.243839994), Vec2(0.514190018, 0.26293999), Vec2(0.500389993, 0.26267001), Vec2(0.500389993, 0.243509993), Vec2(0.527970016, 0.244910002), Vec2(0.527899981, 0.263770014), Vec2(0.514190018, 0.26293999), Vec2(0.514230013, 0.243839994), Vec2(0.528270006, 0.226349995), Vec2(0.527970016, 0.244910002), Vec2(0.514230013, 0.243839994), Vec2(0.514400005, 0.225030005), Vec2(0.541869998, 0.22845), Vec2(0.541490018, 0.246560007), Vec2(0.527970016, 0.244910002), Vec2(0.528270006, 0.226349995), Vec2(0.541490018, 0.246560007), Vec2(0.54144001, 0.265049994), Vec2(0.527899981, 0.263770014), Vec2(0.527970016, 0.244910002), Vec2(0.554700017, 0.248630002), Vec2(0.554740012, 0.266600013), Vec2(0.54144001, 0.265049994), Vec2(0.541490018, 0.246560007), Vec2(0.555060029, 0.231140003), Vec2(0.554700017, 0.248630002), Vec2(0.541490018, 0.246560007), Vec2(0.541869998, 0.22845), Vec2(0.544420004, 0.193299994), Vec2(0.542779982, 0.210710004), Vec2(0.528930008, 0.208079994), Vec2(0.530099988, 0.190019995), Vec2(0.542779982, 0.210710004), Vec2(0.541869998, 0.22845), Vec2(0.528270006, 0.226349995), Vec2(0.528930008, 0.208079994), Vec2(0.556089997, 0.214139998), Vec2(0.555060029, 0.231140003), Vec2(0.541869998, 0.22845), Vec2(0.542779982, 0.210710004), Vec2(0.558099985, 0.19765), Vec2(0.556089997, 0.214139998), Vec2(0.542779982, 0.210710004), Vec2(0.544420004, 0.193299994), Vec2(0.514190018, 0.26293999), Vec2(0.514219999, 0.282319993), Vec2(0.500389993, 0.282130003), Vec2(0.500389993, 0.26267001), Vec2(0.514219999, 0.282319993), Vec2(0.514280021, 0.301959991), Vec2(0.500389993, 0.301829994), Vec2(0.500389993, 0.282130003), Vec2(0.527970016, 0.28294), Vec2(0.528100014, 0.302370012), Vec2(0.514280021, 0.301959991), Vec2(0.514219999, 0.282319993), Vec2(0.527899981, 0.263770014), Vec2(0.527970016, 0.28294), Vec2(0.514219999, 0.282319993), Vec2(0.514190018, 0.26293999), Vec2(0.514280021, 0.301959991), Vec2(0.514339983, 0.321770012), Vec2(0.500389993, 0.321709991), Vec2(0.500389993, 0.301829994), Vec2(0.514339983, 0.321770012), Vec2(0.514370024, 0.34167999), Vec2(0.500389993, 0.341690004), Vec2(0.500389993, 0.321709991), Vec2(0.528219998, 0.321969986), Vec2(0.52828002, 0.341670007), Vec2(0.514370024, 0.34167999), Vec2(0.514339983, 0.321770012), Vec2(0.528100014, 0.302370012), Vec2(0.528219998, 0.321969986), Vec2(0.514339983, 0.321770012), Vec2(0.514280021, 0.301959991), Vec2(0.541779995, 0.302980006), Vec2(0.541960001, 0.322270006), Vec2(0.528219998, 0.321969986), Vec2(0.528100014, 0.302370012), Vec2(0.541960001, 0.322270006), Vec2(0.542050004, 0.341659993), Vec2(0.52828002, 0.341670007), Vec2(0.528219998, 0.321969986), Vec2(0.555530012, 0.322629988), Vec2(0.555649996, 0.341650009), Vec2(0.542050004, 0.341659993), Vec2(0.541960001, 0.322270006), Vec2(0.55528003, 0.303710014), Vec2(0.555530012, 0.322629988), Vec2(0.541960001, 0.322270006), Vec2(0.541779995, 0.302980006), Vec2(0.54144001, 0.265049994), Vec2(0.541580021, 0.283870012), Vec2(0.527970016, 0.28294), Vec2(0.527899981, 0.263770014), Vec2(0.541580021, 0.283870012), Vec2(0.541779995, 0.302980006), Vec2(0.528100014, 0.302370012), Vec2(0.527970016, 0.28294), Vec2(0.55497998, 0.284990013), Vec2(0.55528003, 0.303710014), Vec2(0.541779995, 0.302980006), Vec2(0.541580021, 0.283870012), Vec2(0.554740012, 0.266600013), Vec2(0.55497998, 0.284990013), Vec2(0.541580021, 0.283870012), Vec2(0.54144001, 0.265049994), Vec2(0.567749977, 0.268229991), Vec2(0.568159997, 0.286139995), Vec2(0.55497998, 0.284990013), Vec2(0.554740012, 0.266600013), Vec2(0.568159997, 0.286139995), Vec2(0.568579972, 0.304439992), Vec2(0.55528003, 0.303710014), Vec2(0.55497998, 0.284990013), Vec2(0.581120014, 0.287120014), Vec2(0.581700027, 0.305070013), Vec2(0.568579972, 0.304439992), Vec2(0.568159997, 0.286139995), Vec2(0.58047998, 0.269659996), Vec2(0.581120014, 0.287120014), Vec2(0.568159997, 0.286139995), Vec2(0.567749977, 0.268229991), Vec2(0.568579972, 0.304439992), Vec2(0.568910003, 0.32299), Vec2(0.555530012, 0.322629988), Vec2(0.55528003, 0.303710014), Vec2(0.568910003, 0.32299), Vec2(0.569060028, 0.341659993), Vec2(0.555649996, 0.341650009), Vec2(0.555530012, 0.322629988), Vec2(0.582109988, 0.323300004), Vec2(0.582300007, 0.34167999), Vec2(0.569060028, 0.341659993), Vec2(0.568910003, 0.32299), Vec2(0.581700027, 0.305070013), Vec2(0.582109988, 0.323300004), Vec2(0.568910003, 0.32299), Vec2(0.568579972, 0.304439992), Vec2(0.594669998, 0.305449992), Vec2(0.595189989, 0.323500007), Vec2(0.582109988, 0.323300004), Vec2(0.581700027, 0.305070013), Vec2(0.595189989, 0.323500007), Vec2(0.595399976, 0.341699988), Vec2(0.582300007, 0.34167999), Vec2(0.582109988, 0.323300004), Vec2(0.608200014, 0.323529989), Vec2(0.608460009, 0.341729999), Vec2(0.595399976, 0.341699988), Vec2(0.595189989, 0.323500007), Vec2(0.607569993, 0.305489987), Vec2(0.608200014, 0.323529989), Vec2(0.595189989, 0.323500007), Vec2(0.594669998, 0.305449992), Vec2(0.59296, 0.270579994), Vec2(0.593900025, 0.287739992), Vec2(0.581120014, 0.287120014), Vec2(0.58047998, 0.269659996), Vec2(0.593900025, 0.287739992), Vec2(0.594669998, 0.305449992), Vec2(0.581700027, 0.305070013), Vec2(0.581120014, 0.287120014), Vec2(0.606580019, 0.287800014), Vec2(0.607569993, 0.305489987), Vec2(0.594669998, 0.305449992), Vec2(0.593900025, 0.287739992), Vec2(0.605279982, 0.270709991), Vec2(0.606580019, 0.287800014), Vec2(0.593900025, 0.287739992), Vec2(0.59296, 0.270579994), Vec2(0.570869982, 0.202779993), Vec2(0.568690002, 0.21807), Vec2(0.556089997, 0.214139998), Vec2(0.558099985, 0.19765), Vec2(0.568690002, 0.21807), Vec2(0.567719996, 0.234109998), Vec2(0.555060029, 0.231140003), Vec2(0.556089997, 0.214139998), Vec2(0.580380023, 0.222039998), Vec2(0.579750001, 0.236929998), Vec2(0.567719996, 0.234109998), Vec2(0.568690002, 0.21807), Vec2(0.582449973, 0.208340004), Vec2(0.580380023, 0.222039998), Vec2(0.568690002, 0.21807), Vec2(0.570869982, 0.202779993), Vec2(0.567719996, 0.234109998), Vec2(0.567520022, 0.250849992), Vec2(0.554700017, 0.248630002), Vec2(0.555060029, 0.231140003), Vec2(0.567520022, 0.250849992), Vec2(0.567749977, 0.268229991), Vec2(0.554740012, 0.266600013), Vec2(0.554700017, 0.248630002), Vec2(0.579930007, 0.25286001), Vec2(0.58047998, 0.269659996), Vec2(0.567749977, 0.268229991), Vec2(0.567520022, 0.250849992), Vec2(0.579750001, 0.236929998), Vec2(0.579930007, 0.25286001), Vec2(0.567520022, 0.250849992), Vec2(0.567719996, 0.234109998), Vec2(0.591139972, 0.238989994), Vec2(0.591960013, 0.254220009), Vec2(0.579930007, 0.25286001), Vec2(0.579750001, 0.236929998), Vec2(0.591960013, 0.254220009), Vec2(0.59296, 0.270579994), Vec2(0.58047998, 0.269659996), Vec2(0.579930007, 0.25286001), Vec2(0.603709996, 0.254489988), Vec2(0.605279982, 0.270709991), Vec2(0.59296, 0.270579994), Vec2(0.591960013, 0.254220009), Vec2(0.601979971, 0.239529997), Vec2(0.603709996, 0.254489988), Vec2(0.591960013, 0.254220009), Vec2(0.591139972, 0.238989994), Vec2(0.592339993, 0.213760003), Vec2(0.590939999, 0.225309998), Vec2(0.580380023, 0.222039998), Vec2(0.582449973, 0.208340004), Vec2(0.590939999, 0.225309998), Vec2(0.591139972, 0.238989994), Vec2(0.579750001, 0.236929998), Vec2(0.580380023, 0.222039998), Vec2(0.600239992, 0.226530001), Vec2(0.601979971, 0.239529997), Vec2(0.591139972, 0.238989994), Vec2(0.590939999, 0.225309998), Vec2(0.598919988, 0.217739999), Vec2(0.600239992, 0.226530001), Vec2(0.590939999, 0.225309998), Vec2(0.592339993, 0.213760003), Vec2(0.604160011, 0.213080004), Vec2(0.609080017, 0.224439994), Vec2(0.600239992, 0.226530001), Vec2(0.598919988, 0.217739999), Vec2(0.609080017, 0.224439994), Vec2(0.612609982, 0.238089994), Vec2(0.601979971, 0.239529997), Vec2(0.600239992, 0.226530001), Vec2(0.618579984, 0.220070004), Vec2(0.623449981, 0.234990001), Vec2(0.612609982, 0.238089994), Vec2(0.609080017, 0.224439994), Vec2(0.612079978, 0.206560001), Vec2(0.618579984, 0.220070004), Vec2(0.609080017, 0.224439994), Vec2(0.604160011, 0.213080004), Vec2(0.612609982, 0.238089994), Vec2(0.615369976, 0.253399998), Vec2(0.603709996, 0.254489988), Vec2(0.601979971, 0.239529997), Vec2(0.615369976, 0.253399998), Vec2(0.617569983, 0.269879997), Vec2(0.605279982, 0.270709991), Vec2(0.603709996, 0.254489988), Vec2(0.627149999, 0.251120001), Vec2(0.629980028, 0.268189996), Vec2(0.617569983, 0.269879997), Vec2(0.615369976, 0.253399998), Vec2(0.623449981, 0.234990001), Vec2(0.627149999, 0.251120001), Vec2(0.615369976, 0.253399998), Vec2(0.612609982, 0.238089994), Vec2(0.634760022, 0.230949998), Vec2(0.639219999, 0.248050004), Vec2(0.627149999, 0.251120001), Vec2(0.623449981, 0.234990001), Vec2(0.639219999, 0.248050004), Vec2(0.642620027, 0.265899986), Vec2(0.629980028, 0.268189996), Vec2(0.627149999, 0.251120001), Vec2(0.651730001, 0.244619995), Vec2(0.655610025, 0.263289988), Vec2(0.642620027, 0.265899986), Vec2(0.639219999, 0.248050004), Vec2(0.646690011, 0.226569995), Vec2(0.651730001, 0.244619995), Vec2(0.639219999, 0.248050004), Vec2(0.634760022, 0.230949998), Vec2(0.621510029, 0.199560001), Vec2(0.628970027, 0.214750007), Vec2(0.618579984, 0.220070004), Vec2(0.612079978, 0.206560001), Vec2(0.628970027, 0.214750007), Vec2(0.634760022, 0.230949998), Vec2(0.623449981, 0.234990001), Vec2(0.618579984, 0.220070004), Vec2(0.640259981, 0.209220007), Vec2(0.646690011, 0.226569995), Vec2(0.634760022, 0.230949998), Vec2(0.628970027, 0.214750007), Vec2(0.632189989, 0.192650005), Vec2(0.640259981, 0.209220007), Vec2(0.628970027, 0.214750007), Vec2(0.621510029, 0.199560001), Vec2(0.617569983, 0.269879997), Vec2(0.619279981, 0.287209988), Vec2(0.606580019, 0.287800014), Vec2(0.605279982, 0.270709991), Vec2(0.619279981, 0.287209988), Vec2(0.620509982, 0.305099994), Vec2(0.607569993, 0.305489987), Vec2(0.606580019, 0.287800014), Vec2(0.632099986, 0.286000013), Vec2(0.633580029, 0.304329991), Vec2(0.620509982, 0.305099994), Vec2(0.619279981, 0.287209988), Vec2(0.629980028, 0.268189996), Vec2(0.632099986, 0.286000013), Vec2(0.619279981, 0.287209988), Vec2(0.617569983, 0.269879997), Vec2(0.620509982, 0.305099994), Vec2(0.621259987, 0.323350012), Vec2(0.608200014, 0.323529989), Vec2(0.607569993, 0.305489987), Vec2(0.621259987, 0.323350012), Vec2(0.621559978, 0.341769993), Vec2(0.608460009, 0.341729999), Vec2(0.608200014, 0.323529989), Vec2(0.63448, 0.32299), Vec2(0.634819984, 0.341800004), Vec2(0.621559978, 0.341769993), Vec2(0.621259987, 0.323350012), Vec2(0.633580029, 0.304329991), Vec2(0.63448, 0.32299), Vec2(0.621259987, 0.323350012), Vec2(0.620509982, 0.305099994), Vec2(0.646889985, 0.303279996), Vec2(0.647930026, 0.322479993), Vec2(0.63448, 0.32299), Vec2(0.633580029, 0.304329991), Vec2(0.647930026, 0.322479993), Vec2(0.648320019, 0.341820002), Vec2(0.634819984, 0.341800004), Vec2(0.63448, 0.32299), Vec2(0.661679983, 0.321880013), Vec2(0.662109971, 0.341839999), Vec2(0.648320019, 0.341820002), Vec2(0.647930026, 0.322479993), Vec2(0.660489976, 0.302049994), Vec2(0.661679983, 0.321880013), Vec2(0.647930026, 0.322479993), Vec2(0.646889985, 0.303279996), Vec2(0.642620027, 0.265899986), Vec2(0.645139992, 0.284359992), Vec2(0.632099986, 0.286000013), Vec2(0.629980028, 0.268189996), Vec2(0.645139992, 0.284359992), Vec2(0.646889985, 0.303279996), Vec2(0.633580029, 0.304329991), Vec2(0.632099986, 0.286000013), Vec2(0.658490002, 0.282469988), Vec2(0.660489976, 0.302049994), Vec2(0.646889985, 0.303279996), Vec2(0.645139992, 0.284359992), Vec2(0.655610025, 0.263289988), Vec2(0.658490002, 0.282469988), Vec2(0.645139992, 0.284359992), Vec2(0.642620027, 0.265899986), Vec2(0.668990016, 0.260639995), Vec2(0.672190011, 0.280519992), Vec2(0.658490002, 0.282469988), Vec2(0.655610025, 0.263289988), Vec2(0.672190011, 0.280519992), Vec2(0.674409986, 0.300760001), Vec2(0.660489976, 0.302049994), Vec2(0.658490002, 0.282469988), Vec2(0.686230004, 0.278679997), Vec2(0.688660026, 0.299529999), Vec2(0.674409986, 0.300760001), Vec2(0.672190011, 0.280519992), Vec2(0.682789981, 0.258159995), Vec2(0.686230004, 0.278679997), Vec2(0.672190011, 0.280519992), Vec2(0.668990016, 0.260639995), Vec2(0.674409986, 0.300760001), Vec2(0.675740004, 0.321240008), Vec2(0.661679983, 0.321880013), Vec2(0.660489976, 0.302049994), Vec2(0.675740004, 0.321240008), Vec2(0.67622, 0.341839999), Vec2(0.662109971, 0.341839999), Vec2(0.661679983, 0.321880013), Vec2(0.690119982, 0.320630014), Vec2(0.690649986, 0.341839999), Vec2(0.67622, 0.341839999), Vec2(0.675740004, 0.321240008), Vec2(0.688660026, 0.299529999), Vec2(0.690119982, 0.320630014), Vec2(0.675740004, 0.321240008), Vec2(0.674409986, 0.300760001), Vec2(0.703209996, 0.29846999), Vec2(0.704789996, 0.320089996), Vec2(0.690119982, 0.320630014), Vec2(0.688660026, 0.299529999), Vec2(0.704789996, 0.320089996), Vec2(0.705359995, 0.341829985), Vec2(0.690649986, 0.341839999), Vec2(0.690119982, 0.320630014), Vec2(0.719709992, 0.319680005), Vec2(0.720319986, 0.341809988), Vec2(0.705359995, 0.341829985), Vec2(0.704789996, 0.320089996), Vec2(0.718029976, 0.297670007), Vec2(0.719709992, 0.319680005), Vec2(0.704789996, 0.320089996), Vec2(0.703209996, 0.29846999), Vec2(0.696969986, 0.256069988), Vec2(0.700609982, 0.277099997), Vec2(0.686230004, 0.278679997), Vec2(0.682789981, 0.258159995), Vec2(0.700609982, 0.277099997), Vec2(0.703209996, 0.29846999), Vec2(0.688660026, 0.299529999), Vec2(0.686230004, 0.278679997), Vec2(0.71529001, 0.275920004), Vec2(0.718029976, 0.297670007), Vec2(0.703209996, 0.29846999), Vec2(0.700609982, 0.277099997), Vec2(0.711520016, 0.254500002), Vec2(0.71529001, 0.275920004), Vec2(0.700609982, 0.277099997), Vec2(0.696969986, 0.256069988), Vec2(0.643999994, 0.186210006), Vec2(0.652450025, 0.203940004), Vec2(0.640259981, 0.209220007), Vec2(0.632189989, 0.192650005), Vec2(0.652450025, 0.203940004), Vec2(0.659280002, 0.222289994), Vec2(0.646690011, 0.226569995), Vec2(0.640259981, 0.209220007), Vec2(0.665480018, 0.199249998), Vec2(0.672529995, 0.218419999), Vec2(0.659280002, 0.222289994), Vec2(0.652450025, 0.203940004), Vec2(0.656889975, 0.180539995), Vec2(0.665480018, 0.199249998), Vec2(0.652450025, 0.203940004), Vec2(0.643999994, 0.186210006), Vec2(0.659280002, 0.222289994), Vec2(0.664730012, 0.2412), Vec2(0.651730001, 0.244619995), Vec2(0.646690011, 0.226569995), Vec2(0.664730012, 0.2412), Vec2(0.668990016, 0.260639995), Vec2(0.655610025, 0.263289988), Vec2(0.651730001, 0.244619995), Vec2(0.678250015, 0.238059998), Vec2(0.682789981, 0.258159995), Vec2(0.668990016, 0.260639995), Vec2(0.664730012, 0.2412), Vec2(0.672529995, 0.218419999), Vec2(0.678250015, 0.238059998), Vec2(0.664730012, 0.2412), Vec2(0.659280002, 0.222289994), Vec2(0.686399996, 0.215200007), Vec2(0.692260027, 0.235430002), Vec2(0.678250015, 0.238059998), Vec2(0.672529995, 0.218419999), Vec2(0.692260027, 0.235430002), Vec2(0.696969986, 0.256069988), Vec2(0.682789981, 0.258159995), Vec2(0.678250015, 0.238059998), Vec2(0.706700027, 0.233459994), Vec2(0.711520016, 0.254500002), Vec2(0.696969986, 0.256069988), Vec2(0.692260027, 0.235430002), Vec2(0.700839996, 0.212830007), Vec2(0.706700027, 0.233459994), Vec2(0.692260027, 0.235430002), Vec2(0.686399996, 0.215200007), Vec2(0.670799971, 0.175909996), Vec2(0.679310024, 0.195380002), Vec2(0.665480018, 0.199249998), Vec2(0.656889975, 0.180539995), Vec2(0.679310024, 0.195380002), Vec2(0.686399996, 0.215200007), Vec2(0.672529995, 0.218419999), Vec2(0.665480018, 0.199249998), Vec2(0.693859994, 0.192540005), Vec2(0.700839996, 0.212830007), Vec2(0.686399996, 0.215200007), Vec2(0.679310024, 0.195380002), Vec2(0.685660005, 0.172519997), Vec2(0.693859994, 0.192540005), Vec2(0.679310024, 0.195380002), Vec2(0.670799971, 0.175909996), Vec2(0.621559978, 0.341769993), Vec2(0.621389985, 0.360179991), Vec2(0.608319998, 0.359939992), Vec2(0.608460009, 0.341729999), Vec2(0.621389985, 0.360179991), Vec2(0.62075001, 0.378430009), Vec2(0.60781002, 0.37797001), Vec2(0.608319998, 0.359939992), Vec2(0.634609997, 0.360610008), Vec2(0.633840024, 0.379260004), Vec2(0.62075001, 0.378430009), Vec2(0.621389985, 0.360179991), Vec2(0.634819984, 0.341800004), Vec2(0.634609997, 0.360610008), Vec2(0.621389985, 0.360179991), Vec2(0.621559978, 0.341769993), Vec2(0.62075001, 0.378430009), Vec2(0.619620025, 0.396319985), Vec2(0.60690999, 0.395639986), Vec2(0.60781002, 0.37797001), Vec2(0.619620025, 0.396319985), Vec2(0.617980003, 0.413639992), Vec2(0.605679989, 0.412710011), Vec2(0.60690999, 0.395639986), Vec2(0.632449985, 0.397599995), Vec2(0.630400002, 0.415399998), Vec2(0.617980003, 0.413639992), Vec2(0.619620025, 0.396319985), Vec2(0.633840024, 0.379260004), Vec2(0.632449985, 0.397599995), Vec2(0.619620025, 0.396319985), Vec2(0.62075001, 0.378430009), Vec2(0.64714998, 0.380369991), Vec2(0.645500004, 0.399289995), Vec2(0.632449985, 0.397599995), Vec2(0.633840024, 0.379260004), Vec2(0.645500004, 0.399289995), Vec2(0.643050015, 0.417750001), Vec2(0.630400002, 0.415399998), Vec2(0.632449985, 0.397599995), Vec2(0.658850014, 0.40121001), Vec2(0.656040013, 0.420399994), Vec2(0.643050015, 0.417750001), Vec2(0.645500004, 0.399289995), Vec2(0.660749972, 0.381630003), Vec2(0.658850014, 0.40121001), Vec2(0.645500004, 0.399289995), Vec2(0.64714998, 0.380369991), Vec2(0.648320019, 0.341820002), Vec2(0.648069978, 0.36116001), Vec2(0.634609997, 0.360610008), Vec2(0.634819984, 0.341800004), Vec2(0.648069978, 0.36116001), Vec2(0.64714998, 0.380369991), Vec2(0.633840024, 0.379260004), Vec2(0.634609997, 0.360610008), Vec2(0.661809981, 0.361799985), Vec2(0.660749972, 0.381630003), Vec2(0.64714998, 0.380369991), Vec2(0.648069978, 0.36116001), Vec2(0.662109971, 0.341839999), Vec2(0.661809981, 0.361799985), Vec2(0.648069978, 0.36116001), Vec2(0.648320019, 0.341820002), Vec2(0.617980003, 0.413639992), Vec2(0.615819991, 0.430110008), Vec2(0.604139984, 0.428909987), Vec2(0.605679989, 0.412710011), Vec2(0.615819991, 0.430110008), Vec2(0.613049984, 0.445389986), Vec2(0.602400005, 0.443830013), Vec2(0.604139984, 0.428909987), Vec2(0.627600014, 0.432469994), Vec2(0.623899996, 0.448570013), Vec2(0.613049984, 0.445389986), Vec2(0.615819991, 0.430110008), Vec2(0.630400002, 0.415399998), Vec2(0.627600014, 0.432469994), Vec2(0.615819991, 0.430110008), Vec2(0.617980003, 0.413639992), Vec2(0.613049984, 0.445389986), Vec2(0.60947001, 0.458999991), Vec2(0.600619972, 0.456800014), Vec2(0.602400005, 0.443830013), Vec2(0.60947001, 0.458999991), Vec2(0.604449987, 0.47025001), Vec2(0.599250019, 0.465579987), Vec2(0.600619972, 0.456800014), Vec2(0.618969977, 0.463429987), Vec2(0.612360001, 0.476819992), Vec2(0.604449987, 0.47025001), Vec2(0.60947001, 0.458999991), Vec2(0.623899996, 0.448570013), Vec2(0.618969977, 0.463429987), Vec2(0.60947001, 0.458999991), Vec2(0.613049984, 0.445389986), Vec2(0.635219991, 0.452659994), Vec2(0.629369974, 0.468800008), Vec2(0.618969977, 0.463429987), Vec2(0.623899996, 0.448570013), Vec2(0.629369974, 0.468800008), Vec2(0.621800005, 0.483859986), Vec2(0.612360001, 0.476819992), Vec2(0.618969977, 0.463429987), Vec2(0.640680015, 0.474359989), Vec2(0.632510006, 0.490810007), Vec2(0.621800005, 0.483859986), Vec2(0.629369974, 0.468800008), Vec2(0.64714998, 0.457069993), Vec2(0.640680015, 0.474359989), Vec2(0.629369974, 0.468800008), Vec2(0.635219991, 0.452659994), Vec2(0.643050015, 0.417750001), Vec2(0.639680028, 0.435589999), Vec2(0.627600014, 0.432469994), Vec2(0.630400002, 0.415399998), Vec2(0.639680028, 0.435589999), Vec2(0.635219991, 0.452659994), Vec2(0.623899996, 0.448570013), Vec2(0.627600014, 0.432469994), Vec2(0.652199984, 0.439049989), Vec2(0.64714998, 0.457069993), Vec2(0.635219991, 0.452659994), Vec2(0.639680028, 0.435589999), Vec2(0.656040013, 0.420399994), Vec2(0.652199984, 0.439049989), Vec2(0.639680028, 0.435589999), Vec2(0.643050015, 0.417750001), Vec2(0.669430017, 0.42306), Vec2(0.665210009, 0.442490011), Vec2(0.652199984, 0.439049989), Vec2(0.656040013, 0.420399994), Vec2(0.665210009, 0.442490011), Vec2(0.659759998, 0.461369991), Vec2(0.64714998, 0.457069993), Vec2(0.652199984, 0.439049989), Vec2(0.678749979, 0.44562), Vec2(0.673039973, 0.465229988), Vec2(0.659759998, 0.461369991), Vec2(0.665210009, 0.442490011), Vec2(0.683239996, 0.425529987), Vec2(0.678749979, 0.44562), Vec2(0.665210009, 0.442490011), Vec2(0.669430017, 0.42306), Vec2(0.659759998, 0.461369991), Vec2(0.652890027, 0.479649991), Vec2(0.640680015, 0.474359989), Vec2(0.64714998, 0.457069993), Vec2(0.652890027, 0.479649991), Vec2(0.644360006, 0.497269988), Vec2(0.632510006, 0.490810007), Vec2(0.640680015, 0.474359989), Vec2(0.665960014, 0.484349996), Vec2(0.657299995, 0.502950013), Vec2(0.644360006, 0.497269988), Vec2(0.652890027, 0.479649991), Vec2(0.673039973, 0.465229988), Vec2(0.665960014, 0.484349996), Vec2(0.652890027, 0.479649991), Vec2(0.659759998, 0.461369991), Vec2(0.686940014, 0.468430012), Vec2(0.679830015, 0.488200009), Vec2(0.665960014, 0.484349996), Vec2(0.673039973, 0.465229988), Vec2(0.679830015, 0.488200009), Vec2(0.671270013, 0.507589996), Vec2(0.657299995, 0.502950013), Vec2(0.665960014, 0.484349996), Vec2(0.694429994, 0.491030008), Vec2(0.686190009, 0.51098001), Vec2(0.671270013, 0.507589996), Vec2(0.679830015, 0.488200009), Vec2(0.701409996, 0.470789999), Vec2(0.694429994, 0.491030008), Vec2(0.679830015, 0.488200009), Vec2(0.686940014, 0.468430012), Vec2(0.697440028, 0.42761001), Vec2(0.692780018, 0.448240012), Vec2(0.678749979, 0.44562), Vec2(0.683239996, 0.425529987), Vec2(0.692780018, 0.448240012), Vec2(0.686940014, 0.468430012), Vec2(0.673039973, 0.465229988), Vec2(0.678749979, 0.44562), Vec2(0.707249999, 0.45017001), Vec2(0.701409996, 0.470789999), Vec2(0.686940014, 0.468430012), Vec2(0.692780018, 0.448240012), Vec2(0.712010026, 0.429140002), Vec2(0.707249999, 0.45017001), Vec2(0.692780018, 0.448240012), Vec2(0.697440028, 0.42761001), Vec2(0.67622, 0.341839999), Vec2(0.675880015, 0.36243999), Vec2(0.661809981, 0.361799985), Vec2(0.662109971, 0.341839999), Vec2(0.675880015, 0.36243999), Vec2(0.674679995, 0.382930011), Vec2(0.660749972, 0.381630003), Vec2(0.661809981, 0.361799985), Vec2(0.690259993, 0.363059998), Vec2(0.688929975, 0.384149998), Vec2(0.674679995, 0.382930011), Vec2(0.675880015, 0.36243999), Vec2(0.690649986, 0.341839999), Vec2(0.690259993, 0.363059998), Vec2(0.675880015, 0.36243999), Vec2(0.67622, 0.341839999), Vec2(0.674679995, 0.382930011), Vec2(0.672550023, 0.403180003), Vec2(0.658850014, 0.40121001), Vec2(0.660749972, 0.381630003), Vec2(0.672550023, 0.403180003), Vec2(0.669430017, 0.42306), Vec2(0.656040013, 0.420399994), Vec2(0.658850014, 0.40121001), Vec2(0.686609983, 0.405010015), Vec2(0.683239996, 0.425529987), Vec2(0.669430017, 0.42306), Vec2(0.672550023, 0.403180003), Vec2(0.688929975, 0.384149998), Vec2(0.686609983, 0.405010015), Vec2(0.672550023, 0.403180003), Vec2(0.674679995, 0.382930011), Vec2(0.703480005, 0.38519001), Vec2(0.700999975, 0.406569988), Vec2(0.686609983, 0.405010015), Vec2(0.688929975, 0.384149998), Vec2(0.700999975, 0.406569988), Vec2(0.697440028, 0.42761001), Vec2(0.683239996, 0.425529987), Vec2(0.686609983, 0.405010015), Vec2(0.715690017, 0.40772), Vec2(0.712010026, 0.429140002), Vec2(0.697440028, 0.42761001), Vec2(0.700999975, 0.406569988), Vec2(0.718309999, 0.385960013), Vec2(0.715690017, 0.40772), Vec2(0.700999975, 0.406569988), Vec2(0.703480005, 0.38519001), Vec2(0.705359995, 0.341829985), Vec2(0.704930007, 0.363570005), Vec2(0.690259993, 0.363059998), Vec2(0.690649986, 0.341839999), Vec2(0.704930007, 0.363570005), Vec2(0.703480005, 0.38519001), Vec2(0.688929975, 0.384149998), Vec2(0.690259993, 0.363059998), Vec2(0.719850004, 0.363950014), Vec2(0.718309999, 0.385960013), Vec2(0.703480005, 0.38519001), Vec2(0.704930007, 0.363570005), Vec2(0.720319986, 0.341809988), Vec2(0.719850004, 0.363950014), Vec2(0.704930007, 0.363570005), Vec2(0.705359995, 0.341829985), Vec2(0.735469997, 0.341789991), Vec2(0.734979987, 0.364160001), Vec2(0.719850004, 0.363950014), Vec2(0.720319986, 0.341809988), Vec2(0.734979987, 0.364160001), Vec2(0.733349979, 0.386409998), Vec2(0.718309999, 0.385960013), Vec2(0.719850004, 0.363950014), Vec2(0.750240028, 0.364219993), Vec2(0.748560011, 0.386559993), Vec2(0.733349979, 0.386409998), Vec2(0.734979987, 0.364160001), Vec2(0.750760019, 0.34176001), Vec2(0.750240028, 0.364219993), Vec2(0.734979987, 0.364160001), Vec2(0.735469997, 0.341789991), Vec2(0.733349979, 0.386409998), Vec2(0.730639994, 0.408399999), Vec2(0.715690017, 0.40772), Vec2(0.718309999, 0.385960013), Vec2(0.730639994, 0.408399999), Vec2(0.726880014, 0.430059999), Vec2(0.712010026, 0.429140002), Vec2(0.715690017, 0.40772), Vec2(0.745779991, 0.408650011), Vec2(0.741980016, 0.43039), Vec2(0.726880014, 0.430059999), Vec2(0.730639994, 0.408399999), Vec2(0.748560011, 0.386559993), Vec2(0.745779991, 0.408650011), Vec2(0.730639994, 0.408399999), Vec2(0.733349979, 0.386409998), Vec2(0.763859987, 0.386510015), Vec2(0.761030018, 0.408580005), Vec2(0.745779991, 0.408650011), Vec2(0.748560011, 0.386559993), Vec2(0.761030018, 0.408580005), Vec2(0.757200003, 0.430269986), Vec2(0.741980016, 0.43039), Vec2(0.745779991, 0.408650011), Vec2(0.776319981, 0.408340007), Vec2(0.772440016, 0.429879993), Vec2(0.757200003, 0.430269986), Vec2(0.761030018, 0.408580005), Vec2(0.779209971, 0.386370003), Vec2(0.776319981, 0.408340007), Vec2(0.761030018, 0.408580005), Vec2(0.763859987, 0.386510015), Vec2(0.766129971, 0.341720015), Vec2(0.765590012, 0.364190012), Vec2(0.750240028, 0.364219993), Vec2(0.750760019, 0.34176001), Vec2(0.765590012, 0.364190012), Vec2(0.763859987, 0.386510015), Vec2(0.748560011, 0.386559993), Vec2(0.750240028, 0.364219993), Vec2(0.780990005, 0.364100009), Vec2(0.779209971, 0.386370003), Vec2(0.763859987, 0.386510015), Vec2(0.765590012, 0.364190012), Vec2(0.78154999, 0.341690004), Vec2(0.780990005, 0.364100009), Vec2(0.765590012, 0.364190012), Vec2(0.766129971, 0.341720015), Vec2(0.726880014, 0.430059999), Vec2(0.722109973, 0.451330006), Vec2(0.707249999, 0.45017001), Vec2(0.712010026, 0.429140002), Vec2(0.722109973, 0.451330006), Vec2(0.716369987, 0.472200006), Vec2(0.701409996, 0.470789999), Vec2(0.707249999, 0.45017001), Vec2(0.73724997, 0.451739997), Vec2(0.73168999, 0.472680002), Vec2(0.716369987, 0.472200006), Vec2(0.722109973, 0.451330006), Vec2(0.741980016, 0.43039), Vec2(0.73724997, 0.451739997), Vec2(0.722109973, 0.451330006), Vec2(0.726880014, 0.430059999), Vec2(0.716369987, 0.472200006), Vec2(0.709670007, 0.492729992), Vec2(0.694429994, 0.491030008), Vec2(0.701409996, 0.470789999), Vec2(0.709670007, 0.492729992), Vec2(0.701950014, 0.513010025), Vec2(0.686190009, 0.51098001), Vec2(0.694429994, 0.491030008), Vec2(0.725380003, 0.493279994), Vec2(0.718360007, 0.513629973), Vec2(0.701950014, 0.513010025), Vec2(0.709670007, 0.492729992), Vec2(0.73168999, 0.472680002), Vec2(0.725380003, 0.493279994), Vec2(0.709670007, 0.492729992), Vec2(0.716369987, 0.472200006), Vec2(0.747179985, 0.472339988), Vec2(0.741330028, 0.492760003), Vec2(0.725380003, 0.493279994), Vec2(0.73168999, 0.472680002), Vec2(0.741330028, 0.492760003), Vec2(0.73514998, 0.512889981), Vec2(0.718360007, 0.513629973), Vec2(0.725380003, 0.493279994), Vec2(0.757239997, 0.491329998), Vec2(0.751950026, 0.510909975), Vec2(0.73514998, 0.512889981), Vec2(0.741330028, 0.492760003), Vec2(0.762629986, 0.471359998), Vec2(0.757239997, 0.491329998), Vec2(0.741330028, 0.492760003), Vec2(0.747179985, 0.472339988), Vec2(0.757200003, 0.430269986), Vec2(0.752529979, 0.45153001), Vec2(0.73724997, 0.451739997), Vec2(0.741980016, 0.43039), Vec2(0.752529979, 0.45153001), Vec2(0.747179985, 0.472339988), Vec2(0.73168999, 0.472680002), Vec2(0.73724997, 0.451739997), Vec2(0.76779002, 0.450899988), Vec2(0.762629986, 0.471359998), Vec2(0.747179985, 0.472339988), Vec2(0.752529979, 0.45153001), Vec2(0.772440016, 0.429879993), Vec2(0.76779002, 0.450899988), Vec2(0.752529979, 0.45153001), Vec2(0.757200003, 0.430269986), Vec2(0.787599981, 0.429459989), Vec2(0.782880008, 0.450129986), Vec2(0.76779002, 0.450899988), Vec2(0.772440016, 0.429879993), Vec2(0.782880008, 0.450129986), Vec2(0.777769983, 0.470059991), Vec2(0.762629986, 0.471359998), Vec2(0.76779002, 0.450899988), Vec2(0.79764998, 0.449660003), Vec2(0.792360008, 0.468919992), Vec2(0.777769983, 0.470059991), Vec2(0.782880008, 0.450129986), Vec2(0.802619994, 0.429349989), Vec2(0.79764998, 0.449660003), Vec2(0.782880008, 0.450129986), Vec2(0.787599981, 0.429459989), Vec2(0.777769983, 0.470059991), Vec2(0.77275002, 0.489270002), Vec2(0.757239997, 0.491329998), Vec2(0.762629986, 0.471359998), Vec2(0.77275002, 0.489270002), Vec2(0.768320024, 0.5079), Vec2(0.751950026, 0.510909975), Vec2(0.757239997, 0.491329998), Vec2(0.787419975, 0.487049997), Vec2(0.783689976, 0.504140019), Vec2(0.768320024, 0.5079), Vec2(0.77275002, 0.489270002), Vec2(0.792360008, 0.468919992), Vec2(0.787419975, 0.487049997), Vec2(0.77275002, 0.489270002), Vec2(0.777769983, 0.470059991), Vec2(0.806129992, 0.468719989), Vec2(0.800689995, 0.485509992), Vec2(0.787419975, 0.487049997), Vec2(0.792360008, 0.468919992), Vec2(0.800689995, 0.485509992), Vec2(0.797230005, 0.500100017), Vec2(0.783689976, 0.504140019), Vec2(0.787419975, 0.487049997), Vec2(0.811839998, 0.486330003), Vec2(0.806450009, 0.496930003), Vec2(0.797230005, 0.500100017), Vec2(0.800689995, 0.485509992), Vec2(0.81892997, 0.470479995), Vec2(0.811839998, 0.486330003), Vec2(0.800689995, 0.485509992), Vec2(0.806129992, 0.468719989), Vec2(0.817470014, 0.429969996), Vec2(0.81200999, 0.450069994), Vec2(0.79764998, 0.449660003), Vec2(0.802619994, 0.429349989), Vec2(0.81200999, 0.450069994), Vec2(0.806129992, 0.468719989), Vec2(0.792360008, 0.468919992), Vec2(0.79764998, 0.449660003), Vec2(0.825929999, 0.452010006), Vec2(0.81892997, 0.470479995), Vec2(0.806129992, 0.468719989), Vec2(0.81200999, 0.450069994), Vec2(0.832189977, 0.431739986), Vec2(0.825929999, 0.452010006), Vec2(0.81200999, 0.450069994), Vec2(0.817470014, 0.429969996), Vec2(0.797010005, 0.341650009), Vec2(0.796429992, 0.364039987), Vec2(0.780990005, 0.364100009), Vec2(0.78154999, 0.341690004), Vec2(0.796429992, 0.364039987), Vec2(0.794589996, 0.386260003), Vec2(0.779209971, 0.386370003), Vec2(0.780990005, 0.364100009), Vec2(0.811930001, 0.364069998), Vec2(0.809989989, 0.386330009), Vec2(0.794589996, 0.386260003), Vec2(0.796429992, 0.364039987), Vec2(0.812529981, 0.341610014), Vec2(0.811930001, 0.364069998), Vec2(0.796429992, 0.364039987), Vec2(0.797010005, 0.341650009), Vec2(0.794589996, 0.386260003), Vec2(0.791589975, 0.408120006), Vec2(0.776319981, 0.408340007), Vec2(0.779209971, 0.386370003), Vec2(0.791589975, 0.408120006), Vec2(0.787599981, 0.429459989), Vec2(0.772440016, 0.429879993), Vec2(0.776319981, 0.408340007), Vec2(0.806829989, 0.408170015), Vec2(0.802619994, 0.429349989), Vec2(0.787599981, 0.429459989), Vec2(0.791589975, 0.408120006), Vec2(0.809989989, 0.386330009), Vec2(0.806829989, 0.408170015), Vec2(0.791589975, 0.408120006), Vec2(0.794589996, 0.386260003), Vec2(0.825460017, 0.38677001), Vec2(0.822049975, 0.408760011), Vec2(0.806829989, 0.408170015), Vec2(0.809989989, 0.386330009), Vec2(0.822049975, 0.408760011), Vec2(0.817470014, 0.429969996), Vec2(0.802619994, 0.429349989), Vec2(0.806829989, 0.408170015), Vec2(0.83732003, 0.410189986), Vec2(0.832189977, 0.431739986), Vec2(0.817470014, 0.429969996), Vec2(0.822049975, 0.408760011), Vec2(0.841090024, 0.38775), Vec2(0.83732003, 0.410189986), Vec2(0.822049975, 0.408760011), Vec2(0.825460017, 0.38677001), Vec2(0.828180015, 0.341560006), Vec2(0.82753998, 0.364279985), Vec2(0.811930001, 0.364069998), Vec2(0.812529981, 0.341610014), Vec2(0.82753998, 0.364279985), Vec2(0.825460017, 0.38677001), Vec2(0.809989989, 0.386330009), Vec2(0.811930001, 0.364069998), Vec2(0.843360007, 0.364749998), Vec2(0.841090024, 0.38775), Vec2(0.825460017, 0.38677001), Vec2(0.82753998, 0.364279985), Vec2(0.844060004, 0.341500014), Vec2(0.843360007, 0.364749998), Vec2(0.82753998, 0.364279985), Vec2(0.828180015, 0.341560006), Vec2(0.701359987, 0.170489997), Vec2(0.70905, 0.190830007), Vec2(0.693859994, 0.192540005), Vec2(0.685660005, 0.172519997), Vec2(0.70905, 0.190830007), Vec2(0.715759993, 0.211380005), Vec2(0.700839996, 0.212830007), Vec2(0.693859994, 0.192540005), Vec2(0.724709988, 0.190249994), Vec2(0.731040001, 0.210859999), Vec2(0.715759993, 0.211380005), Vec2(0.70905, 0.190830007), Vec2(0.717710018, 0.169870004), Vec2(0.724709988, 0.190249994), Vec2(0.70905, 0.190830007), Vec2(0.701359987, 0.170489997), Vec2(0.715759993, 0.211380005), Vec2(0.721539974, 0.232270002), Vec2(0.706700027, 0.233459994), Vec2(0.700839996, 0.212830007), Vec2(0.721539974, 0.232270002), Vec2(0.726369977, 0.253540009), Vec2(0.711520016, 0.254500002), Vec2(0.706700027, 0.233459994), Vec2(0.73664999, 0.231810004), Vec2(0.741460025, 0.253149986), Vec2(0.726369977, 0.253540009), Vec2(0.721539974, 0.232270002), Vec2(0.731040001, 0.210859999), Vec2(0.73664999, 0.231810004), Vec2(0.721539974, 0.232270002), Vec2(0.715759993, 0.211380005), Vec2(0.746500015, 0.211160004), Vec2(0.751909971, 0.231959999), Vec2(0.73664999, 0.231810004), Vec2(0.731040001, 0.210859999), Vec2(0.751909971, 0.231959999), Vec2(0.756659985, 0.253210008), Vec2(0.741460025, 0.253149986), Vec2(0.73664999, 0.231810004), Vec2(0.767149985, 0.232529998), Vec2(0.771889985, 0.253529996), Vec2(0.756659985, 0.253210008), Vec2(0.751909971, 0.231959999), Vec2(0.761910021, 0.212080002), Vec2(0.767149985, 0.232529998), Vec2(0.751909971, 0.231959999), Vec2(0.746500015, 0.211160004), Vec2(0.734449983, 0.170599997), Vec2(0.740620017, 0.190740004), Vec2(0.724709988, 0.190249994), Vec2(0.717710018, 0.169870004), Vec2(0.740620017, 0.190740004), Vec2(0.746500015, 0.211160004), Vec2(0.731040001, 0.210859999), Vec2(0.724709988, 0.190249994), Vec2(0.756479979, 0.192129999), Vec2(0.761910021, 0.212080002), Vec2(0.746500015, 0.211160004), Vec2(0.740620017, 0.190740004), Vec2(0.751190007, 0.172560006), Vec2(0.756479979, 0.192129999), Vec2(0.740620017, 0.190740004), Vec2(0.734449983, 0.170599997), Vec2(0.726369977, 0.253540009), Vec2(0.730229974, 0.275189996), Vec2(0.71529001, 0.275920004), Vec2(0.711520016, 0.254500002), Vec2(0.730229974, 0.275189996), Vec2(0.733070016, 0.297179997), Vec2(0.718029976, 0.297670007), Vec2(0.71529001, 0.275920004), Vec2(0.745360017, 0.274879992), Vec2(0.748260021, 0.296959996), Vec2(0.733070016, 0.297179997), Vec2(0.730229974, 0.275189996), Vec2(0.741460025, 0.253149986), Vec2(0.745360017, 0.274879992), Vec2(0.730229974, 0.275189996), Vec2(0.726369977, 0.253540009), Vec2(0.733070016, 0.297179997), Vec2(0.734830022, 0.31942001), Vec2(0.719709992, 0.319680005), Vec2(0.718029976, 0.297670007), Vec2(0.734830022, 0.31942001), Vec2(0.735469997, 0.341789991), Vec2(0.720319986, 0.341809988), Vec2(0.719709992, 0.319680005), Vec2(0.750090003, 0.319290012), Vec2(0.750760019, 0.34176001), Vec2(0.735469997, 0.341789991), Vec2(0.734830022, 0.31942001), Vec2(0.748260021, 0.296959996), Vec2(0.750090003, 0.319290012), Vec2(0.734830022, 0.31942001), Vec2(0.733070016, 0.297179997), Vec2(0.763559997, 0.296950012), Vec2(0.765439987, 0.319270015), Vec2(0.750090003, 0.319290012), Vec2(0.748260021, 0.296959996), Vec2(0.765439987, 0.319270015), Vec2(0.766129971, 0.341720015), Vec2(0.750760019, 0.34176001), Vec2(0.750090003, 0.319290012), Vec2(0.78083998, 0.319279999), Vec2(0.78154999, 0.341690004), Vec2(0.766129971, 0.341720015), Vec2(0.765439987, 0.319270015), Vec2(0.778909981, 0.297019988), Vec2(0.78083998, 0.319279999), Vec2(0.765439987, 0.319270015), Vec2(0.763559997, 0.296950012), Vec2(0.756659985, 0.253210008), Vec2(0.760599971, 0.274890006), Vec2(0.745360017, 0.274879992), Vec2(0.741460025, 0.253149986), Vec2(0.760599971, 0.274890006), Vec2(0.763559997, 0.296950012), Vec2(0.748260021, 0.296959996), Vec2(0.745360017, 0.274879992), Vec2(0.775870025, 0.275059998), Vec2(0.778909981, 0.297019988), Vec2(0.763559997, 0.296950012), Vec2(0.760599971, 0.274890006), Vec2(0.771889985, 0.253529996), Vec2(0.775870025, 0.275059998), Vec2(0.760599971, 0.274890006), Vec2(0.756659985, 0.253210008), Vec2(0.787029982, 0.253879994), Vec2(0.791130006, 0.275200009), Vec2(0.775870025, 0.275059998), Vec2(0.771889985, 0.253529996), Vec2(0.791130006, 0.275200009), Vec2(0.794269979, 0.297049999), Vec2(0.778909981, 0.297019988), Vec2(0.775870025, 0.275059998), Vec2(0.806349993, 0.275079995), Vec2(0.809660017, 0.296900004), Vec2(0.794269979, 0.297049999), Vec2(0.791130006, 0.275200009), Vec2(0.802020013, 0.253919989), Vec2(0.806349993, 0.275079995), Vec2(0.791130006, 0.275200009), Vec2(0.787029982, 0.253879994), Vec2(0.794269979, 0.297049999), Vec2(0.796270013, 0.319260001), Vec2(0.78083998, 0.319279999), Vec2(0.778909981, 0.297019988), Vec2(0.796270013, 0.319260001), Vec2(0.797010005, 0.341650009), Vec2(0.78154999, 0.341690004), Vec2(0.78083998, 0.319279999), Vec2(0.811760008, 0.319150001), Vec2(0.812529981, 0.341610014), Vec2(0.797010005, 0.341650009), Vec2(0.796270013, 0.319260001), Vec2(0.809660017, 0.296900004), Vec2(0.811760008, 0.319150001), Vec2(0.796270013, 0.319260001), Vec2(0.794269979, 0.297049999), Vec2(0.825110018, 0.29637), Vec2(0.82735002, 0.318839997), Vec2(0.811760008, 0.319150001), Vec2(0.809660017, 0.296900004), Vec2(0.82735002, 0.318839997), Vec2(0.828180015, 0.341560006), Vec2(0.812529981, 0.341610014), Vec2(0.811760008, 0.319150001), Vec2(0.843159974, 0.31825), Vec2(0.844060004, 0.341500014), Vec2(0.828180015, 0.341560006), Vec2(0.82735002, 0.318839997), Vec2(0.840709984, 0.29528001), Vec2(0.843159974, 0.31825), Vec2(0.82735002, 0.318839997), Vec2(0.825110018, 0.29637), Vec2(0.816829979, 0.253230006), Vec2(0.821539998, 0.274399996), Vec2(0.806349993, 0.275079995), Vec2(0.802020013, 0.253919989), Vec2(0.821539998, 0.274399996), Vec2(0.825110018, 0.29637), Vec2(0.809660017, 0.296900004), Vec2(0.806349993, 0.275079995), Vec2(0.836769998, 0.272879988), Vec2(0.840709984, 0.29528001), Vec2(0.825110018, 0.29637), Vec2(0.821539998, 0.274399996), Vec2(0.831499994, 0.251370013), Vec2(0.836769998, 0.272879988), Vec2(0.821539998, 0.274399996), Vec2(0.816829979, 0.253230006), Vec2(0.767509997, 0.175549999), Vec2(0.77196002, 0.194130003), Vec2(0.756479979, 0.192129999), Vec2(0.751190007, 0.172560006), Vec2(0.77196002, 0.194130003), Vec2(0.777029991, 0.213320002), Vec2(0.761910021, 0.212080002), Vec2(0.756479979, 0.192129999), Vec2(0.786610007, 0.196290001), Vec2(0.791599989, 0.214389995), Vec2(0.777029991, 0.213320002), Vec2(0.77196002, 0.194130003), Vec2(0.782850027, 0.179260001), Vec2(0.786610007, 0.196290001), Vec2(0.77196002, 0.194130003), Vec2(0.767509997, 0.175549999), Vec2(0.777029991, 0.213320002), Vec2(0.782209992, 0.233229995), Vec2(0.767149985, 0.232529998), Vec2(0.761910021, 0.212080002), Vec2(0.782209992, 0.233229995), Vec2(0.787029982, 0.253879994), Vec2(0.771889985, 0.253529996), Vec2(0.767149985, 0.232529998), Vec2(0.796949983, 0.233630002), Vec2(0.802020013, 0.253919989), Vec2(0.787029982, 0.253879994), Vec2(0.782209992, 0.233229995), Vec2(0.791599989, 0.214389995), Vec2(0.796949983, 0.233630002), Vec2(0.782209992, 0.233229995), Vec2(0.777029991, 0.213320002), Vec2(0.805339992, 0.214530006), Vec2(0.811269999, 0.233150005), Vec2(0.796949983, 0.233630002), Vec2(0.791599989, 0.214389995), Vec2(0.811269999, 0.233150005), Vec2(0.816829979, 0.253230006), Vec2(0.802020013, 0.253919989), Vec2(0.796949983, 0.233630002), Vec2(0.825139999, 0.23116), Vec2(0.831499994, 0.251370013), Vec2(0.816829979, 0.253230006), Vec2(0.811269999, 0.233150005), Vec2(0.818069994, 0.212720007), Vec2(0.825139999, 0.23116), Vec2(0.811269999, 0.233150005), Vec2(0.805339992, 0.214530006), Vec2(0.796360016, 0.183239996), Vec2(0.799860001, 0.19777), Vec2(0.786610007, 0.196290001), Vec2(0.782850027, 0.179260001), Vec2(0.799860001, 0.19777), Vec2(0.805339992, 0.214530006), Vec2(0.791599989, 0.214389995), Vec2(0.786610007, 0.196290001), Vec2(0.810959995, 0.196899995), Vec2(0.818069994, 0.212720007), Vec2(0.805339992, 0.214530006), Vec2(0.799860001, 0.19777), Vec2(0.805589974, 0.186350003), Vec2(0.810959995, 0.196899995), Vec2(0.799860001, 0.19777), Vec2(0.796360016, 0.183239996), Vec2(0.190329999, 0.175870001), Vec2(0.203549996, 0.166720003), Vec2(0.203339994, 0.180059999), Vec2(0.194059998, 0.183160007), Vec2(0.203549996, 0.166720003), Vec2(0.219060004, 0.159769997), Vec2(0.216959998, 0.176129997), Vec2(0.203339994, 0.180059999), Vec2(0.201140001, 0.152940005), Vec2(0.219300002, 0.143490002), Vec2(0.219060004, 0.159769997), Vec2(0.203549996, 0.166720003), Vec2(0.184719995, 0.165069997), Vec2(0.201140001, 0.152940005), Vec2(0.203549996, 0.166720003), Vec2(0.190329999, 0.175870001), Vec2(0.219060004, 0.159769997), Vec2(0.23612, 0.154369995), Vec2(0.232409999, 0.172529995), Vec2(0.216959998, 0.176129997), Vec2(0.23612, 0.154369995), Vec2(0.254070014, 0.150460005), Vec2(0.248820007, 0.169729993), Vec2(0.232409999, 0.172529995), Vec2(0.23872, 0.136319995), Vec2(0.258879989, 0.131229997), Vec2(0.254070014, 0.150460005), Vec2(0.23612, 0.154369995), Vec2(0.219300002, 0.143490002), Vec2(0.23872, 0.136319995), Vec2(0.23612, 0.154369995), Vec2(0.219060004, 0.159769997), Vec2(0.218099996, 0.126959994), Vec2(0.240309998, 0.118160002), Vec2(0.23872, 0.136319995), Vec2(0.219300002, 0.143490002), Vec2(0.240309998, 0.118160002), Vec2(0.263280004, 0.111900002), Vec2(0.258879989, 0.131229997), Vec2(0.23872, 0.136319995), Vec2(0.240970001, 0.0997700021), Vec2(0.267230004, 0.0923700035), Vec2(0.263280004, 0.111900002), Vec2(0.240309998, 0.118160002), Vec2(0.215719998, 0.110040002), Vec2(0.240970001, 0.0997700021), Vec2(0.240309998, 0.118160002), Vec2(0.218099996, 0.126959994), Vec2(0.177990004, 0.152649999), Vec2(0.197170004, 0.138410002), Vec2(0.201140001, 0.152940005), Vec2(0.184719995, 0.165069997), Vec2(0.197170004, 0.138410002), Vec2(0.218099996, 0.126959994), Vec2(0.219300002, 0.143490002), Vec2(0.201140001, 0.152940005), Vec2(0.192000002, 0.123149998), Vec2(0.215719998, 0.110040002), Vec2(0.218099996, 0.126959994), Vec2(0.197170004, 0.138410002), Vec2(0.17024, 0.139139995), Vec2(0.192000002, 0.123149998), Vec2(0.197170004, 0.138410002), Vec2(0.177990004, 0.152649999), Vec2(0.254070014, 0.150460005), Vec2(0.272329986, 0.14813), Vec2(0.265639991, 0.168019995), Vec2(0.248820007, 0.169729993), Vec2(0.272329986, 0.14813), Vec2(0.290410012, 0.147479996), Vec2(0.282409996, 0.167600006), Vec2(0.265639991, 0.168019995), Vec2(0.279229999, 0.128209993), Vec2(0.299199998, 0.127309993), Vec2(0.290410012, 0.147479996), Vec2(0.272329986, 0.14813), Vec2(0.258879989, 0.131229997), Vec2(0.279229999, 0.128209993), Vec2(0.272329986, 0.14813), Vec2(0.254070014, 0.150460005), Vec2(0.290410012, 0.147479996), Vec2(0.307880014, 0.148560002), Vec2(0.298799992, 0.168559998), Vec2(0.282409996, 0.167600006), Vec2(0.307880014, 0.148560002), Vec2(0.324429989, 0.151360005), Vec2(0.314539999, 0.170929998), Vec2(0.298799992, 0.168559998), Vec2(0.31825, 0.128549993), Vec2(0.335970014, 0.131889999), Vec2(0.324429989, 0.151360005), Vec2(0.307880014, 0.148560002), Vec2(0.299199998, 0.127309993), Vec2(0.31825, 0.128549993), Vec2(0.307880014, 0.148560002), Vec2(0.290410012, 0.147479996), Vec2(0.308959991, 0.106980003), Vec2(0.330220014, 0.108429998), Vec2(0.31825, 0.128549993), Vec2(0.299199998, 0.127309993), Vec2(0.330220014, 0.108429998), Vec2(0.349559993, 0.112450004), Vec2(0.335970014, 0.131889999), Vec2(0.31825, 0.128549993), Vec2(0.344199985, 0.0881799981), Vec2(0.365759999, 0.0930700004), Vec2(0.349559993, 0.112450004), Vec2(0.330220014, 0.108429998), Vec2(0.319869995, 0.0864500031), Vec2(0.344199985, 0.0881799981), Vec2(0.330220014, 0.108429998), Vec2(0.308959991, 0.106980003), Vec2(0.263280004, 0.111900002), Vec2(0.28639999, 0.108149998), Vec2(0.279229999, 0.128209993), Vec2(0.258879989, 0.131229997), Vec2(0.28639999, 0.108149998), Vec2(0.308959991, 0.106980003), Vec2(0.299199998, 0.127309993), Vec2(0.279229999, 0.128209993), Vec2(0.293839991, 0.0878800005), Vec2(0.319869995, 0.0864500031), Vec2(0.308959991, 0.106980003), Vec2(0.28639999, 0.108149998), Vec2(0.267230004, 0.0923700035), Vec2(0.293839991, 0.0878800005), Vec2(0.28639999, 0.108149998), Vec2(0.263280004, 0.111900002), Vec2(0.270520002, 0.0725800022), Vec2(0.301319987, 0.0673900023), Vec2(0.293839991, 0.0878800005), Vec2(0.267230004, 0.0923700035), Vec2(0.301319987, 0.0673900023), Vec2(0.331950009, 0.0657199994), Vec2(0.319869995, 0.0864500031), Vec2(0.293839991, 0.0878800005), Vec2(0.308180004, 0.046670001), Vec2(0.34472999, 0.0448499992), Vec2(0.331950009, 0.0657199994), Vec2(0.301319987, 0.0673900023), Vec2(0.272610009, 0.0524899997), Vec2(0.308180004, 0.046670001), Vec2(0.301319987, 0.0673900023), Vec2(0.270520002, 0.0725800022), Vec2(0.331950009, 0.0657199994), Vec2(0.360720009, 0.0678299963), Vec2(0.344199985, 0.0881799981), Vec2(0.319869995, 0.0864500031), Vec2(0.360720009, 0.0678299963), Vec2(0.385479987, 0.0738499984), Vec2(0.365759999, 0.0930700004), Vec2(0.344199985, 0.0881799981), Vec2(0.380259991, 0.0475100018), Vec2(0.410430014, 0.0550500005), Vec2(0.385479987, 0.0738499984), Vec2(0.360720009, 0.0678299963), Vec2(0.34472999, 0.0448499992), Vec2(0.380259991, 0.0475100018), Vec2(0.360720009, 0.0678299963), Vec2(0.331950009, 0.0657199994), Vec2(0.356539994, 0.0238000005), Vec2(0.402429998, 0.0273899995), Vec2(0.380259991, 0.0475100018), Vec2(0.34472999, 0.0448499992), Vec2(0.402429998, 0.0273899995), Vec2(0.444700003, 0.03737), Vec2(0.410430014, 0.0550500005), Vec2(0.380259991, 0.0475100018), Vec2(0.421299994, 0.00769999996), Vec2(0.500389993, 0.0235900003), Vec2(0.444700003, 0.03737), Vec2(0.402429998, 0.0273899995), Vec2(0.363460004, 0.00194999995), Vec2(0.421299994, 0.00769999996), Vec2(0.402429998, 0.0273899995), Vec2(0.356539994, 0.0238000005), Vec2(0.272680014, 0.0319099985), Vec2(0.31310001, 0.0255600009), Vec2(0.308180004, 0.046670001), Vec2(0.272610009, 0.0524899997), Vec2(0.31310001, 0.0255600009), Vec2(0.356539994, 0.0238000005), Vec2(0.34472999, 0.0448499992), Vec2(0.308180004, 0.046670001), Vec2(0.314090014, 0.00343000004), Vec2(0.363460004, 0.00194999995), Vec2(0.356539994, 0.0238000005), Vec2(0.31310001, 0.0255600009), Vec2(0.269739985, 0.0104), Vec2(0.314090014, 0.00343000004), Vec2(0.31310001, 0.0255600009), Vec2(0.272680014, 0.0319099985), Vec2(0.161449999, 0.124810003), Vec2(0.185670003, 0.107270002), Vec2(0.192000002, 0.123149998), Vec2(0.17024, 0.139139995), Vec2(0.185670003, 0.107270002), Vec2(0.212149993, 0.0926600024), Vec2(0.215719998, 0.110040002), Vec2(0.192000002, 0.123149998), Vec2(0.178069994, 0.0908000022), Vec2(0.207230002, 0.0747900009), Vec2(0.212149993, 0.0926600024), Vec2(0.185670003, 0.107270002), Vec2(0.15151, 0.109810002), Vec2(0.178069994, 0.0908000022), Vec2(0.185670003, 0.107270002), Vec2(0.161449999, 0.124810003), Vec2(0.212149993, 0.0926600024), Vec2(0.240580007, 0.0810599998), Vec2(0.240970001, 0.0997700021), Vec2(0.215719998, 0.110040002), Vec2(0.240580007, 0.0810599998), Vec2(0.270520002, 0.0725800022), Vec2(0.267230004, 0.0923700035), Vec2(0.240970001, 0.0997700021), Vec2(0.23883, 0.0619499981), Vec2(0.272610009, 0.0524899997), Vec2(0.270520002, 0.0725800022), Vec2(0.240580007, 0.0810599998), Vec2(0.207230002, 0.0747900009), Vec2(0.23883, 0.0619499981), Vec2(0.240580007, 0.0810599998), Vec2(0.212149993, 0.0926600024), Vec2(0.200680003, 0.0563700013), Vec2(0.23522, 0.0423199981), Vec2(0.23883, 0.0619499981), Vec2(0.207230002, 0.0747900009), Vec2(0.23522, 0.0423199981), Vec2(0.272680014, 0.0319099985), Vec2(0.272610009, 0.0524899997), Vec2(0.23883, 0.0619499981), Vec2(0.229269996, 0.0218700003), Vec2(0.269739985, 0.0104), Vec2(0.272680014, 0.0319099985), Vec2(0.23522, 0.0423199981), Vec2(0.192220002, 0.0372299999), Vec2(0.229269996, 0.0218700003), Vec2(0.23522, 0.0423199981), Vec2(0.200680003, 0.0563700013), Vec2(0.140279993, 0.0941800028), Vec2(0.169029996, 0.073739998), Vec2(0.178069994, 0.0908000022), Vec2(0.15151, 0.109810002), Vec2(0.169029996, 0.073739998), Vec2(0.200680003, 0.0563700013), Vec2(0.207230002, 0.0747900009), Vec2(0.178069994, 0.0908000022), Vec2(0.15839, 0.0560199991), Vec2(0.192220002, 0.0372299999), Vec2(0.200680003, 0.0563700013), Vec2(0.169029996, 0.073739998), Vec2(0.127639994, 0.0779199973), Vec2(0.15839, 0.0560199991), Vec2(0.169029996, 0.073739998), Vec2(0.140279993, 0.0941800028), Vec2(0.324429989, 0.151360005), Vec2(0.339850008, 0.1558), Vec2(0.329450011, 0.174649999), Vec2(0.314539999, 0.170929998), Vec2(0.339850008, 0.1558), Vec2(0.35402, 0.161730006), Vec2(0.343409985, 0.179619998), Vec2(0.329450011, 0.174649999), Vec2(0.352120012, 0.137219995), Vec2(0.366600007, 0.144350007), Vec2(0.35402, 0.161730006), Vec2(0.339850008, 0.1558), Vec2(0.335970014, 0.131889999), Vec2(0.352120012, 0.137219995), Vec2(0.339850008, 0.1558), Vec2(0.324429989, 0.151360005), Vec2(0.35402, 0.161730006), Vec2(0.36688, 0.168909997), Vec2(0.356359988, 0.185609996), Vec2(0.343409985, 0.179619998), Vec2(0.36688, 0.168909997), Vec2(0.378410012, 0.177039996), Vec2(0.368229985, 0.192359999), Vec2(0.356359988, 0.185609996), Vec2(0.379379988, 0.152960002), Vec2(0.390540004, 0.162719995), Vec2(0.378410012, 0.177039996), Vec2(0.36688, 0.168909997), Vec2(0.366600007, 0.144350007), Vec2(0.379379988, 0.152960002), Vec2(0.36688, 0.168909997), Vec2(0.35402, 0.161730006), Vec2(0.381410003, 0.127570003), Vec2(0.393999994, 0.137899995), Vec2(0.379379988, 0.152960002), Vec2(0.366600007, 0.144350007), Vec2(0.393999994, 0.137899995), Vec2(0.404619992, 0.149489999), Vec2(0.390540004, 0.162719995), Vec2(0.379379988, 0.152960002), Vec2(0.410869986, 0.123989999), Vec2(0.420630008, 0.137559995), Vec2(0.404619992, 0.149489999), Vec2(0.393999994, 0.137899995), Vec2(0.398799986, 0.11163), Vec2(0.410869986, 0.123989999), Vec2(0.393999994, 0.137899995), Vec2(0.381410003, 0.127570003), Vec2(0.349559993, 0.112450004), Vec2(0.366649985, 0.118940003), Vec2(0.352120012, 0.137219995), Vec2(0.335970014, 0.131889999), Vec2(0.366649985, 0.118940003), Vec2(0.381410003, 0.127570003), Vec2(0.366600007, 0.144350007), Vec2(0.352120012, 0.137219995), Vec2(0.383920014, 0.101089999), Vec2(0.398799986, 0.11163), Vec2(0.381410003, 0.127570003), Vec2(0.366649985, 0.118940003), Vec2(0.365759999, 0.0930700004), Vec2(0.383920014, 0.101089999), Vec2(0.366649985, 0.118940003), Vec2(0.349559993, 0.112450004), Vec2(0.378410012, 0.177039996), Vec2(0.388550013, 0.185829997), Vec2(0.378960013, 0.199540004), Vec2(0.368229985, 0.192359999), Vec2(0.388550013, 0.185829997), Vec2(0.397190005, 0.194999993), Vec2(0.388429999, 0.206740007), Vec2(0.378960013, 0.199540004), Vec2(0.400099993, 0.173299998), Vec2(0.408010006, 0.184530005), Vec2(0.397190005, 0.194999993), Vec2(0.388550013, 0.185829997), Vec2(0.390540004, 0.162719995), Vec2(0.400099993, 0.173299998), Vec2(0.388550013, 0.185829997), Vec2(0.378410012, 0.177039996), Vec2(0.397190005, 0.194999993), Vec2(0.404000014, 0.204390004), Vec2(0.396369994, 0.213410005), Vec2(0.388429999, 0.206740007), Vec2(0.404000014, 0.204390004), Vec2(0.40823999, 0.214259997), Vec2(0.401600003, 0.218140006), Vec2(0.396369994, 0.213410005), Vec2(0.414130002, 0.196360007), Vec2(0.418190002, 0.208949998), Vec2(0.40823999, 0.214259997), Vec2(0.404000014, 0.204390004), Vec2(0.408010006, 0.184530005), Vec2(0.414130002, 0.196360007), Vec2(0.404000014, 0.204390004), Vec2(0.397190005, 0.194999993), Vec2(0.420610011, 0.175160006), Vec2(0.426070005, 0.188979998), Vec2(0.414130002, 0.196360007), Vec2(0.408010006, 0.184530005), Vec2(0.426070005, 0.188979998), Vec2(0.429830015, 0.203459993), Vec2(0.418190002, 0.208949998), Vec2(0.414130002, 0.196360007), Vec2(0.43937999, 0.182390004), Vec2(0.44264999, 0.198310003), Vec2(0.429830015, 0.203459993), Vec2(0.426070005, 0.188979998), Vec2(0.434689999, 0.166930005), Vec2(0.43937999, 0.182390004), Vec2(0.426070005, 0.188979998), Vec2(0.420610011, 0.175160006), Vec2(0.404619992, 0.149489999), Vec2(0.413459986, 0.161980003), Vec2(0.400099993, 0.173299998), Vec2(0.390540004, 0.162719995), Vec2(0.413459986, 0.161980003), Vec2(0.420610011, 0.175160006), Vec2(0.408010006, 0.184530005), Vec2(0.400099993, 0.173299998), Vec2(0.428490013, 0.15196), Vec2(0.434689999, 0.166930005), Vec2(0.420610011, 0.175160006), Vec2(0.413459986, 0.161980003), Vec2(0.420630008, 0.137559995), Vec2(0.428490013, 0.15196), Vec2(0.413459986, 0.161980003), Vec2(0.404619992, 0.149489999), Vec2(0.438470006, 0.127269998), Vec2(0.444979995, 0.143480003), Vec2(0.428490013, 0.15196), Vec2(0.420630008, 0.137559995), Vec2(0.444979995, 0.143480003), Vec2(0.449990004, 0.160019994), Vec2(0.434689999, 0.166930005), Vec2(0.428490013, 0.15196), Vec2(0.462700009, 0.136889994), Vec2(0.466239989, 0.154719993), Vec2(0.449990004, 0.160019994), Vec2(0.444979995, 0.143480003), Vec2(0.457980007, 0.119110003), Vec2(0.462700009, 0.136889994), Vec2(0.444979995, 0.143480003), Vec2(0.438470006, 0.127269998), Vec2(0.449990004, 0.160019994), Vec2(0.453729987, 0.176819995), Vec2(0.43937999, 0.182390004), Vec2(0.434689999, 0.166930005), Vec2(0.453729987, 0.176819995), Vec2(0.456360012, 0.193859994), Vec2(0.44264999, 0.198310003), Vec2(0.43937999, 0.182390004), Vec2(0.46886, 0.172539994), Vec2(0.470699996, 0.190410003), Vec2(0.456360012, 0.193859994), Vec2(0.453729987, 0.176819995), Vec2(0.466239989, 0.154719993), Vec2(0.46886, 0.172539994), Vec2(0.453729987, 0.176819995), Vec2(0.449990004, 0.160019994), Vec2(0.483150005, 0.151309997), Vec2(0.484499991, 0.169809997), Vec2(0.46886, 0.172539994), Vec2(0.466239989, 0.154719993), Vec2(0.484499991, 0.169809997), Vec2(0.485439986, 0.188199997), Vec2(0.470699996, 0.190410003), Vec2(0.46886, 0.172539994), Vec2(0.500389993, 0.168799996), Vec2(0.500389993, 0.187380001), Vec2(0.485439986, 0.188199997), Vec2(0.484499991, 0.169809997), Vec2(0.500389993, 0.150049999), Vec2(0.500389993, 0.168799996), Vec2(0.484499991, 0.169809997), Vec2(0.483150005, 0.151309997), Vec2(0.478810012, 0.11366), Vec2(0.48131001, 0.132609993), Vec2(0.462700009, 0.136889994), Vec2(0.457980007, 0.119110003), Vec2(0.48131001, 0.132609993), Vec2(0.483150005, 0.151309997), Vec2(0.466239989, 0.154719993), Vec2(0.462700009, 0.136889994), Vec2(0.500389993, 0.130999997), Vec2(0.500389993, 0.150049999), Vec2(0.483150005, 0.151309997), Vec2(0.48131001, 0.132609993), Vec2(0.500389993, 0.111529998), Vec2(0.500389993, 0.130999997), Vec2(0.48131001, 0.132609993), Vec2(0.478810012, 0.11366), Vec2(0.385479987, 0.0738499984), Vec2(0.404700011, 0.0839999989), Vec2(0.383920014, 0.101089999), Vec2(0.365759999, 0.0930700004), Vec2(0.404700011, 0.0839999989), Vec2(0.419149995, 0.0969699994), Vec2(0.398799986, 0.11163), Vec2(0.383920014, 0.101089999), Vec2(0.430110008, 0.0683600008), Vec2(0.442900002, 0.0843499973), Vec2(0.419149995, 0.0969699994), Vec2(0.404700011, 0.0839999989), Vec2(0.410430014, 0.0550500005), Vec2(0.430110008, 0.0683600008), Vec2(0.404700011, 0.0839999989), Vec2(0.385479987, 0.0738499984), Vec2(0.419149995, 0.0969699994), Vec2(0.430079997, 0.11163), Vec2(0.410869986, 0.123989999), Vec2(0.398799986, 0.11163), Vec2(0.430079997, 0.11163), Vec2(0.438470006, 0.127269998), Vec2(0.420630008, 0.137559995), Vec2(0.410869986, 0.123989999), Vec2(0.451660007, 0.101489998), Vec2(0.457980007, 0.119110003), Vec2(0.438470006, 0.127269998), Vec2(0.430079997, 0.11163), Vec2(0.442900002, 0.0843499973), Vec2(0.451660007, 0.101489998), Vec2(0.430079997, 0.11163), Vec2(0.419149995, 0.0969699994), Vec2(0.470209986, 0.0749899969), Vec2(0.475340009, 0.0944299996), Vec2(0.451660007, 0.101489998), Vec2(0.442900002, 0.0843499973), Vec2(0.475340009, 0.0944299996), Vec2(0.478810012, 0.11366), Vec2(0.457980007, 0.119110003), Vec2(0.451660007, 0.101489998), Vec2(0.500389993, 0.0915099978), Vec2(0.500389993, 0.111529998), Vec2(0.478810012, 0.11366), Vec2(0.475340009, 0.0944299996), Vec2(0.500389993, 0.0707300007), Vec2(0.500389993, 0.0915099978), Vec2(0.475340009, 0.0944299996), Vec2(0.470209986, 0.0749899969), Vec2(0.444700003, 0.03737), Vec2(0.461699992, 0.0555999987), Vec2(0.430110008, 0.0683600008), Vec2(0.410430014, 0.0550500005), Vec2(0.461699992, 0.0555999987), Vec2(0.470209986, 0.0749899969), Vec2(0.442900002, 0.0843499973), Vec2(0.430110008, 0.0683600008), Vec2(0.500389993, 0.0486599989), Vec2(0.500389993, 0.0707300007), Vec2(0.470209986, 0.0749899969), Vec2(0.461699992, 0.0555999987), Vec2(0.500389993, 0.0235900003), Vec2(0.500389993, 0.0486599989), Vec2(0.461699992, 0.0555999987), Vec2(0.444700003, 0.03737), Vec2(0.554970026, 0.0373000018), Vec2(0.538860023, 0.0546699986), Vec2(0.500389993, 0.0486599989), Vec2(0.500389993, 0.0235900003), Vec2(0.538860023, 0.0546699986), Vec2(0.530470014, 0.0741500035), Vec2(0.500389993, 0.0707300007), Vec2(0.500389993, 0.0486599989), Vec2(0.570439994, 0.0678500012), Vec2(0.557780027, 0.0835099965), Vec2(0.530470014, 0.0741500035), Vec2(0.538860023, 0.0546699986), Vec2(0.589569986, 0.0550599992), Vec2(0.570439994, 0.0678500012), Vec2(0.538860023, 0.0546699986), Vec2(0.554970026, 0.0373000018), Vec2(0.530470014, 0.0741500035), Vec2(0.525370002, 0.0937900022), Vec2(0.500389993, 0.0915099978), Vec2(0.500389993, 0.0707300007), Vec2(0.525370002, 0.0937900022), Vec2(0.521920025, 0.113179997), Vec2(0.500389993, 0.111529998), Vec2(0.500389993, 0.0915099978), Vec2(0.54904002, 0.100620002), Vec2(0.542729974, 0.118330002), Vec2(0.521920025, 0.113179997), Vec2(0.525370002, 0.0937900022), Vec2(0.557780027, 0.0835099965), Vec2(0.54904002, 0.100620002), Vec2(0.525370002, 0.0937900022), Vec2(0.530470014, 0.0741500035), Vec2(0.581560016, 0.0963900015), Vec2(0.570640028, 0.110820003), Vec2(0.54904002, 0.100620002), Vec2(0.557780027, 0.0835099965), Vec2(0.570640028, 0.110820003), Vec2(0.562250018, 0.126409993), Vec2(0.542729974, 0.118330002), Vec2(0.54904002, 0.100620002), Vec2(0.589890003, 0.123389997), Vec2(0.580110013, 0.136790007), Vec2(0.562250018, 0.126409993), Vec2(0.570640028, 0.110820003), Vec2(0.60194999, 0.111340001), Vec2(0.589890003, 0.123389997), Vec2(0.570640028, 0.110820003), Vec2(0.581560016, 0.0963900015), Vec2(0.614889979, 0.0740899965), Vec2(0.595910013, 0.0838200003), Vec2(0.570439994, 0.0678500012), Vec2(0.589569986, 0.0550599992), Vec2(0.595910013, 0.0838200003), Vec2(0.581560016, 0.0963900015), Vec2(0.557780027, 0.0835099965), Vec2(0.570439994, 0.0678500012), Vec2(0.616760015, 0.101180002), Vec2(0.60194999, 0.111340001), Vec2(0.581560016, 0.0963900015), Vec2(0.595910013, 0.0838200003), Vec2(0.634829998, 0.0935700014), Vec2(0.616760015, 0.101180002), Vec2(0.595910013, 0.0838200003), Vec2(0.614889979, 0.0740899965), Vec2(0.521920025, 0.113179997), Vec2(0.519439995, 0.132259995), Vec2(0.500389993, 0.130999997), Vec2(0.500389993, 0.111529998), Vec2(0.519439995, 0.132259995), Vec2(0.517610013, 0.151030004), Vec2(0.500389993, 0.150049999), Vec2(0.500389993, 0.130999997), Vec2(0.538030028, 0.136240005), Vec2(0.534510016, 0.154170007), Vec2(0.517610013, 0.151030004), Vec2(0.519439995, 0.132259995), Vec2(0.542729974, 0.118330002), Vec2(0.538030028, 0.136240005), Vec2(0.519439995, 0.132259995), Vec2(0.521920025, 0.113179997), Vec2(0.517610013, 0.151030004), Vec2(0.516279995, 0.169579998), Vec2(0.500389993, 0.168799996), Vec2(0.500389993, 0.150049999), Vec2(0.516279995, 0.169579998), Vec2(0.515349984, 0.188010007), Vec2(0.500389993, 0.187380001), Vec2(0.500389993, 0.168799996), Vec2(0.531910002, 0.172079995), Vec2(0.530099988, 0.190019995), Vec2(0.515349984, 0.188010007), Vec2(0.516279995, 0.169579998), Vec2(0.534510016, 0.154170007), Vec2(0.531910002, 0.172079995), Vec2(0.516279995, 0.169579998), Vec2(0.517610013, 0.151030004), Vec2(0.550750017, 0.159290001), Vec2(0.547029972, 0.176170006), Vec2(0.531910002, 0.172079995), Vec2(0.534510016, 0.154170007), Vec2(0.547029972, 0.176170006), Vec2(0.544420004, 0.193299994), Vec2(0.530099988, 0.190019995), Vec2(0.531910002, 0.172079995), Vec2(0.561360002, 0.181649998), Vec2(0.558099985, 0.19765), Vec2(0.544420004, 0.193299994), Vec2(0.547029972, 0.176170006), Vec2(0.566039979, 0.166130006), Vec2(0.561360002, 0.181649998), Vec2(0.547029972, 0.176170006), Vec2(0.550750017, 0.159290001), Vec2(0.562250018, 0.126409993), Vec2(0.555750012, 0.142660007), Vec2(0.538030028, 0.136240005), Vec2(0.542729974, 0.118330002), Vec2(0.555750012, 0.142660007), Vec2(0.550750017, 0.159290001), Vec2(0.534510016, 0.154170007), Vec2(0.538030028, 0.136240005), Vec2(0.572250009, 0.151130006), Vec2(0.566039979, 0.166130006), Vec2(0.550750017, 0.159290001), Vec2(0.555750012, 0.142660007), Vec2(0.580110013, 0.136790007), Vec2(0.572250009, 0.151130006), Vec2(0.555750012, 0.142660007), Vec2(0.562250018, 0.126409993), Vec2(0.59612, 0.14892), Vec2(0.587260008, 0.161269993), Vec2(0.572250009, 0.151130006), Vec2(0.580110013, 0.136790007), Vec2(0.587260008, 0.161269993), Vec2(0.5801, 0.17441), Vec2(0.566039979, 0.166130006), Vec2(0.572250009, 0.151130006), Vec2(0.600589991, 0.172800004), Vec2(0.59266001, 0.183919996), Vec2(0.5801, 0.17441), Vec2(0.587260008, 0.161269993), Vec2(0.610159993, 0.162400007), Vec2(0.600589991, 0.172800004), Vec2(0.587260008, 0.161269993), Vec2(0.59612, 0.14892), Vec2(0.5801, 0.17441), Vec2(0.574630022, 0.188250005), Vec2(0.561360002, 0.181649998), Vec2(0.566039979, 0.166130006), Vec2(0.574630022, 0.188250005), Vec2(0.570869982, 0.202779993), Vec2(0.558099985, 0.19765), Vec2(0.561360002, 0.181649998), Vec2(0.58653003, 0.195720002), Vec2(0.582449973, 0.208340004), Vec2(0.570869982, 0.202779993), Vec2(0.574630022, 0.188250005), Vec2(0.59266001, 0.183919996), Vec2(0.58653003, 0.195720002), Vec2(0.574630022, 0.188250005), Vec2(0.5801, 0.17441), Vec2(0.603410006, 0.194590002), Vec2(0.596599996, 0.203909993), Vec2(0.58653003, 0.195720002), Vec2(0.59266001, 0.183919996), Vec2(0.596599996, 0.203909993), Vec2(0.592339993, 0.213760003), Vec2(0.582449973, 0.208340004), Vec2(0.58653003, 0.195720002), Vec2(0.604160011, 0.213080004), Vec2(0.598919988, 0.217739999), Vec2(0.592339993, 0.213760003), Vec2(0.596599996, 0.203909993), Vec2(0.612079978, 0.206560001), Vec2(0.604160011, 0.213080004), Vec2(0.596599996, 0.203909993), Vec2(0.603410006, 0.194590002), Vec2(0.622179985, 0.177019998), Vec2(0.612049997, 0.18558), Vec2(0.600589991, 0.172800004), Vec2(0.610159993, 0.162400007), Vec2(0.612049997, 0.18558), Vec2(0.603410006, 0.194590002), Vec2(0.59266001, 0.183919996), Vec2(0.600589991, 0.172800004), Vec2(0.621510029, 0.199560001), Vec2(0.612079978, 0.206560001), Vec2(0.603410006, 0.194590002), Vec2(0.612049997, 0.18558), Vec2(0.632189989, 0.192650005), Vec2(0.621510029, 0.199560001), Vec2(0.612049997, 0.18558), Vec2(0.622179985, 0.177019998), Vec2(0.65109998, 0.113219999), Vec2(0.634060025, 0.119309999), Vec2(0.616760015, 0.101180002), Vec2(0.634829998, 0.0935700014), Vec2(0.634060025, 0.119309999), Vec2(0.619329989, 0.127570003), Vec2(0.60194999, 0.111340001), Vec2(0.616760015, 0.101180002), Vec2(0.648519993, 0.137889996), Vec2(0.634079993, 0.144649997), Vec2(0.619329989, 0.127570003), Vec2(0.634060025, 0.119309999), Vec2(0.664640009, 0.132939994), Vec2(0.648519993, 0.137889996), Vec2(0.634060025, 0.119309999), Vec2(0.65109998, 0.113219999), Vec2(0.619329989, 0.127570003), Vec2(0.606750011, 0.137569994), Vec2(0.589890003, 0.123389997), Vec2(0.60194999, 0.111340001), Vec2(0.606750011, 0.137569994), Vec2(0.59612, 0.14892), Vec2(0.580110013, 0.136790007), Vec2(0.589890003, 0.123389997), Vec2(0.621309996, 0.152930006), Vec2(0.610159993, 0.162400007), Vec2(0.59612, 0.14892), Vec2(0.606750011, 0.137569994), Vec2(0.634079993, 0.144649997), Vec2(0.621309996, 0.152930006), Vec2(0.606750011, 0.137569994), Vec2(0.619329989, 0.127570003), Vec2(0.646520019, 0.16234), Vec2(0.63369, 0.169180006), Vec2(0.621309996, 0.152930006), Vec2(0.634079993, 0.144649997), Vec2(0.63369, 0.169180006), Vec2(0.622179985, 0.177019998), Vec2(0.610159993, 0.162400007), Vec2(0.621309996, 0.152930006), Vec2(0.643999994, 0.186210006), Vec2(0.632189989, 0.192650005), Vec2(0.622179985, 0.177019998), Vec2(0.63369, 0.169180006), Vec2(0.656889975, 0.180539995), Vec2(0.643999994, 0.186210006), Vec2(0.63369, 0.169180006), Vec2(0.646520019, 0.16234), Vec2(0.67602998, 0.152689993), Vec2(0.660650015, 0.156760007), Vec2(0.648519993, 0.137889996), Vec2(0.664640009, 0.132939994), Vec2(0.660650015, 0.156760007), Vec2(0.646520019, 0.16234), Vec2(0.634079993, 0.144649997), Vec2(0.648519993, 0.137889996), Vec2(0.670799971, 0.175909996), Vec2(0.656889975, 0.180539995), Vec2(0.646520019, 0.16234), Vec2(0.660650015, 0.156760007), Vec2(0.685660005, 0.172519997), Vec2(0.670799971, 0.175909996), Vec2(0.660650015, 0.156760007), Vec2(0.67602998, 0.152689993), Vec2(0.858929992, 0.0961600021), Vec2(0.830470026, 0.0758399963), Vec2(0.841040015, 0.0580400005), Vec2(0.871450007, 0.0797699988), Vec2(0.830470026, 0.0758399963), Vec2(0.799139977, 0.0584900007), Vec2(0.807600021, 0.0392899998), Vec2(0.841040015, 0.0580400005), Vec2(0.821529984, 0.0930500031), Vec2(0.792649984, 0.0770500004), Vec2(0.799139977, 0.0584900007), Vec2(0.830470026, 0.0758399963), Vec2(0.847829998, 0.111960001), Vec2(0.821529984, 0.0930500031), Vec2(0.830470026, 0.0758399963), Vec2(0.858929992, 0.0961600021), Vec2(0.799139977, 0.0584900007), Vec2(0.764919996, 0.0443399996), Vec2(0.770950019, 0.0238300003), Vec2(0.807600021, 0.0392899998), Vec2(0.764919996, 0.0443399996), Vec2(0.727729976, 0.0337300003), Vec2(0.730799973, 0.0120599996), Vec2(0.770950019, 0.0238300003), Vec2(0.76135999, 0.0641499981), Vec2(0.727869987, 0.0545599982), Vec2(0.727729976, 0.0337300003), Vec2(0.764919996, 0.0443399996), Vec2(0.792649984, 0.0770500004), Vec2(0.76135999, 0.0641499981), Vec2(0.764919996, 0.0443399996), Vec2(0.799139977, 0.0584900007), Vec2(0.787840009, 0.0951000005), Vec2(0.7597, 0.0834600031), Vec2(0.76135999, 0.0641499981), Vec2(0.792649984, 0.0770500004), Vec2(0.7597, 0.0834600031), Vec2(0.730069995, 0.0748599991), Vec2(0.727869987, 0.0545599982), Vec2(0.76135999, 0.0641499981), Vec2(0.75940001, 0.102349997), Vec2(0.733410001, 0.0947899967), Vec2(0.730069995, 0.0748599991), Vec2(0.7597, 0.0834600031), Vec2(0.784370005, 0.112669997), Vec2(0.75940001, 0.102349997), Vec2(0.7597, 0.0834600031), Vec2(0.787840009, 0.0951000005), Vec2(0.838029981, 0.127169997), Vec2(0.814050019, 0.109700002), Vec2(0.821529984, 0.0930500031), Vec2(0.847829998, 0.111960001), Vec2(0.814050019, 0.109700002), Vec2(0.787840009, 0.0951000005), Vec2(0.792649984, 0.0770500004), Vec2(0.821529984, 0.0930500031), Vec2(0.807829976, 0.125780001), Vec2(0.784370005, 0.112669997), Vec2(0.787840009, 0.0951000005), Vec2(0.814050019, 0.109700002), Vec2(0.829349995, 0.141719997), Vec2(0.807829976, 0.125780001), Vec2(0.814050019, 0.109700002), Vec2(0.838029981, 0.127169997), Vec2(0.727729976, 0.0337300003), Vec2(0.687520027, 0.0271099992), Vec2(0.686619997, 0.00461000018), Vec2(0.730799973, 0.0120599996), Vec2(0.687520027, 0.0271099992), Vec2(0.644299984, 0.02513), Vec2(0.63707, 0.00246000011), Vec2(0.686619997, 0.00461000018), Vec2(0.692600012, 0.0485499986), Vec2(0.656340003, 0.0464400016), Vec2(0.644299984, 0.02513), Vec2(0.687520027, 0.0271099992), Vec2(0.727869987, 0.0545599982), Vec2(0.692600012, 0.0485499986), Vec2(0.687520027, 0.0271099992), Vec2(0.727729976, 0.0337300003), Vec2(0.644299984, 0.02513), Vec2(0.598770022, 0.0284499992), Vec2(0.578649998, 0.0076700002), Vec2(0.63707, 0.00246000011), Vec2(0.598770022, 0.0284499992), Vec2(0.554970026, 0.0373000018), Vec2(0.500389993, 0.0235900003), Vec2(0.578649998, 0.0076700002), Vec2(0.620769978, 0.048489999), Vec2(0.589569986, 0.0550599992), Vec2(0.554970026, 0.0373000018), Vec2(0.598770022, 0.0284499992), Vec2(0.656340003, 0.0464400016), Vec2(0.620769978, 0.048489999), Vec2(0.598770022, 0.0284499992), Vec2(0.644299984, 0.02513), Vec2(0.669089973, 0.0673699975), Vec2(0.640150011, 0.068810001), Vec2(0.620769978, 0.048489999), Vec2(0.656340003, 0.0464400016), Vec2(0.640150011, 0.068810001), Vec2(0.614889979, 0.0740899965), Vec2(0.589569986, 0.0550599992), Vec2(0.620769978, 0.048489999), Vec2(0.656589985, 0.089259997), Vec2(0.634829998, 0.0935700014), Vec2(0.614889979, 0.0740899965), Vec2(0.640150011, 0.068810001), Vec2(0.681060016, 0.0881400034), Vec2(0.656589985, 0.089259997), Vec2(0.640150011, 0.068810001), Vec2(0.669089973, 0.0673699975), Vec2(0.730069995, 0.0748599991), Vec2(0.699549973, 0.0694399998), Vec2(0.692600012, 0.0485499986), Vec2(0.727869987, 0.0545599982), Vec2(0.699549973, 0.0694399998), Vec2(0.669089973, 0.0673699975), Vec2(0.656340003, 0.0464400016), Vec2(0.692600012, 0.0485499986), Vec2(0.707019985, 0.0900299996), Vec2(0.681060016, 0.0881400034), Vec2(0.669089973, 0.0673699975), Vec2(0.699549973, 0.0694399998), Vec2(0.733410001, 0.0947899967), Vec2(0.707019985, 0.0900299996), Vec2(0.699549973, 0.0694399998), Vec2(0.730069995, 0.0748599991), Vec2(0.737330019, 0.114430003), Vec2(0.714359999, 0.110380001), Vec2(0.707019985, 0.0900299996), Vec2(0.733410001, 0.0947899967), Vec2(0.714359999, 0.110380001), Vec2(0.691839993, 0.108769998), Vec2(0.681060016, 0.0881400034), Vec2(0.707019985, 0.0900299996), Vec2(0.721369982, 0.130539998), Vec2(0.701439977, 0.129240006), Vec2(0.691839993, 0.108769998), Vec2(0.714359999, 0.110380001), Vec2(0.741609991, 0.133860007), Vec2(0.721369982, 0.130539998), Vec2(0.714359999, 0.110380001), Vec2(0.737330019, 0.114430003), Vec2(0.691839993, 0.108769998), Vec2(0.670520008, 0.109690003), Vec2(0.656589985, 0.089259997), Vec2(0.681060016, 0.0881400034), Vec2(0.670520008, 0.109690003), Vec2(0.65109998, 0.113219999), Vec2(0.634829998, 0.0935700014), Vec2(0.656589985, 0.089259997), Vec2(0.682380021, 0.130030006), Vec2(0.664640009, 0.132939994), Vec2(0.65109998, 0.113219999), Vec2(0.670520008, 0.109690003), Vec2(0.701439977, 0.129240006), Vec2(0.682380021, 0.130030006), Vec2(0.670520008, 0.109690003), Vec2(0.691839993, 0.108769998), Vec2(0.710009992, 0.149580002), Vec2(0.692550004, 0.15027), Vec2(0.682380021, 0.130030006), Vec2(0.701439977, 0.129240006), Vec2(0.692550004, 0.15027), Vec2(0.67602998, 0.152689993), Vec2(0.664640009, 0.132939994), Vec2(0.682380021, 0.130030006), Vec2(0.701359987, 0.170489997), Vec2(0.685660005, 0.172519997), Vec2(0.67602998, 0.152689993), Vec2(0.692550004, 0.15027), Vec2(0.717710018, 0.169870004), Vec2(0.701359987, 0.170489997), Vec2(0.692550004, 0.15027), Vec2(0.710009992, 0.149580002), Vec2(0.746219993, 0.153190002), Vec2(0.728049994, 0.150580004), Vec2(0.721369982, 0.130539998), Vec2(0.741609991, 0.133860007), Vec2(0.728049994, 0.150580004), Vec2(0.710009992, 0.149580002), Vec2(0.701439977, 0.129240006), Vec2(0.721369982, 0.130539998), Vec2(0.734449983, 0.170599997), Vec2(0.717710018, 0.169870004), Vec2(0.710009992, 0.149580002), Vec2(0.728049994, 0.150580004), Vec2(0.751190007, 0.172560006), Vec2(0.734449983, 0.170599997), Vec2(0.728049994, 0.150580004), Vec2(0.746219993, 0.153190002), Vec2(0.821680009, 0.155430004), Vec2(0.802730024, 0.141210005), Vec2(0.807829976, 0.125780001), Vec2(0.829349995, 0.141719997), Vec2(0.802730024, 0.141210005), Vec2(0.78204, 0.129749998), Vec2(0.784370005, 0.112669997), Vec2(0.807829976, 0.125780001), Vec2(0.79877001, 0.155890003), Vec2(0.780830026, 0.146410003), Vec2(0.78204, 0.129749998), Vec2(0.802730024, 0.141210005), Vec2(0.814970016, 0.168009996), Vec2(0.79877001, 0.155890003), Vec2(0.802730024, 0.141210005), Vec2(0.821680009, 0.155430004), Vec2(0.78204, 0.129749998), Vec2(0.76007998, 0.12088), Vec2(0.75940001, 0.102349997), Vec2(0.784370005, 0.112669997), Vec2(0.76007998, 0.12088), Vec2(0.737330019, 0.114430003), Vec2(0.733410001, 0.0947899967), Vec2(0.75940001, 0.102349997), Vec2(0.761609972, 0.139139995), Vec2(0.741609991, 0.133860007), Vec2(0.737330019, 0.114430003), Vec2(0.76007998, 0.12088), Vec2(0.780830026, 0.146410003), Vec2(0.761609972, 0.139139995), Vec2(0.76007998, 0.12088), Vec2(0.78204, 0.129749998), Vec2(0.780969977, 0.16279), Vec2(0.764050007, 0.157289997), Vec2(0.761609972, 0.139139995), Vec2(0.780830026, 0.146410003), Vec2(0.764050007, 0.157289997), Vec2(0.746219993, 0.153190002), Vec2(0.741609991, 0.133860007), Vec2(0.761609972, 0.139139995), Vec2(0.767509997, 0.175549999), Vec2(0.751190007, 0.172560006), Vec2(0.746219993, 0.153190002), Vec2(0.764050007, 0.157289997), Vec2(0.782850027, 0.179260001), Vec2(0.767509997, 0.175549999), Vec2(0.764050007, 0.157289997), Vec2(0.780969977, 0.16279), Vec2(0.809329987, 0.178929999), Vec2(0.796320021, 0.16979), Vec2(0.79877001, 0.155890003), Vec2(0.814970016, 0.168009996), Vec2(0.796320021, 0.16979), Vec2(0.780969977, 0.16279), Vec2(0.780830026, 0.146410003), Vec2(0.79877001, 0.155890003), Vec2(0.796360016, 0.183239996), Vec2(0.782850027, 0.179260001), Vec2(0.780969977, 0.16279), Vec2(0.796320021, 0.16979), Vec2(0.805589974, 0.186350003), Vec2(0.796360016, 0.183239996), Vec2(0.796320021, 0.16979), Vec2(0.809329987, 0.178929999), Vec2(0.190530002, 0.502749979), Vec2(0.179619998, 0.489800006), Vec2(0.188820004, 0.484710008), Vec2(0.194230005, 0.495350003), Vec2(0.179619998, 0.489800006), Vec2(0.169829994, 0.473269999), Vec2(0.181649998, 0.468769997), Vec2(0.188820004, 0.484710008), Vec2(0.170719996, 0.498369992), Vec2(0.158350006, 0.480349988), Vec2(0.169829994, 0.473269999), Vec2(0.179619998, 0.489800006), Vec2(0.184980005, 0.513610005), Vec2(0.170719996, 0.498369992), Vec2(0.179619998, 0.489800006), Vec2(0.190530002, 0.502749979), Vec2(0.169829994, 0.473269999), Vec2(0.161090001, 0.454160005), Vec2(0.174510002, 0.450219989), Vec2(0.181649998, 0.468769997), Vec2(0.161090001, 0.454160005), Vec2(0.153569996, 0.433169991), Vec2(0.168099999, 0.429879993), Vec2(0.174510002, 0.450219989), Vec2(0.147750005, 0.460040003), Vec2(0.138909996, 0.437940001), Vec2(0.153569996, 0.433169991), Vec2(0.161090001, 0.454160005), Vec2(0.158350006, 0.480349988), Vec2(0.147750005, 0.460040003), Vec2(0.161090001, 0.454160005), Vec2(0.169829994, 0.473269999), Vec2(0.146709993, 0.489329994), Vec2(0.134210005, 0.467550009), Vec2(0.147750005, 0.460040003), Vec2(0.158350006, 0.480349988), Vec2(0.134210005, 0.467550009), Vec2(0.123899996, 0.44400999), Vec2(0.138909996, 0.437940001), Vec2(0.147750005, 0.460040003), Vec2(0.120169997, 0.476319999), Vec2(0.108309999, 0.451160014), Vec2(0.123899996, 0.44400999), Vec2(0.134210005, 0.467550009), Vec2(0.134550005, 0.499680012), Vec2(0.120169997, 0.476319999), Vec2(0.134210005, 0.467550009), Vec2(0.146709993, 0.489329994), Vec2(0.178340003, 0.52609998), Vec2(0.161420003, 0.508979976), Vec2(0.170719996, 0.498369992), Vec2(0.184980005, 0.513610005), Vec2(0.161420003, 0.508979976), Vec2(0.146709993, 0.489329994), Vec2(0.158350006, 0.480349988), Vec2(0.170719996, 0.498369992), Vec2(0.151419997, 0.520910025), Vec2(0.134550005, 0.499680012), Vec2(0.146709993, 0.489329994), Vec2(0.161420003, 0.508979976), Vec2(0.170719996, 0.539680004), Vec2(0.151419997, 0.520910025), Vec2(0.161420003, 0.508979976), Vec2(0.178340003, 0.52609998), Vec2(0.153569996, 0.433169991), Vec2(0.147499993, 0.410809994), Vec2(0.162780002, 0.408250004), Vec2(0.168099999, 0.429879993), Vec2(0.147499993, 0.410809994), Vec2(0.143040001, 0.387490004), Vec2(0.158830002, 0.385720015), Vec2(0.162780002, 0.408250004), Vec2(0.131899998, 0.41444999), Vec2(0.126809999, 0.389970005), Vec2(0.143040001, 0.387490004), Vec2(0.147499993, 0.410809994), Vec2(0.138909996, 0.437940001), Vec2(0.131899998, 0.41444999), Vec2(0.147499993, 0.410809994), Vec2(0.153569996, 0.433169991), Vec2(0.143040001, 0.387490004), Vec2(0.140310004, 0.363550007), Vec2(0.156379998, 0.362619996), Vec2(0.158830002, 0.385720015), Vec2(0.140310004, 0.363550007), Vec2(0.139359996, 0.339329988), Vec2(0.155520007, 0.339249998), Vec2(0.156379998, 0.362619996), Vec2(0.123709999, 0.364850014), Vec2(0.12263, 0.339430004), Vec2(0.139359996, 0.339329988), Vec2(0.140310004, 0.363550007), Vec2(0.126809999, 0.389970005), Vec2(0.123709999, 0.364850014), Vec2(0.140310004, 0.363550007), Vec2(0.143040001, 0.387490004), Vec2(0.109949999, 0.393119991), Vec2(0.106409997, 0.36649999), Vec2(0.123709999, 0.364850014), Vec2(0.126809999, 0.389970005), Vec2(0.106409997, 0.36649999), Vec2(0.105169997, 0.339560002), Vec2(0.12263, 0.339430004), Vec2(0.123709999, 0.364850014), Vec2(0.0882600024, 0.368470013), Vec2(0.0868399963, 0.339709997), Vec2(0.105169997, 0.339560002), Vec2(0.106409997, 0.36649999), Vec2(0.0923099965, 0.396869987), Vec2(0.0882600024, 0.368470013), Vec2(0.106409997, 0.36649999), Vec2(0.109949999, 0.393119991), Vec2(0.123899996, 0.44400999), Vec2(0.115790002, 0.419070005), Vec2(0.131899998, 0.41444999), Vec2(0.138909996, 0.437940001), Vec2(0.115790002, 0.419070005), Vec2(0.109949999, 0.393119991), Vec2(0.126809999, 0.389970005), Vec2(0.131899998, 0.41444999), Vec2(0.0990099981, 0.424549997), Vec2(0.0923099965, 0.396869987), Vec2(0.109949999, 0.393119991), Vec2(0.115790002, 0.419070005), Vec2(0.108309999, 0.451160014), Vec2(0.0990099981, 0.424549997), Vec2(0.115790002, 0.419070005), Vec2(0.123899996, 0.44400999), Vec2(0.091959998, 0.459190011), Vec2(0.0813800022, 0.43077001), Vec2(0.0990099981, 0.424549997), Vec2(0.108309999, 0.451160014), Vec2(0.0813800022, 0.43077001), Vec2(0.0737499967, 0.401149988), Vec2(0.0923099965, 0.396869987), Vec2(0.0990099981, 0.424549997), Vec2(0.0627800003, 0.43761), Vec2(0.0541299991, 0.405900002), Vec2(0.0737499967, 0.401149988), Vec2(0.0813800022, 0.43077001), Vec2(0.0746800005, 0.46796), Vec2(0.0627800003, 0.43761), Vec2(0.0813800022, 0.43077001), Vec2(0.091959998, 0.459190011), Vec2(0.0737499967, 0.401149988), Vec2(0.0691199973, 0.370730013), Vec2(0.0882600024, 0.368470013), Vec2(0.0923099965, 0.396869987), Vec2(0.0691199973, 0.370730013), Vec2(0.0674899966, 0.339899987), Vec2(0.0868399963, 0.339709997), Vec2(0.0882600024, 0.368470013), Vec2(0.0488499999, 0.373259991), Vec2(0.0469899997, 0.340140015), Vec2(0.0674899966, 0.339899987), Vec2(0.0691199973, 0.370730013), Vec2(0.0541299991, 0.405900002), Vec2(0.0488499999, 0.373259991), Vec2(0.0691199973, 0.370730013), Vec2(0.0737499967, 0.401149988), Vec2(0.0333099999, 0.411060005), Vec2(0.0273199994, 0.376029998), Vec2(0.0488499999, 0.373259991), Vec2(0.0541299991, 0.405900002), Vec2(0.0273199994, 0.376029998), Vec2(0.0252, 0.340420008), Vec2(0.0469899997, 0.340140015), Vec2(0.0488499999, 0.373259991), Vec2(0.00437000021, 0.379020005), Vec2(0.00194999995, 0.340770006), Vec2(0.0252, 0.340420008), Vec2(0.0273199994, 0.376029998), Vec2(0.0111199999, 0.416570008), Vec2(0.00437000021, 0.379020005), Vec2(0.0273199994, 0.376029998), Vec2(0.0333099999, 0.411060005), Vec2(0.0563400015, 0.47736001), Vec2(0.0430399999, 0.444990009), Vec2(0.0627800003, 0.43761), Vec2(0.0746800005, 0.46796), Vec2(0.0430399999, 0.444990009), Vec2(0.0333099999, 0.411060005), Vec2(0.0541299991, 0.405900002), Vec2(0.0627800003, 0.43761), Vec2(0.0220100004, 0.452829987), Vec2(0.0111199999, 0.416570008), Vec2(0.0333099999, 0.411060005), Vec2(0.0430399999, 0.444990009), Vec2(0.03675, 0.487300009), Vec2(0.0220100004, 0.452829987), Vec2(0.0430399999, 0.444990009), Vec2(0.0563400015, 0.47736001), Vec2(0.162070006, 0.554069996), Vec2(0.140530005, 0.533789992), Vec2(0.151419997, 0.520910025), Vec2(0.170719996, 0.539680004), Vec2(0.140530005, 0.533789992), Vec2(0.121610001, 0.511030018), Vec2(0.134550005, 0.499680012), Vec2(0.151419997, 0.520910025), Vec2(0.128629997, 0.547410011), Vec2(0.10774, 0.523159981), Vec2(0.121610001, 0.511030018), Vec2(0.140530005, 0.533789992), Vec2(0.152280003, 0.569109976), Vec2(0.128629997, 0.547410011), Vec2(0.140530005, 0.533789992), Vec2(0.162070006, 0.554069996), Vec2(0.121610001, 0.511030018), Vec2(0.105400003, 0.486059994), Vec2(0.120169997, 0.476319999), Vec2(0.134550005, 0.499680012), Vec2(0.105400003, 0.486059994), Vec2(0.091959998, 0.459190011), Vec2(0.108309999, 0.451160014), Vec2(0.120169997, 0.476319999), Vec2(0.0897200033, 0.496589988), Vec2(0.0746800005, 0.46796), Vec2(0.091959998, 0.459190011), Vec2(0.105400003, 0.486059994), Vec2(0.10774, 0.523159981), Vec2(0.0897200033, 0.496589988), Vec2(0.105400003, 0.486059994), Vec2(0.121610001, 0.511030018), Vec2(0.0927900001, 0.535969973), Vec2(0.0729900002, 0.507790029), Vec2(0.0897200033, 0.496589988), Vec2(0.10774, 0.523159981), Vec2(0.0729900002, 0.507790029), Vec2(0.0563400015, 0.47736001), Vec2(0.0746800005, 0.46796), Vec2(0.0897200033, 0.496589988), Vec2(0.0550500005, 0.519580007), Vec2(0.03675, 0.487300009), Vec2(0.0563400015, 0.47736001), Vec2(0.0729900002, 0.507790029), Vec2(0.0766099989, 0.549399972), Vec2(0.0550500005, 0.519580007), Vec2(0.0729900002, 0.507790029), Vec2(0.0927900001, 0.535969973), Vec2(0.141220003, 0.584730029), Vec2(0.115560003, 0.561670005), Vec2(0.128629997, 0.547410011), Vec2(0.152280003, 0.569109976), Vec2(0.115560003, 0.561670005), Vec2(0.0927900001, 0.535969973), Vec2(0.10774, 0.523159981), Vec2(0.128629997, 0.547410011), Vec2(0.101209998, 0.576569974), Vec2(0.0766099989, 0.549399972), Vec2(0.0927900001, 0.535969973), Vec2(0.115560003, 0.561670005), Vec2(0.128780007, 0.600870013), Vec2(0.101209998, 0.576569974), Vec2(0.115560003, 0.561670005), Vec2(0.141220003, 0.584730029), Vec2(0.139359996, 0.339329988), Vec2(0.140200004, 0.315100014), Vec2(0.156289995, 0.315869987), Vec2(0.155520007, 0.339249998), Vec2(0.140200004, 0.315100014), Vec2(0.142829999, 0.291150004), Vec2(0.158659995, 0.292769998), Vec2(0.156289995, 0.315869987), Vec2(0.123570003, 0.31400001), Vec2(0.126540005, 0.288850009), Vec2(0.142829999, 0.291150004), Vec2(0.140200004, 0.315100014), Vec2(0.12263, 0.339430004), Vec2(0.123570003, 0.31400001), Vec2(0.140200004, 0.315100014), Vec2(0.139359996, 0.339329988), Vec2(0.142829999, 0.291150004), Vec2(0.147200003, 0.26778999), Vec2(0.162550002, 0.270229995), Vec2(0.158659995, 0.292769998), Vec2(0.147200003, 0.26778999), Vec2(0.153209999, 0.245409995), Vec2(0.167820007, 0.248590007), Vec2(0.162550002, 0.270229995), Vec2(0.131530002, 0.264319986), Vec2(0.138469994, 0.240779996), Vec2(0.153209999, 0.245409995), Vec2(0.147200003, 0.26778999), Vec2(0.126540005, 0.288850009), Vec2(0.131530002, 0.264319986), Vec2(0.147200003, 0.26778999), Vec2(0.142829999, 0.291150004), Vec2(0.109630004, 0.285939991), Vec2(0.115340002, 0.259909987), Vec2(0.131530002, 0.264319986), Vec2(0.126540005, 0.288850009), Vec2(0.115340002, 0.259909987), Vec2(0.123360001, 0.234899998), Vec2(0.138469994, 0.240779996), Vec2(0.131530002, 0.264319986), Vec2(0.0984599963, 0.254700005), Vec2(0.107660003, 0.227980003), Vec2(0.123360001, 0.234899998), Vec2(0.115340002, 0.259909987), Vec2(0.0919200033, 0.282480001), Vec2(0.0984599963, 0.254700005), Vec2(0.115340002, 0.259909987), Vec2(0.109630004, 0.285939991), Vec2(0.105169997, 0.339560002), Vec2(0.106239997, 0.312599987), Vec2(0.123570003, 0.31400001), Vec2(0.12263, 0.339430004), Vec2(0.106239997, 0.312599987), Vec2(0.109630004, 0.285939991), Vec2(0.126540005, 0.288850009), Vec2(0.123570003, 0.31400001), Vec2(0.088059999, 0.310939997), Vec2(0.0919200033, 0.282480001), Vec2(0.109630004, 0.285939991), Vec2(0.106239997, 0.312599987), Vec2(0.0868399963, 0.339709997), Vec2(0.088059999, 0.310939997), Vec2(0.106239997, 0.312599987), Vec2(0.105169997, 0.339560002), Vec2(0.153209999, 0.245409995), Vec2(0.160699993, 0.22439), Vec2(0.174219996, 0.228259996), Vec2(0.167820007, 0.248590007), Vec2(0.160699993, 0.22439), Vec2(0.169459999, 0.205270007), Vec2(0.181370005, 0.209729999), Vec2(0.174219996, 0.228259996), Vec2(0.147269994, 0.218620002), Vec2(0.157890007, 0.198280007), Vec2(0.169459999, 0.205270007), Vec2(0.160699993, 0.22439), Vec2(0.138469994, 0.240779996), Vec2(0.147269994, 0.218620002), Vec2(0.160699993, 0.22439), Vec2(0.153209999, 0.245409995), Vec2(0.169459999, 0.205270007), Vec2(0.179299995, 0.18874), Vec2(0.188590005, 0.19382), Vec2(0.181370005, 0.209729999), Vec2(0.179299995, 0.18874), Vec2(0.190329999, 0.175870001), Vec2(0.194059998, 0.183160007), Vec2(0.188590005, 0.19382), Vec2(0.170330003, 0.180250004), Vec2(0.184719995, 0.165069997), Vec2(0.190329999, 0.175870001), Vec2(0.179299995, 0.18874), Vec2(0.157890007, 0.198280007), Vec2(0.170330003, 0.180250004), Vec2(0.179299995, 0.18874), Vec2(0.169459999, 0.205270007), Vec2(0.146139994, 0.18942), Vec2(0.160929993, 0.169740006), Vec2(0.170330003, 0.180250004), Vec2(0.157890007, 0.198280007), Vec2(0.160929993, 0.169740006), Vec2(0.177990004, 0.152649999), Vec2(0.184719995, 0.165069997), Vec2(0.170330003, 0.180250004), Vec2(0.150800005, 0.157920003), Vec2(0.17024, 0.139139995), Vec2(0.177990004, 0.152649999), Vec2(0.160929993, 0.169740006), Vec2(0.133849993, 0.179220006), Vec2(0.150800005, 0.157920003), Vec2(0.160929993, 0.169740006), Vec2(0.146139994, 0.18942), Vec2(0.123360001, 0.234899998), Vec2(0.133619994, 0.211270005), Vec2(0.147269994, 0.218620002), Vec2(0.138469994, 0.240779996), Vec2(0.133619994, 0.211270005), Vec2(0.146139994, 0.18942), Vec2(0.157890007, 0.198280007), Vec2(0.147269994, 0.218620002), Vec2(0.119460002, 0.202700004), Vec2(0.133849993, 0.179220006), Vec2(0.146139994, 0.18942), Vec2(0.133619994, 0.211270005), Vec2(0.107660003, 0.227980003), Vec2(0.119460002, 0.202700004), Vec2(0.133619994, 0.211270005), Vec2(0.123360001, 0.234899998), Vec2(0.091169998, 0.22022), Vec2(0.104549997, 0.193179995), Vec2(0.119460002, 0.202700004), Vec2(0.107660003, 0.227980003), Vec2(0.104549997, 0.193179995), Vec2(0.12077, 0.168050006), Vec2(0.133849993, 0.179220006), Vec2(0.119460002, 0.202700004), Vec2(0.0886899978, 0.182919994), Vec2(0.106720001, 0.156110004), Vec2(0.12077, 0.168050006), Vec2(0.104549997, 0.193179995), Vec2(0.073739998, 0.211789995), Vec2(0.0886899978, 0.182919994), Vec2(0.104549997, 0.193179995), Vec2(0.091169998, 0.22022), Vec2(0.12077, 0.168050006), Vec2(0.139770001, 0.145150006), Vec2(0.150800005, 0.157920003), Vec2(0.133849993, 0.179220006), Vec2(0.139770001, 0.145150006), Vec2(0.161449999, 0.124810003), Vec2(0.17024, 0.139139995), Vec2(0.150800005, 0.157920003), Vec2(0.127690002, 0.131650001), Vec2(0.15151, 0.109810002), Vec2(0.161449999, 0.124810003), Vec2(0.139770001, 0.145150006), Vec2(0.106720001, 0.156110004), Vec2(0.127690002, 0.131650001), Vec2(0.139770001, 0.145150006), Vec2(0.12077, 0.168050006), Vec2(0.0915599987, 0.143519998), Vec2(0.114440002, 0.1175), Vec2(0.127690002, 0.131650001), Vec2(0.106720001, 0.156110004), Vec2(0.114440002, 0.1175), Vec2(0.140279993, 0.0941800028), Vec2(0.15151, 0.109810002), Vec2(0.127690002, 0.131650001), Vec2(0.0998800024, 0.102739997), Vec2(0.127639994, 0.0779199973), Vec2(0.140279993, 0.0941800028), Vec2(0.114440002, 0.1175), Vec2(0.0751499981, 0.130360007), Vec2(0.0998800024, 0.102739997), Vec2(0.114440002, 0.1175), Vec2(0.0915599987, 0.143519998), Vec2(0.0551999994, 0.202790007), Vec2(0.0717599988, 0.172040001), Vec2(0.0886899978, 0.182919994), Vec2(0.073739998, 0.211789995), Vec2(0.0717599988, 0.172040001), Vec2(0.0915599987, 0.143519998), Vec2(0.106720001, 0.156110004), Vec2(0.0886899978, 0.182919994), Vec2(0.0535599999, 0.160620004), Vec2(0.0751499981, 0.130360007), Vec2(0.0915599987, 0.143519998), Vec2(0.0717599988, 0.172040001), Vec2(0.035360001, 0.193320006), Vec2(0.0535599999, 0.160620004), Vec2(0.0717599988, 0.172040001), Vec2(0.0551999994, 0.202790007), Vec2(0.0674899966, 0.339899987), Vec2(0.0688799992, 0.309049994), Vec2(0.088059999, 0.310939997), Vec2(0.0868399963, 0.339709997), Vec2(0.0688799992, 0.309049994), Vec2(0.0732899979, 0.278549999), Vec2(0.0919200033, 0.282480001), Vec2(0.088059999, 0.310939997), Vec2(0.048560001, 0.306980014), Vec2(0.0535699986, 0.274230003), Vec2(0.0732899979, 0.278549999), Vec2(0.0688799992, 0.309049994), Vec2(0.0469899997, 0.340140015), Vec2(0.048560001, 0.306980014), Vec2(0.0688799992, 0.309049994), Vec2(0.0674899966, 0.339899987), Vec2(0.0732899979, 0.278549999), Vec2(0.0807299986, 0.248809993), Vec2(0.0984599963, 0.254700005), Vec2(0.0919200033, 0.282480001), Vec2(0.0807299986, 0.248809993), Vec2(0.091169998, 0.22022), Vec2(0.107660003, 0.227980003), Vec2(0.0984599963, 0.254700005), Vec2(0.0619900003, 0.242359996), Vec2(0.073739998, 0.211789995), Vec2(0.091169998, 0.22022), Vec2(0.0807299986, 0.248809993), Vec2(0.0535699986, 0.274230003), Vec2(0.0619900003, 0.242359996), Vec2(0.0807299986, 0.248809993), Vec2(0.0732899979, 0.278549999), Vec2(0.0326200016, 0.269600004), Vec2(0.0420899987, 0.23545), Vec2(0.0619900003, 0.242359996), Vec2(0.0535699986, 0.274230003), Vec2(0.0420899987, 0.23545), Vec2(0.0551999994, 0.202790007), Vec2(0.073739998, 0.211789995), Vec2(0.0619900003, 0.242359996), Vec2(0.0208400004, 0.228159994), Vec2(0.035360001, 0.193320006), Vec2(0.0551999994, 0.202790007), Vec2(0.0420899987, 0.23545), Vec2(0.01028, 0.264710009), Vec2(0.0208400004, 0.228159994), Vec2(0.0420899987, 0.23545), Vec2(0.0326200016, 0.269600004), Vec2(0.0252, 0.340420008), Vec2(0.0269699991, 0.304760009), Vec2(0.048560001, 0.306980014), Vec2(0.0469899997, 0.340140015), Vec2(0.0269699991, 0.304760009), Vec2(0.0326200016, 0.269600004), Vec2(0.0535699986, 0.274230003), Vec2(0.048560001, 0.306980014), Vec2(0.00393000012, 0.302450001), Vec2(0.01028, 0.264710009), Vec2(0.0326200016, 0.269600004), Vec2(0.0269699991, 0.304760009), Vec2(0.00194999995, 0.340770006), Vec2(0.00393000012, 0.302450001), Vec2(0.0269699991, 0.304760009), Vec2(0.0252, 0.340420008), Vec2(0.974789977, 0.340249985), Vec2(0.97262001, 0.304729998), Vec2(0.995580018, 0.301730007), Vec2(0.99804002, 0.339870006), Vec2(0.97262001, 0.304729998), Vec2(0.966620028, 0.269789994), Vec2(0.988810003, 0.264270008), Vec2(0.995580018, 0.301730007), Vec2(0.951080024, 0.307520002), Vec2(0.945779979, 0.274960011), Vec2(0.966620028, 0.269789994), Vec2(0.97262001, 0.304729998), Vec2(0.952979982, 0.340559989), Vec2(0.951080024, 0.307520002), Vec2(0.97262001, 0.304729998), Vec2(0.974789977, 0.340249985), Vec2(0.966620028, 0.269789994), Vec2(0.956900001, 0.235929996), Vec2(0.977940023, 0.228100002), Vec2(0.988810003, 0.264270008), Vec2(0.956900001, 0.235929996), Vec2(0.94362998, 0.203610003), Vec2(0.963230014, 0.193680003), Vec2(0.977940023, 0.228100002), Vec2(0.937150002, 0.243320003), Vec2(0.925260007, 0.213019997), Vec2(0.94362998, 0.203610003), Vec2(0.956900001, 0.235929996), Vec2(0.945779979, 0.274960011), Vec2(0.937150002, 0.243320003), Vec2(0.956900001, 0.235929996), Vec2(0.966620028, 0.269789994), Vec2(0.92614001, 0.279740006), Vec2(0.918519974, 0.25018999), Vec2(0.937150002, 0.243320003), Vec2(0.945779979, 0.274960011), Vec2(0.918519974, 0.25018999), Vec2(0.907970011, 0.221829996), Vec2(0.925260007, 0.213019997), Vec2(0.937150002, 0.243320003), Vec2(0.900849998, 0.256449997), Vec2(0.891579986, 0.22992), Vec2(0.907970011, 0.221829996), Vec2(0.918519974, 0.25018999), Vec2(0.907540023, 0.284049988), Vec2(0.900849998, 0.256449997), Vec2(0.918519974, 0.25018999), Vec2(0.92614001, 0.279740006), Vec2(0.932449996, 0.340810001), Vec2(0.930779994, 0.310070008), Vec2(0.951080024, 0.307520002), Vec2(0.952979982, 0.340559989), Vec2(0.930779994, 0.310070008), Vec2(0.92614001, 0.279740006), Vec2(0.945779979, 0.274960011), Vec2(0.951080024, 0.307520002), Vec2(0.911599994, 0.312359989), Vec2(0.907540023, 0.284049988), Vec2(0.92614001, 0.279740006), Vec2(0.930779994, 0.310070008), Vec2(0.913049996, 0.341019988), Vec2(0.911599994, 0.312359989), Vec2(0.930779994, 0.310070008), Vec2(0.932449996, 0.340810001), Vec2(0.94362998, 0.203610003), Vec2(0.92701, 0.173199996), Vec2(0.944980025, 0.161420003), Vec2(0.963230014, 0.193680003), Vec2(0.92701, 0.173199996), Vec2(0.907260001, 0.145009995), Vec2(0.92347002, 0.131569996), Vec2(0.944980025, 0.161420003), Vec2(0.910269976, 0.184430003), Vec2(0.892289996, 0.157879993), Vec2(0.907260001, 0.145009995), Vec2(0.92701, 0.173199996), Vec2(0.925260007, 0.213019997), Vec2(0.910269976, 0.184430003), Vec2(0.92701, 0.173199996), Vec2(0.94362998, 0.203610003), Vec2(0.907260001, 0.145009995), Vec2(0.884530008, 0.119269997), Vec2(0.89892, 0.104319997), Vec2(0.92347002, 0.131569996), Vec2(0.884530008, 0.119269997), Vec2(0.858929992, 0.0961600021), Vec2(0.871450007, 0.0797699988), Vec2(0.89892, 0.104319997), Vec2(0.871450007, 0.133640006), Vec2(0.847829998, 0.111960001), Vec2(0.858929992, 0.0961600021), Vec2(0.884530008, 0.119269997), Vec2(0.892289996, 0.157879993), Vec2(0.871450007, 0.133640006), Vec2(0.884530008, 0.119269997), Vec2(0.907260001, 0.145009995), Vec2(0.878390014, 0.170100003), Vec2(0.859520018, 0.147379994), Vec2(0.871450007, 0.133640006), Vec2(0.892289996, 0.157879993), Vec2(0.859520018, 0.147379994), Vec2(0.838029981, 0.127169997), Vec2(0.847829998, 0.111960001), Vec2(0.871450007, 0.133640006), Vec2(0.848609984, 0.160390005), Vec2(0.829349995, 0.141719997), Vec2(0.838029981, 0.127169997), Vec2(0.859520018, 0.147379994), Vec2(0.865429997, 0.181539997), Vec2(0.848609984, 0.160390005), Vec2(0.859520018, 0.147379994), Vec2(0.878390014, 0.170100003), Vec2(0.907970011, 0.221829996), Vec2(0.894569993, 0.195020005), Vec2(0.910269976, 0.184430003), Vec2(0.925260007, 0.213019997), Vec2(0.894569993, 0.195020005), Vec2(0.878390014, 0.170100003), Vec2(0.892289996, 0.157879993), Vec2(0.910269976, 0.184430003), Vec2(0.879760027, 0.204840004), Vec2(0.865429997, 0.181539997), Vec2(0.878390014, 0.170100003), Vec2(0.894569993, 0.195020005), Vec2(0.891579986, 0.22992), Vec2(0.879760027, 0.204840004), Vec2(0.894569993, 0.195020005), Vec2(0.907970011, 0.221829996), Vec2(0.875940025, 0.237130001), Vec2(0.865670025, 0.213679999), Vec2(0.879760027, 0.204840004), Vec2(0.891579986, 0.22992), Vec2(0.865670025, 0.213679999), Vec2(0.853219986, 0.191980004), Vec2(0.865429997, 0.181539997), Vec2(0.879760027, 0.204840004), Vec2(0.85206002, 0.221249998), Vec2(0.841509998, 0.20104), Vec2(0.853219986, 0.191980004), Vec2(0.865670025, 0.213679999), Vec2(0.86085999, 0.243249997), Vec2(0.85206002, 0.221249998), Vec2(0.865670025, 0.213679999), Vec2(0.875940025, 0.237130001), Vec2(0.853219986, 0.191980004), Vec2(0.838559985, 0.172429994), Vec2(0.848609984, 0.160390005), Vec2(0.865429997, 0.181539997), Vec2(0.838559985, 0.172429994), Vec2(0.821680009, 0.155430004), Vec2(0.829349995, 0.141719997), Vec2(0.848609984, 0.160390005), Vec2(0.829190016, 0.183129996), Vec2(0.814970016, 0.168009996), Vec2(0.821680009, 0.155430004), Vec2(0.838559985, 0.172429994), Vec2(0.841509998, 0.20104), Vec2(0.829190016, 0.183129996), Vec2(0.838559985, 0.172429994), Vec2(0.853219986, 0.191980004), Vec2(0.829970002, 0.208179995), Vec2(0.820230007, 0.191760004), Vec2(0.829190016, 0.183129996), Vec2(0.841509998, 0.20104), Vec2(0.820230007, 0.191760004), Vec2(0.809329987, 0.178929999), Vec2(0.814970016, 0.168009996), Vec2(0.829190016, 0.183129996), Vec2(0.810959995, 0.196899995), Vec2(0.805589974, 0.186350003), Vec2(0.809329987, 0.178929999), Vec2(0.820230007, 0.191760004), Vec2(0.818069994, 0.212720007), Vec2(0.810959995, 0.196899995), Vec2(0.820230007, 0.191760004), Vec2(0.829970002, 0.208179995), Vec2(0.846109986, 0.248060003), Vec2(0.838649988, 0.227180004), Vec2(0.85206002, 0.221249998), Vec2(0.86085999, 0.243249997), Vec2(0.838649988, 0.227180004), Vec2(0.829970002, 0.208179995), Vec2(0.841509998, 0.20104), Vec2(0.85206002, 0.221249998), Vec2(0.825139999, 0.23116), Vec2(0.818069994, 0.212720007), Vec2(0.829970002, 0.208179995), Vec2(0.838649988, 0.227180004), Vec2(0.831499994, 0.251370013), Vec2(0.825139999, 0.23116), Vec2(0.838649988, 0.227180004), Vec2(0.846109986, 0.248060003), Vec2(0.894659996, 0.34119001), Vec2(0.89339, 0.314350009), Vec2(0.911599994, 0.312359989), Vec2(0.913049996, 0.341019988), Vec2(0.89339, 0.314350009), Vec2(0.889840007, 0.287829995), Vec2(0.907540023, 0.284049988), Vec2(0.911599994, 0.312359989), Vec2(0.876020014, 0.316009998), Vec2(0.872910023, 0.291000009), Vec2(0.889840007, 0.287829995), Vec2(0.89339, 0.314350009), Vec2(0.877139986, 0.341320008), Vec2(0.876020014, 0.316009998), Vec2(0.89339, 0.314350009), Vec2(0.894659996, 0.34119001), Vec2(0.889840007, 0.287829995), Vec2(0.884010017, 0.261970013), Vec2(0.900849998, 0.256449997), Vec2(0.907540023, 0.284049988), Vec2(0.884010017, 0.261970013), Vec2(0.875940025, 0.237130001), Vec2(0.891579986, 0.22992), Vec2(0.900849998, 0.256449997), Vec2(0.867839992, 0.266629994), Vec2(0.86085999, 0.243249997), Vec2(0.875940025, 0.237130001), Vec2(0.884010017, 0.261970013), Vec2(0.872910023, 0.291000009), Vec2(0.867839992, 0.266629994), Vec2(0.884010017, 0.261970013), Vec2(0.889840007, 0.287829995), Vec2(0.856589973, 0.293500006), Vec2(0.852150023, 0.270300001), Vec2(0.867839992, 0.266629994), Vec2(0.872910023, 0.291000009), Vec2(0.852150023, 0.270300001), Vec2(0.846109986, 0.248060003), Vec2(0.86085999, 0.243249997), Vec2(0.867839992, 0.266629994), Vec2(0.836769998, 0.272879988), Vec2(0.831499994, 0.251370013), Vec2(0.846109986, 0.248060003), Vec2(0.852150023, 0.270300001), Vec2(0.840709984, 0.29528001), Vec2(0.836769998, 0.272879988), Vec2(0.852150023, 0.270300001), Vec2(0.856589973, 0.293500006), Vec2(0.860319972, 0.341419995), Vec2(0.859329998, 0.317319989), Vec2(0.876020014, 0.316009998), Vec2(0.877139986, 0.341320008), Vec2(0.859329998, 0.317319989), Vec2(0.856589973, 0.293500006), Vec2(0.872910023, 0.291000009), Vec2(0.876020014, 0.316009998), Vec2(0.843159974, 0.31825), Vec2(0.840709984, 0.29528001), Vec2(0.856589973, 0.293500006), Vec2(0.859329998, 0.317319989), Vec2(0.844060004, 0.341500014), Vec2(0.843159974, 0.31825), Vec2(0.859329998, 0.317319989), Vec2(0.860319972, 0.341419995), Vec2(0.860819995, 0.586709976), Vec2(0.886500001, 0.563220024), Vec2(0.901189983, 0.577929974), Vec2(0.873660028, 0.603190005), Vec2(0.886500001, 0.563220024), Vec2(0.909210026, 0.537039995), Vec2(0.925719976, 0.55013001), Vec2(0.901189983, 0.577929974), Vec2(0.873160005, 0.549000025), Vec2(0.893980026, 0.524460018), Vec2(0.909210026, 0.537039995), Vec2(0.886500001, 0.563220024), Vec2(0.849479973, 0.570919991), Vec2(0.873160005, 0.549000025), Vec2(0.886500001, 0.563220024), Vec2(0.860819995, 0.586709976), Vec2(0.909210026, 0.537039995), Vec2(0.928849995, 0.508440018), Vec2(0.947109997, 0.519770026), Vec2(0.925719976, 0.55013001), Vec2(0.928849995, 0.508440018), Vec2(0.945240021, 0.47766), Vec2(0.965120018, 0.487029999), Vec2(0.947109997, 0.519770026), Vec2(0.911849976, 0.497590005), Vec2(0.926649988, 0.468699992), Vec2(0.945240021, 0.47766), Vec2(0.928849995, 0.508440018), Vec2(0.893980026, 0.524460018), Vec2(0.911849976, 0.497590005), Vec2(0.928849995, 0.508440018), Vec2(0.909210026, 0.537039995), Vec2(0.879869998, 0.512470007), Vec2(0.895940006, 0.487309992), Vec2(0.911849976, 0.497590005), Vec2(0.893980026, 0.524460018), Vec2(0.895940006, 0.487309992), Vec2(0.909169972, 0.460269988), Vec2(0.926649988, 0.468699992), Vec2(0.911849976, 0.497590005), Vec2(0.880970001, 0.477750003), Vec2(0.892629981, 0.452490002), Vec2(0.909169972, 0.460269988), Vec2(0.895940006, 0.487309992), Vec2(0.866729975, 0.501209974), Vec2(0.880970001, 0.477750003), Vec2(0.895940006, 0.487309992), Vec2(0.879869998, 0.512470007), Vec2(0.839460015, 0.555760026), Vec2(0.861020029, 0.535390019), Vec2(0.873160005, 0.549000025), Vec2(0.849479973, 0.570919991), Vec2(0.861020029, 0.535390019), Vec2(0.879869998, 0.512470007), Vec2(0.893980026, 0.524460018), Vec2(0.873160005, 0.549000025), Vec2(0.849919975, 0.522520006), Vec2(0.866729975, 0.501209974), Vec2(0.879869998, 0.512470007), Vec2(0.861020029, 0.535390019), Vec2(0.830600023, 0.541279972), Vec2(0.849919975, 0.522520006), Vec2(0.861020029, 0.535390019), Vec2(0.839460015, 0.555760026), Vec2(0.945240021, 0.47766), Vec2(0.958199978, 0.445010006), Vec2(0.979480028, 0.452219993), Vec2(0.965120018, 0.487029999), Vec2(0.958199978, 0.445010006), Vec2(0.967530012, 0.41091001), Vec2(0.989899993, 0.41573), Vec2(0.979480028, 0.452219993), Vec2(0.938260019, 0.438149989), Vec2(0.946560025, 0.406320006), Vec2(0.967530012, 0.41091001), Vec2(0.958199978, 0.445010006), Vec2(0.926649988, 0.468699992), Vec2(0.938260019, 0.438149989), Vec2(0.958199978, 0.445010006), Vec2(0.945240021, 0.47766), Vec2(0.967530012, 0.41091001), Vec2(0.973089993, 0.375820011), Vec2(0.996140003, 0.378089994), Vec2(0.989899993, 0.41573), Vec2(0.973089993, 0.375820011), Vec2(0.974789977, 0.340249985), Vec2(0.99804002, 0.339870006), Vec2(0.996140003, 0.378089994), Vec2(0.951479971, 0.373640001), Vec2(0.952979982, 0.340559989), Vec2(0.974789977, 0.340249985), Vec2(0.973089993, 0.375820011), Vec2(0.946560025, 0.406320006), Vec2(0.951479971, 0.373640001), Vec2(0.973089993, 0.375820011), Vec2(0.967530012, 0.41091001), Vec2(0.926810026, 0.402020007), Vec2(0.931129992, 0.371589988), Vec2(0.951479971, 0.373640001), Vec2(0.946560025, 0.406320006), Vec2(0.931129992, 0.371589988), Vec2(0.932449996, 0.340810001), Vec2(0.952979982, 0.340559989), Vec2(0.951479971, 0.373640001), Vec2(0.911899984, 0.369709998), Vec2(0.913049996, 0.341019988), Vec2(0.932449996, 0.340810001), Vec2(0.931129992, 0.371589988), Vec2(0.90812999, 0.398090005), Vec2(0.911899984, 0.369709998), Vec2(0.931129992, 0.371589988), Vec2(0.926810026, 0.402020007), Vec2(0.909169972, 0.460269988), Vec2(0.919480026, 0.431710005), Vec2(0.938260019, 0.438149989), Vec2(0.926649988, 0.468699992), Vec2(0.919480026, 0.431710005), Vec2(0.926810026, 0.402020007), Vec2(0.946560025, 0.406320006), Vec2(0.938260019, 0.438149989), Vec2(0.90170002, 0.425810009), Vec2(0.90812999, 0.398090005), Vec2(0.926810026, 0.402020007), Vec2(0.919480026, 0.431710005), Vec2(0.892629981, 0.452490002), Vec2(0.90170002, 0.425810009), Vec2(0.919480026, 0.431710005), Vec2(0.909169972, 0.460269988), Vec2(0.876869977, 0.445529997), Vec2(0.884760022, 0.42058), Vec2(0.90170002, 0.425810009), Vec2(0.892629981, 0.452490002), Vec2(0.884760022, 0.42058), Vec2(0.890359998, 0.394630015), Vec2(0.90812999, 0.398090005), Vec2(0.90170002, 0.425810009), Vec2(0.868499994, 0.41613999), Vec2(0.873380005, 0.391689986), Vec2(0.890359998, 0.394630015), Vec2(0.884760022, 0.42058), Vec2(0.861689985, 0.439610004), Vec2(0.868499994, 0.41613999), Vec2(0.884760022, 0.42058), Vec2(0.876869977, 0.445529997), Vec2(0.890359998, 0.394630015), Vec2(0.893660009, 0.368050009), Vec2(0.911899984, 0.369709998), Vec2(0.90812999, 0.398090005), Vec2(0.893660009, 0.368050009), Vec2(0.894659996, 0.34119001), Vec2(0.913049996, 0.341019988), Vec2(0.911899984, 0.369709998), Vec2(0.876259983, 0.366640002), Vec2(0.877139986, 0.341320008), Vec2(0.894659996, 0.34119001), Vec2(0.893660009, 0.368050009), Vec2(0.873380005, 0.391689986), Vec2(0.876259983, 0.366640002), Vec2(0.893660009, 0.368050009), Vec2(0.890359998, 0.394630015), Vec2(0.857010007, 0.389380008), Vec2(0.859549999, 0.365539998), Vec2(0.876259983, 0.366640002), Vec2(0.873380005, 0.391689986), Vec2(0.859549999, 0.365539998), Vec2(0.860319972, 0.341419995), Vec2(0.877139986, 0.341320008), Vec2(0.876259983, 0.366640002), Vec2(0.843360007, 0.364749998), Vec2(0.844060004, 0.341500014), Vec2(0.860319972, 0.341419995), Vec2(0.859549999, 0.365539998), Vec2(0.841090024, 0.38775), Vec2(0.843360007, 0.364749998), Vec2(0.859549999, 0.365539998), Vec2(0.857010007, 0.389380008), Vec2(0.846870005, 0.434949994), Vec2(0.852750003, 0.412640005), Vec2(0.868499994, 0.41613999), Vec2(0.861689985, 0.439610004), Vec2(0.852750003, 0.412640005), Vec2(0.857010007, 0.389380008), Vec2(0.873380005, 0.391689986), Vec2(0.868499994, 0.41613999), Vec2(0.83732003, 0.410189986), Vec2(0.841090024, 0.38775), Vec2(0.857010007, 0.389380008), Vec2(0.852750003, 0.412640005), Vec2(0.832189977, 0.431739986), Vec2(0.83732003, 0.410189986), Vec2(0.852750003, 0.412640005), Vec2(0.846870005, 0.434949994), Vec2(0.822780013, 0.527639985), Vec2(0.839720011, 0.510590017), Vec2(0.849919975, 0.522520006), Vec2(0.830600023, 0.541279972), Vec2(0.839720011, 0.510590017), Vec2(0.854369998, 0.490940005), Vec2(0.866729975, 0.501209974), Vec2(0.849919975, 0.522520006), Vec2(0.830229998, 0.499989986), Vec2(0.84254998, 0.482010007), Vec2(0.854369998, 0.490940005), Vec2(0.839720011, 0.510590017), Vec2(0.815949976, 0.515120029), Vec2(0.830229998, 0.499989986), Vec2(0.839720011, 0.510590017), Vec2(0.822780013, 0.527639985), Vec2(0.854369998, 0.490940005), Vec2(0.866739988, 0.469119996), Vec2(0.880970001, 0.477750003), Vec2(0.866729975, 0.501209974), Vec2(0.866739988, 0.469119996), Vec2(0.876869977, 0.445529997), Vec2(0.892629981, 0.452490002), Vec2(0.880970001, 0.477750003), Vec2(0.853020012, 0.461710006), Vec2(0.861689985, 0.439610004), Vec2(0.876869977, 0.445529997), Vec2(0.866739988, 0.469119996), Vec2(0.84254998, 0.482010007), Vec2(0.853020012, 0.461710006), Vec2(0.866739988, 0.469119996), Vec2(0.854369998, 0.490940005), Vec2(0.830900013, 0.474970013), Vec2(0.839519978, 0.455900013), Vec2(0.853020012, 0.461710006), Vec2(0.84254998, 0.482010007), Vec2(0.839519978, 0.455900013), Vec2(0.846870005, 0.434949994), Vec2(0.861689985, 0.439610004), Vec2(0.853020012, 0.461710006), Vec2(0.825929999, 0.452010006), Vec2(0.832189977, 0.431739986), Vec2(0.846870005, 0.434949994), Vec2(0.839519978, 0.455900013), Vec2(0.81892997, 0.470479995), Vec2(0.825929999, 0.452010006), Vec2(0.839519978, 0.455900013), Vec2(0.830900013, 0.474970013), Vec2(0.810230017, 0.504260004), Vec2(0.821179986, 0.491450012), Vec2(0.830229998, 0.499989986), Vec2(0.815949976, 0.515120029), Vec2(0.821179986, 0.491450012), Vec2(0.830900013, 0.474970013), Vec2(0.84254998, 0.482010007), Vec2(0.830229998, 0.499989986), Vec2(0.811839998, 0.486330003), Vec2(0.81892997, 0.470479995), Vec2(0.830900013, 0.474970013), Vec2(0.821179986, 0.491450012), Vec2(0.806450009, 0.496930003), Vec2(0.811839998, 0.486330003), Vec2(0.821179986, 0.491450012), Vec2(0.810230017, 0.504260004), Vec2(0.203470007, 0.498450011), Vec2(0.203679994, 0.511870027), Vec2(0.190530002, 0.502749979), Vec2(0.194230005, 0.495350003), Vec2(0.203679994, 0.511870027), Vec2(0.201320007, 0.525730014), Vec2(0.184980005, 0.513610005), Vec2(0.190530002, 0.502749979), Vec2(0.219099998, 0.518850029), Vec2(0.219359994, 0.535220027), Vec2(0.201320007, 0.525730014), Vec2(0.203679994, 0.511870027), Vec2(0.217020005, 0.502390027), Vec2(0.219099998, 0.518850029), Vec2(0.203679994, 0.511870027), Vec2(0.203470007, 0.498450011), Vec2(0.201320007, 0.525730014), Vec2(0.19743, 0.540340006), Vec2(0.178340003, 0.52609998), Vec2(0.184980005, 0.513610005), Vec2(0.19743, 0.540340006), Vec2(0.192340001, 0.555649996), Vec2(0.170719996, 0.539680004), Vec2(0.178340003, 0.52609998), Vec2(0.218219995, 0.55181998), Vec2(0.215890005, 0.56882), Vec2(0.192340001, 0.555649996), Vec2(0.19743, 0.540340006), Vec2(0.219359994, 0.535220027), Vec2(0.218219995, 0.55181998), Vec2(0.19743, 0.540340006), Vec2(0.201320007, 0.525730014), Vec2(0.238639995, 0.542479992), Vec2(0.240270004, 0.56072998), Vec2(0.218219995, 0.55181998), Vec2(0.219359994, 0.535220027), Vec2(0.240270004, 0.56072998), Vec2(0.240960002, 0.579200029), Vec2(0.215890005, 0.56882), Vec2(0.218219995, 0.55181998), Vec2(0.263069987, 0.567149997), Vec2(0.267040014, 0.586799979), Vec2(0.240960002, 0.579200029), Vec2(0.240270004, 0.56072998), Vec2(0.258659989, 0.547689974), Vec2(0.263069987, 0.567149997), Vec2(0.240270004, 0.56072998), Vec2(0.238639995, 0.542479992), Vec2(0.232360005, 0.506039977), Vec2(0.236039996, 0.524320006), Vec2(0.219099998, 0.518850029), Vec2(0.217020005, 0.502390027), Vec2(0.236039996, 0.524320006), Vec2(0.238639995, 0.542479992), Vec2(0.219359994, 0.535220027), Vec2(0.219099998, 0.518850029), Vec2(0.253850013, 0.528330028), Vec2(0.258659989, 0.547689974), Vec2(0.238639995, 0.542479992), Vec2(0.236039996, 0.524320006), Vec2(0.248649999, 0.508920014), Vec2(0.253850013, 0.528330028), Vec2(0.236039996, 0.524320006), Vec2(0.232360005, 0.506039977), Vec2(0.192340001, 0.555649996), Vec2(0.186110005, 0.571579993), Vec2(0.162070006, 0.554069996), Vec2(0.170719996, 0.539680004), Vec2(0.186110005, 0.571579993), Vec2(0.17859, 0.588069975), Vec2(0.152280003, 0.569109976), Vec2(0.162070006, 0.554069996), Vec2(0.212380007, 0.586239994), Vec2(0.20747, 0.604120016), Vec2(0.17859, 0.588069975), Vec2(0.186110005, 0.571579993), Vec2(0.215890005, 0.56882), Vec2(0.212380007, 0.586239994), Vec2(0.186110005, 0.571579993), Vec2(0.192340001, 0.555649996), Vec2(0.17859, 0.588069975), Vec2(0.169599995, 0.605099976), Vec2(0.141220003, 0.584730029), Vec2(0.152280003, 0.569109976), Vec2(0.169599995, 0.605099976), Vec2(0.158940002, 0.622770011), Vec2(0.128780007, 0.600870013), Vec2(0.141220003, 0.584730029), Vec2(0.200859994, 0.62252003), Vec2(0.192269996, 0.641589999), Vec2(0.158940002, 0.622770011), Vec2(0.169599995, 0.605099976), Vec2(0.20747, 0.604120016), Vec2(0.200859994, 0.62252003), Vec2(0.169599995, 0.605099976), Vec2(0.17859, 0.588069975), Vec2(0.238780007, 0.617120028), Vec2(0.235039994, 0.636740029), Vec2(0.200859994, 0.62252003), Vec2(0.20747, 0.604120016), Vec2(0.235039994, 0.636740029), Vec2(0.228850007, 0.657119989), Vec2(0.192269996, 0.641589999), Vec2(0.200859994, 0.62252003), Vec2(0.272190005, 0.647440016), Vec2(0.268929988, 0.668900013), Vec2(0.228850007, 0.657119989), Vec2(0.235039994, 0.636740029), Vec2(0.272309989, 0.626839995), Vec2(0.272190005, 0.647440016), Vec2(0.235039994, 0.636740029), Vec2(0.238780007, 0.617120028), Vec2(0.240960002, 0.579200029), Vec2(0.240580007, 0.597980022), Vec2(0.212380007, 0.586239994), Vec2(0.215890005, 0.56882), Vec2(0.240580007, 0.597980022), Vec2(0.238780007, 0.617120028), Vec2(0.20747, 0.604120016), Vec2(0.212380007, 0.586239994), Vec2(0.270300001, 0.606679976), Vec2(0.272309989, 0.626839995), Vec2(0.238780007, 0.617120028), Vec2(0.240580007, 0.597980022), Vec2(0.267040014, 0.586799979), Vec2(0.270300001, 0.606679976), Vec2(0.240580007, 0.597980022), Vec2(0.240960002, 0.579200029), Vec2(0.293480009, 0.591530025), Vec2(0.300940007, 0.612169981), Vec2(0.270300001, 0.606679976), Vec2(0.267040014, 0.586799979), Vec2(0.300940007, 0.612169981), Vec2(0.307700008, 0.63301003), Vec2(0.272309989, 0.626839995), Vec2(0.270300001, 0.606679976), Vec2(0.331440002, 0.614180028), Vec2(0.344150007, 0.635249972), Vec2(0.307700008, 0.63301003), Vec2(0.300940007, 0.612169981), Vec2(0.319370002, 0.593249977), Vec2(0.331440002, 0.614180028), Vec2(0.300940007, 0.612169981), Vec2(0.293480009, 0.591530025), Vec2(0.307700008, 0.63301003), Vec2(0.312409997, 0.654190004), Vec2(0.272190005, 0.647440016), Vec2(0.272309989, 0.626839995), Vec2(0.312409997, 0.654190004), Vec2(0.313010007, 0.67632997), Vec2(0.268929988, 0.668900013), Vec2(0.272190005, 0.647440016), Vec2(0.355780005, 0.656459987), Vec2(0.362320006, 0.678409994), Vec2(0.313010007, 0.67632997), Vec2(0.312409997, 0.654190004), Vec2(0.344150007, 0.635249972), Vec2(0.355780005, 0.656459987), Vec2(0.312409997, 0.654190004), Vec2(0.307700008, 0.63301003), Vec2(0.379680008, 0.633029997), Vec2(0.401789993, 0.653450012), Vec2(0.355780005, 0.656459987), Vec2(0.344150007, 0.635249972), Vec2(0.401789993, 0.653450012), Vec2(0.420439988, 0.673370004), Vec2(0.362320006, 0.678409994), Vec2(0.355780005, 0.656459987), Vec2(0.444310009, 0.643970013), Vec2(0.500389993, 0.658290029), Vec2(0.420439988, 0.673370004), Vec2(0.401789993, 0.653450012), Vec2(0.409880012, 0.625890017), Vec2(0.444310009, 0.643970013), Vec2(0.401789993, 0.653450012), Vec2(0.379680008, 0.633029997), Vec2(0.343589991, 0.591830015), Vec2(0.360130012, 0.612429976), Vec2(0.331440002, 0.614180028), Vec2(0.319370002, 0.593249977), Vec2(0.360130012, 0.612429976), Vec2(0.379680008, 0.633029997), Vec2(0.344150007, 0.635249972), Vec2(0.331440002, 0.614180028), Vec2(0.384849995, 0.606750011), Vec2(0.409880012, 0.625890017), Vec2(0.379680008, 0.633029997), Vec2(0.360130012, 0.612429976), Vec2(0.365060002, 0.587239981), Vec2(0.384849995, 0.606750011), Vec2(0.360130012, 0.612429976), Vec2(0.343589991, 0.591830015), Vec2(0.265329987, 0.510739982), Vec2(0.271970004, 0.530799985), Vec2(0.253850013, 0.528330028), Vec2(0.248649999, 0.508920014), Vec2(0.271970004, 0.530799985), Vec2(0.278849989, 0.550880015), Vec2(0.258659989, 0.547689974), Vec2(0.253850013, 0.528330028), Vec2(0.289909989, 0.531620026), Vec2(0.298669994, 0.551989973), Vec2(0.278849989, 0.550880015), Vec2(0.271970004, 0.530799985), Vec2(0.281960011, 0.511309981), Vec2(0.289909989, 0.531620026), Vec2(0.271970004, 0.530799985), Vec2(0.265329987, 0.510739982), Vec2(0.278849989, 0.550880015), Vec2(0.286029994, 0.57111001), Vec2(0.263069987, 0.567149997), Vec2(0.258659989, 0.547689974), Vec2(0.286029994, 0.57111001), Vec2(0.293480009, 0.591530025), Vec2(0.267040014, 0.586799979), Vec2(0.263069987, 0.567149997), Vec2(0.30844, 0.572520018), Vec2(0.319370002, 0.593249977), Vec2(0.293480009, 0.591530025), Vec2(0.286029994, 0.57111001), Vec2(0.298669994, 0.551989973), Vec2(0.30844, 0.572520018), Vec2(0.286029994, 0.57111001), Vec2(0.278849989, 0.550880015), Vec2(0.317589998, 0.550979972), Vec2(0.329569995, 0.571330011), Vec2(0.30844, 0.572520018), Vec2(0.298669994, 0.551989973), Vec2(0.329569995, 0.571330011), Vec2(0.343589991, 0.591830015), Vec2(0.319370002, 0.593249977), Vec2(0.30844, 0.572520018), Vec2(0.348800004, 0.567589998), Vec2(0.365060002, 0.587239981), Vec2(0.343589991, 0.591830015), Vec2(0.329569995, 0.571330011), Vec2(0.335189998, 0.547879994), Vec2(0.348800004, 0.567589998), Vec2(0.329569995, 0.571330011), Vec2(0.317589998, 0.550979972), Vec2(0.298220009, 0.510519981), Vec2(0.307240009, 0.530740023), Vec2(0.289909989, 0.531620026), Vec2(0.281960011, 0.511309981), Vec2(0.307240009, 0.530740023), Vec2(0.317589998, 0.550979972), Vec2(0.298669994, 0.551989973), Vec2(0.289909989, 0.531620026), Vec2(0.323650002, 0.528159976), Vec2(0.335189998, 0.547879994), Vec2(0.317589998, 0.550979972), Vec2(0.307240009, 0.530740023), Vec2(0.313829988, 0.508350015), Vec2(0.323650002, 0.528159976), Vec2(0.307240009, 0.530740023), Vec2(0.298220009, 0.510519981), Vec2(0.842700005, 0.625060022), Vec2(0.832099974, 0.607219994), Vec2(0.860819995, 0.586709976), Vec2(0.873660028, 0.603190005), Vec2(0.832099974, 0.607219994), Vec2(0.823029995, 0.590030015), Vec2(0.849479973, 0.570919991), Vec2(0.860819995, 0.586709976), Vec2(0.800450027, 0.624689996), Vec2(0.793940008, 0.606140018), Vec2(0.823029995, 0.590030015), Vec2(0.832099974, 0.607219994), Vec2(0.80884999, 0.643920004), Vec2(0.800450027, 0.624689996), Vec2(0.832099974, 0.607219994), Vec2(0.842700005, 0.625060022), Vec2(0.823029995, 0.590030015), Vec2(0.815410018, 0.573409975), Vec2(0.839460015, 0.555760026), Vec2(0.849479973, 0.570919991), Vec2(0.815410018, 0.573409975), Vec2(0.809050024, 0.557370007), Vec2(0.830600023, 0.541279972), Vec2(0.839460015, 0.555760026), Vec2(0.789049983, 0.588119984), Vec2(0.785489976, 0.570590019), Vec2(0.809050024, 0.557370007), Vec2(0.815410018, 0.573409975), Vec2(0.793940008, 0.606140018), Vec2(0.789049983, 0.588119984), Vec2(0.815410018, 0.573409975), Vec2(0.823029995, 0.590030015), Vec2(0.762390018, 0.619090021), Vec2(0.760730028, 0.599810004), Vec2(0.789049983, 0.588119984), Vec2(0.793940008, 0.606140018), Vec2(0.760730028, 0.599810004), Vec2(0.760389984, 0.580959976), Vec2(0.785489976, 0.570590019), Vec2(0.789049983, 0.588119984), Vec2(0.730910003, 0.608399987), Vec2(0.734250009, 0.58851999), Vec2(0.760389984, 0.580959976), Vec2(0.760730028, 0.599810004), Vec2(0.728670001, 0.628660023), Vec2(0.730910003, 0.608399987), Vec2(0.760730028, 0.599810004), Vec2(0.762390018, 0.619090021), Vec2(0.771799982, 0.659430027), Vec2(0.765900016, 0.638890028), Vec2(0.800450027, 0.624689996), Vec2(0.80884999, 0.643920004), Vec2(0.765900016, 0.638890028), Vec2(0.762390018, 0.619090021), Vec2(0.793940008, 0.606140018), Vec2(0.800450027, 0.624689996), Vec2(0.728420019, 0.649460018), Vec2(0.728670001, 0.628660023), Vec2(0.762390018, 0.619090021), Vec2(0.765900016, 0.638890028), Vec2(0.731289983, 0.671140015), Vec2(0.728420019, 0.649460018), Vec2(0.765900016, 0.638890028), Vec2(0.771799982, 0.659430027), Vec2(0.809050024, 0.557370007), Vec2(0.803820014, 0.541989982), Vec2(0.822780013, 0.527639985), Vec2(0.830600023, 0.541279972), Vec2(0.803820014, 0.541989982), Vec2(0.799759984, 0.527360022), Vec2(0.815949976, 0.515120029), Vec2(0.822780013, 0.527639985), Vec2(0.783070028, 0.553539991), Vec2(0.781769991, 0.536920011), Vec2(0.799759984, 0.527360022), Vec2(0.803820014, 0.541989982), Vec2(0.785489976, 0.570590019), Vec2(0.783070028, 0.553539991), Vec2(0.803820014, 0.541989982), Vec2(0.809050024, 0.557370007), Vec2(0.799759984, 0.527360022), Vec2(0.797219992, 0.513509989), Vec2(0.810230017, 0.504260004), Vec2(0.815949976, 0.515120029), Vec2(0.797219992, 0.513509989), Vec2(0.797230005, 0.500100017), Vec2(0.806450009, 0.496930003), Vec2(0.810230017, 0.504260004), Vec2(0.781840026, 0.520579994), Vec2(0.783689976, 0.504140019), Vec2(0.797230005, 0.500100017), Vec2(0.797219992, 0.513509989), Vec2(0.781769991, 0.536920011), Vec2(0.781840026, 0.520579994), Vec2(0.797219992, 0.513509989), Vec2(0.799759984, 0.527360022), Vec2(0.762480021, 0.544250011), Vec2(0.764869988, 0.526130021), Vec2(0.781840026, 0.520579994), Vec2(0.781769991, 0.536920011), Vec2(0.764869988, 0.526130021), Vec2(0.768320024, 0.5079), Vec2(0.783689976, 0.504140019), Vec2(0.781840026, 0.520579994), Vec2(0.746990025, 0.530250013), Vec2(0.751950026, 0.510909975), Vec2(0.768320024, 0.5079), Vec2(0.764869988, 0.526130021), Vec2(0.742399991, 0.549539983), Vec2(0.746990025, 0.530250013), Vec2(0.764869988, 0.526130021), Vec2(0.762480021, 0.544250011), Vec2(0.760389984, 0.580959976), Vec2(0.761009991, 0.562470019), Vec2(0.783070028, 0.553539991), Vec2(0.785489976, 0.570590019), Vec2(0.761009991, 0.562470019), Vec2(0.762480021, 0.544250011), Vec2(0.781769991, 0.536920011), Vec2(0.783070028, 0.553539991), Vec2(0.738150001, 0.56892997), Vec2(0.742399991, 0.549539983), Vec2(0.762480021, 0.544250011), Vec2(0.761009991, 0.562470019), Vec2(0.734250009, 0.58851999), Vec2(0.738150001, 0.56892997), Vec2(0.761009991, 0.562470019), Vec2(0.760389984, 0.580959976), Vec2(0.707710028, 0.593240023), Vec2(0.715059996, 0.572960019), Vec2(0.738150001, 0.56892997), Vec2(0.734250009, 0.58851999), Vec2(0.715059996, 0.572960019), Vec2(0.722069979, 0.552860022), Vec2(0.742399991, 0.549539983), Vec2(0.738150001, 0.56892997), Vec2(0.692430019, 0.574530005), Vec2(0.702040017, 0.554139972), Vec2(0.722069979, 0.552860022), Vec2(0.715059996, 0.572960019), Vec2(0.681620002, 0.595070004), Vec2(0.692430019, 0.574530005), Vec2(0.715059996, 0.572960019), Vec2(0.707710028, 0.593240023), Vec2(0.722069979, 0.552860022), Vec2(0.728739977, 0.532869995), Vec2(0.746990025, 0.530250013), Vec2(0.742399991, 0.549539983), Vec2(0.728739977, 0.532869995), Vec2(0.73514998, 0.512889981), Vec2(0.751950026, 0.510909975), Vec2(0.746990025, 0.530250013), Vec2(0.71063, 0.533869982), Vec2(0.718360007, 0.513629973), Vec2(0.73514998, 0.512889981), Vec2(0.728739977, 0.532869995), Vec2(0.702040017, 0.554139972), Vec2(0.71063, 0.533869982), Vec2(0.728739977, 0.532869995), Vec2(0.722069979, 0.552860022), Vec2(0.682889998, 0.553330004), Vec2(0.693090022, 0.533169985), Vec2(0.71063, 0.533869982), Vec2(0.702040017, 0.554139972), Vec2(0.693090022, 0.533169985), Vec2(0.701950014, 0.513010025), Vec2(0.718360007, 0.513629973), Vec2(0.71063, 0.533869982), Vec2(0.676490009, 0.530740023), Vec2(0.686190009, 0.51098001), Vec2(0.701950014, 0.513010025), Vec2(0.693090022, 0.533169985), Vec2(0.665059984, 0.550390005), Vec2(0.676490009, 0.530740023), Vec2(0.693090022, 0.533169985), Vec2(0.682889998, 0.553330004), Vec2(0.657029986, 0.593879998), Vec2(0.671000004, 0.573570013), Vec2(0.692430019, 0.574530005), Vec2(0.681620002, 0.595070004), Vec2(0.671000004, 0.573570013), Vec2(0.682889998, 0.553330004), Vec2(0.702040017, 0.554139972), Vec2(0.692430019, 0.574530005), Vec2(0.651480019, 0.569999993), Vec2(0.665059984, 0.550390005), Vec2(0.682889998, 0.553330004), Vec2(0.671000004, 0.573570013), Vec2(0.635169983, 0.589510024), Vec2(0.651480019, 0.569999993), Vec2(0.671000004, 0.573570013), Vec2(0.657029986, 0.593879998), Vec2(0.686789989, 0.678439975), Vec2(0.687950015, 0.65595001), Vec2(0.728420019, 0.649460018), Vec2(0.731289983, 0.671140015), Vec2(0.687950015, 0.65595001), Vec2(0.693180025, 0.634570003), Vec2(0.728670001, 0.628660023), Vec2(0.728420019, 0.649460018), Vec2(0.644529998, 0.657729983), Vec2(0.656729996, 0.636539996), Vec2(0.693180025, 0.634570003), Vec2(0.687950015, 0.65595001), Vec2(0.637009978, 0.680320024), Vec2(0.644529998, 0.657729983), Vec2(0.687950015, 0.65595001), Vec2(0.686789989, 0.678439975), Vec2(0.693180025, 0.634570003), Vec2(0.700209975, 0.613749981), Vec2(0.730910003, 0.608399987), Vec2(0.728670001, 0.628660023), Vec2(0.700209975, 0.613749981), Vec2(0.707710028, 0.593240023), Vec2(0.734250009, 0.58851999), Vec2(0.730910003, 0.608399987), Vec2(0.669589996, 0.615740001), Vec2(0.681620002, 0.595070004), Vec2(0.707710028, 0.593240023), Vec2(0.700209975, 0.613749981), Vec2(0.656729996, 0.636539996), Vec2(0.669589996, 0.615740001), Vec2(0.700209975, 0.613749981), Vec2(0.693180025, 0.634570003), Vec2(0.621029973, 0.634329975), Vec2(0.640519977, 0.614189982), Vec2(0.669589996, 0.615740001), Vec2(0.656729996, 0.636539996), Vec2(0.640519977, 0.614189982), Vec2(0.657029986, 0.593879998), Vec2(0.681620002, 0.595070004), Vec2(0.669589996, 0.615740001), Vec2(0.615159988, 0.608810008), Vec2(0.635169983, 0.589510024), Vec2(0.657029986, 0.593879998), Vec2(0.640519977, 0.614189982), Vec2(0.589739978, 0.627610028), Vec2(0.615159988, 0.608810008), Vec2(0.640519977, 0.614189982), Vec2(0.621029973, 0.634329975), Vec2(0.578499973, 0.674719989), Vec2(0.598869979, 0.654150009), Vec2(0.644529998, 0.657729983), Vec2(0.637009978, 0.680320024), Vec2(0.598869979, 0.654150009), Vec2(0.621029973, 0.634329975), Vec2(0.656729996, 0.636539996), Vec2(0.644529998, 0.657729983), Vec2(0.555029988, 0.645049989), Vec2(0.589739978, 0.627610028), Vec2(0.621029973, 0.634329975), Vec2(0.598869979, 0.654150009), Vec2(0.500389993, 0.658290029), Vec2(0.555029988, 0.645049989), Vec2(0.598869979, 0.654150009), Vec2(0.578499973, 0.674719989), Vec2(0.500389993, 0.63331002), Vec2(0.538890004, 0.62766999), Vec2(0.555029988, 0.645049989), Vec2(0.500389993, 0.658290029), Vec2(0.538890004, 0.62766999), Vec2(0.570550025, 0.614780009), Vec2(0.589739978, 0.627610028), Vec2(0.555029988, 0.645049989), Vec2(0.530480027, 0.608229995), Vec2(0.557850003, 0.599129975), Vec2(0.570550025, 0.614780009), Vec2(0.538890004, 0.62766999), Vec2(0.500389993, 0.611329973), Vec2(0.530480027, 0.608229995), Vec2(0.538890004, 0.62766999), Vec2(0.500389993, 0.63331002), Vec2(0.570550025, 0.614780009), Vec2(0.596099973, 0.599039972), Vec2(0.615159988, 0.608810008), Vec2(0.589739978, 0.627610028), Vec2(0.596099973, 0.599039972), Vec2(0.617009997, 0.581849992), Vec2(0.635169983, 0.589510024), Vec2(0.615159988, 0.608810008), Vec2(0.581690013, 0.586449981), Vec2(0.602129996, 0.571669996), Vec2(0.617009997, 0.581849992), Vec2(0.596099973, 0.599039972), Vec2(0.557850003, 0.599129975), Vec2(0.581690013, 0.586449981), Vec2(0.596099973, 0.599039972), Vec2(0.570550025, 0.614780009), Vec2(0.549090028, 0.582029998), Vec2(0.570729971, 0.572009981), Vec2(0.581690013, 0.586449981), Vec2(0.557850003, 0.599129975), Vec2(0.570729971, 0.572009981), Vec2(0.590020001, 0.559599996), Vec2(0.602129996, 0.571669996), Vec2(0.581690013, 0.586449981), Vec2(0.562319994, 0.556420028), Vec2(0.58020997, 0.54618001), Vec2(0.590020001, 0.559599996), Vec2(0.570729971, 0.572009981), Vec2(0.542770028, 0.564339995), Vec2(0.562319994, 0.556420028), Vec2(0.570729971, 0.572009981), Vec2(0.549090028, 0.582029998), Vec2(0.500389993, 0.590650022), Vec2(0.525390029, 0.588639975), Vec2(0.530480027, 0.608229995), Vec2(0.500389993, 0.611329973), Vec2(0.525390029, 0.588639975), Vec2(0.549090028, 0.582029998), Vec2(0.557850003, 0.599129975), Vec2(0.530480027, 0.608229995), Vec2(0.521939993, 0.569310009), Vec2(0.542770028, 0.564339995), Vec2(0.549090028, 0.582029998), Vec2(0.525390029, 0.588639975), Vec2(0.500389993, 0.570739985), Vec2(0.521939993, 0.569310009), Vec2(0.525390029, 0.588639975), Vec2(0.500389993, 0.590650022), Vec2(0.617009997, 0.581849992), Vec2(0.634360015, 0.563870013), Vec2(0.651480019, 0.569999993), Vec2(0.635169983, 0.589510024), Vec2(0.634360015, 0.563870013), Vec2(0.648859978, 0.545419991), Vec2(0.665059984, 0.550390005), Vec2(0.651480019, 0.569999993), Vec2(0.619560003, 0.55558002), Vec2(0.634360015, 0.538630009), Vec2(0.648859978, 0.545419991), Vec2(0.634360015, 0.563870013), Vec2(0.602129996, 0.571669996), Vec2(0.619560003, 0.55558002), Vec2(0.634360015, 0.563870013), Vec2(0.617009997, 0.581849992), Vec2(0.648859978, 0.545419991), Vec2(0.661040008, 0.526639998), Vec2(0.676490009, 0.530740023), Vec2(0.665059984, 0.550390005), Vec2(0.661040008, 0.526639998), Vec2(0.671270013, 0.507589996), Vec2(0.686190009, 0.51098001), Vec2(0.676490009, 0.530740023), Vec2(0.64684999, 0.52105999), Vec2(0.657299995, 0.502950013), Vec2(0.671270013, 0.507589996), Vec2(0.661040008, 0.526639998), Vec2(0.634360015, 0.538630009), Vec2(0.64684999, 0.52105999), Vec2(0.661040008, 0.526639998), Vec2(0.648859978, 0.545419991), Vec2(0.621529996, 0.530330002), Vec2(0.633970022, 0.514190018), Vec2(0.64684999, 0.52105999), Vec2(0.634360015, 0.538630009), Vec2(0.633970022, 0.514190018), Vec2(0.644360006, 0.497269988), Vec2(0.657299995, 0.502950013), Vec2(0.64684999, 0.52105999), Vec2(0.622420013, 0.50632), Vec2(0.632510006, 0.490810007), Vec2(0.644360006, 0.497269988), Vec2(0.633970022, 0.514190018), Vec2(0.610329986, 0.520829976), Vec2(0.622420013, 0.50632), Vec2(0.633970022, 0.514190018), Vec2(0.621529996, 0.530330002), Vec2(0.590020001, 0.559599996), Vec2(0.606920004, 0.545560002), Vec2(0.619560003, 0.55558002), Vec2(0.602129996, 0.571669996), Vec2(0.606920004, 0.545560002), Vec2(0.621529996, 0.530330002), Vec2(0.634360015, 0.538630009), Vec2(0.619560003, 0.55558002), Vec2(0.596249998, 0.534189999), Vec2(0.610329986, 0.520829976), Vec2(0.621529996, 0.530330002), Vec2(0.606920004, 0.545560002), Vec2(0.58020997, 0.54618001), Vec2(0.596249998, 0.534189999), Vec2(0.606920004, 0.545560002), Vec2(0.590020001, 0.559599996), Vec2(0.572329998, 0.531830013), Vec2(0.587379992, 0.521820009), Vec2(0.596249998, 0.534189999), Vec2(0.58020997, 0.54618001), Vec2(0.587379992, 0.521820009), Vec2(0.600750029, 0.510399997), Vec2(0.610329986, 0.520829976), Vec2(0.596249998, 0.534189999), Vec2(0.580219984, 0.508660018), Vec2(0.592819989, 0.499260008), Vec2(0.600750029, 0.510399997), Vec2(0.587379992, 0.521820009), Vec2(0.566129982, 0.516830027), Vec2(0.580219984, 0.508660018), Vec2(0.587379992, 0.521820009), Vec2(0.572329998, 0.531830013), Vec2(0.600750029, 0.510399997), Vec2(0.612269998, 0.49774), Vec2(0.622420013, 0.50632), Vec2(0.610329986, 0.520829976), Vec2(0.612269998, 0.49774), Vec2(0.621800005, 0.483859986), Vec2(0.632510006, 0.490810007), Vec2(0.622420013, 0.50632), Vec2(0.603630006, 0.488689989), Vec2(0.612360001, 0.476819992), Vec2(0.621800005, 0.483859986), Vec2(0.612269998, 0.49774), Vec2(0.592819989, 0.499260008), Vec2(0.603630006, 0.488689989), Vec2(0.612269998, 0.49774), Vec2(0.600750029, 0.510399997), Vec2(0.58671999, 0.487450004), Vec2(0.596840024, 0.479360014), Vec2(0.603630006, 0.488689989), Vec2(0.592819989, 0.499260008), Vec2(0.596840024, 0.479360014), Vec2(0.604449987, 0.47025001), Vec2(0.612360001, 0.476819992), Vec2(0.603630006, 0.488689989), Vec2(0.592630029, 0.469500005), Vec2(0.599250019, 0.465579987), Vec2(0.604449987, 0.47025001), Vec2(0.596840024, 0.479360014), Vec2(0.582710028, 0.474830002), Vec2(0.592630029, 0.469500005), Vec2(0.596840024, 0.479360014), Vec2(0.58671999, 0.487450004), Vec2(0.561479986, 0.501309991), Vec2(0.574779987, 0.494819999), Vec2(0.580219984, 0.508660018), Vec2(0.566129982, 0.516830027), Vec2(0.574779987, 0.494819999), Vec2(0.58671999, 0.487450004), Vec2(0.592819989, 0.499260008), Vec2(0.580219984, 0.508660018), Vec2(0.571099997, 0.480280012), Vec2(0.582710028, 0.474830002), Vec2(0.58671999, 0.487450004), Vec2(0.574779987, 0.494819999), Vec2(0.558290005, 0.485320002), Vec2(0.571099997, 0.480280012), Vec2(0.574779987, 0.494819999), Vec2(0.561479986, 0.501309991), Vec2(0.500389993, 0.551400006), Vec2(0.519469976, 0.550300002), Vec2(0.521939993, 0.569310009), Vec2(0.500389993, 0.570739985), Vec2(0.519469976, 0.550300002), Vec2(0.538079977, 0.546459973), Vec2(0.542770028, 0.564339995), Vec2(0.521939993, 0.569310009), Vec2(0.517650008, 0.531599998), Vec2(0.534569979, 0.528569996), Vec2(0.538079977, 0.546459973), Vec2(0.519469976, 0.550300002), Vec2(0.500389993, 0.532480001), Vec2(0.517650008, 0.531599998), Vec2(0.519469976, 0.550300002), Vec2(0.500389993, 0.551400006), Vec2(0.538079977, 0.546459973), Vec2(0.555809975, 0.540170014), Vec2(0.562319994, 0.556420028), Vec2(0.542770028, 0.564339995), Vec2(0.555809975, 0.540170014), Vec2(0.572329998, 0.531830013), Vec2(0.58020997, 0.54618001), Vec2(0.562319994, 0.556420028), Vec2(0.550819993, 0.523559988), Vec2(0.566129982, 0.516830027), Vec2(0.572329998, 0.531830013), Vec2(0.555809975, 0.540170014), Vec2(0.534569979, 0.528569996), Vec2(0.550819993, 0.523559988), Vec2(0.555809975, 0.540170014), Vec2(0.538079977, 0.546459973), Vec2(0.531989992, 0.510689974), Vec2(0.547129989, 0.506690025), Vec2(0.550819993, 0.523559988), Vec2(0.534569979, 0.528569996), Vec2(0.547129989, 0.506690025), Vec2(0.561479986, 0.501309991), Vec2(0.566129982, 0.516830027), Vec2(0.550819993, 0.523559988), Vec2(0.544579983, 0.489589989), Vec2(0.558290005, 0.485320002), Vec2(0.561479986, 0.501309991), Vec2(0.547129989, 0.506690025), Vec2(0.530219972, 0.492810011), Vec2(0.544579983, 0.489589989), Vec2(0.547129989, 0.506690025), Vec2(0.531989992, 0.510689974), Vec2(0.500389993, 0.513880014), Vec2(0.516330004, 0.513119996), Vec2(0.517650008, 0.531599998), Vec2(0.500389993, 0.532480001), Vec2(0.516330004, 0.513119996), Vec2(0.531989992, 0.510689974), Vec2(0.534569979, 0.528569996), Vec2(0.517650008, 0.531599998), Vec2(0.51542002, 0.494789988), Vec2(0.530219972, 0.492810011), Vec2(0.531989992, 0.510689974), Vec2(0.516330004, 0.513119996), Vec2(0.500389993, 0.49544999), Vec2(0.51542002, 0.494789988), Vec2(0.516330004, 0.513119996), Vec2(0.500389993, 0.513880014), Vec2(0.328619987, 0.504840016), Vec2(0.338959992, 0.523949981), Vec2(0.323650002, 0.528159976), Vec2(0.313829988, 0.508350015), Vec2(0.338959992, 0.523949981), Vec2(0.351229995, 0.542800009), Vec2(0.335189998, 0.547879994), Vec2(0.323650002, 0.528159976), Vec2(0.35304001, 0.518280029), Vec2(0.365619987, 0.535939991), Vec2(0.351229995, 0.542800009), Vec2(0.338959992, 0.523949981), Vec2(0.342489988, 0.500119984), Vec2(0.35304001, 0.518280029), Vec2(0.338959992, 0.523949981), Vec2(0.328619987, 0.504840016), Vec2(0.351229995, 0.542800009), Vec2(0.365790009, 0.561370015), Vec2(0.348800004, 0.567589998), Vec2(0.335189998, 0.547879994), Vec2(0.365790009, 0.561370015), Vec2(0.383150011, 0.57950002), Vec2(0.365060002, 0.587239981), Vec2(0.348800004, 0.567589998), Vec2(0.380490005, 0.552999973), Vec2(0.397969991, 0.56923002), Vec2(0.383150011, 0.57950002), Vec2(0.365790009, 0.561370015), Vec2(0.365619987, 0.535939991), Vec2(0.380490005, 0.552999973), Vec2(0.365790009, 0.561370015), Vec2(0.351229995, 0.542800009), Vec2(0.37834999, 0.527589977), Vec2(0.393029988, 0.542940021), Vec2(0.380490005, 0.552999973), Vec2(0.365619987, 0.535939991), Vec2(0.393029988, 0.542940021), Vec2(0.409999996, 0.557139993), Vec2(0.397969991, 0.56923002), Vec2(0.380490005, 0.552999973), Vec2(0.403629988, 0.531610012), Vec2(0.419750005, 0.543820024), Vec2(0.409999996, 0.557139993), Vec2(0.393029988, 0.542940021), Vec2(0.389479995, 0.518100023), Vec2(0.403629988, 0.531610012), Vec2(0.393029988, 0.542940021), Vec2(0.37834999, 0.527589977), Vec2(0.355369985, 0.494399995), Vec2(0.365839988, 0.511370003), Vec2(0.35304001, 0.518280029), Vec2(0.342489988, 0.500119984), Vec2(0.365839988, 0.511370003), Vec2(0.37834999, 0.527589977), Vec2(0.365619987, 0.535939991), Vec2(0.35304001, 0.518280029), Vec2(0.377339989, 0.503499985), Vec2(0.389479995, 0.518100023), Vec2(0.37834999, 0.527589977), Vec2(0.365839988, 0.511370003), Vec2(0.367210001, 0.48793), Vec2(0.377339989, 0.503499985), Vec2(0.365839988, 0.511370003), Vec2(0.355369985, 0.494399995), Vec2(0.383150011, 0.57950002), Vec2(0.404040009, 0.596889973), Vec2(0.384849995, 0.606750011), Vec2(0.365060002, 0.587239981), Vec2(0.404040009, 0.596889973), Vec2(0.4296, 0.612860024), Vec2(0.409880012, 0.625890017), Vec2(0.384849995, 0.606750011), Vec2(0.418469995, 0.584190011), Vec2(0.442400008, 0.597109973), Vec2(0.4296, 0.612860024), Vec2(0.404040009, 0.596889973), Vec2(0.397969991, 0.56923002), Vec2(0.418469995, 0.584190011), Vec2(0.404040009, 0.596889973), Vec2(0.383150011, 0.57950002), Vec2(0.4296, 0.612860024), Vec2(0.461400002, 0.625970006), Vec2(0.444310009, 0.643970013), Vec2(0.409880012, 0.625890017), Vec2(0.461400002, 0.625970006), Vec2(0.500389993, 0.63331002), Vec2(0.500389993, 0.658290029), Vec2(0.444310009, 0.643970013), Vec2(0.469940007, 0.606760025), Vec2(0.500389993, 0.611329973), Vec2(0.500389993, 0.63331002), Vec2(0.461400002, 0.625970006), Vec2(0.442400008, 0.597109973), Vec2(0.469940007, 0.606760025), Vec2(0.461400002, 0.625970006), Vec2(0.4296, 0.612860024), Vec2(0.451160014, 0.580179989), Vec2(0.475080013, 0.587490022), Vec2(0.469940007, 0.606760025), Vec2(0.442400008, 0.597109973), Vec2(0.475080013, 0.587490022), Vec2(0.500389993, 0.590650022), Vec2(0.500389993, 0.611329973), Vec2(0.469940007, 0.606760025), Vec2(0.478560001, 0.56844002), Vec2(0.500389993, 0.570739985), Vec2(0.500389993, 0.590650022), Vec2(0.475080013, 0.587490022), Vec2(0.457489997, 0.562780023), Vec2(0.478560001, 0.56844002), Vec2(0.475080013, 0.587490022), Vec2(0.451160014, 0.580179989), Vec2(0.409999996, 0.557139993), Vec2(0.42938, 0.569769979), Vec2(0.418469995, 0.584190011), Vec2(0.397969991, 0.56923002), Vec2(0.42938, 0.569769979), Vec2(0.451160014, 0.580179989), Vec2(0.442400008, 0.597109973), Vec2(0.418469995, 0.584190011), Vec2(0.437759995, 0.554369986), Vec2(0.457489997, 0.562780023), Vec2(0.451160014, 0.580179989), Vec2(0.42938, 0.569769979), Vec2(0.419750005, 0.543820024), Vec2(0.437759995, 0.554369986), Vec2(0.42938, 0.569769979), Vec2(0.409999996, 0.557139993), Vec2(0.42761001, 0.52967), Vec2(0.444270015, 0.538399994), Vec2(0.437759995, 0.554369986), Vec2(0.419750005, 0.543820024), Vec2(0.444270015, 0.538399994), Vec2(0.46221, 0.54519999), Vec2(0.457489997, 0.562780023), Vec2(0.437759995, 0.554369986), Vec2(0.449299991, 0.522080004), Vec2(0.465770006, 0.527589977), Vec2(0.46221, 0.54519999), Vec2(0.444270015, 0.538399994), Vec2(0.433840007, 0.514919996), Vec2(0.449299991, 0.522080004), Vec2(0.444270015, 0.538399994), Vec2(0.42761001, 0.52967), Vec2(0.46221, 0.54519999), Vec2(0.481059998, 0.549660027), Vec2(0.478560001, 0.56844002), Vec2(0.457489997, 0.562780023), Vec2(0.481059998, 0.549660027), Vec2(0.500389993, 0.551400006), Vec2(0.500389993, 0.570739985), Vec2(0.478560001, 0.56844002), Vec2(0.482910007, 0.531140029), Vec2(0.500389993, 0.532480001), Vec2(0.500389993, 0.551400006), Vec2(0.481059998, 0.549660027), Vec2(0.465770006, 0.527589977), Vec2(0.482910007, 0.531140029), Vec2(0.481059998, 0.549660027), Vec2(0.46221, 0.54519999), Vec2(0.468409985, 0.509959996), Vec2(0.484270006, 0.512830019), Vec2(0.482910007, 0.531140029), Vec2(0.465770006, 0.527589977), Vec2(0.484270006, 0.512830019), Vec2(0.500389993, 0.513880014), Vec2(0.500389993, 0.532480001), Vec2(0.482910007, 0.531140029), Vec2(0.485249996, 0.494610012), Vec2(0.500389993, 0.49544999), Vec2(0.500389993, 0.513880014), Vec2(0.484270006, 0.512830019), Vec2(0.470310003, 0.492269993), Vec2(0.485249996, 0.494610012), Vec2(0.484270006, 0.512830019), Vec2(0.468409985, 0.509959996), Vec2(0.43858999, 0.499669999), Vec2(0.453090012, 0.505490005), Vec2(0.449299991, 0.522080004), Vec2(0.433840007, 0.514919996), Vec2(0.453090012, 0.505490005), Vec2(0.468409985, 0.509959996), Vec2(0.465770006, 0.527589977), Vec2(0.449299991, 0.522080004), Vec2(0.455799997, 0.488629997), Vec2(0.470310003, 0.492269993), Vec2(0.468409985, 0.509959996), Vec2(0.453090012, 0.505490005), Vec2(0.441960007, 0.483940005), Vec2(0.455799997, 0.488629997), Vec2(0.453090012, 0.505490005), Vec2(0.43858999, 0.499669999), Vec2(0.377939999, 0.481029987), Vec2(0.387490004, 0.494980007), Vec2(0.377339989, 0.503499985), Vec2(0.367210001, 0.48793), Vec2(0.387490004, 0.494980007), Vec2(0.399040014, 0.507770002), Vec2(0.389479995, 0.518100023), Vec2(0.377339989, 0.503499985), Vec2(0.39616999, 0.486059994), Vec2(0.407000005, 0.496780008), Vec2(0.399040014, 0.507770002), Vec2(0.387490004, 0.494980007), Vec2(0.38745001, 0.474099994), Vec2(0.39616999, 0.486059994), Vec2(0.387490004, 0.494980007), Vec2(0.377939999, 0.481029987), Vec2(0.399040014, 0.507770002), Vec2(0.412470013, 0.519370019), Vec2(0.403629988, 0.531610012), Vec2(0.389479995, 0.518100023), Vec2(0.412470013, 0.519370019), Vec2(0.42761001, 0.52967), Vec2(0.419750005, 0.543820024), Vec2(0.403629988, 0.531610012), Vec2(0.419649988, 0.506420016), Vec2(0.433840007, 0.514919996), Vec2(0.42761001, 0.52967), Vec2(0.412470013, 0.519370019), Vec2(0.407000005, 0.496780008), Vec2(0.419649988, 0.506420016), Vec2(0.412470013, 0.519370019), Vec2(0.399040014, 0.507770002), Vec2(0.413190007, 0.485159993), Vec2(0.425190002, 0.492810011), Vec2(0.419649988, 0.506420016), Vec2(0.407000005, 0.496780008), Vec2(0.425190002, 0.492810011), Vec2(0.43858999, 0.499669999), Vec2(0.433840007, 0.514919996), Vec2(0.419649988, 0.506420016), Vec2(0.429049999, 0.478509992), Vec2(0.441960007, 0.483940005), Vec2(0.43858999, 0.499669999), Vec2(0.425190002, 0.492810011), Vec2(0.417360008, 0.472730011), Vec2(0.429049999, 0.478509992), Vec2(0.425190002, 0.492810011), Vec2(0.413190007, 0.485159993), Vec2(0.39546001, 0.467680007), Vec2(0.403050005, 0.476880014), Vec2(0.39616999, 0.486059994), Vec2(0.38745001, 0.474099994), Vec2(0.403050005, 0.476880014), Vec2(0.413190007, 0.485159993), Vec2(0.407000005, 0.496780008), Vec2(0.39616999, 0.486059994), Vec2(0.407389998, 0.467159986), Vec2(0.417360008, 0.472730011), Vec2(0.413190007, 0.485159993), Vec2(0.403050005, 0.476880014), Vec2(0.400750011, 0.463099986), Vec2(0.407389998, 0.467159986), Vec2(0.403050005, 0.476880014), Vec2(0.39546001, 0.467680007)}, + ["subd_fvar_linear"] = "corners plus1", + ["primitive_attributes"] = { UserData("/sphere2/sphere.primvars:dwa_mesh_file_translator_version"), UserData("/sphere2/sphere.primvars:dwa_mesh_translator_version"), UserData("/sphere2/sphere.primvars:name"), UserData("/sphere2/sphere.primvars:primId"), UserData("/sphere2/sphere.primvars:subd__hi"), UserData("/sphere2/sphere.primvars:subd__lo")}, +} + +RdlMeshGeometry("/sphere3/sphere") { + ["node_xform"] = blur(Mat4(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, -6, 2, 0, 1), Mat4(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, -6, 2, 0, 1)), + ["face_vertex_count"] = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + ["vertices_by_index"] = { 3, 2, 1, 0, 2, 5, 4, 1, 7, 6, 5, 2, 8, 7, 2, 3, 5, 10, 9, 4, 10, 12, 11, 9, 14, 13, 12, 10, 6, 14, 10, 5, 16, 15, 14, 6, 15, 17, 13, 14, 19, 18, 17, 15, 20, 19, 15, 16, 22, 21, 7, 8, 21, 16, 6, 7, 23, 20, 16, 21, 24, 23, 21, 22, 12, 26, 25, 11, 26, 28, 27, 25, 30, 29, 28, 26, 13, 30, 26, 12, 28, 32, 31, 27, 32, 34, 33, 31, 36, 35, 34, 32, 29, 36, 32, 28, 38, 37, 36, 29, 37, 39, 35, 36, 41, 40, 39, 37, 42, 41, 37, 38, 17, 43, 30, 13, 43, 38, 29, 30, 44, 42, 38, 43, 18, 44, 43, 17, 46, 45, 44, 18, 45, 47, 42, 44, 49, 48, 47, 45, 50, 49, 45, 46, 47, 51, 41, 42, 51, 52, 40, 41, 54, 53, 52, 51, 48, 54, 51, 47, 56, 55, 54, 48, 55, 57, 53, 54, 59, 58, 57, 55, 60, 59, 55, 56, 62, 61, 49, 50, 61, 56, 48, 49, 63, 60, 56, 61, 64, 63, 61, 62, 66, 65, 23, 24, 65, 67, 20, 23, 69, 68, 67, 65, 70, 69, 65, 66, 67, 71, 19, 20, 71, 46, 18, 19, 72, 50, 46, 71, 68, 72, 71, 67, 74, 73, 72, 68, 73, 62, 50, 72, 75, 64, 62, 73, 76, 75, 73, 74, 78, 77, 69, 70, 77, 74, 68, 69, 79, 76, 74, 77, 80, 79, 77, 78, 34, 82, 81, 33, 82, 84, 83, 81, 86, 85, 84, 82, 35, 86, 82, 34, 84, 88, 87, 83, 88, 90, 89, 87, 92, 91, 90, 88, 85, 92, 88, 84, 94, 93, 92, 85, 93, 95, 91, 92, 97, 96, 95, 93, 98, 97, 93, 94, 39, 99, 86, 35, 99, 94, 85, 86, 100, 98, 94, 99, 40, 100, 99, 39, 90, 102, 101, 89, 102, 104, 103, 101, 106, 105, 104, 102, 91, 106, 102, 90, 104, 108, 107, 103, 108, 110, 109, 107, 112, 111, 110, 108, 105, 112, 108, 104, 114, 113, 112, 105, 113, 115, 111, 112, 117, 116, 115, 113, 118, 117, 113, 114, 95, 119, 106, 91, 119, 114, 105, 106, 120, 118, 114, 119, 96, 120, 119, 95, 122, 121, 120, 96, 121, 123, 118, 120, 125, 124, 123, 121, 126, 125, 121, 122, 123, 127, 117, 118, 127, 128, 116, 117, 130, 129, 128, 127, 124, 130, 127, 123, 132, 131, 130, 124, 131, 133, 129, 130, 135, 134, 133, 131, 136, 135, 131, 132, 138, 137, 125, 126, 137, 132, 124, 125, 139, 136, 132, 137, 140, 139, 137, 138, 52, 141, 100, 40, 141, 142, 98, 100, 144, 143, 142, 141, 53, 144, 141, 52, 142, 145, 97, 98, 145, 122, 96, 97, 146, 126, 122, 145, 143, 146, 145, 142, 148, 147, 146, 143, 147, 138, 126, 146, 149, 140, 138, 147, 150, 149, 147, 148, 57, 151, 144, 53, 151, 148, 143, 144, 152, 150, 148, 151, 58, 152, 151, 57, 154, 153, 152, 58, 153, 155, 150, 152, 157, 156, 155, 153, 158, 157, 153, 154, 155, 159, 149, 150, 159, 160, 140, 149, 162, 161, 160, 159, 156, 162, 159, 155, 164, 163, 162, 156, 163, 165, 161, 162, 167, 166, 165, 163, 168, 167, 163, 164, 170, 169, 157, 158, 169, 164, 156, 157, 171, 168, 164, 169, 172, 171, 169, 170, 160, 173, 139, 140, 173, 174, 136, 139, 176, 175, 174, 173, 161, 176, 173, 160, 174, 177, 135, 136, 177, 178, 134, 135, 180, 179, 178, 177, 175, 180, 177, 174, 182, 181, 180, 175, 181, 183, 179, 180, 185, 184, 183, 181, 186, 185, 181, 182, 165, 187, 176, 161, 187, 182, 175, 176, 188, 186, 182, 187, 166, 188, 187, 165, 190, 189, 188, 166, 189, 191, 186, 188, 193, 192, 191, 189, 194, 193, 189, 190, 191, 195, 185, 186, 195, 196, 184, 185, 198, 197, 196, 195, 192, 198, 195, 191, 200, 199, 198, 192, 199, 201, 197, 198, 203, 202, 201, 199, 204, 203, 199, 200, 206, 205, 193, 194, 205, 200, 192, 193, 207, 204, 200, 205, 208, 207, 205, 206, 210, 209, 171, 172, 209, 211, 168, 171, 213, 212, 211, 209, 214, 213, 209, 210, 211, 215, 167, 168, 215, 190, 166, 167, 216, 194, 190, 215, 212, 216, 215, 211, 218, 217, 216, 212, 217, 206, 194, 216, 219, 208, 206, 217, 220, 219, 217, 218, 222, 221, 213, 214, 221, 218, 212, 213, 223, 220, 218, 221, 224, 223, 221, 222, 226, 225, 79, 80, 225, 227, 76, 79, 229, 228, 227, 225, 230, 229, 225, 226, 227, 231, 75, 76, 231, 232, 64, 75, 234, 233, 232, 231, 228, 234, 231, 227, 236, 235, 234, 228, 235, 237, 233, 234, 239, 238, 237, 235, 240, 239, 235, 236, 242, 241, 229, 230, 241, 236, 228, 229, 243, 240, 236, 241, 244, 243, 241, 242, 232, 245, 63, 64, 245, 246, 60, 63, 248, 247, 246, 245, 233, 248, 245, 232, 246, 249, 59, 60, 249, 154, 58, 59, 250, 158, 154, 249, 247, 250, 249, 246, 252, 251, 250, 247, 251, 170, 158, 250, 253, 172, 170, 251, 254, 253, 251, 252, 237, 255, 248, 233, 255, 252, 247, 248, 256, 254, 252, 255, 238, 256, 255, 237, 258, 257, 256, 238, 257, 259, 254, 256, 261, 260, 259, 257, 262, 261, 257, 258, 259, 263, 253, 254, 263, 210, 172, 253, 264, 214, 210, 263, 260, 264, 263, 259, 266, 265, 264, 260, 265, 222, 214, 264, 267, 224, 222, 265, 268, 267, 265, 266, 270, 269, 261, 262, 269, 266, 260, 261, 271, 268, 266, 269, 272, 271, 269, 270, 274, 273, 243, 244, 273, 275, 240, 243, 277, 276, 275, 273, 278, 277, 273, 274, 275, 279, 239, 240, 279, 258, 238, 239, 280, 262, 258, 279, 276, 280, 279, 275, 282, 281, 280, 276, 281, 270, 262, 280, 283, 272, 270, 281, 284, 283, 281, 282, 286, 285, 277, 278, 285, 282, 276, 277, 287, 284, 282, 285, 288, 287, 285, 286, 290, 289, 107, 109, 289, 291, 103, 107, 293, 292, 291, 289, 294, 293, 289, 290, 291, 295, 101, 103, 295, 296, 89, 101, 298, 297, 296, 295, 292, 298, 295, 291, 300, 299, 298, 292, 299, 301, 297, 298, 303, 302, 301, 299, 304, 303, 299, 300, 306, 305, 293, 294, 305, 300, 292, 293, 307, 304, 300, 305, 308, 307, 305, 306, 296, 309, 87, 89, 309, 310, 83, 87, 312, 311, 310, 309, 297, 312, 309, 296, 310, 313, 81, 83, 313, 314, 33, 81, 316, 315, 314, 313, 311, 316, 313, 310, 318, 317, 316, 311, 317, 319, 315, 316, 321, 320, 319, 317, 322, 321, 317, 318, 301, 323, 312, 297, 323, 318, 311, 312, 324, 322, 318, 323, 302, 324, 323, 301, 326, 325, 324, 302, 325, 327, 322, 324, 329, 328, 327, 325, 330, 329, 325, 326, 327, 331, 321, 322, 331, 332, 320, 321, 334, 333, 332, 331, 328, 334, 331, 327, 336, 335, 334, 328, 335, 337, 333, 334, 339, 338, 337, 335, 340, 339, 335, 336, 342, 341, 329, 330, 341, 336, 328, 329, 343, 340, 336, 341, 344, 343, 341, 342, 346, 345, 307, 308, 345, 347, 304, 307, 349, 348, 347, 345, 350, 349, 345, 346, 347, 351, 303, 304, 351, 326, 302, 303, 352, 330, 326, 351, 348, 352, 351, 347, 354, 353, 352, 348, 353, 342, 330, 352, 355, 344, 342, 353, 356, 355, 353, 354, 358, 357, 349, 350, 357, 354, 348, 349, 359, 356, 354, 357, 360, 359, 357, 358, 314, 361, 31, 33, 361, 362, 27, 31, 364, 363, 362, 361, 315, 364, 361, 314, 362, 365, 25, 27, 365, 366, 11, 25, 368, 367, 366, 365, 363, 368, 365, 362, 370, 369, 368, 363, 369, 371, 367, 368, 373, 372, 371, 369, 374, 373, 369, 370, 319, 375, 364, 315, 375, 370, 363, 364, 376, 374, 370, 375, 320, 376, 375, 319, 366, 377, 9, 11, 377, 378, 4, 9, 380, 379, 378, 377, 367, 380, 377, 366, 378, 381, 1, 4, 381, 382, 0, 1, 384, 383, 382, 381, 379, 384, 381, 378, 386, 385, 384, 379, 385, 387, 383, 384, 389, 388, 387, 385, 390, 389, 385, 386, 371, 391, 380, 367, 391, 386, 379, 380, 392, 390, 386, 391, 372, 392, 391, 371, 394, 393, 392, 372, 393, 395, 390, 392, 397, 396, 395, 393, 398, 397, 393, 394, 395, 399, 389, 390, 399, 400, 388, 389, 402, 401, 400, 399, 396, 402, 399, 395, 404, 403, 402, 396, 403, 405, 401, 402, 407, 406, 405, 403, 408, 407, 403, 404, 410, 409, 397, 398, 409, 404, 396, 397, 411, 408, 404, 409, 412, 411, 409, 410, 332, 413, 376, 320, 413, 414, 374, 376, 416, 415, 414, 413, 333, 416, 413, 332, 414, 417, 373, 374, 417, 394, 372, 373, 418, 398, 394, 417, 415, 418, 417, 414, 420, 419, 418, 415, 419, 410, 398, 418, 421, 412, 410, 419, 422, 421, 419, 420, 337, 423, 416, 333, 423, 420, 415, 416, 424, 422, 420, 423, 338, 424, 423, 337, 426, 425, 424, 338, 425, 427, 422, 424, 429, 428, 427, 425, 430, 429, 425, 426, 427, 431, 421, 422, 431, 432, 412, 421, 434, 433, 432, 431, 428, 434, 431, 427, 436, 435, 434, 428, 435, 437, 433, 434, 439, 438, 437, 435, 440, 439, 435, 436, 442, 441, 429, 430, 441, 436, 428, 429, 443, 440, 436, 441, 444, 443, 441, 442, 432, 445, 411, 412, 445, 446, 408, 411, 448, 447, 446, 445, 433, 448, 445, 432, 446, 449, 407, 408, 449, 450, 406, 407, 452, 451, 450, 449, 447, 452, 449, 446, 454, 453, 452, 447, 453, 455, 451, 452, 457, 456, 455, 453, 458, 457, 453, 454, 437, 459, 448, 433, 459, 454, 447, 448, 460, 458, 454, 459, 438, 460, 459, 437, 462, 461, 460, 438, 461, 463, 458, 460, 465, 464, 463, 461, 466, 465, 461, 462, 463, 467, 457, 458, 467, 468, 456, 457, 470, 469, 468, 467, 464, 470, 467, 463, 472, 471, 470, 464, 471, 473, 469, 470, 475, 474, 473, 471, 476, 475, 471, 472, 478, 477, 465, 466, 477, 472, 464, 465, 479, 476, 472, 477, 480, 479, 477, 478, 482, 481, 443, 444, 481, 483, 440, 443, 485, 484, 483, 481, 486, 485, 481, 482, 483, 487, 439, 440, 487, 462, 438, 439, 488, 466, 462, 487, 484, 488, 487, 483, 490, 489, 488, 484, 489, 478, 466, 488, 491, 480, 478, 489, 492, 491, 489, 490, 494, 493, 485, 486, 493, 490, 484, 485, 495, 492, 490, 493, 496, 495, 493, 494, 498, 497, 359, 360, 497, 499, 356, 359, 501, 500, 499, 497, 502, 501, 497, 498, 499, 503, 355, 356, 503, 504, 344, 355, 506, 505, 504, 503, 500, 506, 503, 499, 508, 507, 506, 500, 507, 509, 505, 506, 511, 510, 509, 507, 512, 511, 507, 508, 514, 513, 501, 502, 513, 508, 500, 501, 515, 512, 508, 513, 516, 515, 513, 514, 504, 517, 343, 344, 517, 518, 340, 343, 520, 519, 518, 517, 505, 520, 517, 504, 518, 521, 339, 340, 521, 426, 338, 339, 522, 430, 426, 521, 519, 522, 521, 518, 524, 523, 522, 519, 523, 442, 430, 522, 525, 444, 442, 523, 526, 525, 523, 524, 509, 527, 520, 505, 527, 524, 519, 520, 528, 526, 524, 527, 510, 528, 527, 509, 530, 529, 528, 510, 529, 531, 526, 528, 533, 532, 531, 529, 534, 533, 529, 530, 531, 535, 525, 526, 535, 482, 444, 525, 536, 486, 482, 535, 532, 536, 535, 531, 538, 537, 536, 532, 537, 494, 486, 536, 539, 496, 494, 537, 540, 539, 537, 538, 542, 541, 533, 534, 541, 538, 532, 533, 543, 540, 538, 541, 544, 543, 541, 542, 546, 545, 515, 516, 545, 547, 512, 515, 549, 548, 547, 545, 550, 549, 545, 546, 547, 551, 511, 512, 551, 530, 510, 511, 552, 534, 530, 551, 548, 552, 551, 547, 554, 553, 552, 548, 553, 542, 534, 552, 555, 544, 542, 553, 556, 555, 553, 554, 558, 557, 549, 550, 557, 554, 548, 549, 559, 556, 554, 557, 560, 559, 557, 558, 562, 561, 559, 560, 561, 563, 556, 559, 565, 564, 563, 561, 566, 565, 561, 562, 563, 567, 555, 556, 567, 568, 544, 555, 570, 569, 568, 567, 564, 570, 567, 563, 572, 571, 570, 564, 571, 573, 569, 570, 575, 574, 573, 571, 576, 575, 571, 572, 578, 577, 565, 566, 577, 572, 564, 565, 579, 576, 572, 577, 580, 579, 577, 578, 568, 581, 543, 544, 581, 582, 540, 543, 584, 583, 582, 581, 569, 584, 581, 568, 582, 585, 539, 540, 585, 586, 496, 539, 588, 587, 586, 585, 583, 588, 585, 582, 590, 589, 588, 583, 589, 591, 587, 588, 593, 592, 591, 589, 594, 593, 589, 590, 573, 595, 584, 569, 595, 590, 583, 584, 596, 594, 590, 595, 574, 596, 595, 573, 598, 597, 596, 574, 597, 599, 594, 596, 601, 600, 599, 597, 602, 601, 597, 598, 599, 603, 593, 594, 603, 604, 592, 593, 606, 605, 604, 603, 600, 606, 603, 599, 608, 607, 606, 600, 607, 609, 605, 606, 611, 610, 609, 607, 612, 611, 607, 608, 614, 613, 601, 602, 613, 608, 600, 601, 615, 612, 608, 613, 616, 615, 613, 614, 618, 617, 579, 580, 617, 619, 576, 579, 621, 620, 619, 617, 622, 621, 617, 618, 619, 623, 575, 576, 623, 598, 574, 575, 624, 602, 598, 623, 620, 624, 623, 619, 626, 625, 624, 620, 625, 614, 602, 624, 627, 616, 614, 625, 628, 627, 625, 626, 630, 629, 621, 622, 629, 626, 620, 621, 631, 628, 626, 629, 632, 631, 629, 630, 586, 633, 495, 496, 633, 634, 492, 495, 636, 635, 634, 633, 587, 636, 633, 586, 634, 637, 491, 492, 637, 638, 480, 491, 640, 639, 638, 637, 635, 640, 637, 634, 642, 641, 640, 635, 641, 643, 639, 640, 645, 644, 643, 641, 646, 645, 641, 642, 591, 647, 636, 587, 647, 642, 635, 636, 648, 646, 642, 647, 592, 648, 647, 591, 638, 649, 479, 480, 649, 650, 476, 479, 652, 651, 650, 649, 639, 652, 649, 638, 650, 653, 475, 476, 653, 654, 474, 475, 656, 655, 654, 653, 651, 656, 653, 650, 658, 657, 656, 651, 657, 659, 655, 656, 661, 660, 659, 657, 662, 661, 657, 658, 643, 663, 652, 639, 663, 658, 651, 652, 664, 662, 658, 663, 644, 664, 663, 643, 666, 665, 664, 644, 665, 667, 662, 664, 669, 668, 667, 665, 670, 669, 665, 666, 667, 671, 661, 662, 671, 672, 660, 661, 674, 673, 672, 671, 668, 674, 671, 667, 676, 675, 674, 668, 675, 677, 673, 674, 679, 678, 677, 675, 680, 679, 675, 676, 682, 681, 669, 670, 681, 676, 668, 669, 683, 680, 676, 681, 684, 683, 681, 682, 604, 685, 648, 592, 685, 686, 646, 648, 688, 687, 686, 685, 605, 688, 685, 604, 686, 689, 645, 646, 689, 666, 644, 645, 690, 670, 666, 689, 687, 690, 689, 686, 692, 691, 690, 687, 691, 682, 670, 690, 693, 684, 682, 691, 694, 693, 691, 692, 609, 695, 688, 605, 695, 692, 687, 688, 696, 694, 692, 695, 610, 696, 695, 609, 698, 697, 696, 610, 697, 699, 694, 696, 701, 700, 699, 697, 702, 701, 697, 698, 699, 703, 693, 694, 703, 704, 684, 693, 706, 705, 704, 703, 700, 706, 703, 699, 708, 707, 706, 700, 707, 709, 705, 706, 711, 710, 709, 707, 712, 711, 707, 708, 714, 713, 701, 702, 713, 708, 700, 701, 715, 712, 708, 713, 716, 715, 713, 714, 704, 717, 683, 684, 717, 718, 680, 683, 720, 719, 718, 717, 705, 720, 717, 704, 718, 721, 679, 680, 721, 722, 678, 679, 724, 723, 722, 721, 719, 724, 721, 718, 726, 725, 724, 719, 725, 727, 723, 724, 729, 728, 727, 725, 730, 729, 725, 726, 709, 731, 720, 705, 731, 726, 719, 720, 732, 730, 726, 731, 710, 732, 731, 709, 734, 733, 732, 710, 733, 735, 730, 732, 737, 736, 735, 733, 738, 737, 733, 734, 735, 739, 729, 730, 739, 740, 728, 729, 742, 741, 740, 739, 736, 742, 739, 735, 744, 743, 742, 736, 743, 745, 741, 742, 747, 746, 745, 743, 748, 747, 743, 744, 750, 749, 737, 738, 749, 744, 736, 737, 751, 748, 744, 749, 752, 751, 749, 750, 754, 753, 715, 716, 753, 755, 712, 715, 757, 756, 755, 753, 758, 757, 753, 754, 755, 759, 711, 712, 759, 734, 710, 711, 760, 738, 734, 759, 756, 760, 759, 755, 762, 761, 760, 756, 761, 750, 738, 760, 763, 752, 750, 761, 764, 763, 761, 762, 766, 765, 757, 758, 765, 762, 756, 757, 767, 764, 762, 765, 768, 767, 765, 766, 770, 769, 631, 632, 769, 771, 628, 631, 773, 772, 771, 769, 774, 773, 769, 770, 771, 775, 627, 628, 775, 776, 616, 627, 778, 777, 776, 775, 772, 778, 775, 771, 780, 779, 778, 772, 779, 781, 777, 778, 783, 782, 781, 779, 784, 783, 779, 780, 786, 785, 773, 774, 785, 780, 772, 773, 787, 784, 780, 785, 788, 787, 785, 786, 776, 789, 615, 616, 789, 790, 612, 615, 792, 791, 790, 789, 777, 792, 789, 776, 790, 793, 611, 612, 793, 698, 610, 611, 794, 702, 698, 793, 791, 794, 793, 790, 796, 795, 794, 791, 795, 714, 702, 794, 797, 716, 714, 795, 798, 797, 795, 796, 781, 799, 792, 777, 799, 796, 791, 792, 800, 798, 796, 799, 782, 800, 799, 781, 802, 801, 800, 782, 801, 803, 798, 800, 805, 804, 803, 801, 806, 805, 801, 802, 803, 807, 797, 798, 807, 754, 716, 797, 808, 758, 754, 807, 804, 808, 807, 803, 810, 809, 808, 804, 809, 766, 758, 808, 811, 768, 766, 809, 812, 811, 809, 810, 814, 813, 805, 806, 813, 810, 804, 805, 815, 812, 810, 813, 816, 815, 813, 814, 818, 817, 787, 788, 817, 819, 784, 787, 821, 820, 819, 817, 822, 821, 817, 818, 819, 823, 783, 784, 823, 802, 782, 783, 824, 806, 802, 823, 820, 824, 823, 819, 826, 825, 824, 820, 825, 814, 806, 824, 827, 816, 814, 825, 828, 827, 825, 826, 830, 829, 821, 822, 829, 826, 820, 821, 831, 828, 826, 829, 832, 831, 829, 830, 834, 833, 201, 202, 833, 835, 197, 201, 837, 836, 835, 833, 838, 837, 833, 834, 835, 839, 196, 197, 839, 840, 184, 196, 842, 841, 840, 839, 836, 842, 839, 835, 844, 843, 842, 836, 843, 845, 841, 842, 847, 846, 845, 843, 848, 847, 843, 844, 850, 849, 837, 838, 849, 844, 836, 837, 851, 848, 844, 849, 852, 851, 849, 850, 840, 853, 183, 184, 853, 854, 179, 183, 856, 855, 854, 853, 841, 856, 853, 840, 854, 857, 178, 179, 857, 858, 134, 178, 860, 859, 858, 857, 855, 860, 857, 854, 862, 861, 860, 855, 861, 863, 859, 860, 865, 864, 863, 861, 866, 865, 861, 862, 845, 867, 856, 841, 867, 862, 855, 856, 868, 866, 862, 867, 846, 868, 867, 845, 870, 869, 868, 846, 869, 871, 866, 868, 873, 872, 871, 869, 874, 873, 869, 870, 871, 875, 865, 866, 875, 876, 864, 865, 878, 877, 876, 875, 872, 878, 875, 871, 880, 879, 878, 872, 879, 881, 877, 878, 883, 882, 881, 879, 884, 883, 879, 880, 886, 885, 873, 874, 885, 880, 872, 873, 887, 884, 880, 885, 888, 887, 885, 886, 890, 889, 851, 852, 889, 891, 848, 851, 893, 892, 891, 889, 894, 893, 889, 890, 891, 895, 847, 848, 895, 870, 846, 847, 896, 874, 870, 895, 892, 896, 895, 891, 898, 897, 896, 892, 897, 886, 874, 896, 899, 888, 886, 897, 900, 899, 897, 898, 902, 901, 893, 894, 901, 898, 892, 893, 903, 900, 898, 901, 904, 903, 901, 902, 858, 905, 133, 134, 905, 906, 129, 133, 908, 907, 906, 905, 859, 908, 905, 858, 906, 909, 128, 129, 909, 910, 116, 128, 912, 911, 910, 909, 907, 912, 909, 906, 914, 913, 912, 907, 913, 915, 911, 912, 917, 916, 915, 913, 918, 917, 913, 914, 863, 919, 908, 859, 919, 914, 907, 908, 920, 918, 914, 919, 864, 920, 919, 863, 910, 921, 115, 116, 921, 922, 111, 115, 924, 923, 922, 921, 911, 924, 921, 910, 922, 925, 110, 111, 925, 290, 109, 110, 926, 294, 290, 925, 923, 926, 925, 922, 928, 927, 926, 923, 927, 306, 294, 926, 929, 308, 306, 927, 930, 929, 927, 928, 915, 931, 924, 911, 931, 928, 923, 924, 932, 930, 928, 931, 916, 932, 931, 915, 934, 933, 932, 916, 933, 935, 930, 932, 937, 936, 935, 933, 938, 937, 933, 934, 935, 939, 929, 930, 939, 346, 308, 929, 940, 350, 346, 939, 936, 940, 939, 935, 942, 941, 940, 936, 941, 358, 350, 940, 943, 360, 358, 941, 944, 943, 941, 942, 946, 945, 937, 938, 945, 942, 936, 937, 947, 944, 942, 945, 948, 947, 945, 946, 876, 949, 920, 864, 949, 950, 918, 920, 952, 951, 950, 949, 877, 952, 949, 876, 950, 953, 917, 918, 953, 934, 916, 917, 954, 938, 934, 953, 951, 954, 953, 950, 956, 955, 954, 951, 955, 946, 938, 954, 957, 948, 946, 955, 958, 957, 955, 956, 881, 959, 952, 877, 959, 956, 951, 952, 960, 958, 956, 959, 882, 960, 959, 881, 962, 961, 960, 882, 961, 963, 958, 960, 965, 964, 963, 961, 966, 965, 961, 962, 963, 967, 957, 958, 967, 968, 948, 957, 970, 969, 968, 967, 964, 970, 967, 963, 972, 971, 970, 964, 971, 973, 969, 970, 975, 974, 973, 971, 976, 975, 971, 972, 978, 977, 965, 966, 977, 972, 964, 965, 979, 976, 972, 977, 980, 979, 977, 978, 968, 981, 947, 948, 981, 982, 944, 947, 984, 983, 982, 981, 969, 984, 981, 968, 982, 985, 943, 944, 985, 498, 360, 943, 986, 502, 498, 985, 983, 986, 985, 982, 988, 987, 986, 983, 987, 514, 502, 986, 989, 516, 514, 987, 990, 989, 987, 988, 973, 991, 984, 969, 991, 988, 983, 984, 992, 990, 988, 991, 974, 992, 991, 973, 994, 993, 992, 974, 993, 995, 990, 992, 997, 996, 995, 993, 998, 997, 993, 994, 995, 999, 989, 990, 999, 546, 516, 989, 1000, 550, 546, 999, 996, 1000, 999, 995, 1002, 1001, 1000, 996, 1001, 558, 550, 1000, 562, 560, 558, 1001, 566, 562, 1001, 1002, 1004, 1003, 997, 998, 1003, 1002, 996, 997, 578, 566, 1002, 1003, 580, 578, 1003, 1004, 1006, 1005, 979, 980, 1005, 1007, 976, 979, 1009, 1008, 1007, 1005, 1010, 1009, 1005, 1006, 1007, 1011, 975, 976, 1011, 994, 974, 975, 1012, 998, 994, 1011, 1008, 1012, 1011, 1007, 1014, 1013, 1012, 1008, 1013, 1004, 998, 1012, 618, 580, 1004, 1013, 622, 618, 1013, 1014, 1016, 1015, 1009, 1010, 1015, 1014, 1008, 1009, 630, 622, 1014, 1015, 632, 630, 1015, 1016, 1018, 1017, 903, 904, 1017, 1019, 900, 903, 1021, 1020, 1019, 1017, 1022, 1021, 1017, 1018, 1019, 1023, 899, 900, 1023, 1024, 888, 899, 1026, 1025, 1024, 1023, 1020, 1026, 1023, 1019, 1028, 1027, 1026, 1020, 1027, 1029, 1025, 1026, 1031, 1030, 1029, 1027, 1032, 1031, 1027, 1028, 1034, 1033, 1021, 1022, 1033, 1028, 1020, 1021, 1035, 1032, 1028, 1033, 1036, 1035, 1033, 1034, 1024, 1037, 887, 888, 1037, 1038, 884, 887, 1040, 1039, 1038, 1037, 1025, 1040, 1037, 1024, 1038, 1041, 883, 884, 1041, 962, 882, 883, 1042, 966, 962, 1041, 1039, 1042, 1041, 1038, 1044, 1043, 1042, 1039, 1043, 978, 966, 1042, 1045, 980, 978, 1043, 1046, 1045, 1043, 1044, 1029, 1047, 1040, 1025, 1047, 1044, 1039, 1040, 1048, 1046, 1044, 1047, 1030, 1048, 1047, 1029, 1050, 1049, 1048, 1030, 1049, 1051, 1046, 1048, 1053, 1052, 1051, 1049, 1054, 1053, 1049, 1050, 1051, 1055, 1045, 1046, 1055, 1006, 980, 1045, 1056, 1010, 1006, 1055, 1052, 1056, 1055, 1051, 1058, 1057, 1056, 1052, 1057, 1016, 1010, 1056, 770, 632, 1016, 1057, 774, 770, 1057, 1058, 1060, 1059, 1053, 1054, 1059, 1058, 1052, 1053, 786, 774, 1058, 1059, 788, 786, 1059, 1060, 1062, 1061, 1035, 1036, 1061, 1063, 1032, 1035, 1065, 1064, 1063, 1061, 1066, 1065, 1061, 1062, 1063, 1067, 1031, 1032, 1067, 1050, 1030, 1031, 1068, 1054, 1050, 1067, 1064, 1068, 1067, 1063, 1070, 1069, 1068, 1064, 1069, 1060, 1054, 1068, 818, 788, 1060, 1069, 822, 818, 1069, 1070, 1072, 1071, 1065, 1066, 1071, 1070, 1064, 1065, 830, 822, 1070, 1071, 832, 830, 1071, 1072, 1074, 1073, 287, 288, 1073, 1075, 284, 287, 1077, 1076, 1075, 1073, 1078, 1077, 1073, 1074, 1075, 1079, 283, 284, 1079, 1080, 272, 283, 1082, 1081, 1080, 1079, 1076, 1082, 1079, 1075, 1084, 1083, 1082, 1076, 1083, 1085, 1081, 1082, 1087, 1086, 1085, 1083, 1088, 1087, 1083, 1084, 1090, 1089, 1077, 1078, 1089, 1084, 1076, 1077, 1091, 1088, 1084, 1089, 1092, 1091, 1089, 1090, 1080, 1093, 271, 272, 1093, 1094, 268, 271, 1096, 1095, 1094, 1093, 1081, 1096, 1093, 1080, 1094, 1097, 267, 268, 1097, 1098, 224, 267, 1100, 1099, 1098, 1097, 1095, 1100, 1097, 1094, 1102, 1101, 1100, 1095, 1101, 1103, 1099, 1100, 1105, 1104, 1103, 1101, 1106, 1105, 1101, 1102, 1085, 1107, 1096, 1081, 1107, 1102, 1095, 1096, 1108, 1106, 1102, 1107, 1086, 1108, 1107, 1085, 1110, 1109, 1108, 1086, 1109, 1111, 1106, 1108, 1113, 1112, 1111, 1109, 1114, 1113, 1109, 1110, 1111, 1115, 1105, 1106, 1115, 1116, 1104, 1105, 1118, 1117, 1116, 1115, 1112, 1118, 1115, 1111, 1120, 1119, 1118, 1112, 1119, 1121, 1117, 1118, 1123, 1122, 1121, 1119, 1124, 1123, 1119, 1120, 1126, 1125, 1113, 1114, 1125, 1120, 1112, 1113, 1127, 1124, 1120, 1125, 1128, 1127, 1125, 1126, 1130, 1129, 1091, 1092, 1129, 1131, 1088, 1091, 1133, 1132, 1131, 1129, 1134, 1133, 1129, 1130, 1131, 1135, 1087, 1088, 1135, 1110, 1086, 1087, 1136, 1114, 1110, 1135, 1132, 1136, 1135, 1131, 1138, 1137, 1136, 1132, 1137, 1126, 1114, 1136, 1139, 1128, 1126, 1137, 1140, 1139, 1137, 1138, 1142, 1141, 1133, 1134, 1141, 1138, 1132, 1133, 1143, 1140, 1138, 1141, 1144, 1143, 1141, 1142, 1098, 1145, 223, 224, 1145, 1146, 220, 223, 1148, 1147, 1146, 1145, 1099, 1148, 1145, 1098, 1146, 1149, 219, 220, 1149, 1150, 208, 219, 1152, 1151, 1150, 1149, 1147, 1152, 1149, 1146, 1154, 1153, 1152, 1147, 1153, 1155, 1151, 1152, 1157, 1156, 1155, 1153, 1158, 1157, 1153, 1154, 1103, 1159, 1148, 1099, 1159, 1154, 1147, 1148, 1160, 1158, 1154, 1159, 1104, 1160, 1159, 1103, 1150, 1161, 207, 208, 1161, 1162, 204, 207, 1164, 1163, 1162, 1161, 1151, 1164, 1161, 1150, 1162, 1165, 203, 204, 1165, 834, 202, 203, 1166, 838, 834, 1165, 1163, 1166, 1165, 1162, 1168, 1167, 1166, 1163, 1167, 850, 838, 1166, 1169, 852, 850, 1167, 1170, 1169, 1167, 1168, 1155, 1171, 1164, 1151, 1171, 1168, 1163, 1164, 1172, 1170, 1168, 1171, 1156, 1172, 1171, 1155, 1174, 1173, 1172, 1156, 1173, 1175, 1170, 1172, 1177, 1176, 1175, 1173, 1178, 1177, 1173, 1174, 1175, 1179, 1169, 1170, 1179, 890, 852, 1169, 1180, 894, 890, 1179, 1176, 1180, 1179, 1175, 1182, 1181, 1180, 1176, 1181, 902, 894, 1180, 1183, 904, 902, 1181, 1184, 1183, 1181, 1182, 1186, 1185, 1177, 1178, 1185, 1182, 1176, 1177, 1187, 1184, 1182, 1185, 1188, 1187, 1185, 1186, 1116, 1189, 1160, 1104, 1189, 1190, 1158, 1160, 1192, 1191, 1190, 1189, 1117, 1192, 1189, 1116, 1190, 1193, 1157, 1158, 1193, 1174, 1156, 1157, 1194, 1178, 1174, 1193, 1191, 1194, 1193, 1190, 1196, 1195, 1194, 1191, 1195, 1186, 1178, 1194, 1197, 1188, 1186, 1195, 1198, 1197, 1195, 1196, 1121, 1199, 1192, 1117, 1199, 1196, 1191, 1192, 1200, 1198, 1196, 1199, 1122, 1200, 1199, 1121, 1202, 1201, 1200, 1122, 1201, 1203, 1198, 1200, 1205, 1204, 1203, 1201, 1206, 1205, 1201, 1202, 1203, 1207, 1197, 1198, 1207, 1208, 1188, 1197, 1210, 1209, 1208, 1207, 1204, 1210, 1207, 1203, 1212, 1211, 1210, 1204, 1211, 1213, 1209, 1210, 1215, 1214, 1213, 1211, 1216, 1215, 1211, 1212, 1218, 1217, 1205, 1206, 1217, 1212, 1204, 1205, 1219, 1216, 1212, 1217, 1220, 1219, 1217, 1218, 1208, 1221, 1187, 1188, 1221, 1222, 1184, 1187, 1224, 1223, 1222, 1221, 1209, 1224, 1221, 1208, 1222, 1225, 1183, 1184, 1225, 1018, 904, 1183, 1226, 1022, 1018, 1225, 1223, 1226, 1225, 1222, 1228, 1227, 1226, 1223, 1227, 1034, 1022, 1226, 1229, 1036, 1034, 1227, 1230, 1229, 1227, 1228, 1213, 1231, 1224, 1209, 1231, 1228, 1223, 1224, 1232, 1230, 1228, 1231, 1214, 1232, 1231, 1213, 1234, 1233, 1232, 1214, 1233, 1235, 1230, 1232, 1237, 1236, 1235, 1233, 1238, 1237, 1233, 1234, 1235, 1239, 1229, 1230, 1239, 1062, 1036, 1229, 1240, 1066, 1062, 1239, 1236, 1240, 1239, 1235, 1242, 1241, 1240, 1236, 1241, 1072, 1066, 1240, 831, 832, 1072, 1241, 828, 831, 1241, 1242, 1244, 1243, 1237, 1238, 1243, 1242, 1236, 1237, 827, 828, 1242, 1243, 816, 827, 1243, 1244, 1246, 1245, 1219, 1220, 1245, 1247, 1216, 1219, 1249, 1248, 1247, 1245, 1250, 1249, 1245, 1246, 1247, 1251, 1215, 1216, 1251, 1234, 1214, 1215, 1252, 1238, 1234, 1251, 1248, 1252, 1251, 1247, 1254, 1253, 1252, 1248, 1253, 1244, 1238, 1252, 815, 816, 1244, 1253, 812, 815, 1253, 1254, 1256, 1255, 1249, 1250, 1255, 1254, 1248, 1249, 811, 812, 1254, 1255, 768, 811, 1255, 1256, 1258, 1257, 1143, 1144, 1257, 1259, 1140, 1143, 1261, 1260, 1259, 1257, 1262, 1261, 1257, 1258, 1259, 1263, 1139, 1140, 1263, 1264, 1128, 1139, 1266, 1265, 1264, 1263, 1260, 1266, 1263, 1259, 1268, 1267, 1266, 1260, 1267, 1269, 1265, 1266, 1271, 1270, 1269, 1267, 1272, 1271, 1267, 1268, 1274, 1273, 1261, 1262, 1273, 1268, 1260, 1261, 1275, 1272, 1268, 1273, 1276, 1275, 1273, 1274, 1264, 1277, 1127, 1128, 1277, 1278, 1124, 1127, 1280, 1279, 1278, 1277, 1265, 1280, 1277, 1264, 1278, 1281, 1123, 1124, 1281, 1202, 1122, 1123, 1282, 1206, 1202, 1281, 1279, 1282, 1281, 1278, 1284, 1283, 1282, 1279, 1283, 1218, 1206, 1282, 1285, 1220, 1218, 1283, 1286, 1285, 1283, 1284, 1269, 1287, 1280, 1265, 1287, 1284, 1279, 1280, 1288, 1286, 1284, 1287, 1270, 1288, 1287, 1269, 1290, 1289, 1288, 1270, 1289, 1291, 1286, 1288, 1293, 1292, 1291, 1289, 1294, 1293, 1289, 1290, 1291, 1295, 1285, 1286, 1295, 1246, 1220, 1285, 1296, 1250, 1246, 1295, 1292, 1296, 1295, 1291, 1298, 1297, 1296, 1292, 1297, 1256, 1250, 1296, 767, 768, 1256, 1297, 764, 767, 1297, 1298, 1300, 1299, 1293, 1294, 1299, 1298, 1292, 1293, 763, 764, 1298, 1299, 752, 763, 1299, 1300, 1302, 1301, 1275, 1276, 1301, 1303, 1272, 1275, 1305, 1304, 1303, 1301, 1306, 1305, 1301, 1302, 1303, 1307, 1271, 1272, 1307, 1290, 1270, 1271, 1308, 1294, 1290, 1307, 1304, 1308, 1307, 1303, 1310, 1309, 1308, 1304, 1309, 1300, 1294, 1308, 751, 752, 1300, 1309, 748, 751, 1309, 1310, 1312, 1311, 1305, 1306, 1311, 1310, 1304, 1305, 747, 748, 1310, 1311, 746, 747, 1311, 1312, 286, 1313, 1074, 288, 1313, 1314, 1078, 1074, 1316, 1315, 1314, 1313, 278, 1316, 1313, 286, 1314, 1317, 1090, 1078, 1317, 1318, 1092, 1090, 1320, 1319, 1318, 1317, 1315, 1320, 1317, 1314, 1322, 1321, 1320, 1315, 1321, 1323, 1319, 1320, 1325, 1324, 1323, 1321, 1326, 1325, 1321, 1322, 274, 1327, 1316, 278, 1327, 1322, 1315, 1316, 1328, 1326, 1322, 1327, 244, 1328, 1327, 274, 1318, 1329, 1130, 1092, 1329, 1330, 1134, 1130, 1332, 1331, 1330, 1329, 1319, 1332, 1329, 1318, 1330, 1333, 1142, 1134, 1333, 1334, 1144, 1142, 1336, 1335, 1334, 1333, 1331, 1336, 1333, 1330, 1338, 1337, 1336, 1331, 1337, 1339, 1335, 1336, 1341, 1340, 1339, 1337, 1342, 1341, 1337, 1338, 1323, 1343, 1332, 1319, 1343, 1338, 1331, 1332, 1344, 1342, 1338, 1343, 1324, 1344, 1343, 1323, 1346, 1345, 1344, 1324, 1345, 1347, 1342, 1344, 1349, 1348, 1347, 1345, 1350, 1349, 1345, 1346, 1347, 1351, 1341, 1342, 1351, 1352, 1340, 1341, 1354, 1353, 1352, 1351, 1348, 1354, 1351, 1347, 1356, 1355, 1354, 1348, 1355, 1357, 1353, 1354, 1359, 1358, 1357, 1355, 1360, 1359, 1355, 1356, 1362, 1361, 1349, 1350, 1361, 1356, 1348, 1349, 1363, 1360, 1356, 1361, 1364, 1363, 1361, 1362, 242, 1365, 1328, 244, 1365, 1366, 1326, 1328, 1368, 1367, 1366, 1365, 230, 1368, 1365, 242, 1366, 1369, 1325, 1326, 1369, 1346, 1324, 1325, 1370, 1350, 1346, 1369, 1367, 1370, 1369, 1366, 1372, 1371, 1370, 1367, 1371, 1362, 1350, 1370, 1373, 1364, 1362, 1371, 1374, 1373, 1371, 1372, 226, 1375, 1368, 230, 1375, 1372, 1367, 1368, 1376, 1374, 1372, 1375, 80, 1376, 1375, 226, 1334, 1377, 1258, 1144, 1377, 1378, 1262, 1258, 1380, 1379, 1378, 1377, 1335, 1380, 1377, 1334, 1378, 1381, 1274, 1262, 1381, 1382, 1276, 1274, 1384, 1383, 1382, 1381, 1379, 1384, 1381, 1378, 1386, 1385, 1384, 1379, 1385, 1387, 1383, 1384, 1389, 1388, 1387, 1385, 1390, 1389, 1385, 1386, 1339, 1391, 1380, 1335, 1391, 1386, 1379, 1380, 1392, 1390, 1386, 1391, 1340, 1392, 1391, 1339, 1382, 1393, 1302, 1276, 1393, 1394, 1306, 1302, 1396, 1395, 1394, 1393, 1383, 1396, 1393, 1382, 1394, 1397, 1312, 1306, 1397, 745, 746, 1312, 1398, 741, 745, 1397, 1395, 1398, 1397, 1394, 1400, 1399, 1398, 1395, 1399, 740, 741, 1398, 1401, 728, 740, 1399, 1402, 1401, 1399, 1400, 1387, 1403, 1396, 1383, 1403, 1400, 1395, 1396, 1404, 1402, 1400, 1403, 1388, 1404, 1403, 1387, 1406, 1405, 1404, 1388, 1405, 1407, 1402, 1404, 1409, 1408, 1407, 1405, 1410, 1409, 1405, 1406, 1407, 1411, 1401, 1402, 1411, 727, 728, 1401, 1412, 723, 727, 1411, 1408, 1412, 1411, 1407, 1414, 1413, 1412, 1408, 1413, 722, 723, 1412, 1415, 678, 722, 1413, 1416, 1415, 1413, 1414, 1418, 1417, 1409, 1410, 1417, 1414, 1408, 1409, 1419, 1416, 1414, 1417, 1420, 1419, 1417, 1418, 1352, 1421, 1392, 1340, 1421, 1422, 1390, 1392, 1424, 1423, 1422, 1421, 1353, 1424, 1421, 1352, 1422, 1425, 1389, 1390, 1425, 1406, 1388, 1389, 1426, 1410, 1406, 1425, 1423, 1426, 1425, 1422, 1428, 1427, 1426, 1423, 1427, 1418, 1410, 1426, 1429, 1420, 1418, 1427, 1430, 1429, 1427, 1428, 1357, 1431, 1424, 1353, 1431, 1428, 1423, 1424, 1432, 1430, 1428, 1431, 1358, 1432, 1431, 1357, 1434, 1433, 1432, 1358, 1433, 1435, 1430, 1432, 1437, 1436, 1435, 1433, 1438, 1437, 1433, 1434, 1435, 1439, 1429, 1430, 1439, 1440, 1420, 1429, 1442, 1441, 1440, 1439, 1436, 1442, 1439, 1435, 1444, 1443, 1442, 1436, 1443, 1445, 1441, 1442, 1447, 1446, 1445, 1443, 1448, 1447, 1443, 1444, 1450, 1449, 1437, 1438, 1449, 1444, 1436, 1437, 1451, 1448, 1444, 1449, 1452, 1451, 1449, 1450, 1440, 1453, 1419, 1420, 1453, 1454, 1416, 1419, 1456, 1455, 1454, 1453, 1441, 1456, 1453, 1440, 1454, 1457, 1415, 1416, 1457, 677, 678, 1415, 1458, 673, 677, 1457, 1455, 1458, 1457, 1454, 1460, 1459, 1458, 1455, 1459, 672, 673, 1458, 1461, 660, 672, 1459, 1462, 1461, 1459, 1460, 1445, 1463, 1456, 1441, 1463, 1460, 1455, 1456, 1464, 1462, 1460, 1463, 1446, 1464, 1463, 1445, 1466, 1465, 1464, 1446, 1465, 1467, 1462, 1464, 1469, 1468, 1467, 1465, 1470, 1469, 1465, 1466, 1467, 1471, 1461, 1462, 1471, 659, 660, 1461, 1472, 655, 659, 1471, 1468, 1472, 1471, 1467, 1474, 1473, 1472, 1468, 1473, 654, 655, 1472, 473, 474, 654, 1473, 469, 473, 1473, 1474, 1476, 1475, 1469, 1470, 1475, 1474, 1468, 1469, 468, 469, 1474, 1475, 456, 468, 1475, 1476, 1478, 1477, 1451, 1452, 1477, 1479, 1448, 1451, 1481, 1480, 1479, 1477, 1482, 1481, 1477, 1478, 1479, 1483, 1447, 1448, 1483, 1466, 1446, 1447, 1484, 1470, 1466, 1483, 1480, 1484, 1483, 1479, 1486, 1485, 1484, 1480, 1485, 1476, 1470, 1484, 455, 456, 1476, 1485, 451, 455, 1485, 1486, 1488, 1487, 1481, 1482, 1487, 1486, 1480, 1481, 450, 451, 1486, 1487, 406, 450, 1487, 1488, 78, 1489, 1376, 80, 1489, 1490, 1374, 1376, 1492, 1491, 1490, 1489, 70, 1492, 1489, 78, 1490, 1493, 1373, 1374, 1493, 1494, 1364, 1373, 1496, 1495, 1494, 1493, 1491, 1496, 1493, 1490, 1498, 1497, 1496, 1491, 1497, 1499, 1495, 1496, 1501, 1500, 1499, 1497, 1502, 1501, 1497, 1498, 66, 1503, 1492, 70, 1503, 1498, 1491, 1492, 1504, 1502, 1498, 1503, 24, 1504, 1503, 66, 1494, 1505, 1363, 1364, 1505, 1506, 1360, 1363, 1508, 1507, 1506, 1505, 1495, 1508, 1505, 1494, 1506, 1509, 1359, 1360, 1509, 1434, 1358, 1359, 1510, 1438, 1434, 1509, 1507, 1510, 1509, 1506, 1512, 1511, 1510, 1507, 1511, 1450, 1438, 1510, 1513, 1452, 1450, 1511, 1514, 1513, 1511, 1512, 1499, 1515, 1508, 1495, 1515, 1512, 1507, 1508, 1516, 1514, 1512, 1515, 1500, 1516, 1515, 1499, 1518, 1517, 1516, 1500, 1517, 1519, 1514, 1516, 1521, 1520, 1519, 1517, 1522, 1521, 1517, 1518, 1519, 1523, 1513, 1514, 1523, 1478, 1452, 1513, 1524, 1482, 1478, 1523, 1520, 1524, 1523, 1519, 1526, 1525, 1524, 1520, 1525, 1488, 1482, 1524, 405, 406, 1488, 1525, 401, 405, 1525, 1526, 1528, 1527, 1521, 1522, 1527, 1526, 1520, 1521, 400, 401, 1526, 1527, 388, 400, 1527, 1528, 22, 1529, 1504, 24, 1529, 1530, 1502, 1504, 1532, 1531, 1530, 1529, 8, 1532, 1529, 22, 1530, 1533, 1501, 1502, 1533, 1518, 1500, 1501, 1534, 1522, 1518, 1533, 1531, 1534, 1533, 1530, 1536, 1535, 1534, 1531, 1535, 1528, 1522, 1534, 387, 388, 1528, 1535, 383, 387, 1535, 1536, 3, 1537, 1532, 8, 1537, 1536, 1531, 1532, 382, 383, 1536, 1537, 0, 382, 1537, 3}, + ["vertex_list_0"] = { Vec3(0.579348564, -0.579348981, -0.579348385), Vec3(0.596732914, -0.54291594, -0.596732557), Vec3(0.63434422, -0.549794436, -0.54979378), Vec3(0.596732855, -0.596733212, -0.542915344), Vec3(0.620292306, -0.487256616, -0.620291829), Vec3(0.667616367, -0.491493762, -0.565391183), Vec3(0.708671987, -0.502360821, -0.502360284), Vec3(0.667616248, -0.565391779, -0.491493225), Vec3(0.620292008, -0.620292485, -0.48725608), Vec3(0.644162357, -0.420784384, -0.644161999), Vec3(0.697528541, -0.423737824, -0.58382374), Vec3(0.666017115, -0.346116602, -0.666016579), Vec3(0.723508716, -0.348251581, -0.601838231), Vec3(0.774297893, -0.354056209, -0.531092048), Vec3(0.744235635, -0.431635082, -0.516483486), Vec3(0.784516275, -0.442427874, -0.442427486), Vec3(0.744235456, -0.516483963, -0.431634724), Vec3(0.818292201, -0.362190068, -0.454053998), Vec3(0.855216682, -0.371180326, -0.371180207), Vec3(0.81829226, -0.454054296, -0.362189889), Vec3(0.774297655, -0.531092465, -0.35405609), Vec3(0.697528243, -0.583824277, -0.423737466), Vec3(0.644162059, -0.644162595, -0.420783937), Vec3(0.723508298, -0.601838648, -0.348251283), Vec3(0.666016638, -0.666017175, -0.346116245), Vec3(0.684359193, -0.265069962, -0.684358478), Vec3(0.744725943, -0.266581923, -0.617472708), Vec3(0.698144972, -0.179295748, -0.698144138), Vec3(0.760417521, -0.180270016, -0.62946409), Vec3(0.816099763, -0.182947308, -0.554494321), Vec3(0.798436761, -0.270720929, -0.544206679), Vec3(0.706678092, -0.090409331, -0.706677675), Vec3(0.770023227, -0.0908876285, -0.636995018), Vec3(0.709564328, -3.10169987e-08, -0.709563732), Vec3(0.773250937, -1.55084994e-08, -0.639564753), Vec3(0.830428481, 0, -0.563331544), Vec3(0.826835215, -0.0922052264, -0.561065972), Vec3(0.87669909, -0.0940981954, -0.479050994), Vec3(0.864822745, -0.186774924, -0.47343722), Vec3(0.880668521, 0, -0.481007814), Vec3(0.923328996, 1.55084994e-08, -0.392938048), Vec3(0.918992639, -0.0962664708, -0.391308814), Vec3(0.9060269, -0.191126719, -0.38668409), Vec3(0.845220864, -0.276593149, -0.464806527), Vec3(0.884631991, -0.283191711, -0.379697651), Vec3(0.916101098, -0.289564282, -0.289564282), Vec3(0.884631872, -0.379697829, -0.283191681), Vec3(0.939039052, -0.195391074, -0.294890076), Vec3(0.963182211, -0.199005798, -0.199005842), Vec3(0.939038992, -0.294890106, -0.195391178), Vec3(0.90602684, -0.386684269, -0.191126764), Vec3(0.952974856, -0.0984107032, -0.298469096), Vec3(0.95764482, 4.65254999e-08, -0.299741089), Vec3(0.982842922, 6.20339975e-08, -0.202340767), Vec3(0.977899373, -0.100244105, -0.201462179), Vec3(0.993134081, -0.101498291, -0.101498388), Vec3(0.977899373, -0.201462135, -0.100244232), Vec3(0.998260677, 7.75425022e-08, -0.101948649), Vec3(1.00345218, 9.30509998e-08, -3.10169987e-08), Vec3(0.998260677, -0.101948552, -4.65254999e-08), Vec3(0.982842922, -0.202340722, -6.20339975e-08), Vec3(0.952974737, -0.298469186, -0.0984108299), Vec3(0.918992519, -0.391309083, -0.0962665975), Vec3(0.95764482, -0.299741149, -7.75425022e-08), Vec3(0.923328876, -0.392938346, -9.30509998e-08), Vec3(0.744725466, -0.617473304, -0.266581744), Vec3(0.684358537, -0.684359193, -0.265069693), Vec3(0.798436582, -0.544207096, -0.270720869), Vec3(0.816099346, -0.554494798, -0.182947293), Vec3(0.760417104, -0.629464567, -0.180269986), Vec3(0.698144317, -0.698144794, -0.179295674), Vec3(0.845220745, -0.464806795, -0.276593119), Vec3(0.864822567, -0.473437458, -0.186775029), Vec3(0.876698971, -0.479051292, -0.0940983072), Vec3(0.826835096, -0.56106621, -0.0922053233), Vec3(0.880668283, -0.481008321, -1.08559497e-07), Vec3(0.830428183, -0.563331902, -1.08559497e-07), Vec3(0.77002275, -0.636995494, -0.0908876732), Vec3(0.706677675, -0.706678212, -0.0904093757), Vec3(0.77325052, -0.639565229, -1.24067995e-07), Vec3(0.709563851, -0.709564269, -1.395765e-07), Vec3(0.706678212, 0.0904092491, -0.706677675), Vec3(0.770023227, 0.0908875614, -0.636995018), Vec3(0.698144853, 0.179295629, -0.698144376), Vec3(0.760417461, 0.180269867, -0.629464149), Vec3(0.816099703, 0.182947189, -0.554494262), Vec3(0.826835275, 0.0922051966, -0.561065912), Vec3(0.684359193, 0.265069664, -0.684358478), Vec3(0.744726002, 0.266581744, -0.617472708), Vec3(0.666017234, 0.346116304, -0.666016579), Vec3(0.723508894, 0.348251313, -0.601838171), Vec3(0.774298072, 0.35405606, -0.531091988), Vec3(0.79843694, 0.27072072, -0.54420656), Vec3(0.845221043, 0.27659297, -0.464806318), Vec3(0.864822805, 0.186774924, -0.473437071), Vec3(0.818292499, 0.362189829, -0.454053849), Vec3(0.85521692, 0.371180117, -0.371180028), Vec3(0.884632111, 0.283191532, -0.379697472), Vec3(0.906026959, 0.191126704, -0.386683911), Vec3(0.87669915, 0.0940981954, -0.479050905), Vec3(0.918992639, 0.0962665007, -0.391308814), Vec3(0.644162476, 0.420784116, -0.644162059), Vec3(0.69752878, 0.423737556, -0.58382374), Vec3(0.620292306, 0.487256318, -0.620291948), Vec3(0.667616606, 0.491493464, -0.565391123), Vec3(0.708672285, 0.502360404, -0.502360225), Vec3(0.744235814, 0.431634784, -0.516483486), Vec3(0.596733153, 0.542915642, -0.596732676), Vec3(0.634344518, 0.549794078, -0.54979378), Vec3(0.579348922, 0.579348564, -0.579348505), Vec3(0.596733212, 0.596732795, -0.542915463), Vec3(0.620292366, 0.620292008, -0.487256199), Vec3(0.667616546, 0.565391302, -0.491493255), Vec3(0.69752866, 0.583823919, -0.423737407), Vec3(0.744235814, 0.516483605, -0.431634665), Vec3(0.644162476, 0.644162178, -0.420784026), Vec3(0.666017234, 0.666016638, -0.346116155), Vec3(0.723508894, 0.601838231, -0.348251313), Vec3(0.774298131, 0.531091928, -0.354055911), Vec3(0.784516573, 0.442427397, -0.442427337), Vec3(0.818292499, 0.454053938, -0.36218968), Vec3(0.845220983, 0.464806467, -0.27659291), Vec3(0.884632111, 0.379697502, -0.283191442), Vec3(0.79843688, 0.544206679, -0.270720661), Vec3(0.816099823, 0.554494321, -0.182947174), Vec3(0.864822805, 0.47343722, -0.186774805), Vec3(0.9060269, 0.38668409, -0.191126645), Vec3(0.744726002, 0.617472827, -0.266581625), Vec3(0.684359252, 0.684358597, -0.265069604), Vec3(0.698144913, 0.698144376, -0.17929554), Vec3(0.76041764, 0.62946409, -0.180269808), Vec3(0.770023167, 0.636995077, -0.090887472), Vec3(0.826835215, 0.561066031, -0.092205137), Vec3(0.706678152, 0.706677735, -0.0904091597), Vec3(0.709564328, 0.709563732, 9.30509998e-08), Vec3(0.773250818, 0.639564812, 7.75425022e-08), Vec3(0.830428481, 0.563331664, 6.20339975e-08), Vec3(0.87669909, 0.479051024, -0.0940981209), Vec3(0.918992579, 0.391308874, -0.0962664261), Vec3(0.880668461, 0.481007993, 6.20339975e-08), Vec3(0.923328936, 0.392938137, 3.10169987e-08), Vec3(0.952974796, 0.0984107703, -0.298469096), Vec3(0.939038992, 0.195391163, -0.294890046), Vec3(0.963182271, 0.199005887, -0.199005768), Vec3(0.977899373, 0.100244246, -0.20146215), Vec3(0.916101277, 0.289564252, -0.289564043), Vec3(0.939038992, 0.294890076, -0.195391029), Vec3(0.952974796, 0.298469156, -0.0984106883), Vec3(0.977899373, 0.201462224, -0.10024415), Vec3(0.95764488, 0.299741209, 1.55084994e-08), Vec3(0.982842922, 0.202340826, 0), Vec3(0.993134201, 0.101498418, -0.101498358), Vec3(0.998260498, 0.101948723, 0), Vec3(0.993134201, 0.101498447, 0.101498343), Vec3(0.998260677, 1.24067995e-07, 0.101948597), Vec3(0.977899432, 0.201462209, 0.100244217), Vec3(0.963182211, 0.199005961, 0.199005842), Vec3(0.977899373, 0.100244306, 0.201462224), Vec3(0.982842922, 1.395765e-07, 0.202340767), Vec3(0.952974737, 0.298469216, 0.0984107703), Vec3(0.918992519, 0.391309023, 0.0962665603), Vec3(0.90602684, 0.386684179, 0.191126823), Vec3(0.939038992, 0.294890195, 0.195391178), Vec3(0.916101158, 0.289564312, 0.289564312), Vec3(0.939038932, 0.195391253, 0.294890136), Vec3(0.884631932, 0.37969774, 0.28319177), Vec3(0.855216682, 0.371180236, 0.371180445), Vec3(0.884631872, 0.28319177, 0.379697889), Vec3(0.906026781, 0.191126883, 0.386684299), Vec3(0.952974737, 0.0984109119, 0.298469216), Vec3(0.95764488, 1.55085004e-07, 0.299741209), Vec3(0.91899246, 0.0962666869, 0.391309142), Vec3(0.923328817, 1.86102e-07, 0.392938405), Vec3(0.87669909, 0.479050994, 0.094098255), Vec3(0.826835155, 0.561066031, 0.0922053084), Vec3(0.816099524, 0.5544945, 0.182947323), Vec3(0.864822686, 0.47343725, 0.186775029), Vec3(0.770023227, 0.636995018, 0.0908876732), Vec3(0.706678152, 0.706677675, 0.0904093906), Vec3(0.698144794, 0.698144317, 0.179295778), Vec3(0.760417521, 0.62946403, 0.180270046), Vec3(0.744725883, 0.617472887, 0.266581893), Vec3(0.798436761, 0.544206738, 0.270721018), Vec3(0.684359014, 0.684358597, 0.265069932), Vec3(0.666016936, 0.666016638, 0.346116632), Vec3(0.723508656, 0.601838291, 0.348251611), Vec3(0.774297833, 0.531092048, 0.354056329), Vec3(0.845220745, 0.464806527, 0.276593179), Vec3(0.81829232, 0.454054058, 0.362190098), Vec3(0.784516215, 0.442427576, 0.442427844), Vec3(0.818292141, 0.362189919, 0.454054356), Vec3(0.744235575, 0.516483605, 0.431635141), Vec3(0.708671927, 0.502360463, 0.502360821), Vec3(0.744235456, 0.431634873, 0.516483963), Vec3(0.774297595, 0.35405615, 0.531092525), Vec3(0.697528481, 0.58382386, 0.423737824), Vec3(0.644162297, 0.64416194, 0.420784533), Vec3(0.620292127, 0.620291829, 0.487256825), Vec3(0.667616308, 0.565391183, 0.491493762), Vec3(0.634344161, 0.54979378, 0.549794495), Vec3(0.667616129, 0.491493285, 0.565391779), Vec3(0.596732855, 0.596732616, 0.542916059), Vec3(0.579348505, 0.579348266, 0.579349041), Vec3(0.596732736, 0.542915344, 0.596733212), Vec3(0.620291948, 0.487256169, 0.620292425), Vec3(0.697528243, 0.423737615, 0.583824277), Vec3(0.723508358, 0.348251373, 0.601838708), Vec3(0.64416194, 0.420784086, 0.644162595), Vec3(0.666016579, 0.346116334, 0.666017175), Vec3(0.876698911, 0.0940983966, 0.479051352), Vec3(0.880668283, 2.01610504e-07, 0.481008321), Vec3(0.864822447, 0.186775044, 0.473437607), Vec3(0.816099405, 0.182947397, 0.554494858), Vec3(0.826835036, 0.0922053978, 0.561066329), Vec3(0.830428123, 2.17118995e-07, 0.563332021), Vec3(0.845220685, 0.276593149, 0.464806825), Vec3(0.798436522, 0.270720899, 0.544207156), Vec3(0.744725406, 0.266581863, 0.617473364), Vec3(0.760417044, 0.180270046, 0.629464626), Vec3(0.684358537, 0.265069813, 0.684359193), Vec3(0.698144197, 0.179295748, 0.698144913), Vec3(0.77002275, 0.090887785, 0.636995614), Vec3(0.773250341, 2.32627499e-07, 0.639565289), Vec3(0.706677675, 0.0904094651, 0.706678212), Vec3(0.709563732, 2.32627499e-07, 0.709564328), Vec3(0.77002275, -0.636995554, 0.0908874422), Vec3(0.706677675, -0.706678152, 0.0904090926), Vec3(0.826835036, -0.56106627, 0.0922050923), Vec3(0.816099524, -0.554494739, 0.182947144), Vec3(0.760417283, -0.629464507, 0.180269778), Vec3(0.698144376, -0.698144794, 0.179295495), Vec3(0.876698971, -0.479051322, 0.094098106), Vec3(0.918992519, -0.391309053, 0.0962664261), Vec3(0.90602684, -0.386684179, 0.191126645), Vec3(0.864822686, -0.473437369, 0.186774835), Vec3(0.845220804, -0.464806676, 0.276593059), Vec3(0.798436701, -0.544206917, 0.27072075), Vec3(0.884632051, -0.37969774, 0.283191621), Vec3(0.855216682, -0.371180236, 0.371180266), Vec3(0.81829232, -0.454054147, 0.362189889), Vec3(0.774297774, -0.531092227, 0.35405609), Vec3(0.744725645, -0.617473245, 0.266581625), Vec3(0.684358776, -0.684359133, 0.265069574), Vec3(0.723508537, -0.601838589, 0.348251343), Vec3(0.666016698, -0.666017115, 0.346116245), Vec3(0.952974796, -0.298469186, 0.0984106734), Vec3(0.977899373, -0.201462135, 0.10024412), Vec3(0.963182271, -0.199005723, 0.199005798), Vec3(0.939038992, -0.294890076, 0.195391148), Vec3(0.993134201, -0.101498231, 0.101498291), Vec3(0.977899432, -0.100244045, 0.201462165), Vec3(0.952974796, -0.098410584, 0.298469245), Vec3(0.939038932, -0.195390999, 0.294890106), Vec3(0.918992579, -0.0962663144, 0.391309053), Vec3(0.90602684, -0.1911266, 0.386684209), Vec3(0.916101098, -0.289564282, 0.289564312), Vec3(0.884632051, -0.283191562, 0.379697859), Vec3(0.845220804, -0.27659294, 0.464806736), Vec3(0.81829232, -0.362189829, 0.454054207), Vec3(0.864822745, -0.186774746, 0.473437518), Vec3(0.816099584, -0.182947055, 0.554494739), Vec3(0.798436642, -0.270720631, 0.544207036), Vec3(0.774297833, -0.354055971, 0.531092286), Vec3(0.876698971, -0.0940979943, 0.479051322), Vec3(0.826835036, -0.0922049806, 0.561066329), Vec3(0.77002275, -0.0908873305, 0.636995554), Vec3(0.760417163, -0.180269673, 0.629464626), Vec3(0.706677675, -0.0904090181, 0.706678152), Vec3(0.698144436, -0.179295361, 0.698144853), Vec3(0.744725585, -0.266581506, 0.617473304), Vec3(0.723508537, -0.348251224, 0.601838589), Vec3(0.684358776, -0.265069485, 0.684359193), Vec3(0.666016757, -0.346116185, 0.666017175), Vec3(0.697528303, -0.583824158, 0.423737615), Vec3(0.644162178, -0.644162416, 0.420784056), Vec3(0.744235575, -0.516483724, 0.431634963), Vec3(0.708671868, -0.502360582, 0.502360702), Vec3(0.667616189, -0.5653916, 0.491493523), Vec3(0.620292068, -0.620292246, 0.487256259), Vec3(0.784516335, -0.442427546, 0.442427576), Vec3(0.744235456, -0.431634814, 0.516483903), Vec3(0.697528243, -0.423737556, 0.583824217), Vec3(0.667616189, -0.491493493, 0.56539166), Vec3(0.644162118, -0.420784056, 0.644162476), Vec3(0.620292068, -0.487256318, 0.620292127), Vec3(0.634344041, -0.549794137, 0.549794197), Vec3(0.596732795, -0.596733034, 0.542915702), Vec3(0.596732736, -0.542915702, 0.596732974), Vec3(0.579348505, -0.579348624, 0.579348683), Vec3(0.549794436, 0.549794137, -0.634343982), Vec3(0.542915821, 0.596732914, -0.596732795), Vec3(0.56539166, 0.491493493, -0.667616129), Vec3(0.502360761, 0.502360582, -0.708671808), Vec3(0.491493732, 0.565391541, -0.667616129), Vec3(0.487256616, 0.620292008, -0.620292008), Vec3(0.583824337, 0.423737645, -0.697528183), Vec3(0.601838708, 0.348251402, -0.723508358), Vec3(0.531092465, 0.35405612, -0.774297595), Vec3(0.516483963, 0.431634963, -0.744235337), Vec3(0.442427844, 0.442427635, -0.784516156), Vec3(0.431635082, 0.516483843, -0.744235337), Vec3(0.454054385, 0.362190008, -0.818292022), Vec3(0.371180505, 0.371180475, -0.855216503), Vec3(0.362190098, 0.454054266, -0.818292081), Vec3(0.354056299, 0.531092405, -0.774297655), Vec3(0.423737854, 0.583824039, -0.697528243), Vec3(0.420784324, 0.644162238, -0.644162118), Vec3(0.348251522, 0.60183847, -0.723508477), Vec3(0.346116513, 0.666016817, -0.666016817), Vec3(0.617473364, 0.266581744, -0.744725406), Vec3(0.629464746, 0.180269927, -0.760416985), Vec3(0.554494917, 0.182947248, -0.816099286), Vec3(0.544207156, 0.270720869, -0.798436522), Vec3(0.636995614, 0.0908875614, -0.77002269), Vec3(0.639565349, -3.10169987e-08, -0.773250401), Vec3(0.56333214, -4.65254999e-08, -0.830428064), Vec3(0.561066508, 0.0922052115, -0.826834917), Vec3(0.47905162, 0.0940982103, -0.876698732), Vec3(0.473437697, 0.186774954, -0.864822447), Vec3(0.481008559, -6.20339975e-08, -0.880668163), Vec3(0.392938614, -6.20339975e-08, -0.923328698), Vec3(0.391309351, 0.0962665007, -0.9189924), Vec3(0.386684537, 0.191126794, -0.906026721), Vec3(0.464806944, 0.276593119, -0.845220566), Vec3(0.379697978, 0.28319177, -0.884631813), Vec3(0.28956458, 0.28956449, -0.916101038), Vec3(0.28319186, 0.379697889, -0.884631813), Vec3(0.294890344, 0.195391238, -0.939038873), Vec3(0.199006036, 0.199005991, -0.963182211), Vec3(0.195391312, 0.294890344, -0.939038932), Vec3(0.191126883, 0.386684388, -0.906026781), Vec3(0.298469514, 0.0984107703, -0.952974677), Vec3(0.299741477, -6.20339975e-08, -0.957644701), Vec3(0.202340946, -7.75425022e-08, -0.982842922), Vec3(0.201462418, 0.100244217, -0.977899313), Vec3(0.101498447, 0.101498388, -0.993134081), Vec3(0.100244276, 0.201462284, -0.977899373), Vec3(0.101948723, -7.75425022e-08, -0.998260498), Vec3(-3.10169987e-08, -7.75425022e-08, -1.00345218), Vec3(-1.55084994e-08, 0.101948664, -0.998260677), Vec3(-3.10169987e-08, 0.202340871, -0.982842922), Vec3(0.098410815, 0.298469394, -0.952974677), Vec3(0.0962665826, 0.391309261, -0.91899246), Vec3(-3.10169987e-08, 0.299741328, -0.957644761), Vec3(-3.10169987e-08, 0.392938465, -0.923328817), Vec3(0.266581893, 0.617473125, -0.744725645), Vec3(0.265069902, 0.684358835, -0.684358835), Vec3(0.270721018, 0.544206977, -0.798436582), Vec3(0.182947323, 0.554494739, -0.816099405), Vec3(0.180270001, 0.629464447, -0.760417283), Vec3(0.179295719, 0.698144615, -0.698144555), Vec3(0.276593238, 0.464806765, -0.845220625), Vec3(0.186775088, 0.473437577, -0.864822447), Vec3(0.094098255, 0.479051411, -0.876698852), Vec3(0.0922052413, 0.56106627, -0.826835096), Vec3(-3.10169987e-08, 0.481008351, -0.880668223), Vec3(-3.10169987e-08, 0.563331902, -0.830428243), Vec3(0.0908876136, 0.636995435, -0.770022869), Vec3(0.0904092789, 0.706677914, -0.706677914), Vec3(-3.10169987e-08, 0.639565229, -0.77325052), Vec3(-3.10169987e-08, 0.70956403, -0.709563971), Vec3(0.636995673, -0.0908876732, -0.77002269), Vec3(0.629464746, -0.180270061, -0.760416925), Vec3(0.554494917, -0.182947397, -0.816099226), Vec3(0.561066508, -0.0922053531, -0.826834917), Vec3(0.617473304, -0.266581982, -0.744725406), Vec3(0.601838648, -0.3482517, -0.723508239), Vec3(0.531092405, -0.354056418, -0.774297535), Vec3(0.544207156, -0.270721078, -0.798436463), Vec3(0.464806944, -0.276593328, -0.845220566), Vec3(0.473437726, -0.186775163, -0.864822447), Vec3(0.454054385, -0.362190276, -0.818291903), Vec3(0.371180475, -0.371180713, -0.855216384), Vec3(0.379697978, -0.283192009, -0.884631813), Vec3(0.386684448, -0.191126972, -0.906026661), Vec3(0.47905159, -0.0940983519, -0.876698792), Vec3(0.391309321, -0.096266672, -0.9189924), Vec3(0.583824158, -0.423737973, -0.697528124), Vec3(0.5653916, -0.491493762, -0.66761601), Vec3(0.502360642, -0.502361, -0.708671629), Vec3(0.516483903, -0.431635261, -0.744235277), Vec3(0.549794137, -0.549794555, -0.634343863), Vec3(0.542915463, -0.596733272, -0.596732557), Vec3(0.487256259, -0.620292604, -0.62029165), Vec3(0.491493523, -0.565391958, -0.667615891), Vec3(0.423737615, -0.583824337, -0.697528124), Vec3(0.431634963, -0.516484201, -0.744235277), Vec3(0.420784116, -0.644162714, -0.64416182), Vec3(0.346116334, -0.666017413, -0.6660164), Vec3(0.348251402, -0.601839006, -0.72350812), Vec3(0.35405618, -0.531092763, -0.774297416), Vec3(0.442427784, -0.442428052, -0.784516096), Vec3(0.362190068, -0.454054564, -0.818291903), Vec3(0.276593208, -0.464807153, -0.845220447), Vec3(0.28319183, -0.379698128, -0.884631693), Vec3(0.270720869, -0.544207335, -0.798436344), Vec3(0.182947293, -0.554495156, -0.816099226), Vec3(0.186775029, -0.473438025, -0.864822268), Vec3(0.191126853, -0.386684716, -0.906026602), Vec3(0.266581804, -0.617473602, -0.744725287), Vec3(0.265069693, -0.684359431, -0.684358358), Vec3(0.179295585, -0.698145151, -0.698144019), Vec3(0.180269927, -0.629464924, -0.760416925), Vec3(0.0908875465, -0.636995971, -0.770022452), Vec3(0.0922052115, -0.561066806, -0.826834679), Vec3(0.0904092044, -0.706678569, -0.706677377), Vec3(-3.10169987e-08, -0.709564626, -0.709563434), Vec3(-1.55084994e-08, -0.639565766, -0.773250043), Vec3(-3.10169987e-08, -0.563332438, -0.830427825), Vec3(0.0940982252, -0.479051828, -0.876698613), Vec3(0.0962665305, -0.39130953, -0.918992281), Vec3(-3.10169987e-08, -0.481008708, -0.880668044), Vec3(-3.10169987e-08, -0.392938763, -0.923328638), Vec3(0.298469454, -0.0984109119, -0.952974677), Vec3(0.294890344, -0.195391402, -0.939038813), Vec3(0.199006081, -0.19900623, -0.963182092), Vec3(0.201462343, -0.100244373, -0.977899373), Vec3(0.28956458, -0.289564699, -0.916100979), Vec3(0.195391282, -0.294890523, -0.939038813), Vec3(0.0984108299, -0.298469603, -0.952974617), Vec3(0.100244276, -0.201462492, -0.977899313), Vec3(-3.10169987e-08, -0.299741685, -0.957644761), Vec3(-3.10169987e-08, -0.202341124, -0.982842863), Vec3(0.101498432, -0.101498574, -0.993134081), Vec3(-3.10169987e-08, -0.10194885, -0.998260498), Vec3(-0.101498529, -0.101498559, -0.993134081), Vec3(-0.101948768, -6.20339975e-08, -0.998260677), Vec3(-0.100244336, -0.201462507, -0.977899373), Vec3(-0.19900614, -0.1990062, -0.963182092), Vec3(-0.201462492, -0.100244388, -0.977899313), Vec3(-0.202340975, -7.75425022e-08, -0.982842922), Vec3(-0.0984109119, -0.298469603, -0.952974617), Vec3(-0.0962666422, -0.3913095, -0.918992281), Vec3(-0.191126928, -0.386684775, -0.906026602), Vec3(-0.195391387, -0.294890523, -0.939038694), Vec3(-0.289564669, -0.289564699, -0.916100979), Vec3(-0.294890493, -0.195391446, -0.939038813), Vec3(-0.283191919, -0.379698187, -0.884631693), Vec3(-0.371180534, -0.371180683, -0.855216444), Vec3(-0.379697978, -0.283192009, -0.884631693), Vec3(-0.386684537, -0.191127017, -0.906026661), Vec3(-0.298469603, -0.0984109566, -0.952974617), Vec3(-0.299741566, -7.75425022e-08, -0.957644761), Vec3(-0.39130941, -0.0962666571, -0.9189924), Vec3(-0.392938703, -6.20339975e-08, -0.923328638), Vec3(-0.0940983221, -0.479051888, -0.876698673), Vec3(-0.0922052786, -0.561066806, -0.826834679), Vec3(-0.182947397, -0.554495275, -0.816099167), Vec3(-0.186775118, -0.473437995, -0.864822268), Vec3(-0.0908876136, -0.636995971, -0.770022452), Vec3(-0.0904092789, -0.706678569, -0.706677318), Vec3(-0.179295659, -0.698145211, -0.698143959), Vec3(-0.180270001, -0.629465044, -0.760416746), Vec3(-0.266581804, -0.617473602, -0.744725227), Vec3(-0.270721018, -0.544207394, -0.798436284), Vec3(-0.265069783, -0.684359431, -0.684358299), Vec3(-0.346116394, -0.666017354, -0.6660164), Vec3(-0.348251522, -0.601838827, -0.723508179), Vec3(-0.354056299, -0.531092763, -0.774297357), Vec3(-0.276593298, -0.464807212, -0.845220387), Vec3(-0.362190187, -0.454054564, -0.818291903), Vec3(-0.442427903, -0.442428023, -0.784515977), Vec3(-0.454054445, -0.362190276, -0.818291903), Vec3(-0.431635112, -0.516484201, -0.744235218), Vec3(-0.502360761, -0.502361, -0.708671629), Vec3(-0.516484022, -0.431635231, -0.744235218), Vec3(-0.531092465, -0.354056418, -0.774297476), Vec3(-0.423737764, -0.583824396, -0.697528005), Vec3(-0.420784116, -0.644162714, -0.64416182), Vec3(-0.487256378, -0.620292604, -0.62029165), Vec3(-0.491493583, -0.565391958, -0.667615831), Vec3(-0.549794257, -0.549794495, -0.634343743), Vec3(-0.56539166, -0.491493821, -0.667615891), Vec3(-0.542915702, -0.596733212, -0.596732557), Vec3(-0.579348683, -0.579348862, -0.579348266), Vec3(-0.596732974, -0.542915821, -0.596732616), Vec3(-0.620292246, -0.487256676, -0.62029171), Vec3(-0.583824277, -0.423737943, -0.697528064), Vec3(-0.601838648, -0.348251611, -0.723508179), Vec3(-0.644162416, -0.420784414, -0.64416182), Vec3(-0.666017115, -0.346116543, -0.666016519), Vec3(-0.47905165, -0.094098337, -0.876698732), Vec3(-0.481008559, -6.20339975e-08, -0.880668104), Vec3(-0.473437756, -0.186775133, -0.864822447), Vec3(-0.554495096, -0.182947442, -0.816099226), Vec3(-0.561066449, -0.0922053382, -0.826834917), Vec3(-0.5633322, -4.65254999e-08, -0.830428064), Vec3(-0.464807004, -0.276593328, -0.845220566), Vec3(-0.544207156, -0.270721048, -0.798436403), Vec3(-0.617473423, -0.266581982, -0.744725347), Vec3(-0.629464746, -0.180270046, -0.760416925), Vec3(-0.684359193, -0.265069902, -0.684358537), Vec3(-0.698144972, -0.179295719, -0.698144197), Vec3(-0.636995614, -0.0908876583, -0.77002269), Vec3(-0.639565408, -3.10169987e-08, -0.773250341), Vec3(-0.706678212, -0.0904093161, -0.706677616), Vec3(-0.709564388, -1.55084994e-08, -0.709563732), Vec3(-0.0908876732, 0.636995435, -0.770022869), Vec3(-0.0904093459, 0.706677854, -0.706677854), Vec3(-0.0922053233, 0.56106621, -0.826835096), Vec3(-0.182947382, 0.554494679, -0.816099405), Vec3(-0.180270046, 0.629464447, -0.760417283), Vec3(-0.179295778, 0.698144555, -0.698144495), Vec3(-0.0940982923, 0.479051322, -0.876698971), Vec3(-0.0962666422, 0.391309172, -0.91899246), Vec3(-0.191126928, 0.386684328, -0.906026781), Vec3(-0.186775103, 0.473437399, -0.864822626), Vec3(-0.276593268, 0.464806646, -0.845220685), Vec3(-0.270721018, 0.544206858, -0.798436642), Vec3(-0.283191949, 0.37969777, -0.884631813), Vec3(-0.371180594, 0.371180356, -0.855216563), Vec3(-0.362190217, 0.454054058, -0.818292081), Vec3(-0.354056448, 0.531092167, -0.774297774), Vec3(-0.266581893, 0.617473006, -0.744725645), Vec3(-0.265069932, 0.684358895, -0.684358776), Vec3(-0.348251551, 0.60183847, -0.723508418), Vec3(-0.346116602, 0.666016877, -0.666016817), Vec3(-0.0984108895, 0.298469335, -0.952974677), Vec3(-0.100244321, 0.201462284, -0.977899313), Vec3(-0.199006096, 0.199005947, -0.963182151), Vec3(-0.195391372, 0.294890255, -0.939038932), Vec3(-0.101498514, 0.101498373, -0.993134201), Vec3(-0.201462463, 0.100244202, -0.977899373), Vec3(-0.298469573, 0.0984107703, -0.952974677), Vec3(-0.294890434, 0.195391223, -0.939038873), Vec3(-0.391309351, 0.0962665156, -0.9189924), Vec3(-0.386684537, 0.191126794, -0.906026661), Vec3(-0.28956458, 0.289564401, -0.916101038), Vec3(-0.379697978, 0.283191681, -0.884631813), Vec3(-0.464807004, 0.276593089, -0.845220506), Vec3(-0.454054534, 0.362190008, -0.818292081), Vec3(-0.473437726, 0.186774924, -0.864822447), Vec3(-0.554495096, 0.182947278, -0.816099226), Vec3(-0.544207275, 0.270720869, -0.798436463), Vec3(-0.531092584, 0.35405609, -0.774297595), Vec3(-0.47905165, 0.0940981954, -0.876698792), Vec3(-0.561066628, 0.0922052413, -0.826834857), Vec3(-0.636995673, 0.0908875614, -0.77002269), Vec3(-0.629464805, 0.180269927, -0.760416925), Vec3(-0.706678271, 0.090409264, -0.706677675), Vec3(-0.698144972, 0.179295644, -0.698144197), Vec3(-0.617473483, 0.266581804, -0.744725406), Vec3(-0.601838708, 0.348251373, -0.723508358), Vec3(-0.684359252, 0.265069723, -0.684358478), Vec3(-0.666017234, 0.346116334, -0.666016579), Vec3(-0.423737913, 0.583824039, -0.697528243), Vec3(-0.420784324, 0.644162238, -0.644162118), Vec3(-0.431635171, 0.516483724, -0.744235456), Vec3(-0.50236088, 0.502360582, -0.708671808), Vec3(-0.491493732, 0.565391421, -0.667616129), Vec3(-0.487256646, 0.620292068, -0.620292068), Vec3(-0.442427963, 0.442427576, -0.784516156), Vec3(-0.516484082, 0.431634843, -0.744235337), Vec3(-0.583824277, 0.423737675, -0.697528183), Vec3(-0.565391839, 0.491493493, -0.667616069), Vec3(-0.644162655, 0.420784116, -0.64416188), Vec3(-0.620292485, 0.487256318, -0.62029171), Vec3(-0.549794495, 0.549794137, -0.634344041), Vec3(-0.542915881, 0.596732795, -0.596732676), Vec3(-0.596733212, 0.542915463, -0.596732676), Vec3(-0.579348862, 0.579348385, -0.579348564), Vec3(-0.634344459, 0.549794078, -0.549793839), Vec3(-0.596733212, 0.596732736, -0.542915404), Vec3(-0.667616665, 0.491493344, -0.565391123), Vec3(-0.708672285, 0.502360404, -0.502360225), Vec3(-0.667616606, 0.565391362, -0.491493195), Vec3(-0.620292485, 0.620291948, -0.48725614), Vec3(-0.69752878, 0.423737556, -0.58382374), Vec3(-0.723509014, 0.348251373, -0.601838052), Vec3(-0.774298131, 0.35405609, -0.531091869), Vec3(-0.744235814, 0.431634814, -0.516483426), Vec3(-0.784516573, 0.442427456, -0.442427337), Vec3(-0.744235754, 0.516483605, -0.431634635), Vec3(-0.818292379, 0.362189829, -0.454053849), Vec3(-0.855216861, 0.371180147, -0.371180087), Vec3(-0.818292439, 0.454053879, -0.362189651), Vec3(-0.774298072, 0.531092048, -0.354055911), Vec3(-0.69752866, 0.58382386, -0.423737377), Vec3(-0.644162655, 0.644161999, -0.420783937), Vec3(-0.723508894, 0.601838171, -0.348251253), Vec3(-0.666017234, 0.666016579, -0.346116126), Vec3(-0.744726062, 0.266581774, -0.617472589), Vec3(-0.7604177, 0.180269912, -0.629463971), Vec3(-0.816099882, 0.182947204, -0.554494262), Vec3(-0.79843694, 0.27072078, -0.54420656), Vec3(-0.770023227, 0.0908875465, -0.636994958), Vec3(-0.773250937, -1.55084994e-08, -0.639564574), Vec3(-0.830428481, 0, -0.563331485), Vec3(-0.826835394, 0.0922051966, -0.561065733), Vec3(-0.876699209, 0.0940982103, -0.479050845), Vec3(-0.864822805, 0.186774939, -0.473437041), Vec3(-0.880668521, 0, -0.481007785), Vec3(-0.923328996, 1.55084994e-08, -0.392938018), Vec3(-0.918992698, 0.0962664858, -0.391308725), Vec3(-0.906027019, 0.191126734, -0.386683911), Vec3(-0.845220983, 0.27659297, -0.464806288), Vec3(-0.884632111, 0.283191562, -0.379697442), Vec3(-0.916101277, 0.289564282, -0.289564103), Vec3(-0.884632111, 0.379697502, -0.283191383), Vec3(-0.939039111, 0.195391104, -0.294889927), Vec3(-0.963182271, 0.199005827, -0.199005693), Vec3(-0.939039111, 0.294890046, -0.195390984), Vec3(-0.906026959, 0.38668406, -0.191126585), Vec3(-0.952974856, 0.0984107554, -0.298468947), Vec3(-0.95764488, 3.10169987e-08, -0.299741), Vec3(-0.982842922, 4.65254999e-08, -0.202340692), Vec3(-0.977899432, 0.100244232, -0.201462075), Vec3(-0.993134081, 0.101498403, -0.101498291), Vec3(-0.977899373, 0.201462194, -0.10024409), Vec3(-0.998260677, 6.20339975e-08, -0.101948567), Vec3(-1.00345218, 7.75425022e-08, 4.65254999e-08), Vec3(-0.998260498, 0.101948693, 4.65254999e-08), Vec3(-0.982842922, 0.202340797, 7.75425022e-08), Vec3(-0.952974796, 0.298469156, -0.0984106287), Vec3(-0.918992639, 0.391308784, -0.096266374), Vec3(-0.95764482, 0.299741119, 9.30509998e-08), Vec3(-0.923328936, 0.392938137, 1.08559497e-07), Vec3(-0.744726002, 0.617472827, -0.266581535), Vec3(-0.684359193, 0.684358537, -0.265069604), Vec3(-0.798436999, 0.54420656, -0.270720631), Vec3(-0.816099763, 0.554494262, -0.182947025), Vec3(-0.760417759, 0.629463911, -0.180269718), Vec3(-0.698144853, 0.698144317, -0.17929551), Vec3(-0.845220923, 0.464806408, -0.276592791), Vec3(-0.864822865, 0.47343725, -0.18677476), Vec3(-0.87669915, 0.479050964, -0.0940980539), Vec3(-0.826835334, 0.561065912, -0.0922050551), Vec3(-0.880668461, 0.481007904, 1.24067995e-07), Vec3(-0.830428481, 0.563331664, 1.24067995e-07), Vec3(-0.770023286, 0.636995018, -0.0908874273), Vec3(-0.706678212, 0.706677675, -0.090409115), Vec3(-0.773250878, 0.639564753, 1.395765e-07), Vec3(-0.709564328, 0.709563732, 1.395765e-07), Vec3(-0.770023227, -0.0908876136, -0.636995018), Vec3(-0.76041764, -0.180269986, -0.62946403), Vec3(-0.816099763, -0.182947308, -0.554494321), Vec3(-0.826835334, -0.0922052264, -0.561065853), Vec3(-0.744726002, -0.266581833, -0.617472649), Vec3(-0.723508775, -0.348251522, -0.601838171), Vec3(-0.774298012, -0.35405612, -0.531091928), Vec3(-0.79843688, -0.270720929, -0.544206619), Vec3(-0.845220923, -0.276593119, -0.464806437), Vec3(-0.864822805, -0.186774969, -0.47343713), Vec3(-0.818292439, -0.362190008, -0.454053849), Vec3(-0.855216742, -0.371180296, -0.371180087), Vec3(-0.884632051, -0.283191621, -0.379697472), Vec3(-0.906026959, -0.191126734, -0.386683941), Vec3(-0.87669915, -0.0940981954, -0.479050905), Vec3(-0.918992639, -0.0962664708, -0.391308814), Vec3(-0.697528601, -0.423737824, -0.58382374), Vec3(-0.667616427, -0.491493702, -0.565391183), Vec3(-0.708672106, -0.502360761, -0.502360225), Vec3(-0.744235694, -0.431634992, -0.516483426), Vec3(-0.63434422, -0.549794436, -0.549793839), Vec3(-0.596732795, -0.596733212, -0.542915344), Vec3(-0.620292068, -0.620292425, -0.48725605), Vec3(-0.667616308, -0.565391719, -0.491493255), Vec3(-0.697528422, -0.583824277, -0.423737407), Vec3(-0.744235635, -0.516483903, -0.431634635), Vec3(-0.644162118, -0.644162536, -0.420783907), Vec3(-0.666016698, -0.666017175, -0.346116185), Vec3(-0.723508477, -0.601838589, -0.348251313), Vec3(-0.774297833, -0.531092405, -0.354055941), Vec3(-0.784516335, -0.442427784, -0.442427397), Vec3(-0.81829232, -0.454054266, -0.36218977), Vec3(-0.845220804, -0.464806765, -0.27659297), Vec3(-0.884631991, -0.37969777, -0.283191562), Vec3(-0.798436642, -0.544206977, -0.27072072), Vec3(-0.816099405, -0.554494679, -0.182947218), Vec3(-0.864822626, -0.473437458, -0.18677488), Vec3(-0.90602684, -0.386684269, -0.191126719), Vec3(-0.744725585, -0.617473245, -0.266581684), Vec3(-0.684358597, -0.684359193, -0.265069634), Vec3(-0.698144317, -0.698145032, -0.179295644), Vec3(-0.760417163, -0.629464567, -0.180269927), Vec3(-0.77002275, -0.636995494, -0.0908876285), Vec3(-0.826835036, -0.561066329, -0.0922052413), Vec3(-0.706677675, -0.706678212, -0.090409331), Vec3(-0.709563851, -0.709564209, -1.08559497e-07), Vec3(-0.773250461, -0.639565289, -7.75425022e-08), Vec3(-0.830428123, -0.563331962, -6.20339975e-08), Vec3(-0.876698911, -0.479051381, -0.0940982252), Vec3(-0.918992519, -0.391309053, -0.0962665007), Vec3(-0.880668283, -0.481008321, -3.10169987e-08), Vec3(-0.923328876, -0.392938346, -1.55084994e-08), Vec3(-0.952974796, -0.0984107032, -0.298469037), Vec3(-0.939038932, -0.195391148, -0.294890046), Vec3(-0.963182271, -0.199005872, -0.199005798), Vec3(-0.977899373, -0.100244164, -0.20146212), Vec3(-0.916101158, -0.289564282, -0.289564222), Vec3(-0.939038992, -0.294890165, -0.195391074), Vec3(-0.952974796, -0.298469216, -0.0984107256), Vec3(-0.977899373, -0.201462135, -0.10024415), Vec3(-0.95764488, -0.299741179, 0), Vec3(-0.982842922, -0.202340752, 0), Vec3(-0.993134081, -0.101498291, -0.101498306), Vec3(-0.998260677, -0.101948567, 1.55084994e-08), Vec3(-0.993134201, -0.101498291, 0.101498403), Vec3(-0.998260677, 9.30509998e-08, 0.101948664), Vec3(-0.977899373, -0.201462135, 0.100244217), Vec3(-0.963182211, -0.199005783, 0.199005857), Vec3(-0.977899373, -0.10024409, 0.201462224), Vec3(-0.982842982, 1.08559497e-07, 0.202340797), Vec3(-0.952974737, -0.298469186, 0.0984107554), Vec3(-0.918992519, -0.391309083, 0.0962664858), Vec3(-0.906026781, -0.386684299, 0.191126749), Vec3(-0.939038992, -0.294890136, 0.195391178), Vec3(-0.916101158, -0.289564282, 0.289564312), Vec3(-0.939038932, -0.195391044, 0.294890165), Vec3(-0.884631872, -0.37969777, 0.283191711), Vec3(-0.855216682, -0.371180236, 0.371180415), Vec3(-0.884631872, -0.283191592, 0.379697859), Vec3(-0.906026781, -0.19112666, 0.386684328), Vec3(-0.952974737, -0.0984106287, 0.298469216), Vec3(-0.95764488, 1.24067995e-07, 0.299741238), Vec3(-0.918992519, -0.0962663591, 0.391309083), Vec3(-0.923328817, 1.395765e-07, 0.392938435), Vec3(-0.876698971, -0.479051322, 0.0940981656), Vec3(-0.826835036, -0.56106627, 0.0922051519), Vec3(-0.816099524, -0.554494739, 0.182947204), Vec3(-0.864822686, -0.473437428, 0.186774909), Vec3(-0.77002281, -0.636995494, 0.090887472), Vec3(-0.706677675, -0.706678212, 0.0904091299), Vec3(-0.698144436, -0.698144853, 0.179295495), Vec3(-0.760417283, -0.629464507, 0.180269793), Vec3(-0.744725645, -0.617473185, 0.266581744), Vec3(-0.798436642, -0.544206977, 0.27072078), Vec3(-0.684358776, -0.684359133, 0.265069634), Vec3(-0.666016638, -0.666017115, 0.346116304), Vec3(-0.723508418, -0.601838589, 0.348251373), Vec3(-0.774297714, -0.531092346, 0.35405609), Vec3(-0.845220685, -0.464806706, 0.276593029), Vec3(-0.81829226, -0.454054207, 0.362190008), Vec3(-0.784516215, -0.442427605, 0.442427725), Vec3(-0.81829226, -0.362189889, 0.454054296), Vec3(-0.744235575, -0.516483724, 0.431634963), Vec3(-0.708671808, -0.502360642, 0.502360761), Vec3(-0.744235456, -0.431634873, 0.516483903), Vec3(-0.774297774, -0.35405606, 0.531092405), Vec3(-0.697528303, -0.583824098, 0.423737675), Vec3(-0.644162118, -0.644162416, 0.420784175), Vec3(-0.620291948, -0.620292127, 0.487256467), Vec3(-0.667616189, -0.5653916, 0.491493553), Vec3(-0.634344101, -0.549794197, 0.549794137), Vec3(-0.667616189, -0.491493493, 0.5653916), Vec3(-0.596732616, -0.596733034, 0.542915761), Vec3(-0.579348385, -0.579348624, 0.579348624), Vec3(-0.596732676, -0.542915702, 0.596733093), Vec3(-0.620292008, -0.487256348, 0.620292306), Vec3(-0.697528243, -0.423737615, 0.583824217), Vec3(-0.723508418, -0.348251343, 0.601838648), Vec3(-0.644162118, -0.420784056, 0.644162476), Vec3(-0.666016698, -0.346116155, 0.666017175), Vec3(-0.876698911, -0.094098039, 0.479051352), Vec3(-0.880668223, 1.55085004e-07, 0.481008351), Vec3(-0.864822567, -0.186774775, 0.473437607), Vec3(-0.816099465, -0.182947099, 0.554494858), Vec3(-0.826835036, -0.0922050402, 0.561066389), Vec3(-0.830428123, 1.70593495e-07, 0.563332021), Vec3(-0.845220745, -0.276593029, 0.464806795), Vec3(-0.798436642, -0.27072069, 0.544207036), Vec3(-0.744725585, -0.266581565, 0.617473304), Vec3(-0.760417163, -0.180269718, 0.629464626), Vec3(-0.684358597, -0.265069515, 0.684359133), Vec3(-0.698144376, -0.179295376, 0.698144853), Vec3(-0.77002275, -0.0908873752, 0.636995614), Vec3(-0.773250341, 1.70593495e-07, 0.639565289), Vec3(-0.706677675, -0.0904090479, 0.706678271), Vec3(-0.709563732, 1.86102e-07, 0.709564328), Vec3(-0.770023167, 0.636995077, 0.0908877328), Vec3(-0.706678092, 0.706677675, 0.0904094502), Vec3(-0.826835155, 0.561066031, 0.0922053382), Vec3(-0.816099644, 0.5544945, 0.182947397), Vec3(-0.760417402, 0.629464149, 0.180270121), Vec3(-0.698144794, 0.698144376, 0.179295853), Vec3(-0.87669909, 0.479050964, 0.0940983221), Vec3(-0.918992579, 0.391308874, 0.0962665975), Vec3(-0.90602684, 0.38668409, 0.191126853), Vec3(-0.864822686, 0.47343722, 0.186775044), Vec3(-0.845220864, 0.464806467, 0.276593238), Vec3(-0.798436761, 0.544206679, 0.270721018), Vec3(-0.884631932, 0.379697651, 0.283191741), Vec3(-0.855216682, 0.371180207, 0.371180356), Vec3(-0.818292379, 0.454053909, 0.362190098), Vec3(-0.774297893, 0.531091988, 0.354056239), Vec3(-0.744725823, 0.617472827, 0.266581953), Vec3(-0.684359014, 0.684358597, 0.265069991), Vec3(-0.723508656, 0.601838231, 0.3482517), Vec3(-0.666017056, 0.666016579, 0.346116662), Vec3(-0.952974737, 0.298469186, 0.0984108299), Vec3(-0.977899432, 0.201462224, 0.100244276), Vec3(-0.963182211, 0.199005857, 0.199005917), Vec3(-0.939038932, 0.294890046, 0.195391238), Vec3(-0.993134081, 0.101498418, 0.101498403), Vec3(-0.977899313, 0.100244276, 0.201462194), Vec3(-0.952974737, 0.0984108597, 0.298469245), Vec3(-0.939038992, 0.195391223, 0.294890195), Vec3(-0.918992519, 0.0962666422, 0.391309142), Vec3(-0.906026781, 0.191126853, 0.386684299), Vec3(-0.916101098, 0.289564282, 0.289564341), Vec3(-0.884631872, 0.283191651, 0.379697859), Vec3(-0.845220685, 0.276593149, 0.464806825), Vec3(-0.81829226, 0.362189859, 0.454054326), Vec3(-0.864822567, 0.186775029, 0.473437518), Vec3(-0.816099346, 0.182947308, 0.554494739), Vec3(-0.798436522, 0.27072084, 0.544207096), Vec3(-0.774297714, 0.354056001, 0.531092465), Vec3(-0.876698911, 0.094098337, 0.479051322), Vec3(-0.826834977, 0.0922053531, 0.561066389), Vec3(-0.77002275, 0.090887703, 0.636995554), Vec3(-0.760417104, 0.180270001, 0.629464626), Vec3(-0.706677675, 0.0904094055, 0.706678152), Vec3(-0.698144257, 0.179295689, 0.698144853), Vec3(-0.744725525, 0.266581714, 0.617473304), Vec3(-0.723508358, 0.348251343, 0.601838708), Vec3(-0.684358597, 0.265069634, 0.684359252), Vec3(-0.666016579, 0.346116185, 0.666017234), Vec3(-0.697528541, 0.58382374, 0.423737973), Vec3(-0.644162297, 0.64416188, 0.420784503), Vec3(-0.744235635, 0.516483545, 0.431635082), Vec3(-0.708672047, 0.502360344, 0.50236088), Vec3(-0.667616308, 0.565391183, 0.491493851), Vec3(-0.620292127, 0.62029165, 0.487256825), Vec3(-0.784516335, 0.442427427, 0.442427814), Vec3(-0.744235456, 0.431634724, 0.516484022), Vec3(-0.697528243, 0.423737466, 0.583824277), Vec3(-0.667616189, 0.491493165, 0.565391958), Vec3(-0.644161999, 0.420783937, 0.644162595), Vec3(-0.620291948, 0.48725608, 0.620292485), Vec3(-0.63434422, 0.54979372, 0.549794555), Vec3(-0.596732914, 0.596732557, 0.542916119), Vec3(-0.596732914, 0.542915344, 0.596733272), Vec3(-0.579348564, 0.579348207, 0.579348922), Vec3(0.549794137, 0.634343863, 0.549794555), Vec3(0.542915463, 0.596732557, 0.596733272), Vec3(0.565391481, 0.667615891, 0.49149394), Vec3(0.502360642, 0.708671629, 0.502361059), Vec3(0.491493434, 0.667615891, 0.565392017), Vec3(0.487256318, 0.62029165, 0.620292604), Vec3(0.583824158, 0.697528124, 0.423738003), Vec3(0.601838648, 0.723508239, 0.34825179), Vec3(0.531092405, 0.774297535, 0.354056418), Vec3(0.516483903, 0.744235277, 0.43163532), Vec3(0.442427725, 0.784516096, 0.442428052), Vec3(0.431634933, 0.744235218, 0.516484261), Vec3(0.454054356, 0.818291903, 0.362190306), Vec3(0.371180445, 0.855216384, 0.371180713), Vec3(0.362190068, 0.818291903, 0.454054624), Vec3(0.35405609, 0.774297416, 0.531092823), Vec3(0.423737526, 0.697528064, 0.583824575), Vec3(0.420784086, 0.644161761, 0.644162774), Vec3(0.348251373, 0.72350812, 0.601839006), Vec3(0.346116155, 0.6660164, 0.666017413), Vec3(0.617473304, 0.744725406, 0.266582012), Vec3(0.629464626, 0.760416985, 0.180270106), Vec3(0.554494798, 0.816099405, 0.182947487), Vec3(0.544207156, 0.798436463, 0.270721167), Vec3(0.636995614, 0.77002275, 0.0908877179), Vec3(0.639565349, 0.773250401, 1.08559497e-07), Vec3(0.56333214, 0.830428064, 1.24067995e-07), Vec3(0.561066329, 0.826834917, 0.0922053978), Vec3(0.47905159, 0.876698792, 0.0940984264), Vec3(0.473437756, 0.864822447, 0.186775222), Vec3(0.4810085, 0.880668163, 1.395765e-07), Vec3(0.392938614, 0.923328698, 1.55085004e-07), Vec3(0.391309291, 0.9189924, 0.0962667614), Vec3(0.386684448, 0.906026721, 0.191127092), Vec3(0.464806885, 0.845220506, 0.276593387), Vec3(0.379697919, 0.884631693, 0.283192039), Vec3(0.28956452, 0.916100979, 0.289564759), Vec3(0.2831918, 0.884631693, 0.379698217), Vec3(0.294890314, 0.939038873, 0.195391491), Vec3(0.199006006, 0.963182092, 0.199006304), Vec3(0.195391282, 0.939038813, 0.294890642), Vec3(0.191126853, 0.906026602, 0.386684746), Vec3(0.298469424, 0.952974677, 0.0984110162), Vec3(0.299741387, 0.957644761, 1.55085004e-07), Vec3(0.202340886, 0.982842922, 1.70593495e-07), Vec3(0.201462358, 0.977899313, 0.100244492), Vec3(0.101498447, 0.993134081, 0.101498663), Vec3(0.100244276, 0.977899313, 0.201462612), Vec3(0.101948708, 0.998260498, 1.70593495e-07), Vec3(-1.55084994e-08, 1.00345218, 1.70593495e-07), Vec3(-3.10169987e-08, 0.998260677, 0.101948909), Vec3(-3.10169987e-08, 0.982842863, 0.202341184), Vec3(0.0984108001, 0.952974617, 0.298469812), Vec3(0.0962665305, 0.918992221, 0.391309649), Vec3(-3.10169987e-08, 0.957644641, 0.299741715), Vec3(-3.10169987e-08, 0.923328578, 0.392938942), Vec3(0.266581774, 0.744725287, 0.617473543), Vec3(0.265069634, 0.684358358, 0.684359431), Vec3(0.270720899, 0.798436344, 0.544207394), Vec3(0.182947263, 0.816099226, 0.554495215), Vec3(0.180269867, 0.760416925, 0.629464984), Vec3(0.17929554, 0.698143959, 0.698145211), Vec3(0.276593149, 0.845220387, 0.464807242), Vec3(0.186774969, 0.864822328, 0.473437965), Vec3(0.0940982103, 0.876698673, 0.479051888), Vec3(0.0922052264, 0.826834679, 0.561066866), Vec3(-3.10169987e-08, 0.880667984, 0.481008857), Vec3(-3.10169987e-08, 0.830427825, 0.563332498), Vec3(0.0908875465, 0.770022511, 0.636996031), Vec3(0.0904091895, 0.706677258, 0.706678569), Vec3(-3.10169987e-08, 0.773250103, 0.639565706), Vec3(-3.10169987e-08, 0.709563375, 0.709564686), Vec3(0.636995554, 0.77002275, -0.0908874869), Vec3(0.629464626, 0.760417104, -0.180269793), Vec3(0.554494917, 0.816099405, -0.182947189), Vec3(0.561066508, 0.826834917, -0.0922051072), Vec3(0.617473304, 0.744725525, -0.266581684), Vec3(0.601838648, 0.723508298, -0.348251283), Vec3(0.531092405, 0.774297714, -0.354056001), Vec3(0.544207156, 0.798436522, -0.27072072), Vec3(0.464806885, 0.845220685, -0.276593029), Vec3(0.473437697, 0.864822447, -0.18677485), Vec3(0.454054385, 0.818292201, -0.362189859), Vec3(0.371180534, 0.855216563, -0.371180326), Vec3(0.379697949, 0.884631813, -0.283191651), Vec3(0.386684448, 0.906026721, -0.191126689), Vec3(0.47905153, 0.876698792, -0.094098106), Vec3(0.391309321, 0.9189924, -0.0962664261), Vec3(0.583824277, 0.697528243, -0.423737496), Vec3(0.565391719, 0.667616129, -0.491493344), Vec3(0.502360821, 0.708671987, -0.502360463), Vec3(0.516484022, 0.744235456, -0.431634754), Vec3(0.549794316, 0.634344161, -0.549793899), Vec3(0.491493672, 0.667616248, -0.565391362), Vec3(0.423737824, 0.697528303, -0.583823979), Vec3(0.431635112, 0.744235456, -0.516483665), Vec3(0.348251551, 0.723508537, -0.60183847), Vec3(0.354056329, 0.774297655, -0.531092227), Vec3(0.442427874, 0.784516156, -0.442427576), Vec3(0.362190068, 0.818292201, -0.454054058), Vec3(0.276593238, 0.845220685, -0.464806616), Vec3(0.28319186, 0.884631872, -0.37969774), Vec3(0.270720959, 0.798436642, -0.544206917), Vec3(0.182947278, 0.816099524, -0.55449456), Vec3(0.186775029, 0.864822745, -0.473437399), Vec3(0.191126883, 0.906026781, -0.386684269), Vec3(0.266581893, 0.744725704, -0.617473006), Vec3(0.180269986, 0.760417342, -0.629464388), Vec3(0.0908876136, 0.770022929, -0.636995375), Vec3(0.0922052562, 0.826835155, -0.56106621), Vec3(-3.10169987e-08, 0.77325058, -0.639565051), Vec3(-3.10169987e-08, 0.830428302, -0.563331723), Vec3(0.094098255, 0.876698971, -0.479051292), Vec3(0.0962665454, 0.918992519, -0.391309053), Vec3(-3.10169987e-08, 0.880668342, -0.481008142), Vec3(-3.10169987e-08, 0.923328876, -0.392938346), Vec3(0.298469454, 0.952974737, -0.0984106734), Vec3(0.294890255, 0.939038873, -0.195391074), Vec3(0.199006021, 0.963182211, -0.199005842), Vec3(0.201462358, 0.977899373, -0.100244105), Vec3(0.28956458, 0.916101098, -0.289564341), Vec3(0.195391282, 0.939038992, -0.294890165), Vec3(0.0984108299, 0.952974737, -0.298469216), Vec3(0.100244246, 0.977899373, -0.201462194), Vec3(-3.10169987e-08, 0.95764488, -0.299741209), Vec3(-3.10169987e-08, 0.982842863, -0.202340782), Vec3(0.101498432, 0.993134201, -0.101498276), Vec3(-3.10169987e-08, 0.998260677, -0.101948552), Vec3(-0.101498492, 0.993134201, -0.101498291), Vec3(-0.101948783, 0.998260498, 1.70593495e-07), Vec3(-0.100244336, 0.977899373, -0.201462209), Vec3(-0.199006096, 0.963182151, -0.199005842), Vec3(-0.201462403, 0.977899373, -0.10024409), Vec3(-0.202340961, 0.982842922, 1.70593495e-07), Vec3(-0.0984108895, 0.952974737, -0.298469216), Vec3(-0.0962666273, 0.918992519, -0.391309053), Vec3(-0.191126958, 0.906026781, -0.386684239), Vec3(-0.195391357, 0.939038873, -0.294890136), Vec3(-0.28956461, 0.916101098, -0.289564341), Vec3(-0.294890463, 0.939038873, -0.195391133), Vec3(-0.283191919, 0.884631872, -0.37969777), Vec3(-0.371180505, 0.855216622, -0.371180207), Vec3(-0.379698038, 0.884631813, -0.283191681), Vec3(-0.386684537, 0.906026721, -0.191126704), Vec3(-0.298469603, 0.952974677, -0.0984106734), Vec3(-0.299741536, 0.957644761, 1.70593495e-07), Vec3(-0.39130941, 0.918992341, -0.0962664112), Vec3(-0.392938703, 0.923328698, 1.70593495e-07), Vec3(-0.0940983221, 0.876698971, -0.479051322), Vec3(-0.0922053382, 0.826835155, -0.561066091), Vec3(-0.182947397, 0.816099524, -0.554494679), Vec3(-0.186775133, 0.864822626, -0.473437369), Vec3(-0.0908876732, 0.770022929, -0.636995375), Vec3(-0.180270076, 0.760417342, -0.629464328), Vec3(-0.266581953, 0.744725764, -0.617472947), Vec3(-0.270721048, 0.798436582, -0.544206858), Vec3(-0.348251611, 0.723508596, -0.601838291), Vec3(-0.354056358, 0.774297714, -0.531092167), Vec3(-0.276593298, 0.845220685, -0.464806646), Vec3(-0.362190217, 0.818292081, -0.454054058), Vec3(-0.442427903, 0.784516156, -0.442427546), Vec3(-0.454054505, 0.818292141, -0.362189889), Vec3(-0.431635141, 0.744235456, -0.516483724), Vec3(-0.50236088, 0.708671808, -0.502360463), Vec3(-0.516484141, 0.744235337, -0.431634814), Vec3(-0.531092525, 0.774297595, -0.35405609), Vec3(-0.423737943, 0.697528303, -0.58382386), Vec3(-0.491493732, 0.667616189, -0.565391302), Vec3(-0.549794495, 0.634344101, -0.549793899), Vec3(-0.565391839, 0.667616189, -0.491493315), Vec3(-0.583824337, 0.697528243, -0.423737556), Vec3(-0.601838708, 0.723508358, -0.348251373), Vec3(-0.47905159, 0.876698792, -0.094098106), Vec3(-0.481008559, 0.880668104, 1.70593495e-07), Vec3(-0.473437697, 0.864822447, -0.186774865), Vec3(-0.554494977, 0.816099286, -0.182947159), Vec3(-0.561066449, 0.826834917, -0.09220507), Vec3(-0.5633322, 0.830428064, 1.55085004e-07), Vec3(-0.464806914, 0.845220625, -0.276593029), Vec3(-0.544207156, 0.798436522, -0.27072078), Vec3(-0.617473423, 0.744725466, -0.266581714), Vec3(-0.629464805, 0.760416925, -0.180269793), Vec3(-0.636995614, 0.77002275, -0.0908874571), Vec3(-0.639565408, 0.773250341, 1.55085004e-07), Vec3(-0.0908876136, 0.770022452, 0.636996031), Vec3(-0.090409264, 0.706677258, 0.706678569), Vec3(-0.0922052562, 0.826834619, 0.561066926), Vec3(-0.182947308, 0.816099048, 0.554495335), Vec3(-0.180269942, 0.760416746, 0.629465044), Vec3(-0.179295629, 0.698143959, 0.698145151), Vec3(-0.0940982699, 0.876698613, 0.479051888), Vec3(-0.0962666124, 0.918992281, 0.391309649), Vec3(-0.191126883, 0.906026542, 0.386684775), Vec3(-0.186775059, 0.864822268, 0.473438054), Vec3(-0.276593179, 0.845220327, 0.464807272), Vec3(-0.270720959, 0.798436284, 0.544207513), Vec3(-0.28319186, 0.884631753, 0.379698277), Vec3(-0.371180475, 0.855216384, 0.371180713), Vec3(-0.362190008, 0.818291903, 0.454054713), Vec3(-0.35405615, 0.774297357, 0.531092942), Vec3(-0.266581804, 0.744725168, 0.617473722), Vec3(-0.265069723, 0.684358299, 0.684359431), Vec3(-0.348251402, 0.72350812, 0.601839006), Vec3(-0.346116304, 0.666016281, 0.666017473), Vec3(-0.0984108895, 0.952974558, 0.298469722), Vec3(-0.100244306, 0.977899313, 0.201462612), Vec3(-0.199006096, 0.963182092, 0.199006259), Vec3(-0.195391372, 0.939038754, 0.294890672), Vec3(-0.101498477, 0.993134081, 0.101498663), Vec3(-0.201462388, 0.977899313, 0.100244492), Vec3(-0.298469514, 0.952974617, 0.0984110162), Vec3(-0.294890463, 0.939038813, 0.195391536), Vec3(-0.391309351, 0.918992341, 0.0962667614), Vec3(-0.386684507, 0.906026661, 0.191127077), Vec3(-0.28956455, 0.916100979, 0.289564729), Vec3(-0.379697949, 0.884631693, 0.283192039), Vec3(-0.464806855, 0.845220506, 0.276593417), Vec3(-0.454054326, 0.818291903, 0.362190306), Vec3(-0.473437756, 0.864822447, 0.186775237), Vec3(-0.554494917, 0.816099226, 0.182947487), Vec3(-0.544207096, 0.798436463, 0.270721197), Vec3(-0.531092405, 0.774297476, 0.354056507), Vec3(-0.47905156, 0.876698792, 0.0940984413), Vec3(-0.561066449, 0.826834917, 0.0922054276), Vec3(-0.636995614, 0.77002269, 0.090887785), Vec3(-0.629464686, 0.760416925, 0.18027015), Vec3(-0.617473245, 0.744725406, 0.266581982), Vec3(-0.601838589, 0.723508239, 0.348251849), Vec3(-0.423737615, 0.697528005, 0.583824575), Vec3(-0.420784116, 0.644161701, 0.644162774), Vec3(-0.431634933, 0.744235218, 0.51648432), Vec3(-0.502360642, 0.708671629, 0.502361119), Vec3(-0.491493464, 0.667615891, 0.565391958), Vec3(-0.487256259, 0.62029165, 0.620292664), Vec3(-0.442427725, 0.784515977, 0.442428142), Vec3(-0.516483903, 0.744235277, 0.43163532), Vec3(-0.583824158, 0.697528124, 0.423737973), Vec3(-0.56539166, 0.667615891, 0.491493911), Vec3(-0.549794197, 0.634343743, 0.549794614), Vec3(-0.542915702, 0.596732557, 0.596733272), Vec3(0.549794018, -0.549794137, 0.634344399), Vec3(0.542915404, -0.596732914, 0.596733034), Vec3(0.565391362, -0.491493374, 0.667616487), Vec3(0.502360463, -0.502360523, 0.708672106), Vec3(0.491493315, -0.565391421, 0.667616487), Vec3(0.487256259, -0.620292127, 0.620292127), Vec3(0.583823919, -0.423737466, 0.69752866), Vec3(0.601838231, -0.348251224, 0.723508775), Vec3(0.531092048, -0.354055941, 0.774298072), Vec3(0.516483545, -0.431634665, 0.744235814), Vec3(0.442427367, -0.442427367, 0.784516573), Vec3(0.431634724, -0.516483545, 0.744235754), Vec3(0.454053938, -0.362189651, 0.818292499), Vec3(0.371180117, -0.371180058, 0.85521692), Vec3(0.36218977, -0.454053819, 0.818292439), Vec3(0.354055941, -0.531091988, 0.774298072), Vec3(0.423737526, -0.583823919, 0.69752866), Vec3(0.420784026, -0.644162297, 0.644162297), Vec3(0.348251343, -0.601838291, 0.723508775), Vec3(0.346116185, -0.666016817, 0.666017115), Vec3(0.617472887, -0.266581506, 0.744726002), Vec3(0.62946409, -0.180269659, 0.76041764), Vec3(0.554494262, -0.18294695, 0.816099882), Vec3(0.544206619, -0.270720541, 0.79843694), Vec3(0.636995018, -0.0908873007, 0.770023227), Vec3(0.639564574, 2.32627499e-07, 0.773250937), Vec3(0.563331485, 2.4813599e-07, 0.830428481), Vec3(0.561065793, -0.092204906, 0.826835394), Vec3(0.479050845, -0.0940978825, 0.876699269), Vec3(0.47343713, -0.186774597, 0.864822865), Vec3(0.481007755, 2.4813599e-07, 0.880668581), Vec3(0.392937869, 2.4813599e-07, 0.923329055), Vec3(0.391308635, -0.0962661728, 0.918992758), Vec3(0.386683911, -0.191126406, 0.906027079), Vec3(0.464806408, -0.276592761, 0.845221043), Vec3(0.379697472, -0.283191293, 0.88463223), Vec3(0.289564103, -0.289563954, 0.916101336), Vec3(0.283191383, -0.379697323, 0.88463223), Vec3(0.294889867, -0.195390731, 0.939039171), Vec3(0.199005693, -0.199005499, 0.96318233), Vec3(0.195390999, -0.294889718, 0.939039111), Vec3(0.1911266, -0.386683851, 0.906027079), Vec3(0.298468858, -0.0984104276, 0.952974916), Vec3(0.299740821, 2.4813599e-07, 0.957644999), Vec3(0.202340484, 2.4813599e-07, 0.982842982), Vec3(0.201461986, -0.100243859, 0.977899432), Vec3(0.101498231, -0.101498, 0.993134201), Vec3(0.10024406, -0.201461762, 0.977899492), Vec3(0.101948492, 2.4813599e-07, 0.998260677), Vec3(-3.10169987e-08, 2.4813599e-07, 1.00345218), Vec3(-3.10169987e-08, -0.101948276, 0.998260677), Vec3(-1.55084994e-08, -0.202340335, 0.982843041), Vec3(0.0984106436, -0.298468739, 0.952974975), Vec3(0.0962664112, -0.391308665, 0.918992698), Vec3(-1.55084994e-08, -0.299740791, 0.957645059), Vec3(-3.10169987e-08, -0.392937809, 0.923329055), Vec3(0.266581625, -0.617472827, 0.744725943), Vec3(0.265069664, -0.684358835, 0.684358895), Vec3(0.27072069, -0.544206619, 0.79843694), Vec3(0.182947144, -0.5544945, 0.816099703), Vec3(0.180269808, -0.629464149, 0.760417521), Vec3(0.179295525, -0.698144555, 0.698144555), Vec3(0.27659288, -0.464806318, 0.845221102), Vec3(0.186774775, -0.473437071, 0.864822865), Vec3(0.094098106, -0.479050905, 0.876699209), Vec3(0.092205137, -0.561066091, 0.826835155), Vec3(-3.10169987e-08, -0.481007785, 0.880668521), Vec3(-3.10169987e-08, -0.563331604, 0.830428481), Vec3(0.0908875018, -0.636995137, 0.770023108), Vec3(0.0904091746, -0.706677854, 0.706677973), Vec3(-1.55084994e-08, -0.639564872, 0.773250699), Vec3(-3.10169987e-08, -0.70956403, 0.70956403), Vec3(0.636994958, 0.0908877626, 0.770023286), Vec3(0.62946403, 0.180269986, 0.76041764), Vec3(0.554494143, 0.182947278, 0.816099823), Vec3(0.561065674, 0.0922053829, 0.826835394), Vec3(0.617472649, 0.266581774, 0.744726002), Vec3(0.601838052, 0.348251313, 0.723508894), Vec3(0.531091869, 0.354055971, 0.774298191), Vec3(0.54420644, 0.27072084, 0.798436999), Vec3(0.464806139, 0.276593, 0.845221102), Vec3(0.473436922, 0.186774969, 0.864822924), Vec3(0.45405373, 0.36218971, 0.818292618), Vec3(0.371179938, 0.371180087, 0.85521698), Vec3(0.379697233, 0.283191502, 0.88463217), Vec3(0.386683762, 0.191126779, 0.906027019), Vec3(0.479050756, 0.0940983668, 0.876699209), Vec3(0.391308576, 0.0962666422, 0.918992698), Vec3(0.583823681, 0.423737437, 0.697528899), Vec3(0.565391183, 0.491493225, 0.667616725), Vec3(0.502360225, 0.502360284, 0.708672464), Vec3(0.516483307, 0.431634635, 0.744236052), Vec3(0.549793839, 0.549793899, 0.634344637), Vec3(0.491493225, 0.565391064, 0.667616785), Vec3(0.423737466, 0.583823562, 0.697529018), Vec3(0.431634605, 0.516483307, 0.744236052), Vec3(0.348251224, 0.601837933, 0.723509133), Vec3(0.354055882, 0.531091809, 0.774298251), Vec3(0.442427337, 0.442427367, 0.784516633), Vec3(0.362189621, 0.45405376, 0.818292677), Vec3(0.276592851, 0.464806199, 0.845221162), Vec3(0.283191323, 0.379697382, 0.88463217), Vec3(0.270720661, 0.544206321, 0.798437119), Vec3(0.18294704, 0.554494083, 0.816100061), Vec3(0.186774716, 0.473436892, 0.864822984), Vec3(0.191126511, 0.386683851, 0.906027079), Vec3(0.266581565, 0.617472529, 0.744726241), Vec3(0.180269763, 0.629463851, 0.760417819), Vec3(0.0908875018, 0.63699466, 0.770023525), Vec3(0.0922051221, 0.561065555, 0.826835513), Vec3(-3.10169987e-08, 0.639564395, 0.773251176), Vec3(-3.10169987e-08, 0.563331187, 0.83042872), Vec3(0.0940980688, 0.479050845, 0.876699269), Vec3(0.0962663442, 0.391308635, 0.918992698), Vec3(-3.10169987e-08, 0.481007755, 0.880668581), Vec3(-3.10169987e-08, 0.392937899, 0.923328996), Vec3(0.298468769, 0.0984108895, 0.952974856), Vec3(0.294889838, 0.195391133, 0.939039111), Vec3(0.199005604, 0.199005857, 0.963182271), Vec3(0.201461926, 0.100244306, 0.977899432), Vec3(0.289563894, 0.289564192, 0.916101277), Vec3(0.195390895, 0.294890016, 0.939039111), Vec3(0.0984105989, 0.298468977, 0.952974856), Vec3(0.100244015, 0.20146215, 0.977899432), Vec3(-3.10169987e-08, 0.29974097, 0.95764488), Vec3(-3.10169987e-08, 0.202340722, 0.982842922), Vec3(0.101498187, 0.101498462, 0.993134081), Vec3(-3.10169987e-08, 0.101948753, 0.998260498), Vec3(-0.101498291, 0.101498462, 0.993134201), Vec3(-0.101948567, 2.4813599e-07, 0.998260677), Vec3(-0.100244105, 0.201462179, 0.977899373), Vec3(-0.199005693, 0.199005842, 0.963182271), Vec3(-0.201461971, 0.100244291, 0.977899373), Vec3(-0.202340558, 2.4813599e-07, 0.982842982), Vec3(-0.0984106734, 0.298469037, 0.952974796), Vec3(-0.096266441, 0.391308725, 0.918992698), Vec3(-0.1911266, 0.386683881, 0.906027019), Vec3(-0.195390984, 0.294890016, 0.939038992), Vec3(-0.289564043, 0.289564103, 0.916101217), Vec3(-0.294889867, 0.195391104, 0.939039111), Vec3(-0.283191413, 0.379697472, 0.884632111), Vec3(-0.371180028, 0.371180028, 0.85521692), Vec3(-0.379697472, 0.283191502, 0.88463217), Vec3(-0.386683881, 0.191126764, 0.906027019), Vec3(-0.298468888, 0.0984108895, 0.952974856), Vec3(-0.29974094, 2.32627499e-07, 0.95764488), Vec3(-0.391308665, 0.0962666571, 0.918992698), Vec3(-0.392937928, 2.32627499e-07, 0.923328996), Vec3(-0.0940981358, 0.479050696, 0.876699269), Vec3(-0.0922051817, 0.561065555, 0.826835513), Vec3(-0.182947114, 0.554494083, 0.816099942), Vec3(-0.18677476, 0.473436892, 0.864822984), Vec3(-0.0908875763, 0.63699466, 0.770023525), Vec3(-0.180269867, 0.629463792, 0.760417819), Vec3(-0.266581625, 0.61747241, 0.744726241), Vec3(-0.270720661, 0.544206321, 0.798437119), Vec3(-0.348251343, 0.601837814, 0.723509133), Vec3(-0.354055971, 0.53109169, 0.774298251), Vec3(-0.27659288, 0.464806199, 0.845221162), Vec3(-0.36218971, 0.45405376, 0.818292499), Vec3(-0.442427367, 0.442427367, 0.784516633), Vec3(-0.454053819, 0.36218971, 0.818292499), Vec3(-0.431634635, 0.516483366, 0.744235992), Vec3(-0.502360404, 0.502360225, 0.708672285), Vec3(-0.516483486, 0.431634665, 0.744235873), Vec3(-0.531091928, 0.354055911, 0.774298131), Vec3(-0.423737496, 0.583823442, 0.697529018), Vec3(-0.491493374, 0.565391123, 0.667616665), Vec3(-0.549794078, 0.54979372, 0.634344637), Vec3(-0.565391421, 0.491493136, 0.667616665), Vec3(-0.58382374, 0.423737377, 0.697528839), Vec3(-0.601838171, 0.348251283, 0.723508835), Vec3(-0.479050815, 0.0940983519, 0.876699269), Vec3(-0.481007755, 2.17118995e-07, 0.880668581), Vec3(-0.473437011, 0.186774969, 0.864822865), Vec3(-0.554494262, 0.182947293, 0.816099882), Vec3(-0.561065674, 0.092205368, 0.826835394), Vec3(-0.563331485, 2.01610504e-07, 0.830428481), Vec3(-0.464806318, 0.276593, 0.845221043), Vec3(-0.54420656, 0.27072075, 0.79843688), Vec3(-0.617472708, 0.266581595, 0.744726002), Vec3(-0.62946403, 0.180269971, 0.76041764), Vec3(-0.636994958, 0.090887703, 0.770023227), Vec3(-0.639564753, 2.01610504e-07, 0.773250937), Vec3(-0.0908875465, -0.636995137, 0.770023167), Vec3(-0.0904092193, -0.706677854, 0.706677914), Vec3(-0.0922052115, -0.561065853, 0.826835275), Vec3(-0.182947204, -0.554494381, 0.816099763), Vec3(-0.180269867, -0.629464209, 0.760417461), Vec3(-0.179295614, -0.698144555, 0.698144615), Vec3(-0.0940981656, -0.479050905, 0.876699209), Vec3(-0.0962664858, -0.391308635, 0.918992698), Vec3(-0.19112663, -0.386683881, 0.906027019), Vec3(-0.186774835, -0.473437041, 0.864822865), Vec3(-0.27659288, -0.464806288, 0.845221043), Vec3(-0.27072072, -0.544206679, 0.79843688), Vec3(-0.283191532, -0.379697353, 0.88463223), Vec3(-0.371180117, -0.371179938, 0.85521692), Vec3(-0.36218977, -0.454053789, 0.818292439), Vec3(-0.354055941, -0.531091988, 0.774298072), Vec3(-0.266581714, -0.617472947, 0.744725883), Vec3(-0.265069664, -0.684358895, 0.684358835), Vec3(-0.348251343, -0.601838231, 0.723508775), Vec3(-0.346116126, -0.666016817, 0.666016996), Vec3(-0.0984107032, -0.298468769, 0.952974916), Vec3(-0.100244135, -0.201461777, 0.977899432), Vec3(-0.199005708, -0.199005425, 0.96318233), Vec3(-0.195390999, -0.294889748, 0.939039171), Vec3(-0.101498291, -0.101498, 0.993134201), Vec3(-0.201461986, -0.100243844, 0.977899432), Vec3(-0.298468888, -0.0984104276, 0.952974856), Vec3(-0.294889897, -0.195390776, 0.939039171), Vec3(-0.391308755, -0.0962661728, 0.918992698), Vec3(-0.386683851, -0.191126391, 0.906027079), Vec3(-0.289564043, -0.289563864, 0.916101336), Vec3(-0.379697382, -0.283191234, 0.88463223), Vec3(-0.464806348, -0.276592731, 0.845221102), Vec3(-0.454053909, -0.362189621, 0.818292558), Vec3(-0.473437041, -0.186774552, 0.864823043), Vec3(-0.554494262, -0.18294692, 0.816099882), Vec3(-0.54420656, -0.270720541, 0.798437059), Vec3(-0.531091988, -0.354055822, 0.774298131), Vec3(-0.479050845, -0.0940979198, 0.876699209), Vec3(-0.561065853, -0.0922049507, 0.826835334), Vec3(-0.636994958, -0.0908873305, 0.770023286), Vec3(-0.62946403, -0.180269644, 0.760417759), Vec3(-0.617472768, -0.266581416, 0.744726062), Vec3(-0.601838231, -0.348251253, 0.723508835), Vec3(-0.423737496, -0.583823979, 0.697528601), Vec3(-0.420784026, -0.644162238, 0.644162357), Vec3(-0.431634754, -0.516483605, 0.744235754), Vec3(-0.502360404, -0.502360463, 0.708672225), Vec3(-0.491493255, -0.565391421, 0.667616487), Vec3(-0.487256259, -0.620292068, 0.620292246), Vec3(-0.442427456, -0.442427367, 0.784516513), Vec3(-0.516483486, -0.431634694, 0.744235814), Vec3(-0.583823919, -0.423737496, 0.69752866), Vec3(-0.565391362, -0.491493344, 0.667616546), Vec3(-0.549794018, -0.549794137, 0.634344339), Vec3(-0.542915404, -0.596732974, 0.596733093), Vec3(0.549793899, -0.634344399, 0.549794137), Vec3(0.491493315, -0.667616367, 0.565391481), Vec3(0.502360404, -0.708672225, 0.502360523), Vec3(0.565391362, -0.667616427, 0.491493434), Vec3(0.423737496, -0.697528601, 0.583824039), Vec3(0.348251343, -0.723508596, 0.60183841), Vec3(0.354056001, -0.774298012, 0.531092048), Vec3(0.431634724, -0.744235694, 0.516483605), Vec3(0.442427367, -0.784516573, 0.442427427), Vec3(0.516483545, -0.744235754, 0.431634724), Vec3(0.3621898, -0.818292499, 0.454053938), Vec3(0.371180087, -0.855216861, 0.371180058), Vec3(0.454053879, -0.818292439, 0.36218977), Vec3(0.531091988, -0.774298072, 0.354055911), Vec3(0.58382386, -0.69752866, 0.423737526), Vec3(0.601838291, -0.723508775, 0.348251313), Vec3(0.266581625, -0.744725823, 0.617472947), Vec3(0.180269808, -0.760417402, 0.629464328), Vec3(0.182947159, -0.816099703, 0.554494441), Vec3(0.27072072, -0.798436821, 0.544206679), Vec3(0.0908875018, -0.770023048, 0.636995256), Vec3(-3.10169987e-08, -0.773250759, 0.639564931), Vec3(-3.10169987e-08, -0.830428481, 0.563331664), Vec3(0.092205137, -0.826835215, 0.561066031), Vec3(0.0940980837, -0.876699209, 0.479050905), Vec3(0.18677479, -0.864822805, 0.47343719), Vec3(-3.10169987e-08, -0.880668461, 0.481007904), Vec3(-3.10169987e-08, -0.923328996, 0.392937899), Vec3(0.0962664112, -0.918992698, 0.391308665), Vec3(0.1911266, -0.906026959, 0.386683911), Vec3(0.276592851, -0.845220923, 0.464806437), Vec3(0.283191442, -0.88463217, 0.379697472), Vec3(0.289564043, -0.916101336, 0.289564013), Vec3(0.379697472, -0.88463217, 0.283191383), Vec3(0.19539094, -0.939039111, 0.294889778), Vec3(0.199005663, -0.96318233, 0.199005574), Vec3(0.294889897, -0.939039111, 0.19539085), Vec3(0.386683941, -0.906027019, 0.191126525), Vec3(0.0984106287, -0.952974856, 0.298468828), Vec3(-3.10169987e-08, -0.957644999, 0.299740911), Vec3(-3.10169987e-08, -0.982842982, 0.202340469), Vec3(0.10024406, -0.977899432, 0.201461852), Vec3(0.101498216, -0.993134201, 0.10149809), Vec3(0.201462016, -0.977899432, 0.100243933), Vec3(-3.10169987e-08, -0.998260677, 0.101948351), Vec3(-3.10169987e-08, -1.00345218, -1.70593495e-07), Vec3(0.101948477, -0.998260677, -1.70593495e-07), Vec3(0.202340543, -0.982842922, -1.55085004e-07), Vec3(0.298468888, -0.952974856, 0.098410517), Vec3(0.391308665, -0.918992698, 0.0962662846), Vec3(0.299740881, -0.957644939, -1.55085004e-07), Vec3(0.392937899, -0.923329055, -1.55085004e-07), Vec3(0.617472827, -0.744725943, 0.266581565), Vec3(0.544206619, -0.79843688, 0.270720661), Vec3(0.554494262, -0.816099882, 0.18294704), Vec3(0.62946403, -0.76041764, 0.180269703), Vec3(0.464806318, -0.845221102, 0.276592851), Vec3(0.47343713, -0.864822805, 0.186774716), Vec3(0.479050905, -0.876699209, 0.0940979943), Vec3(0.561065793, -0.826835334, 0.0922050104), Vec3(0.481007755, -0.880668581, -1.55085004e-07), Vec3(0.563331485, -0.830428481, -1.55085004e-07), Vec3(0.636995018, -0.770023227, 0.0908873901), Vec3(0.639564753, -0.773250937, -1.55085004e-07), Vec3(-0.0908875614, -0.770023048, 0.636995256), Vec3(-0.180269912, -0.760417342, 0.629464328), Vec3(-0.182947204, -0.816099644, 0.55449456), Vec3(-0.0922052115, -0.826835215, 0.561066031), Vec3(-0.266581744, -0.744725883, 0.617472947), Vec3(-0.348251343, -0.723508656, 0.60183847), Vec3(-0.354055941, -0.774297953, 0.531092167), Vec3(-0.27072072, -0.798436761, 0.544206738), Vec3(-0.276592851, -0.845220923, 0.464806378), Vec3(-0.18677485, -0.864822865, 0.47343722), Vec3(-0.3621898, -0.818292499, 0.454053938), Vec3(-0.371180028, -0.85521692, 0.371180028), Vec3(-0.283191472, -0.884632111, 0.379697442), Vec3(-0.19112663, -0.906027019, 0.386683881), Vec3(-0.0940981805, -0.87669915, 0.479050905), Vec3(-0.0962664708, -0.918992698, 0.391308635), Vec3(-0.423737466, -0.697528541, 0.583824039), Vec3(-0.491493255, -0.667616367, 0.565391541), Vec3(-0.502360344, -0.708672225, 0.502360582), Vec3(-0.431634635, -0.744235694, 0.516483665), Vec3(-0.549793899, -0.634344339, 0.549794137), Vec3(-0.565391302, -0.667616546, 0.491493434), Vec3(-0.583823919, -0.69752866, 0.423737526), Vec3(-0.516483605, -0.744235694, 0.431634754), Vec3(-0.601838231, -0.723508835, 0.348251343), Vec3(-0.531091988, -0.774298072, 0.354055941), Vec3(-0.442427367, -0.784516513, 0.442427486), Vec3(-0.454053909, -0.818292499, 0.36218974), Vec3(-0.464806318, -0.845221102, 0.276592821), Vec3(-0.379697472, -0.88463217, 0.283191353), Vec3(-0.54420656, -0.79843694, 0.270720631), Vec3(-0.554494321, -0.816099823, 0.18294704), Vec3(-0.473437101, -0.864822984, 0.186774671), Vec3(-0.386683881, -0.906027079, 0.191126481), Vec3(-0.617472827, -0.744726002, 0.266581595), Vec3(-0.62946409, -0.760417521, 0.180269763), Vec3(-0.636995077, -0.770023167, 0.0908874273), Vec3(-0.561065972, -0.826835215, 0.0922050104), Vec3(-0.639564753, -0.773250937, -1.24067995e-07), Vec3(-0.563331485, -0.830428481, -1.24067995e-07), Vec3(-0.479050905, -0.87669915, 0.0940979943), Vec3(-0.391308725, -0.918992698, 0.0962662548), Vec3(-0.481007844, -0.880668521, -1.395765e-07), Vec3(-0.392937988, -0.923328996, -1.55085004e-07), Vec3(-0.0984107032, -0.952974856, 0.298468858), Vec3(-0.195390984, -0.939039111, 0.294889748), Vec3(-0.199005768, -0.96318233, 0.199005574), Vec3(-0.100244105, -0.977899432, 0.201461866), Vec3(-0.289564013, -0.916101277, 0.289564013), Vec3(-0.294889957, -0.939039111, 0.195390835), Vec3(-0.298468947, -0.952974856, 0.0984105021), Vec3(-0.20146203, -0.977899432, 0.100243933), Vec3(-0.29974094, -0.957644939, -1.55085004e-07), Vec3(-0.202340558, -0.982842982, -1.70593495e-07), Vec3(-0.101498291, -0.993134201, 0.10149809), Vec3(-0.101948567, -0.998260677, -1.70593495e-07), Vec3(-0.101498291, -0.993134201, -0.101498388), Vec3(-3.10169987e-08, -0.998260498, -0.101948693), Vec3(-0.201461956, -0.977899432, -0.100244217), Vec3(-0.199005648, -0.963182271, -0.199005738), Vec3(-0.100244075, -0.977899373, -0.201462045), Vec3(-3.10169987e-08, -0.982842982, -0.202340662), Vec3(-0.298468828, -0.952974916, -0.0984107703), Vec3(-0.391308695, -0.918992698, -0.0962665603), Vec3(-0.386683851, -0.906027019, -0.19112666), Vec3(-0.294889838, -0.939039111, -0.195391014), Vec3(-0.289564103, -0.916101336, -0.289564103), Vec3(-0.195390955, -0.939039111, -0.294889867), Vec3(-0.379697442, -0.884632111, -0.283191472), Vec3(-0.371180028, -0.85521692, -0.371180028), Vec3(-0.283191413, -0.88463217, -0.379697323), Vec3(-0.19112657, -0.906027079, -0.386683792), Vec3(-0.0984106734, -0.952974856, -0.298468918), Vec3(-3.10169987e-08, -0.957644999, -0.29974094), Vec3(-0.096266441, -0.918992758, -0.391308576), Vec3(-3.10169987e-08, -0.923329055, -0.392937839), Vec3(-0.479050845, -0.876699209, -0.0940982699), Vec3(-0.561065793, -0.826835334, -0.0922052786), Vec3(-0.554494262, -0.816099823, -0.182947204), Vec3(-0.473437011, -0.864822924, -0.186774909), Vec3(-0.636995018, -0.770023227, -0.0908876434), Vec3(-0.62946403, -0.76041764, -0.180269882), Vec3(-0.617472768, -0.744726002, -0.266581684), Vec3(-0.5442065, -0.798436999, -0.27072072), Vec3(-0.601838231, -0.723508835, -0.348251313), Vec3(-0.531091928, -0.774298072, -0.354055882), Vec3(-0.464806318, -0.845221043, -0.27659294), Vec3(-0.454053849, -0.818292558, -0.36218971), Vec3(-0.442427367, -0.784516633, -0.442427307), Vec3(-0.36218971, -0.818292618, -0.454053819), Vec3(-0.516483486, -0.744235873, -0.431634605), Vec3(-0.502360404, -0.708672285, -0.502360284), Vec3(-0.431634754, -0.744235873, -0.516483366), Vec3(-0.354055941, -0.774298251, -0.53109175), Vec3(-0.58382386, -0.69752866, -0.423737407), Vec3(-0.565391362, -0.667616606, -0.491493165), Vec3(-0.549794137, -0.634344578, -0.54979378), Vec3(-0.491493464, -0.667616665, -0.565391064), Vec3(-0.423737496, -0.697528958, -0.583823621), Vec3(-0.348251373, -0.723509073, -0.601837933), Vec3(-0.0940981507, -0.876699269, -0.479050696), Vec3(-3.10169987e-08, -0.88066864, -0.481007576), Vec3(-0.18677482, -0.864822924, -0.473436952), Vec3(-0.182947159, -0.816099942, -0.554494083), Vec3(-0.0922051966, -0.826835513, -0.561065555), Vec3(-3.10169987e-08, -0.83042872, -0.563331246), Vec3(-0.27659288, -0.845221043, -0.464806169), Vec3(-0.27072072, -0.798437119, -0.544206262), Vec3(-0.266581744, -0.744726181, -0.61747247), Vec3(-0.180269912, -0.760417759, -0.629463851), Vec3(-0.0908875614, -0.770023465, -0.63699472), Vec3(-3.10169987e-08, -0.773251176, -0.639564395), Vec3(0.636994958, -0.770023286, -0.0908876583), Vec3(0.561065793, -0.826835334, -0.0922053084), Vec3(0.554494262, -0.816099882, -0.182947204), Vec3(0.62946403, -0.76041764, -0.180269912), Vec3(0.479050815, -0.876699209, -0.094098255), Vec3(0.391308635, -0.918992698, -0.0962665454), Vec3(0.386683822, -0.906027019, -0.19112666), Vec3(0.473436981, -0.864822924, -0.18677488), Vec3(0.464806199, -0.845221102, -0.27659291), Vec3(0.5442065, -0.79843694, -0.27072072), Vec3(0.379697382, -0.88463223, -0.283191532), Vec3(0.371179968, -0.85521698, -0.371180058), Vec3(0.454053849, -0.818292618, -0.362189621), Vec3(0.531091928, -0.774298072, -0.354055911), Vec3(0.617472768, -0.744726002, -0.266581744), Vec3(0.601838171, -0.723508954, -0.348251313), Vec3(0.298468769, -0.952974856, -0.0984108001), Vec3(0.201461941, -0.977899432, -0.100244246), Vec3(0.199005619, -0.96318233, -0.199005738), Vec3(0.294889808, -0.939039111, -0.195391014), Vec3(0.101498187, -0.993134201, -0.101498403), Vec3(0.100244015, -0.977899373, -0.201462075), Vec3(0.0984106138, -0.952974856, -0.298468888), Vec3(0.19539091, -0.939039052, -0.294889838), Vec3(0.0962663591, -0.918992758, -0.391308576), Vec3(0.19112654, -0.906027079, -0.386683851), Vec3(0.289563954, -0.916101277, -0.289564013), Vec3(0.283191353, -0.88463217, -0.379697323), Vec3(0.27659288, -0.845221102, -0.464806199), Vec3(0.362189621, -0.818292618, -0.454053819), Vec3(0.18677476, -0.864822984, -0.473436892), Vec3(0.182947084, -0.816099942, -0.554494083), Vec3(0.270720631, -0.798437119, -0.544206381), Vec3(0.354055911, -0.774298251, -0.531091809), Vec3(0.0940980837, -0.876699328, -0.479050636), Vec3(0.092205137, -0.826835573, -0.561065495), Vec3(0.0908875167, -0.770023525, -0.63699466), Vec3(0.180269793, -0.760417819, -0.629463851), Vec3(0.266581625, -0.744726241, -0.617472529), Vec3(0.348251313, -0.723509073, -0.601837933), Vec3(0.5838238, -0.697528839, -0.423737377), Vec3(0.516483426, -0.744236052, -0.431634575), Vec3(0.502360344, -0.708672345, -0.502360284), Vec3(0.565391302, -0.667616665, -0.491493255), Vec3(0.442427307, -0.784516633, -0.442427307), Vec3(0.431634635, -0.744235992, -0.516483366), Vec3(0.423737496, -0.697528958, -0.583823562), Vec3(0.491493404, -0.667616665, -0.565391123), Vec3(0.549794078, -0.634344697, -0.54979378)}, + ["orientation"] = "left-handed", + ["part_list"] = { "sphere"}, + ["part_face_count_list"] = { 1536}, + ["part_face_indices"] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535}, + ["uv_list"] = { Vec2(0.39546001, 0.467680007), Vec2(0.390460014, 0.456429988), Vec2(0.399419993, 0.454439998), Vec2(0.400750011, 0.463099986), Vec2(0.390460014, 0.456429988), Vec2(0.386909992, 0.442909986), Vec2(0.397700012, 0.441610008), Vec2(0.399419993, 0.454439998), Vec2(0.380849987, 0.460709989), Vec2(0.375930011, 0.445899993), Vec2(0.386909992, 0.442909986), Vec2(0.390460014, 0.456429988), Vec2(0.38745001, 0.474099994), Vec2(0.380849987, 0.460709989), Vec2(0.390460014, 0.456429988), Vec2(0.39546001, 0.467680007), Vec2(0.386909992, 0.442909986), Vec2(0.384169996, 0.427769989), Vec2(0.395999998, 0.426840007), Vec2(0.397700012, 0.441610008), Vec2(0.384169996, 0.427769989), Vec2(0.382019997, 0.411460012), Vec2(0.394499987, 0.410809994), Vec2(0.395999998, 0.426840007), Vec2(0.372229993, 0.429919988), Vec2(0.369439989, 0.412990004), Vec2(0.382019997, 0.411460012), Vec2(0.384169996, 0.427769989), Vec2(0.375930011, 0.445899993), Vec2(0.372229993, 0.429919988), Vec2(0.384169996, 0.427769989), Vec2(0.386909992, 0.442909986), Vec2(0.364499986, 0.44986999), Vec2(0.360020012, 0.432889998), Vec2(0.372229993, 0.429919988), Vec2(0.375930011, 0.445899993), Vec2(0.360020012, 0.432889998), Vec2(0.356640011, 0.415170014), Vec2(0.369439989, 0.412990004), Vec2(0.372229993, 0.429919988), Vec2(0.347409993, 0.436250001), Vec2(0.343519986, 0.417690009), Vec2(0.356640011, 0.415170014), Vec2(0.360020012, 0.432889998), Vec2(0.352490008, 0.4542), Vec2(0.347409993, 0.436250001), Vec2(0.360020012, 0.432889998), Vec2(0.364499986, 0.44986999), Vec2(0.377939999, 0.481029987), Vec2(0.370359987, 0.465959996), Vec2(0.380849987, 0.460709989), Vec2(0.38745001, 0.474099994), Vec2(0.370359987, 0.465959996), Vec2(0.364499986, 0.44986999), Vec2(0.375930011, 0.445899993), Vec2(0.380849987, 0.460709989), Vec2(0.358999997, 0.471460015), Vec2(0.352490008, 0.4542), Vec2(0.364499986, 0.44986999), Vec2(0.370359987, 0.465959996), Vec2(0.367210001, 0.48793), Vec2(0.358999997, 0.471460015), Vec2(0.370359987, 0.465959996), Vec2(0.377939999, 0.481029987), Vec2(0.382019997, 0.411460012), Vec2(0.380380005, 0.394320011), Vec2(0.393269986, 0.393909991), Vec2(0.394499987, 0.410809994), Vec2(0.380380005, 0.394320011), Vec2(0.379240006, 0.376610011), Vec2(0.392369986, 0.376419991), Vec2(0.393269986, 0.393909991), Vec2(0.367379993, 0.395350009), Vec2(0.365979999, 0.377200007), Vec2(0.379240006, 0.376610011), Vec2(0.380380005, 0.394320011), Vec2(0.369439989, 0.412990004), Vec2(0.367379993, 0.395350009), Vec2(0.380380005, 0.394320011), Vec2(0.382019997, 0.411460012), Vec2(0.379240006, 0.376610011), Vec2(0.378580004, 0.358559996), Vec2(0.391840011, 0.358579993), Vec2(0.392369986, 0.376419991), Vec2(0.378580004, 0.358559996), Vec2(0.378399998, 0.340350002), Vec2(0.391689986, 0.340579987), Vec2(0.391840011, 0.358579993), Vec2(0.365179986, 0.358729988), Vec2(0.364960015, 0.340110004), Vec2(0.378399998, 0.340350002), Vec2(0.378580004, 0.358559996), Vec2(0.365979999, 0.377200007), Vec2(0.365179986, 0.358729988), Vec2(0.378580004, 0.358559996), Vec2(0.379240006, 0.376610011), Vec2(0.352490008, 0.378089994), Vec2(0.351550013, 0.359059989), Vec2(0.365179986, 0.358729988), Vec2(0.365979999, 0.377200007), Vec2(0.351550013, 0.359059989), Vec2(0.351289988, 0.339890003), Vec2(0.364960015, 0.340110004), Vec2(0.365179986, 0.358729988), Vec2(0.337650001, 0.359490007), Vec2(0.337339997, 0.33969), Vec2(0.351289988, 0.339890003), Vec2(0.351550013, 0.359059989), Vec2(0.338739991, 0.379180014), Vec2(0.337650001, 0.359490007), Vec2(0.351550013, 0.359059989), Vec2(0.352490008, 0.378089994), Vec2(0.356640011, 0.415170014), Vec2(0.354169995, 0.39684999), Vec2(0.367379993, 0.395350009), Vec2(0.369439989, 0.412990004), Vec2(0.354169995, 0.39684999), Vec2(0.352490008, 0.378089994), Vec2(0.365979999, 0.377200007), Vec2(0.367379993, 0.395350009), Vec2(0.34066999, 0.398629993), Vec2(0.338739991, 0.379180014), Vec2(0.352490008, 0.378089994), Vec2(0.354169995, 0.39684999), Vec2(0.343519986, 0.417690009), Vec2(0.34066999, 0.398629993), Vec2(0.354169995, 0.39684999), Vec2(0.356640011, 0.415170014), Vec2(0.330040008, 0.420289993), Vec2(0.326860011, 0.400489986), Vec2(0.34066999, 0.398629993), Vec2(0.343519986, 0.417690009), Vec2(0.326860011, 0.400489986), Vec2(0.324690014, 0.380349994), Vec2(0.338739991, 0.379180014), Vec2(0.34066999, 0.398629993), Vec2(0.312739998, 0.402269989), Vec2(0.310350001, 0.381489992), Vec2(0.324690014, 0.380349994), Vec2(0.326860011, 0.400489986), Vec2(0.316179991, 0.422729999), Vec2(0.312739998, 0.402269989), Vec2(0.326860011, 0.400489986), Vec2(0.330040008, 0.420289993), Vec2(0.324690014, 0.380349994), Vec2(0.323460013, 0.359990001), Vec2(0.337650001, 0.359490007), Vec2(0.338739991, 0.379180014), Vec2(0.323460013, 0.359990001), Vec2(0.323089987, 0.339509994), Vec2(0.337339997, 0.33969), Vec2(0.337650001, 0.359490007), Vec2(0.308970004, 0.360480011), Vec2(0.308560014, 0.339359999), Vec2(0.323089987, 0.339509994), Vec2(0.323460013, 0.359990001), Vec2(0.310350001, 0.381489992), Vec2(0.308970004, 0.360480011), Vec2(0.323460013, 0.359990001), Vec2(0.324690014, 0.380349994), Vec2(0.295740008, 0.382490009), Vec2(0.294230014, 0.360920012), Vec2(0.308970004, 0.360480011), Vec2(0.310350001, 0.381489992), Vec2(0.294230014, 0.360920012), Vec2(0.293760002, 0.339240015), Vec2(0.308560014, 0.339359999), Vec2(0.308970004, 0.360480011), Vec2(0.279269993, 0.361259997), Vec2(0.278759986, 0.339150012), Vec2(0.293760002, 0.339240015), Vec2(0.294230014, 0.360920012), Vec2(0.280889988, 0.383249998), Vec2(0.279269993, 0.361259997), Vec2(0.294230014, 0.360920012), Vec2(0.295740008, 0.382490009), Vec2(0.301970005, 0.42482999), Vec2(0.298310012, 0.403829992), Vec2(0.312739998, 0.402269989), Vec2(0.316179991, 0.422729999), Vec2(0.298310012, 0.403829992), Vec2(0.295740008, 0.382490009), Vec2(0.310350001, 0.381489992), Vec2(0.312739998, 0.402269989), Vec2(0.283609986, 0.405010015), Vec2(0.280889988, 0.383249998), Vec2(0.295740008, 0.382490009), Vec2(0.298310012, 0.403829992), Vec2(0.287420005, 0.426429987), Vec2(0.283609986, 0.405010015), Vec2(0.298310012, 0.403829992), Vec2(0.301970005, 0.42482999), Vec2(0.355369985, 0.494399995), Vec2(0.346780002, 0.476749986), Vec2(0.358999997, 0.471460015), Vec2(0.367210001, 0.48793), Vec2(0.346780002, 0.476749986), Vec2(0.339839995, 0.45848), Vec2(0.352490008, 0.4542), Vec2(0.358999997, 0.471460015), Vec2(0.333739996, 0.481489986), Vec2(0.326559991, 0.462370008), Vec2(0.339839995, 0.45848), Vec2(0.346780002, 0.476749986), Vec2(0.342489988, 0.500119984), Vec2(0.333739996, 0.481489986), Vec2(0.346780002, 0.476749986), Vec2(0.355369985, 0.494399995), Vec2(0.339839995, 0.45848), Vec2(0.334320009, 0.439639986), Vec2(0.347409993, 0.436250001), Vec2(0.352490008, 0.4542), Vec2(0.334320009, 0.439639986), Vec2(0.330040008, 0.420289993), Vec2(0.343519986, 0.417690009), Vec2(0.347409993, 0.436250001), Vec2(0.320760012, 0.442779988), Vec2(0.316179991, 0.422729999), Vec2(0.330040008, 0.420289993), Vec2(0.334320009, 0.439639986), Vec2(0.326559991, 0.462370008), Vec2(0.320760012, 0.442779988), Vec2(0.334320009, 0.439639986), Vec2(0.339839995, 0.45848), Vec2(0.312700003, 0.465640008), Vec2(0.306739986, 0.445450008), Vec2(0.320760012, 0.442779988), Vec2(0.326559991, 0.462370008), Vec2(0.306739986, 0.445450008), Vec2(0.301970005, 0.42482999), Vec2(0.316179991, 0.422729999), Vec2(0.320760012, 0.442779988), Vec2(0.292309999, 0.447459996), Vec2(0.287420005, 0.426429987), Vec2(0.301970005, 0.42482999), Vec2(0.306739986, 0.445450008), Vec2(0.298299998, 0.468100011), Vec2(0.292309999, 0.447459996), Vec2(0.306739986, 0.445450008), Vec2(0.312700003, 0.465640008), Vec2(0.328619987, 0.504840016), Vec2(0.319940001, 0.485419989), Vec2(0.333739996, 0.481489986), Vec2(0.342489988, 0.500119984), Vec2(0.319940001, 0.485419989), Vec2(0.312700003, 0.465640008), Vec2(0.326559991, 0.462370008), Vec2(0.333739996, 0.481489986), Vec2(0.305429995, 0.488370001), Vec2(0.298299998, 0.468100011), Vec2(0.312700003, 0.465640008), Vec2(0.319940001, 0.485419989), Vec2(0.313829988, 0.508350015), Vec2(0.305429995, 0.488370001), Vec2(0.319940001, 0.485419989), Vec2(0.328619987, 0.504840016), Vec2(0.378399998, 0.340350002), Vec2(0.378690004, 0.322140008), Vec2(0.391930014, 0.32258001), Vec2(0.391689986, 0.340579987), Vec2(0.378690004, 0.322140008), Vec2(0.379449993, 0.304089993), Vec2(0.392560005, 0.304740012), Vec2(0.391930014, 0.32258001), Vec2(0.365289986, 0.321500003), Vec2(0.3662, 0.303050011), Vec2(0.379449993, 0.304089993), Vec2(0.378690004, 0.322140008), Vec2(0.364960015, 0.340110004), Vec2(0.365289986, 0.321500003), Vec2(0.378690004, 0.322140008), Vec2(0.378399998, 0.340350002), Vec2(0.379449993, 0.304089993), Vec2(0.380699992, 0.28639999), Vec2(0.393559992, 0.28727001), Vec2(0.392560005, 0.304740012), Vec2(0.380699992, 0.28639999), Vec2(0.382450014, 0.26929), Vec2(0.394899994, 0.27037999), Vec2(0.393559992, 0.28727001), Vec2(0.367720008, 0.284920007), Vec2(0.369899988, 0.267320007), Vec2(0.382450014, 0.26929), Vec2(0.380699992, 0.28639999), Vec2(0.3662, 0.303050011), Vec2(0.367720008, 0.284920007), Vec2(0.380699992, 0.28639999), Vec2(0.379449993, 0.304089993), Vec2(0.352730006, 0.301719993), Vec2(0.354519993, 0.282999992), Vec2(0.367720008, 0.284920007), Vec2(0.3662, 0.303050011), Vec2(0.354519993, 0.282999992), Vec2(0.357120007, 0.26473999), Vec2(0.369899988, 0.267320007), Vec2(0.367720008, 0.284920007), Vec2(0.341039985, 0.280840009), Vec2(0.344020009, 0.261860013), Vec2(0.357120007, 0.26473999), Vec2(0.354519993, 0.282999992), Vec2(0.338979989, 0.30024001), Vec2(0.341039985, 0.280840009), Vec2(0.354519993, 0.282999992), Vec2(0.352730006, 0.301719993), Vec2(0.351289988, 0.339890003), Vec2(0.351669997, 0.320740014), Vec2(0.365289986, 0.321500003), Vec2(0.364960015, 0.340110004), Vec2(0.351669997, 0.320740014), Vec2(0.352730006, 0.301719993), Vec2(0.3662, 0.303050011), Vec2(0.365289986, 0.321500003), Vec2(0.337769985, 0.319900006), Vec2(0.338979989, 0.30024001), Vec2(0.352730006, 0.301719993), Vec2(0.351669997, 0.320740014), Vec2(0.337339997, 0.33969), Vec2(0.337769985, 0.319900006), Vec2(0.351669997, 0.320740014), Vec2(0.351289988, 0.339890003), Vec2(0.382450014, 0.26929), Vec2(0.384719998, 0.253010005), Vec2(0.396519989, 0.254370004), Vec2(0.394899994, 0.27037999), Vec2(0.384719998, 0.253010005), Vec2(0.387580007, 0.237920001), Vec2(0.398339987, 0.239610001), Vec2(0.396519989, 0.254370004), Vec2(0.37281999, 0.250459999), Vec2(0.376650006, 0.234569997), Vec2(0.387580007, 0.237920001), Vec2(0.384719998, 0.253010005), Vec2(0.369899988, 0.267320007), Vec2(0.37281999, 0.250459999), Vec2(0.384719998, 0.253010005), Vec2(0.382450014, 0.26929), Vec2(0.387580007, 0.237920001), Vec2(0.391250014, 0.224490002), Vec2(0.400180012, 0.226799995), Vec2(0.398339987, 0.239610001), Vec2(0.391250014, 0.224490002), Vec2(0.396369994, 0.213410005), Vec2(0.401600003, 0.218140006), Vec2(0.400180012, 0.226799995), Vec2(0.381689996, 0.219909996), Vec2(0.388429999, 0.206740007), Vec2(0.396369994, 0.213410005), Vec2(0.391250014, 0.224490002), Vec2(0.376650006, 0.234569997), Vec2(0.381689996, 0.219909996), Vec2(0.391250014, 0.224490002), Vec2(0.387580007, 0.237920001), Vec2(0.365249991, 0.23026), Vec2(0.371250004, 0.21435), Vec2(0.381689996, 0.219909996), Vec2(0.376650006, 0.234569997), Vec2(0.371250004, 0.21435), Vec2(0.378960013, 0.199540004), Vec2(0.388429999, 0.206740007), Vec2(0.381689996, 0.219909996), Vec2(0.359890014, 0.208550006), Vec2(0.368229985, 0.192359999), Vec2(0.378960013, 0.199540004), Vec2(0.371250004, 0.21435), Vec2(0.353249997, 0.225600004), Vec2(0.359890014, 0.208550006), Vec2(0.371250004, 0.21435), Vec2(0.365249991, 0.23026), Vec2(0.357120007, 0.26473999), Vec2(0.360639989, 0.247109994), Vec2(0.37281999, 0.250459999), Vec2(0.369899988, 0.267320007), Vec2(0.360639989, 0.247109994), Vec2(0.365249991, 0.23026), Vec2(0.376650006, 0.234569997), Vec2(0.37281999, 0.250459999), Vec2(0.348030001, 0.243410006), Vec2(0.353249997, 0.225600004), Vec2(0.365249991, 0.23026), Vec2(0.360639989, 0.247109994), Vec2(0.344020009, 0.261860013), Vec2(0.348030001, 0.243410006), Vec2(0.360639989, 0.247109994), Vec2(0.357120007, 0.26473999), Vec2(0.330529988, 0.258929998), Vec2(0.334939986, 0.239710003), Vec2(0.348030001, 0.243410006), Vec2(0.344020009, 0.261860013), Vec2(0.334939986, 0.239710003), Vec2(0.34059, 0.221029997), Vec2(0.353249997, 0.225600004), Vec2(0.348030001, 0.243410006), Vec2(0.321339995, 0.236300007), Vec2(0.327270001, 0.216879994), Vec2(0.34059, 0.221029997), Vec2(0.334939986, 0.239710003), Vec2(0.316650003, 0.256209999), Vec2(0.321339995, 0.236300007), Vec2(0.334939986, 0.239710003), Vec2(0.330529988, 0.258929998), Vec2(0.34059, 0.221029997), Vec2(0.347649992, 0.202979997), Vec2(0.359890014, 0.208550006), Vec2(0.353249997, 0.225600004), Vec2(0.347649992, 0.202979997), Vec2(0.356359988, 0.185609996), Vec2(0.368229985, 0.192359999), Vec2(0.359890014, 0.208550006), Vec2(0.334560007, 0.197980002), Vec2(0.343409985, 0.179619998), Vec2(0.356359988, 0.185609996), Vec2(0.347649992, 0.202979997), Vec2(0.327270001, 0.216879994), Vec2(0.334560007, 0.197980002), Vec2(0.347649992, 0.202979997), Vec2(0.34059, 0.221029997), Vec2(0.313340008, 0.213379994), Vec2(0.320679992, 0.19382), Vec2(0.334560007, 0.197980002), Vec2(0.327270001, 0.216879994), Vec2(0.320679992, 0.19382), Vec2(0.329450011, 0.174649999), Vec2(0.343409985, 0.179619998), Vec2(0.334560007, 0.197980002), Vec2(0.30607, 0.190669999), Vec2(0.314539999, 0.170929998), Vec2(0.329450011, 0.174649999), Vec2(0.320679992, 0.19382), Vec2(0.298839986, 0.21074), Vec2(0.30607, 0.190669999), Vec2(0.320679992, 0.19382), Vec2(0.313340008, 0.213379994), Vec2(0.302390009, 0.253879994), Vec2(0.30726999, 0.233400002), Vec2(0.321339995, 0.236300007), Vec2(0.316650003, 0.256209999), Vec2(0.30726999, 0.233400002), Vec2(0.313340008, 0.213379994), Vec2(0.327270001, 0.216879994), Vec2(0.321339995, 0.236300007), Vec2(0.292760015, 0.231199995), Vec2(0.298839986, 0.21074), Vec2(0.313340008, 0.213379994), Vec2(0.30726999, 0.233400002), Vec2(0.287779987, 0.252099991), Vec2(0.292760015, 0.231199995), Vec2(0.30726999, 0.233400002), Vec2(0.302390009, 0.253879994), Vec2(0.323089987, 0.339509994), Vec2(0.323570013, 0.319050014), Vec2(0.337769985, 0.319900006), Vec2(0.337339997, 0.33969), Vec2(0.323570013, 0.319050014), Vec2(0.324930012, 0.298720002), Vec2(0.338979989, 0.30024001), Vec2(0.337769985, 0.319900006), Vec2(0.309089988, 0.318260014), Vec2(0.310579985, 0.297289997), Vec2(0.324930012, 0.298720002), Vec2(0.323570013, 0.319050014), Vec2(0.308560014, 0.339359999), Vec2(0.309089988, 0.318260014), Vec2(0.323570013, 0.319050014), Vec2(0.323089987, 0.339509994), Vec2(0.324930012, 0.298720002), Vec2(0.327230006, 0.278640002), Vec2(0.341039985, 0.280840009), Vec2(0.338979989, 0.30024001), Vec2(0.327230006, 0.278640002), Vec2(0.330529988, 0.258929998), Vec2(0.344020009, 0.261860013), Vec2(0.341039985, 0.280840009), Vec2(0.313080013, 0.276569992), Vec2(0.316650003, 0.256209999), Vec2(0.330529988, 0.258929998), Vec2(0.327230006, 0.278640002), Vec2(0.310579985, 0.297289997), Vec2(0.313080013, 0.276569992), Vec2(0.327230006, 0.278640002), Vec2(0.324930012, 0.298720002), Vec2(0.295949996, 0.296050012), Vec2(0.298619986, 0.274780005), Vec2(0.313080013, 0.276569992), Vec2(0.310579985, 0.297289997), Vec2(0.298619986, 0.274780005), Vec2(0.302390009, 0.253879994), Vec2(0.316650003, 0.256209999), Vec2(0.313080013, 0.276569992), Vec2(0.283879995, 0.273420006), Vec2(0.287779987, 0.252099991), Vec2(0.302390009, 0.253879994), Vec2(0.298619986, 0.274780005), Vec2(0.281069994, 0.295100003), Vec2(0.283879995, 0.273420006), Vec2(0.298619986, 0.274780005), Vec2(0.295949996, 0.296050012), Vec2(0.293760002, 0.339240015), Vec2(0.294330001, 0.317570001), Vec2(0.309089988, 0.318260014), Vec2(0.308560014, 0.339359999), Vec2(0.294330001, 0.317570001), Vec2(0.295949996, 0.296050012), Vec2(0.310579985, 0.297289997), Vec2(0.309089988, 0.318260014), Vec2(0.279359996, 0.31705001), Vec2(0.281069994, 0.295100003), Vec2(0.295949996, 0.296050012), Vec2(0.294330001, 0.317570001), Vec2(0.278759986, 0.339150012), Vec2(0.279359996, 0.31705001), Vec2(0.294330001, 0.317570001), Vec2(0.293760002, 0.339240015), Vec2(0.263590008, 0.33908999), Vec2(0.264219999, 0.316720009), Vec2(0.279359996, 0.31705001), Vec2(0.278759986, 0.339150012), Vec2(0.264219999, 0.316720009), Vec2(0.266000003, 0.294499993), Vec2(0.281069994, 0.295100003), Vec2(0.279359996, 0.31705001), Vec2(0.248960003, 0.31656), Vec2(0.250800014, 0.294209987), Vec2(0.266000003, 0.294499993), Vec2(0.264219999, 0.316720009), Vec2(0.248319998, 0.339060009), Vec2(0.248960003, 0.31656), Vec2(0.264219999, 0.316720009), Vec2(0.263590008, 0.33908999), Vec2(0.266000003, 0.294499993), Vec2(0.268900007, 0.272549987), Vec2(0.283879995, 0.273420006), Vec2(0.281069994, 0.295100003), Vec2(0.268900007, 0.272549987), Vec2(0.272879988, 0.250959992), Vec2(0.287779987, 0.252099991), Vec2(0.283879995, 0.273420006), Vec2(0.25376001, 0.272139996), Vec2(0.257770002, 0.250429988), Vec2(0.272879988, 0.250959992), Vec2(0.268900007, 0.272549987), Vec2(0.250800014, 0.294209987), Vec2(0.25376001, 0.272139996), Vec2(0.268900007, 0.272549987), Vec2(0.266000003, 0.294499993), Vec2(0.235520005, 0.294160008), Vec2(0.238519996, 0.272080004), Vec2(0.25376001, 0.272139996), Vec2(0.250800014, 0.294209987), Vec2(0.238519996, 0.272080004), Vec2(0.242550001, 0.250389993), Vec2(0.257770002, 0.250429988), Vec2(0.25376001, 0.272139996), Vec2(0.223269999, 0.272210002), Vec2(0.227329999, 0.250649989), Vec2(0.242550001, 0.250389993), Vec2(0.238519996, 0.272080004), Vec2(0.220210001, 0.294230014), Vec2(0.223269999, 0.272210002), Vec2(0.238519996, 0.272080004), Vec2(0.235520005, 0.294160008), Vec2(0.232999995, 0.339049995), Vec2(0.23364, 0.316529989), Vec2(0.248960003, 0.31656), Vec2(0.248319998, 0.339060009), Vec2(0.23364, 0.316529989), Vec2(0.235520005, 0.294160008), Vec2(0.250800014, 0.294209987), Vec2(0.248960003, 0.31656), Vec2(0.2183, 0.31656), Vec2(0.220210001, 0.294230014), Vec2(0.235520005, 0.294160008), Vec2(0.23364, 0.316529989), Vec2(0.217649996, 0.339060009), Vec2(0.2183, 0.31656), Vec2(0.23364, 0.316529989), Vec2(0.232999995, 0.339049995), Vec2(0.272879988, 0.250959992), Vec2(0.277880013, 0.229790002), Vec2(0.292760015, 0.231199995), Vec2(0.287779987, 0.252099991), Vec2(0.277880013, 0.229790002), Vec2(0.283870012, 0.209040001), Vec2(0.298839986, 0.21074), Vec2(0.292760015, 0.231199995), Vec2(0.262730002, 0.229149997), Vec2(0.268539995, 0.208299994), Vec2(0.283870012, 0.209040001), Vec2(0.277880013, 0.229790002), Vec2(0.257770002, 0.250429988), Vec2(0.262730002, 0.229149997), Vec2(0.277880013, 0.229790002), Vec2(0.272879988, 0.250959992), Vec2(0.283870012, 0.209040001), Vec2(0.290829986, 0.188659996), Vec2(0.30607, 0.190669999), Vec2(0.298839986, 0.21074), Vec2(0.290829986, 0.188659996), Vec2(0.298799992, 0.168559998), Vec2(0.314539999, 0.170929998), Vec2(0.30607, 0.190669999), Vec2(0.27511999, 0.187820002), Vec2(0.282409996, 0.167600006), Vec2(0.298799992, 0.168559998), Vec2(0.290829986, 0.188659996), Vec2(0.268539995, 0.208299994), Vec2(0.27511999, 0.187820002), Vec2(0.290829986, 0.188659996), Vec2(0.283870012, 0.209040001), Vec2(0.253039986, 0.208399996), Vec2(0.259160012, 0.188060001), Vec2(0.27511999, 0.187820002), Vec2(0.268539995, 0.208299994), Vec2(0.259160012, 0.188060001), Vec2(0.265639991, 0.168019995), Vec2(0.282409996, 0.167600006), Vec2(0.27511999, 0.187820002), Vec2(0.243239999, 0.189260006), Vec2(0.248820007, 0.169729993), Vec2(0.265639991, 0.168019995), Vec2(0.259160012, 0.188060001), Vec2(0.23759, 0.209179997), Vec2(0.243239999, 0.189260006), Vec2(0.259160012, 0.188060001), Vec2(0.253039986, 0.208399996), Vec2(0.242550001, 0.250389993), Vec2(0.247439995, 0.229159996), Vec2(0.262730002, 0.229149997), Vec2(0.257770002, 0.250429988), Vec2(0.247439995, 0.229159996), Vec2(0.253039986, 0.208399996), Vec2(0.268539995, 0.208299994), Vec2(0.262730002, 0.229149997), Vec2(0.232189998, 0.229629993), Vec2(0.23759, 0.209179997), Vec2(0.253039986, 0.208399996), Vec2(0.247439995, 0.229159996), Vec2(0.227329999, 0.250649989), Vec2(0.232189998, 0.229629993), Vec2(0.247439995, 0.229159996), Vec2(0.242550001, 0.250389993), Vec2(0.21221, 0.250970006), Vec2(0.217130005, 0.230279997), Vec2(0.232189998, 0.229629993), Vec2(0.227329999, 0.250649989), Vec2(0.217130005, 0.230279997), Vec2(0.222450003, 0.210339993), Vec2(0.23759, 0.209179997), Vec2(0.232189998, 0.229629993), Vec2(0.202399999, 0.230660006), Vec2(0.207870007, 0.211359993), Vec2(0.222450003, 0.210339993), Vec2(0.217130005, 0.230279997), Vec2(0.197249994, 0.251010001), Vec2(0.202399999, 0.230660006), Vec2(0.217130005, 0.230279997), Vec2(0.21221, 0.250970006), Vec2(0.222450003, 0.210339993), Vec2(0.227709994, 0.191129997), Vec2(0.243239999, 0.189260006), Vec2(0.23759, 0.209179997), Vec2(0.227709994, 0.191129997), Vec2(0.232409999, 0.172529995), Vec2(0.248820007, 0.169729993), Vec2(0.243239999, 0.189260006), Vec2(0.213009998, 0.193220004), Vec2(0.216959998, 0.176129997), Vec2(0.232409999, 0.172529995), Vec2(0.227709994, 0.191129997), Vec2(0.207870007, 0.211359993), Vec2(0.213009998, 0.193220004), Vec2(0.227709994, 0.191129997), Vec2(0.222450003, 0.210339993), Vec2(0.194120005, 0.211500004), Vec2(0.199719995, 0.194680005), Vec2(0.213009998, 0.193220004), Vec2(0.207870007, 0.211359993), Vec2(0.199719995, 0.194680005), Vec2(0.203339994, 0.180059999), Vec2(0.216959998, 0.176129997), Vec2(0.213009998, 0.193220004), Vec2(0.188590005, 0.19382), Vec2(0.194059998, 0.183160007), Vec2(0.203339994, 0.180059999), Vec2(0.199719995, 0.194680005), Vec2(0.181370005, 0.209729999), Vec2(0.188590005, 0.19382), Vec2(0.199719995, 0.194680005), Vec2(0.194120005, 0.211500004), Vec2(0.182459995, 0.250360012), Vec2(0.188079998, 0.230199993), Vec2(0.202399999, 0.230660006), Vec2(0.197249994, 0.251010001), Vec2(0.188079998, 0.230199993), Vec2(0.194120005, 0.211500004), Vec2(0.207870007, 0.211359993), Vec2(0.202399999, 0.230660006), Vec2(0.174219996, 0.228259996), Vec2(0.181370005, 0.209729999), Vec2(0.194120005, 0.211500004), Vec2(0.188079998, 0.230199993), Vec2(0.167820007, 0.248590007), Vec2(0.174219996, 0.228259996), Vec2(0.188079998, 0.230199993), Vec2(0.182459995, 0.250360012), Vec2(0.202270001, 0.33908999), Vec2(0.202940002, 0.316599995), Vec2(0.2183, 0.31656), Vec2(0.217649996, 0.339060009), Vec2(0.202940002, 0.316599995), Vec2(0.204899997, 0.294290006), Vec2(0.220210001, 0.294230014), Vec2(0.2183, 0.31656), Vec2(0.187529996, 0.316549987), Vec2(0.189579993, 0.294180006), Vec2(0.204899997, 0.294290006), Vec2(0.202940002, 0.316599995), Vec2(0.186849996, 0.339130014), Vec2(0.187529996, 0.316549987), Vec2(0.202940002, 0.316599995), Vec2(0.202270001, 0.33908999), Vec2(0.204899997, 0.294290006), Vec2(0.208049998, 0.272350013), Vec2(0.223269999, 0.272210002), Vec2(0.220210001, 0.294230014), Vec2(0.208049998, 0.272350013), Vec2(0.21221, 0.250970006), Vec2(0.227329999, 0.250649989), Vec2(0.223269999, 0.272210002), Vec2(0.192880005, 0.27226001), Vec2(0.197249994, 0.251010001), Vec2(0.21221, 0.250970006), Vec2(0.208049998, 0.272350013), Vec2(0.189579993, 0.294180006), Vec2(0.192880005, 0.27226001), Vec2(0.208049998, 0.272350013), Vec2(0.204899997, 0.294290006), Vec2(0.17419, 0.293740004), Vec2(0.177729994, 0.271649987), Vec2(0.192880005, 0.27226001), Vec2(0.189579993, 0.294180006), Vec2(0.177729994, 0.271649987), Vec2(0.182459995, 0.250360012), Vec2(0.197249994, 0.251010001), Vec2(0.192880005, 0.27226001), Vec2(0.162550002, 0.270229995), Vec2(0.167820007, 0.248590007), Vec2(0.182459995, 0.250360012), Vec2(0.177729994, 0.271649987), Vec2(0.158659995, 0.292769998), Vec2(0.162550002, 0.270229995), Vec2(0.177729994, 0.271649987), Vec2(0.17419, 0.293740004), Vec2(0.171299994, 0.339179993), Vec2(0.172020003, 0.316339999), Vec2(0.187529996, 0.316549987), Vec2(0.186849996, 0.339130014), Vec2(0.172020003, 0.316339999), Vec2(0.17419, 0.293740004), Vec2(0.189579993, 0.294180006), Vec2(0.187529996, 0.316549987), Vec2(0.156289995, 0.315869987), Vec2(0.158659995, 0.292769998), Vec2(0.17419, 0.293740004), Vec2(0.172020003, 0.316339999), Vec2(0.155520007, 0.339249998), Vec2(0.156289995, 0.315869987), Vec2(0.172020003, 0.316339999), Vec2(0.171299994, 0.339179993), Vec2(0.298220009, 0.510519981), Vec2(0.290320009, 0.490200013), Vec2(0.305429995, 0.488370001), Vec2(0.313829988, 0.508350015), Vec2(0.290320009, 0.490200013), Vec2(0.28343001, 0.469639987), Vec2(0.298299998, 0.468100011), Vec2(0.305429995, 0.488370001), Vec2(0.27474001, 0.490909994), Vec2(0.268220007, 0.470270008), Vec2(0.28343001, 0.469639987), Vec2(0.290320009, 0.490200013), Vec2(0.281960011, 0.511309981), Vec2(0.27474001, 0.490909994), Vec2(0.290320009, 0.490200013), Vec2(0.298220009, 0.510519981), Vec2(0.28343001, 0.469639987), Vec2(0.277520001, 0.448729992), Vec2(0.292309999, 0.447459996), Vec2(0.298299998, 0.468100011), Vec2(0.277520001, 0.448729992), Vec2(0.272599995, 0.427439988), Vec2(0.287420005, 0.426429987), Vec2(0.292309999, 0.447459996), Vec2(0.262470007, 0.449279994), Vec2(0.257569999, 0.427890003), Vec2(0.272599995, 0.427439988), Vec2(0.277520001, 0.448729992), Vec2(0.268220007, 0.470270008), Vec2(0.262470007, 0.449279994), Vec2(0.277520001, 0.448729992), Vec2(0.28343001, 0.469639987), Vec2(0.252840012, 0.470090002), Vec2(0.24729, 0.449220002), Vec2(0.262470007, 0.449279994), Vec2(0.268220007, 0.470270008), Vec2(0.24729, 0.449220002), Vec2(0.242430001, 0.427890003), Vec2(0.257569999, 0.427890003), Vec2(0.262470007, 0.449279994), Vec2(0.232130006, 0.448720008), Vec2(0.227300003, 0.427630007), Vec2(0.242430001, 0.427890003), Vec2(0.24729, 0.449220002), Vec2(0.237509996, 0.469260007), Vec2(0.232130006, 0.448720008), Vec2(0.24729, 0.449220002), Vec2(0.252840012, 0.470090002), Vec2(0.265329987, 0.510739982), Vec2(0.25891, 0.490559995), Vec2(0.27474001, 0.490909994), Vec2(0.281960011, 0.511309981), Vec2(0.25891, 0.490559995), Vec2(0.252840012, 0.470090002), Vec2(0.268220007, 0.470270008), Vec2(0.27474001, 0.490909994), Vec2(0.24312, 0.489289999), Vec2(0.237509996, 0.469260007), Vec2(0.252840012, 0.470090002), Vec2(0.25891, 0.490559995), Vec2(0.248649999, 0.508920014), Vec2(0.24312, 0.489289999), Vec2(0.25891, 0.490559995), Vec2(0.265329987, 0.510739982), Vec2(0.272599995, 0.427439988), Vec2(0.268700004, 0.405750006), Vec2(0.283609986, 0.405010015), Vec2(0.287420005, 0.426429987), Vec2(0.268700004, 0.405750006), Vec2(0.265859991, 0.383729994), Vec2(0.280889988, 0.383249998), Vec2(0.283609986, 0.405010015), Vec2(0.253609985, 0.406089991), Vec2(0.250699997, 0.383949995), Vec2(0.265859991, 0.383729994), Vec2(0.268700004, 0.405750006), Vec2(0.257569999, 0.427890003), Vec2(0.253609985, 0.406089991), Vec2(0.268700004, 0.405750006), Vec2(0.272599995, 0.427439988), Vec2(0.265859991, 0.383729994), Vec2(0.264149994, 0.361470014), Vec2(0.279269993, 0.361259997), Vec2(0.280889988, 0.383249998), Vec2(0.264149994, 0.361470014), Vec2(0.263590008, 0.33908999), Vec2(0.278759986, 0.339150012), Vec2(0.279269993, 0.361259997), Vec2(0.248919994, 0.361559987), Vec2(0.248319998, 0.339060009), Vec2(0.263590008, 0.33908999), Vec2(0.264149994, 0.361470014), Vec2(0.250699997, 0.383949995), Vec2(0.248919994, 0.361559987), Vec2(0.264149994, 0.361470014), Vec2(0.265859991, 0.383729994), Vec2(0.235469997, 0.383980006), Vec2(0.233620003, 0.361580014), Vec2(0.248919994, 0.361559987), Vec2(0.250699997, 0.383949995), Vec2(0.233620003, 0.361580014), Vec2(0.232999995, 0.339049995), Vec2(0.248319998, 0.339060009), Vec2(0.248919994, 0.361559987), Vec2(0.2183, 0.361570001), Vec2(0.217649996, 0.339060009), Vec2(0.232999995, 0.339049995), Vec2(0.233620003, 0.361580014), Vec2(0.220200002, 0.383929998), Vec2(0.2183, 0.361570001), Vec2(0.233620003, 0.361580014), Vec2(0.235469997, 0.383980006), Vec2(0.242430001, 0.427890003), Vec2(0.238440007, 0.406120002), Vec2(0.253609985, 0.406089991), Vec2(0.257569999, 0.427890003), Vec2(0.238440007, 0.406120002), Vec2(0.235469997, 0.383980006), Vec2(0.250699997, 0.383949995), Vec2(0.253609985, 0.406089991), Vec2(0.223250002, 0.405999988), Vec2(0.220200002, 0.383929998), Vec2(0.235469997, 0.383980006), Vec2(0.238440007, 0.406120002), Vec2(0.227300003, 0.427630007), Vec2(0.223250002, 0.405999988), Vec2(0.238440007, 0.406120002), Vec2(0.242430001, 0.427890003), Vec2(0.212249994, 0.427329987), Vec2(0.208090007, 0.405889988), Vec2(0.223250002, 0.405999988), Vec2(0.227300003, 0.427630007), Vec2(0.208090007, 0.405889988), Vec2(0.204940006, 0.383920014), Vec2(0.220200002, 0.383929998), Vec2(0.223250002, 0.405999988), Vec2(0.192990005, 0.406040013), Vec2(0.189659998, 0.384090006), Vec2(0.204940006, 0.383920014), Vec2(0.208090007, 0.405889988), Vec2(0.197369993, 0.427329987), Vec2(0.192990005, 0.406040013), Vec2(0.208090007, 0.405889988), Vec2(0.212249994, 0.427329987), Vec2(0.204940006, 0.383920014), Vec2(0.202959999, 0.361589998), Vec2(0.2183, 0.361570001), Vec2(0.220200002, 0.383929998), Vec2(0.202959999, 0.361589998), Vec2(0.202270001, 0.33908999), Vec2(0.217649996, 0.339060009), Vec2(0.2183, 0.361570001), Vec2(0.187570006, 0.361710012), Vec2(0.186849996, 0.339130014), Vec2(0.202270001, 0.33908999), Vec2(0.202959999, 0.361589998), Vec2(0.189659998, 0.384090006), Vec2(0.187570006, 0.361710012), Vec2(0.202959999, 0.361589998), Vec2(0.204940006, 0.383920014), Vec2(0.174319997, 0.384629995), Vec2(0.172079995, 0.362019986), Vec2(0.187570006, 0.361710012), Vec2(0.189659998, 0.384090006), Vec2(0.172079995, 0.362019986), Vec2(0.171299994, 0.339179993), Vec2(0.186849996, 0.339130014), Vec2(0.187570006, 0.361710012), Vec2(0.156379998, 0.362619996), Vec2(0.155520007, 0.339249998), Vec2(0.171299994, 0.339179993), Vec2(0.172079995, 0.362019986), Vec2(0.158830002, 0.385720015), Vec2(0.156379998, 0.362619996), Vec2(0.172079995, 0.362019986), Vec2(0.174319997, 0.384629995), Vec2(0.182659999, 0.428039998), Vec2(0.177900001, 0.406729996), Vec2(0.192990005, 0.406040013), Vec2(0.197369993, 0.427329987), Vec2(0.177900001, 0.406729996), Vec2(0.174319997, 0.384629995), Vec2(0.189659998, 0.384090006), Vec2(0.192990005, 0.406040013), Vec2(0.162780002, 0.408250004), Vec2(0.158830002, 0.385720015), Vec2(0.174319997, 0.384629995), Vec2(0.177900001, 0.406729996), Vec2(0.168099999, 0.429879993), Vec2(0.162780002, 0.408250004), Vec2(0.177900001, 0.406729996), Vec2(0.182659999, 0.428039998), Vec2(0.232360005, 0.506039977), Vec2(0.227699995, 0.487379998), Vec2(0.24312, 0.489289999), Vec2(0.248649999, 0.508920014), Vec2(0.227699995, 0.487379998), Vec2(0.222460002, 0.468100011), Vec2(0.237509996, 0.469260007), Vec2(0.24312, 0.489289999), Vec2(0.213090003, 0.485280007), Vec2(0.207969993, 0.467079997), Vec2(0.222460002, 0.468100011), Vec2(0.227699995, 0.487379998), Vec2(0.217020005, 0.502390027), Vec2(0.213090003, 0.485280007), Vec2(0.227699995, 0.487379998), Vec2(0.232360005, 0.506039977), Vec2(0.222460002, 0.468100011), Vec2(0.217160001, 0.448089987), Vec2(0.232130006, 0.448720008), Vec2(0.237509996, 0.469260007), Vec2(0.217160001, 0.448089987), Vec2(0.212249994, 0.427329987), Vec2(0.227300003, 0.427630007), Vec2(0.232130006, 0.448720008), Vec2(0.202509999, 0.447730005), Vec2(0.197369993, 0.427329987), Vec2(0.212249994, 0.427329987), Vec2(0.217160001, 0.448089987), Vec2(0.207969993, 0.467079997), Vec2(0.202509999, 0.447730005), Vec2(0.217160001, 0.448089987), Vec2(0.222460002, 0.468100011), Vec2(0.194309995, 0.466969997), Vec2(0.18829, 0.448229998), Vec2(0.202509999, 0.447730005), Vec2(0.207969993, 0.467079997), Vec2(0.18829, 0.448229998), Vec2(0.182659999, 0.428039998), Vec2(0.197369993, 0.427329987), Vec2(0.202509999, 0.447730005), Vec2(0.174510002, 0.450219989), Vec2(0.168099999, 0.429879993), Vec2(0.182659999, 0.428039998), Vec2(0.18829, 0.448229998), Vec2(0.181649998, 0.468769997), Vec2(0.174510002, 0.450219989), Vec2(0.18829, 0.448229998), Vec2(0.194309995, 0.466969997), Vec2(0.203470007, 0.498450011), Vec2(0.199880004, 0.483830005), Vec2(0.213090003, 0.485280007), Vec2(0.217020005, 0.502390027), Vec2(0.199880004, 0.483830005), Vec2(0.194309995, 0.466969997), Vec2(0.207969993, 0.467079997), Vec2(0.213090003, 0.485280007), Vec2(0.188820004, 0.484710008), Vec2(0.181649998, 0.468769997), Vec2(0.194309995, 0.466969997), Vec2(0.199880004, 0.483830005), Vec2(0.194230005, 0.495350003), Vec2(0.188820004, 0.484710008), Vec2(0.199880004, 0.483830005), Vec2(0.203470007, 0.498450011), Vec2(0.40823999, 0.214259997), Vec2(0.409579992, 0.225759998), Vec2(0.400180012, 0.226799995), Vec2(0.401600003, 0.218140006), Vec2(0.409579992, 0.225759998), Vec2(0.409310013, 0.23928), Vec2(0.398339987, 0.239610001), Vec2(0.400180012, 0.226799995), Vec2(0.420230001, 0.222589999), Vec2(0.420819998, 0.237360001), Vec2(0.409310013, 0.23928), Vec2(0.409579992, 0.225759998), Vec2(0.418190002, 0.208949998), Vec2(0.420230001, 0.222589999), Vec2(0.409579992, 0.225759998), Vec2(0.40823999, 0.214259997), Vec2(0.409310013, 0.23928), Vec2(0.40843001, 0.254330009), Vec2(0.396519989, 0.254370004), Vec2(0.398339987, 0.239610001), Vec2(0.40843001, 0.254330009), Vec2(0.407380015, 0.270489991), Vec2(0.394899994, 0.27037999), Vec2(0.396519989, 0.254370004), Vec2(0.420599997, 0.253129989), Vec2(0.42001, 0.269749999), Vec2(0.407380015, 0.270489991), Vec2(0.40843001, 0.254330009), Vec2(0.420819998, 0.237360001), Vec2(0.420599997, 0.253129989), Vec2(0.40843001, 0.254330009), Vec2(0.409310013, 0.23928), Vec2(0.432960004, 0.234589994), Vec2(0.433129996, 0.251199991), Vec2(0.420599997, 0.253129989), Vec2(0.420819998, 0.237360001), Vec2(0.433129996, 0.251199991), Vec2(0.432870001, 0.268429995), Vec2(0.42001, 0.269749999), Vec2(0.420599997, 0.253129989), Vec2(0.446029991, 0.248999998), Vec2(0.445980012, 0.266840011), Vec2(0.432870001, 0.268429995), Vec2(0.433129996, 0.251199991), Vec2(0.445679992, 0.23161), Vec2(0.446029991, 0.248999998), Vec2(0.433129996, 0.251199991), Vec2(0.432960004, 0.234589994), Vec2(0.429830015, 0.203459993), Vec2(0.432000011, 0.218669996), Vec2(0.420230001, 0.222589999), Vec2(0.418190002, 0.208949998), Vec2(0.432000011, 0.218669996), Vec2(0.432960004, 0.234589994), Vec2(0.420819998, 0.237360001), Vec2(0.420230001, 0.222589999), Vec2(0.444660008, 0.214709997), Vec2(0.445679992, 0.23161), Vec2(0.432960004, 0.234589994), Vec2(0.432000011, 0.218669996), Vec2(0.44264999, 0.198310003), Vec2(0.444660008, 0.214709997), Vec2(0.432000011, 0.218669996), Vec2(0.429830015, 0.203459993), Vec2(0.407380015, 0.270489991), Vec2(0.406410009, 0.287449986), Vec2(0.393559992, 0.28727001), Vec2(0.394899994, 0.27037999), Vec2(0.406410009, 0.287449986), Vec2(0.405629992, 0.304960012), Vec2(0.392560005, 0.304740012), Vec2(0.393559992, 0.28727001), Vec2(0.419349998, 0.287019998), Vec2(0.418760002, 0.304780006), Vec2(0.405629992, 0.304960012), Vec2(0.406410009, 0.287449986), Vec2(0.42001, 0.269749999), Vec2(0.419349998, 0.287019998), Vec2(0.406410009, 0.287449986), Vec2(0.407380015, 0.270489991), Vec2(0.405629992, 0.304960012), Vec2(0.405119985, 0.32280001), Vec2(0.391930014, 0.32258001), Vec2(0.392560005, 0.304740012), Vec2(0.405119985, 0.32280001), Vec2(0.404920012, 0.340810001), Vec2(0.391689986, 0.340579987), Vec2(0.391930014, 0.32258001), Vec2(0.418350011, 0.322829992), Vec2(0.418179989, 0.341030002), Vec2(0.404920012, 0.340810001), Vec2(0.405119985, 0.32280001), Vec2(0.418760002, 0.304780006), Vec2(0.418350011, 0.322829992), Vec2(0.405119985, 0.32280001), Vec2(0.405629992, 0.304960012), Vec2(0.432020009, 0.304309994), Vec2(0.431690007, 0.322710007), Vec2(0.418350011, 0.322829992), Vec2(0.418760002, 0.304780006), Vec2(0.431690007, 0.322710007), Vec2(0.431549996, 0.341219991), Vec2(0.418179989, 0.341030002), Vec2(0.418350011, 0.322829992), Vec2(0.445179999, 0.322490007), Vec2(0.445060015, 0.341390014), Vec2(0.431549996, 0.341219991), Vec2(0.431690007, 0.322710007), Vec2(0.445430011, 0.303689986), Vec2(0.445179999, 0.322490007), Vec2(0.431690007, 0.322710007), Vec2(0.432020009, 0.304309994), Vec2(0.432870001, 0.268429995), Vec2(0.432440013, 0.286170006), Vec2(0.419349998, 0.287019998), Vec2(0.42001, 0.269749999), Vec2(0.432440013, 0.286170006), Vec2(0.432020009, 0.304309994), Vec2(0.418760002, 0.304780006), Vec2(0.419349998, 0.287019998), Vec2(0.445730001, 0.285100013), Vec2(0.445430011, 0.303689986), Vec2(0.432020009, 0.304309994), Vec2(0.432440013, 0.286170006), Vec2(0.445980012, 0.266840011), Vec2(0.445730001, 0.285100013), Vec2(0.432440013, 0.286170006), Vec2(0.432870001, 0.268429995), Vec2(0.459340006, 0.265280008), Vec2(0.459210008, 0.284009993), Vec2(0.445730001, 0.285100013), Vec2(0.445980012, 0.266840011), Vec2(0.459210008, 0.284009993), Vec2(0.458999991, 0.30302), Vec2(0.445430011, 0.303689986), Vec2(0.445730001, 0.285100013), Vec2(0.472840011, 0.283050001), Vec2(0.472710013, 0.30241999), Vec2(0.458999991, 0.30302), Vec2(0.459210008, 0.284009993), Vec2(0.472909987, 0.263940006), Vec2(0.472840011, 0.283050001), Vec2(0.459210008, 0.284009993), Vec2(0.459340006, 0.265280008), Vec2(0.458999991, 0.30302), Vec2(0.458819985, 0.322230011), Vec2(0.445179999, 0.322490007), Vec2(0.445430011, 0.303689986), Vec2(0.458819985, 0.322230011), Vec2(0.458730012, 0.341520011), Vec2(0.445060015, 0.341390014), Vec2(0.445179999, 0.322490007), Vec2(0.472589999, 0.321969986), Vec2(0.472530007, 0.341619998), Vec2(0.458730012, 0.341520011), Vec2(0.458819985, 0.322230011), Vec2(0.472710013, 0.30241999), Vec2(0.472589999, 0.321969986), Vec2(0.458819985, 0.322230011), Vec2(0.458999991, 0.30302), Vec2(0.486530006, 0.301999986), Vec2(0.486470014, 0.32179001), Vec2(0.472589999, 0.321969986), Vec2(0.472710013, 0.30241999), Vec2(0.486470014, 0.32179001), Vec2(0.486429989, 0.341670007), Vec2(0.472530007, 0.341619998), Vec2(0.472589999, 0.321969986), Vec2(0.500389993, 0.321709991), Vec2(0.500389993, 0.341690004), Vec2(0.486429989, 0.341670007), Vec2(0.486470014, 0.32179001), Vec2(0.500389993, 0.301829994), Vec2(0.500389993, 0.321709991), Vec2(0.486470014, 0.32179001), Vec2(0.486530006, 0.301999986), Vec2(0.486620009, 0.263029993), Vec2(0.486589998, 0.282389998), Vec2(0.472840011, 0.283050001), Vec2(0.472909987, 0.263940006), Vec2(0.486589998, 0.282389998), Vec2(0.486530006, 0.301999986), Vec2(0.472710013, 0.30241999), Vec2(0.472840011, 0.283050001), Vec2(0.500389993, 0.282130003), Vec2(0.500389993, 0.301829994), Vec2(0.486530006, 0.301999986), Vec2(0.486589998, 0.282389998), Vec2(0.500389993, 0.26267001), Vec2(0.500389993, 0.282130003), Vec2(0.486589998, 0.282389998), Vec2(0.486620009, 0.263029993), Vec2(0.456360012, 0.193859994), Vec2(0.458009988, 0.21119), Vec2(0.444660008, 0.214709997), Vec2(0.44264999, 0.198310003), Vec2(0.458009988, 0.21119), Vec2(0.458920002, 0.228850007), Vec2(0.445679992, 0.23161), Vec2(0.444660008, 0.214709997), Vec2(0.471870005, 0.208409995), Vec2(0.472539991, 0.226630002), Vec2(0.458920002, 0.228850007), Vec2(0.458009988, 0.21119), Vec2(0.470699996, 0.190410003), Vec2(0.471870005, 0.208409995), Vec2(0.458009988, 0.21119), Vec2(0.456360012, 0.193859994), Vec2(0.458920002, 0.228850007), Vec2(0.459300011, 0.246879995), Vec2(0.446029991, 0.248999998), Vec2(0.445679992, 0.23161), Vec2(0.459300011, 0.246879995), Vec2(0.459340006, 0.265280008), Vec2(0.445980012, 0.266840011), Vec2(0.446029991, 0.248999998), Vec2(0.472840011, 0.245130002), Vec2(0.472909987, 0.263940006), Vec2(0.459340006, 0.265280008), Vec2(0.459300011, 0.246879995), Vec2(0.472539991, 0.226630002), Vec2(0.472840011, 0.245130002), Vec2(0.459300011, 0.246879995), Vec2(0.458920002, 0.228850007), Vec2(0.486409992, 0.225170001), Vec2(0.486570001, 0.243959993), Vec2(0.472840011, 0.245130002), Vec2(0.472539991, 0.226630002), Vec2(0.486570001, 0.243959993), Vec2(0.486620009, 0.263029993), Vec2(0.472909987, 0.263940006), Vec2(0.472840011, 0.245130002), Vec2(0.500389993, 0.243509993), Vec2(0.500389993, 0.26267001), Vec2(0.486620009, 0.263029993), Vec2(0.486570001, 0.243959993), Vec2(0.500389993, 0.224610001), Vec2(0.500389993, 0.243509993), Vec2(0.486570001, 0.243959993), Vec2(0.486409992, 0.225170001), Vec2(0.485439986, 0.188199997), Vec2(0.48605001, 0.206609994), Vec2(0.471870005, 0.208409995), Vec2(0.470699996, 0.190410003), Vec2(0.48605001, 0.206609994), Vec2(0.486409992, 0.225170001), Vec2(0.472539991, 0.226630002), Vec2(0.471870005, 0.208409995), Vec2(0.500389993, 0.205939993), Vec2(0.500389993, 0.224610001), Vec2(0.486409992, 0.225170001), Vec2(0.48605001, 0.206609994), Vec2(0.500389993, 0.187380001), Vec2(0.500389993, 0.205939993), Vec2(0.48605001, 0.206609994), Vec2(0.485439986, 0.188199997), Vec2(0.404920012, 0.340810001), Vec2(0.405030012, 0.358819991), Vec2(0.391840011, 0.358579993), Vec2(0.391689986, 0.340579987), Vec2(0.405030012, 0.358819991), Vec2(0.40546, 0.376670003), Vec2(0.392369986, 0.376419991), Vec2(0.391840011, 0.358579993), Vec2(0.418269992, 0.359230012), Vec2(0.418599993, 0.377279997), Vec2(0.40546, 0.376670003), Vec2(0.405030012, 0.358819991), Vec2(0.418179989, 0.341030002), Vec2(0.418269992, 0.359230012), Vec2(0.405030012, 0.358819991), Vec2(0.404920012, 0.340810001), Vec2(0.40546, 0.376670003), Vec2(0.40614, 0.39418), Vec2(0.393269986, 0.393909991), Vec2(0.392369986, 0.376419991), Vec2(0.40614, 0.39418), Vec2(0.407000005, 0.411139995), Vec2(0.394499987, 0.410809994), Vec2(0.393269986, 0.393909991), Vec2(0.419090003, 0.395029992), Vec2(0.419660002, 0.412299991), Vec2(0.407000005, 0.411139995), Vec2(0.40614, 0.39418), Vec2(0.418599993, 0.377279997), Vec2(0.419090003, 0.395029992), Vec2(0.40614, 0.39418), Vec2(0.40546, 0.376670003), Vec2(0.431870013, 0.378129989), Vec2(0.432209998, 0.396259993), Vec2(0.419090003, 0.395029992), Vec2(0.418599993, 0.377279997), Vec2(0.432209998, 0.396259993), Vec2(0.432550013, 0.413989991), Vec2(0.419660002, 0.412299991), Vec2(0.419090003, 0.395029992), Vec2(0.445520014, 0.397650003), Vec2(0.44569999, 0.415879995), Vec2(0.432550013, 0.413989991), Vec2(0.432209998, 0.396259993), Vec2(0.445289999, 0.379079998), Vec2(0.445520014, 0.397650003), Vec2(0.432209998, 0.396259993), Vec2(0.431870013, 0.378129989), Vec2(0.431549996, 0.341219991), Vec2(0.431620002, 0.359739989), Vec2(0.418269992, 0.359230012), Vec2(0.418179989, 0.341030002), Vec2(0.431620002, 0.359739989), Vec2(0.431870013, 0.378129989), Vec2(0.418599993, 0.377279997), Vec2(0.418269992, 0.359230012), Vec2(0.445109993, 0.360289991), Vec2(0.445289999, 0.379079998), Vec2(0.431870013, 0.378129989), Vec2(0.431620002, 0.359739989), Vec2(0.445060015, 0.341390014), Vec2(0.445109993, 0.360289991), Vec2(0.431620002, 0.359739989), Vec2(0.431549996, 0.341219991), Vec2(0.407000005, 0.411139995), Vec2(0.40794, 0.427300006), Vec2(0.395999998, 0.426840007), Vec2(0.394499987, 0.410809994), Vec2(0.40794, 0.427300006), Vec2(0.408710003, 0.442330003), Vec2(0.397700012, 0.441610008), Vec2(0.395999998, 0.426840007), Vec2(0.420139998, 0.42888999), Vec2(0.420249999, 0.44461), Vec2(0.408710003, 0.442330003), Vec2(0.40794, 0.427300006), Vec2(0.419660002, 0.412299991), Vec2(0.420139998, 0.42888999), Vec2(0.40794, 0.427300006), Vec2(0.407000005, 0.411139995), Vec2(0.408710003, 0.442330003), Vec2(0.408850014, 0.455799997), Vec2(0.399419993, 0.454439998), Vec2(0.397700012, 0.441610008), Vec2(0.408850014, 0.455799997), Vec2(0.407389998, 0.467159986), Vec2(0.400750011, 0.463099986), Vec2(0.399419993, 0.454439998), Vec2(0.419539988, 0.45927), Vec2(0.417360008, 0.472730011), Vec2(0.407389998, 0.467159986), Vec2(0.408850014, 0.455799997), Vec2(0.420249999, 0.44461), Vec2(0.419539988, 0.45927), Vec2(0.408850014, 0.455799997), Vec2(0.408710003, 0.442330003), Vec2(0.432429999, 0.447699994), Vec2(0.431360006, 0.463499993), Vec2(0.419539988, 0.45927), Vec2(0.420249999, 0.44461), Vec2(0.431360006, 0.463499993), Vec2(0.429049999, 0.478509992), Vec2(0.417360008, 0.472730011), Vec2(0.419539988, 0.45927), Vec2(0.444110006, 0.467729986), Vec2(0.441960007, 0.483940005), Vec2(0.429049999, 0.478509992), Vec2(0.431360006, 0.463499993), Vec2(0.445230007, 0.450969994), Vec2(0.444110006, 0.467729986), Vec2(0.431360006, 0.463499993), Vec2(0.432429999, 0.447699994), Vec2(0.432550013, 0.413989991), Vec2(0.432709992, 0.431169987), Vec2(0.420139998, 0.42888999), Vec2(0.419660002, 0.412299991), Vec2(0.432709992, 0.431169987), Vec2(0.432429999, 0.447699994), Vec2(0.420249999, 0.44461), Vec2(0.420139998, 0.42888999), Vec2(0.445670009, 0.433670014), Vec2(0.445230007, 0.450969994), Vec2(0.432429999, 0.447699994), Vec2(0.432709992, 0.431169987), Vec2(0.44569999, 0.415879995), Vec2(0.445670009, 0.433670014), Vec2(0.432709992, 0.431169987), Vec2(0.432550013, 0.413989991), Vec2(0.459109992, 0.417690009), Vec2(0.459010005, 0.43603), Vec2(0.445670009, 0.433670014), Vec2(0.44569999, 0.415879995), Vec2(0.459010005, 0.43603), Vec2(0.45855999, 0.453960001), Vec2(0.445230007, 0.450969994), Vec2(0.445670009, 0.433670014), Vec2(0.472640008, 0.437940001), Vec2(0.472290009, 0.456349999), Vec2(0.45855999, 0.453960001), Vec2(0.459010005, 0.43603), Vec2(0.472750008, 0.419200003), Vec2(0.472640008, 0.437940001), Vec2(0.459010005, 0.43603), Vec2(0.459109992, 0.417690009), Vec2(0.45855999, 0.453960001), Vec2(0.457569987, 0.471489996), Vec2(0.444110006, 0.467729986), Vec2(0.445230007, 0.450969994), Vec2(0.457569987, 0.471489996), Vec2(0.455799997, 0.488629997), Vec2(0.441960007, 0.483940005), Vec2(0.444110006, 0.467729986), Vec2(0.471569985, 0.474440008), Vec2(0.470310003, 0.492269993), Vec2(0.455799997, 0.488629997), Vec2(0.457569987, 0.471489996), Vec2(0.472290009, 0.456349999), Vec2(0.471569985, 0.474440008), Vec2(0.457569987, 0.471489996), Vec2(0.45855999, 0.453960001), Vec2(0.48627001, 0.457899988), Vec2(0.485900015, 0.476350009), Vec2(0.471569985, 0.474440008), Vec2(0.472290009, 0.456349999), Vec2(0.485900015, 0.476350009), Vec2(0.485249996, 0.494610012), Vec2(0.470310003, 0.492269993), Vec2(0.471569985, 0.474440008), Vec2(0.500389993, 0.476999998), Vec2(0.500389993, 0.49544999), Vec2(0.485249996, 0.494610012), Vec2(0.485900015, 0.476350009), Vec2(0.500389993, 0.458429992), Vec2(0.500389993, 0.476999998), Vec2(0.485900015, 0.476350009), Vec2(0.48627001, 0.457899988), Vec2(0.486530006, 0.42019999), Vec2(0.48646, 0.439200014), Vec2(0.472640008, 0.437940001), Vec2(0.472750008, 0.419200003), Vec2(0.48646, 0.439200014), Vec2(0.48627001, 0.457899988), Vec2(0.472290009, 0.456349999), Vec2(0.472640008, 0.437940001), Vec2(0.500389993, 0.439639986), Vec2(0.500389993, 0.458429992), Vec2(0.48627001, 0.457899988), Vec2(0.48646, 0.439200014), Vec2(0.500389993, 0.420549989), Vec2(0.500389993, 0.439639986), Vec2(0.48646, 0.439200014), Vec2(0.486530006, 0.42019999), Vec2(0.458730012, 0.341520011), Vec2(0.458759993, 0.360819995), Vec2(0.445109993, 0.360289991), Vec2(0.445060015, 0.341390014), Vec2(0.458759993, 0.360819995), Vec2(0.458889991, 0.380010009), Vec2(0.445289999, 0.379079998), Vec2(0.445109993, 0.360289991), Vec2(0.472550005, 0.361259997), Vec2(0.472629994, 0.380789995), Vec2(0.458889991, 0.380010009), Vec2(0.458759993, 0.360819995), Vec2(0.472530007, 0.341619998), Vec2(0.472550005, 0.361259997), Vec2(0.458759993, 0.360819995), Vec2(0.458730012, 0.341520011), Vec2(0.458889991, 0.380010009), Vec2(0.459039986, 0.398999989), Vec2(0.445520014, 0.397650003), Vec2(0.445289999, 0.379079998), Vec2(0.459039986, 0.398999989), Vec2(0.459109992, 0.417690009), Vec2(0.44569999, 0.415879995), Vec2(0.445520014, 0.397650003), Vec2(0.472719997, 0.400130004), Vec2(0.472750008, 0.419200003), Vec2(0.459109992, 0.417690009), Vec2(0.459039986, 0.398999989), Vec2(0.472629994, 0.380789995), Vec2(0.472719997, 0.400130004), Vec2(0.459039986, 0.398999989), Vec2(0.458889991, 0.380010009), Vec2(0.486479998, 0.38132), Vec2(0.486519992, 0.400889993), Vec2(0.472719997, 0.400130004), Vec2(0.472629994, 0.380789995), Vec2(0.486519992, 0.400889993), Vec2(0.486530006, 0.42019999), Vec2(0.472750008, 0.419200003), Vec2(0.472719997, 0.400130004), Vec2(0.500389993, 0.401169986), Vec2(0.500389993, 0.420549989), Vec2(0.486530006, 0.42019999), Vec2(0.486519992, 0.400889993), Vec2(0.500389993, 0.38150999), Vec2(0.500389993, 0.401169986), Vec2(0.486519992, 0.400889993), Vec2(0.486479998, 0.38132), Vec2(0.486429989, 0.341670007), Vec2(0.486440003, 0.361550003), Vec2(0.472550005, 0.361259997), Vec2(0.472530007, 0.341619998), Vec2(0.486440003, 0.361550003), Vec2(0.486479998, 0.38132), Vec2(0.472629994, 0.380789995), Vec2(0.472550005, 0.361259997), Vec2(0.500389993, 0.361660004), Vec2(0.500389993, 0.38150999), Vec2(0.486479998, 0.38132), Vec2(0.486440003, 0.361550003), Vec2(0.500389993, 0.341690004), Vec2(0.500389993, 0.361660004), Vec2(0.486440003, 0.361550003), Vec2(0.486429989, 0.341670007), Vec2(0.514370024, 0.34167999), Vec2(0.514360011, 0.361570001), Vec2(0.500389993, 0.361660004), Vec2(0.500389993, 0.341690004), Vec2(0.514360011, 0.361570001), Vec2(0.514310002, 0.381350011), Vec2(0.500389993, 0.38150999), Vec2(0.500389993, 0.361660004), Vec2(0.528249979, 0.36135), Vec2(0.528159976, 0.380919993), Vec2(0.514310002, 0.381350011), Vec2(0.514360011, 0.361570001), Vec2(0.52828002, 0.341670007), Vec2(0.528249979, 0.36135), Vec2(0.514360011, 0.361570001), Vec2(0.514370024, 0.34167999), Vec2(0.514310002, 0.381350011), Vec2(0.514259994, 0.400929987), Vec2(0.500389993, 0.401169986), Vec2(0.500389993, 0.38150999), Vec2(0.514259994, 0.400929987), Vec2(0.51424998, 0.420240015), Vec2(0.500389993, 0.420549989), Vec2(0.500389993, 0.401169986), Vec2(0.528069973, 0.400290012), Vec2(0.528020024, 0.419380009), Vec2(0.51424998, 0.420240015), Vec2(0.514259994, 0.400929987), Vec2(0.528159976, 0.380919993), Vec2(0.528069973, 0.400290012), Vec2(0.514259994, 0.400929987), Vec2(0.514310002, 0.381350011), Vec2(0.541880012, 0.380290002), Vec2(0.541719973, 0.399340004), Vec2(0.528069973, 0.400290012), Vec2(0.528159976, 0.380919993), Vec2(0.541719973, 0.399340004), Vec2(0.54163003, 0.418099999), Vec2(0.528020024, 0.419380009), Vec2(0.528069973, 0.400290012), Vec2(0.555180013, 0.398220003), Vec2(0.55497998, 0.41655001), Vec2(0.54163003, 0.418099999), Vec2(0.541719973, 0.399340004), Vec2(0.555419981, 0.379559994), Vec2(0.555180013, 0.398220003), Vec2(0.541719973, 0.399340004), Vec2(0.541880012, 0.380290002), Vec2(0.542050004, 0.341659993), Vec2(0.542010009, 0.361030012), Vec2(0.528249979, 0.36135), Vec2(0.52828002, 0.341670007), Vec2(0.542010009, 0.361030012), Vec2(0.541880012, 0.380290002), Vec2(0.528159976, 0.380919993), Vec2(0.528249979, 0.36135), Vec2(0.555599988, 0.360659987), Vec2(0.555419981, 0.379559994), Vec2(0.541880012, 0.380290002), Vec2(0.542010009, 0.361030012), Vec2(0.555649996, 0.341650009), Vec2(0.555599988, 0.360659987), Vec2(0.542010009, 0.361030012), Vec2(0.542050004, 0.341659993), Vec2(0.51424998, 0.420240015), Vec2(0.514299989, 0.439249992), Vec2(0.500389993, 0.439639986), Vec2(0.500389993, 0.420549989), Vec2(0.514299989, 0.439249992), Vec2(0.514469981, 0.457969993), Vec2(0.500389993, 0.458429992), Vec2(0.500389993, 0.439639986), Vec2(0.528110027, 0.438169986), Vec2(0.528419971, 0.456629992), Vec2(0.514469981, 0.457969993), Vec2(0.514299989, 0.439249992), Vec2(0.528020024, 0.419380009), Vec2(0.528110027, 0.438169986), Vec2(0.514299989, 0.439249992), Vec2(0.51424998, 0.420240015), Vec2(0.514469981, 0.457969993), Vec2(0.51481998, 0.476440012), Vec2(0.500389993, 0.476999998), Vec2(0.500389993, 0.458429992), Vec2(0.51481998, 0.476440012), Vec2(0.51542002, 0.494789988), Vec2(0.500389993, 0.49544999), Vec2(0.500389993, 0.476999998), Vec2(0.529079974, 0.474819988), Vec2(0.530219972, 0.492810011), Vec2(0.51542002, 0.494789988), Vec2(0.51481998, 0.476440012), Vec2(0.528419971, 0.456629992), Vec2(0.529079974, 0.474819988), Vec2(0.51481998, 0.476440012), Vec2(0.514469981, 0.457969993), Vec2(0.542089999, 0.454540014), Vec2(0.542980015, 0.472220004), Vec2(0.529079974, 0.474819988), Vec2(0.528419971, 0.456629992), Vec2(0.542980015, 0.472220004), Vec2(0.544579983, 0.489589989), Vec2(0.530219972, 0.492810011), Vec2(0.529079974, 0.474819988), Vec2(0.556349993, 0.468840003), Vec2(0.558290005, 0.485320002), Vec2(0.544579983, 0.489589989), Vec2(0.542980015, 0.472220004), Vec2(0.555329978, 0.451889992), Vec2(0.556349993, 0.468840003), Vec2(0.542980015, 0.472220004), Vec2(0.542089999, 0.454540014), Vec2(0.54163003, 0.418099999), Vec2(0.541700006, 0.436500013), Vec2(0.528110027, 0.438169986), Vec2(0.528020024, 0.419380009), Vec2(0.541700006, 0.436500013), Vec2(0.542089999, 0.454540014), Vec2(0.528419971, 0.456629992), Vec2(0.528110027, 0.438169986), Vec2(0.554970026, 0.434450001), Vec2(0.555329978, 0.451889992), Vec2(0.542089999, 0.454540014), Vec2(0.541700006, 0.436500013), Vec2(0.55497998, 0.41655001), Vec2(0.554970026, 0.434450001), Vec2(0.541700006, 0.436500013), Vec2(0.54163003, 0.418099999), Vec2(0.568040013, 0.414950013), Vec2(0.56783998, 0.43226999), Vec2(0.554970026, 0.434450001), Vec2(0.55497998, 0.41655001), Vec2(0.56783998, 0.43226999), Vec2(0.568040013, 0.44896999), Vec2(0.555329978, 0.451889992), Vec2(0.554970026, 0.434450001), Vec2(0.58029002, 0.430319995), Vec2(0.580110013, 0.446209997), Vec2(0.568040013, 0.44896999), Vec2(0.56783998, 0.43226999), Vec2(0.58081001, 0.41358), Vec2(0.58029002, 0.430319995), Vec2(0.56783998, 0.43226999), Vec2(0.568040013, 0.414950013), Vec2(0.568040013, 0.44896999), Vec2(0.568989992, 0.464980006), Vec2(0.556349993, 0.468840003), Vec2(0.555329978, 0.451889992), Vec2(0.568989992, 0.464980006), Vec2(0.571099997, 0.480280012), Vec2(0.558290005, 0.485320002), Vec2(0.556349993, 0.468840003), Vec2(0.580709994, 0.461080015), Vec2(0.582710028, 0.474830002), Vec2(0.571099997, 0.480280012), Vec2(0.568989992, 0.464980006), Vec2(0.580110013, 0.446209997), Vec2(0.580709994, 0.461080015), Vec2(0.568989992, 0.464980006), Vec2(0.568040013, 0.44896999), Vec2(0.591530025, 0.444249988), Vec2(0.591300011, 0.457899988), Vec2(0.580709994, 0.461080015), Vec2(0.580110013, 0.446209997), Vec2(0.591300011, 0.457899988), Vec2(0.592630029, 0.469500005), Vec2(0.582710028, 0.474830002), Vec2(0.580709994, 0.461080015), Vec2(0.600619972, 0.456800014), Vec2(0.599250019, 0.465579987), Vec2(0.592630029, 0.469500005), Vec2(0.591300011, 0.457899988), Vec2(0.602400005, 0.443830013), Vec2(0.600619972, 0.456800014), Vec2(0.591300011, 0.457899988), Vec2(0.591530025, 0.444249988), Vec2(0.593330026, 0.412739992), Vec2(0.59236002, 0.429049999), Vec2(0.58029002, 0.430319995), Vec2(0.58081001, 0.41358), Vec2(0.59236002, 0.429049999), Vec2(0.591530025, 0.444249988), Vec2(0.580110013, 0.446209997), Vec2(0.58029002, 0.430319995), Vec2(0.604139984, 0.428909987), Vec2(0.602400005, 0.443830013), Vec2(0.591530025, 0.444249988), Vec2(0.59236002, 0.429049999), Vec2(0.605679989, 0.412710011), Vec2(0.604139984, 0.428909987), Vec2(0.59236002, 0.429049999), Vec2(0.593330026, 0.412739992), Vec2(0.569060028, 0.341659993), Vec2(0.569000006, 0.360320002), Vec2(0.555599988, 0.360659987), Vec2(0.555649996, 0.341650009), Vec2(0.569000006, 0.360320002), Vec2(0.568759978, 0.378839999), Vec2(0.555419981, 0.379559994), Vec2(0.555599988, 0.360659987), Vec2(0.582220018, 0.360040009), Vec2(0.581900001, 0.378259987), Vec2(0.568759978, 0.378839999), Vec2(0.569000006, 0.360320002), Vec2(0.582300007, 0.34167999), Vec2(0.582220018, 0.360040009), Vec2(0.569000006, 0.360320002), Vec2(0.569060028, 0.341659993), Vec2(0.568759978, 0.378839999), Vec2(0.568400025, 0.397100002), Vec2(0.555180013, 0.398220003), Vec2(0.555419981, 0.379559994), Vec2(0.568400025, 0.397100002), Vec2(0.568040013, 0.414950013), Vec2(0.55497998, 0.41655001), Vec2(0.555180013, 0.398220003), Vec2(0.581399977, 0.396160007), Vec2(0.58081001, 0.41358), Vec2(0.568040013, 0.414950013), Vec2(0.568400025, 0.397100002), Vec2(0.581900001, 0.378259987), Vec2(0.581399977, 0.396160007), Vec2(0.568400025, 0.397100002), Vec2(0.568759978, 0.378839999), Vec2(0.594889998, 0.377929986), Vec2(0.594210029, 0.395610005), Vec2(0.581399977, 0.396160007), Vec2(0.581900001, 0.378259987), Vec2(0.594210029, 0.395610005), Vec2(0.593330026, 0.412739992), Vec2(0.58081001, 0.41358), Vec2(0.581399977, 0.396160007), Vec2(0.60690999, 0.395639986), Vec2(0.605679989, 0.412710011), Vec2(0.593330026, 0.412739992), Vec2(0.594210029, 0.395610005), Vec2(0.60781002, 0.37797001), Vec2(0.60690999, 0.395639986), Vec2(0.594210029, 0.395610005), Vec2(0.594889998, 0.377929986), Vec2(0.595399976, 0.341699988), Vec2(0.595300019, 0.359899998), Vec2(0.582220018, 0.360040009), Vec2(0.582300007, 0.34167999), Vec2(0.595300019, 0.359899998), Vec2(0.594889998, 0.377929986), Vec2(0.581900001, 0.378259987), Vec2(0.582220018, 0.360040009), Vec2(0.608319998, 0.359939992), Vec2(0.60781002, 0.37797001), Vec2(0.594889998, 0.377929986), Vec2(0.595300019, 0.359899998), Vec2(0.608460009, 0.341729999), Vec2(0.608319998, 0.359939992), Vec2(0.595300019, 0.359899998), Vec2(0.595399976, 0.341699988), Vec2(0.515349984, 0.188010007), Vec2(0.514750004, 0.20645), Vec2(0.500389993, 0.205939993), Vec2(0.500389993, 0.187380001), Vec2(0.514750004, 0.20645), Vec2(0.514400005, 0.225030005), Vec2(0.500389993, 0.224610001), Vec2(0.500389993, 0.205939993), Vec2(0.528930008, 0.208079994), Vec2(0.528270006, 0.226349995), Vec2(0.514400005, 0.225030005), Vec2(0.514750004, 0.20645), Vec2(0.530099988, 0.190019995), Vec2(0.528930008, 0.208079994), Vec2(0.514750004, 0.20645), Vec2(0.515349984, 0.188010007), Vec2(0.514400005, 0.225030005), Vec2(0.514230013, 0.243839994), Vec2(0.500389993, 0.243509993), Vec2(0.500389993, 0.224610001), Vec2(0.514230013, 0.243839994), Vec2(0.514190018, 0.26293999), Vec2(0.500389993, 0.26267001), Vec2(0.500389993, 0.243509993), Vec2(0.527970016, 0.244910002), Vec2(0.527899981, 0.263770014), Vec2(0.514190018, 0.26293999), Vec2(0.514230013, 0.243839994), Vec2(0.528270006, 0.226349995), Vec2(0.527970016, 0.244910002), Vec2(0.514230013, 0.243839994), Vec2(0.514400005, 0.225030005), Vec2(0.541869998, 0.22845), Vec2(0.541490018, 0.246560007), Vec2(0.527970016, 0.244910002), Vec2(0.528270006, 0.226349995), Vec2(0.541490018, 0.246560007), Vec2(0.54144001, 0.265049994), Vec2(0.527899981, 0.263770014), Vec2(0.527970016, 0.244910002), Vec2(0.554700017, 0.248630002), Vec2(0.554740012, 0.266600013), Vec2(0.54144001, 0.265049994), Vec2(0.541490018, 0.246560007), Vec2(0.555060029, 0.231140003), Vec2(0.554700017, 0.248630002), Vec2(0.541490018, 0.246560007), Vec2(0.541869998, 0.22845), Vec2(0.544420004, 0.193299994), Vec2(0.542779982, 0.210710004), Vec2(0.528930008, 0.208079994), Vec2(0.530099988, 0.190019995), Vec2(0.542779982, 0.210710004), Vec2(0.541869998, 0.22845), Vec2(0.528270006, 0.226349995), Vec2(0.528930008, 0.208079994), Vec2(0.556089997, 0.214139998), Vec2(0.555060029, 0.231140003), Vec2(0.541869998, 0.22845), Vec2(0.542779982, 0.210710004), Vec2(0.558099985, 0.19765), Vec2(0.556089997, 0.214139998), Vec2(0.542779982, 0.210710004), Vec2(0.544420004, 0.193299994), Vec2(0.514190018, 0.26293999), Vec2(0.514219999, 0.282319993), Vec2(0.500389993, 0.282130003), Vec2(0.500389993, 0.26267001), Vec2(0.514219999, 0.282319993), Vec2(0.514280021, 0.301959991), Vec2(0.500389993, 0.301829994), Vec2(0.500389993, 0.282130003), Vec2(0.527970016, 0.28294), Vec2(0.528100014, 0.302370012), Vec2(0.514280021, 0.301959991), Vec2(0.514219999, 0.282319993), Vec2(0.527899981, 0.263770014), Vec2(0.527970016, 0.28294), Vec2(0.514219999, 0.282319993), Vec2(0.514190018, 0.26293999), Vec2(0.514280021, 0.301959991), Vec2(0.514339983, 0.321770012), Vec2(0.500389993, 0.321709991), Vec2(0.500389993, 0.301829994), Vec2(0.514339983, 0.321770012), Vec2(0.514370024, 0.34167999), Vec2(0.500389993, 0.341690004), Vec2(0.500389993, 0.321709991), Vec2(0.528219998, 0.321969986), Vec2(0.52828002, 0.341670007), Vec2(0.514370024, 0.34167999), Vec2(0.514339983, 0.321770012), Vec2(0.528100014, 0.302370012), Vec2(0.528219998, 0.321969986), Vec2(0.514339983, 0.321770012), Vec2(0.514280021, 0.301959991), Vec2(0.541779995, 0.302980006), Vec2(0.541960001, 0.322270006), Vec2(0.528219998, 0.321969986), Vec2(0.528100014, 0.302370012), Vec2(0.541960001, 0.322270006), Vec2(0.542050004, 0.341659993), Vec2(0.52828002, 0.341670007), Vec2(0.528219998, 0.321969986), Vec2(0.555530012, 0.322629988), Vec2(0.555649996, 0.341650009), Vec2(0.542050004, 0.341659993), Vec2(0.541960001, 0.322270006), Vec2(0.55528003, 0.303710014), Vec2(0.555530012, 0.322629988), Vec2(0.541960001, 0.322270006), Vec2(0.541779995, 0.302980006), Vec2(0.54144001, 0.265049994), Vec2(0.541580021, 0.283870012), Vec2(0.527970016, 0.28294), Vec2(0.527899981, 0.263770014), Vec2(0.541580021, 0.283870012), Vec2(0.541779995, 0.302980006), Vec2(0.528100014, 0.302370012), Vec2(0.527970016, 0.28294), Vec2(0.55497998, 0.284990013), Vec2(0.55528003, 0.303710014), Vec2(0.541779995, 0.302980006), Vec2(0.541580021, 0.283870012), Vec2(0.554740012, 0.266600013), Vec2(0.55497998, 0.284990013), Vec2(0.541580021, 0.283870012), Vec2(0.54144001, 0.265049994), Vec2(0.567749977, 0.268229991), Vec2(0.568159997, 0.286139995), Vec2(0.55497998, 0.284990013), Vec2(0.554740012, 0.266600013), Vec2(0.568159997, 0.286139995), Vec2(0.568579972, 0.304439992), Vec2(0.55528003, 0.303710014), Vec2(0.55497998, 0.284990013), Vec2(0.581120014, 0.287120014), Vec2(0.581700027, 0.305070013), Vec2(0.568579972, 0.304439992), Vec2(0.568159997, 0.286139995), Vec2(0.58047998, 0.269659996), Vec2(0.581120014, 0.287120014), Vec2(0.568159997, 0.286139995), Vec2(0.567749977, 0.268229991), Vec2(0.568579972, 0.304439992), Vec2(0.568910003, 0.32299), Vec2(0.555530012, 0.322629988), Vec2(0.55528003, 0.303710014), Vec2(0.568910003, 0.32299), Vec2(0.569060028, 0.341659993), Vec2(0.555649996, 0.341650009), Vec2(0.555530012, 0.322629988), Vec2(0.582109988, 0.323300004), Vec2(0.582300007, 0.34167999), Vec2(0.569060028, 0.341659993), Vec2(0.568910003, 0.32299), Vec2(0.581700027, 0.305070013), Vec2(0.582109988, 0.323300004), Vec2(0.568910003, 0.32299), Vec2(0.568579972, 0.304439992), Vec2(0.594669998, 0.305449992), Vec2(0.595189989, 0.323500007), Vec2(0.582109988, 0.323300004), Vec2(0.581700027, 0.305070013), Vec2(0.595189989, 0.323500007), Vec2(0.595399976, 0.341699988), Vec2(0.582300007, 0.34167999), Vec2(0.582109988, 0.323300004), Vec2(0.608200014, 0.323529989), Vec2(0.608460009, 0.341729999), Vec2(0.595399976, 0.341699988), Vec2(0.595189989, 0.323500007), Vec2(0.607569993, 0.305489987), Vec2(0.608200014, 0.323529989), Vec2(0.595189989, 0.323500007), Vec2(0.594669998, 0.305449992), Vec2(0.59296, 0.270579994), Vec2(0.593900025, 0.287739992), Vec2(0.581120014, 0.287120014), Vec2(0.58047998, 0.269659996), Vec2(0.593900025, 0.287739992), Vec2(0.594669998, 0.305449992), Vec2(0.581700027, 0.305070013), Vec2(0.581120014, 0.287120014), Vec2(0.606580019, 0.287800014), Vec2(0.607569993, 0.305489987), Vec2(0.594669998, 0.305449992), Vec2(0.593900025, 0.287739992), Vec2(0.605279982, 0.270709991), Vec2(0.606580019, 0.287800014), Vec2(0.593900025, 0.287739992), Vec2(0.59296, 0.270579994), Vec2(0.570869982, 0.202779993), Vec2(0.568690002, 0.21807), Vec2(0.556089997, 0.214139998), Vec2(0.558099985, 0.19765), Vec2(0.568690002, 0.21807), Vec2(0.567719996, 0.234109998), Vec2(0.555060029, 0.231140003), Vec2(0.556089997, 0.214139998), Vec2(0.580380023, 0.222039998), Vec2(0.579750001, 0.236929998), Vec2(0.567719996, 0.234109998), Vec2(0.568690002, 0.21807), Vec2(0.582449973, 0.208340004), Vec2(0.580380023, 0.222039998), Vec2(0.568690002, 0.21807), Vec2(0.570869982, 0.202779993), Vec2(0.567719996, 0.234109998), Vec2(0.567520022, 0.250849992), Vec2(0.554700017, 0.248630002), Vec2(0.555060029, 0.231140003), Vec2(0.567520022, 0.250849992), Vec2(0.567749977, 0.268229991), Vec2(0.554740012, 0.266600013), Vec2(0.554700017, 0.248630002), Vec2(0.579930007, 0.25286001), Vec2(0.58047998, 0.269659996), Vec2(0.567749977, 0.268229991), Vec2(0.567520022, 0.250849992), Vec2(0.579750001, 0.236929998), Vec2(0.579930007, 0.25286001), Vec2(0.567520022, 0.250849992), Vec2(0.567719996, 0.234109998), Vec2(0.591139972, 0.238989994), Vec2(0.591960013, 0.254220009), Vec2(0.579930007, 0.25286001), Vec2(0.579750001, 0.236929998), Vec2(0.591960013, 0.254220009), Vec2(0.59296, 0.270579994), Vec2(0.58047998, 0.269659996), Vec2(0.579930007, 0.25286001), Vec2(0.603709996, 0.254489988), Vec2(0.605279982, 0.270709991), Vec2(0.59296, 0.270579994), Vec2(0.591960013, 0.254220009), Vec2(0.601979971, 0.239529997), Vec2(0.603709996, 0.254489988), Vec2(0.591960013, 0.254220009), Vec2(0.591139972, 0.238989994), Vec2(0.592339993, 0.213760003), Vec2(0.590939999, 0.225309998), Vec2(0.580380023, 0.222039998), Vec2(0.582449973, 0.208340004), Vec2(0.590939999, 0.225309998), Vec2(0.591139972, 0.238989994), Vec2(0.579750001, 0.236929998), Vec2(0.580380023, 0.222039998), Vec2(0.600239992, 0.226530001), Vec2(0.601979971, 0.239529997), Vec2(0.591139972, 0.238989994), Vec2(0.590939999, 0.225309998), Vec2(0.598919988, 0.217739999), Vec2(0.600239992, 0.226530001), Vec2(0.590939999, 0.225309998), Vec2(0.592339993, 0.213760003), Vec2(0.604160011, 0.213080004), Vec2(0.609080017, 0.224439994), Vec2(0.600239992, 0.226530001), Vec2(0.598919988, 0.217739999), Vec2(0.609080017, 0.224439994), Vec2(0.612609982, 0.238089994), Vec2(0.601979971, 0.239529997), Vec2(0.600239992, 0.226530001), Vec2(0.618579984, 0.220070004), Vec2(0.623449981, 0.234990001), Vec2(0.612609982, 0.238089994), Vec2(0.609080017, 0.224439994), Vec2(0.612079978, 0.206560001), Vec2(0.618579984, 0.220070004), Vec2(0.609080017, 0.224439994), Vec2(0.604160011, 0.213080004), Vec2(0.612609982, 0.238089994), Vec2(0.615369976, 0.253399998), Vec2(0.603709996, 0.254489988), Vec2(0.601979971, 0.239529997), Vec2(0.615369976, 0.253399998), Vec2(0.617569983, 0.269879997), Vec2(0.605279982, 0.270709991), Vec2(0.603709996, 0.254489988), Vec2(0.627149999, 0.251120001), Vec2(0.629980028, 0.268189996), Vec2(0.617569983, 0.269879997), Vec2(0.615369976, 0.253399998), Vec2(0.623449981, 0.234990001), Vec2(0.627149999, 0.251120001), Vec2(0.615369976, 0.253399998), Vec2(0.612609982, 0.238089994), Vec2(0.634760022, 0.230949998), Vec2(0.639219999, 0.248050004), Vec2(0.627149999, 0.251120001), Vec2(0.623449981, 0.234990001), Vec2(0.639219999, 0.248050004), Vec2(0.642620027, 0.265899986), Vec2(0.629980028, 0.268189996), Vec2(0.627149999, 0.251120001), Vec2(0.651730001, 0.244619995), Vec2(0.655610025, 0.263289988), Vec2(0.642620027, 0.265899986), Vec2(0.639219999, 0.248050004), Vec2(0.646690011, 0.226569995), Vec2(0.651730001, 0.244619995), Vec2(0.639219999, 0.248050004), Vec2(0.634760022, 0.230949998), Vec2(0.621510029, 0.199560001), Vec2(0.628970027, 0.214750007), Vec2(0.618579984, 0.220070004), Vec2(0.612079978, 0.206560001), Vec2(0.628970027, 0.214750007), Vec2(0.634760022, 0.230949998), Vec2(0.623449981, 0.234990001), Vec2(0.618579984, 0.220070004), Vec2(0.640259981, 0.209220007), Vec2(0.646690011, 0.226569995), Vec2(0.634760022, 0.230949998), Vec2(0.628970027, 0.214750007), Vec2(0.632189989, 0.192650005), Vec2(0.640259981, 0.209220007), Vec2(0.628970027, 0.214750007), Vec2(0.621510029, 0.199560001), Vec2(0.617569983, 0.269879997), Vec2(0.619279981, 0.287209988), Vec2(0.606580019, 0.287800014), Vec2(0.605279982, 0.270709991), Vec2(0.619279981, 0.287209988), Vec2(0.620509982, 0.305099994), Vec2(0.607569993, 0.305489987), Vec2(0.606580019, 0.287800014), Vec2(0.632099986, 0.286000013), Vec2(0.633580029, 0.304329991), Vec2(0.620509982, 0.305099994), Vec2(0.619279981, 0.287209988), Vec2(0.629980028, 0.268189996), Vec2(0.632099986, 0.286000013), Vec2(0.619279981, 0.287209988), Vec2(0.617569983, 0.269879997), Vec2(0.620509982, 0.305099994), Vec2(0.621259987, 0.323350012), Vec2(0.608200014, 0.323529989), Vec2(0.607569993, 0.305489987), Vec2(0.621259987, 0.323350012), Vec2(0.621559978, 0.341769993), Vec2(0.608460009, 0.341729999), Vec2(0.608200014, 0.323529989), Vec2(0.63448, 0.32299), Vec2(0.634819984, 0.341800004), Vec2(0.621559978, 0.341769993), Vec2(0.621259987, 0.323350012), Vec2(0.633580029, 0.304329991), Vec2(0.63448, 0.32299), Vec2(0.621259987, 0.323350012), Vec2(0.620509982, 0.305099994), Vec2(0.646889985, 0.303279996), Vec2(0.647930026, 0.322479993), Vec2(0.63448, 0.32299), Vec2(0.633580029, 0.304329991), Vec2(0.647930026, 0.322479993), Vec2(0.648320019, 0.341820002), Vec2(0.634819984, 0.341800004), Vec2(0.63448, 0.32299), Vec2(0.661679983, 0.321880013), Vec2(0.662109971, 0.341839999), Vec2(0.648320019, 0.341820002), Vec2(0.647930026, 0.322479993), Vec2(0.660489976, 0.302049994), Vec2(0.661679983, 0.321880013), Vec2(0.647930026, 0.322479993), Vec2(0.646889985, 0.303279996), Vec2(0.642620027, 0.265899986), Vec2(0.645139992, 0.284359992), Vec2(0.632099986, 0.286000013), Vec2(0.629980028, 0.268189996), Vec2(0.645139992, 0.284359992), Vec2(0.646889985, 0.303279996), Vec2(0.633580029, 0.304329991), Vec2(0.632099986, 0.286000013), Vec2(0.658490002, 0.282469988), Vec2(0.660489976, 0.302049994), Vec2(0.646889985, 0.303279996), Vec2(0.645139992, 0.284359992), Vec2(0.655610025, 0.263289988), Vec2(0.658490002, 0.282469988), Vec2(0.645139992, 0.284359992), Vec2(0.642620027, 0.265899986), Vec2(0.668990016, 0.260639995), Vec2(0.672190011, 0.280519992), Vec2(0.658490002, 0.282469988), Vec2(0.655610025, 0.263289988), Vec2(0.672190011, 0.280519992), Vec2(0.674409986, 0.300760001), Vec2(0.660489976, 0.302049994), Vec2(0.658490002, 0.282469988), Vec2(0.686230004, 0.278679997), Vec2(0.688660026, 0.299529999), Vec2(0.674409986, 0.300760001), Vec2(0.672190011, 0.280519992), Vec2(0.682789981, 0.258159995), Vec2(0.686230004, 0.278679997), Vec2(0.672190011, 0.280519992), Vec2(0.668990016, 0.260639995), Vec2(0.674409986, 0.300760001), Vec2(0.675740004, 0.321240008), Vec2(0.661679983, 0.321880013), Vec2(0.660489976, 0.302049994), Vec2(0.675740004, 0.321240008), Vec2(0.67622, 0.341839999), Vec2(0.662109971, 0.341839999), Vec2(0.661679983, 0.321880013), Vec2(0.690119982, 0.320630014), Vec2(0.690649986, 0.341839999), Vec2(0.67622, 0.341839999), Vec2(0.675740004, 0.321240008), Vec2(0.688660026, 0.299529999), Vec2(0.690119982, 0.320630014), Vec2(0.675740004, 0.321240008), Vec2(0.674409986, 0.300760001), Vec2(0.703209996, 0.29846999), Vec2(0.704789996, 0.320089996), Vec2(0.690119982, 0.320630014), Vec2(0.688660026, 0.299529999), Vec2(0.704789996, 0.320089996), Vec2(0.705359995, 0.341829985), Vec2(0.690649986, 0.341839999), Vec2(0.690119982, 0.320630014), Vec2(0.719709992, 0.319680005), Vec2(0.720319986, 0.341809988), Vec2(0.705359995, 0.341829985), Vec2(0.704789996, 0.320089996), Vec2(0.718029976, 0.297670007), Vec2(0.719709992, 0.319680005), Vec2(0.704789996, 0.320089996), Vec2(0.703209996, 0.29846999), Vec2(0.696969986, 0.256069988), Vec2(0.700609982, 0.277099997), Vec2(0.686230004, 0.278679997), Vec2(0.682789981, 0.258159995), Vec2(0.700609982, 0.277099997), Vec2(0.703209996, 0.29846999), Vec2(0.688660026, 0.299529999), Vec2(0.686230004, 0.278679997), Vec2(0.71529001, 0.275920004), Vec2(0.718029976, 0.297670007), Vec2(0.703209996, 0.29846999), Vec2(0.700609982, 0.277099997), Vec2(0.711520016, 0.254500002), Vec2(0.71529001, 0.275920004), Vec2(0.700609982, 0.277099997), Vec2(0.696969986, 0.256069988), Vec2(0.643999994, 0.186210006), Vec2(0.652450025, 0.203940004), Vec2(0.640259981, 0.209220007), Vec2(0.632189989, 0.192650005), Vec2(0.652450025, 0.203940004), Vec2(0.659280002, 0.222289994), Vec2(0.646690011, 0.226569995), Vec2(0.640259981, 0.209220007), Vec2(0.665480018, 0.199249998), Vec2(0.672529995, 0.218419999), Vec2(0.659280002, 0.222289994), Vec2(0.652450025, 0.203940004), Vec2(0.656889975, 0.180539995), Vec2(0.665480018, 0.199249998), Vec2(0.652450025, 0.203940004), Vec2(0.643999994, 0.186210006), Vec2(0.659280002, 0.222289994), Vec2(0.664730012, 0.2412), Vec2(0.651730001, 0.244619995), Vec2(0.646690011, 0.226569995), Vec2(0.664730012, 0.2412), Vec2(0.668990016, 0.260639995), Vec2(0.655610025, 0.263289988), Vec2(0.651730001, 0.244619995), Vec2(0.678250015, 0.238059998), Vec2(0.682789981, 0.258159995), Vec2(0.668990016, 0.260639995), Vec2(0.664730012, 0.2412), Vec2(0.672529995, 0.218419999), Vec2(0.678250015, 0.238059998), Vec2(0.664730012, 0.2412), Vec2(0.659280002, 0.222289994), Vec2(0.686399996, 0.215200007), Vec2(0.692260027, 0.235430002), Vec2(0.678250015, 0.238059998), Vec2(0.672529995, 0.218419999), Vec2(0.692260027, 0.235430002), Vec2(0.696969986, 0.256069988), Vec2(0.682789981, 0.258159995), Vec2(0.678250015, 0.238059998), Vec2(0.706700027, 0.233459994), Vec2(0.711520016, 0.254500002), Vec2(0.696969986, 0.256069988), Vec2(0.692260027, 0.235430002), Vec2(0.700839996, 0.212830007), Vec2(0.706700027, 0.233459994), Vec2(0.692260027, 0.235430002), Vec2(0.686399996, 0.215200007), Vec2(0.670799971, 0.175909996), Vec2(0.679310024, 0.195380002), Vec2(0.665480018, 0.199249998), Vec2(0.656889975, 0.180539995), Vec2(0.679310024, 0.195380002), Vec2(0.686399996, 0.215200007), Vec2(0.672529995, 0.218419999), Vec2(0.665480018, 0.199249998), Vec2(0.693859994, 0.192540005), Vec2(0.700839996, 0.212830007), Vec2(0.686399996, 0.215200007), Vec2(0.679310024, 0.195380002), Vec2(0.685660005, 0.172519997), Vec2(0.693859994, 0.192540005), Vec2(0.679310024, 0.195380002), Vec2(0.670799971, 0.175909996), Vec2(0.621559978, 0.341769993), Vec2(0.621389985, 0.360179991), Vec2(0.608319998, 0.359939992), Vec2(0.608460009, 0.341729999), Vec2(0.621389985, 0.360179991), Vec2(0.62075001, 0.378430009), Vec2(0.60781002, 0.37797001), Vec2(0.608319998, 0.359939992), Vec2(0.634609997, 0.360610008), Vec2(0.633840024, 0.379260004), Vec2(0.62075001, 0.378430009), Vec2(0.621389985, 0.360179991), Vec2(0.634819984, 0.341800004), Vec2(0.634609997, 0.360610008), Vec2(0.621389985, 0.360179991), Vec2(0.621559978, 0.341769993), Vec2(0.62075001, 0.378430009), Vec2(0.619620025, 0.396319985), Vec2(0.60690999, 0.395639986), Vec2(0.60781002, 0.37797001), Vec2(0.619620025, 0.396319985), Vec2(0.617980003, 0.413639992), Vec2(0.605679989, 0.412710011), Vec2(0.60690999, 0.395639986), Vec2(0.632449985, 0.397599995), Vec2(0.630400002, 0.415399998), Vec2(0.617980003, 0.413639992), Vec2(0.619620025, 0.396319985), Vec2(0.633840024, 0.379260004), Vec2(0.632449985, 0.397599995), Vec2(0.619620025, 0.396319985), Vec2(0.62075001, 0.378430009), Vec2(0.64714998, 0.380369991), Vec2(0.645500004, 0.399289995), Vec2(0.632449985, 0.397599995), Vec2(0.633840024, 0.379260004), Vec2(0.645500004, 0.399289995), Vec2(0.643050015, 0.417750001), Vec2(0.630400002, 0.415399998), Vec2(0.632449985, 0.397599995), Vec2(0.658850014, 0.40121001), Vec2(0.656040013, 0.420399994), Vec2(0.643050015, 0.417750001), Vec2(0.645500004, 0.399289995), Vec2(0.660749972, 0.381630003), Vec2(0.658850014, 0.40121001), Vec2(0.645500004, 0.399289995), Vec2(0.64714998, 0.380369991), Vec2(0.648320019, 0.341820002), Vec2(0.648069978, 0.36116001), Vec2(0.634609997, 0.360610008), Vec2(0.634819984, 0.341800004), Vec2(0.648069978, 0.36116001), Vec2(0.64714998, 0.380369991), Vec2(0.633840024, 0.379260004), Vec2(0.634609997, 0.360610008), Vec2(0.661809981, 0.361799985), Vec2(0.660749972, 0.381630003), Vec2(0.64714998, 0.380369991), Vec2(0.648069978, 0.36116001), Vec2(0.662109971, 0.341839999), Vec2(0.661809981, 0.361799985), Vec2(0.648069978, 0.36116001), Vec2(0.648320019, 0.341820002), Vec2(0.617980003, 0.413639992), Vec2(0.615819991, 0.430110008), Vec2(0.604139984, 0.428909987), Vec2(0.605679989, 0.412710011), Vec2(0.615819991, 0.430110008), Vec2(0.613049984, 0.445389986), Vec2(0.602400005, 0.443830013), Vec2(0.604139984, 0.428909987), Vec2(0.627600014, 0.432469994), Vec2(0.623899996, 0.448570013), Vec2(0.613049984, 0.445389986), Vec2(0.615819991, 0.430110008), Vec2(0.630400002, 0.415399998), Vec2(0.627600014, 0.432469994), Vec2(0.615819991, 0.430110008), Vec2(0.617980003, 0.413639992), Vec2(0.613049984, 0.445389986), Vec2(0.60947001, 0.458999991), Vec2(0.600619972, 0.456800014), Vec2(0.602400005, 0.443830013), Vec2(0.60947001, 0.458999991), Vec2(0.604449987, 0.47025001), Vec2(0.599250019, 0.465579987), Vec2(0.600619972, 0.456800014), Vec2(0.618969977, 0.463429987), Vec2(0.612360001, 0.476819992), Vec2(0.604449987, 0.47025001), Vec2(0.60947001, 0.458999991), Vec2(0.623899996, 0.448570013), Vec2(0.618969977, 0.463429987), Vec2(0.60947001, 0.458999991), Vec2(0.613049984, 0.445389986), Vec2(0.635219991, 0.452659994), Vec2(0.629369974, 0.468800008), Vec2(0.618969977, 0.463429987), Vec2(0.623899996, 0.448570013), Vec2(0.629369974, 0.468800008), Vec2(0.621800005, 0.483859986), Vec2(0.612360001, 0.476819992), Vec2(0.618969977, 0.463429987), Vec2(0.640680015, 0.474359989), Vec2(0.632510006, 0.490810007), Vec2(0.621800005, 0.483859986), Vec2(0.629369974, 0.468800008), Vec2(0.64714998, 0.457069993), Vec2(0.640680015, 0.474359989), Vec2(0.629369974, 0.468800008), Vec2(0.635219991, 0.452659994), Vec2(0.643050015, 0.417750001), Vec2(0.639680028, 0.435589999), Vec2(0.627600014, 0.432469994), Vec2(0.630400002, 0.415399998), Vec2(0.639680028, 0.435589999), Vec2(0.635219991, 0.452659994), Vec2(0.623899996, 0.448570013), Vec2(0.627600014, 0.432469994), Vec2(0.652199984, 0.439049989), Vec2(0.64714998, 0.457069993), Vec2(0.635219991, 0.452659994), Vec2(0.639680028, 0.435589999), Vec2(0.656040013, 0.420399994), Vec2(0.652199984, 0.439049989), Vec2(0.639680028, 0.435589999), Vec2(0.643050015, 0.417750001), Vec2(0.669430017, 0.42306), Vec2(0.665210009, 0.442490011), Vec2(0.652199984, 0.439049989), Vec2(0.656040013, 0.420399994), Vec2(0.665210009, 0.442490011), Vec2(0.659759998, 0.461369991), Vec2(0.64714998, 0.457069993), Vec2(0.652199984, 0.439049989), Vec2(0.678749979, 0.44562), Vec2(0.673039973, 0.465229988), Vec2(0.659759998, 0.461369991), Vec2(0.665210009, 0.442490011), Vec2(0.683239996, 0.425529987), Vec2(0.678749979, 0.44562), Vec2(0.665210009, 0.442490011), Vec2(0.669430017, 0.42306), Vec2(0.659759998, 0.461369991), Vec2(0.652890027, 0.479649991), Vec2(0.640680015, 0.474359989), Vec2(0.64714998, 0.457069993), Vec2(0.652890027, 0.479649991), Vec2(0.644360006, 0.497269988), Vec2(0.632510006, 0.490810007), Vec2(0.640680015, 0.474359989), Vec2(0.665960014, 0.484349996), Vec2(0.657299995, 0.502950013), Vec2(0.644360006, 0.497269988), Vec2(0.652890027, 0.479649991), Vec2(0.673039973, 0.465229988), Vec2(0.665960014, 0.484349996), Vec2(0.652890027, 0.479649991), Vec2(0.659759998, 0.461369991), Vec2(0.686940014, 0.468430012), Vec2(0.679830015, 0.488200009), Vec2(0.665960014, 0.484349996), Vec2(0.673039973, 0.465229988), Vec2(0.679830015, 0.488200009), Vec2(0.671270013, 0.507589996), Vec2(0.657299995, 0.502950013), Vec2(0.665960014, 0.484349996), Vec2(0.694429994, 0.491030008), Vec2(0.686190009, 0.51098001), Vec2(0.671270013, 0.507589996), Vec2(0.679830015, 0.488200009), Vec2(0.701409996, 0.470789999), Vec2(0.694429994, 0.491030008), Vec2(0.679830015, 0.488200009), Vec2(0.686940014, 0.468430012), Vec2(0.697440028, 0.42761001), Vec2(0.692780018, 0.448240012), Vec2(0.678749979, 0.44562), Vec2(0.683239996, 0.425529987), Vec2(0.692780018, 0.448240012), Vec2(0.686940014, 0.468430012), Vec2(0.673039973, 0.465229988), Vec2(0.678749979, 0.44562), Vec2(0.707249999, 0.45017001), Vec2(0.701409996, 0.470789999), Vec2(0.686940014, 0.468430012), Vec2(0.692780018, 0.448240012), Vec2(0.712010026, 0.429140002), Vec2(0.707249999, 0.45017001), Vec2(0.692780018, 0.448240012), Vec2(0.697440028, 0.42761001), Vec2(0.67622, 0.341839999), Vec2(0.675880015, 0.36243999), Vec2(0.661809981, 0.361799985), Vec2(0.662109971, 0.341839999), Vec2(0.675880015, 0.36243999), Vec2(0.674679995, 0.382930011), Vec2(0.660749972, 0.381630003), Vec2(0.661809981, 0.361799985), Vec2(0.690259993, 0.363059998), Vec2(0.688929975, 0.384149998), Vec2(0.674679995, 0.382930011), Vec2(0.675880015, 0.36243999), Vec2(0.690649986, 0.341839999), Vec2(0.690259993, 0.363059998), Vec2(0.675880015, 0.36243999), Vec2(0.67622, 0.341839999), Vec2(0.674679995, 0.382930011), Vec2(0.672550023, 0.403180003), Vec2(0.658850014, 0.40121001), Vec2(0.660749972, 0.381630003), Vec2(0.672550023, 0.403180003), Vec2(0.669430017, 0.42306), Vec2(0.656040013, 0.420399994), Vec2(0.658850014, 0.40121001), Vec2(0.686609983, 0.405010015), Vec2(0.683239996, 0.425529987), Vec2(0.669430017, 0.42306), Vec2(0.672550023, 0.403180003), Vec2(0.688929975, 0.384149998), Vec2(0.686609983, 0.405010015), Vec2(0.672550023, 0.403180003), Vec2(0.674679995, 0.382930011), Vec2(0.703480005, 0.38519001), Vec2(0.700999975, 0.406569988), Vec2(0.686609983, 0.405010015), Vec2(0.688929975, 0.384149998), Vec2(0.700999975, 0.406569988), Vec2(0.697440028, 0.42761001), Vec2(0.683239996, 0.425529987), Vec2(0.686609983, 0.405010015), Vec2(0.715690017, 0.40772), Vec2(0.712010026, 0.429140002), Vec2(0.697440028, 0.42761001), Vec2(0.700999975, 0.406569988), Vec2(0.718309999, 0.385960013), Vec2(0.715690017, 0.40772), Vec2(0.700999975, 0.406569988), Vec2(0.703480005, 0.38519001), Vec2(0.705359995, 0.341829985), Vec2(0.704930007, 0.363570005), Vec2(0.690259993, 0.363059998), Vec2(0.690649986, 0.341839999), Vec2(0.704930007, 0.363570005), Vec2(0.703480005, 0.38519001), Vec2(0.688929975, 0.384149998), Vec2(0.690259993, 0.363059998), Vec2(0.719850004, 0.363950014), Vec2(0.718309999, 0.385960013), Vec2(0.703480005, 0.38519001), Vec2(0.704930007, 0.363570005), Vec2(0.720319986, 0.341809988), Vec2(0.719850004, 0.363950014), Vec2(0.704930007, 0.363570005), Vec2(0.705359995, 0.341829985), Vec2(0.735469997, 0.341789991), Vec2(0.734979987, 0.364160001), Vec2(0.719850004, 0.363950014), Vec2(0.720319986, 0.341809988), Vec2(0.734979987, 0.364160001), Vec2(0.733349979, 0.386409998), Vec2(0.718309999, 0.385960013), Vec2(0.719850004, 0.363950014), Vec2(0.750240028, 0.364219993), Vec2(0.748560011, 0.386559993), Vec2(0.733349979, 0.386409998), Vec2(0.734979987, 0.364160001), Vec2(0.750760019, 0.34176001), Vec2(0.750240028, 0.364219993), Vec2(0.734979987, 0.364160001), Vec2(0.735469997, 0.341789991), Vec2(0.733349979, 0.386409998), Vec2(0.730639994, 0.408399999), Vec2(0.715690017, 0.40772), Vec2(0.718309999, 0.385960013), Vec2(0.730639994, 0.408399999), Vec2(0.726880014, 0.430059999), Vec2(0.712010026, 0.429140002), Vec2(0.715690017, 0.40772), Vec2(0.745779991, 0.408650011), Vec2(0.741980016, 0.43039), Vec2(0.726880014, 0.430059999), Vec2(0.730639994, 0.408399999), Vec2(0.748560011, 0.386559993), Vec2(0.745779991, 0.408650011), Vec2(0.730639994, 0.408399999), Vec2(0.733349979, 0.386409998), Vec2(0.763859987, 0.386510015), Vec2(0.761030018, 0.408580005), Vec2(0.745779991, 0.408650011), Vec2(0.748560011, 0.386559993), Vec2(0.761030018, 0.408580005), Vec2(0.757200003, 0.430269986), Vec2(0.741980016, 0.43039), Vec2(0.745779991, 0.408650011), Vec2(0.776319981, 0.408340007), Vec2(0.772440016, 0.429879993), Vec2(0.757200003, 0.430269986), Vec2(0.761030018, 0.408580005), Vec2(0.779209971, 0.386370003), Vec2(0.776319981, 0.408340007), Vec2(0.761030018, 0.408580005), Vec2(0.763859987, 0.386510015), Vec2(0.766129971, 0.341720015), Vec2(0.765590012, 0.364190012), Vec2(0.750240028, 0.364219993), Vec2(0.750760019, 0.34176001), Vec2(0.765590012, 0.364190012), Vec2(0.763859987, 0.386510015), Vec2(0.748560011, 0.386559993), Vec2(0.750240028, 0.364219993), Vec2(0.780990005, 0.364100009), Vec2(0.779209971, 0.386370003), Vec2(0.763859987, 0.386510015), Vec2(0.765590012, 0.364190012), Vec2(0.78154999, 0.341690004), Vec2(0.780990005, 0.364100009), Vec2(0.765590012, 0.364190012), Vec2(0.766129971, 0.341720015), Vec2(0.726880014, 0.430059999), Vec2(0.722109973, 0.451330006), Vec2(0.707249999, 0.45017001), Vec2(0.712010026, 0.429140002), Vec2(0.722109973, 0.451330006), Vec2(0.716369987, 0.472200006), Vec2(0.701409996, 0.470789999), Vec2(0.707249999, 0.45017001), Vec2(0.73724997, 0.451739997), Vec2(0.73168999, 0.472680002), Vec2(0.716369987, 0.472200006), Vec2(0.722109973, 0.451330006), Vec2(0.741980016, 0.43039), Vec2(0.73724997, 0.451739997), Vec2(0.722109973, 0.451330006), Vec2(0.726880014, 0.430059999), Vec2(0.716369987, 0.472200006), Vec2(0.709670007, 0.492729992), Vec2(0.694429994, 0.491030008), Vec2(0.701409996, 0.470789999), Vec2(0.709670007, 0.492729992), Vec2(0.701950014, 0.513010025), Vec2(0.686190009, 0.51098001), Vec2(0.694429994, 0.491030008), Vec2(0.725380003, 0.493279994), Vec2(0.718360007, 0.513629973), Vec2(0.701950014, 0.513010025), Vec2(0.709670007, 0.492729992), Vec2(0.73168999, 0.472680002), Vec2(0.725380003, 0.493279994), Vec2(0.709670007, 0.492729992), Vec2(0.716369987, 0.472200006), Vec2(0.747179985, 0.472339988), Vec2(0.741330028, 0.492760003), Vec2(0.725380003, 0.493279994), Vec2(0.73168999, 0.472680002), Vec2(0.741330028, 0.492760003), Vec2(0.73514998, 0.512889981), Vec2(0.718360007, 0.513629973), Vec2(0.725380003, 0.493279994), Vec2(0.757239997, 0.491329998), Vec2(0.751950026, 0.510909975), Vec2(0.73514998, 0.512889981), Vec2(0.741330028, 0.492760003), Vec2(0.762629986, 0.471359998), Vec2(0.757239997, 0.491329998), Vec2(0.741330028, 0.492760003), Vec2(0.747179985, 0.472339988), Vec2(0.757200003, 0.430269986), Vec2(0.752529979, 0.45153001), Vec2(0.73724997, 0.451739997), Vec2(0.741980016, 0.43039), Vec2(0.752529979, 0.45153001), Vec2(0.747179985, 0.472339988), Vec2(0.73168999, 0.472680002), Vec2(0.73724997, 0.451739997), Vec2(0.76779002, 0.450899988), Vec2(0.762629986, 0.471359998), Vec2(0.747179985, 0.472339988), Vec2(0.752529979, 0.45153001), Vec2(0.772440016, 0.429879993), Vec2(0.76779002, 0.450899988), Vec2(0.752529979, 0.45153001), Vec2(0.757200003, 0.430269986), Vec2(0.787599981, 0.429459989), Vec2(0.782880008, 0.450129986), Vec2(0.76779002, 0.450899988), Vec2(0.772440016, 0.429879993), Vec2(0.782880008, 0.450129986), Vec2(0.777769983, 0.470059991), Vec2(0.762629986, 0.471359998), Vec2(0.76779002, 0.450899988), Vec2(0.79764998, 0.449660003), Vec2(0.792360008, 0.468919992), Vec2(0.777769983, 0.470059991), Vec2(0.782880008, 0.450129986), Vec2(0.802619994, 0.429349989), Vec2(0.79764998, 0.449660003), Vec2(0.782880008, 0.450129986), Vec2(0.787599981, 0.429459989), Vec2(0.777769983, 0.470059991), Vec2(0.77275002, 0.489270002), Vec2(0.757239997, 0.491329998), Vec2(0.762629986, 0.471359998), Vec2(0.77275002, 0.489270002), Vec2(0.768320024, 0.5079), Vec2(0.751950026, 0.510909975), Vec2(0.757239997, 0.491329998), Vec2(0.787419975, 0.487049997), Vec2(0.783689976, 0.504140019), Vec2(0.768320024, 0.5079), Vec2(0.77275002, 0.489270002), Vec2(0.792360008, 0.468919992), Vec2(0.787419975, 0.487049997), Vec2(0.77275002, 0.489270002), Vec2(0.777769983, 0.470059991), Vec2(0.806129992, 0.468719989), Vec2(0.800689995, 0.485509992), Vec2(0.787419975, 0.487049997), Vec2(0.792360008, 0.468919992), Vec2(0.800689995, 0.485509992), Vec2(0.797230005, 0.500100017), Vec2(0.783689976, 0.504140019), Vec2(0.787419975, 0.487049997), Vec2(0.811839998, 0.486330003), Vec2(0.806450009, 0.496930003), Vec2(0.797230005, 0.500100017), Vec2(0.800689995, 0.485509992), Vec2(0.81892997, 0.470479995), Vec2(0.811839998, 0.486330003), Vec2(0.800689995, 0.485509992), Vec2(0.806129992, 0.468719989), Vec2(0.817470014, 0.429969996), Vec2(0.81200999, 0.450069994), Vec2(0.79764998, 0.449660003), Vec2(0.802619994, 0.429349989), Vec2(0.81200999, 0.450069994), Vec2(0.806129992, 0.468719989), Vec2(0.792360008, 0.468919992), Vec2(0.79764998, 0.449660003), Vec2(0.825929999, 0.452010006), Vec2(0.81892997, 0.470479995), Vec2(0.806129992, 0.468719989), Vec2(0.81200999, 0.450069994), Vec2(0.832189977, 0.431739986), Vec2(0.825929999, 0.452010006), Vec2(0.81200999, 0.450069994), Vec2(0.817470014, 0.429969996), Vec2(0.797010005, 0.341650009), Vec2(0.796429992, 0.364039987), Vec2(0.780990005, 0.364100009), Vec2(0.78154999, 0.341690004), Vec2(0.796429992, 0.364039987), Vec2(0.794589996, 0.386260003), Vec2(0.779209971, 0.386370003), Vec2(0.780990005, 0.364100009), Vec2(0.811930001, 0.364069998), Vec2(0.809989989, 0.386330009), Vec2(0.794589996, 0.386260003), Vec2(0.796429992, 0.364039987), Vec2(0.812529981, 0.341610014), Vec2(0.811930001, 0.364069998), Vec2(0.796429992, 0.364039987), Vec2(0.797010005, 0.341650009), Vec2(0.794589996, 0.386260003), Vec2(0.791589975, 0.408120006), Vec2(0.776319981, 0.408340007), Vec2(0.779209971, 0.386370003), Vec2(0.791589975, 0.408120006), Vec2(0.787599981, 0.429459989), Vec2(0.772440016, 0.429879993), Vec2(0.776319981, 0.408340007), Vec2(0.806829989, 0.408170015), Vec2(0.802619994, 0.429349989), Vec2(0.787599981, 0.429459989), Vec2(0.791589975, 0.408120006), Vec2(0.809989989, 0.386330009), Vec2(0.806829989, 0.408170015), Vec2(0.791589975, 0.408120006), Vec2(0.794589996, 0.386260003), Vec2(0.825460017, 0.38677001), Vec2(0.822049975, 0.408760011), Vec2(0.806829989, 0.408170015), Vec2(0.809989989, 0.386330009), Vec2(0.822049975, 0.408760011), Vec2(0.817470014, 0.429969996), Vec2(0.802619994, 0.429349989), Vec2(0.806829989, 0.408170015), Vec2(0.83732003, 0.410189986), Vec2(0.832189977, 0.431739986), Vec2(0.817470014, 0.429969996), Vec2(0.822049975, 0.408760011), Vec2(0.841090024, 0.38775), Vec2(0.83732003, 0.410189986), Vec2(0.822049975, 0.408760011), Vec2(0.825460017, 0.38677001), Vec2(0.828180015, 0.341560006), Vec2(0.82753998, 0.364279985), Vec2(0.811930001, 0.364069998), Vec2(0.812529981, 0.341610014), Vec2(0.82753998, 0.364279985), Vec2(0.825460017, 0.38677001), Vec2(0.809989989, 0.386330009), Vec2(0.811930001, 0.364069998), Vec2(0.843360007, 0.364749998), Vec2(0.841090024, 0.38775), Vec2(0.825460017, 0.38677001), Vec2(0.82753998, 0.364279985), Vec2(0.844060004, 0.341500014), Vec2(0.843360007, 0.364749998), Vec2(0.82753998, 0.364279985), Vec2(0.828180015, 0.341560006), Vec2(0.701359987, 0.170489997), Vec2(0.70905, 0.190830007), Vec2(0.693859994, 0.192540005), Vec2(0.685660005, 0.172519997), Vec2(0.70905, 0.190830007), Vec2(0.715759993, 0.211380005), Vec2(0.700839996, 0.212830007), Vec2(0.693859994, 0.192540005), Vec2(0.724709988, 0.190249994), Vec2(0.731040001, 0.210859999), Vec2(0.715759993, 0.211380005), Vec2(0.70905, 0.190830007), Vec2(0.717710018, 0.169870004), Vec2(0.724709988, 0.190249994), Vec2(0.70905, 0.190830007), Vec2(0.701359987, 0.170489997), Vec2(0.715759993, 0.211380005), Vec2(0.721539974, 0.232270002), Vec2(0.706700027, 0.233459994), Vec2(0.700839996, 0.212830007), Vec2(0.721539974, 0.232270002), Vec2(0.726369977, 0.253540009), Vec2(0.711520016, 0.254500002), Vec2(0.706700027, 0.233459994), Vec2(0.73664999, 0.231810004), Vec2(0.741460025, 0.253149986), Vec2(0.726369977, 0.253540009), Vec2(0.721539974, 0.232270002), Vec2(0.731040001, 0.210859999), Vec2(0.73664999, 0.231810004), Vec2(0.721539974, 0.232270002), Vec2(0.715759993, 0.211380005), Vec2(0.746500015, 0.211160004), Vec2(0.751909971, 0.231959999), Vec2(0.73664999, 0.231810004), Vec2(0.731040001, 0.210859999), Vec2(0.751909971, 0.231959999), Vec2(0.756659985, 0.253210008), Vec2(0.741460025, 0.253149986), Vec2(0.73664999, 0.231810004), Vec2(0.767149985, 0.232529998), Vec2(0.771889985, 0.253529996), Vec2(0.756659985, 0.253210008), Vec2(0.751909971, 0.231959999), Vec2(0.761910021, 0.212080002), Vec2(0.767149985, 0.232529998), Vec2(0.751909971, 0.231959999), Vec2(0.746500015, 0.211160004), Vec2(0.734449983, 0.170599997), Vec2(0.740620017, 0.190740004), Vec2(0.724709988, 0.190249994), Vec2(0.717710018, 0.169870004), Vec2(0.740620017, 0.190740004), Vec2(0.746500015, 0.211160004), Vec2(0.731040001, 0.210859999), Vec2(0.724709988, 0.190249994), Vec2(0.756479979, 0.192129999), Vec2(0.761910021, 0.212080002), Vec2(0.746500015, 0.211160004), Vec2(0.740620017, 0.190740004), Vec2(0.751190007, 0.172560006), Vec2(0.756479979, 0.192129999), Vec2(0.740620017, 0.190740004), Vec2(0.734449983, 0.170599997), Vec2(0.726369977, 0.253540009), Vec2(0.730229974, 0.275189996), Vec2(0.71529001, 0.275920004), Vec2(0.711520016, 0.254500002), Vec2(0.730229974, 0.275189996), Vec2(0.733070016, 0.297179997), Vec2(0.718029976, 0.297670007), Vec2(0.71529001, 0.275920004), Vec2(0.745360017, 0.274879992), Vec2(0.748260021, 0.296959996), Vec2(0.733070016, 0.297179997), Vec2(0.730229974, 0.275189996), Vec2(0.741460025, 0.253149986), Vec2(0.745360017, 0.274879992), Vec2(0.730229974, 0.275189996), Vec2(0.726369977, 0.253540009), Vec2(0.733070016, 0.297179997), Vec2(0.734830022, 0.31942001), Vec2(0.719709992, 0.319680005), Vec2(0.718029976, 0.297670007), Vec2(0.734830022, 0.31942001), Vec2(0.735469997, 0.341789991), Vec2(0.720319986, 0.341809988), Vec2(0.719709992, 0.319680005), Vec2(0.750090003, 0.319290012), Vec2(0.750760019, 0.34176001), Vec2(0.735469997, 0.341789991), Vec2(0.734830022, 0.31942001), Vec2(0.748260021, 0.296959996), Vec2(0.750090003, 0.319290012), Vec2(0.734830022, 0.31942001), Vec2(0.733070016, 0.297179997), Vec2(0.763559997, 0.296950012), Vec2(0.765439987, 0.319270015), Vec2(0.750090003, 0.319290012), Vec2(0.748260021, 0.296959996), Vec2(0.765439987, 0.319270015), Vec2(0.766129971, 0.341720015), Vec2(0.750760019, 0.34176001), Vec2(0.750090003, 0.319290012), Vec2(0.78083998, 0.319279999), Vec2(0.78154999, 0.341690004), Vec2(0.766129971, 0.341720015), Vec2(0.765439987, 0.319270015), Vec2(0.778909981, 0.297019988), Vec2(0.78083998, 0.319279999), Vec2(0.765439987, 0.319270015), Vec2(0.763559997, 0.296950012), Vec2(0.756659985, 0.253210008), Vec2(0.760599971, 0.274890006), Vec2(0.745360017, 0.274879992), Vec2(0.741460025, 0.253149986), Vec2(0.760599971, 0.274890006), Vec2(0.763559997, 0.296950012), Vec2(0.748260021, 0.296959996), Vec2(0.745360017, 0.274879992), Vec2(0.775870025, 0.275059998), Vec2(0.778909981, 0.297019988), Vec2(0.763559997, 0.296950012), Vec2(0.760599971, 0.274890006), Vec2(0.771889985, 0.253529996), Vec2(0.775870025, 0.275059998), Vec2(0.760599971, 0.274890006), Vec2(0.756659985, 0.253210008), Vec2(0.787029982, 0.253879994), Vec2(0.791130006, 0.275200009), Vec2(0.775870025, 0.275059998), Vec2(0.771889985, 0.253529996), Vec2(0.791130006, 0.275200009), Vec2(0.794269979, 0.297049999), Vec2(0.778909981, 0.297019988), Vec2(0.775870025, 0.275059998), Vec2(0.806349993, 0.275079995), Vec2(0.809660017, 0.296900004), Vec2(0.794269979, 0.297049999), Vec2(0.791130006, 0.275200009), Vec2(0.802020013, 0.253919989), Vec2(0.806349993, 0.275079995), Vec2(0.791130006, 0.275200009), Vec2(0.787029982, 0.253879994), Vec2(0.794269979, 0.297049999), Vec2(0.796270013, 0.319260001), Vec2(0.78083998, 0.319279999), Vec2(0.778909981, 0.297019988), Vec2(0.796270013, 0.319260001), Vec2(0.797010005, 0.341650009), Vec2(0.78154999, 0.341690004), Vec2(0.78083998, 0.319279999), Vec2(0.811760008, 0.319150001), Vec2(0.812529981, 0.341610014), Vec2(0.797010005, 0.341650009), Vec2(0.796270013, 0.319260001), Vec2(0.809660017, 0.296900004), Vec2(0.811760008, 0.319150001), Vec2(0.796270013, 0.319260001), Vec2(0.794269979, 0.297049999), Vec2(0.825110018, 0.29637), Vec2(0.82735002, 0.318839997), Vec2(0.811760008, 0.319150001), Vec2(0.809660017, 0.296900004), Vec2(0.82735002, 0.318839997), Vec2(0.828180015, 0.341560006), Vec2(0.812529981, 0.341610014), Vec2(0.811760008, 0.319150001), Vec2(0.843159974, 0.31825), Vec2(0.844060004, 0.341500014), Vec2(0.828180015, 0.341560006), Vec2(0.82735002, 0.318839997), Vec2(0.840709984, 0.29528001), Vec2(0.843159974, 0.31825), Vec2(0.82735002, 0.318839997), Vec2(0.825110018, 0.29637), Vec2(0.816829979, 0.253230006), Vec2(0.821539998, 0.274399996), Vec2(0.806349993, 0.275079995), Vec2(0.802020013, 0.253919989), Vec2(0.821539998, 0.274399996), Vec2(0.825110018, 0.29637), Vec2(0.809660017, 0.296900004), Vec2(0.806349993, 0.275079995), Vec2(0.836769998, 0.272879988), Vec2(0.840709984, 0.29528001), Vec2(0.825110018, 0.29637), Vec2(0.821539998, 0.274399996), Vec2(0.831499994, 0.251370013), Vec2(0.836769998, 0.272879988), Vec2(0.821539998, 0.274399996), Vec2(0.816829979, 0.253230006), Vec2(0.767509997, 0.175549999), Vec2(0.77196002, 0.194130003), Vec2(0.756479979, 0.192129999), Vec2(0.751190007, 0.172560006), Vec2(0.77196002, 0.194130003), Vec2(0.777029991, 0.213320002), Vec2(0.761910021, 0.212080002), Vec2(0.756479979, 0.192129999), Vec2(0.786610007, 0.196290001), Vec2(0.791599989, 0.214389995), Vec2(0.777029991, 0.213320002), Vec2(0.77196002, 0.194130003), Vec2(0.782850027, 0.179260001), Vec2(0.786610007, 0.196290001), Vec2(0.77196002, 0.194130003), Vec2(0.767509997, 0.175549999), Vec2(0.777029991, 0.213320002), Vec2(0.782209992, 0.233229995), Vec2(0.767149985, 0.232529998), Vec2(0.761910021, 0.212080002), Vec2(0.782209992, 0.233229995), Vec2(0.787029982, 0.253879994), Vec2(0.771889985, 0.253529996), Vec2(0.767149985, 0.232529998), Vec2(0.796949983, 0.233630002), Vec2(0.802020013, 0.253919989), Vec2(0.787029982, 0.253879994), Vec2(0.782209992, 0.233229995), Vec2(0.791599989, 0.214389995), Vec2(0.796949983, 0.233630002), Vec2(0.782209992, 0.233229995), Vec2(0.777029991, 0.213320002), Vec2(0.805339992, 0.214530006), Vec2(0.811269999, 0.233150005), Vec2(0.796949983, 0.233630002), Vec2(0.791599989, 0.214389995), Vec2(0.811269999, 0.233150005), Vec2(0.816829979, 0.253230006), Vec2(0.802020013, 0.253919989), Vec2(0.796949983, 0.233630002), Vec2(0.825139999, 0.23116), Vec2(0.831499994, 0.251370013), Vec2(0.816829979, 0.253230006), Vec2(0.811269999, 0.233150005), Vec2(0.818069994, 0.212720007), Vec2(0.825139999, 0.23116), Vec2(0.811269999, 0.233150005), Vec2(0.805339992, 0.214530006), Vec2(0.796360016, 0.183239996), Vec2(0.799860001, 0.19777), Vec2(0.786610007, 0.196290001), Vec2(0.782850027, 0.179260001), Vec2(0.799860001, 0.19777), Vec2(0.805339992, 0.214530006), Vec2(0.791599989, 0.214389995), Vec2(0.786610007, 0.196290001), Vec2(0.810959995, 0.196899995), Vec2(0.818069994, 0.212720007), Vec2(0.805339992, 0.214530006), Vec2(0.799860001, 0.19777), Vec2(0.805589974, 0.186350003), Vec2(0.810959995, 0.196899995), Vec2(0.799860001, 0.19777), Vec2(0.796360016, 0.183239996), Vec2(0.190329999, 0.175870001), Vec2(0.203549996, 0.166720003), Vec2(0.203339994, 0.180059999), Vec2(0.194059998, 0.183160007), Vec2(0.203549996, 0.166720003), Vec2(0.219060004, 0.159769997), Vec2(0.216959998, 0.176129997), Vec2(0.203339994, 0.180059999), Vec2(0.201140001, 0.152940005), Vec2(0.219300002, 0.143490002), Vec2(0.219060004, 0.159769997), Vec2(0.203549996, 0.166720003), Vec2(0.184719995, 0.165069997), Vec2(0.201140001, 0.152940005), Vec2(0.203549996, 0.166720003), Vec2(0.190329999, 0.175870001), Vec2(0.219060004, 0.159769997), Vec2(0.23612, 0.154369995), Vec2(0.232409999, 0.172529995), Vec2(0.216959998, 0.176129997), Vec2(0.23612, 0.154369995), Vec2(0.254070014, 0.150460005), Vec2(0.248820007, 0.169729993), Vec2(0.232409999, 0.172529995), Vec2(0.23872, 0.136319995), Vec2(0.258879989, 0.131229997), Vec2(0.254070014, 0.150460005), Vec2(0.23612, 0.154369995), Vec2(0.219300002, 0.143490002), Vec2(0.23872, 0.136319995), Vec2(0.23612, 0.154369995), Vec2(0.219060004, 0.159769997), Vec2(0.218099996, 0.126959994), Vec2(0.240309998, 0.118160002), Vec2(0.23872, 0.136319995), Vec2(0.219300002, 0.143490002), Vec2(0.240309998, 0.118160002), Vec2(0.263280004, 0.111900002), Vec2(0.258879989, 0.131229997), Vec2(0.23872, 0.136319995), Vec2(0.240970001, 0.0997700021), Vec2(0.267230004, 0.0923700035), Vec2(0.263280004, 0.111900002), Vec2(0.240309998, 0.118160002), Vec2(0.215719998, 0.110040002), Vec2(0.240970001, 0.0997700021), Vec2(0.240309998, 0.118160002), Vec2(0.218099996, 0.126959994), Vec2(0.177990004, 0.152649999), Vec2(0.197170004, 0.138410002), Vec2(0.201140001, 0.152940005), Vec2(0.184719995, 0.165069997), Vec2(0.197170004, 0.138410002), Vec2(0.218099996, 0.126959994), Vec2(0.219300002, 0.143490002), Vec2(0.201140001, 0.152940005), Vec2(0.192000002, 0.123149998), Vec2(0.215719998, 0.110040002), Vec2(0.218099996, 0.126959994), Vec2(0.197170004, 0.138410002), Vec2(0.17024, 0.139139995), Vec2(0.192000002, 0.123149998), Vec2(0.197170004, 0.138410002), Vec2(0.177990004, 0.152649999), Vec2(0.254070014, 0.150460005), Vec2(0.272329986, 0.14813), Vec2(0.265639991, 0.168019995), Vec2(0.248820007, 0.169729993), Vec2(0.272329986, 0.14813), Vec2(0.290410012, 0.147479996), Vec2(0.282409996, 0.167600006), Vec2(0.265639991, 0.168019995), Vec2(0.279229999, 0.128209993), Vec2(0.299199998, 0.127309993), Vec2(0.290410012, 0.147479996), Vec2(0.272329986, 0.14813), Vec2(0.258879989, 0.131229997), Vec2(0.279229999, 0.128209993), Vec2(0.272329986, 0.14813), Vec2(0.254070014, 0.150460005), Vec2(0.290410012, 0.147479996), Vec2(0.307880014, 0.148560002), Vec2(0.298799992, 0.168559998), Vec2(0.282409996, 0.167600006), Vec2(0.307880014, 0.148560002), Vec2(0.324429989, 0.151360005), Vec2(0.314539999, 0.170929998), Vec2(0.298799992, 0.168559998), Vec2(0.31825, 0.128549993), Vec2(0.335970014, 0.131889999), Vec2(0.324429989, 0.151360005), Vec2(0.307880014, 0.148560002), Vec2(0.299199998, 0.127309993), Vec2(0.31825, 0.128549993), Vec2(0.307880014, 0.148560002), Vec2(0.290410012, 0.147479996), Vec2(0.308959991, 0.106980003), Vec2(0.330220014, 0.108429998), Vec2(0.31825, 0.128549993), Vec2(0.299199998, 0.127309993), Vec2(0.330220014, 0.108429998), Vec2(0.349559993, 0.112450004), Vec2(0.335970014, 0.131889999), Vec2(0.31825, 0.128549993), Vec2(0.344199985, 0.0881799981), Vec2(0.365759999, 0.0930700004), Vec2(0.349559993, 0.112450004), Vec2(0.330220014, 0.108429998), Vec2(0.319869995, 0.0864500031), Vec2(0.344199985, 0.0881799981), Vec2(0.330220014, 0.108429998), Vec2(0.308959991, 0.106980003), Vec2(0.263280004, 0.111900002), Vec2(0.28639999, 0.108149998), Vec2(0.279229999, 0.128209993), Vec2(0.258879989, 0.131229997), Vec2(0.28639999, 0.108149998), Vec2(0.308959991, 0.106980003), Vec2(0.299199998, 0.127309993), Vec2(0.279229999, 0.128209993), Vec2(0.293839991, 0.0878800005), Vec2(0.319869995, 0.0864500031), Vec2(0.308959991, 0.106980003), Vec2(0.28639999, 0.108149998), Vec2(0.267230004, 0.0923700035), Vec2(0.293839991, 0.0878800005), Vec2(0.28639999, 0.108149998), Vec2(0.263280004, 0.111900002), Vec2(0.270520002, 0.0725800022), Vec2(0.301319987, 0.0673900023), Vec2(0.293839991, 0.0878800005), Vec2(0.267230004, 0.0923700035), Vec2(0.301319987, 0.0673900023), Vec2(0.331950009, 0.0657199994), Vec2(0.319869995, 0.0864500031), Vec2(0.293839991, 0.0878800005), Vec2(0.308180004, 0.046670001), Vec2(0.34472999, 0.0448499992), Vec2(0.331950009, 0.0657199994), Vec2(0.301319987, 0.0673900023), Vec2(0.272610009, 0.0524899997), Vec2(0.308180004, 0.046670001), Vec2(0.301319987, 0.0673900023), Vec2(0.270520002, 0.0725800022), Vec2(0.331950009, 0.0657199994), Vec2(0.360720009, 0.0678299963), Vec2(0.344199985, 0.0881799981), Vec2(0.319869995, 0.0864500031), Vec2(0.360720009, 0.0678299963), Vec2(0.385479987, 0.0738499984), Vec2(0.365759999, 0.0930700004), Vec2(0.344199985, 0.0881799981), Vec2(0.380259991, 0.0475100018), Vec2(0.410430014, 0.0550500005), Vec2(0.385479987, 0.0738499984), Vec2(0.360720009, 0.0678299963), Vec2(0.34472999, 0.0448499992), Vec2(0.380259991, 0.0475100018), Vec2(0.360720009, 0.0678299963), Vec2(0.331950009, 0.0657199994), Vec2(0.356539994, 0.0238000005), Vec2(0.402429998, 0.0273899995), Vec2(0.380259991, 0.0475100018), Vec2(0.34472999, 0.0448499992), Vec2(0.402429998, 0.0273899995), Vec2(0.444700003, 0.03737), Vec2(0.410430014, 0.0550500005), Vec2(0.380259991, 0.0475100018), Vec2(0.421299994, 0.00769999996), Vec2(0.500389993, 0.0235900003), Vec2(0.444700003, 0.03737), Vec2(0.402429998, 0.0273899995), Vec2(0.363460004, 0.00194999995), Vec2(0.421299994, 0.00769999996), Vec2(0.402429998, 0.0273899995), Vec2(0.356539994, 0.0238000005), Vec2(0.272680014, 0.0319099985), Vec2(0.31310001, 0.0255600009), Vec2(0.308180004, 0.046670001), Vec2(0.272610009, 0.0524899997), Vec2(0.31310001, 0.0255600009), Vec2(0.356539994, 0.0238000005), Vec2(0.34472999, 0.0448499992), Vec2(0.308180004, 0.046670001), Vec2(0.314090014, 0.00343000004), Vec2(0.363460004, 0.00194999995), Vec2(0.356539994, 0.0238000005), Vec2(0.31310001, 0.0255600009), Vec2(0.269739985, 0.0104), Vec2(0.314090014, 0.00343000004), Vec2(0.31310001, 0.0255600009), Vec2(0.272680014, 0.0319099985), Vec2(0.161449999, 0.124810003), Vec2(0.185670003, 0.107270002), Vec2(0.192000002, 0.123149998), Vec2(0.17024, 0.139139995), Vec2(0.185670003, 0.107270002), Vec2(0.212149993, 0.0926600024), Vec2(0.215719998, 0.110040002), Vec2(0.192000002, 0.123149998), Vec2(0.178069994, 0.0908000022), Vec2(0.207230002, 0.0747900009), Vec2(0.212149993, 0.0926600024), Vec2(0.185670003, 0.107270002), Vec2(0.15151, 0.109810002), Vec2(0.178069994, 0.0908000022), Vec2(0.185670003, 0.107270002), Vec2(0.161449999, 0.124810003), Vec2(0.212149993, 0.0926600024), Vec2(0.240580007, 0.0810599998), Vec2(0.240970001, 0.0997700021), Vec2(0.215719998, 0.110040002), Vec2(0.240580007, 0.0810599998), Vec2(0.270520002, 0.0725800022), Vec2(0.267230004, 0.0923700035), Vec2(0.240970001, 0.0997700021), Vec2(0.23883, 0.0619499981), Vec2(0.272610009, 0.0524899997), Vec2(0.270520002, 0.0725800022), Vec2(0.240580007, 0.0810599998), Vec2(0.207230002, 0.0747900009), Vec2(0.23883, 0.0619499981), Vec2(0.240580007, 0.0810599998), Vec2(0.212149993, 0.0926600024), Vec2(0.200680003, 0.0563700013), Vec2(0.23522, 0.0423199981), Vec2(0.23883, 0.0619499981), Vec2(0.207230002, 0.0747900009), Vec2(0.23522, 0.0423199981), Vec2(0.272680014, 0.0319099985), Vec2(0.272610009, 0.0524899997), Vec2(0.23883, 0.0619499981), Vec2(0.229269996, 0.0218700003), Vec2(0.269739985, 0.0104), Vec2(0.272680014, 0.0319099985), Vec2(0.23522, 0.0423199981), Vec2(0.192220002, 0.0372299999), Vec2(0.229269996, 0.0218700003), Vec2(0.23522, 0.0423199981), Vec2(0.200680003, 0.0563700013), Vec2(0.140279993, 0.0941800028), Vec2(0.169029996, 0.073739998), Vec2(0.178069994, 0.0908000022), Vec2(0.15151, 0.109810002), Vec2(0.169029996, 0.073739998), Vec2(0.200680003, 0.0563700013), Vec2(0.207230002, 0.0747900009), Vec2(0.178069994, 0.0908000022), Vec2(0.15839, 0.0560199991), Vec2(0.192220002, 0.0372299999), Vec2(0.200680003, 0.0563700013), Vec2(0.169029996, 0.073739998), Vec2(0.127639994, 0.0779199973), Vec2(0.15839, 0.0560199991), Vec2(0.169029996, 0.073739998), Vec2(0.140279993, 0.0941800028), Vec2(0.324429989, 0.151360005), Vec2(0.339850008, 0.1558), Vec2(0.329450011, 0.174649999), Vec2(0.314539999, 0.170929998), Vec2(0.339850008, 0.1558), Vec2(0.35402, 0.161730006), Vec2(0.343409985, 0.179619998), Vec2(0.329450011, 0.174649999), Vec2(0.352120012, 0.137219995), Vec2(0.366600007, 0.144350007), Vec2(0.35402, 0.161730006), Vec2(0.339850008, 0.1558), Vec2(0.335970014, 0.131889999), Vec2(0.352120012, 0.137219995), Vec2(0.339850008, 0.1558), Vec2(0.324429989, 0.151360005), Vec2(0.35402, 0.161730006), Vec2(0.36688, 0.168909997), Vec2(0.356359988, 0.185609996), Vec2(0.343409985, 0.179619998), Vec2(0.36688, 0.168909997), Vec2(0.378410012, 0.177039996), Vec2(0.368229985, 0.192359999), Vec2(0.356359988, 0.185609996), Vec2(0.379379988, 0.152960002), Vec2(0.390540004, 0.162719995), Vec2(0.378410012, 0.177039996), Vec2(0.36688, 0.168909997), Vec2(0.366600007, 0.144350007), Vec2(0.379379988, 0.152960002), Vec2(0.36688, 0.168909997), Vec2(0.35402, 0.161730006), Vec2(0.381410003, 0.127570003), Vec2(0.393999994, 0.137899995), Vec2(0.379379988, 0.152960002), Vec2(0.366600007, 0.144350007), Vec2(0.393999994, 0.137899995), Vec2(0.404619992, 0.149489999), Vec2(0.390540004, 0.162719995), Vec2(0.379379988, 0.152960002), Vec2(0.410869986, 0.123989999), Vec2(0.420630008, 0.137559995), Vec2(0.404619992, 0.149489999), Vec2(0.393999994, 0.137899995), Vec2(0.398799986, 0.11163), Vec2(0.410869986, 0.123989999), Vec2(0.393999994, 0.137899995), Vec2(0.381410003, 0.127570003), Vec2(0.349559993, 0.112450004), Vec2(0.366649985, 0.118940003), Vec2(0.352120012, 0.137219995), Vec2(0.335970014, 0.131889999), Vec2(0.366649985, 0.118940003), Vec2(0.381410003, 0.127570003), Vec2(0.366600007, 0.144350007), Vec2(0.352120012, 0.137219995), Vec2(0.383920014, 0.101089999), Vec2(0.398799986, 0.11163), Vec2(0.381410003, 0.127570003), Vec2(0.366649985, 0.118940003), Vec2(0.365759999, 0.0930700004), Vec2(0.383920014, 0.101089999), Vec2(0.366649985, 0.118940003), Vec2(0.349559993, 0.112450004), Vec2(0.378410012, 0.177039996), Vec2(0.388550013, 0.185829997), Vec2(0.378960013, 0.199540004), Vec2(0.368229985, 0.192359999), Vec2(0.388550013, 0.185829997), Vec2(0.397190005, 0.194999993), Vec2(0.388429999, 0.206740007), Vec2(0.378960013, 0.199540004), Vec2(0.400099993, 0.173299998), Vec2(0.408010006, 0.184530005), Vec2(0.397190005, 0.194999993), Vec2(0.388550013, 0.185829997), Vec2(0.390540004, 0.162719995), Vec2(0.400099993, 0.173299998), Vec2(0.388550013, 0.185829997), Vec2(0.378410012, 0.177039996), Vec2(0.397190005, 0.194999993), Vec2(0.404000014, 0.204390004), Vec2(0.396369994, 0.213410005), Vec2(0.388429999, 0.206740007), Vec2(0.404000014, 0.204390004), Vec2(0.40823999, 0.214259997), Vec2(0.401600003, 0.218140006), Vec2(0.396369994, 0.213410005), Vec2(0.414130002, 0.196360007), Vec2(0.418190002, 0.208949998), Vec2(0.40823999, 0.214259997), Vec2(0.404000014, 0.204390004), Vec2(0.408010006, 0.184530005), Vec2(0.414130002, 0.196360007), Vec2(0.404000014, 0.204390004), Vec2(0.397190005, 0.194999993), Vec2(0.420610011, 0.175160006), Vec2(0.426070005, 0.188979998), Vec2(0.414130002, 0.196360007), Vec2(0.408010006, 0.184530005), Vec2(0.426070005, 0.188979998), Vec2(0.429830015, 0.203459993), Vec2(0.418190002, 0.208949998), Vec2(0.414130002, 0.196360007), Vec2(0.43937999, 0.182390004), Vec2(0.44264999, 0.198310003), Vec2(0.429830015, 0.203459993), Vec2(0.426070005, 0.188979998), Vec2(0.434689999, 0.166930005), Vec2(0.43937999, 0.182390004), Vec2(0.426070005, 0.188979998), Vec2(0.420610011, 0.175160006), Vec2(0.404619992, 0.149489999), Vec2(0.413459986, 0.161980003), Vec2(0.400099993, 0.173299998), Vec2(0.390540004, 0.162719995), Vec2(0.413459986, 0.161980003), Vec2(0.420610011, 0.175160006), Vec2(0.408010006, 0.184530005), Vec2(0.400099993, 0.173299998), Vec2(0.428490013, 0.15196), Vec2(0.434689999, 0.166930005), Vec2(0.420610011, 0.175160006), Vec2(0.413459986, 0.161980003), Vec2(0.420630008, 0.137559995), Vec2(0.428490013, 0.15196), Vec2(0.413459986, 0.161980003), Vec2(0.404619992, 0.149489999), Vec2(0.438470006, 0.127269998), Vec2(0.444979995, 0.143480003), Vec2(0.428490013, 0.15196), Vec2(0.420630008, 0.137559995), Vec2(0.444979995, 0.143480003), Vec2(0.449990004, 0.160019994), Vec2(0.434689999, 0.166930005), Vec2(0.428490013, 0.15196), Vec2(0.462700009, 0.136889994), Vec2(0.466239989, 0.154719993), Vec2(0.449990004, 0.160019994), Vec2(0.444979995, 0.143480003), Vec2(0.457980007, 0.119110003), Vec2(0.462700009, 0.136889994), Vec2(0.444979995, 0.143480003), Vec2(0.438470006, 0.127269998), Vec2(0.449990004, 0.160019994), Vec2(0.453729987, 0.176819995), Vec2(0.43937999, 0.182390004), Vec2(0.434689999, 0.166930005), Vec2(0.453729987, 0.176819995), Vec2(0.456360012, 0.193859994), Vec2(0.44264999, 0.198310003), Vec2(0.43937999, 0.182390004), Vec2(0.46886, 0.172539994), Vec2(0.470699996, 0.190410003), Vec2(0.456360012, 0.193859994), Vec2(0.453729987, 0.176819995), Vec2(0.466239989, 0.154719993), Vec2(0.46886, 0.172539994), Vec2(0.453729987, 0.176819995), Vec2(0.449990004, 0.160019994), Vec2(0.483150005, 0.151309997), Vec2(0.484499991, 0.169809997), Vec2(0.46886, 0.172539994), Vec2(0.466239989, 0.154719993), Vec2(0.484499991, 0.169809997), Vec2(0.485439986, 0.188199997), Vec2(0.470699996, 0.190410003), Vec2(0.46886, 0.172539994), Vec2(0.500389993, 0.168799996), Vec2(0.500389993, 0.187380001), Vec2(0.485439986, 0.188199997), Vec2(0.484499991, 0.169809997), Vec2(0.500389993, 0.150049999), Vec2(0.500389993, 0.168799996), Vec2(0.484499991, 0.169809997), Vec2(0.483150005, 0.151309997), Vec2(0.478810012, 0.11366), Vec2(0.48131001, 0.132609993), Vec2(0.462700009, 0.136889994), Vec2(0.457980007, 0.119110003), Vec2(0.48131001, 0.132609993), Vec2(0.483150005, 0.151309997), Vec2(0.466239989, 0.154719993), Vec2(0.462700009, 0.136889994), Vec2(0.500389993, 0.130999997), Vec2(0.500389993, 0.150049999), Vec2(0.483150005, 0.151309997), Vec2(0.48131001, 0.132609993), Vec2(0.500389993, 0.111529998), Vec2(0.500389993, 0.130999997), Vec2(0.48131001, 0.132609993), Vec2(0.478810012, 0.11366), Vec2(0.385479987, 0.0738499984), Vec2(0.404700011, 0.0839999989), Vec2(0.383920014, 0.101089999), Vec2(0.365759999, 0.0930700004), Vec2(0.404700011, 0.0839999989), Vec2(0.419149995, 0.0969699994), Vec2(0.398799986, 0.11163), Vec2(0.383920014, 0.101089999), Vec2(0.430110008, 0.0683600008), Vec2(0.442900002, 0.0843499973), Vec2(0.419149995, 0.0969699994), Vec2(0.404700011, 0.0839999989), Vec2(0.410430014, 0.0550500005), Vec2(0.430110008, 0.0683600008), Vec2(0.404700011, 0.0839999989), Vec2(0.385479987, 0.0738499984), Vec2(0.419149995, 0.0969699994), Vec2(0.430079997, 0.11163), Vec2(0.410869986, 0.123989999), Vec2(0.398799986, 0.11163), Vec2(0.430079997, 0.11163), Vec2(0.438470006, 0.127269998), Vec2(0.420630008, 0.137559995), Vec2(0.410869986, 0.123989999), Vec2(0.451660007, 0.101489998), Vec2(0.457980007, 0.119110003), Vec2(0.438470006, 0.127269998), Vec2(0.430079997, 0.11163), Vec2(0.442900002, 0.0843499973), Vec2(0.451660007, 0.101489998), Vec2(0.430079997, 0.11163), Vec2(0.419149995, 0.0969699994), Vec2(0.470209986, 0.0749899969), Vec2(0.475340009, 0.0944299996), Vec2(0.451660007, 0.101489998), Vec2(0.442900002, 0.0843499973), Vec2(0.475340009, 0.0944299996), Vec2(0.478810012, 0.11366), Vec2(0.457980007, 0.119110003), Vec2(0.451660007, 0.101489998), Vec2(0.500389993, 0.0915099978), Vec2(0.500389993, 0.111529998), Vec2(0.478810012, 0.11366), Vec2(0.475340009, 0.0944299996), Vec2(0.500389993, 0.0707300007), Vec2(0.500389993, 0.0915099978), Vec2(0.475340009, 0.0944299996), Vec2(0.470209986, 0.0749899969), Vec2(0.444700003, 0.03737), Vec2(0.461699992, 0.0555999987), Vec2(0.430110008, 0.0683600008), Vec2(0.410430014, 0.0550500005), Vec2(0.461699992, 0.0555999987), Vec2(0.470209986, 0.0749899969), Vec2(0.442900002, 0.0843499973), Vec2(0.430110008, 0.0683600008), Vec2(0.500389993, 0.0486599989), Vec2(0.500389993, 0.0707300007), Vec2(0.470209986, 0.0749899969), Vec2(0.461699992, 0.0555999987), Vec2(0.500389993, 0.0235900003), Vec2(0.500389993, 0.0486599989), Vec2(0.461699992, 0.0555999987), Vec2(0.444700003, 0.03737), Vec2(0.554970026, 0.0373000018), Vec2(0.538860023, 0.0546699986), Vec2(0.500389993, 0.0486599989), Vec2(0.500389993, 0.0235900003), Vec2(0.538860023, 0.0546699986), Vec2(0.530470014, 0.0741500035), Vec2(0.500389993, 0.0707300007), Vec2(0.500389993, 0.0486599989), Vec2(0.570439994, 0.0678500012), Vec2(0.557780027, 0.0835099965), Vec2(0.530470014, 0.0741500035), Vec2(0.538860023, 0.0546699986), Vec2(0.589569986, 0.0550599992), Vec2(0.570439994, 0.0678500012), Vec2(0.538860023, 0.0546699986), Vec2(0.554970026, 0.0373000018), Vec2(0.530470014, 0.0741500035), Vec2(0.525370002, 0.0937900022), Vec2(0.500389993, 0.0915099978), Vec2(0.500389993, 0.0707300007), Vec2(0.525370002, 0.0937900022), Vec2(0.521920025, 0.113179997), Vec2(0.500389993, 0.111529998), Vec2(0.500389993, 0.0915099978), Vec2(0.54904002, 0.100620002), Vec2(0.542729974, 0.118330002), Vec2(0.521920025, 0.113179997), Vec2(0.525370002, 0.0937900022), Vec2(0.557780027, 0.0835099965), Vec2(0.54904002, 0.100620002), Vec2(0.525370002, 0.0937900022), Vec2(0.530470014, 0.0741500035), Vec2(0.581560016, 0.0963900015), Vec2(0.570640028, 0.110820003), Vec2(0.54904002, 0.100620002), Vec2(0.557780027, 0.0835099965), Vec2(0.570640028, 0.110820003), Vec2(0.562250018, 0.126409993), Vec2(0.542729974, 0.118330002), Vec2(0.54904002, 0.100620002), Vec2(0.589890003, 0.123389997), Vec2(0.580110013, 0.136790007), Vec2(0.562250018, 0.126409993), Vec2(0.570640028, 0.110820003), Vec2(0.60194999, 0.111340001), Vec2(0.589890003, 0.123389997), Vec2(0.570640028, 0.110820003), Vec2(0.581560016, 0.0963900015), Vec2(0.614889979, 0.0740899965), Vec2(0.595910013, 0.0838200003), Vec2(0.570439994, 0.0678500012), Vec2(0.589569986, 0.0550599992), Vec2(0.595910013, 0.0838200003), Vec2(0.581560016, 0.0963900015), Vec2(0.557780027, 0.0835099965), Vec2(0.570439994, 0.0678500012), Vec2(0.616760015, 0.101180002), Vec2(0.60194999, 0.111340001), Vec2(0.581560016, 0.0963900015), Vec2(0.595910013, 0.0838200003), Vec2(0.634829998, 0.0935700014), Vec2(0.616760015, 0.101180002), Vec2(0.595910013, 0.0838200003), Vec2(0.614889979, 0.0740899965), Vec2(0.521920025, 0.113179997), Vec2(0.519439995, 0.132259995), Vec2(0.500389993, 0.130999997), Vec2(0.500389993, 0.111529998), Vec2(0.519439995, 0.132259995), Vec2(0.517610013, 0.151030004), Vec2(0.500389993, 0.150049999), Vec2(0.500389993, 0.130999997), Vec2(0.538030028, 0.136240005), Vec2(0.534510016, 0.154170007), Vec2(0.517610013, 0.151030004), Vec2(0.519439995, 0.132259995), Vec2(0.542729974, 0.118330002), Vec2(0.538030028, 0.136240005), Vec2(0.519439995, 0.132259995), Vec2(0.521920025, 0.113179997), Vec2(0.517610013, 0.151030004), Vec2(0.516279995, 0.169579998), Vec2(0.500389993, 0.168799996), Vec2(0.500389993, 0.150049999), Vec2(0.516279995, 0.169579998), Vec2(0.515349984, 0.188010007), Vec2(0.500389993, 0.187380001), Vec2(0.500389993, 0.168799996), Vec2(0.531910002, 0.172079995), Vec2(0.530099988, 0.190019995), Vec2(0.515349984, 0.188010007), Vec2(0.516279995, 0.169579998), Vec2(0.534510016, 0.154170007), Vec2(0.531910002, 0.172079995), Vec2(0.516279995, 0.169579998), Vec2(0.517610013, 0.151030004), Vec2(0.550750017, 0.159290001), Vec2(0.547029972, 0.176170006), Vec2(0.531910002, 0.172079995), Vec2(0.534510016, 0.154170007), Vec2(0.547029972, 0.176170006), Vec2(0.544420004, 0.193299994), Vec2(0.530099988, 0.190019995), Vec2(0.531910002, 0.172079995), Vec2(0.561360002, 0.181649998), Vec2(0.558099985, 0.19765), Vec2(0.544420004, 0.193299994), Vec2(0.547029972, 0.176170006), Vec2(0.566039979, 0.166130006), Vec2(0.561360002, 0.181649998), Vec2(0.547029972, 0.176170006), Vec2(0.550750017, 0.159290001), Vec2(0.562250018, 0.126409993), Vec2(0.555750012, 0.142660007), Vec2(0.538030028, 0.136240005), Vec2(0.542729974, 0.118330002), Vec2(0.555750012, 0.142660007), Vec2(0.550750017, 0.159290001), Vec2(0.534510016, 0.154170007), Vec2(0.538030028, 0.136240005), Vec2(0.572250009, 0.151130006), Vec2(0.566039979, 0.166130006), Vec2(0.550750017, 0.159290001), Vec2(0.555750012, 0.142660007), Vec2(0.580110013, 0.136790007), Vec2(0.572250009, 0.151130006), Vec2(0.555750012, 0.142660007), Vec2(0.562250018, 0.126409993), Vec2(0.59612, 0.14892), Vec2(0.587260008, 0.161269993), Vec2(0.572250009, 0.151130006), Vec2(0.580110013, 0.136790007), Vec2(0.587260008, 0.161269993), Vec2(0.5801, 0.17441), Vec2(0.566039979, 0.166130006), Vec2(0.572250009, 0.151130006), Vec2(0.600589991, 0.172800004), Vec2(0.59266001, 0.183919996), Vec2(0.5801, 0.17441), Vec2(0.587260008, 0.161269993), Vec2(0.610159993, 0.162400007), Vec2(0.600589991, 0.172800004), Vec2(0.587260008, 0.161269993), Vec2(0.59612, 0.14892), Vec2(0.5801, 0.17441), Vec2(0.574630022, 0.188250005), Vec2(0.561360002, 0.181649998), Vec2(0.566039979, 0.166130006), Vec2(0.574630022, 0.188250005), Vec2(0.570869982, 0.202779993), Vec2(0.558099985, 0.19765), Vec2(0.561360002, 0.181649998), Vec2(0.58653003, 0.195720002), Vec2(0.582449973, 0.208340004), Vec2(0.570869982, 0.202779993), Vec2(0.574630022, 0.188250005), Vec2(0.59266001, 0.183919996), Vec2(0.58653003, 0.195720002), Vec2(0.574630022, 0.188250005), Vec2(0.5801, 0.17441), Vec2(0.603410006, 0.194590002), Vec2(0.596599996, 0.203909993), Vec2(0.58653003, 0.195720002), Vec2(0.59266001, 0.183919996), Vec2(0.596599996, 0.203909993), Vec2(0.592339993, 0.213760003), Vec2(0.582449973, 0.208340004), Vec2(0.58653003, 0.195720002), Vec2(0.604160011, 0.213080004), Vec2(0.598919988, 0.217739999), Vec2(0.592339993, 0.213760003), Vec2(0.596599996, 0.203909993), Vec2(0.612079978, 0.206560001), Vec2(0.604160011, 0.213080004), Vec2(0.596599996, 0.203909993), Vec2(0.603410006, 0.194590002), Vec2(0.622179985, 0.177019998), Vec2(0.612049997, 0.18558), Vec2(0.600589991, 0.172800004), Vec2(0.610159993, 0.162400007), Vec2(0.612049997, 0.18558), Vec2(0.603410006, 0.194590002), Vec2(0.59266001, 0.183919996), Vec2(0.600589991, 0.172800004), Vec2(0.621510029, 0.199560001), Vec2(0.612079978, 0.206560001), Vec2(0.603410006, 0.194590002), Vec2(0.612049997, 0.18558), Vec2(0.632189989, 0.192650005), Vec2(0.621510029, 0.199560001), Vec2(0.612049997, 0.18558), Vec2(0.622179985, 0.177019998), Vec2(0.65109998, 0.113219999), Vec2(0.634060025, 0.119309999), Vec2(0.616760015, 0.101180002), Vec2(0.634829998, 0.0935700014), Vec2(0.634060025, 0.119309999), Vec2(0.619329989, 0.127570003), Vec2(0.60194999, 0.111340001), Vec2(0.616760015, 0.101180002), Vec2(0.648519993, 0.137889996), Vec2(0.634079993, 0.144649997), Vec2(0.619329989, 0.127570003), Vec2(0.634060025, 0.119309999), Vec2(0.664640009, 0.132939994), Vec2(0.648519993, 0.137889996), Vec2(0.634060025, 0.119309999), Vec2(0.65109998, 0.113219999), Vec2(0.619329989, 0.127570003), Vec2(0.606750011, 0.137569994), Vec2(0.589890003, 0.123389997), Vec2(0.60194999, 0.111340001), Vec2(0.606750011, 0.137569994), Vec2(0.59612, 0.14892), Vec2(0.580110013, 0.136790007), Vec2(0.589890003, 0.123389997), Vec2(0.621309996, 0.152930006), Vec2(0.610159993, 0.162400007), Vec2(0.59612, 0.14892), Vec2(0.606750011, 0.137569994), Vec2(0.634079993, 0.144649997), Vec2(0.621309996, 0.152930006), Vec2(0.606750011, 0.137569994), Vec2(0.619329989, 0.127570003), Vec2(0.646520019, 0.16234), Vec2(0.63369, 0.169180006), Vec2(0.621309996, 0.152930006), Vec2(0.634079993, 0.144649997), Vec2(0.63369, 0.169180006), Vec2(0.622179985, 0.177019998), Vec2(0.610159993, 0.162400007), Vec2(0.621309996, 0.152930006), Vec2(0.643999994, 0.186210006), Vec2(0.632189989, 0.192650005), Vec2(0.622179985, 0.177019998), Vec2(0.63369, 0.169180006), Vec2(0.656889975, 0.180539995), Vec2(0.643999994, 0.186210006), Vec2(0.63369, 0.169180006), Vec2(0.646520019, 0.16234), Vec2(0.67602998, 0.152689993), Vec2(0.660650015, 0.156760007), Vec2(0.648519993, 0.137889996), Vec2(0.664640009, 0.132939994), Vec2(0.660650015, 0.156760007), Vec2(0.646520019, 0.16234), Vec2(0.634079993, 0.144649997), Vec2(0.648519993, 0.137889996), Vec2(0.670799971, 0.175909996), Vec2(0.656889975, 0.180539995), Vec2(0.646520019, 0.16234), Vec2(0.660650015, 0.156760007), Vec2(0.685660005, 0.172519997), Vec2(0.670799971, 0.175909996), Vec2(0.660650015, 0.156760007), Vec2(0.67602998, 0.152689993), Vec2(0.858929992, 0.0961600021), Vec2(0.830470026, 0.0758399963), Vec2(0.841040015, 0.0580400005), Vec2(0.871450007, 0.0797699988), Vec2(0.830470026, 0.0758399963), Vec2(0.799139977, 0.0584900007), Vec2(0.807600021, 0.0392899998), Vec2(0.841040015, 0.0580400005), Vec2(0.821529984, 0.0930500031), Vec2(0.792649984, 0.0770500004), Vec2(0.799139977, 0.0584900007), Vec2(0.830470026, 0.0758399963), Vec2(0.847829998, 0.111960001), Vec2(0.821529984, 0.0930500031), Vec2(0.830470026, 0.0758399963), Vec2(0.858929992, 0.0961600021), Vec2(0.799139977, 0.0584900007), Vec2(0.764919996, 0.0443399996), Vec2(0.770950019, 0.0238300003), Vec2(0.807600021, 0.0392899998), Vec2(0.764919996, 0.0443399996), Vec2(0.727729976, 0.0337300003), Vec2(0.730799973, 0.0120599996), Vec2(0.770950019, 0.0238300003), Vec2(0.76135999, 0.0641499981), Vec2(0.727869987, 0.0545599982), Vec2(0.727729976, 0.0337300003), Vec2(0.764919996, 0.0443399996), Vec2(0.792649984, 0.0770500004), Vec2(0.76135999, 0.0641499981), Vec2(0.764919996, 0.0443399996), Vec2(0.799139977, 0.0584900007), Vec2(0.787840009, 0.0951000005), Vec2(0.7597, 0.0834600031), Vec2(0.76135999, 0.0641499981), Vec2(0.792649984, 0.0770500004), Vec2(0.7597, 0.0834600031), Vec2(0.730069995, 0.0748599991), Vec2(0.727869987, 0.0545599982), Vec2(0.76135999, 0.0641499981), Vec2(0.75940001, 0.102349997), Vec2(0.733410001, 0.0947899967), Vec2(0.730069995, 0.0748599991), Vec2(0.7597, 0.0834600031), Vec2(0.784370005, 0.112669997), Vec2(0.75940001, 0.102349997), Vec2(0.7597, 0.0834600031), Vec2(0.787840009, 0.0951000005), Vec2(0.838029981, 0.127169997), Vec2(0.814050019, 0.109700002), Vec2(0.821529984, 0.0930500031), Vec2(0.847829998, 0.111960001), Vec2(0.814050019, 0.109700002), Vec2(0.787840009, 0.0951000005), Vec2(0.792649984, 0.0770500004), Vec2(0.821529984, 0.0930500031), Vec2(0.807829976, 0.125780001), Vec2(0.784370005, 0.112669997), Vec2(0.787840009, 0.0951000005), Vec2(0.814050019, 0.109700002), Vec2(0.829349995, 0.141719997), Vec2(0.807829976, 0.125780001), Vec2(0.814050019, 0.109700002), Vec2(0.838029981, 0.127169997), Vec2(0.727729976, 0.0337300003), Vec2(0.687520027, 0.0271099992), Vec2(0.686619997, 0.00461000018), Vec2(0.730799973, 0.0120599996), Vec2(0.687520027, 0.0271099992), Vec2(0.644299984, 0.02513), Vec2(0.63707, 0.00246000011), Vec2(0.686619997, 0.00461000018), Vec2(0.692600012, 0.0485499986), Vec2(0.656340003, 0.0464400016), Vec2(0.644299984, 0.02513), Vec2(0.687520027, 0.0271099992), Vec2(0.727869987, 0.0545599982), Vec2(0.692600012, 0.0485499986), Vec2(0.687520027, 0.0271099992), Vec2(0.727729976, 0.0337300003), Vec2(0.644299984, 0.02513), Vec2(0.598770022, 0.0284499992), Vec2(0.578649998, 0.0076700002), Vec2(0.63707, 0.00246000011), Vec2(0.598770022, 0.0284499992), Vec2(0.554970026, 0.0373000018), Vec2(0.500389993, 0.0235900003), Vec2(0.578649998, 0.0076700002), Vec2(0.620769978, 0.048489999), Vec2(0.589569986, 0.0550599992), Vec2(0.554970026, 0.0373000018), Vec2(0.598770022, 0.0284499992), Vec2(0.656340003, 0.0464400016), Vec2(0.620769978, 0.048489999), Vec2(0.598770022, 0.0284499992), Vec2(0.644299984, 0.02513), Vec2(0.669089973, 0.0673699975), Vec2(0.640150011, 0.068810001), Vec2(0.620769978, 0.048489999), Vec2(0.656340003, 0.0464400016), Vec2(0.640150011, 0.068810001), Vec2(0.614889979, 0.0740899965), Vec2(0.589569986, 0.0550599992), Vec2(0.620769978, 0.048489999), Vec2(0.656589985, 0.089259997), Vec2(0.634829998, 0.0935700014), Vec2(0.614889979, 0.0740899965), Vec2(0.640150011, 0.068810001), Vec2(0.681060016, 0.0881400034), Vec2(0.656589985, 0.089259997), Vec2(0.640150011, 0.068810001), Vec2(0.669089973, 0.0673699975), Vec2(0.730069995, 0.0748599991), Vec2(0.699549973, 0.0694399998), Vec2(0.692600012, 0.0485499986), Vec2(0.727869987, 0.0545599982), Vec2(0.699549973, 0.0694399998), Vec2(0.669089973, 0.0673699975), Vec2(0.656340003, 0.0464400016), Vec2(0.692600012, 0.0485499986), Vec2(0.707019985, 0.0900299996), Vec2(0.681060016, 0.0881400034), Vec2(0.669089973, 0.0673699975), Vec2(0.699549973, 0.0694399998), Vec2(0.733410001, 0.0947899967), Vec2(0.707019985, 0.0900299996), Vec2(0.699549973, 0.0694399998), Vec2(0.730069995, 0.0748599991), Vec2(0.737330019, 0.114430003), Vec2(0.714359999, 0.110380001), Vec2(0.707019985, 0.0900299996), Vec2(0.733410001, 0.0947899967), Vec2(0.714359999, 0.110380001), Vec2(0.691839993, 0.108769998), Vec2(0.681060016, 0.0881400034), Vec2(0.707019985, 0.0900299996), Vec2(0.721369982, 0.130539998), Vec2(0.701439977, 0.129240006), Vec2(0.691839993, 0.108769998), Vec2(0.714359999, 0.110380001), Vec2(0.741609991, 0.133860007), Vec2(0.721369982, 0.130539998), Vec2(0.714359999, 0.110380001), Vec2(0.737330019, 0.114430003), Vec2(0.691839993, 0.108769998), Vec2(0.670520008, 0.109690003), Vec2(0.656589985, 0.089259997), Vec2(0.681060016, 0.0881400034), Vec2(0.670520008, 0.109690003), Vec2(0.65109998, 0.113219999), Vec2(0.634829998, 0.0935700014), Vec2(0.656589985, 0.089259997), Vec2(0.682380021, 0.130030006), Vec2(0.664640009, 0.132939994), Vec2(0.65109998, 0.113219999), Vec2(0.670520008, 0.109690003), Vec2(0.701439977, 0.129240006), Vec2(0.682380021, 0.130030006), Vec2(0.670520008, 0.109690003), Vec2(0.691839993, 0.108769998), Vec2(0.710009992, 0.149580002), Vec2(0.692550004, 0.15027), Vec2(0.682380021, 0.130030006), Vec2(0.701439977, 0.129240006), Vec2(0.692550004, 0.15027), Vec2(0.67602998, 0.152689993), Vec2(0.664640009, 0.132939994), Vec2(0.682380021, 0.130030006), Vec2(0.701359987, 0.170489997), Vec2(0.685660005, 0.172519997), Vec2(0.67602998, 0.152689993), Vec2(0.692550004, 0.15027), Vec2(0.717710018, 0.169870004), Vec2(0.701359987, 0.170489997), Vec2(0.692550004, 0.15027), Vec2(0.710009992, 0.149580002), Vec2(0.746219993, 0.153190002), Vec2(0.728049994, 0.150580004), Vec2(0.721369982, 0.130539998), Vec2(0.741609991, 0.133860007), Vec2(0.728049994, 0.150580004), Vec2(0.710009992, 0.149580002), Vec2(0.701439977, 0.129240006), Vec2(0.721369982, 0.130539998), Vec2(0.734449983, 0.170599997), Vec2(0.717710018, 0.169870004), Vec2(0.710009992, 0.149580002), Vec2(0.728049994, 0.150580004), Vec2(0.751190007, 0.172560006), Vec2(0.734449983, 0.170599997), Vec2(0.728049994, 0.150580004), Vec2(0.746219993, 0.153190002), Vec2(0.821680009, 0.155430004), Vec2(0.802730024, 0.141210005), Vec2(0.807829976, 0.125780001), Vec2(0.829349995, 0.141719997), Vec2(0.802730024, 0.141210005), Vec2(0.78204, 0.129749998), Vec2(0.784370005, 0.112669997), Vec2(0.807829976, 0.125780001), Vec2(0.79877001, 0.155890003), Vec2(0.780830026, 0.146410003), Vec2(0.78204, 0.129749998), Vec2(0.802730024, 0.141210005), Vec2(0.814970016, 0.168009996), Vec2(0.79877001, 0.155890003), Vec2(0.802730024, 0.141210005), Vec2(0.821680009, 0.155430004), Vec2(0.78204, 0.129749998), Vec2(0.76007998, 0.12088), Vec2(0.75940001, 0.102349997), Vec2(0.784370005, 0.112669997), Vec2(0.76007998, 0.12088), Vec2(0.737330019, 0.114430003), Vec2(0.733410001, 0.0947899967), Vec2(0.75940001, 0.102349997), Vec2(0.761609972, 0.139139995), Vec2(0.741609991, 0.133860007), Vec2(0.737330019, 0.114430003), Vec2(0.76007998, 0.12088), Vec2(0.780830026, 0.146410003), Vec2(0.761609972, 0.139139995), Vec2(0.76007998, 0.12088), Vec2(0.78204, 0.129749998), Vec2(0.780969977, 0.16279), Vec2(0.764050007, 0.157289997), Vec2(0.761609972, 0.139139995), Vec2(0.780830026, 0.146410003), Vec2(0.764050007, 0.157289997), Vec2(0.746219993, 0.153190002), Vec2(0.741609991, 0.133860007), Vec2(0.761609972, 0.139139995), Vec2(0.767509997, 0.175549999), Vec2(0.751190007, 0.172560006), Vec2(0.746219993, 0.153190002), Vec2(0.764050007, 0.157289997), Vec2(0.782850027, 0.179260001), Vec2(0.767509997, 0.175549999), Vec2(0.764050007, 0.157289997), Vec2(0.780969977, 0.16279), Vec2(0.809329987, 0.178929999), Vec2(0.796320021, 0.16979), Vec2(0.79877001, 0.155890003), Vec2(0.814970016, 0.168009996), Vec2(0.796320021, 0.16979), Vec2(0.780969977, 0.16279), Vec2(0.780830026, 0.146410003), Vec2(0.79877001, 0.155890003), Vec2(0.796360016, 0.183239996), Vec2(0.782850027, 0.179260001), Vec2(0.780969977, 0.16279), Vec2(0.796320021, 0.16979), Vec2(0.805589974, 0.186350003), Vec2(0.796360016, 0.183239996), Vec2(0.796320021, 0.16979), Vec2(0.809329987, 0.178929999), Vec2(0.190530002, 0.502749979), Vec2(0.179619998, 0.489800006), Vec2(0.188820004, 0.484710008), Vec2(0.194230005, 0.495350003), Vec2(0.179619998, 0.489800006), Vec2(0.169829994, 0.473269999), Vec2(0.181649998, 0.468769997), Vec2(0.188820004, 0.484710008), Vec2(0.170719996, 0.498369992), Vec2(0.158350006, 0.480349988), Vec2(0.169829994, 0.473269999), Vec2(0.179619998, 0.489800006), Vec2(0.184980005, 0.513610005), Vec2(0.170719996, 0.498369992), Vec2(0.179619998, 0.489800006), Vec2(0.190530002, 0.502749979), Vec2(0.169829994, 0.473269999), Vec2(0.161090001, 0.454160005), Vec2(0.174510002, 0.450219989), Vec2(0.181649998, 0.468769997), Vec2(0.161090001, 0.454160005), Vec2(0.153569996, 0.433169991), Vec2(0.168099999, 0.429879993), Vec2(0.174510002, 0.450219989), Vec2(0.147750005, 0.460040003), Vec2(0.138909996, 0.437940001), Vec2(0.153569996, 0.433169991), Vec2(0.161090001, 0.454160005), Vec2(0.158350006, 0.480349988), Vec2(0.147750005, 0.460040003), Vec2(0.161090001, 0.454160005), Vec2(0.169829994, 0.473269999), Vec2(0.146709993, 0.489329994), Vec2(0.134210005, 0.467550009), Vec2(0.147750005, 0.460040003), Vec2(0.158350006, 0.480349988), Vec2(0.134210005, 0.467550009), Vec2(0.123899996, 0.44400999), Vec2(0.138909996, 0.437940001), Vec2(0.147750005, 0.460040003), Vec2(0.120169997, 0.476319999), Vec2(0.108309999, 0.451160014), Vec2(0.123899996, 0.44400999), Vec2(0.134210005, 0.467550009), Vec2(0.134550005, 0.499680012), Vec2(0.120169997, 0.476319999), Vec2(0.134210005, 0.467550009), Vec2(0.146709993, 0.489329994), Vec2(0.178340003, 0.52609998), Vec2(0.161420003, 0.508979976), Vec2(0.170719996, 0.498369992), Vec2(0.184980005, 0.513610005), Vec2(0.161420003, 0.508979976), Vec2(0.146709993, 0.489329994), Vec2(0.158350006, 0.480349988), Vec2(0.170719996, 0.498369992), Vec2(0.151419997, 0.520910025), Vec2(0.134550005, 0.499680012), Vec2(0.146709993, 0.489329994), Vec2(0.161420003, 0.508979976), Vec2(0.170719996, 0.539680004), Vec2(0.151419997, 0.520910025), Vec2(0.161420003, 0.508979976), Vec2(0.178340003, 0.52609998), Vec2(0.153569996, 0.433169991), Vec2(0.147499993, 0.410809994), Vec2(0.162780002, 0.408250004), Vec2(0.168099999, 0.429879993), Vec2(0.147499993, 0.410809994), Vec2(0.143040001, 0.387490004), Vec2(0.158830002, 0.385720015), Vec2(0.162780002, 0.408250004), Vec2(0.131899998, 0.41444999), Vec2(0.126809999, 0.389970005), Vec2(0.143040001, 0.387490004), Vec2(0.147499993, 0.410809994), Vec2(0.138909996, 0.437940001), Vec2(0.131899998, 0.41444999), Vec2(0.147499993, 0.410809994), Vec2(0.153569996, 0.433169991), Vec2(0.143040001, 0.387490004), Vec2(0.140310004, 0.363550007), Vec2(0.156379998, 0.362619996), Vec2(0.158830002, 0.385720015), Vec2(0.140310004, 0.363550007), Vec2(0.139359996, 0.339329988), Vec2(0.155520007, 0.339249998), Vec2(0.156379998, 0.362619996), Vec2(0.123709999, 0.364850014), Vec2(0.12263, 0.339430004), Vec2(0.139359996, 0.339329988), Vec2(0.140310004, 0.363550007), Vec2(0.126809999, 0.389970005), Vec2(0.123709999, 0.364850014), Vec2(0.140310004, 0.363550007), Vec2(0.143040001, 0.387490004), Vec2(0.109949999, 0.393119991), Vec2(0.106409997, 0.36649999), Vec2(0.123709999, 0.364850014), Vec2(0.126809999, 0.389970005), Vec2(0.106409997, 0.36649999), Vec2(0.105169997, 0.339560002), Vec2(0.12263, 0.339430004), Vec2(0.123709999, 0.364850014), Vec2(0.0882600024, 0.368470013), Vec2(0.0868399963, 0.339709997), Vec2(0.105169997, 0.339560002), Vec2(0.106409997, 0.36649999), Vec2(0.0923099965, 0.396869987), Vec2(0.0882600024, 0.368470013), Vec2(0.106409997, 0.36649999), Vec2(0.109949999, 0.393119991), Vec2(0.123899996, 0.44400999), Vec2(0.115790002, 0.419070005), Vec2(0.131899998, 0.41444999), Vec2(0.138909996, 0.437940001), Vec2(0.115790002, 0.419070005), Vec2(0.109949999, 0.393119991), Vec2(0.126809999, 0.389970005), Vec2(0.131899998, 0.41444999), Vec2(0.0990099981, 0.424549997), Vec2(0.0923099965, 0.396869987), Vec2(0.109949999, 0.393119991), Vec2(0.115790002, 0.419070005), Vec2(0.108309999, 0.451160014), Vec2(0.0990099981, 0.424549997), Vec2(0.115790002, 0.419070005), Vec2(0.123899996, 0.44400999), Vec2(0.091959998, 0.459190011), Vec2(0.0813800022, 0.43077001), Vec2(0.0990099981, 0.424549997), Vec2(0.108309999, 0.451160014), Vec2(0.0813800022, 0.43077001), Vec2(0.0737499967, 0.401149988), Vec2(0.0923099965, 0.396869987), Vec2(0.0990099981, 0.424549997), Vec2(0.0627800003, 0.43761), Vec2(0.0541299991, 0.405900002), Vec2(0.0737499967, 0.401149988), Vec2(0.0813800022, 0.43077001), Vec2(0.0746800005, 0.46796), Vec2(0.0627800003, 0.43761), Vec2(0.0813800022, 0.43077001), Vec2(0.091959998, 0.459190011), Vec2(0.0737499967, 0.401149988), Vec2(0.0691199973, 0.370730013), Vec2(0.0882600024, 0.368470013), Vec2(0.0923099965, 0.396869987), Vec2(0.0691199973, 0.370730013), Vec2(0.0674899966, 0.339899987), Vec2(0.0868399963, 0.339709997), Vec2(0.0882600024, 0.368470013), Vec2(0.0488499999, 0.373259991), Vec2(0.0469899997, 0.340140015), Vec2(0.0674899966, 0.339899987), Vec2(0.0691199973, 0.370730013), Vec2(0.0541299991, 0.405900002), Vec2(0.0488499999, 0.373259991), Vec2(0.0691199973, 0.370730013), Vec2(0.0737499967, 0.401149988), Vec2(0.0333099999, 0.411060005), Vec2(0.0273199994, 0.376029998), Vec2(0.0488499999, 0.373259991), Vec2(0.0541299991, 0.405900002), Vec2(0.0273199994, 0.376029998), Vec2(0.0252, 0.340420008), Vec2(0.0469899997, 0.340140015), Vec2(0.0488499999, 0.373259991), Vec2(0.00437000021, 0.379020005), Vec2(0.00194999995, 0.340770006), Vec2(0.0252, 0.340420008), Vec2(0.0273199994, 0.376029998), Vec2(0.0111199999, 0.416570008), Vec2(0.00437000021, 0.379020005), Vec2(0.0273199994, 0.376029998), Vec2(0.0333099999, 0.411060005), Vec2(0.0563400015, 0.47736001), Vec2(0.0430399999, 0.444990009), Vec2(0.0627800003, 0.43761), Vec2(0.0746800005, 0.46796), Vec2(0.0430399999, 0.444990009), Vec2(0.0333099999, 0.411060005), Vec2(0.0541299991, 0.405900002), Vec2(0.0627800003, 0.43761), Vec2(0.0220100004, 0.452829987), Vec2(0.0111199999, 0.416570008), Vec2(0.0333099999, 0.411060005), Vec2(0.0430399999, 0.444990009), Vec2(0.03675, 0.487300009), Vec2(0.0220100004, 0.452829987), Vec2(0.0430399999, 0.444990009), Vec2(0.0563400015, 0.47736001), Vec2(0.162070006, 0.554069996), Vec2(0.140530005, 0.533789992), Vec2(0.151419997, 0.520910025), Vec2(0.170719996, 0.539680004), Vec2(0.140530005, 0.533789992), Vec2(0.121610001, 0.511030018), Vec2(0.134550005, 0.499680012), Vec2(0.151419997, 0.520910025), Vec2(0.128629997, 0.547410011), Vec2(0.10774, 0.523159981), Vec2(0.121610001, 0.511030018), Vec2(0.140530005, 0.533789992), Vec2(0.152280003, 0.569109976), Vec2(0.128629997, 0.547410011), Vec2(0.140530005, 0.533789992), Vec2(0.162070006, 0.554069996), Vec2(0.121610001, 0.511030018), Vec2(0.105400003, 0.486059994), Vec2(0.120169997, 0.476319999), Vec2(0.134550005, 0.499680012), Vec2(0.105400003, 0.486059994), Vec2(0.091959998, 0.459190011), Vec2(0.108309999, 0.451160014), Vec2(0.120169997, 0.476319999), Vec2(0.0897200033, 0.496589988), Vec2(0.0746800005, 0.46796), Vec2(0.091959998, 0.459190011), Vec2(0.105400003, 0.486059994), Vec2(0.10774, 0.523159981), Vec2(0.0897200033, 0.496589988), Vec2(0.105400003, 0.486059994), Vec2(0.121610001, 0.511030018), Vec2(0.0927900001, 0.535969973), Vec2(0.0729900002, 0.507790029), Vec2(0.0897200033, 0.496589988), Vec2(0.10774, 0.523159981), Vec2(0.0729900002, 0.507790029), Vec2(0.0563400015, 0.47736001), Vec2(0.0746800005, 0.46796), Vec2(0.0897200033, 0.496589988), Vec2(0.0550500005, 0.519580007), Vec2(0.03675, 0.487300009), Vec2(0.0563400015, 0.47736001), Vec2(0.0729900002, 0.507790029), Vec2(0.0766099989, 0.549399972), Vec2(0.0550500005, 0.519580007), Vec2(0.0729900002, 0.507790029), Vec2(0.0927900001, 0.535969973), Vec2(0.141220003, 0.584730029), Vec2(0.115560003, 0.561670005), Vec2(0.128629997, 0.547410011), Vec2(0.152280003, 0.569109976), Vec2(0.115560003, 0.561670005), Vec2(0.0927900001, 0.535969973), Vec2(0.10774, 0.523159981), Vec2(0.128629997, 0.547410011), Vec2(0.101209998, 0.576569974), Vec2(0.0766099989, 0.549399972), Vec2(0.0927900001, 0.535969973), Vec2(0.115560003, 0.561670005), Vec2(0.128780007, 0.600870013), Vec2(0.101209998, 0.576569974), Vec2(0.115560003, 0.561670005), Vec2(0.141220003, 0.584730029), Vec2(0.139359996, 0.339329988), Vec2(0.140200004, 0.315100014), Vec2(0.156289995, 0.315869987), Vec2(0.155520007, 0.339249998), Vec2(0.140200004, 0.315100014), Vec2(0.142829999, 0.291150004), Vec2(0.158659995, 0.292769998), Vec2(0.156289995, 0.315869987), Vec2(0.123570003, 0.31400001), Vec2(0.126540005, 0.288850009), Vec2(0.142829999, 0.291150004), Vec2(0.140200004, 0.315100014), Vec2(0.12263, 0.339430004), Vec2(0.123570003, 0.31400001), Vec2(0.140200004, 0.315100014), Vec2(0.139359996, 0.339329988), Vec2(0.142829999, 0.291150004), Vec2(0.147200003, 0.26778999), Vec2(0.162550002, 0.270229995), Vec2(0.158659995, 0.292769998), Vec2(0.147200003, 0.26778999), Vec2(0.153209999, 0.245409995), Vec2(0.167820007, 0.248590007), Vec2(0.162550002, 0.270229995), Vec2(0.131530002, 0.264319986), Vec2(0.138469994, 0.240779996), Vec2(0.153209999, 0.245409995), Vec2(0.147200003, 0.26778999), Vec2(0.126540005, 0.288850009), Vec2(0.131530002, 0.264319986), Vec2(0.147200003, 0.26778999), Vec2(0.142829999, 0.291150004), Vec2(0.109630004, 0.285939991), Vec2(0.115340002, 0.259909987), Vec2(0.131530002, 0.264319986), Vec2(0.126540005, 0.288850009), Vec2(0.115340002, 0.259909987), Vec2(0.123360001, 0.234899998), Vec2(0.138469994, 0.240779996), Vec2(0.131530002, 0.264319986), Vec2(0.0984599963, 0.254700005), Vec2(0.107660003, 0.227980003), Vec2(0.123360001, 0.234899998), Vec2(0.115340002, 0.259909987), Vec2(0.0919200033, 0.282480001), Vec2(0.0984599963, 0.254700005), Vec2(0.115340002, 0.259909987), Vec2(0.109630004, 0.285939991), Vec2(0.105169997, 0.339560002), Vec2(0.106239997, 0.312599987), Vec2(0.123570003, 0.31400001), Vec2(0.12263, 0.339430004), Vec2(0.106239997, 0.312599987), Vec2(0.109630004, 0.285939991), Vec2(0.126540005, 0.288850009), Vec2(0.123570003, 0.31400001), Vec2(0.088059999, 0.310939997), Vec2(0.0919200033, 0.282480001), Vec2(0.109630004, 0.285939991), Vec2(0.106239997, 0.312599987), Vec2(0.0868399963, 0.339709997), Vec2(0.088059999, 0.310939997), Vec2(0.106239997, 0.312599987), Vec2(0.105169997, 0.339560002), Vec2(0.153209999, 0.245409995), Vec2(0.160699993, 0.22439), Vec2(0.174219996, 0.228259996), Vec2(0.167820007, 0.248590007), Vec2(0.160699993, 0.22439), Vec2(0.169459999, 0.205270007), Vec2(0.181370005, 0.209729999), Vec2(0.174219996, 0.228259996), Vec2(0.147269994, 0.218620002), Vec2(0.157890007, 0.198280007), Vec2(0.169459999, 0.205270007), Vec2(0.160699993, 0.22439), Vec2(0.138469994, 0.240779996), Vec2(0.147269994, 0.218620002), Vec2(0.160699993, 0.22439), Vec2(0.153209999, 0.245409995), Vec2(0.169459999, 0.205270007), Vec2(0.179299995, 0.18874), Vec2(0.188590005, 0.19382), Vec2(0.181370005, 0.209729999), Vec2(0.179299995, 0.18874), Vec2(0.190329999, 0.175870001), Vec2(0.194059998, 0.183160007), Vec2(0.188590005, 0.19382), Vec2(0.170330003, 0.180250004), Vec2(0.184719995, 0.165069997), Vec2(0.190329999, 0.175870001), Vec2(0.179299995, 0.18874), Vec2(0.157890007, 0.198280007), Vec2(0.170330003, 0.180250004), Vec2(0.179299995, 0.18874), Vec2(0.169459999, 0.205270007), Vec2(0.146139994, 0.18942), Vec2(0.160929993, 0.169740006), Vec2(0.170330003, 0.180250004), Vec2(0.157890007, 0.198280007), Vec2(0.160929993, 0.169740006), Vec2(0.177990004, 0.152649999), Vec2(0.184719995, 0.165069997), Vec2(0.170330003, 0.180250004), Vec2(0.150800005, 0.157920003), Vec2(0.17024, 0.139139995), Vec2(0.177990004, 0.152649999), Vec2(0.160929993, 0.169740006), Vec2(0.133849993, 0.179220006), Vec2(0.150800005, 0.157920003), Vec2(0.160929993, 0.169740006), Vec2(0.146139994, 0.18942), Vec2(0.123360001, 0.234899998), Vec2(0.133619994, 0.211270005), Vec2(0.147269994, 0.218620002), Vec2(0.138469994, 0.240779996), Vec2(0.133619994, 0.211270005), Vec2(0.146139994, 0.18942), Vec2(0.157890007, 0.198280007), Vec2(0.147269994, 0.218620002), Vec2(0.119460002, 0.202700004), Vec2(0.133849993, 0.179220006), Vec2(0.146139994, 0.18942), Vec2(0.133619994, 0.211270005), Vec2(0.107660003, 0.227980003), Vec2(0.119460002, 0.202700004), Vec2(0.133619994, 0.211270005), Vec2(0.123360001, 0.234899998), Vec2(0.091169998, 0.22022), Vec2(0.104549997, 0.193179995), Vec2(0.119460002, 0.202700004), Vec2(0.107660003, 0.227980003), Vec2(0.104549997, 0.193179995), Vec2(0.12077, 0.168050006), Vec2(0.133849993, 0.179220006), Vec2(0.119460002, 0.202700004), Vec2(0.0886899978, 0.182919994), Vec2(0.106720001, 0.156110004), Vec2(0.12077, 0.168050006), Vec2(0.104549997, 0.193179995), Vec2(0.073739998, 0.211789995), Vec2(0.0886899978, 0.182919994), Vec2(0.104549997, 0.193179995), Vec2(0.091169998, 0.22022), Vec2(0.12077, 0.168050006), Vec2(0.139770001, 0.145150006), Vec2(0.150800005, 0.157920003), Vec2(0.133849993, 0.179220006), Vec2(0.139770001, 0.145150006), Vec2(0.161449999, 0.124810003), Vec2(0.17024, 0.139139995), Vec2(0.150800005, 0.157920003), Vec2(0.127690002, 0.131650001), Vec2(0.15151, 0.109810002), Vec2(0.161449999, 0.124810003), Vec2(0.139770001, 0.145150006), Vec2(0.106720001, 0.156110004), Vec2(0.127690002, 0.131650001), Vec2(0.139770001, 0.145150006), Vec2(0.12077, 0.168050006), Vec2(0.0915599987, 0.143519998), Vec2(0.114440002, 0.1175), Vec2(0.127690002, 0.131650001), Vec2(0.106720001, 0.156110004), Vec2(0.114440002, 0.1175), Vec2(0.140279993, 0.0941800028), Vec2(0.15151, 0.109810002), Vec2(0.127690002, 0.131650001), Vec2(0.0998800024, 0.102739997), Vec2(0.127639994, 0.0779199973), Vec2(0.140279993, 0.0941800028), Vec2(0.114440002, 0.1175), Vec2(0.0751499981, 0.130360007), Vec2(0.0998800024, 0.102739997), Vec2(0.114440002, 0.1175), Vec2(0.0915599987, 0.143519998), Vec2(0.0551999994, 0.202790007), Vec2(0.0717599988, 0.172040001), Vec2(0.0886899978, 0.182919994), Vec2(0.073739998, 0.211789995), Vec2(0.0717599988, 0.172040001), Vec2(0.0915599987, 0.143519998), Vec2(0.106720001, 0.156110004), Vec2(0.0886899978, 0.182919994), Vec2(0.0535599999, 0.160620004), Vec2(0.0751499981, 0.130360007), Vec2(0.0915599987, 0.143519998), Vec2(0.0717599988, 0.172040001), Vec2(0.035360001, 0.193320006), Vec2(0.0535599999, 0.160620004), Vec2(0.0717599988, 0.172040001), Vec2(0.0551999994, 0.202790007), Vec2(0.0674899966, 0.339899987), Vec2(0.0688799992, 0.309049994), Vec2(0.088059999, 0.310939997), Vec2(0.0868399963, 0.339709997), Vec2(0.0688799992, 0.309049994), Vec2(0.0732899979, 0.278549999), Vec2(0.0919200033, 0.282480001), Vec2(0.088059999, 0.310939997), Vec2(0.048560001, 0.306980014), Vec2(0.0535699986, 0.274230003), Vec2(0.0732899979, 0.278549999), Vec2(0.0688799992, 0.309049994), Vec2(0.0469899997, 0.340140015), Vec2(0.048560001, 0.306980014), Vec2(0.0688799992, 0.309049994), Vec2(0.0674899966, 0.339899987), Vec2(0.0732899979, 0.278549999), Vec2(0.0807299986, 0.248809993), Vec2(0.0984599963, 0.254700005), Vec2(0.0919200033, 0.282480001), Vec2(0.0807299986, 0.248809993), Vec2(0.091169998, 0.22022), Vec2(0.107660003, 0.227980003), Vec2(0.0984599963, 0.254700005), Vec2(0.0619900003, 0.242359996), Vec2(0.073739998, 0.211789995), Vec2(0.091169998, 0.22022), Vec2(0.0807299986, 0.248809993), Vec2(0.0535699986, 0.274230003), Vec2(0.0619900003, 0.242359996), Vec2(0.0807299986, 0.248809993), Vec2(0.0732899979, 0.278549999), Vec2(0.0326200016, 0.269600004), Vec2(0.0420899987, 0.23545), Vec2(0.0619900003, 0.242359996), Vec2(0.0535699986, 0.274230003), Vec2(0.0420899987, 0.23545), Vec2(0.0551999994, 0.202790007), Vec2(0.073739998, 0.211789995), Vec2(0.0619900003, 0.242359996), Vec2(0.0208400004, 0.228159994), Vec2(0.035360001, 0.193320006), Vec2(0.0551999994, 0.202790007), Vec2(0.0420899987, 0.23545), Vec2(0.01028, 0.264710009), Vec2(0.0208400004, 0.228159994), Vec2(0.0420899987, 0.23545), Vec2(0.0326200016, 0.269600004), Vec2(0.0252, 0.340420008), Vec2(0.0269699991, 0.304760009), Vec2(0.048560001, 0.306980014), Vec2(0.0469899997, 0.340140015), Vec2(0.0269699991, 0.304760009), Vec2(0.0326200016, 0.269600004), Vec2(0.0535699986, 0.274230003), Vec2(0.048560001, 0.306980014), Vec2(0.00393000012, 0.302450001), Vec2(0.01028, 0.264710009), Vec2(0.0326200016, 0.269600004), Vec2(0.0269699991, 0.304760009), Vec2(0.00194999995, 0.340770006), Vec2(0.00393000012, 0.302450001), Vec2(0.0269699991, 0.304760009), Vec2(0.0252, 0.340420008), Vec2(0.974789977, 0.340249985), Vec2(0.97262001, 0.304729998), Vec2(0.995580018, 0.301730007), Vec2(0.99804002, 0.339870006), Vec2(0.97262001, 0.304729998), Vec2(0.966620028, 0.269789994), Vec2(0.988810003, 0.264270008), Vec2(0.995580018, 0.301730007), Vec2(0.951080024, 0.307520002), Vec2(0.945779979, 0.274960011), Vec2(0.966620028, 0.269789994), Vec2(0.97262001, 0.304729998), Vec2(0.952979982, 0.340559989), Vec2(0.951080024, 0.307520002), Vec2(0.97262001, 0.304729998), Vec2(0.974789977, 0.340249985), Vec2(0.966620028, 0.269789994), Vec2(0.956900001, 0.235929996), Vec2(0.977940023, 0.228100002), Vec2(0.988810003, 0.264270008), Vec2(0.956900001, 0.235929996), Vec2(0.94362998, 0.203610003), Vec2(0.963230014, 0.193680003), Vec2(0.977940023, 0.228100002), Vec2(0.937150002, 0.243320003), Vec2(0.925260007, 0.213019997), Vec2(0.94362998, 0.203610003), Vec2(0.956900001, 0.235929996), Vec2(0.945779979, 0.274960011), Vec2(0.937150002, 0.243320003), Vec2(0.956900001, 0.235929996), Vec2(0.966620028, 0.269789994), Vec2(0.92614001, 0.279740006), Vec2(0.918519974, 0.25018999), Vec2(0.937150002, 0.243320003), Vec2(0.945779979, 0.274960011), Vec2(0.918519974, 0.25018999), Vec2(0.907970011, 0.221829996), Vec2(0.925260007, 0.213019997), Vec2(0.937150002, 0.243320003), Vec2(0.900849998, 0.256449997), Vec2(0.891579986, 0.22992), Vec2(0.907970011, 0.221829996), Vec2(0.918519974, 0.25018999), Vec2(0.907540023, 0.284049988), Vec2(0.900849998, 0.256449997), Vec2(0.918519974, 0.25018999), Vec2(0.92614001, 0.279740006), Vec2(0.932449996, 0.340810001), Vec2(0.930779994, 0.310070008), Vec2(0.951080024, 0.307520002), Vec2(0.952979982, 0.340559989), Vec2(0.930779994, 0.310070008), Vec2(0.92614001, 0.279740006), Vec2(0.945779979, 0.274960011), Vec2(0.951080024, 0.307520002), Vec2(0.911599994, 0.312359989), Vec2(0.907540023, 0.284049988), Vec2(0.92614001, 0.279740006), Vec2(0.930779994, 0.310070008), Vec2(0.913049996, 0.341019988), Vec2(0.911599994, 0.312359989), Vec2(0.930779994, 0.310070008), Vec2(0.932449996, 0.340810001), Vec2(0.94362998, 0.203610003), Vec2(0.92701, 0.173199996), Vec2(0.944980025, 0.161420003), Vec2(0.963230014, 0.193680003), Vec2(0.92701, 0.173199996), Vec2(0.907260001, 0.145009995), Vec2(0.92347002, 0.131569996), Vec2(0.944980025, 0.161420003), Vec2(0.910269976, 0.184430003), Vec2(0.892289996, 0.157879993), Vec2(0.907260001, 0.145009995), Vec2(0.92701, 0.173199996), Vec2(0.925260007, 0.213019997), Vec2(0.910269976, 0.184430003), Vec2(0.92701, 0.173199996), Vec2(0.94362998, 0.203610003), Vec2(0.907260001, 0.145009995), Vec2(0.884530008, 0.119269997), Vec2(0.89892, 0.104319997), Vec2(0.92347002, 0.131569996), Vec2(0.884530008, 0.119269997), Vec2(0.858929992, 0.0961600021), Vec2(0.871450007, 0.0797699988), Vec2(0.89892, 0.104319997), Vec2(0.871450007, 0.133640006), Vec2(0.847829998, 0.111960001), Vec2(0.858929992, 0.0961600021), Vec2(0.884530008, 0.119269997), Vec2(0.892289996, 0.157879993), Vec2(0.871450007, 0.133640006), Vec2(0.884530008, 0.119269997), Vec2(0.907260001, 0.145009995), Vec2(0.878390014, 0.170100003), Vec2(0.859520018, 0.147379994), Vec2(0.871450007, 0.133640006), Vec2(0.892289996, 0.157879993), Vec2(0.859520018, 0.147379994), Vec2(0.838029981, 0.127169997), Vec2(0.847829998, 0.111960001), Vec2(0.871450007, 0.133640006), Vec2(0.848609984, 0.160390005), Vec2(0.829349995, 0.141719997), Vec2(0.838029981, 0.127169997), Vec2(0.859520018, 0.147379994), Vec2(0.865429997, 0.181539997), Vec2(0.848609984, 0.160390005), Vec2(0.859520018, 0.147379994), Vec2(0.878390014, 0.170100003), Vec2(0.907970011, 0.221829996), Vec2(0.894569993, 0.195020005), Vec2(0.910269976, 0.184430003), Vec2(0.925260007, 0.213019997), Vec2(0.894569993, 0.195020005), Vec2(0.878390014, 0.170100003), Vec2(0.892289996, 0.157879993), Vec2(0.910269976, 0.184430003), Vec2(0.879760027, 0.204840004), Vec2(0.865429997, 0.181539997), Vec2(0.878390014, 0.170100003), Vec2(0.894569993, 0.195020005), Vec2(0.891579986, 0.22992), Vec2(0.879760027, 0.204840004), Vec2(0.894569993, 0.195020005), Vec2(0.907970011, 0.221829996), Vec2(0.875940025, 0.237130001), Vec2(0.865670025, 0.213679999), Vec2(0.879760027, 0.204840004), Vec2(0.891579986, 0.22992), Vec2(0.865670025, 0.213679999), Vec2(0.853219986, 0.191980004), Vec2(0.865429997, 0.181539997), Vec2(0.879760027, 0.204840004), Vec2(0.85206002, 0.221249998), Vec2(0.841509998, 0.20104), Vec2(0.853219986, 0.191980004), Vec2(0.865670025, 0.213679999), Vec2(0.86085999, 0.243249997), Vec2(0.85206002, 0.221249998), Vec2(0.865670025, 0.213679999), Vec2(0.875940025, 0.237130001), Vec2(0.853219986, 0.191980004), Vec2(0.838559985, 0.172429994), Vec2(0.848609984, 0.160390005), Vec2(0.865429997, 0.181539997), Vec2(0.838559985, 0.172429994), Vec2(0.821680009, 0.155430004), Vec2(0.829349995, 0.141719997), Vec2(0.848609984, 0.160390005), Vec2(0.829190016, 0.183129996), Vec2(0.814970016, 0.168009996), Vec2(0.821680009, 0.155430004), Vec2(0.838559985, 0.172429994), Vec2(0.841509998, 0.20104), Vec2(0.829190016, 0.183129996), Vec2(0.838559985, 0.172429994), Vec2(0.853219986, 0.191980004), Vec2(0.829970002, 0.208179995), Vec2(0.820230007, 0.191760004), Vec2(0.829190016, 0.183129996), Vec2(0.841509998, 0.20104), Vec2(0.820230007, 0.191760004), Vec2(0.809329987, 0.178929999), Vec2(0.814970016, 0.168009996), Vec2(0.829190016, 0.183129996), Vec2(0.810959995, 0.196899995), Vec2(0.805589974, 0.186350003), Vec2(0.809329987, 0.178929999), Vec2(0.820230007, 0.191760004), Vec2(0.818069994, 0.212720007), Vec2(0.810959995, 0.196899995), Vec2(0.820230007, 0.191760004), Vec2(0.829970002, 0.208179995), Vec2(0.846109986, 0.248060003), Vec2(0.838649988, 0.227180004), Vec2(0.85206002, 0.221249998), Vec2(0.86085999, 0.243249997), Vec2(0.838649988, 0.227180004), Vec2(0.829970002, 0.208179995), Vec2(0.841509998, 0.20104), Vec2(0.85206002, 0.221249998), Vec2(0.825139999, 0.23116), Vec2(0.818069994, 0.212720007), Vec2(0.829970002, 0.208179995), Vec2(0.838649988, 0.227180004), Vec2(0.831499994, 0.251370013), Vec2(0.825139999, 0.23116), Vec2(0.838649988, 0.227180004), Vec2(0.846109986, 0.248060003), Vec2(0.894659996, 0.34119001), Vec2(0.89339, 0.314350009), Vec2(0.911599994, 0.312359989), Vec2(0.913049996, 0.341019988), Vec2(0.89339, 0.314350009), Vec2(0.889840007, 0.287829995), Vec2(0.907540023, 0.284049988), Vec2(0.911599994, 0.312359989), Vec2(0.876020014, 0.316009998), Vec2(0.872910023, 0.291000009), Vec2(0.889840007, 0.287829995), Vec2(0.89339, 0.314350009), Vec2(0.877139986, 0.341320008), Vec2(0.876020014, 0.316009998), Vec2(0.89339, 0.314350009), Vec2(0.894659996, 0.34119001), Vec2(0.889840007, 0.287829995), Vec2(0.884010017, 0.261970013), Vec2(0.900849998, 0.256449997), Vec2(0.907540023, 0.284049988), Vec2(0.884010017, 0.261970013), Vec2(0.875940025, 0.237130001), Vec2(0.891579986, 0.22992), Vec2(0.900849998, 0.256449997), Vec2(0.867839992, 0.266629994), Vec2(0.86085999, 0.243249997), Vec2(0.875940025, 0.237130001), Vec2(0.884010017, 0.261970013), Vec2(0.872910023, 0.291000009), Vec2(0.867839992, 0.266629994), Vec2(0.884010017, 0.261970013), Vec2(0.889840007, 0.287829995), Vec2(0.856589973, 0.293500006), Vec2(0.852150023, 0.270300001), Vec2(0.867839992, 0.266629994), Vec2(0.872910023, 0.291000009), Vec2(0.852150023, 0.270300001), Vec2(0.846109986, 0.248060003), Vec2(0.86085999, 0.243249997), Vec2(0.867839992, 0.266629994), Vec2(0.836769998, 0.272879988), Vec2(0.831499994, 0.251370013), Vec2(0.846109986, 0.248060003), Vec2(0.852150023, 0.270300001), Vec2(0.840709984, 0.29528001), Vec2(0.836769998, 0.272879988), Vec2(0.852150023, 0.270300001), Vec2(0.856589973, 0.293500006), Vec2(0.860319972, 0.341419995), Vec2(0.859329998, 0.317319989), Vec2(0.876020014, 0.316009998), Vec2(0.877139986, 0.341320008), Vec2(0.859329998, 0.317319989), Vec2(0.856589973, 0.293500006), Vec2(0.872910023, 0.291000009), Vec2(0.876020014, 0.316009998), Vec2(0.843159974, 0.31825), Vec2(0.840709984, 0.29528001), Vec2(0.856589973, 0.293500006), Vec2(0.859329998, 0.317319989), Vec2(0.844060004, 0.341500014), Vec2(0.843159974, 0.31825), Vec2(0.859329998, 0.317319989), Vec2(0.860319972, 0.341419995), Vec2(0.860819995, 0.586709976), Vec2(0.886500001, 0.563220024), Vec2(0.901189983, 0.577929974), Vec2(0.873660028, 0.603190005), Vec2(0.886500001, 0.563220024), Vec2(0.909210026, 0.537039995), Vec2(0.925719976, 0.55013001), Vec2(0.901189983, 0.577929974), Vec2(0.873160005, 0.549000025), Vec2(0.893980026, 0.524460018), Vec2(0.909210026, 0.537039995), Vec2(0.886500001, 0.563220024), Vec2(0.849479973, 0.570919991), Vec2(0.873160005, 0.549000025), Vec2(0.886500001, 0.563220024), Vec2(0.860819995, 0.586709976), Vec2(0.909210026, 0.537039995), Vec2(0.928849995, 0.508440018), Vec2(0.947109997, 0.519770026), Vec2(0.925719976, 0.55013001), Vec2(0.928849995, 0.508440018), Vec2(0.945240021, 0.47766), Vec2(0.965120018, 0.487029999), Vec2(0.947109997, 0.519770026), Vec2(0.911849976, 0.497590005), Vec2(0.926649988, 0.468699992), Vec2(0.945240021, 0.47766), Vec2(0.928849995, 0.508440018), Vec2(0.893980026, 0.524460018), Vec2(0.911849976, 0.497590005), Vec2(0.928849995, 0.508440018), Vec2(0.909210026, 0.537039995), Vec2(0.879869998, 0.512470007), Vec2(0.895940006, 0.487309992), Vec2(0.911849976, 0.497590005), Vec2(0.893980026, 0.524460018), Vec2(0.895940006, 0.487309992), Vec2(0.909169972, 0.460269988), Vec2(0.926649988, 0.468699992), Vec2(0.911849976, 0.497590005), Vec2(0.880970001, 0.477750003), Vec2(0.892629981, 0.452490002), Vec2(0.909169972, 0.460269988), Vec2(0.895940006, 0.487309992), Vec2(0.866729975, 0.501209974), Vec2(0.880970001, 0.477750003), Vec2(0.895940006, 0.487309992), Vec2(0.879869998, 0.512470007), Vec2(0.839460015, 0.555760026), Vec2(0.861020029, 0.535390019), Vec2(0.873160005, 0.549000025), Vec2(0.849479973, 0.570919991), Vec2(0.861020029, 0.535390019), Vec2(0.879869998, 0.512470007), Vec2(0.893980026, 0.524460018), Vec2(0.873160005, 0.549000025), Vec2(0.849919975, 0.522520006), Vec2(0.866729975, 0.501209974), Vec2(0.879869998, 0.512470007), Vec2(0.861020029, 0.535390019), Vec2(0.830600023, 0.541279972), Vec2(0.849919975, 0.522520006), Vec2(0.861020029, 0.535390019), Vec2(0.839460015, 0.555760026), Vec2(0.945240021, 0.47766), Vec2(0.958199978, 0.445010006), Vec2(0.979480028, 0.452219993), Vec2(0.965120018, 0.487029999), Vec2(0.958199978, 0.445010006), Vec2(0.967530012, 0.41091001), Vec2(0.989899993, 0.41573), Vec2(0.979480028, 0.452219993), Vec2(0.938260019, 0.438149989), Vec2(0.946560025, 0.406320006), Vec2(0.967530012, 0.41091001), Vec2(0.958199978, 0.445010006), Vec2(0.926649988, 0.468699992), Vec2(0.938260019, 0.438149989), Vec2(0.958199978, 0.445010006), Vec2(0.945240021, 0.47766), Vec2(0.967530012, 0.41091001), Vec2(0.973089993, 0.375820011), Vec2(0.996140003, 0.378089994), Vec2(0.989899993, 0.41573), Vec2(0.973089993, 0.375820011), Vec2(0.974789977, 0.340249985), Vec2(0.99804002, 0.339870006), Vec2(0.996140003, 0.378089994), Vec2(0.951479971, 0.373640001), Vec2(0.952979982, 0.340559989), Vec2(0.974789977, 0.340249985), Vec2(0.973089993, 0.375820011), Vec2(0.946560025, 0.406320006), Vec2(0.951479971, 0.373640001), Vec2(0.973089993, 0.375820011), Vec2(0.967530012, 0.41091001), Vec2(0.926810026, 0.402020007), Vec2(0.931129992, 0.371589988), Vec2(0.951479971, 0.373640001), Vec2(0.946560025, 0.406320006), Vec2(0.931129992, 0.371589988), Vec2(0.932449996, 0.340810001), Vec2(0.952979982, 0.340559989), Vec2(0.951479971, 0.373640001), Vec2(0.911899984, 0.369709998), Vec2(0.913049996, 0.341019988), Vec2(0.932449996, 0.340810001), Vec2(0.931129992, 0.371589988), Vec2(0.90812999, 0.398090005), Vec2(0.911899984, 0.369709998), Vec2(0.931129992, 0.371589988), Vec2(0.926810026, 0.402020007), Vec2(0.909169972, 0.460269988), Vec2(0.919480026, 0.431710005), Vec2(0.938260019, 0.438149989), Vec2(0.926649988, 0.468699992), Vec2(0.919480026, 0.431710005), Vec2(0.926810026, 0.402020007), Vec2(0.946560025, 0.406320006), Vec2(0.938260019, 0.438149989), Vec2(0.90170002, 0.425810009), Vec2(0.90812999, 0.398090005), Vec2(0.926810026, 0.402020007), Vec2(0.919480026, 0.431710005), Vec2(0.892629981, 0.452490002), Vec2(0.90170002, 0.425810009), Vec2(0.919480026, 0.431710005), Vec2(0.909169972, 0.460269988), Vec2(0.876869977, 0.445529997), Vec2(0.884760022, 0.42058), Vec2(0.90170002, 0.425810009), Vec2(0.892629981, 0.452490002), Vec2(0.884760022, 0.42058), Vec2(0.890359998, 0.394630015), Vec2(0.90812999, 0.398090005), Vec2(0.90170002, 0.425810009), Vec2(0.868499994, 0.41613999), Vec2(0.873380005, 0.391689986), Vec2(0.890359998, 0.394630015), Vec2(0.884760022, 0.42058), Vec2(0.861689985, 0.439610004), Vec2(0.868499994, 0.41613999), Vec2(0.884760022, 0.42058), Vec2(0.876869977, 0.445529997), Vec2(0.890359998, 0.394630015), Vec2(0.893660009, 0.368050009), Vec2(0.911899984, 0.369709998), Vec2(0.90812999, 0.398090005), Vec2(0.893660009, 0.368050009), Vec2(0.894659996, 0.34119001), Vec2(0.913049996, 0.341019988), Vec2(0.911899984, 0.369709998), Vec2(0.876259983, 0.366640002), Vec2(0.877139986, 0.341320008), Vec2(0.894659996, 0.34119001), Vec2(0.893660009, 0.368050009), Vec2(0.873380005, 0.391689986), Vec2(0.876259983, 0.366640002), Vec2(0.893660009, 0.368050009), Vec2(0.890359998, 0.394630015), Vec2(0.857010007, 0.389380008), Vec2(0.859549999, 0.365539998), Vec2(0.876259983, 0.366640002), Vec2(0.873380005, 0.391689986), Vec2(0.859549999, 0.365539998), Vec2(0.860319972, 0.341419995), Vec2(0.877139986, 0.341320008), Vec2(0.876259983, 0.366640002), Vec2(0.843360007, 0.364749998), Vec2(0.844060004, 0.341500014), Vec2(0.860319972, 0.341419995), Vec2(0.859549999, 0.365539998), Vec2(0.841090024, 0.38775), Vec2(0.843360007, 0.364749998), Vec2(0.859549999, 0.365539998), Vec2(0.857010007, 0.389380008), Vec2(0.846870005, 0.434949994), Vec2(0.852750003, 0.412640005), Vec2(0.868499994, 0.41613999), Vec2(0.861689985, 0.439610004), Vec2(0.852750003, 0.412640005), Vec2(0.857010007, 0.389380008), Vec2(0.873380005, 0.391689986), Vec2(0.868499994, 0.41613999), Vec2(0.83732003, 0.410189986), Vec2(0.841090024, 0.38775), Vec2(0.857010007, 0.389380008), Vec2(0.852750003, 0.412640005), Vec2(0.832189977, 0.431739986), Vec2(0.83732003, 0.410189986), Vec2(0.852750003, 0.412640005), Vec2(0.846870005, 0.434949994), Vec2(0.822780013, 0.527639985), Vec2(0.839720011, 0.510590017), Vec2(0.849919975, 0.522520006), Vec2(0.830600023, 0.541279972), Vec2(0.839720011, 0.510590017), Vec2(0.854369998, 0.490940005), Vec2(0.866729975, 0.501209974), Vec2(0.849919975, 0.522520006), Vec2(0.830229998, 0.499989986), Vec2(0.84254998, 0.482010007), Vec2(0.854369998, 0.490940005), Vec2(0.839720011, 0.510590017), Vec2(0.815949976, 0.515120029), Vec2(0.830229998, 0.499989986), Vec2(0.839720011, 0.510590017), Vec2(0.822780013, 0.527639985), Vec2(0.854369998, 0.490940005), Vec2(0.866739988, 0.469119996), Vec2(0.880970001, 0.477750003), Vec2(0.866729975, 0.501209974), Vec2(0.866739988, 0.469119996), Vec2(0.876869977, 0.445529997), Vec2(0.892629981, 0.452490002), Vec2(0.880970001, 0.477750003), Vec2(0.853020012, 0.461710006), Vec2(0.861689985, 0.439610004), Vec2(0.876869977, 0.445529997), Vec2(0.866739988, 0.469119996), Vec2(0.84254998, 0.482010007), Vec2(0.853020012, 0.461710006), Vec2(0.866739988, 0.469119996), Vec2(0.854369998, 0.490940005), Vec2(0.830900013, 0.474970013), Vec2(0.839519978, 0.455900013), Vec2(0.853020012, 0.461710006), Vec2(0.84254998, 0.482010007), Vec2(0.839519978, 0.455900013), Vec2(0.846870005, 0.434949994), Vec2(0.861689985, 0.439610004), Vec2(0.853020012, 0.461710006), Vec2(0.825929999, 0.452010006), Vec2(0.832189977, 0.431739986), Vec2(0.846870005, 0.434949994), Vec2(0.839519978, 0.455900013), Vec2(0.81892997, 0.470479995), Vec2(0.825929999, 0.452010006), Vec2(0.839519978, 0.455900013), Vec2(0.830900013, 0.474970013), Vec2(0.810230017, 0.504260004), Vec2(0.821179986, 0.491450012), Vec2(0.830229998, 0.499989986), Vec2(0.815949976, 0.515120029), Vec2(0.821179986, 0.491450012), Vec2(0.830900013, 0.474970013), Vec2(0.84254998, 0.482010007), Vec2(0.830229998, 0.499989986), Vec2(0.811839998, 0.486330003), Vec2(0.81892997, 0.470479995), Vec2(0.830900013, 0.474970013), Vec2(0.821179986, 0.491450012), Vec2(0.806450009, 0.496930003), Vec2(0.811839998, 0.486330003), Vec2(0.821179986, 0.491450012), Vec2(0.810230017, 0.504260004), Vec2(0.203470007, 0.498450011), Vec2(0.203679994, 0.511870027), Vec2(0.190530002, 0.502749979), Vec2(0.194230005, 0.495350003), Vec2(0.203679994, 0.511870027), Vec2(0.201320007, 0.525730014), Vec2(0.184980005, 0.513610005), Vec2(0.190530002, 0.502749979), Vec2(0.219099998, 0.518850029), Vec2(0.219359994, 0.535220027), Vec2(0.201320007, 0.525730014), Vec2(0.203679994, 0.511870027), Vec2(0.217020005, 0.502390027), Vec2(0.219099998, 0.518850029), Vec2(0.203679994, 0.511870027), Vec2(0.203470007, 0.498450011), Vec2(0.201320007, 0.525730014), Vec2(0.19743, 0.540340006), Vec2(0.178340003, 0.52609998), Vec2(0.184980005, 0.513610005), Vec2(0.19743, 0.540340006), Vec2(0.192340001, 0.555649996), Vec2(0.170719996, 0.539680004), Vec2(0.178340003, 0.52609998), Vec2(0.218219995, 0.55181998), Vec2(0.215890005, 0.56882), Vec2(0.192340001, 0.555649996), Vec2(0.19743, 0.540340006), Vec2(0.219359994, 0.535220027), Vec2(0.218219995, 0.55181998), Vec2(0.19743, 0.540340006), Vec2(0.201320007, 0.525730014), Vec2(0.238639995, 0.542479992), Vec2(0.240270004, 0.56072998), Vec2(0.218219995, 0.55181998), Vec2(0.219359994, 0.535220027), Vec2(0.240270004, 0.56072998), Vec2(0.240960002, 0.579200029), Vec2(0.215890005, 0.56882), Vec2(0.218219995, 0.55181998), Vec2(0.263069987, 0.567149997), Vec2(0.267040014, 0.586799979), Vec2(0.240960002, 0.579200029), Vec2(0.240270004, 0.56072998), Vec2(0.258659989, 0.547689974), Vec2(0.263069987, 0.567149997), Vec2(0.240270004, 0.56072998), Vec2(0.238639995, 0.542479992), Vec2(0.232360005, 0.506039977), Vec2(0.236039996, 0.524320006), Vec2(0.219099998, 0.518850029), Vec2(0.217020005, 0.502390027), Vec2(0.236039996, 0.524320006), Vec2(0.238639995, 0.542479992), Vec2(0.219359994, 0.535220027), Vec2(0.219099998, 0.518850029), Vec2(0.253850013, 0.528330028), Vec2(0.258659989, 0.547689974), Vec2(0.238639995, 0.542479992), Vec2(0.236039996, 0.524320006), Vec2(0.248649999, 0.508920014), Vec2(0.253850013, 0.528330028), Vec2(0.236039996, 0.524320006), Vec2(0.232360005, 0.506039977), Vec2(0.192340001, 0.555649996), Vec2(0.186110005, 0.571579993), Vec2(0.162070006, 0.554069996), Vec2(0.170719996, 0.539680004), Vec2(0.186110005, 0.571579993), Vec2(0.17859, 0.588069975), Vec2(0.152280003, 0.569109976), Vec2(0.162070006, 0.554069996), Vec2(0.212380007, 0.586239994), Vec2(0.20747, 0.604120016), Vec2(0.17859, 0.588069975), Vec2(0.186110005, 0.571579993), Vec2(0.215890005, 0.56882), Vec2(0.212380007, 0.586239994), Vec2(0.186110005, 0.571579993), Vec2(0.192340001, 0.555649996), Vec2(0.17859, 0.588069975), Vec2(0.169599995, 0.605099976), Vec2(0.141220003, 0.584730029), Vec2(0.152280003, 0.569109976), Vec2(0.169599995, 0.605099976), Vec2(0.158940002, 0.622770011), Vec2(0.128780007, 0.600870013), Vec2(0.141220003, 0.584730029), Vec2(0.200859994, 0.62252003), Vec2(0.192269996, 0.641589999), Vec2(0.158940002, 0.622770011), Vec2(0.169599995, 0.605099976), Vec2(0.20747, 0.604120016), Vec2(0.200859994, 0.62252003), Vec2(0.169599995, 0.605099976), Vec2(0.17859, 0.588069975), Vec2(0.238780007, 0.617120028), Vec2(0.235039994, 0.636740029), Vec2(0.200859994, 0.62252003), Vec2(0.20747, 0.604120016), Vec2(0.235039994, 0.636740029), Vec2(0.228850007, 0.657119989), Vec2(0.192269996, 0.641589999), Vec2(0.200859994, 0.62252003), Vec2(0.272190005, 0.647440016), Vec2(0.268929988, 0.668900013), Vec2(0.228850007, 0.657119989), Vec2(0.235039994, 0.636740029), Vec2(0.272309989, 0.626839995), Vec2(0.272190005, 0.647440016), Vec2(0.235039994, 0.636740029), Vec2(0.238780007, 0.617120028), Vec2(0.240960002, 0.579200029), Vec2(0.240580007, 0.597980022), Vec2(0.212380007, 0.586239994), Vec2(0.215890005, 0.56882), Vec2(0.240580007, 0.597980022), Vec2(0.238780007, 0.617120028), Vec2(0.20747, 0.604120016), Vec2(0.212380007, 0.586239994), Vec2(0.270300001, 0.606679976), Vec2(0.272309989, 0.626839995), Vec2(0.238780007, 0.617120028), Vec2(0.240580007, 0.597980022), Vec2(0.267040014, 0.586799979), Vec2(0.270300001, 0.606679976), Vec2(0.240580007, 0.597980022), Vec2(0.240960002, 0.579200029), Vec2(0.293480009, 0.591530025), Vec2(0.300940007, 0.612169981), Vec2(0.270300001, 0.606679976), Vec2(0.267040014, 0.586799979), Vec2(0.300940007, 0.612169981), Vec2(0.307700008, 0.63301003), Vec2(0.272309989, 0.626839995), Vec2(0.270300001, 0.606679976), Vec2(0.331440002, 0.614180028), Vec2(0.344150007, 0.635249972), Vec2(0.307700008, 0.63301003), Vec2(0.300940007, 0.612169981), Vec2(0.319370002, 0.593249977), Vec2(0.331440002, 0.614180028), Vec2(0.300940007, 0.612169981), Vec2(0.293480009, 0.591530025), Vec2(0.307700008, 0.63301003), Vec2(0.312409997, 0.654190004), Vec2(0.272190005, 0.647440016), Vec2(0.272309989, 0.626839995), Vec2(0.312409997, 0.654190004), Vec2(0.313010007, 0.67632997), Vec2(0.268929988, 0.668900013), Vec2(0.272190005, 0.647440016), Vec2(0.355780005, 0.656459987), Vec2(0.362320006, 0.678409994), Vec2(0.313010007, 0.67632997), Vec2(0.312409997, 0.654190004), Vec2(0.344150007, 0.635249972), Vec2(0.355780005, 0.656459987), Vec2(0.312409997, 0.654190004), Vec2(0.307700008, 0.63301003), Vec2(0.379680008, 0.633029997), Vec2(0.401789993, 0.653450012), Vec2(0.355780005, 0.656459987), Vec2(0.344150007, 0.635249972), Vec2(0.401789993, 0.653450012), Vec2(0.420439988, 0.673370004), Vec2(0.362320006, 0.678409994), Vec2(0.355780005, 0.656459987), Vec2(0.444310009, 0.643970013), Vec2(0.500389993, 0.658290029), Vec2(0.420439988, 0.673370004), Vec2(0.401789993, 0.653450012), Vec2(0.409880012, 0.625890017), Vec2(0.444310009, 0.643970013), Vec2(0.401789993, 0.653450012), Vec2(0.379680008, 0.633029997), Vec2(0.343589991, 0.591830015), Vec2(0.360130012, 0.612429976), Vec2(0.331440002, 0.614180028), Vec2(0.319370002, 0.593249977), Vec2(0.360130012, 0.612429976), Vec2(0.379680008, 0.633029997), Vec2(0.344150007, 0.635249972), Vec2(0.331440002, 0.614180028), Vec2(0.384849995, 0.606750011), Vec2(0.409880012, 0.625890017), Vec2(0.379680008, 0.633029997), Vec2(0.360130012, 0.612429976), Vec2(0.365060002, 0.587239981), Vec2(0.384849995, 0.606750011), Vec2(0.360130012, 0.612429976), Vec2(0.343589991, 0.591830015), Vec2(0.265329987, 0.510739982), Vec2(0.271970004, 0.530799985), Vec2(0.253850013, 0.528330028), Vec2(0.248649999, 0.508920014), Vec2(0.271970004, 0.530799985), Vec2(0.278849989, 0.550880015), Vec2(0.258659989, 0.547689974), Vec2(0.253850013, 0.528330028), Vec2(0.289909989, 0.531620026), Vec2(0.298669994, 0.551989973), Vec2(0.278849989, 0.550880015), Vec2(0.271970004, 0.530799985), Vec2(0.281960011, 0.511309981), Vec2(0.289909989, 0.531620026), Vec2(0.271970004, 0.530799985), Vec2(0.265329987, 0.510739982), Vec2(0.278849989, 0.550880015), Vec2(0.286029994, 0.57111001), Vec2(0.263069987, 0.567149997), Vec2(0.258659989, 0.547689974), Vec2(0.286029994, 0.57111001), Vec2(0.293480009, 0.591530025), Vec2(0.267040014, 0.586799979), Vec2(0.263069987, 0.567149997), Vec2(0.30844, 0.572520018), Vec2(0.319370002, 0.593249977), Vec2(0.293480009, 0.591530025), Vec2(0.286029994, 0.57111001), Vec2(0.298669994, 0.551989973), Vec2(0.30844, 0.572520018), Vec2(0.286029994, 0.57111001), Vec2(0.278849989, 0.550880015), Vec2(0.317589998, 0.550979972), Vec2(0.329569995, 0.571330011), Vec2(0.30844, 0.572520018), Vec2(0.298669994, 0.551989973), Vec2(0.329569995, 0.571330011), Vec2(0.343589991, 0.591830015), Vec2(0.319370002, 0.593249977), Vec2(0.30844, 0.572520018), Vec2(0.348800004, 0.567589998), Vec2(0.365060002, 0.587239981), Vec2(0.343589991, 0.591830015), Vec2(0.329569995, 0.571330011), Vec2(0.335189998, 0.547879994), Vec2(0.348800004, 0.567589998), Vec2(0.329569995, 0.571330011), Vec2(0.317589998, 0.550979972), Vec2(0.298220009, 0.510519981), Vec2(0.307240009, 0.530740023), Vec2(0.289909989, 0.531620026), Vec2(0.281960011, 0.511309981), Vec2(0.307240009, 0.530740023), Vec2(0.317589998, 0.550979972), Vec2(0.298669994, 0.551989973), Vec2(0.289909989, 0.531620026), Vec2(0.323650002, 0.528159976), Vec2(0.335189998, 0.547879994), Vec2(0.317589998, 0.550979972), Vec2(0.307240009, 0.530740023), Vec2(0.313829988, 0.508350015), Vec2(0.323650002, 0.528159976), Vec2(0.307240009, 0.530740023), Vec2(0.298220009, 0.510519981), Vec2(0.842700005, 0.625060022), Vec2(0.832099974, 0.607219994), Vec2(0.860819995, 0.586709976), Vec2(0.873660028, 0.603190005), Vec2(0.832099974, 0.607219994), Vec2(0.823029995, 0.590030015), Vec2(0.849479973, 0.570919991), Vec2(0.860819995, 0.586709976), Vec2(0.800450027, 0.624689996), Vec2(0.793940008, 0.606140018), Vec2(0.823029995, 0.590030015), Vec2(0.832099974, 0.607219994), Vec2(0.80884999, 0.643920004), Vec2(0.800450027, 0.624689996), Vec2(0.832099974, 0.607219994), Vec2(0.842700005, 0.625060022), Vec2(0.823029995, 0.590030015), Vec2(0.815410018, 0.573409975), Vec2(0.839460015, 0.555760026), Vec2(0.849479973, 0.570919991), Vec2(0.815410018, 0.573409975), Vec2(0.809050024, 0.557370007), Vec2(0.830600023, 0.541279972), Vec2(0.839460015, 0.555760026), Vec2(0.789049983, 0.588119984), Vec2(0.785489976, 0.570590019), Vec2(0.809050024, 0.557370007), Vec2(0.815410018, 0.573409975), Vec2(0.793940008, 0.606140018), Vec2(0.789049983, 0.588119984), Vec2(0.815410018, 0.573409975), Vec2(0.823029995, 0.590030015), Vec2(0.762390018, 0.619090021), Vec2(0.760730028, 0.599810004), Vec2(0.789049983, 0.588119984), Vec2(0.793940008, 0.606140018), Vec2(0.760730028, 0.599810004), Vec2(0.760389984, 0.580959976), Vec2(0.785489976, 0.570590019), Vec2(0.789049983, 0.588119984), Vec2(0.730910003, 0.608399987), Vec2(0.734250009, 0.58851999), Vec2(0.760389984, 0.580959976), Vec2(0.760730028, 0.599810004), Vec2(0.728670001, 0.628660023), Vec2(0.730910003, 0.608399987), Vec2(0.760730028, 0.599810004), Vec2(0.762390018, 0.619090021), Vec2(0.771799982, 0.659430027), Vec2(0.765900016, 0.638890028), Vec2(0.800450027, 0.624689996), Vec2(0.80884999, 0.643920004), Vec2(0.765900016, 0.638890028), Vec2(0.762390018, 0.619090021), Vec2(0.793940008, 0.606140018), Vec2(0.800450027, 0.624689996), Vec2(0.728420019, 0.649460018), Vec2(0.728670001, 0.628660023), Vec2(0.762390018, 0.619090021), Vec2(0.765900016, 0.638890028), Vec2(0.731289983, 0.671140015), Vec2(0.728420019, 0.649460018), Vec2(0.765900016, 0.638890028), Vec2(0.771799982, 0.659430027), Vec2(0.809050024, 0.557370007), Vec2(0.803820014, 0.541989982), Vec2(0.822780013, 0.527639985), Vec2(0.830600023, 0.541279972), Vec2(0.803820014, 0.541989982), Vec2(0.799759984, 0.527360022), Vec2(0.815949976, 0.515120029), Vec2(0.822780013, 0.527639985), Vec2(0.783070028, 0.553539991), Vec2(0.781769991, 0.536920011), Vec2(0.799759984, 0.527360022), Vec2(0.803820014, 0.541989982), Vec2(0.785489976, 0.570590019), Vec2(0.783070028, 0.553539991), Vec2(0.803820014, 0.541989982), Vec2(0.809050024, 0.557370007), Vec2(0.799759984, 0.527360022), Vec2(0.797219992, 0.513509989), Vec2(0.810230017, 0.504260004), Vec2(0.815949976, 0.515120029), Vec2(0.797219992, 0.513509989), Vec2(0.797230005, 0.500100017), Vec2(0.806450009, 0.496930003), Vec2(0.810230017, 0.504260004), Vec2(0.781840026, 0.520579994), Vec2(0.783689976, 0.504140019), Vec2(0.797230005, 0.500100017), Vec2(0.797219992, 0.513509989), Vec2(0.781769991, 0.536920011), Vec2(0.781840026, 0.520579994), Vec2(0.797219992, 0.513509989), Vec2(0.799759984, 0.527360022), Vec2(0.762480021, 0.544250011), Vec2(0.764869988, 0.526130021), Vec2(0.781840026, 0.520579994), Vec2(0.781769991, 0.536920011), Vec2(0.764869988, 0.526130021), Vec2(0.768320024, 0.5079), Vec2(0.783689976, 0.504140019), Vec2(0.781840026, 0.520579994), Vec2(0.746990025, 0.530250013), Vec2(0.751950026, 0.510909975), Vec2(0.768320024, 0.5079), Vec2(0.764869988, 0.526130021), Vec2(0.742399991, 0.549539983), Vec2(0.746990025, 0.530250013), Vec2(0.764869988, 0.526130021), Vec2(0.762480021, 0.544250011), Vec2(0.760389984, 0.580959976), Vec2(0.761009991, 0.562470019), Vec2(0.783070028, 0.553539991), Vec2(0.785489976, 0.570590019), Vec2(0.761009991, 0.562470019), Vec2(0.762480021, 0.544250011), Vec2(0.781769991, 0.536920011), Vec2(0.783070028, 0.553539991), Vec2(0.738150001, 0.56892997), Vec2(0.742399991, 0.549539983), Vec2(0.762480021, 0.544250011), Vec2(0.761009991, 0.562470019), Vec2(0.734250009, 0.58851999), Vec2(0.738150001, 0.56892997), Vec2(0.761009991, 0.562470019), Vec2(0.760389984, 0.580959976), Vec2(0.707710028, 0.593240023), Vec2(0.715059996, 0.572960019), Vec2(0.738150001, 0.56892997), Vec2(0.734250009, 0.58851999), Vec2(0.715059996, 0.572960019), Vec2(0.722069979, 0.552860022), Vec2(0.742399991, 0.549539983), Vec2(0.738150001, 0.56892997), Vec2(0.692430019, 0.574530005), Vec2(0.702040017, 0.554139972), Vec2(0.722069979, 0.552860022), Vec2(0.715059996, 0.572960019), Vec2(0.681620002, 0.595070004), Vec2(0.692430019, 0.574530005), Vec2(0.715059996, 0.572960019), Vec2(0.707710028, 0.593240023), Vec2(0.722069979, 0.552860022), Vec2(0.728739977, 0.532869995), Vec2(0.746990025, 0.530250013), Vec2(0.742399991, 0.549539983), Vec2(0.728739977, 0.532869995), Vec2(0.73514998, 0.512889981), Vec2(0.751950026, 0.510909975), Vec2(0.746990025, 0.530250013), Vec2(0.71063, 0.533869982), Vec2(0.718360007, 0.513629973), Vec2(0.73514998, 0.512889981), Vec2(0.728739977, 0.532869995), Vec2(0.702040017, 0.554139972), Vec2(0.71063, 0.533869982), Vec2(0.728739977, 0.532869995), Vec2(0.722069979, 0.552860022), Vec2(0.682889998, 0.553330004), Vec2(0.693090022, 0.533169985), Vec2(0.71063, 0.533869982), Vec2(0.702040017, 0.554139972), Vec2(0.693090022, 0.533169985), Vec2(0.701950014, 0.513010025), Vec2(0.718360007, 0.513629973), Vec2(0.71063, 0.533869982), Vec2(0.676490009, 0.530740023), Vec2(0.686190009, 0.51098001), Vec2(0.701950014, 0.513010025), Vec2(0.693090022, 0.533169985), Vec2(0.665059984, 0.550390005), Vec2(0.676490009, 0.530740023), Vec2(0.693090022, 0.533169985), Vec2(0.682889998, 0.553330004), Vec2(0.657029986, 0.593879998), Vec2(0.671000004, 0.573570013), Vec2(0.692430019, 0.574530005), Vec2(0.681620002, 0.595070004), Vec2(0.671000004, 0.573570013), Vec2(0.682889998, 0.553330004), Vec2(0.702040017, 0.554139972), Vec2(0.692430019, 0.574530005), Vec2(0.651480019, 0.569999993), Vec2(0.665059984, 0.550390005), Vec2(0.682889998, 0.553330004), Vec2(0.671000004, 0.573570013), Vec2(0.635169983, 0.589510024), Vec2(0.651480019, 0.569999993), Vec2(0.671000004, 0.573570013), Vec2(0.657029986, 0.593879998), Vec2(0.686789989, 0.678439975), Vec2(0.687950015, 0.65595001), Vec2(0.728420019, 0.649460018), Vec2(0.731289983, 0.671140015), Vec2(0.687950015, 0.65595001), Vec2(0.693180025, 0.634570003), Vec2(0.728670001, 0.628660023), Vec2(0.728420019, 0.649460018), Vec2(0.644529998, 0.657729983), Vec2(0.656729996, 0.636539996), Vec2(0.693180025, 0.634570003), Vec2(0.687950015, 0.65595001), Vec2(0.637009978, 0.680320024), Vec2(0.644529998, 0.657729983), Vec2(0.687950015, 0.65595001), Vec2(0.686789989, 0.678439975), Vec2(0.693180025, 0.634570003), Vec2(0.700209975, 0.613749981), Vec2(0.730910003, 0.608399987), Vec2(0.728670001, 0.628660023), Vec2(0.700209975, 0.613749981), Vec2(0.707710028, 0.593240023), Vec2(0.734250009, 0.58851999), Vec2(0.730910003, 0.608399987), Vec2(0.669589996, 0.615740001), Vec2(0.681620002, 0.595070004), Vec2(0.707710028, 0.593240023), Vec2(0.700209975, 0.613749981), Vec2(0.656729996, 0.636539996), Vec2(0.669589996, 0.615740001), Vec2(0.700209975, 0.613749981), Vec2(0.693180025, 0.634570003), Vec2(0.621029973, 0.634329975), Vec2(0.640519977, 0.614189982), Vec2(0.669589996, 0.615740001), Vec2(0.656729996, 0.636539996), Vec2(0.640519977, 0.614189982), Vec2(0.657029986, 0.593879998), Vec2(0.681620002, 0.595070004), Vec2(0.669589996, 0.615740001), Vec2(0.615159988, 0.608810008), Vec2(0.635169983, 0.589510024), Vec2(0.657029986, 0.593879998), Vec2(0.640519977, 0.614189982), Vec2(0.589739978, 0.627610028), Vec2(0.615159988, 0.608810008), Vec2(0.640519977, 0.614189982), Vec2(0.621029973, 0.634329975), Vec2(0.578499973, 0.674719989), Vec2(0.598869979, 0.654150009), Vec2(0.644529998, 0.657729983), Vec2(0.637009978, 0.680320024), Vec2(0.598869979, 0.654150009), Vec2(0.621029973, 0.634329975), Vec2(0.656729996, 0.636539996), Vec2(0.644529998, 0.657729983), Vec2(0.555029988, 0.645049989), Vec2(0.589739978, 0.627610028), Vec2(0.621029973, 0.634329975), Vec2(0.598869979, 0.654150009), Vec2(0.500389993, 0.658290029), Vec2(0.555029988, 0.645049989), Vec2(0.598869979, 0.654150009), Vec2(0.578499973, 0.674719989), Vec2(0.500389993, 0.63331002), Vec2(0.538890004, 0.62766999), Vec2(0.555029988, 0.645049989), Vec2(0.500389993, 0.658290029), Vec2(0.538890004, 0.62766999), Vec2(0.570550025, 0.614780009), Vec2(0.589739978, 0.627610028), Vec2(0.555029988, 0.645049989), Vec2(0.530480027, 0.608229995), Vec2(0.557850003, 0.599129975), Vec2(0.570550025, 0.614780009), Vec2(0.538890004, 0.62766999), Vec2(0.500389993, 0.611329973), Vec2(0.530480027, 0.608229995), Vec2(0.538890004, 0.62766999), Vec2(0.500389993, 0.63331002), Vec2(0.570550025, 0.614780009), Vec2(0.596099973, 0.599039972), Vec2(0.615159988, 0.608810008), Vec2(0.589739978, 0.627610028), Vec2(0.596099973, 0.599039972), Vec2(0.617009997, 0.581849992), Vec2(0.635169983, 0.589510024), Vec2(0.615159988, 0.608810008), Vec2(0.581690013, 0.586449981), Vec2(0.602129996, 0.571669996), Vec2(0.617009997, 0.581849992), Vec2(0.596099973, 0.599039972), Vec2(0.557850003, 0.599129975), Vec2(0.581690013, 0.586449981), Vec2(0.596099973, 0.599039972), Vec2(0.570550025, 0.614780009), Vec2(0.549090028, 0.582029998), Vec2(0.570729971, 0.572009981), Vec2(0.581690013, 0.586449981), Vec2(0.557850003, 0.599129975), Vec2(0.570729971, 0.572009981), Vec2(0.590020001, 0.559599996), Vec2(0.602129996, 0.571669996), Vec2(0.581690013, 0.586449981), Vec2(0.562319994, 0.556420028), Vec2(0.58020997, 0.54618001), Vec2(0.590020001, 0.559599996), Vec2(0.570729971, 0.572009981), Vec2(0.542770028, 0.564339995), Vec2(0.562319994, 0.556420028), Vec2(0.570729971, 0.572009981), Vec2(0.549090028, 0.582029998), Vec2(0.500389993, 0.590650022), Vec2(0.525390029, 0.588639975), Vec2(0.530480027, 0.608229995), Vec2(0.500389993, 0.611329973), Vec2(0.525390029, 0.588639975), Vec2(0.549090028, 0.582029998), Vec2(0.557850003, 0.599129975), Vec2(0.530480027, 0.608229995), Vec2(0.521939993, 0.569310009), Vec2(0.542770028, 0.564339995), Vec2(0.549090028, 0.582029998), Vec2(0.525390029, 0.588639975), Vec2(0.500389993, 0.570739985), Vec2(0.521939993, 0.569310009), Vec2(0.525390029, 0.588639975), Vec2(0.500389993, 0.590650022), Vec2(0.617009997, 0.581849992), Vec2(0.634360015, 0.563870013), Vec2(0.651480019, 0.569999993), Vec2(0.635169983, 0.589510024), Vec2(0.634360015, 0.563870013), Vec2(0.648859978, 0.545419991), Vec2(0.665059984, 0.550390005), Vec2(0.651480019, 0.569999993), Vec2(0.619560003, 0.55558002), Vec2(0.634360015, 0.538630009), Vec2(0.648859978, 0.545419991), Vec2(0.634360015, 0.563870013), Vec2(0.602129996, 0.571669996), Vec2(0.619560003, 0.55558002), Vec2(0.634360015, 0.563870013), Vec2(0.617009997, 0.581849992), Vec2(0.648859978, 0.545419991), Vec2(0.661040008, 0.526639998), Vec2(0.676490009, 0.530740023), Vec2(0.665059984, 0.550390005), Vec2(0.661040008, 0.526639998), Vec2(0.671270013, 0.507589996), Vec2(0.686190009, 0.51098001), Vec2(0.676490009, 0.530740023), Vec2(0.64684999, 0.52105999), Vec2(0.657299995, 0.502950013), Vec2(0.671270013, 0.507589996), Vec2(0.661040008, 0.526639998), Vec2(0.634360015, 0.538630009), Vec2(0.64684999, 0.52105999), Vec2(0.661040008, 0.526639998), Vec2(0.648859978, 0.545419991), Vec2(0.621529996, 0.530330002), Vec2(0.633970022, 0.514190018), Vec2(0.64684999, 0.52105999), Vec2(0.634360015, 0.538630009), Vec2(0.633970022, 0.514190018), Vec2(0.644360006, 0.497269988), Vec2(0.657299995, 0.502950013), Vec2(0.64684999, 0.52105999), Vec2(0.622420013, 0.50632), Vec2(0.632510006, 0.490810007), Vec2(0.644360006, 0.497269988), Vec2(0.633970022, 0.514190018), Vec2(0.610329986, 0.520829976), Vec2(0.622420013, 0.50632), Vec2(0.633970022, 0.514190018), Vec2(0.621529996, 0.530330002), Vec2(0.590020001, 0.559599996), Vec2(0.606920004, 0.545560002), Vec2(0.619560003, 0.55558002), Vec2(0.602129996, 0.571669996), Vec2(0.606920004, 0.545560002), Vec2(0.621529996, 0.530330002), Vec2(0.634360015, 0.538630009), Vec2(0.619560003, 0.55558002), Vec2(0.596249998, 0.534189999), Vec2(0.610329986, 0.520829976), Vec2(0.621529996, 0.530330002), Vec2(0.606920004, 0.545560002), Vec2(0.58020997, 0.54618001), Vec2(0.596249998, 0.534189999), Vec2(0.606920004, 0.545560002), Vec2(0.590020001, 0.559599996), Vec2(0.572329998, 0.531830013), Vec2(0.587379992, 0.521820009), Vec2(0.596249998, 0.534189999), Vec2(0.58020997, 0.54618001), Vec2(0.587379992, 0.521820009), Vec2(0.600750029, 0.510399997), Vec2(0.610329986, 0.520829976), Vec2(0.596249998, 0.534189999), Vec2(0.580219984, 0.508660018), Vec2(0.592819989, 0.499260008), Vec2(0.600750029, 0.510399997), Vec2(0.587379992, 0.521820009), Vec2(0.566129982, 0.516830027), Vec2(0.580219984, 0.508660018), Vec2(0.587379992, 0.521820009), Vec2(0.572329998, 0.531830013), Vec2(0.600750029, 0.510399997), Vec2(0.612269998, 0.49774), Vec2(0.622420013, 0.50632), Vec2(0.610329986, 0.520829976), Vec2(0.612269998, 0.49774), Vec2(0.621800005, 0.483859986), Vec2(0.632510006, 0.490810007), Vec2(0.622420013, 0.50632), Vec2(0.603630006, 0.488689989), Vec2(0.612360001, 0.476819992), Vec2(0.621800005, 0.483859986), Vec2(0.612269998, 0.49774), Vec2(0.592819989, 0.499260008), Vec2(0.603630006, 0.488689989), Vec2(0.612269998, 0.49774), Vec2(0.600750029, 0.510399997), Vec2(0.58671999, 0.487450004), Vec2(0.596840024, 0.479360014), Vec2(0.603630006, 0.488689989), Vec2(0.592819989, 0.499260008), Vec2(0.596840024, 0.479360014), Vec2(0.604449987, 0.47025001), Vec2(0.612360001, 0.476819992), Vec2(0.603630006, 0.488689989), Vec2(0.592630029, 0.469500005), Vec2(0.599250019, 0.465579987), Vec2(0.604449987, 0.47025001), Vec2(0.596840024, 0.479360014), Vec2(0.582710028, 0.474830002), Vec2(0.592630029, 0.469500005), Vec2(0.596840024, 0.479360014), Vec2(0.58671999, 0.487450004), Vec2(0.561479986, 0.501309991), Vec2(0.574779987, 0.494819999), Vec2(0.580219984, 0.508660018), Vec2(0.566129982, 0.516830027), Vec2(0.574779987, 0.494819999), Vec2(0.58671999, 0.487450004), Vec2(0.592819989, 0.499260008), Vec2(0.580219984, 0.508660018), Vec2(0.571099997, 0.480280012), Vec2(0.582710028, 0.474830002), Vec2(0.58671999, 0.487450004), Vec2(0.574779987, 0.494819999), Vec2(0.558290005, 0.485320002), Vec2(0.571099997, 0.480280012), Vec2(0.574779987, 0.494819999), Vec2(0.561479986, 0.501309991), Vec2(0.500389993, 0.551400006), Vec2(0.519469976, 0.550300002), Vec2(0.521939993, 0.569310009), Vec2(0.500389993, 0.570739985), Vec2(0.519469976, 0.550300002), Vec2(0.538079977, 0.546459973), Vec2(0.542770028, 0.564339995), Vec2(0.521939993, 0.569310009), Vec2(0.517650008, 0.531599998), Vec2(0.534569979, 0.528569996), Vec2(0.538079977, 0.546459973), Vec2(0.519469976, 0.550300002), Vec2(0.500389993, 0.532480001), Vec2(0.517650008, 0.531599998), Vec2(0.519469976, 0.550300002), Vec2(0.500389993, 0.551400006), Vec2(0.538079977, 0.546459973), Vec2(0.555809975, 0.540170014), Vec2(0.562319994, 0.556420028), Vec2(0.542770028, 0.564339995), Vec2(0.555809975, 0.540170014), Vec2(0.572329998, 0.531830013), Vec2(0.58020997, 0.54618001), Vec2(0.562319994, 0.556420028), Vec2(0.550819993, 0.523559988), Vec2(0.566129982, 0.516830027), Vec2(0.572329998, 0.531830013), Vec2(0.555809975, 0.540170014), Vec2(0.534569979, 0.528569996), Vec2(0.550819993, 0.523559988), Vec2(0.555809975, 0.540170014), Vec2(0.538079977, 0.546459973), Vec2(0.531989992, 0.510689974), Vec2(0.547129989, 0.506690025), Vec2(0.550819993, 0.523559988), Vec2(0.534569979, 0.528569996), Vec2(0.547129989, 0.506690025), Vec2(0.561479986, 0.501309991), Vec2(0.566129982, 0.516830027), Vec2(0.550819993, 0.523559988), Vec2(0.544579983, 0.489589989), Vec2(0.558290005, 0.485320002), Vec2(0.561479986, 0.501309991), Vec2(0.547129989, 0.506690025), Vec2(0.530219972, 0.492810011), Vec2(0.544579983, 0.489589989), Vec2(0.547129989, 0.506690025), Vec2(0.531989992, 0.510689974), Vec2(0.500389993, 0.513880014), Vec2(0.516330004, 0.513119996), Vec2(0.517650008, 0.531599998), Vec2(0.500389993, 0.532480001), Vec2(0.516330004, 0.513119996), Vec2(0.531989992, 0.510689974), Vec2(0.534569979, 0.528569996), Vec2(0.517650008, 0.531599998), Vec2(0.51542002, 0.494789988), Vec2(0.530219972, 0.492810011), Vec2(0.531989992, 0.510689974), Vec2(0.516330004, 0.513119996), Vec2(0.500389993, 0.49544999), Vec2(0.51542002, 0.494789988), Vec2(0.516330004, 0.513119996), Vec2(0.500389993, 0.513880014), Vec2(0.328619987, 0.504840016), Vec2(0.338959992, 0.523949981), Vec2(0.323650002, 0.528159976), Vec2(0.313829988, 0.508350015), Vec2(0.338959992, 0.523949981), Vec2(0.351229995, 0.542800009), Vec2(0.335189998, 0.547879994), Vec2(0.323650002, 0.528159976), Vec2(0.35304001, 0.518280029), Vec2(0.365619987, 0.535939991), Vec2(0.351229995, 0.542800009), Vec2(0.338959992, 0.523949981), Vec2(0.342489988, 0.500119984), Vec2(0.35304001, 0.518280029), Vec2(0.338959992, 0.523949981), Vec2(0.328619987, 0.504840016), Vec2(0.351229995, 0.542800009), Vec2(0.365790009, 0.561370015), Vec2(0.348800004, 0.567589998), Vec2(0.335189998, 0.547879994), Vec2(0.365790009, 0.561370015), Vec2(0.383150011, 0.57950002), Vec2(0.365060002, 0.587239981), Vec2(0.348800004, 0.567589998), Vec2(0.380490005, 0.552999973), Vec2(0.397969991, 0.56923002), Vec2(0.383150011, 0.57950002), Vec2(0.365790009, 0.561370015), Vec2(0.365619987, 0.535939991), Vec2(0.380490005, 0.552999973), Vec2(0.365790009, 0.561370015), Vec2(0.351229995, 0.542800009), Vec2(0.37834999, 0.527589977), Vec2(0.393029988, 0.542940021), Vec2(0.380490005, 0.552999973), Vec2(0.365619987, 0.535939991), Vec2(0.393029988, 0.542940021), Vec2(0.409999996, 0.557139993), Vec2(0.397969991, 0.56923002), Vec2(0.380490005, 0.552999973), Vec2(0.403629988, 0.531610012), Vec2(0.419750005, 0.543820024), Vec2(0.409999996, 0.557139993), Vec2(0.393029988, 0.542940021), Vec2(0.389479995, 0.518100023), Vec2(0.403629988, 0.531610012), Vec2(0.393029988, 0.542940021), Vec2(0.37834999, 0.527589977), Vec2(0.355369985, 0.494399995), Vec2(0.365839988, 0.511370003), Vec2(0.35304001, 0.518280029), Vec2(0.342489988, 0.500119984), Vec2(0.365839988, 0.511370003), Vec2(0.37834999, 0.527589977), Vec2(0.365619987, 0.535939991), Vec2(0.35304001, 0.518280029), Vec2(0.377339989, 0.503499985), Vec2(0.389479995, 0.518100023), Vec2(0.37834999, 0.527589977), Vec2(0.365839988, 0.511370003), Vec2(0.367210001, 0.48793), Vec2(0.377339989, 0.503499985), Vec2(0.365839988, 0.511370003), Vec2(0.355369985, 0.494399995), Vec2(0.383150011, 0.57950002), Vec2(0.404040009, 0.596889973), Vec2(0.384849995, 0.606750011), Vec2(0.365060002, 0.587239981), Vec2(0.404040009, 0.596889973), Vec2(0.4296, 0.612860024), Vec2(0.409880012, 0.625890017), Vec2(0.384849995, 0.606750011), Vec2(0.418469995, 0.584190011), Vec2(0.442400008, 0.597109973), Vec2(0.4296, 0.612860024), Vec2(0.404040009, 0.596889973), Vec2(0.397969991, 0.56923002), Vec2(0.418469995, 0.584190011), Vec2(0.404040009, 0.596889973), Vec2(0.383150011, 0.57950002), Vec2(0.4296, 0.612860024), Vec2(0.461400002, 0.625970006), Vec2(0.444310009, 0.643970013), Vec2(0.409880012, 0.625890017), Vec2(0.461400002, 0.625970006), Vec2(0.500389993, 0.63331002), Vec2(0.500389993, 0.658290029), Vec2(0.444310009, 0.643970013), Vec2(0.469940007, 0.606760025), Vec2(0.500389993, 0.611329973), Vec2(0.500389993, 0.63331002), Vec2(0.461400002, 0.625970006), Vec2(0.442400008, 0.597109973), Vec2(0.469940007, 0.606760025), Vec2(0.461400002, 0.625970006), Vec2(0.4296, 0.612860024), Vec2(0.451160014, 0.580179989), Vec2(0.475080013, 0.587490022), Vec2(0.469940007, 0.606760025), Vec2(0.442400008, 0.597109973), Vec2(0.475080013, 0.587490022), Vec2(0.500389993, 0.590650022), Vec2(0.500389993, 0.611329973), Vec2(0.469940007, 0.606760025), Vec2(0.478560001, 0.56844002), Vec2(0.500389993, 0.570739985), Vec2(0.500389993, 0.590650022), Vec2(0.475080013, 0.587490022), Vec2(0.457489997, 0.562780023), Vec2(0.478560001, 0.56844002), Vec2(0.475080013, 0.587490022), Vec2(0.451160014, 0.580179989), Vec2(0.409999996, 0.557139993), Vec2(0.42938, 0.569769979), Vec2(0.418469995, 0.584190011), Vec2(0.397969991, 0.56923002), Vec2(0.42938, 0.569769979), Vec2(0.451160014, 0.580179989), Vec2(0.442400008, 0.597109973), Vec2(0.418469995, 0.584190011), Vec2(0.437759995, 0.554369986), Vec2(0.457489997, 0.562780023), Vec2(0.451160014, 0.580179989), Vec2(0.42938, 0.569769979), Vec2(0.419750005, 0.543820024), Vec2(0.437759995, 0.554369986), Vec2(0.42938, 0.569769979), Vec2(0.409999996, 0.557139993), Vec2(0.42761001, 0.52967), Vec2(0.444270015, 0.538399994), Vec2(0.437759995, 0.554369986), Vec2(0.419750005, 0.543820024), Vec2(0.444270015, 0.538399994), Vec2(0.46221, 0.54519999), Vec2(0.457489997, 0.562780023), Vec2(0.437759995, 0.554369986), Vec2(0.449299991, 0.522080004), Vec2(0.465770006, 0.527589977), Vec2(0.46221, 0.54519999), Vec2(0.444270015, 0.538399994), Vec2(0.433840007, 0.514919996), Vec2(0.449299991, 0.522080004), Vec2(0.444270015, 0.538399994), Vec2(0.42761001, 0.52967), Vec2(0.46221, 0.54519999), Vec2(0.481059998, 0.549660027), Vec2(0.478560001, 0.56844002), Vec2(0.457489997, 0.562780023), Vec2(0.481059998, 0.549660027), Vec2(0.500389993, 0.551400006), Vec2(0.500389993, 0.570739985), Vec2(0.478560001, 0.56844002), Vec2(0.482910007, 0.531140029), Vec2(0.500389993, 0.532480001), Vec2(0.500389993, 0.551400006), Vec2(0.481059998, 0.549660027), Vec2(0.465770006, 0.527589977), Vec2(0.482910007, 0.531140029), Vec2(0.481059998, 0.549660027), Vec2(0.46221, 0.54519999), Vec2(0.468409985, 0.509959996), Vec2(0.484270006, 0.512830019), Vec2(0.482910007, 0.531140029), Vec2(0.465770006, 0.527589977), Vec2(0.484270006, 0.512830019), Vec2(0.500389993, 0.513880014), Vec2(0.500389993, 0.532480001), Vec2(0.482910007, 0.531140029), Vec2(0.485249996, 0.494610012), Vec2(0.500389993, 0.49544999), Vec2(0.500389993, 0.513880014), Vec2(0.484270006, 0.512830019), Vec2(0.470310003, 0.492269993), Vec2(0.485249996, 0.494610012), Vec2(0.484270006, 0.512830019), Vec2(0.468409985, 0.509959996), Vec2(0.43858999, 0.499669999), Vec2(0.453090012, 0.505490005), Vec2(0.449299991, 0.522080004), Vec2(0.433840007, 0.514919996), Vec2(0.453090012, 0.505490005), Vec2(0.468409985, 0.509959996), Vec2(0.465770006, 0.527589977), Vec2(0.449299991, 0.522080004), Vec2(0.455799997, 0.488629997), Vec2(0.470310003, 0.492269993), Vec2(0.468409985, 0.509959996), Vec2(0.453090012, 0.505490005), Vec2(0.441960007, 0.483940005), Vec2(0.455799997, 0.488629997), Vec2(0.453090012, 0.505490005), Vec2(0.43858999, 0.499669999), Vec2(0.377939999, 0.481029987), Vec2(0.387490004, 0.494980007), Vec2(0.377339989, 0.503499985), Vec2(0.367210001, 0.48793), Vec2(0.387490004, 0.494980007), Vec2(0.399040014, 0.507770002), Vec2(0.389479995, 0.518100023), Vec2(0.377339989, 0.503499985), Vec2(0.39616999, 0.486059994), Vec2(0.407000005, 0.496780008), Vec2(0.399040014, 0.507770002), Vec2(0.387490004, 0.494980007), Vec2(0.38745001, 0.474099994), Vec2(0.39616999, 0.486059994), Vec2(0.387490004, 0.494980007), Vec2(0.377939999, 0.481029987), Vec2(0.399040014, 0.507770002), Vec2(0.412470013, 0.519370019), Vec2(0.403629988, 0.531610012), Vec2(0.389479995, 0.518100023), Vec2(0.412470013, 0.519370019), Vec2(0.42761001, 0.52967), Vec2(0.419750005, 0.543820024), Vec2(0.403629988, 0.531610012), Vec2(0.419649988, 0.506420016), Vec2(0.433840007, 0.514919996), Vec2(0.42761001, 0.52967), Vec2(0.412470013, 0.519370019), Vec2(0.407000005, 0.496780008), Vec2(0.419649988, 0.506420016), Vec2(0.412470013, 0.519370019), Vec2(0.399040014, 0.507770002), Vec2(0.413190007, 0.485159993), Vec2(0.425190002, 0.492810011), Vec2(0.419649988, 0.506420016), Vec2(0.407000005, 0.496780008), Vec2(0.425190002, 0.492810011), Vec2(0.43858999, 0.499669999), Vec2(0.433840007, 0.514919996), Vec2(0.419649988, 0.506420016), Vec2(0.429049999, 0.478509992), Vec2(0.441960007, 0.483940005), Vec2(0.43858999, 0.499669999), Vec2(0.425190002, 0.492810011), Vec2(0.417360008, 0.472730011), Vec2(0.429049999, 0.478509992), Vec2(0.425190002, 0.492810011), Vec2(0.413190007, 0.485159993), Vec2(0.39546001, 0.467680007), Vec2(0.403050005, 0.476880014), Vec2(0.39616999, 0.486059994), Vec2(0.38745001, 0.474099994), Vec2(0.403050005, 0.476880014), Vec2(0.413190007, 0.485159993), Vec2(0.407000005, 0.496780008), Vec2(0.39616999, 0.486059994), Vec2(0.407389998, 0.467159986), Vec2(0.417360008, 0.472730011), Vec2(0.413190007, 0.485159993), Vec2(0.403050005, 0.476880014), Vec2(0.400750011, 0.463099986), Vec2(0.407389998, 0.467159986), Vec2(0.403050005, 0.476880014), Vec2(0.39546001, 0.467680007)}, + ["subd_fvar_linear"] = "corners plus1", + ["primitive_attributes"] = { UserData("/sphere3/sphere.primvars:dwa_mesh_file_translator_version"), UserData("/sphere3/sphere.primvars:dwa_mesh_translator_version"), UserData("/sphere3/sphere.primvars:name"), UserData("/sphere3/sphere.primvars:primId"), UserData("/sphere3/sphere.primvars:subd__hi"), UserData("/sphere3/sphere.primvars:subd__lo")}, +} + +GeometrySet("/DEFAULT/allGeometry") { + RdlMeshGeometry("/sphere1/sphere"), + RdlMeshGeometry("/sphere2/sphere"), + RdlMeshGeometry("/sphere3/sphere"), +} + +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/sphere1/sphere"), "", AccentMaterial("/mat1/geomMtl"), LightSet("LightSet7EF633"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/sphere1/sphere"), "sphere", AccentMaterial("/mat1/geomMtl"), LightSet("LightSet7EF633"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/sphere2/sphere"), "", AccentMaterial("/mat2/geomMtl"), LightSet("LightSet7EF633"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/sphere2/sphere"), "sphere", AccentMaterial("/mat2/geomMtl"), LightSet("LightSet7EF633"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/sphere3/sphere"), "", AccentMaterial("/mat3/geomMtl"), LightSet("LightSet7EF633"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/sphere3/sphere"), "sphere", AccentMaterial("/mat3/geomMtl"), LightSet("LightSet7EF633"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, +} + +DwaBaseMaterial("/mat1/baseMtl") { + ["show_specular"] = false, + ["show_diffuse"] = false, +} + +AccentMaterial("/mat1/geomMtl") { + ["diffuse_lightset"] = LightSet("LightSet35E1CC"), + ["diffuse"] = bind(undef(), 0.100000001), + ["specular_lightset"] = LightSet("LightSet0EA9BE"), + ["specular"] = bind(undef(), 2), + ["specular_model"] = "GGX", + ["roughness"] = bind(undef(), 0.400000006), + ["background_material"] = DwaBaseMaterial("/mat1/baseMtl"), +} + +DwaBaseMaterial("/mat2/baseMtl") { + ["show_specular"] = false, + ["show_diffuse"] = false, +} + +AccentMaterial("/mat2/geomMtl") { + ["diffuse_lightset"] = LightSet("LightSet0EA9BE"), + ["diffuse"] = bind(undef(), 0.100000001), + ["specular_lightset"] = LightSet("LightSet704C75"), + ["specular"] = bind(undef(), 2), + ["specular_model"] = "GGX", + ["roughness"] = bind(undef(), 0.400000006), + ["background_material"] = DwaBaseMaterial("/mat2/baseMtl"), +} + +DwaBaseMaterial("/mat3/baseMtl") { + ["show_specular"] = false, + ["show_diffuse"] = false, +} + +AccentMaterial("/mat3/geomMtl") { + ["diffuse_lightset"] = LightSet("LightSet491467"), + ["diffuse"] = bind(undef(), 0.100000001), + ["specular_lightset"] = LightSet("LightSet35E1CC"), + ["specular"] = bind(undef(), 2), + ["specular_model"] = "GGX", + ["roughness"] = bind(undef(), 0.400000006), + ["background_material"] = DwaBaseMaterial("/mat3/baseMtl"), +} + +RectLight("/blue") { + ["node_xform"] = blur(Mat4(0.50000000000000011, 0, 0.8660254037844386, 0, 0.74999999999999989, 0.50000000000000011, -0.43301270189221941, 0, -0.43301270189221941, 0.8660254037844386, 0.25000000000000011, 0, -43.301270189221938, 86.602540378443862, 25.000000000000011, 1), Mat4(0.50000000000000011, 0, 0.8660254037844386, 0, 0.74999999999999989, 0.50000000000000011, -0.43301270189221941, 0, -0.43301270189221941, 0.8660254037844386, 0.25000000000000011, 0, -43.301270189221938, 86.602540378443862, 25.000000000000011, 1)), + ["color"] = Rgb(0, 0, 1), + ["intensity"] = 12, +} + +RectLight("/green") { + ["node_xform"] = blur(Mat4(0.50000000000000011, 0, 0.8660254037844386, 0, 0.74999999999999989, 0.50000000000000011, -0.43301270189221941, 0, -0.43301270189221941, 0.8660254037844386, 0.25000000000000011, 0, -43.301270189221938, 86.602540378443862, 25.000000000000011, 1), Mat4(0.50000000000000011, 0, 0.8660254037844386, 0, 0.74999999999999989, 0.50000000000000011, -0.43301270189221941, 0, -0.43301270189221941, 0.8660254037844386, 0.25000000000000011, 0, -43.301270189221938, 86.602540378443862, 25.000000000000011, 1)), + ["color"] = Rgb(0, 1, 0), + ["intensity"] = 12, +} + +RectLight("/red") { + ["node_xform"] = blur(Mat4(0.50000000000000011, 0, 0.8660254037844386, 0, 0.74999999999999989, 0.50000000000000011, -0.43301270189221941, 0, -0.43301270189221941, 0.8660254037844386, 0.25000000000000011, 0, -43.301270189221938, 86.602540378443862, 25.000000000000011, 1), Mat4(0.50000000000000011, 0, 0.8660254037844386, 0, 0.74999999999999989, 0.50000000000000011, -0.43301270189221941, 0, -0.43301270189221941, 0.8660254037844386, 0.25000000000000011, 0, -43.301270189221938, 86.602540378443862, 25.000000000000011, 1)), + ["color"] = Rgb(1, 0, 0), + ["intensity"] = 12, +} + +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + +LightSet("LightSet0EA9BE") { + RectLight("/red"), +} + +LightSet("LightSet35E1CC") { + RectLight("/green"), +} + +LightSet("LightSet491467") { + RectLight("/blue"), + RectLight("/red"), +} + +LightSet("LightSet704C75") { + RectLight("/blue"), + RectLight("/green"), +} + +LightSet("LightSet7EF633") { + RectLight("/blue"), + RectLight("/green"), + RectLight("/red"), +} + +PerspectiveCamera("/camera") { + ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 0.86602540378443871, -0.49999999999999994, 0, 0, 0.49999999999999994, 0.86602540378443871, 0, 0, 25.649519052838325, 42.926270189221938, 1), Mat4(1, 0, 0, 0, 0, 0.86602540378443871, -0.49999999999999994, 0, 0, 0.49999999999999994, 0.86602540378443871, 0, 0, 25.649519052838325, 42.926270189221938, 1)), + ["far"] = 1000000, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = blur(50, 50), + ["film_width_aperture"] = 20.9702396, +} + +PerspectiveCamera("/DEFAULT/primaryCamera") { + ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 0.86602540378443871, -0.49999999999999994, 0, 0, 0.49999999999999994, 0.86602540378443871, 0, 0, 25.649519052838325, 42.926270189221938, 1), Mat4(1, 0, 0, 0, 0, 0.86602540378443871, -0.49999999999999994, 0, 0, 0.49999999999999994, 0.86602540378443871, 0, 0, 25.649519052838325, 42.926270189221938, 1)), + ["far"] = 1000000, + ["mb_shutter_open"] = 0, + ["mb_shutter_close"] = 0, + ["focal"] = blur(50, 50), + ["film_width_aperture"] = 20.9702396, +} + +UserData("/sphere1/sphere.primvars:dwa_mesh_translator_version") { + ["float_key"] = "dwa_mesh_translator_version", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +UserData("/sphere3/sphere.primvars:dwa_mesh_file_translator_version") { + ["float_key"] = "dwa_mesh_file_translator_version", + ["float_values_0"] = { 1.40129846e-45}, + ["rate"] = "constant", +} + +UserData("/sphere2/sphere.primvars:subd__hi") { + ["float_key"] = "subd__hi", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +UserData("/sphere1/sphere.primvars:name") { + ["string_key"] = "name", + ["string_values"] = { ""}, + ["rate"] = "constant", +} + +UserData("/sphere1/sphere.primvars:subd__lo") { + ["float_key"] = "subd__lo", + ["float_values_0"] = { 1.40129846e-45}, + ["rate"] = "constant", +} + +UserData("/sphere3/sphere.primvars:subd__lo") { + ["float_key"] = "subd__lo", + ["float_values_0"] = { 1.40129846e-45}, + ["rate"] = "constant", +} + +UserData("/sphere1/sphere.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 0}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/sphere2/sphere.primvars:subd__lo") { + ["float_key"] = "subd__lo", + ["float_values_0"] = { 1.40129846e-45}, + ["rate"] = "constant", +} + +UserData("/sphere2/sphere.primvars:dwa_mesh_translator_version") { + ["float_key"] = "dwa_mesh_translator_version", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +UserData("/sphere3/sphere.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 2}, + ["rate"] = "constant", +} + +UserData("/sphere1/sphere.primvars:subd__hi") { + ["float_key"] = "subd__hi", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +UserData("/sphere3/sphere.primvars:subd__hi") { + ["float_key"] = "subd__hi", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +UserData("/sphere2/sphere.primvars:dwa_mesh_file_translator_version") { + ["float_key"] = "dwa_mesh_file_translator_version", + ["float_values_0"] = { 1.40129846e-45}, + ["rate"] = "constant", +} + +UserData("/sphere3/sphere.primvars:dwa_mesh_translator_version") { + ["float_key"] = "dwa_mesh_translator_version", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +UserData("/sphere3/sphere.primvars:name") { + ["string_key"] = "name", + ["string_values"] = { ""}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/sphere1/sphere.primvars:dwa_mesh_file_translator_version") { + ["float_key"] = "dwa_mesh_file_translator_version", + ["float_values_0"] = { 1.40129846e-45}, + ["rate"] = "constant", +} + +UserData("/sphere2/sphere.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, + ["rate"] = "constant", +} + +UserData("/sphere2/sphere.primvars:name") { + ["string_key"] = "name", + ["string_values"] = { ""}, + ["rate"] = "constant", +} diff --git a/hats/material/material_accent.usd b/hats/material/material_accent.usd new file mode 100644 index 0000000..70fb878 --- /dev/null +++ b/hats/material/material_accent.usd @@ -0,0 +1,142 @@ +#usda 1.0 + +def Camera "camera" +{ + float3 xformOp:rotateXYZ = (-30,0,0) + float3 xformOp:translate = (0, 0.75, 50) + uniform token[] xformOpOrder = ["xformOp:rotateXYZ", "xformOp:translate"] +} + +def RectLight "red" +{ + float3 xformOp:rotateXYZ = (-60,-60,0) + float3 xformOp:translate = (0, 0, 100) + uniform token[] xformOpOrder = ["xformOp:rotateXYZ", "xformOp:translate"] + float inputs:intensity = 12 + color3f inputs:color = (1, 0, 0) + bool inputs:normalize = true +} + +def RectLight "green" +{ + float3 xformOp:rotateXYZ = (-60,-60,0) + float3 xformOp:translate = (0, 0, 100) + uniform token[] xformOpOrder = ["xformOp:rotateXYZ", "xformOp:translate"] + float inputs:intensity = 12 + color3f inputs:color = (0, 1, 0) + bool inputs:normalize = true +} + +def RectLight "blue" +{ + float3 xformOp:rotateXYZ = (-60,-60,0) + float3 xformOp:translate = (0, 0, 100) + uniform token[] xformOpOrder = ["xformOp:rotateXYZ", "xformOp:translate"] + float inputs:intensity = 12 + color3f inputs:color = (0, 0, 1) + bool inputs:normalize = true +} + +def "sphere1" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ + prepend apiSchemas = ["MaterialBindingAPI"]) +{ + float3 xformOp:scale = (2,2,2) + float3 xformOp:translate = (3,1,0) + uniform token[] xformOpOrder = ["xformOp:scale","xformOp:translate"] + rel material:binding = +} +def "sphere2" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ + prepend apiSchemas = ["MaterialBindingAPI"]) +{ + float3 xformOp:scale = (2,2,2) + float3 xformOp:translate = (0,1,0) + uniform token[] xformOpOrder = ["xformOp:scale","xformOp:translate"] + rel material:binding = +} +def "sphere3" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ + prepend apiSchemas = ["MaterialBindingAPI"] ) +{ + float3 xformOp:scale = (2,2,2) + float3 xformOp:translate = (-3,1,0) + uniform token[] xformOpOrder = ["xformOp:scale","xformOp:translate"] + rel material:binding = +} + +def Material "mat1" +{ + color4f outputs:moonray:surface.connect = + + def Shader "geomMtl" + { + uniform token info:id = "AccentMaterial" + color4f outputs:surface + token inputs:background_material.connect = <../baseMtl.outputs:surface> + float inputs:diffuse = 0.1 + float inputs:specular = 2.0 + float inputs:roughness = 0.4 + token inputs:specular_model = "GGX" + string[] inputs:diffuse_lightset = ["/green"] + string[] inputs:specular_lightset = ["/red"] + } + + def Shader "baseMtl" + { + uniform token info:id = "DwaBaseMaterial" + color4f outputs:surface + bool inputs:show_diffuse = false + bool inputs:show_specular = false + + } +} + +def Material "mat2" +{ + color4f outputs:moonray:surface.connect = + + def Shader "geomMtl" + { + uniform token info:id = "AccentMaterial" + color4f outputs:surface + token inputs:background_material.connect = <../baseMtl.outputs:surface> + float inputs:diffuse = 0.1 + float inputs:specular = 2.0 + float inputs:roughness = 0.4 + token inputs:specular_model = "GGX" + string[] inputs:diffuse_lightset = ["/red"] + string[] inputs:specular_lightset = ["/blue", "/green"] + } + + def Shader "baseMtl" + { + uniform token info:id = "DwaBaseMaterial" + color4f outputs:surface + bool inputs:show_diffuse = false + bool inputs:show_specular = false + } +} + +def Material "mat3" +{ + color4f outputs:moonray:surface.connect = + + def Shader "geomMtl" + { + uniform token info:id = "AccentMaterial" + color4f outputs:surface + token inputs:background_material.connect = <../baseMtl.outputs:surface> + float inputs:diffuse = 0.1 + float inputs:specular = 2.0 + float inputs:roughness = 0.4 + token inputs:specular_model = "GGX" + string[] inputs:diffuse_lightset = ["/blue", "/red"] + string[] inputs:specular_lightset = ["/green"] + } + + def Shader "baseMtl" + { + uniform token info:id = "DwaBaseMaterial" + color4f outputs:surface + bool inputs:show_diffuse = false + bool inputs:show_specular = false + } +} \ No newline at end of file diff --git a/hats/material/material_dwabase.canonical.rdla b/hats/material/material_dwabase.canonical.rdla index 45482f6..d296045 100644 --- a/hats/material/material_dwabase.canonical.rdla +++ b/hats/material/material_dwabase.canonical.rdla @@ -1,10 +1,12 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 536, ["enable_motion_blur"] = false, } -ImageMap("/surfacing_plane/planeMap.out") { +ImageMap("/surfacing_plane/planeMap") { ["texture"] = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/misc/rgb_checker.exr", ["offset"] = bind(undef(), Vec2(-5, -5)), ["scale"] = bind(undef(), Vec2(10, 10)), @@ -35,15 +37,15 @@ RdlMeshGeometry("/plane/plane") { ["primitive_attributes"] = { UserData("/plane/plane.primvars:dwa_mesh_file_translator_version"), UserData("/plane/plane.primvars:dwa_mesh_translator_version"), UserData("/plane/plane.primvars:name"), UserData("/plane/plane.primvars:primId"), UserData("/plane/plane.primvars:subd__hi"), UserData("/plane/plane.primvars:subd__lo")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/geom/sphere"), RdlMeshGeometry("/plane/plane"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/geom/sphere"), "", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/geom/sphere"), "sphere", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/plane/plane"), "", DwaBaseMaterial("/surfacing_plane/planeMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/geom/sphere"), "", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/geom/sphere"), "sphere", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/plane/plane"), "", DwaBaseMaterial("/surfacing_plane/planeMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } DwaBaseMaterial("/surfacing_geom/geomMtl") { @@ -63,7 +65,7 @@ DwaBaseMaterial("/surfacing_geom/geomMtl") { DwaBaseMaterial("/surfacing_plane/planeMtl") { ["roughness"] = bind(undef(), 0), - ["albedo"] = bind(ImageMap("/surfacing_plane/planeMap.out"), Rgb(1, 1, 1)), + ["albedo"] = bind(ImageMap("/surfacing_plane/planeMap"), Rgb(1, 1, 1)), ["specular"] = bind(undef(), 0), } @@ -80,6 +82,9 @@ RectLight("/key") { ["height"] = 50, } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet227AF2") { EnvLight("/env"), RectLight("/key"), @@ -93,7 +98,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 0.87461999999999995, -0.48481000000000002, 0, 0, 0.48481000000000002, 0.87461999999999995, 0, 0, 3.1816399999999998, 3.9357899999999999, 1), Mat4(1, 0, 0, 0, 0, 0.87461999999999995, -0.48481000000000002, 0, 0, 0.48481000000000002, 0.87461999999999995, 0, 0, 3.1816399999999998, 3.9357899999999999, 1)), ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, @@ -131,16 +136,43 @@ UserData("/geom/sphere.primvars:subd__lo") { ["rate"] = "constant", } +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/geom/sphere.primvars:dwa_mesh_translator_version") { + ["float_key"] = "dwa_mesh_translator_version", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/plane/plane.primvars:name") { ["string_key"] = "name", ["string_values"] = { ""}, ["rate"] = "constant", } -UserData("/geom/sphere.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", } UserData("/plane/plane.primvars:subd__lo") { @@ -161,12 +193,18 @@ UserData("/plane/plane.primvars:primId") { ["rate"] = "constant", } -UserData("/geom/sphere.primvars:dwa_mesh_translator_version") { - ["float_key"] = "dwa_mesh_translator_version", - ["float_values_0"] = { 2.80259693e-45}, +UserData("/geom/sphere.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, ["rate"] = "constant", } +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + UserData("/plane/plane.primvars:dwa_mesh_file_translator_version") { ["float_key"] = "dwa_mesh_file_translator_version", ["float_values_0"] = { 1.40129846e-45}, diff --git a/hats/material/material_dwabase.usd b/hats/material/material_dwabase.usd index 78491e7..fca63fc 100644 --- a/hats/material/material_dwabase.usd +++ b/hats/material/material_dwabase.usd @@ -42,7 +42,8 @@ def RectLight "key" bool inputs:normalize = true } -def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ ) +def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ + prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (10, 0, 0, 0), ( 0, 1, 0, 0), @@ -76,7 +77,8 @@ def Material "surfacing_plane" } } -def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ ) +def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ + prepend apiSchemas = ["MaterialBindingAPI"] ) { matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), diff --git a/hats/material/material_dwabase_defaults.canonical.rdla b/hats/material/material_dwabase_defaults.canonical.rdla index 5c0574f..3b7437e 100644 --- a/hats/material/material_dwabase_defaults.canonical.rdla +++ b/hats/material/material_dwabase_defaults.canonical.rdla @@ -1,10 +1,12 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 536, ["enable_motion_blur"] = false, } -ImageMap("/surfacing_plane/planeMap.out") { +ImageMap("/surfacing_plane/planeMap") { ["texture"] = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/misc/rgb_checker.exr", ["offset"] = bind(undef(), Vec2(-5, -5)), ["scale"] = bind(undef(), Vec2(10, 10)), @@ -35,15 +37,15 @@ RdlMeshGeometry("/plane/plane") { ["primitive_attributes"] = { UserData("/plane/plane.primvars:dwa_mesh_file_translator_version"), UserData("/plane/plane.primvars:dwa_mesh_translator_version"), UserData("/plane/plane.primvars:name"), UserData("/plane/plane.primvars:primId"), UserData("/plane/plane.primvars:subd__hi"), UserData("/plane/plane.primvars:subd__lo")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/geom/sphere"), RdlMeshGeometry("/plane/plane"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/geom/sphere"), "", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/geom/sphere"), "sphere", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/plane/plane"), "", DwaBaseMaterial("/surfacing_plane/planeMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/geom/sphere"), "", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/geom/sphere"), "sphere", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/plane/plane"), "", DwaBaseMaterial("/surfacing_plane/planeMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } DwaBaseMaterial("/surfacing_geom/geomMtl") { @@ -51,7 +53,7 @@ DwaBaseMaterial("/surfacing_geom/geomMtl") { DwaBaseMaterial("/surfacing_plane/planeMtl") { ["roughness"] = bind(undef(), 0), - ["albedo"] = bind(ImageMap("/surfacing_plane/planeMap.out"), Rgb(1, 1, 1)), + ["albedo"] = bind(ImageMap("/surfacing_plane/planeMap"), Rgb(1, 1, 1)), ["specular"] = bind(undef(), 0), } @@ -68,6 +70,9 @@ RectLight("/key") { ["height"] = 50, } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet227AF2") { EnvLight("/env"), RectLight("/key"), @@ -81,7 +86,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 0.87461999999999995, -0.48481000000000002, 0, 0, 0.48481000000000002, 0.87461999999999995, 0, 0, 3.1816399999999998, 3.9357899999999999, 1), Mat4(1, 0, 0, 0, 0, 0.87461999999999995, -0.48481000000000002, 0, 0, 0.48481000000000002, 0.87461999999999995, 0, 0, 3.1816399999999998, 3.9357899999999999, 1)), ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, @@ -89,6 +94,13 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/geom/sphere.primvars:subd__hi") { ["float_key"] = "subd__hi", ["float_values_0"] = { 2.80259693e-45}, @@ -119,16 +131,42 @@ UserData("/geom/sphere.primvars:subd__lo") { ["rate"] = "constant", } +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/geom/sphere.primvars:dwa_mesh_translator_version") { + ["float_key"] = "dwa_mesh_translator_version", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + UserData("/plane/plane.primvars:name") { ["string_key"] = "name", ["string_values"] = { ""}, ["rate"] = "constant", } -UserData("/geom/sphere.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", } UserData("/plane/plane.primvars:subd__lo") { @@ -149,9 +187,9 @@ UserData("/plane/plane.primvars:primId") { ["rate"] = "constant", } -UserData("/geom/sphere.primvars:dwa_mesh_translator_version") { - ["float_key"] = "dwa_mesh_translator_version", - ["float_values_0"] = { 2.80259693e-45}, +UserData("/geom/sphere.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, ["rate"] = "constant", } diff --git a/hats/material/material_dwabase_defaults.usd b/hats/material/material_dwabase_defaults.usd index 2ad4a52..dfdf0c3 100644 --- a/hats/material/material_dwabase_defaults.usd +++ b/hats/material/material_dwabase_defaults.usd @@ -42,7 +42,8 @@ def RectLight "key" bool inputs:normalize = true } -def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ ) +def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ + prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (10, 0, 0, 0), ( 0, 1, 0, 0), @@ -76,7 +77,8 @@ def Material "surfacing_plane" } } -def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ ) +def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ + prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), diff --git a/hats/material/material_dwabase_normal.canonical.rdla b/hats/material/material_dwabase_normal.canonical.rdla index 943926d..9f52ff1 100644 --- a/hats/material/material_dwabase_normal.canonical.rdla +++ b/hats/material/material_dwabase_normal.canonical.rdla @@ -1,20 +1,22 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 536, ["enable_motion_blur"] = false, } -ImageMap("/surfacing_geom/albedoMap.out") { +ImageMap("/surfacing_geom/albedoMap") { ["texture"] = "/work/gshad/moonshine_test/rats_data/material/dwabase/normal/textures/wood_planks_albedo.tx", } -OpMap("/surfacing_geom/albedoOp.out") { +OpMap("/surfacing_geom/albedoOp") { ["operation"] = "multiply", - ["op1"] = bind(ImageMap("/surfacing_geom/albedoMap.out"), Rgb(1, 1, 1)), + ["op1"] = bind(ImageMap("/surfacing_geom/albedoMap"), Rgb(1, 1, 1)), ["op2"] = bind(undef(), Rgb(0.5, 0.5, 0.5)), } -ImageMap("/surfacing_plane/planeMap.out") { +ImageMap("/surfacing_plane/planeMap") { ["texture"] = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/misc/rgb_checker.exr", ["offset"] = bind(undef(), Vec2(0, 0.25)), ["scale"] = bind(undef(), Vec2(7, 4)), @@ -45,26 +47,26 @@ RdlMeshGeometry("/plane/plane") { ["primitive_attributes"] = { UserData("/plane/plane.primvars:dwa_mesh_file_translator_version"), UserData("/plane/plane.primvars:dwa_mesh_translator_version"), UserData("/plane/plane.primvars:name"), UserData("/plane/plane.primvars:primId"), UserData("/plane/plane.primvars:subd__hi"), UserData("/plane/plane.primvars:subd__lo")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/geom/sphere"), RdlMeshGeometry("/plane/plane"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/geom/sphere"), "", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/geom/sphere"), "sphere", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/plane/plane"), "", DwaBaseMaterial("/surfacing_plane/planeMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/geom/sphere"), "", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/geom/sphere"), "sphere", DwaBaseMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/plane/plane"), "", DwaBaseMaterial("/surfacing_plane/planeMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } DwaBaseMaterial("/surfacing_geom/geomMtl") { ["roughness"] = bind(undef(), 0.25), - ["albedo"] = bind(OpMap("/surfacing_geom/albedoOp.out"), Rgb(1, 1, 1)), - ["input_normal"] = ImageNormalMap("/surfacing_geom/normalMap.out"), + ["albedo"] = bind(OpMap("/surfacing_geom/albedoOp"), Rgb(1, 1, 1)), + ["input_normal"] = ImageNormalMap("/surfacing_geom/normalMap"), } DwaBaseMaterial("/surfacing_plane/planeMtl") { ["roughness"] = bind(undef(), 0), - ["albedo"] = bind(ImageMap("/surfacing_plane/planeMap.out"), Rgb(1, 1, 1)), + ["albedo"] = bind(ImageMap("/surfacing_plane/planeMap"), Rgb(1, 1, 1)), ["specular"] = bind(undef(), 0), } @@ -81,6 +83,9 @@ RectLight("/key") { ["height"] = 50, } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet227AF2") { EnvLight("/env"), RectLight("/key"), @@ -94,7 +99,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 0.86602540378443871, -0.5, 0, 0, 0.5, 0.86602540378443871, 0, 0, 7.6495190528383281, 11.749355652982143, 1), Mat4(1, 0, 0, 0, 0, 0.86602540378443871, -0.5, 0, 0, 0.5, 0.86602540378443871, 0, 0, 7.6495190528383281, 11.749355652982143, 1)), ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, @@ -120,20 +125,34 @@ UserData("/plane/plane.primvars:dwa_mesh_file_translator_version") { ["rate"] = "constant", } +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + UserData("/geom/sphere.primvars:subd__lo") { ["float_key"] = "subd__lo", ["float_values_0"] = { 1.40129846e-45}, ["rate"] = "constant", } -ImageNormalMap("/surfacing_geom/normalMap.out") { +ImageNormalMap("/surfacing_geom/normalMap") { ["tangent_space_normal_texture"] = "/work/gshad/moonshine_test/rats_data/material/dwabase/normal/textures/wood_planks_nml.tx", } -UserData("/geom/sphere.primvars:subd__hi") { - ["float_key"] = "subd__hi", - ["float_values_0"] = { 2.80259693e-45}, - ["rate"] = "constant", +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/plane/plane.primvars:name") { @@ -142,6 +161,25 @@ UserData("/plane/plane.primvars:name") { ["rate"] = "constant", } +UserData("/geom/sphere.primvars:subd__hi") { + ["float_key"] = "subd__hi", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + UserData("/geom/sphere.primvars:dwa_mesh_file_translator_version") { ["float_key"] = "dwa_mesh_file_translator_version", ["float_values_0"] = { 1.40129846e-45}, diff --git a/hats/material/material_dwabase_normal.usd b/hats/material/material_dwabase_normal.usd index 98e6540..0049b52 100644 --- a/hats/material/material_dwabase_normal.usd +++ b/hats/material/material_dwabase_normal.usd @@ -45,7 +45,8 @@ def RectLight "key" bool inputs:normalize = true } -def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ ) +def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ + prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (18, 0, 0, 0), ( 0, 1, 0, 0), @@ -79,7 +80,8 @@ def Material "surfacing_plane" } } -def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ ) +def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ + prepend apiSchemas = ["MaterialBindingAPI"]) { matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), diff --git a/hats/material/material_dwametal_defaults.canonical.rdla b/hats/material/material_dwametal_defaults.canonical.rdla index 41d12f3..aed6dd4 100644 --- a/hats/material/material_dwametal_defaults.canonical.rdla +++ b/hats/material/material_dwametal_defaults.canonical.rdla @@ -1,10 +1,12 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 536, ["enable_motion_blur"] = false, } -ImageMap("/surfacing_plane/planeMap.out") { +ImageMap("/surfacing_plane/planeMap") { ["texture"] = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/misc/rgb_checker.exr", ["offset"] = bind(undef(), Vec2(-5, -5)), ["scale"] = bind(undef(), Vec2(10, 10)), @@ -35,15 +37,15 @@ RdlMeshGeometry("/plane/plane") { ["primitive_attributes"] = { UserData("/plane/plane.primvars:dwa_mesh_file_translator_version"), UserData("/plane/plane.primvars:dwa_mesh_translator_version"), UserData("/plane/plane.primvars:name"), UserData("/plane/plane.primvars:primId"), UserData("/plane/plane.primvars:subd__hi"), UserData("/plane/plane.primvars:subd__lo")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/geom/sphere"), RdlMeshGeometry("/plane/plane"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/geom/sphere"), "", DwaMetalMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/geom/sphere"), "sphere", DwaMetalMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/plane/plane"), "", DwaBaseMaterial("/surfacing_plane/planeMtl"), LightSet("LightSet227AF2"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/geom/sphere"), "", DwaMetalMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/geom/sphere"), "sphere", DwaMetalMaterial("/surfacing_geom/geomMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/plane/plane"), "", DwaBaseMaterial("/surfacing_plane/planeMtl"), LightSet("LightSet227AF2"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } DwaMetalMaterial("/surfacing_geom/geomMtl") { @@ -51,7 +53,7 @@ DwaMetalMaterial("/surfacing_geom/geomMtl") { DwaBaseMaterial("/surfacing_plane/planeMtl") { ["roughness"] = bind(undef(), 0), - ["albedo"] = bind(ImageMap("/surfacing_plane/planeMap.out"), Rgb(1, 1, 1)), + ["albedo"] = bind(ImageMap("/surfacing_plane/planeMap"), Rgb(1, 1, 1)), ["specular"] = bind(undef(), 0), } @@ -68,6 +70,9 @@ RectLight("/key") { ["height"] = 50, } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet227AF2") { EnvLight("/env"), RectLight("/key"), @@ -81,7 +86,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 0.87461999999999995, -0.48481000000000002, 0, 0, 0.48481000000000002, 0.87461999999999995, 0, 0, 3.1816399999999998, 3.9357899999999999, 1), Mat4(1, 0, 0, 0, 0, 0.87461999999999995, -0.48481000000000002, 0, 0, 0.48481000000000002, 0.87461999999999995, 0, 0, 3.1816399999999998, 3.9357899999999999, 1)), ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, @@ -119,16 +124,49 @@ UserData("/geom/sphere.primvars:subd__lo") { ["rate"] = "constant", } +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +UserData("/geom/sphere.primvars:dwa_mesh_translator_version") { + ["float_key"] = "dwa_mesh_translator_version", + ["float_values_0"] = { 2.80259693e-45}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + UserData("/plane/plane.primvars:name") { ["string_key"] = "name", ["string_values"] = { ""}, ["rate"] = "constant", } -UserData("/geom/sphere.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", } UserData("/plane/plane.primvars:subd__lo") { @@ -149,9 +187,9 @@ UserData("/plane/plane.primvars:primId") { ["rate"] = "constant", } -UserData("/geom/sphere.primvars:dwa_mesh_translator_version") { - ["float_key"] = "dwa_mesh_translator_version", - ["float_values_0"] = { 2.80259693e-45}, +UserData("/geom/sphere.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, ["rate"] = "constant", } diff --git a/hats/material/material_dwametal_defaults.usd b/hats/material/material_dwametal_defaults.usd index 1ef706f..57f39b0 100644 --- a/hats/material/material_dwametal_defaults.usd +++ b/hats/material/material_dwametal_defaults.usd @@ -42,7 +42,8 @@ def RectLight "key" bool inputs:normalize = true } -def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ ) +def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ + prepend apiSchemas = ["MaterialBindingAPI"] ) { matrix4d xformOp:transform = ( (10, 0, 0, 0), ( 0, 1, 0, 0), @@ -76,7 +77,8 @@ def Material "surfacing_plane" } } -def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ ) +def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ + prepend apiSchemas = ["MaterialBindingAPI"] ) { matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), diff --git a/hats/material/material_udim.canonical.rdla b/hats/material/material_udim.canonical.rdla index dca95d7..e87708f 100644 --- a/hats/material/material_udim.canonical.rdla +++ b/hats/material/material_udim.canonical.rdla @@ -1,15 +1,17 @@ SceneVariables { - ["camera"] = PerspectiveCamera("primaryCamera"), - ["layer"] = Layer("defaultLayer"), + ["camera"] = PerspectiveCamera("/DEFAULT/primaryCamera"), + ["layer"] = Layer("/DEFAULT/defaultLayer"), + ["image_width"] = 960, + ["image_height"] = 960, ["enable_motion_blur"] = false, } -ImageMap("/surfacing_plane1/planeMap.out") { +ImageMap("/surfacing_plane1/planeMap") { ["wrap_around"] = false, ["texture"] = "/work/gshad/moonshine_test/rats_data/map/udim/udim/rgb_checker_black_.exr", } -ImageMap("/surfacing_plane2/planeMap.out") { +ImageMap("/surfacing_plane2/planeMap") { ["wrap_around"] = false, ["texture"] = "/work/gshad/moonshine_test/rats_data/map/udim/udim/rgb_checker_black_udim.exr", } @@ -34,28 +36,22 @@ RdlMeshGeometry("/plane2/_") { ["primitive_attributes"] = { UserData("/plane2/_.primvars:primId")}, } -GeometrySet("allGeometry") { +GeometrySet("/DEFAULT/allGeometry") { RdlMeshGeometry("/plane1/_"), RdlMeshGeometry("/plane2/_"), } -Layer("defaultLayer") { - {RdlMeshGeometry("/plane1/_"), "", BaseMaterial("/surfacing_plane1/planeMtl"), LightSet("LightSet1F05B0"), undef(), undef(), undef(), undef(), undef()}, - {RdlMeshGeometry("/plane2/_"), "", BaseMaterial("/surfacing_plane2/planeMtl"), LightSet("LightSet1F05B0"), undef(), undef(), undef(), undef(), undef()}, +Layer("/DEFAULT/defaultLayer") { + {RdlMeshGeometry("/plane1/_"), "", DwaBaseMaterial("/surfacing_plane1/planeMtl"), LightSet("LightSet1F05B0"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, + {RdlMeshGeometry("/plane2/_"), "", DwaBaseMaterial("/surfacing_plane2/planeMtl"), LightSet("LightSet1F05B0"), undef(), undef(), LightFilterSet("/DEFAULT/emptyLightFilterSet"), undef(), undef()}, } -BaseMaterial("/surfacing_plane1/planeMtl") { - ["diffuse_color"] = bind(ImageMap("/surfacing_plane1/planeMap.out"), Rgb(1, 1, 1)), - ["specular_factor"] = 0.0199999996, - ["specular_roughness"] = bind(undef(), 0.547722578), - ["directional_diffuse_roughness"] = bind(undef(), 0.547722995), +DwaBaseMaterial("/surfacing_plane1/planeMtl") { + ["albedo"] = bind(ImageMap("/surfacing_plane1/planeMap"), Rgb(1, 1, 1)), } -BaseMaterial("/surfacing_plane2/planeMtl") { - ["diffuse_color"] = bind(ImageMap("/surfacing_plane2/planeMap.out"), Rgb(1, 1, 1)), - ["specular_factor"] = 0.0199999996, - ["specular_roughness"] = bind(undef(), 0.547722578), - ["directional_diffuse_roughness"] = bind(undef(), 0.547722995), +DwaBaseMaterial("/surfacing_plane2/planeMtl") { + ["albedo"] = bind(ImageMap("/surfacing_plane2/planeMap"), Rgb(1, 1, 1)), } RectLight("/key") { @@ -65,6 +61,9 @@ RectLight("/key") { ["height"] = 50, } +LightFilterSet("/DEFAULT/emptyLightFilterSet") { +} + LightSet("LightSet1F05B0") { RectLight("/key"), } @@ -77,7 +76,7 @@ PerspectiveCamera("/camera") { ["film_width_aperture"] = 240, } -PerspectiveCamera("primaryCamera") { +PerspectiveCamera("/DEFAULT/primaryCamera") { ["node_xform"] = blur(Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 8.75, 1), Mat4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 8.75, 1)), ["mb_shutter_open"] = 0, ["mb_shutter_close"] = 0, @@ -85,10 +84,11 @@ PerspectiveCamera("primaryCamera") { ["film_width_aperture"] = 240, } -UserData("/plane2/_.primvars:primId") { - ["float_key"] = "primId", - ["float_values_0"] = { 1}, - ["rate"] = "constant", +RenderOutput("/_outputs/instanceId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", } UserData("/plane1/_.primvars:primId") { @@ -96,3 +96,35 @@ UserData("/plane1/_.primvars:primId") { ["float_values_0"] = { 0}, ["rate"] = "constant", } + +RenderOutput("/_outputs/instanceIdA") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "instanceIdA", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/elementId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "elementId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} + +RenderOutput("/_outputs/depth") { + ["result"] = "depth", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "min", +} + +UserData("/plane2/_.primvars:primId") { + ["float_key"] = "primId", + ["float_values_0"] = { 1}, + ["rate"] = "constant", +} + +RenderOutput("/_outputs/primId") { + ["result"] = "primitive attribute", + ["primitive_attribute"] = "primId", + ["file_name"] = "/tmp/scene.exr", + ["math_filter"] = "closest", +} diff --git a/hats/material/material_udim.usd b/hats/material/material_udim.usd index 146f309..2771ef3 100644 --- a/hats/material/material_udim.usd +++ b/hats/material/material_udim.usd @@ -32,7 +32,8 @@ def RectLight "key" bool inputs:normalize = true } -def "plane1" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) +def "plane1" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ + prepend apiSchemas = ["MaterialBindingAPI"] ) { matrix4d xformOp:transform = ( (2, 0, 0, 0), (0, 0, 1, 0), @@ -45,7 +46,8 @@ def "plane1" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) rel material:binding = } -def "plane2" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) +def "plane2" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ + prepend apiSchemas = ["MaterialBindingAPI"] ) { matrix4d xformOp:transform = ( (2, 0, 0, 0), (0, 0, 1, 0), @@ -64,12 +66,9 @@ def Material "surfacing_plane1" def Shader "planeMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface - color3f inputs:diffuse_color.connect = <../planeMap.outputs:out> - float inputs:specular_factor = 0.02 - float inputs:specular_roughness = 0.54772255750517 - float inputs:directional_diffuse_roughness = 0.547723 + color3f inputs:albedo.connect = <../planeMap.outputs:out> } def Shader "planeMap" @@ -87,12 +86,9 @@ def Material "surfacing_plane2" def Shader "planeMtl" { - uniform token info:id = "BaseMaterial" + uniform token info:id = "DwaBaseMaterial" color4f outputs:surface - color3f inputs:diffuse_color.connect = <../planeMap.outputs:out> - float inputs:specular_factor = 0.02 - float inputs:specular_roughness = 0.54772255750517 - float inputs:directional_diffuse_roughness = 0.547723 + color3f inputs:albedo.connect = <../planeMap.outputs:out> } def Shader "planeMap" diff --git a/lib/hydramoonray/CMakeLists.txt b/lib/hydramoonray/CMakeLists.txt index 5bc7fa8..faca21a 100644 --- a/lib/hydramoonray/CMakeLists.txt +++ b/lib/hydramoonray/CMakeLists.txt @@ -12,53 +12,70 @@ add_library(${PROJECT_NAME}::${component} ALIAS ${component}) target_sources(${component} PRIVATE - BasisCurves.cc - Camera.cc - CoordSys.cc - GeometryMixin.cc + basisCurves.cc + camera.cc + geometryBase.cc HdmLog.cc - Instancer.cc - Light.cc - LightFilter.cc - Material.cc - Mesh.cc + hydra2_utils.cc + instancer.cc + light.cc + material.cc + mesh.cc + MoonrayLightFilter.cc + MoonrayOutput.cc + MoonrayScene.cc + MoonraySceneIndexPlugin.cc MurmurHash3.cc NullRenderer.cc - Points.cc - Primvars.cc - Procedural.cc - RenderBuffer.cc - RenderDelegate.cc - RenderPass.cc + Options.cc + points.cc + primvars.cc + procedural.cc + renderBuffer.cc + renderDelegate.cc + renderPass.cc RenderSettings.cc + renderSettingsPrim.cc + renderVar.cc + shader_utils.cc + tokens.cc ValueConverter.cc - Volume.cc + volume.cc ) set_property(TARGET ${component} PROPERTY PUBLIC_HEADER - BasisCurves.h - Camera.h - CoordSys.h - GeometryMixin.h + basisCurves.h + camera.h + geometryBase.h HdmLog.h - Instancer.h - Light.h - LightFilter.h - Material.h - Mesh.h + hydra2_utils.h + instancer.h + light.h + material.h + mesh.h + MoonrayLightFilter.h + MoonrayObject.h + MoonrayOutput.h + MoonrayScene.h + MoonraySceneIndexPlugin.h NullRenderer.h + Options.h PixelData.h - Points.h - Procedural.h - RenderBuffer.h - RenderDelegate.h + points.h + procedural.h + renderBuffer.h + renderDelegate.h Renderer.h - RenderPass.h + renderPass.h RenderSettings.h + renderSettingsPrim.h + renderVar.h + shader_utils.h + tokens.h Utils.h ValueConverter.h - Volume.h + volume.h ) target_include_directories(${component} @@ -79,7 +96,7 @@ target_link_libraries(${component} SceneRdl2::render_logging SceneRdl2::scene_rdl2 TBB::tbb - hd # pxr imaging + hd hdsi # pxr imaging usdImaging Python::Module ${PlatformSpecificLibs} diff --git a/lib/hydramoonray/Camera.cc b/lib/hydramoonray/Camera.cc deleted file mode 100644 index ef13fdd..0000000 --- a/lib/hydramoonray/Camera.cc +++ /dev/null @@ -1,415 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -// Camera Sprim, implemented by RDL2 PerspectiveCamera -// -// This is complicted by the fact that earlier versions of Moonray did not like changing -// which camera was used after the first render, so this copies all the perspective -// cameras to a single primary camera. This may be fixed now and can be removed. - -#include "Camera.h" -#include "GeometryMixin.h" -#include "RenderDelegate.h" -#include "ValueConverter.h" -#include "HdmLog.h" - -#include -#include "pxr/base/gf/frustum.h" -#include "pxr/base/gf/camera.h" - -#include -#include - -#include - -// define this to avoid switching the identity of the perspective camera -// (see HDM-95/HDM-351) -#define DONT_SWITCH_PERSPECTIVE_CAMERA - -namespace { - -const pxr::TfToken moonrayClassToken("moonray:class"); -const pxr::TfToken PerspectiveCameraToken("PerspectiveCamera"); -const pxr::TfToken OrthographicCameraToken("OrthographicCamera"); - -const hdMoonray::Camera* pCamera = nullptr; // used to detect if camera changed, assume only one global one - -// in 2203 DirtyBits::DirtyParams replaced deprecated DirtyProjMatrix -// and DirtyTransform replaced depr DirtyViewMatrix -#if PXR_VERSION >= 2203 -const pxr::HdCamera::DirtyBits CamDirtyProj = pxr::HdCamera::DirtyBits::DirtyParams; -const pxr::HdCamera::DirtyBits CamDirtyView = pxr::HdCamera::DirtyBits::DirtyTransform; -#else -const pxr::HdCamera::DirtyBits CamDirtyProj = pxr::HdCamera::DirtyBits::DirtyProjMatrix; -const pxr::HdCamera::DirtyBits CamDirtyView = pxr::HdCamera::DirtyBits::DirtyViewMatrix; -#endif - -} - -namespace hdMoonray { - -using scene_rdl2::logging::Logger; - -/// Dirty bits to pass to first call to Sync() -pxr::HdDirtyBits -Camera::GetInitialDirtyBitsMask() const -{ - return DirtyBits::AllDirty; -} - -/// Update the data identified by dirtyBits. Must not query other data. -void -Camera::Sync(pxr::HdSceneDelegate* sceneDelegate, - pxr::HdRenderParam* renderParam, - pxr::HdDirtyBits* dirtyBits) -{ - const pxr::SdfPath &id = GetId(); - hdmLogSyncStart("Camera", id, dirtyBits); - - mSceneDelegate = sceneDelegate; // save for use by setAsPrimaryCamera() and RenderPass - RenderDelegate& renderDelegate(RenderDelegate::get(renderParam)); - - // Remember the dirty bits, as HdCamera::Sync clears them - pxr::HdDirtyBits bits(*dirtyBits); - - // must call this first, it updates members like GetViewMatrix(): - HdCamera::Sync(sceneDelegate, renderParam, dirtyBits); - - // determine the type of camera (orthographic or perspective or custom RDL) - pxr::TfToken newClass; - // Use the moonray:class, otherwise guess from the projection matrix (the - // "projection" attribute is not set by usdview for interactive camera) - { - pxr::VtValue v = sceneDelegate->GetCameraParamValue(GetId(), moonrayClassToken); - if (v.IsHolding()) { - newClass = v.UncheckedGet(); - } else { - -#if PXR_VERSION >= 2203 -// in 2203, GetProjectionMatrix() was renamed ComputeProjectionMatrix() - const auto& matrix = ComputeProjectionMatrix(); -#else - const auto& matrix = GetProjectionMatrix(); -#endif - if (matrix[2][3] == 0) { - newClass = OrthographicCameraToken; - } else { - newClass = PerspectiveCameraToken; - } - } - } - - // The camera is created lazily - // (rwilson) Is this mutex still needed? - std::lock_guard lock(mCreateMutex); - if (newClass != mClass) { - mClass = newClass; - mCamera = nullptr; // this leaks but will be recovered if class goes back to previous value - } else if (mCamera) { - updateCamera(sceneDelegate, renderDelegate, bits); - } - - hdmLogSyncEnd(id); -} - -// create the RDL camera if it doesn't exist, and update to match HdCamera -scene_rdl2::rdl2::Camera* -Camera::createCamera(pxr::HdSceneDelegate* sceneDelegate, RenderDelegate& renderDelegate) -{ - if (not mCamera) { - std::lock_guard lock(mCreateMutex); - if (not mCamera) { - mCamera = renderDelegate.createSceneObject(mClass.GetString(), GetId())->asA(); - updateCamera(sceneDelegate, renderDelegate, DirtyBits::AllDirty); - } - } - return mCamera; -} - -// static function to ensure the camera is created at a given path and update it -scene_rdl2::rdl2::Camera* -Camera::createCamera(pxr::HdSceneDelegate* sceneDelegate, RenderDelegate& renderDelegate, const pxr::SdfPath& path) -{ - Camera* camera = - dynamic_cast(sceneDelegate->GetRenderIndex().GetSprim(pxr::HdPrimTypeTokens->camera, path)); - if (camera) { - return camera->createCamera(sceneDelegate, renderDelegate); - } - return nullptr; -} - -// update the existing RDL camera (mCamera) based on the Hydra values and dirty mask -// mCamera must exist when this is called -void -Camera::updateCamera(pxr::HdSceneDelegate* sceneDelegate, RenderDelegate& renderDelegate, pxr::HdDirtyBits bits) -{ - const pxr::SdfPath& id = GetId(); - UpdateGuard guard(renderDelegate, mCamera); - - // update the inverse view matrix (in RDL this is node_xform) - if (bits & CamDirtyView) { - pxr::HdTimeSampleArray sampledXforms; - sceneDelegate->SampleTransform(id, &sampledXforms); - - if (sampledXforms.count <= 1) { - // if there's only one sample, it should match the cached value -#if PXR_VERSION >= 2203 - // in 2203, GetViewInverseMatrix was removed, having been previously deprecated - const pxr::GfMatrix4d xform(GetTransform()); -#else - const pxr::GfMatrix4d xform(GetViewInverseMatrix()); -#endif - mCamera->set(mCamera->sNodeXformKey, reinterpret_cast(xform)); - } else { - // first and last samples will be sample interval boundaries - pxr::GfCamera cam(sampledXforms.values[0]); - pxr::GfFrustum frustum = cam.GetFrustum(); - pxr::GfMatrix4d viewInverse = frustum.ComputeViewMatrix().GetInverse(); - mCamera->set(mCamera->sNodeXformKey, reinterpret_cast(viewInverse)); - - cam.SetTransform(sampledXforms.values[sampledXforms.count-1]); - frustum = cam.GetFrustum(); - viewInverse = frustum.ComputeViewMatrix().GetInverse(); - mCamera->set(mCamera->sNodeXformKey, - reinterpret_cast(viewInverse), - scene_rdl2::rdl2::TIMESTEP_END); - } - mXformChanged = true; - } - - // update the projection parameters. HdCamera will calculate the projection matrix - // for us : from this most of the RDL parameters can be extracted, with the exception - // of the camera aperture. - // Note (rwilson) : I'm not sure why the code gets the parameters in this roundabout way, - // rather that querying them directly, but presumably there was some reason... - if ((bits & CamDirtyProj) && - (mClass == PerspectiveCameraToken || mClass == OrthographicCameraToken)) { - - // we compute the following values from attributes and the projection matrix - // and place them into the RDL camera - float apertureWidth, apertureHeight; - float horizOffset, vertOffset; - float focalLength; -#if PXR_VERSION >= 2203 -// in 2203, GetProjectionMatrix() was renamed ComputeProjectionMatrix() - const auto& matrix = ComputeProjectionMatrix(); -#else - const auto& matrix = GetProjectionMatrix(); -#endif - - if (mClass == OrthographicCameraToken) { - - apertureWidth = 2 / matrix[0][0]; - apertureHeight = 2 / matrix[1][1]; - focalLength = 30; - horizOffset = - apertureWidth * matrix[3][0] / 2; - vertOffset = - apertureHeight * matrix[3][1] / 2; - mNear = (matrix[3][2] + 1) / matrix[2][2]; - mFar = (matrix[3][2] - 1) / matrix[2][2]; - - } else { - - // The projection matrix cannot be used to obtain the aperture, - // but once we have the aperture width we can compute the rest - pxr::VtValue v = sceneDelegate->GetCameraParamValue(id, pxr::HdCameraTokens->horizontalAperture); - if (v.IsEmpty()) { - apertureWidth = 20.955f; // USD default value (Moonray default is 24.0) - } else { - apertureWidth = v.Get() * 10; // convert back to value in USD prim, Hydra divided by 10 - // HDM-153: Houdini by default measures camera in 1/10 meters. This ran into clamping - // issues in Moonray (MOONRAY-4261), and may also mess up fstop (below). Check this - } - apertureHeight = apertureWidth * matrix[0][0] / matrix[1][1]; - focalLength = apertureWidth * matrix[0][0] / 2; - horizOffset = apertureWidth * matrix[2][0] / 2; - vertOffset = apertureHeight * matrix[2][1] / 2; - mNear = matrix[3][2] / (matrix[2][2] - 1); - mFar = matrix[3][2] / (matrix[2][2] + 1); - } - - // apertureWidth/apertureHeight gives us the camera aspect ratio. - // if necessary, we adjust this based on the requested image aspect ratio (mDesiredAspectRatio) - // and the window policy. Note that the RDL camera only specifies apertureWidth, so - // it's not clear that all conform options will work - pxr::GfVec2d adjustedAperture(apertureWidth, apertureHeight); - if (mDesiredAspectRatio != 0.0) { - adjustedAperture = pxr::CameraUtilConformedWindow(adjustedAperture, GetWindowPolicy(), mDesiredAspectRatio); - } - - // according to MOONRAY-4278, vertical offset needs to be adjusted - double adjustedAr = adjustedAperture[0]/apertureHeight; - vertOffset *= adjustedAr; - - mCamera->set("film_width_aperture", (float)adjustedAperture[0]); - mCamera->setFocalLength(focalLength); - mCamera->set("horizontal_film_offset", horizOffset); - mCamera->set("vertical_film_offset", vertOffset); - mCamera->setNear(mNear); - mCamera->setFar(mFar); - mProjChanged = true; - } - - // handles all other params - if (bits & (DirtyBits::DirtyParams | CamDirtyProj)) { - - pxr::VtValue v; - - // motion params - if (mClass == PerspectiveCameraToken || mClass == OrthographicCameraToken) { - v = sceneDelegate->GetCameraParamValue(id, pxr::HdCameraTokens->fStop); - const float fStop = v.IsEmpty() ? 0.0f : v.Get(); - mCamera->set("dof", fStop != 0.0); - if (fStop) { - mCamera->set("dof_aperture", fStop); // Rdl2 "dof_aperture" is actually fStop ratio - const float focusDistance = - sceneDelegate->GetCameraParamValue(id, pxr::HdCameraTokens->focusDistance).Get(); - mCamera->set("dof_focus_distance", focusDistance); - } - } - - v = sceneDelegate->GetCameraParamValue(id, pxr::HdCameraTokens->shutterOpen); - if (not v.IsEmpty()) { - const float shutterOpen = (v.IsHolding()) ? (v.UncheckedGet()) : v.Get(); - mCamera->set(mCamera->sMbShutterOpenKey, shutterOpen); - } - - v = sceneDelegate->GetCameraParamValue(id, pxr::HdCameraTokens->shutterClose); - if (not v.IsEmpty()) { - const float shutterClose = (v.IsHolding()) ? (v.UncheckedGet()) : v.Get(); - mCamera->set(mCamera->sMbShutterCloseKey, shutterClose); - } - - // overwrite any attributes with moonray:xyz attributes - const SceneClass& sceneClass = mCamera->getSceneClass(); - for (auto it = sceneClass.beginAttributes(); it != sceneClass.endAttributes(); ++it) { - const std::string& attrName = (*it)->getName(); - - pxr::VtValue val = sceneDelegate->GetCameraParamValue(id, pxr::TfToken("moonray:"+attrName)); - if (not val.IsEmpty()) { - ValueConverter::setAttribute(mCamera, *it, val); - } - // Fixme: if value is not set it should be reset to default - } - mParamsChanged = true; - } - - // DirtyBits::DirtyWindowPolicy) - // The value of GetWindowPolicy() was already updated by HdCamera::Sync() - // DirtyBits::DirtyClipPlanes) - // arbitrary clipping planes, not supported by Moonray -} - -// Set this camera as the camera to use when rendering -// -// This code actually maintains a single RDL perspective camera ("primaryCamera"), and sets this camera as -// active by copying the parameters into "primaryCamera". The original motivation was that changing the -// scene camera identity interactively doesn't work (see HDM-95). This is now addressed, but there are -// some open questions about performance and accuracy of these two approaches (see HDM-351) -// -// aspectRatio is the shape of the image. The camera's window policy (GetWindowPolicy) -// will be used to adjust the camera as needed to match. -void -Camera::setAsPrimaryCamera(RenderDelegate& renderDelegate, double aspectRatio) -{ - if (aspectRatio != mDesiredAspectRatio) { - mDesiredAspectRatio = aspectRatio; - if (mCamera) { - // will adjusr camera to match mDesiredAspectRatio - updateCamera(mSceneDelegate, renderDelegate, pxr::HdCamera::DirtyBits::DirtyParams); - } - } - createCamera(mSceneDelegate, renderDelegate); - - scene_rdl2::rdl2::Camera* cameraToUse; - -#ifdef DONT_SWITCH_PERSPECTIVE_CAMERA // see HDM-351 - if (mClass == PerspectiveCameraToken) { - // update single perspective camera in-place - if (this == pCamera) { - if (not mXformChanged && not mProjChanged && not mParamsChanged) return; - } else { - pCamera = this; - mXformChanged = mProjChanged = mParamsChanged = true; - } - scene_rdl2::rdl2::Camera* primary = cameraToUse = renderDelegate.primaryCamera(); - if (primary == mCamera) return; // this does not happen now, but it might be nice - UpdateGuard guard(renderDelegate, primary); - if (mXformChanged) { - primary->set(mCamera->sNodeXformKey, mCamera->get(mCamera->sNodeXformKey)); - primary->set(mCamera->sNodeXformKey, - mCamera->get(mCamera->sNodeXformKey,scene_rdl2::rdl2::TIMESTEP_END), - scene_rdl2::rdl2::TIMESTEP_END); - mXformChanged = false; - } - if (mProjChanged) { - primary->set("film_width_aperture", mCamera->get("film_width_aperture")); - primary->set("horizontal_film_offset", mCamera->get("horizontal_film_offset")); - primary->set("vertical_film_offset", mCamera->get("vertical_film_offset")); - primary->setFocalLength(mCamera->get("focal")); - primary->setNear(mNear); - primary->setFar(mFar); - mProjChanged = false; - } - if (mParamsChanged) { - primary->set("mb_shutter_open", mCamera->get("mb_shutter_open")); - primary->set("mb_shutter_close", mCamera->get("mb_shutter_close")); - primary->set("mb_shutter_bias", mCamera->get("mb_shutter_bias")); // moonray:mb_shutter_bias - bool dof = mCamera->get("dof"); - primary->set("dof", dof); - if (dof) { - primary->set("dof_aperture", mCamera->get("dof_aperture")); - primary->set("dof_focus_distance", mCamera->get("dof_focus_distance")); - // moonray:name attributes: - primary->set("bokeh", mCamera->get("bokeh")); - primary->set("bokeh_angle", mCamera->get("bokeh_angle")); - primary->set("bokeh_image", mCamera->get("bokeh_image")); - primary->set("bokeh_sides", mCamera->get("bokeh_sides")); - primary->set("bokeh_weight_location", mCamera->get("bokeh_weight_location")); - primary->set("bokeh_weight_strength", mCamera->get("bokeh_weight_strength")); - } - primary->set("pixel_aspect_ratio", mCamera->get("pixel_aspect_ratio")); - primary->set("pixel_sample_map", mCamera->get("pixel_sample_map")); - int stereo = mCamera->get("stereo_view"); - primary->set("stereo_view", stereo); - if (stereo) { - primary->set("stereo_convergence_distance", mCamera->get("stereo_convergence_distance")); - primary->set("stereo_interocular_distance", mCamera->get("stereo_interocular_distance")); - } - mParamsChanged = false; - } - - } else - -#endif // DONT_SWITCH_PERSPECTIVE_CAMERA - { - if (this == pCamera) return; - pCamera = this; - cameraToUse = mCamera; - } - scene_rdl2::rdl2::SceneVariables& wsv(renderDelegate.acquireSceneContext().getSceneVariables()); - UpdateGuard guard(wsv); - wsv.set(wsv.sCamera, cameraToUse); -} - -std::pair -Camera::getTimeSamplingInterval() const -{ - const pxr::SdfPath& id = GetId(); - pxr::HdTimeSampleArray sampledXforms; - mSceneDelegate->SampleTransform(id, &sampledXforms); - return { sampledXforms.times[0], sampledXforms.times[sampledXforms.count - 1] }; -} - -void -Camera::Finalize(pxr::HdRenderParam *renderParam) -{ - if (this == pCamera) pCamera = nullptr; - pxr::HdCamera::Finalize(renderParam); -} - -Camera::~Camera() -{ -} - -} - diff --git a/lib/hydramoonray/CoordSys.cc b/lib/hydramoonray/CoordSys.cc deleted file mode 100644 index 239cc0a..0000000 --- a/lib/hydramoonray/CoordSys.cc +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#define GUESS 1 - -#include "CoordSys.h" -#include "Camera.h" -#include "GeometryMixin.h" -#include "RenderDelegate.h" -#include "HdmLog.h" - -#include -#include -#include - -namespace { - -bool -match(const pxr::SdfPath& path, const pxr::TfToken& name) -{ - // Instancing may add "proto_" before and "_id#" after the name. - // Also DWA data may have arbitrary prefixes before the name but also with an underscore - // So match exactly, or with an underscore before it and optional "_id" after it. - if (path.GetNameToken() == name) return true; - const std::string& pathname = path.GetName(); - size_t pos = pathname.find(name); - if (pos > 1 && pathname[pos-1] == '_') { - size_t e = pos + name.GetString().size(); - if (e == pathname.size() || - (pathname[e] == '_' && pathname[e + 1] == 'i' && pathname[e + 2] == 'd')) - return true; - } - return false; -} - -const pxr::TfToken GeometryToken("Geometry"); -const pxr::TfToken LooksToken("Looks"); - -} - -namespace hdMoonray { - -using scene_rdl2::logging::Logger; - -CoordSys::CoordSys(pxr::SdfPath const& id): pxr::HdCoordSys(id) {} - -void -CoordSys::Sync(pxr::HdSceneDelegate* sceneDelegate, - pxr::HdRenderParam* renderParam, - pxr::HdDirtyBits* dirtyBits) -{ - const pxr::SdfPath &id = GetId(); - hdmLogSyncStart("Coordsys", id, dirtyBits); - *dirtyBits = 0; - hdmLogSyncEnd(id); -} - -scene_rdl2::rdl2::SceneObject* -CoordSys::getBinding( - pxr::HdSceneDelegate* sceneDelegate, RenderDelegate& renderDelegate, - const pxr::SdfPath& geomPath, pxr::TfToken name) -{ - // coordsys not implemented - return nullptr; -} - -} - diff --git a/lib/hydramoonray/CoordSys.h b/lib/hydramoonray/CoordSys.h deleted file mode 100644 index 7f11776..0000000 --- a/lib/hydramoonray/CoordSys.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include - -namespace scene_rdl2 {namespace rdl2 { class SceneObject; } } - -namespace hdMoonray { - -class RenderDelegate; - -/// Coordinate system attached to an rprim. In Moonray the coordinate system is a shader node -/// so currently the if several objects with different Coordinate systems use the same shader, -/// it will use one of those coordinate systems for all of them -class CoordSys: public pxr::HdCoordSys -{ -public: - explicit CoordSys(pxr::SdfPath const& id); - - /// Dirty bits to pass to first call to Sync() - pxr::HdDirtyBits GetInitialDirtyBitsMask() const override { return DirtyBits::AllDirty; } - - /// Update the data identified by dirtyBits. Must not query other data. - void Sync(pxr::HdSceneDelegate* sceneDelegate, - pxr::HdRenderParam* renderParam, - pxr::HdDirtyBits* dirtyBits) override; - - static scene_rdl2::rdl2::SceneObject* getBinding( - pxr::HdSceneDelegate*, RenderDelegate&, - const pxr::SdfPath& geomPath, pxr::TfToken name); -}; - -} - diff --git a/lib/hydramoonray/HdmLog.h b/lib/hydramoonray/HdmLog.h index 89b904b..4524b46 100644 --- a/lib/hydramoonray/HdmLog.h +++ b/lib/hydramoonray/HdmLog.h @@ -3,11 +3,16 @@ #pragma once +#include + #include #include + namespace hdMoonray { +using scene_rdl2::logging::Logger; + void hdmLogSyncStart(const std::string& type, const pxr::SdfPath& id, pxr::HdDirtyBits *dirtyBits); void hdmLogSyncEnd(const pxr::SdfPath& id); diff --git a/lib/hydramoonray/Instancer.cc b/lib/hydramoonray/Instancer.cc deleted file mode 100644 index 188e8b1..0000000 --- a/lib/hydramoonray/Instancer.cc +++ /dev/null @@ -1,352 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#include "Instancer.h" -#include "RenderDelegate.h" - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include - -// Define some macros to handle multiple versions of USD -#if PXR_VERSION < 2311 -#define instanceTransforms instanceTransform -#define instanceScales scale -#define instanceRotations rotate -#define instanceTranslations translate -#endif - -namespace hdMoonray { - -enum Method { - XFORM_ATTRIBUTES = 0, - POINT_FILE = 1, - XFORM_LIST = 2 -}; - -using scene_rdl2::logging::Logger; - -Instancer::Instancer( - pxr::HdSceneDelegate* delegate, - const pxr::SdfPath& id): - HdInstancer(delegate, id) -{ } - -Instancer::~Instancer() -{ - // release -} - -// Hydra sends several apparent junk primvars that are not in the usd data, ignore them -static bool -ignorePrimvar(pxr::TfToken name) -{ - if (name.GetText()[0] == '_') return true; // Hydra internal variables - if (not strncmp(name.GetText(), "usd", 3)) return true; // sceneflow data - static const std::set names { - pxr::TfToken("asset_name"), // bookeeping from Pixar - pxr::TfToken("mesh_path"), // from sprinkles, huge array of repeated strings - pxr::TfToken("hit_prim_path") // new version of the sprinkles huge array - }; - if (names.count(name)) return true; - return false; -} - -void -#if PXR_VERSION < 2102 -Instancer::sync(pxr::HdSceneDelegate* sceneDelegate, - pxr::HdDirtyBits* dirtyBits) -#else -Instancer::Sync(pxr::HdSceneDelegate* sceneDelegate, - pxr::HdRenderParam* renderParam, - pxr::HdDirtyBits* dirtyBits) -#endif -{ - const pxr::SdfPath& id = GetId(); - //std::cout << id << " sync()\n"; - -#if PXR_VERSION >= 2102 - _UpdateInstancer(sceneDelegate, dirtyBits); -#endif - - if (pxr::HdChangeTracker::IsInstancerDirty(*dirtyBits, id)) { - // std::cout << " instancer dirty\n"; - // not clear what, if anything, is covered by this - // Possibly clear out all the prototype references and it will refill it - } - - if (pxr::HdChangeTracker::IsTransformDirty(*dirtyBits, id)) { - mXform = sceneDelegate->GetInstancerTransform(id); - // std::cout << id << " transform = " << mXform << std::endl; - } - - if (pxr::HdChangeTracker::IsInstanceIndexDirty(*dirtyBits, id)) { - // std::cout << " instancer index dirty\n"; - // this does not do anything, the indexes are looked up per-prototype below - } - - if (pxr::HdChangeTracker::IsAnyPrimvarDirty(*dirtyBits, id)) { - pxr::TfTokenVector primvarNames; - const pxr::HdPrimvarDescriptorVector& primvars = - sceneDelegate->GetPrimvarDescriptors(id, pxr::HdInterpolationInstance); - - for (const pxr::HdPrimvarDescriptor& pv: primvars) { - if (pxr::HdChangeTracker::IsPrimvarDirty(*dirtyBits, id, pv.name)) { - //std::cout << " primvar " << pv.name << " is dirty\n"; - if (ignorePrimvar(pv.name)) continue; - PrimvarInfo& info = mPrimvars[pv.name]; - info.value = sceneDelegate->Get(id, pv.name); - info.role = pv.role; - } - } - } - - *dirtyBits = 0; -} - - -// The SceneDelegate api only allows access to the indices by using the prototypeId, which -// we don't have until this is called. Even the number of indices is unavailable as far -// as I can tell. So this function must update the data for that subset of indices. -// Curently a different InstanceGeometry is created for each prototype. It may be possible -// to use a single one if there is a way to incrementally update the references and refIndices. -void -Instancer::makeInstanceGeometry(const pxr::SdfPath& prototypeId, scene_rdl2::rdl2::Geometry* prototype, - GeometryMixin* geometry, size_t level, size_t childCount) -{ - const pxr::SdfPath& id = GetId(); - pxr::HdSceneDelegate* sceneDelegate = GetDelegate(); - -#if PXR_VERSION < 2102 - pxr::HdChangeTracker& changeTracker = sceneDelegate->GetRenderIndex().GetChangeTracker(); - if (pxr::HdChangeTracker::IsDirty(changeTracker.GetInstancerDirtyBits(id))) { - std::lock_guard lock(mMapMutex); // double-check with lock so only one thread calls Sync() - pxr::HdDirtyBits dirtyBits = changeTracker.GetInstancerDirtyBits(id); - if (pxr::HdChangeTracker::IsDirty(dirtyBits)) { - sync(sceneDelegate, &dirtyBits); - changeTracker.MarkInstancerClean(id); - } - } -#else - _SyncInstancerAndParents(sceneDelegate->GetRenderIndex(), id); -#endif - - RenderDelegate& renderDelegate = *reinterpret_cast(sceneDelegate->GetRenderIndex().GetRenderDelegate()); - - pxr::VtIntArray indices = sceneDelegate->GetInstanceIndices(id, prototypeId); - const size_t count = indices.size(); - - // may want to do something special if 0 or 1 indices? - //std::cout << id << "::makeInstanceGeometry(" << prototypeId << ") indices.size = " << count << std::endl; - - scene_rdl2::rdl2::Geometry* instancer; - scene_rdl2::rdl2::UserData* instanceId; - { std::lock_guard lock(mMapMutex); - scene_rdl2::rdl2::Geometry*& mapEntry = mInstancers[prototype]; - if (not mapEntry) { - std::string name = prototype->getName() + "/Instancer"; - scene_rdl2::rdl2::SceneObject* object = renderDelegate.createSceneObject("RdlInstancerGeometry", name); - if (not object) return; // it already printed an error, give up - mapEntry = object->asA(); - renderDelegate.assign(mapEntry, scene_rdl2::rdl2::LayerAssignment()); - instanceId = renderDelegate.createSceneObject("UserData", prototype->getName() + "/instanceId")->asA(); - } else { - instanceId = mapEntry->get("primitive_attributes")[0]->asA(); - } - instancer = mapEntry; - } - - { UpdateGuard guard(renderDelegate, instanceId); - std::string name("instanceId"); - if (level) name.push_back('A'+level-1); - // std::cout << geometry->getId() << ' ' << name << ' ' << count << 'x' << childCount << std::endl; - // at the moment you cannot get ints into a RenderOutput so convert to float - scene_rdl2::rdl2::FloatVector out(count); - for (size_t i = 0; i < count; ++i) - out[i] = i * childCount; - instanceId->setFloatData(name, out); - } - - - // add crytomatte id if enabled - const std::string m_name("prim_id"); - std::string prim_id = prototype->getName() + "/Instancer.primvars:" + m_name; - scene_rdl2::rdl2::UserData* cryptoId = - renderDelegate.createSceneObject("UserData", prim_id)->asA(); - UpdateGuard guard(cryptoId); - scene_rdl2::rdl2::FloatVector data(1); - data[0]=MurmurHash3_to_float(instancer->getName().c_str()); - //std::cout << instancer->getName() << ": " << data[0] <setFloatData(m_name, data); - - // MOONSHINE-1533: Moonray uses the number of transforms to count instances, while Hydra Prman - // and Embree use the size of the protoIndices array. For bad data where these are unequal, - // resize the primvars to match the number of instances, so all the renderers produce the same - // number of instances. - scene_rdl2::rdl2::SceneObjectVector primitiveAttributes{instanceId}; - primitiveAttributes.push_back(cryptoId); - - for (auto p : mPrimvars) { - const pxr::TfToken& name = p.first; - if (name == pxr::HdInstancerTokens->instanceTransforms || - name == pxr::HdInstancerTokens->instanceScales || - name == pxr::HdInstancerTokens->instanceRotations || - name == pxr::HdInstancerTokens->instanceTranslations) - continue; // skip the ones used directly - - // HDM-130: Moonray InstanceGeometry primvars override primvars on the prototype, which - // is opposite how USD works. Don't create the primvar if it will override incorrectly. - if (geometry->isPrimvarUsed(name)) continue; - // Fixme: this also needs to be done with each intermediate instancer. - - const pxr::VtValue& value = p.second.value; - const pxr::TfToken& role = p.second.role; - std::string objname = prototype->getName() + "/Instancer.primvars:" + name.GetString(); - scene_rdl2::rdl2::UserData* primvar = - renderDelegate.createSceneObject("UserData", objname)->asA(); - - UpdateGuard guard(primvar); - // there are lots of types, just get the ones encountered so far: - if (value.IsHolding()) { - const pxr::VtFloatArray& v = value.UncheckedGet(); - if (v.empty()) continue; // don't crash on error - scene_rdl2::rdl2::FloatVector out(count); - for (size_t i = 0; i < count; ++i) out[i] = v[indices[i] % v.size()]; - primvar->setFloatData(name.GetString(), out); - } else if (value.IsHolding()) { - const pxr::VtVec2fArray& v = value.UncheckedGet(); - if (v.empty()) continue; // don't crash on error - scene_rdl2::rdl2::Vec2fVector out(count); - for (size_t i = 0; i < count; ++i) out[i] = reinterpret_cast(v[indices[i] % v.size()]); - primvar->setVec2fData(name.GetString(), out); - } else if (value.IsHolding()) { - const pxr::VtVec3fArray& v = value.UncheckedGet(); - if (v.empty()) continue; // don't crash on error - if (role == pxr::HdPrimvarRoleTokens->color) { - scene_rdl2::rdl2::RgbVector out(count); - for (size_t i = 0; i < count; ++i) out[i] = reinterpret_cast(v[indices[i] % v.size()]); - primvar->setColorData(name.GetString(), out); - } else { - scene_rdl2::rdl2::Vec3fVector out(count); - for (size_t i = 0; i < count; ++i) out[i] = reinterpret_cast(v[indices[i] % v.size()]); - primvar->setVec3fData(name.GetString(), out); - } - } else if (value.IsHolding()) { - const pxr::GfVec3f& v = value.UncheckedGet(); - if (role == pxr::HdPrimvarRoleTokens->color) { - primvar->setColorData(name.GetString(), scene_rdl2::rdl2::RgbVector{reinterpret_cast(v)}); - } else { - primvar->setVec3fData(name.GetString(), scene_rdl2::rdl2::Vec3fVector{reinterpret_cast(v)}); - } - } else if (value.IsHolding()) { - const pxr::VtIntArray& v = value.UncheckedGet(); - if (v.empty()) continue; // don't crash on error - scene_rdl2::rdl2::IntVector out(count); - for (size_t i = 0; i < count; ++i) out[i] = v[indices[i] % v.size()]; - primvar->setIntData(name.GetString(), out); - } else { - Logger::warn(primvar->getName(),": ",value.GetTypeName()," not translated"); - } - primitiveAttributes.push_back(primvar); - } - - { UpdateGuard guard(instancer); - instancer->set("primitive_attributes", primitiveAttributes); - - instancer->set(instancer->sNodeXformKey, reinterpret_cast(mXform)); - - instancer->set("references", scene_rdl2::rdl2::SceneObjectVector{prototype}); - // there is also refIndices but that can be left at default value - - instancer->set("use_reference_xforms", true); - - auto i = mPrimvars.find(pxr::HdInstancerTokens->instanceTransforms); - if (i != mPrimvars.end()) { - instancer->set("method", Method::XFORM_LIST); - const pxr::VtValue& value = i->second.value; - const pxr::VtMatrix4dArray& v = value.Get(); - if (not v.empty()) { - std::vector mv(count); - for (size_t i = 0; i < count; ++i) - mv[i] = v[indices[i] % v.size()]; - instancer->set("xform_list", reinterpret_cast&>(mv)); - } - - } else { - instancer->set("method", Method::XFORM_ATTRIBUTES); - - i = mPrimvars.find(pxr::HdInstancerTokens->instanceScales); - if (i != mPrimvars.end()) { - const pxr::VtValue& value = i->second.value; - const pxr::VtVec3fArray& v = value.Get(); - if (not v.empty()) { - std::vector mv(count); - for (size_t i = 0; i < count; ++i) - mv[i] = v[indices[i] % v.size()]; - instancer->set("scales", reinterpret_cast&>(mv)); - } - } - - i = mPrimvars.find(pxr::HdInstancerTokens->instanceRotations); - if (i != mPrimvars.end()) { - const pxr::VtValue& value = i->second.value; - - // in 0.21.11 the type of the rotations attr switched from VtVec4fArray to VtQuathArray - if (value.IsHolding()) { - const pxr::VtQuathArray& quats = value.Get(); - if (not quats.empty()) { - std::vector vecs(count); - for (size_t i = 0; i < count; ++i) { - const pxr::GfQuath& quat = quats[indices[i] % quats.size()]; - vecs[i] = - scene_rdl2::rdl2::Vec4f(float(quat.GetImaginary()[0]), - float(quat.GetImaginary()[1]), - float(quat.GetImaginary()[2]), - float(quat.GetReal())); - } - instancer->set("orientations", vecs); - } - } else { - const pxr::VtVec4fArray& v = value.Get(); - if (not v.empty()) { - std::vector mv(count); - for (size_t i = 0; i < count; ++i) { - const pxr::GfVec4f& q = v[indices[i] % v.size()]; - mv[i] = pxr::GfVec4f(q[1],q[2],q[3],q[0]); - } - instancer->set("orientations", reinterpret_cast&>(mv)); - } - } - } - i = mPrimvars.find(pxr::HdInstancerTokens->instanceTranslations); - if (i != mPrimvars.end()) { - const pxr::VtValue& value = i->second.value; - const pxr::VtVec3fArray& v = value.Get(); - if (not v.empty()) { - std::vector mv(count); - for (size_t i = 0; i < count; ++i) - mv[i] = v[indices[i] % v.size()]; - instancer->set("positions", reinterpret_cast&>(mv)); - } - } - } - } - - // This instancer may itself be a prototype for another instancer! - if (not GetParentId().IsEmpty()) { - Instancer* parent = (Instancer*)sceneDelegate->GetRenderIndex().GetInstancer(GetParentId()); - parent->makeInstanceGeometry(id, instancer, geometry, level+1, count * childCount); - } - -} - -} diff --git a/lib/hydramoonray/Light.cc b/lib/hydramoonray/Light.cc deleted file mode 100644 index 65409e4..0000000 --- a/lib/hydramoonray/Light.cc +++ /dev/null @@ -1,455 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#include "Light.h" -#include "LightFilter.h" -#include "Mesh.h" -#include "RenderDelegate.h" -#include "ValueConverter.h" -#include "HdmLog.h" - -#include -#include - -#include - -// nb, must use full name scene_rdl2::rdl2::Light... -#include -#include -#include -#include - -#include -#include - -using namespace scene_rdl2::rdl2; - -namespace { - -pxr::TfToken moonrayClassToken("moonray:class"); -pxr::TfToken spotLightToken("SpotLight"); -pxr::TfToken rectLightToken("RectLight"); -pxr::TfToken geometryLightToken("geometryLight"); -pxr::TfToken geometryToken("inputs:geometry"); -pxr::TfToken moonrayGeometryToken("moonray:geometry"); - -const std::string& -defaultRdlClassName(const pxr::TfToken& type) -{ - static const std::string def; - static std::map rdlClassMap = - { { pxr::HdPrimTypeTokens->cylinderLight , "CylinderLight" }, - { pxr::HdPrimTypeTokens->diskLight, "DiskLight" }, - { pxr::HdPrimTypeTokens->distantLight, "DistantLight" }, - { pxr::HdPrimTypeTokens->domeLight, "EnvLight" }, - { pxr::HdPrimTypeTokens->rectLight, "RectLight" }, - { pxr::HdPrimTypeTokens->sphereLight, "SphereLight" }, - { geometryLightToken, "MeshLight" }}; - auto it = rdlClassMap.find(type); - if (it == rdlClassMap.end()) return def; - return it->second; -} - -} - -namespace hdMoonray { - -using scene_rdl2::logging::Logger; - -pxr::HdDirtyBits -Light::GetInitialDirtyBitsMask() const -{ - return pxr::HdLight::AllDirty; -} - - -const std::string& -Light::rdlClassName(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate) -{ - // identify the rdl light class to use. This can be specified via "token moonray::class =" or - // deduced from the Lux/Usd type - const std::string& luxRdlClass(defaultRdlClassName(mType)); - pxr::VtValue v = sceneDelegate->GetLightParamValue(id, moonrayClassToken); - bool isRectLight = false; - if (v.IsHolding()) { - pxr::TfToken classToken = v.UncheckedGet(); - if (classToken == rectLightToken) { - isRectLight = true; - } - // See if the moonray::class does not match the Lux type: - bool error; - if (classToken == spotLightToken) { - error = (mType != pxr::HdPrimTypeTokens->diskLight && mType != pxr::HdPrimTypeTokens->sphereLight); - } else { - error = (classToken != luxRdlClass); - } - if (error) { - Logger::warn(id, ".moonray:class: '", classToken, - "' may not be compatible with USD light type '", mType, "'"); - } - return classToken.GetString(); - } - // existence of shaping api makes a SpotLight - v = sceneDelegate->GetLightParamValue(id, pxr::HdLightTokens->shapingConeAngle); - if (v.IsHolding() && v.UncheckedGet() < 90.0f) { - if (mType != pxr::HdPrimTypeTokens->diskLight) { - Logger::warn(id, ": shaping api may not be compatible with USD light type '", mType, "'"); - } - if (isRectLight) { - mRectToSpotlight = true; - } - return spotLightToken.GetString(); - } - if (luxRdlClass.empty()) { - Logger::error(id, ": Unsupported light type ", mType, " replaced by DiskLight"); - return defaultRdlClassName(pxr::HdPrimTypeTokens->diskLight); - } - return luxRdlClass; -} - -bool -Light::isSupportedType(const pxr::TfToken& type) -{ - return !defaultRdlClassName(type).empty(); -} - - -void -Light::fixCylinderLight(scene_rdl2::rdl2::Mat4d& mat) { - // in Usd/Lux cylinder is along x-axis, in moonray it is along y. - if (mType == pxr::HdPrimTypeTokens->cylinderLight) { - // rotate -90deg about z - std::swap(mat.vx, mat.vy); - mat.vx *= -1.0; - } -} - -void -Light::syncXform(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate) -{ - pxr::HdTimeSampleArray sampledXforms; - sceneDelegate->SampleTransform(id, &sampledXforms); - // if there's only one sample, it should match the cached value - if (sampledXforms.count <= 1) { - scene_rdl2::rdl2::Mat4d rdl2Xform0 = - reinterpret_cast(sampledXforms.values[0]); - fixCylinderLight(rdl2Xform0); - mLight->set(mLight->sNodeXformKey, rdl2Xform0); - } else { - // first and last samples will be sample interval boundaries - scene_rdl2::rdl2::Mat4d rdl2Xform0 = - reinterpret_cast(sampledXforms.values[0]); - fixCylinderLight(rdl2Xform0); - mLight->set(mLight->sNodeXformKey, rdl2Xform0); - scene_rdl2::rdl2::Mat4d rdl2Xform1 = - reinterpret_cast(sampledXforms.values[sampledXforms.count-1]); - fixCylinderLight(rdl2Xform1); - mLight->set(mLight->sNodeXformKey, rdl2Xform1, scene_rdl2::rdl2::TIMESTEP_END); - } -} - -// If all the lights are off the renderDelegate has to turn the default dome light on -void -Light::setOn(bool value, RenderDelegate& renderDelegate) { - if (value != mOn) { - mOn = value; - if (value) - renderDelegate.addLight(); - else - renderDelegate.removeLight(); - mLight->set(mLight->sOnKey, value); - } -} - -pxr::GfVec3f -colorTemperatureToRGB(float kelvin) -{ - float t = scene_rdl2::math::clamp(kelvin, 1000.0f, 40000.0f) / 100.0f; - float r, g, b; - - if (t <= 66.0f) { - r = 1.0f; - g = 0.39008157876901960784f * log(t) - 0.6318414437886274509f; - } else { - r = 1.29293618606274509804f * pow(t - 60.0f, -0.1332047592f); - g = 1.12989086089529411765f * pow(t - 60.0f, -0.0755148492f); - } - - if (t >= 66.0f) - b = 1.0f; - else if(t <= 19.0f) - b = 0.0f; - else - b = 0.54320678911019607843f * log(t - 10.0f) - 1.19625408914f; - - return pxr::GfVec3f(scene_rdl2::math::clamp(r, 0.0f, 1.0f), - scene_rdl2::math::clamp(g, 0.0f, 1.0f), - scene_rdl2::math::clamp(b, 0.0f, 1.0f)); -} - -void -Light::syncParams(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate) -{ - const SceneClass& sceneClass = mLight->getSceneClass(); - - for (auto it = sceneClass.beginAttributes(); it != sceneClass.endAttributes(); ++it) { - const std::string& attrName = (*it)->getName(); - - // attributes directly updated by Sync(): - if (attrName == "on" || attrName == "node_xform" || attrName == "intensity") continue; - - if (attrName == "geometry") { - // geometry light support is not reliable in this version of Hydra, since access to - // a geometry prim from a light is not anticipated. Correct solution is to use a - // Mesh prim with LightAPI applied - pxr::VtValue relval = sceneDelegate->Get(id, geometryToken); - // This relies on our custom GeometryLight adapter, which returns a path taken from - // the rel geometry property. It can be broken by the pxr adapter taking precedence, - // which will simply report that GeometryLight is not supported yet. - if (relval.IsHolding()) { - // Given the path from rel geometry, we need to get the corresponding rprim, and - // thence the RDL geometry object. This implementation is not safe, because it - // assumes that the geom uses the same delegate as the light, but I don't think - // there is an alternative in Hydra 1 - pxr::SdfPath geomPath = relval.UncheckedGet(); - geomPath.ReplacePrefix(pxr::SdfPath::AbsoluteRootPath(), sceneDelegate->GetDelegateID()); - pxr::HdRprim* prim = const_cast(sceneDelegate->GetRenderIndex().GetRprim(geomPath)); - Mesh* mesh = dynamic_cast(prim); - if (mesh) { - // geometry sync should not be running in parallel with light sync - scene_rdl2::rdl2::SceneObject* geom = mesh->geometryForMeshLight(renderDelegate); - if (geom) { - mLight->set("geometry",geom); - } - } - } - continue; - } - - // check if attr is set by a moonray::name property - std::string moonrayName = "moonray:"+attrName; - pxr::VtValue val = sceneDelegate->GetLightParamValue(id, pxr::TfToken(moonrayName)); - if (!val.IsEmpty()) { - ValueConverter::setAttribute(mLight, *it, val); - continue; - } - - // Find the equivalent Lux attribute - static const std::map map = { - { "color", pxr::HdLightTokens->color }, - //{ "intensity", pxr::HdLightTokens->intensity }, // handled in sync - { "exposure", pxr::HdLightTokens->exposure }, - { "radius", pxr::HdLightTokens->radius }, - { "normalized", pxr::HdLightTokens->normalize }, - { "width", pxr::HdLightTokens->width }, - { "height", pxr::HdLightTokens->height }, - { "angular_extent", pxr::HdLightTokens->angle }, - { "texture", pxr::HdLightTokens->textureFile }, - { "lens_radius", pxr::HdLightTokens->radius }, - { "outer_cone_angle", pxr::HdLightTokens->shapingConeAngle }, - { "inner_cone_angle", pxr::HdLightTokens->shapingConeSoftness } - }; - auto it2 = map.find(attrName); - if (it2 != map.end()) { - pxr::TfToken luxName = it2->second; - - if (luxName == pxr::HdLightTokens->shapingConeAngle) { - float coneAngle = 90; // Lux default value - val = sceneDelegate->GetLightParamValue(id, pxr::HdLightTokens->shapingConeAngle); - if (val.IsHolding()) coneAngle = val.UncheckedGet(); - mLight->set(AttributeKey(**it), 2 * coneAngle); - continue; - - } else if (luxName == pxr::HdLightTokens->shapingConeSoftness) { - float softness = 0; // Lux default value - val = sceneDelegate->GetLightParamValue(id, luxName); - if (val.IsHolding()) softness = val.UncheckedGet(); - float coneAngle = 90; // Lux default value - val = sceneDelegate->GetLightParamValue(id, pxr::HdLightTokens->shapingConeAngle); - if (val.IsHolding()) coneAngle = val.UncheckedGet(); - float innerConeAngle = coneAngle; - if (softness > 0) { - innerConeAngle = (softness < 1) ? coneAngle * (1 - softness) : 0.0f; - } - mLight->set(AttributeKey(**it), 2 * innerConeAngle); - continue; - - } else if (luxName == pxr::HdLightTokens->radius && mRectToSpotlight == true) { - // Since rect lights with shaping are converted to spotlights, we approximate - // the rect light area using the spotlight's lens_radius parameter. - float width = 1.0f; - val = sceneDelegate->GetLightParamValue(id, pxr::HdLightTokens->width); - if (val.IsHolding()) width = val.UncheckedGet(); - float height = 1.0f; - val = sceneDelegate->GetLightParamValue(id, pxr::HdLightTokens->height); - if (val.IsHolding()) height = val.UncheckedGet(); - const float radius = scene_rdl2::math::sqrt((width * height) / scene_rdl2::math::sPi); - mLight->set(AttributeKey(**it), radius); - continue; - } else if (luxName == pxr::HdLightTokens->color) { - pxr::GfVec3f color(1.0f); - val = sceneDelegate->GetLightParamValue(id, luxName); - if (val.IsHolding()) color = val.UncheckedGet(); - val = sceneDelegate->GetLightParamValue(id, pxr::HdLightTokens->enableColorTemperature); - if (val.IsHolding() && val.UncheckedGet()) { - val = sceneDelegate->GetLightParamValue(id, pxr::HdLightTokens->colorTemperature); - if (val.IsHolding()) { - const float temperature = val.UncheckedGet(); - - // This was originally using the function pxr::UsdLuxBlackbodyTemperatureAsRgb - // to do the conversion. However there was a noticeable difference in the color - // compared to the Karma renderer. To better match this we use the algorithm - // from the following site: - // https://tannerhelland.com/2012/09/18/convert-temperature-rgb-algorithm-code.html - pxr::GfVec3f tempRgb = colorTemperatureToRGB(temperature); - color[0] *= tempRgb[0]; - color[1] *= tempRgb[1]; - color[2] *= tempRgb[2]; - } - } - mLight->set(AttributeKey(**it), reinterpret_cast(color)); - continue; - - } else { - // special case: Lux CylinderLight uses "length" where rdl2 uses "height" - if (luxName == pxr::HdLightTokens->height && mType == pxr::HdPrimTypeTokens->cylinderLight) { - luxName = pxr::HdLightTokens->length; - } - // schema will cause correct default to be returned - val = sceneDelegate->GetLightParamValue(id, luxName); - if (!val.IsEmpty()) { - ValueConverter::setAttribute(mLight, *it, val); - continue; - } - } - } - - // no setting, so reset to default - ValueConverter::setDefault(mLight, *it); - } -} - -void -Light::syncFilterList(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate) -{ - pxr::VtValue val = sceneDelegate->GetLightParamValue(id, pxr::TfToken(pxr::HdTokens->filters)); - if (!val.IsHolding()) { - return; - } - scene_rdl2::rdl2::SceneObjectVector filters; - const pxr::SdfPathVector& paths = val.UncheckedGet(); - for (const pxr::SdfPath& path : paths) { - scene_rdl2::rdl2::LightFilter* filter = LightFilter::getFilter(sceneDelegate,renderDelegate,path); - if (filter) { - filters.push_back(filter); - } - } - mLight->set(scene_rdl2::rdl2::Light::sLightFiltersKey,filters); -} - -void -Light::Sync(pxr::HdSceneDelegate *sceneDelegate, - pxr::HdRenderParam *renderParam, - pxr::HdDirtyBits *dirtyBits) -{ - pxr::SdfPath id = GetId(); - hdmLogSyncStart("Light", id, dirtyBits); - - RenderDelegate& renderDelegate(RenderDelegate::get(renderParam)); - - // HDM-125: usdview sets the intensity of lights to 0.0f if "Enable Scene Lights" is turned off, - // so treat intensity=0 as turning off the light. Also turn it off when lighting disabled. - float intensity = 0.0f; - if (not renderDelegate.getDisableLighting() && sceneDelegate->GetVisible(id)) { - pxr::VtValue val = sceneDelegate->GetLightParamValue(id, pxr::HdLightTokens->intensity); - intensity = val.IsHolding() ? val.UncheckedGet() : 1.0f; - } - - bool initialize = false; - if (not mLight) { - *dirtyBits = DirtyBits::Clean; // don't call Sync again if no light is created - if (not (intensity > 0)) return; // don't create invisible lights - // currently if the class changes, Finalize() is called, so there is no need to check - // for this after the object is created. - const std::string& rdlClass = rdlClassName(id, sceneDelegate); - scene_rdl2::rdl2::SceneObject* object = renderDelegate.createSceneObject(rdlClass, id); - mLight = object ? object->asA() : nullptr; - if (not mLight) return; // if there was an error this already printed an error message - initialize = true; // Force the catagories to be updated - *dirtyBits = pxr::HdLight::AllDirty; // force other settings to be made - } - - UpdateGuard guard(renderDelegate, mLight); - - if ((*dirtyBits) & pxr::HdLight::DirtyTransform) { - syncXform(id, sceneDelegate); - } - - if ((*dirtyBits) & pxr::HdLight::DirtyParams) { - setOn(intensity > 0, renderDelegate); - mLight->set(scene_rdl2::rdl2::Light::sIntensityKey, intensity); - syncParams(id, sceneDelegate, renderDelegate); - syncFilterList(id, sceneDelegate, renderDelegate); - // querying "lightLink" will return a token used to name the "category" that - // holds all geometry that this light links to. This value will later be - // returned as one of the entries if any of the linked geometry calls GetCategories(). - // In other words, the scene delegate does the reverse lookup "geometry->lights" for - // us using an internal cache. - // Value is either "" or ".collection:lightLink" though this will allow others. - // Currently Finalize() is called when value changes, but this may be a bug. - bool categoriesChanged = false; - pxr::TfToken t = - sceneDelegate->GetLightParamValue(id, pxr::HdTokens->lightLink).Get(); - // registering the category id token with RenderDelegate will enable geometry - // to look up mLight as the rdl2 scene object corresponding to this category id - if (initialize || t != mLightLinkCategory) { - if (!initialize) { - renderDelegate.releaseCategory(mLight, RenderDelegate::CategoryType::LightLink, mLightLinkCategory); - } - renderDelegate.setCategory(mLight, RenderDelegate::CategoryType::LightLink, t); - mLightLinkCategory = t; - categoriesChanged = true; - } - // "shadowLink" is much the same - t = sceneDelegate->GetLightParamValue(id, pxr::HdTokens->shadowLink).Get(); - if (initialize || t != mShadowLinkCategory) { - if (!initialize) { - renderDelegate.releaseCategory(mLight, RenderDelegate::CategoryType::ShadowLink, mShadowLinkCategory); - } - renderDelegate.setCategory(mLight, RenderDelegate::CategoryType::ShadowLink, t); - mShadowLinkCategory = t; - categoriesChanged = true; - } - // Need to call Sync() on all geometry to get categories copied into LightSets - if (categoriesChanged) { - // in 0.22.5, DirtyCategories seems to be ignored. We can force a sync using - // DirtyMaterialId even though it isn't strict;y right... - sceneDelegate->GetRenderIndex().GetChangeTracker().MarkAllRprimsDirty( - pxr::HdChangeTracker::DirtyCategories | pxr::HdChangeTracker::DirtyMaterialId); - } - } - - *dirtyBits = DirtyBits::Clean; - hdmLogSyncEnd(id); -} - -void -Light::Finalize(pxr::HdRenderParam *renderParam) -{ - if (mLight) { - RenderDelegate& renderDelegate(RenderDelegate::get(renderParam)); - UpdateGuard guard(renderDelegate, mLight); - setOn(false, renderDelegate); - renderDelegate.releaseCategory(mLight, RenderDelegate::CategoryType::LightLink, mLightLinkCategory); - renderDelegate.releaseCategory(mLight, RenderDelegate::CategoryType::ShadowLink, mShadowLinkCategory); - mLight = nullptr; - } -} - -} diff --git a/lib/hydramoonray/LightFilter.cc b/lib/hydramoonray/LightFilter.cc deleted file mode 100644 index 7170d37..0000000 --- a/lib/hydramoonray/LightFilter.cc +++ /dev/null @@ -1,287 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#include "LightFilter.h" -#include "RenderDelegate.h" -#include "ValueConverter.h" -#include "Material.h" -#include "Camera.h" -#include "HdmLog.h" - -#include -#include -#include - -// nb, must use full name scene_rdl2::rdl2::LightFilter... -#include -#include -#include -#include -#include - -using namespace scene_rdl2::rdl2; - -namespace { -using scene_rdl2::logging::Logger; - -pxr::TfToken moonrayClassToken("moonray:class"); -pxr::TfToken fallbackClass("DecayLightFilter"); - -#if PXR_VERSION >= 2005 -# define lightFilterToken (pxr::HdPrimTypeTokens->lightFilter) -# define lightFilterLinkToken (pxr::HdTokens->lightFilterLink) -#else -pxr::TfToken lightFilterToken("lightFilter"); -pxr::TfToken lightFilterLinkToken("lightFilterLink"); -#endif -} - -namespace hdMoonray { - -using scene_rdl2::logging::Logger; - -pxr::HdDirtyBits -LightFilter::GetInitialDirtyBitsMask() const -{ - return pxr::HdChangeTracker::DirtyParams; -} - -void -LightFilter::syncParams(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate) -{ - const SceneClass& sceneClass = mLightFilter->getSceneClass(); - - for (auto it = sceneClass.beginAttributes(); - it != sceneClass.endAttributes(); ++it) { - - const std::string& attrName = (*it)->getName(); - if (attrName == "node_xform") { - syncXform(id, sceneDelegate); - } else if (attrName == "projector") { - syncProjector(id,sceneDelegate, renderDelegate); - } else if (attrName == "texture_map") { - syncTextureMap(id, sceneDelegate, renderDelegate); - } else if (attrName == "light_filters") { - syncCombineFilters(id, sceneDelegate, renderDelegate); - } else { - pxr::TfToken moonrayName("moonray:" + attrName); - pxr::VtValue val = sceneDelegate->GetLightParamValue(id, moonrayName); - if (val.IsEmpty()) { - ValueConverter::setDefault(mLightFilter, *it); - } else { - ValueConverter::setAttribute(mLightFilter, *it, val); - } - } - } -} - -void -LightFilter::syncProjector(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate) -{ - // sync the "projector" attribute of Cookie light filters, - // which is authored as a "rel" to a camera. Note that this - // requires the custom MoonrayLightFilterAdapter to work - static pxr::TfToken projectorToken("moonray:projector"); - pxr::VtValue val = sceneDelegate->Get(id, projectorToken); // supplied by adapter - if (val.IsHolding()) { - pxr::SdfPath path = val.UncheckedGet(); - path.ReplacePrefix(pxr::SdfPath::AbsoluteRootPath(), sceneDelegate->GetDelegateID()); - SceneObject* so = hdMoonray::Camera::createCamera(sceneDelegate, renderDelegate, path); - mLightFilter->set("projector", so); - if (not so) { - Logger::error(GetId(), ".moonray:projector: ", path, " not found"); - } - } else if (not val.IsEmpty()) { - Logger::error(GetId(), ".moonray:projector: must be a path"); - } -} - -void -LightFilter::syncXform(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate) -{ - // some light filters (e.g. Rod) have a blurrable node_xform attr - // (although not actually inherited from Node, so don't use Node's attribute key) - // Do not call this function without first verifying that the - // light filter has an attribute called "node_xform" - pxr::HdTimeSampleArray sampledXforms; - sceneDelegate->SampleTransform(id, &sampledXforms); - // if there's only one sample, it should match the cached value - if (sampledXforms.count <= 1) { - scene_rdl2::rdl2::Mat4d rdl2Xform0 = - reinterpret_cast(sampledXforms.values[0]); - mLightFilter->set("node_xform", rdl2Xform0); - } else { - // first and last samples will be sample interval boundaries - scene_rdl2::rdl2::Mat4d rdl2Xform0 = - reinterpret_cast(sampledXforms.values[0]); - mLightFilter->set("node_xform", rdl2Xform0); - scene_rdl2::rdl2::Mat4d rdl2Xform1 = - reinterpret_cast(sampledXforms.values[sampledXforms.count-1]); - mLightFilter->set("node_xform", rdl2Xform1, scene_rdl2::rdl2::TIMESTEP_END); - } -} - -void -LightFilter::syncCombineFilters(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate) -{ - // sync the "light_filters" attribute of Combine light filters, - // which is authored as "rel"s to light filters. Note that this - // requires the custom MoonrayLightFilterAdapter to work - static pxr::TfToken filtersToken("moonray:light_filters"); - pxr::VtValue val = sceneDelegate->Get(id, filtersToken); // supplied by adapter - if (val.IsHolding()) { - scene_rdl2::rdl2::SceneObjectVector rdlObjects; - pxr::SdfPathVector pathVec = val.UncheckedGet(); - for (const pxr::SdfPath& cpath : pathVec) { - pxr::SdfPath path(cpath); - path.ReplacePrefix(pxr::SdfPath::AbsoluteRootPath(), sceneDelegate->GetDelegateID()); - SceneObject* so = LightFilter::getFilter(sceneDelegate, renderDelegate, path); - if (so) { - rdlObjects.push_back(so); - } else { - Logger::error(GetId(), ".moonray:light_filters: ", path, " not found"); - } - } - mLightFilter->set("light_filters", rdlObjects); - } else if (not val.IsEmpty()) { - Logger::error(GetId(), ".moonray:light_filters: must be a list of paths"); - } -} - -void -LightFilter::syncTextureMap(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate) -{ - - const std::string moonrayName = "moonray:texture_map"; - scene_rdl2::rdl2::SceneObject* shader = nullptr; - pxr::VtValue hdMatVal = sceneDelegate->GetMaterialResource(id); - if (!hdMatVal.IsHolding()) { - return; - } - const pxr::HdMaterialNetworkMap& networkmap = hdMatVal.UncheckedGet(); - pxr::SdfPath inputId; - for (auto const& iter : networkmap.map) { - const pxr::HdMaterialNetwork & network = iter.second; - for (const pxr::HdMaterialRelationship& rel : network.relationships) { - if (rel.outputName == moonrayName){ - inputId = rel.inputId; - break; - } - } - if (inputId.IsEmpty()) - continue; - - // found the connected network, import all the shader nodes - // and set the connected one - for (const pxr::HdMaterialNode & node : network.nodes) { - // we have to skip the actual light filter node - if (node.identifier == "MoonrayLightFilter" || - node.path == id) { - continue; - } - const std::string nodeName = node.path.GetString(); - shader = makeMoonrayShader(renderDelegate, sceneDelegate, node, nodeName, nullptr); - if (!shader) { - continue; - } - if (node.path == inputId){ - mLightFilter->set("texture_map", shader); - } - } - } - -} - -// Hydra doesn't currently seem to analyse the dependency between light and light filter -// correctly, so a light may be synced before the filters it references. To work around -// this, we need to allow the light to create the filter outside Sync, under a mutex... -scene_rdl2::rdl2::LightFilter* -LightFilter::getOrCreateFilter(pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate, - const pxr::SdfPath& id) -{ - std::lock_guard lock(mCreateMutex); - if (not mLightFilter) { - pxr::VtValue vtClass = sceneDelegate->GetLightParamValue(id, moonrayClassToken); - pxr::TfToken classToken; - if (vtClass.IsHolding()) { - classToken = vtClass.UncheckedGet(); - } else { - classToken = fallbackClass; - Logger::warn("hdMoonray: Unspecified LightFilter type : creating ", classToken); - } - mLightFilter = renderDelegate.createSceneObject(classToken.GetString(), id)->asA(); - - // See Light.cc for explanation... - pxr::VtValue val = sceneDelegate->GetLightParamValue(id, lightFilterLinkToken); - if (val.IsHolding()) { - mLightFilterCategory = val.UncheckedGet(); - } - renderDelegate.setCategory(mLightFilter,RenderDelegate::CategoryType::FilterLink,mLightFilterCategory); - } - return mLightFilter; -} - -void -LightFilter::Sync(pxr::HdSceneDelegate *sceneDelegate, - pxr::HdRenderParam *renderParam, - pxr::HdDirtyBits *dirtyBits) -{ - pxr::SdfPath id = GetId(); - hdmLogSyncStart("LightFilter", id, dirtyBits); - RenderDelegate& renderDelegate(RenderDelegate::get(renderParam)); - - getOrCreateFilter(sceneDelegate,renderDelegate,id); - - if ((*dirtyBits) & pxr::HdChangeTracker::DirtyParams) { - UpdateGuard guard(renderDelegate, mLightFilter); - syncParams(id,sceneDelegate, renderDelegate); - } - - *dirtyBits = pxr::HdChangeTracker::Clean; - hdmLogSyncEnd(id); -} - -void -LightFilter::Finalize(pxr::HdRenderParam *renderParam) -{ - RenderDelegate& renderDelegate(RenderDelegate::get(renderParam)); - renderDelegate.releaseCategory(mLightFilter,RenderDelegate::CategoryType::FilterLink,mLightFilterCategory); -} - -/*static*/ LightFilter* -get(pxr::HdSceneDelegate* sceneDelegate, const pxr::SdfPath& filterId) -{ - if (not filterId.IsEmpty()) { - LightFilter* filterPrim = static_cast( - sceneDelegate->GetRenderIndex().GetSprim(lightFilterToken, filterId)); - if (filterPrim) { - return filterPrim; - } - Logger::error(filterId, ": no such LightFilter"); - } - return nullptr; -} - -scene_rdl2::rdl2::LightFilter* -LightFilter::getFilter(pxr::HdSceneDelegate* sceneDelegate, - RenderDelegate& renderDelegate, - const pxr::SdfPath& filterId) -{ - LightFilter* filterPrim = get(sceneDelegate, filterId); - if (filterPrim) - return filterPrim->getOrCreateFilter(sceneDelegate,renderDelegate,filterId); - return nullptr; -} - -} - diff --git a/lib/hydramoonray/LightFilter.h b/lib/hydramoonray/LightFilter.h deleted file mode 100644 index 80d9e7f..0000000 --- a/lib/hydramoonray/LightFilter.h +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include -#include -#include - -#include - -namespace scene_rdl2 {namespace rdl2 { -class LightFilter; -} } - -namespace hdMoonray { - -class RenderDelegate; - -class LightFilter : public pxr::HdSprim -{ -public: - LightFilter(const pxr::TfToken& type, const pxr::SdfPath& id): - pxr::HdSprim(id), mType(type) {} - - /// Dirty bits to pass to first call to Sync() - pxr::HdDirtyBits GetInitialDirtyBitsMask() const override; - - /// Update the data identified by dirtyBits. Must not query other data. - void Sync(pxr::HdSceneDelegate* sceneDelegate, - pxr::HdRenderParam* renderParam, - pxr::HdDirtyBits* dirtyBits) override; - - const pxr::TfToken& type() const { return mType; } - - static scene_rdl2::rdl2::LightFilter* getFilter(pxr::HdSceneDelegate*, - RenderDelegate&, - const pxr::SdfPath&); - - void Finalize(pxr::HdRenderParam *renderParam) override; - -private: - std::string rdlClassName(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate); - void syncParams(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate); - void syncXform(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate); - void syncTextureMap(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate); - void syncProjector(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate); - void syncCombineFilters(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate); - - scene_rdl2::rdl2::LightFilter* getOrCreateFilter(pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate, - const pxr::SdfPath& filterId); - - pxr::TfToken mType; - scene_rdl2::rdl2::LightFilter* mLightFilter = nullptr; - std::mutex mCreateMutex; - - // the name of a category holding all geometry filtered by this light - pxr::TfToken mLightFilterCategory; - -}; - -} - diff --git a/lib/hydramoonray/Material.cc b/lib/hydramoonray/Material.cc deleted file mode 100644 index 5bc3882..0000000 --- a/lib/hydramoonray/Material.cc +++ /dev/null @@ -1,534 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#include "Material.h" -#include "RenderDelegate.h" -#include "ValueConverter.h" -#include "CoordSys.h" -#include "HdmLog.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// nb, must use full name scene_rdl2::rdl2::Material... -#include -#include -#include -#include - -#include -#include - -using namespace scene_rdl2::rdl2; -using namespace scene_rdl2::math; - -#ifdef __GNUC__ -#define UNUSED __attribute__ ((unused)) -#else -#define UNUSED -#endif - - -using scene_rdl2::logging::Logger; - -const pxr::TfToken projectorToken("projector"); -const pxr::TfToken proj_camToken("proj_cam"); - -UNUSED -void -dumpMaterialNetworkMap(const pxr::HdMaterialNetworkMap& networkmap) -{ - // struct HdMaterialNetworkMap { - // std::map map; - // std::vector terminals; - std::cout << "=== Material Networks ===" << std::endl; - for (auto const& iter : networkmap.map) { - const pxr::TfToken & terminalName = iter.first; - const pxr::HdMaterialNetwork & network = iter.second; - - std::cout << "Terminal '" << terminalName << "':" << std::endl; - - // struct HdMaterialNetwork { - // std::vector relationships; - // std::vector nodes; - // TfTokenVector primvars; - - std::cout << " primvars:"; - for (const pxr::TfToken& primvarName : network.primvars) { - std::cout << " " << primvarName; - } - std::cout << std::endl; - - unsigned i = 0; - for (const pxr::HdMaterialNode & node : network.nodes) { - // struct HdMaterialNode { - // SdfPath path; - // TfToken identifier; - // std::map parameters; - std::cout << " node " << i++ << ": " << node.identifier << " " << node.path << std::endl; - for (auto const& jter : node.parameters) { - std::cout << " " << jter.first << " = " << jter.second - << " [" << jter.second.GetTypeName() << "] " << std::endl; - } - } - - for (const pxr::HdMaterialRelationship& rel : network.relationships) { - // struct HdMaterialRelationship { - // SdfPath inputId; - // TfToken inputName; - // SdfPath outputId; - // TfToken outputName; - std::cout << " " << rel.outputId << "." << rel.outputName - << " bound to "<< rel.inputId << "." << rel.inputName - << std::endl; - } - std::cout << "---" << std::endl; - } - // This is redundant, it is always the last node in each network. I have no idea why they - // store this redundant information - // std::cout << "terminals: " << std::endl; - // for (const pxr::SdfPath& terminal : networkmap.terminals) { - // std::cout << " " << terminal << std::endl; - // } - - std::cout << "=========================" << std::endl; -} - -SceneObject* -getCoordSysBinding( - hdMoonray::RenderDelegate& renderDelegate, - pxr::HdSceneDelegate *sceneDelegate, - const pxr::HdMaterialNode& node, pxr::TfToken key, - const pxr::HdRprim* geom -) { - auto valIt = node.parameters.find(key); - if (valIt != node.parameters.end()) { - const pxr::VtValue& val = valIt->second; - if (val.IsHolding()) { - pxr::TfToken coordSysName = val.UncheckedGet(); - // empty token is used to specify a nullptr SceneObject* - if (coordSysName.IsEmpty()) return nullptr; - scene_rdl2::rdl2::SceneObject* sceneObject = - hdMoonray::CoordSys::getBinding(sceneDelegate, renderDelegate, geom->GetId(), coordSysName); - if (not sceneObject) { - Logger::error(node.path, ".", key, ": failed to find binding for coordSys ", coordSysName); - } - return sceneObject; - } else { - Logger::error(node.path, ".", key, ": invalid type '",val.GetTypeName(), "', should be 'token'"); - } - } else if (key == projectorToken) { - // fix sq9010 s2 and other shots where Mpaint assets are missing the coordSys binding - scene_rdl2::rdl2::SceneObject* sceneObject = - hdMoonray::CoordSys::getBinding(sceneDelegate, renderDelegate, geom->GetId(), proj_camToken); - // no error if not found, as this would be triggered if bindings to shaders are used - return sceneObject; - } - return nullptr; -} - -SceneObject* -makeMoonrayShader( - hdMoonray::RenderDelegate& renderDelegate, - pxr::HdSceneDelegate *sceneDelegate, - const pxr::HdMaterialNode& node, - const std::string& nodeName, - const pxr::HdRprim* geom -) { - SceneObject* shaderObj = renderDelegate.createSceneObject(node.identifier.GetString(), nodeName); - if (shaderObj) { - try { - SceneObject::UpdateGuard guard(shaderObj); - const SceneClass& sceneClass = shaderObj->getSceneClass(); - for (auto it = sceneClass.beginAttributes(); it != sceneClass.endAttributes(); ++it) { - const Attribute* attribute = *it; - const std::string& attrName = attribute->getName(); - if (geom!=nullptr && attribute->getType() == scene_rdl2::rdl2::TYPE_SCENE_OBJECT) { - SceneObject* binding = getCoordSysBinding( - renderDelegate, sceneDelegate, node, pxr::TfToken(attrName), geom); - shaderObj->set(AttributeKey(*attribute), binding); - } else { - auto valIt = node.parameters.find(pxr::TfToken(attrName)); - if (valIt != node.parameters.end()) { - hdMoonray::ValueConverter::setAttribute(shaderObj, attribute, valIt->second); - } else { - hdMoonray::ValueConverter::setDefault(shaderObj, attribute); - } - } - } - } catch (const std::exception& e) { - Logger::error(node.path, ": ", e.what()); - return nullptr; - } - } - return shaderObj; -} - - -std::string -getNodeWithChannelName(const std::string& nodePath, - const std::string& channelName) -{ - return nodePath + std::string(".") + channelName; -} - -//} // namespace { - -namespace hdMoonray { - -pxr::HdDirtyBits -Material::GetInitialDirtyBitsMask() const -{ - return AllDirty; // as of 20.5 this is DirtyParams | DirtyResource -} - -void -Material::Sync(pxr::HdSceneDelegate *sceneDelegate, - pxr::HdRenderParam *renderParam, - pxr::HdDirtyBits *dirtyBits) -{ - auto& renderDelegate(RenderDelegate::get(renderParam)); - - const pxr::SdfPath& id = GetId(); - hdmLogSyncStart("Material", id, dirtyBits); - - if (*dirtyBits & AllDirty) { - mResource = sceneDelegate->GetMaterialResource(id); - mMaterialDirty = mDisplacementDirty = mVolumeShaderDirty = true; - // update any material that has been created - if (mMaterial) getMaterial(renderDelegate, sceneDelegate, mGeom); - if (mDisplacement) getDisplacement(renderDelegate, sceneDelegate, mGeom); - if (mVolumeShader) getVolumeShader(renderDelegate, sceneDelegate, mGeom); - } - *dirtyBits &= ~AllDirty; - hdmLogSyncEnd(id); -} - -bool Material::isEnabled() const -{ - return mResource.IsHolding(); -} - -// Build the tree of shaders, return the final output -// Returns null if the terninal does not exist, returns error shader on other errors -// The geom is for finding coordSys bindings -scene_rdl2::rdl2::SceneObject* -Material::updateTerminal(pxr::TfToken terminalName, - RenderDelegate& renderDelegate, - pxr::HdSceneDelegate *sceneDelegate, - const pxr::HdRprim* geom) -{ - if (not isEnabled()) { - return nullptr; - } - - const pxr::HdMaterialNetworkMap& networkmap = mResource.UncheckedGet(); - auto i = networkmap.map.find(terminalName); - if (i == networkmap.map.end()) { - return nullptr; - } - - // dumpMaterialNetworkMap(networkmap); - - const pxr::HdMaterialNetwork& network = i->second; - - // Get a mapping of nodes to their output channels. - // When creating the nodes below, create one node - // per channel. The map only stores nodes with output - // connections so won't contain the material at the end - // which has no output connections. - std::unordered_map< std::string, std::set > nodeChannelMap; - for (const pxr::HdMaterialRelationship& rel : network.relationships) { - const std::string inputChannel = rel.inputName.GetString(); - - // Find the input node - for (const pxr::HdMaterialNode& node : network.nodes) { - if (node.path == rel.inputId) { - // Search for node.path string in map - auto it = nodeChannelMap.find(node.path.GetString()); - if (it == nodeChannelMap.end()) { - // Not found. Create channel set with input name as channel - std::set channelSet = { inputChannel }; - std::pair> entry = { node.path.GetString(), channelSet }; - nodeChannelMap.insert(entry); - } else { - // Found. Insert channel name into channelSet - it->second.insert(inputChannel); - } - } - } - } - - // Create the nodes - scene_rdl2::rdl2::SceneObject* last = nullptr; - for (const pxr::HdMaterialNode& node : network.nodes) { - scene_rdl2::rdl2::SceneObject* next = nullptr; - // Don't create UsdUVTexture nodes if their file name parameter is empty - if (node.identifier == "UsdUVTexture") { - auto valIt = node.parameters.find(pxr::TfToken("file")); - if (valIt != node.parameters.end()) { - if (valIt->second.UncheckedGet().GetResolvedPath().empty()) { - continue; - } - } - } - - // Create a node for each channel entry - // Moonray name must be absolute so that it is unique in the scene. - // (HDM-401 : USD 0.25.5 returns relative node paths) - std::string moonrayNodeName = node.path.MakeAbsolutePath(GetId()).GetString(); - - auto it = nodeChannelMap.find(node.path.GetString()); - if (it != nodeChannelMap.end()) { - std::set& channelSet = it->second; - for (const std::string& channel : channelSet) { - - const std::string nodeName = - getNodeWithChannelName(moonrayNodeName, - channel); - - next = makeMoonrayShader(renderDelegate, - sceneDelegate, - node, - nodeName, - geom); - } - } else { - // If the node isn't in the nodeChannelMap (i.e. materials) - // then only one node is created using the USD path as the name. - next = makeMoonrayShader(renderDelegate, - sceneDelegate, - node, - moonrayNodeName, - geom); - } - - if (next) last = next; // HDM-368 : don't give up on error - } - - // set bindings (fixme: only works for Moonray shaders) - for (const pxr::HdMaterialRelationship& rel : network.relationships) { - // Input connection - SceneObject* input; - - // Moonray name is absolute path (HDM-401) - std::string moonrayInputName = rel.inputId.MakeAbsolutePath(GetId()).GetString(); - bool foundNodeWithChannel = false; - for (const pxr::HdMaterialNode& node : network.nodes) { - if (node.path == rel.inputId) { - - const std::string nodeWithChannel = - getNodeWithChannelName(moonrayInputName, - rel.inputName.GetString()); - - input = renderDelegate.getSceneObject(nodeWithChannel); - - if (input) { - foundNodeWithChannel = true; - } - } - } - - // If we didn't find the node with the channel name - // extension then it must be a node with no outputs - // (i.e. material) so just use the node name without - // a channel extension to get it from the render delegate. - if (!foundNodeWithChannel) { - input = renderDelegate.getSceneObject(moonrayInputName); - } - - if (!input) { - continue; - } - - // Special handling for specific nodes - - // Skip IOR maps - if (rel.outputName.GetString().find("ior") != std::string::npos) { - continue; - } - - // UsdUVTexture map special handling - if (std::string::npos && input->getSceneClass().getName() == "UsdUVTexture") { - try { - UpdateGuard guard(input); - - // Decode normal maps - if (renderDelegate.getDecodeNormals() && - rel.outputName.GetString().find("normal") != std::string::npos) { - - input->set(input->getSceneClass().getAttributeKey("scale"), Rgb(2.0f)); - input->set(input->getSceneClass().getAttributeKey("bias"), Rgb(-1.0f)); - input->set(input->getSceneClass().getAttributeKey("sourceColorSpace"), 0); - } - - // Channel binding - const std::string channel = rel.inputName.GetString(); - const auto outputModeKey = input->getSceneClass().getAttributeKey("output_mode"); - int enumValue = input->getSceneClass().getEnumValue(outputModeKey, channel); - input->set(outputModeKey, enumValue); - } catch (const std::exception& e) { - Logger::error(rel.outputId, ": ", e.what()); - last = nullptr; - } - } - - // Output - SceneObject* output; - // Check if output is in nodeChannelMap - // Moonray name is absolute path (HDM-401) - std::string moonrayOutputName = rel.outputId.MakeAbsolutePath(GetId()).GetString(); - auto it = nodeChannelMap.find(rel.outputId.GetString()); - if (it != nodeChannelMap.end()) { - // Create a binding for each channel's node - for (const std::string& channel : it->second) { - const std::string outputNodeName = - getNodeWithChannelName(moonrayOutputName, - channel); - - output = renderDelegate.getSceneObject(outputNodeName); - if (!output) { - continue; - } - - try { - UpdateGuard guard(output); - - const scene_rdl2::rdl2::Attribute* attribute( - output->getSceneClass().getAttribute(rel.outputName.GetString())); - - if (attribute->getType() == scene_rdl2::rdl2::TYPE_SCENE_OBJECT) { - output->set(AttributeKey(*attribute), input); - } else { - ValueConverter::setBinding(output, attribute, input); - } - } catch (const std::exception& e) { - Logger::error(rel.outputId, ": ", e.what()); - last = nullptr; - } - } - } else { - output = renderDelegate.getSceneObject(moonrayOutputName); - if (!output) { - continue; - } - - try { - UpdateGuard guard(output); - - const scene_rdl2::rdl2::Attribute* attribute( - output->getSceneClass().getAttribute(rel.outputName.GetString())); - - if (attribute->getType() == scene_rdl2::rdl2::TYPE_SCENE_OBJECT) { - output->set(AttributeKey(*attribute), input); - } else { - ValueConverter::setBinding(output, attribute, input); - } - } catch (const std::exception& e) { - Logger::error(rel.outputId, ": ", e.what()); - last = nullptr; - } - } - } - - if (not last && terminalName == pxr::HdMaterialTerminalTokens->surface) last = renderDelegate.errorMaterial(); - return last; -} - -scene_rdl2::rdl2::Material* -Material::getMaterial( - RenderDelegate& renderDelegate, - pxr::HdSceneDelegate *sceneDelegate, - const pxr::HdRprim* geom) -{ - if (mMaterialDirty || renderDelegate.getDecodeNormalsChanged()) { - std::lock_guard lock(mCreateMutex); - mGeom = geom; - scene_rdl2::rdl2::SceneObject* s = updateTerminal( - pxr::HdMaterialTerminalTokens->surface, renderDelegate, sceneDelegate, geom); - mMaterial = s ? s->asA() : nullptr; - mMaterialDirty = false; - } - return mMaterial; -} - -scene_rdl2::rdl2::Displacement* -Material::getDisplacement( - RenderDelegate& renderDelegate, - pxr::HdSceneDelegate *sceneDelegate, - const pxr::HdRprim* geom) -{ - if (mDisplacementDirty) { - std::lock_guard lock(mCreateMutex); - if (mDisplacementDirty) { - mGeom = geom; - scene_rdl2::rdl2::SceneObject* s = updateTerminal( - pxr::HdMaterialTerminalTokens->displacement, renderDelegate, sceneDelegate, geom); - mDisplacement = s ? s->asA() : nullptr; - mDisplacementDirty = false; - } - } - return mDisplacement; -} - - -scene_rdl2::rdl2::VolumeShader* -Material::getVolumeShader( - RenderDelegate& renderDelegate, - pxr::HdSceneDelegate *sceneDelegate, - const pxr::HdRprim* geom) -{ - if (mVolumeShaderDirty) { - std::lock_guard lock(mCreateMutex); - if (mVolumeShaderDirty) { - mGeom = geom; - scene_rdl2::rdl2::SceneObject* s = updateTerminal( - pxr::HdMaterialTerminalTokens->volume, renderDelegate, sceneDelegate, geom); - mVolumeShader = s ? s->asA() : nullptr; - mVolumeShaderDirty = false; - } - } - return mVolumeShader; -} - -void -Material::get( - scene_rdl2::rdl2::LayerAssignment& layerAssignment, - const pxr::SdfPath& materialId, - RenderDelegate& renderDelegate, - pxr::HdSceneDelegate* sceneDelegate, - const pxr::HdRprim* geom, - bool volume) -{ - if (not materialId.IsEmpty()) { - Material* mtlPrim = static_cast( - sceneDelegate->GetRenderIndex().GetSprim(pxr::HdPrimTypeTokens->material, materialId)); - if (not mtlPrim) { - Logger::error(geom->GetId(), ".material: ", materialId, " has no moonray or fallback shaders"); - layerAssignment.mMaterial = volume ? nullptr : renderDelegate.errorMaterial(); - layerAssignment.mDisplacement = nullptr; - layerAssignment.mVolumeShader = volume ? renderDelegate.defaultVolumeShader() : nullptr; - return; - } - if (mtlPrim->isEnabled()) { - layerAssignment.mMaterial = mtlPrim->getMaterial(renderDelegate, sceneDelegate, geom); - layerAssignment.mDisplacement = mtlPrim->getDisplacement(renderDelegate, sceneDelegate, geom); - layerAssignment.mVolumeShader = mtlPrim->getVolumeShader(renderDelegate, sceneDelegate, geom); - return; - } - } - // return default material - layerAssignment.mMaterial = volume ? nullptr : renderDelegate.defaultMaterial(); - layerAssignment.mDisplacement = nullptr; - layerAssignment.mVolumeShader = volume ? renderDelegate.defaultVolumeShader() : nullptr; -} - -} - diff --git a/lib/hydramoonray/Material.h b/lib/hydramoonray/Material.h deleted file mode 100644 index 078dc09..0000000 --- a/lib/hydramoonray/Material.h +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include -#include - -namespace scene_rdl2 { namespace rdl2 { -class SceneObject; -class Material; -class Displacement; -class VolumeShader; -struct LayerAssignment; -}} - -namespace hdMoonray { - -class RenderDelegate; - -/// Material for an rprim - -class Material: public pxr::HdMaterial -{ -public: - explicit Material(pxr::SdfPath const& id): pxr::HdMaterial(id) {} - - /// Dirty bits to pass to first call to Sync() - pxr::HdDirtyBits GetInitialDirtyBitsMask() const override; - - /// Update the data identified by dirtyBits. Must not query other data. - void Sync(pxr::HdSceneDelegate* sceneDelegate, - pxr::HdRenderParam* renderParam, - pxr::HdDirtyBits* dirtyBits) override; - -#if PXR_VERSION < 2011 - /// removed in 0.20.11 - void Reload() override {} -#endif - - // True if usdview has enabled scene material - bool isEnabled() const; - - // Returns the "surface" terminal. Returns default if blank, error material if not found or other error - scene_rdl2::rdl2::Material* getMaterial(RenderDelegate&, pxr::HdSceneDelegate*, const pxr::HdRprim*); - // Returns the "displacement" terminal - scene_rdl2::rdl2::Displacement* getDisplacement(RenderDelegate&, pxr::HdSceneDelegate*, const pxr::HdRprim*); - // Returns the "volume" terminal - scene_rdl2::rdl2::VolumeShader* getVolumeShader(RenderDelegate&, pxr::HdSceneDelegate*, const pxr::HdRprim*); - // Get all of them into a LayerAssignment - static void get(scene_rdl2::rdl2::LayerAssignment&, const pxr::SdfPath&, RenderDelegate&, pxr::HdSceneDelegate*, - const pxr::HdRprim*, bool volume = false); - -private: - scene_rdl2::rdl2::SceneObject* updateTerminal(pxr::TfToken terminal, RenderDelegate&, pxr::HdSceneDelegate*, const pxr::HdRprim*); - pxr::VtValue mResource; - bool mMaterialDirty; - bool mDisplacementDirty; - bool mVolumeShaderDirty; - scene_rdl2::rdl2::Material* mMaterial = nullptr; - scene_rdl2::rdl2::Displacement* mDisplacement = nullptr; - scene_rdl2::rdl2::VolumeShader* mVolumeShader = nullptr; - const pxr::HdRprim* mGeom = nullptr; - std::mutex mCreateMutex; -}; - -} - -void -dumpMaterialNetworkMap(const pxr::HdMaterialNetworkMap&); - -scene_rdl2::rdl2::SceneObject* -getCoordSysBinding( - hdMoonray::RenderDelegate&, - pxr::HdSceneDelegate*, - const pxr::HdMaterialNode& , pxr::TfToken , - const pxr::HdRprim* -); -scene_rdl2::rdl2::SceneObject* -makeMoonrayShader( - hdMoonray::RenderDelegate& , - pxr::HdSceneDelegate*, - const pxr::HdMaterialNode&, - const std::string& nodeName, - const pxr::HdRprim* -); diff --git a/lib/hydramoonray/MoonrayLightFilter.cc b/lib/hydramoonray/MoonrayLightFilter.cc new file mode 100644 index 0000000..92e2ebe --- /dev/null +++ b/lib/hydramoonray/MoonrayLightFilter.cc @@ -0,0 +1,283 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "MoonrayLightFilter.h" +#include "renderDelegate.h" +#include "ValueConverter.h" +#include "material.h" +#include "camera.h" +#include "HdmLog.h" +#include "shader_utils.h" +#include "tokens.h" + +#include +#include +#include + +#include + +using namespace pxr; + +namespace { + +void +makeLightFilterInert(hdMoonray::MoonrayObject lightFilter, + hdMoonray::HdMoonray_RenderDelegate& renderDelegate) +{ + if (lightFilter.isNull()) { + return; + } + + hdMoonray::UpdateGuard guard(renderDelegate, lightFilter); + try { + lightFilter.set("on", false); + } catch (const std::exception&) { + // Some future/custom LightFilter classes may not expose "on". RDL + // objects cannot be deleted interactively, so category release and + // pointer clearing still make the object inert from hdMoonray's side. + } +} + +} + +namespace hdMoonray { + +HdDirtyBits +MoonrayLightFilter::GetInitialDirtyBitsMask() const +{ + return HdChangeTracker::DirtyParams; +} + +void +MoonrayLightFilter::syncParams(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate) +{ + // querying "lightFilterLink" will return a token used to name the "category" that + // holds all geometry that this lightFilter links to. See Light.cc for more details + // on how linking and categories work. + HdSceneDelegate* sceneDelegate = access.sceneDelegate(); + TfToken t; + VtValue linkVal = sceneDelegate->GetLightParamValue(access.id(), HdTokens->lightFilterLink); + if (linkVal.IsHolding()) { + t = linkVal.Get(); + } + if (t != mLightFilterCategory) { + if (mLightFilterCategory != HdMoonrayTokens->categoryUnset) { + renderDelegate.scene().releaseCategory(mLightFilter, FilterCategory, mLightFilterCategory); + } + mLightFilterCategory = t; + renderDelegate.scene().setCategory(mLightFilter, FilterCategory, mLightFilterCategory); + } + for (auto attrIt = mLightFilter.beginAttributes(); attrIt != mLightFilter.endAttributes(); ++attrIt) { + const std::string& attrName = (*attrIt).name(); + if (attrName == "node_xform") { + syncXform(access, renderDelegate); + } else if (attrName == "projector") { + syncProjector(access, renderDelegate); + } else if (attrName == "texture_map") { + syncTextureMap(access, renderDelegate); + } else if (attrName == "light_filters") { + syncCombineFilters(access, renderDelegate); + } else { + VtValue val = access.Get(TfToken(attrName)); + if (val.IsEmpty()) { + (*attrIt).setToDefault(); + } else { + (*attrIt).set(val); + } + } + } +} + +void +MoonrayLightFilter::syncProjector(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate) +{ + // sync the "projector" attribute of Cookie light filters, + // which is authored as a "rel" to a camera. + HdSceneDelegate* sceneDelegate = access.sceneDelegate(); + VtValue val = access.Get(HdMoonrayTokens->projector); + SdfPath path; + if (val.IsHolding()) { + path = val.UncheckedGet(); + } else if (val.IsHolding()) { + const SdfPathVector& paths = val.UncheckedGet(); + if (!paths.empty()) { + path = paths[0]; + } + } else if (val.IsHolding>()) { + const VtArray& paths = val.UncheckedGet>(); + if (!paths.empty()) { + path = paths[0]; + } + } + + if (path.IsEmpty()) { + mLightFilter.setToDefault("projector"); + } else { + path = path.ReplacePrefix(SdfPath::AbsoluteRootPath(), sceneDelegate->GetDelegateID()); + MoonrayObject mo = HdMoonray_Camera::createCamera(sceneDelegate, renderDelegate, path); + mLightFilter.set("projector", mo); + if (mo.isNull()) { + Logger::error(GetId(), ".moonray:projector: ", path, " not found"); + } + } +} + +void +MoonrayLightFilter::syncXform(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate) +{ + // TODO: Doesn't work for Hydra 2 : implement sample for PrimAccess + HdTimeSampleArray sampledXforms; + std::pair shutterInterval = renderDelegate.scene().getTimeSamplingInterval(); + access.sceneDelegate()->SampleTransform(access.id(), shutterInterval.first, shutterInterval.second, &sampledXforms); + // if there's only one sample, it should match the cached value + if (sampledXforms.count <= 1) { + mLightFilter.set("node_xform", sampledXforms.values[0]); + } else { + // first and last samples will be sample interval boundaries + mLightFilter.set("node_xform", sampledXforms.values[0], sampledXforms.values[sampledXforms.count-1]); + } +} + +void +MoonrayLightFilter::syncCombineFilters(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate) +{ + // sync the "light_filters" attribute of Combine light filters, + // which is authored as "rel"s to light filters. + HdSceneDelegate* sceneDelegate = access.sceneDelegate(); + VtValue val = access.Get(HdMoonrayTokens->light_filters); + // in Usd with SceneIndex mode this value is generated by UsdImagingDataSourceRelationship + // from a rel in Usd. This produces VtArray, not SdfPathVector (which is + // std::vector) + if (val.IsHolding>()) { + MoonrayObjectVector filters; + VtArray pathVec = val.UncheckedGet>(); + for (const SdfPath& cpath : pathVec) { + SdfPath path(cpath); + path = path.ReplacePrefix(SdfPath::AbsoluteRootPath(), sceneDelegate->GetDelegateID()); + MoonrayObject mo = MoonrayLightFilter::getLightFilter(path, renderDelegate, sceneDelegate); + if (mo.isValid()) { + filters.append(mo); + } else { + Logger::error(GetId(), ".moonray:light_filters: ", path, " not found"); + } + } + mLightFilter.set("light_filters", filters); + } else if (not val.IsEmpty()) { + Logger::error(GetId(), ".moonray:light_filters: must be a list of paths"); + } +} + +void +MoonrayLightFilter::syncTextureMap(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate) +{ + HdSceneDelegate* sceneDelegate = access.sceneDelegate(); + MoonrayObject textureMap = + getNodeByConnection(access.id(), "moonray:texture_map", renderDelegate, sceneDelegate); + mLightFilter.set("texture_map", textureMap); +} + + +// Hydra doesn't currently seem to analyse the dependency between light and light filter +// correctly, so a light may be synced before the filters it references. To work around +// this, we need to allow the light to create the filter outside Sync, under a mutex... +MoonrayObject +MoonrayLightFilter::getOrCreateFilter(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate) +{ + VtValue vtClass = access.Get(HdMoonrayTokens->_class); + + pxr::TfToken classToken; + if (vtClass.IsHolding()) { + classToken = vtClass.UncheckedGet(); + } else if (vtClass.IsHolding()) { + classToken = pxr::TfToken(vtClass.UncheckedGet()); + } + + if (!renderDelegate.scene().checkClassInterface(classToken.GetString(), MoonrayAttribute::InterfaceType::INTERFACE_LIGHTFILTER)) { + Logger::error(access.id(), ": invalid MoonRay LightFilter class '", classToken, "'"); + if (mLightFilter.isValid()) { + makeLightFilterInert(mLightFilter, renderDelegate); + renderDelegate.scene().releaseCategory(mLightFilter, FilterCategory, mLightFilterCategory); + mLightFilter = MoonrayObject(); + mLightFilterCategory = pxr::TfToken(); + } + return MoonrayObject(); + } + + if (mLightFilter.isValid() && mLightFilter.className() != classToken.GetString()) { + makeLightFilterInert(mLightFilter, renderDelegate); + renderDelegate.scene().releaseCategory(mLightFilter, FilterCategory, mLightFilterCategory); + mLightFilter = MoonrayObject(); + mLightFilterCategory = pxr::TfToken(); + } + + std::lock_guard lock(mCreateMutex); + if (mLightFilter.isNull()) { + mLightFilter = renderDelegate.scene().createObject(classToken.GetString(), access.id()); + mLightFilterCategory = HdMoonrayTokens->categoryUnset; // empty token means "applies to all geometry" + + } + return mLightFilter; +} + +void +MoonrayLightFilter::Sync(HdSceneDelegate *sceneDelegate, + HdRenderParam *renderParam, + HdDirtyBits *dirtyBits) +{ + SdfPath id = GetId(); + hdmLogSyncStart("MoonrayLightFilter", id, dirtyBits); + HdMoonray_RenderDelegate& renderDelegate(HdMoonray_RenderDelegate::get(renderParam)); + PrimAccess access(GetId(), HdMoonrayTokens->moonray, sceneDelegate, renderDelegate); + + if (getOrCreateFilter(access, renderDelegate).isNull()) { + *dirtyBits = pxr::HdChangeTracker::Clean; + hdmLogSyncEnd(id); + return; + } + + if ((*dirtyBits) & HdChangeTracker::DirtyParams) { + UpdateGuard guard(renderDelegate, mLightFilter); + syncParams(access, renderDelegate); + } + + *dirtyBits = HdChangeTracker::Clean; + hdmLogSyncEnd(id); +} + +void +MoonrayLightFilter::Finalize(HdRenderParam *renderParam) +{ + if (mLightFilter.isNull()) { + return; + } + + HdMoonray_RenderDelegate& renderDelegate(HdMoonray_RenderDelegate::get(renderParam)); + makeLightFilterInert(mLightFilter, renderDelegate); + renderDelegate.scene().releaseCategory(mLightFilter, FilterCategory, mLightFilterCategory); + mLightFilter = MoonrayObject(); + mLightFilterCategory = pxr::TfToken(); +} + +/* static*/ MoonrayObject +MoonrayLightFilter::getLightFilter(const SdfPath& id, + HdMoonray_RenderDelegate& renderDelegate, + HdSceneDelegate *sceneDelegate) +{ + if (id.IsEmpty()) return MoonrayObject(); + MoonrayLightFilter* moonrayFilterPrim = static_cast( + sceneDelegate->GetRenderIndex().GetSprim(HdLightFilterTypeTokens->lightFilter, id)); + if (moonrayFilterPrim) { + PrimAccess access(id, HdMoonrayTokens->moonray, sceneDelegate, renderDelegate); + return moonrayFilterPrim->getOrCreateFilter(access, renderDelegate); + } + return MoonrayObject(); +} + +} + diff --git a/lib/hydramoonray/MoonrayLightFilter.h b/lib/hydramoonray/MoonrayLightFilter.h new file mode 100644 index 0000000..385b06b --- /dev/null +++ b/lib/hydramoonray/MoonrayLightFilter.h @@ -0,0 +1,64 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "hydra2_utils.h" +#include "MoonrayObject.h" + +#include +#include + +namespace hdMoonray { + +class HdMoonray_RenderDelegate; + +class MoonrayLightFilter : public pxr::HdSprim +{ +public: + MoonrayLightFilter(const pxr::TfToken& type, const pxr::SdfPath& id): + pxr::HdSprim(id), mType(type) {} + + /// Dirty bits to pass to first call to Sync() + pxr::HdDirtyBits GetInitialDirtyBitsMask() const override; + + /// Update the data identified by dirtyBits. Must not query other data. + void Sync(pxr::HdSceneDelegate* sceneDelegate, + pxr::HdRenderParam* renderParam, + pxr::HdDirtyBits* dirtyBits) override; + + const pxr::TfToken& type() const { return mType; } + + static MoonrayObject getLightFilter(const pxr::SdfPath& id, + HdMoonray_RenderDelegate& renderDelegate, + pxr::HdSceneDelegate *sceneDelegate); + + void Finalize(pxr::HdRenderParam *renderParam) override; + +private: + MoonrayObject getOrCreateFilter(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate); + std::string rdlClassName(const pxr::SdfPath& id, + pxr::HdSceneDelegate *sceneDelegate); + void syncParams(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate); + void syncXform(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate); + void syncTextureMap(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate); + void syncProjector(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate); + void syncCombineFilters(const PrimAccess& access, + HdMoonray_RenderDelegate& renderDelegate); + + pxr::TfToken mType; + MoonrayObject mLightFilter; + std::mutex mCreateMutex; + + // the name of a category holding all geometry filtered by this light + pxr::TfToken mLightFilterCategory; + +}; + +} + diff --git a/lib/hydramoonray/MoonrayObject.h b/lib/hydramoonray/MoonrayObject.h new file mode 100644 index 0000000..02300bb --- /dev/null +++ b/lib/hydramoonray/MoonrayObject.h @@ -0,0 +1,487 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "ValueConverter.h" +#include "HdmLog.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +namespace hdMoonray { + +namespace rdl2 = scene_rdl2::rdl2; + +class MoonrayObject; + +class MoonrayAttribute +{ +public: + using Type = rdl2::AttributeType; + using InterfaceType = rdl2::SceneObjectInterface; + + MoonrayAttribute(rdl2::SceneObject* sceneObject, + rdl2::Attribute* attribute) : + mSceneObject(sceneObject), mAttribute(attribute) {} + MoonrayAttribute(rdl2::SceneObject* sceneObject, + const std::string& attributeName) : + mSceneObject(sceneObject), + mAttribute(sceneObject->getSceneClass().getAttribute(attributeName)) + {} + MoonrayAttribute() : mSceneObject(nullptr), mAttribute(nullptr) {} + + bool isNull() const { return mAttribute == nullptr; } + bool isValid() const { return mAttribute != nullptr; } + const std::string& name() const { return mAttribute->getName(); } + const std::string& objectName() const { return mSceneObject->getName(); } + + template void set(const T& value); + template void set(const T& value0, const T& value1); + + void setColor(const pxr::GfVec3f& value) { set(reinterpret_cast(value)); } + void setToDefault() { ValueConverter::setDefault(mSceneObject, mAttribute); } + void bind(const MoonrayObject& obj); + + Type type() const { return mAttribute->getType(); } + bool hasInterfaceType(InterfaceType interfaceType) const { return (mAttribute->getObjectType() & interfaceType) != 0; } + +private: + rdl2::SceneObject* mSceneObject; + rdl2::Attribute* mAttribute; +}; + +class MoonrayAttrIterator +{ +public: + + using iterator_category = std::forward_iterator_tag; + using value_type = MoonrayAttribute; + using difference_type = std::ptrdiff_t; + using pointer = const MoonrayAttribute*; + using reference = MoonrayAttribute; + + explicit MoonrayAttrIterator(rdl2::SceneObject* sceneObject, + rdl2::SceneClass::AttributeConstIterator attributeIter) + : mSceneObject(sceneObject), mAttributeIter(attributeIter) + {} + + + value_type operator*() const { + return MoonrayAttribute(mSceneObject, *mAttributeIter); + } + + MoonrayAttrIterator& operator++() { + ++mAttributeIter; + return *this; + } + + MoonrayAttrIterator operator++(int) { + MoonrayAttrIterator temp = *this; + ++mAttributeIter; + return temp; + } + + // Equality comparisons + bool operator==(const MoonrayAttrIterator& other) const { + return mAttributeIter == other.mAttributeIter; + } + + bool operator!=(const MoonrayAttrIterator& other) const { + return mAttributeIter != other.mAttributeIter; + } + + +private: + rdl2::SceneObject* mSceneObject; + rdl2::SceneClass::AttributeConstIterator mAttributeIter; +}; + +class MoonrayAssignment; + +class MoonrayObject +{ +public: + + using DataRate = rdl2::UserData::Rate; + using InterfaceType = rdl2::SceneObjectInterface; + + MoonrayObject() : mSceneObject(nullptr) {} + MoonrayObject(rdl2::SceneObject* sceneObject) : mSceneObject(sceneObject) {} + + const std::string& objectName() const { return mSceneObject->getName(); } + const std::string& className() const { return mSceneObject->getSceneClass().getName(); } + + + bool isNull() const { return mSceneObject == nullptr; } + bool isValid() const { return mSceneObject != nullptr; } + + bool hasInterfaceType(InterfaceType interfaceType) const { return (mSceneObject->getSceneClass().getDeclaredInterface() & interfaceType) != 0; } + + // null object is also used to represent the beauty render output, which is not a SceneObject + bool isBeautyOutput() const { return mSceneObject == nullptr; } + + rdl2::SceneObject* sceneObject() { return mSceneObject; } + template T* sceneObjectAs() { return mSceneObject ? mSceneObject->asA() : nullptr; } + + template void set(const std::string& name, const T& value) { getAttribute(name).set(value); } + template void set(const std::string& name, const T& value0, const T& value1) { getAttribute(name).set(value0, value1); } + void setToDefault(const std::string& name) { getAttribute(name).setToDefault(); } + + MoonrayAttrIterator beginAttributes() { return MoonrayAttrIterator(mSceneObject, mSceneObject->getSceneClass().beginAttributes()); } + MoonrayAttrIterator endAttributes() { return MoonrayAttrIterator(mSceneObject, mSceneObject->getSceneClass().endAttributes());} + MoonrayAttribute getAttribute(const std::string& name) { return MoonrayAttribute(mSceneObject, name); } + bool hasAttribute(const std::string& name) { return mSceneObject->getSceneClass().hasAttribute(name); } + + MoonrayObject getInstanceIdData() const; + void assign(const MoonrayObject& obj, const std::string& partName, const MoonrayAssignment& assignment); + + template void setData(const std::string& name, const T& value, const pxr::TfToken& role); + void setDataRate(DataRate rate) { mSceneObject->asA()->setRate(rate); } + + void beginUpdate() { mSceneObject->beginUpdate(); } + void endUpdate() { mSceneObject->endUpdate(); } + + void copyFrom(const MoonrayObject& other) { mSceneObject->copyAll(*other.mSceneObject); } + void resetToDefault() { mSceneObject->resetAllToDefault(); } + + // allow use of MoonrayObject in std::set and std::map + bool operator<(const MoonrayObject& other) const { return mSceneObject < other.mSceneObject; } + +protected: + rdl2::SceneObject* mSceneObject; +}; + +class MoonrayObjectVector +{ +public: + friend class MoonrayAttribute; + + MoonrayObjectVector() = default; + MoonrayObjectVector(const std::vector& moonrayObjects) { + mSceneObjects.reserve(moonrayObjects.size()); + for (const auto& obj : moonrayObjects) { + mSceneObjects.push_back(obj.sceneObject()); + } + } + MoonrayObjectVector(MoonrayObject obj) : + mSceneObjects{obj.sceneObject()} + {} + + void append(const MoonrayObject& obj) { mSceneObjects.push_back(obj.sceneObject()); } + size_t size() const { return mSceneObjects.size(); } + bool empty() const { return mSceneObjects.empty(); } + MoonrayObject operator[](size_t index) const { return MoonrayObject(mSceneObjects[index]); } + +private: + MoonrayObjectVector(const rdl2::SceneObjectVector& sceneObjects) : mSceneObjects(sceneObjects) {} + rdl2::SceneObjectVector mSceneObjects; +}; + +class MoonrayAssignment +{ +public: + MoonrayObject material; + MoonrayObject lightSet; + MoonrayObject displacement; + MoonrayObject volumeShader; + MoonrayObject lightFilterSet; + MoonrayObject shadowSet; + MoonrayObject shadowReceiverSet; +}; + +inline void +MoonrayObject::assign(const MoonrayObject& obj, const std::string& partName, const MoonrayAssignment& assignment) +{ + rdl2::LayerAssignment la; + if (assignment.material.isValid()) la.mMaterial = assignment.material.sceneObjectAs(); + if (assignment.lightSet.isValid()) la.mLightSet = assignment.lightSet.sceneObjectAs(); + if (assignment.displacement.isValid()) la.mDisplacement = assignment.displacement.sceneObjectAs(); + if (assignment.volumeShader.isValid()) la.mVolumeShader = assignment.volumeShader.sceneObjectAs(); + if (assignment.lightFilterSet.isValid()) la.mLightFilterSet = assignment.lightFilterSet.sceneObjectAs(); + if (assignment.shadowSet.isValid()) la.mShadowSet = assignment.shadowSet.sceneObjectAs(); + if (assignment.shadowReceiverSet.isValid()) la.mShadowReceiverSet = assignment.shadowReceiverSet.sceneObjectAs(); + mSceneObject->asA()->assign(obj.sceneObjectAs(), partName, la); +} + +inline MoonrayObject +MoonrayObject::getInstanceIdData() const { + rdl2::SceneObjectVector primitiveAttributes = mSceneObject->get("primitive_attributes"); + if (primitiveAttributes.empty()) { + return MoonrayObject(); + } + return MoonrayObject(primitiveAttributes[0]); +} + +inline void +MoonrayAttribute::bind(const MoonrayObject& obj) +{ + ValueConverter::setBinding(mSceneObject, mAttribute, obj.sceneObject()); +} + +template void +MoonrayAttribute::set(const T& value) +{ + mSceneObject->set(rdl2::AttributeKey(*mAttribute), value); +} + +template void +MoonrayAttribute::set(const T& value0, const T& value1) +{ + mSceneObject->set(rdl2::AttributeKey(*mAttribute), value0, rdl2::TIMESTEP_BEGIN); + mSceneObject->set(rdl2::AttributeKey(*mAttribute), value1, rdl2::TIMESTEP_END); +} + +template <> +inline void MoonrayAttribute::set(const pxr::VtValue& value) { + ValueConverter::setAttribute(mSceneObject, mAttribute, value); +} + +template <> +inline void MoonrayAttribute::set(const MoonrayObject& value) { + if (type() == Type::TYPE_SCENE_OBJECT) { + set(value.sceneObject()); + } else { + bind(value); + } +} + +template <> +inline void MoonrayAttribute::set(const MoonrayObjectVector& value) { + set(value.mSceneObjects); +} + +template <> +inline void MoonrayAttribute::set(const pxr::GfVec3f& value) { + set(reinterpret_cast(value)); +} + +template <> +inline void MoonrayAttribute::set(const pxr::GfMatrix4d& value) { + set(reinterpret_cast(value)); +} + +template <> +inline void MoonrayAttribute::set(const pxr::GfMatrix4d& value0, const pxr::GfMatrix4d& value1) { + set(reinterpret_cast(value0), reinterpret_cast(value1)); +} + +template +inline void setRdlVec(MoonrayAttribute& attr, const HTYPE& value) { + // warning: don't use this for BoolVector, which is std::deque + if (value.empty()) { + attr.set(std::vector()); + } else { + const RTYPE* p = reinterpret_cast(&value[0]); + attr.set(std::vector(p, p + value.size())); + } +} + +template <> +inline void MoonrayAttribute::set(const pxr::VtIntArray& value) { + setRdlVec(*this, value); +} + +template <> +inline void MoonrayAttribute::set(const pxr::VtFloatArray& value) { + setRdlVec(*this, value); +} + +template <> +inline void MoonrayAttribute::set(const pxr::VtVec2fArray& value) { + setRdlVec(*this, value); +} + +template <> +inline void MoonrayAttribute::set(const pxr::VtVec3fArray& value) { + setRdlVec(*this, value); +} + +template <> +inline void MoonrayAttribute::set(const pxr::VtVec4fArray& value) { + setRdlVec(*this, value); +} + +template <> +inline void MoonrayAttribute::set(const pxr::VtMatrix4dArray& value) { + setRdlVec(*this, value); +} +template <> +inline void MoonrayAttribute::set(const pxr::VtQuathArray& value) { + rdl2::Vec4fVector vecs; + for (const auto& quat : value) { + vecs.push_back(rdl2::Vec4f(float(quat.GetImaginary()[0]), + float(quat.GetImaginary()[1]), + float(quat.GetImaginary()[2]), + float(quat.GetReal()))); + } + set(vecs); +} + +// Note: int user data cannot be output into RenderOutput +// buffers, so id-type primvars must be of float type. If the +// RenderBuffer is requested as an int format, it is translated +// from float to int in RenderBuffer::Resolve() [q.v.] + +template void MoonrayObject::setData(const std::string& name, const T& value, const pxr::TfToken& role) = delete; + +template <> +inline void MoonrayObject::setData(const std::string& name, const float& value, const pxr::TfToken&) { + rdl2::FloatVector v{value}; + mSceneObject->asA()->setFloatData(name, v); +} +template <> +inline void MoonrayObject::setData(const std::string& name, const int& value, const pxr::TfToken&) { + rdl2::FloatVector v{value}; + mSceneObject->asA()->setFloatData(name, v); +} +template <> +inline void MoonrayObject::setData(const std::string& name, const std::string& value, const pxr::TfToken&) { + rdl2::StringVector v{value}; + mSceneObject->asA()->setStringData(name, v); +} +template <> +inline void MoonrayObject::setData(const std::string& name, const pxr::VtFloatArray& value, const pxr::TfToken&) { + if (value.empty()) { + mSceneObject->asA()->setFloatData(name, rdl2::FloatVector()); + } else { + const float* p = &value[0]; + mSceneObject->asA()->setFloatData(name, rdl2::FloatVector(p, p + value.size())); + } +} +template <> +inline void MoonrayObject::setData(const std::string& name, const pxr::VtIntArray& value, const pxr::TfToken&) { + // HDM-266 moonray does not support attribute type Int for face varying attribute, + // cast to float + if (value.empty()) { + mSceneObject->asA()->setFloatData(name, rdl2::FloatVector()); + } else { + const float* p = reinterpret_cast(&value[0]); + mSceneObject->asA()->setFloatData(name, rdl2::FloatVector(p, p + value.size())); + } +} +template <> +inline void MoonrayObject::setData(const std::string& name, const pxr::VtUIntArray& value, const pxr::TfToken&) { + // HDM-266 moonray does not support attribute type Int for face varying attribute, + // cast to float + if (value.empty()) { + mSceneObject->asA()->setFloatData(name, rdl2::FloatVector()); + } else { + const float* p = reinterpret_cast(&value[0]); + mSceneObject->asA()->setFloatData(name, rdl2::FloatVector(p, p + value.size())); + } +} + +template <> +inline void MoonrayObject::setData(const std::string& name, const pxr::VtVec2fArray& value, const pxr::TfToken&) { + if (value.empty()) { + mSceneObject->asA()->setVec2fData(name, rdl2::Vec2fVector()); + } else { + const rdl2::Vec2f* p = reinterpret_cast(&value[0]); + mSceneObject->asA()->setVec2fData(name, rdl2::Vec2fVector(p, p + value.size())); + } +} +template <> +inline void MoonrayObject::setData(const std::string& name, const pxr::VtVec3fArray& value, const pxr::TfToken& role) { + if (role == pxr::HdPrimvarRoleTokens->color) { + if (value.empty()) { + mSceneObject->asA()->setColorData(name, rdl2::RgbVector()); + } else { + const rdl2::Rgb* p = reinterpret_cast(&value[0]); + mSceneObject->asA()->setColorData(name, rdl2::RgbVector(p, p + value.size())); + } + } else { + if (value.empty()) { + mSceneObject->asA()->setVec3fData(name, rdl2::Vec3fVector()); + } else { + const rdl2::Vec3f* p = reinterpret_cast(&value[0]); + mSceneObject->asA()->setVec3fData(name, rdl2::Vec3fVector(p, p + value.size())); + } + } +} + +template <> +inline void MoonrayObject::setData(const std::string& name, const pxr::VtStringArray& value, const pxr::TfToken&) { + if (value.empty()) { + mSceneObject->asA()->setStringData(name, rdl2::StringVector()); + } else { + const std::string* p = &value[0]; + mSceneObject->asA()->setStringData(name, rdl2::StringVector(p, p + value.size())); + } +} + +template <> +inline void MoonrayObject::setData(const std::string& name, const pxr::VtBoolArray& value, const pxr::TfToken&) { + if (value.empty()) { + mSceneObject->asA()->setBoolData(name, rdl2::BoolVector()); + } else { + const bool* p = &value[0]; + mSceneObject->asA()->setBoolData(name, rdl2::BoolVector(p, p + value.size())); + } +} + +template <> +inline void MoonrayObject::setData(const std::string& name, const pxr::GfVec3f& value, const pxr::TfToken& role) { + if (role == pxr::HdPrimvarRoleTokens->color) { + rdl2::RgbVector v{reinterpret_cast(value)}; + mSceneObject->asA()->setColorData(name, v); + } else { + rdl2::Vec3fVector v{reinterpret_cast(value)}; + mSceneObject->asA()->setVec3fData(name, v); + } +} + +template <> +inline void MoonrayObject::setData(const std::string& name, const pxr::VtValue& value, const pxr::TfToken& role) { + if (value.IsHolding()) { + setData(name, value.UncheckedGet(), role); + } else if (value.IsHolding()) { + setData(name, value.UncheckedGet(), role); + } else if (value.IsHolding()) { + setData(name, float(value.UncheckedGet()), role); + } else if (value.IsHolding()) { + setData(name, value.UncheckedGet(), role); + } else if (value.IsHolding()) { + setData(name, value.UncheckedGet(), role); + } else if (value.IsHolding()) { + setData(name, value.UncheckedGet(), role); + } else if (value.IsHolding()) { + setData(name, value.UncheckedGet(), role); + } else if (value.IsHolding()) { + const std::string& v = value.Get(); + setData(name, v, role); + } else if (value.IsHolding()) { + // MoonrayObject converts to float data (see above) + setData(name, value.UncheckedGet(), role); + } else if (value.IsHolding()) { + // MoonrayObject converts to float data (see above) + setData(name, value.UncheckedGet(), role); + } else if (value.IsHolding()) { + setData(name, value.UncheckedGet(), role); + } else if (value.IsHolding()) { + setData(name, int(value.UncheckedGet()), role); + } else if (value.IsHolding()) { + setData(name, value.UncheckedGet(), role); + } else { + Logger::warn(objectName(), ": ", value.GetTypeName(), " not translated"); + } +} + + + +} // namespace hdMoonray \ No newline at end of file diff --git a/lib/hydramoonray/MoonrayOutput.cc b/lib/hydramoonray/MoonrayOutput.cc new file mode 100644 index 0000000..823533e --- /dev/null +++ b/lib/hydramoonray/MoonrayOutput.cc @@ -0,0 +1,151 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "MoonrayOutput.h" +#include "MoonrayObject.h" + +#include + +namespace hdMoonray { + +namespace rdl2 = scene_rdl2::rdl2; + +const std::string& MoonrayOutput::objectName() const +{ + return mRenderOutput->getName(); +} + +void MoonrayOutput::setAsPrimvar(const std::string& pvName, pxr::HdFormat format) +{ + if (mRenderOutput) { + mRenderOutput->beginUpdate(); + mRenderOutput->setActive(true); + mRenderOutput->setResult(rdl2::RenderOutput::RESULT_PRIMITIVE_ATTRIBUTE); + mRenderOutput->setPrimitiveAttribute(pvName); + switch (format) { + // these are the only formats that are supported by Moonray for primvar outputs + case pxr::HdFormatFloat32Vec2: + mRenderOutput->setPrimitiveAttributeType(rdl2::RenderOutput::PRIMITIVE_ATTRIBUTE_TYPE_VEC2F); + break; + case pxr::HdFormatFloat32Vec3: + mRenderOutput->setPrimitiveAttributeType(rdl2::RenderOutput::PRIMITIVE_ATTRIBUTE_TYPE_VEC3F); + break; + default: + mRenderOutput->setPrimitiveAttributeType(rdl2::RenderOutput::PRIMITIVE_ATTRIBUTE_TYPE_FLOAT); + break; + } + // int is generated as float, and converted back to int when the aov buffer is resolved. However we + // also need to set the math filter to closest + if (format == pxr::HdFormatInt32) { + mRenderOutput->setMathFilter(rdl2::RenderOutput::MATH_FILTER_CLOSEST); + } + mRenderOutput->endUpdate(); + } +} + +std::string MoonrayOutput::getPrimvarName() const +{ + if (mRenderOutput) { + return mRenderOutput->getPrimitiveAttribute(); + } + return std::string("no output"); +} + +void MoonrayOutput::setAsCryptomatte() +{ + if (mRenderOutput) { + mRenderOutput->beginUpdate(); + mRenderOutput->setActive(true); + mRenderOutput->setResult(rdl2::RenderOutput::RESULT_CRYPTOMATTE); + mRenderOutput->endUpdate(); + } +} +void MoonrayOutput::setAsDepth() +{ + if (mRenderOutput) { + mRenderOutput->beginUpdate(); + mRenderOutput->setActive(true); + mRenderOutput->setResult(rdl2::RenderOutput::RESULT_DEPTH); + mRenderOutput->setMathFilter(rdl2::RenderOutput::MATH_FILTER_MIN); + mRenderOutput->endUpdate(); + } +} + +void MoonrayOutput::setAsNormal() +{ + if (mRenderOutput) { + mRenderOutput->beginUpdate(); + mRenderOutput->setActive(true); + mRenderOutput->setResult(rdl2::RenderOutput::RESULT_STATE_VARIABLE); + mRenderOutput->setStateVariable(rdl2::RenderOutput::STATE_VARIABLE_N); + mRenderOutput->endUpdate(); + } +} + +void MoonrayOutput::setAsSt() +{ + if (mRenderOutput) { + mRenderOutput->beginUpdate(); + mRenderOutput->setActive(true); + mRenderOutput->setResult(rdl2::RenderOutput::RESULT_STATE_VARIABLE); + mRenderOutput->setStateVariable(rdl2::RenderOutput::STATE_VARIABLE_ST); + mRenderOutput->endUpdate(); + } +} + +void MoonrayOutput::setAsLpe(const std::string& lpeName) +{ + if (mRenderOutput) { + mRenderOutput->beginUpdate(); + mRenderOutput->setActive(true); + mRenderOutput->setResult(rdl2::RenderOutput::RESULT_LIGHT_AOV); + mRenderOutput->setLpe(lpeName); + mRenderOutput->endUpdate(); + } +} + +void MoonrayOutput::setAsShader(const std::string& shaderName) +{ + if (mRenderOutput) { + mRenderOutput->beginUpdate(); + mRenderOutput->setActive(true); + mRenderOutput->setResult(rdl2::RenderOutput::RESULT_MATERIAL_AOV); + mRenderOutput->setMaterialAov(shaderName); + mRenderOutput->endUpdate(); + } +} + +void MoonrayOutput::applySettings(const pxr::VtDictionary& aovSettings) +{ + if (mRenderOutput) { + MoonrayObject obj(mRenderOutput); + obj.beginUpdate(); + for (auto attrIt = obj.beginAttributes(); attrIt != obj.endAttributes(); ++attrIt) { + const std::string& attrName = (*attrIt).name(); + pxr::TfToken key = pxr::TfToken("parameters:moonray:" + attrName); + pxr::VtValue val = aovSettings[key]; + if (!val.IsEmpty()) { + (*attrIt).set(val); + } + } + obj.endUpdate(); + } +} + +void MoonrayOutput::deactivate() { + if (mRenderOutput) { + mRenderOutput->beginUpdate(); + mRenderOutput->setActive(false); + mRenderOutput->endUpdate(); + } +} + +void MoonrayOutput::setFileName(const std::string& fileName) { + if (mRenderOutput) { + mRenderOutput->beginUpdate(); + mRenderOutput->setFileName(fileName); + mRenderOutput->endUpdate(); + } +} +} // namespace hdMoonray + diff --git a/lib/hydramoonray/MoonrayOutput.h b/lib/hydramoonray/MoonrayOutput.h new file mode 100644 index 0000000..b17b162 --- /dev/null +++ b/lib/hydramoonray/MoonrayOutput.h @@ -0,0 +1,56 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +#include + +namespace scene_rdl2 { namespace rdl2 { + class RenderOutput; +}} +namespace hdMoonray { + + +class MoonrayOutput +{ +public: + MoonrayOutput() : mRenderOutput(nullptr) {} + MoonrayOutput(scene_rdl2::rdl2::RenderOutput* renderOutput) : mRenderOutput(renderOutput) {} + + scene_rdl2::rdl2::RenderOutput* renderOutput() const { return mRenderOutput; } + const std::string& objectName() const; + + bool isNull() const { return mRenderOutput == nullptr; } + bool isValid() const { return mRenderOutput != nullptr; } + + /// A null RenderOutput* is also used to indicate the beauty (rgba) buffer). + static MoonrayOutput beautyOutput() { return MoonrayOutput(); } + bool isBeauty() const { return mRenderOutput == nullptr; } + + void setAsPrimvar(const std::string& pvName, pxr::HdFormat format); + void setAsCryptomatte(); + void setAsDepth(); + void setAsNormal(); + void setAsSt(); + void setAsLpe(const std::string& lpeName); + void setAsShader(const std::string& shaderName); + + void applySettings(const pxr::VtDictionary& aovSettings); + + void setMinFilter(); + void setClosestFilter(); + + void setFileName(const std::string& fileName); + + void deactivate(); + + std::string getPrimvarName() const; + +private: + scene_rdl2::rdl2::RenderOutput* mRenderOutput; +}; + +} // namespace hdMoonray \ No newline at end of file diff --git a/lib/hydramoonray/MoonrayScene.cc b/lib/hydramoonray/MoonrayScene.cc new file mode 100644 index 0000000..ca9c03c --- /dev/null +++ b/lib/hydramoonray/MoonrayScene.cc @@ -0,0 +1,567 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "MoonrayScene.h" +#include "Renderer.h" +#include "renderDelegate.h" +#include "hydra2_utils.h" +#include "tokens.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace pxr; +using namespace scene_rdl2; + +namespace { + + // Testing is much easier if the names of code-generated objects are + // consistent from run to run. Given the nature of Hydra, + // we can't rely on objects to always be processed in the same order. + // Therefore we have to name them using a content hash, rather than + // sequentially. The hash algorithm has to produce the same value + // from run-to-run, with collisions very unlikely. + constexpr size_t HASH_M = 2<<24 - 3; // prime, fits in 6 hex digits + constexpr size_t HASH_P = 127; + + size_t repeatableStringHash(const std::string& s) + { + // standard polynomial rolling algoritm + size_t hash = 0; + size_t p = 1; + for (unsigned char c : s) { + hash = (hash + c * p) % HASH_M; + p = (p * HASH_P) % HASH_M; + } + return hash; + } + + unsigned hashObjectSet(std::set objSet) + { + unsigned hash = 0; + for (auto& obj : objSet) + hash += repeatableStringHash(obj.objectName()); + return hash; + } +} + +namespace hdMoonray { + +MoonrayScene::MoonrayScene(HdMoonray_RenderDelegate& renderDelegate, + Renderer* renderer) + : mRenderDelegate(renderDelegate), + mRenderer(renderer) +{ +} + +MoonrayScene::~MoonrayScene() +{ +} + +// read only access to the scene context +const rdl2::SceneContext& +MoonrayScene::sceneContext() +{ + return mRenderer->getSceneContext(); +} + +// we must notify the renderer before modifying the scene context, since an in-process renderer may need to stop rendering. +void +MoonrayScene::beginUpdate() +{ + mRenderer->beginUpdate(); +} + +rdl2::SceneContext& +MoonrayScene::acquireSceneContext() +{ + mRenderer->beginUpdate(); + return mRenderer->getSceneContext(); +} + +rdl2::SceneObject* +MoonrayScene::create(const std::string& className, const SdfPath& id, const std::string& suffix) +{ + const SdfPath simplePath = getSimplePath(id); + std::string rdlName = simplePath.GetString() + suffix; + try { + return acquireSceneContext().createSceneObject(className, rdlName); + } catch (const except::TypeError& e) { + // assume this error is a className collision, try again with a different name + Logger::info(e.what()); + return create(className, id, suffix + "_" + className); + } catch (const std::exception& e) { + Logger::error(rdlName, ": ", e.what()); + return nullptr; + } +} + +MoonrayOutput +MoonrayScene::createRenderOutput(const std::string& name) +{ + try { + rdl2::RenderOutput* ro = acquireSceneContext().createSceneObject("RenderOutput", name)->asA(); + return MoonrayOutput(ro); + } catch (const std::exception& e) { + Logger::error(name, ": ", e.what()); + return MoonrayOutput(); + } +} + +rdl2::SceneObject* +MoonrayScene::get(const SdfPath& id, const std::string& suffix) +{ + const SdfPath simplePath = getSimplePath(id); + std::string rdlName = simplePath.GetString() + suffix; + try { + return sceneContext().getSceneObject(rdlName); + } catch (const std::exception& e) { + // caller can print a more informative error message + return nullptr; + } +} +bool +MoonrayScene::checkClassInterface(const std::string& className, MoonrayAttribute::InterfaceType interfaceType) +{ + if (className.empty()) { + return false; + } + try { + const rdl2::SceneClass* sceneClass = acquireSceneContext().createSceneClass(className); + return sceneClass && (sceneClass->getDeclaredInterface() & interfaceType); + } catch (const std::exception&) { + return false; + } +} + +void +MoonrayScene::assign(const MoonrayObject& obj, + const MoonrayAssignment& assignment) +{ + static const std::string nopart; + assign(obj, nopart, assignment); +} + +void +MoonrayScene::assign(const MoonrayObject& obj, const std::string& partName, + const MoonrayAssignment& assignment) +{ + std::lock_guard guard(mLayerMutex); + if (partName.empty()) { + mAllGeometry.beginUpdate(); + mAllGeometry.sceneObjectAs()->add(obj.sceneObjectAs()); + mAllGeometry.endUpdate(); + } + mDefaultLayer.beginUpdate(); + mDefaultLayer.assign(obj, partName, assignment); + mDefaultLayer.endUpdate(); +} + +void +MoonrayScene::addUnassigned(const MoonrayObject& obj) +{ + std::lock_guard guard(mLayerMutex); + mAllGeometry.beginUpdate(); + mAllGeometry.sceneObjectAs()->add(obj.sceneObjectAs()); + mAllGeometry.endUpdate(); +} + +void +MoonrayScene::setCategory(const MoonrayObject& obj, + CategoryType type, + const TfToken& category) +{ + std::lock_guard lock(mCategoriesMutex); + mCategoryContents[type][category].emplace(obj); +} + +void +MoonrayScene::releaseCategory(const MoonrayObject& obj, + CategoryType type, + const TfToken& category) +{ + std::lock_guard lock(mCategoriesMutex); + mCategoryContents[type][category].erase(obj); +} + +void +MoonrayScene::addCategoryContents(const TfToken& category, CategoryType type, std::set& contents) +{ + auto i = mCategoryContents[type].find(category); + if (i != mCategoryContents[type].end()) { + for (const MoonrayObject& item : i->second) + contents.insert(item); + } +} + +void +MoonrayScene::removeCategoryContents(const TfToken& category, CategoryType type, std::set& contents) +{ + auto i = mCategoryContents[type].find(category); + if (i != mCategoryContents[type].end()) { + for (const MoonrayObject& item : i->second) + contents.erase(item); + } +} + +void +MoonrayScene::updateAssignmentFromCategories( + MoonrayAssignment& assignment, + const VtArray& categories) +{ + + // Lock is not needed here as it appears Hydra has already called Sync() on all lights and filters + + std::set contents; + + createDefaultLightIfNeeded(); + + addCategoryContents(defaultCategory, LightCategory, contents); + for (auto& category : categories) { + addCategoryContents(category, LightCategory, contents); + } + assignment.lightSet = getLightSet(contents); + + // shadow set is inverted + removeCategoryContents(defaultCategory, ShadowCategory, contents); + for (auto& category : categories) { + removeCategoryContents(category, ShadowCategory, contents); + } + assignment.shadowSet = getShadowSet(contents); + + contents.clear(); + addCategoryContents(defaultCategory, FilterCategory, contents); + for (auto& category : categories) { + addCategoryContents(category, FilterCategory, contents); + } + assignment.lightFilterSet = getLightFilterSet(contents); +} + +void +MoonrayScene::createDefaultLightIfNeeded() +{ + if (not mNumLights && mDefaultLight.isNull()) { + std::lock_guard lock(mCreateMutex); + if (mDefaultLight.isNull()) { + rdl2::SceneContext& wsc = acquireSceneContext(); + rdl2::Light* defaultLight = wsc.createSceneObject("EnvLight", "/DEFAULT/defaultLight")->asA(); + mDefaultLight = MoonrayObject(defaultLight); + setCategory(mDefaultLight, LightCategory, pxr::TfToken()); + setCategory(mDefaultLight, ShadowCategory, pxr::TfToken()); + mDefaultLight.beginUpdate(); + mDefaultLight.set("max_shadow_distance", 100.0f); + mDefaultLight.endUpdate(); + + } + } +} + +void +MoonrayScene::addLight() +{ + std::lock_guard lock(mCategoriesMutex); + if (++mNumLights == 1 && mDefaultLight.isValid()) { + // turn off default light as soon as a real light is added + mDefaultLight.beginUpdate(); + mDefaultLight.set("on", false); + mDefaultLight.endUpdate(); + } +} + +void +MoonrayScene::removeLight() +{ + std::lock_guard lock(mCategoriesMutex); + if (--mNumLights == 0) { + if (mDefaultLight.isValid()) { + // turn on default light when last real light is removed + mDefaultLight.beginUpdate(); + mDefaultLight.set("on", true); + mDefaultLight.endUpdate(); + } else { + // this will cause updateAssignmentFromCategories to create mDefaultLight: + mRenderDelegate.markAllRprimsDirty(pxr::HdChangeTracker::DirtyCategories); + } + } +} + +void +MoonrayScene::initialize() +{ + rdl2::SceneContext& wsc = acquireSceneContext(); + + mAllGeometry = MoonrayObject(wsc.createSceneObject("GeometrySet", "/DEFAULT/allGeometry")); + mDefaultLayer = MoonrayObject(wsc.createSceneObject("Layer", "/DEFAULT/defaultLayer")); + rdl2::SceneVariables& wsv = wsc.getSceneVariables(); + wsv.beginUpdate(); + wsv.set(wsv.sLayer, mDefaultLayer.sceneObjectAs()); + wsv.endUpdate(); + + mPrimaryCamera = MoonrayObject(wsc.createSceneObject("PerspectiveCamera", "/DEFAULT/primaryCamera")); +} + +MoonrayObject +MoonrayScene::defaultMaterial() +{ + if (mDefaultMaterial.isNull()) { + std::lock_guard lock(mCreateMutex); + if (mDefaultMaterial.isNull()) { + rdl2::SceneContext& wsc = acquireSceneContext(); + + // The default material is a UsdPreviewSurface with displayColor and displayOpacity bound to attribute maps + rdl2::Map* displayColor = wsc.createSceneObject("AttributeMap", "/DEFAULT/displayColorMap")->asA(); + displayColor->beginUpdate(); + displayColor->set("primitive_attribute_name", std::string("displayColor")); + displayColor->set("default_value", rdl2::Rgb(0.5f,0.5f,0.5f)); // default from hdSt/shaders/mesh.glslfx + displayColor->endUpdate(); + + rdl2::Map* displayOpacity = wsc.createSceneObject("AttributeMap", "/DEFAULT/displayOpacityMap")->asA(); + displayOpacity->beginUpdate(); + displayOpacity->set("primitive_attribute_name", std::string("displayOpacity")); + displayOpacity->set("primitive_attribute_type", 0); // FLOAT + displayOpacity->endUpdate(); + + rdl2::SceneObject* obj = wsc.createSceneObject("UsdPreviewSurface", "/DEFAULT/defaultMaterial")->asA(); + obj->beginUpdate(); + obj->set("diffuseColor", rdl2::Rgb(1.0f,1.0f,1.0f)); + obj->setBinding("diffuseColor", displayColor); + obj->setBinding("opacity", displayOpacity); + obj->set("roughness", 0.3f); + obj->endUpdate(); + mDefaultMaterial = MoonrayObject(obj); + } + } + return mDefaultMaterial; +} + +MoonrayObject +MoonrayScene::errorMaterial() +{ + if (mErrorMaterial.isNull()) { + std::lock_guard lock(mCreateMutex); + if (mErrorMaterial.isNull()) { + rdl2::SceneContext& wsc = acquireSceneContext(); + + // The error material is a UsdPreviewSurface with a bright magenta color + rdl2::SceneObject* obj = wsc.createSceneObject("UsdPreviewSurface", "/DEFAULT/errorMaterial")->asA(); + obj->beginUpdate(); + obj->set("diffuseColor", rdl2::Rgb(1.0f, 0.0f, 1.0f)); + obj->endUpdate(); + mErrorMaterial = MoonrayObject(obj); + } + } + return mErrorMaterial; +} + +MoonrayObject +MoonrayScene::defaultVolumeShader() +{ + if (mDefaultVolumeShader.isNull()) { + std::lock_guard lock(mCreateMutex); + if (mDefaultVolumeShader.isNull()) { + rdl2::SceneContext& wsc = acquireSceneContext(); + rdl2::SceneObject* obj = wsc.createSceneObject("BaseVolume", "/DEFAULT/defaultVolumeShader")->asA(); + mDefaultVolumeShader = MoonrayObject(obj); + } + } + return mDefaultVolumeShader; +} + +MoonrayObject +MoonrayScene::emptyLightSet() +{ + if (mEmptyLightSet.isNull()) { + std::lock_guard lock(mCreateMutex); + if (mEmptyLightSet.isNull()) { + rdl2::SceneContext& wsc = acquireSceneContext(); + rdl2::SceneObject* obj = wsc.createSceneObject("LightSet", "/DEFAULT/emptyLightSet")->asA(); + mEmptyLightSet = MoonrayObject(obj); + } + } + return mEmptyLightSet; +} + +MoonrayObject +MoonrayScene::emptyLightFilterSet() +{ + if (mEmptyLightFilterSet.isNull()) { + std::lock_guard lock(mCreateMutex); + if (mEmptyLightFilterSet.isNull()) { + rdl2::SceneContext& wsc = acquireSceneContext(); + rdl2::SceneObject* obj = wsc.createSceneObject("LightFilterSet", "/DEFAULT/emptyLightFilterSet")->asA(); + mEmptyLightFilterSet = MoonrayObject(obj); + } + } + return mEmptyLightFilterSet; +} + +MoonrayObject MoonrayScene::primaryCamera() const +{ + return mPrimaryCamera; +} + +MoonrayObject +MoonrayScene::getLightSet(const std::set& lights) +{ + if (lights.empty()) { + return emptyLightSet(); // null light set causes crash (MOONRAY-4854) + } else { + unsigned h = hashObjectSet(lights); + std::lock_guard lock(mCacheMutex); + rdl2::LightSet*& set = mLightSets[h]; + if (not set) { + char name[20]; snprintf(name, 20, "LightSet%06X", h); + rdl2::SceneContext& wsc = acquireSceneContext(); + set = wsc.createSceneObject("LightSet", name)->asA(); + set->beginUpdate(); + for (auto& i : lights) + set->add(i.sceneObjectAs()); + set->endUpdate(); + + } + return MoonrayObject(set); + } +} + +MoonrayObject +MoonrayScene::getLightFilterSet(const std::set& filters) +{ + if (filters.empty()) { + return emptyLightFilterSet(); // null light filter set can be equivalent "all filters", not what we want + } else { + unsigned h = hashObjectSet(filters); + std::lock_guard lock(mCacheMutex); + rdl2::LightFilterSet*& set = mLightFilterSets[h]; + if (not set) { + char name[20]; snprintf(name, 20, "LightFilterSet%06X", h); + rdl2::SceneContext& wsc = acquireSceneContext(); + set = wsc.createSceneObject("LightFilterSet", name)->asA(); + set->beginUpdate(); + for (auto& i : filters) + set->add(i.sceneObjectAs()); + set->endUpdate(); + } + return MoonrayObject(set); + } + +} + +MoonrayObject +MoonrayScene::getShadowSet(const std::set& lights) +{ + if (lights.empty()) { + return MoonrayObject(); // null shadow set in assignment is equivalent to an empty shadow set + } else { + unsigned h = hashObjectSet(lights); + std::lock_guard lock(mCacheMutex); + rdl2::ShadowSet*& set = mShadowSets[h]; + if (not set) { + char name[20]; snprintf(name, 20, "ShadowSet%06X", h); + rdl2::SceneContext& wsc = acquireSceneContext(); + set = wsc.createSceneObject("ShadowSet", name)->asA(); + set->beginUpdate(); + for (auto& i : lights) + set->add(i.sceneObjectAs()); + set->endUpdate(); + } + return MoonrayObject(set); + } +} + +std::pair +MoonrayScene::getTimeSamplingInterval() const +{ + // This provides the time points at which we should sample for motion blur : called "motion steps" in Moonray. + // Moonray will interpolate/extrapolate from these values to get the values at the exact shutter open and close times. + static const std::pair interval(-1, 0); + return interval; +} + +// "Simplified Paths" are used to avoid the complex paths that can be generated by Hydra instancing +// (for example, /UsdNiPropagatedPrototypes/NoPrimvars_purposed94fac4b63817ce9/__Prototype_1/UsdNiInstancer/UsdNiPrototype/pointInstancer/prototype/ForInstancer32e32c1a7de27bf8) +// These can make testing and debugging difficult. +// Simplified paths are off by default, but can be enabled with an option. +// When simplifyPath is called, MoonrayScene attempts to generate a simpler path for each prim, based on its HdPrimOriginSchema. +// A map records the simple path for each original path, and the simple path is used when creating objects in the scene context. +// If there is a collision in simple paths, a suffix is added to make them unique. +SdfPath +MoonrayScene::getSimplePath(const pxr::SdfPath& path) +{ + if (!mRenderDelegate.options().getSimplifyPaths()) { + return path; + } + std::lock_guard lock(mSimplifyPathMutex); + auto i = mOriginalToSimple.find(path); + if (i != mOriginalToSimple.end()) { + return i->second; + } else { + return path; + } +} + +pxr::SdfPath +MoonrayScene::simplifyPath(const pxr::SdfPath& path, HdSceneDelegate* sceneDelegate) +{ + if (!mRenderDelegate.options().getSimplifyPaths()) { + return path; + } + + std::lock_guard lock(mSimplifyPathMutex); + + auto i = mOriginalToSimple.find(path); + if (i != mOriginalToSimple.end()) { + return i->second; + } + + // generate the simple path from the prim origin path, with a suffix if needed to avoid collisions. + HdContainerDataSourceHandle primDs = getPrimContainer(path, sceneDelegate); + HdPrimOriginSchema primOrigin = HdPrimOriginSchema::GetFromParent(primDs); + SdfPath origin = primOrigin.GetOriginPath(HdPrimOriginSchemaTokens->scenePath); + SdfPath simple; + if (origin.IsEmpty()) { + // if it is a generated instancer, it will have no origin, try the first prototype location + HdInstancerTopologySchema instancerTopology = HdInstancerTopologySchema::GetFromParent(primDs); + HdPathArrayDataSourceHandle instanceLocations = instancerTopology.GetInstanceLocations(); + if (instanceLocations) { + VtArray paths = instanceLocations->GetTypedValue(0); + if (!paths.empty()) { + simple = paths[0]; + unsigned suffix = 1; + while (mSimplePaths.count(simple) > 0) { + simple = paths[0].AppendChild(TfToken(std::to_string(suffix))); + ++suffix; + } + } else { + simple = path; + } + } else { + simple = path; + } + } else { + simple = origin; + unsigned suffix = 1; + while (mSimplePaths.count(simple) > 0) { + simple = origin.AppendChild(TfToken(std::to_string(suffix))); + ++suffix; + } + } + mOriginalToSimple[path] = simple; + mSimplePaths.insert(simple); + return simple; +} + +} \ No newline at end of file diff --git a/lib/hydramoonray/MoonrayScene.h b/lib/hydramoonray/MoonrayScene.h new file mode 100644 index 0000000..7259bf8 --- /dev/null +++ b/lib/hydramoonray/MoonrayScene.h @@ -0,0 +1,166 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include +#include + +#include "MoonrayObject.h" +#include "MoonrayOutput.h" + +#include "pxr/imaging/hd/sceneDelegate.h" +#include +#include +#include + +namespace scene_rdl2 { namespace rdl2 { + class Camera; + class Geometry; + class GeometrySet; + class Layer; + class Light; + class LightFilterSet; + class LightSet; + class SceneContext; + class ShadowSet; + class Material; + class SceneObject; + class VolumeShader; + class RenderOutput; + class UserData; +}} + +namespace hdMoonray { + +class HdMoonray_RenderDelegate; +class Renderer; + +enum CategoryType { LightCategory, ShadowCategory, FilterCategory }; +static const int numCategories = 3; +static const pxr::TfToken defaultCategory; + +// Provides API to access the Moonray (RDL2) scene +// - create and get SceneObjects by name +// - manage categories, used to specify which lights and filters affect which geometry +// - manage default objects (primary camera, default material, etc) that are automatically created as needed +// - manage automatically created sets of lights and filters, with caching to reuse them if the same set is requested again + +class MoonrayScene +{ +public: + MoonrayScene(HdMoonray_RenderDelegate& renderDelegate, Renderer* renderer); + ~MoonrayScene(); + + + void initialize(); + + // read only access to the scene context + const scene_rdl2::rdl2::SceneContext& sceneContext(); + // beginUpdate() must be called before modifying the scene context + // acquireSceneContext() automatically calls beginUpdate() and returns a non-const reference to the scene context for modification. + void beginUpdate(); + scene_rdl2::rdl2::SceneContext& acquireSceneContext(); + + // Create a new SceneObject of the given class and id, or return an existing one if it already exists. + // If an object exists with the given id but a different class, then a modified name may be used. + scene_rdl2::rdl2::SceneObject* create(const std::string& className, const pxr::SdfPath& id, const std::string& suffix = std::string()); + MoonrayObject createObject(const std::string& className, const pxr::SdfPath& id, const std::string& suffix = std::string()) + { return MoonrayObject(create(className, id, suffix)); } + + MoonrayOutput createRenderOutput(const std::string& name); + + // Get an existing SceneObject by id, or return nullptr if it doesn't exist. + scene_rdl2::rdl2::SceneObject* get(const pxr::SdfPath& id, const std::string& suffix = std::string()); + MoonrayObject getObject(const pxr::SdfPath& id, const std::string& suffix = std::string()) + { return MoonrayObject(get(id, suffix)); } + + // Check the interface type of a given class + bool checkClassInterface(const std::string& className, MoonrayAttribute::InterfaceType interfaceType); + + // Apply the given assignment to the geometry, placing in the default layer and geometry set. + // Unassigned geometry is not rendered + void assign(const MoonrayObject& obj, const MoonrayAssignment& assignment); + void assign(const MoonrayObject& obj, const std::string& partName, const MoonrayAssignment& assignment); + void addUnassigned(const MoonrayObject& obj); + + // Categories are used to specify which lights and light filters affect which geometry + // Each category is a token associated with a set of lights or filters. Each light or filter must call + // setCategory() for each category it belongs to, and releaseCategory() when it is removed from a category or deleted. + // lights and filters with no category must be placed in the default category. + void setCategory(const MoonrayObject& obj, CategoryType type, const pxr::TfToken& category); + void releaseCategory(const MoonrayObject& obj, CategoryType type, const pxr::TfToken& category); + + // Given the categories assigned to an (unspecified) piece of geometry, fill in the assignment with appropriate + // light sets, shadow sets and filter sets, based on the contents of the categories that have been set by the above functions. + void updateAssignmentFromCategories(MoonrayAssignment&, + const pxr::VtArray& categories); + + // used to track if a default light is needed + void addLight(); + void removeLight(); + + // Default objects that are automatically created as needed. These are shared and should not be modified. + MoonrayObject defaultMaterial(); + MoonrayObject errorMaterial(); + MoonrayObject defaultVolumeShader(); + MoonrayObject primaryCamera() const; + MoonrayObject emptyLightSet(); + MoonrayObject emptyLightFilterSet(); + + // Automatically create sets, using a cache to reuse them if the same set is requested again. + MoonrayObject getLightSet(const std::set& lights); + MoonrayObject getLightFilterSet(const std::set& filters); + MoonrayObject getShadowSet(const std::set& shadows); + + bool isTimeSamplingIntervalEnabled() const { return mTimeSamplingIntervalEnabled; } + void enableTimeSamplingInterval(bool enable) { mTimeSamplingIntervalEnabled = enable; } + std::pair getTimeSamplingInterval() const; + + Renderer* renderer() const { return mRenderer.get(); } + + pxr::SdfPath simplifyPath(const pxr::SdfPath& path, pxr::HdSceneDelegate* sceneDelegate); + pxr::SdfPath getSimplePath(const pxr::SdfPath& path); + +private: + void addCategoryContents(const pxr::TfToken& category, CategoryType type, std::set& contents); + void removeCategoryContents(const pxr::TfToken& category, CategoryType type, std::set& contents); + void createDefaultLightIfNeeded(); + + HdMoonray_RenderDelegate& mRenderDelegate; + std::unique_ptr mRenderer; + + // CategoryType -> category -> set of objects in that category + std::map> mCategoryContents[numCategories]; + + // Cache of automatically created sets + std::map mLightSets; + std::map mShadowSets; + std::map mLightFilterSets; + + MoonrayObject mPrimaryCamera; + MoonrayObject mAllGeometry; + MoonrayObject mDefaultLayer; + MoonrayObject mDefaultMaterial; + MoonrayObject mErrorMaterial; + MoonrayObject mDefaultVolumeShader; + MoonrayObject mDefaultLight; + MoonrayObject mEmptyLightSet; + MoonrayObject mEmptyLightFilterSet; + + bool mTimeSamplingIntervalEnabled = false; + + int mNumLights = 0; + std::mutex mCreateMutex; + std::mutex mLayerMutex; + std::mutex mCategoriesMutex; + std::mutex mCacheMutex; + + std::mutex mSimplifyPathMutex; + std::map mOriginalToSimple; + std::set mSimplePaths; + +}; + +} diff --git a/lib/hydramoonray/MoonraySceneIndexPlugin.cc b/lib/hydramoonray/MoonraySceneIndexPlugin.cc new file mode 100644 index 0000000..3a65c29 --- /dev/null +++ b/lib/hydramoonray/MoonraySceneIndexPlugin.cc @@ -0,0 +1,61 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "MoonraySceneIndexPlugin.h" +#include +#include +#include +#include +#include +#include + +PXR_NAMESPACE_OPEN_SCOPE + +TF_DEFINE_PRIVATE_TOKENS( + _tokens, + ((sceneIndexPluginName, "MoonraySceneIndexPlugin")) +); + +TF_REGISTRY_FUNCTION_WITH_TAG(TfType, MoonraySceneIndexPlugin) +{ + HdSceneIndexPluginRegistry::Define(); +} + +TF_REGISTRY_FUNCTION_WITH_TAG(HdSceneIndexPlugin, MoonraySceneIndexPlugin) +{ + const HdSceneIndexPluginRegistry::InsertionPhase insertionPhase = 0; + + // convert all implicit geometry to meshes + HdDataSourceBaseHandle const toMesh = + HdRetainedTypedSampledDataSource::New( + HdsiImplicitSurfaceSceneIndexTokens->toMesh); + + HdContainerDataSourceHandle const inputArgs = + HdRetainedContainerDataSource::New( + HdPrimTypeTokens->sphere, toMesh, + HdPrimTypeTokens->cube, toMesh, + HdPrimTypeTokens->cone, toMesh, + HdPrimTypeTokens->cylinder, toMesh, + HdPrimTypeTokens->capsule, toMesh, + HdPrimTypeTokens->plane, toMesh); + + HdSceneIndexPluginRegistry::GetInstance().RegisterSceneIndexForRenderer( + "Moonray", + _tokens->sceneIndexPluginName, + inputArgs, + insertionPhase, + HdSceneIndexPluginRegistry::InsertionOrderAtStart); +} + +HdSceneIndexBaseRefPtr +MoonraySceneIndexPlugin::_AppendSceneIndex( + const HdSceneIndexBaseRefPtr &inputScene, + const HdContainerDataSourceHandle &inputArgs) +{ + return HdDependencyForwardingSceneIndex::New( + HdsiLightLinkingSceneIndex::New( + HdsiImplicitSurfaceSceneIndex::New(inputScene, inputArgs), + HdContainerDataSourceHandle())); +} + +PXR_NAMESPACE_CLOSE_SCOPE \ No newline at end of file diff --git a/lib/hydramoonray/MoonraySceneIndexPlugin.h b/lib/hydramoonray/MoonraySceneIndexPlugin.h new file mode 100644 index 0000000..dbad498 --- /dev/null +++ b/lib/hydramoonray/MoonraySceneIndexPlugin.h @@ -0,0 +1,26 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once +#include +#include + +PXR_NAMESPACE_OPEN_SCOPE + +class MoonraySceneIndexPlugin : public HdSceneIndexPlugin +{ +public: + MoonraySceneIndexPlugin() = default; + +protected: + HdSceneIndexBaseRefPtr _AppendSceneIndex( + const HdSceneIndexBaseRefPtr &inputScene, + const HdContainerDataSourceHandle &inputArgs) override; + HdSceneIndexBaseRefPtr _AppendSceneIndex( + const std::string &renderInstanceId, + const HdSceneIndexBaseRefPtr &inputScene, + const HdContainerDataSourceHandle &inputArgs) override + { return _AppendSceneIndex(inputScene, inputArgs); } +}; + +PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/hydramoonray/MurmurHash3.h b/lib/hydramoonray/MurmurHash3.h index a5f5313..9a14a34 100644 --- a/lib/hydramoonray/MurmurHash3.h +++ b/lib/hydramoonray/MurmurHash3.h @@ -3,9 +3,6 @@ // domain. The author hereby disclaims copyright to this source code. #pragma once -//#ifndef _MURMURHASH3_H_ -//#define _MURMURHASH3_H_ - //----------------------------------------------------------------------------- // Platform-specific functions and macros @@ -27,7 +24,6 @@ typedef unsigned __int64 uint64_t; //----------------------------------------------------------------------------- namespace hdMoonray { -void MurmurHash3_x86_32 ( const void * key, int len, uint32_t seed, void * out ); -float MurmurHash3_to_float ( const char * key); -} -//#endif // _MURMURHASH3_H_ \ No newline at end of file + void MurmurHash3_x86_32 ( const void * key, int len, uint32_t seed, void * out ); + float MurmurHash3_to_float ( const char * key); +} \ No newline at end of file diff --git a/lib/hydramoonray/NullRenderer.cc b/lib/hydramoonray/NullRenderer.cc index 298f870..8eaf510 100644 --- a/lib/hydramoonray/NullRenderer.cc +++ b/lib/hydramoonray/NullRenderer.cc @@ -8,6 +8,7 @@ namespace hdMoonray { NullRenderer::NullRenderer() { mSceneContext = new scene_rdl2::rdl2::SceneContext(); + mSceneContext->setProxyModeEnabled(true); } NullRenderer::~NullRenderer() @@ -16,12 +17,12 @@ NullRenderer::~NullRenderer() } bool -NullRenderer::allocate(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd, const PixelSize& request) +NullRenderer::allocate(MoonrayOutput output, PixelData& pd, const PixelSize& request) { // we have to allocate a buffer, even though we won't fill it, // because the calling app may fail without one // (we could perhaps add an option to disable this) - pd.mChannels = isBeauty(ro) ? 4 : request.mChannels; + pd.mChannels = output.isBeauty() ? 4 : request.mChannels; pd.mWidth = request.mWidth; pd.mHeight = request.mHeight; pd.vec.resize(pd.mWidth * pd.mHeight * pd.mChannels); @@ -31,13 +32,13 @@ NullRenderer::allocate(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd, const } bool -NullRenderer::resolve(scene_rdl2::rdl2::RenderOutput*, PixelData&) +NullRenderer::resolve(MoonrayOutput, PixelData&, bool) { return false; } void -NullRenderer::deallocate(scene_rdl2::rdl2::RenderOutput*, PixelData&) +NullRenderer::deallocate(MoonrayOutput, PixelData&) { } diff --git a/lib/hydramoonray/NullRenderer.h b/lib/hydramoonray/NullRenderer.h index 22e1498..6f04200 100644 --- a/lib/hydramoonray/NullRenderer.h +++ b/lib/hydramoonray/NullRenderer.h @@ -25,9 +25,9 @@ class NullRenderer : public Renderer float getElapsedSeconds() const override { return 0.0f; } bool isFrameComplete() const override { return true; } - bool allocate(scene_rdl2::rdl2::RenderOutput*, PixelData&, const PixelSize&) override; - bool resolve(scene_rdl2::rdl2::RenderOutput*, PixelData&) override; - void deallocate(scene_rdl2::rdl2::RenderOutput*, PixelData&) override; + bool allocate(MoonrayOutput, PixelData&, const PixelSize&) override; + bool resolve(MoonrayOutput, PixelData&, bool forceUpdate = false) override; + void deallocate(MoonrayOutput, PixelData&) override; void applySettings(const RenderSettings&) override {} diff --git a/lib/hydramoonray/Options.cc b/lib/hydramoonray/Options.cc new file mode 100644 index 0000000..fe8edff --- /dev/null +++ b/lib/hydramoonray/Options.cc @@ -0,0 +1,63 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "Options.h" +#include "HdmLog.h" +#include "renderDelegate.h" + +#include + +namespace hdMoonray { + +void Options::setDisableLighting(bool v) +{ + if (v != mDisableLighting) { + mDisableLighting = v; + mRenderDelegate.markAllLightsDirty(pxr::HdChangeTracker::AllDirty); + } +} + +void Options::setPruneProcedural(const std::string& name, bool prune) +{ + if (prune != getPruneProcedural(name)) { + if (prune) mPrunedProcedurals.insert(name); + else mPrunedProcedurals.erase(name); + mRenderDelegate.markAllProceduralsDirty(pxr::HdChangeTracker::DirtyVisibility); + } +} + +void Options::setPruneVolume(bool v) +{ + if (v != mPruneVolume) { + mPruneVolume = v; + mRenderDelegate.markAllVolumesDirty(pxr::HdChangeTracker::DirtyVisibility); + } +} + +void Options::setDecodeNormals(bool v) +{ + mDecodeNormalsChanged = false; + if (v != mDecodeNormals) { + mDecodeNormals = v; + mRenderDelegate.markAllRprimsDirty(pxr::HdChangeTracker::DirtyMaterialId); + mDecodeNormalsChanged = true; + } +} + +void Options::setDoubleSided(bool v) +{ + if (v != mDoubleSided) { + mDoubleSided = v; + mRenderDelegate.markAllRprimsDirty(pxr::HdChangeTracker::DirtyDoubleSided); + } +} + +void Options::setForcePolygon(bool v) +{ + if (v != mForcePolygon) { + mForcePolygon = v; + mRenderDelegate.markAllRprimsDirty(pxr::HdChangeTracker::DirtySubdivTags); + } +} + +} \ No newline at end of file diff --git a/lib/hydramoonray/Options.h b/lib/hydramoonray/Options.h new file mode 100644 index 0000000..ccb0f50 --- /dev/null +++ b/lib/hydramoonray/Options.h @@ -0,0 +1,86 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +namespace hdMoonray { + class HdMoonray_RenderDelegate; + +class Options +{ +public: + Options(HdMoonray_RenderDelegate& renderDelegate) : mRenderDelegate(renderDelegate) {} + ~Options() {} + + const std::string& getRdlOutput() const { return mRdlOutput; } + void setRdlOutput(const std::string& v) { mRdlOutput = v; } + + bool isHoudini() const { return mIsHoudini; } + bool getDisableLighting() const { return mDisableLighting; } + void setDisableLighting(bool v); + bool isDoubleSided() const { return mDoubleSided; } + void setDoubleSided(bool v); + bool getDecodeNormals() const { return mDecodeNormals; } + bool getDecodeNormalsChanged() const { return mDecodeNormalsChanged; } + void setDecodeNormals(bool v); + float getMaxMeshResolution() const { return mMaxMeshResolution; } + void setMaxMeshResolution(float v) { mMaxMeshResolution = v; } + bool getEnableMotionBlur() const { return mEnableMotionBlur; } + void setEnableMotionBlur(bool v) { mEnableMotionBlur = v; } + bool getForcePolygon() const {return mForcePolygon;} + + bool getPruneProcedural(const std::string& rdlName) const + { return mPrunedProcedurals.count(rdlName) > 0; } + void setPruneProcedural(const std::string& rdlName, bool prune); + bool getPruneVolume() const {return mPruneVolume;} + void setPruneVolume(bool v); + void setForcePolygon(bool v); + void setIsHoudini(bool v) { mIsHoudini = v; } + void setDisableRender(bool v) {mDisableRender = v;} + bool getDisableRender() {return mDisableRender;} + void setDeepIdAttrName(std::string attrName) {mDeepIdAttrName = attrName;} + std::string getDeepIdAttrName() {return mDeepIdAttrName;} + + bool getSimplifyPaths() const { return mSimplifyPaths; } + void setSimplifyPaths(bool v) { mSimplifyPaths = v; } + + bool getShowAllRenderSettings() const { return mShowAllRenderSettings; } + void setShowAllRenderSettings(bool v) { mShowAllRenderSettings = v; } + bool getShowRenderSettingChanges() const { return mShowRenderSettingChanges; } + void setShowRenderSettingChanges(bool v) { mShowRenderSettingChanges = v; } + + bool getShowRenderPasses() const { return mShowRenderPasses; } + void setShowRenderPasses(bool v) { mShowRenderPasses = v; } + + bool getGenerateOnly() const { return mGenerateOnly; } + void setGenerateOnly(bool v) { mGenerateOnly = v; } + +private: + HdMoonray_RenderDelegate& mRenderDelegate; + + bool mDisableLighting = false; + bool mDoubleSided = true; + bool mDecodeNormals = false; + bool mDecodeNormalsChanged = false; + float mMaxMeshResolution = 0.0f; + bool mEnableMotionBlur = false; + bool mForcePolygon = false; + std::set mPrunedProcedurals; // stores RDL2 name + bool mPruneVolume = false; + bool mDisableRender = false; + std::string mDeepIdAttrName; + bool mSimplifyPaths = false; + bool mShowRenderSettingChanges = false; + bool mShowAllRenderSettings = false; + bool mShowRenderPasses = false; + bool mGenerateOnly = false; + + // true when settings contains "houdini:interactive" + bool mIsHoudini = false; + + std::string mRdlOutput; +}; +} \ No newline at end of file diff --git a/lib/hydramoonray/Procedural.cc b/lib/hydramoonray/Procedural.cc deleted file mode 100644 index 4506c6e..0000000 --- a/lib/hydramoonray/Procedural.cc +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -// Handles any Moonray geometry shader : the RDL class name should be specified by -// procedural:class. Arbitrary RDL2 attribute "xyz" can be set by USD attribute -// procedural:xyz. primvars:moonray:xyz should also work, and will override procedural:xyz -// -// handles parts, represented by (mis)using GeometrySubset, via ProceduralAdapter. -// Translates primvars to UserData, but only if the RDL class has the -// "primitive_attributes" attribute - -#include "Procedural.h" -#include "RenderDelegate.h" -#include "ValueConverter.h" -#include "HdmLog.h" -#include -#include - -using namespace pxr; - -namespace { - - const std::string rdlAttrPrimitiveAttributes("primitive_attributes"); - -} -namespace hdMoonray { - -using PartMaterial = std::pair; -using PerPartMaterials = std::vector; - -using scene_rdl2::logging::Logger; - -Procedural::Procedural(SdfPath const& id) : - HdRprim(id), - GeometryMixin(this) -{} - -void -Procedural::Finalize(HdRenderParam* renderParam) -{ - // causes geometry to be hidden - resetGeometryObject(RenderDelegate::get(renderParam)); -} - -HdDirtyBits -Procedural::GetInitialDirtyBitsMask() const -{ - return HdChangeTracker::AllDirty; -} - -// This seems to be a GL thing to set up a shader. Sync is not called. -void -Procedural::_InitRepr(TfToken const &reprToken, HdDirtyBits *dirtyBits) -{ - // doing this seems to cause Sync() to be called: - *dirtyBits |= HdChangeTracker::DirtyRepr; -} - -void -Procedural::syncAttributes(HdSceneDelegate* sceneDelegate, - RenderDelegate& renderDelegate, - HdDirtyBits* dirtyBits, - const TfToken& reprToken) -{ - // sync all attributes "procedural:xyx" to RDL attr xyz - const SceneClass& sceneClass = geometry()->getSceneClass(); - for (auto it = sceneClass.beginAttributes(); - it != sceneClass.endAttributes(); - ++it) { - const std::string& attrName = (*it)->getName(); - const TfToken primvarName("moonray:"+attrName); - if (not isPrimvarUsed(primvarName)) { - const TfToken proceduralName("procedural:"+attrName); - VtValue val = sceneDelegate->Get(GetId(), proceduralName); - if (val.IsEmpty()) { - ValueConverter::setDefault(geometry(), *it); - } else { - ValueConverter::setAttribute(geometry(), *it, val); - } - } - } - - // Populate part lists - partList.clear(); - partMaterials.clear(); - partPaths.clear(); - // ProceduralAdapter will give us a list of parts and materials - static TfToken partsToken("parts"); - VtValue parts = sceneDelegate->Get(GetId(), partsToken); - if (parts.IsHolding()) { - const PerPartMaterials& ppm = parts.UncheckedGet(); - partList.reserve(ppm.size()); - partMaterials.reserve(ppm.size()); - partPaths.reserve(ppm.size()); - - for (const auto& pm : ppm) { - partList.push_back(pm.first.GetName()); - partPaths.push_back(pm.first); - partMaterials.push_back(pm.second); - } - } - - // base class handles transform and double-sided - GeometryMixin::syncAttributes(sceneDelegate, renderDelegate, dirtyBits, reprToken); -} - -bool -Procedural::supportsUserData() { - // check if the geometry supports user data, which means it has - // a "primitive_attributes" attribute - const SceneClass& sceneClass = geometry()->getSceneClass(); - // there is no hasAttribute(), but getAttribute() throws if the - // attribute doesn't exist - try { - return sceneClass.getAttribute(rdlAttrPrimitiveAttributes) != nullptr; - } catch (...) { - return false; - } -} - -void -Procedural::Sync(HdSceneDelegate* sceneDelegate, - HdRenderParam* renderParam, - HdDirtyBits* dirtyBits, - const TfToken& reprToken) -{ - hdmLogSyncStart("Procedural", GetId(), dirtyBits); - RenderDelegate& renderDelegate(RenderDelegate::get(renderParam)); - - // compute class name and check if it has changed - // since this forces a complete resync regardless of incoming - // dirtyBits, it is a questionable use of the Hydra interface... - static const TfToken classToken("procedural:class"); - VtValue className(sceneDelegate->Get(GetId(),classToken)); - if (not className.IsHolding()) { - Logger::error(GetId(), " : requires procedural:class to be set"); - return; - } - const std::string sceneClass = className.UncheckedGet().GetString(); - if (geometry() && - sceneClass != geometry()->getSceneClass().getName()) { - // class has changed, need to clear current object - resetGeometryObject(renderDelegate); - // force a re-sync of overything - *dirtyBits = GetInitialDirtyBitsMask(); - } - - _UpdateVisibility(sceneDelegate, dirtyBits); - _UpdateInstancer(sceneDelegate, dirtyBits); - - syncAll(sceneClass, sceneDelegate, renderDelegate, dirtyBits, reprToken); - - hdmLogSyncEnd(GetId()); -} - -const TfTokenVector& -Procedural::GetBuiltinPrimvarNames() const -{ - static TfTokenVector none{}; - return none; -} - -} diff --git a/lib/hydramoonray/RenderBuffer.cc b/lib/hydramoonray/RenderBuffer.cc deleted file mode 100644 index af618ac..0000000 --- a/lib/hydramoonray/RenderBuffer.cc +++ /dev/null @@ -1,555 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#include "RenderBuffer.h" -#include "RenderDelegate.h" -#include "Camera.h" -#include "ValueConverter.h" -#include "HdmLog.h" - -#include -#include -#include -#include "pxr/base/work/loops.h" - -#include -#include - -#ifdef __GNUC__ -#define UNUSED __attribute__ ((unused)) -#else -#define UNUSED -#endif - -namespace { - -UNUSED -std::ostream& -operator<<(std::ostream& o, pxr::HdFormat format) -{ - const char* t; - switch (pxr::HdGetComponentFormat(format)) { - case pxr::HdFormatUNorm8: t = "UNorm8"; break; - case pxr::HdFormatSNorm8: t = "SNorm8"; break; - case pxr::HdFormatFloat16: t = "Float16"; break; - case pxr::HdFormatFloat32: t = "Float32"; break; - case pxr::HdFormatInt32: t = "Int32"; break; - default: - return o << "HdFormatInvalid(" << int(format) << ')'; - } - unsigned n = pxr::HdGetComponentCount(format); - o << "HdFormat" << t; - if (n != 1) o << "Vec" << n; - return o; -} - -// Lookup table from AOV name to RenderOutput settings -typedef scene_rdl2::rdl2::RenderOutput RO; -struct RODesc { - pxr::HdFormat hdFormat; - RO::Result result = RO::RESULT_BEAUTY; - RO::StateVariable stateVariable = RO::STATE_VARIABLE_P; - RODesc(pxr::HdFormat f): hdFormat(f) {} - RODesc(pxr::HdFormat f, RO::Result r): hdFormat(f), result(r) {} - RODesc(pxr::HdFormat f, RO::StateVariable v): hdFormat(f), result(RO::RESULT_STATE_VARIABLE), stateVariable(v) {} -}; - -const RODesc* -lookup(pxr::TfToken const& name) { - static std::map map = { - {pxr::HdAovTokens->color, {pxr::HdFormatFloat32Vec4}}, - {pxr::HdAovTokens->primId, {pxr::HdFormatInt32}}, - {pxr::HdAovTokens->instanceId, {pxr::HdFormatInt32}}, - {pxr::HdAovTokens->elementId, {pxr::HdFormatInt32}}, - {pxr::HdAovTokens->edgeId, {pxr::HdFormatInt32}}, - {pxr::HdAovTokens->pointId, {pxr::HdFormatInt32}}, - // {pxr::HdAovTokens->Peye, pxr::HdFormatFloat32Vec3}, - // {pxr::HdAovTokens->Neye, pxr::HdFormatFloat32Vec3}, - // {pxr::HdAovTokens->patchCoord, pxr::HdFormatFloat32Vec3}, - {pxr::TfToken("beauty"), {pxr::HdFormatFloat32Vec3, RO::RESULT_BEAUTY}}, - {pxr::TfToken("alpha"), {pxr::HdFormatFloat32, RO::RESULT_ALPHA}}, - {pxr::HdAovTokens->depth, {pxr::HdFormatFloat32, RO::RESULT_DEPTH}}, // remapped to near=0, far=1 - {pxr::HdAovTokens->cameraDepth, {pxr::HdFormatFloat32, RO::RESULT_DEPTH}}, // pixar name for actual Z - {pxr::TfToken("heat_map"), {pxr::HdFormatFloat32, RO::RESULT_HEAT_MAP}}, - {pxr::TfToken("wireframe"), {pxr::HdFormatFloat32Vec3, RO::RESULT_WIREFRAME}}, // crashes - {pxr::TfToken("weight"), {pxr::HdFormatFloat32, RO::RESULT_WEIGHT}}, - {pxr::TfToken("beauty_aux"), {pxr::HdFormatFloat32Vec3, RO::RESULT_BEAUTY_AUX}}, - {pxr::TfToken("alpha_aux"), {pxr::HdFormatFloat32, RO::RESULT_ALPHA_AUX}}, - {pxr::TfToken("P"), {pxr::HdFormatFloat32Vec3, RO::STATE_VARIABLE_P}}, - {pxr::TfToken("Ng"), {pxr::HdFormatFloat32Vec3, RO::STATE_VARIABLE_NG}}, - {pxr::TfToken("N"), {pxr::HdFormatFloat32Vec3, RO::STATE_VARIABLE_N}}, - {pxr::HdAovTokens->normal, {pxr::HdFormatFloat32Vec3, RO::STATE_VARIABLE_N}}, // pixar name - {pxr::TfToken("St"), {pxr::HdFormatFloat32Vec2, RO::STATE_VARIABLE_ST}}, - {pxr::TfToken("primvars:st"), {pxr::HdFormatFloat32Vec2, RO::STATE_VARIABLE_ST}}, // pixar name - {pxr::TfToken("dPds"), {pxr::HdFormatFloat32Vec3, RO::STATE_VARIABLE_DPDS}}, - {pxr::TfToken("dPdt"), {pxr::HdFormatFloat32Vec3, RO::STATE_VARIABLE_DPDT}}, - {pxr::TfToken("dSdx"), {pxr::HdFormatFloat32, RO::STATE_VARIABLE_DSDX}}, - {pxr::TfToken("dSdy"), {pxr::HdFormatFloat32, RO::STATE_VARIABLE_DSDY}}, - {pxr::TfToken("dTdx"), {pxr::HdFormatFloat32, RO::STATE_VARIABLE_DTDX}}, - {pxr::TfToken("dTdy"), {pxr::HdFormatFloat32, RO::STATE_VARIABLE_DTDY}}, - {pxr::TfToken("Wp"), {pxr::HdFormatFloat32Vec3, RO::STATE_VARIABLE_WP}}, - {pxr::TfToken("Z"), {pxr::HdFormatFloat32, RO::STATE_VARIABLE_DEPTH}},// is this the same as cameraDepth? - {pxr::TfToken("motionvec"), {pxr::HdFormatFloat32Vec2, RO::STATE_VARIABLE_MOTION}}, - }; - auto i = map.find(name); - if (i != map.end()) - return &i->second; - else - return nullptr; -} - -// Guess at what type of data is in a named primitive -pxr::HdFormat -getPrimvarFormat(pxr::TfToken name) { - static std::map map = { - {pxr::TfToken("displayOpacity"), pxr::HdFormatFloat32}, - {pxr::HdAovTokens->primId, pxr::HdFormatInt32}, - {pxr::HdAovTokens->instanceId, pxr::HdFormatInt32}, - {pxr::TfToken("instanceIdA"), pxr::HdFormatInt32}, - {pxr::TfToken("instanceIdB"), pxr::HdFormatInt32}, - {pxr::TfToken("instanceIdC"), pxr::HdFormatInt32}, - {pxr::HdAovTokens->elementId, pxr::HdFormatInt32}, - {pxr::HdAovTokens->edgeId, pxr::HdFormatInt32}, - {pxr::HdAovTokens->pointId, pxr::HdFormatInt32}, - }; - auto i = map.find(name); - return i != map.end() ? i->second : pxr::HdFormatFloat32Vec3; -} - -// Split afer first ':' into two tokens. If no ':' return empty, token -void split(pxr::TfToken token, pxr::TfToken& prefix, pxr::TfToken& suffix) -{ - const std::string s(token.GetString()); - for (size_t i = 0; i < s.size(); ++i) { - if (s[i] == ':') { - prefix = pxr::TfToken(s.substr(0,i+1)); - suffix = pxr::TfToken(s.substr(i+1)); - return; - } - if (not isalnum(s[i])) break; // prefix has to be a plain word - } - suffix = token; -} - -} - -namespace hdMoonray { - -using scene_rdl2::logging::Logger; - -// An HdAovDescriptor contains the format and multiSampled values passed to Allocate(), and the -// clearValue and aovSettings passed in aovBinding of Bind(). -pxr::HdAovDescriptor -RenderBuffer::getAovDescriptor(pxr::TfToken const& name) -{ - auto desc = lookup(name); - if (desc) - return pxr::HdAovDescriptor(desc->hdFormat, false, pxr::VtValue()); - pxr::HdFormat format = pxr::HdFormatInvalid; - pxr::TfToken prefix, suffix; split(name, prefix, suffix); - if (prefix.IsEmpty() || prefix == pxr::HdAovTokens->primvars) { - format = getPrimvarFormat(suffix); - } else if (prefix == pxr::HdAovTokens->lpe) { - format = pxr::HdFormatFloat32Vec3; - } else if (prefix == pxr::HdAovTokens->shader) { - format = pxr::HdFormatFloat32Vec3; - } - return pxr::HdAovDescriptor(format, false, pxr::VtValue()); -} - -void -RenderBuffer::Sync(pxr::HdSceneDelegate* sceneDelegate, - pxr::HdRenderParam* renderParam, - pxr::HdDirtyBits* dirtyBits) -{ - const pxr::SdfPath& id = GetId(); - hdmLogSyncStart("RenderBuffer", id, dirtyBits); - - mRenderDelegate = &RenderDelegate::get(renderParam); - pxr::HdRenderBuffer::Sync(sceneDelegate, renderParam, dirtyBits); // this calls Allocate() - hdmLogSyncEnd(id); -} - -// This is unfortunatly called before bind(), and thus mRenderOutput output may be unset. -// It would be nice to create mRenderOutput here, but this cannot be done because the -// aovName is inaccessible. Instead everything must be guessed from the dimensions & format. -bool -RenderBuffer::Allocate(const pxr::GfVec3i& dimensions, pxr::HdFormat format, bool multiSampled) -{ - hdmLogRenderBuffer("Allocate",GetId()); - - if (dimensions[2] != 1) { - Logger::error(GetId(), ": dimensions ", dimensions, " unsupported"); - hdmLogRenderBuffer("EndAllocateErr",GetId()); - return false; - } - - mFormat = format; - - PixelSize request; - switch (format) { - case pxr::HdFormatInt32: - case pxr::HdFormatFloat32: - request.mChannels = 1; break; - case pxr::HdFormatFloat32Vec2: - request.mChannels = 2; break; - case pxr::HdFormatFloat32Vec3: - request.mChannels = 3; break; - case pxr::HdFormatFloat32Vec4: - request.mChannels = 4; break; - default: - Logger::error(GetId(), ": unknown format ", format); - hdmLogRenderBuffer("EndAllocateErr",GetId()); - return false; - } - request.mWidth = dimensions[0]; - request.mHeight = dimensions[1]; - - bool ret = mRenderDelegate->getRendererApplySettings().allocate(mRenderOutput, mPixelData, request); - hdmLogRenderBuffer("EndAllocate",GetId()); - return ret; -} - -// Called by RenderPass. Only at this point do we have all the information needed to correctly -// set mRenderOutput and to set data needed by Resolve() -void -RenderBuffer::bind(const pxr::HdRenderPassAovBinding& aovBinding, const Camera* camera) -{ - hdmLogRenderBuffer("Bind", GetId()); - - mAovName = aovBinding.aovName; - mNear = camera->getNear(); - mFar = camera->getFar(); - pxr::HdAovSettingsMap aovSettings = aovBinding.aovSettings; - - if (aovBinding.clearValue.IsHolding()) { - pxr::GfVec4f v = aovBinding.clearValue.Get(); - if (v != clearValue) { - clearValue = v; - mPixelData.filmActivity = ~0; // make it recomposite even if render has finished - } - } - - if (bound()) { - hdmLogRenderBuffer("EndBindBound", GetId()); - return; // Hydra does not reuse render buffers for different aovs, so assume it is unchanged - } - mBound = true; - - if (mAovName == pxr::HdAovTokens->color) { - // special case Color if it is 4 channels by using dummy RenderOutput - mRenderOutput = nullptr; - - } else if (mAovName == pxr::TfToken("cryptomatte")) { - //Add dummy render output first - std::string idName = mRenderDelegate->getDeepIdAttrName(); - if (idName.empty()) return; - scene_rdl2::rdl2::SceneObject* dummyObject = - mRenderDelegate->createSceneObject("RenderOutput", "dummy0"); - if (not dummyObject) return; - - scene_rdl2::rdl2::RenderOutput* mDummyRenderOutput = - dummyObject->asA(); - auto& dro(*mDummyRenderOutput); - { UpdateGuard guard(dro); - dro.setActive(true); - dro.setResult(RO::RESULT_PRIMITIVE_ATTRIBUTE); - dro.setPrimitiveAttribute(idName); - dro.setFileName("ignore_this_file"); - } - //Add cryptomatte render output first - scene_rdl2::rdl2::SceneObject* object = - mRenderDelegate->createSceneObject("RenderOutput", "cryptomatte"); - if (not object) return; - mRenderOutput = object->asA(); - auto& ro(*mRenderOutput); - { - UpdateGuard guard(ro); - ro.setActive(true); - ro.setResult(RO::RESULT_CRYPTOMATTE); - const SceneClass& sceneClass = mRenderOutput->getSceneClass(); - for (auto it = sceneClass.beginAttributes(); it != sceneClass.endAttributes(); ++it) { - const std::string& attrName = (*it)->getName(); - pxr::TfToken key = pxr::TfToken("parameters:moonray:" + attrName); - pxr::VtValue val = aovSettings[key]; - if (not val.IsEmpty()) { - ValueConverter::setAttribute(mRenderOutput, *it, val); - } - } - } - } - else { - if (not mRenderOutput) { - // use a name that will be consistent from run to run, to make it easier to compare - // rdl files for testing - const std::string ROId = "/_outputs/" + mAovName.GetString(); - scene_rdl2::rdl2::SceneObject* object = mRenderDelegate->createSceneObject("RenderOutput", ROId); - if (not object) return; - mRenderOutput = object->asA(); - } - auto& ro(*mRenderOutput); - { - UpdateGuard guard(ro); - ro.setActive(true); - // to do : change to "" when MOONRAY-5301 is fixed - ro.setFileName("/tmp/scene.exr"); - - mDepth = false; - auto desc = lookup(mAovName); - if (desc) { - if (desc->hdFormat == pxr::HdFormatInt32) { - // this is for the instanceId (important for viewport selection) and similar primvars - ro.setResult(RO::RESULT_PRIMITIVE_ATTRIBUTE); - ro.setPrimitiveAttribute(mAovName.GetString()); - ro.setPrimitiveAttributeType(RO::PRIMITIVE_ATTRIBUTE_TYPE_FLOAT); - ro.setMathFilter(RO::MATH_FILTER_CLOSEST); - - } else { - ro.setResult(desc->result); - if (desc->result == RO::RESULT_STATE_VARIABLE) { - ro.setStateVariable(desc->stateVariable); - } else if (desc->result == RO::RESULT_DEPTH) { - ro.setMathFilter(mRenderOutput->MATH_FILTER_MIN); - if (mAovName == pxr::HdAovTokens->depth) { - mDepth = true; // process to OpenGL type clip space - } - } - } - - } else { - pxr::TfToken prefix, suffix; split(mAovName, prefix, suffix); - if (prefix == pxr::HdAovTokens->primvars) { - ro.setResult(mRenderOutput->RESULT_PRIMITIVE_ATTRIBUTE); - ro.setPrimitiveAttribute(suffix.GetString()); - switch (getPrimvarFormat(suffix)) { - case pxr::HdFormatInt32: - ro.setPrimitiveAttributeType(ro.PRIMITIVE_ATTRIBUTE_TYPE_FLOAT); - ro.setMathFilter(mRenderOutput->MATH_FILTER_CLOSEST); - break; - case pxr::HdFormatFloat32: - ro.setPrimitiveAttributeType(ro.PRIMITIVE_ATTRIBUTE_TYPE_FLOAT); - break; - case pxr::HdFormatFloat32Vec2: - ro.setPrimitiveAttributeType(ro.PRIMITIVE_ATTRIBUTE_TYPE_VEC2F); - break; - default: - ro.setPrimitiveAttributeType(ro.PRIMITIVE_ATTRIBUTE_TYPE_RGB); - break; - } - } else if (prefix == pxr::HdAovTokens->lpe) { - ro.setResult(ro.RESULT_LIGHT_AOV); - ro.setLpe(suffix.GetString()); - } else if (prefix == pxr::HdAovTokens->shader) { - ro.setResult(ro.RESULT_MATERIAL_AOV); - ro.setMaterialAov(suffix.GetString()); - } - } - - // Add any custom moonray settings - const SceneClass& sceneClass = mRenderOutput->getSceneClass(); - for (auto it = sceneClass.beginAttributes(); it != sceneClass.endAttributes(); ++it) { - const std::string& attrName = (*it)->getName(); - pxr::TfToken key = pxr::TfToken("parameters:moonray:" + attrName); - pxr::VtValue val = aovSettings[key]; - if (not val.IsEmpty()) { - ValueConverter::setAttribute(mRenderOutput, *it, val); - } - } - } - } - if (mAovName == pxr::HdAovTokens->instanceId) { - // this output will be the sum of instanceId+instanceIdA+instanceIdB... - for (size_t i = 0; i < INSTANCE_NESTING; ++i) { - char letter = 'A'+i; - scene_rdl2::rdl2::SceneObject* object = - mRenderDelegate->createSceneObject("RenderOutput", GetId().GetString() + letter); - if (not object) return; - mMoreOutputs[i] = object->asA(); - auto& ro(*mMoreOutputs[i]); - { - UpdateGuard guard(ro); - ro.setActive(true); - ro.setResult(RO::RESULT_PRIMITIVE_ATTRIBUTE); - ro.setPrimitiveAttribute(mAovName.GetString() + letter); - ro.setPrimitiveAttributeType(RO::PRIMITIVE_ATTRIBUTE_TYPE_FLOAT); - ro.setMathFilter(RO::MATH_FILTER_CLOSEST); - } - } - } - hdmLogRenderBuffer("EndBind", GetId()); -} - -bool -RenderBuffer::IsConverged() const -{ - return true; -} - -void -RenderBuffer::Resolve() -{ - hdmLogRenderBuffer("Resolve", GetId()); - - if (not bound()) { - hdmLogRenderBuffer("EndResolveUnbound", GetId()); - // Houdini does this, so don't treat as an error - return; - } - - // See if the old image is ok - // Return what we already have (which might be the initial buffer set by Allocate) - Renderer& renderer = mRenderDelegate->renderer(); - if (not renderer.resolve(mRenderOutput, mPixelData)) { - hdmLogRenderBuffer("EndResolveUnchanged", GetId()); - return; - } - - switch (mPixelData.mChannels) { - case 1: - if (isDepth()) { - // Houdini is able to accept the linear depth buffer (see ../houdini/UsdRenderers.json) - if (mRenderDelegate->isHoudini()) break; - // Calculate the OpenGL style depth (near=0, far=1) from the linear depth - const float n = mNear; - const float f = mFar; - const float A = ((f+n)/(f-n) + 1)/2; - const size_t count = mPixelData.mWidth * mPixelData.mHeight; - float* buffer = reinterpret_cast(mPixelData.mData); - pxr::WorkParallelForN(count, [buffer, n, A](size_t begin, size_t end) { - for (size_t i = begin; i < end; ++i) { - float z = buffer[i]; - buffer[i] = z > n ? A * (1.0f - n/z) : 0.0f; - } - }); - } else if (mFormat == pxr::HdFormatInt32) { - // Convert float to int, for ids. - const size_t count = mPixelData.mWidth * mPixelData.mHeight; - const float* inbuffer = reinterpret_cast(mPixelData.mData); - int32_t* outbuffer; - if (mMoreOutputs[0]) { - intBuffer.resize(count); - outbuffer = intBuffer.data(); - } else { // write over float data with ints - outbuffer = reinterpret_cast(mPixelData.mData); - } - const float emptyValue = // usdview expects -1 in primId for empty areas - mAovName == pxr::HdAovTokens->primId ? -1.0f : 0.0f; - pxr::WorkParallelForN(count, [inbuffer, outbuffer, emptyValue](size_t begin, size_t end) { - for (size_t i = begin; i < end; ++i) { - // inbuffer contains values that display as "inf" and "-0.0" : these become - // the minimum value when cast to int32. We can't use std::isfinite, because - // we have -ffast-math enabled. - int32_t intval = inbuffer[i]; - if (intval == std::numeric_limits::min()) - outbuffer[i] = emptyValue; - else - outbuffer[i] = intval; - } - }); - if (mMoreOutputs[0]) { - // add other channels for higher-level instancers - for (size_t i = 0; i < INSTANCE_NESTING; ++i) { - renderer.resolve(mMoreOutputs[i], mPixelData); - inbuffer = reinterpret_cast(mPixelData.mData); - pxr::WorkParallelForN(count, [inbuffer, outbuffer](size_t begin, size_t end) { - for (size_t i = begin; i < end; ++i) { - int32_t intval = inbuffer[i]; - if (intval != std::numeric_limits::min()) - outbuffer[i] += intval; - } - }); - } - } - mPixelData.mData = outbuffer; - } else { - mFormat = pxr::HdFormatFloat32; - } - break; - case 2: - mFormat = pxr::HdFormatFloat32Vec2; - break; - case 3: - mFormat = pxr::HdFormatFloat32Vec3; - break; - case 4: - mFormat = pxr::HdFormatFloat32Vec4; - - // alpha compositing over background color must be done by delegate - if (clearValue[3] > 0.0f) { - const size_t count = mPixelData.mWidth * mPixelData.mHeight; - typedef float v4sf __attribute__ ((vector_size (16))); - v4sf* buffer = reinterpret_cast(mPixelData.mData); - if (clearValue[0] || clearValue[1] || clearValue[2] || clearValue[3] < 1.0f) { - const v4sf& cv = reinterpret_cast(clearValue[0]); - pxr::WorkParallelForN(count, [buffer, cv](size_t begin, size_t end) { - for (size_t i = begin; i < end; ++i) { - v4sf& pixel = *(buffer + i); - if (pixel[3] < 1.0f) { - if (pixel[3] > 0.0f) { - const float m = 1.0f - pixel[3]; - pixel += cv * m; - } else { - pixel += cv; - } - } - } - }); - } else { - // composite is simpler when clearValue is opaque black - pxr::WorkParallelForN(count, [buffer](size_t begin, size_t end) { - for (size_t i = begin; i < end; ++i) { - v4sf& pixel = *(buffer + i); - pixel[3] = 1.0f; - } - }); - } - } - - break; - default: - Logger::error(GetId(), ": unknown channel count ", mPixelData.mChannels); - break; - } - hdmLogRenderBuffer("EndResolve", GetId()); -} - -void -RenderBuffer::Finalize(pxr::HdRenderParam* renderParam) -{ - - hdmLogRenderBuffer("Finalize", GetId()); - - if (mRenderOutput) { - RenderDelegate& renderDelegate(RenderDelegate::get(renderParam)); - { - UpdateGuard guard(renderDelegate, mRenderOutput); - mRenderOutput->setActive(false); - } - if (mMoreOutputs[0]) { - for (size_t i = 0; i < INSTANCE_NESTING; ++i) { - UpdateGuard guard(mMoreOutputs[i]); - mMoreOutputs[i]->setActive(false); - } - } - } - HdRenderBuffer::Finalize(renderParam); - hdmLogRenderBuffer("EndFinalize", GetId()); -} - -// Called *after* Finalize() -void -RenderBuffer::_Deallocate() -{ - hdmLogRenderBuffer("_Deallocate", GetId()); - - if (mPixelData.mData) { - mRenderDelegate->renderer().deallocate(mRenderOutput, mPixelData); - mPixelData.vec.clear(); - mPixelData.vpb.cleanUp(); - intBuffer.clear(); - mPixelData.mData = nullptr; - } - hdmLogRenderBuffer("End_Deallocate", GetId()); -} - -} diff --git a/lib/hydramoonray/RenderDelegate.cc b/lib/hydramoonray/RenderDelegate.cc deleted file mode 100644 index 0d21114..0000000 --- a/lib/hydramoonray/RenderDelegate.cc +++ /dev/null @@ -1,786 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#include "RenderDelegate.h" -#include "BasisCurves.h" -#include "Camera.h" -#include "CoordSys.h" -#include "Instancer.h" -#include "Light.h" -#include "LightFilter.h" -#include "Material.h" -#include "Mesh.h" -#include "Points.h" -#include "Procedural.h" -#include "RenderBuffer.h" -#include "Renderer.h" -#include "RenderPass.h" -#include "Volume.h" - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -//#define DEBUG_MSG - -namespace { - - // Testing is much easier if the names of code-generated objects are - // consistent from run to run. Given the nature of Hydra, - // we can't rely on objects to always be processed in the same order. - // Therefore we have to name them using a content hash, rather than - // sequentially. The hash algorithm has to produces the same value - // from run-to-run, with collisions very unlikely. - constexpr size_t HASH_M = 2<<24 - 3; // prime, fits in 6 hex digits - constexpr size_t HASH_P = 127; - - size_t repeatableStringHash(const std::string& s) - { - // standard polynomial rolling algoritm - size_t hash = 0; - size_t p = 1; - for (unsigned char c : s) { - hash = (hash + c * p) % HASH_M; - p = (p * HASH_P) % HASH_M; - } - return hash; - } - - unsigned hashObjectSet(std::set objSet) - { - unsigned hash = 0; - for (auto& obj : objSet) - hash += repeatableStringHash(obj->getName()); - return hash; - } -} -namespace hdMoonray { - -using scene_rdl2::logging::Logger; - -RenderDelegate::RenderDelegate(Renderer* renderer) - : HdRenderDelegate(), - mRenderer(renderer), - mRenderSettings(*this) -{ - _constructor(); -} - -RenderDelegate::RenderDelegate(Renderer* renderer, pxr::HdRenderSettingsMap const& settings) - : HdRenderDelegate(settings), - mRenderer(renderer), - mRenderSettings(*this) -{ - _constructor(); -} - -void -RenderDelegate::_constructor() -{ - mRenderSettings.addDescriptors(mRenderSettingDescriptors); - mRenderer->addDescriptors(mRenderSettingDescriptors); - _PopulateDefaultSettings(mRenderSettingDescriptors); - renderParam.This = this; - initializeSceneContext(); -} - -RenderDelegate::~RenderDelegate() -{ - delete mRenderer; -} - -void -RenderDelegate::CommitResources(pxr::HdChangeTracker *tracker) {} - -#if PXR_VERSION >= 2108 -pxr::HdCommandDescriptors RenderDelegate::GetCommandDescriptors() const -{ - pxr::HdCommandDescriptors descriptors; - descriptors.emplace_back(pxr::TfToken("reload_textures"), "Reload textures"); - descriptors.emplace_back(pxr::TfToken("restart_arras"), "Restart Arras"); - descriptors.emplace_back(pxr::TfToken("output_rdl"), "Output Rdl"); - return descriptors; -} - -bool RenderDelegate::InvokeCommand(const pxr::TfToken& command, const pxr::HdCommandArgs& args) -{ - if (command == pxr::TfToken("reload_textures")) { - mRenderer->invalidateAllTextureResources(); - return true; - } else if (command == pxr::TfToken("restart_arras")) { - mRenderer->restartRenderer(); - return true; - } else if (command == pxr::TfToken("output_rdl")) { - mRenderer->outputRdl(rdlOutput()); - return true; - } - return false; -} -#endif - -static pxr::TfToken proceduralToken("procedural"); -static pxr::TfToken geometryLightToken("geometryLight"); -#if PXR_VERSION >= 2005 -# define lightFilterToken (pxr::HdPrimTypeTokens->lightFilter) -#else -static pxr::TfToken lightFilterToken("lightFilter"); -#endif -// This token is repeated from usdVolImaging which we cannot access from here. -static pxr::TfToken openvdbAssetToken("openvdbAsset"); - -pxr::TfTokenVector const& -RenderDelegate::GetSupportedRprimTypes() const -{ - static const pxr::TfTokenVector SUPPORTED_RPRIM_TYPES = { - pxr::HdPrimTypeTokens->mesh, - pxr::HdPrimTypeTokens->basisCurves, - pxr::HdPrimTypeTokens->points, - pxr::HdPrimTypeTokens->volume, - proceduralToken - }; - return SUPPORTED_RPRIM_TYPES; -} - - -pxr::TfTokenVector const& -RenderDelegate::GetSupportedSprimTypes() const -{ - static const pxr::TfTokenVector SUPPORTED_SPRIM_TYPES = { - pxr::HdPrimTypeTokens->camera, - //pxr::HdPrimTypeTokens->drawTarget, // used by hdSt to return OpenGL textures - pxr::HdPrimTypeTokens->material, - pxr::HdPrimTypeTokens->coordSys, - //pxr::HdPrimTypeTokens->simpleLight, - pxr::HdPrimTypeTokens->cylinderLight, - pxr::HdPrimTypeTokens->diskLight, - pxr::HdPrimTypeTokens->distantLight, - pxr::HdPrimTypeTokens->domeLight, - pxr::HdPrimTypeTokens->rectLight, - pxr::HdPrimTypeTokens->sphereLight, - geometryLightToken, - lightFilterToken, - pxr::HdPrimTypeTokens->extComputation, - }; - return SUPPORTED_SPRIM_TYPES; -} - -pxr::TfTokenVector const& -RenderDelegate::GetSupportedBprimTypes() const -{ - static const pxr::TfTokenVector SUPPORTED_BPRIM_TYPES = { - pxr::HdPrimTypeTokens->renderBuffer, - openvdbAssetToken, - }; - return SUPPORTED_BPRIM_TYPES; -} - -pxr::HdResourceRegistrySharedPtr -RenderDelegate::GetResourceRegistry() const -{ - static pxr::HdResourceRegistrySharedPtr ptr; - if (not ptr) ptr.reset(new pxr::HdResourceRegistry()); - return ptr; -} - -// Result of this is passed to RenderBuffer::Allocate -pxr::HdAovDescriptor -RenderDelegate::GetDefaultAovDescriptor(pxr::TfToken const& name) const -{ - return RenderBuffer::getAovDescriptor(name); -} - -pxr::VtDictionary -RenderDelegate::GetRenderStats() const -{ - pxr::VtDictionary stats; - if (mRenderer && !mRenderer->isFrameComplete()) { - auto progress = mRenderer->getProgress(); - // This is the only value usdview reads, you have to turn on "View/Heads-Up Display/GPU Stats" to see it - stats[pxr::HdPerfTokens->numCompletedSamples] = int(progress * 100000); - // Values used by Houdini: - // See $HFS/toolkit/include/HUSD/XUSD_Tokens.h for full list - static const pxr::TfToken percentDone("percentDone"); - stats[percentDone] = progress * 100; - static const pxr::TfToken totalClockTime("totalClockTime"); - stats[totalClockTime] = mRenderer->getElapsedSeconds(); - static const pxr::TfToken rpAnn("renderProgressAnnotation"); - const std::string& status = mRenderer->getStatusString(); - if (!status.empty()) { - stats[rpAnn] = status; - } - } - return stats; -} - -bool -RenderDelegate::IsPauseSupported() const -{ - return true; -} - -bool -RenderDelegate::Pause() -{ - if (mRenderer) mRenderer->pause(); - return true; -} - -bool -RenderDelegate::Resume() -{ - if (mRenderer) mRenderer->resume(); - return true; -} - -pxr::HdRenderPassSharedPtr -RenderDelegate::CreateRenderPass(pxr::HdRenderIndex *renderIndex, - pxr::HdRprimCollection const& collection) -{ - mRenderIndex = renderIndex; - return pxr::HdRenderPassSharedPtr(new RenderPass(renderIndex, collection, this)); -} - -pxr::HdInstancer* -RenderDelegate::CreateInstancer(pxr::HdSceneDelegate *sceneDelegate, - pxr::SdfPath const& id) -{ - return new Instancer(sceneDelegate, id); -} - -void -RenderDelegate::DestroyInstancer(pxr::HdInstancer *instancer) -{ - delete instancer; -} - -pxr::HdRprim* -RenderDelegate::CreateRprim(pxr::TfToken const& typeId, - pxr::SdfPath const& rprimId) -{ - if (typeId == pxr::HdPrimTypeTokens->mesh) { - return new Mesh(rprimId); - } else if (typeId == pxr::HdPrimTypeTokens->basisCurves) { - return new BasisCurves(rprimId); - } else if (typeId == pxr::HdPrimTypeTokens->points) { - return new Points(rprimId); - } else if (typeId == pxr::HdPrimTypeTokens->volume) { - auto p = new Volume(rprimId); - if (not rprimId.IsEmpty()) - mVolumes.insert(p); - return p; - } else if (typeId == proceduralToken) { - auto p = new Procedural(rprimId); - if (not rprimId.IsEmpty()) - mProcedurals.insert(p); - return p; - } else { - Logger::warn(rprimId, ": unknown Rprim type ", typeId); - return nullptr; - } -} - -void -RenderDelegate::DestroyRprim(pxr::HdRprim *rPrim) -{ - mProcedurals.erase(rPrim); - mVolumes.erase(rPrim); - - delete rPrim; -} - -pxr::HdSprim* -RenderDelegate::CreateSprim(pxr::TfToken const& typeId, - pxr::SdfPath const& sprimId) -{ - if (typeId == pxr::HdPrimTypeTokens->camera) { - return new Camera(sprimId); - } else if (typeId == pxr::HdPrimTypeTokens->material) { - return new Material(sprimId); - } else if (typeId == pxr::HdPrimTypeTokens->coordSys) { - return new CoordSys(sprimId); - } else if (typeId == pxr::HdPrimTypeTokens->extComputation) { - return new pxr::HdExtComputation(sprimId); // no subclass needed - } else if (typeId == lightFilterToken) { - return new LightFilter(typeId,sprimId); - } else if (Light::isSupportedType(typeId)) { - auto p = new Light(typeId, sprimId); - if (not sprimId.IsEmpty()) - mLights.insert(p); - return p; - } - Logger::warn(sprimId, ": unknown Sprim type ", typeId); - return nullptr; -} - -pxr::HdSprim * -RenderDelegate::CreateFallbackSprim(pxr::TfToken const& typeId) -{ - // all other sprims set the default values in the constructor - return CreateSprim(typeId, pxr::SdfPath::EmptyPath()); -} - -void -RenderDelegate::DestroySprim(pxr::HdSprim *sPrim) -{ - mLights.erase(sPrim); - delete sPrim; -} - -pxr::HdBprim * -RenderDelegate::CreateBprim(pxr::TfToken const& typeId, - pxr::SdfPath const& bprimId) -{ - if (typeId == pxr::HdPrimTypeTokens->renderBuffer) { - return new RenderBuffer(bprimId); - } else if (typeId == openvdbAssetToken) { - return new OpenVdbAsset(bprimId); - } else { - Logger::warn(bprimId, ": unknown Bprim type ", typeId); - return nullptr; - } -} - -pxr::HdBprim * -RenderDelegate::CreateFallbackBprim(pxr::TfToken const& typeId) -{ - // all bprims set the default values in the constructor - return CreateBprim(typeId, pxr::SdfPath::EmptyPath()); -} - -void -RenderDelegate::DestroyBprim(pxr::HdBprim *bPrim) -{ - delete bPrim; -} - -void -RenderDelegate::setSceneDelegate(pxr::HdSceneDelegate* sceneDelegate) -{ - if (not mUsdImagingDelegate) { - mUsdImagingDelegate = dynamic_cast(sceneDelegate); - } -} - -//////////////////////////////////////////////////////////////////////////////// - -Renderer& -RenderDelegate::getRendererApplySettings() -{ - unsigned v = GetRenderSettingsVersion(); - if (v != mPreviousRenderSettings) { - mPreviousRenderSettings = v; - mRenderSettings.apply(); // cannot be called before renderer exists - mRenderer->applySettings(mRenderSettings); - mRenderer->setIsHoudini(isHoudini()); - } - return *mRenderer; -} - -static bool -contains(const pxr::TfTokenVector& tags, const pxr::TfToken& tag) -{ - return std::find(tags.begin(), tags.end(), tag) != tags.end(); -} - -bool -RenderDelegate::setRenderTags(pxr::HdRenderIndex* index, const pxr::TfTokenVector& tags) -{ - if (tags == mRenderTags) return false; - // fix Pixar bug https://github.com/PixarAnimationStudios/USD/issues/801 - // by turning off any rprims with a removed purpose - pxr::TfTokenVector removed; - for (auto& t : mRenderTags) - if (not contains(tags, t)) removed.push_back(t); - mRenderTags = tags; - if (not removed.empty()) { - for (auto& id : index->GetRprimIds()) { - if (contains(removed, index->GetRenderTag(id))) - (const_cast(index->GetRprim(id)))->Finalize(&renderParam); - } - } - return true; -} - -scene_rdl2::rdl2::SceneObject* -RenderDelegate::createSceneObject(const std::string& className, const pxr::SdfPath& id) -{ - return createSceneObject(className, id.GetString()); -} - -scene_rdl2::rdl2::SceneObject* -RenderDelegate::createSceneObject(const std::string& className, const std::string& id) -{ - // for now rely on sceneContext reusing existing object - try { - return acquireSceneContext().createSceneObject(className, id); - } catch (const scene_rdl2::except::TypeError& e) { - // assume this error is a className collision, try again with a different name - Logger::info(e.what()); - return createSceneObject(className, id+className); - } catch (const std::exception& e) { - Logger::error(id, ": ", e.what()); - return nullptr; - } -} - -scene_rdl2::rdl2::SceneObject* -RenderDelegate::getSceneObject(const pxr::SdfPath& id) -{ - return getSceneObject(id.GetString()); -} - -scene_rdl2::rdl2::SceneObject* -RenderDelegate::getSceneObject(const std::string& id) -{ - try { - return acquireSceneContext().getSceneObject(id); - } catch (const std::exception& e) { - // caller can print a more informative error message - return nullptr; - } -} - -void -RenderDelegate::initializeSceneContext() -{ - scene_rdl2::rdl2::SceneContext& wsc = acquireSceneContext(); - - mAllGeometry = wsc.createSceneObject("GeometrySet", "allGeometry")->asA(); - mDefaultLayer = wsc.createSceneObject("Layer", "defaultLayer")->asA(); - scene_rdl2::rdl2::SceneVariables& wsv = wsc.getSceneVariables(); - { UpdateGuard guard(wsv); - wsv.set(wsv.sLayer, mDefaultLayer); - } - - // create cameras[0] that can be moved around to match the active camera as it changes - mPrimaryCamera = wsc.createSceneObject("PerspectiveCamera", "primaryCamera")->asA(); -} - -scene_rdl2::rdl2::Material* -RenderDelegate::defaultMaterial() -{ - if (not mDefaultMaterial) { - std::lock_guard lock(mCreateMutex); - if (not mDefaultMaterial) { - scene_rdl2::rdl2::SceneContext& wsc = acquireSceneContext(); - scene_rdl2::rdl2::Map* displayColor = wsc.createSceneObject("AttributeMap", "displayColor")->asA(); - { UpdateGuard guard(displayColor); - displayColor->set("primitive_attribute_name", std::string("displayColor")); - // displayColor->set("primitive_attribute_type", 3); // color - displayColor->set("default_value", scene_rdl2::rdl2::Rgb(0.5f,0.5f,0.5f)); // default from hdSt/shaders/mesh.glslfx - } - scene_rdl2::rdl2::Map* displayOpacity = wsc.createSceneObject("AttributeMap", "displayOpacity")->asA(); - { UpdateGuard guard(displayOpacity); - displayOpacity->set("primitive_attribute_name", std::string("displayOpacity")); - displayOpacity->set("primitive_attribute_type", 0); // FLOAT - } - mDefaultMaterial = wsc.createSceneObject("UsdPreviewSurface", "defaultMaterial")->asA(); - UpdateGuard guard(mDefaultMaterial); - mDefaultMaterial->set("diffuseColor", scene_rdl2::rdl2::Rgb(1.0f,1.0f,1.0f)); - mDefaultMaterial->setBinding("diffuseColor", displayColor); - mDefaultMaterial->setBinding("opacity", displayOpacity); - mDefaultMaterial->set("roughness", 0.3f); - } - } - return mDefaultMaterial; -} - -scene_rdl2::rdl2::Material* -RenderDelegate::errorMaterial() -{ - if (not mErrorMaterial) { - std::lock_guard lock(mCreateMutex); - if (not mErrorMaterial) { - scene_rdl2::rdl2::SceneContext& wsc = acquireSceneContext(); - mErrorMaterial = wsc.createSceneObject("UsdPreviewSurface", "errorMaterial")->asA(); - UpdateGuard guard(mErrorMaterial); - mErrorMaterial->set("diffuseColor", scene_rdl2::rdl2::Rgb(1.0f, 0.0f, 1.0f)); - } - } - return mErrorMaterial; -} - -scene_rdl2::rdl2::VolumeShader* -RenderDelegate::defaultVolumeShader() -{ - if (not mDefaultVolumeShader) { - std::lock_guard lock(mCreateMutex); - if (not mDefaultVolumeShader) { - scene_rdl2::rdl2::SceneContext& wsc = acquireSceneContext(); - mDefaultVolumeShader = wsc.createSceneObject("BaseVolume", "defaultVolumeShader")->asA(); - } - } - return mDefaultVolumeShader; -} - -// synchronous layer modifications -int -RenderDelegate::assign(scene_rdl2::rdl2::Geometry* geometry, - const scene_rdl2::rdl2::LayerAssignment& assignment) -{ - static const std::string nopart; - return assign(geometry, nopart, assignment); -} - -int -RenderDelegate::assign(scene_rdl2::rdl2::Geometry* geometry, const std::string& partName, - const scene_rdl2::rdl2::LayerAssignment& assignment) -{ - std::lock_guard guard(layerMutex); - if (partName.empty()) { - UpdateGuard guard2(mAllGeometry); - mAllGeometry->add(geometry); - } - UpdateGuard guard2(mDefaultLayer); - return mDefaultLayer->assign(geometry, partName, assignment); -} - -void -RenderDelegate::addUnassigned(scene_rdl2::rdl2::Geometry* geometry) -{ - std::lock_guard guard(layerMutex); - UpdateGuard guard2(mAllGeometry); - mAllGeometry->add(geometry); -} - -void -RenderDelegate::setCategory(scene_rdl2::rdl2::SceneObject* obj, - CategoryType type, - const pxr::TfToken& id) -{ - std::lock_guard lock(mCategoriesMutex); - mCategoryObjects[type][id].emplace(obj); -} - -void -RenderDelegate::releaseCategory(scene_rdl2::rdl2::SceneObject* obj, - CategoryType type, - const pxr::TfToken& id) -{ - std::lock_guard lock(mCategoriesMutex); - mCategoryObjects[type][id].erase(obj); -} - -void -RenderDelegate::updateAssignmentFromCategories( - scene_rdl2::rdl2::LayerAssignment& assignment, - const pxr::VtArray& categories) -{ - - // Lock is not needed here as it appears Hydra has already called Sync() on all lights and filters - const auto& mCategoryObjects = this->mCategoryObjects; // prevent non-const set operations - - // create the default light if there are no lights - if (not mNumLights && not mDefaultLight) { - std::lock_guard lock(mCreateMutex); - if (not mDefaultLight) { - scene_rdl2::rdl2::SceneContext& wsc = acquireSceneContext(); - scene_rdl2::rdl2::Light* defaultLight = wsc.createSceneObject("EnvLight", "defaultLight")->asA(); - setCategory(defaultLight, CategoryType::LightLink, pxr::TfToken()); - setCategory(defaultLight, CategoryType::ShadowLink, pxr::TfToken()); - UpdateGuard guard(*this, defaultLight); - defaultLight->set("max_shadow_distance", 100.0f); - //defaultLight->set("sample_upper_hemisphere_only", true); - mDefaultLight = defaultLight; - } - } - - std::set sets[CategoryType::COUNT]; - - for (int type = 0; type < CategoryType::COUNT; ++type) { - const auto& typeCategoryObjects = mCategoryObjects[type]; - auto i = typeCategoryObjects.find(pxr::TfToken()); // all uncategorized objects - if (i != typeCategoryObjects.end()) sets[type] = i->second; - for (auto& id : categories) { - i = typeCategoryObjects.find(id); - if (i != typeCategoryObjects.end()) { - for (scene_rdl2::rdl2::SceneObject* item : i->second) - sets[type].insert(item); - } - } - } - - // the set for shadows is inverted - {std::set noShadowSet; - for (auto& i : sets[CategoryType::LightLink]) { - if (not sets[CategoryType::ShadowLink].count(i)) - noShadowSet.insert(i); - } - std::swap(sets[CategoryType::ShadowLink], noShadowSet);} - - // compute a hash for each set - unsigned hash[CategoryType::COUNT]; - for (size_t i = 0; i < CategoryType::COUNT; ++i) { - hash[i] = hashObjectSet(sets[i]); - } - - // Lock is needed so each set is only created once - std::lock_guard lock(mCategoriesMutex); - - if (sets[CategoryType::LightLink].empty()) { - // must be set to a valid LightSet object, even if empty (MOONRAY-4854) - if (not mEmptyLightSet) { - scene_rdl2::rdl2::SceneContext& wsc = acquireSceneContext(); - mEmptyLightSet = wsc.createSceneObject("LightSet", "emptyLightSet")->asA(); - } - assignment.mLightSet = mEmptyLightSet; - } else { - unsigned h = hash[CategoryType::LightLink]; - scene_rdl2::rdl2::LightSet*& set = mLightSets[h]; - if (not set) { - char name[20]; snprintf(name, 20, "LightSet%06X", h); - set = createSceneObject("LightSet", name)->asA(); - UpdateGuard guard(set); - for (auto& i : sets[CategoryType::LightLink]) - set->add(i->asA()); - } - assignment.mLightSet = set; - } - if (sets[CategoryType::ShadowLink].empty()) { - assignment.mShadowSet = nullptr; - } else { - unsigned h = hash[CategoryType::ShadowLink]; - scene_rdl2::rdl2::ShadowSet*& set = mShadowSets[h]; - if (not set) { - char name[20]; snprintf(name, 20, "ShadowSet%06X", h); - set = createSceneObject("ShadowSet", name)->asA(); - UpdateGuard guard(set); - for (auto& i : sets[CategoryType::ShadowLink]) - set->add(i->asA()); - } - assignment.mShadowSet = set; - } - if (sets[CategoryType::FilterLink].empty()) { - assignment.mLightFilterSet = nullptr; - } else { - unsigned h = hash[CategoryType::FilterLink]; - scene_rdl2::rdl2::LightFilterSet*& set = mLightFilterSets[h]; - if (not set) { - char name[20]; snprintf(name, 20, "LightFilterSet%06X", h); - set = createSceneObject("LightFilterSet", name)->asA(); - UpdateGuard guard(set); - for (auto& i : sets[CategoryType::FilterLink]) - set->add(i->asA()); - } - assignment.mLightFilterSet = set; - } -} - -void RenderDelegate::addLight() -{ - std::lock_guard lock(mCategoriesMutex); // reuse this lock to protect this - if (++mNumLights == 1) { - setDefaultLight(false); - } -} - -void RenderDelegate::removeLight() -{ - std::lock_guard lock(mCategoriesMutex); // reuse this lock to protect this - if (mNumLights == 0) { - Logger::error("removeLight() called more often than addLight()"); - } else if (--mNumLights == 0) { - setDefaultLight(true); - } -} - -void RenderDelegate::setDefaultLight(bool v) -{ - if (mDefaultLight) { - UpdateGuard guard(*this, mDefaultLight); - mDefaultLight->set(scene_rdl2::rdl2::Light::sOnKey, v); - } else if (v) { - // this will cause updateAssignmentFromCategories to create mDefaultLight: - markAllRprimsDirty(pxr::HdChangeTracker::DirtyCategories); - } -} - -void RenderDelegate::setDisableLighting(bool v) -{ - if (v != mDisableLighting) { - mDisableLighting = v; - // dirty all the lights, which will cause them to call add/removeLight and - // that will turn the default light on/off - for (auto& p : mLights) - mRenderIndex->GetChangeTracker().MarkSprimDirty(p->GetId(), pxr::HdLight::DirtyBits::AllDirty); - } -} - -void RenderDelegate::setPruneProcedural(const std::string& name, bool prune) -{ - if (prune != getPruneProcedural(name)) { - if (prune) mPrunedProcedurals.insert(name); - else mPrunedProcedurals.erase(name); - for (auto& p : mProcedurals){ - if (mRenderIndex) - mRenderIndex->GetChangeTracker().MarkRprimDirty( - p->GetId(), - pxr::HdChangeTracker::DirtyVisibility); - } - } -} - -void RenderDelegate::setPruneVolume(bool v) -{ - if (v != mPruneVolume) { - mPruneVolume = v; - for (auto& p : mVolumes){ - if (mRenderIndex) - mRenderIndex->GetChangeTracker().MarkRprimDirty( - p->GetId(), - pxr::HdChangeTracker::DirtyVisibility); - } - } -} - -void RenderDelegate::setDecodeNormals(bool v) -{ - mDecodeNormalsChanged = false; - if (v != mDecodeNormals) { - mDecodeNormals = v; - markAllRprimsDirty(pxr::HdChangeTracker::DirtyMaterialId); - mDecodeNormalsChanged = true; - } -} - -void RenderDelegate::setDoubleSided(bool v) -{ - if (v != mDoubleSided) { - mDoubleSided = v; - markAllRprimsDirty(pxr::HdChangeTracker::DirtyDoubleSided); - } -} - -void RenderDelegate::setForcePolygon(bool v) -{ - if (v != mForcePolygon) { - mForcePolygon = v; - markAllRprimsDirty(pxr::HdChangeTracker::DirtySubdivTags); - } -} - -void RenderDelegate::markAllRprimsDirty(pxr::HdDirtyBits bits) -{ - if (mRenderIndex) mRenderIndex->GetChangeTracker().MarkAllRprimsDirty(bits); -} - -} diff --git a/lib/hydramoonray/RenderDelegate.h b/lib/hydramoonray/RenderDelegate.h deleted file mode 100644 index 568aa68..0000000 --- a/lib/hydramoonray/RenderDelegate.h +++ /dev/null @@ -1,386 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include "RenderSettings.h" - -#include -#include - -namespace scene_rdl2 {namespace rdl2 { -class Camera; -class Geometry; -class GeometrySet; -class Layer; -class LayerAssignment; -class LightSet; -class Material; -class SceneObject; -class LayerAssignment; -class VolumeShader; -} } - -namespace hdMoonray { - -class Renderer; - -/// This is the object created by RendererPlugin that implements all -/// the actual API. Hydra will create one or more of these as it needs renders. -class RenderDelegate final: public pxr::HdRenderDelegate -{ -public: - /// Render delegate constructor. Creates scene_rdl2::rndr::RenderContext - /// and links moonray error handling to hydra error handling. - /// renderer is owned by this class and deleted in destructor. - RenderDelegate(Renderer* renderer); - RenderDelegate(Renderer* renderer, pxr::HdRenderSettingsMap const& settings); - - /// Destroys the scene_rdl2::rndr::RenderContext - ~RenderDelegate(); - - /// Return this delegate's render param. - pxr::HdRenderParam *GetRenderParam() const override { return const_cast(&renderParam); } - /// Turn RenderParam back into RenderDelegate - static RenderDelegate& get(pxr::HdRenderParam* p) { return *(((RenderParam*)p)->This); } - - const pxr::TfTokenVector &GetSupportedRprimTypes() const override; - const pxr::TfTokenVector &GetSupportedSprimTypes() const override; - const pxr::TfTokenVector &GetSupportedBprimTypes() const override; - - /// Returns the HdResourceRegistry instance used by this render delegate. - pxr::HdResourceRegistrySharedPtr GetResourceRegistry() const override; - - /// Returns a list of user-configurable render settings. - /// This is a reflection API for the render settings dictionary; it need - /// not be exhaustive, but can be used for populating application settings - /// UI. - pxr::HdRenderSettingDescriptorList GetRenderSettingDescriptors() const override - { return mRenderSettingDescriptors; } - -#if PXR_VERSION >= 2108 - /// Commands supported by this render delegate. - pxr::HdCommandDescriptors GetCommandDescriptors() const override; - - /// Invoke a command - bool InvokeCommand(const pxr::TfToken& command, const pxr::HdCommandArgs& args = pxr::HdCommandArgs()) override; -#endif - - /// Return true to indicate that pausing and resuming are supported. - bool IsPauseSupported() const override; - - /// Pause background rendering threads. - bool Pause() override; - - /// Resume background rendering threads. - bool Resume() override; - - /// Create a renderpass. Hydra renderpasses are responsible for drawing - /// a subset of the scene (specified by the "collection" parameter) to the - /// current framebuffer. This class creates objects of type - /// RenderPass, which draw using moonray's raycasting API. - /// \param index The render index this renderpass will be bound to. - /// \param collection A specifier for which parts of the scene should - /// be drawn. - /// \return An moonray renderpass object. - pxr::HdRenderPassSharedPtr CreateRenderPass( - pxr::HdRenderIndex *index, - pxr::HdRprimCollection const& collection) override; - - /// Create an instancer. Hydra instancers store data needed for an - /// instanced object to draw itself multiple times. - /// \param id The unique identifier of this instancer. - /// \return A pointer to the new instancer or nullptr on error. - pxr::HdInstancer *CreateInstancer(pxr::HdSceneDelegate *delegate, - pxr::SdfPath const& id -#if PXR_VERSION < 2102 - , pxr::SdfPath const& instancerId -#endif - ) override; - - /// Destroy an instancer created with CreateInstancer. - /// \param instancer The instancer to be destroyed. - void DestroyInstancer(pxr::HdInstancer *instancer) override; - - /// Create a hydra Rprim, representing scene geometry. This class creates - /// moonray-specialized geometry containers like Mesh which map - /// scene data to moonray scene graph objects. - /// \param typeId the type identifier of the prim to allocate - /// \param rprimId a unique identifier for the prim - /// \return A pointer to the new prim or nullptr on error. - pxr::HdRprim *CreateRprim(pxr::TfToken const& typeId, - pxr::SdfPath const& rprimId -#if PXR_VERSION < 2102 - , pxr::SdfPath const& instancerId -#endif - ) override; - - /// Destroy an Rprim created with CreateRprim. - /// \param rPrim The rprim to be destroyed. - void DestroyRprim(pxr::HdRprim *rPrim) override; - - /// Create a hydra Sprim, representing scene or viewport state like cameras - /// or lights. - /// \param typeId The sprim type to create. This must be one of the types - /// from GetSupportedSprimTypes(). - /// \param sprimId The scene graph ID of this sprim, used when pulling - /// data from a scene delegate. - /// \return An moonray sprim object. - pxr::HdSprim *CreateSprim(pxr::TfToken const& typeId, - pxr::SdfPath const& sprimId) override; - - /// Create a hydra Sprim using default values, and with no scene graph - /// binding. - /// \param typeId The sprim type to create. This must be one of the types - /// from GetSupportedSprimTypes(). - /// \return An moonray fallback sprim object. - pxr::HdSprim *CreateFallbackSprim(pxr::TfToken const& typeId) override; - - /// Destroy an Sprim created with CreateSprim or CreateFallbackSprim. - /// \param sPrim The sprim to be destroyed. - void DestroySprim(pxr::HdSprim *sPrim) override; - - /// Create a hydra Bprim, representing data buffers such as textures. - /// \param typeId The bprim type to create. This must be one of the types - /// from GetSupportedBprimTypes(). - /// \param bprimId The scene graph ID of this bprim, used when pulling - /// data from a scene delegate. - /// \return An moonray bprim object. - pxr::HdBprim *CreateBprim(pxr::TfToken const& typeId, - pxr::SdfPath const& bprimId) override; - - /// Create a hydra Bprim using default values, and with no scene graph - /// binding. - /// \param typeId The bprim type to create. This must be one of the types - /// from GetSupportedBprimTypes(). - /// \return An moonray fallback bprim object. - pxr::HdBprim *CreateFallbackBprim(pxr::TfToken const& typeId) override; - - /// Destroy a Bprim created with CreateBprim or CreateFallbackBprim. - /// \param bPrim The bprim to be destroyed. - void DestroyBprim(pxr::HdBprim *bPrim) override; - - /// This function is called after new scene data is pulled during prim - /// Sync(), but before any tasks (such as draw tasks) are run, and gives the - /// render delegate a chance to transfer any invalidated resources to the - /// rendering kernel. - /// \param tracker The change tracker passed to prim Sync(). - void CommitResources(pxr::HdChangeTracker *tracker) override; - - /// This function tells the scene which material variant to reference. - /// Moonray doesn't currently use materials but raytraced backends generally - /// specify "full". - pxr::TfToken GetMaterialBindingPurpose() const override { return pxr::HdTokens->full; } - - /// This functions tell the scene delegate the namespace selector we want to use to - /// define our material networks. - /// For example, this function returns "moonray", so the material surface output attribute we see - /// will be the one called "outputs:moonray:surface.connect" - pxr::TfToken GetMaterialNetworkSelector() const override - { static pxr::TfToken tt("moonray"); return tt; } - - /// This function returns the default AOV descriptor for a given named AOV. - /// This mechanism lets the renderer decide things like what format - /// a given AOV will be written as. - /// \param name The name of the AOV whose descriptor we want. - /// \return A descriptor specifying things like what format the AOV - /// output buffer should be. - pxr::HdAovDescriptor - GetDefaultAovDescriptor(pxr::TfToken const& name) const override; - - /// This function allows the renderer to report back some useful statistics - /// that the application can display to the user. - pxr::VtDictionary GetRenderStats() const override; - -/// Moonray-specific api ///////////////////////////////////////////////// - - /// The Renderer hides the different backends, such as renderfarm vs local - Renderer& renderer() const { return *mRenderer; } - - /// Create or update the renderer to match current settings. This is fast - /// if no settings have changed. You must call this before renderer(). - Renderer& getRendererApplySettings(); - - // Fix for Pixar bug https://github.com/PixarAnimationStudios/USD/issues/801 - bool setRenderTags(pxr::HdRenderIndex* index, const pxr::TfTokenVector&); - - const scene_rdl2::rdl2::SceneContext& sceneContext() { return mRenderer->getSceneContext(); } - - void beginUpdate() { if (mRenderer) mRenderer->beginUpdate(); } - - /// Stop the render (if running) and return reference to writable scene context - scene_rdl2::rdl2::SceneContext& acquireSceneContext() { beginUpdate(); return mRenderer->getSceneContext(); } - - scene_rdl2::rdl2::SceneObject* createSceneObject(const std::string& className, const pxr::SdfPath& id); - scene_rdl2::rdl2::SceneObject* createSceneObject(const std::string& className, const std::string& id); - - scene_rdl2::rdl2::SceneObject* getSceneObject(const pxr::SdfPath& id); - scene_rdl2::rdl2::SceneObject* getSceneObject(const std::string& id); - - // Default material showing displayColor + displayOpacity - scene_rdl2::rdl2::Material* defaultMaterial(); - // Bright magenta for showing materials with errors - scene_rdl2::rdl2::Material* errorMaterial(); - // Default volume shader - scene_rdl2::rdl2::VolumeShader* defaultVolumeShader(); - - // Add geometry to layer, assigns material/lights. - int assign(scene_rdl2::rdl2::Geometry* geometry, - const scene_rdl2::rdl2::LayerAssignment& assignment); - int assign(scene_rdl2::rdl2::Geometry* geometry, - const std::string& partName, - const scene_rdl2::rdl2::LayerAssignment& assignment); - - // Adds geometry with no assignment (used for mesh lights) - void addUnassigned(scene_rdl2::rdl2::Geometry* geometry); - - // a "category" is a USD collection used to assign geometry to - // lights, light shadows or light filters. A light may have two - // category collections (LightLink and ShadowLink); a LightFilter - // has one. - enum CategoryType { LightLink, ShadowLink, FilterLink, COUNT }; - - // associate the given category id with the given object (which - // must be a light or light filter). If a light(filter) has no - // collection for a CategoryType, an empty id is passed. - void setCategory(scene_rdl2::rdl2::SceneObject* obj, - CategoryType type, - const pxr::TfToken& id); - - // categories should be released before the object that they - // are associated with it destroyed - void releaseCategory(scene_rdl2::rdl2::SceneObject* obj, - CategoryType type, - const pxr::TfToken& id); - - // Update the layer assignment to contain the correct - // light set, shadow set and light filter set for the categories object is in. - // scene_rdl2::rdl2::Set objects are created as necessary. - void updateAssignmentFromCategories(scene_rdl2::rdl2::LayerAssignment&, - const pxr::VtArray& categories); - - // Reusable camera - scene_rdl2::rdl2::Camera* primaryCamera() const { return mPrimaryCamera; } - - const std::string& rdlOutput() const { return mRdlOutput; } - void setRdlOutput(const std::string& v) { mRdlOutput = v; } - - // keep track of how many lights there are and turn on default light if zero - void addLight(); - void removeLight(); - - bool isHoudini() const { return mIsHoudini; } - bool getDisableLighting() const { return mDisableLighting; } - void setDisableLighting(bool v); - bool isDoubleSided() const { return mDoubleSided; } - void setDoubleSided(bool v); - bool getDecodeNormals() const { return mDecodeNormals; } - bool getDecodeNormalsChanged() const { return mDecodeNormalsChanged; } - void setDecodeNormals(bool v); - bool getEnableMotionBlur() const { return mEnableMotionBlur; } - void setEnableMotionBlur(bool v) { mEnableMotionBlur = v; } - bool getForcePolygon() const {return mForcePolygon;} - - bool getPruneProcedural(const std::string& rdlName) const - { return mPrunedProcedurals.count(rdlName) > 0; } - void setPruneProcedural(const std::string& rdlName, bool prune); - bool getPruneVolume() const {return mPruneVolume;} - void setPruneVolume(bool v); - void setForcePolygon(bool v); - void setIsHoudini(bool v) { mIsHoudini = v; } - void setDisableRender(bool v) {mDisableRender = v;} - bool getDisableRender() {return mDisableRender;} - void setDeepIdAttrName(std::string attrName) {mDeepIdAttrName = attrName;} - std::string getDeepIdAttrName() {return mDeepIdAttrName;} - - const RenderSettings& renderSettings() const { return mRenderSettings; } - - void markAllRprimsDirty(pxr::HdDirtyBits bits); - - void setSceneDelegate(pxr::HdSceneDelegate*); - pxr::UsdImagingDelegate* usdImagingDelegate() const { return mUsdImagingDelegate; } - -private: - RenderDelegate(const RenderDelegate &) = delete; - RenderDelegate &operator =(const RenderDelegate &) = delete; - - class RenderParam final: public pxr::HdRenderParam { - public: - RenderDelegate* This; // possibly this should be const - } renderParam; - - void _constructor(); - - Renderer* mRenderer = nullptr; - RenderSettings mRenderSettings; - unsigned mPreviousRenderSettings = 0; - pxr::HdRenderSettingDescriptorList mRenderSettingDescriptors; - - bool mDisableLighting = false; - bool mDoubleSided = true; - bool mDecodeNormals = false; - bool mDecodeNormalsChanged = false; - bool mEnableMotionBlur = false; - bool mForcePolygon = false; - std::set mPrunedProcedurals; // stores RDL2 name - bool mPruneVolume = false; - bool mDisableRender = false; - std::string mDeepIdAttrName; - // true when settings contains "houdini:interactive" - bool mIsHoudini = false; - - void initializeSceneContext(); // part of constructor - scene_rdl2::rdl2::Camera* mPrimaryCamera = nullptr; - scene_rdl2::rdl2::GeometrySet* mAllGeometry = nullptr; - scene_rdl2::rdl2::Layer* mDefaultLayer = nullptr; - scene_rdl2::rdl2::Material* mDefaultMaterial = nullptr; - scene_rdl2::rdl2::Material* mErrorMaterial = nullptr; - scene_rdl2::rdl2::VolumeShader* mDefaultVolumeShader = nullptr; - scene_rdl2::rdl2::Light* mDefaultLight = nullptr; - scene_rdl2::rdl2::LightSet* mEmptyLightSet = nullptr; - - unsigned mNumLights = 0; - std::mutex layerMutex; // protects defaultLayer - - // stores the mapping from category type+ids to the associated set of lights - std::map> mCategoryObjects[CategoryType::COUNT]; - - // Keep track of all the category assignments made - std::map mLightSets; - std::map mShadowSets; - std::map mLightFilterSets; - - std::mutex mCategoriesMutex; - std::mutex mCreateMutex; - - std::string mRdlOutput; - pxr::TfTokenVector mRenderTags; - pxr::HdRenderIndex *mRenderIndex = nullptr; // stored by CreateRenderPass - - std::set mLights; - std::set mProcedurals; - std::set mVolumes; - void setDefaultLight(bool); - - pxr::UsdImagingDelegate* mUsdImagingDelegate = nullptr; -}; - -// Same as scene_rdl2::rdl2:::SceneObject::UpdateGuard but also stops the renderer -class UpdateGuard { -public: - // this constructor stops the renderer - UpdateGuard(RenderDelegate& r, scene_rdl2::rdl2::SceneObject* obj): - mSceneObject(obj) { r.beginUpdate(); obj->beginUpdate(); } - // only use this constructor if you know rendering is stopped already - UpdateGuard(scene_rdl2::rdl2::SceneObject* obj): - mSceneObject(obj) { obj->beginUpdate(); } - UpdateGuard(scene_rdl2::rdl2::SceneObject& obj): - mSceneObject(&obj) { obj.beginUpdate(); } - ~UpdateGuard() { mSceneObject->endUpdate(); } - UpdateGuard(const UpdateGuard&) = delete; - UpdateGuard& operator=(const UpdateGuard&) = delete; -private: - scene_rdl2::rdl2::SceneObject* mSceneObject; -}; - -} diff --git a/lib/hydramoonray/RenderPass.cc b/lib/hydramoonray/RenderPass.cc deleted file mode 100644 index f1a9b63..0000000 --- a/lib/hydramoonray/RenderPass.cc +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#include "RenderPass.h" -#include "RenderBuffer.h" -#include "RenderDelegate.h" -#include "Camera.h" - -#include -#include - -#include -#include - -//#define DEBUG_MSG - - -namespace hdMoonray -{ - -using scene_rdl2::logging::Logger; - -RenderPass::~RenderPass() -{ -} - -bool -RenderPass::IsConverged() const -{ - // This oddness is to work around a Hydra bug that has been reported to pixar. - // It does not call RenderBuffer::Resolve after IsConverged returns true, so - // it never shows the last generated image. Fix this by requiring IsConverged() - // to be called twice to return true and disable the _Execute call between them. - if (mDeferIsConverged) { - return true; - } else { - mDeferIsConverged = renderDelegate.renderer().isFrameComplete(); - return false; - } -} - -void -RenderPass::_MarkCollectionDirty() -{ -} - -void -RenderPass::_Sync() -{ -} - -void -RenderPass::_Execute(const pxr::HdRenderPassStateSharedPtr& renderPassState, - const pxr::TfTokenVector& renderTags) -{ - // Update for any changes in render settings, may create a new renderer - renderDelegate.getRendererApplySettings(); - - // Deal with changes to "purpose" - renderDelegate.setRenderTags(GetRenderIndex(), renderTags); - - const scene_rdl2::rdl2::SceneContext& sc(renderDelegate.sceneContext()); - const scene_rdl2::rdl2::SceneVariables& sv(sc.getSceneVariables()); - - int w, h; -#if PXR_VERSION >= 2102 - if (renderPassState->GetFraming().IsValid()) { - const pxr::GfRect2i& dw(renderPassState->GetFraming().dataWindow); - w = dw.GetWidth(); - h = dw.GetHeight(); - } else // older clients may use viewport instead of framing -#endif - { const pxr::GfVec4f& vp = renderPassState->GetViewport(); - w = vp[2]; - h = vp[3]; - } - - const Camera* camera(dynamic_cast(renderPassState->GetCamera())); - if (not camera) { - Logger::error("RenderPassState without camera is unsupported"); - // It could the view+proj matricies below and update a fake Camera. But - // usdview is not using this. - return; - } - const_cast(camera)->setAsPrimaryCamera(renderDelegate, double(w)/h); - - float frame = 0; - scene_rdl2::rdl2::FloatVector motionSteps(2); - auto usdDelegate = renderDelegate.usdImagingDelegate(); - if (usdDelegate) { - pxr::UsdTimeCode currTime = usdDelegate->GetTime(); - if (currTime.IsNumeric()) { - frame = (float)currTime.GetValue(); - pxr::GfInterval interval = usdDelegate->GetCurrentTimeSamplingInterval(); - motionSteps[0] = float(interval.GetMin()) - frame; - motionSteps[1] = float(interval.GetMax()) - frame; - } - } else { - std::pair interval = - const_cast(camera)->getTimeSamplingInterval(); - motionSteps[0] = interval.first; - motionSteps[1] = interval.second; - } - - const bool motionBlur = renderDelegate.getEnableMotionBlur() && - motionSteps[0] < motionSteps[1]; - if (not motionBlur) { motionSteps[0] = -1; motionSteps[1] = 0; } - - if (frame != sv.get(sv.sFrameKey) || - motionSteps != sv.get(sv.sMotionSteps) || - motionBlur != sv.get(sv.sEnableMotionBlur) || - w != sv.get(sv.sImageWidth) || - h != sv.get(sv.sImageHeight)) - { - scene_rdl2::rdl2::SceneVariables& wsv(renderDelegate.acquireSceneContext().getSceneVariables()); - UpdateGuard guard(wsv); - wsv.set(sv.sFrameKey, frame); - wsv.set(sv.sMotionSteps, motionSteps); - wsv.set(sv.sEnableMotionBlur, motionBlur); - wsv.set(sv.sImageWidth, w); - wsv.set(sv.sImageHeight, h); - } - - // const pxr::GfMatrix4d& view = renderPassState->GetWorldToViewMatrix(); // same as camera->GetViewMatrix() - // // This matrix contains info that is *not* in the Camera, to make the pixels square in the viewport: - // const pxr::GfMatrix4d& proj = renderPassState->GetProjectionMatrix(); - - // tell renderer about any new bindings - const pxr::HdRenderPassAovBindingVector& aovBindings = renderPassState->GetAovBindings(); - for (const pxr::HdRenderPassAovBinding& aovBinding : aovBindings) { - RenderBuffer* buffer = reinterpret_cast(aovBinding.renderBuffer); - buffer->bind(aovBinding, camera); - } - - if (renderDelegate.renderer().isUpdateActive()) { - mDeferIsConverged = false; - } - renderDelegate.renderer().endUpdate(); - - static std::string prevRdlaOutput; - const std::string& rdlOutput(renderDelegate.rdlOutput()); - if (rdlOutput != prevRdlaOutput) { - prevRdlaOutput = rdlOutput; - if (not rdlOutput.empty()) { - scene_rdl2::rdl2::writeSceneToFile(sc, - rdlOutput, - false, // deltas - true); // skip defaults - } - } -} - -} - diff --git a/lib/hydramoonray/RenderPass.h b/lib/hydramoonray/RenderPass.h deleted file mode 100644 index 7d50099..0000000 --- a/lib/hydramoonray/RenderPass.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2023-2024 DreamWorks Animation LLC -// SPDX-License-Identifier: Apache-2.0 - -#pragma once - -#include - -namespace hdMoonray { - -class RenderDelegate; -class Camera; - -/// RenderPass represents a single render iteration, rendering a view of the -/// scene (the HdRprimCollection) for a specific viewer (the camera/viewport -/// parameters in HdRenderPassState) to the current draw target. - -class RenderPass final: public pxr::HdRenderPass -{ -public: - // constructor. Directly reads data such as the RenderContext from RenderDelegate - RenderPass( - pxr::HdRenderIndex* index, - const pxr::HdRprimCollection& collection, - RenderDelegate* d - ) : HdRenderPass(index, collection), renderDelegate(*d) { } - - ~RenderPass(); - - bool IsConverged() const override; - -protected: - void _Execute(pxr::HdRenderPassStateSharedPtr const& renderPassState, - pxr::TfTokenVector const &renderTags) override; - - void _MarkCollectionDirty() override; - void _Sync() override; - -private: - RenderDelegate& renderDelegate; // RenderDelegate that called constructor - mutable bool mDeferIsConverged = false; -}; - -} - diff --git a/lib/hydramoonray/RenderSettings.cc b/lib/hydramoonray/RenderSettings.cc index a8e12cf..636ae98 100644 --- a/lib/hydramoonray/RenderSettings.cc +++ b/lib/hydramoonray/RenderSettings.cc @@ -2,17 +2,15 @@ // SPDX-License-Identifier: Apache-2.0 #include "RenderSettings.h" -#include "RenderDelegate.h" +#include "renderDelegate.h" #include "ValueConverter.h" #include "Utils.h" -#include -#include -#include - // If adding or changing the descriptors, the file // ../houdini/soho/parameters/HdMoonrayRendererPlugin_Viewport.ds must be updated to match +// Note: disableRender forces use of the null render delegate, and can only be set at delegate creation time +// generateOnly uses the regular delegate but skips the actual render, and can be set at any time. using namespace pxr; namespace { @@ -20,6 +18,8 @@ TF_DEFINE_PRIVATE_TOKENS(Tokens, (debug) (info) (logLevel) + (showRenderSettings) + (showRenderPasses) (rdlOutput) (disableLighting) (doubleSided) @@ -32,33 +32,36 @@ TF_DEFINE_PRIVATE_TOKENS(Tokens, (pruneWrapDeform) (forcePolygon) (executionMode) + (generateOnly) + (maxMeshResolution) ); } namespace hdMoonray { -using scene_rdl2::logging::Logger; - void RenderSettings::addDescriptors(HdRenderSettingDescriptorList& descriptorList) const { static HdRenderSettingDescriptorList descriptors = { - { "Show Debug Messages", Tokens->debug, VtValue(getEnv("HDMOONRAY_DEBUG", false)) }, - { "Show Info Messages", Tokens->info, VtValue(getEnv("HDMOONRAY_INFO", false)) }, - { "Rdla output", Tokens->rdlOutput, VtValue(getEnv("HDMOONRAY_RDLA_OUTPUT","")) }, - { "Disable Lighting", Tokens->disableLighting, VtValue(getEnv("HDMOONRAY_DISABLE_LIGHTING", false)) }, - { "DoubleSided", Tokens->doubleSided, VtValue(getEnv("HDMOONRAY_DOUBLESIDED", false)) }, - { "Decode Normals", Tokens->decodeNormals, VtValue(getEnv("HDMOONRAY_DOUBLESIDED", false)) }, - { "Enable Motion Blur", Tokens->enableMotionBlur, VtValue(getEnv("HDMOONRAY_ENABLE_MOTION_BLUR", true)) }, - { "Prune Willow", Tokens->pruneWillow, VtValue(getEnv("HDMOONRAY_PRUNE_WILLOW", false)) }, - { "Prune FurDeform", Tokens->pruneFurDeform, VtValue(getEnv("HDMOONRAY_PRUNE_FURDEFORM", false)) }, - { "Prune Volumes", Tokens->pruneVolume, VtValue(getEnv("HDMOONRAY_PRUNE_VOLUME", false)) }, - { "Prune WrapDeform", Tokens->pruneWrapDeform, VtValue(getEnv("HDMOONRAY_PRUNE_WRAPDEFORM", false)) }, - { "Prune CurveDeform", Tokens->pruneCurveDeform, VtValue(getEnv("HDMOONRAY_PRUNE_CURVEDEFORM", false)) }, - { "Force Polygon", Tokens->forcePolygon, VtValue(getEnv("HDMOONRAY_FORCE_POLYGON", false)) }, - { "Execution Mode", Tokens->executionMode, VtValue(getEnv("HDMOONRAY_EXEC_MODE", "auto")) }, + { "Show Debug Messages", Tokens->debug, VtValue(getEnv("HDMOONRAY_DEBUG", false)) }, + { "Show Info Messages", Tokens->info, VtValue(getEnv("HDMOONRAY_INFO", false)) }, + { "Show Render Settings", Tokens->showRenderSettings, VtValue(getEnv("HDMOONRAY_SHOW_RENDER_SETTINGS", false)) }, + { "Show Render Passes", Tokens->showRenderPasses, VtValue(getEnv("HDMOONRAY_SHOW_RENDER_PASSES", false)) }, + { "Rdla output", Tokens->rdlOutput, VtValue(getEnv("HDMOONRAY_RDLA_OUTPUT","")) }, + { "DoubleSided", Tokens->doubleSided, VtValue(getEnv("HDMOONRAY_DOUBLESIDED", false)) }, + { "Maximum Mesh Resolution", Tokens->maxMeshResolution, VtValue(getEnv("HDMOONRAY_MAX_MESH_RESOLUTION", 0.0f)) }, + { "Decode Normals", Tokens->decodeNormals, VtValue(getEnv("HDMOONRAY_DOUBLESIDED", false)) }, + { "Enable Motion Blur", Tokens->enableMotionBlur, VtValue(getEnv("HDMOONRAY_ENABLE_MOTION_BLUR", true)) }, + { "Prune Willow", Tokens->pruneWillow, VtValue(getEnv("HDMOONRAY_PRUNE_WILLOW", false)) }, + { "Prune FurDeform", Tokens->pruneFurDeform, VtValue(getEnv("HDMOONRAY_PRUNE_FURDEFORM", false)) }, + { "Prune Volumes", Tokens->pruneVolume, VtValue(getEnv("HDMOONRAY_PRUNE_VOLUME", false)) }, + { "Prune WrapDeform", Tokens->pruneWrapDeform, VtValue(getEnv("HDMOONRAY_PRUNE_WRAPDEFORM", false)) }, + { "Prune CurveDeform", Tokens->pruneCurveDeform, VtValue(getEnv("HDMOONRAY_PRUNE_CURVEDEFORM", false)) }, + { "Force Polygon", Tokens->forcePolygon, VtValue(getEnv("HDMOONRAY_FORCE_POLYGON", false)) }, + { "Execution Mode", Tokens->executionMode, VtValue(getEnv("HDMOONRAY_EXEC_MODE", "auto")) }, + { "Generate Only", Tokens->generateOnly, VtValue(getEnv("HDMOONRAY_GENERATE_ONLY", false)) } }; for (const auto& desc : descriptors) { descriptorList.push_back(desc); @@ -84,7 +87,7 @@ void RenderSettings::apply() static const TfToken houdiniInteractive("houdini:interactive"); VtValue val = mDelegate.GetRenderSetting(houdiniInteractive); - mDelegate.setIsHoudini(not val.IsEmpty()); + mDelegate.options().setIsHoudini(not val.IsEmpty()); // --------------------------------------------------------------------------------- // support render settings "moonray:sceneVariable:" and "moonray:sceneVariable_" for any @@ -105,7 +108,7 @@ void RenderSettings::apply() const std::string& attrName = (*it)->getName(); if (sDontWrite.count(attrName)) continue; - TfToken key = TfToken("moonray:sceneVariable:" + attrName); + TfToken key = TfToken("sceneVariable:" + attrName); VtValue val = mDelegate.GetRenderSetting(key); if (not val.IsEmpty()) { ValueConverter::setAttribute(&sv, *it, val); @@ -123,19 +126,30 @@ void RenderSettings::apply() sv.set(sv.sInfoKey, info); } - mDelegate.setRdlOutput(get(Tokens->rdlOutput)); - mDelegate.setDisableLighting(get(Tokens->disableLighting)); - mDelegate.setDoubleSided(get(Tokens->doubleSided)); - mDelegate.setDecodeNormals(get(Tokens->decodeNormals)); - mDelegate.setEnableMotionBlur(get(Tokens->enableMotionBlur)); - mDelegate.setPruneProcedural("WillowGeometry_v3", get(Tokens->pruneWillow)); - mDelegate.setPruneProcedural("FurDeformGeometry", get(Tokens->pruneFurDeform)); - mDelegate.setPruneProcedural("CurveDeformGeometry", get(Tokens->pruneCurveDeform)); - mDelegate.setPruneProcedural("WrapDeformGeometry", get(Tokens->pruneWrapDeform)); - mDelegate.setPruneVolume(get(Tokens->pruneVolume)); - mDelegate.setForcePolygon(get(Tokens->forcePolygon)); + mDelegate.options().setRdlOutput(get(Tokens->rdlOutput)); + mDelegate.options().setDoubleSided(get(Tokens->doubleSided)); + mDelegate.options().setDecodeNormals(get(Tokens->decodeNormals)); + mDelegate.options().setMaxMeshResolution(get(Tokens->maxMeshResolution)); + mDelegate.options().setEnableMotionBlur(get(Tokens->enableMotionBlur)); + mDelegate.options().setPruneProcedural("WillowGeometry_v3", get(Tokens->pruneWillow)); + mDelegate.options().setPruneProcedural("FurDeformGeometry", get(Tokens->pruneFurDeform)); + mDelegate.options().setPruneProcedural("CurveDeformGeometry", get(Tokens->pruneCurveDeform)); + mDelegate.options().setPruneProcedural("WrapDeformGeometry", get(Tokens->pruneWrapDeform)); + mDelegate.options().setPruneVolume(get(Tokens->pruneVolume)); + mDelegate.options().setForcePolygon(get(Tokens->forcePolygon)); + mDelegate.options().setGenerateOnly(get(Tokens->generateOnly)); + setDeepIdAttributeName(); + bool showSettings = get(Tokens->showRenderSettings); + if (showSettings && !mDelegate.options().getShowRenderSettingChanges()) { + mDelegate.options().setShowAllRenderSettings(true); + } + mDelegate.options().setShowRenderSettingChanges(showSettings); + + mDelegate.options().setShowRenderPasses(get(Tokens->showRenderPasses)); + + mDelegate.options().setSimplifyPaths(getEnv("HDMOONRAY_SIMPLIFY_PATHS", false)); } @@ -152,12 +166,41 @@ RenderSettings::getExecutionMode() const void RenderSettings::setDeepIdAttributeName(){ - TfToken key = TfToken("moonray:sceneVariable:deep_id_attribute_names"); + TfToken key = TfToken("sceneVariable:deep_id_attribute_names"); VtValue val = mDelegate.GetRenderSetting(key); if (val.IsHolding>()) { pxr::VtArray names = val.UncheckedGet>(); - mDelegate.setDeepIdAttrName(names.front()); + mDelegate.options().setDeepIdAttrName(names.front()); + } +} + +// These settings can only be applied during initial setup +/*static*/ bool +RenderSettings::staticDisableRender(HdRenderSettingsMap const& settings) +{ + auto it = settings.find(TfToken("disableRender")); + if (it != settings.end()) { + return it->second.Get(); + } + const char* v = std::getenv("HDMOONRAY_DISABLE_RENDER"); + if (v) { + return *v && *v != '0' && *v != 'f' && *v != 'F'; + } + return false; +} + +/*static*/ uint32_t +RenderSettings::staticThreads(HdRenderSettingsMap const& settings) +{ + auto it = settings.find(pxr::TfToken("threads")); + if (it != settings.end()) { + return it->second.Get(); + } + const char* v = std::getenv("HDMOONRAY_THREADS"); + if (v) { + return int(strtol(v,0,0)); } + return 0; } } // namespace hdMoonray diff --git a/lib/hydramoonray/RenderSettings.h b/lib/hydramoonray/RenderSettings.h index 2968263..95f3a3c 100644 --- a/lib/hydramoonray/RenderSettings.h +++ b/lib/hydramoonray/RenderSettings.h @@ -8,7 +8,7 @@ namespace hdMoonray { -class RenderDelegate; +class HdMoonray_RenderDelegate; // Render settings are stored generically by the RenderDelegate. The job of this class is @@ -19,7 +19,7 @@ class RenderDelegate; class RenderSettings { public: - RenderSettings(RenderDelegate& delegate) : mDelegate(delegate) {} + RenderSettings(HdMoonray_RenderDelegate& delegate) : mDelegate(delegate) {} void addDescriptors(pxr::HdRenderSettingDescriptorList& descriptorList) const; @@ -39,9 +39,14 @@ class RenderSettings std::string getExecutionMode() const; void setDeepIdAttributeName(); + // a couple of settings need to be applied before the delegate is even created, + // these are obtained by calling these functions from the plugin class + static bool staticDisableRender(pxr::HdRenderSettingsMap const& settings); + static uint32_t staticThreads(pxr::HdRenderSettingsMap const& settings); + private: - RenderDelegate& mDelegate; + HdMoonray_RenderDelegate& mDelegate; }; } diff --git a/lib/hydramoonray/Renderer.h b/lib/hydramoonray/Renderer.h index 266386e..0f909e3 100644 --- a/lib/hydramoonray/Renderer.h +++ b/lib/hydramoonray/Renderer.h @@ -3,13 +3,13 @@ #pragma once +#include "MoonrayOutput.h" +#include "PixelData.h" + #include #include #include - -#include "PixelData.h" - namespace scene_rdl2 { namespace rdl2 { class RenderOutput; } namespace fb_util { class VariablePixelBuffer; } @@ -55,22 +55,17 @@ class Renderer /// True when converged virtual bool isFrameComplete() const=0; - - /// A null RenderOutput* indicates the beauty buffer. This function should be used to test this - /// so it can be grepped for: - static bool isBeauty(const scene_rdl2::rdl2::RenderOutput* ro) { return not ro; } - /// Update the PixelData to point to readable memory of correct size. Return false if none. /// The expected size and channels are in "request" in case this cannot otherwise be determined. - virtual bool allocate(scene_rdl2::rdl2::RenderOutput*, PixelData&, const PixelSize& request) = 0; + virtual bool allocate(MoonrayOutput, PixelData&, const PixelSize& request) = 0; /// Update the PixelData to point to current image. This can alter the size, type, and data /// pointer from the result of the previous call and/or allocate(). This can return false on /// error or if it is believed the old image is the same or better. - virtual bool resolve(scene_rdl2::rdl2::RenderOutput*, PixelData&) = 0; + virtual bool resolve(MoonrayOutput, PixelData&, bool forceUpdate = false) = 0; /// Free memory allocated by allocate() or resolve(). Destructor should also free anything not deallocated - virtual void deallocate(scene_rdl2::rdl2::RenderOutput*, PixelData&) = 0; + virtual void deallocate(MoonrayOutput, PixelData&) = 0; virtual void applySettings(const RenderSettings&)=0; void setIsHoudini(bool v) { mIsHoudini = v; } diff --git a/lib/hydramoonray/ValueConverter.cc b/lib/hydramoonray/ValueConverter.cc index 23e3b85..8a78724 100644 --- a/lib/hydramoonray/ValueConverter.cc +++ b/lib/hydramoonray/ValueConverter.cc @@ -2,15 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 #include "ValueConverter.h" - -#include +#include "HdmLog.h" #include namespace hdMoonray { -using scene_rdl2::logging::Logger; - static void _clearBinding(SceneObject* sceneObj, const Attribute* attribute) { if (attribute->isBindable()) @@ -153,6 +150,10 @@ static bool _setAttribute(SceneObject* sceneObj, const Attribute* attribute, con void ValueConverter::setAttribute(SceneObject* sceneObj, const Attribute* attribute, const pxr::VtValue& val) { + if (val.IsEmpty()) { + setDefault(sceneObj, attribute); + return; + } switch(attribute->getType()) { case TYPE_BOOL: if (val.IsHolding()) { diff --git a/lib/hydramoonray/BasisCurves.cc b/lib/hydramoonray/basisCurves.cc similarity index 59% rename from lib/hydramoonray/BasisCurves.cc rename to lib/hydramoonray/basisCurves.cc index 40d2dea..273eb40 100644 --- a/lib/hydramoonray/BasisCurves.cc +++ b/lib/hydramoonray/basisCurves.cc @@ -1,7 +1,7 @@ -// Copyright 2023-2024 DreamWorks Animation LLC +// Copyright 2023-2026 DreamWorks Animation LLC // SPDX-License-Identifier: Apache-2.0 -// BasisCurves are implemented using RdlCurveGeometry +// HdMoonray_BasisCurves are implemented using RdlCurveGeometry // The following features are supported: // // - linear, bezier and bspline bases (NOT Catmull Rom) @@ -12,15 +12,14 @@ // display style ("complexity" in usd_view). As with other RDL geometry // attributes, these can be overridden by a primvar. -#include "BasisCurves.h" -#include "RenderDelegate.h" +#include "basisCurves.h" +#include "renderDelegate.h" #include "HdmLog.h" +#include "tokens.h" + #include -#include -#include using namespace pxr; - namespace { // round curves are more expensive than rayFacing, so are not generated @@ -40,7 +39,7 @@ constexpr int rdlCurveType_bspline = 2; const std::string rdlAttrCurvesSubtype("curves_subtype"); constexpr int rdlCurvesSubtype_rayFacing = 0; constexpr int rdlCurvesSubtype_round = 1; -constexpr int rdlCurvesSubtype_normalOriented = 2; +// subtype normalOriented is not used const std::string rdlAttrCurveVertexCounts("curves_vertex_count"); const std::string rdlAttrTessellationRate("tessellation_rate"); const std::string rdlAttrReverseNormals("reverse_normals"); @@ -51,26 +50,19 @@ const std::string rdlAttrRadiusList("radius_list"); namespace hdMoonray { -using scene_rdl2::logging::Logger; -using scene_rdl2::rdl2::IntVector; -using scene_rdl2::rdl2::FloatVector; -using scene_rdl2::rdl2::Vec2f; -using scene_rdl2::rdl2::Vec2fVector; - -BasisCurves::BasisCurves(SdfPath const& id) : - HdBasisCurves(id), - GeometryMixin(this) +HdMoonray_BasisCurves::HdMoonray_BasisCurves(SdfPath const& id) : + HdBasisCurves(id), HdMoonray_GeometryBase(this) {} void -BasisCurves::Finalize(HdRenderParam* renderParam) +HdMoonray_BasisCurves::Finalize(HdRenderParam* renderParam) { // causes geometry to be hidden - resetGeometryObject(RenderDelegate::get(renderParam)); + resetGeometryObject(HdMoonray_RenderDelegate::get(renderParam)); } HdDirtyBits -BasisCurves::GetInitialDirtyBitsMask() const +HdMoonray_BasisCurves::GetInitialDirtyBitsMask() const { int mask = HdChangeTracker::Clean | HdChangeTracker::DirtyPrimID @@ -90,125 +82,121 @@ BasisCurves::GetInitialDirtyBitsMask() const } void -BasisCurves::syncTopology(const HdBasisCurvesTopology& topology) +HdMoonray_BasisCurves::syncTopology(const HdBasisCurvesTopology& topology) { - VtIntArray curveVertexCounts = topology.GetCurveVertexCounts(); - const int* p = reinterpret_cast(&curveVertexCounts[0]); - geometry()->set(rdlAttrCurveVertexCounts, IntVector(p, p + curveVertexCounts.size())); - if (topology.HasIndices()) { Logger::error(GetId(), ": curve indices are not supported"); + return; + } + + if (topology.GetCurveWrap() != HdTokens->nonperiodic) { + Logger::error(GetId(), ": unsupported curve wrap '", topology.GetCurveWrap(), "'"); + return; } // note Hydra has separate type (linear, cubic) and basis (bezier, bSpline, catmullRom) // where basis is ignored for linear type. RDL has a single type enum (linear, bezier, bspline) const TfToken curveType(topology.GetCurveType()); const TfToken curveBasis(topology.GetCurveBasis()); - int rdlCurveType(rdlCurveType_bspline); + int rdlCurveType; if (curveType == HdTokens->linear) rdlCurveType = rdlCurveType_linear; else if (curveBasis == HdTokens->bezier) rdlCurveType = rdlCurveType_bezier; else if (curveBasis == HdTokens->bSpline) rdlCurveType = rdlCurveType_bspline; - else Logger::error(GetId(), ": unsupported curve basis '", curveBasis, "'"); - geometry()->set(rdlAttrCurveType, rdlCurveType); - - if (topology.GetCurveWrap() != HdTokens->nonperiodic) { - Logger::error(GetId(), ": unsupported curve wrap '", topology.GetCurveWrap(), "'"); + else { + Logger::error(GetId(), ": unsupported curve basis '", curveBasis, "'"); + return; } - geometry()->set(rdlAttrReverseNormals, bool(isMirror())); + mGeometry.set(rdlAttrCurveType, rdlCurveType); + mGeometry.set(rdlAttrCurveVertexCounts, topology.GetCurveVertexCounts()); } void -BasisCurves::syncDisplayStyle(const HdDisplayStyle& style) +HdMoonray_BasisCurves::syncDisplayStyle(const HdDisplayStyle& style) { // refineLevel is set by the "complexity" menu item in usdview // and is an integer 0 to 8. At low refineLevel, we simplify the geometry // to improve render performance. These defaults can be overridden by primvars // moonray:curves_subtype and moonray::tessellation_rate - static TfToken curvesSubtypeToken("moonray:curves_subtype"); - static TfToken tessellationRateToken("moonray:tessellation_rate"); - if (not isPrimvarUsed(curvesSubtypeToken)) { + if (not isPrimvarUsed(HdMoonrayTokens->moonray_curves_subtype)) { bool round = style.refineLevel > REFINE_LEVEL_FLAT_CURVES; - geometry()->set(rdlAttrCurvesSubtype, round ? rdlCurvesSubtype_round : + mGeometry.set(rdlAttrCurvesSubtype, round ? rdlCurvesSubtype_round : rdlCurvesSubtype_rayFacing); } - if (not isPrimvarUsed(tessellationRateToken)) { + if (not isPrimvarUsed(HdMoonrayTokens->moonray_tessellation_rate)) { int tessellationRate = (style.refineLevel < 1) ? TESS_RATE_LOW : TESS_RATE_NORMAL; - geometry()->set(rdlAttrTessellationRate, tessellationRate); + mGeometry.set(rdlAttrTessellationRate, tessellationRate); } } void -BasisCurves::syncAttributes(HdSceneDelegate* sceneDelegate, - RenderDelegate& renderDelegate, +HdMoonray_BasisCurves::syncAttributes(HdSceneDelegate* sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, HdDirtyBits* dirtyBits, const TfToken& reprToken) { - // Overridden from GeometryMixin to sync additional data in the + // Overridden from HdMoonray_GeometryBase to sync additional data in the // BasicCurves schema to RDL attributes. Will be called from syncAll() if (HdChangeTracker::IsTopologyDirty(*dirtyBits, GetId())) { syncTopology(GetBasisCurvesTopology(sceneDelegate)); } - if (HdChangeTracker::IsDisplayStyleDirty(*dirtyBits, GetId()) || - HdChangeTracker::IsTopologyDirty(*dirtyBits, GetId())) { + if (HdChangeTracker::IsDisplayStyleDirty(*dirtyBits, GetId())) { syncDisplayStyle(GetDisplayStyle(sceneDelegate)); } + if (HdChangeTracker::IsTransformDirty(*dirtyBits, GetId())) { + mGeometry.set(rdlAttrReverseNormals, isMirror()); + } + // base class handles transform and double-sided - GeometryMixin::syncAttributes(sceneDelegate, renderDelegate, dirtyBits, reprToken); + HdMoonray_GeometryBase::syncAttributes(sceneDelegate, renderDelegate, dirtyBits, reprToken); } void -BasisCurves::primvarChanged(HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate, - const TfToken& name, - const VtValue& value, - const HdInterpolation& interp, - const TfToken& role) +HdMoonray_BasisCurves::primvarChanged(HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, + const TfToken& name, + const VtValue& value, + const HdInterpolation& interp, + const TfToken& role) { - // Overridden from GeometryMixin to sync primvars that drive RDL object + // Overridden from HdMoonray_GeometryBase to sync primvars that drive RDL object // attributes. Will be called from syncAll(). // RdlCurveGeometry supports st/uv and widths via // object attributes - static const TfToken stToken("st"); - static const TfToken uvToken("uv"); - - if (name == stToken || name == uvToken) { - if (value.IsEmpty()) { - geometry()->resetToDefault(rdlAttrUvList); - } else if (value.IsHolding()) { - const VtVec2fArray& v = value.UncheckedGet(); - const Vec2f* p = reinterpret_cast(&v[0]); - geometry()->set(rdlAttrUvList, Vec2fVector(p, p + v.size())); - } + if (name == HdMoonrayTokens->st || name == HdMoonrayTokens->uv) { + mGeometry.set(rdlAttrUvList, value); } else if (name == HdTokens->widths) { if (value.IsEmpty()) { - geometry()->resetToDefault(rdlAttrRadiusList); + mGeometry.setToDefault(rdlAttrRadiusList); } else if (value.IsHolding()) { const VtFloatArray& v = value.UncheckedGet(); - FloatVector w{v.begin(), v.end()}; + VtFloatArray w{v.begin(), v.end()}; // width is diameter : convert to radius for (float& r : w) r /= 2; - geometry()->set(rdlAttrRadiusList, std::move(w)); + mGeometry.set(rdlAttrRadiusList, w); + } else { + Logger::error(GetId(), ": unsupported type for widths primvar"); + mGeometry.setToDefault(rdlAttrRadiusList); } } else { - // allow GeometryMixin to handle all other cases, including + // allow HdMoonray_GeometryBase to handle all other cases, including // primvar overrides and UserData - GeometryMixin::primvarChanged(sceneDelegate, renderDelegate, + HdMoonray_GeometryBase::primvarChanged(sceneDelegate, renderDelegate, name, value, interp, role); } } void -BasisCurves::Sync(HdSceneDelegate *sceneDelegate, - HdRenderParam *renderParam, - HdDirtyBits *dirtyBits, - TfToken const &reprToken) +HdMoonray_BasisCurves::Sync(HdSceneDelegate *sceneDelegate, + HdRenderParam *renderParam, + HdDirtyBits *dirtyBits, + TfToken const &reprToken) { hdmLogSyncStart("BasisCurves", GetId(), dirtyBits); - RenderDelegate& renderDelegate(RenderDelegate::get(renderParam)); + HdMoonray_RenderDelegate& renderDelegate(HdMoonray_RenderDelegate::get(renderParam)); _UpdateVisibility(sceneDelegate, dirtyBits); _UpdateInstancer(sceneDelegate, dirtyBits); diff --git a/lib/hydramoonray/BasisCurves.h b/lib/hydramoonray/basisCurves.h similarity index 66% rename from lib/hydramoonray/BasisCurves.h rename to lib/hydramoonray/basisCurves.h index 9b37db7..ea3497a 100644 --- a/lib/hydramoonray/BasisCurves.h +++ b/lib/hydramoonray/basisCurves.h @@ -3,15 +3,16 @@ #pragma once -#include "GeometryMixin.h" +#include "geometryBase.h" #include namespace hdMoonray { -class BasisCurves final : public pxr::HdBasisCurves, public GeometryMixin +class HdMoonray_BasisCurves final : public pxr::HdBasisCurves, public HdMoonray_GeometryBase { public: - explicit BasisCurves(pxr::SdfPath const& id); + + explicit HdMoonray_BasisCurves(pxr::SdfPath const& id); pxr::HdDirtyBits GetInitialDirtyBitsMask() const override; @@ -28,15 +29,17 @@ class BasisCurves final : public pxr::HdBasisCurves, public GeometryMixin void _InitRepr(pxr::TfToken const &reprToken, pxr::HdDirtyBits *dirtyBits) override {} pxr::HdDirtyBits _PropagateDirtyBits(pxr::HdDirtyBits bits) const override { return bits; } - // GeometryMixin overrides - void syncAttributes(pxr::HdSceneDelegate* sceneDelegate, RenderDelegate& renderDelegate, + // HdMoonray_GeometryBase overrides + void syncAttributes(pxr::HdSceneDelegate* sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, pxr::HdDirtyBits* dirtyBits, const pxr::TfToken& reprToken) override; - void primvarChanged(pxr::HdSceneDelegate *sceneDelegate, RenderDelegate& renderDelegate, + void primvarChanged(pxr::HdSceneDelegate *sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, const pxr::TfToken& name, const pxr::VtValue& value, const pxr::HdInterpolation& interp, const pxr::TfToken& role) override; + private: - BasisCurves(const BasisCurves&) = delete; - BasisCurves &operator =(const BasisCurves&) = delete; + + HdMoonray_BasisCurves(const HdMoonray_BasisCurves&) = delete; + HdMoonray_BasisCurves &operator =(const HdMoonray_BasisCurves&) = delete; void syncTopology(const pxr::HdBasisCurvesTopology& topology); void syncDisplayStyle(const pxr::HdDisplayStyle& style); diff --git a/lib/hydramoonray/camera.cc b/lib/hydramoonray/camera.cc new file mode 100644 index 0000000..2883d04 --- /dev/null +++ b/lib/hydramoonray/camera.cc @@ -0,0 +1,307 @@ +// Copyright 2023-2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +// Camera Sprim, implemented by RDL2 PerspectiveCamera +// +// This is complicated by the fact that earlier versions of Moonray did not like changing +// which camera was used after the first render, so this copies all the perspective +// cameras to a single primary camera. This may be fixed now and can be removed. + +#include "camera.h" +#include "MoonrayObject.h" +#include "geometryBase.h" +#include "renderDelegate.h" +#include "ValueConverter.h" +#include "HdmLog.h" +#include "tokens.h" + +#include +#include "pxr/base/gf/frustum.h" +#include "pxr/base/gf/camera.h" + +#include + +// define this to avoid switching the identity of the perspective camera +// (see HDM-95/HDM-351) +#define DONT_SWITCH_PERSPECTIVE_CAMERA + +using namespace pxr; + +namespace { + std::atomic pCamera{nullptr}; +} + +namespace hdMoonray { + +HdDirtyBits +HdMoonray_Camera::GetInitialDirtyBitsMask() const +{ + return DirtyBits::AllDirty; +} + +void +HdMoonray_Camera::Sync(HdSceneDelegate* sceneDelegate, + HdRenderParam* renderParam, + HdDirtyBits* dirtyBits) +{ + const SdfPath &id = GetId(); + hdmLogSyncStart("Camera", id, dirtyBits); + + + HdMoonray_RenderDelegate& renderDelegate(HdMoonray_RenderDelegate::get(renderParam)); + + // Remember the dirty bits, as HdCamera::Sync clears them + HdDirtyBits bits(*dirtyBits); + + // must call this first, it updates members like GetViewMatrix(): + HdCamera::Sync(sceneDelegate, renderParam, dirtyBits); + + // determine the type of camera (orthographic or perspective or custom RDL) + TfToken newClass; + // Use the moonray:class, otherwise guess from the projection matrix (the + // "projection" attribute is not set by usdview for interactive camera) + { + VtValue v = sceneDelegate->GetCameraParamValue(GetId(), HdMoonrayTokens->moonray_class); + if (v.IsHolding()) { + newClass = v.UncheckedGet(); + if (!renderDelegate.scene().checkClassInterface(newClass.GetString(), + hdMoonray::MoonrayAttribute::InterfaceType::INTERFACE_CAMERA)) { + Logger::error(GetId(), ": invalid MoonRay camera class '", newClass, "', using PerspectiveCamera"); + newClass = HdMoonrayTokens->PerspectiveCamera; + } + } else { + if (GetProjection() == HdCamera::Orthographic) { + newClass = HdMoonrayTokens->OrthographicCamera; + } else { + newClass = HdMoonrayTokens->PerspectiveCamera; + } + } + } + + // The camera is created lazily + std::lock_guard lock(mMutex); + mSceneDelegate = sceneDelegate; // need to do this under lock to avoid race with setAsPrimaryCamera + + if (newClass != mClass) { + mClass = newClass; + mMoonrayCamera = MoonrayObject(); + } else if (mMoonrayCamera.isValid()) { + updateCamera(sceneDelegate, renderDelegate, bits); + } + + hdmLogSyncEnd(id); +} + +// create the RDL camera if it doesn't exist, and update to match HdCamera +// mMutex must be locked when this is called +MoonrayObject +HdMoonray_Camera::createCameraInternal(HdSceneDelegate* sceneDelegate, HdMoonray_RenderDelegate& renderDelegate) +{ + if (mMoonrayCamera.isNull()) { + mMoonrayCamera = renderDelegate.scene().createObject(mClass.GetString(), GetId()); + updateCamera(sceneDelegate, renderDelegate, DirtyBits::AllDirty); + } + return mMoonrayCamera; +} + +// static function to ensure the camera is created at a given path and update it +MoonrayObject +HdMoonray_Camera::createCamera(HdSceneDelegate* sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, const SdfPath& path) +{ + HdMoonray_Camera* camera = + dynamic_cast(sceneDelegate->GetRenderIndex().GetSprim(HdPrimTypeTokens->camera, path)); + if (camera) { + std::lock_guard lock(camera->mMutex); + return camera->createCameraInternal(sceneDelegate, renderDelegate); + } + return nullptr; +} + +// update the existing RDL camera (mCamera) based on the Hydra values and dirty mask +// mCamera must exist when this is called, and mMutex must be locked +void +HdMoonray_Camera::updateCamera(HdSceneDelegate* sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, HdDirtyBits bits) +{ + const SdfPath& id = GetId(); + UpdateGuard guard(renderDelegate, mMoonrayCamera); + + VtValue v = sceneDelegate->GetCameraParamValue(id, HdCameraTokens->shutterOpen); + if (not v.IsEmpty()) { + mShutterOpen = (v.IsHolding()) ? (v.UncheckedGet()) : v.Get(); + } + + v = sceneDelegate->GetCameraParamValue(id, HdCameraTokens->shutterClose); + if (not v.IsEmpty()) { + mShutterClose = (v.IsHolding()) ? (v.UncheckedGet()) : v.Get(); + } + + // update the inverse view matrix (in RDL this is node_xform) + if (bits & HdCamera::DirtyBits::DirtyTransform) { + + HdTimeSampleArray sampledXforms; + sceneDelegate->SampleTransform(id, mShutterOpen, mShutterClose, &sampledXforms); + if (sampledXforms.count <= 1) { + // if there's only one sample, it should match the cached value + mMoonrayCamera.set("node_xform", GetTransform()); + } else { + // first and last samples will be sample interval boundaries + GfCamera cam(sampledXforms.values[0]); + GfFrustum frustum = cam.GetFrustum(); + GfMatrix4d viewInverse0 = frustum.ComputeViewMatrix().GetInverse(); + cam.SetTransform(sampledXforms.values[sampledXforms.count-1]); + frustum = cam.GetFrustum(); + GfMatrix4d viewInverse1 = frustum.ComputeViewMatrix().GetInverse(); + mMoonrayCamera.set("node_xform", viewInverse0, viewInverse1); + } + mXformChanged = true; + } + + // update the projection parameters. + if ((bits & HdCamera::DirtyBits::DirtyParams) && + (mClass == HdMoonrayTokens->PerspectiveCamera || + mClass == HdMoonrayTokens->OrthographicCamera)) { + + // These are in mm in USD and RDL, but Hydra uses cm, so we need to multiply by 10 + float apertureWidth = 10*GetHorizontalAperture(); + float apertureHeight = 10*GetVerticalAperture(); + float focalLength = 10*GetFocalLength(); + float horizOffset = 10*GetHorizontalApertureOffset(); + float vertOffset = 10*GetVerticalApertureOffset(); + + mNear = GetClippingRange().GetMin(); + mFar = GetClippingRange().GetMax(); + + // apertureWidth/apertureHeight gives us the camera aspect ratio. + // if necessary, we adjust this based on the requested image aspect ratio (mDesiredAspectRatio) + // and the window policy. Note that the RDL camera only specifies apertureWidth, so + // it's not clear that all conform options will work + GfVec2d adjustedAperture(apertureWidth, apertureHeight); + if (mDesiredAspectRatio != 0.0) { + adjustedAperture = CameraUtilConformedWindow(adjustedAperture, GetWindowPolicy(), mDesiredAspectRatio); + } + + // according to MOONRAY-4278, vertical offset needs to be adjusted + if (apertureHeight != 0) { + vertOffset *= adjustedAperture[0]/apertureHeight; + } + + mMoonrayCamera.set("film_width_aperture", (float)adjustedAperture[0]); + mMoonrayCamera.set("horizontal_film_offset", horizOffset); + mMoonrayCamera.set("vertical_film_offset", vertOffset); + mMoonrayCamera.set("near", mNear); + mMoonrayCamera.set("far", mFar); + + if (mClass == HdMoonrayTokens->PerspectiveCamera) { + mMoonrayCamera.set("focal", focalLength); + } + + mProjChanged = true; + } + + // handles all other params + if (bits & DirtyBits::DirtyParams) { + + VtValue v; + + // motion params + if (mClass == HdMoonrayTokens->PerspectiveCamera || + mClass == HdMoonrayTokens->OrthographicCamera) { + const float fStop = GetFStop(); + mMoonrayCamera.set("dof", fStop != 0.0); + if (fStop) { + mMoonrayCamera.set("dof_aperture", fStop); // Rdl2 "dof_aperture" is actually fStop ratio + const float focusDistance = GetFocusDistance(); + mMoonrayCamera.set("dof_focus_distance", focusDistance); + } + } + + mMoonrayCamera.set("mb_shutter_open", mShutterOpen); + mMoonrayCamera.set("mb_shutter_close", mShutterClose); + + // overwrite any attributes with moonray:xyz attributes + + for (auto it = mMoonrayCamera.beginAttributes(); it != mMoonrayCamera.endAttributes(); ++it) { + const std::string& attrName = (*it).name(); + VtValue val = sceneDelegate->GetCameraParamValue(id, TfToken("moonray:"+attrName)); + if (!val.IsEmpty()) { + (*it).set(val); + } + // TO DO: we should revert any attributes that are no longer set, but we don't have a way to know which ones those are + } + mParamsChanged = true; + } + + // DirtyBits::DirtyWindowPolicy) + // The value of GetWindowPolicy() was already updated by HdCamera::Sync() + // DirtyBits::DirtyClipPlanes) + // arbitrary clipping planes, not supported by Moonray +} + +// Set this camera as the camera to use when rendering +// +// This code actually maintains a single RDL perspective camera ("primaryCamera"), and sets this camera as +// active by copying the parameters into "primaryCamera". The original motivation was that changing the +// scene camera identity interactively doesn't work (see HDM-95). This is now addressed, but there are +// some open questions about performance and accuracy of these two approaches (see HDM-351) +// +// aspectRatio is the shape of the image. The camera's window policy (GetWindowPolicy) +// will be used to adjust the camera as needed to match. +void +HdMoonray_Camera::setAsPrimaryCamera(HdMoonray_RenderDelegate& renderDelegate, double aspectRatio) +{ + std::lock_guard lock(mMutex); + if (mSceneDelegate == nullptr) { + Logger::error(GetId(), ": setAsPrimaryCamera() called before Sync()"); + return; + } + createCameraInternal(mSceneDelegate, renderDelegate); + + if (aspectRatio != mDesiredAspectRatio) { + mDesiredAspectRatio = aspectRatio; + if (mMoonrayCamera.isValid()) { + // will adjust camera to match mDesiredAspectRatio + updateCamera(mSceneDelegate, renderDelegate, HdCamera::DirtyBits::DirtyParams); + } + } + + MoonrayObject cameraToUse; + +#ifdef DONT_SWITCH_PERSPECTIVE_CAMERA // see HDM-351 + if (mClass == HdMoonrayTokens->PerspectiveCamera) { + // update single perspective camera in-place + if (this == pCamera) { + if (not mXformChanged && not mProjChanged && not mParamsChanged) return; + } else { + pCamera = this; + } + MoonrayObject primary = cameraToUse = renderDelegate.scene().primaryCamera(); + UpdateGuard guard(renderDelegate, primary); + primary.copyFrom(mMoonrayCamera); + mXformChanged = false; + mProjChanged = false; + mParamsChanged = false; + } else + +#endif // DONT_SWITCH_PERSPECTIVE_CAMERA + { + if (this == pCamera) return; + pCamera = this; + cameraToUse = mMoonrayCamera.sceneObjectAs(); + } + rdl2::SceneVariables& wsv(renderDelegate.acquireSceneContext().getSceneVariables()); + UpdateGuard guard(wsv); + wsv.set(wsv.sCamera, cameraToUse.sceneObjectAs()); +} + +void +HdMoonray_Camera::Finalize(HdRenderParam *renderParam) +{ + if (this == pCamera) pCamera = nullptr; + HdCamera::Finalize(renderParam); +} + +HdMoonray_Camera::~HdMoonray_Camera() +{ +} + +} diff --git a/lib/hydramoonray/Camera.h b/lib/hydramoonray/camera.h similarity index 56% rename from lib/hydramoonray/Camera.h rename to lib/hydramoonray/camera.h index d9a102c..844ded7 100644 --- a/lib/hydramoonray/Camera.h +++ b/lib/hydramoonray/camera.h @@ -1,51 +1,53 @@ -// Copyright 2023-2024 DreamWorks Animation LLC +// Copyright 2023-2026 DreamWorks Animation LLC // SPDX-License-Identifier: Apache-2.0 #pragma once +#include "MoonrayObject.h" #include -namespace scene_rdl2 {namespace rdl2 { class Camera; } } #include namespace hdMoonray { -class RenderDelegate; + class HdMoonray_RenderDelegate; -class Camera: public pxr::HdCamera +class HdMoonray_Camera: public pxr::HdCamera { public: - explicit Camera(const pxr::SdfPath& id): pxr::HdCamera(id) {} + explicit HdMoonray_Camera(const pxr::SdfPath& id): pxr::HdCamera(id) {} - /// Dirty bits to pass to first call to Sync() pxr::HdDirtyBits GetInitialDirtyBitsMask() const override; - /// Update the data identified by dirtyBits. Must not query other data. void Sync(pxr::HdSceneDelegate* sceneDelegate, pxr::HdRenderParam* renderParam, pxr::HdDirtyBits* dirtyBits) override; void Finalize(pxr::HdRenderParam *renderParam) override; - ~Camera(); + ~HdMoonray_Camera(); - scene_rdl2::rdl2::Camera* createCamera(pxr::HdSceneDelegate*, RenderDelegate&); - static scene_rdl2::rdl2::Camera* createCamera(pxr::HdSceneDelegate*, RenderDelegate&, const pxr::SdfPath&); + static MoonrayObject createCamera(pxr::HdSceneDelegate*, HdMoonray_RenderDelegate&, const pxr::SdfPath&); float getNear() const { return mNear; } float getFar() const { return mFar; } + std::pair getShutterInterval() const { return std::make_pair(mShutterOpen, mShutterClose); } - std::pair getTimeSamplingInterval() const; - - void setAsPrimaryCamera(RenderDelegate&, double aspectRatio); + void setAsPrimaryCamera(HdMoonray_RenderDelegate&, double aspectRatio); pxr::HdSceneDelegate* getSceneDelegate() const { return mSceneDelegate; } private: + + MoonrayObject createCameraInternal(pxr::HdSceneDelegate*, HdMoonray_RenderDelegate&); pxr::HdSceneDelegate* mSceneDelegate = nullptr; // set by Sync, needed by setAsPrimaryCamera - void updateCamera(pxr::HdSceneDelegate*, RenderDelegate&, pxr::HdDirtyBits bits); - scene_rdl2::rdl2::Camera* mCamera = nullptr; - std::mutex mCreateMutex; + void updateCamera(pxr::HdSceneDelegate*, HdMoonray_RenderDelegate&, pxr::HdDirtyBits bits); + + MoonrayObject mMoonrayCamera; + + std::mutex mMutex; float mNear = 1; float mFar = 10000; + float mShutterOpen = 0; + float mShutterClose = 0; // set to aspect ratio of image when camera is selected for rendering // the aperture ratio of the camera may be adjusted to match by updateCamera() diff --git a/lib/hydramoonray/GeometryMixin.cc b/lib/hydramoonray/geometryBase.cc similarity index 52% rename from lib/hydramoonray/GeometryMixin.cc rename to lib/hydramoonray/geometryBase.cc index fcd81ea..4eb5b6d 100644 --- a/lib/hydramoonray/GeometryMixin.cc +++ b/lib/hydramoonray/geometryBase.cc @@ -1,83 +1,76 @@ // Copyright 2023-2024 DreamWorks Animation LLC // SPDX-License-Identifier: Apache-2.0 -// Primvar-related functions on GeometryMixin are in Primvars.cc +// Primvar-related functions are in Primvars.cc -#include "GeometryMixin.h" -#include "Instancer.h" -#include "RenderDelegate.h" -#include "Material.h" +#include "geometryBase.h" +#include "instancer.h" +#include "renderDelegate.h" +#include "material.h" #include "ValueConverter.h" +#include "tokens.h" + #include -#include -#include -#include #include -#include using namespace pxr; -using namespace scene_rdl2::rdl2; -using scene_rdl2::logging::Logger; - -namespace { - // primvar used to set side type - const TfToken primvarMoonraySideType{"moonray:side_type"}; -} namespace hdMoonray { void -GeometryMixin::resetGeometryObject(RenderDelegate& renderDelegate) +HdMoonray_GeometryBase::resetGeometryObject(HdMoonray_RenderDelegate& renderDelegate) { - if (mGeometry) { + if (mGeometry.isValid()) { // RDL objects cannot be deleted, so hide the object // Also used to hide objects to fix Pixar bug // https://github.com/PixarAnimationStudios/USD/issues/801 UpdateGuard guard(renderDelegate, mGeometry); forceInvisible(); - mGeometry = nullptr; + mGeometry = MoonrayObject(); } } bool -GeometryMixin::createGeometry(RenderDelegate& renderDelegate, - const std::string& className) +HdMoonray_GeometryBase::createGeometry(HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, + const std::string& className) { // create the geometry. Returns true if sync should continue // if this class is pruned, don't create the object, and // hide it if it already exists - if (renderDelegate.getPruneProcedural(className) || - (isVolume() && renderDelegate.getPruneVolume())) { + if (renderDelegate.options().getPruneProcedural(className) || + (isVolume() && renderDelegate.options().getPruneVolume())) { resetGeometryObject(renderDelegate); return false; } - if (mGeometry) { + if (mGeometry.isValid()) { return true; } - - SceneObject* object = renderDelegate.createSceneObject(className, rprim.GetId()); - // if there was an error this already printed an error message - if (object) { - mGeometry = object->asA(); - // since RDL cannot delete objects, we may get back an existing object that + + renderDelegate.scene().simplifyPath(rprim.GetId(), sceneDelegate); + + mGeometry = renderDelegate.scene().createObject(className, rprim.GetId()); + if (mGeometry.isValid()) { + // RDL objects cannot be deleted, so we may get back an existing object that // is no longer in use. We want to reset all attributes so that sync is correct. UpdateGuard guard(renderDelegate, mGeometry); - mGeometry->resetAllToDefault(); - } - return mGeometry != nullptr; + mGeometry.resetToDefault(); + } + + return mGeometry.isValid(); } void -GeometryMixin::syncAll(const std::string& className, - HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate, - HdDirtyBits *dirtyBits, - TfToken const &reprToken) +HdMoonray_GeometryBase::syncAll(const std::string& className, + HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, + HdDirtyBits *dirtyBits, + TfToken const &reprToken) { // create the RDL object - if (createGeometry(renderDelegate, className)) { + if (createGeometry(sceneDelegate, renderDelegate, className)) { // mGeometry must be non-null UpdateGuard guard(renderDelegate, mGeometry); @@ -102,10 +95,10 @@ GeometryMixin::syncAll(const std::string& className, } void -GeometryMixin::syncAttributes(HdSceneDelegate* sceneDelegate, - RenderDelegate& renderDelegate, - HdDirtyBits* dirtyBits, - const TfToken& reprToken) +HdMoonray_GeometryBase::syncAttributes(HdSceneDelegate* sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, + HdDirtyBits* dirtyBits, + const TfToken& reprToken) { // sync plain attributes. Should be called after syncPrimvars, since // it uses the list mAppliedPrimvars to avoid overwriting any primvar overrides @@ -119,62 +112,56 @@ GeometryMixin::syncAttributes(HdSceneDelegate* sceneDelegate, // cannot be overridden by a primvar if (HdChangeTracker::IsTransformDirty(*dirtyBits, id)) { HdTimeSampleArray sampledXforms; - sceneDelegate->SampleTransform(id, &sampledXforms); + std::pair sampleInterval = renderDelegate.scene().getTimeSamplingInterval(); + sceneDelegate->SampleTransform(id, sampleInterval.first, sampleInterval.second, &sampledXforms); // if there's only one sample, it should match the cached value if (sampledXforms.count <= 1) { - mGeometry->set(mGeometry->sNodeXformKey, - reinterpret_cast(sampledXforms.values[0])); - mMirror = sampledXforms.values[0].GetDeterminant() < 0; // workaround for MOONRAY-3512 + mGeometry.set("node_xform",sampledXforms.values[0]); } else { // first and last samples will be sample interval boundaries - mGeometry->set(mGeometry->sNodeXformKey, - reinterpret_cast(sampledXforms.values[0])); - mGeometry->set(mGeometry->sNodeXformKey, - reinterpret_cast(sampledXforms.values[sampledXforms.count-1]), - TIMESTEP_END); - mMirror = sampledXforms.values[0].GetDeterminant() < 0; // workaround for MOONRAY-3512 + mGeometry.set("node_xform",sampledXforms.values[0], sampledXforms.values[sampledXforms.count-1]); } + mMirror = sampledXforms.values[0].GetDeterminant() < 0; // workaround for MOONRAY-3512 } // side_type can be overridden by a primvar, so we have to check this hasn't happened if (HdChangeTracker::IsDoubleSidedDirty(*dirtyBits, id)) { - if (!isPrimvarUsed(primvarMoonraySideType)) { + if (!isPrimvarUsed(HdMoonrayTokens->moonray_side_type)) { int side_type = 1; // force single-sided - if (renderDelegate.isDoubleSided() || sceneDelegate->GetDoubleSided(id)) { + if (renderDelegate.options().isDoubleSided() || sceneDelegate->GetDoubleSided(id)) { side_type = 0; // force two-sided } - mGeometry->set(mGeometry->sSideTypeKey, side_type); + mGeometry.set("side_type", side_type); } } } void -GeometryMixin::addUserData(pxr::TfToken key, - scene_rdl2::rdl2::UserData* userData) +HdMoonray_GeometryBase::addUserData(pxr::TfToken key, + const MoonrayObject& userData) { mUserData[key] = userData; mUserDataChanged = true; } void -GeometryMixin::syncPrimitiveAttributes() +HdMoonray_GeometryBase::syncPrimitiveAttributes() { // update the object's user data list, if it has changed and the class has it. // this is done near the end, so that other sync code can add user data via the // function above (e.g.the code to generate cryptomatte ids, which depends on the topology) if (mUserDataChanged && supportsUserData()) { - SceneObjectVector userDatas; - userDatas.reserve(mUserData.size()); + MoonrayObjectVector userDatas; for (auto& i : mUserData) { - userDatas.push_back(i.second); + userDatas.append(i.second); } - mGeometry->set("primitive_attributes", userDatas); + mGeometry.set("primitive_attributes", userDatas); mUserDataChanged = false; } } void -GeometryMixin::assign(HdSceneDelegate* sceneDelegate, - RenderDelegate& renderDelegate, +HdMoonray_GeometryBase::assign(HdSceneDelegate* sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, HdDirtyBits* dirtyBits) { // perform material and light assignment and instance creation @@ -214,48 +201,40 @@ GeometryMixin::assign(HdSceneDelegate* sceneDelegate, categories = instCategories[0]; } } - + // renderDelegate can translate the categories to RDL objects and - // fill in an RDL LayerAssignment object with the proper light set - LayerAssignment assignment; - renderDelegate.updateAssignmentFromCategories(assignment, categories); + // fill in a Assignment object with the proper light set + MoonrayAssignment assignment; + renderDelegate.scene().updateAssignmentFromCategories(assignment, categories); // fill in the material assignment - Material::get(assignment, - rprim.GetMaterialId(), - renderDelegate, - sceneDelegate, - &rprim, - isVolume()); + HdMoonray_Material::assign(assignment, + rprim.GetMaterialId(), + renderDelegate, + sceneDelegate, + isVolume()); // add the assignment to the Layer table - renderDelegate.assign(mGeometry, assignment); + renderDelegate.scene().assign(mGeometry, assignment); // repeat for all parts in the part list for (size_t i = 0; i < partList.size(); ++i) { // when instanced. light linking for parts can only be inherited from the instancer if (instancerId.IsEmpty()) { // not instanced : there could be light linking on the GeomSubset - // --- - // HDM-374 : GetCategories() does not work for GeomSubset paths, at least in - // HdSceneIndexAdapterSceneDelegate at ver 0.22.5 : in fact the subsets don't seem to have - // an HdSceneIndexPrim at all. So we use the categories of the full mesh: - renderDelegate.updateAssignmentFromCategories(assignment, categories); - // This is the correct implementation (if it worked...) - //renderDelegate.updateAssignmentFromCategories(assignment, sceneDelegate->GetCategories(partPaths[i])); + renderDelegate.scene().updateAssignmentFromCategories(assignment, sceneDelegate->GetCategories(partPaths[i])); } - Material::get(assignment, - partMaterials[i], - renderDelegate, - sceneDelegate, - &rprim, - isVolume()); - renderDelegate.assign(mGeometry, partList[i], assignment); + HdMoonray_Material::assign(assignment, + partMaterials[i], + renderDelegate, + sceneDelegate, + isVolume()); + renderDelegate.scene().assign(mGeometry, partList[i], assignment); } } else { forceInvisible(); - renderDelegate.addUnassigned(mGeometry); + renderDelegate.scene().addUnassigned(mGeometry); } } @@ -263,56 +242,54 @@ GeometryMixin::assign(HdSceneDelegate* sceneDelegate, if (HdChangeTracker::IsInstancerDirty(*dirtyBits, id) || HdChangeTracker::IsInstanceIndexDirty(*dirtyBits, id) || HdChangeTracker::IsTransformDirty(*dirtyBits, id)) { - Instancer* instancer = static_cast( + HdMoonray_Instancer* instancer = static_cast( sceneDelegate->GetRenderIndex().GetInstancer(instancerId)); if (instancer) { - instancer->makeInstanceGeometry(id, mGeometry, this, 0); + instancer->makeInstanceGeometry(id, "", mGeometry, this, 0); } } } namespace { - struct AttrPair {const scene_rdl2::rdl2::AttributeKey& moonrayKey; pxr::TfToken usdKey;}; - - const AttrPair visibleAttrs[] = { - { scene_rdl2::rdl2::Geometry::sVisibleCamera, pxr::TfToken("moonray:visible_in_camera") }, - { scene_rdl2::rdl2::Geometry::sVisibleShadow, pxr::TfToken("moonray:visible_shadow") }, - { scene_rdl2::rdl2::Geometry::sVisibleDiffuseReflection, pxr::TfToken("moonray:visible_diffuse_reflection") }, - { scene_rdl2::rdl2::Geometry::sVisibleDiffuseTransmission, pxr::TfToken("moonray:visible_diffuse_transmission") }, - { scene_rdl2::rdl2::Geometry::sVisibleGlossyReflection, pxr::TfToken("moonray:visible_glossy_reflection") }, - { scene_rdl2::rdl2::Geometry::sVisibleGlossyTransmission, pxr::TfToken("moonray:visible_glossy_transmission") }, - { scene_rdl2::rdl2::Geometry::sVisibleMirrorReflection, pxr::TfToken("moonray:visible_mirror_reflection") }, - { scene_rdl2::rdl2::Geometry::sVisibleMirrorTransmission, pxr::TfToken("moonray:visible_mirror_transmission") }, - { scene_rdl2::rdl2::Geometry::sVisiblePhase, pxr::TfToken("moonray:visible_volume") }, + const std::string visibleAttrs[] = { + "visible_in_camera", + "visible_shadow", + "visible_diffuse_reflection", + "visible_diffuse_transmission", + "visible_glossy_reflection", + "visible_glossy_transmission", + "visible_mirror_reflection", + "visible_mirror_transmission", + "visible_volume" }; } void -GeometryMixin::forceInvisible() +HdMoonray_GeometryBase::forceInvisible() { // make sure the geometry object is invisible in all cases for (const auto& i : visibleAttrs) { - mGeometry->set(i.moonrayKey, false); + mGeometry.set(i, false); } // flag that we did this, to avoid restoring unnecessarily mForcedInvisible = true; } void -GeometryMixin::restoreVisibility(HdSceneDelegate* sceneDelegate) +HdMoonray_GeometryBase::restoreVisibility(HdSceneDelegate* sceneDelegate) { // check that we are in a forced invisible state if (!mForcedInvisible) return; // we have to reread every primvar that affects visibility for (const auto& i : visibleAttrs) { - VtValue val = rprim.GetPrimvar(sceneDelegate, i.usdKey); + VtValue val = rprim.GetPrimvar(sceneDelegate, TfToken("moonray:" + i)); bool vis = true; // allow the primvars to be int or bool if (val.IsHolding()) vis = val.UncheckedGet(); else if (val.IsHolding()) vis = (val.UncheckedGet() != 0); - mGeometry->set(i.moonrayKey, vis); + mGeometry.set(i, vis); } mForcedInvisible = false; } diff --git a/lib/hydramoonray/GeometryMixin.h b/lib/hydramoonray/geometryBase.h similarity index 75% rename from lib/hydramoonray/GeometryMixin.h rename to lib/hydramoonray/geometryBase.h index d4bd784..d4a1602 100644 --- a/lib/hydramoonray/GeometryMixin.h +++ b/lib/hydramoonray/geometryBase.h @@ -3,19 +3,15 @@ #pragma once +#include "MoonrayObject.h" #include #include -namespace scene_rdl2 {namespace rdl2 { - class Geometry; - class UserData; -} } - namespace hdMoonray { -class RenderDelegate; +class HdMoonray_RenderDelegate; -// This is a mix-in class providing shared code for all Geometry prims +// This is a base class providing shared code for all Geometry prims // // syncAll provides the basic sync implementation for all geometry: // - Handles transform and double-sided sync from the sceneDelegate to RDL attrs @@ -27,7 +23,7 @@ class RenderDelegate; // - Performs material and light assignment and instancing // // To sync additional sceneDelegate properties (e.g. topology, display style) to RDL, -// override "syncAttributes". Call GeometryMixin::syncAttributes() at the end of the +// override "syncAttributes". Call HdMoonray_GeometryBase::syncAttributes() at the end of the // overridden version to handle the common properties (transform, double-sided). // syncAttributes is called _after_ primvar overrides have been applied : if an attribute // should be overridable by a "moonray:xyz" primvar, check by calling "isPrimvarUsed" and @@ -35,34 +31,33 @@ class RenderDelegate; // // To handle additional cases where primvars drive RDL attributes directly (e.g. st/uv and normals) // override "primvarChanged". If a primvar is not handled by this code, call -// GeometryMixin::primvarChanged() from the overridden version to handle the standard cases. +// HdMoonray_GeometryBase::primvarChanged() from the overridden version to handle the standard cases. // // See Mesh and BasisCurves for typical subclass examples -class GeometryMixin +class HdMoonray_GeometryBase { public: - GeometryMixin(pxr::HdRprim* p): rprim(*p) {} + HdMoonray_GeometryBase(pxr::HdRprim* p): rprim(*p) {} const pxr::SdfPath& getId() const { return rprim.GetId(); } - - // Return geometry if it has already been created - scene_rdl2::rdl2::Geometry* geometry() const { return mGeometry; } - bool isPrimvarUsed(const pxr::TfToken& name) { return mAppliedPrimvars.count(name) > 0; } protected: + // RDL geometry object generated for the rprim + MoonrayObject mGeometry; + // Creates geometry if needed and performs sync. // The subfunctions below should be overridden to customize behavior. // clears dirtyBits void syncAll(const std::string& className, - pxr::HdSceneDelegate *sceneDelegate, RenderDelegate& renderDelegate, + pxr::HdSceneDelegate *sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, pxr::HdDirtyBits *dirtyBits, pxr::TfToken const &reprToken); // Sync normal attributes (not primvars). Check for an overriding primvar before // setting a value. The default impl syncs transform and double-sided - virtual void syncAttributes(pxr::HdSceneDelegate* sceneDelegate, RenderDelegate& renderDelegate, + virtual void syncAttributes(pxr::HdSceneDelegate* sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, pxr::HdDirtyBits* dirtyBits, const pxr::TfToken& reprToken); // Sync a given primvar. If value is empty, the primvar was removed. @@ -70,10 +65,13 @@ class GeometryMixin // - points/velocities/accelerations, // - overrides ("moonray:..." primvars) // - regular primvars (without the "moonray:" prefix) produce userData - virtual void primvarChanged(pxr::HdSceneDelegate *sceneDelegate, RenderDelegate& renderDelegate, + virtual void primvarChanged(pxr::HdSceneDelegate *sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, const pxr::TfToken& name, const pxr::VtValue& value, const pxr::HdInterpolation& interp, const pxr::TfToken& role); + // syncs an overriding primvar ("moonray:...") + virtual void primvarAttributeOverride(const std::string& name, const pxr::VtValue& value, HdMoonray_RenderDelegate& renderDelegate); + // return true if this is a volume (affects default material assignment) virtual bool isVolume() { return false; } // return true if this geometry supports UserData @@ -86,7 +84,7 @@ class GeometryMixin // in principle deletes the current RDL geom object (mGeometry) and sets the ptr to null. // in practice the RDL API doesn't support object deletion, and so the object is hidden - void resetGeometryObject(RenderDelegate&); + void resetGeometryObject(HdMoonray_RenderDelegate&); bool isMirror() const { return mMirror; } @@ -99,36 +97,38 @@ class GeometryMixin void restoreVisibility(pxr::HdSceneDelegate* sceneDelegate); private: - friend class Mesh; // for geometryForMeshLight() + friend class HdMoonray_Mesh; // for geometryForMeshLight() // create the geometry. Returns false if geometry is not created, in which case // sync should not proceed - bool createGeometry(RenderDelegate& renderDelegate, const std::string& className); + bool createGeometry(pxr::HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, + const std::string& className); // process and sync all primvars. calls primvarChanged for every changed primvar void syncPrimvars(pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate, + HdMoonray_RenderDelegate& renderDelegate, pxr::HdDirtyBits *dirtyBits); - // syncs an overriding primvar ("moonray:...") - void primvarAttributeOverride(const std::string& name, const pxr::VtValue& value); + // creates/updates userData for a primvar - void primvarUserData(RenderDelegate& renderDelegate, + void primvarUserData(HdMoonray_RenderDelegate& renderDelegate, const pxr::TfToken& name, const pxr::VtValue& value, const pxr::HdInterpolation& interp, const pxr::TfToken& role); // set a Vec3f attribute from a primvar with possible motion blur void setVec3fPrimvarMb(pxr::HdSceneDelegate* sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, const pxr::TfToken& hydraName, const pxr::VtValue& value, const std::string& rdlName_0, const std::string& rdlName_1); // perform material and light assignment and instance creation - void assign(pxr::HdSceneDelegate* sceneDelegate, RenderDelegate& renderDelegate, + void assign(pxr::HdSceneDelegate* sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, pxr::HdDirtyBits* dirtyBits); // add/update additional UserData, not derived from a primvar - void addUserData(pxr::TfToken key, scene_rdl2::rdl2::UserData* userData); + void addUserData(pxr::TfToken key, const MoonrayObject& userData); // update the primitive_attributes list of user data (if defined) void syncPrimitiveAttributes(); @@ -136,22 +136,21 @@ class GeometryMixin // rprim that this is mixed into pxr::HdRprim& rprim; - // RDL geometry object generated for the rprim - scene_rdl2::rdl2::Geometry* mGeometry = nullptr; + // names of the primvars used by this object at last sync. We need this // to detect whether a primvar was removed. std::set mAppliedPrimvars; // All UserData objects associated with this geometry - std::map mUserData; + std::map mUserData; bool mMirror = false; // true if xform is a reflection bool mUserDataChanged = false; bool mForcedInvisible = false; - GeometryMixin(const GeometryMixin&) = delete; - GeometryMixin &operator =(const GeometryMixin&) = delete; + HdMoonray_GeometryBase(const HdMoonray_GeometryBase&) = delete; + HdMoonray_GeometryBase &operator =(const HdMoonray_GeometryBase&) = delete; }; } diff --git a/lib/hydramoonray/hydra2_utils.cc b/lib/hydramoonray/hydra2_utils.cc new file mode 100644 index 0000000..8502a7b --- /dev/null +++ b/lib/hydramoonray/hydra2_utils.cc @@ -0,0 +1,61 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "hydra2_utils.h" + +using namespace pxr; + +namespace hdMoonray { + +PrimAccess::PrimAccess(const SdfPath& id, + const TfToken& schema, + HdSceneDelegate* sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate) + : mId(id), mSchema(schema), mSceneDelegate(sceneDelegate) +{ + // try to get the schema container from the scene index + HdRenderIndex& renderIndex = sceneDelegate->GetRenderIndex(); + HdSceneIndexBaseRefPtr sceneIndex = renderIndex.GetTerminalSceneIndex(); + if (sceneIndex) { + HdSceneIndexPrim siPrim = sceneIndex->GetPrim(id); + HdContainerDataSourceHandle primDs = siPrim.dataSource; + if (primDs) { + mSchemaContainer = HdContainerDataSource::Cast(primDs->Get(schema)); + } + } + // if we fail, mSchemaContainer will be null, + // and we'll fall back to fetching data directly from the scene delegate +} + +VtValue +PrimAccess::Get(const TfToken& name) const +{ + if (mSchemaContainer) { + HdDataSourceBaseHandle ds = mSchemaContainer->Get(name); + if (ds) { + HdSampledDataSourceHandle sampledDs = HdSampledDataSource::Cast(ds); + if (sampledDs) { + return sampledDs->GetValue(0.0f); + } + } + } + + // fall back to fetching data directly from the scene delegate + std::string fullName = mSchema.GetString() + ":" + name.GetString(); + return mSceneDelegate->Get(mId, TfToken(fullName)); +} + +pxr::HdContainerDataSourceHandle +getPrimContainer(const pxr::SdfPath& id, pxr::HdSceneDelegate* sceneDelegate) +{ + HdRenderIndex& renderIndex = sceneDelegate->GetRenderIndex(); + HdSceneIndexBaseRefPtr sceneIndex = renderIndex.GetTerminalSceneIndex(); + if (sceneIndex) { + HdSceneIndexPrim siPrim = sceneIndex->GetPrim(id); + return siPrim.dataSource; + } + return nullptr; +} + +} + diff --git a/lib/hydramoonray/hydra2_utils.h b/lib/hydramoonray/hydra2_utils.h new file mode 100644 index 0000000..f87340c --- /dev/null +++ b/lib/hydramoonray/hydra2_utils.h @@ -0,0 +1,39 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +namespace hdMoonray { + + class HdMoonray_RenderDelegate; + +// PrimAccess wraps access to the attributes of a prim, so that +// when SceneIndexes are in use it fetches data from the scene index. +// When SceneIndexes are not in use, it fetches data directly from the scene delegate. +class PrimAccess +{ +public: + PrimAccess(const pxr::SdfPath& id, + const pxr::TfToken& schema, + pxr::HdSceneDelegate* sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate); + + pxr::VtValue Get(const pxr::TfToken& name) const; + + const pxr::SdfPath& id() const { return mId; } + pxr::HdSceneDelegate* sceneDelegate() const { return mSceneDelegate; } + +private: + pxr::SdfPath mId; + pxr::TfToken mSchema; + pxr::HdSceneDelegate* mSceneDelegate; + pxr::HdContainerDataSourceHandle mSchemaContainer; +}; + +pxr::HdContainerDataSourceHandle getPrimContainer(const pxr::SdfPath& id, pxr::HdSceneDelegate* sceneDelegate); + +} + diff --git a/lib/hydramoonray/instancer.cc b/lib/hydramoonray/instancer.cc new file mode 100644 index 0000000..56ee5ad --- /dev/null +++ b/lib/hydramoonray/instancer.cc @@ -0,0 +1,449 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "instancer.h" +#include "renderDelegate.h" +#include "ValueConverter.h" +#include "HdmLog.h" +#include "tokens.h" + +#include +#include +#include +#include + + +using namespace pxr; + +namespace { + +VtValue getElement(const VtValue& array, size_t index) +{ + if (array.IsHolding()) { + const VtFloatArray& v = array.UncheckedGet(); + if (index < v.size()) return VtValue(v[index]); + } else if (array.IsHolding()) { + const VtVec2fArray& v = array.UncheckedGet(); + if (index < v.size()) return VtValue(v[index]); + } else if (array.IsHolding()) { + const VtVec3fArray& v = array.UncheckedGet(); + if (index < v.size()) return VtValue(v[index]); + } else if (array.IsHolding()) { + const VtIntArray& v = array.UncheckedGet(); + if (index < v.size()) return VtValue(v[index]); + } + return VtValue(); +} + +// instance transform token changes in 0.23.11 +#if PXR_VERSION >= 2311 +const TfToken INSTANCE_TRANSFORMS = HdInstancerTokens->instanceTransforms; +const TfToken INSTANCE_ROTATIONS = HdInstancerTokens->instanceRotations; +const TfToken INSTANCE_SCALES = HdInstancerTokens->instanceScales; +const TfToken INSTANCE_TRANSLATIONS = HdInstancerTokens->instanceTranslations; +#else +const TfToken INSTANCE_TRANSFORMS = HdInstancerTokens->instanceTransform; +const TfToken INSTANCE_ROTATIONS = HdInstancerTokens->rotate; +const TfToken INSTANCE_SCALES = HdInstancerTokens->scale; +const TfToken INSTANCE_TRANSLATIONS = HdInstancerTokens->translate; +#endif + +} + +namespace hdMoonray { + +// instancer method values +constexpr int XFORM_ATTRIBUTES = 0; +constexpr int POINT_FILE = 1; +constexpr int XFORM_LIST = 2; + +HdMoonray_Instancer::HdMoonray_Instancer(HdSceneDelegate* delegate, const SdfPath& id) + : HdInstancer(delegate, id) +{ +} + +HdMoonray_Instancer::~HdMoonray_Instancer() +{ +} + +// Hydra sends several apparent junk primvars that are not in the usd data, ignore them +static bool +ignorePrimvar(const TfToken& name) +{ + if (name.GetText()[0] == '_') return true; // Hydra internal variables + if (not strncmp(name.GetText(), "usd", 3)) return true; // sceneflow data + static const std::set names { + TfToken("asset_name"), // bookeeping from Pixar + TfToken("mesh_path"), // from sprinkles, huge array of repeated strings + TfToken("hit_prim_path") // new version of the sprinkles huge array + }; + if (names.count(name)) return true; + return false; +} + +void +HdMoonray_Instancer::Sync(HdSceneDelegate* sceneDelegate, + HdRenderParam* renderParam, + HdDirtyBits* dirtyBits) +{ + const SdfPath& id = GetId(); + hdmLogSyncStart("Instancer", id, dirtyBits); + + _UpdateInstancer(sceneDelegate, dirtyBits); + + if (HdChangeTracker::IsInstancerDirty(*dirtyBits, id)) { + // not clear what, if anything, is covered by this + } + + if (HdChangeTracker::IsTransformDirty(*dirtyBits, id)) { + mXform = sceneDelegate->GetInstancerTransform(id); + } + + if (HdChangeTracker::IsInstanceIndexDirty(*dirtyBits, id)) { + // this does not do anything, the indexes are looked up per-prototype below + } + + if (HdChangeTracker::IsAnyPrimvarDirty(*dirtyBits, id)) { + + const HdPrimvarDescriptorVector& primvars = + sceneDelegate->GetPrimvarDescriptors(id, HdInterpolationInstance); + + for (const HdPrimvarDescriptor& pv: primvars) { + + if (HdChangeTracker::IsPrimvarDirty(*dirtyBits, id, pv.name)) { + + if (ignorePrimvar(pv.name)) continue; + + PrimvarInfo& info = mPrimvars[pv.name]; + info.value = sceneDelegate->Get(id, pv.name); + info.role = pv.role; + } + } + } + + *dirtyBits = 0; +} + + +// The SceneDelegate api only allows access to the indices by using the prototypeId, which +// we don't have until this is called. Even the number of indices is unavailable as far +// as I can tell. So this function must update the data for that subset of indices. +// Curently a different InstanceGeometry is created for each prototype. It may be possible +// to use a single one if there is a way to incrementally update the references and refIndices. +void +HdMoonray_Instancer::makeInstanceGeometry(const SdfPath& prototypeId, + const std::string& protoSuffix, + MoonrayObject prototype, + HdMoonray_GeometryBase* hdGeometry, + size_t level, size_t childCount) +{ + HdSceneDelegate* sceneDelegate = GetDelegate(); + HdMoonray_RenderDelegate& renderDelegate = *reinterpret_cast(sceneDelegate->GetRenderIndex().GetRenderDelegate()); + + _SyncInstancerAndParents(sceneDelegate->GetRenderIndex(), GetId()); + + VtIntArray indices = sceneDelegate->GetInstanceIndices(GetId(), prototypeId); + const size_t count = indices.size(); + + MoonrayObject instancer; + MoonrayObject instanceId; + { + std::lock_guard lock(mMapMutex); + MoonrayObject& mapEntry = mInstancers[prototype]; + if (mapEntry.isNull()) { + mapEntry = renderDelegate.scene().createObject("RdlInstancerGeometry", prototypeId, "/Instancer"+protoSuffix); + if (mapEntry.isNull()) return; // it already printed an error, give up + MoonrayAssignment assignment; + renderDelegate.scene().assign(mapEntry, assignment); + instanceId = renderDelegate.scene().createObject("UserData", prototypeId, "/instanceId"+protoSuffix); + } else { + instanceId = mapEntry.getInstanceIdData(); + } + instancer = mapEntry; + } + + { + UpdateGuard guard(renderDelegate, instanceId); + std::string name("instanceId"); + if (level) name.push_back('A'+level-1); + VtFloatArray out(count); + for (size_t i = 0; i < count; ++i) + out[i] = i * childCount; + instanceId.setData(name, out, TfToken()); + } + + + // add crytomatte id if enabled + std::string suffix = "/Instancer.primvars:prim_id" + protoSuffix; + MoonrayObject cryptoId = renderDelegate.scene().createObject("UserData",prototypeId, suffix); + + { + UpdateGuard guard(renderDelegate, cryptoId); + float hash = MurmurHash3_to_float(instancer.sceneObject()->getName().c_str()); + cryptoId.setData("prim_id", hash, TfToken()); + } + + // note: how to get instance paths via SceneIndex + // PrimAccess primAccess(id, HdInstancerTopologySchemaTokens->instancerTopology, sceneDelegate, renderDelegate); + // VtValue locationsVal = primAccess.Get(HdInstancerTopologySchemaTokens->instanceLocations); + // if (locationsVal.IsHolding>()) { + // const VtArray& locations = locationsVal.UncheckedGet>(); + + // MOONSHINE-1533: Moonray uses the number of transforms to count instances, while Hydra Prman + // and Embree use the size of the protoIndices array. For bad data where these are unequal, + // resize the primvars to match the number of instances, so all the renderers produce the same + // number of instances. + MoonrayObjectVector primitiveAttributes; + primitiveAttributes.append(instanceId); + primitiveAttributes.append(cryptoId); + + for (const auto& p : mPrimvars) { + const TfToken& name = p.first; + if (name == INSTANCE_TRANSFORMS || + name == INSTANCE_SCALES || + name == INSTANCE_ROTATIONS || + name == INSTANCE_TRANSLATIONS) + continue; // skip the ones used directly + + // TODO: HDM-130: Moonray InstanceGeometry primvars override primvars on the prototype, which + // is opposite how USD works. Don't create the primvar if it will override incorrectly. + if (hdGeometry->isPrimvarUsed(name)) continue; + // Fixme: this also needs to be done with each intermediate instancer. + + const VtValue& value = p.second.value; + const TfToken& role = p.second.role; + std::string suffix = "/Instancer.primvars:" + name.GetString() + protoSuffix; + MoonrayObject primvar = renderDelegate.scene().createObject("UserData", prototypeId, suffix); + + UpdateGuard guard(primvar); + // there are lots of types, just get the ones encountered so far: + if (value.IsHolding()) { + const VtFloatArray& v = value.UncheckedGet(); + if (v.empty()) continue; // don't crash on error + VtFloatArray out(count); + for (size_t i = 0; i < count; ++i) out[i] = v[indices[i] % v.size()]; + primvar.setData(name.GetString(), out, role); + } else if (value.IsHolding()) { + const VtVec2fArray& v = value.UncheckedGet(); + if (v.empty()) continue; // don't crash on error + VtVec2fArray out(count); + for (size_t i = 0; i < count; ++i) out[i] = reinterpret_cast(v[indices[i] % v.size()]); + primvar.setData(name.GetString(), out, role); + } else if (value.IsHolding()) { + const VtVec3fArray& v = value.UncheckedGet(); + if (v.empty()) continue; // don't crash on error + VtVec3fArray out(count); + for (size_t i = 0; i < count; ++i) out[i] = reinterpret_cast(v[indices[i] % v.size()]); + primvar.setData(name.GetString(), out, role); + } else if (value.IsHolding()) { + const GfVec3f& v = value.UncheckedGet(); + primvar.setData(name.GetString(), v, role); + } else if (value.IsHolding()) { + const VtIntArray& v = value.UncheckedGet(); + if (v.empty()) continue; // don't crash on error + VtIntArray out(count); + for (size_t i = 0; i < count; ++i) out[i] = v[indices[i] % v.size()]; + primvar.setData(name.GetString(), out, role); + } else { + Logger::warn(primvar.objectName(),": ",value.GetTypeName()," not translated"); + } + primitiveAttributes.append(primvar); + } + + { + UpdateGuard guard(instancer); + instancer.set("primitive_attributes", primitiveAttributes); + instancer.set("node_xform", mXform); + instancer.set("references", MoonrayObjectVector(prototype)); + instancer.set("use_reference_xforms", true); + + auto it = mPrimvars.find(INSTANCE_TRANSFORMS); + if (it != mPrimvars.end()) { + instancer.set("method", XFORM_LIST); + const VtValue& value = it->second.value; + const VtMatrix4dArray& v = value.Get(); + if (not v.empty()) { + VtMatrix4dArray mv(count); + for (size_t i = 0; i < count; ++i) + mv[i] = v[indices[i] % v.size()]; + instancer.set("xform_list", mv); + } + + } else { + instancer.set("method", XFORM_ATTRIBUTES); + + it = mPrimvars.find(INSTANCE_SCALES); + if (it != mPrimvars.end()) { + const VtValue& value = it->second.value; + const VtVec3fArray& v = value.Get(); + if (not v.empty()) { + VtVec3fArray mv(count); + for (size_t i = 0; i < count; ++i) + mv[i] = v[indices[i] % v.size()]; + instancer.set("scales", mv); + } + } + + it = mPrimvars.find(INSTANCE_ROTATIONS); + if (it != mPrimvars.end()) { + const VtValue& value = it->second.value; + + // in 0.21.11 the type of the rotations attr switched from VtVec4fArray to VtQuathArray + if (value.IsHolding()) { + const VtQuathArray& quats = value.Get(); + if (not quats.empty()) { + VtQuathArray mv(count); + for (size_t i = 0; i < count; ++i) { + mv[i] = quats[indices[i] % quats.size()]; + } + instancer.set("orientations", mv); + } + } else { + const VtVec4fArray& v = value.Get(); + if (not v.empty()) { + VtVec4fArray mv(count); + for (size_t i = 0; i < count; ++i) { + mv[i] = v[indices[i] % v.size()]; + } + instancer.set("orientations", mv); + } + } + } + it = mPrimvars.find(INSTANCE_TRANSLATIONS); + if (it != mPrimvars.end()) { + const VtValue& value = it->second.value; + const VtVec3fArray& v = value.Get(); + if (not v.empty()) { + VtVec3fArray mv(count); + for (size_t i = 0; i < count; ++i) + mv[i] = v[indices[i] % v.size()]; + instancer.set("positions", mv); + } + } + } + } + + // This instancer may itself be a prototype for another instancer! + if (not GetParentId().IsEmpty()) { + renderDelegate.scene().simplifyPath(GetId(), sceneDelegate); + const SdfPath& parentId = GetParentId(); + HdMoonray_Instancer* parent = (HdMoonray_Instancer*)sceneDelegate->GetRenderIndex().GetInstancer(parentId); + // we have to add a suffix to the RDL names to make them unique + size_t protoHash = std::hash()(renderDelegate.scene().getSimplePath(prototypeId).GetString()); + const std::string suffix = protoSuffix + "_" + std::to_string(protoHash); + parent->makeInstanceGeometry(GetId(), suffix, instancer, hdGeometry, level+1, count * childCount); + } + +} +void +HdMoonray_Instancer::makeInstanceLights(const SdfPath& prototypeId, + MoonrayObject prototype, + size_t level, size_t childCount) +{ + const SdfPath& id = GetId(); + + HdSceneDelegate* sceneDelegate = GetDelegate(); + HdMoonray_RenderDelegate& renderDelegate = *reinterpret_cast(sceneDelegate->GetRenderIndex().GetRenderDelegate()); + + _SyncInstancerAndParents(sceneDelegate->GetRenderIndex(), id); + + VtIntArray indices = sceneDelegate->GetInstanceIndices(id, prototypeId); + const size_t count = indices.size(); + + // get the instance transforms + std::vector xforms(count, mXform); + + auto it = mPrimvars.find(INSTANCE_TRANSFORMS); + if (it != mPrimvars.end()) { + const VtMatrix4dArray& v = it->second.value.Get(); + if (!v.empty()) { + for (size_t i = 0; i < count; ++i) + xforms[i] *= v[indices[i] % v.size()]; + } + } else { + it = mPrimvars.find(INSTANCE_SCALES); + + if (it != mPrimvars.end()) { + const VtVec3fArray& v = it->second.value.Get(); + if (not v.empty()) { + for (size_t i = 0; i < count; ++i) + xforms[i] *= GfMatrix4d().SetScale(v[indices[i] % v.size()]); + } + } + + it = mPrimvars.find(INSTANCE_ROTATIONS); + if (it != mPrimvars.end()) { + const VtQuathArray& v = it->second.value.Get(); + if (not v.empty()) { + for (size_t i = 0; i < count; ++i) + xforms[i] *= GfMatrix4d().SetRotate(v[indices[i] % v.size()]); + } + } + + it = mPrimvars.find(INSTANCE_TRANSLATIONS); + if (it != mPrimvars.end()) { + const VtValue& value = it->second.value; + const VtVec3fArray& v = value.Get(); + if (not v.empty()) { + for (size_t i = 0; i < count; ++i) + xforms[i] *= GfMatrix4d().SetTranslate(v[indices[i] % v.size()]); + } + } + } + + // get the categories of the prototype, so we can register the instances too + TfToken lightLinkCategory = sceneDelegate->GetLightParamValue(prototypeId, HdTokens->lightLink).GetWithDefault(TfToken()); + TfToken shadowLinkCategory = sceneDelegate->GetLightParamValue(prototypeId, HdTokens->shadowLink).GetWithDefault(TfToken()); + + // (re)build the instance lights + std::lock_guard lock(mMapMutex); + LightInstances& instances = mLightInstances[prototype]; + // turn off any excess instances + if (instances.size() > count) { + for (size_t i = count; i < instances.size(); i++) { + if (instances[i].isValid()) { + instances[i].beginUpdate(); + instances[i].set("on", false); + instances[i].endUpdate(); + } + } + } + instances.resize(count, MoonrayObject()); + + for (size_t i = 0; i < count; i++) { + if (!instances[i].isValid()) { + std::string suffix = "_i" + std::to_string(i); + std::string className = prototype.className(); + MoonrayObject object = renderDelegate.scene().createObject(className, prototypeId, suffix); + if (object.isNull()) break; // it already printed an error, give up + instances[i] = object; + } + instances[i].beginUpdate(); + instances[i].copyFrom(prototype); + instances[i].set("node_xform", xforms[i]); + applyPrimvarOverrides(instances[i], indices[i]); + instances[i].endUpdate(); + renderDelegate.scene().setCategory(instances[i], LightCategory, lightLinkCategory); + renderDelegate.scene().setCategory(instances[i], ShadowCategory, shadowLinkCategory); + } + + // TODO This instancer may be a prototype for another instancer +} + +void +HdMoonray_Instancer::applyPrimvarOverrides(MoonrayObject obj, + int index) +{ + for (const auto& pv : mPrimvars) { + if (strncmp(pv.first.GetText(), "moonray:", 8)==0) { + std::string attrName = pv.first.GetString().substr(8); + if (obj.hasAttribute(attrName)) { + VtValue val = getElement(pv.second.value, index); + if (!val.IsEmpty()) + obj.set(attrName, val); + } + } + } +} + +} diff --git a/lib/hydramoonray/Instancer.h b/lib/hydramoonray/instancer.h similarity index 63% rename from lib/hydramoonray/Instancer.h rename to lib/hydramoonray/instancer.h index 448469b..6dc38a4 100644 --- a/lib/hydramoonray/Instancer.h +++ b/lib/hydramoonray/instancer.h @@ -3,26 +3,26 @@ #pragma once +#include "MoonrayObject.h" + #include #include #include #include -#include - -#include "GeometryMixin.h" +#include "geometryBase.h" #include "MurmurHash3.h" #include namespace hdMoonray { -class Instancer: public pxr::HdInstancer +class HdMoonray_Instancer: public pxr::HdInstancer { public: - Instancer(pxr::HdSceneDelegate* delegate, + HdMoonray_Instancer(pxr::HdSceneDelegate* delegate, const pxr::SdfPath& id); - ~Instancer(); + ~HdMoonray_Instancer(); // Hydra instancers are stored "backwards", the prototype knows what instance it // is in. When the prototype generates rdla_scene objects it calls this to @@ -32,27 +32,31 @@ class Instancer: public pxr::HdInstancer // the instancer, so it will have to update transforms and primvars for this // prototype in this call. void makeInstanceGeometry(const pxr::SdfPath& prototypeId, - scene_rdl2::rdl2::Geometry* prototype, - GeometryMixin* geometry, size_t level, + const std::string& protoSuffix, + MoonrayObject prototype, + HdMoonray_GeometryBase* hdGeometry, + size_t level, size_t childCount = 1); -#if PXR_VERSION < 2102 - void sync(pxr::HdSceneDelegate *sceneDelegate, - pxr::HdDirtyBits *dirtyBits); -#else + void makeInstanceLights(const pxr::SdfPath& prototypeId, + MoonrayObject prototype, + size_t level, size_t childCount = 1); + void Sync(pxr::HdSceneDelegate *sceneDelegate, pxr::HdRenderParam *renderParam, pxr::HdDirtyBits *dirtyBits) override; -#endif private: - + void applyPrimvarOverrides(MoonrayObject obj, int index); + struct PrimvarInfo { pxr::VtValue value; pxr::TfToken role; }; std::map mPrimvars; pxr::GfMatrix4d mXform; // map from prototype object to the instancer created for it - std::map mInstancers; + std::map mInstancers; + using LightInstances = std::vector; + std::map mLightInstances; std::mutex mMapMutex; }; diff --git a/lib/hydramoonray/light.cc b/lib/hydramoonray/light.cc new file mode 100644 index 0000000..3b53995 --- /dev/null +++ b/lib/hydramoonray/light.cc @@ -0,0 +1,587 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "light.h" +#include "MoonrayLightFilter.h" +#include "mesh.h" +#include "renderDelegate.h" +#include "ValueConverter.h" +#include "HdmLog.h" +#include "instancer.h" +#include "hydra2_utils.h" +#include "tokens.h" + +#include +#include +#include + +#include + +using namespace pxr; +namespace { + +const std::string& +defaultRdlClassName(const TfToken& type) +{ + static const std::string def; + static std::map rdlClassMap = + { { HdPrimTypeTokens->cylinderLight , "CylinderLight" }, + { HdPrimTypeTokens->diskLight, "DiskLight" }, + { HdPrimTypeTokens->distantLight, "DistantLight" }, + { HdPrimTypeTokens->domeLight, "EnvLight" }, + { HdPrimTypeTokens->rectLight, "RectLight" }, + { HdPrimTypeTokens->sphereLight, "SphereLight" }, + { HdMoonrayTokens->geometryLight, "MeshLight" }}; + auto it = rdlClassMap.find(type); + if (it == rdlClassMap.end()) return def; + return it->second; +} + +bool +isMoonRayLightClass(const std::string& className, + hdMoonray::HdMoonray_RenderDelegate& renderDelegate) +{ + return renderDelegate.scene().checkClassInterface(className, hdMoonray::MoonrayAttribute::InterfaceType::INTERFACE_LIGHT); +} + +bool +isUsdShapedLight(const pxr::SdfPath& id, pxr::HdSceneDelegate *sceneDelegate) +{ + return sceneDelegate->GetLightParamValue(id, pxr::HdLightTokens->shapingConeAngle).IsHolding() || + sceneDelegate->GetLightParamValue(id, pxr::HdLightTokens->shapingConeSoftness).IsHolding(); +} + +bool +canUseMoonRaySpotLightForType(const pxr::TfToken& type) +{ + return type == pxr::HdPrimTypeTokens->diskLight || + type == pxr::HdPrimTypeTokens->sphereLight; +} + +bool +canUseMoonRayShapingForType(const pxr::TfToken& type) +{ + return canUseMoonRaySpotLightForType(type) || + type == pxr::HdPrimTypeTokens->rectLight; +} + +} + +namespace hdMoonray { + +/*static*/ MoonrayObject +HdMoonray_Light::lightForMaterialLink(HdSceneDelegate *sceneDelegate, const SdfPath& path) +{ + // find a light of any type, given its path + SdfPath lightPath(path); + lightPath.ReplacePrefix(SdfPath::AbsoluteRootPath(), sceneDelegate->GetDelegateID()); + const HdRenderIndex& ri = sceneDelegate->GetRenderIndex(); + static std::vector lightTypes = { + HdPrimTypeTokens->cylinderLight, + HdPrimTypeTokens->diskLight, + HdPrimTypeTokens->distantLight, + HdPrimTypeTokens->domeLight, + HdPrimTypeTokens->rectLight, + HdPrimTypeTokens->sphereLight, + HdMoonrayTokens->geometryLight + }; + HdSprim *lightPrim = nullptr; + for (TfToken lightType : lightTypes) { + if (lightPrim = ri.GetSprim(lightType,lightPath)) break; + } + HdMoonray_Light* hdLight = dynamic_cast(lightPrim); + if (!hdLight) { + std::cout << "Cannot find light " << lightPath.GetString() << std::endl; + return nullptr; + } + MoonrayObject rdlLight = hdLight->mMoonrayLight; + if (rdlLight.isNull()) { + std::cout << "Light not created yet " << lightPath.GetString() << std::endl; + } + return rdlLight; +} + +HdDirtyBits +HdMoonray_Light::GetInitialDirtyBitsMask() const +{ + return HdLight::AllDirty; +} + + +const std::string& +HdMoonray_Light::rdlClassName(const SdfPath& id, + HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate) +{ + const static std::string spotLight("SpotLight"); + + // identify the rdl light class to use. This can be specified via "token moonray:class =" or + // deduced from the Lux/Usd type + const std::string& luxRdlClass(defaultRdlClassName(mType)); + mRectToSpotlight = false; + + VtValue v = sceneDelegate->GetLightParamValue(id, HdMoonrayTokens->moonray_class); + bool isRectLight = false; + if (v.IsHolding()) { + // moonray:class is specified + TfToken rdlClassToken = v.UncheckedGet(); + const std::string& rdlClassName = rdlClassToken.GetString(); + + // check the specified class is actually an RDL light + if (!isMoonRayLightClass(rdlClassName, renderDelegate)) { + // if the specified class is invalid, fall back to the default class for the Lux type, with a warning + if (!luxRdlClass.empty()) { + const bool shapedSpot = isUsdShapedLight(id, sceneDelegate) && + canUseMoonRaySpotLightForType(mType); + const std::string& fallbackClass = shapedSpot ? spotLight : luxRdlClass; + Logger::warn(id, ".moonray:class: invalid MoonRay light class '", rdlClassName, + "'; falling back to USD light type '", mType.GetString(), + "' as '", fallbackClass, "'"); + return fallbackClass; + } + Logger::error(id, ".moonray:class: invalid MoonRay light class '", rdlClassName, + "' and no fallback exists for USD light type '", mType.GetString(), "'"); + return luxRdlClass; + } + + if (rdlClassToken == HdMoonrayTokens->RectLight) { + isRectLight = true; + mRectToSpotlight = isUsdShapedLight(id, sceneDelegate); + } + + // Issue a warning if the moonray:class does not match the Lux type: + bool warning = false; + if (rdlClassToken == HdMoonrayTokens->SpotLight) { + warning = (mType != HdPrimTypeTokens->diskLight && mType != HdPrimTypeTokens->sphereLight); + } else { + warning = (rdlClassToken != luxRdlClass); + } + if (warning) { + Logger::warn(id, ".moonray:class: '", rdlClassName, + "' may not be compatible with USD light type '", mType.GetString(), "'"); + } + mRectToSpotlight = isRectLight && isUsdShapedLight(id, sceneDelegate); + return rdlClassName; + } + + // no moonray:class specified, use the default class for the Lux type + // Use of the shaping API on a SphereLight or DiskLight causes us to use the RDL SpotLight class + if (isUsdShapedLight(id, sceneDelegate)) { + if (!canUseMoonRayShapingForType(mType)) { + Logger::warn(id, ": shaping api may not be compatible with USD light type '", mType.GetString(), "'"); + } else if (canUseMoonRaySpotLightForType(mType)) { + return spotLight; + } + } + if (luxRdlClass.empty()) { + Logger::error(id, ": Unsupported light type ", mType, " replaced by DiskLight"); + return defaultRdlClassName(HdPrimTypeTokens->diskLight); + } + return luxRdlClass; +} + +bool +HdMoonray_Light::isSupportedType(const TfToken& type) +{ + return !defaultRdlClassName(type).empty(); +} + + +void +HdMoonray_Light::fixLightXform(GfMatrix4d& mat) +{ + // in Usd/Lux cylinder is along x-axis, in moonray it is along y. + if (mType == HdPrimTypeTokens->cylinderLight) { + // rotate -90deg about z + double t; + t = mat[0][0]; mat[0][0] = -mat[1][0]; mat[1][0] = t; + t = mat[0][1]; mat[0][1] = -mat[1][1]; mat[1][1] = t; + t = mat[0][2]; mat[0][2] = -mat[1][2]; mat[1][2] = t; + } +} + +void +HdMoonray_Light::syncXform(const SdfPath& id, + HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate) +{ + HdTimeSampleArray sampledXforms; + std::pair shutterInterval = renderDelegate.scene().getTimeSamplingInterval(); + sceneDelegate->SampleTransform(id, shutterInterval.first, shutterInterval.second, &sampledXforms); + // if there's only one sample, it should match the cached value + if (sampledXforms.count <= 1) { + GfMatrix4d rdlXform0 = sampledXforms.values[0]; + fixLightXform(rdlXform0); + mMoonrayLight.set("node_xform", rdlXform0); + } else { + // first and last samples will be sample interval boundaries + GfMatrix4d rdlXform0 = sampledXforms.values[0]; + fixLightXform(rdlXform0); + GfMatrix4d rdlXform1 = sampledXforms.values[sampledXforms.count-1]; + fixLightXform(rdlXform1); + mMoonrayLight.set("node_xform", rdlXform0, rdlXform1); + } +} + +// If all the lights are off the renderDelegate has to turn the default dome light on +void +HdMoonray_Light::setOn(bool value, HdMoonray_RenderDelegate& renderDelegate) { + if (value != mOn) { + mOn = value; + if (value) + renderDelegate.scene().addLight(); + else + renderDelegate.scene().removeLight(); + mMoonrayLight.set("on", value); + } +} +void +HdMoonray_Light::resetLightObject(HdMoonray_RenderDelegate& renderDelegate) +{ + if (mMoonrayLight.isNull()) { + return; + } + + // RDL SceneObjects cannot be deleted from SceneContext during interactive + // updates. Match the geometry lifecycle: make the old object inert and let + // createSceneObject() reuse or class-suffix replacement objects as needed. + UpdateGuard guard(renderDelegate, mMoonrayLight); + setOn(false, renderDelegate); + renderDelegate.scene().releaseCategory(mMoonrayLight.sceneObject(), LightCategory, mLightLinkCategory); + renderDelegate.scene().releaseCategory(mMoonrayLight.sceneObject(), ShadowCategory, mShadowLinkCategory); + mMoonrayLight = MoonrayObject(); + mLightLinkCategory = pxr::TfToken(); + mShadowLinkCategory = pxr::TfToken(); +} + +GfVec3f +colorTemperatureToRGB(float kelvin) +{ + float t = std::clamp(kelvin, 1000.0f, 40000.0f) / 100.0f; + float r, g, b; + + if (t <= 66.0f) { + r = 1.0f; + g = 0.39008157876901960784f * log(t) - 0.6318414437886274509f; + } else { + r = 1.29293618606274509804f * pow(t - 60.0f, -0.1332047592f); + g = 1.12989086089529411765f * pow(t - 60.0f, -0.0755148492f); + } + + if (t >= 66.0f) + b = 1.0f; + else if(t <= 19.0f) + b = 0.0f; + else + b = 0.54320678911019607843f * log(t - 10.0f) - 1.19625408914f; + + return GfVec3f(std::clamp(r, 0.0f, 1.0f), + std::clamp(g, 0.0f, 1.0f), + std::clamp(b, 0.0f, 1.0f)); +} + +void +HdMoonray_Light::syncParams(const SdfPath& id, + HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate) +{ + PrimAccess access(id, HdMoonrayTokens->moonray, sceneDelegate, renderDelegate); + + for (auto attrIt = mMoonrayLight.beginAttributes(); attrIt != mMoonrayLight.endAttributes(); ++attrIt) { + const std::string& attrName = (*attrIt).name(); + + // attributes directly updated by Sync(): + if (attrName == "on" || attrName == "node_xform" || attrName == "intensity") continue; + + if (attrName == "geometry") { + VtValue relval = access.Get(HdMoonrayTokens->geometry); + if (relval.IsHolding>()) { + VtArray paths = relval.UncheckedGet>(); + if (paths.size() > 0) { + SdfPath geomPath = paths.front(); + geomPath.ReplacePrefix(SdfPath::AbsoluteRootPath(), sceneDelegate->GetDelegateID()); + HdRprim* prim = const_cast(sceneDelegate->GetRenderIndex().GetRprim(geomPath)); + HdMoonray_Mesh* mesh = dynamic_cast(prim); + if (mesh) { + // geometry sync should not be running in parallel with light sync + MoonrayObject geom = mesh->geometryForMeshLight(renderDelegate); + if (geom.isValid()) { + mMoonrayLight.set("geometry",geom); + } + } + } + } else { + mMoonrayLight.set("geometry", MoonrayObject()); + } + continue; + } + + // check if attr is set by "moonray:name" under light container + std::string moonrayAttrName = "moonray:" + attrName; + VtValue val = sceneDelegate->GetLightParamValue(id, TfToken(moonrayAttrName)); + if (!val.IsEmpty()) { + (*attrIt).set(val); + continue; + } + // if GetLightParamValue goes away, custom attrs will need to be set by "inputs:moonray:name", + // since "moonray:name" will be inaccessible. Then we will use the material container, + // but for now support this via GLPV + moonrayAttrName = "inputs:moonray:" + attrName; + val = sceneDelegate->GetLightParamValue(id, TfToken(moonrayAttrName)); + if (!val.IsEmpty()) { + (*attrIt).set(val); + continue; + } + + + // Find the equivalent Lux attribute + static const std::map map = { + { "color", HdLightTokens->color }, + //{ "intensity", HdLightTokens->intensity }, // handled in sync + { "exposure", HdLightTokens->exposure }, + { "radius", HdLightTokens->radius }, + { "normalized", HdLightTokens->normalize }, + { "width", HdLightTokens->width }, + { "height", HdLightTokens->height }, + { "angular_extent", HdLightTokens->angle }, + { "texture", HdLightTokens->textureFile }, + { "lens_radius", HdLightTokens->radius }, + { "spread", HdLightTokens->shapingConeAngle }, + { "outer_cone_angle", HdLightTokens->shapingConeAngle }, + { "inner_cone_angle", HdLightTokens->shapingConeSoftness } + }; + auto mapIt = map.find(attrName); + if (mapIt != map.end()) { + TfToken luxName = mapIt->second; + if (attrName == "spread") { + float coneAngle = 90; // USD default value + val = sceneDelegate->GetLightParamValue(id, pxr::HdLightTokens->shapingConeAngle); + if (val.IsHolding()) coneAngle = val.UncheckedGet(); + // MoonRay RectLight spread is the normalized cone angle: + // 1 is a diffuse 90-degree cone and 0 is parallel emission. + const float spread = std::clamp(coneAngle, 0.0f, 90.0f) / 90.0f; + (*attrIt).set(spread); + continue; + + } else if (luxName == HdLightTokens->shapingConeAngle) { + float coneAngle = 90; // Lux default value + val = sceneDelegate->GetLightParamValue(id, HdLightTokens->shapingConeAngle); + if (val.IsHolding()) coneAngle = val.UncheckedGet(); + coneAngle = std::clamp(coneAngle, 0.0f, 180.0f); + // USD shaping:cone:angle is an off-axis half angle; MoonRay + // SpotLight outer_cone_angle is the full side-to-side apex. + (*attrIt).set(2 * coneAngle); + continue; + + } else if (luxName == HdLightTokens->shapingConeSoftness) { + float softness = 0; // Lux default value + val = sceneDelegate->GetLightParamValue(id, luxName); + if (val.IsHolding()) softness = val.UncheckedGet(); + softness = std::clamp(softness, 0.0f, 1.0f); + float coneAngle = 90; // Lux default value + val = sceneDelegate->GetLightParamValue(id, HdLightTokens->shapingConeAngle); + if (val.IsHolding()) coneAngle = val.UncheckedGet(); + coneAngle = std::clamp(coneAngle, 0.0f, 180.0f); + // USD softness is the fraction of non-cutoff angles used for + // falloff. MoonRay inner_cone_angle is the full bright apex. + const float innerConeAngle = coneAngle * (1.0f - softness); + (*attrIt).set(2 * innerConeAngle); + continue; + + } else if (luxName == HdLightTokens->radius && mRectToSpotlight == true) { + // If a rect light with shaping is converted to a spotlight, we approximate + // the rect light area using the spotlight's lens_radius parameter. + float width = 1.0f; + val = sceneDelegate->GetLightParamValue(id, HdLightTokens->width); + if (val.IsHolding()) width = val.UncheckedGet(); + float height = 1.0f; + val = sceneDelegate->GetLightParamValue(id, HdLightTokens->height); + if (val.IsHolding()) height = val.UncheckedGet(); + const float radius = std::sqrt((width * height) / M_PI); + (*attrIt).set(radius); + continue; + } else if (luxName == HdLightTokens->color) { + GfVec3f color(1.0f); + val = sceneDelegate->GetLightParamValue(id, luxName); + if (val.IsHolding()) color = val.UncheckedGet(); + val = sceneDelegate->GetLightParamValue(id, HdLightTokens->enableColorTemperature); + if (val.IsHolding() && val.UncheckedGet()) { + val = sceneDelegate->GetLightParamValue(id, HdLightTokens->colorTemperature); + if (val.IsHolding()) { + const float temperature = val.UncheckedGet(); + + // This was originally using the function UsdLuxBlackbodyTemperatureAsRgb + // to do the conversion. However there was a noticeable difference in the color + // compared to the Karma renderer. To better match this we use the algorithm + // from the following site: + // https://tannerhelland.com/2012/09/18/convert-temperature-rgb-algorithm-code.html + GfVec3f tempRgb = colorTemperatureToRGB(temperature); + color[0] *= tempRgb[0]; + color[1] *= tempRgb[1]; + color[2] *= tempRgb[2]; + } + } + (*attrIt).setColor(color); + continue; + + } else { + // special case: Lux CylinderLight uses "length" where rdl2 uses "height" + if (luxName == HdLightTokens->height && mType == HdPrimTypeTokens->cylinderLight) { + luxName = HdLightTokens->length; + } + // schema will cause correct default to be returned + val = sceneDelegate->GetLightParamValue(id, luxName); + if (!val.IsEmpty()) { + (*attrIt).set(val); + continue; + } + } + } + + // no setting, so reset to default + (*attrIt).setToDefault(); + } +} + +void +HdMoonray_Light::syncFilterList(const SdfPath& id, + HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate) +{ + VtValue val = sceneDelegate->GetLightParamValue(id, TfToken(HdTokens->filters)); + MoonrayObjectVector filters; + if (!val.IsHolding()) { + mMoonrayLight.set("light_filters",filters); + return; + } + const SdfPathVector& paths = val.UncheckedGet(); + for (const SdfPath& path : paths) { + MoonrayObject filter = MoonrayLightFilter::getLightFilter(path, renderDelegate, sceneDelegate); + if (filter.isValid()) { + filters.append(filter); + } + } + mMoonrayLight.set("light_filters",filters); +} + +void +HdMoonray_Light::Sync(HdSceneDelegate *sceneDelegate, + HdRenderParam *renderParam, + HdDirtyBits *dirtyBits) +{ + SdfPath id = GetId(); + hdmLogSyncStart("Light", id, dirtyBits); + + HdMoonray_RenderDelegate& renderDelegate(HdMoonray_RenderDelegate::get(renderParam)); + + // HDM-125: usdview sets the intensity of lights to 0.0f if "Enable Scene Lights" is turned off, + // so treat intensity=0 as turning off the light. Also turn it off when lighting disabled. + float intensity = 0.0f; + if (not renderDelegate.options().getDisableLighting() && sceneDelegate->GetVisible(id)) { + VtValue val = sceneDelegate->GetLightParamValue(id, HdLightTokens->intensity); + intensity = val.IsHolding() ? val.UncheckedGet() : 1.0f; + } + + bool initialize = false; + std::string rdlClass; + if (mMoonrayLight.isValid() && ((*dirtyBits) & pxr::HdLight::DirtyParams)) { + rdlClass = rdlClassName(id, sceneDelegate, renderDelegate); + if (rdlClass != mMoonrayLight.className()) { + resetLightObject(renderDelegate); + *dirtyBits = pxr::HdLight::AllDirty; + } + } + if (mMoonrayLight.isNull()) { + *dirtyBits = DirtyBits::Clean; // don't call Sync again if no light is created + if (not (intensity > 0)) return; // don't create invisible lights + renderDelegate.scene().simplifyPath(id, sceneDelegate); + if (rdlClass.empty()) { + rdlClass = rdlClassName(id, sceneDelegate, renderDelegate); + } + + mMoonrayLight = renderDelegate.scene().createObject(rdlClass, id); + if (mMoonrayLight.isNull()) return; // if there was an error this already printed an error message + initialize = true; // Force the catagories to be updated + *dirtyBits = HdLight::AllDirty; // force other settings to be made + } + + UpdateGuard guard(renderDelegate, mMoonrayLight); + + if ((*dirtyBits) & HdLight::DirtyTransform) { + syncXform(id, sceneDelegate, renderDelegate); + } + + if ((*dirtyBits) & HdLight::DirtyParams) { + setOn(intensity > 0, renderDelegate); + mMoonrayLight.set("intensity", intensity); + syncParams(id, sceneDelegate, renderDelegate); + syncFilterList(id, sceneDelegate, renderDelegate); + // querying "lightLink" will return a token used to name the "category" that + // holds all geometry that this light links to. This value will later be + // returned as one of the entries if any of the linked geometry calls GetCategories(). + // In other words, the scene delegate does the reverse lookup "geometry->lights" for + // us using an internal cache. + // Value is either "" or ".collection:lightLink" though this will allow others. + // Currently Finalize() is called when value changes, but this may be a bug. + bool categoriesChanged = false; + TfToken t; + VtValue v = sceneDelegate->GetLightParamValue(id, HdTokens->lightLink); + if (v.IsHolding()) { + t = v.UncheckedGet(); + } + // registering the category id token with RenderDelegate will enable geometry + // to look up mLight as the rdl2 scene object corresponding to this category id + if (initialize || t != mLightLinkCategory) { + if (!initialize) { + renderDelegate.scene().releaseCategory(mMoonrayLight.sceneObject(), LightCategory, mLightLinkCategory); + } + renderDelegate.scene().setCategory(mMoonrayLight.sceneObject(), LightCategory, t); + mLightLinkCategory = t; + categoriesChanged = true; + } + // "shadowLink" is much the same + t = TfToken(); + v = sceneDelegate->GetLightParamValue(id, HdTokens->shadowLink); + if (v.IsHolding()) { + t = v.UncheckedGet(); + } + if (initialize || t != mShadowLinkCategory) { + if (!initialize) { + renderDelegate.scene().releaseCategory(mMoonrayLight.sceneObject(), ShadowCategory, mShadowLinkCategory); + } + renderDelegate.scene().setCategory(mMoonrayLight.sceneObject(), ShadowCategory, t); + mShadowLinkCategory = t; + categoriesChanged = true; + } + // Need to call Sync() on all geometry to get categories copied into LightSets + if (categoriesChanged) { + // in 0.22.5, DirtyCategories seems to be ignored. We can force a sync using + // DirtyMaterialId even though it isn't strict;y right... + sceneDelegate->GetRenderIndex().GetChangeTracker().MarkAllRprimsDirty( + HdChangeTracker::DirtyCategories | HdChangeTracker::DirtyMaterialId); + } + } + + if (HdChangeTracker::IsInstancerDirty(*dirtyBits, id) || + HdChangeTracker::IsInstanceIndexDirty(*dirtyBits, id) || + HdChangeTracker::IsTransformDirty(*dirtyBits, id)) { + _UpdateInstancer(sceneDelegate, dirtyBits); + const SdfPath& instancerId = GetInstancerId(); + HdMoonray_Instancer* instancer = static_cast( + sceneDelegate->GetRenderIndex().GetInstancer(instancerId)); + if (instancer) { + instancer->makeInstanceLights(id, mMoonrayLight.sceneObject(), 0); + } + } + + *dirtyBits = DirtyBits::Clean; + hdmLogSyncEnd(id); +} + +void +HdMoonray_Light::Finalize(HdRenderParam *renderParam) +{ + resetLightObject(HdMoonray_RenderDelegate::get(renderParam)); +} + +} diff --git a/lib/hydramoonray/Light.h b/lib/hydramoonray/light.h similarity index 58% rename from lib/hydramoonray/Light.h rename to lib/hydramoonray/light.h index 699284a..15d7e4c 100644 --- a/lib/hydramoonray/Light.h +++ b/lib/hydramoonray/light.h @@ -3,23 +3,21 @@ #pragma once -#include +#include "MoonrayObject.h" -#include +#include -namespace scene_rdl2 {namespace rdl2 { -class Light; -} } namespace hdMoonray { -class RenderDelegate; +class HdMoonray_RenderDelegate; -class Light: public pxr::HdLight +class HdMoonray_Light: public pxr::HdLight { public: - Light(const pxr::TfToken& type, const pxr::SdfPath& id): - pxr::HdLight(id), mType(type), mRectToSpotlight(false) {} + HdMoonray_Light(const pxr::TfToken& type, const pxr::SdfPath& id): + pxr::HdLight(id), mType(type), mRectToSpotlight(false) + {} /// Dirty bits to pass to first call to Sync() pxr::HdDirtyBits GetInitialDirtyBitsMask() const override; @@ -35,29 +33,36 @@ class Light: public pxr::HdLight void Finalize(pxr::HdRenderParam *renderParam) override; + // required to implement material->light linking (Accent material) + static MoonrayObject lightForMaterialLink(pxr::HdSceneDelegate *sceneDelegate, const pxr::SdfPath& path); + private: const std::string& rdlClassName(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate); + pxr::HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate); void syncXform(const pxr::SdfPath& id, - pxr::HdSceneDelegate *sceneDelegate); + pxr::HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate); void syncParams(const pxr::SdfPath& id, pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate); + HdMoonray_RenderDelegate& renderDelegate); void syncFilterList(const pxr::SdfPath& id, pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate); + HdMoonray_RenderDelegate& renderDelegate); - void fixCylinderLight(scene_rdl2::rdl2::Mat4d& mat); + void fixLightXform(pxr::GfMatrix4d& mat); pxr::TfToken mType; // Holds whether this light was converted from a rect light to a spot light bool mRectToSpotlight; - scene_rdl2::rdl2::Light* mLight = nullptr; + MoonrayObject mMoonrayLight; + bool mOn = false; - void setOn(bool, RenderDelegate& renderDelegate); + void setOn(bool, HdMoonray_RenderDelegate& renderDelegate); + void resetLightObject(HdMoonray_RenderDelegate& renderDelegate); // the name of a category holding all geometry lit by this light pxr::TfToken mLightLinkCategory; diff --git a/lib/hydramoonray/material.cc b/lib/hydramoonray/material.cc new file mode 100644 index 0000000..a84f50a --- /dev/null +++ b/lib/hydramoonray/material.cc @@ -0,0 +1,131 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "material.h" +#include "renderDelegate.h" +#include "ValueConverter.h" +#include "HdmLog.h" +#include "light.h" +#include "shader_utils.h" +#include "tokens.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace pxr; +namespace hdMoonray { + +HdDirtyBits +HdMoonray_Material::GetInitialDirtyBitsMask() const +{ + return AllDirty; +} + +void +HdMoonray_Material::Sync(HdSceneDelegate *sceneDelegate, + HdRenderParam *renderParam, + HdDirtyBits *dirtyBits) +{ + auto& renderDelegate(HdMoonray_RenderDelegate::get(renderParam)); + + const SdfPath& id = GetId(); + hdmLogSyncStart("Material", id, dirtyBits); + + if (*dirtyBits & AllDirty) { + mSurfaceDirty = mDisplacementDirty = mVolumeShaderDirty = true; + // update any material that has been created + if (mMoonrayMaterial.isValid()) getSurface(renderDelegate, sceneDelegate); + if (mMoonrayDisplacement.isValid()) getDisplacement(renderDelegate, sceneDelegate); + if (mMoonrayVolumeShader.isValid()) getVolumeShader(renderDelegate, sceneDelegate); + } + *dirtyBits &= ~AllDirty; + hdmLogSyncEnd(id); +} + +MoonrayObject +HdMoonray_Material::getSurface(HdMoonray_RenderDelegate& renderDelegate, + HdSceneDelegate *sceneDelegate, + bool canReturnNull) +{ + if (mSurfaceDirty || renderDelegate.options().getDecodeNormalsChanged()) { + std::lock_guard lock(mCreateMutex); + mMoonrayMaterial = getTerminal(GetId(), HdMaterialTerminalTokens->surface, renderDelegate, sceneDelegate); + if (mMoonrayMaterial.isNull() && !canReturnNull) { + mMoonrayMaterial = renderDelegate.scene().errorMaterial(); + } + mSurfaceDirty = false; + } + return mMoonrayMaterial; +} + +MoonrayObject +HdMoonray_Material::getDisplacement(HdMoonray_RenderDelegate& renderDelegate, + HdSceneDelegate *sceneDelegate) +{ + if (mDisplacementDirty) { + std::lock_guard lock(mCreateMutex); + if (mDisplacementDirty) { + mMoonrayDisplacement = getTerminal(GetId(), HdMaterialTerminalTokens->displacement, renderDelegate, sceneDelegate); + mDisplacementDirty = false; + } + } + return mMoonrayDisplacement; +} + + +MoonrayObject +HdMoonray_Material::getVolumeShader(HdMoonray_RenderDelegate& renderDelegate, + HdSceneDelegate *sceneDelegate) +{ + if (mVolumeShaderDirty) { + std::lock_guard lock(mCreateMutex); + if (mVolumeShaderDirty) { + mMoonrayVolumeShader = getTerminal(GetId(), HdMaterialTerminalTokens->volume, renderDelegate, sceneDelegate); + mVolumeShaderDirty = false; + } + } + return mMoonrayVolumeShader; +} + +/* static*/ void +HdMoonray_Material::assign(MoonrayAssignment& assignment, + const SdfPath& materialId, + HdMoonray_RenderDelegate& renderDelegate, + HdSceneDelegate* sceneDelegate, + bool forVolume) +{ + if (materialId.IsEmpty()) { + assignment.material = MoonrayObject(); + assignment.displacement = MoonrayObject(); + assignment.volumeShader = MoonrayObject(); + } else { + HdMoonray_Material* mtlPrim = static_cast( + sceneDelegate->GetRenderIndex().GetSprim(HdPrimTypeTokens->material, materialId)); + if (!mtlPrim) { + Logger::error("Cannot find material ", materialId); + assignment.material = forVolume ? MoonrayObject() : renderDelegate.scene().errorMaterial(); + assignment.displacement = MoonrayObject(); + assignment.volumeShader = forVolume ? renderDelegate.scene().defaultVolumeShader() : MoonrayObject(); + return; + } + + assignment.material = mtlPrim->getSurface(renderDelegate, sceneDelegate, forVolume); + assignment.displacement = mtlPrim->getDisplacement(renderDelegate, sceneDelegate); + assignment.volumeShader = mtlPrim->getVolumeShader(renderDelegate, sceneDelegate); + } + // fill in defaults for any missing terminals + if (assignment.material.isNull() && !forVolume) assignment.material = renderDelegate.scene().defaultMaterial(); + if (assignment.volumeShader.isNull() && forVolume) assignment.volumeShader = renderDelegate.scene().defaultVolumeShader(); +} + +} + diff --git a/lib/hydramoonray/material.h b/lib/hydramoonray/material.h new file mode 100644 index 0000000..215d31d --- /dev/null +++ b/lib/hydramoonray/material.h @@ -0,0 +1,54 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "MoonrayObject.h" + +#include +#include + +namespace hdMoonray { + +class HdMoonray_RenderDelegate; + +class HdMoonray_Material: public pxr::HdMaterial +{ +public: + explicit HdMoonray_Material(pxr::SdfPath const& id): pxr::HdMaterial(id) {} + + /// Dirty bits to pass to first call to Sync() + pxr::HdDirtyBits GetInitialDirtyBitsMask() const override; + + /// Update the data identified by dirtyBits. Must not query other data. + void Sync(pxr::HdSceneDelegate* sceneDelegate, + pxr::HdRenderParam* renderParam, + pxr::HdDirtyBits* dirtyBits) override; + + + // Fill in a layer assignment using a given material. + // Set default for a missing surface shader if volume is false, + // and for a missing volume shader if volume is true. + static void assign(MoonrayAssignment& layerAssignment, + const pxr::SdfPath& materialId, + HdMoonray_RenderDelegate& renderDelegate, + pxr::HdSceneDelegate* sceneDelegate, + bool volume = false); + +private: + + MoonrayObject getSurface(HdMoonray_RenderDelegate&, pxr::HdSceneDelegate*, bool canReturnNull = true); + MoonrayObject getDisplacement(HdMoonray_RenderDelegate&, pxr::HdSceneDelegate*); + MoonrayObject getVolumeShader(HdMoonray_RenderDelegate&, pxr::HdSceneDelegate*); + + bool mSurfaceDirty = true; + bool mDisplacementDirty = true; + bool mVolumeShaderDirty = true; + MoonrayObject mMoonrayMaterial; + MoonrayObject mMoonrayDisplacement; + MoonrayObject mMoonrayVolumeShader; + std::mutex mCreateMutex; +}; + +} + diff --git a/lib/hydramoonray/Mesh.cc b/lib/hydramoonray/mesh.cc similarity index 65% rename from lib/hydramoonray/Mesh.cc rename to lib/hydramoonray/mesh.cc index 5360642..b6587dc 100644 --- a/lib/hydramoonray/Mesh.cc +++ b/lib/hydramoonray/mesh.cc @@ -12,16 +12,16 @@ // "normal" or "normals" for normals // -#include "Mesh.h" -#include "RenderDelegate.h" -#include "Material.h" +#include "mesh.h" +#include "renderDelegate.h" +#include "material.h" #include "HdmLog.h" #include "MurmurHash3.h" +#include "tokens.h" + #include #include #include -#include -#include #include @@ -29,7 +29,7 @@ using namespace pxr; namespace { -// constants for RDL attrs and enums used herein +// constants for RDL attrs and enums const std::string rdlClassMesh("RdlMeshGeometry"); const std::string rdlAttrFaceVertexCount("face_vertex_count"); const std::string rdlAttrVerticesByIndex("vertices_by_index"); @@ -67,28 +67,20 @@ const std::string rdlAttrUvList("uv_list"); namespace hdMoonray { -using scene_rdl2::logging::Logger; -using scene_rdl2::rdl2::IntVector; -using scene_rdl2::rdl2::FloatVector; -using scene_rdl2::rdl2::Vec2f; -using scene_rdl2::rdl2::Vec2fVector; -using scene_rdl2::rdl2::Vec3f; -using scene_rdl2::rdl2::Vec3fVector; - -Mesh::Mesh(SdfPath const& id) : - HdMesh(id), - GeometryMixin(this) -{} +HdMoonray_Mesh::HdMoonray_Mesh(SdfPath const& id) : + HdMesh(id), HdMoonray_GeometryBase(this) +{ +} void -Mesh::Finalize(HdRenderParam* renderParam) +HdMoonray_Mesh::Finalize(HdRenderParam* renderParam) { // causes geometry to be hidden - resetGeometryObject(RenderDelegate::get(renderParam)); + resetGeometryObject(HdMoonray_RenderDelegate::get(renderParam)); } HdDirtyBits -Mesh::GetInitialDirtyBitsMask() const +HdMoonray_Mesh::GetInitialDirtyBitsMask() const { int mask = HdChangeTracker::Clean | HdChangeTracker::InitRepr @@ -109,7 +101,7 @@ Mesh::GetInitialDirtyBitsMask() const } HdDirtyBits -Mesh::_PropagateDirtyBits(HdDirtyBits bits) const +HdMoonray_Mesh::_PropagateDirtyBits(HdDirtyBits bits) const { return bits; } @@ -118,53 +110,45 @@ Mesh::_PropagateDirtyBits(HdDirtyBits bits) const // This is only needed if Sync() looks at Repr. // Mesh does this to get flat vs smooth usdview render setting. void -Mesh::_InitRepr(TfToken const &reprToken, HdDirtyBits *dirtyBits) +HdMoonray_Mesh::_InitRepr(TfToken const &reprToken, HdDirtyBits *dirtyBits) { // doing this seems to cause Sync() to be called: *dirtyBits |= HdChangeTracker::DirtyRepr; } -scene_rdl2::rdl2::Geometry* -Mesh::geometryForMeshLight(RenderDelegate& renderDelegate) +MoonrayObject +HdMoonray_Mesh::geometryForMeshLight(HdMoonray_RenderDelegate& renderDelegate) { // MeshLight(GeometryLight) may require the RDL2 geometry // object before the Mesh has synced. Since light syncs // are not run in parallel, this does not need to be // threadsafe - if (mGeometry) return mGeometry; - scene_rdl2::rdl2::SceneObject* object = renderDelegate.createSceneObject(rdlClassMesh, rprim.GetId()); - if (object) mGeometry = object->asA(); + if (mGeometry.isValid()) return mGeometry; + mGeometry = renderDelegate.scene().createObject(rdlClassMesh, rprim.GetId()); return mGeometry; } void -Mesh::syncTopology(const HdMeshTopology& topology) +HdMoonray_Mesh::syncTopology(const HdMeshTopology& topology) { // copies face and subset (part) data to RDL - // vertices (points) are copied by base GeometryMixin class - - const VtIntArray& faceVertexCounts = topology.GetFaceVertexCounts(); - geometry()->set(rdlAttrFaceVertexCount, - IntVector(faceVertexCounts.begin(), - faceVertexCounts.end())); + // vertices (points) are copied by base HdMoonray_GeometryBase class - const VtIntArray& faceVertexIndices = topology.GetFaceVertexIndices(); - geometry()->set(rdlAttrVerticesByIndex, - IntVector(faceVertexIndices.begin(), - faceVertexIndices.end())); + mGeometry.set(rdlAttrFaceVertexCount, topology.GetFaceVertexCounts()); + mGeometry.set(rdlAttrVerticesByIndex, topology.GetFaceVertexIndices()); TfToken orientation = topology.GetOrientation(); int rdlOrientation = rdlOrientationRightHanded; if (orientation == PxOsdOpenSubdivTokens->leftHanded) { rdlOrientation = rdlOrientationLeftHanded; } - geometry()->set(rdlAttrOrientation, rdlOrientation); + mGeometry.set(rdlAttrOrientation, rdlOrientation); // subsets (== rdl parts) const HdGeomSubsets& geomSubsets(topology.GetGeomSubsets()); - std::vector partFaceCountList; - std::vector partFaceIndices; + VtIntArray partFaceCountList; + VtIntArray partFaceIndices; partFaceCountList.reserve(geomSubsets.size()); partFaceIndices.reserve(geomSubsets.size()); // actually larger partList.clear(); partList.reserve(geomSubsets.size()); @@ -179,15 +163,31 @@ Mesh::syncTopology(const HdMeshTopology& topology) partMaterials.push_back(geomSubset.materialId); partPaths.push_back(geomSubset.id); } - geometry()->set(rdlAttrPartFaceCountList, partFaceCountList); - geometry()->set(rdlAttrPartFaceIndices, partFaceIndices); - geometry()->set(rdlAttrPartList, partList); + mGeometry.set(rdlAttrPartFaceCountList, partFaceCountList); + mGeometry.set(rdlAttrPartFaceIndices, partFaceIndices); + mGeometry.set(rdlAttrPartList, partList); +} + +float +HdMoonray_Mesh::clampMeshResolution(float meshResolution, HdMoonray_RenderDelegate& renderDelegate) const +{ + // clamp mesh resolution to a reasonable range, to avoid + // excessive memory usage or crashes. This is a user option + // that can be overridden by a primvar, so we don't want to + // stomp on the primvar value if it is set. + float maxRes = renderDelegate.options().getMaxMeshResolution(); + if (maxRes > 0.0f && meshResolution > maxRes) { + Logger::warn("Mesh ",GetId(),": limiting mesh resolution from ",meshResolution, + " to ", maxRes); + return maxRes; + } + return meshResolution; } void -Mesh::syncSubdivScheme(const HdMeshTopology& topology, +HdMoonray_Mesh::syncSubdivScheme(const HdMeshTopology& topology, HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate, + HdMoonray_RenderDelegate& renderDelegate, const TfToken& reprToken) { // sets the subdivision scheme, and related options @@ -197,25 +197,18 @@ Mesh::syncSubdivScheme(const HdMeshTopology& topology, int rdlScheme = rdlSubdSchemeCatClark; // moonray default if (subdScheme == PxOsdOpenSubdivTokens->bilinear) rdlScheme = rdlSubdSchemeBilinear; // scheme "loop" is not supported by Moonray, and replaced by "catClark" - geometry()->set(rdlAttrSubdScheme, rdlScheme); + mGeometry.set(rdlAttrSubdScheme, rdlScheme); // This is the "complexity" menu item in usdview (low=0, medium=1, ...) // There is a topology.GetRefineLevel() but it appears to always be a copy of // the parameter (which defaults to 0) sent to GetMeshTopology() int refineLevel = GetDisplayStyle(sceneDelegate).refineLevel; - - // subd is disabled if - // - the repr has flat shading enabled - // - the refine level is < 1 - // - the "forcePolgon" render setting is on, or - // - the subd scheme is "none" - bool disableSubd = _GetReprDesc(reprToken)[0].flatShadingEnabled || - refineLevel < 1 || - renderDelegate.getForcePolygon() || - subdScheme == PxOsdOpenSubdivTokens->none; - - - geometry()->set(rdlAttrIsSubd, !disableSubd); + bool flatShading = _GetReprDesc(reprToken)[0].flatShadingEnabled; + bool polygons = flatShading || + renderDelegate.options().getForcePolygon() || + subdScheme == PxOsdOpenSubdivTokens->none || + refineLevel == 0; + mGeometry.set(rdlAttrIsSubd, !polygons); // mesh resolution, adaptive error and smooth_normals can be overridden // by primvars, so check before overwriting @@ -226,23 +219,24 @@ Mesh::syncSubdivScheme(const HdMeshTopology& topology, if (not isPrimvarUsed(meshResolutionToken)) { // to match Storm, use 1 << refineLevel for resolution float rdlResolution = 1 << refineLevel; - geometry()->set(rdlAttrMeshResolution, rdlResolution); + rdlResolution = clampMeshResolution(rdlResolution, renderDelegate); + mGeometry.set(rdlAttrMeshResolution, rdlResolution); } if (not isPrimvarUsed(adaptiveErrorToken)) { float adaptive_error = topology.IsEnabledAdaptive() ? 1.0f : 0.0f; - geometry()->set(rdlAttrAdaptiveError, adaptive_error); + mGeometry.set(rdlAttrAdaptiveError, adaptive_error); } if (not isPrimvarUsed(smoothNormalToken)) { - // polygons should not autogenerate smooth normals, per UsdGeomMesh doc - if (disableSubd) - geometry()->set(rdlAttrSmoothNormal, false); + bool smooth = (subdScheme == PxOsdOpenSubdivTokens->catmullClark) && + !flatShading; + mGeometry.set(rdlAttrSmoothNormal, smooth); } } void -Mesh::syncSubdivTags(const PxOsdSubdivTags& tags) +HdMoonray_Mesh::syncSubdivTags(const PxOsdSubdivTags& tags) { // sets RDL attrs from subdiv tags @@ -251,7 +245,7 @@ Mesh::syncSubdivTags(const PxOsdSubdivTags& tags) if (t == PxOsdOpenSubdivTokens->none) rdlValue = rdlSubdBoundaryNone; else if (t == PxOsdOpenSubdivTokens->edgeOnly) rdlValue = rdlSubdBoundaryEdgeOnly; else rdlValue = rdlSubdBoundaryEdgeAndCorner; - geometry()->set(rdlAttrSubdBoundary, rdlValue); + mGeometry.set(rdlAttrSubdBoundary, rdlValue); t = tags.GetFaceVaryingInterpolationRule(); if (t == PxOsdOpenSubdivTokens->none) rdlValue = rdlSubdFvarLinearNone; @@ -261,7 +255,7 @@ Mesh::syncSubdivTags(const PxOsdSubdivTags& tags) else if (t == PxOsdOpenSubdivTokens->boundaries) rdlValue = rdlSubdFvarLinearBoundaries; else if (t == PxOsdOpenSubdivTokens->all) rdlValue = rdlSubdFvarLinearAll; else rdlValue = rdlSubdFvarLinearCornersOnly; - geometry()->set(rdlAttrSubdFvarLinear, rdlValue); + mGeometry.set(rdlAttrSubdFvarLinear, rdlValue); VtIntArray vi = tags.GetCreaseIndices(); @@ -271,8 +265,8 @@ Mesh::syncSubdivTags(const PxOsdSubdivTags& tags) const size_t edges = vi.size() - lengths.size(); VtFloatArray vf = tags.GetCreaseWeights(); bool weightPerEdge = vf.size() >= edges; - IntVector result(2 * edges); - FloatVector weights(edges); + VtIntArray result(2 * edges); + VtFloatArray weights(edges); size_t i = 0; // index into crease indices size_t edge = 0; // index into result for (size_t crease = 0; crease < lengths.size(); ++crease) { @@ -285,114 +279,113 @@ Mesh::syncSubdivTags(const PxOsdSubdivTags& tags) } ++i; // don't connect last point with first of next edge } - geometry()->set(rdlAttrSubdCreaseIndices, result); - geometry()->set(rdlAttrSubdCreaseSharpnesses, weights); + mGeometry.set(rdlAttrSubdCreaseIndices, result); + mGeometry.set(rdlAttrSubdCreaseSharpnesses, weights); } else { // doing this leaves it in the rdla data - // geometry()->resetToDefault("subd_crease_indices"); - // geometry()->resetToDefault("subd_crease_sharpnesses"); + // mGeometry.setToDefault("subd_crease_indices"); + // mGeometry.setToDefault("subd_crease_sharpnesses"); } vi = tags.GetCornerIndices(); if (not vi.empty()) { - geometry()->set(rdlAttrSubdCornerIndices, IntVector(&vi[0], &vi[0] + vi.size())); + mGeometry.set(rdlAttrSubdCornerIndices, vi); VtFloatArray vf = tags.GetCornerWeights(); - geometry()->set(rdlAttrSubdCornerSharpnesses, FloatVector(&vf[0], &vf[0] + vf.size())); + mGeometry.set(rdlAttrSubdCornerSharpnesses, vf); } else { - // geometry()->resetToDefault("subd_corner_indices"); - // geometry()->resetToDefault("subd_corner_sharpnesses"); + // mGeometry.setToDefault("subd_corner_indices"); + // mGeometry.setToDefault("subd_corner_sharpnesses"); } } void -Mesh::primvarChanged(HdSceneDelegate *sceneDelegate, RenderDelegate& renderDelegate, +HdMoonray_Mesh::primvarChanged(HdSceneDelegate *sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, const TfToken& name, const VtValue& value, const HdInterpolation& interp, const TfToken& role) { - // Overridden from GeometryMixin to sync primvars that drive RDL object + // Overridden from HdMoonray_GeometryBase to sync primvars that drive RDL object // attributes. Will be called from syncAll(). // RdlMeshGeometry supports st/uv, and normal/normals as // object attributes - static const TfToken stToken("st"); - static const TfToken uvToken("uv"); - static const TfToken normalToken("normal"); - - if (name == HdTokens->normals || name == normalToken) { + if (name == HdTokens->normals || name == HdMoonrayTokens->normal) { if (value.IsEmpty()) { - geometry()->resetToDefault(rdlAttrNormalList); + mGeometry.setToDefault(rdlAttrNormalList); } else if (value.IsHolding()) { - const VtVec3fArray& v = value.UncheckedGet(); - const Vec3f* p = reinterpret_cast(&v[0]); - Vec3fVector out(p, p + v.size()); - geometry()->set(rdlAttrNormalList, out); + mGeometry.set(rdlAttrNormalList, value.UncheckedGet()); } - } else if (name == stToken || name == uvToken) { + } else if (name == HdMoonrayTokens->st || name == HdMoonrayTokens->uv) { if (value.IsEmpty()) { - geometry()->resetToDefault(rdlAttrUvList); + mGeometry.setToDefault(rdlAttrUvList); } else { - Vec2fVector out; if (value.IsHolding()) { const VtVec3fArray& v = value.UncheckedGet(); + VtVec2fArray out; out.reserve(v.size()); for (const auto& v3 : v) { - out.emplace_back(*reinterpret_cast(&v3)); + out.emplace_back(GfVec2f(v3[0], v3[1])); } + mGeometry.set(rdlAttrUvList, out); } else if (value.IsHolding()) { - const VtVec2fArray& v = value.UncheckedGet(); - const Vec2f* p = reinterpret_cast(&v[0]); - out.assign(p, p + v.size()); + mGeometry.set(rdlAttrUvList, value.UncheckedGet()); } - geometry()->set(rdlAttrUvList, std::move(out)); } } else { - // allow GeometryMixin to handle all other cases - GeometryMixin::primvarChanged(sceneDelegate, renderDelegate, + // allow HdMoonray_GeometryBase to handle all other cases + HdMoonray_GeometryBase::primvarChanged(sceneDelegate, renderDelegate, name, value, interp, role); } } +void +HdMoonray_Mesh::primvarAttributeOverride(const std::string& name, const pxr::VtValue& value, HdMoonray_RenderDelegate& renderDelegate) +{ + // Special handling to clamp mesh resolution + if (name == rdlAttrMeshResolution && value.IsHolding()) { + float res = value.UncheckedGet(); + res = clampMeshResolution(res, renderDelegate); + mGeometry.set(name, res); + } else { + HdMoonray_GeometryBase::primvarAttributeOverride(name, value, renderDelegate); + } +} void -Mesh::syncCryptomatteUserData(RenderDelegate& renderDelegate) +HdMoonray_Mesh::syncCryptomatteUserData(HdMoonray_RenderDelegate& renderDelegate) { // adds additional UserData to support Cryptomatte render outputs - if (!renderDelegate.getDisableRender()) return; - std::string idName = renderDelegate.getDeepIdAttrName(); + if (!renderDelegate.options().getDisableRender()) return; + std::string idName = renderDelegate.options().getDeepIdAttrName(); if (idName.empty()) return; - std::string prim_id = geometry()->getName() + ".primvars:" + idName; + std::string suffix = ".primvars:" + idName; - scene_rdl2::rdl2::UserData* cryptoId = - renderDelegate.createSceneObject("UserData", prim_id)->asA(); + MoonrayObject cryptoId = renderDelegate.scene().createObject("UserData", GetId(), suffix); { UpdateGuard guard(cryptoId); if (!partList.empty()){ - scene_rdl2::rdl2::FloatVector data; + VtFloatArray data; data.reserve(partList.size()); - for (auto& part: partList){ data.emplace_back(MurmurHash3_to_float(part.c_str())); } - cryptoId->setFloatData(idName, data); - + cryptoId.setData(idName, data, TfToken()); } else { - scene_rdl2::rdl2::FloatVector data(1); - data[0]=MurmurHash3_to_float(geometry()->getName().c_str()); - cryptoId->setFloatData(idName, data); + float data = MurmurHash3_to_float(mGeometry.objectName().c_str()); + cryptoId.setData(idName, data, TfToken()); } } - addUserData(pxr::TfToken("primvars:"+idName),cryptoId); + addUserData(TfToken("primvars:"+idName), cryptoId); } void -Mesh::syncAttributes(HdSceneDelegate* sceneDelegate, - RenderDelegate& renderDelegate, +HdMoonray_Mesh::syncAttributes(HdSceneDelegate* sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, HdDirtyBits* dirtyBits, const TfToken& reprToken) { - // Overridden from GeometryMixin to sync additional data in the + // Overridden from HdMoonray_GeometryBase to sync additional data in the // Mesh schema to RDL attributes. Will be called from syncAll() const SdfPath& id = GetId(); @@ -419,17 +412,17 @@ Mesh::syncAttributes(HdSceneDelegate* sceneDelegate, } // base class handles transform and double-sided - GeometryMixin::syncAttributes(sceneDelegate, renderDelegate, dirtyBits, reprToken); + HdMoonray_GeometryBase::syncAttributes(sceneDelegate, renderDelegate, dirtyBits, reprToken); } void -Mesh::Sync(HdSceneDelegate *sceneDelegate, +HdMoonray_Mesh::Sync(HdSceneDelegate *sceneDelegate, HdRenderParam *renderParam, HdDirtyBits *dirtyBits, TfToken const &reprToken) { hdmLogSyncStart("Mesh", GetId(), dirtyBits); - RenderDelegate& renderDelegate(RenderDelegate::get(renderParam)); + HdMoonray_RenderDelegate& renderDelegate(HdMoonray_RenderDelegate::get(renderParam)); _UpdateVisibility(sceneDelegate, dirtyBits); _UpdateInstancer(sceneDelegate, dirtyBits); diff --git a/lib/hydramoonray/Mesh.h b/lib/hydramoonray/mesh.h similarity index 60% rename from lib/hydramoonray/Mesh.h rename to lib/hydramoonray/mesh.h index 5273cd6..645a7d7 100644 --- a/lib/hydramoonray/Mesh.h +++ b/lib/hydramoonray/mesh.h @@ -3,17 +3,16 @@ #pragma once -#include "GeometryMixin.h" +#include "geometryBase.h" #include namespace hdMoonray { -/// A representation of a subdivision surface or poly-mesh object. -class Mesh final : public pxr::HdMesh, public GeometryMixin +class HdMoonray_Mesh final : public pxr::HdMesh, public HdMoonray_GeometryBase { public: - explicit Mesh(pxr::SdfPath const& id); + explicit HdMoonray_Mesh(pxr::SdfPath const& id); /// Dirty bits to pass to first call to Sync() pxr::HdDirtyBits GetInitialDirtyBitsMask() const override; @@ -28,30 +27,35 @@ class Mesh final : public pxr::HdMesh, public GeometryMixin // used to get the geometry associated with a MeshLight // not threadsafe, use with caution - scene_rdl2::rdl2::Geometry* geometryForMeshLight(RenderDelegate& renderDelegate); + MoonrayObject geometryForMeshLight(HdMoonray_RenderDelegate& renderDelegate); protected: // Hydra overrides void _InitRepr(pxr::TfToken const &reprToken, pxr::HdDirtyBits *dirtyBits) override; pxr::HdDirtyBits _PropagateDirtyBits(pxr::HdDirtyBits bits) const override; - // GeometryMixin overrides - void syncAttributes(pxr::HdSceneDelegate* sceneDelegate, RenderDelegate& renderDelegate, + // HdMoonray_GeometryBase overrides + void syncAttributes(pxr::HdSceneDelegate* sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, pxr::HdDirtyBits* dirtyBits, const pxr::TfToken& reprToken) override; - void primvarChanged(pxr::HdSceneDelegate *sceneDelegate, RenderDelegate& renderDelegate, + void primvarChanged(pxr::HdSceneDelegate *sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, const pxr::TfToken& name, const pxr::VtValue& value, const pxr::HdInterpolation& interp, const pxr::TfToken& role) override; + + void primvarAttributeOverride(const std::string& name, const pxr::VtValue& value, HdMoonray_RenderDelegate& renderDelegate) override; + private: - Mesh(const Mesh&) = delete; - Mesh &operator =(const Mesh&) = delete; + HdMoonray_Mesh(const HdMoonray_Mesh&) = delete; + HdMoonray_Mesh &operator =(const HdMoonray_Mesh&) = delete; void syncTopology(const pxr::HdMeshTopology& topology); void syncSubdivScheme(const pxr::HdMeshTopology& topology, pxr::HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate, + HdMoonray_RenderDelegate& renderDelegate, const pxr::TfToken& reprToken); void syncSubdivTags(const pxr::PxOsdSubdivTags& tags); - void syncCryptomatteUserData(RenderDelegate& renderDelegate); + void syncCryptomatteUserData(HdMoonray_RenderDelegate& renderDelegate); + + float clampMeshResolution(float meshResolution, HdMoonray_RenderDelegate& renderDelegate) const; }; } diff --git a/lib/hydramoonray/Points.cc b/lib/hydramoonray/points.cc similarity index 58% rename from lib/hydramoonray/Points.cc rename to lib/hydramoonray/points.cc index 5d022db..5430207 100644 --- a/lib/hydramoonray/Points.cc +++ b/lib/hydramoonray/points.cc @@ -4,11 +4,13 @@ // Points are implemented using RdlPointGeometry // Very similar to (but simpler than) BasisCurves -#include "Points.h" -#include "RenderDelegate.h" +#include "points.h" +#include "renderDelegate.h" #include "HdmLog.h" +#include "tokens.h" + #include -#include + #include using namespace pxr; @@ -23,23 +25,19 @@ const std::string rdlAttrRadiusList("radius_list"); namespace hdMoonray { -using scene_rdl2::logging::Logger; -using scene_rdl2::rdl2::FloatVector; - -Points::Points(SdfPath const& id): - HdPoints(id), - GeometryMixin(this) +HdMoonray_Points::HdMoonray_Points(SdfPath const& id): + HdPoints(id), HdMoonray_GeometryBase(this) {} void -Points::Finalize(HdRenderParam* renderParam) +HdMoonray_Points::Finalize(HdRenderParam* renderParam) { // causes geometry to be hidden - resetGeometryObject(RenderDelegate::get(renderParam)); + resetGeometryObject(HdMoonray_RenderDelegate::get(renderParam)); } HdDirtyBits -Points::GetInitialDirtyBitsMask() const +HdMoonray_Points::GetInitialDirtyBitsMask() const { int mask = HdChangeTracker::Clean | HdChangeTracker::DirtyPoints @@ -57,38 +55,38 @@ Points::GetInitialDirtyBitsMask() const } void -Points::primvarChanged(HdSceneDelegate *sceneDelegate, RenderDelegate& renderDelegate, - const TfToken& name, const VtValue& value, - const HdInterpolation& interp, const TfToken& role) +HdMoonray_Points::primvarChanged(HdSceneDelegate *sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, + const TfToken& name, const VtValue& value, + const HdInterpolation& interp, const TfToken& role) { // Handles primvars that drive RDL attributes, rather than creating UserData // RdlPointGeometry directly supports primvar "widths" via // object attribute "radius_list" if (name == HdTokens->widths) { if (value.IsEmpty()) { - geometry()->resetToDefault(rdlAttrRadiusList); + mGeometry.setToDefault(rdlAttrRadiusList); } else if (value.IsHolding()) { const VtFloatArray& v = value.UncheckedGet(); - FloatVector w(v.begin(), v.end()); - // width is diameter : convert to radius - for (float& r : w) r /= 2; - geometry()->set(rdlAttrRadiusList, std::move(w)); + VtFloatArray w(v.begin(), v.end()); + // width is diameter : convert to radius + for (float& r : w) r /= 2; + mGeometry.set(rdlAttrRadiusList, w); } } else { - // allow GeometryMixin to handle all other cases - GeometryMixin::primvarChanged(sceneDelegate, renderDelegate, + // allow HdMoonray_GeometryBase to handle all other cases + HdMoonray_GeometryBase::primvarChanged(sceneDelegate, renderDelegate, name, value, interp, role); } } void -Points::Sync(HdSceneDelegate *sceneDelegate, - HdRenderParam *renderParam, - HdDirtyBits *dirtyBits, - TfToken const &reprToken) +HdMoonray_Points::Sync(HdSceneDelegate *sceneDelegate, + HdRenderParam *renderParam, + HdDirtyBits *dirtyBits, + TfToken const &reprToken) { hdmLogSyncStart("Points", GetId(), dirtyBits); - RenderDelegate& renderDelegate(RenderDelegate::get(renderParam)); + HdMoonray_RenderDelegate& renderDelegate(HdMoonray_RenderDelegate::get(renderParam)); _UpdateVisibility(sceneDelegate, dirtyBits); _UpdateInstancer(sceneDelegate, dirtyBits); diff --git a/lib/hydramoonray/Points.h b/lib/hydramoonray/points.h similarity index 70% rename from lib/hydramoonray/Points.h rename to lib/hydramoonray/points.h index 997dcdd..ae05e26 100644 --- a/lib/hydramoonray/Points.h +++ b/lib/hydramoonray/points.h @@ -3,15 +3,15 @@ #pragma once -#include "GeometryMixin.h" +#include "geometryBase.h" #include namespace hdMoonray { -class Points final : public pxr::HdPoints, public GeometryMixin +class HdMoonray_Points final : public pxr::HdPoints, public HdMoonray_GeometryBase { public: - explicit Points(pxr::SdfPath const& id); + explicit HdMoonray_Points(pxr::SdfPath const& id); /// Dirty bits to pass to first call to Sync() pxr::HdDirtyBits GetInitialDirtyBitsMask() const override; @@ -30,13 +30,13 @@ class Points final : public pxr::HdPoints, public GeometryMixin void _InitRepr(pxr::TfToken const &reprToken, pxr::HdDirtyBits *dirtyBits) override {} pxr::HdDirtyBits _PropagateDirtyBits(pxr::HdDirtyBits bits) const override { return bits; } - // GeometryMixin overrides - void primvarChanged(pxr::HdSceneDelegate *sceneDelegate, RenderDelegate& renderDelegate, + // HdMoonray_GeometryBase overrides + void primvarChanged(pxr::HdSceneDelegate *sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, const pxr::TfToken& name, const pxr::VtValue& value, const pxr::HdInterpolation& interp, const pxr::TfToken& role); private: - Points(const Points&) = delete; - Points &operator =(const Points&) = delete; + HdMoonray_Points(const HdMoonray_Points&) = delete; + HdMoonray_Points &operator =(const HdMoonray_Points&) = delete; }; } diff --git a/lib/hydramoonray/Primvars.cc b/lib/hydramoonray/primvars.cc similarity index 58% rename from lib/hydramoonray/Primvars.cc rename to lib/hydramoonray/primvars.cc index 737e26c..5c1a85b 100644 --- a/lib/hydramoonray/Primvars.cc +++ b/lib/hydramoonray/primvars.cc @@ -1,27 +1,28 @@ // Copyright 2023-2024 DreamWorks Animation LLC // SPDX-License-Identifier: Apache-2.0 -// Contains primvar-related functions on GeometryMixin, split +// Contains primvar-related functions on HdMoonray_GeometryBase, split // out into this file as they are the most complex part of the code -#include "GeometryMixin.h" -#include "Instancer.h" -#include "RenderDelegate.h" -#include "Material.h" +#include "geometryBase.h" +#include "instancer.h" +#include "renderDelegate.h" +#include "material.h" #include "ValueConverter.h" +#include "tokens.h" + #include -#include -#include -#include #include + + #include using namespace pxr; -using namespace scene_rdl2::rdl2; -using scene_rdl2::logging::Logger; namespace { + constexpr unsigned int INIT_SAMPLES = 3; // initial number of time samples we will request for motion blur. + // filter primvars by name, to remove excessive "junk" primvars // return true if primvar should be ignored bool primvarFilter(const TfToken& name) @@ -40,25 +41,26 @@ namespace { } // utility to set a Vec3f attribute - inline void setVec3fPrimvar(Geometry* geometry, + inline void setVec3fPrimvar(hdMoonray::MoonrayObject geometry, const std::string& rdlName, + const TfToken& hydraName, const VtValue& values) { if (values.IsHolding()) { - const VtVec3fArray& va = values.UncheckedGet(); - const Vec3f* p = reinterpret_cast(&va[0]); - geometry->set(rdlName, Vec3fVector(p, p + va.size())); + geometry.set(rdlName, values.UncheckedGet()); } else { - Logger::warn(rdlName, " requires a Vec3f array"); + hdMoonray::Logger::warn("Skipping primvar '", hydraName.GetString(), "': ", rdlName, + " requires a Vec3f array, got ", values.GetTypeName()); } } + } namespace hdMoonray { void -GeometryMixin::syncPrimvars(HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate, +HdMoonray_GeometryBase::syncPrimvars(HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, HdDirtyBits *dirtyBits) { // This function determines which primvars have changed since the last sync @@ -147,8 +149,8 @@ GeometryMixin::syncPrimvars(HdSceneDelegate *sceneDelegate, } void -GeometryMixin::primvarChanged(HdSceneDelegate *sceneDelegate, - RenderDelegate& renderDelegate, +HdMoonray_GeometryBase::primvarChanged(HdSceneDelegate *sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, const TfToken& name, const VtValue& value, const HdInterpolation& interp, @@ -159,20 +161,20 @@ GeometryMixin::primvarChanged(HdSceneDelegate *sceneDelegate, // point primvars are supported by all geometry, so handle them here. if (name == HdTokens->points) { - setVec3fPrimvarMb(sceneDelegate, HdTokens->points, value, + setVec3fPrimvarMb(sceneDelegate, renderDelegate, HdTokens->points, value, "vertex_list_0", "vertex_list_1"); return; } else if (name == HdTokens->velocities) { - setVec3fPrimvarMb(sceneDelegate, HdTokens->velocities, value, + setVec3fPrimvarMb(sceneDelegate, renderDelegate, HdTokens->velocities, value, "velocity_list_0", "velocity_list_1"); return; } else if (name == HdTokens->accelerations) { // only 1 sample for acceleration try { if (value.IsEmpty()) { - mGeometry->resetToDefault("accleration_list"); // sic + mGeometry.setToDefault("accleration_list"); } else { - setVec3fPrimvar(mGeometry, "accleration_list", value); + setVec3fPrimvar(mGeometry, "accleration_list", name, value); } } catch (std::exception& e) { // geometry isn't guarantred to have "accleration_list" @@ -182,29 +184,35 @@ GeometryMixin::primvarChanged(HdSceneDelegate *sceneDelegate, // primvars starting with 'moonray:' act to override an RDL object attribute of the same name if (not strncmp(name.GetText(), "moonray:", 8)) { - primvarAttributeOverride(name.GetString().substr(8), value); + primvarAttributeOverride(name.GetString().substr(8), value, renderDelegate); return; } // otherwise, primvar generates a corresponding UserData object if (supportsUserData()) { - primvarUserData(renderDelegate, name, value, interp, role); - } + // HDM-400 : normals conventionally use name "normal" in Moonray, vs "normals" in Hydra. In general, we might assume that the user has to + // supply the correct primvar name for the renderer, but the Hydra primvar "normals" originates from a non-primvar attribute in the + // UsdGeom schemas, so it makes sense to translate "normals" to "normal" in this particular case.. + if (name == HdTokens->normals) { + primvarUserData(renderDelegate, HdMoonrayTokens->normal, value, interp, role); + } else { + primvarUserData(renderDelegate, name, value, interp, role); + } + } } void -GeometryMixin::primvarAttributeOverride(const std::string& name, const VtValue& value) +HdMoonray_GeometryBase::primvarAttributeOverride(const std::string& name, const VtValue& value, HdMoonray_RenderDelegate&) { // override an RDL attribute value with the given value, or remove an override if // value is empty. Sync may not be perfect here, because we would need to force // a sync with the appropriate dirty flags to make sure that the unoverridden value // is correct, but we don't know what those flags are. try { - const Attribute* attribute(mGeometry->getSceneClass().getAttribute(name)); if (value.IsEmpty()) { - ValueConverter::setDefault(mGeometry, attribute); + mGeometry.setToDefault(name); } else { - ValueConverter::setAttribute(mGeometry, attribute, value); + mGeometry.set(name, value); } } catch (const std::exception& e) { // name wasn't a valid RDL attribute @@ -212,110 +220,35 @@ GeometryMixin::primvarAttributeOverride(const std::string& name, const VtValue& } } +} namespace { // helper functions for setting up UserData objects -void setUserDataInterpolation(UserData* userData, +void setUserDataInterpolation(hdMoonray::MoonrayObject userData, const HdInterpolation& interp) { switch (interp) { case HdInterpolation::HdInterpolationConstant: - userData->setRate(UserData::Rate::CONSTANT); + userData.setDataRate(hdMoonray::MoonrayObject::DataRate::CONSTANT); break; case HdInterpolation::HdInterpolationUniform: // mesh: per-face, curve: per-curve, instancer: constant - userData->setRate(UserData::Rate::UNIFORM); + userData.setDataRate(hdMoonray::MoonrayObject::DataRate::UNIFORM); break; case HdInterpolation::HdInterpolationVarying: // mesh: per-point (linear), curve: per-segment, instancer: per-instance - userData->setRate(UserData::Rate::VARYING); + userData.setDataRate(hdMoonray::MoonrayObject::DataRate::VARYING); break; case HdInterpolation::HdInterpolationVertex: // mesh: per-point (subd), curve: per-point, instancer: per-instance - userData->setRate(UserData::Rate::VERTEX); + userData.setDataRate(hdMoonray::MoonrayObject::DataRate::VERTEX); break; case HdInterpolation::HdInterpolationFaceVarying: // mesh: per-vertex, curve: none, instancer: per-instance - userData->setRate(UserData::Rate::FACE_VARYING); + userData.setDataRate(hdMoonray::MoonrayObject::DataRate::FACE_VARYING); break; default: - userData->setRate(UserData::Rate::AUTO); - } -} - -void setUserDataValues(UserData* userData, - const TfToken& name, - const VtValue& values, - const TfToken& role) -{ - // we have to handle the types case-by-case - // - // Apparently, int user data cannot be output into RenderOutput - // buffers, so id-type primvars must be of float type. If the - // RenderBuffer is requested as an int format, it is translated - // from float to int in RenderBuffer::Resolve() [q.v.] - if (values.IsHolding()) { - const VtFloatArray& v = values.UncheckedGet(); - const float* p = &v[0]; - userData->setFloatData(name, FloatVector(p, p + v.size())); - } else if (values.IsHolding()) { - float v = values.UncheckedGet(); - userData->setFloatData(name, FloatVector{v}); - } else if (values.IsHolding()) { - float v = float(values.UncheckedGet()); - userData->setFloatData(name, FloatVector{v}); - } else if (values.IsHolding()) { - const VtVec2fArray& v = values.UncheckedGet(); - const Vec2f* p = reinterpret_cast(&v[0]); - userData->setVec2fData(name, Vec2fVector(p, p + v.size())); - } else if (values.IsHolding()) { - const VtVec3fArray& v = values.UncheckedGet(); - if (role == HdPrimvarRoleTokens->color) { - const Rgb* p = reinterpret_cast(&v[0]); - userData->setColorData(name, RgbVector(p, p + v.size())); - } else { - const Vec3f* p = reinterpret_cast(&v[0]); - userData->setVec3fData(name, Vec3fVector(p, p + v.size())); - } - } else if (values.IsHolding()) { - const GfVec3f& v = values.UncheckedGet(); - if (role == HdPrimvarRoleTokens->color) { - userData->setColorData(name, RgbVector{reinterpret_cast(v)}); - } else { - userData->setVec3fData(name, Vec3fVector{reinterpret_cast(v)}); - } - } else if (values.IsHolding()) { - const VtStringArray& v = values.UncheckedGet(); - const std::string* p = &v[0]; - userData->setStringData(name, StringVector(p, p + v.size())); - } else if (values.IsHolding()) { - const std::string& v = values.Get(); - userData->setStringData(name, StringVector{v}); - } else if (values.IsHolding()) { - // HDM-266 moonray does not support attribute type Int for face varying attribute, - // cast to float - const VtUIntArray& v = values.UncheckedGet(); - const float* p = reinterpret_cast(&v[0]); - userData->setFloatData(name, FloatVector(p, p + v.size())); - } else if (values.IsHolding()) { - const VtIntArray& v = values.UncheckedGet(); - // HDM-266 moonray does not support attribute type Int for face varying attribute, - // cast to float - const float* p = reinterpret_cast(&v[0]); - userData->setFloatData(name.GetString(), FloatVector(p, p + v.size())); - } else if (values.IsHolding()) { - int v = values.UncheckedGet(); - userData->setIntData(name, IntVector{v}); - } else if (values.IsHolding()) { - int v = int(values.UncheckedGet()); - userData->setIntData(name, IntVector{v}); - } else if (values.IsHolding()) { - const VtBoolArray& v = values.UncheckedGet(); - const bool* p = &v[0]; - userData->setBoolData(name, BoolVector(p, p + v.size())); - } else { - Logger::warn(userData->getName(), ": ", values.GetTypeName(), " not translated"); - } + userData.setDataRate(hdMoonray::MoonrayObject::DataRate::AUTO); } } @@ -325,7 +258,7 @@ namespace hdMoonray { void -GeometryMixin::primvarUserData(RenderDelegate& renderDelegate, +HdMoonray_GeometryBase::primvarUserData(HdMoonray_RenderDelegate& renderDelegate, const TfToken& name, const VtValue& value, const HdInterpolation& interp, @@ -343,25 +276,24 @@ GeometryMixin::primvarUserData(RenderDelegate& renderDelegate, // create UserData object if it doesn't already exist auto& userData = mUserData[name]; - if (!userData) { - std::string childName = geometry()->getName() + ".primvars:" + name.GetString(); - SceneObject* object = renderDelegate.createSceneObject("UserData", childName); - if (!object) return; - userData = object->asA(); + if (userData.isNull()) { + std::string suffix = ".primvars:" + name.GetString(); + userData = renderDelegate.scene().createObject("UserData", getId(), suffix); mUserDataChanged = true; } // store the primvar values into the UserData object UpdateGuard guard(renderDelegate, userData); setUserDataInterpolation(userData, interp); - setUserDataValues(userData, name, value, role); + userData.setData(name, value, role); } // set a Vec3f attribute from a primvar, with motion blur samples // if present. Resets attribute to default if value is empty void -GeometryMixin::setVec3fPrimvarMb(HdSceneDelegate* sceneDelegate, +HdMoonray_GeometryBase::setVec3fPrimvarMb(HdSceneDelegate* sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, const TfToken& hydraName, const VtValue& value, const std::string& rdlName_0, @@ -370,32 +302,57 @@ GeometryMixin::setVec3fPrimvarMb(HdSceneDelegate* sceneDelegate, try { if (value.IsEmpty()) { // primvar was deleted - mGeometry->resetToDefault(rdlName_0); - mGeometry->resetToDefault(rdlName_1); + mGeometry.setToDefault(rdlName_0); + mGeometry.setToDefault(rdlName_1); return; } - - HdTimeSampleArray vals; - sceneDelegate->SamplePrimvar(rprim.GetId(), hydraName, &vals); - if (vals.count <= 1) { - setVec3fPrimvar(mGeometry, rdlName_0, value); - mGeometry->resetToDefault(rdlName_1); - } else { - const bool sizesMatch = - vals.values[0].Get().size() == - vals.values[vals.count - 1].Get().size(); - - if (sizesMatch) { - setVec3fPrimvar(mGeometry, rdlName_0, vals.values[0]); - setVec3fPrimvar(mGeometry, rdlName_1, vals.values[vals.count - 1]); - - } else { - // If the sizes of the arrays don't match, then the topology - // is changing and we should just use the second set of values - setVec3fPrimvar(mGeometry, rdlName_0, vals.values[vals.count - 1]); - } - } + // if time sampling interval is not enabled, just set the single sample + if (!renderDelegate.scene().isTimeSamplingIntervalEnabled()) { + setVec3fPrimvar(mGeometry, rdlName_0, hydraName, value); + mGeometry.setToDefault(rdlName_1); + return; + } + + // get the motion steps at which we should sample. + float firstSampleTime, secondSampleTime; + std::tie(firstSampleTime, secondSampleTime) = renderDelegate.scene().getTimeSamplingInterval(); + if (firstSampleTime == secondSampleTime) { + setVec3fPrimvar(mGeometry, rdlName_0, hydraName, value); + mGeometry.setToDefault(rdlName_1); + return; + } + + // get samples in interval, and unbox to Vec3f arrays. + HdTimeSampleArray samples; + sceneDelegate->SamplePrimvar(rprim.GetId(), hydraName, firstSampleTime, secondSampleTime, &samples); + if (samples.count == 0) { + setVec3fPrimvar(mGeometry, rdlName_0, hydraName, value); + mGeometry.setToDefault(rdlName_1); + return; + } + HdTimeSampleArray, INIT_SAMPLES> pointSamples; + if (!pointSamples.UnboxFrom(samples)) { + Logger::warn("Failed to unbox primvar ", hydraName, " as Vec3f array"); + setVec3fPrimvar(mGeometry, rdlName_0, hydraName, value); + mGeometry.setToDefault(rdlName_1); + return; + } + + // resample at sample times and set RDL2 motion samples + VtArray firstSample = pointSamples.Resample(firstSampleTime); + VtArray secondSample = pointSamples.Resample(secondSampleTime); + + if (firstSample.size() != secondSample.size()) { + setVec3fPrimvar(mGeometry, rdlName_0, hydraName, value); + mGeometry.setToDefault(rdlName_1); + return; + } + const rdl2::Vec3f* p = reinterpret_cast(&firstSample[0]); + mGeometry.set(rdlName_0, firstSample[0]); + p = reinterpret_cast(&secondSample[0]); + mGeometry.set(rdlName_1, secondSample[0]); + } catch (std::exception& e) { // may be called in cases that rdlName_0 or _1 don't exist : e.g. // if Hydra generates a "points" primvar for procedurals that don't diff --git a/lib/hydramoonray/procedural.cc b/lib/hydramoonray/procedural.cc new file mode 100644 index 0000000..9aed4d0 --- /dev/null +++ b/lib/hydramoonray/procedural.cc @@ -0,0 +1,152 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +// Handles any Moonray geometry shader : the RDL class name should be specified by +// procedural:class. Arbitrary RDL2 attribute "xyz" can be set by USD attribute +// procedural:xyz. primvars:moonray:xyz should also work, and will override procedural:xyz +// +// handles parts, represented by (mis)using GeometrySubset, via ProceduralAdapter. +// Translates primvars to UserData, but only if the RDL class has the +// "primitive_attributes" attribute + +#include "procedural.h" +#include "hydra2_utils.h" +#include "renderDelegate.h" +#include "ValueConverter.h" +#include "HdmLog.h" +#include "tokens.h" + +#include + +using namespace pxr; + +namespace { + static const std::string rdlAttrPrimitiveAttributes("primitive_attributes"); + +} +namespace hdMoonray { + +using PartMaterial = std::pair; +using PerPartMaterials = std::vector; + +HdMoonray_Procedural::HdMoonray_Procedural(SdfPath const& id) : + HdRprim(id), + HdMoonray_GeometryBase(this) +{} + +void +HdMoonray_Procedural::Finalize(HdRenderParam* renderParam) +{ + // causes geometry to be hidden + resetGeometryObject(HdMoonray_RenderDelegate::get(renderParam)); +} + +HdDirtyBits +HdMoonray_Procedural::GetInitialDirtyBitsMask() const +{ + return HdChangeTracker::AllDirty; +} + +// This seems to be a GL thing to set up a shader. Sync is not called. +void +HdMoonray_Procedural::_InitRepr(TfToken const &reprToken, HdDirtyBits *dirtyBits) +{ + // doing this seems to cause Sync() to be called: + *dirtyBits |= HdChangeTracker::DirtyRepr; +} + +void +HdMoonray_Procedural::syncAttributes(HdSceneDelegate* sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, + HdDirtyBits* dirtyBits, + const TfToken& reprToken) +{ + PrimAccess access(GetId(), HdMoonrayTokens->procedural, sceneDelegate, renderDelegate); + + // sync all attributes "procedural:xyx" to RDL attr xyz + for (auto attrIt = mGeometry.beginAttributes(); attrIt != mGeometry.endAttributes(); ++attrIt) { + const std::string& attrName = (*attrIt).name(); + + const TfToken primvarName("moonray:"+attrName); + if (not isPrimvarUsed(primvarName)) { + VtValue val = access.Get(TfToken(attrName)); + if (val.IsEmpty()) { + (*attrIt).setToDefault(); + } else { + (*attrIt).set(val); + } + } + + // Populate part lists + partList.clear(); + partMaterials.clear(); + partPaths.clear(); + + + VtValue parts = access.Get(HdMoonrayTokens->parts); + if (parts.IsHolding()) { + const PerPartMaterials& ppm = parts.UncheckedGet(); + partList.reserve(ppm.size()); + partMaterials.reserve(ppm.size()); + partPaths.reserve(ppm.size()); + + for (const auto& pm : ppm) { + partList.push_back(pm.first.GetName()); + partPaths.push_back(pm.first); + partMaterials.push_back(pm.second); + } + } + } + + // base class handles transform and double-sided + HdMoonray_GeometryBase::syncAttributes(sceneDelegate, renderDelegate, dirtyBits, reprToken); +} + +bool +HdMoonray_Procedural::supportsUserData() +{ + // check if the geometry supports user data, which means it has + // a "primitive_attributes" attribute + return mGeometry.isValid() && mGeometry.hasAttribute(rdlAttrPrimitiveAttributes); +} + +void +HdMoonray_Procedural::Sync(HdSceneDelegate* sceneDelegate, + HdRenderParam* renderParam, + HdDirtyBits* dirtyBits, + const TfToken& reprToken) +{ + hdmLogSyncStart("Procedural", GetId(), dirtyBits); + HdMoonray_RenderDelegate& renderDelegate(HdMoonray_RenderDelegate::get(renderParam)); + PrimAccess access(GetId(), HdMoonrayTokens->procedural, sceneDelegate, renderDelegate); + VtValue classNameValue = access.Get(HdMoonrayTokens->_class); + if (!classNameValue.IsHolding()) { + Logger::error("No procedural:class specified for ", GetId()); + return; + } + const std::string& className = classNameValue.UncheckedGet().GetString(); + + if (mGeometry.isValid() && + className != mGeometry.className()) { + // class has changed, need to clear current object + resetGeometryObject(renderDelegate); + // force a re-sync of overything + *dirtyBits = GetInitialDirtyBitsMask(); + } + + _UpdateVisibility(sceneDelegate, dirtyBits); + _UpdateInstancer(sceneDelegate, dirtyBits); + + syncAll(className, sceneDelegate, renderDelegate, dirtyBits, reprToken); + + hdmLogSyncEnd(GetId()); +} + +const TfTokenVector& +HdMoonray_Procedural::GetBuiltinPrimvarNames() const +{ + static TfTokenVector none{}; + return none; +} + +} diff --git a/lib/hydramoonray/Procedural.h b/lib/hydramoonray/procedural.h similarity index 72% rename from lib/hydramoonray/Procedural.h rename to lib/hydramoonray/procedural.h index 1a9a48c..3500d56 100644 --- a/lib/hydramoonray/Procedural.h +++ b/lib/hydramoonray/procedural.h @@ -2,7 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 #pragma once -#include "GeometryMixin.h" +#include "geometryBase.h" + +#include // Handles any Moonray geometry shader : the RDL class name should be specified by // procedural:class. Arbitrary RDL2 attribute "xyz" can be set by USD attribute @@ -14,10 +16,10 @@ namespace hdMoonray { -class Procedural final : public pxr::HdRprim, public GeometryMixin +class HdMoonray_Procedural final : public pxr::HdRprim, public HdMoonray_GeometryBase { public: - explicit Procedural(pxr::SdfPath const& id); + explicit HdMoonray_Procedural(pxr::SdfPath const& id); pxr::HdDirtyBits GetInitialDirtyBitsMask() const override; @@ -36,14 +38,15 @@ class Procedural final : public pxr::HdRprim, public GeometryMixin void _InitRepr(pxr::TfToken const &reprToken, pxr::HdDirtyBits *dirtyBits) override; pxr::HdDirtyBits _PropagateDirtyBits(pxr::HdDirtyBits bits) const override { return bits; } - // GeometryMixin overrides - void syncAttributes(pxr::HdSceneDelegate* sceneDelegate, RenderDelegate& renderDelegate, + // HdMoonray_GeometryBase overrides + void syncAttributes(pxr::HdSceneDelegate* sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, pxr::HdDirtyBits* dirtyBits, const pxr::TfToken& reprToken) override; bool supportsUserData() override; private: - Procedural(const Procedural&) = delete; - Procedural &operator =(const Procedural&) = delete; + + HdMoonray_Procedural(const HdMoonray_Procedural&) = delete; + HdMoonray_Procedural &operator =(const HdMoonray_Procedural&) = delete; }; diff --git a/lib/hydramoonray/renderBuffer.cc b/lib/hydramoonray/renderBuffer.cc new file mode 100644 index 0000000..9b4841d --- /dev/null +++ b/lib/hydramoonray/renderBuffer.cc @@ -0,0 +1,266 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "renderBuffer.h" +#include "renderDelegate.h" +#include "camera.h" +#include "ValueConverter.h" +#include "HdmLog.h" +#include "tokens.h" + +#include "pxr/base/work/loops.h" + +#include +#include + +#include + +using namespace pxr; + +namespace hdMoonray { + +void +HdMoonray_RenderBuffer::Sync(HdSceneDelegate* sceneDelegate, + HdRenderParam* renderParam, + HdDirtyBits* dirtyBits) +{ + const SdfPath& id = GetId(); + hdmLogSyncStart("RenderBuffer", id, dirtyBits); + + mRenderDelegate = &HdMoonray_RenderDelegate::get(renderParam); + HdRenderBuffer::Sync(sceneDelegate, renderParam, dirtyBits); // this calls Allocate() + hdmLogSyncEnd(id); +} + +bool +HdMoonray_RenderBuffer::Allocate(const GfVec3i& dimensions, HdFormat format, bool multiSampled) +{ + hdmLogRenderBuffer("Allocate",GetId()); + + if (dimensions[2] != 1) { + Logger::error(GetId(), ": dimensions ", dimensions, " unsupported"); + hdmLogRenderBuffer("EndAllocateErr",GetId()); + return false; + } + + mFormat = format; + + PixelSize request; + switch (format) { + case HdFormatInt32: + case HdFormatFloat32: + request.mChannels = 1; break; + case HdFormatFloat32Vec2: + request.mChannels = 2; break; + case HdFormatFloat32Vec3: + request.mChannels = 3; break; + case HdFormatFloat32Vec4: + request.mChannels = 4; break; + default: + Logger::error(GetId(), ": unknown format ", format); + hdmLogRenderBuffer("EndAllocateErr",GetId()); + return false; + } + request.mWidth = dimensions[0]; + request.mHeight = dimensions[1]; + + mRenderDelegate->applySettings(); + bool ret = mRenderDelegate->renderer().allocate(mRenderVar.renderOutput(), mPixelData, request); + hdmLogRenderBuffer("EndAllocate",GetId()); + return ret; +} + +void +HdMoonray_RenderBuffer::bind(const HdRenderPassAovBinding& aovBinding, const HdMoonray_Camera* camera) +{ + mNear = camera->getNear(); + mFar = camera->getFar(); + + if (aovBinding.clearValue.IsHolding()) { + GfVec4f v = aovBinding.clearValue.Get(); + if (v != clearValue) { + clearValue = v; + mPixelData.filmActivity = ~0; // make it recomposite even if render has finished + } + } + + if (bound()) { + return; // Hydra does not reuse render buffers for different aovs, so assume it is unchanged + } + + hdmLogRenderBuffer("Bind", GetId()); + mBound = true; + + mRenderVar.setAov(aovBinding, mRenderDelegate); + + hdmLogRenderBuffer("EndBind", GetId()); +} + +bool +HdMoonray_RenderBuffer::IsConverged() const +{ + return true; +} + +void +HdMoonray_RenderBuffer::Resolve() +{ + if (not bound()) { + // Houdini does this, so don't treat as an error + return; + } + + // See if the old image is ok + // Return what we already have (which might be the initial buffer set by Allocate) + Renderer& renderer = mRenderDelegate->renderer(); + if (not renderer.resolve(mRenderVar.renderOutput(), mPixelData)) { + return; + } + + hdmLogRenderBuffer("Resolve", GetId()); + switch (mPixelData.mChannels) { + case 1: + if (mRenderVar.isOpenGLDepth()) { + // Houdini is able to accept the linear depth buffer (see ../houdini/UsdRenderers.json) + if (mRenderDelegate->options().isHoudini()) break; + // Calculate the OpenGL style depth (near=0, far=1) from the linear depth + const float n = mNear; + const float f = mFar; + const float A = ((f+n)/(f-n) + 1)/2; + const size_t count = mPixelData.mWidth * mPixelData.mHeight; + float* buffer = reinterpret_cast(mPixelData.mData); + WorkParallelForN(count, [buffer, n, A](size_t begin, size_t end) { + for (size_t i = begin; i < end; ++i) { + float z = buffer[i]; + buffer[i] = z > n ? A * (1.0f - n/z) : 0.0f; + } + }); + } else if (mFormat == HdFormatInt32) { + // Convert float to int, for ids. + const size_t count = mPixelData.mWidth * mPixelData.mHeight; + const float* inbuffer = reinterpret_cast(mPixelData.mData); + int32_t* outbuffer; + if (mRenderVar.numExtraOutputs() > 0) { + // if we need to add in extra outputs, we need a separate buffer for the int data + intBuffer.resize(count); + outbuffer = intBuffer.data(); + } else { + // we can write over the float data with ints + outbuffer = reinterpret_cast(mPixelData.mData); + } + const float emptyValue = mRenderVar.emptyValue(); + WorkParallelForN(count, [inbuffer, outbuffer, emptyValue](size_t begin, size_t end) { + for (size_t i = begin; i < end; ++i) { + // inbuffer contains values that display as "inf" and "-0.0" : these become + // the minimum value when cast to int32. We can't use std::isfinite, because + // we have -ffast-math enabled. + int32_t intval = inbuffer[i]; + if (intval == std::numeric_limits::min()) + outbuffer[i] = emptyValue; + else + outbuffer[i] = intval; + } + }); + + // add in any extra outputs (used for nested instancing) + for (size_t i = 0; i < mRenderVar.numExtraOutputs(); ++i) { + // need to force update, since we are reusing the same buffer + renderer.resolve(mRenderVar.extraOutputs(i), mPixelData, true); + inbuffer = reinterpret_cast(mPixelData.mData); + pxr::WorkParallelForN(count, [inbuffer, outbuffer](size_t begin, size_t end) { + for (size_t i = begin; i < end; ++i) { + int32_t intval = inbuffer[i]; + if (intval != std::numeric_limits::min()) + outbuffer[i] += intval; + } + }); + } + + // uncomment this to write out the int buffer to a file for debugging + //const std::string filename = "/tmp/" + mAovName.GetString() + "-" + std::to_string(mPixelData.mWidth) + "x" + std::to_string(mPixelData.mHeight) + ".bin"; + //std::cout << "Writing " << filename << std::endl; + //std::ofstream out(filename, std::ios::binary); + //out.write(reinterpret_cast(outbuffer), count * sizeof(int32_t)); + //out.close(); + + mPixelData.mData = outbuffer; + + } else { + mFormat = HdFormatFloat32; + } + break; + case 2: + mFormat = HdFormatFloat32Vec2; + break; + case 3: + mFormat = HdFormatFloat32Vec3; + break; + case 4: + mFormat = HdFormatFloat32Vec4; + + // alpha compositing over background color must be done by delegate + if (clearValue[3] > 0.0f) { + const size_t count = mPixelData.mWidth * mPixelData.mHeight; + typedef float v4sf __attribute__ ((vector_size (16))); + v4sf* buffer = reinterpret_cast(mPixelData.mData); + if (clearValue[0] || clearValue[1] || clearValue[2] || clearValue[3] < 1.0f) { + const v4sf& cv = reinterpret_cast(clearValue[0]); + WorkParallelForN(count, [buffer, cv](size_t begin, size_t end) { + for (size_t i = begin; i < end; ++i) { + v4sf& pixel = *(buffer + i); + if (pixel[3] < 1.0f) { + if (pixel[3] > 0.0f) { + const float m = 1.0f - pixel[3]; + pixel += cv * m; + } else { + pixel += cv; + } + } + } + }); + } else { + // composite is simpler when clearValue is opaque black + WorkParallelForN(count, [buffer](size_t begin, size_t end) { + for (size_t i = begin; i < end; ++i) { + v4sf& pixel = *(buffer + i); + pixel[3] = 1.0f; + } + }); + } + } + + break; + default: + Logger::error(GetId(), ": unknown channel count ", mPixelData.mChannels); + break; + } + hdmLogRenderBuffer("EndResolve", GetId()); +} + +void +HdMoonray_RenderBuffer::Finalize(HdRenderParam* renderParam) +{ + + hdmLogRenderBuffer("Finalize", GetId()); + mRenderVar.finalize(); + HdRenderBuffer::Finalize(renderParam); + hdmLogRenderBuffer("EndFinalize", GetId()); +} + +// Called *after* Finalize() +void +HdMoonray_RenderBuffer::_Deallocate() +{ + hdmLogRenderBuffer("_Deallocate", GetId()); + + if (mPixelData.mData) { + mRenderDelegate->renderer().deallocate(mRenderVar.renderOutput(), mPixelData); + mPixelData.vec.clear(); + mPixelData.vpb.cleanUp(); + intBuffer.clear(); + mPixelData.mData = nullptr; + } + hdmLogRenderBuffer("End_Deallocate", GetId()); +} + +} diff --git a/lib/hydramoonray/RenderBuffer.h b/lib/hydramoonray/renderBuffer.h similarity index 72% rename from lib/hydramoonray/RenderBuffer.h rename to lib/hydramoonray/renderBuffer.h index 6cee1f7..988ff95 100644 --- a/lib/hydramoonray/RenderBuffer.h +++ b/lib/hydramoonray/renderBuffer.h @@ -8,19 +8,19 @@ #include #include "PixelData.h" +#include "renderVar.h" -namespace scene_rdl2 {namespace rdl2 { class RenderOutput; } } namespace hdMoonray { -class RenderDelegate; -class Camera; +class HdMoonray_RenderDelegate; +class HdMoonray_Camera; -class RenderBuffer: public pxr::HdRenderBuffer +class HdMoonray_RenderBuffer: public pxr::HdRenderBuffer { public: - explicit RenderBuffer(const pxr::SdfPath& id): pxr::HdRenderBuffer(id) {} - ~RenderBuffer() {} + explicit HdMoonray_RenderBuffer(const pxr::SdfPath& id): pxr::HdRenderBuffer(id) {} + ~HdMoonray_RenderBuffer() {} /// Get allocation information from the scene delegate. void Sync(pxr::HdSceneDelegate*, pxr::HdRenderParam*, pxr::HdDirtyBits*) override; @@ -52,8 +52,7 @@ class RenderBuffer: public pxr::HdRenderBuffer bool IsMapped() const override { return mMappers.load() != 0; } // hdMoonray api: - static pxr::HdAovDescriptor getAovDescriptor(pxr::TfToken const& name); - void bind(const pxr::HdRenderPassAovBinding&, const Camera*); + void bind(const pxr::HdRenderPassAovBinding&, const HdMoonray_Camera*); private: void _Deallocate() override; @@ -61,21 +60,14 @@ class RenderBuffer: public pxr::HdRenderBuffer PixelData mPixelData; pxr::HdFormat mFormat = pxr::HdFormatInvalid; - RenderDelegate* mRenderDelegate = nullptr; - scene_rdl2::rdl2::RenderOutput* mRenderOutput = nullptr; - static constexpr unsigned INSTANCE_NESTING = 1; // can do n+1 nested instancers - scene_rdl2::rdl2::RenderOutput* mMoreOutputs[INSTANCE_NESTING] = {0}; - - bool isDepth() const { return mDepth; } - bool isBeauty() const { return not mRenderOutput; } + HdMoonray_RenderDelegate* mRenderDelegate = nullptr; + HdMoonray_RenderVar mRenderVar; // true after bind() is called bool mBound = false; bool bound() const { return mBound; } // data for Resolve() post-processing: - pxr::TfToken mAovName; - bool mDepth = false; float mNear = 1; float mFar = 2; alignas(16) pxr::GfVec4f clearValue{0}; diff --git a/lib/hydramoonray/renderDelegate.cc b/lib/hydramoonray/renderDelegate.cc new file mode 100644 index 0000000..eba7157 --- /dev/null +++ b/lib/hydramoonray/renderDelegate.cc @@ -0,0 +1,441 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "renderDelegate.h" +#include "basisCurves.h" +#include "camera.h" +#include "instancer.h" +#include "light.h" +#include "MoonrayLightFilter.h" +#include "material.h" +#include "mesh.h" +#include "points.h" +#include "procedural.h" +#include "renderBuffer.h" +#include "renderVar.h" +#include "Renderer.h" +#include "renderPass.h" +#include "renderSettingsPrim.h" +#include "volume.h" +#include "tokens.h" + +#include +#include + +#include +#include + +using namespace pxr; + +namespace hdMoonray { + + +HdMoonray_RenderDelegate::HdMoonray_RenderDelegate(Renderer* renderer) + : HdRenderDelegate(), + mScene(*this, renderer), + mOptions(*this), + mRenderSettings(*this) +{ + _constructor(); +} + +HdMoonray_RenderDelegate::HdMoonray_RenderDelegate(Renderer* renderer, HdRenderSettingsMap const& settings) + : HdRenderDelegate(settings), + mScene(*this, renderer), + mOptions(*this), + mRenderSettings(*this) +{ + _constructor(); +} + +void +HdMoonray_RenderDelegate::_constructor() +{ + mRenderSettings.addDescriptors(mRenderSettingDescriptors); + mScene.renderer()->addDescriptors(mRenderSettingDescriptors); + _PopulateDefaultSettings(mRenderSettingDescriptors); + renderParam.This = this; + mScene.initialize(); +} + +HdMoonray_RenderDelegate::~HdMoonray_RenderDelegate() +{ +} + +void +HdMoonray_RenderDelegate::CommitResources(HdChangeTracker *tracker) +{} + +HdCommandDescriptors HdMoonray_RenderDelegate::GetCommandDescriptors() const +{ + HdCommandDescriptors descriptors; + descriptors.emplace_back(HdMoonrayTokens->reload_textures, "Reload textures"); + descriptors.emplace_back(HdMoonrayTokens->restart_arras, "Restart Arras"); + descriptors.emplace_back(HdMoonrayTokens->output_rdl, "Output Rdl"); + return descriptors; +} + +bool HdMoonray_RenderDelegate::InvokeCommand(const TfToken& command, const HdCommandArgs& args) +{ + if (command == HdMoonrayTokens->reload_textures) { + mScene.renderer()->invalidateAllTextureResources(); + return true; + } else if (command == HdMoonrayTokens->restart_arras) { + mScene.renderer()->restartRenderer(); + return true; + } else if (command == HdMoonrayTokens->output_rdl) { + mScene.renderer()->outputRdl(options().getRdlOutput()); + return true; + } + return false; +} + +// This token is repeated from usdVolImaging which we cannot access from here. +static TfToken openvdbAssetToken("openvdbAsset"); + +TfTokenVector const& +HdMoonray_RenderDelegate::GetSupportedRprimTypes() const +{ + static const TfTokenVector SUPPORTED_RPRIM_TYPES = { + HdPrimTypeTokens->mesh, + HdPrimTypeTokens->basisCurves, + HdPrimTypeTokens->points, + HdPrimTypeTokens->volume, + HdMoonrayTokens->procedural + }; + return SUPPORTED_RPRIM_TYPES; +} + + +TfTokenVector const& +HdMoonray_RenderDelegate::GetSupportedSprimTypes() const +{ + static const TfTokenVector SUPPORTED_SPRIM_TYPES = { + HdPrimTypeTokens->camera, + HdPrimTypeTokens->material, + HdPrimTypeTokens->cylinderLight, + HdPrimTypeTokens->diskLight, + HdPrimTypeTokens->distantLight, + HdPrimTypeTokens->domeLight, + HdPrimTypeTokens->rectLight, + HdPrimTypeTokens->sphereLight, + HdMoonrayTokens->geometryLight, + HdPrimTypeTokens->lightFilter, + HdPrimTypeTokens->extComputation, + }; + return SUPPORTED_SPRIM_TYPES; +} + +TfTokenVector const& +HdMoonray_RenderDelegate::GetSupportedBprimTypes() const +{ + static const TfTokenVector SUPPORTED_BPRIM_TYPES = { + HdPrimTypeTokens->renderBuffer, + HdPrimTypeTokens->renderSettings, + openvdbAssetToken, + }; + return SUPPORTED_BPRIM_TYPES; +} + +HdResourceRegistrySharedPtr +HdMoonray_RenderDelegate::GetResourceRegistry() const +{ + static HdResourceRegistrySharedPtr ptr; + if (not ptr) ptr.reset(new HdResourceRegistry()); + return ptr; +} + +// Result of this is passed to RenderBuffer::Allocate +HdAovDescriptor +HdMoonray_RenderDelegate::GetDefaultAovDescriptor(TfToken const& name) const +{ + return HdMoonray_RenderVar::getAovDescriptor(name); +} + +VtDictionary +HdMoonray_RenderDelegate::GetRenderStats() const +{ + VtDictionary stats; + if (mScene.renderer() && !mScene.renderer()->isFrameComplete()) { + auto progress = mScene.renderer()->getProgress(); + // This is the only value usdview reads, you have to turn on "View/Heads-Up Display/GPU Stats" to see it + stats[HdPerfTokens->numCompletedSamples] = int(progress * 100000); + // Values used by Houdini: + // See $HFS/toolkit/include/HUSD/XUSD_Tokens.h for full list + static const TfToken percentDone("percentDone"); + stats[percentDone] = progress * 100; + static const TfToken totalClockTime("totalClockTime"); + stats[totalClockTime] = mScene.renderer()->getElapsedSeconds(); + static const TfToken rpAnn("renderProgressAnnotation"); + const std::string& status = mScene.renderer()->getStatusString(); + if (!status.empty()) { + stats[rpAnn] = status; + } + } + return stats; +} + +bool +HdMoonray_RenderDelegate::IsPauseSupported() const +{ + return true; +} + +bool +HdMoonray_RenderDelegate::Pause() +{ + if (mScene.renderer()) mScene.renderer()->pause(); + return true; +} + +bool +HdMoonray_RenderDelegate::Resume() +{ + if (mScene.renderer()) mScene.renderer()->resume(); + return true; +} + +HdRenderPassSharedPtr +HdMoonray_RenderDelegate::CreateRenderPass(HdRenderIndex *renderIndex, + HdRprimCollection const& collection) +{ + mRenderIndex = renderIndex; + return HdRenderPassSharedPtr(new HdMoonray_RenderPass(renderIndex, collection, this)); +} + +HdInstancer* +HdMoonray_RenderDelegate::CreateInstancer(HdSceneDelegate *sceneDelegate, + SdfPath const& id) +{ + return new HdMoonray_Instancer(sceneDelegate, id); +} + +void +HdMoonray_RenderDelegate::DestroyInstancer(HdInstancer *instancer) +{ + delete instancer; +} + +HdRprim* +HdMoonray_RenderDelegate::CreateRprim(TfToken const& typeId, + SdfPath const& rprimId) +{ + if (typeId == HdPrimTypeTokens->mesh) { + return new HdMoonray_Mesh(rprimId); + } else if (typeId == HdPrimTypeTokens->basisCurves) { + return new HdMoonray_BasisCurves(rprimId); + } else if (typeId == HdPrimTypeTokens->points) { + return new HdMoonray_Points(rprimId); + } else if (typeId == HdPrimTypeTokens->volume) { + auto p = new HdMoonray_Volume(rprimId); + if (not rprimId.IsEmpty()) + mVolumes.insert(p); + return p; + } else if (typeId == HdMoonrayTokens->procedural) { + auto p = new HdMoonray_Procedural(rprimId); + if (not rprimId.IsEmpty()) + mProcedurals.insert(p); + return p; + } else { + Logger::warn(rprimId, ": unknown Rprim type ", typeId); + return nullptr; + } +} + +void +HdMoonray_RenderDelegate::DestroyRprim(HdRprim *rPrim) +{ + mProcedurals.erase(rPrim); + mVolumes.erase(rPrim); + + delete rPrim; +} + +HdSprim* +HdMoonray_RenderDelegate::CreateSprim(TfToken const& typeId, + SdfPath const& sprimId) +{ + if (typeId == HdPrimTypeTokens->camera) { + return new HdMoonray_Camera(sprimId); + } else if (typeId == HdPrimTypeTokens->material) { + return new HdMoonray_Material(sprimId); + } else if (typeId == HdPrimTypeTokens->extComputation) { + return new HdExtComputation(sprimId); // no subclass needed + } else if (typeId == HdPrimTypeTokens->lightFilter) { + return new MoonrayLightFilter(typeId, sprimId); + } else if (typeId == HdMoonrayTokens->geometryLight) { + auto p = new HdMoonray_Light(typeId, sprimId); + if (not sprimId.IsEmpty()) + mLights.insert(p); + return p; + } + else if (HdMoonray_Light::isSupportedType(typeId)) { + auto p = new HdMoonray_Light(typeId, sprimId); + if (not sprimId.IsEmpty()) + mLights.insert(p); + return p; + } + Logger::warn(sprimId, ": unknown Sprim type ", typeId); + return nullptr; +} + +HdSprim * +HdMoonray_RenderDelegate::CreateFallbackSprim(TfToken const& typeId) +{ + // all other sprims set the default values in the constructor + return CreateSprim(typeId, SdfPath::EmptyPath()); +} + +void +HdMoonray_RenderDelegate::DestroySprim(HdSprim *sPrim) +{ + mLights.erase(sPrim); + delete sPrim; +} + +HdBprim * +HdMoonray_RenderDelegate::CreateBprim(TfToken const& typeId, + SdfPath const& bprimId) +{ + if (typeId == HdPrimTypeTokens->renderBuffer) { + return new HdMoonray_RenderBuffer(bprimId); + } else if (typeId == HdPrimTypeTokens->renderSettings) { + return new HdMoonray_RenderSettings(bprimId); + } else if (typeId == openvdbAssetToken) { + return new HdMoonray_OpenVdbAsset(bprimId); + } else { + Logger::warn(bprimId, ": unknown Bprim type ", typeId); + return nullptr; + } +} + +HdBprim * +HdMoonray_RenderDelegate::CreateFallbackBprim(TfToken const& typeId) +{ + // all bprims set the default values in the constructor + return CreateBprim(typeId, SdfPath::EmptyPath()); +} + +void +HdMoonray_RenderDelegate::DestroyBprim(HdBprim *bPrim) +{ + delete bPrim; +} + +void +HdMoonray_RenderDelegate::SetRenderSetting(TfToken const& key, VtValue const& value) +{ + // allow moonray: prefixed settings, since this may appear in a RenderSettings prim + const std::string strippedKey = SdfPath::StripPrefixNamespace(key.GetString(),"moonray").first; + HdRenderDelegate::SetRenderSetting(TfToken(strippedKey), value); + + if (options().getShowRenderSettingChanges()) { + std::cout << "Render setting changed: " << strippedKey << " = " << value << std::endl; + } +} + +//////////////////////////////////////////////////////////////////////////////// + +void +HdMoonray_RenderDelegate::applySettings() +{ + unsigned v = GetRenderSettingsVersion(); + if (v != mPreviousRenderSettings) { + mPreviousRenderSettings = v; + mRenderSettings.apply(); + if (options().getShowAllRenderSettings()) { + showAllRenderSettings(); + options().setShowAllRenderSettings(false); + } + mScene.renderer()->applySettings(mRenderSettings); + mScene.renderer()->setIsHoudini(options().isHoudini()); + } +} + +void +HdMoonray_RenderDelegate::resetSettingsToDefaults() +{ + _settingsMap.clear(); + _PopulateDefaultSettings(mRenderSettingDescriptors); + _settingsVersion++; // force update on next applySettings() call + if (options().getShowRenderSettingChanges()) { + std::cout << "Render settings reset to defaults" << std::endl; + } +} + +void +HdMoonray_RenderDelegate::setRenderSettings(VtDictionary const& namespacedSettings) +{ + // namespacedSettings comes from a RenderSettingsBase prim. + // we could choose to only apply settings in the "moonray:" namespace, but it's unclear + // whether this standard is followed everywhere. + for (const auto& entry : namespacedSettings) { + SetRenderSetting(TfToken(entry.first), entry.second); + } +} + +void +HdMoonray_RenderDelegate::showAllRenderSettings() +{ + std::cout << "---------------------------------" << std::endl; + std::cout << "Render Settings:" << std::endl; + for (const auto& entry : _settingsMap) { + std::cout << " " << entry.first << ": " << entry.second.GetTypeName() << " = " << entry.second << std::endl; + } + std::cout << "---------------------------------" << std::endl; +} + + +static bool +contains(const TfTokenVector& tags, const TfToken& tag) +{ + return std::find(tags.begin(), tags.end(), tag) != tags.end(); +} + +bool +HdMoonray_RenderDelegate::setRenderTags(HdRenderIndex* index, const TfTokenVector& tags) +{ + if (tags == mRenderTags) return false; + // fix Pixar bug https://github.com/PixarAnimationStudios/USD/issues/801 + // by turning off any rprims with a removed purpose + TfTokenVector removed; + for (auto& t : mRenderTags) + if (not contains(tags, t)) removed.push_back(t); + mRenderTags = tags; + if (not removed.empty()) { + for (auto& id : index->GetRprimIds()) { + if (contains(removed, index->GetRenderTag(id))) + (const_cast(index->GetRprim(id)))->Finalize(&renderParam); + } + } + return true; +} + + +void HdMoonray_RenderDelegate::markAllLightsDirty(HdDirtyBits bits) +{ + if (!mRenderIndex) return; + for (auto& p : mLights) + mRenderIndex->GetChangeTracker().MarkSprimDirty(p->GetId(), bits); +} + +void HdMoonray_RenderDelegate::markAllProceduralsDirty(HdDirtyBits bits) +{ + if (!mRenderIndex) return; + for (auto& p : mProcedurals) + mRenderIndex->GetChangeTracker().MarkRprimDirty(p->GetId(), bits); +} + +void HdMoonray_RenderDelegate::markAllVolumesDirty(HdDirtyBits bits) +{ + if (!mRenderIndex) return; + for (auto& p : mVolumes) + mRenderIndex->GetChangeTracker().MarkRprimDirty(p->GetId(), bits); +} + +void HdMoonray_RenderDelegate::markAllRprimsDirty(HdDirtyBits bits) +{ + if (mRenderIndex) mRenderIndex->GetChangeTracker().MarkAllRprimsDirty(bits); +} + +} diff --git a/lib/hydramoonray/renderDelegate.h b/lib/hydramoonray/renderDelegate.h new file mode 100644 index 0000000..225cb83 --- /dev/null +++ b/lib/hydramoonray/renderDelegate.h @@ -0,0 +1,151 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "MoonrayScene.h" +#include "RenderSettings.h" +#include "Options.h" + +#include +#include + +namespace hdMoonray { + +class Renderer; + +class HdMoonray_RenderDelegate final: public pxr::HdRenderDelegate +{ +public: + + // HdRenderDelegate API implementation + + HdMoonray_RenderDelegate(Renderer* renderer); + HdMoonray_RenderDelegate(Renderer* renderer, pxr::HdRenderSettingsMap const& settings); + + ~HdMoonray_RenderDelegate(); + + pxr::HdRenderParam *GetRenderParam() const override { return const_cast(&renderParam); } + static HdMoonray_RenderDelegate& get(pxr::HdRenderParam* p) { return *(((RenderParam*)p)->This); } + + const pxr::TfTokenVector &GetSupportedRprimTypes() const override; + pxr::HdRprim *CreateRprim(pxr::TfToken const& typeId, pxr::SdfPath const& rprimId) override; + void DestroyRprim(pxr::HdRprim *rPrim) override; + + const pxr::TfTokenVector &GetSupportedSprimTypes() const override; + pxr::HdSprim *CreateSprim(pxr::TfToken const& typeId,pxr::SdfPath const& sprimId) override; + pxr::HdSprim *CreateFallbackSprim(pxr::TfToken const& typeId) override; + void DestroySprim(pxr::HdSprim *sPrim) override; + + const pxr::TfTokenVector &GetSupportedBprimTypes() const override; + pxr::HdBprim *CreateBprim(pxr::TfToken const& typeId, pxr::SdfPath const& bprimId) override; + pxr::HdBprim *CreateFallbackBprim(pxr::TfToken const& typeId) override; + void DestroyBprim(pxr::HdBprim *bPrim) override; + + pxr::HdRenderPassSharedPtr CreateRenderPass(pxr::HdRenderIndex *index, pxr::HdRprimCollection const& collection) override; + + pxr::HdInstancer *CreateInstancer(pxr::HdSceneDelegate *delegate, pxr::SdfPath const& id) override; + void DestroyInstancer(pxr::HdInstancer *instancer) override; + pxr::HdResourceRegistrySharedPtr GetResourceRegistry() const override; + + void CommitResources(pxr::HdChangeTracker *tracker) override; + + pxr::HdRenderSettingDescriptorList GetRenderSettingDescriptors() const override + { return mRenderSettingDescriptors; } + + pxr::HdCommandDescriptors GetCommandDescriptors() const override; + bool InvokeCommand(const pxr::TfToken& command, const pxr::HdCommandArgs& args = pxr::HdCommandArgs()) override; + + bool IsPauseSupported() const override; + bool Pause() override; + bool Resume() override; + + pxr::TfToken GetMaterialBindingPurpose() const override { return pxr::HdTokens->full; } + pxr::TfToken GetMaterialNetworkSelector() const override + { static pxr::TfToken tt("moonray"); return tt; } + + pxr::HdAovDescriptor GetDefaultAovDescriptor(pxr::TfToken const& name) const override; + + pxr::VtDictionary GetRenderStats() const override; + + void SetRenderSetting(pxr::TfToken const& key, pxr::VtValue const& value) override; + +/// Moonray-specific api + + MoonrayScene& scene() { return mScene; } + Options& options() { return mOptions; } + Renderer& renderer() { return *mScene.renderer(); } + + /// call through to scene + Renderer& renderer() const { return *mScene.renderer(); } + const scene_rdl2::rdl2::SceneContext& sceneContext() const { return mScene.sceneContext(); } + void beginUpdate() { mScene.beginUpdate(); } + scene_rdl2::rdl2::SceneContext& acquireSceneContext() { return mScene.acquireSceneContext(); } + + void applySettings(); + void showAllRenderSettings(); + void resetSettingsToDefaults(); + void setRenderSettings(pxr::VtDictionary const& namespacedSettings); + + // Fix for Pixar bug https://github.com/PixarAnimationStudios/USD/issues/801 + bool setRenderTags(pxr::HdRenderIndex* index, const pxr::TfTokenVector&); + + const RenderSettings& renderSettings() const { return mRenderSettings; } + + void markAllLightsDirty(pxr::HdDirtyBits bits); + void markAllProceduralsDirty(pxr::HdDirtyBits bits); + void markAllVolumesDirty(pxr::HdDirtyBits bits); + void markAllRprimsDirty(pxr::HdDirtyBits bits); + +private: + HdMoonray_RenderDelegate(const HdMoonray_RenderDelegate &) = delete; + HdMoonray_RenderDelegate &operator =(const HdMoonray_RenderDelegate &) = delete; + + class RenderParam final: public pxr::HdRenderParam { + public: + HdMoonray_RenderDelegate* This; // possibly this should be const + } renderParam; + + void _constructor(); + MoonrayScene mScene; + Options mOptions; + + RenderSettings mRenderSettings; + unsigned mPreviousRenderSettings = 0; + pxr::HdRenderSettingDescriptorList mRenderSettingDescriptors; + + + pxr::TfTokenVector mRenderTags; + pxr::HdRenderIndex *mRenderIndex = nullptr; // stored by CreateRenderPass + + std::set mLights; + std::set mProcedurals; + std::set mVolumes; +}; + +// Same as scene_rdl2::rdl2:::SceneObject::UpdateGuard but also stops the renderer +class UpdateGuard { +public: + // this constructor stops the renderer + UpdateGuard(HdMoonray_RenderDelegate& r, scene_rdl2::rdl2::SceneObject* obj): + mSceneObject(obj) + { r.beginUpdate(); obj->beginUpdate(); } + UpdateGuard(HdMoonray_RenderDelegate& r, MoonrayObject& obj): + mSceneObject(obj.sceneObject()) + { r.beginUpdate(); obj.beginUpdate(); } + // only use this constructor if you know rendering is stopped already + UpdateGuard(scene_rdl2::rdl2::SceneObject* obj): + mSceneObject(obj) { obj->beginUpdate(); } + UpdateGuard(scene_rdl2::rdl2::SceneObject& obj): + mSceneObject(&obj) { obj.beginUpdate(); } + UpdateGuard(MoonrayObject& obj): + mSceneObject(obj.sceneObject()) + { obj.sceneObject()->beginUpdate(); } + ~UpdateGuard() { mSceneObject->endUpdate(); } + UpdateGuard(const UpdateGuard&) = delete; + UpdateGuard& operator=(const UpdateGuard&) = delete; +private: + scene_rdl2::rdl2::SceneObject* mSceneObject; +}; + +} diff --git a/lib/hydramoonray/renderPass.cc b/lib/hydramoonray/renderPass.cc new file mode 100644 index 0000000..97bf78c --- /dev/null +++ b/lib/hydramoonray/renderPass.cc @@ -0,0 +1,308 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "renderPass.h" +#include "renderBuffer.h" +#include "renderDelegate.h" + +#include "camera.h" +#include "tokens.h" + +#include +#include + +#include +#include + +using namespace pxr; +namespace hdMoonray +{ + +HdMoonray_RenderPass::~HdMoonray_RenderPass() +{ +} + +bool +HdMoonray_RenderPass::IsConverged() const +{ + if (mProductRenderComplete) { + return true; + } + + // This oddness is to work around a Hydra bug that has been reported to pixar. + // It does not call RenderBuffer::Resolve after IsConverged returns true, so + // it never shows the last generated image. Fix this by requiring IsConverged() + // to be called twice to return true and disable the _Execute call between them. + if (mDeferIsConverged) { + return true; + } else { + mDeferIsConverged = mRenderDelegate.renderer().isFrameComplete(); + return false; + } +} + +void +HdMoonray_RenderPass::_MarkCollectionDirty() +{ +} + +void +HdMoonray_RenderPass::_Sync() +{ +} + +void +HdMoonray_RenderPass::showRenderPass(const HdRenderPassStateSharedPtr& renderPassState, + const TfTokenVector& renderTags) const +{ + std::cout << "Executing RenderPass" << std::endl; + std::cout << " Camera: " << renderPassState->GetCamera()->GetId() << std::endl; + std::cout << " AOVs: " << std::endl; + const HdRenderPassAovBindingVector& aovBindings = renderPassState->GetAovBindings(); + for (const HdRenderPassAovBinding& aovBinding : aovBindings) { + std::cout << " " << aovBinding.aovName << " -> " << aovBinding.renderBuffer->GetId() << std::endl; + std::cout << " "; + for (const auto& entry : aovBinding.aovSettings) { + std::cout << entry.first << "=" << entry.second << " "; + } + std::cout << std::endl; + } +} + +// set up the Moonray scene variables for the pass +// NB this function must be careful not to trigger a scene update if the values are unchanged, +// since that may cause the render to never terminate. +void +HdMoonray_RenderPass::setupSceneVars(HdMoonray_Camera* camera, + int imageWidth, int imageHeight) +{ + camera->setAsPrimaryCamera(mRenderDelegate, double(imageWidth)/imageHeight); + + // current frame + double dframe = 0; + HdSceneIndexBaseRefPtr sceneIndex = GetRenderIndex()->GetTerminalSceneIndex(); + if (sceneIndex) { + HdUtils::GetCurrentFrame(sceneIndex, &dframe); + } + float frame = static_cast(dframe); + + // motion blur + std::pair shutterInterval = camera->getShutterInterval(); + + rdl2::FloatVector motionSteps(2); + std::pair interval = mRenderDelegate.scene().getTimeSamplingInterval(); + motionSteps[0] = interval.first; + motionSteps[1] = interval.second; + + const bool motionBlur = mRenderDelegate.options().getEnableMotionBlur() && + (motionSteps[0] != motionSteps[1]) && + (shutterInterval.first != shutterInterval.second); + + // time sampling interval is needed iff motion blur is enabled + mRenderDelegate.scene().enableTimeSamplingInterval(motionBlur); + + const rdl2::SceneVariables& sv(mRenderDelegate.sceneContext().getSceneVariables()); + if (frame != sv.get(sv.sFrameKey) || + motionSteps != sv.get(sv.sMotionSteps) || + motionBlur != sv.get(sv.sEnableMotionBlur) || + imageWidth != sv.get(sv.sImageWidth) || + imageHeight != sv.get(sv.sImageHeight)) + { + rdl2::SceneVariables& wsv(mRenderDelegate.acquireSceneContext().getSceneVariables()); + wsv.beginUpdate(); + wsv.set(wsv.sFrameKey, frame); + wsv.set(wsv.sMotionSteps, motionSteps); + wsv.set(wsv.sEnableMotionBlur, motionBlur); + wsv.set(wsv.sImageWidth, imageWidth); + wsv.set(wsv.sImageHeight, imageHeight); + wsv.endUpdate(); + } +} + +// execute a render described by renderPassState and renderTags. Used for interactive rendering. +// This will be repeatedly called until IsConverged() returns true. +// It must be careful to avoid triggering a scene update if the values are unchanged, +// since that may cause the render to never terminate. +void +HdMoonray_RenderPass::execFromRenderPassState(const HdRenderPassStateSharedPtr& renderPassState, + const TfTokenVector& renderTags, + HdSceneIndexBaseRefPtr sceneIndex) +{ + if (!mShown && mRenderDelegate.options().getShowRenderPasses() ) { + showRenderPass(renderPassState, renderTags); + mShown = true; + } + + mRenderDelegate.applySettings(); + + // Deal with changes to "purpose" + mRenderDelegate.setRenderTags(GetRenderIndex(), renderTags); + + const rdl2::SceneContext& sc(mRenderDelegate.sceneContext()); + const rdl2::SceneVariables& sv(sc.getSceneVariables()); + + int imageWidth, imageHeight; + + if (renderPassState->GetFraming().IsValid()) { + const GfRect2i& dw(renderPassState->GetFraming().dataWindow); + imageWidth = dw.GetWidth(); + imageHeight = dw.GetHeight(); + } else { + // older clients may use viewport instead of framing + const GfVec4f& vp = renderPassState->GetViewport(); + imageWidth = vp[2]; + imageHeight = vp[3]; + } + + const HdMoonray_Camera* camera(dynamic_cast(renderPassState->GetCamera())); + if (not camera) { + Logger::error("RenderPassState without camera is unsupported"); + // It could the view+proj matricies below and update a fake Camera. But + // usdview is not using this. + return; + } + + setupSceneVars(const_cast(camera), imageWidth, imageHeight); + + + // AOV bindings + const HdRenderPassAovBindingVector& aovBindings = renderPassState->GetAovBindings(); + for (const HdRenderPassAovBinding& aovBinding : aovBindings) { + HdMoonray_RenderBuffer* buffer = reinterpret_cast(aovBinding.renderBuffer); + buffer->bind(aovBinding, camera); + } + + if (mRenderDelegate.renderer().isUpdateActive()) { + mDeferIsConverged = false; + } + mRenderDelegate.renderer().endUpdate(); + + static std::string prevRdlaOutput; + const std::string& rdlOutput(mRenderDelegate.options().getRdlOutput()); + if (rdlOutput != prevRdlaOutput) { + prevRdlaOutput = rdlOutput; + if (not rdlOutput.empty()) { + rdl2::writeSceneToFile(mRenderDelegate.sceneContext(), + rdlOutput, + false, // deltas + true); // skip defaults + } + } +} + +// Execute a render described by a RenderSettings prim. Used for batch rendering. +// Render buffers are not used : output is written directly to disk by Moonray. +// This function returns when all the products are rendered. IsConverged() will return true after return. +void +HdMoonray_RenderPass::execFromRenderSettingsPrim(const HdMoonray_RenderSettings* rsprim) +{ + std::cout << "Using RenderSettings prim " << rsprim->GetId() << std::endl; + const HdRenderSettings::RenderProducts& products = rsprim->GetRenderProducts(); + if (products.empty()) { + mProductRenderComplete = true; + Logger::error("RenderSettings prim ", rsprim->GetId(), " has no products"); + return; + } + + for (const HdRenderSettings::RenderProduct& product : products) { + mRenderDelegate.resetSettingsToDefaults(); + mRenderDelegate.setRenderSettings(rsprim->GetNamespacedSettings()); + mRenderDelegate.setRenderSettings(product.namespacedSettings); + mRenderDelegate.applySettings(); + renderProduct(product); + } + + mProductRenderComplete = true; +} + +void +HdMoonray_RenderPass::renderProduct(const HdRenderSettings::RenderProduct& product) +{ + std::cout << " Rendering product " << product.name << std::endl; + // render tags TODO + + // framing + int imageWidth = product.resolution[0]; + int imageHeight = product.resolution[1]; + std::cout << " Resolution: " << imageWidth << "x" << imageHeight << std::endl; + + // camera + HdSprim* cameraPrim = GetRenderIndex()->GetSprim(HdPrimTypeTokens->camera, product.cameraPath); + HdMoonray_Camera* camera = dynamic_cast(cameraPrim); + if (!camera) { + Logger::error("Cannot find camera '", product.cameraPath.GetString(),"'"); + mProductRenderComplete = true; + return; + } + std::cout << " Camera: " << camera->GetId() << std::endl; + + setupSceneVars(camera, imageWidth, imageHeight); + + // aovs + std::string outputFile = product.name.GetString(); + std::vector renderVars(product.renderVars.size()); + unsigned i = 0; + for (const HdRenderSettings::RenderProduct::RenderVar& renderVar : product.renderVars) { + std::cout << " Var " << renderVar.sourceName << std::endl; + for (const auto& entry : renderVar.namespacedSettings) { + std::cout << " " << entry.first << "=" << entry.second << std::endl; + } + renderVars[i].setAov(product, renderVar, &mRenderDelegate); + ++i; + } + + // execute render + if (mRenderDelegate.options().getGenerateOnly()) { + std::cout << " Generate Only option enabled, skipping render" << std::endl; + } else { + std::cout << "Starting render..." << std::endl; + mRenderDelegate.renderer().endUpdate(); + while (!mRenderDelegate.renderer().isFrameComplete()) { + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + + std::cout << "Product " << product.name << " render complete" << std::endl; + } + // write rdl if requested + std::string rdlOutput = mRenderDelegate.options().getRdlOutput(); + if (!rdlOutput.empty()) { + // if rdlOutput contains a "$P", replace with product name (ie. filename) + size_t pos = rdlOutput.find("$P"); + if (pos != std::string::npos) { + rdlOutput.replace(pos, 2, outputFile); + } + rdl2::writeSceneToFile(mRenderDelegate.sceneContext(), rdlOutput, false, true); + std::cout << "Wrote RDL to " << rdlOutput << std::endl; + } +} + +void +HdMoonray_RenderPass::_Execute(const HdRenderPassStateSharedPtr& renderPassState, + const TfTokenVector& renderTags) +{ + if (mProductRenderComplete) { + return; + } + + HdSceneIndexBaseRefPtr sceneIndex = GetRenderIndex()->GetTerminalSceneIndex(); + + // Determine if we should use a render settings prim or legacy render settings. + HdMoonray_RenderSettings* rsprim = nullptr; + if (sceneIndex) { + SdfPath rsp; + if (HdUtils::HasActiveRenderSettingsPrim(sceneIndex, &rsp)) { + rsprim = dynamic_cast( + GetRenderIndex()->GetBprim(HdPrimTypeTokens->renderSettings, rsp)); + } + } + if (rsprim) { + execFromRenderSettingsPrim(rsprim); + } else { + execFromRenderPassState(renderPassState, renderTags, sceneIndex); + } +} + + + +} + diff --git a/lib/hydramoonray/renderPass.h b/lib/hydramoonray/renderPass.h new file mode 100644 index 0000000..55e9c9a --- /dev/null +++ b/lib/hydramoonray/renderPass.h @@ -0,0 +1,60 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "renderSettingsPrim.h" + +#include + +namespace hdMoonray { + +class HdMoonray_RenderDelegate; +class HdMoonray_Camera; + +/// RenderPass represents a single render iteration, rendering a view of the +/// scene (the HdRprimCollection) for a specific viewer (the camera/viewport +/// parameters in HdRenderPassState) to the current draw target. + +class HdMoonray_RenderPass final: public pxr::HdRenderPass +{ +public: + // constructor. Directly reads data such as the RenderContext from RenderDelegate + HdMoonray_RenderPass( + pxr::HdRenderIndex* index, + const pxr::HdRprimCollection& collection, + HdMoonray_RenderDelegate* d + ) : HdRenderPass(index, collection), mRenderDelegate(*d) { } + + ~HdMoonray_RenderPass(); + + bool IsConverged() const override; + +protected: + void _Execute(pxr::HdRenderPassStateSharedPtr const& renderPassState, + pxr::TfTokenVector const &renderTags) override; + + void _MarkCollectionDirty() override; + void _Sync() override; + +private: + void setupSceneVars(HdMoonray_Camera* camera, + int imageWidth, int imageHeight); + void execFromRenderPassState(const pxr::HdRenderPassStateSharedPtr& renderPassState, + const pxr::TfTokenVector& renderTags, + pxr::HdSceneIndexBaseRefPtr sceneIndex); + + void execFromRenderSettingsPrim(const HdMoonray_RenderSettings* rsprim); + void renderProduct(const pxr::HdRenderSettings::RenderProduct& product); + + void showRenderPass(const pxr::HdRenderPassStateSharedPtr& renderPassState, + const pxr::TfTokenVector& renderTags) const; + + HdMoonray_RenderDelegate& mRenderDelegate; + mutable bool mDeferIsConverged = false; + bool mProductRenderComplete = false; + bool mShown = false; +}; + +} + diff --git a/lib/hydramoonray/renderSettingsPrim.cc b/lib/hydramoonray/renderSettingsPrim.cc new file mode 100644 index 0000000..4946ebc --- /dev/null +++ b/lib/hydramoonray/renderSettingsPrim.cc @@ -0,0 +1,27 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "renderSettingsPrim.h" + +#include "pxr/imaging/hd/sceneDelegate.h" + +#include + +using namespace pxr; + +namespace hdMoonray +{ + +HdMoonray_RenderSettings::HdMoonray_RenderSettings(SdfPath const& id) : + HdRenderSettings(id) +{ +} + +void +HdMoonray_RenderSettings::_Sync(HdSceneDelegate *sceneDelegate, + HdRenderParam *renderParam, + const HdDirtyBits *dirtyBits) +{ +} + +} diff --git a/lib/hydramoonray/renderSettingsPrim.h b/lib/hydramoonray/renderSettingsPrim.h new file mode 100644 index 0000000..73d3cd9 --- /dev/null +++ b/lib/hydramoonray/renderSettingsPrim.h @@ -0,0 +1,21 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +namespace hdMoonray { + +class HdMoonray_RenderSettings final : public pxr::HdRenderSettings +{ +public: + HdMoonray_RenderSettings(pxr::SdfPath const& id); + +protected: + void _Sync(pxr::HdSceneDelegate *sceneDelegate, + pxr::HdRenderParam *renderParam, + const pxr::HdDirtyBits *dirtyBits) override; +}; + +} diff --git a/lib/hydramoonray/renderVar.cc b/lib/hydramoonray/renderVar.cc new file mode 100644 index 0000000..b2dffe0 --- /dev/null +++ b/lib/hydramoonray/renderVar.cc @@ -0,0 +1,291 @@ +// Copyright 2023-2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "renderVar.h" +#include "renderDelegate.h" +#include "ValueConverter.h" +#include "tokens.h" + + +#include + +#include +#include + +using namespace pxr; + +namespace { + +constexpr size_t INSTANCE_NESTING = 1; // number of extra outputs for nested instancers + +// If the aov data type is not specified, we deduce the format from the source name +HdFormat getFormatForPrimvarName(const TfToken& sourceName) +{ + static std::map map = { + {HdAovTokens->color, HdFormatFloat32Vec4}, + {HdAovTokens->primId, HdFormatInt32}, + {HdAovTokens->instanceId, HdFormatInt32}, + {HdAovTokens->elementId, HdFormatInt32}, + {HdAovTokens->edgeId, HdFormatInt32}, + {HdAovTokens->pointId, HdFormatInt32}, + {HdMoonrayTokens->cryptomatte, HdFormatFloat32}, + {HdAovTokens->depth, HdFormatFloat32}, + {HdAovTokens->cameraDepth, HdFormatFloat32}, + {HdAovTokens->normal, HdFormatFloat32Vec3}, + {HdMoonrayTokens->N, HdFormatFloat32Vec3}, + {HdMoonrayTokens->st, HdFormatFloat32Vec2}, + {HdMoonrayTokens->uv, HdFormatFloat32Vec2}, + }; + auto i = map.find(sourceName); + return i != map.end() ? i->second : HdFormatFloat32; +} + +// Get the HdFormat corresponding to an AOV specification: +HdFormat getFormatForAov(const TfToken& sourceName, + const TfToken& sourceType, + const TfToken& dataType) +{ + // if the dataType is specified and one we understand, use that to determine the format + if (!dataType.IsEmpty()) { + // UsdImaging copies the dataType from UsdRenderVar, so it is an SDF type name + // We handle a limited set. + if (dataType == HdMoonrayTokens->_float) return HdFormatFloat32; + if (dataType == HdMoonrayTokens->_float2) return HdFormatFloat32Vec2; + if (dataType == HdMoonrayTokens->_float3) return HdFormatFloat32Vec3; + if (dataType == HdMoonrayTokens->_float4) return HdFormatFloat32Vec4; + if (dataType == HdMoonrayTokens->_int) return HdFormatInt32; + if (dataType == HdMoonrayTokens->_color3) return HdFormatFloat32Vec3; + if (dataType == HdMoonrayTokens->_color4) return HdFormatFloat32Vec4; + } + + // otherwise use the sourceType and sourceName to determine the format + if (sourceType.IsEmpty() || sourceType == HdMoonrayTokens->raw || sourceType == HdMoonrayTokens->primvars) { + return getFormatForPrimvarName(sourceName); + } else if (sourceType == HdMoonrayTokens->lpe) { + return HdFormatFloat32Vec3; + } else if (sourceType == HdMoonrayTokens->shader) { + return HdFormatFloat32Vec3; + } + return HdFormatFloat32; +} + +// given a full aov name, return the aov type (i.e. the prefix) and the name with any prefix removed. +// the type is empty if no prefix is found. +void splitAovName(const TfToken& fullName, TfToken& type, TfToken& name) +{ + const std::string s(fullName.GetString()); + for (size_t i = 0; i < s.size(); ++i) { + if (s[i] == ':') { + type = TfToken(s.substr(0,i+1)); + name = TfToken(s.substr(i+1)); + return; + } + if (not isalnum(s[i])) break; // prefix has to be a plain word + } + type = TfToken(); + name = fullName; +} + +} + +namespace hdMoonray { + +// static +// the RenderDelegate API requires us to provide an HdAovDescriptor given just the aov name. +HdAovDescriptor +HdMoonray_RenderVar::getAovDescriptor(TfToken const& aovName) +{ + TfToken type, name; + splitAovName(aovName, type, name); + HdFormat format = getFormatForAov(name, type, TfToken()); + return HdAovDescriptor(format, false, VtValue()); +} + +// Set up the RenderOutput using a HdRenderPassAovBinding. +// This is used in interactive rendering. There is no explicit RenderProduct or RenderVar prim, +// and we may be required to deduce the sourceName, sourceType and dataType from the aovName. +void +HdMoonray_RenderVar::setAov(const HdRenderPassAovBinding& aovBinding, + HdMoonray_RenderDelegate* renderDelegate) +{ + if (mOutput.isValid()) { + // assumes settings don't change after the first call to setAov. + // If they do, you will need to reset mOutput to force an update + return; + } + + // We will need these three values to construct the Moonray RenderOutput. + TfToken sourceName, sourceType, dataType; + + // We can get a sourceName and sourceType by splitting aovBinding.aovName + splitAovName(aovBinding.aovName, sourceType, sourceName); + + // However, Houdini works around the missing RenderVar prim by copying values into the settings dictionary of + // the binding. So we will allow any sourceName, sourceType and dataType in this dict + // to override the values we just determined from aovBinding.aovName. + auto sourceNameIt = aovBinding.aovSettings.find(HdRenderVarSchemaTokens->sourceName); + if (sourceNameIt != aovBinding.aovSettings.end()) { + if (sourceNameIt->second.IsHolding()) { + sourceName = sourceNameIt->second.UncheckedGet(); + } + else if (sourceNameIt->second.IsHolding()) { + sourceName = TfToken(sourceNameIt->second.UncheckedGet()); + } + } + + auto sourceTypeIt = aovBinding.aovSettings.find(HdRenderVarSchemaTokens->sourceType); + if (sourceTypeIt != aovBinding.aovSettings.end()) { + if (sourceTypeIt->second.IsHolding()) { + sourceType = sourceTypeIt->second.UncheckedGet(); + } + else if (sourceTypeIt->second.IsHolding()) { + sourceType = TfToken(sourceTypeIt->second.UncheckedGet()); + } + } + + auto dataTypeIt = aovBinding.aovSettings.find(HdRenderVarSchemaTokens->dataType); + if (dataTypeIt != aovBinding.aovSettings.end()) { + if (dataTypeIt->second.IsHolding()) { + dataType = dataTypeIt->second.UncheckedGet(); + } + else if (dataTypeIt->second.IsHolding()) { + dataType = TfToken(dataTypeIt->second.UncheckedGet()); + } + } + + // Given these values, we can determine the HdFormat to use for this AOV. + HdFormat targetFormat = getFormatForAov(sourceName, sourceType, dataType); + VtDictionary aovSettings(aovBinding.aovSettings.begin(), aovBinding.aovSettings.end()); + + // We don't want moonray to write the var to file in an interactive render, + // so in theory we specify the fileName as "" + // per MOONRAY-5301 this will cause a crash, so use a dummy file for now. + const std::string fileName = "/tmp/scene.exr"; + + // build the RenderOutput and any extra outputs for this AOV + buildOutputs(sourceName, sourceType, targetFormat, aovSettings, fileName, renderDelegate); +} + +// Set up the RenderOutput from RenderProduct and RenderVar prims. +void +HdMoonray_RenderVar::setAov(const HdRenderSettings::RenderProduct& product, + const HdRenderSettings::RenderProduct::RenderVar& renderVar, + HdMoonray_RenderDelegate* renderDelegate) +{ + HdFormat targetFormat = getFormatForAov(TfToken(renderVar.sourceName), renderVar.sourceType, renderVar.dataType); + const std::string outputFile = product.name.GetString(); + buildOutputs(TfToken(renderVar.sourceName), + renderVar.sourceType, + targetFormat, + renderVar.namespacedSettings, + outputFile, + renderDelegate); +} + +// create mOutput, if needed, and configure it for the given AOV name and settings +void +HdMoonray_RenderVar::buildOutputs(const TfToken& sourceName, + const TfToken& sourceType, + HdFormat targetFormat, + const VtDictionary& aovSettings, + const std::string& fileName, + HdMoonray_RenderDelegate* renderDelegate) +{ + if (sourceName == HdAovTokens->color) { + mOutput = MoonrayOutput::beautyOutput(); + return; + } + + // create a RenderOutput for this AOV + const std::string outputName = "/_outputs/" + sourceName.GetString(); + mOutput = renderDelegate->scene().createRenderOutput(outputName); + if (mOutput.isNull()) return; + + renderDelegate->scene().beginUpdate(); + + mIsOpenGLDepth = false; + mEmptyValue = 0.0f; + + // fill in the RenderOutput settings based on the AOV name + // this is a default that can be overridden by the aovSettings dictionary + if (sourceType == HdAovTokens->primvars || + sourceType == HdMoonrayTokens->raw || + sourceType.IsEmpty()) { + + // there are several special cases... + if (sourceName == HdAovTokens->primId) { + + mOutput.setAsPrimvar(sourceName.GetString(), HdFormatInt32); + mEmptyValue = -1.0f; // usdview expects -1 in primId for empty areas + + } else if (sourceName == HdAovTokens->instanceId) { + + mOutput.setAsPrimvar(sourceName.GetString(), HdFormatInt32); + + // instanceId generates multiple outputs for nested instancers: instanceIdA, instanceIdB... + // these will be added to form a single output buffer in the resolve stage + for (size_t i = 0; i < INSTANCE_NESTING; ++i) { + char letter = 'A'+i; + const std::string outputName = "/_outputs/" + sourceName.GetString() + letter; + MoonrayOutput extra = renderDelegate->scene().createRenderOutput(outputName); + if (extra.isValid()) { + extra.setAsPrimvar(sourceName.GetString() + letter, HdFormatInt32); + mExtraOutputs.push_back(extra); + } + } + } else if (sourceName == HdMoonrayTokens->cryptomatte) { + + // cryptomatte requires a primvar output as well as the main cryptomatte output + std::string deepIdName = renderDelegate->options().getDeepIdAttrName(); + if (deepIdName.empty()) deepIdName = "cryptoId"; + MoonrayOutput dummyOutput = renderDelegate->scene().createRenderOutput("/_outputs/cryptomatte_primvar"); + dummyOutput.setAsPrimvar(deepIdName, HdFormatFloat32); + + mOutput = renderDelegate->scene().createRenderOutput("/_outputs/cryptomatte"); + mOutput.setAsCryptomatte(); + + } else if (sourceName == HdAovTokens->depth || sourceName == HdAovTokens->cameraDepth) { + + mOutput.setAsDepth(); + mIsOpenGLDepth = (sourceName == HdAovTokens->depth); + + } else if (sourceName == HdAovTokens->normal || sourceName == HdMoonrayTokens->N) { + + mOutput.setAsNormal(); + + } else if (sourceName == HdMoonrayTokens->st || sourceName == HdMoonrayTokens->uv) { + + mOutput.setAsSt(); + + } else { + + mOutput.setAsPrimvar(sourceName.GetString(), targetFormat); + } + + } else if (sourceType == HdAovTokens->lpe) { + + mOutput.setAsLpe(sourceName.GetString()); + + } else if (sourceType == HdAovTokens->shader) { + + mOutput.setAsShader(sourceName.GetString()); + } + + mOutput.setFileName(fileName); + mOutput.applySettings(aovSettings); +} + +void +HdMoonray_RenderVar::finalize() +{ + if (mOutput.isValid()) { + mOutput.deactivate(); + } + for (auto& output : mExtraOutputs) { + if (output.isValid()) { + output.deactivate(); + } + } +} + +} // namespace hdMoonray diff --git a/lib/hydramoonray/renderVar.h b/lib/hydramoonray/renderVar.h new file mode 100644 index 0000000..d0c3ca6 --- /dev/null +++ b/lib/hydramoonray/renderVar.h @@ -0,0 +1,66 @@ +// Copyright 2023-2024 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "MoonrayOutput.h" + +#include +#include +#include +#include + +namespace hdMoonray { + +class HdMoonray_RenderDelegate; + +// RenderVar associates a Moonray RenderOutput object with a Hydra AOV. +// There is generally one RenderOutput for each AOV, except in the special cases of cryptomatte and instanceId. +// When rendering interactively, each AOV is associated with a RenderBuffer, which in turn uses a RenderVar to build its RenderOutput. +// In the interactive case, RenderBuffer can support some AOVs not supported by Moonray, by post-processing a RenderOutput that is supported. +// In the batch case, the RenderOutput is configured to write directly to a file, with no RenderBuffer, +// and any post-processing must be done outside of HdMoonray. +class HdMoonray_RenderVar +{ +public: + + void setAov(const pxr::HdRenderPassAovBinding& aovBinding, + HdMoonray_RenderDelegate* renderDelegate); + + void setAov(const pxr::HdRenderSettings::RenderProduct& product, + const pxr::HdRenderSettings::RenderProduct::RenderVar& renderVar, + HdMoonray_RenderDelegate* renderDelegate); + + static pxr::HdAovDescriptor getAovDescriptor(pxr::TfToken const& name); + + MoonrayOutput renderOutput() const { return mOutput; } + + // extra outputs are used for nested instancers, which need to write out multiple AOVs for each instance + size_t numExtraOutputs() const { return mExtraOutputs.size(); } + MoonrayOutput extraOutputs(unsigned i) const { return mExtraOutputs[i]; } + + bool isOpenGLDepth() const { return mIsOpenGLDepth; } + bool isBeauty() const { return mOutput.isBeauty(); } + float emptyValue() const { return mEmptyValue; } + + void finalize(); + +private: + + void buildOutputs(const pxr::TfToken& sourceName, + const pxr::TfToken& sourceType, + pxr::HdFormat targetFormat, + const pxr::VtDictionary& aovSettings, + const std::string& fileName, + HdMoonray_RenderDelegate* renderDelegate); + + pxr::TfToken mSourceName; + MoonrayOutput mOutput; + std::vector mExtraOutputs; + + bool mIsOpenGLDepth = false; + float mEmptyValue = 0.0f; +}; + +} + diff --git a/lib/hydramoonray/shader_utils.cc b/lib/hydramoonray/shader_utils.cc new file mode 100644 index 0000000..81e67f2 --- /dev/null +++ b/lib/hydramoonray/shader_utils.cc @@ -0,0 +1,257 @@ +// Copyright 2023-2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "shader_utils.h" +#include "renderDelegate.h" +#include "ValueConverter.h" +#include "light.h" +#include "shader_utils.h" + +#include + +// turn this on to use a proxy SwitchMaterial for terminals, +// so that assignments remain valid even if the material network is modified +// #define USE_PROXY_TERMINAL 1 + +using namespace pxr; +using namespace hdMoonray; +namespace { + +const std::string rdlClassSwitchMaterial("SwitchMaterial"); +const std::string rdlAttrSwitchChoice("choice"); +const std::string rdlAttrSwitchMaterial0("material0"); + +// get an object attribute from a parameter value, +// depending on the interface type of the attribute. +// There is no way to directly specify an object parameter value in UsdShade, +// so we have to use a string path and look up the object. +MoonrayObject +getObjectAttributeValue( + const MoonrayAttribute& attribute, + const VtValue& val, + HdMoonray_RenderDelegate& renderDelegate, + HdSceneDelegate *sceneDelegate) +{ + // LightSet RDL attributes are set from a list of light paths in USD. + if (attribute.hasInterfaceType(hdMoonray::MoonrayAttribute::InterfaceType::INTERFACE_LIGHTSET) && + val.IsHolding()) { + std::set lights; + VtStringArray strings = val.UncheckedGet(); + for (std::string s : strings) { + SdfPath lightPath(s); + hdMoonray::MoonrayObject rdlLight = hdMoonray::HdMoonray_Light::lightForMaterialLink(sceneDelegate, lightPath); + if (rdlLight.isValid()) { + lights.insert(rdlLight); + } + } + return renderDelegate.scene().getLightSet(lights); + } + return MoonrayObject(); +} + +// construct a Moonray shader SceneObject from a HdMaterialNode, and set its parameters +MoonrayObject +makeMoonrayShader( + HdMoonray_RenderDelegate& renderDelegate, + HdSceneDelegate *sceneDelegate, + const HdMaterialNode& node, + const SdfPath& nodeId) +{ + MoonrayObject shaderObj = renderDelegate.scene().create(node.identifier.GetString(), nodeId); + if (shaderObj.isValid()) { + try { + UpdateGuard guard(shaderObj); + for (auto attrIt = shaderObj.beginAttributes(); attrIt != shaderObj.endAttributes(); ++attrIt) { + const std::string& attrName = (*attrIt).name(); + auto valIt = node.parameters.find(TfToken(attrName)); + if (valIt != node.parameters.end()) { + // Object valued RDL attributes are handled specially. + if ((*attrIt).type() == MoonrayAttribute::Type::TYPE_SCENE_OBJECT) { + MoonrayObject obj = getObjectAttributeValue(*attrIt, valIt->second, renderDelegate, sceneDelegate); + (*attrIt).set(obj); + } else { + (*attrIt).set(valIt->second); + } + } else { + (*attrIt).setToDefault(); + } + } + } catch (const std::exception& e) { + Logger::error(node.path, ": ", e.what()); + return MoonrayObject(); + } + } + return shaderObj; +} + +// helper for getTerminalInternal +std::string +getNodeWithChannelName(const std::string& nodePath, + const std::string& channelName) +{ + return nodePath + std::string(".") + channelName; +} + +} + +namespace hdMoonray { + + void dumpMaterialNetworkMap(const HdMaterialNetworkMap& networkmap); + +MoonrayObject +getTerminalInternal(const SdfPath& id, + const std::string& terminalName, + HdMoonray_RenderDelegate& renderDelegate, + HdSceneDelegate* sceneDelegate) +{ + VtValue resource = sceneDelegate->GetMaterialResource(id); + if (!resource.IsHolding()) { + return MoonrayObject(); + } + const HdMaterialNetworkMap& networkmap = resource.UncheckedGet(); + auto iter = networkmap.map.find(TfToken(terminalName)); + if (iter == networkmap.map.end()) { + return MoonrayObject(); + } + + const HdMaterialNetwork & network = iter->second; + + MoonrayObject last; + for (const HdMaterialNode& node : network.nodes) { + MoonrayObject next; + + // Moonray name must be absolute so that it is unique in the scene. + // (HDM-401 : USD 0.25.5 returns relative node paths) + next = makeMoonrayShader(renderDelegate, + sceneDelegate, + node, + node.path.MakeAbsolutePath(id)); + if (next.isValid()) last = next; // HDM-368 : don't give up on error + } + + for (const HdMaterialRelationship& rel : network.relationships) { + + MoonrayObject input = renderDelegate.scene().getObject(rel.inputId.MakeAbsolutePath(id)); + if (input.isNull()) continue; + + MoonrayObject output = renderDelegate.scene().getObject(rel.outputId.MakeAbsolutePath(id)); + if (output.isNull()) continue; + + try { + UpdateGuard guard(output); + const std::string outputAttrName = rel.outputName.GetString(); + output.getAttribute(outputAttrName).set(input); + } catch (const std::exception& e) { + Logger::error(rel.outputId, ": ", e.what()); + } + } + + return last.isValid() ? last : MoonrayObject(); +} + +MoonrayObject +getTerminal(const SdfPath& id, + const std::string& terminalName, + HdMoonray_RenderDelegate& renderDelegate, + HdSceneDelegate* sceneDelegate) +{ + MoonrayObject terminal = getTerminalInternal(id, terminalName, renderDelegate, sceneDelegate); +#if defined(USE_PROXY_TERMINAL) + // where possible, we return a "proxy" object that has the same effect as the actual terminal, + // but is named independently of the material network content. Assignments of the proxy will remain valid + // even if the material network is modified in a way that changes the rdl2 name of the terminal. + if (terminal.isValid() && terminal.hasInterfaceType(MoonrayAttribute::InterfaceType::INTERFACE_MATERIAL)) { + MoonrayObject proxy = renderDelegate.scene().createObject(rdlClassSwitchMaterial, id, "_" + terminalName); + if (proxy.isValid()) { + UpdateGuard guard(proxy); + proxy.set(rdlAttrSwitchChoice, 0); + proxy.set(rdlAttrSwitchMaterial0, terminal); + return proxy; + } + } +#endif + return terminal; +} + +MoonrayObject +getNodeByConnection(const SdfPath& id, + const std::string& paramName, + HdMoonray_RenderDelegate& renderDelegate, + HdSceneDelegate* sceneDelegate) +{ + MoonrayObject ret = MoonrayObject(); + VtValue hdMatVal = sceneDelegate->GetMaterialResource(id); + if (!hdMatVal.IsHolding()) { + return ret; + } + const HdMaterialNetworkMap& networkmap = hdMatVal.UncheckedGet(); + SdfPath inputId; + for (auto const& iter : networkmap.map) { + const HdMaterialNetwork & network = iter.second; + for (const HdMaterialRelationship& rel : network.relationships) { + if (rel.outputName == paramName){ + inputId = rel.inputId; + break; + } + } + if (inputId.IsEmpty()) + continue; + + // found the connected network, import all the shader nodes + // and set the connected one + for (const HdMaterialNode & node : network.nodes) { + // we have to skip the actual light filter node + if (node.identifier == "MoonrayLightFilter" || + node.path == id) { + continue; + } + const std::string nodeName = node.path.GetString(); + MoonrayObject shader = makeMoonrayShader(renderDelegate, + sceneDelegate, + node, + node.path.MakeAbsolutePath(id)); + if (shader.isNull()) continue; + if (node.path == inputId) ret = shader; + } + } + return ret; +} + +void +dumpMaterialNetworkMap(const HdMaterialNetworkMap& networkmap) +{ + std::cout << "=== Material Networks ===" << std::endl; + for (auto const& iter : networkmap.map) { + const TfToken & terminalName = iter.first; + const HdMaterialNetwork & network = iter.second; + + std::cout << "Terminal '" << terminalName << "':" << std::endl; + + std::cout << " primvars:"; + for (const TfToken& primvarName : network.primvars) { + std::cout << " " << primvarName; + } + std::cout << std::endl; + + unsigned i = 0; + for (const HdMaterialNode & node : network.nodes) { + std::cout << " node " << i++ << ": " << node.identifier << " " << node.path << std::endl; + for (auto const& jter : node.parameters) { + std::cout << " " << jter.first << " = " << jter.second + << " [" << jter.second.GetTypeName() << "] " << std::endl; + } + } + + for (const HdMaterialRelationship& rel : network.relationships) { + std::cout << " " << rel.outputId << "." << rel.outputName + << " bound to "<< rel.inputId << "." << rel.inputName + << std::endl; + } + std::cout << "---" << std::endl; + } + + std::cout << "=========================" << std::endl; +} + + +} // namespace hdMoonray \ No newline at end of file diff --git a/lib/hydramoonray/shader_utils.h b/lib/hydramoonray/shader_utils.h new file mode 100644 index 0000000..c051ce0 --- /dev/null +++ b/lib/hydramoonray/shader_utils.h @@ -0,0 +1,28 @@ +// Copyright 2023-2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "MoonrayObject.h" +#include +#include + +namespace hdMoonray { + +class HdMoonray_RenderDelegate; + +// Get the network for the given terminal from the material resource +// associated with id, and create corresponding SceneObjects +MoonrayObject +getTerminal(const pxr::SdfPath& id, + const std::string& terminalName, + HdMoonray_RenderDelegate&, pxr::HdSceneDelegate*); + +// This is a bit of a hack, used to support texture maps in MoonrayLightFilter +// it is intended to get a single node connected to a given parameter +MoonrayObject +getNodeByConnection(const pxr::SdfPath& id, + const std::string& paramName, + HdMoonray_RenderDelegate&, pxr::HdSceneDelegate*); + +} \ No newline at end of file diff --git a/lib/hydramoonray/tokens.cc b/lib/hydramoonray/tokens.cc new file mode 100644 index 0000000..3aa62d7 --- /dev/null +++ b/lib/hydramoonray/tokens.cc @@ -0,0 +1,10 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "tokens.h" + +PXR_NAMESPACE_OPEN_SCOPE + +TF_DEFINE_PUBLIC_TOKENS(HdMoonrayTokens, HDM_TOKENS); + +PXR_NAMESPACE_CLOSE_SCOPE \ No newline at end of file diff --git a/lib/hydramoonray/tokens.h b/lib/hydramoonray/tokens.h new file mode 100644 index 0000000..f3752f7 --- /dev/null +++ b/lib/hydramoonray/tokens.h @@ -0,0 +1,59 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include +#include + +PXR_NAMESPACE_OPEN_SCOPE + +#define HDM_API +#define HDM_TOKENS \ + ((moonray_class,"moonray:class")) \ + (PerspectiveCamera) \ + (OrthographicCamera) \ + ((moonray_side_type,"moonray:side_type")) \ + (SpotLight) \ + (RectLight) \ + (geometryLight) \ + (geometry) \ + (moonray) \ + ((_class, "class")) \ + (projector) \ + (light_filters) \ + (categoryUnset) \ + (procedural) \ + (parts) \ + (reload_textures) \ + (restart_arras) \ + (output_rdl) \ + (openvdbAsset) \ + (density) \ + (velocity) \ + (fieldName) \ + (fieldIndex) \ + (st) \ + (uv) \ + (normal) \ + (N) \ + ((moonray_curves_subtype,"moonray:curves_subtype")) \ + ((moonray_tessellation_rate,"moonray:tessellation_rate")) \ + (primvars) \ + (lpe) \ + (shader) \ + (raw) \ + (cryptomatte) \ + ((_float, "float")) \ + ((_float2, "float2")) \ + ((_float3, "float3")) \ + ((_float4, "float4")) \ + ((_int, "int")) \ + ((_color3, "color3")) \ + ((_color4, "color4")) + +TF_DECLARE_PUBLIC_TOKENS(HdMoonrayTokens, HDM_API, HDM_TOKENS); + +#undef HDM_API + +PXR_NAMESPACE_CLOSE_SCOPE diff --git a/lib/hydramoonray/Volume.cc b/lib/hydramoonray/volume.cc similarity index 60% rename from lib/hydramoonray/Volume.cc rename to lib/hydramoonray/volume.cc index 97c6df1..ecd3dfa 100644 --- a/lib/hydramoonray/Volume.cc +++ b/lib/hydramoonray/volume.cc @@ -1,70 +1,66 @@ // Copyright 2023-2024 DreamWorks Animation LLC // SPDX-License-Identifier: Apache-2.0 -#include "Volume.h" -#include "RenderDelegate.h" +#include "volume.h" +#include "renderDelegate.h" #include "HdmLog.h" -#include "pxr/usd/sdf/types.h" // for SdfAssetPath -#include +#include "tokens.h" + +#include // for SdfAssetPath + #include using namespace pxr; namespace { - -const std::string rdlClassVdb("VdbGeometry"); -const std::string rdlAttrModel("model"); - + const std::string rdlClassVdb("VdbGeometry"); + const std::string rdlAttrModel("model"); } namespace hdMoonray { -using scene_rdl2::logging::Logger; -Volume::Volume(SdfPath const& id) : - HdVolume(id), - GeometryMixin(this) + +HdMoonray_Volume::HdMoonray_Volume(SdfPath const& id) : + HdVolume(id), HdMoonray_GeometryBase(this) {} void -Volume::Finalize(HdRenderParam* renderParam) +HdMoonray_Volume::Finalize(HdRenderParam* renderParam) { // causes geometry to be hidden - resetGeometryObject(RenderDelegate::get(renderParam)); + resetGeometryObject(HdMoonray_RenderDelegate::get(renderParam)); } HdDirtyBits -Volume::GetInitialDirtyBitsMask() const +HdMoonray_Volume::GetInitialDirtyBitsMask() const { return HdChangeTracker::AllDirty; } void -Volume::syncAttributes(HdSceneDelegate* sceneDelegate, - RenderDelegate& renderDelegate, +HdMoonray_Volume::syncAttributes(HdSceneDelegate* sceneDelegate, + HdMoonray_RenderDelegate& renderDelegate, HdDirtyBits* dirtyBits, const TfToken& reprToken) { - static const TfToken densityToken("density"); - static const TfToken velocityToken("velocity"); - auto fields(sceneDelegate->GetVolumeFieldDescriptors(GetId())); const std::string* filePath = nullptr; for (auto& desc: fields) { - const OpenVdbAsset* const field = - dynamic_cast(sceneDelegate->GetRenderIndex().GetBprim( + const HdMoonray_OpenVdbAsset* const field = + dynamic_cast(sceneDelegate->GetRenderIndex().GetBprim( desc.fieldPrimType, desc.fieldId)); if (!field) continue; - if (desc.fieldName == densityToken || - desc.fieldName == velocityToken) { + if (desc.fieldName == HdMoonrayTokens->density || + desc.fieldName == HdMoonrayTokens->velocity) { const std::string attributeName = desc.fieldName.GetString() + "_grid"; std::string grid(field->name().GetString()); if (field->index() > 0) { grid += "[" + std::to_string(field->index()) + "]"; } - geometry()->set(attributeName, grid); + mGeometry.set(attributeName, grid); const std::string& fp = field->filePath(); if (not fp.empty()) { @@ -75,24 +71,24 @@ Volume::syncAttributes(HdSceneDelegate* sceneDelegate, filePath = &fp; } if (filePath) { - geometry()->set(rdlAttrModel, *filePath); + mGeometry.set(rdlAttrModel, *filePath); } } } // base class handles transform and double-sided - GeometryMixin::syncAttributes(sceneDelegate, renderDelegate, dirtyBits, reprToken); + HdMoonray_GeometryBase::syncAttributes(sceneDelegate, renderDelegate, dirtyBits, reprToken); } void -Volume::Sync(HdSceneDelegate* sceneDelegate, +HdMoonray_Volume::Sync(HdSceneDelegate* sceneDelegate, HdRenderParam* renderParam, HdDirtyBits* dirtyBits, const TfToken& reprToken) { hdmLogSyncStart("Volume", GetId(), dirtyBits); - RenderDelegate& renderDelegate(RenderDelegate::get(renderParam)); + HdMoonray_RenderDelegate& renderDelegate(HdMoonray_RenderDelegate::get(renderParam)); _UpdateVisibility(sceneDelegate, dirtyBits); _UpdateInstancer(sceneDelegate, dirtyBits); @@ -103,13 +99,10 @@ Volume::Sync(HdSceneDelegate* sceneDelegate, } void -OpenVdbAsset::Sync(HdSceneDelegate *sceneDelegate, +HdMoonray_OpenVdbAsset::Sync(HdSceneDelegate *sceneDelegate, HdRenderParam *renderParam, HdDirtyBits *dirtyBits) { - const TfToken fieldNameToken("fieldName"); - const TfToken fieldIndexToken("fieldIndex"); - const SdfPath& id = GetId(); hdmLogSyncStart("OpenVdbAsset", id, dirtyBits); @@ -117,9 +110,9 @@ OpenVdbAsset::Sync(HdSceneDelegate *sceneDelegate, VtValue v; v = sceneDelegate->Get(id, HdFieldTokens->filePath); mFilePath = v.Get().GetResolvedPath(); - v = sceneDelegate->Get(id, fieldNameToken); + v = sceneDelegate->Get(id, HdMoonrayTokens->fieldName); mName = v.Get(); - v = sceneDelegate->GetLightParamValue(id, fieldIndexToken); + v = sceneDelegate->GetLightParamValue(id, HdMoonrayTokens->fieldIndex); mIndex = (not v.IsEmpty()) ? v.Get() : -1; } *dirtyBits = Clean; diff --git a/lib/hydramoonray/Volume.h b/lib/hydramoonray/volume.h similarity index 72% rename from lib/hydramoonray/Volume.h rename to lib/hydramoonray/volume.h index 506e01b..9bd6720 100644 --- a/lib/hydramoonray/Volume.h +++ b/lib/hydramoonray/volume.h @@ -3,17 +3,17 @@ #pragma once -#include "GeometryMixin.h" +#include "geometryBase.h" #include #include namespace hdMoonray { /// USD-style volume prim -class Volume final : public pxr::HdVolume, public GeometryMixin +class HdMoonray_Volume final : public pxr::HdVolume, public HdMoonray_GeometryBase { public: - explicit Volume(pxr::SdfPath const& id); + explicit HdMoonray_Volume(pxr::SdfPath const& id); pxr::HdDirtyBits GetInitialDirtyBitsMask() const override; @@ -30,23 +30,23 @@ class Volume final : public pxr::HdVolume, public GeometryMixin void _InitRepr(pxr::TfToken const &reprToken, pxr::HdDirtyBits *dirtyBits) override {} pxr::HdDirtyBits _PropagateDirtyBits(pxr::HdDirtyBits bits) const override { return bits; } - // GeometryMixin overrides - void syncAttributes(pxr::HdSceneDelegate* sceneDelegate, RenderDelegate& renderDelegate, + // HdMoonray_GeometryBase overrides + void syncAttributes(pxr::HdSceneDelegate* sceneDelegate, HdMoonray_RenderDelegate& renderDelegate, pxr::HdDirtyBits* dirtyBits, const pxr::TfToken& reprToken) override; bool isVolume() override { return true; } bool supportsUserData() override { return false; } private: - Volume(const Volume&) = delete; - Volume &operator =(const Volume&) = delete; + HdMoonray_Volume(const HdMoonray_Volume&) = delete; + HdMoonray_Volume &operator =(const HdMoonray_Volume&) = delete; }; /// USD field prim, these belong to the volumes -class OpenVdbAsset final : public pxr::HdField +class HdMoonray_OpenVdbAsset final : public pxr::HdField { public: - OpenVdbAsset(const pxr::SdfPath& id): pxr::HdField(id) {} + HdMoonray_OpenVdbAsset(const pxr::SdfPath& id): pxr::HdField(id) {} void Sync(pxr::HdSceneDelegate*, pxr::HdRenderParam*, pxr::HdDirtyBits*) override; diff --git a/package.py b/package.py index 828e9a3..bfa208a 100755 --- a/package.py +++ b/package.py @@ -16,7 +16,7 @@ def early(): return lambda x: x @early() def version(): - _version = '7.6' + _version = '10.3' from rezbuild import earlybind return earlybind.version(this, _version) @@ -40,30 +40,6 @@ def version(): variants = [ [ # variant 0 - 'os-rocky-9', - 'refplat-vfx2023.1', - 'usd_imaging-0.23.8.x', - 'openimageio-2.4.8.0.x', - 'opt_level-optdebug', - 'python-3.10' - ], - [ # variant 1 - 'os-rocky-9', - 'refplat-vfx2023.1', - 'usd_imaging-0.23.8.x', - 'openimageio-2.4.8.0.x', - 'opt_level-debug', - 'python-3.10' - ], - [ # variant 2 - 'os-rocky-9', - 'refplat-vfx2024.0', - 'usd_imaging-0.24.3.x', - 'openimageio-2.4.8.0.x', - 'opt_level-optdebug', - 'python-3.11' - ], - [ # variant 3 'os-rocky-9', 'refplat-vfx2025.0', 'usd_imaging-0.25.5.1.x', @@ -71,7 +47,7 @@ def version(): 'opt_level-optdebug', 'python-3.11' ], - [ # variant 4 + [ # variant 1 'os-rocky-9', 'refplat-houdini21.0', 'usd_imaging-0.25.5.1.x.5', @@ -79,14 +55,14 @@ def version(): 'opt_level-optdebug', 'python-3.11' ], - [ # variant 5 - 'os-rocky-9', - 'refplat-vfx2022.0', - 'usd_imaging-0.22.5.x.4', - 'openimageio-2.3.20.0.x', - 'opt_level-optdebug', - 'python-3.9' - ], + #[ # variant 2 + # 'os-rocky-9', + # 'refplat-vfx2025.0', + # 'usd_imaging-0.25.11', + # 'openimageio-3.0', + # 'opt_level-optdebug', + # 'python-3.11' + #], ] conf_CI_variants = variants diff --git a/plugin/adapters/CMakeLists.txt b/plugin/adapters/CMakeLists.txt index 5765232..dcb5c5b 100644 --- a/plugin/adapters/CMakeLists.txt +++ b/plugin/adapters/CMakeLists.txt @@ -14,13 +14,15 @@ set_target_properties(${component} PROPERTIES PREFIX "") # Custom DWA source file if ("$ENV{STUDIO}" STREQUAL "GLD") - set(DwaSpecificSources ProceduralAdapter.cc) + set(DwaSpecificSources ProceduralAdapter.cc dataSourceProcedural.cc) endif() target_sources(${component} PRIVATE MoonrayMeshLightAdapter.cc MoonrayLightFilterAdapter.cc + dataSourceLightFilter.cc + dataSourceMeshLight.cc ${DwaSpecificSources} ) diff --git a/plugin/adapters/MoonrayLightFilterAdapter.cc b/plugin/adapters/MoonrayLightFilterAdapter.cc index f96216e..e2ab664 100644 --- a/plugin/adapters/MoonrayLightFilterAdapter.cc +++ b/plugin/adapters/MoonrayLightFilterAdapter.cc @@ -2,17 +2,26 @@ // SPDX-License-Identifier: Apache-2.0 #include "MoonrayLightFilterAdapter.h" +#include "dataSourceLightFilter.h" + #include #include #include +#include +#include +#include "pxr/imaging/hd/retainedDataSource.h" -#include "pxr/imaging/hd/tokens.h" +#include PXR_NAMESPACE_OPEN_SCOPE namespace { + // Note: currently MoonrayLightFilter linking fails if the Hydra type is not + // "lightFilter". I think because the light linking code is expecting that type... + TfToken moonrayLightFilterToken("lightFilter"); + // TfToken moonrayLightFilterToken("moonrayLightFilter"); TfToken cookie_projector_token("moonray:projector"); TfToken combine_filters_token("moonray:light_filters"); } @@ -28,6 +37,69 @@ MoonrayLightFilterAdapter::~MoonrayLightFilterAdapter() { } +TfTokenVector +MoonrayLightFilterAdapter::GetImagingSubprims(UsdPrim const& prim) +{ + return { TfToken() }; +} + +TfToken +MoonrayLightFilterAdapter::GetImagingSubprimType( + UsdPrim const& prim, + TfToken const& subprim) +{ + if (subprim.IsEmpty()) { + return moonrayLightFilterToken; + } + return TfToken(); +} + +HdContainerDataSourceHandle +MoonrayLightFilterAdapter::GetImagingSubprimData( + UsdPrim const& prim, + TfToken const& subprim, + const UsdImagingDataSourceStageGlobals &stageGlobals) +{ + if (!subprim.IsEmpty()) { + return nullptr; + } + + return HdOverlayContainerDataSource::New( + HdRetainedContainerDataSource::New( + HdPrimTypeTokens->material, + UsdImagingDataSourceMaterial::New( + prim, + stageGlobals, + HdMaterialTerminalTokens->lightFilter) + ), + MoonrayDataSourceLightFilterPrim::New( + prim.GetPath(), + prim, + stageGlobals) + ); +} + +HdDataSourceLocatorSet +MoonrayLightFilterAdapter::InvalidateImagingSubprim( + UsdPrim const& prim, + TfToken const& subprim, + TfTokenVector const& properties, + const UsdImagingPropertyInvalidationType invalidationType) +{ + if (subprim.IsEmpty()) { + return MoonrayDataSourceLightFilterPrim::Invalidate( + prim, subprim, properties, invalidationType); + } + + return HdDataSourceLocatorSet(); +} + +bool +MoonrayLightFilterAdapter::IsSupported(UsdImagingIndexProxy const* index) const +{ + return index->IsRprimTypeSupported(moonrayLightFilterToken); +} + VtValue MoonrayLightFilterAdapter::Get( UsdPrim const& prim, @@ -58,5 +130,21 @@ MoonrayLightFilterAdapter::Get( return BaseAdapter::Get(prim, cachePath, key, time, outIndices); } +SdfPath +MoonrayLightFilterAdapter::Populate(UsdPrim const& prim, + UsdImagingIndexProxy* index, + UsdImagingInstancerContext const* instancerContext) +{ + index->InsertSprim(moonrayLightFilterToken, prim.GetPath(), prim); + + return prim.GetPath(); +} + +void +MoonrayLightFilterAdapter::_RemovePrim(SdfPath const& cachePath, + UsdImagingIndexProxy* index) +{ + index->RemoveSprim(moonrayLightFilterToken, cachePath); +} PXR_NAMESPACE_CLOSE_SCOPE diff --git a/plugin/adapters/MoonrayLightFilterAdapter.h b/plugin/adapters/MoonrayLightFilterAdapter.h index 642bbd9..d244d90 100644 --- a/plugin/adapters/MoonrayLightFilterAdapter.h +++ b/plugin/adapters/MoonrayLightFilterAdapter.h @@ -25,11 +25,41 @@ class MoonrayLightFilterAdapter : public UsdImagingLightFilterAdapter { virtual ~MoonrayLightFilterAdapter(); + USDIMAGING_API + TfTokenVector GetImagingSubprims(UsdPrim const& prim) override; + + USDIMAGING_API + TfToken GetImagingSubprimType( + UsdPrim const& prim, + TfToken const& subprim) override; + + USDIMAGING_API + HdContainerDataSourceHandle GetImagingSubprimData( + UsdPrim const& prim, + TfToken const& subprim, + const UsdImagingDataSourceStageGlobals &stageGlobals) override; + + USDIMAGING_API + HdDataSourceLocatorSet InvalidateImagingSubprim( + UsdPrim const& prim, + TfToken const& subprim, + TfTokenVector const& properties, + UsdImagingPropertyInvalidationType invalidationType) override; + virtual VtValue Get(UsdPrim const& prim, SdfPath const& cachePath, TfToken const& key, UsdTimeCode time, VtIntArray* outIndices) const; + + bool IsSupported(UsdImagingIndexProxy const*) const override; + + SdfPath Populate(UsdPrim const& prim, + UsdImagingIndexProxy* index, + UsdImagingInstancerContext const* instancerContext) override; + + void _RemovePrim(SdfPath const& cachePath, + UsdImagingIndexProxy* index) override; }; diff --git a/plugin/adapters/MoonrayMeshLightAdapter.cc b/plugin/adapters/MoonrayMeshLightAdapter.cc index 37de0b9..c107b0b 100644 --- a/plugin/adapters/MoonrayMeshLightAdapter.cc +++ b/plugin/adapters/MoonrayMeshLightAdapter.cc @@ -2,10 +2,17 @@ // SPDX-License-Identifier: Apache-2.0 #include "MoonrayMeshLightAdapter.h" +#include "dataSourceMeshLight.h" + #include #include #include #include "pxr/imaging/hd/tokens.h" +#include +#include +#include +#include +#include "pxr/imaging/hd/retainedDataSource.h" PXR_NAMESPACE_OPEN_SCOPE @@ -25,6 +32,63 @@ MoonrayMeshLightAdapter::~MoonrayMeshLightAdapter() { } +TfTokenVector +MoonrayMeshLightAdapter::GetImagingSubprims(UsdPrim const& prim) +{ + return { TfToken() }; +} + +TfToken +MoonrayMeshLightAdapter::GetImagingSubprimType( + UsdPrim const& prim, + TfToken const& subprim) +{ + if (subprim.IsEmpty()) { + return geometryLightToken; + } + return TfToken(); +} + +HdContainerDataSourceHandle +MoonrayMeshLightAdapter::GetImagingSubprimData( + UsdPrim const& prim, + TfToken const& subprim, + const UsdImagingDataSourceStageGlobals &stageGlobals) +{ + if (!subprim.IsEmpty()) { + return nullptr; + } + + return HdOverlayContainerDataSource::New( + HdRetainedContainerDataSource::New( + HdPrimTypeTokens->material, + UsdImagingDataSourceMaterial::New( + prim, + stageGlobals, + HdMaterialTerminalTokens->light) + ), + MoonrayDataSourceMeshLightPrim::New( + prim.GetPath(), + prim, + stageGlobals) + ); +} + +HdDataSourceLocatorSet +MoonrayMeshLightAdapter::InvalidateImagingSubprim( + UsdPrim const& prim, + TfToken const& subprim, + TfTokenVector const& properties, + const UsdImagingPropertyInvalidationType invalidationType) +{ + if (subprim.IsEmpty()) { + return MoonrayDataSourceMeshLightPrim::Invalidate( + prim, subprim, properties, invalidationType); + } + + return HdDataSourceLocatorSet(); +} + bool MoonrayMeshLightAdapter::IsSupported( UsdImagingIndexProxy const* index) const diff --git a/plugin/adapters/MoonrayMeshLightAdapter.h b/plugin/adapters/MoonrayMeshLightAdapter.h index 0b8148b..5687a98 100644 --- a/plugin/adapters/MoonrayMeshLightAdapter.h +++ b/plugin/adapters/MoonrayMeshLightAdapter.h @@ -23,6 +23,26 @@ class MoonrayMeshLightAdapter : public UsdImagingLightAdapter { USDIMAGING_API virtual ~MoonrayMeshLightAdapter(); + USDIMAGING_API + TfTokenVector GetImagingSubprims(UsdPrim const& prim) override; + + USDIMAGING_API + TfToken GetImagingSubprimType( + UsdPrim const& prim, + TfToken const& subprim) override; + + USDIMAGING_API + HdContainerDataSourceHandle GetImagingSubprimData( + UsdPrim const& prim, + TfToken const& subprim, + const UsdImagingDataSourceStageGlobals &stageGlobals) override; + + USDIMAGING_API + HdDataSourceLocatorSet InvalidateImagingSubprim( + UsdPrim const& prim, + TfToken const& subprim, + TfTokenVector const& properties, + UsdImagingPropertyInvalidationType invalidationType) override; USDIMAGING_API virtual SdfPath Populate(UsdPrim const& prim, UsdImagingIndexProxy* index, diff --git a/plugin/adapters/ProceduralAdapter.cc b/plugin/adapters/ProceduralAdapter.cc index 3c05556..01572c6 100644 --- a/plugin/adapters/ProceduralAdapter.cc +++ b/plugin/adapters/ProceduralAdapter.cc @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 #include "ProceduralAdapter.h" +#include "dataSourceProcedural.h" #include #include #include "pxr/usdImaging/usdImaging/indexProxy.h" @@ -36,6 +37,53 @@ ProceduralAdapter::~ProceduralAdapter() { } +TfTokenVector +ProceduralAdapter::GetImagingSubprims(UsdPrim const& prim) +{ + return { TfToken() }; +} + +TfToken +ProceduralAdapter::GetImagingSubprimType( + UsdPrim const& prim, + TfToken const& subprim) +{ + if (subprim.IsEmpty()) { + return proceduralToken; + } + return TfToken(); +} + +HdContainerDataSourceHandle +ProceduralAdapter::GetImagingSubprimData( + UsdPrim const& prim, + TfToken const& subprim, + const UsdImagingDataSourceStageGlobals &stageGlobals) +{ + if (subprim.IsEmpty()) { + return MoonrayDataSourceProceduralPrim::New( + prim.GetPath(), + prim, + stageGlobals); + } + return nullptr; +} + +HdDataSourceLocatorSet +ProceduralAdapter::InvalidateImagingSubprim( + UsdPrim const& prim, + TfToken const& subprim, + TfTokenVector const& properties, + const UsdImagingPropertyInvalidationType invalidationType) +{ + if (subprim.IsEmpty()) { + return MoonrayDataSourceProceduralPrim::Invalidate( + prim, subprim, properties, invalidationType); + } + + return HdDataSourceLocatorSet(); +} + bool ProceduralAdapter::IsSupported(UsdImagingIndexProxy const* index) const { diff --git a/plugin/adapters/ProceduralAdapter.h b/plugin/adapters/ProceduralAdapter.h index 348c0fd..2e842fe 100644 --- a/plugin/adapters/ProceduralAdapter.h +++ b/plugin/adapters/ProceduralAdapter.h @@ -9,7 +9,6 @@ #include "pxr/usdImaging/usdImaging/gprimAdapter.h" PXR_NAMESPACE_OPEN_SCOPE - class ProceduralAdapter : public UsdImagingGprimAdapter { public: typedef UsdImagingGprimAdapter BaseAdapter; @@ -17,6 +16,27 @@ class ProceduralAdapter : public UsdImagingGprimAdapter { ProceduralAdapter(); ~ProceduralAdapter() override; + USDIMAGING_API + TfTokenVector GetImagingSubprims(UsdPrim const& prim) override; + + USDIMAGING_API + TfToken GetImagingSubprimType( + UsdPrim const& prim, + TfToken const& subprim) override; + + USDIMAGING_API + HdContainerDataSourceHandle GetImagingSubprimData( + UsdPrim const& prim, + TfToken const& subprim, + const UsdImagingDataSourceStageGlobals &stageGlobals) override; + + USDIMAGING_API + HdDataSourceLocatorSet InvalidateImagingSubprim( + UsdPrim const& prim, + TfToken const& subprim, + TfTokenVector const& properties, + UsdImagingPropertyInvalidationType invalidationType) override; + VtValue Get(UsdPrim const& prim, SdfPath const& cachePath, TfToken const& key, diff --git a/plugin/adapters/dataSourceLightFilter.cc b/plugin/adapters/dataSourceLightFilter.cc new file mode 100644 index 0000000..0b5d853 --- /dev/null +++ b/plugin/adapters/dataSourceLightFilter.cc @@ -0,0 +1,112 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "dataSourceLightFilter.h" +#include +#include +#include + +#include +PXR_NAMESPACE_OPEN_SCOPE + +namespace { + const TfToken moonrayToken("moonray"); +} + +MoonrayDataSourceLightFilter::MoonrayDataSourceLightFilter( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals) + : _sceneIndexPath(sceneIndexPath) + , _usdPrim(usdPrim) + , _stageGlobals(stageGlobals) +{ +} + +TfTokenVector +MoonrayDataSourceLightFilter::GetNames() +{ + TfTokenVector result; + std::vector properties = _usdPrim.GetProperties(); + for (const UsdProperty& prop : properties) { + if (prop.GetNamespace() == moonrayToken) { + result.push_back(prop.GetBaseName()); + } + } + return result; +} + +HdDataSourceBaseHandle +MoonrayDataSourceLightFilter::Get(const TfToken &name) +{ + std::string attrName = moonrayToken.GetString() + ":" + name.GetString(); + UsdProperty prop = _usdPrim.GetProperty(TfToken(attrName)); + if (UsdRelationship rel = prop.As()) { + return UsdImagingDataSourceRelationship::New(rel, _stageGlobals); + } + if (UsdAttribute attr = prop.As()) { + return UsdImagingDataSourceAttributeNew(attr, _stageGlobals); + } + return nullptr; +} + +// ---------------------------------------------------------------------------- + + +MoonrayDataSourceLightFilterPrim::MoonrayDataSourceLightFilterPrim( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals) + : UsdImagingDataSourcePrim(sceneIndexPath, usdPrim, stageGlobals) +{ +} + +TfTokenVector +MoonrayDataSourceLightFilterPrim::GetNames() +{ + TfTokenVector result = UsdImagingDataSourcePrim::GetNames(); + result.push_back(moonrayToken); + + return result; +} + +HdDataSourceBaseHandle +MoonrayDataSourceLightFilterPrim::Get(const TfToken & name) +{ + if (name == moonrayToken) { + return MoonrayDataSourceLightFilter::New( + _GetSceneIndexPath(), + _GetUsdPrim(), + _GetStageGlobals()); + } else { + return UsdImagingDataSourcePrim::Get(name); + } +} + +/*static*/ +HdDataSourceLocatorSet +MoonrayDataSourceLightFilterPrim::Invalidate( + UsdPrim const& prim, + const TfToken &subprim, + const TfTokenVector &properties, + const UsdImagingPropertyInvalidationType invalidationType) +{ + static const HdDataSourceLocator procLocator(moonrayToken); + + HdDataSourceLocatorSet locators; + + for (const TfToken &propertyName : properties) { + if (propertyName.GetString().find(moonrayToken.GetString() + ":") == 0) { + TfToken name(propertyName.GetString().substr(moonrayToken.GetString().size() + 1)); + locators.insert(procLocator.Append(name)); + } + } + + // Give base classes a chance to invalidate. + locators.insert( + UsdImagingDataSourcePrim::Invalidate( + prim, subprim, properties, invalidationType)); + return locators; +} + +PXR_NAMESPACE_CLOSE_SCOPE diff --git a/plugin/adapters/dataSourceLightFilter.h b/plugin/adapters/dataSourceLightFilter.h new file mode 100644 index 0000000..4015554 --- /dev/null +++ b/plugin/adapters/dataSourceLightFilter.h @@ -0,0 +1,63 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "pxr/usdImaging/usdImaging/dataSourcePrim.h" +#include "pxr/usdImaging/usdImaging/dataSourceStageGlobals.h" + +#include "pxr/imaging/hd/dataSource.h" + +PXR_NAMESPACE_OPEN_SCOPE + +class MoonrayDataSourceLightFilter : public HdContainerDataSource +{ +public: + HD_DECLARE_DATASOURCE(MoonrayDataSourceLightFilter); + + TfTokenVector GetNames() override; + HdDataSourceBaseHandle Get(const TfToken &name) override; + +private: + MoonrayDataSourceLightFilter( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals); + +private: + const SdfPath _sceneIndexPath; + UsdPrim _usdPrim; + const UsdImagingDataSourceStageGlobals & _stageGlobals; +}; + +HD_DECLARE_DATASOURCE_HANDLES(MoonrayDataSourceLightFilter); + +// ---------------------------------------------------------------------------- + + +class MoonrayDataSourceLightFilterPrim : public UsdImagingDataSourcePrim +{ +public: + HD_DECLARE_DATASOURCE(MoonrayDataSourceLightFilterPrim); + + TfTokenVector GetNames() override; + HdDataSourceBaseHandle Get(const TfToken &name) override; + + USDIMAGING_API + static HdDataSourceLocatorSet Invalidate( + UsdPrim const& prim, + const TfToken &subprim, + const TfTokenVector &properties, + UsdImagingPropertyInvalidationType invalidationType); + +private: + MoonrayDataSourceLightFilterPrim( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals); + +}; + +HD_DECLARE_DATASOURCE_HANDLES(MoonrayDataSourceLightFilterPrim); + +PXR_NAMESPACE_CLOSE_SCOPE diff --git a/plugin/adapters/dataSourceMeshLight.cc b/plugin/adapters/dataSourceMeshLight.cc new file mode 100644 index 0000000..7ece2f0 --- /dev/null +++ b/plugin/adapters/dataSourceMeshLight.cc @@ -0,0 +1,112 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "dataSourceMeshLight.h" +#include +#include +#include + +#include +PXR_NAMESPACE_OPEN_SCOPE + +namespace { + const TfToken moonrayToken("moonray"); +} + +MoonrayDataSourceMeshLight::MoonrayDataSourceMeshLight( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals) + : _sceneIndexPath(sceneIndexPath) + , _usdPrim(usdPrim) + , _stageGlobals(stageGlobals) +{ +} + +TfTokenVector +MoonrayDataSourceMeshLight::GetNames() +{ + TfTokenVector result; + std::vector properties = _usdPrim.GetProperties(); + for (const UsdProperty& prop : properties) { + if (prop.GetNamespace() == moonrayToken) { + result.push_back(prop.GetBaseName()); + } + } + return result; +} + +HdDataSourceBaseHandle +MoonrayDataSourceMeshLight::Get(const TfToken &name) +{ + std::string attrName = moonrayToken.GetString() + ":" + name.GetString(); + UsdProperty prop = _usdPrim.GetProperty(TfToken(attrName)); + if (UsdRelationship rel = prop.As()) { + return UsdImagingDataSourceRelationship::New(rel, _stageGlobals); + } + if (UsdAttribute attr = prop.As()) { + return UsdImagingDataSourceAttributeNew(attr, _stageGlobals); + } + return nullptr; +} + +// ---------------------------------------------------------------------------- + + +MoonrayDataSourceMeshLightPrim::MoonrayDataSourceMeshLightPrim( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals) + : UsdImagingDataSourcePrim(sceneIndexPath, usdPrim, stageGlobals) +{ +} + +TfTokenVector +MoonrayDataSourceMeshLightPrim::GetNames() +{ + TfTokenVector result = UsdImagingDataSourcePrim::GetNames(); + result.push_back(moonrayToken); + + return result; +} + +HdDataSourceBaseHandle +MoonrayDataSourceMeshLightPrim::Get(const TfToken & name) +{ + if (name == moonrayToken) { + return MoonrayDataSourceMeshLight::New( + _GetSceneIndexPath(), + _GetUsdPrim(), + _GetStageGlobals()); + } else { + return UsdImagingDataSourcePrim::Get(name); + } +} + +/*static*/ +HdDataSourceLocatorSet +MoonrayDataSourceMeshLightPrim::Invalidate( + UsdPrim const& prim, + const TfToken &subprim, + const TfTokenVector &properties, + const UsdImagingPropertyInvalidationType invalidationType) +{ + static const HdDataSourceLocator procLocator(moonrayToken); + + HdDataSourceLocatorSet locators; + + for (const TfToken &propertyName : properties) { + if (propertyName.GetString().find(moonrayToken.GetString() + ":") == 0) { + TfToken name(propertyName.GetString().substr(moonrayToken.GetString().size() + 1)); + locators.insert(procLocator.Append(name)); + } + } + + // Give base classes a chance to invalidate. + locators.insert( + UsdImagingDataSourcePrim::Invalidate( + prim, subprim, properties, invalidationType)); + return locators; +} + +PXR_NAMESPACE_CLOSE_SCOPE diff --git a/plugin/adapters/dataSourceMeshLight.h b/plugin/adapters/dataSourceMeshLight.h new file mode 100644 index 0000000..5ea4177 --- /dev/null +++ b/plugin/adapters/dataSourceMeshLight.h @@ -0,0 +1,64 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "pxr/usdImaging/usdImaging/dataSourcePrim.h" +#include "pxr/usdImaging/usdImaging/dataSourceStageGlobals.h" + + +#include "pxr/imaging/hd/dataSource.h" + +PXR_NAMESPACE_OPEN_SCOPE + +class MoonrayDataSourceMeshLight : public HdContainerDataSource +{ +public: + HD_DECLARE_DATASOURCE(MoonrayDataSourceMeshLight); + + TfTokenVector GetNames() override; + HdDataSourceBaseHandle Get(const TfToken &name) override; + +private: + MoonrayDataSourceMeshLight( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals); + +private: + const SdfPath _sceneIndexPath; + UsdPrim _usdPrim; + const UsdImagingDataSourceStageGlobals & _stageGlobals; +}; + +HD_DECLARE_DATASOURCE_HANDLES(MoonrayDataSourceMeshLight); + +// ---------------------------------------------------------------------------- + + +class MoonrayDataSourceMeshLightPrim : public UsdImagingDataSourcePrim +{ +public: + HD_DECLARE_DATASOURCE(MoonrayDataSourceMeshLightPrim); + + TfTokenVector GetNames() override; + HdDataSourceBaseHandle Get(const TfToken &name) override; + + USDIMAGING_API + static HdDataSourceLocatorSet Invalidate( + UsdPrim const& prim, + const TfToken &subprim, + const TfTokenVector &properties, + UsdImagingPropertyInvalidationType invalidationType); + +private: + MoonrayDataSourceMeshLightPrim( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals); + +}; + +HD_DECLARE_DATASOURCE_HANDLES(MoonrayDataSourceMeshLightPrim); + +PXR_NAMESPACE_CLOSE_SCOPE diff --git a/plugin/adapters/dataSourceProcedural.cc b/plugin/adapters/dataSourceProcedural.cc new file mode 100644 index 0000000..5edd97b --- /dev/null +++ b/plugin/adapters/dataSourceProcedural.cc @@ -0,0 +1,109 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#include "dataSourceProcedural.h" +#include +#include +#include + +#include +PXR_NAMESPACE_OPEN_SCOPE + +static TfToken proceduralToken("procedural"); + +MoonrayDataSourceProcedural::MoonrayDataSourceProcedural( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals) + : _sceneIndexPath(sceneIndexPath) + , _usdPrim(usdPrim) + , _stageGlobals(stageGlobals) +{ +} + +TfTokenVector +MoonrayDataSourceProcedural::GetNames() +{ + TfTokenVector result; + std::vector properties = _usdPrim.GetProperties(); + for (const UsdProperty& prop : properties) { + if (prop.GetNamespace() == proceduralToken) { + result.push_back(prop.GetBaseName()); + } + } + return result; +} + +HdDataSourceBaseHandle +MoonrayDataSourceProcedural::Get(const TfToken &name) +{ std::string attrName = proceduralToken.GetString() + ":" + name.GetString(); + UsdProperty prop = _usdPrim.GetProperty(TfToken(attrName)); + if (UsdRelationship rel = prop.As()) { + return UsdImagingDataSourceRelationship::New(rel, _stageGlobals); + } + if (UsdAttribute attr = prop.As()) { + return UsdImagingDataSourceAttributeNew(attr, _stageGlobals); + } + return nullptr; +} + +// ---------------------------------------------------------------------------- + + +MoonrayDataSourceProceduralPrim::MoonrayDataSourceProceduralPrim( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals) + : UsdImagingDataSourceGprim(sceneIndexPath, usdPrim, stageGlobals) +{ +} + +TfTokenVector +MoonrayDataSourceProceduralPrim::GetNames() +{ + TfTokenVector result = UsdImagingDataSourceGprim::GetNames(); + result.push_back(proceduralToken); + + return result; +} + +HdDataSourceBaseHandle +MoonrayDataSourceProceduralPrim::Get(const TfToken & name) +{ + if (name == proceduralToken) { + return MoonrayDataSourceProcedural::New( + _GetSceneIndexPath(), + _GetUsdPrim(), + _GetStageGlobals()); + } else { + return UsdImagingDataSourceGprim::Get(name); + } +} + +/*static*/ +HdDataSourceLocatorSet +MoonrayDataSourceProceduralPrim::Invalidate( + UsdPrim const& prim, + const TfToken &subprim, + const TfTokenVector &properties, + const UsdImagingPropertyInvalidationType invalidationType) +{ + static const HdDataSourceLocator procLocator(proceduralToken); + + HdDataSourceLocatorSet locators; + + for (const TfToken &propertyName : properties) { + if (propertyName.GetString().find(proceduralToken.GetString() + ":") == 0) { + TfToken name(propertyName.GetString().substr(proceduralToken.GetString().size() + 1)); + locators.insert(procLocator.Append(name)); + } + } + + // Give base classes a chance to invalidate. + locators.insert( + UsdImagingDataSourceGprim::Invalidate( + prim, subprim, properties, invalidationType)); + return locators; +} + +PXR_NAMESPACE_CLOSE_SCOPE diff --git a/plugin/adapters/dataSourceProcedural.h b/plugin/adapters/dataSourceProcedural.h new file mode 100644 index 0000000..cf44338 --- /dev/null +++ b/plugin/adapters/dataSourceProcedural.h @@ -0,0 +1,65 @@ +// Copyright 2026 DreamWorks Animation LLC +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include "pxr/usdImaging/usdImaging/dataSourceGprim.h" +#include "pxr/usdImaging/usdImaging/dataSourceStageGlobals.h" + +#include "pxr/usd/usdGeom/procedural.h" + +#include "pxr/imaging/hd/dataSource.h" + +PXR_NAMESPACE_OPEN_SCOPE + +class MoonrayDataSourceProcedural : public HdContainerDataSource +{ +public: + HD_DECLARE_DATASOURCE(MoonrayDataSourceProcedural); + + TfTokenVector GetNames() override; + HdDataSourceBaseHandle Get(const TfToken &name) override; + +private: + MoonrayDataSourceProcedural( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals); + +private: + const SdfPath _sceneIndexPath; + UsdPrim _usdPrim; + const UsdImagingDataSourceStageGlobals & _stageGlobals; +}; + +HD_DECLARE_DATASOURCE_HANDLES(MoonrayDataSourceProcedural); + +// ---------------------------------------------------------------------------- + + +class MoonrayDataSourceProceduralPrim : public UsdImagingDataSourceGprim +{ +public: + HD_DECLARE_DATASOURCE(MoonrayDataSourceProceduralPrim); + + TfTokenVector GetNames() override; + HdDataSourceBaseHandle Get(const TfToken &name) override; + + USDIMAGING_API + static HdDataSourceLocatorSet Invalidate( + UsdPrim const& prim, + const TfToken &subprim, + const TfTokenVector &properties, + UsdImagingPropertyInvalidationType invalidationType); + +private: + MoonrayDataSourceProceduralPrim( + const SdfPath &sceneIndexPath, + UsdPrim usdPrim, + const UsdImagingDataSourceStageGlobals &stageGlobals); + +}; + +HD_DECLARE_DATASOURCE_HANDLES(MoonrayDataSourceProceduralPrim); + +PXR_NAMESPACE_CLOSE_SCOPE diff --git a/plugin/hd_moonray/ArrasRenderer.cc b/plugin/hd_moonray/ArrasRenderer.cc index e93a542..a385149 100644 --- a/plugin/hd_moonray/ArrasRenderer.cc +++ b/plugin/hd_moonray/ArrasRenderer.cc @@ -16,8 +16,6 @@ namespace hdMoonray { -using scene_rdl2::logging::Logger; - ArrasRenderer::ArrasRenderer() { mSceneContext = new scene_rdl2::rdl2::SceneContext(); @@ -157,7 +155,6 @@ ArrasRenderer::connect(bool resetFailureCount) void ArrasRenderer::messageHandler(const arras4::api::Message& msg) { - hdmLogArras("messageHandler"); std::lock_guard guard(mMutex); // don't try to process messages while destructing @@ -212,7 +209,6 @@ ArrasRenderer::messageHandler(const arras4::api::Message& msg) hdmLogArras("creditSendFailed"); } } - hdmLogArras("endMessageHandler"); } void @@ -299,10 +295,10 @@ ArrasRenderer::statusHandler(const std::string& msg) // Due to problems with Hydra, the RenderOutput may be null, in which case the request must // be used to get the type and size of the buffer. bool -ArrasRenderer::allocate(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd, const PixelSize& request) +ArrasRenderer::allocate(MoonrayOutput output, PixelData& pd, const PixelSize& request) { if (not pd.mData) { // don't reallocate until resolve() so display does not blink - pd.mChannels = isBeauty(ro) ? 4 : request.mChannels; + pd.mChannels = output.isBeauty() ? 4 : request.mChannels; pd.mWidth = request.mWidth; pd.mHeight = request.mHeight; pd.vec.resize(pd.mWidth * pd.mHeight * pd.mChannels); @@ -313,32 +309,31 @@ ArrasRenderer::allocate(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd, const bool -ArrasRenderer::resolve(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd) +ArrasRenderer::resolve(MoonrayOutput output, PixelData& pd, bool forceUpdate) { // mProgress < 0 indicates that mFbReceiver hasn't received any images yet, if (mProgress < 0) return false; // see if no change since last time unsigned n = mFbReceiver->getFbActivityCounter(); - if (n == pd.filmActivity) return false; + if (!forceUpdate && n == pd.filmActivity) return false; pd.filmActivity = n; - if (isBeauty(ro)) { + if (output.isBeauty()) { mFbReceiver->getBeautyMTSafe(pd.vec, pd.mWidth, pd.mHeight); pd.mChannels = 4; } else { - unsigned n = mFbReceiver->getRenderOutputMTSafe(ro->getName(), pd.vec, pd.mWidth, pd.mHeight); + unsigned n = mFbReceiver->getRenderOutputMTSafe(output.objectName(), pd.vec, pd.mWidth, pd.mHeight); if (not n) return false; // ignore occasional bad data pd.mChannels = n; } pd.mData = pd.vec.data(); - return true; } void -ArrasRenderer::deallocate(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd) +ArrasRenderer::deallocate(MoonrayOutput output, PixelData& pd) { } diff --git a/plugin/hd_moonray/ArrasRenderer.h b/plugin/hd_moonray/ArrasRenderer.h index 01f59b2..7931e79 100644 --- a/plugin/hd_moonray/ArrasRenderer.h +++ b/plugin/hd_moonray/ArrasRenderer.h @@ -40,9 +40,9 @@ class ArrasRenderer : public Renderer float getElapsedSeconds() const override; bool isFrameComplete() const override; - bool allocate(scene_rdl2::rdl2::RenderOutput*, PixelData&, const PixelSize&) override; - bool resolve(scene_rdl2::rdl2::RenderOutput*, PixelData&) override; - void deallocate(scene_rdl2::rdl2::RenderOutput*, PixelData&) override; + bool allocate(MoonrayOutput, PixelData&, const PixelSize&) override; + bool resolve(MoonrayOutput, PixelData&,bool forceUpdate = false) override; + void deallocate(MoonrayOutput, PixelData&) override; void applySettings(const RenderSettings&) override; diff --git a/plugin/hd_moonray/ArrasSettings.cc b/plugin/hd_moonray/ArrasSettings.cc index 406241e..9b689fe 100644 --- a/plugin/hd_moonray/ArrasSettings.cc +++ b/plugin/hd_moonray/ArrasSettings.cc @@ -3,10 +3,10 @@ #include "ArrasSettings.h" +#include #include #include -#include #include #include @@ -31,7 +31,6 @@ TF_DEFINE_PRIVATE_TOKENS(Tokens, (denoiseNormalGuiding) ); -using scene_rdl2::logging::Logger; using namespace hdMoonray; std::string getMoonPackage() diff --git a/plugin/hd_moonray/RendererPlugin.cc b/plugin/hd_moonray/RendererPlugin.cc index b470c5d..8c733a0 100644 --- a/plugin/hd_moonray/RendererPlugin.cc +++ b/plugin/hd_moonray/RendererPlugin.cc @@ -3,7 +3,7 @@ #include "ArrasRenderer.h" #include -#include +#include #include #include @@ -16,32 +16,35 @@ class HdMoonrayRendererPlugin final : public pxr::HdRendererPlugin { HdMoonrayRendererPlugin() {} pxr::HdRenderDelegate *CreateRenderDelegate() override { - return new hdMoonray::RenderDelegate(new hdMoonray::ArrasRenderer()); + return new hdMoonray::HdMoonray_RenderDelegate(new hdMoonray::ArrasRenderer()); } pxr::HdRenderDelegate *CreateRenderDelegate(pxr::HdRenderSettingsMap const& settings) override { - auto it = settings.find(pxr::TfToken("disableRender")); - if (it != settings.end()) { - if (it->second.Get()) { - auto rd = new hdMoonray::RenderDelegate(new hdMoonray::NullRenderer(),settings); - rd->setDisableRender(true); - return rd; - } + + if (hdMoonray::RenderSettings::staticDisableRender(settings)) { + std::cout << "HdMoonray: rendering is DISABLED" << std::endl; + auto rd = new hdMoonray::HdMoonray_RenderDelegate(new hdMoonray::NullRenderer(),settings); + rd->options().setDisableRender(true); + return rd; } - return new hdMoonray::RenderDelegate(new hdMoonray::ArrasRenderer(),settings); + + return new hdMoonray::HdMoonray_RenderDelegate(new hdMoonray::ArrasRenderer(),settings); } void DeleteRenderDelegate(pxr::HdRenderDelegate *renderDelegate) override { delete renderDelegate; } -#if PXR_VERSION >= 2302 + +#if HD_API_VERSION < 83 bool IsSupported(bool gpuEnabled = true) const override { return true; } #else -bool IsSupported() const override { - return true; - } + bool IsSupported( + HdRendererCreateArgs const &rendererCreateArgs, + std::string * reasonWhyNot = nullptr) const override { + return true; + } #endif private: diff --git a/plugin/hd_moonray/plugInfo.json.in b/plugin/hd_moonray/plugInfo.json.in index 3177cea..b5872cd 100644 --- a/plugin/hd_moonray/plugInfo.json.in +++ b/plugin/hd_moonray/plugInfo.json.in @@ -9,6 +9,12 @@ ], "displayName": "Moonray", "priority": 99 + }, + "MoonraySceneIndexPlugin" : { + "bases": ["HdSceneIndexPlugin"], + "loadWithRenderer": [ "Moonray" ], + "priority": 0, + "displayName": "Scene Indexes for Moonray" } } }, diff --git a/plugin/hd_moonray_debug/RendererPlugin.cc b/plugin/hd_moonray_debug/RendererPlugin.cc index 36f713d..f098f87 100644 --- a/plugin/hd_moonray_debug/RendererPlugin.cc +++ b/plugin/hd_moonray_debug/RendererPlugin.cc @@ -3,7 +3,7 @@ #include "RndrRenderer.h" #include -#include +#include #include #include @@ -16,41 +16,38 @@ class HdMoonrayRendererDebugPlugin final : public pxr::HdRendererPlugin { HdMoonrayRendererDebugPlugin() {} pxr::HdRenderDelegate *CreateRenderDelegate() override { - return new hdMoonray::RenderDelegate(new hdMoonray::RndrRenderer(0)); + return new hdMoonray::HdMoonray_RenderDelegate(new hdMoonray::RndrRenderer(0)); } pxr::HdRenderDelegate *CreateRenderDelegate(pxr::HdRenderSettingsMap const& settings) override { // "disableRender" and "threads" settings can only be specified at creation time // via this constructor - auto it = settings.find(pxr::TfToken("disableRender")); - if (it != settings.end()) { - if (it->second.Get()) { - auto rd = new hdMoonray::RenderDelegate(new hdMoonray::NullRenderer(),settings); - rd->setDisableRender(true); - return rd; - } - } - uint32_t threads = 0; - it = settings.find(pxr::TfToken("threads")); - if (it != settings.end()) { - threads = it->second.Get(); + if (hdMoonray::RenderSettings::staticDisableRender(settings)) { + std::cout << "HdMoonray: rendering is DISABLED" << std::endl; + auto rd = new hdMoonray::HdMoonray_RenderDelegate(new hdMoonray::NullRenderer(),settings); + rd->options().setDisableRender(true); + return rd; } - return new hdMoonray::RenderDelegate(new hdMoonray::RndrRenderer(threads),settings); + + uint32_t threads = hdMoonray::RenderSettings::staticThreads(settings); + return new hdMoonray::HdMoonray_RenderDelegate(new hdMoonray::RndrRenderer(threads),settings); } void DeleteRenderDelegate(pxr::HdRenderDelegate *renderDelegate) override { delete renderDelegate; } -#if PXR_VERSION >= 2302 +#if HD_API_VERSION < 83 bool IsSupported(bool gpuEnabled = true) const override { return true; } #else -bool IsSupported() const override { - return true; - } + bool IsSupported( + HdRendererCreateArgs const &rendererCreateArgs, + std::string * reasonWhyNot = nullptr) const override { + return true; + } #endif private: diff --git a/plugin/hd_moonray_debug/RndrRenderer.cc b/plugin/hd_moonray_debug/RndrRenderer.cc index 2635b8a..17b455b 100644 --- a/plugin/hd_moonray_debug/RndrRenderer.cc +++ b/plugin/hd_moonray_debug/RndrRenderer.cc @@ -3,6 +3,7 @@ #include "RndrRenderer.h" +#include #include #include @@ -18,8 +19,6 @@ namespace hdMoonray { -using scene_rdl2::logging::Logger; - RndrRenderer::RndrRenderer(uint32_t numThreads) { # ifdef DEBUG_MSG @@ -73,7 +72,7 @@ RndrRenderer::renderOutputIndex(scene_rdl2::rdl2::RenderOutput* ro) const // Due to problems with Hydra, the RenderOutput may be null, in which case the request must // be used to get the type and size of the buffer. bool -RndrRenderer::allocate(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd, const PixelSize& request) +RndrRenderer::allocate(MoonrayOutput output, PixelData& pd, const PixelSize& request) { # ifdef DEBUG_MSG std::cerr << ">> RndrRenderer.cc allocate()\n"; @@ -82,7 +81,7 @@ RndrRenderer::allocate(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd, const if (pd.mData) { // don't resize any existing buffer mResized = true; - } else if (isBeauty(ro) && request.mChannels == 4) { + } else if (output.isBeauty() && request.mChannels == 4) { renderBuffer.init(request.mWidth, request.mHeight); pd.mChannels = 4; pd.mWidth = request.mWidth; @@ -90,8 +89,8 @@ RndrRenderer::allocate(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd, const pd.mData = renderBuffer.getData(); } else { pd.mChannels = request.mChannels; - if (ro) { - int index = renderOutputIndex(ro); + if (output.isValid()) { + int index = renderOutputIndex(output.renderOutput()); if (index >= 0) pd.mChannels = mRenderContext->getRenderOutputDriver()->getNumberOfChannels(index); } pd.mWidth = request.mWidth; @@ -121,14 +120,15 @@ static scene_rdl2::rdl2::RenderOutput* prevRo = nullptr; // warning: multithreaded bool -RndrRenderer::resolve(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd) +RndrRenderer::resolve(MoonrayOutput output, PixelData& pd, bool forceUpdate) { # ifdef DEBUG_MSG std::cerr << ">> RndrRenderer.cc resolve()\n"; # endif // end DEBUG_MSG - //std::cout << "RndrRenderer::resolve " << (ro ? ro->getName() : "beauty") << std::endl; + //std::cout << "RndrRenderer::resolve " << (moro ? moro.objectName() : "beauty") << std::endl; + scene_rdl2::rdl2::RenderOutput* ro = output.renderOutput(); if (isHoudini() && not mUpdateActive) { // HDM-183 detect Houdini-18 hanging if (not setPrevRo) { setPrevRo = true; @@ -161,13 +161,13 @@ RndrRenderer::resolve(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd) } else { pd.filmActivity = n; } - if (n == oldN) { + if (!forceUpdate && n == oldN) { return false; // render image is not updated. } mResized = false; - if (isBeauty(ro)) { + if (output.isBeauty()) { mRenderContext->snapshotRenderBuffer(&renderBuffer, true, true, /* usePrimaryAov */false); pd.mChannels = 4; pd.mWidth = renderBuffer.getWidth(); @@ -213,13 +213,13 @@ RndrRenderer::resolve(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd) void -RndrRenderer::deallocate(scene_rdl2::rdl2::RenderOutput* ro, PixelData& pd) +RndrRenderer::deallocate(MoonrayOutput output, PixelData& pd) { # ifdef DEBUG_MSG std::cerr << ">> RndrRenderer.cc deallocate()\n"; # endif // end DEBUG_MSG - if (isBeauty(ro)) { + if (output.isBeauty()) { renderBuffer.cleanUp(); } else { // free other buffers that may have been allocated: diff --git a/plugin/hd_moonray_debug/RndrRenderer.h b/plugin/hd_moonray_debug/RndrRenderer.h index a6bec8f..2f56296 100644 --- a/plugin/hd_moonray_debug/RndrRenderer.h +++ b/plugin/hd_moonray_debug/RndrRenderer.h @@ -32,9 +32,9 @@ class RndrRenderer : public Renderer float getElapsedSeconds() const override; bool isFrameComplete() const override; - bool allocate(scene_rdl2::rdl2::RenderOutput*, PixelData&, const PixelSize&) override; - bool resolve(scene_rdl2::rdl2::RenderOutput*, PixelData&) override; - void deallocate(scene_rdl2::rdl2::RenderOutput*, PixelData&) override; + bool allocate(MoonrayOutput, PixelData&, const PixelSize&) override; + bool resolve(MoonrayOutput, PixelData&,bool force=false) override; + void deallocate(MoonrayOutput, PixelData&) override; void applySettings(const RenderSettings&) override; void setExecMode(std::string mode); diff --git a/plugin/houdini/soho/parameters/HdMoonrayRendererPlugin_Viewport.ds b/plugin/houdini/soho/parameters/HdMoonrayRendererPlugin_Viewport.ds index 7ff1039..79fec98 100644 --- a/plugin/houdini/soho/parameters/HdMoonrayRendererPlugin_Viewport.ds +++ b/plugin/houdini/soho/parameters/HdMoonrayRendererPlugin_Viewport.ds @@ -206,6 +206,17 @@ parmtag { "uiscope" "viewport" } } + parm { + name "maxMeshResolution" + label "Max Mesh Resolution" + type float + size 1 + default { 0.0 } + range { 0! 8 } + help "Clamp mesh resolution to a maximum (disabled if 0.0)" + parmtag { "uiscope" "viewport" } + } + parm { name "pruneWillow" label "Prune Willow" diff --git a/testSuite/README.md b/testSuite/README.md deleted file mode 100644 index 280a463..0000000 --- a/testSuite/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# hdMoonray RaTS Tests - -These instructions are intended for DWA's internal MoonRay developers and will likely -not work outside of the DWA studio environment. - -This directory contains the RaTS tests for hdMoonRay. The RaTS tests are not in a -separate package like the regular MoonRay RaTS tests. - -:warning: The RaTS tests must currently be run on a teal-class machine (e.g. tealsnip) using CentOS 7 for the -canonicals to match correctly. - -If you want to run hdMoonRay RaTS against a local MoonRay build, make sure you -first build MoonRay (and possibly scene_rdl2) as variant 3, e.g.: - - rez-build -i --variants 3 - # os-CentOS-7 opt_level-optdebug refplat-vfx2022.0 gcc-9.3.x.1 - -Also be sure to set REZ_PACKAGES_PATH to the location of your local moonray build -so the hdmoonray build picks it up. - -### Building - -Build hdMoonRay variant 6, e.g.: - - rez2 - rez-env buildtools - cd hdmoonray - rez-build -i --variants 6 - # os-CentOS-7 opt_level-optdebug usd_core_dwa_plugin moonshine_usd usd_imaging-0.22.5 moonshine_dwa houdini_dwa-19 python-3.9 gcc refplat-vfx2022 - -### Running - -In a new shell: - -Ensure your REZ_PACKAGES_PATH is set to pick up the local moonray build, if there -is one. - -To run the RaTS tests, use the following rez-env: - - rez2 - rez-env hdMoonray rats opt_level-optdebug usd_core_dwa_plugin moonshine_usd usd_imaging-0.22.5 moonshine_dwa houdini_dwa-19 python-3.9 gcc refplat-vfx2022 - -Then, use the normal RaTS commands **from the hdmoonray rez install dir**, e.g.: - - rats -a -c vectorized - -:warning: Currently only the vectorized tests have updated canonicals, scalar is not currently supported - -### Running with rez-test - -Alternatively, you can run rez-test from the top-level hdMoonray source directory. - -It can be run in the build environment or in a different shell that's not in a rez -environment. rez-test figures out the environment when it runs and will automatically -discover and use locally-built moonray packages. - - rez-test hdMoonray rats-opt-debug - -### Finishing up - -Ensure there are no zombie `hdmoonray` processes by running 'top'. -These can happen if the rats tests were interrupted (e.g. CTRL-C). Terminate them with -'kill'. - diff --git a/testSuite/aov/aov/aov.usd b/testSuite/aov/aov/aov.usd deleted file mode 100644 index 1440ab3..0000000 --- a/testSuite/aov/aov/aov.usd +++ /dev/null @@ -1,163 +0,0 @@ -#usda 1.0 -( - endTimeCode = 179 - metersPerUnit = 1 - startTimeCode = 179 - upAxis = "Y" -) - -def Camera "camera" -{ - float2 clippingRange = (0.01, 10000) - float focalLength = 300 - float horizontalAperture = 240 - float verticalAperture = 240 - matrix4d xformOp:transform = ( (-0.72649, 0, -0.687176, 0), (-0.0649215, 0.995527, 0.0686357, 0), (0.684103, 0.0944757, -0.723241, 0), (0.635976, 1.9145, -9.51043, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def "gronkle" ( - payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@ -) -{ - matrix4d xformOp:transform:a = ( (0.0216271, 0, -0.020791, 0), (0, 0.03, 0, 0), (0.020791, 0, 0.0216271, 0), (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a", "xformOp:transform"] -} - -def Mesh "floor" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - color3f[] primvars:displayColor = [(1, 1, 1)] ( - interpolation = "uniform" - ) - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( - interpolation = "faceVarying" - ) - matrix4d xformOp:transform = ( (20, 0, 0, 0), (0, 20, 0, 0), (0, 0, 20, 0), (0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def Mesh "wall" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - color3f[] primvars:displayColor = [(1, 1, 1)] ( - interpolation = "uniform" - ) - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( - interpolation = "faceVarying" - ) - matrix4d xformOp:transform = ( (20, 0, 0, 0), (0, 0, 1, 0), (0, -10, 0, 0), (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def SphereLight "sphere" -{ - color3f color = (1, 0.9, 0.6) - color3f inputs:color = (1, 0.9, 0.6) - float inputs:intensity = 3 - float inputs:radius = 0.3 - float intensity = 3 - custom string moonray:label = "sphere" - token moonray:visible_in_camera = "force on" - float radius = 0.3 - matrix4d xformOp:transform = ( (1, 0, -0, 0), (0, 1, 0, 0), (0, -0, 1, 0), (-1, 1.8, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def Scope "Render" -{ - def Scope "Products" - { - def Scope "Vars" - { - def RenderVar "custom_P" - { - token dataType = "color3f" - custom string driver:parameters:aov:channel_prefix = "" - custom int driver:parameters:aov:clearValue = 0 - custom token driver:parameters:aov:format = "color3f" - custom bool driver:parameters:aov:multiSampled = 0 - custom string driver:parameters:aov:name = "custom_P" - custom string parameters:moonray:file_name = "/tmp/scene.exr" - custom token parameters:moonray:result = "state variable" - custom token parameters:moonray:state_variable = "P" - string sourceName = "" - token sourceType = "raw" - } - - def RenderVar "glossy" - { - token dataType = "color3f" - custom string driver:parameters:aov:channel_prefix = "" - custom int driver:parameters:aov:clearValue = 0 - custom token driver:parameters:aov:format = "color3f" - custom bool driver:parameters:aov:multiSampled = 0 - custom string driver:parameters:aov:name = "glossy" - custom string parameters:moonray:channel_name = "glossy" - custom token parameters:moonray:compression = "dwab" - custom string parameters:moonray:file_part = "glossy" - custom string parameters:moonray:lpe = "C*[VRT]*[LOB]" - custom token parameters:moonray:result = "light aov" - string sourceName = "" - token sourceType = "raw" - } - - def RenderVar "difsss" - { - token dataType = "color3f" - custom string driver:parameters:aov:channel_prefix = "" - custom int driver:parameters:aov:clearValue = 0 - custom token driver:parameters:aov:format = "color3f" - custom bool driver:parameters:aov:multiSampled = 0 - custom string driver:parameters:aov:name = "difsss" - custom string parameters:moonray:channel_name = "difsss" - custom token parameters:moonray:compression = "dwab" - custom string parameters:moonray:file_part = "difsss" - custom string parameters:moonray:lpe = "C*<.D>[VRT]*[LOB]" - custom token parameters:moonray:result = "light aov" - string sourceName = "" - token sourceType = "raw" - } - } - - def RenderProduct "aov_test" - { - rel orderedVars = [ - , - , - , - ] - token productName = "/tmp/moonray_test_aov.exr" - token productType = "raster" - } - } - - def RenderSettings "rendersettings" - { - token aspectRatioConformPolicy = "expandAperture" - rel camera = - float4 dataWindowNDC = (0, 0, 1, 1) - token[] includedPurposes = ["default"] - bool instantaneousShutter = 0 - token[] materialBindingPurposes = ["full", "allPurpose"] - float pixelAspectRatio = 1 - rel products = - int2 resolution = (500, 500) - custom bool moonray:sceneVariable:enable_dof = 0 - custom int moonray:sceneVariable:max_adaptive_samples = 1024 - custom int moonray:sceneVariable:max_depth = 0 - custom int moonray:sceneVariable:max_diffuse_depth = 1 - custom int moonray:sceneVariable:max_glossy_depth = 2 - custom int moonray:sceneVariable:max_hair_depth = 2 - custom int moonray:sceneVariable:min_adaptive_samples = 4 - custom int moonray:sceneVariable:pixel_samples = 2 - custom int moonray:sceneVariable:light_samples = 1 - custom int moonray:sceneVariable:bsdf_samples = 1 - } -} diff --git a/testSuite/aov/aov/test.xml b/testSuite/aov/aov/test.xml deleted file mode 100644 index 42a3bd1..0000000 --- a/testSuite/aov/aov/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra RenderVar/AOV test - - - - husk - -s /Render/rendersettings --make-output-path -o ${result} ${args} -R HdMoonrayRendererPlugin --purpose geometry,render --complexity high --no-mplay --disable-delegate-products -V 9 ${shot_dir}/aov.usd - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .01 --hardfail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/aov/cryptomatte/cryptomatte.usd b/testSuite/aov/cryptomatte/cryptomatte.usd deleted file mode 100644 index 3133e5b..0000000 --- a/testSuite/aov/cryptomatte/cryptomatte.usd +++ /dev/null @@ -1,197 +0,0 @@ -#usda 1.0 -( - endTimeCode = 119 - metersPerUnit = 0.01 - startTimeCode = 119 - upAxis = "Y" -) - -def Scope "Render" -{ - def Scope "Products" - { - def Scope "Vars" - { - def RenderVar "beauty" ( - prepend apiSchemas = ["MoonrayVarAPI"] - ) - { - uniform token dataType = "color4f" - custom string driver:parameters:aov:name = "beauty" - uniform token parameters:moonray:channel_format = "half" - uniform token parameters:moonray:channel_name = "beauty" - uniform double parameters:moonray:exr_dwa_compression_level = 85 - token parameters:moonray:file_name = "/tmp/cryptomatte_test.exr" - uniform token parameters:moonray:output_type = "flat" - uniform token parameters:moonray:result = "beauty" - } - - def RenderVar "alpha" ( - prepend apiSchemas = ["MoonrayVarAPI"] - ) - { - uniform token dataType = "float" - custom string driver:parameters:aov:name = "alpha" - uniform token parameters:moonray:channel_format = "half" - uniform token parameters:moonray:channel_name = "alpha" - uniform double parameters:moonray:exr_dwa_compression_level = 85 - token parameters:moonray:file_name = "/tmp/cryptomatte_test.exr" - uniform token parameters:moonray:output_type = "flat" - uniform token parameters:moonray:result = "alpha" - } - - def RenderVar "cryptomatte" ( - prepend apiSchemas = ["MoonrayVarAPI"] - ) - { - token dataType = "float" - custom string driver:parameters:aov:name = "cryptomatte" - uniform bool parameters:moonray:active = 1 - uniform token parameters:moonray:channel_format = "half" - uniform token parameters:moonray:channel_name = "cryptomatte" - uniform token parameters:moonray:channel_suffix_mode = "auto" - uniform int parameters:moonray:cryptomatte_depth = 4 - uniform bool parameters:moonray:cryptomatte_output_beauty = 0 - uniform bool parameters:moonray:cryptomatte_output_normals = 0 - uniform bool parameters:moonray:cryptomatte_output_positions = 0 - uniform bool parameters:moonray:cryptomatte_output_refn = 0 - uniform bool parameters:moonray:cryptomatte_output_refp = 0 - uniform bool parameters:moonray:cryptomatte_output_uv = 0 - uniform double parameters:moonray:exr_dwa_compression_level = 85 - token parameters:moonray:file_name = "/tmp/cryptomatte_test.exr" - uniform token parameters:moonray:file_part = "cryptomatte" - uniform token parameters:moonray:lpe = "" - uniform token parameters:moonray:material_aov = "" - uniform token parameters:moonray:math_filter = "average" - uniform token parameters:moonray:output_type = "flat" - uniform token parameters:moonray:primitive_attribute = "" - token parameters:moonray:primitive_attribute_type = "FLOAT" - uniform token parameters:moonray:result = "cryptomatte" - token parameters:moonray:state_variable = "N" - uniform token parameters:moonray:visibility_aov = "C[]*[][LO]" - } - - def RenderVar "N" ( - prepend apiSchemas = ["MoonrayVarAPI"] - ) - { - custom string driver:parameters:aov:name = "N" - uniform bool parameters:moonray:active = 1 - uniform token parameters:moonray:channel_format = "half" - uniform token parameters:moonray:channel_name = "N" - uniform token parameters:moonray:channel_suffix_mode = "auto" - uniform int parameters:moonray:cryptomatte_depth = 6 - uniform bool parameters:moonray:cryptomatte_output_beauty = 0 - uniform bool parameters:moonray:cryptomatte_output_normals = 0 - uniform bool parameters:moonray:cryptomatte_output_positions = 0 - uniform bool parameters:moonray:cryptomatte_output_refn = 0 - uniform bool parameters:moonray:cryptomatte_output_refp = 0 - uniform bool parameters:moonray:cryptomatte_output_uv = 0 - uniform double parameters:moonray:exr_dwa_compression_level = 85 - token parameters:moonray:file_name = "/tmp/cryptomatte_test.exr" - uniform token parameters:moonray:file_part = "main" - uniform token parameters:moonray:lpe = "" - uniform token parameters:moonray:material_aov = "" - uniform token parameters:moonray:math_filter = "average" - uniform token parameters:moonray:output_type = "flat" - uniform token parameters:moonray:primitive_attribute = "" - token parameters:moonray:primitive_attribute_type = "FLOAT" - uniform token parameters:moonray:result = "state variable" - token parameters:moonray:state_variable = "N" - uniform token parameters:moonray:visibility_aov = "C[]*[][LO]" - } - } - - def RenderProduct "All" - { - rel orderedVars = [ - , - , - , - ] - } - } - - def RenderSettings "All_render" ( - prepend apiSchemas = ["MoonraySceneVariablesAPI"] - ) - { - rel camera = - custom bool debugMode = 1 - custom bool disableRender = 1 - custom bool enableMotionBlur = 0 - custom int logLevel = 0 - string[] moonray:sceneVariable:deep_id_attribute_names = ["prim_id"] - rel products = - custom string rdlOutput = "/tmp/m_test" - uniform int2 resolution = (644, 274) - custom bool moonray:sceneVariable:enable_dof = 1 - } -} - -def Camera "camera" -{ - float2 clippingRange = (0.01, 10000) - float focalLength = 300 - float horizontalAperture = 240 - float verticalAperture = 240 - matrix4d xformOp:transform = ( (0.658163, 0.0116603, -0.752785, 0), (-0.20786, 0.963831, -0.166803, 0), (0.723613, 0.266257, 0.636782, 0), (11.6274, 5.83104, 1.19332, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def "gronkle" ( - payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@ -) -{ - matrix4d xformOp:transform:a = ( (0.03, 0, 0, 0), (0, 0.03, 0, 0), (0, 0, 0.03, 0), (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a", "xformOp:transform"] -} - -def Mesh "floor" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - color3f[] primvars:displayColor = [(1, 1, 1)] ( - interpolation = "uniform" - ) - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( - interpolation = "faceVarying" - ) - matrix4d xformOp:transform = ( (20, 0, 0, 0), (0, 20, 0, 0), (0, 0, 20, 0), (0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def Mesh "wall" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - color3f[] primvars:displayColor = [(1, 1, 1)] ( - interpolation = "uniform" - ) - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( - interpolation = "faceVarying" - ) - matrix4d xformOp:transform = ( (20, 0, 0, 0), (0, 0, 1, 0), (0, -10, 0, 0), (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def CylinderLight "cylinder" -{ - float colorTemperature = 6500 - bool enableColorTemperature = 1 - float inputs:colorTemperature = 6500 - bool inputs:enableColorTemperature = 1 - float inputs:intensity = 5 - float inputs:length = 10 - float inputs:radius = 0.3 - float intensity = 5 - float length = 10 - token moonray:visible_in_camera = "force on" - float radius = 0.3 - matrix4d xformOp:transform = ( (0.999573, -4.37114e-8, 0.0291956, 0), (0.0291956, 0, -0.999573, 0), (4.36928e-8, 1, 1.27618e-9, 0), (0, 4, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} diff --git a/testSuite/camera/perspective/anim_focal/scene.usd b/testSuite/camera/perspective/anim_focal/scene.usd deleted file mode 100644 index 5a0d61c..0000000 --- a/testSuite/camera/perspective/anim_focal/scene.usd +++ /dev/null @@ -1,58 +0,0 @@ -#usda 1.0 -( - startTimeCode = 101 - endTimeCode = 200 -) - -def Camera "camera" -{ - float3 xformOp:translate = (0, 10, 10) - uniform token[] xformOpOrder = ["xformOp:translate"] - float focalLength.timeSamples = { - 101: 100, - 200: 500 - } - float horizontalAperture = 240 - float verticalAperture = 240 - float2 clippingRange = (1, 10000) -} - -def DomeLight "env" -{ - float intensity = 0.5 - float inputs:intensity = 0.5 - asset texture:file = "/work/gshad/moonshine_test/rats_data/motion_blur/common/med/gld_dusk_GI_HS_PF_hdr.exr" - asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/motion_blur/common/med/gld_dusk_GI_HS_PF_hdr.exr" -} - -def RectLight "key" -{ - float intensity = 12 - float inputs:intensity = 12 - color3f color = (0.855, 0.77, 0.535) - color3f inputs:color = (0.855, 0.77, 0.535) - float width = 5 - float inputs:width = 5 - float height = 5 - float inputs:height = 5 -} - -def Sphere "sphere" -{ - float3 xformOp:translate = (0, 10, 0) - float radius = 0.5 - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = -} - -def Material "surfacing_sphere" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color = (0.319, 0.06, 0.0) - } -} \ No newline at end of file diff --git a/testSuite/camera/perspective/anim_focal/test.xml b/testSuite/camera/perspective/anim_focal/test.xml deleted file mode 100644 index 3a2049b..0000000 --- a/testSuite/camera/perspective/anim_focal/test.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - Renders 3 frames with animated focal length - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result100} ${args} -time 100 -res ${res} -camera camera -size 500 500 -refine-level 3 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - hd_render - -in ${shot_dir}/scene.usd -out ${result150} ${args} -time 150 -res ${res} -camera camera -size 500 500 -refine-level 3 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - hd_render - -in ${shot_dir}/scene.usd -out ${result200} ${args} -time 200 -res ${res} -camera camera -size 500 500 -refine-level 3 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result100} ${shot_tmp_dir}/${canonical100} -a --warn ${error_threshold} --fail ${error_threshold} --diff --absdiff -o ${shot_tmp_dir}/${diff100} - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result150} ${shot_tmp_dir}/${canonical150} -a --warn ${error_threshold} --fail ${error_threshold} --diff --absdiff -o ${shot_tmp_dir}/${diff150} - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result200} ${shot_tmp_dir}/${canonical200} -a --warn ${error_threshold} --fail ${error_threshold} --diff --absdiff -o ${shot_tmp_dir}/${diff200} - - - - - - canonical100 - canonical100.exr - result100 - result100.exr - diff100 - diff100.exr - - - canonical150 - canonical150.exr - result150 - result150.exr - diff150 - diff150.exr - - - canonical200 - canonical200.exr - result200 - result200.exr - diff200 - diff200.exr - - - diff --git a/testSuite/camera/perspective/anim_transform/scene.usd b/testSuite/camera/perspective/anim_transform/scene.usd deleted file mode 100644 index b77148c..0000000 --- a/testSuite/camera/perspective/anim_transform/scene.usd +++ /dev/null @@ -1,62 +0,0 @@ -#usda 1.0 -( - startTimeCode = 101 - endTimeCode = 200 -) - -def Camera "camera" -{ - float3 xformOp:translate.timeSamples = { - 101: (-3.0, 8.5, 20), - 200: (0, 8.5, 10) - } - float xformOp:rotateZ.timeSamples = { - 101: 180, - 200: 0 - } - uniform token[] xformOpOrder = ["xformOp:translate","xformOp:rotateZ"] - float focalLength = 500 - float horizontalAperture = 240 - float verticalAperture = 240 - float2 clippingRange = (1, 10000) -} - -def DomeLight "env" -{ - float intensity = 0.5 - float inputs:intensity = 0.5 - asset texture:file = "/work/gshad/moonshine_test/rats_data/motion_blur/common/med/gld_dusk_GI_HS_PF_hdr.exr" - asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/motion_blur/common/med/gld_dusk_GI_HS_PF_hdr.exr" -} - -def RectLight "key" -{ - float intensity = 12 - float inputs:intensity = 12 - color3f color = (0.855, 0.77, 0.535) - color3f inputs:color = (0.855, 0.77, 0.535) - float width = 5 - float inputs:width = 5 - float height = 5 - float inputs:height = 5 -} - -def Sphere "sphere" -{ - float3 xformOp:translate = (0, 10, 0) - float radius = 0.5 - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = -} - -def Material "surfacing_sphere" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color = (0.319, 0.06, 0.0) - } -} \ No newline at end of file diff --git a/testSuite/camera/perspective/anim_transform/test.xml b/testSuite/camera/perspective/anim_transform/test.xml deleted file mode 100644 index 467b1e4..0000000 --- a/testSuite/camera/perspective/anim_transform/test.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - Renders 3 frames with a moving camera - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result100} ${args} -time 100 -res ${res} -camera camera -size 500 500 -refine-level 3 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - hd_render - -in ${shot_dir}/scene.usd -out ${result150} ${args} -time 150 -res ${res} -camera camera -size 500 500 -refine-level 3 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - hd_render - -in ${shot_dir}/scene.usd -out ${result200} ${args} -time 200 -res ${res} -camera camera -size 500 500 -refine-level 3 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result100} ${shot_tmp_dir}/${canonical100} -a --warn ${error_threshold} --fail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff100} - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result150} ${shot_tmp_dir}/${canonical150} -a --warn ${error_threshold} --fail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff150} - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result200} ${shot_tmp_dir}/${canonical200} -a --warn ${error_threshold} --fail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff200} - - - - - - canonical100 - canonical100.exr - result100 - result100.exr - diff100 - diff100.exr - - - canonical150 - canonical150.exr - result150 - result150.exr - diff150 - diff150.exr - - - canonical200 - canonical200.exr - result200 - result200.exr - diff200 - diff200.exr - - - diff --git a/testSuite/camera/perspective/clipping/scene.usd b/testSuite/camera/perspective/clipping/scene.usd deleted file mode 100644 index 440dbfd..0000000 --- a/testSuite/camera/perspective/clipping/scene.usd +++ /dev/null @@ -1,118 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - float3 xformOp:translate = (0, 0, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - float horizontalAperture = 10 - float focalLength = 10 - float2 clippingRange = (1.25, 1.875) -} - -def DomeLight "l0" -{ -} - -def "floorGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - float3 xformOp:translate = (0, -0.5, 0.5) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = -} - -def "wallGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - float xformOp:rotateX = 90 - uniform token[] xformOpOrder = ["xformOp:rotateX"] - rel material:binding = -} - -def Cube "box0" -{ - float3 xformOp:translate = (-0.4375, -0.4375, 0.9375) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box1" -{ - float3 xformOp:translate = (-0.3125, -0.4375, 0.8125) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box2" -{ - float3 xformOp:translate = (-0.1875, -0.4375, 0.6875) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box3" -{ - float3 xformOp:translate = (-0.0625, -0.4375, 0.5625) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box4" -{ - float3 xformOp:translate = (0.0625, -0.4375, 0.4375) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box5" -{ - float3 xformOp:translate = (0.1875, -0.4375, 0.3125) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box6" -{ - float3 xformOp:translate = (0.3125, -0.4375, 0.1875) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box7" -{ - float3 xformOp:translate = (0.4375, -0.4375, 0.0625) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} - -def Material "surfacing_floor" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color.connect = <../floorMap.outputs:out> - float inputs:specular_factor = 0 - } - - def Shader "floorMap" - { - uniform token info:id = "ImageMap" - float3 outputs:out - asset inputs:texture = @/work/gshad/moonshine_test/rats_data/camera/perspective/clipping/misc/rgb_checker.tx@ - token inputs:gamma = "on" - bool inputs:wrap_around = false - } -} - -def Material "surfacing_box" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - } -} diff --git a/testSuite/camera/perspective/clipping/test.xml b/testSuite/camera/perspective/clipping/test.xml deleted file mode 100644 index 99c974d..0000000 --- a/testSuite/camera/perspective/clipping/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra version of perspective camera clipping test - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 500 500 -refine-level 0 -set 'moonray:sceneVariable:light_samples' 1 -set 'moonray:sceneVariable:bsdf_samples' 1 -set 'moonray:sceneVariable:pixel_samples' 4 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .365 --warnpercent .365 --hardfail 0.38 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/camera/perspective/dof/scene.usd b/testSuite/camera/perspective/dof/scene.usd deleted file mode 100644 index d06c522..0000000 --- a/testSuite/camera/perspective/dof/scene.usd +++ /dev/null @@ -1,120 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - float3 xformOp:translate = (0, 0, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - float horizontalAperture = 10 - float focalLength = 10 - float2 clippingRange = (0.1, 10000) - float fStop = 4.0 - float focusDistance = 1.0 -} - -def DomeLight "l0" -{ -} - -def "floorGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - float3 xformOp:translate = (0, -0.5, 0.5) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = -} - -def "wallGeom" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - float xformOp:rotateX = 90 - uniform token[] xformOpOrder = ["xformOp:rotateX"] - rel material:binding = -} - -def Cube "box0" -{ - float3 xformOp:translate = (-0.4375, -0.4375, 0.9375) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box1" -{ - float3 xformOp:translate = (-0.3125, -0.4375, 0.8125) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box2" -{ - float3 xformOp:translate = (-0.1875, -0.4375, 0.6875) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box3" -{ - float3 xformOp:translate = (-0.0625, -0.4375, 0.5625) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box4" -{ - float3 xformOp:translate = (0.0625, -0.4375, 0.4375) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box5" -{ - float3 xformOp:translate = (0.1875, -0.4375, 0.3125) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box6" -{ - float3 xformOp:translate = (0.3125, -0.4375, 0.1875) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} -def Cube "box7" -{ - float3 xformOp:translate = (0.4375, -0.4375, 0.0625) - uniform token[] xformOpOrder = ["xformOp:translate"] - double size = 0.125 - rel material:binding = -} - -def Material "surfacing_floor" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color.connect = <../floorMap.outputs:out> - float inputs:specular_factor = 0 - } - - def Shader "floorMap" - { - uniform token info:id = "ImageMap" - float3 outputs:out - asset inputs:texture = @/work/gshad/moonshine_test/rats_data/camera/perspective/clipping/misc/rgb_checker.tx@ - token inputs:gamma = "on" - bool inputs:wrap_around = false - } -} - -def Material "surfacing_box" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - } -} diff --git a/testSuite/camera/perspective/dof/test.xml b/testSuite/camera/perspective/dof/test.xml deleted file mode 100644 index 7246a05..0000000 --- a/testSuite/camera/perspective/dof/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Perspective camera dof test - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 500 500 -refine-level 0 -set 'moonray:sceneVariable:max_depth' 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .01 --hardfail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/geometry/basis_curves/scene.usd b/testSuite/geometry/basis_curves/scene.usd deleted file mode 100644 index 0a99147..0000000 --- a/testSuite/geometry/basis_curves/scene.usd +++ /dev/null @@ -1,50 +0,0 @@ -#usda 1.0 - -def BasisCurves "linear" -{ - uniform token[] xformOpOrder = ["xformOp:translate"] - float3 xformOp:translate = (-3, 0, 0) - - uniform token type = "linear" - int[] curveVertexCounts = [7] - point3f[] points = [(0, 0, 0), (1, 1, 0), (1, 2, 0), (0, 3, 0), (-1, 4, 0), (-1, 5, 0), (0, 6, 0)] - float[] widths = [0, .5, .5, .8, .5, .5, 0] (interpolation = "varying") - color3f[] primvars:displayColor = [(1, 0, 0)] -} - -def BasisCurves "bspline" -{ - uniform token[] xformOpOrder = ["xformOp:translate"] - float3 xformOp:translate = (0, 0, 0) - - uniform token type = "cubic" - uniform token basis = "bspline" - int[] curveVertexCounts = [9] - point3f[] points = [(0, 0, 0), (0, 0, 0), (1, 1, 0), (1, 2, 0), (0, 3, 0), (-1, 4, 0), (-1, 5, 0), (0, 6, 0), (0, 6, 0)] - float[] widths = [0, 0, .5, .5, .8, .5, .5, 0, 0] (interpolation = "vertex") - color3f[] primvars:displayColor = [(0, 1, 0)] -} - -def BasisCurves "bezier" -{ - uniform token[] xformOpOrder = ["xformOp:translate"] - float3 xformOp:translate = (3, 0, 0) - - uniform token type = "cubic" - uniform token basis = "bezier" - int[] curveVertexCounts = [7] - point3f[] points = [(0, 0, 0), (1, 1, 0), (1, 2, 0), (0, 3, 0), (-1, 4, 0), (-1, 5, 0), (0, 6, 0)] - float[] widths = [0, .5, .5, .8, .5, .5, 0] (interpolation = "vertex") - color3f[] primvars:displayColor = [(0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1,0,1), (1,1,0), - (1,1,1)] (interpolation = "vertex") -} - -def DomeLight "dome" -{ -} - -def Camera "cam" -{ - uniform token[] xformOpOrder = ["xformOp:translate"] - float3 xformOp:translate = (0, 3, 30) -} \ No newline at end of file diff --git a/testSuite/geometry/basis_curves/test.xml b/testSuite/geometry/basis_curves/test.xml deleted file mode 100644 index 31516e5..0000000 --- a/testSuite/geometry/basis_curves/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Renders supported forms of BasicCurves geometry - - - - error_threshold - 0.02 - - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent 1 --hardfail 0.2 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/geometry/instances/instances.usd b/testSuite/geometry/instances/instances.usd deleted file mode 100644 index 18a27e5..0000000 --- a/testSuite/geometry/instances/instances.usd +++ /dev/null @@ -1,75 +0,0 @@ -#usda 1.0 - -def "Prototype" ( - active = false -) -{ - def Xform "Points" ( - instanceable = true - ) { - uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ"] - def PointInstancer "pointInstancer" { - point3f[] positions = [ - (0, 0, 0), (5, 0, 0), (10, 0, 0), (0, 5, 0), (5, 5, 0), (10, 5, 0), - (0, 10, 0), (5, 10, 0), (10, 10, 0), (0, 15, 0), (5, 15, 0), (10, 15, 0) - ] - quath[] orientations = [ - (0, 0, 0, 1), (.707107, 0, 0, .707107), (0, .707107, 0, .707107), (0, 0, .707107, .707107), - (0, 0, 0, 1), (0, .577350, .577350, .577350), (.577350, 0, .577350, .577350), (.577350, .577350, 0, .577350), - (0, 0, 0, 1), (0.5, 0.5, 0.5, 0.5), (-0.5, 0.5, 0.5, 0.5), (-0.5, 0.5, 0.5, -0.5) - ] - color3f[] primvars:displayColor = [ - (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), - (1, 1, 1), (.5, .5, 1), (.5, 1, .5), (.5, 1, 1), (1, .5, .5), (1, .5, 1) - ] ( - interpolation = "varying" - ) - int[] protoIndices = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - add rel prototypes = [ - - ] - def Mesh "prototype" { - float3[] extent = [(-1, 0, -1), (1, 2, 1)] - float3[] points = [(1, 0, 1), (-1, 0, 1), (-1, 0, -1), (1, 0, -1), (0, 2, 0)] - int[] faceVertexCounts = [4, 3, 3, 3, 3] - int[] faceVertexIndices = [0, 1, 2, 3, 1, 0, 4, 2, 1, 4, 3, 2, 4, 0, 3, 4] - normal3f[] primvars:normals = [ - (0, -1, 0), (0, 0.45, 0.89), (-0.89, 0.45, 0), (0, 0.45, -0.89), (0.89, 0.45, 0) - ] ( - interpolation = "uniform" - ) - uniform token subdivisionScheme = "none" - } - } - } -} - -def Xform "Points1" ( - append references = -) { } - -def Xform "Points2" ( - append references =
-) { - double3 xformOp:translate = (0, 0, 5) -} - -def Xform "Points3" ( - append references = -) { - double3 xformOp:translate = (0, 0, 10) -} - -def Xform "Points4" ( - append references = -) { - double3 xformOp:translate = (0, 0, 15) -} - -def Xform "Points5" ( - append references = -) { - double3 xformOp:translate = (0, 0, 20) - double3 xformOp:rotateXYZ = (45, 45, 45) -} - diff --git a/testSuite/geometry/instances/test.xml b/testSuite/geometry/instances/test.xml deleted file mode 100644 index 221d7a9..0000000 --- a/testSuite/geometry/instances/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Renders 4 instanced point instancers of 12 small pyramids each with per-instance displayColor - - - - hd_render - -in ${shot_dir}/instances.usd -out ${result} ${args} -res ${res} -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent 0.2 --hardfail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/geometry/primvar_interpolation/scene.usd b/testSuite/geometry/primvar_interpolation/scene.usd deleted file mode 100644 index 65869d5..0000000 --- a/testSuite/geometry/primvar_interpolation/scene.usd +++ /dev/null @@ -1,108 +0,0 @@ -#usda 1.0 - -def Camera "cam" -{ - float3 xformOp:translate = (0, 2, 25) - uniform token[] xformOpOrder = ["xformOp:translate"] -} - -def Mesh "constant" -{ - float3 xformOp:translate = (-1.2, 0, 0) - uniform token[] xformOpOrder = ["xformOp:translate"] - - int[] faceVertexCounts = [3, 3] - int[] faceVertexIndices = [0, 1, 2, 0, 2, 3] - point3f[] points = [(-1, 0, 0), (1, 0, 0), (1, 1, 0), (-1, 1, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(1, 0, 0)] ( - interpolation = "constant" - ) - - uniform token subdivisionScheme = "none" -} - -def Mesh "uniform" -{ - float3 xformOp:translate = (1.2, 0, 0) - uniform token[] xformOpOrder = ["xformOp:translate"] - - int[] faceVertexCounts = [3, 3] - int[] faceVertexIndices = [0, 1, 2, 0, 2, 3] - point3f[] points = [(-1, 0, 0), (1, 0, 0), (1, 1, 0), (-1, 1, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(1, 0, 0), (0,0,1)] ( - interpolation = "uniform" - ) - - uniform token subdivisionScheme = "none" -} - -def Mesh "varying" -{ - float3 xformOp:translate = (-1.2, 1.5, 0) - uniform token[] xformOpOrder = ["xformOp:translate"] - - int[] faceVertexCounts = [3, 3] - int[] faceVertexIndices = [0, 1, 2, 0, 2, 3] - point3f[] points = [(-1, 0, 0), (1, 0, 0), (1, 1, 0), (-1, 1, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(1, 0, 0), (0,1,0), (0,0,1), (1,0,1)] ( - interpolation = "varying" - ) - - uniform token subdivisionScheme = "none" -} - -def Mesh "vertex" -{ - float3 xformOp:translate = (1.2, 1.5, 0) - uniform token[] xformOpOrder = ["xformOp:translate"] - - int[] faceVertexCounts = [3, 3] - int[] faceVertexIndices = [0, 1, 2, 0, 2, 3] - point3f[] points = [(-1, 0, 0), (1, 0, 0), (1, 1, 0), (-1, 1, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(1, 0, 0), (0,1,0), (0,0,1), (1,0,1)] ( - interpolation = "vertex" - ) - - uniform token subdivisionScheme = "none" -} - -def Mesh "faceVarying" -{ - float3 xformOp:translate = (-1.2, 3.0, 0) - uniform token[] xformOpOrder = ["xformOp:translate"] - - int[] faceVertexCounts = [3, 3] - int[] faceVertexIndices = [0, 1, 2, 0, 2, 3] - point3f[] points = [(-1, 0, 0), (1, 0, 0), (1, 1, 0), (-1, 1, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(1, 0, 0), (0,1,0), (0,0,1), - (1,0,1), (1,1,0), (0,0,1)] ( - interpolation = "faceVarying" - ) - uniform token subdivisionScheme = "none" -} - -def Mesh "invalid" -{ - float3 xformOp:translate = (1.2, 3.0, 0) - uniform token[] xformOpOrder = ["xformOp:translate"] - - int[] faceVertexCounts = [3, 3] - int[] faceVertexIndices = [0, 1, 2, 0, 2, 3] - point3f[] points = [(-1, 0, 0), (1, 0, 0), (1, 1, 0), (-1, 1, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(1, 0, 0), (0,1,0), (0,0,1), (1,0,1)] ( - interpolation = "faceVarying" - ) - uniform token subdivisionScheme = "none" -} \ No newline at end of file diff --git a/testSuite/geometry/primvar_interpolation/test.xml b/testSuite/geometry/primvar_interpolation/test.xml deleted file mode 100644 index 74e6719..0000000 --- a/testSuite/geometry/primvar_interpolation/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Tests different primvar interpolation types - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -size 1024 1024 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/geometry/primvars/primvars.usda b/testSuite/geometry/primvars/primvars.usda deleted file mode 100644 index be4ad20..0000000 --- a/testSuite/geometry/primvars/primvars.usda +++ /dev/null @@ -1,287 +0,0 @@ -#usda 1.0 - -def Material "mat" -{ - token outputs:surface.connect = - - def Shader "previewMtl" - { - uniform token info:id = "UsdPreviewSurface" - token outputs:surface - color3f inputs:diffuseColor.connect = - float inputs:opacity.connect = - float inputs:roughness.connect = - } - - def Shader "PrimvarColor" - { - uniform token info:id = "UsdPrimvarReader_float3" - string inputs:varname = "displayColor" - float3 inputs:fallback = (.5, .5, .5) - float3 outputs:result - } - - def Shader "PrimvarOpacity" - { - uniform token info:id = "UsdPrimvarReader_float" - string inputs:varname = "displayOpacity" - float inputs:fallback = 1 - float outputs:result - } - - def Shader "PrimvarRoughness" - { - uniform token info:id = "UsdPrimvarReader_float" - string inputs:varname = "roughness" - float inputs:fallback = 0.5 - float outputs:result - } - - def Shader "PrimvarColorMoonray" - { - uniform token info:id = "AttributeMap" - string inputs:primitive_attribute_name = "displayColor" - float3 inputs:default_value = (.5, .5, .5) - float3 outputs:result - } - - token outputs:moonray:surface.connect = - - def Shader "MoonrayMtl" - { - uniform token info:id = "UsdPreviewSurface" - token outputs:surface - color3f inputs:diffuseColor.connect = - float inputs:opacity.connect = - float inputs:roughness.connect = - } -} - -def Xform "World" -{ - float3 primvars:displayColor = (.5,.5,.5) - float[] primvars:roughness = [0] - float primvars:moonray:mesh_resolution = 4 - - def Sphere "s00" - { - double3 xformOp:translate = (-3, -3, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - bool primvars:moonray:visible_in_camera = false - rel material:binding = - } - - def Sphere "s01" - { - double3 xformOp:translate = (-1, -3, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - } - - def Sphere "s02" - { - double3 xformOp:translate = (1, -3, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - } - - def Sphere "s03" - { - double3 xformOp:translate = (3, -3, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - float primvars:moonray:mesh_resolution = 0 - } - - def Xform "x1" { - bool primvars:moonray:visible_in_camera = False - - def Sphere "s10" - { - double3 xformOp:translate = (-3, -1, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - } - - def Sphere "s11" - { - double3 xformOp:translate = (-1, -1, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - bool primvars:moonray:visible_in_camera = True - rel material:binding = - } - - def Sphere "s12" - { - double3 xformOp:translate = (1, -1, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - } - - def Sphere "s13" - { - double3 xformOp:translate = (3, -1, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - } - } - - def Sphere "s20" - { - double3 xformOp:translate = (-3, 1, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - } - - def Sphere "s21" - { - double3 xformOp:translate = (-1, 1, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - } - - def Sphere "s22" - { - double3 xformOp:translate = (1, 1, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - float[] primvars:displayOpacity = [0] - } - - def Sphere "s23" - { - double3 xformOp:translate = (3, 1, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - } - - def Sphere "s30" - { - double3 xformOp:translate = (-3, 3, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - float primvars:moonray:mesh_resolution = 1 - } - - def Sphere "s31" - { - double3 xformOp:translate = (-1, 3, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - } - - def Sphere "s32" - { - double3 xformOp:translate = (1, 3, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - } - - def Sphere "s33" - { - double3 xformOp:translate = (3, 3, 2) - uniform token[] xformOpOrder = ["xformOp:translate"] - rel material:binding = - } - - def Mesh "plane" - { - float3[] extent = [(-4, -4, 0), (4, 4, 0)] - float3[] points = [ - (-4, -4, 0), (-3, -4, 0), (-2, -4, 0), (-1, -4, 0), (0, -4, 0), (1, -4, 0), (2, -4, 0), (3, -4, 0), (4, -4, 0), - (-4, -3, 0), (-3, -3, 0), (-2, -3, 0), (-1, -3, 0), (0, -3, 0), (1, -3, 0), (2, -3, 0), (3, -3, 0), (4, -3, 0), - (-4, -2, 0), (-3, -2, 0), (-2, -2, 0), (-1, -2, 0), (0, -2, 0), (1, -2, 0), (2, -2, 0), (3, -2, 0), (4, -2, 0), - (-4, -1, 0), (-3, -1, 0), (-2, -1, 0), (-1, -1, 0), (0, -1, 0), (1, -1, 0), (2, -1, 0), (3, -1, 0), (4, -1, 0), - (-4, 0, 0), (-3, 0, 0), (-2, 0, 0), (-1, 0, 0), (0, 0, 0), (1, 0, 0), (2, 0, 0), (3, 0, 0), (4, 0, 0), - (-4, 1, 0), (-3, 1, 0), (-2, 1, 0), (-1, 1, 0), (0, 1, 0), (1, 1, 0), (2, 1, 0), (3, 1, 0), (4, 1, 0), - (-4, 2, 0), (-3, 2, 0), (-2, 2, 0), (-1, 2, 0), (0, 2, 0), (1, 2, 0), (2, 2, 0), (3, 2, 0), (4, 2, 0), - (-4, 3, 0), (-3, 3, 0), (-2, 3, 0), (-1, 3, 0), (0, 3, 0), (1, 3, 0), (2, 3, 0), (3, 3, 0), (4, 3, 0), - (-4, 4, 0), (-3, 4, 0), (-2, 4, 0), (-1, 4, 0), (0, 4, 0), (1, 4, 0), (2, 4, 0), (3, 4, 0), (4, 4, 0)] - int[] faceVertexCounts = [ - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4] - int[] faceVertexIndices = [ - 0, 9, 10, 1, - 1, 10, 11, 2, - 2, 11, 12, 3, - 3, 12, 13, 4, - 4, 13, 14, 5, - 5, 14, 15, 6, - 6, 15, 16, 7, - 7, 16, 17, 8, - 9, 18, 19, 10, - 10, 19, 20, 11, - 11, 20, 21, 12, - 12, 21, 22, 13, - 13, 22, 23, 14, - 14, 23, 24, 15, - 15, 24, 25, 16, - 16, 25, 26, 17, - 18, 27, 28, 19, - 19, 28, 29, 20, - 20, 29, 30, 21, - 21, 30, 31, 22, - 22, 31, 32, 23, - 23, 32, 33, 24, - 24, 33, 34, 25, - 25, 34, 35, 26, - 27, 36, 37, 28, - 28, 37, 38, 29, - 29, 38, 39, 30, - 30, 39, 40, 31, - 31, 40, 41, 32, - 32, 41, 42, 33, - 33, 42, 43, 34, - 34, 43, 44, 35, - 36, 45, 46, 37, - 37, 46, 47, 38, - 38, 47, 48, 39, - 39, 48, 49, 40, - 40, 49, 50, 41, - 41, 50, 51, 42, - 42, 51, 52, 43, - 43, 52, 53, 44, - 45, 54, 55, 46, - 46, 55, 56, 47, - 47, 56, 57, 48, - 48, 57, 58, 49, - 49, 58, 59, 50, - 50, 59, 60, 51, - 51, 60, 61, 52, - 52, 61, 62, 53, - 54, 63, 64, 55, - 55, 64, 65, 56, - 56, 65, 66, 57, - 57, 66, 67, 58, - 58, 67, 68, 59, - 59, 68, 69, 60, - 60, 69, 70, 61, - 61, 70, 71, 62, - 63, 72, 73, 64, - 64, 73, 74, 65, - 65, 74, 75, 66, - 66, 75, 76, 67, - 67, 76, 77, 68, - 68, 77, 78, 69, - 69, 78, 79, 70, - 70, 79, 80, 71] - color3f[] primvars:displayColor = [ - (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), - (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), - (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), - (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), - (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), - (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), - (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), - (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1), (1,0,0), (1,1,1)] ( interpolation = "uniform" ) - uniform token subdivisionScheme = "none" - uniform bool doubleSided = true - } -} - diff --git a/testSuite/geometry/primvars/test.xml b/testSuite/geometry/primvars/test.xml deleted file mode 100644 index 1208e22..0000000 --- a/testSuite/geometry/primvars/test.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - Tests primvars:moonray:visible_in_camera, including inheritance from containing prims. - Also tests a few other primvars. - - - - hd_render - -in ${shot_dir}/primvars.usda -out ${result} ${args} -res ${res} -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent 0.5 --hardfail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/geometry/procedural/proceduralSphere.usda b/testSuite/geometry/procedural/proceduralSphere.usda deleted file mode 100644 index cd220cc..0000000 --- a/testSuite/geometry/procedural/proceduralSphere.usda +++ /dev/null @@ -1,151 +0,0 @@ -#usda 1.0 - -def Xform "world" -{ - float xformOp:rotateX = 45 - uniform token[] xformOpOrder = ["xformOp:rotateX"] - float3 xformOp:rotate = (0,1,0) - -def Procedural "sphere" -{ - token procedural:class = "SphereGeometry" - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-1.5, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-1,-1,-1), (1,1,1)] - rel material:binding = - def Material "surfacing" - { - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "DwaBaseMaterial" - color4f outputs:surface - float inputs:roughness = .2 - color3f inputs:albedo = (.1,.2,.3) - } - } -} - -def "sphere2" ( - append references = -) { - float procedural:radius = 2 - float procedural:zmin = -2 - matrix4d xformOp:transform = ( (-1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (1.5, 0, 0, 1) ) - float3[] extent = [(-2,-2,-2), (2,2,1)] -} - -def "sphere3" ( - append references = -) { - float procedural:phi_max = 180 - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (4.5, 0, 0, 1) ) - float3[] extent = [(-1,0,-1), (1,1,1)] -} - -def "sphere4" ( - append references = -) { - float procedural:radius = 1.5 - float procedural:phi_max = 180 - float procedural:zmax = 1.5 - float procedural:zmin = -1.5 - matrix4d xformOp:transform = ( (-1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (7.5, 0, 0, 1) ) - float3[] extent = [(-1.5,0,-1.5), (1.5,1.5,1.5)] -} - -################ - -def "sphere5" ( - append references = -) { - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-1.5, 0, -3, 1) ) -} - -def "sphere6" ( - append references = -) { - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (1.5, 0, -3, 1) ) -} - -def "sphere7" ( - append references = -) { - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (4.5, 0, -3, 1) ) -} - -def "sphere8" ( - append references = -) { - matrix4d xformOp:transform = ( (-1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (7.5, 0, -3, 1) ) -} - -################ - -def "sphere9" ( - append references = -) { - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-1.5, 0, -6, 1) ) -} - -def "sphere10" ( - append references = -) { - matrix4d xformOp:transform = ( (-1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (1.5, 0, -6, 1) ) -} - -def "sphere11" ( - append references = -) { - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (4.5, 0, -6, 1) ) -} - -def "sphere12" ( - append references = -) { - matrix4d xformOp:transform = ( (-1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (7.5, 0, -6, 1) ) -} - -################ - -def "sphere13" ( - append references = -) { - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-1.5, 0, -9, 1) ) -} - -def "sphere14" ( - append references = -) { - matrix4d xformOp:transform = ( (-1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (1.5, 0, -9, 1) ) -} - -def "sphere15" ( - append references = -) { - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (4.5, 0, -9, 1) ) -} - -def "sphere16" ( - append references = -) { - matrix4d xformOp:transform = ( (-1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (7.5, 0, -9, 1) ) -} - -################ - -def Mesh "plane" -{ - int primvars:moonray:side_type = 1 - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 2, 3] - float3[] points = [(-3, -1.1, 1.5), (9,-1.1,1.5), (9,-1.1,-10.5), (-3,-1.1,-10.5)] - color3f[] primvars:displayColor = [(1, 0, 0), (1, 0, 1), (1, 0, 0), (1, 0, 1)] ( - interpolation = "vertex" - ) - uniform token subdivisionScheme = "none" -} - -} - diff --git a/testSuite/geometry/procedural/test.xml b/testSuite/geometry/procedural/test.xml deleted file mode 100644 index 5f6f23d..0000000 --- a/testSuite/geometry/procedural/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Renders 16 SphereGeometry with various settings using the Procedural Usd prim - - - - hd_render - -in ${shot_dir}/proceduralSphere.usda -out ${result} ${args} -res ${res} - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn 0.01 --fail 0.08 --failpercent .04 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/geometry/skel/skel.usd b/testSuite/geometry/skel/skel.usd deleted file mode 100644 index 58fdaec..0000000 --- a/testSuite/geometry/skel/skel.usd +++ /dev/null @@ -1,167 +0,0 @@ -#usda 1.0 -( - defaultPrim = "group1" - endTimeCode = 10 - startTimeCode = 1 - upAxis = "Y" -) - -def SkelRoot "group1" { - rel skel:skeleton = - rel skel:animationSource = - - float xformOp:rotateX = -90 - uniform token[] xformOpOrder = ["xformOp:rotateX"] - - def Skeleton "skeleton" - { - uniform token purpose = "guide" - uniform token[] joints = ["joint1", "joint1/joint2", "joint1/joint2/joint3"] - uniform matrix4d[] restTransforms = [ - ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, -6, 1) ), - ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 6, 1) ), - ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 6, 1) ) - ] - uniform matrix4d[] bindTransforms = [ - ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, -6, 1) ), - ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) ), - ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 6, 1) ) - ] - } - - def SkelAnimation "animation" - { - uniform token[] joints = ["joint1/joint2"] - quatf[] rotations = [(1, 0, 0, 0)] - quatf[] rotations.timeSamples = { - 0: [(.7071, 0, .7071, 0)], - 10: [(1, 0, 0, 0)], - } - half3[] scales = [(1, 1, 1)] - float3[] translations = [(0, 0, 6)] - } - - def Mesh "cylinder" ( - prepend apiSchemas = ["SkelBindingAPI"] - ) - { - uniform bool doubleSided = 1 - float3[] extent = [(-1, -0.86602545, -6), (1, 0.86602545, 6)] - int[] faceVertexCounts = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] - int[] faceVertexIndices = [ - 0, 1, 5, 4, - 1, 2, 6, 5, - 2, 3, 7, 6, - 3, 0, 4, 7, - 4, 5, 9, 8, - 5, 6,10, 9, - 6, 7,11,10, - 7, 4, 8,11, - 8, 9,13,12, - 9,10,14,13, - 10,11,15,14, - 11,8,12,15, - 12,13,17,16, - 13,14,18,17, - 14,15,19,18, - 15,12,16,19 - ] - point3f[] points = [ - (-1, 0, -6), - (0, -1, -6), - (1, 0, -6), - (0, 1, -6), - (-1, 0, -1), - (0, -1, -1), - (1, 0, -1), - (0, 1, -1), - (-1, 0, 0), - (0, -1, 0), - (1, 0, 0), - (0, 1, 0), - (-1, 0, 1), - (0, -1, 1), - (1, 0, 1), - (0, 1, 1), - (-1, 0, 6), - (0, -1, 6), - (1, 0, 6), - (0, 1, 6) - ] - color3f[] primvars:displayColor = [ - (1, 0, 0), - (1, 0, 0), - (1, 0, 0), - (1, 0, 0), - (.6,0,.4), - (.6,0,.4), - (.6,0,.4), - (.6,0,.4), - (.5,0,.5), - (.5,0,.5), - (.5,0,.5), - (.5,0,.5), - (.4,0,.6), - (.4,0,.6), - (.4,0,.6), - (.4,0,.6), - (0, 0, 1), - (0, 0, 1), - (0, 0, 1), - (0, 0, 1) - ] ( - interpolation = "vertex" - ) - int[] primvars:skel:jointIndices = [ - 0, 0, - 0, 0, - 0, 0, - 0, 0, - 1, 0, - 1, 0, - 1, 0, - 1, 0, - 1, 0, - 1, 0, - 1, 0, - 1, 0, - 1, 0, - 1, 0, - 1, 0, - 1, 0, - 1, 1, - 1, 1, - 1, 1, - 1, 1, - ] ( - elementSize = 2 - interpolation = "vertex" - ) - float[] primvars:skel:jointWeights = [ - 1, 0, - 1, 0, - 1, 0, - 1, 0, - 0.4, 0.6, - 0.4, 0.6, - 0.4, 0.6, - 0.4, 0.6, - 0.5, 0.5, - 0.5, 0.5, - 0.5, 0.5, - 0.5, 0.5, - 0.6, 0.4, - 0.6, 0.4, - 0.6, 0.4, - 0.6, 0.4, - 1, 0, - 1, 0, - 1, 0, - 1, 0, - ] ( - elementSize = 2 - interpolation = "vertex" - ) - } -} - diff --git a/testSuite/geometry/skel/test.xml b/testSuite/geometry/skel/test.xml deleted file mode 100644 index 3d8449f..0000000 --- a/testSuite/geometry/skel/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Remders a really simple UsdSkel deformation - - - - error_threshold - 0.016 - - - - - hd_render - -in ${shot_dir}/skel.usd -out ${result} ${args} -res ${res} -size 1920 1440 -refine-level 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/geometry/subdivision/subdivision.usd b/testSuite/geometry/subdivision/subdivision.usd deleted file mode 100644 index 3fa6861..0000000 --- a/testSuite/geometry/subdivision/subdivision.usd +++ /dev/null @@ -1,102 +0,0 @@ -#usda 1.0 - -# orientation does not work for Cube, bug sent to pixar -#def Cube "cube" -#{ -# double size = 2 -# matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-1.5, 0, 0, 1) ) -# uniform token[] xformOpOrder = ["xformOp:transform"] -#} - -def Mesh "cube" -{ - float3[] extent = [(-1, -1, -1), (1, 1, 1)] - int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] - int[] faceVertexIndices = [0, 1, 2, 3, 4, 5, 6, 7, 4, 7, 3, 2, 0, 3, 7, 6, 4, 2, 1, 5, 6, 5, 1, 0] - float3[] points = [(1, 1, 1), (-1, 1, 1), (-1, -1, 1), (1, -1, 1), (-1, -1, -1), (-1, 1, -1), (1, 1, -1), (1, -1, -1)] - uniform token subdivisionScheme = "none" - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-1.5, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def "cubeCatmull" ( - append references = -) { - uniform token subdivisionScheme = "catmullClark" - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (1.5, 0, 0, 1) ) -} - -def "cubeLoop" ( - append references = -) { - uniform token subdivisionScheme = "loop" - int[] faceVertexCounts = [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] - int[] faceVertexIndices = [ - 0, 1, 2, 2, 3, 0, - 4, 5, 6, 6, 7, 4, - 4, 7, 3, 3, 2, 4, - 0, 3, 7, 7, 6, 0, - 4, 2, 1, 1, 5, 4, - 6, 5, 1, 1, 0, 6] - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (4.5, 0, 0, 1) ) -} - -def "cubeBilinear" ( - append references = -) { - uniform token subdivisionScheme = "bilinear" - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (7.5, 0, 0, 1) ) -} - -################ - -def "cubeFaceVaryingAll" ( - append references = -) { - uniform token faceVaryingLinearInterpolation = "all" - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-1.5, 3, 0, 1) ) -} - -def "cubeCatmullFaceVaryingAll" ( - append references = -) { - uniform token faceVaryingLinearInterpolation = "all" - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (1.5, 3, 0, 1) ) -} - -def "cubeCatmullTriangleSmooth" ( - append references = -) { - uniform token triangleSubdivisionRule = "smooth" - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (4.5, 3, 0, 1) ) -} - -def "cubeCatmullSharpCorners" ( - append references = -) { - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (7.5, 3, 0, 1) ) - int[] cornerIndices = [2, 3, 5, 6] - float[] cornerSharpnesses = [10, 10, 10, 10] -} - -def "cubeCatmullCreases" ( - append references = -) { - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (1.5, 6, 0, 1) ) - int[] creaseIndices = [0, 1, 2, 4, 7, 6] - int[] creaseLengths = [3, 4] - float[] creaseSharpnesses = [10, 10] -} - -################ - -def Mesh "plane" -{ - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 2, 3] - float3[] points = [(-3, -1.1, 1.5), (9,-1.1,1.5), (9,-1.1,-10.5), (-3,-1.1,-10.5)] - color3f[] primvars:displayColor = [(1, 0, 0), (1, 0, 1), (1, 0, 0), (1, 0, 1)] ( - interpolation = "vertex" - ) - uniform token subdivisionScheme = "none" -} diff --git a/testSuite/geometry/subdivision/test.xml b/testSuite/geometry/subdivision/test.xml deleted file mode 100644 index 18bda50..0000000 --- a/testSuite/geometry/subdivision/test.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - Renders cubes with various OpenSubdiv setups - - - - hd_render - -in ${shot_dir}/subdivision.usd -out ${result} ${args} -res ${res} -refine-level 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .01 --warnpercent .01 --hardfail .02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_max - 0.02 - - - error_threshold - 0.02 - - - - diff --git a/testSuite/geometry/two_triangles/test.xml b/testSuite/geometry/two_triangles/test.xml deleted file mode 100644 index d6c3cc7..0000000 --- a/testSuite/geometry/two_triangles/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Renders two triangles using displayColor and free camera. - - - - hd_render - -in ${shot_dir}/two_triangles.usd -out ${result} ${args} -res ${res} - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/geometry/two_triangles/two_triangles.usd b/testSuite/geometry/two_triangles/two_triangles.usd deleted file mode 100644 index 14e4905..0000000 --- a/testSuite/geometry/two_triangles/two_triangles.usd +++ /dev/null @@ -1,23 +0,0 @@ -#usda 1.0 - -def Camera "shot_cam" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.5, 10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def Mesh "two_triangles" -{ - int[] faceVertexCounts = [3, 3] - int[] faceVertexIndices = [0, 1, 2, 0, 2, 3] - point3f[] points = [(-1, 0, 0), (1, 0, 0), (1, 1, 0), (-1, 1, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(1, 0, 0), (0, 1, 0)] ( - interpolation = "uniform" - ) - float[] primvars:displayOpacity = [1] ( - interpolation = "uniform" - ) - uniform token subdivisionScheme = "none" -} diff --git a/testSuite/geometry/two_triangles_delta/delta.usd b/testSuite/geometry/two_triangles_delta/delta.usd deleted file mode 100644 index f2008d3..0000000 --- a/testSuite/geometry/two_triangles_delta/delta.usd +++ /dev/null @@ -1,8 +0,0 @@ -#usda 1.0 - -def Mesh "two_triangles" -{ - color3f[] primvars:displayColor = [(0, 0, 1), (0, 1, 0)] ( - interpolation = "uniform" - ) -} diff --git a/testSuite/geometry/two_triangles_delta/scene.usd b/testSuite/geometry/two_triangles_delta/scene.usd deleted file mode 100644 index 0122d21..0000000 --- a/testSuite/geometry/two_triangles_delta/scene.usd +++ /dev/null @@ -1,20 +0,0 @@ -#usda 1.0 - -def Camera "shot_cam" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0.5, 10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def Mesh "two_triangles" -{ - int[] faceVertexCounts = [3, 3] - int[] faceVertexIndices = [0, 1, 2, 0, 2, 3] - point3f[] points = [(-1, 0, 0), (1, 0, 0), (1, 1, 0), (-1, 1, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(1, 0, 0), (0, 1, 0)] ( - interpolation = "uniform" - ) - uniform token subdivisionScheme = "none" -} diff --git a/testSuite/geometry/two_triangles_delta/test.xml b/testSuite/geometry/two_triangles_delta/test.xml deleted file mode 100644 index efcd53c..0000000 --- a/testSuite/geometry/two_triangles_delta/test.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - Renders two triangles using displayColor, then renders a delta image with a different display color. - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -delta_in ${shot_dir}/delta.usd -delta_out ${result0} -set executionMode vectorized - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result0} ${shot_tmp_dir}/${canonical0} -a --warn ${error_threshold} --fail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff0} - - - - - - canonical - canonical.exr - result - result.exr - diff - diff.exr - - - canonical0 - canonical0.exr - result0 - result0.exr - diff0 - diff0.exr - - - diff --git a/testSuite/geometry/volume/test.xml b/testSuite/geometry/volume/test.xml deleted file mode 100644 index a633bb6..0000000 --- a/testSuite/geometry/volume/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Render an OpenVdbGeometry from USD Volume primitive - - - - hd_render - -in ${shot_dir}/volume.usda -out ${result} ${args} -res ${res} -size 512 512 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent 0.5 --warnpercent 0.1 --hardfail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/geometry/volume/volume.usda b/testSuite/geometry/volume/volume.usda deleted file mode 100644 index ec877f0..0000000 --- a/testSuite/geometry/volume/volume.usda +++ /dev/null @@ -1,45 +0,0 @@ -#usda 1.0 -( - defaultPrim = "Volume" -) - -def Volume "Volume" -{ - rel field:density = - double3 xformOp:scale = (1, 1, 1) - double3 xformOp:translate = (0, 0, 0) - token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] - Vec3f[] extent = [(-24, -2.4, -18.6), (21.6, 42.8, 17.8)] - rel material:binding = - - def OpenVDBAsset "Field" - { - token fieldName = "density" - asset filePath = @/work/rd/raas/hydra/rats/data/bunny.vdb@ - } -} - -def Material "Material" -{ - color4f outputs:moonray:volume.connect = - def Shader "shader" - { - uniform token info:id = "VdbVolume" - color3f inputs:color_mult = (1, .8, .8) - color4f outputs:volume - } -} - -def Mesh "box" -{ - double3 xformOp:scale = (45.6, 45.2, 36.4) - double3 xformOp:translate = (-24, -2.4, -18.6) - token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] - Vec3f[] extent = [(0,0,0), (1,1,1)] - int[] faceVertexCounts = [4, 4, 4] - int[] faceVertexIndices = [0, 1, 2, 3, 0, 3, 4, 5, 0, 5, 6, 1] - float3[] points = [(0,0,0), (1,0,0), (1,1,0), (0,1,0), (0,1,1), (0,0,1), (1,0,1)] - color3f[] primvars:displayColor = [(1, 1, 0), (0, 1, 1), (1, 0, 1)] ( interpolation = "uniform" ) - uniform token subdivisionScheme = "none" -} - diff --git a/testSuite/light/cylinder_basic/scene.usd b/testSuite/light/cylinder_basic/scene.usd deleted file mode 100644 index 6a2fcb2..0000000 --- a/testSuite/light/cylinder_basic/scene.usd +++ /dev/null @@ -1,76 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (0.658163, 0.0116603, -0.752785, 0), - (-0.20786, 0.963831, -0.166803, 0), - (0.723613, 0.266257, 0.636782, 0), - (11.6274, 5.83104, 1.19332, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def "gronkle" ( payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@) -{ - matrix4d xformOp:transform:a = ( (0.03, 0, 0, 0), - (0, 0.03, 0, 0), - (0, 0, 0.03, 0), - (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a","xformOp:transform"] -} - - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def CylinderLight "cylinder" -{ - # uniform token moonray:class = "CylinderLight" - matrix4d xformOp:transform = ( ( 0.999573, -4.37114e-08, 0.0291956, 0), - (0.0291956, 0, -0.999573, 0), - (4.36928e-08, 1, 1.27618e-09, 0), - (0, 4, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - token moonray:visible_in_camera = "force on" - bool enableColorTemperature = true - bool inputs:enableColorTemperature = true - float colorTemperature = 6500 - float inputs:colorTemperature = 6500 - float intensity = 5 - float inputs:intensity = 5 - float radius = 0.3 - float inputs:radius = 0.3 - float length = 10 - float inputs:length = 10 -} diff --git a/testSuite/light/cylinder_basic/test.xml b/testSuite/light/cylinder_basic/test.xml deleted file mode 100644 index ecdb996..0000000 --- a/testSuite/light/cylinder_basic/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra version of cylinder_basic test : solid cylinder light - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 960 540 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .01 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/light/disk_basic/scene.usd b/testSuite/light/disk_basic/scene.usd deleted file mode 100644 index f5ef4fc..0000000 --- a/testSuite/light/disk_basic/scene.usd +++ /dev/null @@ -1,101 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (0.557022, 0, -0.830498, 0), - (0.0708238, 0.996357, 0.0475021, 0), - (0.827472, -0.0852787, 0.554993, 0), - (10.6483, 1.03694, -0.332209, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def "gronkle" ( payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@) -{ - matrix4d xformOp:transform:a = ( (0.0216271, 0, -0.020791, 0), - (0, 0.03, 0, 0), - (0.020791, 0, 0.0216271, 0), - (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a","xformOp:transform"] - rel material:binding = -} - - -def "floor" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def "wall" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_floor" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color = (1, 1, 1) - bool inputs:diffuse = true - float inputs:diffuse_factor = 1 - float inputs:directional_diffuse_roughness = 0.547723 - float inputs:specular_roughness = 0.316228 - } -} - -def Material "surfacing_gronkle" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color = (0.2, 0.2, 0.2) - bool inputs:diffuse = true - float inputs:diffuse_factor = 1 - color3f inputs:directional_diffuse_color = (1, 0.5, 0.5) - bool inputs:directional_diffuse = true - float inputs:directional_diffuse_factor = 0.4 - float inputs:directional_diffuse_roughness = 0.77459666924148 - color3f inputs:specular_color = (1, 1, 1) - bool inputs:specular = true - float inputs:specular_factor = 0.1 - float inputs:specular_roughness = 0.14142135623731 - } -} - -def DiskLight "disk" -{ - uniform token moonray:class = "DiskLight" - matrix4d xformOp:transform = ( (-0.0291956, 0, 0.999573, 0), - (0.999573, -4.37114e-08, 0.0291956, 0), - (4.36928e-08, 1, 1.27618e-09, 0), - (0, 4, -8, 1) ) - token moonray:visible_in_camera = "force on" - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1,1,1) - color3f inputs:color = (1,1,1) - float intensity = 1 - float inputs:intensity = 1 - float radius = 2 - float inputs:radius = 2 -} diff --git a/testSuite/light/disk_basic/test.xml b/testSuite/light/disk_basic/test.xml deleted file mode 100644 index 94b0b52..0000000 --- a/testSuite/light/disk_basic/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra version of disk_basic test : solid disk light - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 960 540 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .01 --hardfail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/light/env_basic/scene.usd b/testSuite/light/env_basic/scene.usd deleted file mode 100644 index 310863c..0000000 --- a/testSuite/light/env_basic/scene.usd +++ /dev/null @@ -1,70 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (0.927173, 0, 0.374633, 0), - (0.0972581, 0.965714, -0.240702, 0), - (-0.361788, 0.259609, 0.895384, 0), - (-2.05326, 2.95242, 0.348492, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def "gronkle" ( payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@) -{ - matrix4d xformOp:transform:a = ( (0.0216271, 0, -0.020791, 0), - (0, 0.03, 0, 0), - (0.020791, 0, 0.0216271, 0), - (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a","xformOp:transform"] -} - - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def DomeLight "dome" -{ - matrix4d xformOp:transform = ( (-0.459297, 0, 0.888282, 0), - (0.742928, 0.548173, 0.38414, 0), - (-0.486933, 0.836364, -0.251775, 0), - (-4.4944, 8.78556, -9.49043, 1) ) - token moonray:visible_in_camera = "force on" - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1, 1, 1) - color3f inputs:color = (1, 1, 1) - float intensity = 1 - float inputs:intensity = 1 - bool moonray:sample_upper_hemisphere_only = false -} diff --git a/testSuite/light/env_basic/test.xml b/testSuite/light/env_basic/test.xml deleted file mode 100644 index 6834744..0000000 --- a/testSuite/light/env_basic/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra version of env_basic test : solid env light - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 960 540 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .01 --hardfail 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/light/env_textured/scene.usd b/testSuite/light/env_textured/scene.usd deleted file mode 100644 index 05f1d9b..0000000 --- a/testSuite/light/env_textured/scene.usd +++ /dev/null @@ -1,41 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (0.927173, 0, 0.374633, 0), - (0.0972581, 0.965714, -0.240702, 0), - (-0.361788, 0.259609, 0.895384, 0), - (-2.05326, 2.95242, 0.348492, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def "gronkle" ( payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@) -{ - matrix4d xformOp:transform:a = ( (0.0216271, 0, -0.020791, 0), - (0, 0.03, 0, 0), - (0.020791, 0, 0.0216271, 0), - (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a","xformOp:transform"] -} - -def DomeLight "dome" -{ - matrix4d xformOp:transform = ( (-0.459297, 0, 0.888282, 0), - (0.742928, 0.548173, 0.38414, 0), - (-0.486933, 0.836364, -0.251775, 0), - (-4.4944, 8.78556, -9.49043, 1) ) - token moonray:visible_in_camera = "force on" - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1, 1, 1) - color3f inputs:color = (1, 1, 1) - float intensity = 1 - float inputs:intensity = 1 - asset texture:file = "/work/gshad/moonshine_test/rats_data/light/env_textured/env_maps/burning_man-med.exr" - asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/light/env_textured/env_maps/burning_man-med.exr" - bool moonray:sample_upper_hemisphere_only = false -} diff --git a/testSuite/light/env_textured/test.xml b/testSuite/light/env_textured/test.xml deleted file mode 100644 index d8627e1..0000000 --- a/testSuite/light/env_textured/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra version of env_textured test : textured env light - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 960 540 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent 2 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.005 - - - - diff --git a/testSuite/light/filter/barn_door/test.xml b/testSuite/light/filter/barn_door/test.xml deleted file mode 100644 index f333e69..0000000 --- a/testSuite/light/filter/barn_door/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of barn door light filter - - - - hd_render - -in ${shot_dir}/barn_door.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -set 'moonray:sceneVariable:pixel_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.015 --failpercent 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/light/filter/color_ramp/color_ramp.usd b/testSuite/light/filter/color_ramp/color_ramp.usd deleted file mode 100644 index d414a28..0000000 --- a/testSuite/light/filter/color_ramp/color_ramp.usd +++ /dev/null @@ -1,77 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 20, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} -def Mesh "floor" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Mesh "wall" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surface" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - } -} - -def MoonrayLightFilter "colorRamp" -{ - uniform token moonray:class = "ColorRampLightFilter" - color3f[] moonray:colors = [ (0, 0, 1), (1, 0, 0)] - float[] moonray:distances = [4.0, 8.0] - int[] moonray:interpolation_types = [0, 0] -} - -def DiskLight "spot" -{ - uniform token moonray:class = "SpotLight" - matrix4d xformOp:transform = ( (0, 0, 1, 0), - (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 9, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float inputs:intensity = 0.2 - float inputs:shaping:cone:angle = 45 - bool inputs:normalize = true - append rel light:filters = -} \ No newline at end of file diff --git a/testSuite/light/filter/color_ramp/test.xml b/testSuite/light/filter/color_ramp/test.xml deleted file mode 100644 index c206516..0000000 --- a/testSuite/light/filter/color_ramp/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of color_ramp light filter - - - - hd_render - -in ${shot_dir}/color_ramp.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -set 'moonray:sceneVariable:pixel_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.04 --failpercent 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/light/filter/combine/combine.usd b/testSuite/light/filter/combine/combine.usd deleted file mode 100644 index 192ddd5..0000000 --- a/testSuite/light/filter/combine/combine.usd +++ /dev/null @@ -1,108 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 20, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} -def Mesh "floor" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Mesh "wall" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surface" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - } -} - - -def MoonrayLightFilter "combine" -{ - uniform token moonray:class = "CombineLightFilter" - int moonray:mode = 0 - rel moonray:light_filters = [, ] -} - -def MoonrayLightFilter "rod1" -{ - uniform token moonray:class = "RodLightFilter" - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (2, 11, -6, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float moonray:depth = 5 - float moonray:height = 25 - float moonray:radius = 2 - float moonray:width = 4 - color3f moonray:color = (1,1,0) -} - -def MoonrayLightFilter "rod2" -{ - uniform token moonray:class = "RodLightFilter" - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (-2, 11, -6, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float moonray:depth = 5 - float moonray:height = 25 - float moonray:radius = 2 - float moonray:width = 4 - color3f moonray:color = (0,1,1) -} - - -def DiskLight "spot" -{ - uniform token moonray:class = "SpotLight" - matrix4d xformOp:transform = ( (0, 0, 1, 0), - (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 9, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float inputs:intensity = 0.2 - float inputs:shaping:cone:angle = 45 - bool inputs:normalize = true - rel light:filters = [] -} \ No newline at end of file diff --git a/testSuite/light/filter/combine/test.xml b/testSuite/light/filter/combine/test.xml deleted file mode 100644 index eabbf60..0000000 --- a/testSuite/light/filter/combine/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of combine light filter - - - - hd_render - -in ${shot_dir}/combine.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -set 'moonray:sceneVariable:pixel_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.015 --failpercent 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/light/filter/cookie/cookie.usd b/testSuite/light/filter/cookie/cookie.usd deleted file mode 100644 index 19c7343..0000000 --- a/testSuite/light/filter/cookie/cookie.usd +++ /dev/null @@ -1,90 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 20, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} -def Mesh "floor" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Mesh "wall" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surface" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - } -} - -def MoonrayLightFilter "cookie" -{ - uniform token moonray:lightFilter:shaderId = "CookieLightFilter" - uniform token moonray:class = "CookieLightFilter" - float3 inputs:moonray:texture_map.connect = - float3 outputs:moonray:lightFilter - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (3, 5, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float moonray:projector_focal = 50 - - def Shader "imagemap" - { - uniform token info:id = "ImageMap" - asset inputs:texture = @/work/gshad/moonshine_test/rats_data/light/filter/cookie/maps/dapple.tx@ - float3 outputs:out - } -} - -def DiskLight "spot" -{ - uniform token moonray:class = "SpotLight" - matrix4d xformOp:transform = ( (0, 0, 1, 0), - (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 9, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float inputs:intensity = 0.2 - float inputs:shaping:cone:angle = 45 - bool inputs:normalize = true - append rel light:filters = -} \ No newline at end of file diff --git a/testSuite/light/filter/cookie/test.xml b/testSuite/light/filter/cookie/test.xml deleted file mode 100644 index 017e8f0..0000000 --- a/testSuite/light/filter/cookie/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of cookie light filter - - - - hd_render - -in ${shot_dir}/cookie.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -set 'moonray:sceneVariable:pixel_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.015 --failpercent 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/light/filter/cookie_projector/cookie_projector.usd b/testSuite/light/filter/cookie_projector/cookie_projector.usd deleted file mode 100644 index a05de8a..0000000 --- a/testSuite/light/filter/cookie_projector/cookie_projector.usd +++ /dev/null @@ -1,96 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 20, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} -def Mesh "floor" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Mesh "wall" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surface" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - } -} - -def Camera "cookie_projector" { - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (2, 5, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 -} - -def MoonrayLightFilter "cookie" -{ - uniform token moonray:lightFilter:shaderId = "CookieLightFilter" - uniform token moonray:class = "CookieLightFilter" - float3 inputs:moonray:texture_map.connect = - float3 outputs:moonray:lightFilter - rel moonray:projector = - - def Shader "imagemap" - { - uniform token info:id = "ImageMap" - asset inputs:texture = @/work/gshad/moonshine_test/rats_data/light/filter/cookie/maps/dapple.tx@ - float3 outputs:out - } -} - -def DiskLight "spot" -{ - uniform token moonray:class = "SpotLight" - matrix4d xformOp:transform = ( (0, 0, 1, 0), - (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 9, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float inputs:intensity = 0.2 - float inputs:shaping:cone:angle = 45 - bool inputs:normalize = true - append rel light:filters = -} \ No newline at end of file diff --git a/testSuite/light/filter/cookie_projector/test.xml b/testSuite/light/filter/cookie_projector/test.xml deleted file mode 100644 index deb8f28..0000000 --- a/testSuite/light/filter/cookie_projector/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of cookie light filter with projector camera - - - - hd_render - -in ${shot_dir}/cookie_projector.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -set 'moonray:sceneVariable:pixel_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.015 --failpercent 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/light/filter/cookie_v2/cookie_v2.usd b/testSuite/light/filter/cookie_v2/cookie_v2.usd deleted file mode 100644 index ad3ad41..0000000 --- a/testSuite/light/filter/cookie_v2/cookie_v2.usd +++ /dev/null @@ -1,81 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 20, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} -def Mesh "floor" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Mesh "wall" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surface" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - } -} - -def MoonrayLightFilter "cookie_v2" -{ - uniform token moonray:class = "CookieLightFilter_v2" - asset moonray:texture = @/work/gshad/moonshine_test/rats_data/light/filter/cookie/maps/dapple.tx@ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (3, 5, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float moonray:projector_focal = 50 -} - -def DiskLight "spot" -{ - uniform token moonray:class = "SpotLight" - matrix4d xformOp:transform = ( (0, 0, 1, 0), - (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 9, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float inputs:intensity = 0.2 - float inputs:shaping:cone:angle = 45 - bool inputs:normalize = true - append rel light:filters = -} \ No newline at end of file diff --git a/testSuite/light/filter/cookie_v2/test.xml b/testSuite/light/filter/cookie_v2/test.xml deleted file mode 100644 index 173c0cf..0000000 --- a/testSuite/light/filter/cookie_v2/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of cookie_v2 light filter - - - - hd_render - -in ${shot_dir}/cookie_v2.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -set 'moonray:sceneVariable:pixel_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.015 --failpercent 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/light/filter/decay/decay.usd b/testSuite/light/filter/decay/decay.usd deleted file mode 100644 index 7ba7311..0000000 --- a/testSuite/light/filter/decay/decay.usd +++ /dev/null @@ -1,80 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 20, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} -def Mesh "floor" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Mesh "wall" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surface" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - } -} - -def MoonrayLightFilter "decay" -{ - uniform token moonray:class = "DecayLightFilter" - bool moonray:falloff_near = true - bool moonray:falloff_far = true - float moonray:near_start = 3.0 - float moonray:near_end = 5.0 - float moonray:far_start = 7.0 - float moonray:far_end = 9.0 -} - -def DiskLight "spot" -{ - uniform token moonray:class = "SpotLight" - matrix4d xformOp:transform = ( (0, 0, 1, 0), - (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 9, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float inputs:intensity = 0.2 - float inputs:shaping:cone:angle = 45 - bool inputs:normalize = true - append rel light:filters = -} \ No newline at end of file diff --git a/testSuite/light/filter/decay/test.xml b/testSuite/light/filter/decay/test.xml deleted file mode 100644 index 69e8fdd..0000000 --- a/testSuite/light/filter/decay/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of decay light filter - - - - hd_render - -in ${shot_dir}/decay.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -set 'moonray:sceneVariable:pixel_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.015 --failpercent 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/light/filter/intensity/intensity.usd b/testSuite/light/filter/intensity/intensity.usd deleted file mode 100644 index b691d6d..0000000 --- a/testSuite/light/filter/intensity/intensity.usd +++ /dev/null @@ -1,77 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 20, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} -def Mesh "floor" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Mesh "wall" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surface" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - } -} - -def MoonrayLightFilter "intensity" -{ - uniform token moonray:class = "IntensityLightFilter" - color3f moonray:color = (0.3, 0.8, 0.8) - float moonray:intensity = 10.0 - bool moonray:invert = true -} - -def DiskLight "spot" -{ - uniform token moonray:class = "SpotLight" - matrix4d xformOp:transform = ( (0, 0, 1, 0), - (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 9, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float inputs:intensity = 0.2 - float inputs:shaping:cone:angle = 45 - bool inputs:normalize = true - append rel light:filters = -} \ No newline at end of file diff --git a/testSuite/light/filter/intensity/test.xml b/testSuite/light/filter/intensity/test.xml deleted file mode 100644 index 1bb2a39..0000000 --- a/testSuite/light/filter/intensity/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of intensity light filter - - - - hd_render - -in ${shot_dir}/intensity.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -set 'moonray:sceneVariable:pixel_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.015 --failpercent 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/light/filter/rod/rod.usd b/testSuite/light/filter/rod/rod.usd deleted file mode 100644 index 3e3d28d..0000000 --- a/testSuite/light/filter/rod/rod.usd +++ /dev/null @@ -1,85 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 20, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} -def Mesh "floor" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Mesh "wall" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surface" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - } -} - -def MoonrayLightFilter "rod" -{ - uniform token moonray:class = "RodLightFilter" - matrix4d xformOp:transform = ( (0.89, 0.01, -0.44335140454101996, 0), - (0.09, 0.97, 0.19, 0), - (0.43, -0.21, 0.87, 0), - (8, 13, -6, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float moonray:depth = 10 - float moonray:height = 20 - float moonray:radius = 2 - float moonray:width = 10 - float moonray:edge = 2 - color3f moonray:color = (1,0,0.3) -} - -def DiskLight "spot" -{ - uniform token moonray:class = "SpotLight" - matrix4d xformOp:transform = ( (0, 0, 1, 0), - (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 9, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float inputs:intensity = 0.2 - float inputs:shaping:cone:angle = 45 - bool inputs:normalize = true - append rel light:filters = -} \ No newline at end of file diff --git a/testSuite/light/filter/rod/test.xml b/testSuite/light/filter/rod/test.xml deleted file mode 100644 index fbac1ed..0000000 --- a/testSuite/light/filter/rod/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of rod light filter - - - - hd_render - -in ${shot_dir}/rod.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -set 'moonray:sceneVariable:pixel_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.015 --failpercent 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/light/filter/vdb/test.xml b/testSuite/light/filter/vdb/test.xml deleted file mode 100644 index 29bb3d7..0000000 --- a/testSuite/light/filter/vdb/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of vdb light filter - - - - hd_render - -in ${shot_dir}/vdb.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -set 'moonray:sceneVariable:pixel_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.015 --failpercent 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/light/filter/vdb/vdb.usd b/testSuite/light/filter/vdb/vdb.usd deleted file mode 100644 index 81b106e..0000000 --- a/testSuite/light/filter/vdb/vdb.usd +++ /dev/null @@ -1,85 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 20, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} -def Mesh "floor" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Mesh "wall" -{ - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surface" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - } -} - -def MoonrayLightFilter "vdb" -{ - uniform token moonray:class = "VdbLightFilter" - double3 xformOp:scale = (0.02, 0.05, 0.01) - double3 xformOp:translate = (0, 1, -8) - token[] xformOpOrder = ["xformOp:translate", "xformOp:scale"] - asset moonray:vdb_map = @/work/gshad/moonshine_test/rats_data/light/filter/vdb/textures/torus.vdb@ - float[] moonray:density_remap_outputs = [ 0.0, 0.1, 0.2, 0.5, 1.0] - float[] moonray:density_remap_inputs = [ 0.0, 0.25, 0.5, 0.75, 1.0 ] - int[] moonray:density_remap_interpolation_types = [ 1, 1, 1, 1, 1 ] - bool moonray:density_rescale_enable = true - string moonray:density_grid_name = "density" - int moonray:vdb_interpolation_type = 2 - bool moonray:invert_density = true -} - -def DiskLight "spot" -{ - uniform token moonray:class = "SpotLight" - matrix4d xformOp:transform = ( (0, 0, 1, 0), - (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 9, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float inputs:intensity = 0.2 - float inputs:shaping:cone:angle = 45 - bool inputs:normalize = true - append rel light:filters = -} diff --git a/testSuite/light/light_linking/scene.usd b/testSuite/light/light_linking/scene.usd deleted file mode 100644 index fd09e2c..0000000 --- a/testSuite/light/light_linking/scene.usd +++ /dev/null @@ -1,63 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 16, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def Sphere "sphere1" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (-2, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def Sphere "sphere2" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def Sphere "sphere3" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (2, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - -def DomeLight "dome1" -{ - color3f color = (1, 0, 0) - color3f inputs:color = (1, 0, 0) - float intensity = 1 - float inputs:intensity = 1 - bool collection:lightLink:includeRoot = false - rel collection:lightLink:includes = [,] -} - -def DomeLight "dome2" -{ - color3f color = (0, 1, 0) - color3f inputs:color = (0, 1, 0) - float intensity = 1 - float inputs:intensity = 1 - bool collection:lightLink:includeRoot = false - rel collection:lightLink:includes = [,] -} - diff --git a/testSuite/light/light_linking/test.xml b/testSuite/light/light_linking/test.xml deleted file mode 100644 index 4f6f467..0000000 --- a/testSuite/light/light_linking/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of light linking for objects and subsets - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 960 540 -refine-level 3 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent 1 --hardfail 0.2 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/light/mesh_basic/scene.usd b/testSuite/light/mesh_basic/scene.usd deleted file mode 100644 index 88197fb..0000000 --- a/testSuite/light/mesh_basic/scene.usd +++ /dev/null @@ -1,69 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (0.658163, 0.0116603, -0.752785, 0), - (-0.20786, 0.963831, -0.166803, 0), - (0.723613, 0.266257, 0.636782, 0), - (11.6274, 5.83104, 1.19332, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - - -def "gronkle" ( payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@ ) -{ - matrix4d xformOp:transform:a = ( (0.03, 0, 0, 0), - (0, 0.03, 0, 0), - (0, 0, 0.03, 0), - (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a","xformOp:transform"] - token visibility = "invisible" -} - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def MoonrayMeshLight "geomlight" -{ - uniform token moonray:class = "MeshLight" - // this is the correct way to set the geometry - rel inputs:geometry = - // a workaround for the issue that (pre-0.20.11) - // render delegates cannot read "rel" properties - string moonray:geometry = "/gronkle/m_skin" - float intensity = 1 - float inputs:intensity = 1 - token moonray:visible_in_camera = "force on" -} diff --git a/testSuite/light/mesh_basic/test.xml b/testSuite/light/mesh_basic/test.xml deleted file mode 100644 index 6c18f6a..0000000 --- a/testSuite/light/mesh_basic/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra version of mesh_basic test : solid mesh light - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 960 540 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.006 --failpercent .08 --warnpercent .08 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/light/rect_basic/scene.usd b/testSuite/light/rect_basic/scene.usd deleted file mode 100644 index 87300f6..0000000 --- a/testSuite/light/rect_basic/scene.usd +++ /dev/null @@ -1,73 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( ( 0.804478, 0, 0.593982, 0), - ( -0.0198247, 0.999443, 0.0268502, 0), - ( -0.593652, -0.033376, 0.80403, 0), - ( -8.92273, 1.60227, 2.70822, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def "gronkle" ( payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@) -{ - matrix4d xformOp:transform:a = ( (0.0216271, 0, -0.020791, 0), - (0, 0.03, 0, 0), - (0.020791, 0, 0.0216271, 0), - (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a","xformOp:transform"] -} - - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def RectLight "rect" -{ - matrix4d xformOp:transform = ( (-0.0291956, 0, 0.999573, 0), - (0.999573, -4.37114e-08, 0.0291956, 0), - (4.36928e-08, 1, 1.27618e-09, 0), - (0, 4, -8, 1) ) - int moonray:visible_in_camera = 1 - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1,1,1) - color3f inputs:color = (1,1,1) - float intensity = 3 - float inputs:intensity = 3 - float width = 1 - float inputs:width = 1 - float height = 10 - float inputs:height = 10 -} diff --git a/testSuite/light/rect_basic/test.xml b/testSuite/light/rect_basic/test.xml deleted file mode 100644 index d6440ef..0000000 --- a/testSuite/light/rect_basic/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra version of rect_basic test : solid rect light - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 960 540 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .01 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/light/rect_textured/scene.usd b/testSuite/light/rect_textured/scene.usd deleted file mode 100644 index 4efd467..0000000 --- a/testSuite/light/rect_textured/scene.usd +++ /dev/null @@ -1,75 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( ( 0.804478, 0, 0.593982, 0), - ( -0.0198247, 0.999443, 0.0268502, 0), - ( -0.593652, -0.033376, 0.80403, 0), - ( -8.92273, 1.60227, 2.70822, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def "gronkle" ( payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@) -{ - matrix4d xformOp:transform:a = ( (0.0216271, 0, -0.020791, 0), - (0, 0.03, 0, 0), - (0.020791, 0, 0.0216271, 0), - (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a","xformOp:transform"] -} - - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def RectLight "rect" -{ - matrix4d xformOp:transform = ( (-0.0291956, 0, 0.999573, 0), - (0.999573, -4.37114e-08, 0.0291956, 0), - (4.36928e-08, 1, 1.27618e-09, 0), - (0, 4, -8, 1) ) - token moonray:visible_in_camera = "force on" - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1,1,1) - color3f inputs:color = (1,1,1) - float intensity = 5 - float inputs:intensity = 5 - float width = 1 - float inputs:width = 1 - float height = 10 - float inputs:height = 10 - asset texture:file = "/work/gshad/moonshine_test/rats_data/light/rect_textured/env_maps/burning_man-med.exr" - asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/light/rect_textured/env_maps/burning_man-med.exr" -} diff --git a/testSuite/light/rect_textured/test.xml b/testSuite/light/rect_textured/test.xml deleted file mode 100644 index 83d80da..0000000 --- a/testSuite/light/rect_textured/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra version of rect_textured test : textured rect light - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 960 540 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.005 --failpercent .01 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/light/shadow_linking/scene.usd b/testSuite/light/shadow_linking/scene.usd deleted file mode 100644 index a9eb220..0000000 --- a/testSuite/light/shadow_linking/scene.usd +++ /dev/null @@ -1,150 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (-1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, -1, 0), - (-50, 50, -145, 1) ) - - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 350; - float horizontalAperture = 240; - float verticalAperture = 240 -} - -def SphereLight "light1" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (-20, 60, 50, 1) ) - float exposure = 10 - float inputs:exposure = 10 - uniform token[] xformOpOrder = ["xformOp:transform"] - bool collection:shadowLink:includeRoot = false - rel collection:shadowLink:includes = [] - int moonray:visible_in_camera = 1 -} - -def SphereLight "light2" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (-80, 60, 50, 1) ) - float exposure = 10 - float inputs:exposure = 10 - uniform token[] xformOpOrder = ["xformOp:transform"] - bool collection:shadowLink:includeRoot = false - rel collection:shadowLink:includes = [] - int moonray:visible_in_camera = 1 -} - -def Mesh "back" -{ - matrix4d xformOp:transform = ( (0, -100, 0, 0), - (0, 0, -100, 0), - (100, 0, 0, 0), - (-50, 50, 100, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(0.6,0.55,0.4)] ( interpolation = "constant" ) -} - -def Mesh "bottom" -{ - matrix4d xformOp:transform = ( (100, 0, 0, 0), - (0, 100, 0, 0), - (0, 0, 100, 0), - (-50, 0, 50, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(0.6,0.55,0.4)] ( interpolation = "constant" ) -} - -def Mesh "left" -{ - matrix4d xformOp:transform = ( (0, 100, 0, 0), - (-100, 0, 0, 0), - (0, 0, 100, 0), - (0, 50, 50, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(0.7,0.1,0.08)] ( interpolation = "constant" ) -} - -def Mesh "right" -{ - matrix4d xformOp:transform = ( (0, -100, 0, 0), - (100, 0, 0, 0), - (0, 0, 100, 0), - (-100, 50, 50, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(0.2,0.7,0.2)] ( interpolation = "constant" ) -} - -def Mesh "top" -{ - matrix4d xformOp:transform = ( (-100, 0, 0, 0), - (0, -100, 0, 0), - (0, 0, 100, 0), - (-50, 100, 50, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(0.6,0.55,0.4)] ( interpolation = "constant" ) -} - -def Sphere "sphere1" -{ - matrix4d xformOp:transform = ( (-10, 0, 0, 0), - (0, -10, 0, 0), - (0, 0, 10, 0), - (-20, 10, 30, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f[] primvars:displayColor = [(1,0,0)] ( interpolation = "constant" ) -} - -def Sphere "sphere2" -{ - matrix4d xformOp:transform = ( (-14, 0, 0, 0), - (0, -14, 0, 0), - (0, 0, 14, 0), - (-45, 14, 50, 1)) - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f[] primvars:displayColor = [(0,1,0)] ( interpolation = "constant" ) -} - -def Sphere "sphere3" -{ - matrix4d xformOp:transform = ( (-10, 0, 0, 0), - (0, -10, 0, 0), - (0, 0, 10, 0), - (-80, 10, 50, 1)) - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f[] primvars:displayColor = [(0,0,1)] ( interpolation = "constant" ) -} - - diff --git a/testSuite/light/shadow_linking/test.xml b/testSuite/light/shadow_linking/test.xml deleted file mode 100644 index 442c1cf..0000000 --- a/testSuite/light/shadow_linking/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra test of shadow linking - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 512 512 -refine-level 3 -set 'moonray:sceneVariable:pixel_samples' 2 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent 0.1 --hardfail 0.2 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.1 - - - - diff --git a/testSuite/light/sphere_basic/scene.usd b/testSuite/light/sphere_basic/scene.usd deleted file mode 100644 index 0ebca42..0000000 --- a/testSuite/light/sphere_basic/scene.usd +++ /dev/null @@ -1,71 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (-0.72649, 0, -0.687176, 0), - (-0.0649215, 0.995527, 0.0686357, 0), - (0.684103, 0.0944757, -0.723241, 0), - (0.635976, 1.9145, -9.51043, 1 ) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def "gronkle" ( payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@) -{ - matrix4d xformOp:transform:a = ( (0.0216271, 0, -0.020791, 0), - (0, 0.03, 0, 0), - (0.020791, 0, 0.0216271, 0), - (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a","xformOp:transform"] -} - - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def SphereLight "sphere" -{ - matrix4d xformOp:transform = ( (1, 0, -0, 0), - (0, 1, 0, 0), - (0, -0, 1, 0), - (-1, 1.8, -8, 1) ) - token moonray:visible_in_camera = "force on" - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1, 0.9, 0.6) - color3f inputs:color = (1, 0.9, 0.6) - float intensity = 3 - float inputs:intensity = 3 - float radius = 0.3 - float inputs:radius = 0.3 -} diff --git a/testSuite/light/sphere_basic/test.xml b/testSuite/light/sphere_basic/test.xml deleted file mode 100644 index efdfc59..0000000 --- a/testSuite/light/sphere_basic/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra version of sphere_basic test : solid sphere light - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 960 540 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .01 --hardfail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/light/sphere_delta/delta.usd b/testSuite/light/sphere_delta/delta.usd deleted file mode 100644 index dd5ffc2..0000000 --- a/testSuite/light/sphere_delta/delta.usd +++ /dev/null @@ -1,9 +0,0 @@ -#usda 1.0 - -over "sphere" -{ - color3f color = (0.1, 0.4, 1.0) - color3f inputs:color = (0.1, 0.4, 1.0) - float radius = 0.5 - float inputs:radius = 0.5 -} diff --git a/testSuite/light/sphere_delta/scene.usd b/testSuite/light/sphere_delta/scene.usd deleted file mode 100644 index fc01298..0000000 --- a/testSuite/light/sphere_delta/scene.usd +++ /dev/null @@ -1,100 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (-0.72649, 0, -0.687176, 0), - (-0.0649215, 0.995527, 0.0686357, 0), - (0.684103, 0.0944757, -0.723241, 0), - (0.635976, 1.9145, -9.51043, 1 ) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def "gronkle" ( payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@ ) -{ - matrix4d xformOp:transform:a = ( (0.0216271, 0, -0.020791, 0), - (0, 0.03, 0, 0), - (0.020791, 0, 0.0216271, 0), - (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a","xformOp:transform"] - rel material:binding = -} - - -def "floor" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def "wall" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_floor" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color = (1, 1, 1) - bool inputs:diffuse = true - float inputs:diffuse_factor = 1 - float inputs:directional_diffuse_roughness = 0.547723 - float inputs:specular_roughness = 0.316228 - } -} - -def Material "surfacing_gronkle" -{ - color4f outputs:moonray:surface.connect = - - def Shader "baseMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color = (0.2, 0.2, 0.2) - bool inputs:diffuse = true - float inputs:diffuse_factor = 1 - color3f inputs:directional_diffuse_color = (1, 0.5, 0.5) - bool inputs:directional_diffuse = true - float inputs:directional_diffuse_factor = 0.4 - float inputs:directional_diffuse_roughness = 0.77459666924148 - color3f inputs:specular_color = (1, 1, 1) - bool inputs:specular = true - float inputs:specular_factor = 0.1 - float inputs:specular_roughness = 0.14142135623731 - } -} - -def SphereLight "sphere" -{ - matrix4d xformOp:transform = ( (1, 0, -0, 0), - (0, 1, 0, 0), - (0, -0, 1, 0), - (-1, 1.8, -8, 1) ) - token moonray:visible_in_camera = "force on" - uniform token[] xformOpOrder = ["xformOp:transform"] - color3f color = (1, 0.9, 0.6) - color3f inputs:color = (1, 0.9, 0.6) - float intensity = 3 - float inputs:intensity = 3 - float radius = 0.3 - float inputs:radius = 0.3 -} diff --git a/testSuite/light/sphere_delta/test.xml b/testSuite/light/sphere_delta/test.xml deleted file mode 100644 index 773860f..0000000 --- a/testSuite/light/sphere_delta/test.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - Applies a delta to light/sphere_basic - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -camera camera -size 960 540 -set executionMode vectorized -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 -delta_in ${shot_dir}/delta.usd -delta_out ${result0} -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent 0.01 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result0} ${shot_tmp_dir}/${canonical0} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent 0.01 -warnpercent 0.01 --hardfail .02 --diff --absdiff -o ${shot_tmp_dir}/${diff0} - - - - - - canonical - canonical.exr - result - result.exr - diff - diff.exr - - - canonical0 - canonical0.exr - result0 - result0.exr - diff0 - diff0.exr - - - diff --git a/testSuite/light/spot_basic/scene.usd b/testSuite/light/spot_basic/scene.usd deleted file mode 100644 index 23ff7bd..0000000 --- a/testSuite/light/spot_basic/scene.usd +++ /dev/null @@ -1,79 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 0.999256, -0.0385791, 0), - (0, 0.0385791, 0.999256, 0), - (0, 4.76459, 18.7481, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (0.01, 10000) -} - -def "gronkle" ( payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@) -{ - matrix4d xformOp:transform:a = ( (0.0216271, 0, -0.020791, 0), - (0, 0.03, 0, 0), - (0.020791, 0, 0.0216271, 0), - (0, 0, -7, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a","xformOp:transform"] -} - - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def DiskLight "spot" -{ -# uniform token moonray:class = "SpotLight" - matrix4d xformOp:transform = ( (-0.0291956, 0, 0.999573, 0), - (0.999573, -4.37114e-08, 0.0291956, 0), - (4.36928e-08, 1, 1.27618e-09, 0), - (0, 9, -8, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - int moonray:visible_in_camera = 1 - color3f color = (1,1,1) - color3f inputs:color = (1,1,1) - float intensity = 10 - float inputs:intensity = 10 - float radius = 1.4 - float inputs:radius = 1.4 - float shaping:cone:angle = 30 - float inputs:shaping:cone:angle = 30 - float shaping:cone:softness = 1 - float inputs:shaping:cone:softness = 1 -# float moonray:outer_cone_angle = 60 -# float moonray:inner_cone_angle = 0 - int moonray:angle_falloff_type = 3 -} diff --git a/testSuite/light/spot_basic/test.xml b/testSuite/light/spot_basic/test.xml deleted file mode 100644 index 9323863..0000000 --- a/testSuite/light/spot_basic/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra version of spot_basic test : spot light - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 960 540 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .01 --hardfail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/light/sun_basic/scene.usd b/testSuite/light/sun_basic/scene.usd deleted file mode 100644 index 156f394..0000000 --- a/testSuite/light/sun_basic/scene.usd +++ /dev/null @@ -1,75 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (0.97038, 0, 0.241585, 0), - (0.0982038, 0.913652, -0.394457, 0), - (-0.220725, 0.406498, 0.886589, 0), - (-2.29199, 5.33596, 9.42018, 1) ) - - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 300; - float horizontalAperture = 240; - float verticalAperture = 135; - float2 clippingRange = (0.01, 10000) -} - - -def "gronkle" ( payload = @/work/rd/raas/hydra/rats/data/gronkle.usdc@) -{ - matrix4d xformOp:transform:a = ( (0.0216271, 0, -0.020791, 0), - (0, 0.03, 0, 0), - (0.020791, 0, 0.0216271, 0), - (0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:a","xformOp:transform"] -} - - -def Mesh "floor" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - ( 0, 20, 0, 0), - ( 0, 0, 20, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def Mesh "wall" -{ - matrix4d xformOp:transform = ( (20, 0, 0, 0), - (0, 0, 1, 0), - (0, -10, 0, 0), - (0, 5, -10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float3[] extent = [(-0.5, 0, -0.5), (0.5, 0, 0.5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [0, 1, 3, 2] - point3f[] points = [(-0.5, 0, 0.5), (0.5, 0, 0.5), (-0.5, 0, -0.5), (0.5, 0, -0.5)] - float2[] primvars:uv = [(0, 0), (1, 0), (1, 1), (0, 1)] ( interpolation = "faceVarying" ) - color3f[] primvars:displayColor = [(1, 1, 1)] ( interpolation = "uniform" ) -} - -def DistantLight "sun" -{ - matrix4d xformOp:transform = ( (0.786774, 0.019432, -0.616936, 0), - (-0.525164, 0.546265, -0.652531, 0), - (0.324331, 0.837387, 0.439992, 0), - (13.7238, 7, 2.81431, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - token moonray:visible_in_camera = "force on" - color3f color = (0.748, 0.748, 0.678) - color3f inputs:color = (0.748, 0.748, 0.678) - float intensity = 1 # default is 50000.0 - float inputs:intensity = 1 - float exposure = 9 - float inputs:exposure = 9 - float angle = 5 # default is 0.53 - float inputs:angle = 5 -} diff --git a/testSuite/light/sun_basic/test.xml b/testSuite/light/sun_basic/test.xml deleted file mode 100644 index c89c180..0000000 --- a/testSuite/light/sun_basic/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra version of sun_basic test : distant light - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 960 540 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:max_depth' 0 -set doubleSided 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .01 --hardfail 0.1 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/map/udim/scene.usd b/testSuite/map/udim/scene.usd deleted file mode 100644 index 146f309..0000000 --- a/testSuite/map/udim/scene.usd +++ /dev/null @@ -1,105 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 0, 8.75, 1) ) - - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 500; - float horizontalAperture = 240; - float verticalAperture = 240 - float2 clippingRange = (1, 10000) -} - -def RectLight "key" -{ - matrix4d xformOp:transform = ( (0.98480775301220802, 0, 0.17364817766693033, 0), - (0.030153689607045803, 0.98480775301220802, -0.17101007166283433, 0), - (-0.17101007166283433, 0.17364817766693033, 0.9698463103929541, 0), - (-17.101007166283434, 17.364817766693033, 96.984631039295408, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float intensity = 12 - float inputs:intensity = 12 - float width = 50 - float inputs:width = 50 - float height = 50 - float inputs:height = 50 - bool normalize = true - bool inputs:normalize = true -} - -def "plane1" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - matrix4d xformOp:transform = ( (2, 0, 0, 0), - (0, 0, 1, 0), - (0, 2, 0, 0), - (-1, 1, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - over "_" { - float2[] primvars:uv = [(0, 4), (4, 4), (4, 0), (0, 0)] - } - rel material:binding = -} - -def "plane2" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz_unit.usd@ ) -{ - matrix4d xformOp:transform = ( (2, 0, 0, 0), - (0, 0, 1, 0), - (0, 2, 0, 0), - (1, -1, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - over "_" { - float2[] primvars:uv = [(0, 4), (4, 4), (4, 0), (0, 0)] - } - rel material:binding = -} - -def Material "surfacing_plane1" -{ - color4f outputs:moonray:surface.connect = - - def Shader "planeMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color.connect = <../planeMap.outputs:out> - float inputs:specular_factor = 0.02 - float inputs:specular_roughness = 0.54772255750517 - float inputs:directional_diffuse_roughness = 0.547723 - } - - def Shader "planeMap" - { - uniform token info:id = "ImageMap" - color3f outputs:out - asset inputs:texture = "/work/gshad/moonshine_test/rats_data/map/udim/udim/rgb_checker_black_.exr" - bool inputs:wrap_around = false - } -} - -def Material "surfacing_plane2" -{ - color4f outputs:moonray:surface.connect = - - def Shader "planeMtl" - { - uniform token info:id = "BaseMaterial" - color4f outputs:surface - color3f inputs:diffuse_color.connect = <../planeMap.outputs:out> - float inputs:specular_factor = 0.02 - float inputs:specular_roughness = 0.54772255750517 - float inputs:directional_diffuse_roughness = 0.547723 - } - - def Shader "planeMap" - { - uniform token info:id = "ImageMap" - color3f outputs:out - asset inputs:texture = "/work/gshad/moonshine_test/rats_data/map/udim/udim/rgb_checker_black_udim.exr" - bool inputs:wrap_around = false - } -} diff --git a/testSuite/map/udim/test.xml b/testSuite/map/udim/test.xml deleted file mode 100644 index faeb9eb..0000000 --- a/testSuite/map/udim/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Hydra version of udim map test - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 1000 1000 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:light_samples' 1 -set 'moonray:sceneVariable:bsdf_samples' 1 -set 'moonray:sceneVariable:max_depth' 0 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent .01 --hardfail 0.02 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/material/dwabase/basic/scene.usd b/testSuite/material/dwabase/basic/scene.usd deleted file mode 100644 index 78491e7..0000000 --- a/testSuite/material/dwabase/basic/scene.usd +++ /dev/null @@ -1,112 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 0.87462, -0.48481, 0), - (0, 0.48481, 0.87462, 0), - (0, 3.18164, 3.93579, 1) ) - - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 350; - float horizontalAperture = 240; - float verticalAperture = 134 - float2 clippingRange = (1, 10000) -} - -def DomeLight "env" -{ - float intensity = 0.8 - float inputs:intensity = 0.8 - asset texture:file = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/med/gld_dusk_GI_HS_PF_hdr.exr" - asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/med/gld_dusk_GI_HS_PF_hdr.exr" -} - -def RectLight "key" -{ - matrix4d xformOp:transform = ( (0.5, 0, 0.866025, 0), - (0.75, 0.5, -0.433013, 0), - (-0.433013, 0.866025, 0.25, 0), - (-43.3013, 86.6025, 25, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float intensity = 12 - float inputs:intensity = 12 - color3f color = (0.855, 0.77, 0.535) - color3f inputs:color = (0.855, 0.77, 0.535) - float width = 50 - float inputs:width = 50 - float height = 50 - float inputs:height = 50 - bool normalize = true - bool inputs:normalize = true -} - -def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ ) -{ - matrix4d xformOp:transform = ( (10, 0, 0, 0), - ( 0, 1, 0, 0), - ( 0, 0, 10, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_plane" -{ - color4f outputs:moonray:surface.connect = - - def Shader "planeMtl" - { - uniform token info:id = "DwaBaseMaterial" - color4f outputs:surface - color3f inputs:albedo.connect = <../planeMap.outputs:out> - float inputs:specular = 0 - float inputs:roughness = 0 - } - - def Shader "planeMap" - { - uniform token info:id = "ImageMap" - color3f outputs:out - asset inputs:texture = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/misc/rgb_checker.exr" - float2 inputs:scale = (10,10) - float2 inputs:offset = (-5,-5) - bool inputs:wrap_around = true - } -} - -def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ ) -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 1, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_geom" -{ - color4f outputs:moonray:surface.connect = - - def Shader "geomMtl" - { - uniform token info:id = "DwaBaseMaterial" - color4f outputs:surface - color3f inputs:albedo = (0.319, 0.06, 0.0) - float inputs:clearcoat = 0.3 - bool inputs:show_clearcoat = false - float inputs:metallic = 0.1 - color3f inputs:metallic_color = (0.5, 0.4, 0.3) - color3f inputs:metallic_edge_color = (0.5, 0.4, 0.3) - float inputs:roughness = 0.1 - float inputs:transmission = 0.5 - bool inputs:show_transmission = true - float inputs:iridescence = 0.3 - bool inputs:show_emission = true - color3f inputs:emission = (0.05, 0.0, 0.0) - float inputs:scattering_radius = 0.5 - color3f inputs:scattering_color = (1.0, 0.02, 0.02) - } -} \ No newline at end of file diff --git a/testSuite/material/dwabase/basic/test.xml b/testSuite/material/dwabase/basic/test.xml deleted file mode 100644 index c47e0df..0000000 --- a/testSuite/material/dwabase/basic/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra version of basic dwabase material test - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 600 500 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:light_samples' 2 -set 'moonray:sceneVariable:bsdf_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.2 --failpercent 1 --warnpercent 0.8 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.1 - - - - diff --git a/testSuite/material/dwabase/defaults/scene.usd b/testSuite/material/dwabase/defaults/scene.usd deleted file mode 100644 index 2ad4a52..0000000 --- a/testSuite/material/dwabase/defaults/scene.usd +++ /dev/null @@ -1,98 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 0.87462, -0.48481, 0), - (0, 0.48481, 0.87462, 0), - (0, 3.18164, 3.93579, 1) ) - - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 350; - float horizontalAperture = 240; - float verticalAperture = 134 - float2 clippingRange = (1, 10000) -} - -def DomeLight "env" -{ - float intensity = 0.8 - float inputs:intensity = 0.8 - asset texture:file = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/med/gld_dusk_GI_HS_PF_hdr.exr" - asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/med/gld_dusk_GI_HS_PF_hdr.exr" -} - -def RectLight "key" -{ - matrix4d xformOp:transform = ( (0.5, 0, 0.866025, 0), - (0.75, 0.5, -0.433013, 0), - (-0.433013, 0.866025, 0.25, 0), - (-43.3013, 86.6025, 25, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float intensity = 12 - float inputs:intensity = 12 - color3f color = (0.855, 0.77, 0.535) - color3f inputs:color = (0.855, 0.77, 0.535) - float width = 50 - float inputs:width = 50 - float height = 50 - float inputs:height = 50 - bool normalize = true - bool inputs:normalize = true -} - -def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ ) -{ - matrix4d xformOp:transform = ( (10, 0, 0, 0), - ( 0, 1, 0, 0), - ( 0, 0, 10, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_plane" -{ - color4f outputs:moonray:surface.connect = - - def Shader "planeMtl" - { - uniform token info:id = "DwaBaseMaterial" - color4f outputs:surface - color3f inputs:albedo.connect = <../planeMap.outputs:out> - float inputs:specular = 0 - float inputs:roughness = 0 - } - - def Shader "planeMap" - { - uniform token info:id = "ImageMap" - color3f outputs:out - asset inputs:texture = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/misc/rgb_checker.exr" - float2 inputs:scale = (10,10) - float2 inputs:offset = (-5,-5) - bool inputs:wrap_around = true - } -} - -def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ ) -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 1, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_geom" -{ - color4f outputs:moonray:surface.connect = - - def Shader "geomMtl" - { - uniform token info:id = "DwaBaseMaterial" - color4f outputs:surface - } -} \ No newline at end of file diff --git a/testSuite/material/dwabase/defaults/test.xml b/testSuite/material/dwabase/defaults/test.xml deleted file mode 100644 index a6adafd..0000000 --- a/testSuite/material/dwabase/defaults/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra version of dwabase defaults material test - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 600 500 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:light_samples' 2 -set 'moonray:sceneVariable:bsdf_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.04 --failpercent 0.2 --warnpercent 0.1 --hardfail 0.25 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/material/dwabase/delta/delta.usd b/testSuite/material/dwabase/delta/delta.usd deleted file mode 100644 index 43bf5d7..0000000 --- a/testSuite/material/dwabase/delta/delta.usd +++ /dev/null @@ -1,9 +0,0 @@ -#usda 1.0 - -over "surfacing_geom" -{ - over "geomMtl" - { - color3f inputs:albedo = (0.0, 0.0, 1.0) - } -} diff --git a/testSuite/material/dwabase/delta/scene.usd b/testSuite/material/dwabase/delta/scene.usd deleted file mode 100644 index 78491e7..0000000 --- a/testSuite/material/dwabase/delta/scene.usd +++ /dev/null @@ -1,112 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 0.87462, -0.48481, 0), - (0, 0.48481, 0.87462, 0), - (0, 3.18164, 3.93579, 1) ) - - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 350; - float horizontalAperture = 240; - float verticalAperture = 134 - float2 clippingRange = (1, 10000) -} - -def DomeLight "env" -{ - float intensity = 0.8 - float inputs:intensity = 0.8 - asset texture:file = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/med/gld_dusk_GI_HS_PF_hdr.exr" - asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/med/gld_dusk_GI_HS_PF_hdr.exr" -} - -def RectLight "key" -{ - matrix4d xformOp:transform = ( (0.5, 0, 0.866025, 0), - (0.75, 0.5, -0.433013, 0), - (-0.433013, 0.866025, 0.25, 0), - (-43.3013, 86.6025, 25, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float intensity = 12 - float inputs:intensity = 12 - color3f color = (0.855, 0.77, 0.535) - color3f inputs:color = (0.855, 0.77, 0.535) - float width = 50 - float inputs:width = 50 - float height = 50 - float inputs:height = 50 - bool normalize = true - bool inputs:normalize = true -} - -def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ ) -{ - matrix4d xformOp:transform = ( (10, 0, 0, 0), - ( 0, 1, 0, 0), - ( 0, 0, 10, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_plane" -{ - color4f outputs:moonray:surface.connect = - - def Shader "planeMtl" - { - uniform token info:id = "DwaBaseMaterial" - color4f outputs:surface - color3f inputs:albedo.connect = <../planeMap.outputs:out> - float inputs:specular = 0 - float inputs:roughness = 0 - } - - def Shader "planeMap" - { - uniform token info:id = "ImageMap" - color3f outputs:out - asset inputs:texture = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/misc/rgb_checker.exr" - float2 inputs:scale = (10,10) - float2 inputs:offset = (-5,-5) - bool inputs:wrap_around = true - } -} - -def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ ) -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 1, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_geom" -{ - color4f outputs:moonray:surface.connect = - - def Shader "geomMtl" - { - uniform token info:id = "DwaBaseMaterial" - color4f outputs:surface - color3f inputs:albedo = (0.319, 0.06, 0.0) - float inputs:clearcoat = 0.3 - bool inputs:show_clearcoat = false - float inputs:metallic = 0.1 - color3f inputs:metallic_color = (0.5, 0.4, 0.3) - color3f inputs:metallic_edge_color = (0.5, 0.4, 0.3) - float inputs:roughness = 0.1 - float inputs:transmission = 0.5 - bool inputs:show_transmission = true - float inputs:iridescence = 0.3 - bool inputs:show_emission = true - color3f inputs:emission = (0.05, 0.0, 0.0) - float inputs:scattering_radius = 0.5 - color3f inputs:scattering_color = (1.0, 0.02, 0.02) - } -} \ No newline at end of file diff --git a/testSuite/material/dwabase/delta/test.xml b/testSuite/material/dwabase/delta/test.xml deleted file mode 100644 index 73af947..0000000 --- a/testSuite/material/dwabase/delta/test.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - Applies a delta to dwabase/basic - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -camera camera -size 600 500 -set executionMode vectorized -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:light_samples' 2 -set 'moonray:sceneVariable:bsdf_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 -delta_in ${shot_dir}/delta.usd -delta_out ${result0} - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.2 --failpercent 2 --warnpercent 2 --hardfail .25 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result0} ${shot_tmp_dir}/${canonical0} -a --warn ${error_threshold} --fail 0.2 --failpercent 2 --warnpercent 2 --hardfail .25 --diff --absdiff -o ${shot_tmp_dir}/${diff0} - - - - - error_threshold - 0.01 - - - - - - canonical - canonical.exr - result - result.exr - diff - diff.exr - - - canonical0 - canonical0.exr - result0 - result0.exr - diff0 - diff0.exr - - - diff --git a/testSuite/material/dwabase/normal/scene.usd b/testSuite/material/dwabase/normal/scene.usd deleted file mode 100644 index 98e6540..0000000 --- a/testSuite/material/dwabase/normal/scene.usd +++ /dev/null @@ -1,128 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 0.86602540378443871, -0.5, 0), - (0, 0.5, 0.86602540378443871, 0), - (0, 7.6495190528383281, 11.749355652982143, 1)) - uniform token[] xformOpOrder = ["xformOp:transform"] - - // the following attributes are multiplied by 10 relative to rdl2: - // horizontalAperture, verticalAperture, - // horizontalApertureOffset, verticalApertureOffset, - // focalLength - float focalLength = 1000 - float horizontalAperture = 240 - float verticalAperture = 134 - float2 clippingRange = (1,10000) -} - -def DomeLight "env" -{ - float intensity = 0.8 - float inputs:intensity = 0.8 - asset texture:file = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/med/gld_dusk_GI_HS_PF_hdr.exr" - asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/med/gld_dusk_GI_HS_PF_hdr.exr" -} - -def RectLight "key" -{ - matrix4d xformOp:transform = ( (0.5, 0, 0.866025, 0), - (0.75, 0.5, -0.433013, 0), - (-0.433013, 0.866025, 0.25, 0), - (-43.3013, 86.6025, 25, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float intensity = 12 - float inputs:intensity = 12 - color3f color = (0.855, 0.77, 0.535) - color3f inputs:color = (0.855, 0.77, 0.535) - float width = 50 - float inputs:width = 50 - float height = 50 - float inputs:height = 50 - bool normalize = true - bool inputs:normalize = true -} - -def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ ) -{ - matrix4d xformOp:transform = ( (18, 0, 0, 0), - ( 0, 1, 0, 0), - ( 0, 0, 10, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_plane" -{ - color4f outputs:moonray:surface.connect = - - def Shader "planeMtl" - { - uniform token info:id = "DwaBaseMaterial" - color4f outputs:surface - color3f inputs:albedo.connect = <../planeMap.outputs:out> - float inputs:specular = 0 - float inputs:roughness = 0 - } - - def Shader "planeMap" - { - uniform token info:id = "ImageMap" - color3f outputs:out - asset inputs:texture = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/misc/rgb_checker.exr" - float2 inputs:scale = (7,4) - float2 inputs:offset = (0,0.25) - bool inputs:wrap_around = true - } -} - -def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ ) -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 1, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_geom" -{ - color4f outputs:moonray:surface.connect = - - def Shader "geomMtl" - { - uniform token info:id = "DwaBaseMaterial" - color4f outputs:surface - color3f inputs:albedo.connect = <../albedoOp.outputs:out> - float inputs:roughness = 0.25 - float3 inputs:input_normal.connect = <../normalMap.outputs:out> - } - - def Shader "albedoOp" - { - uniform token info:id = "OpMap" - float3 outputs:out - token inputs:operation = "multiply" - float3 inputs:op1.connect = <../albedoMap.outputs:out> - float3 inputs:op2 = (0.5,0.5,0.5) - } - - def Shader "albedoMap" - { - uniform token info:id = "ImageMap" - float3 outputs:out - asset inputs:texture = "/work/gshad/moonshine_test/rats_data/material/dwabase/normal/textures/wood_planks_albedo.tx" - } - - def Shader "normalMap" - { - uniform token info:id = "ImageNormalMap" - float3 outputs:out - asset inputs:tangent_space_normal_texture = "/work/gshad/moonshine_test/rats_data/material/dwabase/normal/textures/wood_planks_nml.tx" - } - -} \ No newline at end of file diff --git a/testSuite/material/dwabase/normal/test.xml b/testSuite/material/dwabase/normal/test.xml deleted file mode 100644 index 1b8bd1d..0000000 --- a/testSuite/material/dwabase/normal/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra version of dwabase defaults material test - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 600 500 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:light_samples' 2 -set 'moonray:sceneVariable:bsdf_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --failpercent 2 --warnpercent 1 --hardfail 0.4 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.03 - - - - diff --git a/testSuite/material/dwametal/defaults/scene.usd b/testSuite/material/dwametal/defaults/scene.usd deleted file mode 100644 index 1ef706f..0000000 --- a/testSuite/material/dwametal/defaults/scene.usd +++ /dev/null @@ -1,98 +0,0 @@ -#usda 1.0 - -def Camera "camera" -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 0.87462, -0.48481, 0), - (0, 0.48481, 0.87462, 0), - (0, 3.18164, 3.93579, 1) ) - - uniform token[] xformOpOrder = ["xformOp:transform"] - - float focalLength = 350; - float horizontalAperture = 240; - float verticalAperture = 134 - float2 clippingRange = (1, 10000) -} - -def DomeLight "env" -{ - float intensity = 0.8 - float inputs:intensity = 0.8 - asset texture:file = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/med/gld_dusk_GI_HS_PF_hdr.exr" - asset inputs:texture:file = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/med/gld_dusk_GI_HS_PF_hdr.exr" -} - -def RectLight "key" -{ - matrix4d xformOp:transform = ( (0.5, 0, 0.866025, 0), - (0.75, 0.5, -0.433013, 0), - (-0.433013, 0.866025, 0.25, 0), - (-43.3013, 86.6025, 25, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - float intensity = 16 - float inputs:intensity = 16 - color3f color = (0.855, 0.77, 0.535) - color3f inputs:color = (0.855, 0.77, 0.535) - float width = 50 - float inputs:width = 50 - float height = 50 - float inputs:height = 50 - bool normalize = true - bool inputs:normalize = true -} - -def "plane" ( payload = @/work/rd/raas/hydra/rats/data/plane_xz.usda@ ) -{ - matrix4d xformOp:transform = ( (10, 0, 0, 0), - ( 0, 1, 0, 0), - ( 0, 0, 10, 0), - ( 0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_plane" -{ - color4f outputs:moonray:surface.connect = - - def Shader "planeMtl" - { - uniform token info:id = "DwaBaseMaterial" - color4f outputs:surface - color3f inputs:albedo.connect = <../planeMap.outputs:out> - float inputs:specular = 0 - float inputs:roughness = 0 - } - - def Shader "planeMap" - { - uniform token info:id = "ImageMap" - color3f outputs:out - asset inputs:texture = "/work/gshad/moonshine_test/rats_data/material/dwametal/defaults/misc/rgb_checker.exr" - float2 inputs:scale = (10,10) - float2 inputs:offset = (-5,-5) - bool inputs:wrap_around = true - } -} - -def "geom" ( payload = @/work/rd/raas/hydra/rats/data/sphere.usdc@ ) -{ - matrix4d xformOp:transform = ( (1, 0, 0, 0), - (0, 1, 0, 0), - (0, 0, 1, 0), - (0, 1, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = -} - -def Material "surfacing_geom" -{ - color4f outputs:moonray:surface.connect = - - def Shader "geomMtl" - { - uniform token info:id = "DwaMetalMaterial" - color4f outputs:surface - } -} \ No newline at end of file diff --git a/testSuite/material/dwametal/defaults/test.xml b/testSuite/material/dwametal/defaults/test.xml deleted file mode 100644 index 1275698..0000000 --- a/testSuite/material/dwametal/defaults/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Hydra version of dwametal/defaults test - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -renderer Moonray -camera camera -size 600 500 -set 'moonray:sceneVariable:pixel_samples' 2 -set 'moonray:sceneVariable:light_samples' 2 -set 'moonray:sceneVariable:bsdf_samples' 3 -set 'moonray:sceneVariable:max_depth' 3 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail 0.08 --failpercent 2 --warnpercent 1 --hardfail 0.3 --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/motion_blur/camera/scene.usd b/testSuite/motion_blur/camera/scene.usd deleted file mode 100644 index 14a5f41..0000000 --- a/testSuite/motion_blur/camera/scene.usd +++ /dev/null @@ -1,92 +0,0 @@ -#usda 1.0 -( - defaultPrim = "grid" - endTimeCode = 6 - framesPerSecond = 24 - metersPerUnit = 1 - startTimeCode = 4 - timeCodesPerSecond = 24 - upAxis = "Y" -) - -def Xform "grid" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Mesh "mesh_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - float3[] extent = [(-0.5, -0.5, 0), (0.5, 0.5, 0)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [2, 3, 1, 0] - rel material:binding = - uniform token orientation = "rightHanded" - point3f[] points = [(-0.5, -0.5, 0), (0.5, -0.5, 0), (-0.5, 0.5, 0), (0.5, 0.5, 0)] ( - interpolation = "vertex" - ) - uniform token subdivisionScheme = "none" - } -} - -def Scope "materials" ( - prepend apiSchemas = ["MaterialBindingAPI"] -) -{ - rel material:binding = - - def Material "usdpreviewsurface1" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - rel material:binding = - token outputs:displacement.connect = - token outputs:surface.connect = - - def Shader "usdpreviewsurface1" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - uniform token info:id = "UsdPreviewSurface" - color3f inputs:diffuseColor = (0, 0, 0) - color3f inputs:emissiveColor = (1, 1, 1) - rel material:binding = - token outputs:displacement - token outputs:surface - } - } -} - -def Camera "camera" ( - prepend apiSchemas = ["HoudiniCameraPlateAPI", "HoudiniViewportGuideAPI"] -) -{ - float2 clippingRange = (1, 1000000) - float exposure = 0 - float focalLength = 0.5 - float focusDistance = 5 - float fStop = 0 - float horizontalAperture = 0.20955 - float horizontalApertureOffset = 0 - asset houdini:backgroundimage = @@ - asset houdini:foregroundimage = @@ - float houdini:guidescale = 1 - bool houdini:inviewermenu = 1 - token projection = "perspective" - double shutter:close = 0.25 - double shutter:open = -0.25 - float verticalAperture = 0.11787187 - float verticalApertureOffset = 0 - matrix4d xformOp:transform.timeSamples = { - 4: ( (0.44838321609003223, 0.8938414241512638, 0, 0), (-0.8938414241512638, 0.44838321609003223, 0, 0), (0, 0, 1, 0), (0, 0.5920000000000004, 10, 1) ), - 5: ( (5.053215498074303e-16, 1, 0, 0), (-1, 5.053215498074303e-16, 0, 0), (0, 0, 1, 0), (0, 2.220446049250313e-16, 10, 1) ), - 6: ( (-0.4483832160900321, 0.8938414241512639, 0, 0), (-0.8938414241512639, -0.4483832160900321, 0, 0), (0, 0, 1, 0), (0, -0.5920000000000001, 10, 1) ), - } - uniform token[] xformOpOrder = ["xformOp:transform"] -} - diff --git a/testSuite/motion_blur/camera/test.xml b/testSuite/motion_blur/camera/test.xml deleted file mode 100644 index 5c2c224..0000000 --- a/testSuite/motion_blur/camera/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Tests camera transform motion blur - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -camera camera -time 5 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.02 - - - - diff --git a/testSuite/motion_blur/geometry/scene.usd b/testSuite/motion_blur/geometry/scene.usd deleted file mode 100644 index 0627aa3..0000000 --- a/testSuite/motion_blur/geometry/scene.usd +++ /dev/null @@ -1,722 +0,0 @@ -#usda 1.0 -( - defaultPrim = "points_hermite" - endTimeCode = 6 - framesPerSecond = 24 - metersPerUnit = 1 - startTimeCode = 4 - timeCodesPerSecond = 24 - upAxis = "Y" -) - -def Xform "grid_node_xform" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform.timeSamples = { - 4: ( (-0.5979049830575189, 0.8015669848708765, 0, 0), (-0.8015669848708765, -0.5979049830575189, 0, 0), (0, 0, 1, 0), (-7, 10, 0, 1) ), - 5: ( (-1, 1.0106430996148606e-15, 0, 0), (-1.0106430996148606e-15, -1, 0, 0), (0, 0, 1, 0), (-7, 10, 0, 1) ), - 6: ( (-0.597904983057519, -0.8015669848708764, 0, 0), (0.8015669848708764, -0.597904983057519, 0, 0), (0, 0, 1, 0), (-7, 10, 0, 1) ), - } - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Mesh "mesh_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - float3[] extent = [(-1, -1, 0), (1, 1, 0)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [2, 3, 1, 0] - rel material:binding = - uniform token orientation = "rightHanded" - point3f[] points = [(-1, -1, 0), (1, -1, 0), (-1, 1, 0), (1, 1, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0)] ( - interpolation = "vertex" - ) - int[] primvars:displayColor:indices = None - uniform token subdivisionScheme = "none" - } -} - -def Xform "grid_frame_delta" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-7, 7, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Mesh "mesh_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - float3[] extent.timeSamples = { - 4: [(-1.399472, -1.399472, 0), (1.399472, 1.399472, 0)], - 5: [(-1, -1, 0), (1, 1, 0)], - 6: [(-1.399472, -1.399472, 0), (1.399472, 1.399472, 0)], - } - int[] faceVertexCounts.timeSamples = { - 5: [4], - } - int[] faceVertexIndices.timeSamples = { - 5: [2, 3, 1, 0], - } - rel material:binding = - uniform token orientation = "rightHanded" - point3f[] points ( - interpolation = "vertex" - ) - point3f[] points.timeSamples = { - 4: [(1.399472, -0.20366198, 0), (0.20366198, 1.399472, 0), (-0.20366198, -1.399472, 0), (-1.399472, 0.20366198, 0)], - 5: [(1, 1, 0), (-1, 1, 0), (1, -1, 0), (-1, -1, 0)], - 6: [(-0.20366198, 1.399472, 0), (-1.399472, -0.20366198, 0), (1.399472, 0.20366198, 0), (0.20366198, -1.399472, 0)], - } - color3f[] primvars:displayColor ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor.timeSamples = { - 4: [(1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)], - 5: [(1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)], - 6: [(1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)], - } - int[] primvars:displayColor:indices = None - uniform token subdivisionScheme = "none" - } -} - -def Xform "grid_velocity" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-7, 4, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Mesh "mesh_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - float3[] extent = [(-1, -1, 0), (1, 1, 0)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [2, 3, 1, 0] - rel material:binding = - uniform token orientation = "rightHanded" - point3f[] points = [(-1, -1, 0), (1, -1, 0), (-1, 1, 0), (1, 1, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( - interpolation = "vertex" - ) - int[] primvars:displayColor:indices = None - uniform token subdivisionScheme = "none" - vector3f[] velocities = [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)] ( - interpolation = "vertex" - ) - } -} - -def Xform "grid_acceleration" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-7, 1, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Mesh "mesh_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - vector3f[] accelerations = [(0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0)] ( - interpolation = "vertex" - ) - float3[] extent = [(-1, -1, 0), (1, 1, 0)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [2, 3, 1, 0] - rel material:binding = - uniform token orientation = "rightHanded" - point3f[] points = [(-1, -1, 0), (1, -1, 0), (-1, 1, 0), (1, 1, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1)] ( - interpolation = "vertex" - ) - int[] primvars:displayColor:indices = None - uniform token subdivisionScheme = "none" - vector3f[] velocities = [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)] ( - interpolation = "vertex" - ) - } -} - -def Xform "grid_hermite" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (-7, -2, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Mesh "mesh_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - float3[] extent.timeSamples = { - 4: [(-1.399472, -1.399472, 0), (1.399472, 1.399472, 0)], - 5: [(-1, -1, 0), (1, 1, 0)], - 6: [(-1.399472, -1.399472, 0), (1.399472, 1.399472, 0)], - } - int[] faceVertexCounts.timeSamples = { - 5: [4], - } - int[] faceVertexIndices.timeSamples = { - 5: [2, 3, 1, 0], - } - rel material:binding = - uniform token orientation = "rightHanded" - point3f[] points ( - interpolation = "vertex" - ) - point3f[] points.timeSamples = { - 4: [(1.399472, -0.20366198, 0), (0.20366198, 1.399472, 0), (-0.20366198, -1.399472, 0), (-1.399472, 0.20366198, 0)], - 5: [(1, 1, 0), (-1, 1, 0), (1, -1, 0), (-1, -1, 0)], - 6: [(-0.20366198, 1.399472, 0), (-1.399472, -0.20366198, 0), (1.399472, 0.20366198, 0), (0.20366198, -1.399472, 0)], - } - color3f[] primvars:displayColor ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor.timeSamples = { - 4: [(1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1)], - 5: [(1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1)], - 6: [(1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1)], - } - int[] primvars:displayColor:indices = None - uniform token subdivisionScheme = "none" - vector3f[] velocities ( - interpolation = "vertex" - ) - vector3f[] velocities.timeSamples = { - 4: [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)], - 5: [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)], - 6: [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)], - } - } -} - -def Xform "curves_node_xform" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform.timeSamples = { - 4: ( (-0.5979049830575189, 0.8015669848708765, 0, 0), (-0.8015669848708765, -0.5979049830575189, 0, 0), (0, 0, 1, 0), (0, 10, 0, 1) ), - 5: ( (-1, 1.0106430996148606e-15, 0, 0), (-1.0106430996148606e-15, -1, 0, 0), (0, 0, 1, 0), (0, 10, 0, 1) ), - 6: ( (-0.597904983057519, -0.8015669848708764, 0, 0), (0.8015669848708764, -0.597904983057519, 0, 0), (0, 0, 1, 0), (0, 10, 0, 1) ), - } - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def BasisCurves "curve_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - uniform token basis = "bspline" - int[] curveVertexCounts = [10, 10, 10, 10, 10] - float3[] extent = [(-0.8, -1.42805, 0), (1.1712201, 1.42805, 0)] - rel material:binding = - point3f[] points = [(-0.6, -0.5, 0), (-0.6, -0.5, 0), (-0.6, -0.5, 0), (-0.8, -0.3, 0), (-0.40000004, -0.099999994, 0), (-0.8, 0.100000024, 0), (-0.40000004, 0.3, 0), (-0.8, 0.5, 0), (-0.8, 0.5, 0), (-0.8, 0.5, 0), (-0.3, -0.65, 0), (-0.3, -0.65, 0), (-0.3, -0.65, 0), (-0.56, -0.39000002, 0), (-0.04000002, -0.13000003, 0), (-0.56, 0.13, 0), (-0.04000002, 0.39, 0), (-0.56, 0.65, 0), (-0.56, 0.65, 0), (-0.56, 0.65, 0), (0, -0.845, 0), (0, -0.845, 0), (0, -0.845, 0), (-0.33800003, -0.50699997, 0), (0.33800006, -0.16899994, 0), (-0.33800003, 0.16900003, 0), (0.33800006, 0.5070001, 0), (-0.33800003, 0.845, 0), (-0.33800003, 0.845, 0), (-0.33800003, 0.845, 0), (0.29999995, -1.0985, 0), (0.29999995, -1.0985, 0), (0.29999995, -1.0985, 0), (-0.13940006, -0.6591, 0), (0.7394, -0.21969998, 0), (-0.13940006, 0.2197001, 0), (0.7394, 0.65910006, 0), (-0.13940006, 1.0985, 0), (-0.13940006, 1.0985, 0), (-0.13940006, 1.0985, 0), (0.6, -1.42805, 0), (0.6, -1.42805, 0), (0.6, -1.42805, 0), (0.028779984, -0.85682994, 0), (1.1712201, -0.2856099, 0), (0.028779984, 0.28561014, 0), (1.1712201, 0.8568301, 0), (0.028779984, 1.42805, 0), (0.028779984, 1.42805, 0), (0.028779984, 1.42805, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0)] ( - interpolation = "vertex" - ) - int[] primvars:displayColor:indices = None - uniform token type = "cubic" - float[] widths = [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05] ( - interpolation = "vertex" - ) - uniform token wrap = "nonperiodic" - } -} - -def Xform "curves_frame_delta" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 7, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def BasisCurves "curve_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - uniform token basis = "bspline" - int[] curveVertexCounts.timeSamples = { - 5: [10, 10, 10, 10, 10], - } - float3[] extent.timeSamples = { - 4: [(-1.387085, -0.94020605, 0), (0.78593475, 1.3347784, 0)], - 5: [(-1.1712201, -1.42805, 0), (0.8, 1.42805, 0)], - 6: [(-1.5034208, -1.4511143, 0), (1.12747, 0.82062507, 0)], - } - rel material:binding = - point3f[] points ( - interpolation = "vertex" - ) - point3f[] points.timeSamples = { - 4: [(0.7595265, -0.1819877, 0), (0.7595265, -0.1819877, 0), (0.7595265, -0.1819877, 0), (0.7187941, -0.46188208, 0), (0.3193187, -0.26083633, 0), (0.39816728, -0.7010441, 0), (-0.0013080835, -0.49999833, 0), (0.07754052, -0.94020605, 0), (0.07754052, -0.94020605, 0), (0.07754052, -0.94020605, 0), (0.70039, 0.14816813, 0), (0.70039, 0.14816813, 0), (0.70039, 0.14816813, 0), (0.64743793, -0.21569456, 0), (0.12811993, 0.045664966, 0), (0.2306231, -0.5266051, 0), (-0.2886949, -0.26524562, 0), (-0.18619171, -0.8375157, 0), (-0.18619171, -0.8375157, 0), (-0.18619171, -0.8375157, 0), (0.6773241, 0.5052297, 0), (0.6773241, 0.5052297, 0), (0.6773241, 0.5052297, 0), (0.6084863, 0.032208145, 0), (-0.066627145, 0.3719756, 0), (0.066627055, -0.37197563, 0), (-0.6084864, -0.032208174, 0), (-0.4752322, -0.7761594, 0), (-0.4752322, -0.7761594, 0), (-0.4752322, -0.7761594, 0), (0.7011498, 0.89726865, 0), (0.7011498, 0.89726865, 0), (0.7011498, 0.89726865, 0), (0.6116608, 0.2823407, 0), (-0.2659867, 0.7240383, 0), (-0.092756346, -0.24309827, 0), (-0.9704038, 0.1985994, 0), (-0.7971733, -0.7685371, 0), (-0.7971733, -0.7685371, 0), (-0.7971733, -0.7685371, 0), (0.78593475, 1.3347784, 0), (0.78593475, 1.3347784, 0), (0.78593475, 1.3347784, 0), (0.6695989, 0.53537196, 0), (-0.4713428, 1.1095788, 0), (-0.24614334, -0.14769864, 0), (-1.387085, 0.4265083, 0), (-1.1618855, -0.8307691, 0), (-1.1618855, -0.8307691, 0), (-1.1618855, -0.8307691, 0)], - 5: [(0.6, 0.5, 0), (0.6, 0.5, 0), (0.6, 0.5, 0), (0.8, 0.3, 0), (0.40000004, 0.099999994, 0), (0.8, -0.100000024, 0), (0.40000004, -0.3, 0), (0.8, -0.5, 0), (0.8, -0.5, 0), (0.8, -0.5, 0), (0.3, 0.65, 0), (0.3, 0.65, 0), (0.3, 0.65, 0), (0.56, 0.39000002, 0), (0.04000002, 0.13000003, 0), (0.56, -0.13, 0), (0.04000002, -0.39, 0), (0.56, -0.65, 0), (0.56, -0.65, 0), (0.56, -0.65, 0), (8.5399344e-16, 0.845, 0), (8.5399344e-16, 0.845, 0), (8.5399344e-16, 0.845, 0), (0.33800003, 0.50699997, 0), (-0.33800006, 0.16899994, 0), (0.33800003, -0.16900003, 0), (-0.33800006, -0.5070001, 0), (0.33800003, -0.845, 0), (0.33800003, -0.845, 0), (0.33800003, -0.845, 0), (-0.29999995, 1.0985, 0), (-0.29999995, 1.0985, 0), (-0.29999995, 1.0985, 0), (0.13940006, 0.6591, 0), (-0.7394, 0.21969998, 0), (0.13940006, -0.2197001, 0), (-0.7394, -0.65910006, 0), (0.13940006, -1.0985, 0), (0.13940006, -1.0985, 0), (0.13940006, -1.0985, 0), (-0.6, 1.42805, 0), (-0.6, 1.42805, 0), (-0.6, 1.42805, 0), (-0.028779984, 0.85682994, 0), (-1.1712201, 0.2856099, 0), (-0.028779984, -0.28561014, 0), (-1.1712201, -0.8568301, 0), (-0.028779984, -1.42805, 0), (-0.028779984, -1.42805, 0), (-0.028779984, -1.42805, 0)], - 6: [(-0.042040467, 0.7798927, 0), (-0.042040467, 0.7798927, 0), (-0.042040467, 0.7798927, 0), (0.2378539, 0.82062507, 0), (0.15900531, 0.38041732, 0), (0.55848074, 0.5814631, 0), (0.4796321, 0.14125532, 0), (0.8791075, 0.3423011, 0), (0.8791075, 0.3423011, 0), (0.8791075, 0.3423011, 0), (-0.341647, 0.6291083, 0), (-0.341647, 0.6291083, 0), (-0.341647, 0.6291083, 0), (0.022215664, 0.6820605, 0), (-0.08028751, 0.109790355, 0), (0.4390305, 0.37114987, 0), (0.33652732, -0.20112024, 0), (0.85584533, 0.060239285, 0), (0.85584533, 0.060239285, 0), (0.85584533, 0.060239285, 0), (-0.6773241, 0.5052297, 0), (-0.6773241, 0.5052297, 0), (-0.6773241, 0.5052297, 0), (-0.20430252, 0.5740675, 0), (-0.3375567, -0.16988379, 0), (0.33755675, 0.1698837, 0), (0.2043026, -0.5740676, 0), (0.879416, -0.23430005, 0), (0.879416, -0.23430005, 0), (0.879416, -0.23430005, 0), (-1.0598928, 0.41632855, 0), (-1.0598928, 0.41632855, 0), (-1.0598928, 0.41632855, 0), (-0.44496483, 0.50581765, 0), (-0.6181952, -0.4613189, 0), (0.25945234, -0.019621298, 0), (0.086221844, -0.9867578, 0), (0.9638693, -0.5450601, 0), (0.9638693, -0.5450601, 0), (0.9638693, -0.5450601, 0), (-1.5034208, 0.372898, 0), (-1.5034208, 0.372898, 0), (-1.5034208, 0.372898, 0), (-0.70401424, 0.4892338, 0), (-0.92921376, -0.76804376, 0), (0.21172795, -0.19383681, 0), (-0.013471544, -1.4511143, 0), (1.12747, -0.8769073, 0), (1.12747, -0.8769073, 0), (1.12747, -0.8769073, 0)], - } - color3f[] primvars:displayColor ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor.timeSamples = { - 4: [(1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)], - 5: [(1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)], - 6: [(1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)], - } - int[] primvars:displayColor:indices = None - uniform token type = "cubic" - float[] widths ( - interpolation = "vertex" - ) - float[] widths.timeSamples = { - 4: [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05], - 5: [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05], - 6: [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05], - } - uniform token wrap = "nonperiodic" - } -} - -def Xform "curves_velocity" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 4, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def BasisCurves "curve_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - uniform token basis = "bspline" - int[] curveVertexCounts = [10, 10, 10, 10, 10] - float3[] extent = [(-0.8, -1.42805, 0), (1.1712201, 1.42805, 0)] - rel material:binding = - point3f[] points = [(-0.6, -0.5, 0), (-0.6, -0.5, 0), (-0.6, -0.5, 0), (-0.8, -0.3, 0), (-0.40000004, -0.099999994, 0), (-0.8, 0.100000024, 0), (-0.40000004, 0.3, 0), (-0.8, 0.5, 0), (-0.8, 0.5, 0), (-0.8, 0.5, 0), (-0.3, -0.65, 0), (-0.3, -0.65, 0), (-0.3, -0.65, 0), (-0.56, -0.39000002, 0), (-0.04000002, -0.13000003, 0), (-0.56, 0.13, 0), (-0.04000002, 0.39, 0), (-0.56, 0.65, 0), (-0.56, 0.65, 0), (-0.56, 0.65, 0), (0, -0.845, 0), (0, -0.845, 0), (0, -0.845, 0), (-0.33800003, -0.50699997, 0), (0.33800006, -0.16899994, 0), (-0.33800003, 0.16900003, 0), (0.33800006, 0.5070001, 0), (-0.33800003, 0.845, 0), (-0.33800003, 0.845, 0), (-0.33800003, 0.845, 0), (0.29999995, -1.0985, 0), (0.29999995, -1.0985, 0), (0.29999995, -1.0985, 0), (-0.13940006, -0.6591, 0), (0.7394, -0.21969998, 0), (-0.13940006, 0.2197001, 0), (0.7394, 0.65910006, 0), (-0.13940006, 1.0985, 0), (-0.13940006, 1.0985, 0), (-0.13940006, 1.0985, 0), (0.6, -1.42805, 0), (0.6, -1.42805, 0), (0.6, -1.42805, 0), (0.028779984, -0.85682994, 0), (1.1712201, -0.2856099, 0), (0.028779984, 0.28561014, 0), (1.1712201, 0.8568301, 0), (0.028779984, 1.42805, 0), (0.028779984, 1.42805, 0), (0.028779984, 1.42805, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( - interpolation = "vertex" - ) - int[] primvars:displayColor:indices = None - uniform token type = "cubic" - vector3f[] velocities = [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)] ( - interpolation = "vertex" - ) - float[] widths = [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05] ( - interpolation = "vertex" - ) - uniform token wrap = "nonperiodic" - } -} - -def Xform "curves_acceleration" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 1, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def BasisCurves "curve_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - vector3f[] accelerations = [(0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0)] ( - interpolation = "vertex" - ) - uniform token basis = "bspline" - int[] curveVertexCounts = [10, 10, 10, 10, 10] - float3[] extent = [(-0.8, -1.42805, 0), (1.1712201, 1.42805, 0)] - rel material:binding = - point3f[] points = [(-0.6, -0.5, 0), (-0.6, -0.5, 0), (-0.6, -0.5, 0), (-0.8, -0.3, 0), (-0.40000004, -0.099999994, 0), (-0.8, 0.100000024, 0), (-0.40000004, 0.3, 0), (-0.8, 0.5, 0), (-0.8, 0.5, 0), (-0.8, 0.5, 0), (-0.3, -0.65, 0), (-0.3, -0.65, 0), (-0.3, -0.65, 0), (-0.56, -0.39000002, 0), (-0.04000002, -0.13000003, 0), (-0.56, 0.13, 0), (-0.04000002, 0.39, 0), (-0.56, 0.65, 0), (-0.56, 0.65, 0), (-0.56, 0.65, 0), (0, -0.845, 0), (0, -0.845, 0), (0, -0.845, 0), (-0.33800003, -0.50699997, 0), (0.33800006, -0.16899994, 0), (-0.33800003, 0.16900003, 0), (0.33800006, 0.5070001, 0), (-0.33800003, 0.845, 0), (-0.33800003, 0.845, 0), (-0.33800003, 0.845, 0), (0.29999995, -1.0985, 0), (0.29999995, -1.0985, 0), (0.29999995, -1.0985, 0), (-0.13940006, -0.6591, 0), (0.7394, -0.21969998, 0), (-0.13940006, 0.2197001, 0), (0.7394, 0.65910006, 0), (-0.13940006, 1.0985, 0), (-0.13940006, 1.0985, 0), (-0.13940006, 1.0985, 0), (0.6, -1.42805, 0), (0.6, -1.42805, 0), (0.6, -1.42805, 0), (0.028779984, -0.85682994, 0), (1.1712201, -0.2856099, 0), (0.028779984, 0.28561014, 0), (1.1712201, 0.8568301, 0), (0.028779984, 1.42805, 0), (0.028779984, 1.42805, 0), (0.028779984, 1.42805, 0)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1)] ( - interpolation = "vertex" - ) - int[] primvars:displayColor:indices = None - uniform token type = "cubic" - vector3f[] velocities = [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)] ( - interpolation = "vertex" - ) - float[] widths = [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05] ( - interpolation = "vertex" - ) - uniform token wrap = "nonperiodic" - } -} - -def Xform "curves_hermite" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, -2, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def BasisCurves "curve_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - uniform token basis = "bspline" - int[] curveVertexCounts.timeSamples = { - 5: [10, 10, 10, 10, 10], - } - float3[] extent.timeSamples = { - 4: [(-1.387085, -0.94020605, 0), (0.78593475, 1.3347784, 0)], - 5: [(-1.1712201, -1.42805, 0), (0.8, 1.42805, 0)], - 6: [(-1.5034208, -1.4511143, 0), (1.12747, 0.82062507, 0)], - } - rel material:binding = - point3f[] points ( - interpolation = "vertex" - ) - point3f[] points.timeSamples = { - 4: [(0.7595265, -0.1819877, 0), (0.7595265, -0.1819877, 0), (0.7595265, -0.1819877, 0), (0.7187941, -0.46188208, 0), (0.3193187, -0.26083633, 0), (0.39816728, -0.7010441, 0), (-0.0013080835, -0.49999833, 0), (0.07754052, -0.94020605, 0), (0.07754052, -0.94020605, 0), (0.07754052, -0.94020605, 0), (0.70039, 0.14816813, 0), (0.70039, 0.14816813, 0), (0.70039, 0.14816813, 0), (0.64743793, -0.21569456, 0), (0.12811993, 0.045664966, 0), (0.2306231, -0.5266051, 0), (-0.2886949, -0.26524562, 0), (-0.18619171, -0.8375157, 0), (-0.18619171, -0.8375157, 0), (-0.18619171, -0.8375157, 0), (0.6773241, 0.5052297, 0), (0.6773241, 0.5052297, 0), (0.6773241, 0.5052297, 0), (0.6084863, 0.032208145, 0), (-0.066627145, 0.3719756, 0), (0.066627055, -0.37197563, 0), (-0.6084864, -0.032208174, 0), (-0.4752322, -0.7761594, 0), (-0.4752322, -0.7761594, 0), (-0.4752322, -0.7761594, 0), (0.7011498, 0.89726865, 0), (0.7011498, 0.89726865, 0), (0.7011498, 0.89726865, 0), (0.6116608, 0.2823407, 0), (-0.2659867, 0.7240383, 0), (-0.092756346, -0.24309827, 0), (-0.9704038, 0.1985994, 0), (-0.7971733, -0.7685371, 0), (-0.7971733, -0.7685371, 0), (-0.7971733, -0.7685371, 0), (0.78593475, 1.3347784, 0), (0.78593475, 1.3347784, 0), (0.78593475, 1.3347784, 0), (0.6695989, 0.53537196, 0), (-0.4713428, 1.1095788, 0), (-0.24614334, -0.14769864, 0), (-1.387085, 0.4265083, 0), (-1.1618855, -0.8307691, 0), (-1.1618855, -0.8307691, 0), (-1.1618855, -0.8307691, 0)], - 5: [(0.6, 0.5, 0), (0.6, 0.5, 0), (0.6, 0.5, 0), (0.8, 0.3, 0), (0.40000004, 0.099999994, 0), (0.8, -0.100000024, 0), (0.40000004, -0.3, 0), (0.8, -0.5, 0), (0.8, -0.5, 0), (0.8, -0.5, 0), (0.3, 0.65, 0), (0.3, 0.65, 0), (0.3, 0.65, 0), (0.56, 0.39000002, 0), (0.04000002, 0.13000003, 0), (0.56, -0.13, 0), (0.04000002, -0.39, 0), (0.56, -0.65, 0), (0.56, -0.65, 0), (0.56, -0.65, 0), (8.5399344e-16, 0.845, 0), (8.5399344e-16, 0.845, 0), (8.5399344e-16, 0.845, 0), (0.33800003, 0.50699997, 0), (-0.33800006, 0.16899994, 0), (0.33800003, -0.16900003, 0), (-0.33800006, -0.5070001, 0), (0.33800003, -0.845, 0), (0.33800003, -0.845, 0), (0.33800003, -0.845, 0), (-0.29999995, 1.0985, 0), (-0.29999995, 1.0985, 0), (-0.29999995, 1.0985, 0), (0.13940006, 0.6591, 0), (-0.7394, 0.21969998, 0), (0.13940006, -0.2197001, 0), (-0.7394, -0.65910006, 0), (0.13940006, -1.0985, 0), (0.13940006, -1.0985, 0), (0.13940006, -1.0985, 0), (-0.6, 1.42805, 0), (-0.6, 1.42805, 0), (-0.6, 1.42805, 0), (-0.028779984, 0.85682994, 0), (-1.1712201, 0.2856099, 0), (-0.028779984, -0.28561014, 0), (-1.1712201, -0.8568301, 0), (-0.028779984, -1.42805, 0), (-0.028779984, -1.42805, 0), (-0.028779984, -1.42805, 0)], - 6: [(-0.042040467, 0.7798927, 0), (-0.042040467, 0.7798927, 0), (-0.042040467, 0.7798927, 0), (0.2378539, 0.82062507, 0), (0.15900531, 0.38041732, 0), (0.55848074, 0.5814631, 0), (0.4796321, 0.14125532, 0), (0.8791075, 0.3423011, 0), (0.8791075, 0.3423011, 0), (0.8791075, 0.3423011, 0), (-0.341647, 0.6291083, 0), (-0.341647, 0.6291083, 0), (-0.341647, 0.6291083, 0), (0.022215664, 0.6820605, 0), (-0.08028751, 0.109790355, 0), (0.4390305, 0.37114987, 0), (0.33652732, -0.20112024, 0), (0.85584533, 0.060239285, 0), (0.85584533, 0.060239285, 0), (0.85584533, 0.060239285, 0), (-0.6773241, 0.5052297, 0), (-0.6773241, 0.5052297, 0), (-0.6773241, 0.5052297, 0), (-0.20430252, 0.5740675, 0), (-0.3375567, -0.16988379, 0), (0.33755675, 0.1698837, 0), (0.2043026, -0.5740676, 0), (0.879416, -0.23430005, 0), (0.879416, -0.23430005, 0), (0.879416, -0.23430005, 0), (-1.0598928, 0.41632855, 0), (-1.0598928, 0.41632855, 0), (-1.0598928, 0.41632855, 0), (-0.44496483, 0.50581765, 0), (-0.6181952, -0.4613189, 0), (0.25945234, -0.019621298, 0), (0.086221844, -0.9867578, 0), (0.9638693, -0.5450601, 0), (0.9638693, -0.5450601, 0), (0.9638693, -0.5450601, 0), (-1.5034208, 0.372898, 0), (-1.5034208, 0.372898, 0), (-1.5034208, 0.372898, 0), (-0.70401424, 0.4892338, 0), (-0.92921376, -0.76804376, 0), (0.21172795, -0.19383681, 0), (-0.013471544, -1.4511143, 0), (1.12747, -0.8769073, 0), (1.12747, -0.8769073, 0), (1.12747, -0.8769073, 0)], - } - color3f[] primvars:displayColor ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor.timeSamples = { - 4: [(1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1)], - 5: [(1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1)], - 6: [(1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1)], - } - int[] primvars:displayColor:indices = None - uniform token type = "cubic" - vector3f[] velocities ( - interpolation = "vertex" - ) - vector3f[] velocities.timeSamples = { - 4: [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)], - 5: [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)], - 6: [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)], - } - float[] widths ( - interpolation = "vertex" - ) - float[] widths.timeSamples = { - 4: [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05], - 5: [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05], - 6: [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05], - } - uniform token wrap = "nonperiodic" - } -} - -def Xform "points_node_xform" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform.timeSamples = { - 4: ( (-0.5979049830575189, 0.8015669848708765, 0, 0), (-0.8015669848708765, -0.5979049830575189, 0, 0), (0, 0, 1, 0), (7, 10, 0, 1) ), - 5: ( (-1, 1.0106430996148606e-15, 0, 0), (-1.0106430996148606e-15, -1, 0, 0), (0, 0, 1, 0), (7, 10, 0, 1) ), - 6: ( (-0.597904983057519, -0.8015669848708764, 0, 0), (0.8015669848708764, -0.597904983057519, 0, 0), (0, 0, 1, 0), (7, 10, 0, 1) ), - } - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Points "points_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - float3[] extent = [(-1.2230003, -1.2212715, -1.2351003), (1.2195488, 1.2231666, 1.2131449)] - rel material:binding = - point3f[] points = [(0.38730398, -0.887907, -0.7824701), (0.37888435, -0.56501573, -1.0314239), (-0.5264995, 1.099362, -0.24288183), (-0.89442015, -0.60337454, -0.61199725), (0.6784591, 0.84571725, 0.6030266), (-0.18982011, 1.0898279, -0.57317907), (0.03910296, -0.4077332, -1.1673785), (1.2195488, -0.10140892, -0.129891), (0.21425371, -0.30852768, 1.1811745), (-0.53159976, -0.80699706, -0.7703964), (-0.8131267, 0.061006084, -0.9281401), (-0.85945463, -0.6375627, 0.6272771), (0.5676166, -0.6398412, 0.90304875), (0.9633478, 0.5041866, 0.58908117), (0.21736181, 0.5633274, -1.0794611), (-0.4674736, 0.78629863, -0.8352455), (-0.07344386, -0.7496252, -0.97723436), (0.6265905, -0.17092133, 1.0531905), (0.090323724, -1.15859, -0.42948803), (-0.16568753, 0.99070287, 0.7228605), (0.6842804, 0.82939047, -0.61584353), (-0.75183094, -0.35732242, -0.91448784), (0.9354176, 0.07855371, 0.79988), (-1.0820671, -0.2209806, -0.5507492), (-0.09925218, 0.31763378, -1.1951159), (-1.0978217, 0.31550676, 0.4804732), (-1.1410375, 0.45612627, 0.08692572), (1.2097702, 0.28655407, -0.019021558), (0.07642955, -0.0367453, -1.2351003), (-0.800103, -0.8933495, -0.32635885), (-0.536653, -0.4930464, 0.99806476), (-0.47654638, 0.29836047, 1.1018707), (0.5413873, -1.0381134, -0.4066183), (0.2610739, 0.95212656, 0.7449432), (-0.50729084, 1.0289611, 0.47047934), (0.9549142, -0.64666396, 0.456157), (-0.8693383, 0.30830246, 0.83673525), (1.0148087, 0.6760756, 0.216717), (0.42512953, 0.16435228, 1.142101), (-0.37835386, -0.47216675, -1.0729157), (1.0879006, -0.1630946, -0.5564098), (-0.85347986, 0.54277766, -0.70623016), (-0.4129736, -0.053723045, -1.162766), (-0.6860053, 0.89717966, -0.51727563), (0.023971472, 0.25597012, 1.2131449), (1.0872693, -0.18571086, 0.55021995), (-1.0458416, -0.14701003, 0.6412946), (0.50007874, -0.15773255, -1.1119913), (0.46636364, 1.1240997, -0.2333361), (-0.94938254, 0.76473886, -0.19691095), (0.5093538, 0.2418612, -1.0962636), (1.1624988, 0.1986321, 0.36419272), (-1.214922, -0.014580868, 0.25186366), (0.8784175, -0.046430647, -0.8804387), (-1.2230003, -0.054916877, -0.15016614), (0.88275, 0.4068124, -0.7598066), (-1.1283305, -0.4331435, 0.2557554), (0.7628695, -0.49066153, -0.8369962), (-0.123398274, 0.66837245, 1.0330051), (0.84485775, -0.75175035, -0.5036011), (-0.75594825, -0.13876154, 0.95922184), (-0.9071001, 0.7040292, 0.4575504), (1.1130116, 0.2742014, -0.45789015), (-1.0561051, 0.17282727, -0.6223836), (0.38356853, 0.6170585, 1.0063504), (1.0558537, 0.6175447, -0.22609578), (0.8650891, -0.38702786, 0.7961693), (-0.5206652, 0.3977914, -1.0470287), (-0.9182125, -0.80834746, 0.1795015), (-0.6017659, 0.6984128, 0.8206797), (1.1844832, -0.29492894, 0.20272017), (1.0975087, -0.48316503, -0.30717826), (-1.1355951, 0.3858696, -0.31964043), (-0.2708108, -0.12072963, 1.1984526), (-1.0926381, -0.53914714, -0.19334997), (-0.07163029, -0.62138045, 1.0746007), (-0.09568428, 0.765152, -0.9623923), (1.0013137, -0.72745866, 0.019739542), (-0.37541258, -0.86117077, 0.81172544), (0.54648, 0.6423165, -0.9168939), (0.63264275, -0.9475972, 0.4798095), (0.35360166, 1.148712, 0.29685748), (-0.21501781, -1.2212715, 0.024279922), (0.7243833, 0.9917474, 0.14378133), (0.233415, -0.8965498, 0.83412576), (0.25294498, 0.99740624, -0.6849852), (-0.54499644, -1.0264542, 0.42666113), (-0.7684705, 0.958933, 0.13373494), (-0.09053223, -0.9983117, -0.72283894), (-0.046014287, 1.201273, 0.33227536), (-0.62768734, -1.0799967, 0.0046815393), (0.8331876, 0.882239, -0.2817154), (0.7319333, 0.4006585, 0.9073235), (0.6863256, -1.0345441, 0.009214027), (-0.1070535, -1.108712, 0.54770154), (-0.3964872, -1.1012977, -0.42020312), (0.06385075, 1.2231666, -0.1922773), (0.23966102, -1.2174228, -0.059149053), (-0.3223462, 1.2055982, 0.042117383), (0.25062457, -1.1616032, 0.3501846)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0), (1, 1, 0)] ( - interpolation = "vertex" - ) - int[] primvars:displayColor:indices = None - float[] widths = [0.04172318, 0.00029251576, 0.081343226, 0.026238048, 0.00022482872, 0.018949378, 0.011619652, 0.06177759, 0.091621116, 0.05199168, 0.009368181, 0.0119826915, 0.09744946, 0.09223701, 0.01491077, 0.00862304, 0.08047523, 0.086910784, 0.08762624, 0.002495134, 0.074814476, 0.03745625, 0.0169585, 0.035533644, 0.067235015, 0.09425061, 0.060025204, 0.039106797, 0.08550682, 0.005255854, 0.09929136, 0.0722306, 0.09501713, 0.093023956, 0.05721128, 0.09952482, 0.021738088, 0.09381942, 0.033784438, 0.09948045, 0.028117776, 0.021284902, 0.079645276, 0.03431281, 0.0582495, 0.086238384, 0.08141068, 0.016465975, 0.06494167, 0.039164163, 0.03589337, 0.030209256, 0.09353763, 0.09642974, 0.07435914, 0.0696752, 0.08771876, 0.044762373, 0.014282644, 0.007970464, 0.053426113, 0.00040833952, 0.0036474944, 0.08283776, 0.011082137, 0.04308448, 0.02185439, 0.012870312, 0.07063519, 0.06552845, 0.058672618, 0.0024151087, 0.07420248, 0.08690079, 0.038192857, 0.08617926, 0.08544312, 0.06783936, 0.07528448, 0.051347066, 0.03206375, 0.06306287, 0.057547808, 0.00009969473, 0.00777086, 0.040565707, 0.03948797, 0.026823176, 0.065427996, 0.06638756, 0.0012147427, 0.047290124, 0.07486918, 0.081005454, 0.05057571, 0.07140004, 0.03447945, 0.098138504, 0.053005993, 0.07432371] ( - interpolation = "vertex" - ) - } -} - -def Xform "points_frame_delta" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (7, 7, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Points "points_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - float3[] extent.timeSamples = { - 4: [(-1.2280643, -1.2182348, -1.2351003), (1.2409871, 1.2375711, 1.2131449)], - 5: [(-1.2195488, -1.2231666, -1.2351003), (1.2230003, 1.2212715, 1.2131449)], - 6: [(-1.2396139, -1.217666, -1.2351003), (1.2281213, 1.2193238, 1.2131449)], - } - rel material:binding = - point3f[] points ( - interpolation = "vertex" - ) - point3f[] points.timeSamples = { - 4: [(0.480146, 0.8413341, -0.7824701), (0.2263611, 0.6415269, -1.0314239), (-0.5664156, -1.0793386, -0.24288183), (1.0184233, -0.35617703, -0.61199725), (-1.0835531, 0.038171828, 0.6030266), (-0.7600756, -0.8037671, -0.57317907), (0.3034456, 0.27512935, -1.1673785), (-0.6478883, 1.038183, -0.129891), (0.11920223, 0.35620892, 1.1811745), (0.9647083, 0.056394756, -0.7703964), (0.43727204, -0.6882513, -0.9281401), (1.0249214, -0.3077085, 0.6272771), (0.17349479, 0.83754694, 0.90304875), (-0.9801297, 0.47073212, 0.58908117), (-0.5815063, -0.16258621, -1.0794611), (-0.3507662, -0.84484327, -0.8352455), (0.64478725, 0.38933447, -0.97723436), (-0.23763669, 0.604449, 1.0531905), (0.8746824, 0.76512724, -0.42948803), (-0.6950493, -0.72515583, 0.7228605), (-1.0739466, 0.052599847, -0.61584353), (0.7359413, -0.38899797, -0.91448784), (-0.6222569, 0.7028322, 0.79988), (0.8241041, -0.7352239, -0.5507492), (-0.19526136, -0.2694721, -1.1951159), (0.40349326, -1.0686207, 0.4804732), (0.3166162, -1.1873381, 0.08692572), (-0.9530199, 0.7983797, -0.019021558), (-0.016243793, 0.0832336, -1.2351003), (1.194465, -0.107198, -0.32635885), (0.7160772, -0.1353684, 0.99806476), (0.045773566, -0.56037503, 1.1018707), (0.5084192, 1.0546513, -0.4066183), (-0.91929054, -0.360013, 0.7449432), (-0.5214695, -1.0218486, 0.47047934), (-0.052603483, 1.1520714, 0.456157), (0.27265662, -0.8811684, 0.83673525), (-1.148679, 0.40920815, 0.216717), (-0.38592643, 0.24250275, 1.142101), (0.60469294, -0.0209651, -1.0729157), (-0.51973, 0.96954024, -0.5564098), (0.07522723, -1.0086508, -0.70623016), (0.2899816, -0.29890472, -1.162766), (-0.3089836, -1.0863074, -0.51727563), (-0.21950985, -0.13383107, 1.2131449), (-0.50122404, 0.9825566, 0.55021995), (0.74315226, -0.750414, 0.6412946), (-0.17256638, 0.4951557, -1.1119913), (-1.1798823, -0.29828316, -0.2333361), (-0.045348883, -1.2182348, -0.19691095), (-0.49841315, 0.26367116, -1.0962636), (-0.85428077, 0.8130575, 0.36419272), (0.7380954, -0.96512336, 0.25186366), (-0.48799294, 0.73187155, -0.8804387), (0.7752575, -0.9474816, -0.15016614), (-0.85388803, 0.46434802, -0.7598066), (1.0218279, -0.64545375, 0.2557554), (-0.06282541, 0.9048599, -0.8369962), (-0.46196482, -0.4985352, 1.0330051), (0.09743357, 1.1266854, -0.5036011), (0.56321186, -0.52297693, 0.95922184), (-0.021966875, -1.148044, 0.4575504), (-0.88526595, 0.72820693, -0.45789015), (0.4929179, -0.94987327, -0.6223836), (-0.7239512, -0.061486483, 1.0063504), (-1.1263037, 0.47710437, -0.22609578), (-0.20701239, 0.9248327, 0.7961693), (-0.007548094, -0.6551895, -1.0470287), (1.1969485, -0.2526938, 0.1795015), (-0.20002577, -0.89994013, 0.8206797), (-0.47180307, 1.125782, 0.20272017), (-0.2689168, 1.1686134, -0.30717826), (0.36967766, -1.1409688, -0.31964043), (0.25869203, -0.14488815, 1.1984526), (1.0854564, -0.5534638, -0.19334997), (0.54090613, 0.31410998, 1.0746007), (-0.55611044, -0.5341855, -0.9623923), (-0.015583634, 1.2375711, 0.019739542), (0.9147471, 0.21397999, 0.81172544), (-0.8416028, 0.053996056, -0.9168939), (0.38130236, 1.0736786, 0.4798095), (-1.1321899, -0.40338522, 0.29685748), (1.1074911, 0.55785316, 0.024279922), (-1.2280643, -0.012328982, 0.14378133), (0.57908475, 0.72314936, 0.83412576), (-0.95072496, -0.39360183, -0.6849852), (1.1486279, 0.17687094, 0.42666113), (-0.30917662, -1.1893313, 0.13373494), (0.85434335, 0.5243279, -0.72283894), (-0.9353885, -0.75513065, 0.33227536), (1.2409871, 0.14260197, 0.0046815393), (-1.2053406, 0.14036053, -0.2817154), (-0.7587812, 0.3471378, 0.9073235), (0.41889885, 1.168695, 0.009214027), (0.9527147, 0.57709384, 0.54770154), (1.1198256, 0.34066036, -0.42020312), (-1.0186266, -0.6801567, -0.1922773), (0.8325514, 0.9200075, -0.059149053), (-0.7736353, -0.97921526, 0.042117383), (0.7812531, 0.89542073, 0.3501846)], - 5: [(-0.38730398, 0.887907, -0.7824701), (-0.37888435, 0.56501573, -1.0314239), (0.5264995, -1.099362, -0.24288183), (0.89442015, 0.60337454, -0.61199725), (-0.6784591, -0.84571725, 0.6030266), (0.18982011, -1.0898279, -0.57317907), (-0.03910296, 0.4077332, -1.1673785), (-1.2195488, 0.10140892, -0.129891), (-0.21425371, 0.30852768, 1.1811745), (0.53159976, 0.80699706, -0.7703964), (0.8131267, -0.061006084, -0.9281401), (0.85945463, 0.6375627, 0.6272771), (-0.5676166, 0.6398412, 0.90304875), (-0.9633478, -0.5041866, 0.58908117), (-0.21736181, -0.5633274, -1.0794611), (0.4674736, -0.78629863, -0.8352455), (0.07344386, 0.7496252, -0.97723436), (-0.6265905, 0.17092133, 1.0531905), (-0.090323724, 1.15859, -0.42948803), (0.16568753, -0.99070287, 0.7228605), (-0.6842804, -0.82939047, -0.61584353), (0.75183094, 0.35732242, -0.91448784), (-0.9354176, -0.07855371, 0.79988), (1.0820671, 0.2209806, -0.5507492), (0.09925218, -0.31763378, -1.1951159), (1.0978217, -0.31550676, 0.4804732), (1.1410375, -0.45612627, 0.08692572), (-1.2097702, -0.28655407, -0.019021558), (-0.07642955, 0.0367453, -1.2351003), (0.800103, 0.8933495, -0.32635885), (0.536653, 0.4930464, 0.99806476), (0.47654638, -0.29836047, 1.1018707), (-0.5413873, 1.0381134, -0.4066183), (-0.2610739, -0.95212656, 0.7449432), (0.50729084, -1.0289611, 0.47047934), (-0.9549142, 0.64666396, 0.456157), (0.8693383, -0.30830246, 0.83673525), (-1.0148087, -0.6760756, 0.216717), (-0.42512953, -0.16435228, 1.142101), (0.37835386, 0.47216675, -1.0729157), (-1.0879006, 0.1630946, -0.5564098), (0.85347986, -0.54277766, -0.70623016), (0.4129736, 0.053723045, -1.162766), (0.6860053, -0.89717966, -0.51727563), (-0.023971472, -0.25597012, 1.2131449), (-1.0872693, 0.18571086, 0.55021995), (1.0458416, 0.14701003, 0.6412946), (-0.50007874, 0.15773255, -1.1119913), (-0.46636364, -1.1240997, -0.2333361), (0.94938254, -0.76473886, -0.19691095), (-0.5093538, -0.2418612, -1.0962636), (-1.1624988, -0.1986321, 0.36419272), (1.214922, 0.014580868, 0.25186366), (-0.8784175, 0.046430647, -0.8804387), (1.2230003, 0.054916877, -0.15016614), (-0.88275, -0.4068124, -0.7598066), (1.1283305, 0.4331435, 0.2557554), (-0.7628695, 0.49066153, -0.8369962), (0.123398274, -0.66837245, 1.0330051), (-0.84485775, 0.75175035, -0.5036011), (0.75594825, 0.13876154, 0.95922184), (0.9071001, -0.7040292, 0.4575504), (-1.1130116, -0.2742014, -0.45789015), (1.0561051, -0.17282727, -0.6223836), (-0.38356853, -0.6170585, 1.0063504), (-1.0558537, -0.6175447, -0.22609578), (-0.8650891, 0.38702786, 0.7961693), (0.5206652, -0.3977914, -1.0470287), (0.9182125, 0.80834746, 0.1795015), (0.6017659, -0.6984128, 0.8206797), (-1.1844832, 0.29492894, 0.20272017), (-1.0975087, 0.48316503, -0.30717826), (1.1355951, -0.3858696, -0.31964043), (0.2708108, 0.12072963, 1.1984526), (1.0926381, 0.53914714, -0.19334997), (0.07163029, 0.62138045, 1.0746007), (0.09568428, -0.765152, -0.9623923), (-1.0013137, 0.72745866, 0.019739542), (0.37541258, 0.86117077, 0.81172544), (-0.54648, -0.6423165, -0.9168939), (-0.63264275, 0.9475972, 0.4798095), (-0.35360166, -1.148712, 0.29685748), (0.21501781, 1.2212715, 0.024279922), (-0.7243833, -0.9917474, 0.14378133), (-0.233415, 0.8965498, 0.83412576), (-0.25294498, -0.99740624, -0.6849852), (0.54499644, 1.0264542, 0.42666113), (0.7684705, -0.958933, 0.13373494), (0.09053223, 0.9983117, -0.72283894), (0.046014287, -1.201273, 0.33227536), (0.62768734, 1.0799967, 0.0046815393), (-0.8331876, -0.882239, -0.2817154), (-0.7319333, -0.4006585, 0.9073235), (-0.6863256, 1.0345441, 0.009214027), (0.1070535, 1.108712, 0.54770154), (0.3964872, 1.1012977, -0.42020312), (-0.06385075, -1.2231666, -0.1922773), (-0.23966102, 1.2174228, -0.059149053), (0.3223462, -1.2055982, 0.042117383), (-0.25062457, 1.1616032, 0.3501846)], - 6: [(-0.9432879, 0.22043395, -0.7824701), (-0.6794348, 0.034124553, -1.0314239), (1.1960089, -0.2352894, -0.24288183), (0.051133156, 1.0776982, -0.61199725), (0.27224493, -1.049489, 0.6030266), (0.9870644, -0.49946, -0.57317907), (-0.35020533, 0.21244207, -1.1673785), (-0.8104603, -0.91691715, -0.129891), (-0.37540895, 0.012731537, 1.1811745), (-0.32901606, 0.90862036, -0.7703964), (0.535073, 0.61529964, -0.9281401), (0.0028229952, 1.0701123, 0.6272771), (-0.8522563, -0.07241845, 0.90304875), (-0.17185113, -1.0736434, 0.58908117), (0.3215829, -0.5110463, -1.0794611), (0.90977585, -0.09542048, -0.8352455), (-0.5569623, 0.50707483, -0.97723436), (-0.51164645, -0.40005952, 1.0531905), (-0.9826925, 0.6203262, -0.42948803), (0.89318013, -0.45953655, 0.7228605), (0.2556773, -1.0443933, -0.61584353), (0.1631056, 0.8162877, -0.91448784), (-0.49632478, -0.7967675, 0.79988), (0.46984255, 0.99947464, -0.5507492), (0.3139481, -0.11035755, -1.1951159), (0.9092928, 0.6913345, 0.4804732), (1.0478477, 0.6418978, 0.08692572), (-0.49363536, -1.1410439, -0.019021558), (-0.07515143, -0.039293207, -1.2351003), (-0.2376939, 1.1754743, -0.32635885), (-0.07434222, 0.7249582, 0.99806476), (0.52408534, 0.20359261, 1.1018707), (-1.1558156, 0.18673497, -0.4066183), (0.60709584, -0.77854943, 0.7449432), (1.1280929, -0.2085934, 0.47047934), (-1.0892924, -0.3787841, 0.456157), (0.7669068, 0.51249725, 0.83673525), (-0.0648393, -1.217666, 0.216717), (-0.122447714, -0.43903685, 1.142101), (-0.1522536, 0.5855868, -1.0729157), (-0.7811924, -0.77451015, -0.5564098), (0.94537246, 0.35959178, -0.70623016), (0.20385636, 0.36314726, -1.162766), (1.1293156, 0.01345098, -0.51727563), (0.19084452, -0.17226054, 1.2131449), (-0.7989434, -0.7604817, 0.55021995), (0.5074755, 0.92621005, 0.6412946), (-0.42543277, -0.3065375, -1.1119913), (0.6222001, -1.0459266, -0.2333361), (1.18063, 0.30375248, -0.19691095), (-0.11067726, -0.5528912, -1.0962636), (-0.5358469, -1.0505837, 0.36419272), (0.71472037, 0.98255926, 0.25186366), (-0.56242746, -0.67634934, -0.8804387), (0.68721837, 1.0131518, -0.15016614), (-0.20171323, -0.95081836, -0.7598066), (0.3274409, 1.1634111, 0.2557554), (-0.8494215, -0.318122, -0.8369962), (0.6095257, -0.30071124, 1.0330051), (-1.1077229, -0.22773474, -0.5036011), (0.34075856, 0.68890935, 0.95922184), (1.1066861, 0.30615887, 0.4575504), (-0.44568443, -1.0560997, -0.45789015), (0.7699832, 0.74320465, -0.6223836), (0.2652762, -0.6763982, 1.0063504), (-0.13629678, -1.2155704, -0.22609578), (-0.8274698, -0.46202096, 0.7961693), (0.63016474, 0.1795066, -1.0470287), (-0.09894079, 1.2193238, 0.1795015), (0.9196234, 0.064771146, 0.8206797), (-0.9446137, -0.7731031, 0.20272017), (-1.0434949, -0.5908399, -0.30717826), (0.98827827, 0.6795421, -0.31964043), (0.065146245, 0.28925782, 1.1984526), (0.22113127, 1.1981814, -0.19334997), (-0.45524994, 0.42894292, 1.0746007), (0.6705306, -0.38079083, -0.9623923), (-1.1817973, -0.36766884, 0.019739542), (-0.465825, 0.81581664, 0.81172544), (0.18811655, -0.82208455, -0.9168939), (-1.1378229, 0.059467554, 0.4798095), (0.70934945, -0.97025603, 0.29685748), (-0.85037065, 0.9025555, 0.024279922), (0.36183953, -1.1736124, 0.14378133), (-0.8582047, 0.3489539, 0.83412576), (0.6482508, -0.79910654, -0.6849852), (-0.4969157, 1.0505732, 0.42666113), (1.2281213, 0.04262978, 0.13373494), (-0.74608403, 0.66946316, -0.72283894), (0.9904129, -0.6813636, 0.33227536), (-0.4903923, 1.1488688, 0.0046815393), (0.20900664, -1.1953506, -0.2817154), (-0.116471976, -0.82624924, 0.9073235), (-1.2396139, 0.06842315, 0.009214027), (-0.82469904, 0.7487149, 0.54770154), (-0.6457022, 0.9762825, -0.42020312), (0.94227326, -0.782518, -0.1922773), (-1.1191404, 0.53579885, -0.059149053), (1.1591002, -0.4624511, 0.042117383), (-1.0809524, 0.49363595, 0.3501846)], - } - color3f[] primvars:displayColor ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor.timeSamples = { - 4: [(1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)], - 5: [(1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)], - 6: [(1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)], - } - int[] primvars:displayColor:indices = None - float[] widths ( - interpolation = "vertex" - ) - float[] widths.timeSamples = { - 4: [0.04172318, 0.00029251576, 0.081343226, 0.026238048, 0.00022482872, 0.018949378, 0.011619652, 0.06177759, 0.091621116, 0.05199168, 0.009368181, 0.0119826915, 0.09744946, 0.09223701, 0.01491077, 0.00862304, 0.08047523, 0.086910784, 0.08762624, 0.002495134, 0.074814476, 0.03745625, 0.0169585, 0.035533644, 0.067235015, 0.09425061, 0.060025204, 0.039106797, 0.08550682, 0.005255854, 0.09929136, 0.0722306, 0.09501713, 0.093023956, 0.05721128, 0.09952482, 0.021738088, 0.09381942, 0.033784438, 0.09948045, 0.028117776, 0.021284902, 0.079645276, 0.03431281, 0.0582495, 0.086238384, 0.08141068, 0.016465975, 0.06494167, 0.039164163, 0.03589337, 0.030209256, 0.09353763, 0.09642974, 0.07435914, 0.0696752, 0.08771876, 0.044762373, 0.014282644, 0.007970464, 0.053426113, 0.00040833952, 0.0036474944, 0.08283776, 0.011082137, 0.04308448, 0.02185439, 0.012870312, 0.07063519, 0.06552845, 0.058672618, 0.0024151087, 0.07420248, 0.08690079, 0.038192857, 0.08617926, 0.08544312, 0.06783936, 0.07528448, 0.051347066, 0.03206375, 0.06306287, 0.057547808, 0.00009969473, 0.00777086, 0.040565707, 0.03948797, 0.026823176, 0.065427996, 0.06638756, 0.0012147427, 0.047290124, 0.07486918, 0.081005454, 0.05057571, 0.07140004, 0.03447945, 0.098138504, 0.053005993, 0.07432371], - 5: [0.04172318, 0.00029251576, 0.081343226, 0.026238048, 0.00022482872, 0.018949378, 0.011619652, 0.06177759, 0.091621116, 0.05199168, 0.009368181, 0.0119826915, 0.09744946, 0.09223701, 0.01491077, 0.00862304, 0.08047523, 0.086910784, 0.08762624, 0.002495134, 0.074814476, 0.03745625, 0.0169585, 0.035533644, 0.067235015, 0.09425061, 0.060025204, 0.039106797, 0.08550682, 0.005255854, 0.09929136, 0.0722306, 0.09501713, 0.093023956, 0.05721128, 0.09952482, 0.021738088, 0.09381942, 0.033784438, 0.09948045, 0.028117776, 0.021284902, 0.079645276, 0.03431281, 0.0582495, 0.086238384, 0.08141068, 0.016465975, 0.06494167, 0.039164163, 0.03589337, 0.030209256, 0.09353763, 0.09642974, 0.07435914, 0.0696752, 0.08771876, 0.044762373, 0.014282644, 0.007970464, 0.053426113, 0.00040833952, 0.0036474944, 0.08283776, 0.011082137, 0.04308448, 0.02185439, 0.012870312, 0.07063519, 0.06552845, 0.058672618, 0.0024151087, 0.07420248, 0.08690079, 0.038192857, 0.08617926, 0.08544312, 0.06783936, 0.07528448, 0.051347066, 0.03206375, 0.06306287, 0.057547808, 0.00009969473, 0.00777086, 0.040565707, 0.03948797, 0.026823176, 0.065427996, 0.06638756, 0.0012147427, 0.047290124, 0.07486918, 0.081005454, 0.05057571, 0.07140004, 0.03447945, 0.098138504, 0.053005993, 0.07432371], - 6: [0.04172318, 0.00029251576, 0.081343226, 0.026238048, 0.00022482872, 0.018949378, 0.011619652, 0.06177759, 0.091621116, 0.05199168, 0.009368181, 0.0119826915, 0.09744946, 0.09223701, 0.01491077, 0.00862304, 0.08047523, 0.086910784, 0.08762624, 0.002495134, 0.074814476, 0.03745625, 0.0169585, 0.035533644, 0.067235015, 0.09425061, 0.060025204, 0.039106797, 0.08550682, 0.005255854, 0.09929136, 0.0722306, 0.09501713, 0.093023956, 0.05721128, 0.09952482, 0.021738088, 0.09381942, 0.033784438, 0.09948045, 0.028117776, 0.021284902, 0.079645276, 0.03431281, 0.0582495, 0.086238384, 0.08141068, 0.016465975, 0.06494167, 0.039164163, 0.03589337, 0.030209256, 0.09353763, 0.09642974, 0.07435914, 0.0696752, 0.08771876, 0.044762373, 0.014282644, 0.007970464, 0.053426113, 0.00040833952, 0.0036474944, 0.08283776, 0.011082137, 0.04308448, 0.02185439, 0.012870312, 0.07063519, 0.06552845, 0.058672618, 0.0024151087, 0.07420248, 0.08690079, 0.038192857, 0.08617926, 0.08544312, 0.06783936, 0.07528448, 0.051347066, 0.03206375, 0.06306287, 0.057547808, 0.00009969473, 0.00777086, 0.040565707, 0.03948797, 0.026823176, 0.065427996, 0.06638756, 0.0012147427, 0.047290124, 0.07486918, 0.081005454, 0.05057571, 0.07140004, 0.03447945, 0.098138504, 0.053005993, 0.07432371], - } - } -} - -def Xform "points_velocity" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (7, 4, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Points "points_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - float3[] extent = [(-1.2230003, -1.2212715, -1.2351003), (1.2195488, 1.2231666, 1.2131449)] - rel material:binding = - point3f[] points = [(0.38730398, -0.887907, -0.7824701), (0.37888435, -0.56501573, -1.0314239), (-0.5264995, 1.099362, -0.24288183), (-0.89442015, -0.60337454, -0.61199725), (0.6784591, 0.84571725, 0.6030266), (-0.18982011, 1.0898279, -0.57317907), (0.03910296, -0.4077332, -1.1673785), (1.2195488, -0.10140892, -0.129891), (0.21425371, -0.30852768, 1.1811745), (-0.53159976, -0.80699706, -0.7703964), (-0.8131267, 0.061006084, -0.9281401), (-0.85945463, -0.6375627, 0.6272771), (0.5676166, -0.6398412, 0.90304875), (0.9633478, 0.5041866, 0.58908117), (0.21736181, 0.5633274, -1.0794611), (-0.4674736, 0.78629863, -0.8352455), (-0.07344386, -0.7496252, -0.97723436), (0.6265905, -0.17092133, 1.0531905), (0.090323724, -1.15859, -0.42948803), (-0.16568753, 0.99070287, 0.7228605), (0.6842804, 0.82939047, -0.61584353), (-0.75183094, -0.35732242, -0.91448784), (0.9354176, 0.07855371, 0.79988), (-1.0820671, -0.2209806, -0.5507492), (-0.09925218, 0.31763378, -1.1951159), (-1.0978217, 0.31550676, 0.4804732), (-1.1410375, 0.45612627, 0.08692572), (1.2097702, 0.28655407, -0.019021558), (0.07642955, -0.0367453, -1.2351003), (-0.800103, -0.8933495, -0.32635885), (-0.536653, -0.4930464, 0.99806476), (-0.47654638, 0.29836047, 1.1018707), (0.5413873, -1.0381134, -0.4066183), (0.2610739, 0.95212656, 0.7449432), (-0.50729084, 1.0289611, 0.47047934), (0.9549142, -0.64666396, 0.456157), (-0.8693383, 0.30830246, 0.83673525), (1.0148087, 0.6760756, 0.216717), (0.42512953, 0.16435228, 1.142101), (-0.37835386, -0.47216675, -1.0729157), (1.0879006, -0.1630946, -0.5564098), (-0.85347986, 0.54277766, -0.70623016), (-0.4129736, -0.053723045, -1.162766), (-0.6860053, 0.89717966, -0.51727563), (0.023971472, 0.25597012, 1.2131449), (1.0872693, -0.18571086, 0.55021995), (-1.0458416, -0.14701003, 0.6412946), (0.50007874, -0.15773255, -1.1119913), (0.46636364, 1.1240997, -0.2333361), (-0.94938254, 0.76473886, -0.19691095), (0.5093538, 0.2418612, -1.0962636), (1.1624988, 0.1986321, 0.36419272), (-1.214922, -0.014580868, 0.25186366), (0.8784175, -0.046430647, -0.8804387), (-1.2230003, -0.054916877, -0.15016614), (0.88275, 0.4068124, -0.7598066), (-1.1283305, -0.4331435, 0.2557554), (0.7628695, -0.49066153, -0.8369962), (-0.123398274, 0.66837245, 1.0330051), (0.84485775, -0.75175035, -0.5036011), (-0.75594825, -0.13876154, 0.95922184), (-0.9071001, 0.7040292, 0.4575504), (1.1130116, 0.2742014, -0.45789015), (-1.0561051, 0.17282727, -0.6223836), (0.38356853, 0.6170585, 1.0063504), (1.0558537, 0.6175447, -0.22609578), (0.8650891, -0.38702786, 0.7961693), (-0.5206652, 0.3977914, -1.0470287), (-0.9182125, -0.80834746, 0.1795015), (-0.6017659, 0.6984128, 0.8206797), (1.1844832, -0.29492894, 0.20272017), (1.0975087, -0.48316503, -0.30717826), (-1.1355951, 0.3858696, -0.31964043), (-0.2708108, -0.12072963, 1.1984526), (-1.0926381, -0.53914714, -0.19334997), (-0.07163029, -0.62138045, 1.0746007), (-0.09568428, 0.765152, -0.9623923), (1.0013137, -0.72745866, 0.019739542), (-0.37541258, -0.86117077, 0.81172544), (0.54648, 0.6423165, -0.9168939), (0.63264275, -0.9475972, 0.4798095), (0.35360166, 1.148712, 0.29685748), (-0.21501781, -1.2212715, 0.024279922), (0.7243833, 0.9917474, 0.14378133), (0.233415, -0.8965498, 0.83412576), (0.25294498, 0.99740624, -0.6849852), (-0.54499644, -1.0264542, 0.42666113), (-0.7684705, 0.958933, 0.13373494), (-0.09053223, -0.9983117, -0.72283894), (-0.046014287, 1.201273, 0.33227536), (-0.62768734, -1.0799967, 0.0046815393), (0.8331876, 0.882239, -0.2817154), (0.7319333, 0.4006585, 0.9073235), (0.6863256, -1.0345441, 0.009214027), (-0.1070535, -1.108712, 0.54770154), (-0.3964872, -1.1012977, -0.42020312), (0.06385075, 1.2231666, -0.1922773), (0.23966102, -1.2174228, -0.059149053), (-0.3223462, 1.2055982, 0.042117383), (0.25062457, -1.1616032, 0.3501846)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( - interpolation = "vertex" - ) - int[] primvars:displayColor:indices = None - vector3f[] velocities = [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)] ( - interpolation = "vertex" - ) - float[] widths = [0.04172318, 0.00029251576, 0.081343226, 0.026238048, 0.00022482872, 0.018949378, 0.011619652, 0.06177759, 0.091621116, 0.05199168, 0.009368181, 0.0119826915, 0.09744946, 0.09223701, 0.01491077, 0.00862304, 0.08047523, 0.086910784, 0.08762624, 0.002495134, 0.074814476, 0.03745625, 0.0169585, 0.035533644, 0.067235015, 0.09425061, 0.060025204, 0.039106797, 0.08550682, 0.005255854, 0.09929136, 0.0722306, 0.09501713, 0.093023956, 0.05721128, 0.09952482, 0.021738088, 0.09381942, 0.033784438, 0.09948045, 0.028117776, 0.021284902, 0.079645276, 0.03431281, 0.0582495, 0.086238384, 0.08141068, 0.016465975, 0.06494167, 0.039164163, 0.03589337, 0.030209256, 0.09353763, 0.09642974, 0.07435914, 0.0696752, 0.08771876, 0.044762373, 0.014282644, 0.007970464, 0.053426113, 0.00040833952, 0.0036474944, 0.08283776, 0.011082137, 0.04308448, 0.02185439, 0.012870312, 0.07063519, 0.06552845, 0.058672618, 0.0024151087, 0.07420248, 0.08690079, 0.038192857, 0.08617926, 0.08544312, 0.06783936, 0.07528448, 0.051347066, 0.03206375, 0.06306287, 0.057547808, 0.00009969473, 0.00777086, 0.040565707, 0.03948797, 0.026823176, 0.065427996, 0.06638756, 0.0012147427, 0.047290124, 0.07486918, 0.081005454, 0.05057571, 0.07140004, 0.03447945, 0.098138504, 0.053005993, 0.07432371] ( - interpolation = "vertex" - ) - } -} - -def Xform "points_acceleration" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (7, 1, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Points "points_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - vector3f[] accelerations = [(0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0), (0, 2500, 0)] ( - interpolation = "vertex" - ) - float3[] extent = [(-1.2230003, -1.2212715, -1.2351003), (1.2195488, 1.2231666, 1.2131449)] - rel material:binding = - point3f[] points = [(0.38730398, -0.887907, -0.7824701), (0.37888435, -0.56501573, -1.0314239), (-0.5264995, 1.099362, -0.24288183), (-0.89442015, -0.60337454, -0.61199725), (0.6784591, 0.84571725, 0.6030266), (-0.18982011, 1.0898279, -0.57317907), (0.03910296, -0.4077332, -1.1673785), (1.2195488, -0.10140892, -0.129891), (0.21425371, -0.30852768, 1.1811745), (-0.53159976, -0.80699706, -0.7703964), (-0.8131267, 0.061006084, -0.9281401), (-0.85945463, -0.6375627, 0.6272771), (0.5676166, -0.6398412, 0.90304875), (0.9633478, 0.5041866, 0.58908117), (0.21736181, 0.5633274, -1.0794611), (-0.4674736, 0.78629863, -0.8352455), (-0.07344386, -0.7496252, -0.97723436), (0.6265905, -0.17092133, 1.0531905), (0.090323724, -1.15859, -0.42948803), (-0.16568753, 0.99070287, 0.7228605), (0.6842804, 0.82939047, -0.61584353), (-0.75183094, -0.35732242, -0.91448784), (0.9354176, 0.07855371, 0.79988), (-1.0820671, -0.2209806, -0.5507492), (-0.09925218, 0.31763378, -1.1951159), (-1.0978217, 0.31550676, 0.4804732), (-1.1410375, 0.45612627, 0.08692572), (1.2097702, 0.28655407, -0.019021558), (0.07642955, -0.0367453, -1.2351003), (-0.800103, -0.8933495, -0.32635885), (-0.536653, -0.4930464, 0.99806476), (-0.47654638, 0.29836047, 1.1018707), (0.5413873, -1.0381134, -0.4066183), (0.2610739, 0.95212656, 0.7449432), (-0.50729084, 1.0289611, 0.47047934), (0.9549142, -0.64666396, 0.456157), (-0.8693383, 0.30830246, 0.83673525), (1.0148087, 0.6760756, 0.216717), (0.42512953, 0.16435228, 1.142101), (-0.37835386, -0.47216675, -1.0729157), (1.0879006, -0.1630946, -0.5564098), (-0.85347986, 0.54277766, -0.70623016), (-0.4129736, -0.053723045, -1.162766), (-0.6860053, 0.89717966, -0.51727563), (0.023971472, 0.25597012, 1.2131449), (1.0872693, -0.18571086, 0.55021995), (-1.0458416, -0.14701003, 0.6412946), (0.50007874, -0.15773255, -1.1119913), (0.46636364, 1.1240997, -0.2333361), (-0.94938254, 0.76473886, -0.19691095), (0.5093538, 0.2418612, -1.0962636), (1.1624988, 0.1986321, 0.36419272), (-1.214922, -0.014580868, 0.25186366), (0.8784175, -0.046430647, -0.8804387), (-1.2230003, -0.054916877, -0.15016614), (0.88275, 0.4068124, -0.7598066), (-1.1283305, -0.4331435, 0.2557554), (0.7628695, -0.49066153, -0.8369962), (-0.123398274, 0.66837245, 1.0330051), (0.84485775, -0.75175035, -0.5036011), (-0.75594825, -0.13876154, 0.95922184), (-0.9071001, 0.7040292, 0.4575504), (1.1130116, 0.2742014, -0.45789015), (-1.0561051, 0.17282727, -0.6223836), (0.38356853, 0.6170585, 1.0063504), (1.0558537, 0.6175447, -0.22609578), (0.8650891, -0.38702786, 0.7961693), (-0.5206652, 0.3977914, -1.0470287), (-0.9182125, -0.80834746, 0.1795015), (-0.6017659, 0.6984128, 0.8206797), (1.1844832, -0.29492894, 0.20272017), (1.0975087, -0.48316503, -0.30717826), (-1.1355951, 0.3858696, -0.31964043), (-0.2708108, -0.12072963, 1.1984526), (-1.0926381, -0.53914714, -0.19334997), (-0.07163029, -0.62138045, 1.0746007), (-0.09568428, 0.765152, -0.9623923), (1.0013137, -0.72745866, 0.019739542), (-0.37541258, -0.86117077, 0.81172544), (0.54648, 0.6423165, -0.9168939), (0.63264275, -0.9475972, 0.4798095), (0.35360166, 1.148712, 0.29685748), (-0.21501781, -1.2212715, 0.024279922), (0.7243833, 0.9917474, 0.14378133), (0.233415, -0.8965498, 0.83412576), (0.25294498, 0.99740624, -0.6849852), (-0.54499644, -1.0264542, 0.42666113), (-0.7684705, 0.958933, 0.13373494), (-0.09053223, -0.9983117, -0.72283894), (-0.046014287, 1.201273, 0.33227536), (-0.62768734, -1.0799967, 0.0046815393), (0.8331876, 0.882239, -0.2817154), (0.7319333, 0.4006585, 0.9073235), (0.6863256, -1.0345441, 0.009214027), (-0.1070535, -1.108712, 0.54770154), (-0.3964872, -1.1012977, -0.42020312), (0.06385075, 1.2231666, -0.1922773), (0.23966102, -1.2174228, -0.059149053), (-0.3223462, 1.2055982, 0.042117383), (0.25062457, -1.1616032, 0.3501846)] ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor = [(0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1)] ( - interpolation = "vertex" - ) - int[] primvars:displayColor:indices = None - vector3f[] velocities = [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)] ( - interpolation = "vertex" - ) - float[] widths = [0.04172318, 0.00029251576, 0.081343226, 0.026238048, 0.00022482872, 0.018949378, 0.011619652, 0.06177759, 0.091621116, 0.05199168, 0.009368181, 0.0119826915, 0.09744946, 0.09223701, 0.01491077, 0.00862304, 0.08047523, 0.086910784, 0.08762624, 0.002495134, 0.074814476, 0.03745625, 0.0169585, 0.035533644, 0.067235015, 0.09425061, 0.060025204, 0.039106797, 0.08550682, 0.005255854, 0.09929136, 0.0722306, 0.09501713, 0.093023956, 0.05721128, 0.09952482, 0.021738088, 0.09381942, 0.033784438, 0.09948045, 0.028117776, 0.021284902, 0.079645276, 0.03431281, 0.0582495, 0.086238384, 0.08141068, 0.016465975, 0.06494167, 0.039164163, 0.03589337, 0.030209256, 0.09353763, 0.09642974, 0.07435914, 0.0696752, 0.08771876, 0.044762373, 0.014282644, 0.007970464, 0.053426113, 0.00040833952, 0.0036474944, 0.08283776, 0.011082137, 0.04308448, 0.02185439, 0.012870312, 0.07063519, 0.06552845, 0.058672618, 0.0024151087, 0.07420248, 0.08690079, 0.038192857, 0.08617926, 0.08544312, 0.06783936, 0.07528448, 0.051347066, 0.03206375, 0.06306287, 0.057547808, 0.00009969473, 0.00777086, 0.040565707, 0.03948797, 0.026823176, 0.065427996, 0.06638756, 0.0012147427, 0.047290124, 0.07486918, 0.081005454, 0.05057571, 0.07140004, 0.03447945, 0.098138504, 0.053005993, 0.07432371] ( - interpolation = "vertex" - ) - } -} - -def Xform "points_hermite" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - matrix4d xformOp:transform:xform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (7, -2, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Points "points_0" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - float3[] extent.timeSamples = { - 4: [(-1.2280643, -1.2182348, -1.2351003), (1.2409871, 1.2375711, 1.2131449)], - 5: [(-1.2195488, -1.2231666, -1.2351003), (1.2230003, 1.2212715, 1.2131449)], - 6: [(-1.2396139, -1.217666, -1.2351003), (1.2281213, 1.2193238, 1.2131449)], - } - rel material:binding = - point3f[] points ( - interpolation = "vertex" - ) - point3f[] points.timeSamples = { - 4: [(0.480146, 0.8413341, -0.7824701), (0.2263611, 0.6415269, -1.0314239), (-0.5664156, -1.0793386, -0.24288183), (1.0184233, -0.35617703, -0.61199725), (-1.0835531, 0.038171828, 0.6030266), (-0.7600756, -0.8037671, -0.57317907), (0.3034456, 0.27512935, -1.1673785), (-0.6478883, 1.038183, -0.129891), (0.11920223, 0.35620892, 1.1811745), (0.9647083, 0.056394756, -0.7703964), (0.43727204, -0.6882513, -0.9281401), (1.0249214, -0.3077085, 0.6272771), (0.17349479, 0.83754694, 0.90304875), (-0.9801297, 0.47073212, 0.58908117), (-0.5815063, -0.16258621, -1.0794611), (-0.3507662, -0.84484327, -0.8352455), (0.64478725, 0.38933447, -0.97723436), (-0.23763669, 0.604449, 1.0531905), (0.8746824, 0.76512724, -0.42948803), (-0.6950493, -0.72515583, 0.7228605), (-1.0739466, 0.052599847, -0.61584353), (0.7359413, -0.38899797, -0.91448784), (-0.6222569, 0.7028322, 0.79988), (0.8241041, -0.7352239, -0.5507492), (-0.19526136, -0.2694721, -1.1951159), (0.40349326, -1.0686207, 0.4804732), (0.3166162, -1.1873381, 0.08692572), (-0.9530199, 0.7983797, -0.019021558), (-0.016243793, 0.0832336, -1.2351003), (1.194465, -0.107198, -0.32635885), (0.7160772, -0.1353684, 0.99806476), (0.045773566, -0.56037503, 1.1018707), (0.5084192, 1.0546513, -0.4066183), (-0.91929054, -0.360013, 0.7449432), (-0.5214695, -1.0218486, 0.47047934), (-0.052603483, 1.1520714, 0.456157), (0.27265662, -0.8811684, 0.83673525), (-1.148679, 0.40920815, 0.216717), (-0.38592643, 0.24250275, 1.142101), (0.60469294, -0.0209651, -1.0729157), (-0.51973, 0.96954024, -0.5564098), (0.07522723, -1.0086508, -0.70623016), (0.2899816, -0.29890472, -1.162766), (-0.3089836, -1.0863074, -0.51727563), (-0.21950985, -0.13383107, 1.2131449), (-0.50122404, 0.9825566, 0.55021995), (0.74315226, -0.750414, 0.6412946), (-0.17256638, 0.4951557, -1.1119913), (-1.1798823, -0.29828316, -0.2333361), (-0.045348883, -1.2182348, -0.19691095), (-0.49841315, 0.26367116, -1.0962636), (-0.85428077, 0.8130575, 0.36419272), (0.7380954, -0.96512336, 0.25186366), (-0.48799294, 0.73187155, -0.8804387), (0.7752575, -0.9474816, -0.15016614), (-0.85388803, 0.46434802, -0.7598066), (1.0218279, -0.64545375, 0.2557554), (-0.06282541, 0.9048599, -0.8369962), (-0.46196482, -0.4985352, 1.0330051), (0.09743357, 1.1266854, -0.5036011), (0.56321186, -0.52297693, 0.95922184), (-0.021966875, -1.148044, 0.4575504), (-0.88526595, 0.72820693, -0.45789015), (0.4929179, -0.94987327, -0.6223836), (-0.7239512, -0.061486483, 1.0063504), (-1.1263037, 0.47710437, -0.22609578), (-0.20701239, 0.9248327, 0.7961693), (-0.007548094, -0.6551895, -1.0470287), (1.1969485, -0.2526938, 0.1795015), (-0.20002577, -0.89994013, 0.8206797), (-0.47180307, 1.125782, 0.20272017), (-0.2689168, 1.1686134, -0.30717826), (0.36967766, -1.1409688, -0.31964043), (0.25869203, -0.14488815, 1.1984526), (1.0854564, -0.5534638, -0.19334997), (0.54090613, 0.31410998, 1.0746007), (-0.55611044, -0.5341855, -0.9623923), (-0.015583634, 1.2375711, 0.019739542), (0.9147471, 0.21397999, 0.81172544), (-0.8416028, 0.053996056, -0.9168939), (0.38130236, 1.0736786, 0.4798095), (-1.1321899, -0.40338522, 0.29685748), (1.1074911, 0.55785316, 0.024279922), (-1.2280643, -0.012328982, 0.14378133), (0.57908475, 0.72314936, 0.83412576), (-0.95072496, -0.39360183, -0.6849852), (1.1486279, 0.17687094, 0.42666113), (-0.30917662, -1.1893313, 0.13373494), (0.85434335, 0.5243279, -0.72283894), (-0.9353885, -0.75513065, 0.33227536), (1.2409871, 0.14260197, 0.0046815393), (-1.2053406, 0.14036053, -0.2817154), (-0.7587812, 0.3471378, 0.9073235), (0.41889885, 1.168695, 0.009214027), (0.9527147, 0.57709384, 0.54770154), (1.1198256, 0.34066036, -0.42020312), (-1.0186266, -0.6801567, -0.1922773), (0.8325514, 0.9200075, -0.059149053), (-0.7736353, -0.97921526, 0.042117383), (0.7812531, 0.89542073, 0.3501846)], - 5: [(-0.38730398, 0.887907, -0.7824701), (-0.37888435, 0.56501573, -1.0314239), (0.5264995, -1.099362, -0.24288183), (0.89442015, 0.60337454, -0.61199725), (-0.6784591, -0.84571725, 0.6030266), (0.18982011, -1.0898279, -0.57317907), (-0.03910296, 0.4077332, -1.1673785), (-1.2195488, 0.10140892, -0.129891), (-0.21425371, 0.30852768, 1.1811745), (0.53159976, 0.80699706, -0.7703964), (0.8131267, -0.061006084, -0.9281401), (0.85945463, 0.6375627, 0.6272771), (-0.5676166, 0.6398412, 0.90304875), (-0.9633478, -0.5041866, 0.58908117), (-0.21736181, -0.5633274, -1.0794611), (0.4674736, -0.78629863, -0.8352455), (0.07344386, 0.7496252, -0.97723436), (-0.6265905, 0.17092133, 1.0531905), (-0.090323724, 1.15859, -0.42948803), (0.16568753, -0.99070287, 0.7228605), (-0.6842804, -0.82939047, -0.61584353), (0.75183094, 0.35732242, -0.91448784), (-0.9354176, -0.07855371, 0.79988), (1.0820671, 0.2209806, -0.5507492), (0.09925218, -0.31763378, -1.1951159), (1.0978217, -0.31550676, 0.4804732), (1.1410375, -0.45612627, 0.08692572), (-1.2097702, -0.28655407, -0.019021558), (-0.07642955, 0.0367453, -1.2351003), (0.800103, 0.8933495, -0.32635885), (0.536653, 0.4930464, 0.99806476), (0.47654638, -0.29836047, 1.1018707), (-0.5413873, 1.0381134, -0.4066183), (-0.2610739, -0.95212656, 0.7449432), (0.50729084, -1.0289611, 0.47047934), (-0.9549142, 0.64666396, 0.456157), (0.8693383, -0.30830246, 0.83673525), (-1.0148087, -0.6760756, 0.216717), (-0.42512953, -0.16435228, 1.142101), (0.37835386, 0.47216675, -1.0729157), (-1.0879006, 0.1630946, -0.5564098), (0.85347986, -0.54277766, -0.70623016), (0.4129736, 0.053723045, -1.162766), (0.6860053, -0.89717966, -0.51727563), (-0.023971472, -0.25597012, 1.2131449), (-1.0872693, 0.18571086, 0.55021995), (1.0458416, 0.14701003, 0.6412946), (-0.50007874, 0.15773255, -1.1119913), (-0.46636364, -1.1240997, -0.2333361), (0.94938254, -0.76473886, -0.19691095), (-0.5093538, -0.2418612, -1.0962636), (-1.1624988, -0.1986321, 0.36419272), (1.214922, 0.014580868, 0.25186366), (-0.8784175, 0.046430647, -0.8804387), (1.2230003, 0.054916877, -0.15016614), (-0.88275, -0.4068124, -0.7598066), (1.1283305, 0.4331435, 0.2557554), (-0.7628695, 0.49066153, -0.8369962), (0.123398274, -0.66837245, 1.0330051), (-0.84485775, 0.75175035, -0.5036011), (0.75594825, 0.13876154, 0.95922184), (0.9071001, -0.7040292, 0.4575504), (-1.1130116, -0.2742014, -0.45789015), (1.0561051, -0.17282727, -0.6223836), (-0.38356853, -0.6170585, 1.0063504), (-1.0558537, -0.6175447, -0.22609578), (-0.8650891, 0.38702786, 0.7961693), (0.5206652, -0.3977914, -1.0470287), (0.9182125, 0.80834746, 0.1795015), (0.6017659, -0.6984128, 0.8206797), (-1.1844832, 0.29492894, 0.20272017), (-1.0975087, 0.48316503, -0.30717826), (1.1355951, -0.3858696, -0.31964043), (0.2708108, 0.12072963, 1.1984526), (1.0926381, 0.53914714, -0.19334997), (0.07163029, 0.62138045, 1.0746007), (0.09568428, -0.765152, -0.9623923), (-1.0013137, 0.72745866, 0.019739542), (0.37541258, 0.86117077, 0.81172544), (-0.54648, -0.6423165, -0.9168939), (-0.63264275, 0.9475972, 0.4798095), (-0.35360166, -1.148712, 0.29685748), (0.21501781, 1.2212715, 0.024279922), (-0.7243833, -0.9917474, 0.14378133), (-0.233415, 0.8965498, 0.83412576), (-0.25294498, -0.99740624, -0.6849852), (0.54499644, 1.0264542, 0.42666113), (0.7684705, -0.958933, 0.13373494), (0.09053223, 0.9983117, -0.72283894), (0.046014287, -1.201273, 0.33227536), (0.62768734, 1.0799967, 0.0046815393), (-0.8331876, -0.882239, -0.2817154), (-0.7319333, -0.4006585, 0.9073235), (-0.6863256, 1.0345441, 0.009214027), (0.1070535, 1.108712, 0.54770154), (0.3964872, 1.1012977, -0.42020312), (-0.06385075, -1.2231666, -0.1922773), (-0.23966102, 1.2174228, -0.059149053), (0.3223462, -1.2055982, 0.042117383), (-0.25062457, 1.1616032, 0.3501846)], - 6: [(-0.9432879, 0.22043395, -0.7824701), (-0.6794348, 0.034124553, -1.0314239), (1.1960089, -0.2352894, -0.24288183), (0.051133156, 1.0776982, -0.61199725), (0.27224493, -1.049489, 0.6030266), (0.9870644, -0.49946, -0.57317907), (-0.35020533, 0.21244207, -1.1673785), (-0.8104603, -0.91691715, -0.129891), (-0.37540895, 0.012731537, 1.1811745), (-0.32901606, 0.90862036, -0.7703964), (0.535073, 0.61529964, -0.9281401), (0.0028229952, 1.0701123, 0.6272771), (-0.8522563, -0.07241845, 0.90304875), (-0.17185113, -1.0736434, 0.58908117), (0.3215829, -0.5110463, -1.0794611), (0.90977585, -0.09542048, -0.8352455), (-0.5569623, 0.50707483, -0.97723436), (-0.51164645, -0.40005952, 1.0531905), (-0.9826925, 0.6203262, -0.42948803), (0.89318013, -0.45953655, 0.7228605), (0.2556773, -1.0443933, -0.61584353), (0.1631056, 0.8162877, -0.91448784), (-0.49632478, -0.7967675, 0.79988), (0.46984255, 0.99947464, -0.5507492), (0.3139481, -0.11035755, -1.1951159), (0.9092928, 0.6913345, 0.4804732), (1.0478477, 0.6418978, 0.08692572), (-0.49363536, -1.1410439, -0.019021558), (-0.07515143, -0.039293207, -1.2351003), (-0.2376939, 1.1754743, -0.32635885), (-0.07434222, 0.7249582, 0.99806476), (0.52408534, 0.20359261, 1.1018707), (-1.1558156, 0.18673497, -0.4066183), (0.60709584, -0.77854943, 0.7449432), (1.1280929, -0.2085934, 0.47047934), (-1.0892924, -0.3787841, 0.456157), (0.7669068, 0.51249725, 0.83673525), (-0.0648393, -1.217666, 0.216717), (-0.122447714, -0.43903685, 1.142101), (-0.1522536, 0.5855868, -1.0729157), (-0.7811924, -0.77451015, -0.5564098), (0.94537246, 0.35959178, -0.70623016), (0.20385636, 0.36314726, -1.162766), (1.1293156, 0.01345098, -0.51727563), (0.19084452, -0.17226054, 1.2131449), (-0.7989434, -0.7604817, 0.55021995), (0.5074755, 0.92621005, 0.6412946), (-0.42543277, -0.3065375, -1.1119913), (0.6222001, -1.0459266, -0.2333361), (1.18063, 0.30375248, -0.19691095), (-0.11067726, -0.5528912, -1.0962636), (-0.5358469, -1.0505837, 0.36419272), (0.71472037, 0.98255926, 0.25186366), (-0.56242746, -0.67634934, -0.8804387), (0.68721837, 1.0131518, -0.15016614), (-0.20171323, -0.95081836, -0.7598066), (0.3274409, 1.1634111, 0.2557554), (-0.8494215, -0.318122, -0.8369962), (0.6095257, -0.30071124, 1.0330051), (-1.1077229, -0.22773474, -0.5036011), (0.34075856, 0.68890935, 0.95922184), (1.1066861, 0.30615887, 0.4575504), (-0.44568443, -1.0560997, -0.45789015), (0.7699832, 0.74320465, -0.6223836), (0.2652762, -0.6763982, 1.0063504), (-0.13629678, -1.2155704, -0.22609578), (-0.8274698, -0.46202096, 0.7961693), (0.63016474, 0.1795066, -1.0470287), (-0.09894079, 1.2193238, 0.1795015), (0.9196234, 0.064771146, 0.8206797), (-0.9446137, -0.7731031, 0.20272017), (-1.0434949, -0.5908399, -0.30717826), (0.98827827, 0.6795421, -0.31964043), (0.065146245, 0.28925782, 1.1984526), (0.22113127, 1.1981814, -0.19334997), (-0.45524994, 0.42894292, 1.0746007), (0.6705306, -0.38079083, -0.9623923), (-1.1817973, -0.36766884, 0.019739542), (-0.465825, 0.81581664, 0.81172544), (0.18811655, -0.82208455, -0.9168939), (-1.1378229, 0.059467554, 0.4798095), (0.70934945, -0.97025603, 0.29685748), (-0.85037065, 0.9025555, 0.024279922), (0.36183953, -1.1736124, 0.14378133), (-0.8582047, 0.3489539, 0.83412576), (0.6482508, -0.79910654, -0.6849852), (-0.4969157, 1.0505732, 0.42666113), (1.2281213, 0.04262978, 0.13373494), (-0.74608403, 0.66946316, -0.72283894), (0.9904129, -0.6813636, 0.33227536), (-0.4903923, 1.1488688, 0.0046815393), (0.20900664, -1.1953506, -0.2817154), (-0.116471976, -0.82624924, 0.9073235), (-1.2396139, 0.06842315, 0.009214027), (-0.82469904, 0.7487149, 0.54770154), (-0.6457022, 0.9762825, -0.42020312), (0.94227326, -0.782518, -0.1922773), (-1.1191404, 0.53579885, -0.059149053), (1.1591002, -0.4624511, 0.042117383), (-1.0809524, 0.49363595, 0.3501846)], - } - color3f[] primvars:displayColor ( - interpolation = "vertex" - ) - color3f[] primvars:displayColor.timeSamples = { - 4: [(1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1)], - 5: [(1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1)], - 6: [(1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1), (1, 0, 1)], - } - int[] primvars:displayColor:indices = None - vector3f[] velocities ( - interpolation = "vertex" - ) - vector3f[] velocities.timeSamples = { - 4: [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)], - 5: [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)], - 6: [(100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0), (100, 0, 0)], - } - float[] widths ( - interpolation = "vertex" - ) - float[] widths.timeSamples = { - 4: [0.04172318, 0.00029251576, 0.081343226, 0.026238048, 0.00022482872, 0.018949378, 0.011619652, 0.06177759, 0.091621116, 0.05199168, 0.009368181, 0.0119826915, 0.09744946, 0.09223701, 0.01491077, 0.00862304, 0.08047523, 0.086910784, 0.08762624, 0.002495134, 0.074814476, 0.03745625, 0.0169585, 0.035533644, 0.067235015, 0.09425061, 0.060025204, 0.039106797, 0.08550682, 0.005255854, 0.09929136, 0.0722306, 0.09501713, 0.093023956, 0.05721128, 0.09952482, 0.021738088, 0.09381942, 0.033784438, 0.09948045, 0.028117776, 0.021284902, 0.079645276, 0.03431281, 0.0582495, 0.086238384, 0.08141068, 0.016465975, 0.06494167, 0.039164163, 0.03589337, 0.030209256, 0.09353763, 0.09642974, 0.07435914, 0.0696752, 0.08771876, 0.044762373, 0.014282644, 0.007970464, 0.053426113, 0.00040833952, 0.0036474944, 0.08283776, 0.011082137, 0.04308448, 0.02185439, 0.012870312, 0.07063519, 0.06552845, 0.058672618, 0.0024151087, 0.07420248, 0.08690079, 0.038192857, 0.08617926, 0.08544312, 0.06783936, 0.07528448, 0.051347066, 0.03206375, 0.06306287, 0.057547808, 0.00009969473, 0.00777086, 0.040565707, 0.03948797, 0.026823176, 0.065427996, 0.06638756, 0.0012147427, 0.047290124, 0.07486918, 0.081005454, 0.05057571, 0.07140004, 0.03447945, 0.098138504, 0.053005993, 0.07432371], - 5: [0.04172318, 0.00029251576, 0.081343226, 0.026238048, 0.00022482872, 0.018949378, 0.011619652, 0.06177759, 0.091621116, 0.05199168, 0.009368181, 0.0119826915, 0.09744946, 0.09223701, 0.01491077, 0.00862304, 0.08047523, 0.086910784, 0.08762624, 0.002495134, 0.074814476, 0.03745625, 0.0169585, 0.035533644, 0.067235015, 0.09425061, 0.060025204, 0.039106797, 0.08550682, 0.005255854, 0.09929136, 0.0722306, 0.09501713, 0.093023956, 0.05721128, 0.09952482, 0.021738088, 0.09381942, 0.033784438, 0.09948045, 0.028117776, 0.021284902, 0.079645276, 0.03431281, 0.0582495, 0.086238384, 0.08141068, 0.016465975, 0.06494167, 0.039164163, 0.03589337, 0.030209256, 0.09353763, 0.09642974, 0.07435914, 0.0696752, 0.08771876, 0.044762373, 0.014282644, 0.007970464, 0.053426113, 0.00040833952, 0.0036474944, 0.08283776, 0.011082137, 0.04308448, 0.02185439, 0.012870312, 0.07063519, 0.06552845, 0.058672618, 0.0024151087, 0.07420248, 0.08690079, 0.038192857, 0.08617926, 0.08544312, 0.06783936, 0.07528448, 0.051347066, 0.03206375, 0.06306287, 0.057547808, 0.00009969473, 0.00777086, 0.040565707, 0.03948797, 0.026823176, 0.065427996, 0.06638756, 0.0012147427, 0.047290124, 0.07486918, 0.081005454, 0.05057571, 0.07140004, 0.03447945, 0.098138504, 0.053005993, 0.07432371], - 6: [0.04172318, 0.00029251576, 0.081343226, 0.026238048, 0.00022482872, 0.018949378, 0.011619652, 0.06177759, 0.091621116, 0.05199168, 0.009368181, 0.0119826915, 0.09744946, 0.09223701, 0.01491077, 0.00862304, 0.08047523, 0.086910784, 0.08762624, 0.002495134, 0.074814476, 0.03745625, 0.0169585, 0.035533644, 0.067235015, 0.09425061, 0.060025204, 0.039106797, 0.08550682, 0.005255854, 0.09929136, 0.0722306, 0.09501713, 0.093023956, 0.05721128, 0.09952482, 0.021738088, 0.09381942, 0.033784438, 0.09948045, 0.028117776, 0.021284902, 0.079645276, 0.03431281, 0.0582495, 0.086238384, 0.08141068, 0.016465975, 0.06494167, 0.039164163, 0.03589337, 0.030209256, 0.09353763, 0.09642974, 0.07435914, 0.0696752, 0.08771876, 0.044762373, 0.014282644, 0.007970464, 0.053426113, 0.00040833952, 0.0036474944, 0.08283776, 0.011082137, 0.04308448, 0.02185439, 0.012870312, 0.07063519, 0.06552845, 0.058672618, 0.0024151087, 0.07420248, 0.08690079, 0.038192857, 0.08617926, 0.08544312, 0.06783936, 0.07528448, 0.051347066, 0.03206375, 0.06306287, 0.057547808, 0.00009969473, 0.00777086, 0.040565707, 0.03948797, 0.026823176, 0.065427996, 0.06638756, 0.0012147427, 0.047290124, 0.07486918, 0.081005454, 0.05057571, 0.07140004, 0.03447945, 0.098138504, 0.053005993, 0.07432371], - } - } -} - -def Scope "materials" ( - prepend apiSchemas = ["MaterialBindingAPI"] -) -{ - rel material:binding = - - def Material "usdpreviewsurface1" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - rel material:binding = - token outputs:displacement.connect = - token outputs:surface.connect = - - def Shader "usdpreviewsurface1" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - uniform token info:id = "UsdPreviewSurface" - color3f inputs:diffuseColor = (0, 0, 0) - color3f inputs:emissiveColor = (1, 0, 0) - color3f inputs:emissiveColor.connect = - rel material:binding = - token outputs:displacement - token outputs:surface - } - - def Shader "usdprimvarreader1" ( - prepend apiSchemas = ["MaterialBindingAPI"] - ) - { - uniform token info:id = "UsdPrimvarReader_float3" - string inputs:varname = "displayColor" - rel material:binding = - vector3f outputs:result - } - } -} - -def Camera "camera" ( - prepend apiSchemas = ["HoudiniCameraPlateAPI", "HoudiniViewportGuideAPI"] -) -{ - float2 clippingRange = (1, 1000000) - float exposure = 0 - float focalLength.timeSamples = { - 4: 0.5, - 5: 0.5, - 6: 0.5, - } - float focusDistance = 5 - float fStop = 0 - float horizontalAperture.timeSamples = { - 4: 0.20955, - 5: 0.20955, - 6: 0.20955, - } - float horizontalApertureOffset.timeSamples = { - 4: 0, - 5: 0, - 6: 0, - } - asset houdini:backgroundimage = @@ - asset houdini:foregroundimage = @@ - float houdini:guidescale.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - bool houdini:inviewermenu = 1 - token projection = "perspective" - double shutter:close = 0.5 - double shutter:open = -0.5 - float verticalAperture.timeSamples = { - 4: 0.11787187, - 5: 0.11787187, - 6: 0.11787187, - } - float verticalApertureOffset.timeSamples = { - 4: 0, - 5: 0, - 6: 0, - } - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 4, 65, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - diff --git a/testSuite/motion_blur/geometry/test.xml b/testSuite/motion_blur/geometry/test.xml deleted file mode 100644 index 2966ba1..0000000 --- a/testSuite/motion_blur/geometry/test.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - Renders 5 types of motion blur for 3 geometry types. From left to right: mesh, curves, points. From top to bottom: node_xform, frame delta, velocity, acceleration, hermite. - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -camera camera -time 5 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - - error_threshold - 0.01 - - - - diff --git a/testSuite/motion_blur/light/scene.usd b/testSuite/motion_blur/light/scene.usd deleted file mode 100644 index a7ecb2d..0000000 --- a/testSuite/motion_blur/light/scene.usd +++ /dev/null @@ -1,248 +0,0 @@ -#usda 1.0 -( - defaultPrim = "ground" - endTimeCode = 6 - framesPerSecond = 24 - metersPerUnit = 1 - startTimeCode = 4 - timeCodesPerSecond = 24 - upAxis = "Y" -) - -def Xform "ground" ( - prepend apiSchemas = ["MaterialBindingAPI"] - kind = "component" -) -{ - rel material:binding = - custom bool moonray:mb - bool moonray:mb.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - custom int moonray:visible_in_camera - int moonray:visible_in_camera.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - matrix4d xformOp:transform:xform = ( (100, 0, 0, 0), (0, 100, 0, 0), (0, 0, 100, 0), (0, -1, 0, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform:xform"] - - def Mesh "mesh_0" - { - float3[] extent = [(-5, 0, -5), (5, 0, 5)] - int[] faceVertexCounts = [4] - int[] faceVertexIndices = [2, 3, 1, 0] - custom bool moonray:mb - bool moonray:mb.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - custom int moonray:visible_in_camera - int moonray:visible_in_camera.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - uniform token orientation = "rightHanded" - point3f[] points = [(-5, 0, -5), (5, 0, -5), (-5, 0, 5), (5, 0, 5)] ( - interpolation = "vertex" - ) - uniform token subdivisionScheme = "none" - } -} - -def Scope "materials" -{ - custom bool moonray:mb - bool moonray:mb.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - custom int moonray:visible_in_camera - int moonray:visible_in_camera.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - - def Material "usdpreviewsurfaceground" - { - custom bool moonray:mb - bool moonray:mb.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - custom int moonray:visible_in_camera - int moonray:visible_in_camera.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - token outputs:displacement.connect = - token outputs:surface.connect = - - def Shader "usdpreviewsurfaceground" - { - uniform token info:id = "UsdPreviewSurface" - custom bool moonray:mb - bool moonray:mb.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - custom int moonray:visible_in_camera - int moonray:visible_in_camera.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - token outputs:displacement - token outputs:surface - } - } - - def Material "usdpreviewsurface1" - { - custom bool moonray:mb - bool moonray:mb.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - custom int moonray:visible_in_camera - int moonray:visible_in_camera.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - token outputs:displacement.connect = - token outputs:surface.connect = - - def Shader "usdpreviewsurface1" - { - uniform token info:id = "UsdPreviewSurface" - color3f inputs:emissiveColor = (1, 1, 1) - custom bool moonray:mb - bool moonray:mb.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - custom int moonray:visible_in_camera - int moonray:visible_in_camera.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - token outputs:displacement - token outputs:surface - } - } -} - -def Xform "lights" -{ - custom bool moonray:mb - bool moonray:mb.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - custom int moonray:visible_in_camera - int moonray:visible_in_camera.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - - def RectLight "light1" ( - prepend apiSchemas = ["KarmaLightSettingsAPI", "HoudiniViewportGuideAPI"] - ) - { - bool houdini:inviewermenu = 1 - color3f inputs:color = (1, 1, 1) - float inputs:diffuse = 1 - bool inputs:enableColorTemperature = 0 - float inputs:exposure = 0 - float inputs:height = 1 - float inputs:intensity = 5 - bool inputs:normalize = 0 - float inputs:specular = 1 - asset inputs:texture:file = @@ - float inputs:width = 1 - bool karma:light:renderlightgeo = 1 - custom bool moonray:mb - bool moonray:mb.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - custom int moonray:visible_in_camera - int moonray:visible_in_camera.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - matrix4d xformOp:transform.timeSamples = { - 4: ( (0.4999999999999998, -0.8660254037844387, 0, 0), (-0.8660254037844387, -0.4999999999999998, 0, 0), (0, 0, -1, 0), (-1.666666666666667, 0, 0, 1) ), - 5: ( (0.9396926207859083, -0.3420201433256689, 0, 0), (-0.3420201433256689, -0.9396926207859083, 0, 0), (0, 0, -1, 0), (-0.5555555555555554, 0, 0, 1) ), - 6: ( (0.9396926207859084, 0.34202014332566866, 0, 0), (0.34202014332566866, -0.9396926207859084, 0, 0), (0, 0, -1, 0), (0.5555555555555554, 0, 0, 1) ), - } - uniform token[] xformOpOrder = ["xformOp:transform"] - } -} - -def Camera "camera" ( - prepend apiSchemas = ["HoudiniCameraPlateAPI", "HoudiniViewportGuideAPI"] -) -{ - float2 clippingRange = (1, 1000000) - float exposure = 0 - float focalLength.timeSamples = { - 4: 0.5, - 5: 0.5, - 6: 0.5, - } - float focusDistance = 5 - float fStop = 0 - float horizontalAperture.timeSamples = { - 4: 0.20955, - 5: 0.20955, - 6: 0.20955, - } - float horizontalApertureOffset.timeSamples = { - 4: 0, - 5: 0, - 6: 0, - } - asset houdini:backgroundimage = @@ - asset houdini:foregroundimage = @@ - float houdini:guidescale.timeSamples = { - 4: 1, - 5: 1, - 6: 1, - } - bool houdini:inviewermenu = 1 - token projection = "perspective" - double shutter:close = 0.25 - double shutter:open = -0.25 - float verticalAperture.timeSamples = { - 4: 0.11787187, - 5: 0.11787187, - 6: 0.11787187, - } - float verticalApertureOffset.timeSamples = { - 4: 0, - 5: 0, - 6: 0, - } - matrix4d xformOp:transform = ( (1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 10, 1) ) - uniform token[] xformOpOrder = ["xformOp:transform"] -} - diff --git a/testSuite/motion_blur/light/test.xml b/testSuite/motion_blur/light/test.xml deleted file mode 100644 index f5efe7c..0000000 --- a/testSuite/motion_blur/light/test.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Tests light transform motion blur - - - - hd_render - -in ${shot_dir}/scene.usd -out ${result} ${args} -res ${res} -camera camera -time 5 - - - ${oiiotool_path}oiiotool - ${shot_tmp_dir}/${result} ${shot_tmp_dir}/${canonical} -a --warn ${error_threshold} --fail ${error_threshold} --diff --absdiff -o ${shot_tmp_dir}/${diff} - - - - diff --git a/testSuite/quarantined.json b/testSuite/quarantined.json deleted file mode 100644 index 9397dff..0000000 --- a/testSuite/quarantined.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "quarantinedTests": { - "teal": { - "AVX": { - "scalar": { - }, - "scalar-hq": { - }, - "vectorized": { - }, - "vectorized-hq": { - } - } - }, - "pearl": { - "AVX": { - "scalar": { - }, - "scalar-hq": { - }, - "vectorized": { - }, - "vectorized-hq": { - } - } - }, - "cobalt": { - "AVX": { - "scalar": { - }, - "scalar-hq": { - }, - "vectorized": { - }, - "vectorized-hq": { - } - } - }, - "tank": { - "AVX": { - "scalar": { - }, - "scalar-hq": { - }, - "vectorized": { - }, - "vectorized-hq": { - } - } - } - }, - "unsupportedTests": { - "teal": { - "AVX": { - "scalar": { - }, - "scalar-hq": { - }, - "vectorized": { - }, - "vectorized-hq": { - } - } - }, - "pearl": { - "AVX": { - "scalar": { - }, - "scalar-hq": { - }, - "vectorized": { - }, - "vectorized-hq": { - } - } - }, - "cobalt": { - "AVX": { - "scalar": { - }, - "scalar-hq": { - }, - "vectorized": { - }, - "vectorized-hq": { - } - } - }, - "tank": { - "AVX": { - "scalar": { - }, - "scalar-hq": { - }, - "vectorized": { - }, - "vectorized-hq": { - } - } - } - } -}