From ecb089ea794bd65e516ddb58e1559fa538a32935 Mon Sep 17 00:00:00 2001 From: dev Date: Thu, 12 Jun 2025 22:55:04 +0200 Subject: [PATCH] Initial commit --- .env | 9 + .github/dependabot.yml | 11 + .github/workflows/lint.yml | 42 ++ .github/workflows/releases.yml | 44 ++ .gitignore | 4 + Dockerfile | 24 + README.md | 95 ++++ aperisolve/__init__.py | 0 aperisolve/analyzers/__init__.py | 0 aperisolve/analyzers/binwalk.py | 68 +++ aperisolve/analyzers/decomposer.py | 69 +++ aperisolve/analyzers/exiftool.py | 38 ++ aperisolve/analyzers/foremost.py | 57 +++ aperisolve/analyzers/outguess.py | 94 ++++ aperisolve/analyzers/steghide.py | 118 +++++ aperisolve/analyzers/strings.py | 40 ++ aperisolve/analyzers/template_analyzer.py | 74 +++ aperisolve/analyzers/utils.py | 46 ++ aperisolve/analyzers/zsteg.py | 36 ++ aperisolve/app.py | 245 +++++++++ aperisolve/cleanup.py | 50 ++ aperisolve/config.py | 8 + aperisolve/models.py | 61 +++ aperisolve/requirements.txt | 10 + aperisolve/static/css/aperisolve.css | 410 +++++++++++++++ .../static/img/cheatsheet/Angecryption.png | Bin 0 -> 285942 bytes .../static/img/cheatsheet/DeepSound.png | Bin 0 -> 71809 bytes .../static/img/cheatsheet/audacity_1.png | Bin 0 -> 58737 bytes .../static/img/cheatsheet/audacity_2.png | Bin 0 -> 86142 bytes .../static/img/cheatsheet/audacity_raw.png | Bin 0 -> 6435 bytes .../static/img/cheatsheet/gif_maker.png | Bin 0 -> 114503 bytes aperisolve/static/img/cheatsheet/piet.png | Bin 0 -> 5805 bytes .../static/img/cheatsheet/stegsolve_xor.png | Bin 0 -> 34670 bytes .../static/img/cheatsheet/stegsolve_xor2.png | Bin 0 -> 40704 bytes aperisolve/static/img/cheatsheet/tweakpng.png | Bin 0 -> 31404 bytes aperisolve/static/img/logo.svg | 38 ++ aperisolve/static/img/octo.png | Bin 0 -> 2381 bytes aperisolve/static/img/octo2.png | Bin 0 -> 6700 bytes aperisolve/static/js/aperisolve.js | 478 ++++++++++++++++++ aperisolve/static/js/background.js | 167 ++++++ aperisolve/static/js/jsm/stats.module.js | 162 ++++++ aperisolve/static/js/three.core.min.js | 6 + aperisolve/static/js/three.module.min.js | 6 + aperisolve/templates/base.html | 41 ++ aperisolve/templates/faq.html | 409 +++++++++++++++ aperisolve/templates/footer.html | 18 + aperisolve/templates/index.html | 38 ++ aperisolve/templates/result.html | 12 + aperisolve/templates/show.html | 10 + aperisolve/workers.py | 76 +++ aperisolve/wsgi.py | 6 + docker-compose-dev.yml | 76 +++ docker-compose.yml | 69 +++ 53 files changed, 3265 insertions(+) create mode 100644 .env create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/releases.yml create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 aperisolve/__init__.py create mode 100644 aperisolve/analyzers/__init__.py create mode 100644 aperisolve/analyzers/binwalk.py create mode 100644 aperisolve/analyzers/decomposer.py create mode 100644 aperisolve/analyzers/exiftool.py create mode 100644 aperisolve/analyzers/foremost.py create mode 100644 aperisolve/analyzers/outguess.py create mode 100644 aperisolve/analyzers/steghide.py create mode 100644 aperisolve/analyzers/strings.py create mode 100644 aperisolve/analyzers/template_analyzer.py create mode 100644 aperisolve/analyzers/utils.py create mode 100644 aperisolve/analyzers/zsteg.py create mode 100644 aperisolve/app.py create mode 100644 aperisolve/cleanup.py create mode 100644 aperisolve/config.py create mode 100644 aperisolve/models.py create mode 100644 aperisolve/requirements.txt create mode 100644 aperisolve/static/css/aperisolve.css create mode 100644 aperisolve/static/img/cheatsheet/Angecryption.png create mode 100644 aperisolve/static/img/cheatsheet/DeepSound.png create mode 100644 aperisolve/static/img/cheatsheet/audacity_1.png create mode 100644 aperisolve/static/img/cheatsheet/audacity_2.png create mode 100644 aperisolve/static/img/cheatsheet/audacity_raw.png create mode 100644 aperisolve/static/img/cheatsheet/gif_maker.png create mode 100644 aperisolve/static/img/cheatsheet/piet.png create mode 100644 aperisolve/static/img/cheatsheet/stegsolve_xor.png create mode 100644 aperisolve/static/img/cheatsheet/stegsolve_xor2.png create mode 100644 aperisolve/static/img/cheatsheet/tweakpng.png create mode 100644 aperisolve/static/img/logo.svg create mode 100644 aperisolve/static/img/octo.png create mode 100644 aperisolve/static/img/octo2.png create mode 100644 aperisolve/static/js/aperisolve.js create mode 100644 aperisolve/static/js/background.js create mode 100644 aperisolve/static/js/jsm/stats.module.js create mode 100644 aperisolve/static/js/three.core.min.js create mode 100644 aperisolve/static/js/three.module.min.js create mode 100644 aperisolve/templates/base.html create mode 100644 aperisolve/templates/faq.html create mode 100644 aperisolve/templates/footer.html create mode 100644 aperisolve/templates/index.html create mode 100644 aperisolve/templates/result.html create mode 100644 aperisolve/templates/show.html create mode 100644 aperisolve/workers.py create mode 100644 aperisolve/wsgi.py create mode 100644 docker-compose-dev.yml create mode 100644 docker-compose.yml diff --git a/.env b/.env new file mode 100644 index 0000000..9048488 --- /dev/null +++ b/.env @@ -0,0 +1,9 @@ +MAX_PENDING_TIME=600 +MAX_STORE_TIME=259200 +FLASK_DEBUG=0 +FLASK_ENV=production +DB_URI=postgresql://aperiuser:aperipass@postgres:5432/aperisolve +RQ_DASHBOARD_REDIS_URL=redis://redis:6379/0 +POSTGRES_DB=aperisolve +POSTGRES_USER=aperiuser +POSTGRES_PASSWORD=aperipass \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..d0d56dc --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" \ No newline at end of file diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..6294c1e --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,42 @@ +name: Linters + +on: [push, pull_request] + +env: + FLAKE8_IGNORE: E203,E501,W503 + PYLINT_IGNORE: W0718,R0903,R0801 + MYPY_IGNORE: unused-awaitable + +permissions: + checks: write + contents: write + +jobs: + run-linters: + name: Run linters + runs-on: ubuntu-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.11 + + - name: Install Python dependencies + run: | + pip install isort black flake8 pylint mypy mypy-extensions + pip install -r aperisolve/requirements.txt + + - name: Run linters + uses: wearerequired/lint-action@v2 + with: + black: true + flake8: true + flake8_args: "--ignore=E203,E501,W503" + pylint: true + pylint_args: "--disable W0511,W0718,R0801,R0903,R0914" + mypy: true + mypy_args: "--disallow-any-generics --disallow-untyped-def --follow-imports skip --ignore-missing-imports --disable-error-code unused-awaitable" diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml new file mode 100644 index 0000000..6d780f8 --- /dev/null +++ b/.github/workflows/releases.yml @@ -0,0 +1,44 @@ +name: Docker Image CI + +on: + push: + tags: + - '*' + +jobs: + + docker-releases: + + runs-on: ubuntu-latest + steps: + - name: Get release version + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV + + - name: downcase username + run: echo "lower_actor=${GITHUB_ACTOR,,}" >> $GITHUB_ENV + + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Docker images + uses: docker/build-push-action@v6.9.0 + with: + context: ./ + push: true + tags: | + ghcr.io/${{ env.lower_actor }}/aperisolve:latest + ghcr.io/${{ env.lower_actor }}/aperisolve:${{ env.RELEASE_VERSION }} + \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa5b26a --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +# Python +__pycache__/ +.mypy_cache/ +results/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fb991f9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +FROM python:3.11-slim AS build + +WORKDIR / + +# Install dependencies +RUN apt-get update && apt-get install -y \ + zip \ + 7zip \ + binwalk \ + foremost \ + exiftool \ + steghide \ + ruby \ + binutils \ + outguess \ + pngcheck \ + && gem install zsteg \ + && apt-get clean + +COPY aperisolve/ /aperisolve/ + +RUN pip install --no-cache-dir -r /aperisolve/requirements.txt + +CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:5000", "aperisolve.wsgi:application"] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..afd2653 --- /dev/null +++ b/README.md @@ -0,0 +1,95 @@ +# Aperi'Solve + +[![Website](https://img.shields.io/website?url=https%3A%2F%2Faperisolve.com)](https://aperisolve.com/) +[![Rawsec's CyberSecurity Inventory](https://inventory.raw.pm/img/badges/Rawsec-inventoried-FF5050_flat.svg)](https://inventory.raw.pm/tools.html#Aperi'Solve) + +

+ +Try it now: https://www.aperisolve.com + +## What is Aperi'Solve? + +Aperi'Solve is a platform which performs steganalysis on images.
+ +The platform uses *layer analysis*, "*zsteg*", "*steghide*", "*outguess*", "*exiftool*", "*binwalk*", "*foremost*" and "*strings*" for deeper steganography analysis. + +

+ +### Why Aperi'Solve? + +Aperi'Solve has been created in order to have an "easy to use" platform which performs common steganalysis tests such as LSB or `steghide`. The platform is also a quick alternative for people who didn't manage to install tools like `zsteg` (ruby gem) properly. + +### Features + +Aperi'Solve is based on Python3 with Flask and PIL module, the platform supports the most common images formats like`.png`, `.jpg`, `.gif`, `.bmp`, `.jpeg`, `.jfif`, `.jpe`, `.tiff`... + +The platform allow you to: +- **Visualise each bit layer** of each channel for a given image (ie. LSB of Red channel). +- **Browse** and **Download each bit layer image**. +- **Visualise `zsteg` informations** such as text encoded on LSB +- **Download `steghide` files** using a defined password +- **Download `outguess` files** using a defined password +- **Visualise `exiftool` informations** such as geolocation or author +- **Visualise `binwalk` informations** +- **Download `binwalk` files** such as zip in png headers +- **Download `foremost` files** such as zip in png headers +- **Visualise `strings` output** + +## Installation + +Even if Aperi'Solve is available at the URL https://www.aperisolve.com/, you can set-up your own instance with the following command: + +```bash +git clone https://github.com/Zeecka/AperiSolve.git +cd aperisolve +docker compose up -d +``` + +> Default will run on http://localhost:5000/ + +## Developpment + +Aperi'Solve platform is a *Flask* web service (python 3.11+) with python workers performing analysis. +Jobs are stacked in a redis-queue, and images informations are stored in a postgresql database. +All services are well contained inside Docker containers. + +### Adding new analyzer + +Adding new analyzer is easy. + +1. Copy and addapt the [template_analyzer.py](aperisolve/analyzers/template_analyzer.py) file with you name, ie. "myanalyzer.py". +2. Add this analyzer to [workers.py](aperisolve/workers.py). + - Import your function `from .analyzers.analyzer import analyze_myanalyzer` + - Add the function to `analyzers` variables, like other analyzers. +3. Add your analyzer name to `TOOL_ORDER` in [aperisolve.js](aperisolve/static/js/aperisolve.js). + +### Tips + +Here is a batch of usefull commands. + +```bash +docker compose down -v # Remove volume containings results +docker compose -f docker-compose-dev.yml up # Start application in developpement mode +rm -rf aperisolve/results # Remove results from developpement mode +``` + +> Note, if you used [docker-compose-dev.yml](docker-compose-dev.yml), you must remove "results" when switching to [production docker](docker-compose.yml). + +### Code quality + +Python code follows the following linters: + +- Black +- Flake8 (ignoring E203,E501,W503) +- Pylint (ignoring W0718,R0903,R0801) +- Mypy (ignoring unused-awaitable) + +GitHub CI will alert in case of failure. + +## Roadmap + +- [ ] PngCheck +- [ ] Zsteg extract / --all --> **Download `zsteg` files** such as mp3 encoded on LSB +- [ ] Test on mobile +- [ ] i18n +- [ ] Rootless analyzers ? \ No newline at end of file diff --git a/aperisolve/__init__.py b/aperisolve/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/aperisolve/analyzers/__init__.py b/aperisolve/analyzers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/aperisolve/analyzers/binwalk.py b/aperisolve/analyzers/binwalk.py new file mode 100644 index 0000000..b7d0310 --- /dev/null +++ b/aperisolve/analyzers/binwalk.py @@ -0,0 +1,68 @@ +"""Binwalk Analyzer for Image Submissions.""" + +import shutil +import subprocess +from pathlib import Path + +from .utils import update_data + + +def analyze_binwalk(input_img: Path, output_dir: Path) -> None: + """Analyze an image submission using binwalk.""" + + image_name = input_img.name + extracted_dir = output_dir / f"_{image_name}.extracted" + + try: + stderr = "" + # Run binwalk + data = subprocess.run( + ["binwalk", "-e", "../" + str(image_name), "--run-as=root"], + cwd=output_dir, + capture_output=True, + text=True, + check=False, + ) + stderr += data.stderr + + zip_exist = False + if extracted_dir.exists(): + # Zip extracted files + zip_data = subprocess.run( + ["7z", "a", "../binwalk.7z", "*"], + cwd=extracted_dir, + capture_output=True, + text=True, + check=False, + ) + zip_exist = True + stderr += zip_data.stderr + + if len(stderr) > 0: + err = { + "binwalk": { + "status": "error", + "error": stderr, + } + } + update_data(output_dir, err) + return None + + # Remove the extracted directory + if extracted_dir.exists(): + shutil.rmtree(extracted_dir) + + output_data = { + "binwalk": { + "status": "ok", + "output": data.stdout.split("\n") if data else [], + } + } + if zip_exist: + output_data["binwalk"]["download"] = f"/download/{output_dir.name}/binwalk" + + update_data(output_dir, output_data) + + except Exception as e: + update_data(output_dir, {"binwalk": {"status": "error", "error": str(e)}}) + return None diff --git a/aperisolve/analyzers/decomposer.py b/aperisolve/analyzers/decomposer.py new file mode 100644 index 0000000..b923fed --- /dev/null +++ b/aperisolve/analyzers/decomposer.py @@ -0,0 +1,69 @@ +"""Bits Decomposer Analyzer for Image Submissions.""" + +from pathlib import Path + +import numpy as np +from PIL import Image + +from .utils import update_data + + +def analyze_decomposer(input_img: Path, output_dir: Path) -> None: + """Analyze an image submission using bits decomposition.""" + img = Image.open(input_img) + img_np = np.array(img) + + # Handle grayscale, RGB, RGBA, etc. + if len(img_np.shape) == 2: + channels = 1 + else: + channels = img_np.shape[2] + + if channels > 1: + channel_names = ["Red", "Green", "Blue", "Alpha"] + else: + channel_names = ["Grayscale"] + + image_json = {} + + # Add Superimposed RGB bit planes + if channels >= 3: + superimposed_json = [] + for bit in range(8): + bit_mask = 1 << bit + rgb_planes = [((img_np[..., c] & bit_mask) >> bit) * 255 for c in range(3)] + rgb_image = np.stack(rgb_planes, axis=-1).astype(np.uint8) + rgb_img = Image.fromarray(rgb_image, mode="RGB") + img_name = f"superimposed_bit_{bit}.png" + out_path = output_dir / img_name + dl_path = Path(output_dir.name) / img_name + superimposed_json.append("/image/" + str(dl_path)) + rgb_img.save(out_path) + + image_json["Superimposed"] = superimposed_json + + # Process individual channels + for c in range(channels): + channel_data = img_np[..., c] if channels > 1 else img_np + channel_label = channel_names[c] + channel_json = [] + for bit in range(8): + bit_mask = 1 << bit + bit_plane = ((channel_data & bit_mask) >> bit) * 255 + bit_img = Image.fromarray(bit_plane.astype(np.uint8), mode="L") + img_name = f"{channel_label}_bit_{bit}.png" + out_path = output_dir / img_name + dl_path = Path(output_dir.name) / img_name + channel_json.append("/image/" + str(dl_path)) + bit_img.save(out_path) + image_json[channel_label] = channel_json + + update_data( + output_dir, + { + "decomposer": { + "status": "ok", + "images": image_json, + } + }, + ) diff --git a/aperisolve/analyzers/exiftool.py b/aperisolve/analyzers/exiftool.py new file mode 100644 index 0000000..d9594ec --- /dev/null +++ b/aperisolve/analyzers/exiftool.py @@ -0,0 +1,38 @@ +"""Exiftool Analyzer for Image Submissions.""" + +import subprocess +from pathlib import Path + +from .utils import update_data + + +def analyze_exiftool(input_img: Path, output_dir: Path) -> None: + """Analyze an image submission using exiftool.""" + + try: + data = subprocess.run( + ["exiftool", input_img], capture_output=True, text=True, check=True + ) + + if data.stderr: + update_data( + output_dir, {"strings": {"status": "error", "error": data.stderr}} + ) + return + + metadata: dict[str, str] = {} + for line in data.stdout.split("\n"): + if ":" in line: + key, value = line.split(":", 1) + metadata[key.strip()] = value.strip() + + # exiftool_dir = output_dir / "exiftool" + # exiftool_dir.mkdir(parents=True, exist_ok=True) + # update_data(exiftool_dir, metadata, "data.json") + + update_data( + output_dir, + {"exiftool": {"status": "ok", "output": metadata}}, + ) + except Exception as e: + update_data(output_dir, {"exiftool": {"status": "error", "error": str(e)}}) diff --git a/aperisolve/analyzers/foremost.py b/aperisolve/analyzers/foremost.py new file mode 100644 index 0000000..ace1194 --- /dev/null +++ b/aperisolve/analyzers/foremost.py @@ -0,0 +1,57 @@ +"""Foremost Analyzer for Image Submissions.""" + +import shutil +import subprocess +from pathlib import Path + +from .utils import update_data + + +def analyze_foremost(input_img: Path, output_dir: Path) -> None: + """Analyze an image submission using foremost.""" + + try: + foremost_dir = output_dir / "foremost" + foremost_dir.mkdir(parents=True, exist_ok=True) + + stderr = "" + # Run foremost + data = subprocess.run( + ["foremost", "-o", foremost_dir, "-i", input_img], + capture_output=True, + text=True, + check=False, + ) + # Note: foremost use stderr as standard output for results :o) + # So we can't use it as error dectection : + # stderr += data.stderr + + # Zip extracted files + zip_data = subprocess.run( + ["7z", "a", "../foremost.7z", "*"], + cwd=foremost_dir, + capture_output=True, + text=True, + check=False, + ) + + stderr += zip_data.stderr + + # Remove the extracted directory + shutil.rmtree(foremost_dir) + + data_strings = data.stdout.split("\n") if data else [] + data_strings = [s for s in data_strings if s] + + update_data( + output_dir, + { + "foremost": { + "status": "ok", + "output": data_strings, + "download": f"/download/{output_dir.name}/foremost", + } + }, + ) + except Exception as e: + update_data(output_dir, {"foremost": {"status": "error", "error": str(e)}}) diff --git a/aperisolve/analyzers/outguess.py b/aperisolve/analyzers/outguess.py new file mode 100644 index 0000000..b33d4c0 --- /dev/null +++ b/aperisolve/analyzers/outguess.py @@ -0,0 +1,94 @@ +"""Outguess Analyzer for Image Submissions.""" + +import shutil +import subprocess +from pathlib import Path +from typing import Optional + +from .utils import update_data + + +def analyze_outguess( + input_img: Path, output_dir: Path, password: Optional[str] = None +) -> None: + """Analyze an image submission using stehide.""" + + image_name = input_img.name + try: + outguess_dir = output_dir / "outguess" + outguess_dir.mkdir(parents=True, exist_ok=True) + outguess_file = "outguess.data" + stderr = "" + cmd: list[str] + if password: + cmd = [ + "outguess", + "-k", + password, + "-r", + "../../" + str(image_name), + outguess_file, + ] + else: + cmd = ["outguess", "-r", "../../" + str(image_name), outguess_file] + + data = subprocess.run( + cmd, + cwd=outguess_dir, + capture_output=True, + text=True, + check=False, + ) + + if data.returncode != 0: + stderr += data.stderr + err = { + "outguess": { + "status": "error", + "error": stderr, + } + } + update_data(output_dir, err) + return None + + # Zip extracted files + zip_data = subprocess.run( + ["7z", "a", "../outguess.7z", "*"], + cwd=outguess_dir, + capture_output=True, + text=True, + check=False, + ) + + stderr += zip_data.stderr + + if len(stderr) > 0: + err = { + "outguess": { + "status": "error", + "error": stderr, + } + } + update_data(output_dir, err) + return None + + # Remove the extracted directory + shutil.rmtree(outguess_dir) + + data_strings = data.stderr.split("\n") if data else [] + data_strings = [s for s in data_strings if s] + + update_data( + output_dir, + { + "outguess": { + "status": "ok", + "output": data_strings, + "download": f"/download/{output_dir.name}/outguess", + } + }, + ) + + except Exception as e: + update_data(output_dir, {"outguess": {"status": "error", "error": str(e)}}) + return None diff --git a/aperisolve/analyzers/steghide.py b/aperisolve/analyzers/steghide.py new file mode 100644 index 0000000..a435723 --- /dev/null +++ b/aperisolve/analyzers/steghide.py @@ -0,0 +1,118 @@ +"""Steghide Analyzer for Image Submissions.""" + +import re +import shutil +import subprocess +from pathlib import Path +from typing import Optional + +from .utils import update_data + + +def analyze_steghide( + input_img: Path, output_dir: Path, password: Optional[str] = None +) -> None: + """Analyze an image submission using stehide.""" + + image_name = input_img.name + try: + stderr = "" + # Get embedded file information first + cmd: list[str] = ["steghide", "info", "../" + str(image_name)] + if password: + cmd += ["-p", password] + else: + cmd += ["-p", ""] + + data = subprocess.run( + cmd, + cwd=output_dir, + capture_output=True, + text=True, + check=False, + ) + + match = re.search(r'embedded file "([^"]+)"', data.stdout) + embedded_filename = match.group(1) if match else None + + # if bad file format or wrong password, raise an error + if data.returncode != 0 or embedded_filename is None: + stderr += data.stderr.replace(f'"../{image_name}" ', "") # hide file name + # the file format of the file \"../foobar.png\" is not supported. + # become + # the file format of the file is not supported. + err = { + "steghide": { + "status": "error", + "error": stderr, + } + } + update_data(output_dir, err) + return None + + # The passphrase is correct, we can extract the file + # prevent path traversal + embedded_file = output_dir / "steghide" / str(Path(embedded_filename).name) + extracted_dir = embedded_file.parent + extracted_dir.mkdir(parents=True, exist_ok=True) + + cmd_ext: list[str] = [ + "steghide", + "extract", + "-sf", + "../" + str(image_name), + "-xf", + str(embedded_filename), + ] + if password: + cmd_ext += ["-p", password] + else: + cmd_ext += ["-p", ""] + + data = subprocess.run( + cmd_ext, + cwd=output_dir, + capture_output=True, + text=True, + check=False, + ) + stderr += data.stderr + + # Zip extracted files + zip_data = subprocess.run( + ["7z", "a", "../steghide.7z", "*"], + cwd=extracted_dir, + capture_output=True, + text=True, + check=False, + ) + + stderr += zip_data.stderr + + if len(stderr) > 0: + err = { + "binwalk": { + "status": "error", + "error": stderr, + } + } + update_data(output_dir, err) + return None + + # Remove the extracted directory + shutil.rmtree(extracted_dir) + + update_data( + output_dir, + { + "steghide": { + "status": "ok", + "output": data.stdout.split("\n") if data else [], + "download": f"/download/{output_dir.name}/steghide", + } + }, + ) + + except Exception as e: + update_data(output_dir, {"steghide": {"status": "error", "error": str(e)}}) + return None diff --git a/aperisolve/analyzers/strings.py b/aperisolve/analyzers/strings.py new file mode 100644 index 0000000..20ff0e5 --- /dev/null +++ b/aperisolve/analyzers/strings.py @@ -0,0 +1,40 @@ +"""Strings Analyzer for Image Submissions.""" + +import subprocess +from pathlib import Path + +from .utils import update_data + + +def analyze_strings(input_img: Path, output_dir: Path) -> None: + """Analyze an image submission using strings.""" + + try: + data = subprocess.run( + ["strings", input_img], capture_output=True, text=True, check=False + ) + if data.stderr: + update_data( + output_dir, {"strings": {"status": "error", "error": data.stderr}} + ) + return + + # strings_dir = output_dir / "strings" + # strings_dir.mkdir(parents=True, exist_ok=True) + # with open(strings_dir / "strings.txt", "w", encoding="utf-8") as f: + # subprocess.run(["strings", input_img], stdout=f, check=True) + + data_strings = data.stdout.split("\n") if data else [] + data_strings = [s for s in data_strings if s] + + update_data( + output_dir, + { + "strings": { + "status": "ok", + "output": data_strings, + } + }, + ) + except Exception as e: + update_data(output_dir, {"strings": {"status": "error", "error": str(e)}}) diff --git a/aperisolve/analyzers/template_analyzer.py b/aperisolve/analyzers/template_analyzer.py new file mode 100644 index 0000000..b373d90 --- /dev/null +++ b/aperisolve/analyzers/template_analyzer.py @@ -0,0 +1,74 @@ +"""Custom Analyzer for Image Submissions.""" + +import shutil +import subprocess +from pathlib import Path + +from .utils import update_data + + +def analyze_myanalyzer(input_img: Path, output_dir: Path) -> None: + """Analyze an image submission using myanalyzer.""" + + image_name = input_img.name + + # Dir generated by the tool + extracted_dir = output_dir / "myanalyzer_output_dir" + + try: + stderr, stdout = "", "" + + # Run myanalyzer + data = subprocess.run( + ["myanalyzer", "-e", "../" + str(image_name)], + cwd=output_dir, + capture_output=True, + text=True, + check=False, + ) + + stderr += data.stderr + stdout += data.stdout + + if len(stderr) > 0: # Return error if error has been raised + err = { + "myanalyzer": { + "status": "error", + "error": stderr, + } + } + update_data(output_dir, err) + return None + + zip_exist = False + if extracted_dir.exists(): # If result file(s) exist, zip them + subprocess.run( + ["7z", "a", "../myanalyzer.7z", "*"], + cwd=extracted_dir, + capture_output=True, + text=True, + check=False, + ) + zip_exist = True + + if extracted_dir.exists(): # Remove the extracted directory + shutil.rmtree(extracted_dir) + + output = data.stdout.split("\n") if data else [] + output_data = { + "myanalyzer": { + "status": "ok", + "output": output, + } + } + + if zip_exist: + output_data["myanalyzer"][ + "download" + ] = f"/download/{output_dir.name}/myanalyzer" + + update_data(output_dir, output_data) + + except Exception as e: + update_data(output_dir, {"myanalyzer": {"status": "error", "error": str(e)}}) + return None diff --git a/aperisolve/analyzers/utils.py b/aperisolve/analyzers/utils.py new file mode 100644 index 0000000..5e60b9e --- /dev/null +++ b/aperisolve/analyzers/utils.py @@ -0,0 +1,46 @@ +"""Utility functions for analyzers modules.""" + +import fcntl +import json +import os +import threading +from pathlib import Path +from typing import Any + +_thread_lock = threading.Lock() + + +def update_data( + output_dir: Path, new_data: dict[Any, Any], json_filename: str = "results.json" +) -> None: + """Thread-safe and process-safe JSON update using lock file and atomic replace.""" + json_file = Path(output_dir) / json_filename + lock_file = json_file.with_suffix(json_file.suffix + ".lock") + tmp_file = json_file.with_suffix(json_file.suffix + ".tmp") + + json_file.parent.mkdir(parents=True, exist_ok=True) + + with _thread_lock: # synchronizes across threads + with open(lock_file, "w", encoding="utf-8") as lock: + fcntl.flock(lock, fcntl.LOCK_EX) # synchronizes across processes + + try: + # Read existing JSON + data: dict[Any, Any] = {} + if json_file.exists(): + try: + with open(json_file, "r", encoding="utf-8") as f: + data = json.load(f) + except json.JSONDecodeError: + data = {} + + # Update with new data + data.update(new_data) + + # Write safely to a temp file + with open(tmp_file, "w", encoding="utf-8") as f: + json.dump(data, f, sort_keys=False) + + os.replace(tmp_file, json_file) # ensures file write is atomic + finally: + fcntl.flock(lock, fcntl.LOCK_UN) diff --git a/aperisolve/analyzers/zsteg.py b/aperisolve/analyzers/zsteg.py new file mode 100644 index 0000000..fa2a9ce --- /dev/null +++ b/aperisolve/analyzers/zsteg.py @@ -0,0 +1,36 @@ +"""Zsteg Analyzer for Image Submissions.""" + +import subprocess +from pathlib import Path + +from .utils import update_data + + +def analyze_zsteg(input_img: Path, output_dir: Path) -> None: + """Analyze an image submission using zsteg.""" + + try: + data = subprocess.run( + ["zsteg", input_img], capture_output=True, text=True, check=False + ) + if data.stderr or "PNG::NotSupported" in data.stdout[:100]: + error_msg = data.stderr or data.stdout + update_data(output_dir, {"zsteg": {"status": "error", "error": error_msg}}) + return + + # zsteg_dir = output_dir / "zsteg" + # zsteg_dir.mkdir(parents=True, exist_ok=True) + # with open(zsteg_dir / "zsteg.txt", "w", encoding="utf-8") as f: + # subprocess.run(["zsteg", input_img], stdout=f, check=True) + + update_data( + output_dir, + { + "zsteg": { + "status": "ok", + "output": data.stdout.split("\n") if data else [], + } + }, + ) + except Exception as e: + update_data(output_dir, {"zsteg": {"status": "error", "error": str(e)}}) diff --git a/aperisolve/app.py b/aperisolve/app.py new file mode 100644 index 0000000..bf43b1f --- /dev/null +++ b/aperisolve/app.py @@ -0,0 +1,245 @@ +"""AperiSolve Flask application.""" + +import hashlib +import json +import os +import time +from datetime import datetime, timezone +from pathlib import Path +from typing import Optional + +from flask import Flask, Response, abort, jsonify, render_template, request, send_file +from redis import Redis +from rq import Queue + +from .cleanup import cleanup_old_entries +from .config import IMAGE_EXTENSIONS, RESULT_FOLDER, WORKER_FILES +from .models import Image, Submission, db, init_db + +app: Flask = Flask(__name__) +app.json.sort_keys = False # type: ignore +app.config["SQLALCHEMY_DATABASE_URI"] = os.environ.get("DB_URI") +app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False +RESULT_FOLDER.mkdir(parents=True, exist_ok=True) + + +db.init_app(app) +init_db(app) +redis_conn = Redis(host="redis", port=6379) +queue = Queue(connection=redis_conn) + + +@app.route("/") +def index() -> str: + """Render the main index page.""" + return render_template("index.html") + + +@app.route("/faq") +def faq() -> str: + """Render the FAQ page.""" + return render_template("faq.html") + + +@app.route("/show") +def show() -> str: + """Show all active submissions.""" + db_images = Image.query.all() + images = [] + for img in db_images: + last_sub = img.submissions[-1] + images.append({"file": f"/image/{img.hash}", "link": f"/{last_sub.hash}"}) + return render_template("show.html", images=images) + + +@app.route("/", methods=["GET"]) +def result_page(hash_val: str) -> str: + """Render the result page for a given submission hash.""" + submission = Submission.query.get_or_404(hash_val) # type: ignore + Image.query.get_or_404(submission.image_hash) # type: ignore + + return render_template("result.html", hash_val=hash_val) + + +@app.route("/upload", methods=["POST"]) +def upload_image() -> tuple[Response, int]: + """Handle image upload and initiate analysis.""" + + cleanup_old_entries() + + if "image" not in request.files: + return jsonify({"error": "No image provided"}), 400 + + image = request.files["image"] + password = request.form.get("password") + deep_analysis = request.form.get("deep") == "true" + + if image.filename is None or image.filename == "": + return jsonify({"error": "No image provided"}), 400 + + if ( + "." not in image.filename + or Path(image.filename).suffix.lower() not in IMAGE_EXTENSIONS + ): + return jsonify({"error": "Unsupported file type"}), 400 + + # Compute hashes and prepare submission + image_data = image.read() + img_hash = hashlib.md5(image_data).hexdigest() + image_name = img_hash + "." + image.filename.rsplit(".", maxsplit=1)[-1].lower() + + submission_data = ( + image_data + + image.filename.encode() + + (password.encode() if password else b"") + + (b"deep_analysis" if deep_analysis else b"") + ) + submission_hash = hashlib.md5(submission_data).hexdigest() + submission_path = RESULT_FOLDER / img_hash / submission_hash + + # If submission already exists, return submission hash + if submission_path.exists(): + submission: Submission = Submission.query.filter_by( + hash=submission_hash + ).first() + return jsonify({"submission_hash": submission.hash}), 200 + + # If image is new, create a new Image entry + new_img_path = RESULT_FOLDER / img_hash / image_name + if not new_img_path.parent.exists(): + new_img_path.parent.mkdir(parents=True, exist_ok=True) + with open(new_img_path, "wb") as f: # Write file to disk + f.write(image_data) + + new_img = Image( + file=str(new_img_path), + hash=img_hash, + size=len(image_data), + upload_count=0, + first_submission_date=datetime.now(timezone.utc), + last_submission_date=datetime.now(timezone.utc), + ) + db.session.add(new_img) + db.session.commit() + + sub_img = Image.query.filter_by(hash=img_hash).first() # type: ignore + sub_img.upload_count += 1 + db.session.commit() + + # Create new Submission entry + submission_path.mkdir(parents=True, exist_ok=True) + submission = Submission( + filename=image.filename, + password=password, + deep_analysis=deep_analysis, + hash=submission_hash, + status="pending", + date=time.time(), + image_hash=sub_img.hash, # type: ignore + ) + db.session.add(submission) + + db.session.commit() # Commit to save the new Image and Submission + # Start the analysis jobs + queue.enqueue("aperisolve.workers.analyze_image", submission.hash, job_timeout=300) + + return jsonify({"submission_hash": submission.hash}), 200 + + +@app.route("/status/", methods=["GET"]) +def get_status(hash_val: str) -> Response: + """Get the processing status of a submission.""" + submission = Submission.query.get_or_404(hash_val) # type: ignore + return jsonify({"status": submission.status}) # type: ignore + + +@app.route("/infos/", methods=["GET"]) +def get_infos(hash_val: str) -> Response: + """Get the metadata and information of a submission.""" + submission = Submission.query.get_or_404(hash_val) + image = Image.query.get_or_404(submission.image_hash) # type: ignore + names = [name for name in set(sub.filename for sub in image.submissions) if name] + passwords = [pwd for pwd in set(sub.password for sub in image.submissions) if pwd] + return jsonify( + { + "image_path": "image/" + str(Path(image.file).name), + "names": names, + "size": image.size, + "first_submission_date": image.first_submission_date, + "last_submission_date": image.last_submission_date, + "upload_count": image.upload_count, + "passwords": passwords, + } + ) # type: ignore + + +@app.route("/result/", methods=["GET"]) +def get_result(hash_val: str) -> tuple[Response, int]: + """Get the analysis results of a submission.""" + submission = Submission.query.get_or_404(hash_val) + image = Image.query.get_or_404(submission.image_hash) # type: ignore + + result_path = ( + RESULT_FOLDER / str(image.hash) / str(submission.hash) / "results.json" + ) + + if not result_path.exists(): + return jsonify({"error": "Results not ready yet..."}), 425 + + with open(result_path, "r", encoding="utf-8") as f: + results = json.load(f) + + return jsonify({"results": results}), 200 + + +@app.route("/download//") +def download_output(hash_val: str, tool: str) -> Response: + """Download the output of a specific analyzer for a given submission hash.""" + + submission = Submission.query.filter_by(hash=hash_val).first_or_404() + image = Image.query.get_or_404(submission.image_hash) # type: ignore + + output_dir = RESULT_FOLDER / str(image.hash) / str(submission.hash) + output_file = output_dir / f"{tool}.7z" + + if tool not in WORKER_FILES or not output_file.exists(): + abort(404, description="Tool output not found.") + + return send_file(output_file, as_attachment=True) + + +@app.route("/image/") +@app.route("/image//") +def get_image( + hash_val: Optional[str] = None, img_name: Optional[str] = None +) -> Response: + """ + Download the image with a specific name (usually ones generated with + decomposer) for a given submission hash. + """ + + if img_name is None: + return abort(404, description="Image not found or unsupported format") + + if hash_val is not None: + submission = Submission.query.filter_by(hash=hash_val).first_or_404() + image = Image.query.get_or_404(submission.image_hash) # type: ignore + + output_dir = RESULT_FOLDER / str(image.hash) / str(submission.hash) + output_file = output_dir / Path(img_name).name + else: + hash_val = img_name.split(".")[0] # Extract hash from the image name + image = Image.query.filter_by(hash=hash_val).first_or_404() + output_file = Path(image.file) # type: ignore + + if (not output_file.exists()) or ( + output_file.suffix.lower() not in IMAGE_EXTENSIONS + ): + return abort(404, description="Image not found or unsupported format") + + return send_file(output_file, as_attachment=True) + + +if __name__ == "__main__": + debug_mode = os.environ.get("FLASK_DEBUG", "false").lower() == "true" + app.run(host="0.0.0.0", port=5000, debug=debug_mode) diff --git a/aperisolve/cleanup.py b/aperisolve/cleanup.py new file mode 100644 index 0000000..be77581 --- /dev/null +++ b/aperisolve/cleanup.py @@ -0,0 +1,50 @@ +"""Cleanup old entries in the database and file system.""" + +import shutil +import time +from datetime import datetime, timezone +from os import getenv +from pathlib import Path + +from .models import Image, Submission, db + +RESULT_FOLDER = Path("./results") +MAX_PENDING_TIME = int(getenv("MAX_PENDING_TIME", "600")) # 10 minutes by default +MAX_STORE_TIME = int(getenv("MAX_STORE_TIME", "259200")) # 3 days by default + + +def cleanup_old_entries() -> None: + """Clean up old entries in the database and file system.""" + now = time.time() + for submission in Submission.query.all(): # type: ignore + if ( + submission.status in ("pending", "running") # type: ignore + and now - submission.date > MAX_PENDING_TIME # type: ignore + ): + # Processing took too long, delete + db.session.delete(submission) # type: ignore + elif submission.status == "done": # type: ignore + # Search for buggy results, delete + result_path = ( + RESULT_FOLDER / str(submission.image_hash) / str(submission.hash) + ) + result_file = result_path / "results.json" + if not result_file.exists(): + db.session.delete(submission) # type: ignore + shutil.rmtree(result_path) + + # Delete "old" images + for img in Image.query.all(): # type: ignore + if img.last_submission_date.tzinfo is None: + img_date = img.last_submission_date.replace(tzinfo=timezone.utc) + else: + img_date = img.last_submission_date + delay = datetime.now(timezone.utc) - img_date + + if delay.total_seconds() > MAX_STORE_TIME: + for s in img.submissions: + db.session.delete(s) # type: ignore + shutil.rmtree(RESULT_FOLDER / img.hash) # type: ignore + db.session.delete(img) + + db.session.commit() diff --git a/aperisolve/config.py b/aperisolve/config.py new file mode 100644 index 0000000..89f3350 --- /dev/null +++ b/aperisolve/config.py @@ -0,0 +1,8 @@ +"""AperiSolve configuration variables.""" + +from pathlib import Path + +IMAGE_EXTENSIONS = [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp", ".tiff"] +WORKER_FILES = ["binwalk", "foremost", "steghide", "zsteg"] + +RESULT_FOLDER = Path(__file__).parent.resolve() / "results" diff --git a/aperisolve/models.py b/aperisolve/models.py new file mode 100644 index 0000000..730bc63 --- /dev/null +++ b/aperisolve/models.py @@ -0,0 +1,61 @@ +"""This module defines the database models for the Aperisolve application.""" + +from datetime import datetime, timezone +from decimal import Decimal + +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from sqlalchemy import Boolean, Column, DateTime, Float, Integer, String + +db: SQLAlchemy = SQLAlchemy() + + +class Image(db.Model): # type: ignore + """Model representing an image file in the database.""" + + hash: Column[str] = Column( + String(64), primary_key=True, unique=True, nullable=False + ) + file: Column[str] = Column(String(128), unique=True, nullable=False) + size: Column[int] = Column(Integer, nullable=False) + first_submission_date: Column[datetime] = Column( + DateTime, nullable=False, default=lambda: datetime.now(timezone.utc) + ) + last_submission_date: Column[datetime] = Column( + DateTime, + nullable=False, + default=lambda: datetime.now(timezone.utc), + onupdate=lambda: datetime.now(timezone.utc), + ) + upload_count: Column[int] = Column(Integer) + submissions = db.relationship("Submission", backref="image", lazy=True) + + +class Submission(db.Model): # type: ignore + """Model representing a file submission for analysis. + Submissions are defined with a filename, password, image content, and analysis + option. + """ + + hash: Column[str] = Column( + String(128), primary_key=True, unique=True, nullable=False + ) + filename: Column[str] = Column(String(128), nullable=False) + password: Column[str] = Column(String(128)) + deep_analysis: Column[bool] = Column(Boolean, default=False) + status: Column[str] = Column(String(20), default="pending") + date: Column[Decimal] = Column( + Float, nullable=False, default=lambda: datetime.now(timezone.utc) + ) + + # Foreign key to Image + image_hash = Column(String, db.ForeignKey("image.hash"), nullable=False) + + +def init_db(app: Flask) -> None: + """Initialize the database with the given Flask app.""" + with app.app_context(): + if not db.engine.dialect.has_table(db.engine.connect(), "image"): + print("Creating database...") + db.create_all() + print("Database created successfully.") diff --git a/aperisolve/requirements.txt b/aperisolve/requirements.txt new file mode 100644 index 0000000..14446ca --- /dev/null +++ b/aperisolve/requirements.txt @@ -0,0 +1,10 @@ +Flask +Flask-SQLAlchemy +numpy +redis +rq +psycopg2-binary +types-Flask-SQLAlchemy +sqlalchemy-stubs +Pillow +gunicorn \ No newline at end of file diff --git a/aperisolve/static/css/aperisolve.css b/aperisolve/static/css/aperisolve.css new file mode 100644 index 0000000..79fd981 --- /dev/null +++ b/aperisolve/static/css/aperisolve.css @@ -0,0 +1,410 @@ +/* ======== Base Layout ======== */ +::selection { + background: #c9fbff; + color: black; +} + +:root { + --theme-dark-blue: #0b121f; + --theme-dark-blue-hover: #0d1931; + --theme-green: #9fef00; + --theme-green-shadow: #9fef0055; + --theme-green-shadow2: #9fef00aa; +} + +html { + --dark-bg: var(--theme-dark-blue); + --dark-bg-hover: var(--theme-dark-blue-hover); + --bs-progress-bar-bg: #f00 !important; +} + +body { + background-color: var(--dark-bg); + color: #e0e0e0; + font-family: 'Fira Code', monospace; +} + +/* ======== Typography ======== */ +h1, +h2, +h3, +h4, +h5, +h6, +strong, +.highlight { + color: var(--theme-green); + text-shadow: 0 0 5px var(--theme-green); +} + +a, +.text-accent { + color: var(--theme-green); + text-decoration: none; +} + +a:hover { + color: #ccff66; + text-shadow: 0 0 5px #ccff66; +} + +.title_link { + text-decoration: none; + color: inherit; +} + +/* ======== Background ======== */ + +#three-bg { + position: fixed; + top: 0; + left: 0; + z-index: 0; + width: 100%; + height: 100%; + pointer-events: none; + background-color: transparent; +} + +.container, +#result, +form { + position: relative; + z-index: 1; +} + +/* ======== Components ======== */ + +.card, +.form-control, +.table, +.border, +.card-hack { + background-color: var(--dark-bg); + border: 1px solid var(--theme-green) !important; + color: #e0e0e0; + box-shadow: 0 0 10px var(--theme-green-shadow); + border-radius: 0.5rem; +} + +.material-icons { + vertical-align: middle; +} + +#main-img-right span { + font-weight: bold; + color: var(--theme-green); +} + +#water-logo { + width: 70px; + display: inline; +} + +/* Buttons */ + +.btn, +.btn-primary, +.btn-hack { + background-color: var(--theme-green); + color: #000; + font-weight: bold; + border: none; + text-shadow: none; +} + +.btn:hover, +.btn-primary:hover, +.btn-hack:hover { + background-color: var(--theme-green); + box-shadow: 0 0 10px var(--theme-green-shadow2); +} + +/* Bootstrap contextual colors override */ +.text-success, +.bg-success { + color: var(--theme-green) !important; + background-color: #1e2b00 !important; +} + +.text-danger, +.bg-danger { + color: #ff4d4d !important; + background-color: #330000 !important; +} + +.text-warning, +.bg-warning { + color: #ffcc00 !important; + background-color: #332b00 !important; +} + +.text-info, +.bg-info { + color: #00e6e6 !important; + background-color: #002e2e !important; +} + +.analyzer { + margin-top: 25px; +} + +.analyzer h2+div { + margin-top: 15px; +} + +.analyzer h3 { + margin-top: 25px; +} + +/* ======== Forms & Inputs ======== */ +input, +textarea, +select, +pre { + border: 1px solid var(--theme-green); + color: #ffffff; +} + +input:focus, +textarea:focus, +select:focus, +pre { + outline: none; + box-shadow: 0 0 10px var(--theme-green); + background-color: var(--dark-bg-hover) !important; +} + + +textarea.form-control, +pre { + padding: 25px; +} + +.textarea-container { + display: block; +} + +.copy-icon { + position: absolute; + right: 10px; + margin-top: -40px; + cursor: pointer; + display: none; + color: #555; + background: rgba(255, 255, 255, 0.8); + border-radius: 4px; + padding: 4px; + transition: color 0.2s; +} + +.textarea-container:hover .copy-icon { + display: block; +} + +.copy-icon:hover { + color: #000; +} + +/* File drop zone */ +#drop-zone { + background-color: var(--dark-bg); + border: 2px dashed var(--theme-green); + color: var(--theme-green); + transition: all 0.3s ease; +} + +#drop-zone:hover, +#drop-zone.dragover { + background-color: var(--dark-bg-hover); + box-shadow: 0 0 10px var(--theme-green); +} + +#upload-form { + transition: height 0.4s ease, padding 0.4s ease, margin 0.4s ease; + overflow: hidden; +} + +/* ======== Tables ======== */ +table { + width: 100%; + background-color: var(--theme-dark-blue); + border-collapse: collapse; + color: white; +} + +th, +td { + border: 1px solid var(--theme-dark-blue); + padding: 0.75rem; +} + +th, +td:first-child { + color: var(--theme-green); +} + +tr:nth-child(even) { + background-color: rgba(0, 0, 0, 0.25); +} + +tr:first-child td { + border-top: 1px solid #ddd; +} + +td { + text-align: left; + border-bottom: 1px solid #ddd; +} + +/* ======== Images ======== */ +#result img { + width: 100%; + height: auto; + cursor: pointer; +} + +.results_img { + width: 25%; + display: inline-block; + padding: 10px; + box-sizing: border-box; +} + +/* ======== Modal ======== */ +#image-modal-container { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.9); + display: flex; + justify-content: center; + align-items: center; + opacity: 0; + visibility: hidden; + transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out; + z-index: 1000; +} + +#image-modal-container img { + width: 60%; + border: 2px solid var(--theme-green); + box-shadow: 0 0 20px var(--theme-green); + cursor: pointer; +} + +#image-modal-container.modal-visible { + opacity: 1; + visibility: visible; +} + +.browse-images { + display: inline-block; + padding: 10px; + width: 25%; +} + +/* ======== FAQ ======== */ + +#cheatsheet>div { + background-color: rgba(0, 0, 0, 0.5); + padding: 10px; + margin-top: 10px; + margin-bottom: 50px; +} + +.command { + background-color: var(--theme-dark-blue); + border: 3px solid var(--theme-green); + padding: 5px 10px; + margin-bottom: 25px; +} + +#cheatsheet ul { + list-style: none; + padding-left: 5px; + margin-left: 0; +} + +#cheatsheet li::before { + content: "\f054"; + font-family: "Font Awesome 6 Free"; + font-weight: 900; + position: absolute; + left: 0; + top: 0; + color: var(--theme-green); +} + +#cheatsheet li { + padding-left: 25px; +} + +#cheatsheet img, +#cheatsheet table { + margin-bottom: 15px; +} + +/* ======== Analyzer Blocks ======== */ + +.analyzer { + margin-bottom: 10px; +} + +#result-infos { + display: flex; +} + +#result-infos>div { + height: 100%; + width: 50%; + height: auto; + flex: 1 1 0; + width: 50%; + display: inline-block; + padding: 10px; + box-sizing: border-box; + vertical-align: top; +} + + +.a-exiftool .table-container { + max-height: 400px; + overflow-y: auto; +} + +.a-strings textarea { + height: 400px; +} + +/* ======== Footer ======== */ + +footer { + position: relative; + z-index: 1; + margin: 0 20px 20px 0; + justify-content: flex-end !important; +} +@media screen and (min-width: 1800px) { + footer { + position: fixed; + bottom: 0; + right: 0; + left: auto; + margin: 0 20px 20px 0; + } +} + + +footer a i { + font-size: 32px; +} + +/* ======== Utility ======== */ + +.glow-border { + border: 1px solid var(--theme-green); + box-shadow: 0 0 10px var(--theme-green-shadow); +} \ No newline at end of file diff --git a/aperisolve/static/img/cheatsheet/Angecryption.png b/aperisolve/static/img/cheatsheet/Angecryption.png new file mode 100644 index 0000000000000000000000000000000000000000..e013876b17c343f4652aa27a0575a8e310eb1ce9 GIT binary patch literal 285942 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 dM2J{320dWQO#nkaN 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%0D3CT)#UIwmRvzGbvgdYrq&DOV=>zPSFvJ%{(K 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
A&a)w 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%0AEtt|*hm(@#GVdV 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

eM*g*g2lGv#wi*^!fQYJQT(!sL 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 literal 0 HcmV?d00001 diff --git a/aperisolve/static/img/cheatsheet/DeepSound.png b/aperisolve/static/img/cheatsheet/DeepSound.png new file mode 100644 index 0000000000000000000000000000000000000000..fafa9f4f333660b55a3e186a6076329cf05fa42d GIT binary patch literal 71809 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

ZiS7X(at;LDvl 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�YJo0J1q&zX%sH$2Ypv-xmQIDu3XkeSm{z z+Za1;7`SV95I{%u0r@-zB58!??!AwfssWp1gRt8grrw{iuYb;$pa&jxrZ8^H*((2_ zFNrEA!)aV9Z6+CL`kT3d>=9%h*}L$T(XCoF35_25PsfLc{c)V;9zFQY%^+(tDM^yc zsJx%K$Klf`rf+Y=cara~DR ze4OpeC+?ys-hSG&F`UlAq{9uIJ|a0`KCeF42r;a0ztqjN)+FJwGF(E>Di+&OQrZw} zOrl1Z<$P_;+F2NbV{kg(15e#%GN9KFw$1PQ^PB0m*Tm7~t2$&ZtI7Ak>MjfpI=6>S z*yt`|nOO58MDChQveV`nhm6M%6`EmMi4nrmPRol!egt4xRtNs}c`!vY^Oitx>Y8nQ0%Q6PTe4%PopV3It^8~CibX*E5z*uJ`ROJ8q(b6T5Mal=_cThW7F~Kr$F`iRY zKh%hj_jl^kR?FBwc!`_H1t&2Ag5d@SVyKGli)QzCC}$cZPttO-m63K%1V8uz!Lngm z?yEju6(ni5hFo#`_a_=3f+?{mcn`mavQ7JZ_~-{%JO-u*)!#eP7ZFZ7?KYVEtYgC$ z%1nRM3V6Of%!opQ?|q^;Wp5pss(xkBgJJOz4Sp#&^R~7={f%~41+=gzt+(1`cUIqJ z6ouS<$Hif>OuP^XRVF^4ZpPOBVl@dV%u+;t!Vr~|P3e0v_uFhufor)t=&^m1H-(%y zYq00*V7fkMyPO#XZ|_Clq>u^$NxqWB&q%isJTBzW?UIr0{rd{NmMN4ocT7B*=#O>v zz~jS_1;}}*xEp6>IXyP}2l~YzDiY$K7Z6H|T$&J>*Rq&BKLs_tyI4u%*DCKGw zykOBUp&#}%5qSONLr%8l_kOmQZMMsuzGn!}1a3z0v0UkzZfIw}HE=I#=521N%vN;} z&?)ujh~DnakL3*@Nij;$!r>6lruo2FGu9Z?GkbFNQFTxk-*>X8y?J{U&id8vYUyaZ zXT%;NkvY81n}*lipF$qP*YG0NoS$q~gqnN*VQ+ovmNF)0%*0~&L+pu{Jrf-=o-U~k z2F>Je-Aw__ylt(~Y8P-Da7#VH+(4#5-%>fKBHMU8QvsN9w*{kf9v>7tZN#ks>)F8v z?-E3_dHReG&(GET8JZbZw3qo1oK}<%2_}ETtt_wL;sXwEx8KBXZpjFw`nnYz7pUsL zyK!zufFesmJd-I1aoe26IM8Y4k@cgK=yxEV7f+{`=3k`(kP2KMQ9l;jaZ+ze3Uf`qNZ?zI)+6VH_P9 zhlYKZ_;8i7&i3JS=L;M|{|dw(uF|VlK&n_Jie9tgHNl&RWWfAda!I8B(mK0+{0XIR z2v8o(%LVW7Gq`sC*mVcElAHdXc_asbm7|RuY}KBpaB1%+uK zDA5azUPzE|Y2gEW1Cl;K9Jy?rnw3=~ARu53$dx$)UM7#b%jCb2y5QMtx9a~Lt2@id zeN{;3)_Y3MSGJB#I+z&qX*ratj&ynvx5k<@gt#Ar^Ehv6pW*KG-@5(^9G9=X4!iJG8|`ele3m;!Jr3HUC+qTn)S)OcGVxpV$%0U zc=TogMzys%G^5chAJrnIGkjzfkg)4+(CsNKseI@dx9KgFVKs%CeqdgP%~HD>&|q1h zn66$s=a+&E-i~Cp43VkaSGBnA*?8jx6?@lha@zj-(0+eMw>4GTk|CH5 zK_&qFp3Fcjg57IzAMRDl*tcWfY*__FQRPcCE8pzQ*mEY&YQGwj3or#*F=PDh^}Zcf zQRZ7$?v*1qbask(tf$iD8*~U+!8bQKto{vP2NFz)P$E+BO?6~b6Yr^Z0x3WMw3Ir& zqWTUeTifw5F)=C8AlVUmAAEJXQz9Z+OHsPmvC77)6Z}FhfxrWpy%KGS4)>C|+aZiCk zOWtG+DX;9vtRnI>BR9f5+QZZH*J#M;%RfijOM%mfs|@~qV8DhzsGGD}T-%QHnhb{X zm_Hxv(aI;4df3i4ke|6c%45o_FuK*BI#lBh3k&OQ7=*14>(D-+b&0ix`QQ?LT8P@V z4^_(d^SVXf{{opGw3S#j&kC&u`AGml*chNtJO$LV^ba)eP%ka(^KT`!C(EbbiFz+8 zZK}V7CTgAJTY(9)nkxBd;CgYWl86gw9nBIPg>-g6gs7w7>ZdP+zGPdP9!S4um0R zJl50M+b&HXKbsOw(2l5s$a8y!yHRF@cR+3e=74$9DQVw_7adjH6V%KOOf|n21442J zJR=_Ru$KVW(Sw7W0z{G1oSHoRbb+__lrb5oSiQ9H$B!RCFTn5Ec)*S72zT)rBGdUC z)Qqt$STR|uDSdN$YdS(U1FsML94P)gXQC)?_+2bO3M}d4_hrWZCsGgC_sEkLejWd& z&7{&K4_U8LUvH{FUOYy4NxKhLPkj_o9UB?kaiGRW4OrEE`l>loE%3!bQ>B#y@Ih@1JPIL z7;>#WVA-e&*uj7HtgKM43;xcBLKn?N+isL=M5`}quU1zW$Mnb1=1z$1hd@e3>73H! zRoxYNX^gdtF@rYG%-fgvh6o-ifOn&3ylDS^(xRcFq7s*sWHtf{vGa158i22oUhLZd z=v@%ATT$lEh{!0VGyvTXE@Np9)Pw__015*d^cQO6vUqO*Cl&$fqD9;|GR<48@$!$u zX*enQy@W6l4cGXiq(WZc);-;PG)VIP1H=A>bo7ho;8sDww#m=LP=9_#Pg0qehn-ps zp}~W^gL!Ip=&YYKlrH{E5SK`zUQVxO@z}Qm{nY>sQN{KE{m`H&NOaM z;^;NXQkYU|#Kr)=LX9gXo?kwhSrfjdQY01=ERC;Q|5_{C;rmH{o>U|!z*1M7pqR39b|Qu%N28^O%;|K&6Vd!y(N~cWQ-oAk#b@a<0B*wjz-j;5^_J&6Mrt=$4h;$Y{9O%-Py&ELv}t#QY1- zM|he>>o&g5rO*Jvdm!mG-B@%b3JQu6Y*Kn}_d_hV$)6a6vK<2|pcxOD6c#(@9`^@O zKaKh%&F~h7Vr^%`tLhG-f(sBKV`#YV{{_{%0yGI@UJdjrlX4dq#pe06Ju?EV#89>| zYdd;1MAQt`f`yuU{CU3&B1dVS|1Gd>>YiC@EIIZSckDYBBY^&W?H|aoxqvqbT5c1Q zeR(KSjI~caqK!pLQ}v@<%KiC9icequeD>i(pFCiPV8hE_=9d?bCUoY(c*0Pj6OfJXumxz#$7#nKQp}}UW z08W4m?yvO7tM`0}jtB`t!v1q2_t0%nZjXX-R?9MzSND-P;Hh97d0GqGpbji)SiMn7 z(1`rZ4cJ9Y%n9l6A@$@0g+@mwTUTstxq=0qk-B9#+}qKw8>31#N-_+|KR)dP25e!7 zcV}R_h02e9M_`KJ2&n8jv#kTBHJ5mC*0>3_oR(L}mTgZeyUE|Q+Ls~FB0hX5*PdcT zNWAyA4&39kUj%1jXKq-51$RIVQ628b~{lZaDGd2)oP^g#KgOe7o<3Beh zkKk+qvR~H_PhRvL$J?xKj{t!8GzUp7a9!V?Ygqw33@Q!*KabzvcjHKVo7=*h^?a{w z3$=rP9v#9%NWV5Ndd465Xvmf4sR4}VB)hab`L>=XSm4h{*YH`#-Iet4Du27#@V1uJ zRJU8zVueg00LRps@))G`rKcEbC_B+^y2lPz8>T6ndPqt1PM%T09C;j_)ru} zMQ%TP_Uv0>I+ry)@cv$B*itRgg~lnQu<8RtK4jg%{bQNWl^lon1^Mx~{OY9h{hiO= z1X`}cYVh&2PJI3YVto2ARS?oWB=0lB!T<_XPE0IdaH!m_?W(^)afg zgitEQ24dg>eI~(x4-6pxTW^kE4-A1NnH&K^zY1uaup5~J7G22~DrbKj(fjOzOUC;e zxGh3bosa@z#>U=rMVhx3DyB1sJSEpS`GSLxli{^y;Xw9($fQ`>ZjBSp4Mwut&(*-U zj@D59yM}piV~Gqh4A*r(o1QOvC4=Z3Z!R9E3V3`4X*N|I0MZ2)4BDtq#Orlt)8M%3 z4S=y1#-;L&S#jsqqi$QF=!IX;_LLky+9OPz&@X&55WPOmJ; z#jNAG4?SYH98Z79=)&Y#6dAci zkReR2&oY4|WLCMPB!=RW?{%I}2QXZ%kAE{}8tp;lv#9RA*0smp06K|-)8&B&*xSnO zsZyHTYlG5&m)?yOf}TT|QTrUp`kxIk+dz+&diJR0FPLK5}T0PHpIVcFEqbXF%DLhnaUG+eOE(^Bdu^ghJ{tp?_%hl+)xb6HNAS?4! z>eErg!)bGOX`Y*^BjCLIGME0G-)*1WN#X^QHa)N?ocpf&%l{n1v;N;Pyxx;0e;+D~ z()YQoSd$N&`@{SR$W4g|m}aV1wP+9Jd}w&MTBRgZIZMD)*cAZUBAmdYy~N7%*x1-& zZA(D>CVq$oBNGmLmU-Ss^)1_I0oEmYx?@1fDHiH<{%@1+ObY2d_Ubz#<=R{T8_5A< zLmrt~jgB64gv%vjCE?TTkEogrd-_(FnGKVSH`wmj%mW=;^kHLiU?6`G7O`Nzt~&-8 z!qv}jb}IcQ1=_FqokQQFL~7Z$f1`Um-Q_q*2L#Xa0%*+NV|1Q3SHx?dhfmWUo}8#H z)y`sUyF=W{^xHI;0On;9?V)~Yz1ZZCbNe$Py?Rn$>@{GI`vmXqE-kTq`c&mJFj%kD zxjeoEk{du*&)*cgFjyLrlgD0pV3flpFRU44T5mN~#lr7>0U5-&3CtAq%2L_#Rq^={ z@sdqGn)#x18IPa%b8$W_fv;v9C<$ zTb8>~U21${sd1+eg|E9wlBq_4d`OA6v!q0f|FY3w0{&btP%w6jFyjazr^Gw!wW&IetY3%369L_O>!v0YxniT@*_@4A_#lb&q7^!3a@`{x^nwrHNFfTzlI5 zo7vEX_L!jkpUn`H@%-f7L>uteBV50KW!F`X?pC8gRwQMKK6Rg{c#-M~sUSb$dw4lO zcNb!o9Phd}BvA>31CIF@a(%TTdes%bpW6MqP&pDq7oIzxWyHQ9(H_ibekACH^?kemHf107O&$9^vv(0c_R842xL=2thez|1 zKbyxYWynQ<3Kw6L<*7>xmdXXB#WMk*$Be$@W(89Zo*|eW_?79HTsluY97BlA`H?Bk z+cHA8g)I?mtN=n~WfqXjb{$k>WUM)_(LV?YH={nl0@KDB8$;EO{^CCfck&0q9skjP z4brjl_|~17ovoj$+M$;KK^YpE>3K0tAvgaNj;7kA4DVb9Tm7ia2ar24%9u+E=UKWj zTyK6sL}ag|het+cqNFFV5CP01?P>et1$nTf*E<|a0DTb;P&GfdPE?#P-)i_1(5Gz% ze$AIIKRG|I-Jt%sdAuUi*x9rl{Kd?~9DeZ#>G@sk_P+O~L1|0kRzAZ4U@rqTkZ6I> z#bl;6Qo{k6r24>NwYSs*^*!HP3A`Kdt47Ul`QqoDZYPvG zptgIC=(nwGuR54(SF4Rd0FaUm;v1i>X6Yv~@McmLJWXjv(yBFcaVmD2J`hCJUtC=5 zbv;W15n<>pAMKt46tELKE+~mUR^gpG{f{Kk$Nf5rd=rF>Xoe>{Bs_U&hIYybuP*UiV~FN6;T@qF9n`TM|zIw8U-@Df5zf% zuEinu3`}eMUNcdo4D0ltNd>Jq2669JDx|W{X+yE(fH~v4XB7ObY}7l~^ryCzKy-cx z^61vfG5FIB6_)NDU2+DYn4boqq8EkXv1%X(?`bN0_%7=cft;afyR@jX?(WspceeuR zLauFkHhm86-VZmZ6vq3e%h0RHedY~|yBjnscL#D^z*{UHX%+JE`_K9cDs5k&xsF*= zZ%XSa#SmOkV^{Ns_{!?Z*@O_d=J^~z7K`c_7*HD1t3|RmxY_4lVbpq^QzVWhVlfeJ zCY?Pv6ixsF*p~FI*h_WXyyBc^5tGGg7?($V1}0~_&~=gqmrp{cZ_Quo;rM*~Nnh`N zq^dqQMYBr%u@m{W^;v*a#3J`6L*Z*jK{?VS>di5lx!)gUB95nPOr5w$(kZH+Uh_Mw z1U2h?Yy3!_$|NMD{~$xmtDKJU1uVVm6nQq=;Q|)aM4;|qI`KBxceIWDp&)co1(H^8 zVq-B(hSOZ64!LIAac-8`ng^&~4s5+VZ0~$TO)t3 zm+M$um{abFZe)qMVBfULsUtnzpwo<=+w7>M(F(|`luY|6P_9sjp4fS9U+w?%; z14$gsQE$DlvG4gUhX}%E6r<Eeu$P6Z}KjH?Qb&>z)2J2ZVmb{trg~|ATJM{~!D+0iainpMU_+ zi4%f?P!m&i$Sb#*`=TilYCXLFZirM-!Fuu}fy8AS7Ki4S4x0NC6a-XXVQ~4V_^b5{ zs^=@U1+T2`82{5HO6Ui8%4_@%>_Cp2IjQk_{%HS{R3$T5FaI$A?{$~{zrH@d*&J5p zQ&T?tQw64gSv=jB@h~<4nk@TkvMh5YVm1|-(7)igjlCnjx}ZUs7h!YM zH76`u&6f$S_3i#pD)WEF!?)>%2PT)>)A6tNC|?}?VRK^PATEwOzJ)t(93#cW{Wdk@ z+W@5Q|A$KlW<>Cti!ak$Ma=eiU>v6TVVd36`SP74m*&yg z`KHYj+tjqa*&x#&6288GaYS8lga6aEkGc=BP+jJeT{!s4)&8xfg@ARjMx53!N)2{dzKyJ7H~F>8M8lo!=^)3Nsbd-F6tx;wGGa;1k5Tw zHzr+Kh%$9Fl87iR=qR!%m@B2fR6R=N-nS}#&n+@-%c6g;0UQ?0JndOq>~$^)L5-9~ zs4t|*VjP5Kw#JSuQlUoKHj8dz4N_S#v$HRYb$csN1i(D>FS`g&? zt_y3cDG2;AU%HHbhK+NStlD+A^7}Vne;S_Fqgxx$G#_N~vtx6@>g`D?t&-p@r;3+y zixKg&Pdy$sBfeS_AU?mNmsOJGnW@t1I7!H0r9aZFudrEvj@y%~+o$wqFmrVsHgABq z!J{47T8IBsZPbPwwV(4ivB=1e#)M7G6k8wOV3g9*a_MEYx707pwnRat210Tm;HpZ{ z#=-!HY|Vj8MqQb~$U|P|+xKTH>91_9Gn0qvBxo{+)vjCyUU+;Oe0J%5_99ity7Z67 zx;-)XmO;^uzJhkkZ73(jnQ$100O9PRA0KUAC@^VRtHPqG%z%*1%67nddK_zA~zvhz_}UP-C8(wqyT%&|4uPTmZ{3l zke5?0SIPEmQ7!j6VA?D2o-+hguNZi2kx8?IH!rS*L(9fG=Hp5-di|^{t0nBDJqPWI zhzJGfPGN&86nVrygzs!=-7Z#<-=-XYQ!K@#Z0BI7d@#*!7dvrFv+$<;Og+zv*u}Sz zWMdna4Rpg;C`av9AajusH0(qaIrxle6PV~m-z(^rHQ0W65ywNZ_xjFP|G1Oke(+YD zL_S$VeXV*xo|bPqbQZ_LAx)q#o-9m`lm5EF`iaFBwBBCu(rm=;(&x7?@nl=llcwgR zAk-_!qu-T?5Yt{t{sIm6cOEMhNviD%p9hz!PU>1g#(_R9)sNq)^8L`vg#Bi@p;2C( zlGEmVTNdRD&&AwY?IEgs^EF?w7 zft-1N*DiiWsTeaux%YOS#yDTQz|iH%QSXk>rAK<%qNgf3N)ikFlWw7Ji#Jv7vMOksF{3G@ReBb9 z!hKx$rq`pStU}yItfti(6+VBSSxwnDEoh!^*~aPu=RN>25eVs-cf9y@x#pZa^Lz%Q zk8Nsp|LZW_kS0J4s)%0K!+7Gf>N8}@{iSGy7lwv2DMl+|6juHGqN4GH^D3@>m&tgX z?Z9h}BbCM>QV@k3hiJyd7feV(S&m+f+K#L02*gF|$?;@F=6JqUC?niMD#9wH)zwX{ zSd&)dPMeZ;Vx1!PNB;9Lh?;g*TfKiqsBA1XfhMdF<>>f3Q{-CgojRgTOWLGoL{0V0 z59O@(+@w0r>EZZ`+gBL(34YT-gBaI*X{lOJ&)#>V!-A398ZkK{26Il!&Ph3s8}|7s z=r0vXo9&U@eSRTN84;R;cPYv5(*>K5QK?4T*rd(w+SJh)8*%JxnH_A03%iepD|aS2 zk+X~Fh6i78=8`U|?^zccnh!DfL2^cxST-=01CWne)e`7eEBfQv$1xXM+XN9)#eT4i zFZ|%oJP>8IM7R4ra&?i@y~-VR23-Z+xCzHhJ|_)ZI@V52wCqZs!{~exf7lojQ-Mt? zRXuaUW1JZ1{XV!-l$Ds|8CB$tIvDngyV6WzFz&!EYATW{#}O(rX9jjB4}4?p%YlsB zZ;g!^kh2rn`R*4aV(Dnt`|{7m-iq-JiWscB_PkyNsZ)@J`F)o}%NxQPaK%qCw%cTK z_Fd?uV;jDEy``@HoxZ~dJJRb$tQtHpqCppODD38^Q*1(ZvU9J;LKA7o`bJ1=e{)G> zd**Gq>gbueY2O`(BW%KNU;z>GdhGtYS6&+apH?eWT;+}yG25N}9nw_!niHM?CDeJ| zMH;$Mxebj(Fi@b8Dc(0KC!sdaH6%NJ$w^rEg=C|+82>YMiu*;9nG{t<*~rYifh~Am zV)-$qCk3<|idEOEq-B{;*xNC>uq4|B^|n}frB!tW!7_1ZcWAx8_R7ZkVaHPm^9dxC zotajjJpB$*kR6Uuk%DrfieO&t`#9ucA*W9>m1?8<>ET)8zQFHacUDZc6{x6CJcyc_ zyaK=nIFx-t;*}qM7*~6d8iC~a2vkw}o6&1_dX?r$CZ@ZrcPp`3uM_1~rThxX!j)pI zvke$JSOl4s^$j#Vxv*lr3M<&QGw4j_)(MVpSMq9HM~OX5Et+hEW8NCvw)H_s>H6=J zDB??Z&|plNgM*VG4AX)2RYyKPZMg2iFII_WZmgK!2X=9DQhJEguBq3THZ`p`!%vG4 zPHC#6Uw`ZofZ7+%7&V2~K%Yt|^rdd$ElaNE3)?nEHCN&M!$ih+22??N1|q^eV9@eJF4PngTlj0MI%JoEw1~~iC;hZtJccB+ghp*#`@r! z(%7dz(%8OWVK>m0iD5M5xw|`5m<2^mdwJ z0V(RzJTJn62@VyOBIh66j3~7(Y2lh?3y@q0eZVDRajEYpie(#~U$(gKX45({%h`+^{_(s-~apk^S{KIkeb%h%rf)M!d3|(??bs*lLM0S$f+8Evp#C zLB?mC>^qZhO9AT(JtAr`itA!hlnx!xSg;EA=KSR9bJWXKA6oVI_)`SkhnWOZkfpxB z$`jM`@^w=mZOyjErLIySr!T#bD(PH9+)MOhjJhTcA_BqKSPRpQSvMDEl&NRBJX5xK z8}G%fgU@bT+iC_N3XKp0rNWL`JsgW%M4@guNs^}js{kY%y|G85?&WY_)%phD$!(KR zo!)x%p@=cjwJySPlRK3N(;Kf2sW~f`t60-(UOX5i%A>dd1=*k)U^0)7vzzWUU>~rc zYBWjvYmhjjC~)1u%YMamh$@!#Vf=K^Y7s=%#{KD1X*4I|G91IY9Qbr!*Wr``wv~3* zc3fqZN;Y2F@K-h*ZS>-9wDU8z)c1ZT2d^IEbGMah+hBZ|;b+l-eqnvT{b~yGyru`W z@_ZM#oHO%x@1@)CY%>)MKB@M)@=>d+&6MtW_5!8!c5@bG=_&N&DBS%?K7IL;P~PIi zRxo#kHshA1?D#vwFADdTVK;47$v3{E#Ka3SuYd4MTD_@^BjA4_>%8KzrDvAfAC@RZ zthUx`R?Xhft#ql}mv?+RwmLUxrW|s|ja(r7!+3+I_sE->qPk`1=jqVuaEJhgk{50U zH@$DMRX(q@A}Lq{#%(*wXO*%ZAKlXD9$7joi(v(IIn%AVxb!GZq82%CZhbQQd7Apd z`iObTMVU@OJ}CC$k!UPG#?x#Sy^`(e=CSRZXf*hRt|(D=jVba}Xt28!Vu_GQ>ZYHe zE@+vU(pd$zr+4c&Loq!51?%20PK_Ph1IH?7!1O&QZ$LBexFIOcGQV^kv3sXBs4TTO zE8(IQ$YQ>)it=jH#7AQgi}3n!c10pS3lq3p7-DmNpsmK_#F(tn9?^j%F!EBgGdQzo z5;VaiZ0Pl3Q!M82NO|65w#jeuM3AdA2(n?5Au19$N?cd5Mwk^1xUcj0K7z8`oK4FN zXu$QDD|1W{6&rhd)VAqh)|q~i55Hfwwh82W-0t#lmL2YDD~T#8RYm{E=Tv{O!zIqc ze`}+mzvirXv^ZefC@S%uq5t15H)qX zlmP2bO?u%2T9(nTiPAdcG1Ysn^7EaM<1L=wT0tyY=sqd0M{m;JRl4v~Ayi%Ej21x9 z!a@~uUZ}>Mmal4>rp&YZlv7oq+s|Zjhsm;j9)n*|HVTY7wTffvG@eq<(&(pd9p6NU zslKsHUzoipyJ?yee=~9tlYDm^&tV?n$oDQ=u82GI$NqC!fwa?$m=U^xqx{x$3z!qm zHu#U0RtF*!Tuw%R4*w;3yB^ztAF<$K%wMc0sGw0M3~8<=7sNLQmrP6=;=9`wNf$M% z7CL{15~e5AIiE(v?%x&ZdAW$I7q=Gbpgd+Ee|sHah%@Gb@QI57Y%`fWy3>)CJ3x5c^>C-zbMq?c|)IAV(@^wDJ`hbB#_r{cTAxgqsdw%^&E zBX`D1f;r1{L=$mG1^kVntdAthj(RPpUhCQx8A0*3W}6Eg7DoomoIYWizo?jHC@vN)>9?5OzgdP3&SfeePE(0Ykp15 zt|#;-d3LsD2gis_Uz*wPR0NNupn2bFxhwgSu*cvPP!;?>hi`=IG5DX!1XJG*?<6K_ z;J}IzFR%Ei*(BGQ`Cp?nPbJ{@vgPz(!$-+-RihobAzIob)AY8&?KdJ+VH-KR^?bPq zo0Yc$L7UWS9kr2%yyjb?gf>gFrBSFDSCEqkM+u53P5-HH^?j4aE$E!@k*Ej1Qjg$6 zehbiu^zN|Ah^MMT{YLq}L%V9tr+03b#|o`}k)v+s1kPksyvxy{Ir~xr*dJ87yljh9 zM)~c*RO3Ha60ZN)T+7V4EYW-YV)c#`Ag|VBIvG}oOXaDE@33E_Iyn7By%SuSfIoaL z-_t3P>M|ka@dLA}YEc~jdM#Nropy{tYv0OI;!Lw4vA$G*O9xoV6Us{Se_4zSS+%bPHQJj=k zh{HfEszkFjRnSi2^OT9riRf1rhFH#Ll_OSnvGXVw+PZ{}4B_lT`u^qu)OnE@|JXmQ z&1A^sBvMrV_}6w#70}62b^TYkk}$vfMydK2WI``W8$vpBb*_Io{=ghzbw@>hRo5%g z_eL)87vbbivs(#Gx*J9E4=19i$K|H#^ht4VaOg{N7<(X}XgWn1h<*FswW>lm?ZG|m zZOnUC#V=U&^ab2pR-6N_au-S?jhhRtQBHNo zH5d3B%S};*7PsqXgBf1Fdz$x+`t9a?LGu$X_?i!L=A>9;^(;HZ>fYxqI19t2vi!_nWoPXB(bAGD#MF>! zrawJxaJbh~c3{iuHK;Cz3i6@jq|T~(YaSX*f?yfOTzQ`)-bawHIw!&v+A}N#n&+fv zxsLdZDjty+PCX)?pfY`@IR(BJd35+|gLLvJ7Yzr7pHlwo8Li-}l9G*l)|bf67WyhB znpm++Uf=dQ^nzxLJ5ir(ex7D33*1Pku+o!6b814jko0u;Wi_RZZlMy+6CjXbo&f`F z1Ycqg-zXRqX=k!B@+URgfxCE<>k-=xza2YynNh);`XNbgGlWsAEZ%irUN~*#+92FA z`mUy}{g*Vv4nsdb?zsN4RPf7>QGfb?w;&2d4;>gqat9|M8pNlJnTs!uwMjP`wBR*X zKic7?YW1v6sCK$M3{NUrIj|$~-Olo$o`iw@u%~ zLhxdRZ~3Bmg<4JaLbXX%zFE`$AY0{f8ei z-dA&_@_Y3^$)`@}jNh<~} zX@P2W9%W$hK-H^=dKLB96wkG%zQm77b@CV#AZ5xP8BP#Z=45rs=>D`;Aory|0arK< zEqtcG+Gidtgi`bjwOsMS|M&2G^uWwI-o_=Dx1sn{B(v~$vD>LfNEne=_t29HojT_F zhZpjit(g=M*mXaMio&cjt#V6Bm)TC-Qr@;aTD_U!446p`KZDKGx}`rb&)~8Bl3MkO zj*4dYgtkKtnq-_O!tLjj#JAS8AZO;uA!i(aHABN30oH8?tq#j%_o82(IBcKjsSk}? z2^oT9*19ZG&!!x?eo+#(f4BOJ#;3Ql!(5_2WyqJi)=-yh4IEy0#(Y|K(|TA{7KM`x zuZEI3%iTY!h_0-}%K6n`S+pLm4%9Y0e1M;m%v8P_P6sEO-j6&Ju5|V=+Wj!4e$c5j zKYVf%DX;L?cR3TkBYgJu<45Wh(hu5Va*1&$7}2mJh=tR;|A=|ak$Z^UWpv2Ca41B2Pxyv|{+5cYY_Kg9Y=c%4A84tLxc3Cp#r{Z_68k&Y7CV_kJ z)esl)-y7Y25|(H-7LHda>OFq^IH7^bO7?wBhx;X(Z1LFp;t$X?HrwmpzMnw6sDH&f zej>_r&MD$DelyHBmL)T1&dX~TX4}j+=mmIB6gZr4*W53&y(3!5n>G#qd#jut+YJix zoFo8t89F2eg!L0 zx6XGK39j3lRpho=q;20i+IBhn$CekGvC8p})C78VDSW>Gj~V2wo_hp*$Vw_nREQY{ F{4YhhuM+?O literal 0 HcmV?d00001 diff --git a/aperisolve/static/img/cheatsheet/audacity_1.png b/aperisolve/static/img/cheatsheet/audacity_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2b4bcf3ba9d2bd9819d7830811283e55fe99f72d GIT binary patch literal 58737 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 +} + +function showSuccess(message, reset) { + showAlert(message, "success", reset); +} +function showDanger(message, reset) { + showAlert(message, "danger", reset); +} +function showWarning(message, reset) { + showAlert(message, "warning", reset); +} +function showInfo(message, reset) { + showAlert(message, "info", reset); +} + +/** + * Copy to clipboard + */ + +document.addEventListener('click', function (event) { + // Check if the clicked element is a copy icon + if (event.target.classList.contains('copy-icon')) { + const icon = event.target; + const textarea = icon.closest('.textarea-container').querySelector('textarea'); + + if (textarea) { + textarea.select(); + navigator.clipboard.writeText(textarea.value).then(() => { + icon.classList.remove('fa-copy'); + icon.classList.add('fa-check'); + setTimeout(() => { + icon.classList.remove('fa-check'); + icon.classList.add('fa-copy'); + }, 1500); + }); + } + } + }); + +/** + * Image preview functions + */ + +// Reference the modal elements +const modal = document.getElementById("image-modal-container"); +const modalImage = document.getElementById("modal-image"); + +let currentImages = []; +let currentIndex = -1; + +function updateCurrentImages() { + currentImages = Array.from(document.querySelectorAll(".results_img img")); +} + +// Function to handle image click (open modal) +function openImageModal(src) { + updateCurrentImages(); + currentIndex = currentImages.findIndex((img) => img.src === src); + if (currentIndex !== -1) { + modalImage.src = currentImages[currentIndex].src; + modal.classList.add("modal-visible"); + modal.classList.remove("modal-hidden"); + } +} + +function closeImageModal() { + modal.classList.remove("modal-visible"); + modal.classList.add("modal-hidden"); + currentIndex = -1; +} + +// Handle dynamic images added with innerHTML +document.addEventListener("click", function (e) { + const img = e.target.closest(".results_img img"); + if (img) { + openImageModal(img.src); + } +}); + +// Click on modal image to download and close +modalImage.addEventListener("click", function () { + const link = document.createElement("a"); + link.href = modalImage.src; + link.download = modalImage.src.split("/").pop(); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + closeImageModal(); +}); + +// Optional: Close modal if user clicks outside the image +modal.addEventListener("click", function (e) { + if (e.target === modal) { + closeImageModal(); + } +}); + +// Keyboard support +document.addEventListener("keydown", function (e) { + if (!modal.classList.contains("modal-visible")) return; + + if (e.key === "Escape") { + closeImageModal(); + } else if (e.key === "ArrowLeft") { + // Show previous image + if (currentIndex > 0) { + currentIndex--; + modalImage.src = currentImages[currentIndex].src; + } + } else if (e.key === "ArrowRight") { + // Show next image + if (currentIndex < currentImages.length - 1) { + currentIndex++; + modalImage.src = currentImages[currentIndex].src; + } + } +}); + +async function fetchImageInfo(submission_hash) { + const infoResp = await fetch(`/infos/${submission_hash}`); + const infoData = await infoResp.json(); + + const resultInfosDiv = document.getElementById("result-infos"); + resultInfosDiv.innerHTML = ""; // Clear previous info + + const mainImgLeft = document.createElement("div"); + const mainImgRight = document.createElement("div"); + const tableInfos = document.createElement("table"); + mainImgLeft.id = "main-img-left"; + mainImgRight.id = "main-img-right"; + resultInfosDiv.appendChild(mainImgLeft); + resultInfosDiv.appendChild(mainImgRight); + mainImgRight.appendChild(tableInfos); + + mainImgLeft.innerHTML += `
`; + tableInfos.innerHTML += ` First upload:${infoData.first_submission_date}`; + tableInfos.innerHTML += ` Last upload:${infoData.last_submission_date}`; + if (Array.isArray(infoData.names)) { + const nameList = infoData.names + .map((name) => `${escapeHtml(name)}`) + .join(", "); + tableInfos.innerHTML += ` Name(s):${nameList}`; + } + tableInfos.innerHTML += ` Size:${formatBytes( + infoData.size + )}`; + tableInfos.innerHTML += ` Upload count:${infoData.upload_count}`; + if (Array.isArray(infoData.passwords)) { + const passwordList = infoData.passwords + .map((pwd) => `${escapeHtml(pwd)}`) + .join(", "); + tableInfos.innerHTML += ` Common password(s):${passwordList}`; + } +} + +/** + * Parsing results from the server + */ + +function parseResult(result) { + const resultDiv = document.getElementById("result-analyzers"); + resultDiv.innerHTML = ""; + + for (const tool of TOOL_ORDER) { + if (!Object.keys(result).includes(tool)) { + // Skip if the tool is not in the result + continue; + } + + const analyzer = document.createElement("div"); + analyzer.className = `analyzer a-${escapeHtml(tool)}`; + resultDiv.appendChild(analyzer); + + analyzer.innerHTML += `

${capitalize(tool)}

`; + + if (result[tool]["status"] === "ok") { + if ("images" in result[tool]) { + // Parse image output + var channels = ["Superimposed", "Red", "Green", "Blue", "Alpha"]; + if (Object.keys(result[tool]["images"]).length == 1) { + channels = ["Greyscale"]; + } else if (Object.keys(result[tool]["images"]).length == 4) { + channels = ["Superimposed", "Red", "Green", "Blue"]; + } + + for (const channel of channels) { + const images = result[tool]["images"][channel]; + analyzer.innerHTML += `

${capitalize(escapeHtml(channel))}

`; + for (const image of images) { + analyzer.innerHTML += `
`; + } + } + } + // Parse text output + + if (typeof result[tool]["output"] === "string") { + analyzer.innerHTML += `
${escapeHtml(
+          result[tool]["output"]
+        )}
`; + } else if (Array.isArray(result[tool]["output"])) { + if (result[tool]["output"].length > 0) { + var texarea_content = `
`; + texarea_content += ``; + texarea_content += ``; + texarea_content += `
`; + analyzer.innerHTML += texarea_content; + } + } else if (typeof result[tool]["output"] === "object") { + var table_content = `
`; + table_content += ``; + for (const key in result[tool]["output"]) { + table_content += ``; + table_content += ``; + } + table_content += `
${escapeHtml(key)}${escapeHtml( + result[tool]["output"][key] + )}
`; + table_content += ``; + analyzer.innerHTML += table_content; + } else { + // analyzer.innerHTML += `
${result[tool]["output"]}
`; + } + + if ("download" in result[tool]) { + // Parse download link + analyzer.innerHTML += `
Download file`; + } + } else if (result[tool]["status"] === "error") { + showDanger(result[tool]["error"]); + } + } +} + +// Poll status of a submission +async function pollStatus(submission_hash) { + if (!window.location.pathname.endsWith(`/${submission_hash}`)) { + window.history.pushState({}, "", `/${submission_hash}`); + } + const statusResp = await fetch(`/status/${submission_hash}`); + const statusData = await statusResp.json(); + if (statusData.status === "completed") { + const resultResp = await fetch(`/result/${submission_hash}`); + const resultData = await resultResp.json(); + fetchImageInfo(submission_hash); + if ("error" in resultData){ + showWarning(`❌ ${resultData.error}`, true); + }else if ("results" in resultData) { + parseResult(resultData.results); + } + } else if (statusData.status === "error") { + //resultDiv.innerHTML = ""; + showDanger("❌ Error during the analysis.", true); + } else { + setTimeout(() => pollStatus(submission_hash), 1000); + try { + const resultResp = await fetch(`/result/${submission_hash}`); + const resultData = await resultResp.json(); + if ("error" in resultData){ + // showWarning(`❌ ${resultData.error}`, true); + }else if ("results" in resultData) { + fetchImageInfo(submission_hash); + parseResult(resultData.results); + } + } catch (error) { + console.dir(error); + } + } +} + +/** + * Drag and drop functionality + */ + +const dropZone = document.getElementById("drop-zone"); +const fileInput = document.getElementById("image"); +const browseBtn = document.getElementById("browse-btn"); +const dragMsg = document.getElementById("drag-msg"); + +function showFilename(filename) { + dragMsg.innerHTML = "🖼️ " + escapeHtml(filename); +} + +if (browseBtn) { + // Clicking the button triggers file input + browseBtn.addEventListener("click", () => fileInput.click()); + dropZone.addEventListener("click", () => fileInput.click()); + dropZone.addEventListener("dragover", (e) => { + e.preventDefault(); + dropZone.style.boxShadow = "0 0 20px #9fef00"; + }); + dropZone.addEventListener("dragleave", () => { + dropZone.style.boxShadow = ""; + }); + + // Drag events + ["dragenter", "dragover"].forEach((eventName) => { + dropZone.addEventListener(eventName, (e) => { + e.preventDefault(); + dropZone.classList.add("dragover"); + }); + }); + + ["dragleave", "drop"].forEach((eventName) => { + dropZone.addEventListener(eventName, (e) => { + e.preventDefault(); + dropZone.classList.remove("dragover"); + }); + }); + + // Drop file + dropZone.addEventListener("drop", (e) => { + const files = e.dataTransfer.files; + if (files.length > 0) { + fileInput.files = files; // Attach files to the hidden input + showFilename(fileInput.files[0].name); + } + }); + + fileInput.addEventListener("change", () => { + if (fileInput.files.length > 0) { + showFilename(fileInput.files[0].name); + } + }); + + // File upload Form submission + + document + .getElementById("upload-form") + .addEventListener("submit", function (e) { + e.preventDefault(); + + const fileInput = document.getElementById("image"); + const passwordInput = document.getElementById("password"); + const deepCheckbox = document.getElementById("deep"); + const progressContainer = document.getElementById("progress-container"); + const progressBar = document.getElementById("progress-bar"); + + if (!fileInput.files.length) { + showDanger("Please select an image.", true); + } + + const formData = new FormData(); + formData.append("image", fileInput.files[0]); + formData.append("password", passwordInput.value); + formData.append("deep", deepCheckbox.checked); + + const xhr = new XMLHttpRequest(); + xhr.open("POST", "/upload", true); + + xhr.upload.addEventListener("loadstart", () => { + progressContainer.classList.remove("d-none"); + progressBar.style.width = "0%"; + progressBar.textContent = "0%"; + }); + + xhr.upload.addEventListener("progress", (e) => { + if (e.lengthComputable) { + const percent = Math.round((e.loaded / e.total) * 100); + progressBar.style.width = percent + "%"; + progressBar.textContent = percent + "%"; + } + }); + + xhr.onload = () => { + if (xhr.status === 200) { + try { + const response = JSON.parse(xhr.responseText); + if (response.submission_hash) { + pollStatus(response.submission_hash); + } else { + showDanger( + "❌ Invalid server response: missing submission_hash.", + true + ); + } + } catch (e) { + showDanger("❌ Invalid server response.", true); + } + } else { + showDanger(`❌ HTTP error ${xhr.status}`, true); + } + progressBar.style.width = "100%"; + progressBar.textContent = "Upload complete"; + const uploadForm = document.getElementById("upload-form"); + slideUp(uploadForm); + }; + + xhr.onerror = () => { + showDanger("❌ An error occurred during the transfer", true); + }; + + xhr.send(formData); + }); +} diff --git a/aperisolve/static/js/background.js b/aperisolve/static/js/background.js new file mode 100644 index 0000000..9fc6eb6 --- /dev/null +++ b/aperisolve/static/js/background.js @@ -0,0 +1,167 @@ +import * as THREE from "three"; + +import Stats from "three/addons/stats.module.js"; + +let container, stats; +let camera, scene, renderer, mesh; + +const instances = 5000; +let lastTime = 0; + +const moveQ = new THREE.Quaternion(0.5, 0.5, 0.5, 0.0).normalize(); +const tmpQ = new THREE.Quaternion(); +const tmpM = new THREE.Matrix4(); +const currentM = new THREE.Matrix4(); + +init(); + +function init() { + container = document.getElementById("three-bg"); + + camera = new THREE.PerspectiveCamera( + 50, + window.innerWidth / window.innerHeight, + 1, + 1000 + ); + + scene = new THREE.Scene(); + // Get the computed background color of the body + const bodyBg = getComputedStyle(document.body).backgroundColor; + scene.background = new THREE.Color(bodyBg); + + // geometry + + const geometry = new THREE.InstancedBufferGeometry(); + + // per mesh data x,y,z,w,u,v,s,t for 4-element alignment + // only use x,y,z and u,v; but x, y, z, nx, ny, nz, u, v would be a good layout + const vertexBuffer = new THREE.InterleavedBuffer( + new Float32Array([ + // Front + -1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, -1, -1, 1, 0, 0, 1, 0, 0, + 1, -1, 1, 0, 1, 1, 0, 0, + // Back + 1, 1, -1, 0, 1, 0, 0, 0, -1, 1, -1, 0, 0, 0, 0, 0, 1, -1, -1, 0, 1, 1, 0, + 0, -1, -1, -1, 0, 0, 1, 0, 0, + // Left + -1, 1, -1, 0, 1, 1, 0, 0, -1, 1, 1, 0, 1, 0, 0, 0, -1, -1, -1, 0, 0, 1, 0, + 0, -1, -1, 1, 0, 0, 0, 0, 0, + // Right + 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, -1, 0, 1, 1, 0, 0, 1, -1, 1, 0, 0, 0, 0, 0, + 1, -1, -1, 0, 0, 1, 0, 0, + // Top + -1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, -1, 1, -1, 0, 0, 1, 0, 0, + 1, 1, -1, 0, 1, 1, 0, 0, + // Bottom + 1, -1, 1, 0, 1, 0, 0, 0, -1, -1, 1, 0, 0, 0, 0, 0, 1, -1, -1, 0, 1, 1, 0, + 0, -1, -1, -1, 0, 0, 1, 0, 0, + ]), + 8 + ); + + // Use vertexBuffer, starting at offset 0, 3 items in position attribute + const positions = new THREE.InterleavedBufferAttribute(vertexBuffer, 3, 0); + geometry.setAttribute("position", positions); + // Use vertexBuffer, starting at offset 4, 2 items in uv attribute + const uvs = new THREE.InterleavedBufferAttribute(vertexBuffer, 2, 4); + geometry.setAttribute("uv", uvs); + + const indices = new Uint16Array([ + 0, 2, 1, 2, 3, 1, 4, 6, 5, 6, 7, 5, 8, 10, 9, 10, 11, 9, 12, 14, 13, 14, 15, + 13, 16, 17, 18, 18, 17, 19, 20, 21, 22, 22, 21, 23, + ]); + + geometry.setIndex(new THREE.BufferAttribute(indices, 1)); + + // material + + const material = new THREE.MeshBasicMaterial(); + material.map = new THREE.TextureLoader().load("static/img/octo2.png"); + material.map.colorSpace = THREE.SRGBColorSpace; + material.map.flipY = false; + material.transparent = true; + material.opacity = 0.3; + + // per instance data + + const matrix = new THREE.Matrix4(); + const offset = new THREE.Vector3(); + const orientation = new THREE.Quaternion(); + const scale = new THREE.Vector3(1, 1, 1); + let x, y, z, w; + + mesh = new THREE.InstancedMesh(geometry, material, instances); + + for (let i = 0; i < instances; i++) { + // offsets + + x = Math.random() * 100 - 50; + y = Math.random() * 100 - 50; + z = Math.random() * 100 - 50; + + offset.set(x, y, z).normalize(); + offset.multiplyScalar(5); // move out at least 5 units from center in current direction + offset.set(x + offset.x, y + offset.y, z + offset.z); + + // orientations + + x = Math.random() * 2 - 1; + y = Math.random() * 2 - 1; + z = Math.random() * 2 - 1; + w = Math.random() * 2 - 1; + + orientation.set(x, y, z, w).normalize(); + + matrix.compose(offset, orientation, scale); + + mesh.setMatrixAt(i, matrix); + } + + scene.add(mesh); + + renderer = new THREE.WebGLRenderer(); + renderer.setPixelRatio(window.devicePixelRatio); + renderer.setSize(window.innerWidth, window.innerHeight); + renderer.setAnimationLoop(animate); + container.appendChild(renderer.domElement); + + stats = new Stats(); + container.appendChild(stats.dom); + + window.addEventListener("resize", onWindowResize); +} + +function onWindowResize() { + camera.aspect = window.innerWidth / window.innerHeight; + camera.updateProjectionMatrix(); + + renderer.setSize(window.innerWidth, window.innerHeight); +} + +// + +function animate() { + const time = performance.now(); + + mesh.rotation.y = time * 0.00005; + + const delta = (time - lastTime) / 5000; + tmpQ.set(moveQ.x * delta, moveQ.y * delta, moveQ.z * delta, 1).normalize(); + tmpM.makeRotationFromQuaternion(tmpQ); + + for (let i = 0, il = instances; i < il; i++) { + mesh.getMatrixAt(i, currentM); + currentM.multiply(tmpM); + mesh.setMatrixAt(i, currentM); + } + + mesh.instanceMatrix.needsUpdate = true; + mesh.computeBoundingSphere(); + + lastTime = time; + + renderer.render(scene, camera); + + stats.update(); +} diff --git a/aperisolve/static/js/jsm/stats.module.js b/aperisolve/static/js/jsm/stats.module.js new file mode 100644 index 0000000..dc5211a --- /dev/null +++ b/aperisolve/static/js/jsm/stats.module.js @@ -0,0 +1,162 @@ +var Stats = function () { + var mode = 0; + + var container = document.createElement("div"); + container.style.cssText = + "position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000"; + + // + + function addPanel(panel) { + container.appendChild(panel.dom); + return panel; + } + + function showPanel(id) { + for (var i = 0; i < container.children.length; i++) { + container.children[i].style.display = i === id ? "block" : "none"; + } + + mode = id; + } + + var beginTime = (performance || Date).now(), + prevTime = beginTime, + frames = 0; + + var fpsPanel = addPanel(new Stats.Panel("FPS", "#0ff", "#f00")); + var msPanel = addPanel(new Stats.Panel("MS", "#0f0", "#f00")); + + if (self.performance && self.performance.memory) { + var memPanel = addPanel(new Stats.Panel("MB", "#f08", "#f00")); + } + + showPanel(-1); + + return { + REVISION: 16, + + dom: container, + + addPanel: addPanel, + showPanel: showPanel, + + begin: function () { + beginTime = (performance || Date).now(); + }, + + end: function () { + frames++; + + var time = (performance || Date).now(); + + msPanel.update(time - beginTime, 200); + + if (time >= prevTime + 1000) { + fpsPanel.update((frames * 1000) / (time - prevTime), 100); + + prevTime = time; + frames = 0; + + if (memPanel) { + var memory = performance.memory; + memPanel.update( + memory.usedJSHeapSize / 1048576, + memory.jsHeapSizeLimit / 1048576 + ); + } + } + + return time; + }, + + update: function () { + beginTime = this.end(); + }, + + // Backwards Compatibility + + domElement: container, + setMode: showPanel, + }; +}; + +Stats.Panel = function (name, fg, bg) { + var min = Infinity, + max = 0, + round = Math.round; + var PR = round(window.devicePixelRatio || 1); + + var WIDTH = 80 * PR, + HEIGHT = 48 * PR, + TEXT_X = 3 * PR, + TEXT_Y = 2 * PR, + GRAPH_X = 3 * PR, + GRAPH_Y = 15 * PR, + GRAPH_WIDTH = 74 * PR, + GRAPH_HEIGHT = 30 * PR; + + var canvas = document.createElement("canvas"); + canvas.width = WIDTH; + canvas.height = HEIGHT; + canvas.style.cssText = "width:80px;height:48px"; + + var context = canvas.getContext("2d"); + context.font = "bold " + 9 * PR + "px Helvetica,Arial,sans-serif"; + context.textBaseline = "top"; + + context.fillStyle = bg; + context.fillRect(0, 0, WIDTH, HEIGHT); + + context.fillStyle = fg; + context.fillText(name, TEXT_X, TEXT_Y); + context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT); + + context.fillStyle = bg; + context.globalAlpha = 0.9; + context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT); + + return { + dom: canvas, + + update: function (value, maxValue) { + min = Math.min(min, value); + max = Math.max(max, value); + + context.fillStyle = bg; + context.globalAlpha = 1; + context.fillRect(0, 0, WIDTH, GRAPH_Y); + context.fillStyle = fg; + context.fillText( + round(value) + " " + name + " (" + round(min) + "-" + round(max) + ")", + TEXT_X, + TEXT_Y + ); + + context.drawImage( + canvas, + GRAPH_X + PR, + GRAPH_Y, + GRAPH_WIDTH - PR, + GRAPH_HEIGHT, + GRAPH_X, + GRAPH_Y, + GRAPH_WIDTH - PR, + GRAPH_HEIGHT + ); + + context.fillRect(GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT); + + context.fillStyle = bg; + context.globalAlpha = 0.9; + context.fillRect( + GRAPH_X + GRAPH_WIDTH - PR, + GRAPH_Y, + PR, + round((1 - value / maxValue) * GRAPH_HEIGHT) + ); + }, + }; +}; + +export default Stats; diff --git a/aperisolve/static/js/three.core.min.js b/aperisolve/static/js/three.core.min.js new file mode 100644 index 0000000..0e4d6dc --- /dev/null +++ b/aperisolve/static/js/three.core.min.js @@ -0,0 +1,6 @@ +/** + * @license + * Copyright 2010-2025 Three.js Authors + * SPDX-License-Identifier: MIT + */ +const t="177",e={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},i={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},s=0,r=1,n=2,a=3,o=0,h=1,l=2,c=3,u=0,d=1,p=2,m=0,y=1,g=2,f=3,x=4,b=5,v=100,w=101,M=102,S=103,_=104,A=200,T=201,z=202,I=203,C=204,B=205,k=206,R=207,E=208,P=209,O=210,N=211,F=212,V=213,L=214,j=0,W=1,U=2,D=3,H=4,q=5,J=6,X=7,Y=0,Z=1,G=2,$=0,Q=1,K=2,tt=3,et=4,it=5,st=6,rt=7,nt="attached",at="detached",ot=300,ht=301,lt=302,ct=303,ut=304,dt=306,pt=1e3,mt=1001,yt=1002,gt=1003,ft=1004,xt=1004,bt=1005,vt=1005,wt=1006,Mt=1007,St=1007,_t=1008,At=1008,Tt=1009,zt=1010,It=1011,Ct=1012,Bt=1013,kt=1014,Rt=1015,Et=1016,Pt=1017,Ot=1018,Nt=1020,Ft=35902,Vt=1021,Lt=1022,jt=1023,Wt=1026,Ut=1027,Dt=1028,Ht=1029,qt=1030,Jt=1031,Xt=1032,Yt=1033,Zt=33776,Gt=33777,$t=33778,Qt=33779,Kt=35840,te=35841,ee=35842,ie=35843,se=36196,re=37492,ne=37496,ae=37808,oe=37809,he=37810,le=37811,ce=37812,ue=37813,de=37814,pe=37815,me=37816,ye=37817,ge=37818,fe=37819,xe=37820,be=37821,ve=36492,we=36494,Me=36495,Se=36283,_e=36284,Ae=36285,Te=36286,ze=2200,Ie=2201,Ce=2202,Be=2300,ke=2301,Re=2302,Ee=2400,Pe=2401,Oe=2402,Ne=2500,Fe=2501,Ve=0,Le=1,je=2,We=3200,Ue=3201,De=3202,He=3203,qe=0,Je=1,Xe="",Ye="srgb",Ze="srgb-linear",Ge="linear",$e="srgb",Qe=0,Ke=7680,ti=7681,ei=7682,ii=7683,si=34055,ri=34056,ni=5386,ai=512,oi=513,hi=514,li=515,ci=516,ui=517,di=518,pi=519,mi=512,yi=513,gi=514,fi=515,xi=516,bi=517,vi=518,wi=519,Mi=35044,Si=35048,_i=35040,Ai=35045,Ti=35049,zi=35041,Ii=35046,Ci=35050,Bi=35042,ki="100",Ri="300 es",Ei=2e3,Pi=2001,Oi={COMPUTE:"compute",RENDER:"render"},Ni={PERSPECTIVE:"perspective",LINEAR:"linear",FLAT:"flat"},Fi={NORMAL:"normal",CENTROID:"centroid",SAMPLE:"sample",FLAT_FIRST:"flat first",FLAT_EITHER:"flat either"};class Vi{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const i=this._listeners;void 0===i[t]&&(i[t]=[]),-1===i[t].indexOf(e)&&i[t].push(e)}hasEventListener(t,e){const i=this._listeners;return void 0!==i&&(void 0!==i[t]&&-1!==i[t].indexOf(e))}removeEventListener(t,e){const i=this._listeners;if(void 0===i)return;const s=i[t];if(void 0!==s){const t=s.indexOf(e);-1!==t&&s.splice(t,1)}}dispatchEvent(t){const e=this._listeners;if(void 0===e)return;const i=e[t.type];if(void 0!==i){t.target=this;const e=i.slice(0);for(let i=0,s=e.length;i>8&255]+Li[t>>16&255]+Li[t>>24&255]+"-"+Li[255&e]+Li[e>>8&255]+"-"+Li[e>>16&15|64]+Li[e>>24&255]+"-"+Li[63&i|128]+Li[i>>8&255]+"-"+Li[i>>16&255]+Li[i>>24&255]+Li[255&s]+Li[s>>8&255]+Li[s>>16&255]+Li[s>>24&255]).toLowerCase()}function Hi(t,e,i){return Math.max(e,Math.min(i,t))}function qi(t,e){return(t%e+e)%e}function Ji(t,e,i){return(1-i)*t+i*e}function Xi(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return t/4294967295;case Uint16Array:return t/65535;case Uint8Array:return t/255;case Int32Array:return Math.max(t/2147483647,-1);case Int16Array:return Math.max(t/32767,-1);case Int8Array:return Math.max(t/127,-1);default:throw new Error("Invalid component type.")}}function Yi(t,e){switch(e.constructor){case Float32Array:return t;case Uint32Array:return Math.round(4294967295*t);case Uint16Array:return Math.round(65535*t);case Uint8Array:return Math.round(255*t);case Int32Array:return Math.round(2147483647*t);case Int16Array:return Math.round(32767*t);case Int8Array:return Math.round(127*t);default:throw new Error("Invalid component type.")}}const Zi={DEG2RAD:Wi,RAD2DEG:Ui,generateUUID:Di,clamp:Hi,euclideanModulo:qi,mapLinear:function(t,e,i,s,r){return s+(t-e)*(r-s)/(i-e)},inverseLerp:function(t,e,i){return t!==e?(i-t)/(e-t):0},lerp:Ji,damp:function(t,e,i,s){return Ji(t,e,1-Math.exp(-i*s))},pingpong:function(t,e=1){return e-Math.abs(qi(t,2*e)-e)},smoothstep:function(t,e,i){return t<=e?0:t>=i?1:(t=(t-e)/(i-e))*t*(3-2*t)},smootherstep:function(t,e,i){return t<=e?0:t>=i?1:(t=(t-e)/(i-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){void 0!==t&&(ji=t);let e=ji+=1831565813;return e=Math.imul(e^e>>>15,1|e),e^=e+Math.imul(e^e>>>7,61|e),((e^e>>>14)>>>0)/4294967296},degToRad:function(t){return t*Wi},radToDeg:function(t){return t*Ui},isPowerOfTwo:function(t){return!(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,i,s,r){const n=Math.cos,a=Math.sin,o=n(i/2),h=a(i/2),l=n((e+s)/2),c=a((e+s)/2),u=n((e-s)/2),d=a((e-s)/2),p=n((s-e)/2),m=a((s-e)/2);switch(r){case"XYX":t.set(o*c,h*u,h*d,o*l);break;case"YZY":t.set(h*d,o*c,h*u,o*l);break;case"ZXZ":t.set(h*u,h*d,o*c,o*l);break;case"XZX":t.set(o*c,h*m,h*p,o*l);break;case"YXY":t.set(h*p,o*c,h*m,o*l);break;case"ZYZ":t.set(h*m,h*p,o*c,o*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+r)}},normalize:Yi,denormalize:Xi};class Gi{constructor(t=0,e=0){Gi.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,i=this.y,s=t.elements;return this.x=s[0]*e+s[3]*i+s[6],this.y=s[1]*e+s[4]*i+s[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Hi(this.x,t.x,e.x),this.y=Hi(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=Hi(this.x,t,e),this.y=Hi(this.y,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Hi(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Hi(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y;return e*e+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const i=Math.cos(e),s=Math.sin(e),r=this.x-t.x,n=this.y-t.y;return this.x=r*i-n*s+t.x,this.y=r*s+n*i+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class $i{constructor(t=0,e=0,i=0,s=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=i,this._w=s}static slerpFlat(t,e,i,s,r,n,a){let o=i[s+0],h=i[s+1],l=i[s+2],c=i[s+3];const u=r[n+0],d=r[n+1],p=r[n+2],m=r[n+3];if(0===a)return t[e+0]=o,t[e+1]=h,t[e+2]=l,void(t[e+3]=c);if(1===a)return t[e+0]=u,t[e+1]=d,t[e+2]=p,void(t[e+3]=m);if(c!==m||o!==u||h!==d||l!==p){let t=1-a;const e=o*u+h*d+l*p+c*m,i=e>=0?1:-1,s=1-e*e;if(s>Number.EPSILON){const r=Math.sqrt(s),n=Math.atan2(r,e*i);t=Math.sin(t*n)/r,a=Math.sin(a*n)/r}const r=a*i;if(o=o*t+u*r,h=h*t+d*r,l=l*t+p*r,c=c*t+m*r,t===1-a){const t=1/Math.sqrt(o*o+h*h+l*l+c*c);o*=t,h*=t,l*=t,c*=t}}t[e]=o,t[e+1]=h,t[e+2]=l,t[e+3]=c}static multiplyQuaternionsFlat(t,e,i,s,r,n){const a=i[s],o=i[s+1],h=i[s+2],l=i[s+3],c=r[n],u=r[n+1],d=r[n+2],p=r[n+3];return t[e]=a*p+l*c+o*d-h*u,t[e+1]=o*p+l*u+h*c-a*d,t[e+2]=h*p+l*d+a*u-o*c,t[e+3]=l*p-a*c-o*u-h*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,i,s){return this._x=t,this._y=e,this._z=i,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const i=t._x,s=t._y,r=t._z,n=t._order,a=Math.cos,o=Math.sin,h=a(i/2),l=a(s/2),c=a(r/2),u=o(i/2),d=o(s/2),p=o(r/2);switch(n){case"XYZ":this._x=u*l*c+h*d*p,this._y=h*d*c-u*l*p,this._z=h*l*p+u*d*c,this._w=h*l*c-u*d*p;break;case"YXZ":this._x=u*l*c+h*d*p,this._y=h*d*c-u*l*p,this._z=h*l*p-u*d*c,this._w=h*l*c+u*d*p;break;case"ZXY":this._x=u*l*c-h*d*p,this._y=h*d*c+u*l*p,this._z=h*l*p+u*d*c,this._w=h*l*c-u*d*p;break;case"ZYX":this._x=u*l*c-h*d*p,this._y=h*d*c+u*l*p,this._z=h*l*p-u*d*c,this._w=h*l*c+u*d*p;break;case"YZX":this._x=u*l*c+h*d*p,this._y=h*d*c+u*l*p,this._z=h*l*p-u*d*c,this._w=h*l*c-u*d*p;break;case"XZY":this._x=u*l*c-h*d*p,this._y=h*d*c-u*l*p,this._z=h*l*p+u*d*c,this._w=h*l*c+u*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+n)}return!0===e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const i=e/2,s=Math.sin(i);return this._x=t.x*s,this._y=t.y*s,this._z=t.z*s,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,i=e[0],s=e[4],r=e[8],n=e[1],a=e[5],o=e[9],h=e[2],l=e[6],c=e[10],u=i+a+c;if(u>0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(l-o)*t,this._y=(r-h)*t,this._z=(n-s)*t}else if(i>a&&i>c){const t=2*Math.sqrt(1+i-a-c);this._w=(l-o)/t,this._x=.25*t,this._y=(s+n)/t,this._z=(r+h)/t}else if(a>c){const t=2*Math.sqrt(1+a-i-c);this._w=(r-h)/t,this._x=(s+n)/t,this._y=.25*t,this._z=(o+l)/t}else{const t=2*Math.sqrt(1+c-i-a);this._w=(n-s)/t,this._x=(r+h)/t,this._y=(o+l)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let i=t.dot(e)+1;return iMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=i):(this._x=0,this._y=-t.z,this._z=t.y,this._w=i)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=i),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Hi(this.dot(t),-1,1)))}rotateTowards(t,e){const i=this.angleTo(t);if(0===i)return this;const s=Math.min(1,e/i);return this.slerp(t,s),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const i=t._x,s=t._y,r=t._z,n=t._w,a=e._x,o=e._y,h=e._z,l=e._w;return this._x=i*l+n*a+s*h-r*o,this._y=s*l+n*o+r*a-i*h,this._z=r*l+n*h+i*o-s*a,this._w=n*l-i*a-s*o-r*h,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const i=this._x,s=this._y,r=this._z,n=this._w;let a=n*t._w+i*t._x+s*t._y+r*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a>=1)return this._w=n,this._x=i,this._y=s,this._z=r,this;const o=1-a*a;if(o<=Number.EPSILON){const t=1-e;return this._w=t*n+e*this._w,this._x=t*i+e*this._x,this._y=t*s+e*this._y,this._z=t*r+e*this._z,this.normalize(),this}const h=Math.sqrt(o),l=Math.atan2(h,a),c=Math.sin((1-e)*l)/h,u=Math.sin(e*l)/h;return this._w=n*c+this._w*u,this._x=i*c+this._x*u,this._y=s*c+this._y*u,this._z=r*c+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,i){return this.copy(t).slerp(e,i)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),i=Math.random(),s=Math.sqrt(1-i),r=Math.sqrt(i);return this.set(s*Math.sin(t),s*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class Qi{constructor(t=0,e=0,i=0){Qi.prototype.isVector3=!0,this.x=t,this.y=e,this.z=i}set(t,e,i){return void 0===i&&(i=this.z),this.x=t,this.y=e,this.z=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(ts.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(ts.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,i=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6]*s,this.y=r[1]*e+r[4]*i+r[7]*s,this.z=r[2]*e+r[5]*i+r[8]*s,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,i=this.y,s=this.z,r=t.elements,n=1/(r[3]*e+r[7]*i+r[11]*s+r[15]);return this.x=(r[0]*e+r[4]*i+r[8]*s+r[12])*n,this.y=(r[1]*e+r[5]*i+r[9]*s+r[13])*n,this.z=(r[2]*e+r[6]*i+r[10]*s+r[14])*n,this}applyQuaternion(t){const e=this.x,i=this.y,s=this.z,r=t.x,n=t.y,a=t.z,o=t.w,h=2*(n*s-a*i),l=2*(a*e-r*s),c=2*(r*i-n*e);return this.x=e+o*h+n*c-a*l,this.y=i+o*l+a*h-r*c,this.z=s+o*c+r*l-n*h,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,i=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[4]*i+r[8]*s,this.y=r[1]*e+r[5]*i+r[9]*s,this.z=r[2]*e+r[6]*i+r[10]*s,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Hi(this.x,t.x,e.x),this.y=Hi(this.y,t.y,e.y),this.z=Hi(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=Hi(this.x,t,e),this.y=Hi(this.y,t,e),this.z=Hi(this.z,t,e),this}clampLength(t,e){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Hi(i,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,i){return this.x=t.x+(e.x-t.x)*i,this.y=t.y+(e.y-t.y)*i,this.z=t.z+(e.z-t.z)*i,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const i=t.x,s=t.y,r=t.z,n=e.x,a=e.y,o=e.z;return this.x=s*o-r*a,this.y=r*n-i*o,this.z=i*a-s*n,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const i=t.dot(this)/e;return this.copy(t).multiplyScalar(i)}projectOnPlane(t){return Ki.copy(this).projectOnVector(t),this.sub(Ki)}reflect(t){return this.sub(Ki.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const i=this.dot(t)/e;return Math.acos(Hi(i,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,i=this.y-t.y,s=this.z-t.z;return e*e+i*i+s*s}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,i){const s=Math.sin(e)*t;return this.x=s*Math.sin(i),this.y=Math.cos(e)*t,this.z=s*Math.cos(i),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,i){return this.x=t*Math.sin(e),this.y=i,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),s=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=s,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=2*Math.random()-1,i=Math.sqrt(1-e*e);return this.x=i*Math.cos(t),this.y=e,this.z=i*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Ki=new Qi,ts=new $i;class es{constructor(t,e,i,s,r,n,a,o,h){es.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],void 0!==t&&this.set(t,e,i,s,r,n,a,o,h)}set(t,e,i,s,r,n,a,o,h){const l=this.elements;return l[0]=t,l[1]=s,l[2]=a,l[3]=e,l[4]=r,l[5]=o,l[6]=i,l[7]=n,l[8]=h,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this}extractBasis(t,e,i){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,s=e.elements,r=this.elements,n=i[0],a=i[3],o=i[6],h=i[1],l=i[4],c=i[7],u=i[2],d=i[5],p=i[8],m=s[0],y=s[3],g=s[6],f=s[1],x=s[4],b=s[7],v=s[2],w=s[5],M=s[8];return r[0]=n*m+a*f+o*v,r[3]=n*y+a*x+o*w,r[6]=n*g+a*b+o*M,r[1]=h*m+l*f+c*v,r[4]=h*y+l*x+c*w,r[7]=h*g+l*b+c*M,r[2]=u*m+d*f+p*v,r[5]=u*y+d*x+p*w,r[8]=u*g+d*b+p*M,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[1],s=t[2],r=t[3],n=t[4],a=t[5],o=t[6],h=t[7],l=t[8];return e*n*l-e*a*h-i*r*l+i*a*o+s*r*h-s*n*o}invert(){const t=this.elements,e=t[0],i=t[1],s=t[2],r=t[3],n=t[4],a=t[5],o=t[6],h=t[7],l=t[8],c=l*n-a*h,u=a*o-l*r,d=h*r-n*o,p=e*c+i*u+s*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const m=1/p;return t[0]=c*m,t[1]=(s*h-l*i)*m,t[2]=(a*i-s*n)*m,t[3]=u*m,t[4]=(l*e-s*o)*m,t[5]=(s*r-a*e)*m,t[6]=d*m,t[7]=(i*o-h*e)*m,t[8]=(n*e-i*r)*m,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,i,s,r,n,a){const o=Math.cos(r),h=Math.sin(r);return this.set(i*o,i*h,-i*(o*n+h*a)+n+t,-s*h,s*o,-s*(-h*n+o*a)+a+e,0,0,1),this}scale(t,e){return this.premultiply(is.makeScale(t,e)),this}rotate(t){return this.premultiply(is.makeRotation(-t)),this}translate(t,e){return this.premultiply(is.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,i,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,i=t.elements;for(let t=0;t<9;t++)if(e[t]!==i[t])return!1;return!0}fromArray(t,e=0){for(let i=0;i<9;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}const is=new es;function ss(t){for(let e=t.length-1;e>=0;--e)if(t[e]>=65535)return!0;return!1}const rs={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function ns(t,e){return new rs[t](e)}function as(t){return document.createElementNS("http://www.w3.org/1999/xhtml",t)}function os(){const t=as("canvas");return t.style.display="block",t}const hs={};function ls(t){t in hs||(hs[t]=!0,console.warn(t))}function cs(t,e,i){return new Promise((function(s,r){setTimeout((function n(){switch(t.clientWaitSync(e,t.SYNC_FLUSH_COMMANDS_BIT,0)){case t.WAIT_FAILED:r();break;case t.TIMEOUT_EXPIRED:setTimeout(n,i);break;default:s()}}),i)}))}function us(t){const e=t.elements;e[2]=.5*e[2]+.5*e[3],e[6]=.5*e[6]+.5*e[7],e[10]=.5*e[10]+.5*e[11],e[14]=.5*e[14]+.5*e[15]}function ds(t){const e=t.elements;-1===e[11]?(e[10]=-e[10]-1,e[14]=-e[14]):(e[10]=-e[10],e[14]=1-e[14])}const ps=(new es).set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),ms=(new es).set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function ys(){const t={enabled:!0,workingColorSpace:Ze,spaces:{},convert:function(t,e,i){return!1!==this.enabled&&e!==i&&e&&i?(this.spaces[e].transfer===$e&&(t.r=fs(t.r),t.g=fs(t.g),t.b=fs(t.b)),this.spaces[e].primaries!==this.spaces[i].primaries&&(t.applyMatrix3(this.spaces[e].toXYZ),t.applyMatrix3(this.spaces[i].fromXYZ)),this.spaces[i].transfer===$e&&(t.r=xs(t.r),t.g=xs(t.g),t.b=xs(t.b)),t):t},workingToColorSpace:function(t,e){return this.convert(t,this.workingColorSpace,e)},colorSpaceToWorking:function(t,e){return this.convert(t,e,this.workingColorSpace)},getPrimaries:function(t){return this.spaces[t].primaries},getTransfer:function(t){return""===t?Ge:this.spaces[t].transfer},getLuminanceCoefficients:function(t,e=this.workingColorSpace){return t.fromArray(this.spaces[e].luminanceCoefficients)},define:function(t){Object.assign(this.spaces,t)},_getMatrix:function(t,e,i){return t.copy(this.spaces[e].toXYZ).multiply(this.spaces[i].fromXYZ)},_getDrawingBufferColorSpace:function(t){return this.spaces[t].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(t=this.workingColorSpace){return this.spaces[t].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(e,i){return ls("THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),t.workingToColorSpace(e,i)},toWorkingColorSpace:function(e,i){return ls("THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),t.colorSpaceToWorking(e,i)}},e=[.64,.33,.3,.6,.15,.06],i=[.2126,.7152,.0722],s=[.3127,.329];return t.define({[Ze]:{primaries:e,whitePoint:s,transfer:Ge,toXYZ:ps,fromXYZ:ms,luminanceCoefficients:i,workingColorSpaceConfig:{unpackColorSpace:Ye},outputColorSpaceConfig:{drawingBufferColorSpace:Ye}},[Ye]:{primaries:e,whitePoint:s,transfer:$e,toXYZ:ps,fromXYZ:ms,luminanceCoefficients:i,outputColorSpaceConfig:{drawingBufferColorSpace:Ye}}}),t}const gs=ys();function fs(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function xs(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}let bs;class vs{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;let i;if(t instanceof HTMLCanvasElement)i=t;else{void 0===bs&&(bs=as("canvas")),bs.width=t.width,bs.height=t.height;const e=bs.getContext("2d");t instanceof ImageData?e.putImageData(t,0,0):e.drawImage(t,0,0,t.width,t.height),i=bs}return i.toDataURL(e)}static sRGBToLinear(t){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){const e=as("canvas");e.width=t.width,e.height=t.height;const i=e.getContext("2d");i.drawImage(t,0,0,t.width,t.height);const s=i.getImageData(0,0,t.width,t.height),r=s.data;for(let t=0;t1),this.pmremVersion=0}get width(){return this.source.getSize(As).x}get height(){return this.source.getSize(As).y}get depth(){return this.source.getSize(As).z}get image(){return this.source.data}set image(t=null){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return(new this.constructor).copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(const e in t){const i=t[e];if(void 0===i){console.warn(`THREE.Texture.setValues(): parameter '${e}' has value of undefined.`);continue}const s=this[e];void 0!==s?s&&i&&s.isVector2&&i.isVector2||s&&i&&s.isVector3&&i.isVector3||s&&i&&s.isMatrix3&&i.isMatrix3?s.copy(i):this[e]=i:console.warn(`THREE.Texture.setValues(): property '${e}' does not exist.`)}}toJSON(t){const e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),e||(t.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==ot)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case pt:t.x=t.x-Math.floor(t.x);break;case mt:t.x=t.x<0?0:1;break;case yt:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case pt:t.y=t.y-Math.floor(t.y);break;case mt:t.y=t.y<0?0:1;break;case yt:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){!0===t&&this.pmremVersion++}}Ts.DEFAULT_IMAGE=null,Ts.DEFAULT_MAPPING=ot,Ts.DEFAULT_ANISOTROPY=1;class zs{constructor(t=0,e=0,i=0,s=1){zs.prototype.isVector4=!0,this.x=t,this.y=e,this.z=i,this.w=s}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,i,s){return this.x=t,this.y=e,this.z=i,this.w=s,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,i=this.y,s=this.z,r=this.w,n=t.elements;return this.x=n[0]*e+n[4]*i+n[8]*s+n[12]*r,this.y=n[1]*e+n[5]*i+n[9]*s+n[13]*r,this.z=n[2]*e+n[6]*i+n[10]*s+n[14]*r,this.w=n[3]*e+n[7]*i+n[11]*s+n[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,i,s,r;const n=.01,a=.1,o=t.elements,h=o[0],l=o[4],c=o[8],u=o[1],d=o[5],p=o[9],m=o[2],y=o[6],g=o[10];if(Math.abs(l-u)o&&t>f?tf?o1;this.dispose()}this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){this.width=t.width,this.height=t.height,this.depth=t.depth,this.scissor.copy(t.scissor),this.scissorTest=t.scissorTest,this.viewport.copy(t.viewport),this.textures.length=0;for(let e=0,i=t.textures.length;e=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,Ns),Ns.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,i;return t.normal.x>0?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=-t.constant&&i>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Hs),qs.subVectors(this.max,Hs),Vs.subVectors(t.a,Hs),Ls.subVectors(t.b,Hs),js.subVectors(t.c,Hs),Ws.subVectors(Ls,Vs),Us.subVectors(js,Ls),Ds.subVectors(Vs,js);let e=[0,-Ws.z,Ws.y,0,-Us.z,Us.y,0,-Ds.z,Ds.y,Ws.z,0,-Ws.x,Us.z,0,-Us.x,Ds.z,0,-Ds.x,-Ws.y,Ws.x,0,-Us.y,Us.x,0,-Ds.y,Ds.x,0];return!!Ys(e,Vs,Ls,js,qs)&&(e=[1,0,0,0,1,0,0,0,1],!!Ys(e,Vs,Ls,js,qs)&&(Js.crossVectors(Ws,Us),e=[Js.x,Js.y,Js.z],Ys(e,Vs,Ls,js,qs)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Ns).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=.5*this.getSize(Ns).length()),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(Os[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Os[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Os[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Os[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Os[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Os[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Os[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Os[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Os)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}}const Os=[new Qi,new Qi,new Qi,new Qi,new Qi,new Qi,new Qi,new Qi],Ns=new Qi,Fs=new Ps,Vs=new Qi,Ls=new Qi,js=new Qi,Ws=new Qi,Us=new Qi,Ds=new Qi,Hs=new Qi,qs=new Qi,Js=new Qi,Xs=new Qi;function Ys(t,e,i,s,r){for(let n=0,a=t.length-3;n<=a;n+=3){Xs.fromArray(t,n);const a=r.x*Math.abs(Xs.x)+r.y*Math.abs(Xs.y)+r.z*Math.abs(Xs.z),o=e.dot(Xs),h=i.dot(Xs),l=s.dot(Xs);if(Math.max(-Math.max(o,h,l),Math.min(o,h,l))>a)return!1}return!0}const Zs=new Ps,Gs=new Qi,$s=new Qi;class Qs{constructor(t=new Qi,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const i=this.center;void 0!==e?i.copy(e):Zs.setFromPoints(t).getCenter(i);let s=0;for(let e=0,r=t.length;ethis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Gs.subVectors(t,this.center);const e=Gs.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),i=.5*(t-this.radius);this.center.addScaledVector(Gs,i/t),this.radius+=i}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(!0===this.center.equals(t.center)?this.radius=Math.max(this.radius,t.radius):($s.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Gs.copy(t.center).add($s)),this.expandByPoint(Gs.copy(t.center).sub($s))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}}const Ks=new Qi,tr=new Qi,er=new Qi,ir=new Qi,sr=new Qi,rr=new Qi,nr=new Qi;class ar{constructor(t=new Qi,e=new Qi(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Ks)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Ks.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Ks.copy(this.origin).addScaledVector(this.direction,e),Ks.distanceToSquared(t))}distanceSqToSegment(t,e,i,s){tr.copy(t).add(e).multiplyScalar(.5),er.copy(e).sub(t).normalize(),ir.copy(this.origin).sub(tr);const r=.5*t.distanceTo(e),n=-this.direction.dot(er),a=ir.dot(this.direction),o=-ir.dot(er),h=ir.lengthSq(),l=Math.abs(1-n*n);let c,u,d,p;if(l>0)if(c=n*o-a,u=n*a-o,p=r*l,c>=0)if(u>=-p)if(u<=p){const t=1/l;c*=t,u*=t,d=c*(c+n*u+2*a)+u*(n*c+u+2*o)+h}else u=r,c=Math.max(0,-(n*u+a)),d=-c*c+u*(u+2*o)+h;else u=-r,c=Math.max(0,-(n*u+a)),d=-c*c+u*(u+2*o)+h;else u<=-p?(c=Math.max(0,-(-n*r+a)),u=c>0?-r:Math.min(Math.max(-r,-o),r),d=-c*c+u*(u+2*o)+h):u<=p?(c=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+h):(c=Math.max(0,-(n*r+a)),u=c>0?r:Math.min(Math.max(-r,-o),r),d=-c*c+u*(u+2*o)+h);else u=n>0?-r:r,c=Math.max(0,-(n*u+a)),d=-c*c+u*(u+2*o)+h;return i&&i.copy(this.origin).addScaledVector(this.direction,c),s&&s.copy(tr).addScaledVector(er,u),d}intersectSphere(t,e){Ks.subVectors(t.center,this.origin);const i=Ks.dot(this.direction),s=Ks.dot(Ks)-i*i,r=t.radius*t.radius;if(s>r)return null;const n=Math.sqrt(r-s),a=i-n,o=i+n;return o<0?null:a<0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return!(t.radius<0)&&this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const i=-(this.origin.dot(t.normal)+t.constant)/e;return i>=0?i:null}intersectPlane(t,e){const i=this.distanceToPlane(t);return null===i?null:this.at(i,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let i,s,r,n,a,o;const h=1/this.direction.x,l=1/this.direction.y,c=1/this.direction.z,u=this.origin;return h>=0?(i=(t.min.x-u.x)*h,s=(t.max.x-u.x)*h):(i=(t.max.x-u.x)*h,s=(t.min.x-u.x)*h),l>=0?(r=(t.min.y-u.y)*l,n=(t.max.y-u.y)*l):(r=(t.max.y-u.y)*l,n=(t.min.y-u.y)*l),i>n||r>s?null:((r>i||isNaN(i))&&(i=r),(n=0?(a=(t.min.z-u.z)*c,o=(t.max.z-u.z)*c):(a=(t.max.z-u.z)*c,o=(t.min.z-u.z)*c),i>o||a>s?null:((a>i||i!=i)&&(i=a),(o=0?i:s,e)))}intersectsBox(t){return null!==this.intersectBox(t,Ks)}intersectTriangle(t,e,i,s,r){sr.subVectors(e,t),rr.subVectors(i,t),nr.crossVectors(sr,rr);let n,a=this.direction.dot(nr);if(a>0){if(s)return null;n=1}else{if(!(a<0))return null;n=-1,a=-a}ir.subVectors(this.origin,t);const o=n*this.direction.dot(rr.crossVectors(ir,rr));if(o<0)return null;const h=n*this.direction.dot(sr.cross(ir));if(h<0)return null;if(o+h>a)return null;const l=-n*ir.dot(nr);return l<0?null:this.at(l/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class or{constructor(t,e,i,s,r,n,a,o,h,l,c,u,d,p,m,y){or.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],void 0!==t&&this.set(t,e,i,s,r,n,a,o,h,l,c,u,d,p,m,y)}set(t,e,i,s,r,n,a,o,h,l,c,u,d,p,m,y){const g=this.elements;return g[0]=t,g[4]=e,g[8]=i,g[12]=s,g[1]=r,g[5]=n,g[9]=a,g[13]=o,g[2]=h,g[6]=l,g[10]=c,g[14]=u,g[3]=d,g[7]=p,g[11]=m,g[15]=y,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new or).fromArray(this.elements)}copy(t){const e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this}copyPosition(t){const e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,i){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,i=t.elements,s=1/hr.setFromMatrixColumn(t,0).length(),r=1/hr.setFromMatrixColumn(t,1).length(),n=1/hr.setFromMatrixColumn(t,2).length();return e[0]=i[0]*s,e[1]=i[1]*s,e[2]=i[2]*s,e[3]=0,e[4]=i[4]*r,e[5]=i[5]*r,e[6]=i[6]*r,e[7]=0,e[8]=i[8]*n,e[9]=i[9]*n,e[10]=i[10]*n,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,i=t.x,s=t.y,r=t.z,n=Math.cos(i),a=Math.sin(i),o=Math.cos(s),h=Math.sin(s),l=Math.cos(r),c=Math.sin(r);if("XYZ"===t.order){const t=n*l,i=n*c,s=a*l,r=a*c;e[0]=o*l,e[4]=-o*c,e[8]=h,e[1]=i+s*h,e[5]=t-r*h,e[9]=-a*o,e[2]=r-t*h,e[6]=s+i*h,e[10]=n*o}else if("YXZ"===t.order){const t=o*l,i=o*c,s=h*l,r=h*c;e[0]=t+r*a,e[4]=s*a-i,e[8]=n*h,e[1]=n*c,e[5]=n*l,e[9]=-a,e[2]=i*a-s,e[6]=r+t*a,e[10]=n*o}else if("ZXY"===t.order){const t=o*l,i=o*c,s=h*l,r=h*c;e[0]=t-r*a,e[4]=-n*c,e[8]=s+i*a,e[1]=i+s*a,e[5]=n*l,e[9]=r-t*a,e[2]=-n*h,e[6]=a,e[10]=n*o}else if("ZYX"===t.order){const t=n*l,i=n*c,s=a*l,r=a*c;e[0]=o*l,e[4]=s*h-i,e[8]=t*h+r,e[1]=o*c,e[5]=r*h+t,e[9]=i*h-s,e[2]=-h,e[6]=a*o,e[10]=n*o}else if("YZX"===t.order){const t=n*o,i=n*h,s=a*o,r=a*h;e[0]=o*l,e[4]=r-t*c,e[8]=s*c+i,e[1]=c,e[5]=n*l,e[9]=-a*l,e[2]=-h*l,e[6]=i*c+s,e[10]=t-r*c}else if("XZY"===t.order){const t=n*o,i=n*h,s=a*o,r=a*h;e[0]=o*l,e[4]=-c,e[8]=h*l,e[1]=t*c+r,e[5]=n*l,e[9]=i*c-s,e[2]=s*c-i,e[6]=a*l,e[10]=r*c+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(cr,t,ur)}lookAt(t,e,i){const s=this.elements;return mr.subVectors(t,e),0===mr.lengthSq()&&(mr.z=1),mr.normalize(),dr.crossVectors(i,mr),0===dr.lengthSq()&&(1===Math.abs(i.z)?mr.x+=1e-4:mr.z+=1e-4,mr.normalize(),dr.crossVectors(i,mr)),dr.normalize(),pr.crossVectors(mr,dr),s[0]=dr.x,s[4]=pr.x,s[8]=mr.x,s[1]=dr.y,s[5]=pr.y,s[9]=mr.y,s[2]=dr.z,s[6]=pr.z,s[10]=mr.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const i=t.elements,s=e.elements,r=this.elements,n=i[0],a=i[4],o=i[8],h=i[12],l=i[1],c=i[5],u=i[9],d=i[13],p=i[2],m=i[6],y=i[10],g=i[14],f=i[3],x=i[7],b=i[11],v=i[15],w=s[0],M=s[4],S=s[8],_=s[12],A=s[1],T=s[5],z=s[9],I=s[13],C=s[2],B=s[6],k=s[10],R=s[14],E=s[3],P=s[7],O=s[11],N=s[15];return r[0]=n*w+a*A+o*C+h*E,r[4]=n*M+a*T+o*B+h*P,r[8]=n*S+a*z+o*k+h*O,r[12]=n*_+a*I+o*R+h*N,r[1]=l*w+c*A+u*C+d*E,r[5]=l*M+c*T+u*B+d*P,r[9]=l*S+c*z+u*k+d*O,r[13]=l*_+c*I+u*R+d*N,r[2]=p*w+m*A+y*C+g*E,r[6]=p*M+m*T+y*B+g*P,r[10]=p*S+m*z+y*k+g*O,r[14]=p*_+m*I+y*R+g*N,r[3]=f*w+x*A+b*C+v*E,r[7]=f*M+x*T+b*B+v*P,r[11]=f*S+x*z+b*k+v*O,r[15]=f*_+x*I+b*R+v*N,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],i=t[4],s=t[8],r=t[12],n=t[1],a=t[5],o=t[9],h=t[13],l=t[2],c=t[6],u=t[10],d=t[14];return t[3]*(+r*o*c-s*h*c-r*a*u+i*h*u+s*a*d-i*o*d)+t[7]*(+e*o*d-e*h*u+r*n*u-s*n*d+s*h*l-r*o*l)+t[11]*(+e*h*c-e*a*d-r*n*c+i*n*d+r*a*l-i*h*l)+t[15]*(-s*a*l-e*o*c+e*a*u+s*n*c-i*n*u+i*o*l)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,i){const s=this.elements;return t.isVector3?(s[12]=t.x,s[13]=t.y,s[14]=t.z):(s[12]=t,s[13]=e,s[14]=i),this}invert(){const t=this.elements,e=t[0],i=t[1],s=t[2],r=t[3],n=t[4],a=t[5],o=t[6],h=t[7],l=t[8],c=t[9],u=t[10],d=t[11],p=t[12],m=t[13],y=t[14],g=t[15],f=c*y*h-m*u*h+m*o*d-a*y*d-c*o*g+a*u*g,x=p*u*h-l*y*h-p*o*d+n*y*d+l*o*g-n*u*g,b=l*m*h-p*c*h+p*a*d-n*m*d-l*a*g+n*c*g,v=p*c*o-l*m*o-p*a*u+n*m*u+l*a*y-n*c*y,w=e*f+i*x+s*b+r*v;if(0===w)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const M=1/w;return t[0]=f*M,t[1]=(m*u*r-c*y*r-m*s*d+i*y*d+c*s*g-i*u*g)*M,t[2]=(a*y*r-m*o*r+m*s*h-i*y*h-a*s*g+i*o*g)*M,t[3]=(c*o*r-a*u*r-c*s*h+i*u*h+a*s*d-i*o*d)*M,t[4]=x*M,t[5]=(l*y*r-p*u*r+p*s*d-e*y*d-l*s*g+e*u*g)*M,t[6]=(p*o*r-n*y*r-p*s*h+e*y*h+n*s*g-e*o*g)*M,t[7]=(n*u*r-l*o*r+l*s*h-e*u*h-n*s*d+e*o*d)*M,t[8]=b*M,t[9]=(p*c*r-l*m*r-p*i*d+e*m*d+l*i*g-e*c*g)*M,t[10]=(n*m*r-p*a*r+p*i*h-e*m*h-n*i*g+e*a*g)*M,t[11]=(l*a*r-n*c*r-l*i*h+e*c*h+n*i*d-e*a*d)*M,t[12]=v*M,t[13]=(l*m*s-p*c*s+p*i*u-e*m*u-l*i*y+e*c*y)*M,t[14]=(p*a*s-n*m*s-p*i*o+e*m*o+n*i*y-e*a*y)*M,t[15]=(n*c*s-l*a*s+l*i*o-e*c*o-n*i*u+e*a*u)*M,this}scale(t){const e=this.elements,i=t.x,s=t.y,r=t.z;return e[0]*=i,e[4]*=s,e[8]*=r,e[1]*=i,e[5]*=s,e[9]*=r,e[2]*=i,e[6]*=s,e[10]*=r,e[3]*=i,e[7]*=s,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],s=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,s))}makeTranslation(t,e,i){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const i=Math.cos(e),s=Math.sin(e),r=1-i,n=t.x,a=t.y,o=t.z,h=r*n,l=r*a;return this.set(h*n+i,h*a-s*o,h*o+s*a,0,h*a+s*o,l*a+i,l*o-s*n,0,h*o-s*a,l*o+s*n,r*o*o+i,0,0,0,0,1),this}makeScale(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this}makeShear(t,e,i,s,r,n){return this.set(1,i,r,0,t,1,n,0,e,s,1,0,0,0,0,1),this}compose(t,e,i){const s=this.elements,r=e._x,n=e._y,a=e._z,o=e._w,h=r+r,l=n+n,c=a+a,u=r*h,d=r*l,p=r*c,m=n*l,y=n*c,g=a*c,f=o*h,x=o*l,b=o*c,v=i.x,w=i.y,M=i.z;return s[0]=(1-(m+g))*v,s[1]=(d+b)*v,s[2]=(p-x)*v,s[3]=0,s[4]=(d-b)*w,s[5]=(1-(u+g))*w,s[6]=(y+f)*w,s[7]=0,s[8]=(p+x)*M,s[9]=(y-f)*M,s[10]=(1-(u+m))*M,s[11]=0,s[12]=t.x,s[13]=t.y,s[14]=t.z,s[15]=1,this}decompose(t,e,i){const s=this.elements;let r=hr.set(s[0],s[1],s[2]).length();const n=hr.set(s[4],s[5],s[6]).length(),a=hr.set(s[8],s[9],s[10]).length();this.determinant()<0&&(r=-r),t.x=s[12],t.y=s[13],t.z=s[14],lr.copy(this);const o=1/r,h=1/n,l=1/a;return lr.elements[0]*=o,lr.elements[1]*=o,lr.elements[2]*=o,lr.elements[4]*=h,lr.elements[5]*=h,lr.elements[6]*=h,lr.elements[8]*=l,lr.elements[9]*=l,lr.elements[10]*=l,e.setFromRotationMatrix(lr),i.x=r,i.y=n,i.z=a,this}makePerspective(t,e,i,s,r,n,a=2e3){const o=this.elements,h=2*r/(e-t),l=2*r/(i-s),c=(e+t)/(e-t),u=(i+s)/(i-s);let d,p;if(a===Ei)d=-(n+r)/(n-r),p=-2*n*r/(n-r);else{if(a!==Pi)throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+a);d=-n/(n-r),p=-n*r/(n-r)}return o[0]=h,o[4]=0,o[8]=c,o[12]=0,o[1]=0,o[5]=l,o[9]=u,o[13]=0,o[2]=0,o[6]=0,o[10]=d,o[14]=p,o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this}makeOrthographic(t,e,i,s,r,n,a=2e3){const o=this.elements,h=1/(e-t),l=1/(i-s),c=1/(n-r),u=(e+t)*h,d=(i+s)*l;let p,m;if(a===Ei)p=(n+r)*c,m=-2*c;else{if(a!==Pi)throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+a);p=r*c,m=-1*c}return o[0]=2*h,o[4]=0,o[8]=0,o[12]=-u,o[1]=0,o[5]=2*l,o[9]=0,o[13]=-d,o[2]=0,o[6]=0,o[10]=m,o[14]=-p,o[3]=0,o[7]=0,o[11]=0,o[15]=1,this}equals(t){const e=this.elements,i=t.elements;for(let t=0;t<16;t++)if(e[t]!==i[t])return!1;return!0}fromArray(t,e=0){for(let i=0;i<16;i++)this.elements[i]=t[i+e];return this}toArray(t=[],e=0){const i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}const hr=new Qi,lr=new or,cr=new Qi(0,0,0),ur=new Qi(1,1,1),dr=new Qi,pr=new Qi,mr=new Qi,yr=new or,gr=new $i;class fr{constructor(t=0,e=0,i=0,s=fr.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=i,this._order=s}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,i,s=this._order){return this._x=t,this._y=e,this._z=i,this._order=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,i=!0){const s=t.elements,r=s[0],n=s[4],a=s[8],o=s[1],h=s[5],l=s[9],c=s[2],u=s[6],d=s[10];switch(e){case"XYZ":this._y=Math.asin(Hi(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-l,d),this._z=Math.atan2(-n,r)):(this._x=Math.atan2(u,h),this._z=0);break;case"YXZ":this._x=Math.asin(-Hi(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,h)):(this._y=Math.atan2(-c,r),this._z=0);break;case"ZXY":this._x=Math.asin(Hi(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(-c,d),this._z=Math.atan2(-n,h)):(this._y=0,this._z=Math.atan2(o,r));break;case"ZYX":this._y=Math.asin(-Hi(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(u,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-n,h));break;case"YZX":this._z=Math.asin(Hi(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,h),this._y=Math.atan2(-c,r)):(this._x=0,this._y=Math.atan2(a,d));break;case"XZY":this._z=Math.asin(-Hi(n,-1,1)),Math.abs(n)<.9999999?(this._x=Math.atan2(u,h),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-l,d),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!0===i&&this._onChangeCallback(),this}setFromQuaternion(t,e,i){return yr.makeRotationFromQuaternion(t),this.setFromRotationMatrix(yr,e,i)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return gr.setFromEuler(this),this.setFromQuaternion(gr,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}fr.DEFAULT_ORDER="XYZ";class xr{constructor(){this.mask=1}set(t){this.mask=1<>>0}enable(t){this.mask|=1<1){for(let t=0;t1){for(let t=0;t0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),!1===this.matrixAutoUpdate&&(s.matrixAutoUpdate=!1),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.geometryInfo=this._geometryInfo.map((t=>({...t,boundingBox:t.boundingBox?t.boundingBox.toJSON():void 0,boundingSphere:t.boundingSphere?t.boundingSphere.toJSON():void 0}))),s.instanceInfo=this._instanceInfo.map((t=>({...t}))),s.availableInstanceIds=this._availableInstanceIds.slice(),s.availableGeometryIds=this._availableGeometryIds.slice(),s.nextIndexStart=this._nextIndexStart,s.nextVertexStart=this._nextVertexStart,s.geometryCount=this._geometryCount,s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.matricesTexture=this._matricesTexture.toJSON(t),s.indirectTexture=this._indirectTexture.toJSON(t),null!==this._colorsTexture&&(s.colorsTexture=this._colorsTexture.toJSON(t)),null!==this.boundingSphere&&(s.boundingSphere=this.boundingSphere.toJSON()),null!==this.boundingBox&&(s.boundingBox=this.boundingBox.toJSON())),this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&!0!==this.environment.isRenderTargetTexture&&(s.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const i=e.shapes;if(Array.isArray(i))for(let e=0,s=i.length;e0){s.children=[];for(let e=0;e0){s.animations=[];for(let e=0;e0&&(i.geometries=e),s.length>0&&(i.materials=s),r.length>0&&(i.textures=r),a.length>0&&(i.images=a),o.length>0&&(i.shapes=o),h.length>0&&(i.skeletons=h),l.length>0&&(i.animations=l),c.length>0&&(i.nodes=c)}return i.object=s,i;function n(t){const e=[];for(const i in t){const s=t[i];delete s.metadata,e.push(s)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e0?s.multiplyScalar(1/Math.sqrt(r)):s.set(0,0,0)}static getBarycoord(t,e,i,s,r){Or.subVectors(s,e),Nr.subVectors(i,e),Fr.subVectors(t,e);const n=Or.dot(Or),a=Or.dot(Nr),o=Or.dot(Fr),h=Nr.dot(Nr),l=Nr.dot(Fr),c=n*h-a*a;if(0===c)return r.set(0,0,0),null;const u=1/c,d=(h*o-a*l)*u,p=(n*l-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,i,s){return null!==this.getBarycoord(t,e,i,s,Vr)&&(Vr.x>=0&&Vr.y>=0&&Vr.x+Vr.y<=1)}static getInterpolation(t,e,i,s,r,n,a,o){return null===this.getBarycoord(t,e,i,s,Vr)?(o.x=0,o.y=0,"z"in o&&(o.z=0),"w"in o&&(o.w=0),null):(o.setScalar(0),o.addScaledVector(r,Vr.x),o.addScaledVector(n,Vr.y),o.addScaledVector(a,Vr.z),o)}static getInterpolatedAttribute(t,e,i,s,r,n){return qr.setScalar(0),Jr.setScalar(0),Xr.setScalar(0),qr.fromBufferAttribute(t,e),Jr.fromBufferAttribute(t,i),Xr.fromBufferAttribute(t,s),n.setScalar(0),n.addScaledVector(qr,r.x),n.addScaledVector(Jr,r.y),n.addScaledVector(Xr,r.z),n}static isFrontFacing(t,e,i,s){return Or.subVectors(i,e),Nr.subVectors(t,e),Or.cross(Nr).dot(s)<0}set(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this}setFromPointsAndIndices(t,e,i,s){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[s]),this}setFromAttributeAndIndices(t,e,i,s){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,i),this.c.fromBufferAttribute(t,s),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Or.subVectors(this.c,this.b),Nr.subVectors(this.a,this.b),.5*Or.cross(Nr).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Yr.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Yr.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,i,s,r){return Yr.getInterpolation(t,this.a,this.b,this.c,e,i,s,r)}containsPoint(t){return Yr.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Yr.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const i=this.a,s=this.b,r=this.c;let n,a;Lr.subVectors(s,i),jr.subVectors(r,i),Ur.subVectors(t,i);const o=Lr.dot(Ur),h=jr.dot(Ur);if(o<=0&&h<=0)return e.copy(i);Dr.subVectors(t,s);const l=Lr.dot(Dr),c=jr.dot(Dr);if(l>=0&&c<=l)return e.copy(s);const u=o*c-l*h;if(u<=0&&o>=0&&l<=0)return n=o/(o-l),e.copy(i).addScaledVector(Lr,n);Hr.subVectors(t,r);const d=Lr.dot(Hr),p=jr.dot(Hr);if(p>=0&&d<=p)return e.copy(r);const m=d*h-o*p;if(m<=0&&h>=0&&p<=0)return a=h/(h-p),e.copy(i).addScaledVector(jr,a);const y=l*p-d*c;if(y<=0&&c-l>=0&&d-p>=0)return Wr.subVectors(r,s),a=(c-l)/(c-l+(d-p)),e.copy(s).addScaledVector(Wr,a);const g=1/(y+m+u);return n=m*g,a=u*g,e.copy(i).addScaledVector(Lr,n).addScaledVector(jr,a)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const Zr={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Gr={h:0,s:0,l:0},$r={h:0,s:0,l:0};function Qr(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+6*(e-t)*(2/3-i):t}class Kr{constructor(t,e,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,i)}set(t,e,i){if(void 0===e&&void 0===i){const e=t;e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e)}else this.setRGB(t,e,i);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=Ye){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,gs.colorSpaceToWorking(this,e),this}setRGB(t,e,i,s=gs.workingColorSpace){return this.r=t,this.g=e,this.b=i,gs.colorSpaceToWorking(this,s),this}setHSL(t,e,i,s=gs.workingColorSpace){if(t=qi(t,1),e=Hi(e,0,1),i=Hi(i,0,1),0===e)this.r=this.g=this.b=i;else{const s=i<=.5?i*(1+e):i+e-i*e,r=2*i-s;this.r=Qr(r,s,t+1/3),this.g=Qr(r,s,t),this.b=Qr(r,s,t-1/3)}return gs.colorSpaceToWorking(this,s),this}setStyle(t,e=Ye){function i(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const n=s[1],a=s[2];switch(n){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,e);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(t)){const i=s[1],r=i.length;if(3===r)return this.setRGB(parseInt(i.charAt(0),16)/15,parseInt(i.charAt(1),16)/15,parseInt(i.charAt(2),16)/15,e);if(6===r)return this.setHex(parseInt(i,16),e);console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=Ye){const i=Zr[t.toLowerCase()];return void 0!==i?this.setHex(i,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=fs(t.r),this.g=fs(t.g),this.b=fs(t.b),this}copyLinearToSRGB(t){return this.r=xs(t.r),this.g=xs(t.g),this.b=xs(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=Ye){return gs.workingToColorSpace(tn.copy(this),t),65536*Math.round(Hi(255*tn.r,0,255))+256*Math.round(Hi(255*tn.g,0,255))+Math.round(Hi(255*tn.b,0,255))}getHexString(t=Ye){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=gs.workingColorSpace){gs.workingToColorSpace(tn.copy(this),e);const i=tn.r,s=tn.g,r=tn.b,n=Math.max(i,s,r),a=Math.min(i,s,r);let o,h;const l=(a+n)/2;if(a===n)o=0,h=0;else{const t=n-a;switch(h=l<=.5?t/(n+a):t/(2-n-a),n){case i:o=(s-r)/t+(s0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const i=t[e];if(void 0===i){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}const s=this[e];void 0!==s?s&&s.isColor?s.set(i):s&&s.isVector3&&i&&i.isVector3?s.copy(i):this[e]=i:console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`)}}toJSON(t){const e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};function s(t){const e=[];for(const i in t){const s=t[i];delete s.metadata,e.push(s)}return e}if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),void 0!==this.sheen&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),void 0!==this.emissiveIntensity&&1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearcoat&&(i.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),void 0!==this.dispersion&&(i.dispersion=this.dispersion),void 0!==this.iridescence&&(i.iridescence=this.iridescence),void 0!==this.iridescenceIOR&&(i.iridescenceIOR=this.iridescenceIOR),void 0!==this.iridescenceThicknessRange&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),void 0!==this.anisotropy&&(i.anisotropy=this.anisotropy),void 0!==this.anisotropyRotation&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(t).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(i.combine=this.combine)),void 0!==this.envMapRotation&&(i.envMapRotation=this.envMapRotation.toArray()),void 0!==this.envMapIntensity&&(i.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(i.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor&&(i.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size&&(i.size=this.size),null!==this.shadowSide&&(i.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(i.blending=this.blending),0!==this.side&&(i.side=this.side),!0===this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),!0===this.transparent&&(i.transparent=!0),204!==this.blendSrc&&(i.blendSrc=this.blendSrc),205!==this.blendDst&&(i.blendDst=this.blendDst),100!==this.blendEquation&&(i.blendEquation=this.blendEquation),null!==this.blendSrcAlpha&&(i.blendSrcAlpha=this.blendSrcAlpha),null!==this.blendDstAlpha&&(i.blendDstAlpha=this.blendDstAlpha),null!==this.blendEquationAlpha&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),0!==this.blendAlpha&&(i.blendAlpha=this.blendAlpha),3!==this.depthFunc&&(i.depthFunc=this.depthFunc),!1===this.depthTest&&(i.depthTest=this.depthTest),!1===this.depthWrite&&(i.depthWrite=this.depthWrite),!1===this.colorWrite&&(i.colorWrite=this.colorWrite),255!==this.stencilWriteMask&&(i.stencilWriteMask=this.stencilWriteMask),519!==this.stencilFunc&&(i.stencilFunc=this.stencilFunc),0!==this.stencilRef&&(i.stencilRef=this.stencilRef),255!==this.stencilFuncMask&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==Ke&&(i.stencilFail=this.stencilFail),this.stencilZFail!==Ke&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==Ke&&(i.stencilZPass=this.stencilZPass),!0===this.stencilWrite&&(i.stencilWrite=this.stencilWrite),void 0!==this.rotation&&0!==this.rotation&&(i.rotation=this.rotation),!0===this.polygonOffset&&(i.polygonOffset=!0),0!==this.polygonOffsetFactor&&(i.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(i.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth&&1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),!0===this.alphaHash&&(i.alphaHash=!0),!0===this.alphaToCoverage&&(i.alphaToCoverage=!0),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=!0),!0===this.forceSinglePass&&(i.forceSinglePass=!0),!0===this.wireframe&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(i.flatShading=!0),!1===this.visible&&(i.visible=!1),!1===this.toneMapped&&(i.toneMapped=!1),!1===this.fog&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData),e){const e=s(t.textures),r=s(t.images);e.length>0&&(i.textures=e),r.length>0&&(i.images=r)}return i}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let i=null;if(null!==e){const t=e.length;i=new Array(t);for(let s=0;s!==t;++s)i[s]=e[s].clone()}return this.clippingPlanes=i,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){!0===t&&this.version++}}class rn extends sn{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new Kr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new fr,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const nn=an();function an(){const t=new ArrayBuffer(4),e=new Float32Array(t),i=new Uint32Array(t),s=new Uint32Array(512),r=new Uint32Array(512);for(let t=0;t<256;++t){const e=t-127;e<-27?(s[t]=0,s[256|t]=32768,r[t]=24,r[256|t]=24):e<-14?(s[t]=1024>>-e-14,s[256|t]=1024>>-e-14|32768,r[t]=-e-1,r[256|t]=-e-1):e<=15?(s[t]=e+15<<10,s[256|t]=e+15<<10|32768,r[t]=13,r[256|t]=13):e<128?(s[t]=31744,s[256|t]=64512,r[t]=24,r[256|t]=24):(s[t]=31744,s[256|t]=64512,r[t]=13,r[256|t]=13)}const n=new Uint32Array(2048),a=new Uint32Array(64),o=new Uint32Array(64);for(let t=1;t<1024;++t){let e=t<<13,i=0;for(;!(8388608&e);)e<<=1,i-=8388608;e&=-8388609,i+=947912704,n[t]=e|i}for(let t=1024;t<2048;++t)n[t]=939524096+(t-1024<<13);for(let t=1;t<31;++t)a[t]=t<<23;a[31]=1199570944,a[32]=2147483648;for(let t=33;t<63;++t)a[t]=2147483648+(t-32<<23);a[63]=3347054592;for(let t=1;t<64;++t)32!==t&&(o[t]=1024);return{floatView:e,uint32View:i,baseTable:s,shiftTable:r,mantissaTable:n,exponentTable:a,offsetTable:o}}function on(t){Math.abs(t)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),t=Hi(t,-65504,65504),nn.floatView[0]=t;const e=nn.uint32View[0],i=e>>23&511;return nn.baseTable[i]+((8388607&e)>>nn.shiftTable[i])}function hn(t){const e=t>>10;return nn.uint32View[0]=nn.mantissaTable[nn.offsetTable[e]+(1023&t)]+nn.exponentTable[e],nn.floatView[0]}class ln{static toHalfFloat(t){return on(t)}static fromHalfFloat(t){return hn(t)}}const cn=new Qi,un=new Gi;let dn=0;class pn{constructor(t,e,i=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:dn++}),this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=i,this.usage=Mi,this.updateRanges=[],this.gpuType=Rt,this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,i){t*=this.itemSize,i*=e.itemSize;for(let s=0,r=this.itemSize;se.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new Ps);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),void this.boundingBox.set(new Qi(-1/0,-1/0,-1/0),new Qi(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,i=e.length;t0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const i in e)void 0!==e[i]&&(t[i]=e[i]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const i=this.attributes;for(const e in i){const s=i[e];t.data.attributes[e]=s.toJSON(t.data)}const s={};let r=!1;for(const e in this.morphAttributes){const i=this.morphAttributes[e],n=[];for(let e=0,s=i.length;e0&&(s[e]=n,r=!0)}r&&(t.data.morphAttributes=s,t.data.morphTargetsRelative=this.morphTargetsRelative);const n=this.groups;n.length>0&&(t.data.groups=JSON.parse(JSON.stringify(n)));const a=this.boundingSphere;return null!==a&&(t.data.boundingSphere=a.toJSON()),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const i=t.index;null!==i&&this.setIndex(i.clone());const s=t.attributes;for(const t in s){const i=s[t];this.setAttribute(t,i.clone(e))}const r=t.morphAttributes;for(const t in r){const i=[],s=r[t];for(let t=0,r=s.length;t0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;t(t.far-t.near)**2)return}kn.copy(r).invert(),Rn.copy(t.ray).applyMatrix4(kn),null!==i.boundingBox&&!1===Rn.intersectsBox(i.boundingBox)||this._computeIntersections(t,e,Rn)}}_computeIntersections(t,e,i){let s;const r=this.geometry,n=this.material,a=r.index,o=r.attributes.position,h=r.attributes.uv,l=r.attributes.uv1,c=r.attributes.normal,u=r.groups,d=r.drawRange;if(null!==a)if(Array.isArray(n))for(let r=0,o=u.length;ri.far?null:{distance:l,point:Wn.clone(),object:t}}(t,e,i,s,On,Nn,Fn,jn);if(c){const t=new Qi;Yr.getBarycoord(jn,On,Nn,Fn,t),r&&(c.uv=Yr.getInterpolatedAttribute(r,o,h,l,t,new Gi)),n&&(c.uv1=Yr.getInterpolatedAttribute(n,o,h,l,t,new Gi)),a&&(c.normal=Yr.getInterpolatedAttribute(a,o,h,l,t,new Qi),c.normal.dot(s.direction)>0&&c.normal.multiplyScalar(-1));const e={a:o,b:h,c:l,normal:new Qi,materialIndex:0};Yr.getNormal(On,Nn,Fn,e.normal),c.face=e,c.barycoord=t}return c}class Hn extends Bn{constructor(t=1,e=1,i=1,s=1,r=1,n=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:i,widthSegments:s,heightSegments:r,depthSegments:n};const a=this;s=Math.floor(s),r=Math.floor(r),n=Math.floor(n);const o=[],h=[],l=[],c=[];let u=0,d=0;function p(t,e,i,s,r,n,p,m,y,g,f){const x=n/y,b=p/g,v=n/2,w=p/2,M=m/2,S=y+1,_=g+1;let A=0,T=0;const z=new Qi;for(let n=0;n<_;n++){const a=n*b-w;for(let o=0;o0?1:-1,l.push(z.x,z.y,z.z),c.push(o/y),c.push(1-n/g),A+=1}}for(let t=0;t0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const i={};for(const t in this.extensions)!0===this.extensions[t]&&(i[t]=!0);return Object.keys(i).length>0&&(e.extensions=i),e}}class Gn extends Pr{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new or,this.projectionMatrix=new or,this.projectionMatrixInverse=new or,this.coordinateSystem=Ei}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this.coordinateSystem=t.coordinateSystem,this}getWorldDirection(t){return super.getWorldDirection(t).negate()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}const $n=new Qi,Qn=new Gi,Kn=new Gi;class ta extends Gn{constructor(t=50,e=1,i=.1,s=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=i,this.far=s,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*Ui*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*Wi*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*Ui*Math.atan(Math.tan(.5*Wi*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(t,e,i){$n.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),e.set($n.x,$n.y).multiplyScalar(-t/$n.z),$n.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),i.set($n.x,$n.y).multiplyScalar(-t/$n.z)}getViewSize(t,e){return this.getViewBounds(t,Qn,Kn),e.subVectors(Kn,Qn)}setViewOffset(t,e,i,s,r,n){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=s,this.view.width=r,this.view.height=n,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*Wi*this.fov)/this.zoom,i=2*e,s=this.aspect*i,r=-.5*s;const n=this.view;if(null!==this.view&&this.view.enabled){const t=n.fullWidth,a=n.fullHeight;r+=n.offsetX*s/t,e-=n.offsetY*i/a,s*=n.width/t,i*=n.height/a}const a=this.filmOffset;0!==a&&(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+s,e,e-i,t,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}const ea=-90;class ia extends Pr{constructor(t,e,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new ta(ea,1,t,e);s.layers=this.layers,this.add(s);const r=new ta(ea,1,t,e);r.layers=this.layers,this.add(r);const n=new ta(ea,1,t,e);n.layers=this.layers,this.add(n);const a=new ta(ea,1,t,e);a.layers=this.layers,this.add(a);const o=new ta(ea,1,t,e);o.layers=this.layers,this.add(o);const h=new ta(ea,1,t,e);h.layers=this.layers,this.add(h)}updateCoordinateSystem(){const t=this.coordinateSystem,e=this.children.concat(),[i,s,r,n,a,o]=e;for(const t of e)this.remove(t);if(t===Ei)i.up.set(0,1,0),i.lookAt(1,0,0),s.up.set(0,1,0),s.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),n.up.set(0,0,1),n.lookAt(0,-1,0),a.up.set(0,1,0),a.lookAt(0,0,1),o.up.set(0,1,0),o.lookAt(0,0,-1);else{if(t!==Pi)throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+t);i.up.set(0,-1,0),i.lookAt(-1,0,0),s.up.set(0,-1,0),s.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),n.up.set(0,0,-1),n.lookAt(0,-1,0),a.up.set(0,-1,0),a.lookAt(0,0,1),o.up.set(0,-1,0),o.lookAt(0,0,-1)}for(const t of e)this.add(t),t.updateMatrixWorld()}update(t,e){null===this.parent&&this.updateMatrixWorld();const{renderTarget:i,activeMipmapLevel:s}=this;this.coordinateSystem!==t.coordinateSystem&&(this.coordinateSystem=t.coordinateSystem,this.updateCoordinateSystem());const[r,n,a,o,h,l]=this.children,c=t.getRenderTarget(),u=t.getActiveCubeFace(),d=t.getActiveMipmapLevel(),p=t.xr.enabled;t.xr.enabled=!1;const m=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,t.setRenderTarget(i,0,s),t.render(e,r),t.setRenderTarget(i,1,s),t.render(e,n),t.setRenderTarget(i,2,s),t.render(e,a),t.setRenderTarget(i,3,s),t.render(e,o),t.setRenderTarget(i,4,s),t.render(e,h),i.texture.generateMipmaps=m,t.setRenderTarget(i,5,s),t.render(e,l),t.setRenderTarget(c,u,d),t.xr.enabled=p,i.texture.needsPMREMUpdate=!0}}class sa extends Ts{constructor(t=[],e=301,i,s,r,n,a,o,h,l){super(t,e,i,s,r,n,a,o,h,l),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}class ra extends Cs{constructor(t=1,e={}){super(t,t,e),this.isWebGLCubeRenderTarget=!0;const i={width:t,height:t,depth:1},s=[i,i,i,i,i,i];this.texture=new sa(s),this._setTextureOptions(e),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.colorSpace=e.colorSpace,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t",fragmentShader:"\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t"},s=new Hn(5,5,5),r=new Zn({name:"CubemapFromEquirect",uniforms:qn(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const n=new Un(s,r),a=e.minFilter;e.minFilter===_t&&(e.minFilter=wt);return new ia(1,10,this).update(t,n),e.minFilter=a,n.geometry.dispose(),n.material.dispose(),this}clear(t,e=!0,i=!0,s=!0){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,i,s);t.setRenderTarget(r)}}class na extends Pr{constructor(){super(),this.isGroup=!0,this.type="Group"}}const aa={type:"move"};class oa{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new na,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay&&(this._targetRay=new na,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new Qi,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new Qi),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new na,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new Qi,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new Qi),this._grip}dispatchEvent(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this}connect(t){if(t&&t.hand){const e=this._hand;if(e)for(const i of t.hand.values())this._getHandJoint(e,i)}return this.dispatchEvent({type:"connected",data:t}),this}disconnect(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(t,e,i){let s=null,r=null,n=null;const a=this._targetRay,o=this._grip,h=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState){if(h&&t.hand){n=!0;for(const s of t.hand.values()){const t=e.getJointPose(s,i),r=this._getHandJoint(h,s);null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.matrixWorldNeedsUpdate=!0,r.jointRadius=t.radius),r.visible=null!==t}const s=h.joints["index-finger-tip"],r=h.joints["thumb-tip"],a=s.position.distanceTo(r.position),o=.02,l=.005;h.inputState.pinching&&a>o+l?(h.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!h.inputState.pinching&&a<=o-l&&(h.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else null!==o&&t.gripSpace&&(r=e.getPose(t.gripSpace,i),null!==r&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));null!==a&&(s=e.getPose(t.targetRaySpace,i),null===s&&null!==r&&(s=r),null!==s&&(a.matrix.fromArray(s.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),a.matrixWorldNeedsUpdate=!0,s.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(s.linearVelocity)):a.hasLinearVelocity=!1,s.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(s.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(aa)))}return null!==a&&(a.visible=null!==s),null!==o&&(o.visible=null!==r),null!==h&&(h.visible=null!==n),this}_getHandJoint(t,e){if(void 0===t.joints[e.jointName]){const i=new na;i.matrixAutoUpdate=!1,i.visible=!1,t.joints[e.jointName]=i,t.add(i)}return t.joints[e.jointName]}}class ha{constructor(t,e=25e-5){this.isFogExp2=!0,this.name="",this.color=new Kr(t),this.density=e}clone(){return new ha(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class la{constructor(t,e=1,i=1e3){this.isFog=!0,this.name="",this.color=new Kr(t),this.near=e,this.far=i}clone(){return new la(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class ca extends Pr{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new fr,this.environmentIntensity=1,this.environmentRotation=new fr,this.overrideMaterial=null,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),this.backgroundBlurriness=t.backgroundBlurriness,this.backgroundIntensity=t.backgroundIntensity,this.backgroundRotation.copy(t.backgroundRotation),this.environmentIntensity=t.environmentIntensity,this.environmentRotation.copy(t.environmentRotation),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),1!==this.backgroundIntensity&&(e.object.backgroundIntensity=this.backgroundIntensity),e.object.backgroundRotation=this.backgroundRotation.toArray(),1!==this.environmentIntensity&&(e.object.environmentIntensity=this.environmentIntensity),e.object.environmentRotation=this.environmentRotation.toArray(),e}}class ua{constructor(t,e){this.isInterleavedBuffer=!0,this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=Mi,this.updateRanges=[],this.version=0,this.uuid=Di()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,i){t*=this.stride,i*=e.stride;for(let s=0,r=this.stride;st.far||e.push({distance:o,point:ga.clone(),uv:Yr.getInterpolation(ga,Ma,Sa,_a,Aa,Ta,za,new Gi),face:null,object:this})}copy(t,e){return super.copy(t,e),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function Ca(t,e,i,s,r,n){ba.subVectors(t,i).addScalar(.5).multiply(s),void 0!==r?(va.x=n*ba.x-r*ba.y,va.y=r*ba.x+n*ba.y):va.copy(ba),t.copy(e),t.x+=va.x,t.y+=va.y,t.applyMatrix4(wa)}const Ba=new Qi,ka=new Qi;class Ra extends Pr{constructor(){super(),this.isLOD=!0,this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,i=e.length;t0){let i,s;for(i=1,s=e.length;i0){Ba.setFromMatrixPosition(this.matrixWorld);const i=t.ray.origin.distanceTo(Ba);this.getObjectForDistance(i).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){Ba.setFromMatrixPosition(t.matrixWorld),ka.setFromMatrixPosition(this.matrixWorld);const i=Ba.distanceTo(ka)/t.zoom;let s,r;for(e[0].object.visible=!0,s=1,r=e.length;s=t))break;e[s-1].object.visible=!1,e[s].object.visible=!0}for(this._currentLevel=s-1;s1?null:e.copy(t.start).addScaledVector(i,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&i>0||i<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const i=e||no.getNormalMatrix(t),s=this.coplanarPoint(so).applyMatrix4(t),r=this.normal.applyMatrix3(i).normalize();return this.constant=-s.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}const oo=new Qs,ho=new Qi;class lo{constructor(t=new ao,e=new ao,i=new ao,s=new ao,r=new ao,n=new ao){this.planes=[t,e,i,s,r,n]}set(t,e,i,s,r,n){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(i),a[3].copy(s),a[4].copy(r),a[5].copy(n),this}copy(t){const e=this.planes;for(let i=0;i<6;i++)e[i].copy(t.planes[i]);return this}setFromProjectionMatrix(t,e=2e3){const i=this.planes,s=t.elements,r=s[0],n=s[1],a=s[2],o=s[3],h=s[4],l=s[5],c=s[6],u=s[7],d=s[8],p=s[9],m=s[10],y=s[11],g=s[12],f=s[13],x=s[14],b=s[15];if(i[0].setComponents(o-r,u-h,y-d,b-g).normalize(),i[1].setComponents(o+r,u+h,y+d,b+g).normalize(),i[2].setComponents(o+n,u+l,y+p,b+f).normalize(),i[3].setComponents(o-n,u-l,y-p,b-f).normalize(),i[4].setComponents(o-a,u-c,y-m,b-x).normalize(),e===Ei)i[5].setComponents(o+a,u+c,y+m,b+x).normalize();else{if(e!==Pi)throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);i[5].setComponents(a,c,m,x).normalize()}return this}intersectsObject(t){if(void 0!==t.boundingSphere)null===t.boundingSphere&&t.computeBoundingSphere(),oo.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{const e=t.geometry;null===e.boundingSphere&&e.computeBoundingSphere(),oo.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere(oo)}intersectsSprite(t){return oo.center.set(0,0,0),oo.radius=.7071067811865476,oo.applyMatrix4(t.matrixWorld),this.intersectsSphere(oo)}intersectsSphere(t){const e=this.planes,i=t.center,s=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(i)0?t.max.x:t.min.x,ho.y=s.normal.y>0?t.max.y:t.min.y,ho.z=s.normal.z>0?t.max.z:t.min.z,s.distanceToPoint(ho)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let i=0;i<6;i++)if(e[i].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}const co=new or,uo=new lo;class po{constructor(){this.coordinateSystem=Ei}intersectsObject(t,e){if(!e.isArrayCamera||0===e.cameras.length)return!1;for(let i=0;i=r.length&&r.push({start:-1,count:-1,z:-1,index:-1});const a=r[this.index];n.push(a),this.index++,a.start=t,a.count=e,a.z=i,a.index=s}reset(){this.list.length=0,this.index=0}}const xo=new or,bo=new Kr(1,1,1),vo=new lo,wo=new po,Mo=new Ps,So=new Qs,_o=new Qi,Ao=new Qi,To=new Qi,zo=new fo,Io=new Un,Co=[];function Bo(t,e,i=0){const s=e.itemSize;if(t.isInterleavedBufferAttribute||t.array.constructor!==e.array.constructor){const r=t.count;for(let n=0;n65535?new Uint32Array(s):new Uint16Array(s);e.setIndex(new pn(t,1))}this._geometryInitialized=!0}}_validateGeometry(t){const e=this.geometry;if(Boolean(t.getIndex())!==Boolean(e.getIndex()))throw new Error('THREE.BatchedMesh: All geometries must consistently have "index".');for(const i in e.attributes){if(!t.hasAttribute(i))throw new Error(`THREE.BatchedMesh: Added geometry missing "${i}". All geometries must have consistent attributes.`);const s=t.getAttribute(i),r=e.getAttribute(i);if(s.itemSize!==r.itemSize||s.normalized!==r.normalized)throw new Error("THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.")}}validateInstanceId(t){const e=this._instanceInfo;if(t<0||t>=e.length||!1===e[t].active)throw new Error(`THREE.BatchedMesh: Invalid instanceId ${t}. Instance is either out of range or has been deleted.`)}validateGeometryId(t){const e=this._geometryInfo;if(t<0||t>=e.length||!1===e[t].active)throw new Error(`THREE.BatchedMesh: Invalid geometryId ${t}. Geometry is either out of range or has been deleted.`)}setCustomSort(t){return this.customSort=t,this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new Ps);const t=this.boundingBox,e=this._instanceInfo;t.makeEmpty();for(let i=0,s=e.length;i=this.maxInstanceCount&&0===this._availableInstanceIds.length)throw new Error("THREE.BatchedMesh: Maximum item count reached.");const e={visible:!0,active:!0,geometryIndex:t};let i=null;this._availableInstanceIds.length>0?(this._availableInstanceIds.sort(mo),i=this._availableInstanceIds.shift(),this._instanceInfo[i]=e):(i=this._instanceInfo.length,this._instanceInfo.push(e));const s=this._matricesTexture;xo.identity().toArray(s.image.data,16*i),s.needsUpdate=!0;const r=this._colorsTexture;return r&&(bo.toArray(r.image.data,4*i),r.needsUpdate=!0),this._visibilityChanged=!0,i}addGeometry(t,e=-1,i=-1){this._initializeGeometry(t),this._validateGeometry(t);const s={vertexStart:-1,vertexCount:-1,reservedVertexCount:-1,indexStart:-1,indexCount:-1,reservedIndexCount:-1,start:-1,count:-1,boundingBox:null,boundingSphere:null,active:!0},r=this._geometryInfo;s.vertexStart=this._nextVertexStart,s.reservedVertexCount=-1===e?t.getAttribute("position").count:e;const n=t.getIndex();if(null!==n&&(s.indexStart=this._nextIndexStart,s.reservedIndexCount=-1===i?n.count:i),-1!==s.indexStart&&s.indexStart+s.reservedIndexCount>this._maxIndexCount||s.vertexStart+s.reservedVertexCount>this._maxVertexCount)throw new Error("THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.");let a;return this._availableGeometryIds.length>0?(this._availableGeometryIds.sort(mo),a=this._availableGeometryIds.shift(),r[a]=s):(a=this._geometryCount,this._geometryCount++,r.push(s)),this.setGeometryAt(a,t),this._nextIndexStart=s.indexStart+s.reservedIndexCount,this._nextVertexStart=s.vertexStart+s.reservedVertexCount,a}setGeometryAt(t,e){if(t>=this._geometryCount)throw new Error("THREE.BatchedMesh: Maximum geometry count reached.");this._validateGeometry(e);const i=this.geometry,s=null!==i.getIndex(),r=i.getIndex(),n=e.getIndex(),a=this._geometryInfo[t];if(s&&n.count>a.reservedIndexCount||e.attributes.position.count>a.reservedVertexCount)throw new Error("THREE.BatchedMesh: Reserved space not large enough for provided geometry.");const o=a.vertexStart,h=a.reservedVertexCount;a.vertexCount=e.getAttribute("position").count;for(const t in i.attributes){const s=e.getAttribute(t),r=i.getAttribute(t);Bo(s,r,o);const n=s.itemSize;for(let t=s.count,e=h;t=e.length||!1===e[t].active)return this;const i=this._instanceInfo;for(let e=0,s=i.length;ee)).sort(((t,e)=>i[t].vertexStart-i[e].vertexStart)),r=this.geometry;for(let n=0,a=i.length;n=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[t];if(null===s.boundingBox){const t=new Ps,e=i.index,r=i.attributes.position;for(let i=s.start,n=s.start+s.count;i=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[t];if(null===s.boundingSphere){const e=new Qs;this.getBoundingBoxAt(t,Mo),Mo.getCenter(e.center);const r=i.index,n=i.attributes.position;let a=0;for(let t=s.start,i=s.start+s.count;tt.active));if(Math.max(...i.map((t=>t.vertexStart+t.reservedVertexCount)))>t)throw new Error(`BatchedMesh: Geometry vertex values are being used outside the range ${e}. Cannot shrink further.`);if(this.geometry.index){if(Math.max(...i.map((t=>t.indexStart+t.reservedIndexCount)))>e)throw new Error(`BatchedMesh: Geometry index values are being used outside the range ${e}. Cannot shrink further.`)}const s=this.geometry;s.dispose(),this._maxVertexCount=t,this._maxIndexCount=e,this._geometryInitialized&&(this._geometryInitialized=!1,this.geometry=new Bn,this._initializeGeometry(s));const r=this.geometry;s.index&&ko(s.index.array,r.index.array);for(const t in s.attributes)ko(s.attributes[t].array,r.attributes[t].array)}raycast(t,e){const i=this._instanceInfo,s=this._geometryInfo,r=this.matrixWorld,n=this.geometry;Io.material=this.material,Io.geometry.index=n.index,Io.geometry.attributes=n.attributes,null===Io.geometry.boundingBox&&(Io.geometry.boundingBox=new Ps),null===Io.geometry.boundingSphere&&(Io.geometry.boundingSphere=new Qs);for(let n=0,a=i.length;n({...t,boundingBox:null!==t.boundingBox?t.boundingBox.clone():null,boundingSphere:null!==t.boundingSphere?t.boundingSphere.clone():null}))),this._instanceInfo=t._instanceInfo.map((t=>({...t}))),this._availableInstanceIds=t._availableInstanceIds.slice(),this._availableGeometryIds=t._availableGeometryIds.slice(),this._nextIndexStart=t._nextIndexStart,this._nextVertexStart=t._nextVertexStart,this._geometryCount=t._geometryCount,this._maxInstanceCount=t._maxInstanceCount,this._maxVertexCount=t._maxVertexCount,this._maxIndexCount=t._maxIndexCount,this._geometryInitialized=t._geometryInitialized,this._multiDrawCounts=t._multiDrawCounts.slice(),this._multiDrawStarts=t._multiDrawStarts.slice(),this._indirectTexture=t._indirectTexture.clone(),this._indirectTexture.image.data=this._indirectTexture.image.data.slice(),this._matricesTexture=t._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.data.slice(),null!==this._colorsTexture&&(this._colorsTexture=t._colorsTexture.clone(),this._colorsTexture.image.data=this._colorsTexture.image.data.slice()),this}dispose(){this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this._indirectTexture.dispose(),this._indirectTexture=null,null!==this._colorsTexture&&(this._colorsTexture.dispose(),this._colorsTexture=null)}onBeforeRender(t,e,i,s,r){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;const n=s.getIndex(),a=null===n?1:n.array.BYTES_PER_ELEMENT,o=this._instanceInfo,h=this._multiDrawStarts,l=this._multiDrawCounts,c=this._geometryInfo,u=this.perObjectFrustumCulled,d=this._indirectTexture,p=d.image.data,m=i.isArrayCamera?wo:vo;u&&!i.isArrayCamera&&(xo.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse).multiply(this.matrixWorld),vo.setFromProjectionMatrix(xo,t.coordinateSystem));let y=0;if(this.sortObjects){xo.copy(this.matrixWorld).invert(),_o.setFromMatrixPosition(i.matrixWorld).applyMatrix4(xo),Ao.set(0,0,-1).transformDirection(i.matrixWorld).transformDirection(xo);for(let t=0,e=o.length;t0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;ts)return;Lo.applyMatrix4(t.matrixWorld);const h=e.ray.origin.distanceTo(Lo);return he.far?void 0:{distance:h,point:jo.clone().applyMatrix4(t.matrixWorld),index:a,face:null,faceIndex:null,barycoord:null,object:t}}const Do=new Qi,Ho=new Qi;class qo extends Wo{constructor(t,e){super(t,e),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const t=this.geometry;if(null===t.index){const e=t.attributes.position,i=[];for(let t=0,s=e.count;t0){const i=t[e[0]];if(void 0!==i){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let t=0,e=i.length;tr.far)return;n.push({distance:h,distanceToRay:Math.sqrt(o),point:i,index:e,face:null,faceIndex:null,barycoord:null,object:a})}}class th extends Ts{constructor(t,e,i,s,r=1006,n=1006,a,o,h){super(t,e,i,s,r,n,a,o,h),this.isVideoTexture=!0,this.generateMipmaps=!1;const l=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback((function e(){l.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1==="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}class eh extends th{constructor(t,e,i,s,r,n,a,o){super({},t,e,i,s,r,n,a,o),this.isVideoFrameTexture=!0}update(){}clone(){return(new this.constructor).copy(this)}setFrame(t){this.image=t,this.needsUpdate=!0}}class ih extends Ts{constructor(t,e){super({width:t,height:e}),this.isFramebufferTexture=!0,this.magFilter=gt,this.minFilter=gt,this.generateMipmaps=!1,this.needsUpdate=!0}}class sh extends Ts{constructor(t,e,i,s,r,n,a,o,h,l,c,u){super(null,n,a,o,h,l,s,r,c,u),this.isCompressedTexture=!0,this.image={width:e,height:i},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}class rh extends sh{constructor(t,e,i,s,r,n){super(t,e,i,r,n),this.isCompressedArrayTexture=!0,this.image.depth=s,this.wrapR=mt,this.layerUpdates=new Set}addLayerUpdate(t){this.layerUpdates.add(t)}clearLayerUpdates(){this.layerUpdates.clear()}}class nh extends sh{constructor(t,e,i){super(void 0,t[0].width,t[0].height,e,i,ht),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=t}}class ah extends Ts{constructor(t,e,i,s,r,n,a,o,h){super(t,e,i,s,r,n,a,o,h),this.isCanvasTexture=!0,this.needsUpdate=!0}}class oh extends Ts{constructor(t,e,i=1014,s,r,n,a=1003,o=1003,h,l=1026,c=1){if(l!==Wt&&1027!==l)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");super({width:t,height:e,depth:c},s,r,n,a,o,l,i,h),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(t){return super.copy(t),this.source=new Ms(Object.assign({},t.image)),this.compareFunction=t.compareFunction,this}toJSON(t){const e=super.toJSON(t);return null!==this.compareFunction&&(e.compareFunction=this.compareFunction),e}}class hh extends Bn{constructor(t=1,e=1,i=4,s=8,r=1){super(),this.type="CapsuleGeometry",this.parameters={radius:t,height:e,capSegments:i,radialSegments:s,heightSegments:r},e=Math.max(0,e),i=Math.max(1,Math.floor(i)),s=Math.max(3,Math.floor(s)),r=Math.max(1,Math.floor(r));const n=[],a=[],o=[],h=[],l=e/2,c=Math.PI/2*t,u=e,d=2*c+u,p=2*i+r,m=s+1,y=new Qi,g=new Qi;for(let f=0;f<=p;f++){let x=0,b=0,v=0,w=0;if(f<=i){const e=f/i,s=e*Math.PI/2;b=-l-t*Math.cos(s),v=t*Math.sin(s),w=-t*Math.cos(s),x=e*c}else if(f<=i+r){const s=(f-i)/r;b=s*e-l,v=t,w=0,x=c+s*u}else{const e=(f-i-r)/i,s=e*Math.PI/2;b=l+t*Math.sin(s),v=t*Math.cos(s),w=t*Math.sin(s),x=c+u+e*c}const M=Math.max(0,Math.min(1,x/d));let S=0;0===f?S=.5/s:f===p&&(S=-.5/s);for(let t=0;t<=s;t++){const e=t/s,i=e*Math.PI*2,r=Math.sin(i),n=Math.cos(i);g.x=-v*n,g.y=b,g.z=v*r,a.push(g.x,g.y,g.z),y.set(-v*n,w,v*r),y.normalize(),o.push(y.x,y.y,y.z),h.push(e+S,M)}if(f>0){const t=(f-1)*m;for(let e=0;e0||0!==s)&&(l.push(n,a,h),x+=3),(e>0||s!==r-1)&&(l.push(a,o,h),x+=3)}h.addGroup(g,x,0),g+=x}(),!1===n&&(t>0&&f(!0),e>0&&f(!1)),this.setIndex(l),this.setAttribute("position",new Mn(c,3)),this.setAttribute("normal",new Mn(u,3)),this.setAttribute("uv",new Mn(d,2))}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new ch(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class uh extends ch{constructor(t=1,e=1,i=32,s=1,r=!1,n=0,a=2*Math.PI){super(0,t,e,i,s,r,n,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:i,heightSegments:s,openEnded:r,thetaStart:n,thetaLength:a}}static fromJSON(t){return new uh(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class dh extends Bn{constructor(t=[],e=[],i=1,s=0){super(),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:i,detail:s};const r=[],n=[];function a(t,e,i,s){const r=s+1,n=[];for(let s=0;s<=r;s++){n[s]=[];const a=t.clone().lerp(i,s/r),o=e.clone().lerp(i,s/r),h=r-s;for(let t=0;t<=h;t++)n[s][t]=0===t&&s===r?a:a.clone().lerp(o,t/h)}for(let t=0;t.9&&a<.1&&(e<.2&&(n[t+0]+=1),i<.2&&(n[t+2]+=1),s<.2&&(n[t+4]+=1))}}()}(),this.setAttribute("position",new Mn(r,3)),this.setAttribute("normal",new Mn(r.slice(),3)),this.setAttribute("uv",new Mn(n,2)),0===s?this.computeVertexNormals():this.normalizeNormals()}copy(t){return super.copy(t),this.parameters=Object.assign({},t.parameters),this}static fromJSON(t){return new dh(t.vertices,t.indices,t.radius,t.details)}}class ph extends dh{constructor(t=1,e=0){const i=(1+Math.sqrt(5))/2,s=1/i;super([-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-s,-i,0,-s,i,0,s,-i,0,s,i,-s,-i,0,-s,i,0,s,-i,0,s,i,0,-i,0,-s,i,0,-s,-i,0,s,i,0,s],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e}}static fromJSON(t){return new ph(t.radius,t.detail)}}const mh=new Qi,yh=new Qi,gh=new Qi,fh=new Yr;class xh extends Bn{constructor(t=null,e=1){if(super(),this.type="EdgesGeometry",this.parameters={geometry:t,thresholdAngle:e},null!==t){const i=4,s=Math.pow(10,i),r=Math.cos(Wi*e),n=t.getIndex(),a=t.getAttribute("position"),o=n?n.count:a.count,h=[0,0,0],l=["a","b","c"],c=new Array(3),u={},d=[];for(let t=0;t0)){h=s;break}h=s-1}if(s=h,i[s]===n)return s/(r-1);const l=i[s];return(s+(n-l)/(i[s+1]-l))/(r-1)}getTangent(t,e){const i=1e-4;let s=t-i,r=t+i;s<0&&(s=0),r>1&&(r=1);const n=this.getPoint(s),a=this.getPoint(r),o=e||(n.isVector2?new Gi:new Qi);return o.copy(a).sub(n).normalize(),o}getTangentAt(t,e){const i=this.getUtoTmapping(t);return this.getTangent(i,e)}computeFrenetFrames(t,e=!1){const i=new Qi,s=[],r=[],n=[],a=new Qi,o=new or;for(let e=0;e<=t;e++){const i=e/t;s[e]=this.getTangentAt(i,new Qi)}r[0]=new Qi,n[0]=new Qi;let h=Number.MAX_VALUE;const l=Math.abs(s[0].x),c=Math.abs(s[0].y),u=Math.abs(s[0].z);l<=h&&(h=l,i.set(1,0,0)),c<=h&&(h=c,i.set(0,1,0)),u<=h&&i.set(0,0,1),a.crossVectors(s[0],i).normalize(),r[0].crossVectors(s[0],a),n[0].crossVectors(s[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),n[e]=n[e-1].clone(),a.crossVectors(s[e-1],s[e]),a.length()>Number.EPSILON){a.normalize();const t=Math.acos(Hi(s[e-1].dot(s[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}n[e].crossVectors(s[e],r[e])}if(!0===e){let e=Math.acos(Hi(r[0].dot(r[t]),-1,1));e/=t,s[0].dot(a.crossVectors(r[0],r[t]))>0&&(e=-e);for(let i=1;i<=t;i++)r[i].applyMatrix4(o.makeRotationAxis(s[i],e*i)),n[i].crossVectors(s[i],r[i])}return{tangents:s,normals:r,binormals:n}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.7,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class vh extends bh{constructor(t=0,e=0,i=1,s=1,r=0,n=2*Math.PI,a=!1,o=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=t,this.aY=e,this.xRadius=i,this.yRadius=s,this.aStartAngle=r,this.aEndAngle=n,this.aClockwise=a,this.aRotation=o}getPoint(t,e=new Gi){const i=e,s=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const n=Math.abs(r)s;)r-=s;r0?0:(Math.floor(Math.abs(h)/r)+1)*r:0===l&&h===r-1&&(h=r-2,l=1),this.closed||h>0?a=s[(h-1)%r]:(Sh.subVectors(s[0],s[1]).add(s[0]),a=Sh);const c=s[h%r],u=s[(h+1)%r];if(this.closed||h+2s.length-2?s.length-1:n+1],c=s[n>s.length-3?s.length-1:n+2];return i.set(Ih(a,o.x,h.x,l.x,c.x),Ih(a,o.y,h.y,l.y,c.y)),i}copy(t){super.copy(t),this.points=[];for(let e=0,i=t.points.length;e=i){const t=s[r]-i,n=this.curves[r],a=n.getLength(),o=0===a?0:1-t/a;return n.getPointAt(o,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let i=0,s=this.curves.length;i1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,i=t.curves.length;e0){const t=h.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(h);const l=h.getPoint(1);return this.currentPoint.copy(l),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class Wh extends jh{constructor(t){super(t),this.uuid=Di(),this.type="Shape",this.holes=[]}getPointsHoles(t){const e=[];for(let i=0,s=this.holes.length;i80*i){o=1/0,h=1/0;let e=-1/0,s=-1/0;for(let n=i;ne&&(e=i),r>s&&(s=r)}l=Math.max(e-o,s-h),l=0!==l?32767/l:0}return qh(n,a,i,o,h,l,0),a}function Dh(t,e,i,s,r){let n;if(r===function(t,e,i,s){let r=0;for(let n=e,a=i-s;n0)for(let r=e;r=e;r-=s)n=ul(r/s|0,t[r],t[r+1],n);return n&&nl(n,n.next)&&(dl(n),n=n.next),n}function Hh(t,e){if(!t)return t;e||(e=t);let i,s=t;do{if(i=!1,s.steiner||!nl(s,s.next)&&0!==rl(s.prev,s,s.next))s=s.next;else{if(dl(s),s=e=s.prev,s===s.next)break;i=!0}}while(i||s!==e);return e}function qh(t,e,i,s,r,n,a){if(!t)return;!a&&n&&function(t,e,i,s){let r=t;do{0===r.z&&(r.z=Kh(r.x,r.y,e,i,s)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,i=1;do{let s,r=t;t=null;let n=null;for(e=0;r;){e++;let a=r,o=0;for(let t=0;t0||h>0&&a;)0!==o&&(0===h||!a||r.z<=a.z)?(s=r,r=r.nextZ,o--):(s=a,a=a.nextZ,h--),n?n.nextZ=s:t=s,s.prevZ=n,n=s;r=a}n.nextZ=null,i*=2}while(e>1)}(r)}(t,s,r,n);let o=t;for(;t.prev!==t.next;){const h=t.prev,l=t.next;if(n?Xh(t,s,r,n):Jh(t))e.push(h.i,t.i,l.i),dl(t),t=l.next,o=l.next;else if((t=l)===o){a?1===a?qh(t=Yh(Hh(t),e),e,i,s,r,n,2):2===a&&Zh(t,e,i,s,r,n):qh(Hh(t),e,i,s,r,n,1);break}}}function Jh(t){const e=t.prev,i=t,s=t.next;if(rl(e,i,s)>=0)return!1;const r=e.x,n=i.x,a=s.x,o=e.y,h=i.y,l=s.y,c=Math.min(r,n,a),u=Math.min(o,h,l),d=Math.max(r,n,a),p=Math.max(o,h,l);let m=s.next;for(;m!==e;){if(m.x>=c&&m.x<=d&&m.y>=u&&m.y<=p&&il(r,o,n,h,a,l,m.x,m.y)&&rl(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function Xh(t,e,i,s){const r=t.prev,n=t,a=t.next;if(rl(r,n,a)>=0)return!1;const o=r.x,h=n.x,l=a.x,c=r.y,u=n.y,d=a.y,p=Math.min(o,h,l),m=Math.min(c,u,d),y=Math.max(o,h,l),g=Math.max(c,u,d),f=Kh(p,m,e,i,s),x=Kh(y,g,e,i,s);let b=t.prevZ,v=t.nextZ;for(;b&&b.z>=f&&v&&v.z<=x;){if(b.x>=p&&b.x<=y&&b.y>=m&&b.y<=g&&b!==r&&b!==a&&il(o,c,h,u,l,d,b.x,b.y)&&rl(b.prev,b,b.next)>=0)return!1;if(b=b.prevZ,v.x>=p&&v.x<=y&&v.y>=m&&v.y<=g&&v!==r&&v!==a&&il(o,c,h,u,l,d,v.x,v.y)&&rl(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;b&&b.z>=f;){if(b.x>=p&&b.x<=y&&b.y>=m&&b.y<=g&&b!==r&&b!==a&&il(o,c,h,u,l,d,b.x,b.y)&&rl(b.prev,b,b.next)>=0)return!1;b=b.prevZ}for(;v&&v.z<=x;){if(v.x>=p&&v.x<=y&&v.y>=m&&v.y<=g&&v!==r&&v!==a&&il(o,c,h,u,l,d,v.x,v.y)&&rl(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0}function Yh(t,e){let i=t;do{const s=i.prev,r=i.next.next;!nl(s,r)&&al(s,i,i.next,r)&&ll(s,r)&&ll(r,s)&&(e.push(s.i,i.i,r.i),dl(i),dl(i.next),i=t=r),i=i.next}while(i!==t);return Hh(i)}function Zh(t,e,i,s,r,n){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i&&sl(a,t)){let o=cl(a,t);return a=Hh(a,a.next),o=Hh(o,o.next),qh(a,e,i,s,r,n,0),void qh(o,e,i,s,r,n,0)}t=t.next}a=a.next}while(a!==t)}function Gh(t,e){let i=t.x-e.x;if(0===i&&(i=t.y-e.y,0===i)){i=(t.next.y-t.y)/(t.next.x-t.x)-(e.next.y-e.y)/(e.next.x-e.x)}return i}function $h(t,e){const i=function(t,e){let i=e;const s=t.x,r=t.y;let n,a=-1/0;if(nl(t,i))return i;do{if(nl(t,i.next))return i.next;if(r<=i.y&&r>=i.next.y&&i.next.y!==i.y){const t=i.x+(r-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(t<=s&&t>a&&(a=t,n=i.x=i.x&&i.x>=h&&s!==i.x&&el(rn.x||i.x===n.x&&Qh(n,i)))&&(n=i,c=e)}i=i.next}while(i!==o);return n}(t,e);if(!i)return e;const s=cl(i,t);return Hh(s,s.next),Hh(i,i.next)}function Qh(t,e){return rl(t.prev,t,e.prev)<0&&rl(e.next,t,t.next)<0}function Kh(t,e,i,s,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=(t-i)*r|0)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=(e-s)*r|0)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function tl(t){let e=t,i=t;do{(e.x=(t-a)*(n-o)&&(t-a)*(s-o)>=(i-a)*(e-o)&&(i-a)*(n-o)>=(r-a)*(s-o)}function il(t,e,i,s,r,n,a,o){return!(t===a&&e===o)&&el(t,e,i,s,r,n,a,o)}function sl(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let i=t;do{if(i.i!==t.i&&i.next.i!==t.i&&i.i!==e.i&&i.next.i!==e.i&&al(i,i.next,t,e))return!0;i=i.next}while(i!==t);return!1}(t,e)&&(ll(t,e)&&ll(e,t)&&function(t,e){let i=t,s=!1;const r=(t.x+e.x)/2,n=(t.y+e.y)/2;do{i.y>n!=i.next.y>n&&i.next.y!==i.y&&r<(i.next.x-i.x)*(n-i.y)/(i.next.y-i.y)+i.x&&(s=!s),i=i.next}while(i!==t);return s}(t,e)&&(rl(t.prev,t,e.prev)||rl(t,e.prev,e))||nl(t,e)&&rl(t.prev,t,t.next)>0&&rl(e.prev,e,e.next)>0)}function rl(t,e,i){return(e.y-t.y)*(i.x-e.x)-(e.x-t.x)*(i.y-e.y)}function nl(t,e){return t.x===e.x&&t.y===e.y}function al(t,e,i,s){const r=hl(rl(t,e,i)),n=hl(rl(t,e,s)),a=hl(rl(i,s,t)),o=hl(rl(i,s,e));return r!==n&&a!==o||(!(0!==r||!ol(t,i,e))||(!(0!==n||!ol(t,s,e))||(!(0!==a||!ol(i,t,s))||!(0!==o||!ol(i,e,s)))))}function ol(t,e,i){return e.x<=Math.max(t.x,i.x)&&e.x>=Math.min(t.x,i.x)&&e.y<=Math.max(t.y,i.y)&&e.y>=Math.min(t.y,i.y)}function hl(t){return t>0?1:t<0?-1:0}function ll(t,e){return rl(t.prev,t,t.next)<0?rl(t,e,t.next)>=0&&rl(t,t.prev,e)>=0:rl(t,e,t.prev)<0||rl(t,t.next,e)<0}function cl(t,e){const i=pl(t.i,t.x,t.y),s=pl(e.i,e.x,e.y),r=t.next,n=e.prev;return t.next=e,e.prev=t,i.next=r,r.prev=i,s.next=i,i.prev=s,n.next=s,s.prev=n,s}function ul(t,e,i,s){const r=pl(t,e,i);return s?(r.next=s.next,r.prev=s,s.next.prev=r,s.next=r):(r.prev=r,r.next=r),r}function dl(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function pl(t,e,i){return{i:t,x:e,y:i,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}class ml{static triangulate(t,e,i=2){return Uh(t,e,i)}}class yl{static area(t){const e=t.length;let i=0;for(let s=e-1,r=0;r2&&t[e-1].equals(t[0])&&t.pop()}function fl(t,e){for(let i=0;iNumber.EPSILON){const u=Math.sqrt(c),d=Math.sqrt(h*h+l*l),p=e.x-o/u,m=e.y+a/u,y=((i.x-l/d-p)*l-(i.y+h/d-m)*h)/(a*l-o*h);s=p+a*y-t.x,r=m+o*y-t.y;const g=s*s+r*r;if(g<=2)return new Gi(s,r);n=Math.sqrt(g/2)}else{let t=!1;a>Number.EPSILON?h>Number.EPSILON&&(t=!0):a<-Number.EPSILON?h<-Number.EPSILON&&(t=!0):Math.sign(o)===Math.sign(l)&&(t=!0),t?(s=-o,r=a,n=Math.sqrt(c)):(s=a,r=o,n=Math.sqrt(c/2))}return new Gi(s/n,r/n)}const k=[];for(let t=0,e=z.length,i=e-1,s=t+1;t=0;t--){const e=t/p,i=c*Math.cos(e*Math.PI/2),s=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=z.length;t=0;){const s=i;let r=i-1;r<0&&(r=t.length-1);for(let t=0,i=o+2*p;t0)&&d.push(e,r,h),(t!==i-1||o0!=t>0&&this.version++,this._anisotropy=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get iridescence(){return this._iridescence}set iridescence(t){this._iridescence>0!=t>0&&this.version++,this._iridescence=t}get dispersion(){return this._dispersion}set dispersion(t){this._dispersion>0!=t>0&&this.version++,this._dispersion=t}get sheen(){return this._sheen}set sheen(t){this._sheen>0!=t>0&&this.version++,this._sheen=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=t.anisotropy,this.anisotropyRotation=t.anisotropyRotation,this.anisotropyMap=t.anisotropyMap,this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.dispersion=t.dispersion,this.ior=t.ior,this.iridescence=t.iridescence,this.iridescenceMap=t.iridescenceMap,this.iridescenceIOR=t.iridescenceIOR,this.iridescenceThicknessRange=[...t.iridescenceThicknessRange],this.iridescenceThicknessMap=t.iridescenceThicknessMap,this.sheen=t.sheen,this.sheenColor.copy(t.sheenColor),this.sheenColorMap=t.sheenColorMap,this.sheenRoughness=t.sheenRoughness,this.sheenRoughnessMap=t.sheenRoughnessMap,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularColor.copy(t.specularColor),this.specularColorMap=t.specularColorMap,this}}class Vl extends sn{constructor(t){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new Kr(16777215),this.specular=new Kr(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Kr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Gi(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new fr,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class Ll extends sn{constructor(t){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Kr(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Kr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Gi(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}class jl extends sn{constructor(t){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Gi(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}class Wl extends sn{constructor(t){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new Kr(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Kr(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Gi(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new fr,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}class Ul extends sn{constructor(t){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}class Dl extends sn{constructor(t){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}class Hl extends sn{constructor(t){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Kr(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new Gi(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:""},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this.fog=t.fog,this}}class ql extends Eo{constructor(t){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}function Jl(t,e){return t&&t.constructor!==e?"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t):t}function Xl(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function Yl(t){const e=t.length,i=new Array(e);for(let t=0;t!==e;++t)i[t]=t;return i.sort((function(e,i){return t[e]-t[i]})),i}function Zl(t,e,i){const s=t.length,r=new t.constructor(s);for(let n=0,a=0;a!==s;++n){const s=i[n]*e;for(let i=0;i!==e;++i)r[a++]=t[s+i]}return r}function Gl(t,e,i,s){let r=1,n=t[0];for(;void 0!==n&&void 0===n[s];)n=t[r++];if(void 0===n)return;let a=n[s];if(void 0!==a)if(Array.isArray(a))do{a=n[s],void 0!==a&&(e.push(n.time),i.push(...a)),n=t[r++]}while(void 0!==n);else if(void 0!==a.toArray)do{a=n[s],void 0!==a&&(e.push(n.time),a.toArray(i,i.length)),n=t[r++]}while(void 0!==n);else do{a=n[s],void 0!==a&&(e.push(n.time),i.push(a)),n=t[r++]}while(void 0!==n)}class $l{static convertArray(t,e){return Jl(t,e)}static isTypedArray(t){return Xl(t)}static getKeyframeOrder(t){return Yl(t)}static sortedArray(t,e,i){return Zl(t,e,i)}static flattenJSON(t,e,i,s){Gl(t,e,i,s)}static subclip(t,e,i,s,r=30){return function(t,e,i,s,r=30){const n=t.clone();n.name=e;const a=[];for(let t=0;t=s)){h.push(e.times[t]);for(let i=0;in.tracks[t].times[0]&&(o=n.tracks[t].times[0]);for(let t=0;t=s.times[u]){const t=u*h+o,e=t+h-o;d=s.values.slice(t,e)}else{const t=s.createInterpolant(),e=o,i=h-o;t.evaluate(n),d=t.resultBuffer.slice(e,i)}"quaternion"===r&&(new $i).fromArray(d).normalize().conjugate().toArray(d);const p=a.times.length;for(let t=0;t=r)break t;{const a=e[1];t=r)break e}n=i,i=0}}for(;i>>1;te;)--n;if(++n,0!==r||n!==s){r>=n&&(n=Math.max(n,1),r=n-1);const t=this.getValueSize();this.times=i.slice(r,n),this.values=this.values.slice(r*t,n*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);const i=this.times,s=this.values,r=i.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);let n=null;for(let e=0;e!==r;e++){const s=i[e];if("number"==typeof s&&isNaN(s)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,e,s),t=!1;break}if(null!==n&&n>s){console.error("THREE.KeyframeTrack: Out of order keys.",this,e,s,n),t=!1;break}n=s}if(void 0!==s&&Xl(s))for(let e=0,i=s.length;e!==i;++e){const i=s[e];if(isNaN(i)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,e,i),t=!1;break}}return t}optimize(){const t=this.times.slice(),e=this.values.slice(),i=this.getValueSize(),s=this.getInterpolation()===Re,r=t.length-1;let n=1;for(let a=1;a0){t[n]=t[r];for(let t=r*i,s=n*i,a=0;a!==i;++a)e[s+a]=e[t+a];++n}return n!==t.length?(this.times=t.slice(0,n),this.values=e.slice(0,n*i)):(this.times=t,this.values=e),this}clone(){const t=this.times.slice(),e=this.values.slice(),i=new(0,this.constructor)(this.name,t,e);return i.createInterpolant=this.createInterpolant,i}}ic.prototype.ValueTypeName="",ic.prototype.TimeBufferType=Float32Array,ic.prototype.ValueBufferType=Float32Array,ic.prototype.DefaultInterpolation=ke;class sc extends ic{constructor(t,e,i){super(t,e,i)}}sc.prototype.ValueTypeName="bool",sc.prototype.ValueBufferType=Array,sc.prototype.DefaultInterpolation=Be,sc.prototype.InterpolantFactoryMethodLinear=void 0,sc.prototype.InterpolantFactoryMethodSmooth=void 0;class rc extends ic{constructor(t,e,i,s){super(t,e,i,s)}}rc.prototype.ValueTypeName="color";class nc extends ic{constructor(t,e,i,s){super(t,e,i,s)}}nc.prototype.ValueTypeName="number";class ac extends Ql{constructor(t,e,i,s){super(t,e,i,s)}interpolate_(t,e,i,s){const r=this.resultBuffer,n=this.sampleValues,a=this.valueSize,o=(i-e)/(s-e);let h=t*a;for(let t=h+a;h!==t;h+=4)$i.slerpFlat(r,0,n,h-a,n,h,o);return r}}class oc extends ic{constructor(t,e,i,s){super(t,e,i,s)}InterpolantFactoryMethodLinear(t){return new ac(this.times,this.values,this.getValueSize(),t)}}oc.prototype.ValueTypeName="quaternion",oc.prototype.InterpolantFactoryMethodSmooth=void 0;class hc extends ic{constructor(t,e,i){super(t,e,i)}}hc.prototype.ValueTypeName="string",hc.prototype.ValueBufferType=Array,hc.prototype.DefaultInterpolation=Be,hc.prototype.InterpolantFactoryMethodLinear=void 0,hc.prototype.InterpolantFactoryMethodSmooth=void 0;class lc extends ic{constructor(t,e,i,s){super(t,e,i,s)}}lc.prototype.ValueTypeName="vector";class cc{constructor(t="",e=-1,i=[],s=2500){this.name=t,this.tracks=i,this.duration=e,this.blendMode=s,this.uuid=Di(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],i=t.tracks,s=1/(t.fps||1);for(let t=0,r=i.length;t!==r;++t)e.push(uc(i[t]).scale(s));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],i=t.tracks,s={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,s=i.length;t!==s;++t)e.push(ic.toJSON(i[t]));return s}static CreateFromMorphTargetSequence(t,e,i,s){const r=e.length,n=[];for(let t=0;t1){const t=n[1];let e=s[t];e||(s[t]=e=[]),e.push(i)}}const n=[];for(const t in s)n.push(this.CreateFromMorphTargetSequence(t,s[t],e,i));return n}static parseAnimation(t,e){if(console.warn("THREE.AnimationClip: parseAnimation() is deprecated and will be removed with r185"),!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const i=function(t,e,i,s,r){if(0!==i.length){const n=[],a=[];Gl(i,n,a,s),0!==n.length&&r.push(new t(e,n,a))}},s=[],r=t.name||"default",n=t.fps||30,a=t.blendMode;let o=t.length||-1;const h=t.hierarchy||[];for(let t=0;t{e&&e(r),this.manager.itemEnd(t)}),0),r;if(void 0!==gc[t])return void gc[t].push({onLoad:e,onProgress:i,onError:s});gc[t]=[],gc[t].push({onLoad:e,onProgress:i,onError:s});const n=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),a=this.mimeType,o=this.responseType;fetch(n).then((e=>{if(200===e.status||0===e.status){if(0===e.status&&console.warn("THREE.FileLoader: HTTP Status 0 received."),"undefined"==typeof ReadableStream||void 0===e.body||void 0===e.body.getReader)return e;const i=gc[t],s=e.body.getReader(),r=e.headers.get("X-File-Size")||e.headers.get("Content-Length"),n=r?parseInt(r):0,a=0!==n;let o=0;const h=new ReadableStream({start(t){!function e(){s.read().then((({done:s,value:r})=>{if(s)t.close();else{o+=r.byteLength;const s=new ProgressEvent("progress",{lengthComputable:a,loaded:o,total:n});for(let t=0,e=i.length;t{t.error(e)}))}()}});return new Response(h)}throw new fc(`fetch for "${e.url}" responded with ${e.status}: ${e.statusText}`,e)})).then((t=>{switch(o){case"arraybuffer":return t.arrayBuffer();case"blob":return t.blob();case"document":return t.text().then((t=>(new DOMParser).parseFromString(t,a)));case"json":return t.json();default:if(""===a)return t.text();{const e=/charset="?([^;"\s]*)"?/i.exec(a),i=e&&e[1]?e[1].toLowerCase():void 0,s=new TextDecoder(i);return t.arrayBuffer().then((t=>s.decode(t)))}}})).then((e=>{dc.add(t,e);const i=gc[t];delete gc[t];for(let t=0,s=i.length;t{const i=gc[t];if(void 0===i)throw this.manager.itemError(t),e;delete gc[t];for(let t=0,s=i.length;t{this.manager.itemEnd(t)})),this.manager.itemStart(t)}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class bc extends yc{constructor(t){super(t)}load(t,e,i,s){const r=this,n=new xc(this.manager);n.setPath(this.path),n.setRequestHeader(this.requestHeader),n.setWithCredentials(this.withCredentials),n.load(t,(function(i){try{e(r.parse(JSON.parse(i)))}catch(e){s?s(e):console.error(e),r.manager.itemError(t)}}),i,s)}parse(t){const e=[];for(let i=0;i0:s.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(s.uniforms[e]={},r.type){case"t":s.uniforms[e].value=i(r.value);break;case"c":s.uniforms[e].value=(new Kr).setHex(r.value);break;case"v2":s.uniforms[e].value=(new Gi).fromArray(r.value);break;case"v3":s.uniforms[e].value=(new Qi).fromArray(r.value);break;case"v4":s.uniforms[e].value=(new zs).fromArray(r.value);break;case"m3":s.uniforms[e].value=(new es).fromArray(r.value);break;case"m4":s.uniforms[e].value=(new or).fromArray(r.value);break;default:s.uniforms[e].value=r.value}}if(void 0!==t.defines&&(s.defines=t.defines),void 0!==t.vertexShader&&(s.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(s.fragmentShader=t.fragmentShader),void 0!==t.glslVersion&&(s.glslVersion=t.glslVersion),void 0!==t.extensions)for(const e in t.extensions)s.extensions[e]=t.extensions[e];if(void 0!==t.lights&&(s.lights=t.lights),void 0!==t.clipping&&(s.clipping=t.clipping),void 0!==t.size&&(s.size=t.size),void 0!==t.sizeAttenuation&&(s.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(s.map=i(t.map)),void 0!==t.matcap&&(s.matcap=i(t.matcap)),void 0!==t.alphaMap&&(s.alphaMap=i(t.alphaMap)),void 0!==t.bumpMap&&(s.bumpMap=i(t.bumpMap)),void 0!==t.bumpScale&&(s.bumpScale=t.bumpScale),void 0!==t.normalMap&&(s.normalMap=i(t.normalMap)),void 0!==t.normalMapType&&(s.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),s.normalScale=(new Gi).fromArray(e)}return void 0!==t.displacementMap&&(s.displacementMap=i(t.displacementMap)),void 0!==t.displacementScale&&(s.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(s.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(s.roughnessMap=i(t.roughnessMap)),void 0!==t.metalnessMap&&(s.metalnessMap=i(t.metalnessMap)),void 0!==t.emissiveMap&&(s.emissiveMap=i(t.emissiveMap)),void 0!==t.emissiveIntensity&&(s.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(s.specularMap=i(t.specularMap)),void 0!==t.specularIntensityMap&&(s.specularIntensityMap=i(t.specularIntensityMap)),void 0!==t.specularColorMap&&(s.specularColorMap=i(t.specularColorMap)),void 0!==t.envMap&&(s.envMap=i(t.envMap)),void 0!==t.envMapRotation&&s.envMapRotation.fromArray(t.envMapRotation),void 0!==t.envMapIntensity&&(s.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(s.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(s.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(s.lightMap=i(t.lightMap)),void 0!==t.lightMapIntensity&&(s.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(s.aoMap=i(t.aoMap)),void 0!==t.aoMapIntensity&&(s.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(s.gradientMap=i(t.gradientMap)),void 0!==t.clearcoatMap&&(s.clearcoatMap=i(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(s.clearcoatRoughnessMap=i(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(s.clearcoatNormalMap=i(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(s.clearcoatNormalScale=(new Gi).fromArray(t.clearcoatNormalScale)),void 0!==t.iridescenceMap&&(s.iridescenceMap=i(t.iridescenceMap)),void 0!==t.iridescenceThicknessMap&&(s.iridescenceThicknessMap=i(t.iridescenceThicknessMap)),void 0!==t.transmissionMap&&(s.transmissionMap=i(t.transmissionMap)),void 0!==t.thicknessMap&&(s.thicknessMap=i(t.thicknessMap)),void 0!==t.anisotropyMap&&(s.anisotropyMap=i(t.anisotropyMap)),void 0!==t.sheenColorMap&&(s.sheenColorMap=i(t.sheenColorMap)),void 0!==t.sheenRoughnessMap&&(s.sheenRoughnessMap=i(t.sheenRoughnessMap)),s}setTextures(t){return this.textures=t,this}createMaterialFromType(t){return qc.createMaterialFromType(t)}static createMaterialFromType(t){return new{ShadowMaterial:Pl,SpriteMaterial:ma,RawShaderMaterial:Ol,ShaderMaterial:Zn,PointsMaterial:Xo,MeshPhysicalMaterial:Fl,MeshStandardMaterial:Nl,MeshPhongMaterial:Vl,MeshToonMaterial:Ll,MeshNormalMaterial:jl,MeshLambertMaterial:Wl,MeshDepthMaterial:Ul,MeshDistanceMaterial:Dl,MeshBasicMaterial:rn,MeshMatcapMaterial:Hl,LineDashedMaterial:ql,LineBasicMaterial:Eo,Material:sn}[t]}}class Jc{static extractUrlBase(t){const e=t.lastIndexOf("/");return-1===e?"./":t.slice(0,e+1)}static resolveURL(t,e){return"string"!=typeof t||""===t?"":(/^https?:\/\//i.test(e)&&/^\//.test(t)&&(e=e.replace(/(^https?:\/\/[^\/]+).*/i,"$1")),/^(https?:)?\/\//i.test(t)||/^data:.*,.*$/i.test(t)||/^blob:.*$/i.test(t)?t:e+t)}}class Xc extends Bn{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(t){return super.copy(t),this.instanceCount=t.instanceCount,this}toJSON(){const t=super.toJSON();return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}class Yc extends yc{constructor(t){super(t)}load(t,e,i,s){const r=this,n=new xc(r.manager);n.setPath(r.path),n.setRequestHeader(r.requestHeader),n.setWithCredentials(r.withCredentials),n.load(t,(function(i){try{e(r.parse(JSON.parse(i)))}catch(e){s?s(e):console.error(e),r.manager.itemError(t)}}),i,s)}parse(t){const e={},i={};function s(t,s){if(void 0!==e[s])return e[s];const r=t.interleavedBuffers[s],n=function(t,e){if(void 0!==i[e])return i[e];const s=t.arrayBuffers,r=s[e],n=new Uint32Array(r).buffer;return i[e]=n,n}(t,r.buffer),a=ns(r.type,n),o=new ua(a,r.stride);return o.uuid=r.uuid,e[s]=o,o}const r=t.isInstancedBufferGeometry?new Xc:new Bn,n=t.data.index;if(void 0!==n){const t=ns(n.type,n.array);r.setIndex(new pn(t,1))}const a=t.data.attributes;for(const e in a){const i=a[e];let n;if(i.isInterleavedBufferAttribute){const e=s(t.data,i.data);n=new pa(e,i.itemSize,i.offset,i.normalized)}else{const t=ns(i.type,i.array);n=new(i.isInstancedBufferAttribute?Ya:pn)(t,i.itemSize,i.normalized)}void 0!==i.name&&(n.name=i.name),void 0!==i.usage&&n.setUsage(i.usage),r.setAttribute(e,n)}const o=t.data.morphAttributes;if(o)for(const e in o){const i=o[e],n=[];for(let e=0,r=i.length;e0){const i=new pc(e);r=new wc(i),r.setCrossOrigin(this.crossOrigin);for(let e=0,i=t.length;e0){s=new wc(this.manager),s.setCrossOrigin(this.crossOrigin);for(let e=0,s=t.length;e{let e=null,i=null;return void 0!==t.boundingBox&&(e=(new Ps).fromJSON(t.boundingBox)),void 0!==t.boundingSphere&&(i=(new Qs).fromJSON(t.boundingSphere)),{...t,boundingBox:e,boundingSphere:i}})),n._instanceInfo=t.instanceInfo,n._availableInstanceIds=t._availableInstanceIds,n._availableGeometryIds=t._availableGeometryIds,n._nextIndexStart=t.nextIndexStart,n._nextVertexStart=t.nextVertexStart,n._geometryCount=t.geometryCount,n._maxInstanceCount=t.maxInstanceCount,n._maxVertexCount=t.maxVertexCount,n._maxIndexCount=t.maxIndexCount,n._geometryInitialized=t.geometryInitialized,n._matricesTexture=c(t.matricesTexture.uuid),n._indirectTexture=c(t.indirectTexture.uuid),void 0!==t.colorsTexture&&(n._colorsTexture=c(t.colorsTexture.uuid)),void 0!==t.boundingSphere&&(n.boundingSphere=(new Qs).fromJSON(t.boundingSphere)),void 0!==t.boundingBox&&(n.boundingBox=(new Ps).fromJSON(t.boundingBox));break;case"LOD":n=new Ra;break;case"Line":n=new Wo(h(t.geometry),l(t.material));break;case"LineLoop":n=new Jo(h(t.geometry),l(t.material));break;case"LineSegments":n=new qo(h(t.geometry),l(t.material));break;case"PointCloud":case"Points":n=new Qo(h(t.geometry),l(t.material));break;case"Sprite":n=new Ia(l(t.material));break;case"Group":n=new na;break;case"Bone":n=new Da;break;default:n=new Pr}if(n.uuid=t.uuid,void 0!==t.name&&(n.name=t.name),void 0!==t.matrix?(n.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate&&(n.matrixAutoUpdate=t.matrixAutoUpdate),n.matrixAutoUpdate&&n.matrix.decompose(n.position,n.quaternion,n.scale)):(void 0!==t.position&&n.position.fromArray(t.position),void 0!==t.rotation&&n.rotation.fromArray(t.rotation),void 0!==t.quaternion&&n.quaternion.fromArray(t.quaternion),void 0!==t.scale&&n.scale.fromArray(t.scale)),void 0!==t.up&&n.up.fromArray(t.up),void 0!==t.castShadow&&(n.castShadow=t.castShadow),void 0!==t.receiveShadow&&(n.receiveShadow=t.receiveShadow),t.shadow&&(void 0!==t.shadow.intensity&&(n.shadow.intensity=t.shadow.intensity),void 0!==t.shadow.bias&&(n.shadow.bias=t.shadow.bias),void 0!==t.shadow.normalBias&&(n.shadow.normalBias=t.shadow.normalBias),void 0!==t.shadow.radius&&(n.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize&&n.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera&&(n.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible&&(n.visible=t.visible),void 0!==t.frustumCulled&&(n.frustumCulled=t.frustumCulled),void 0!==t.renderOrder&&(n.renderOrder=t.renderOrder),void 0!==t.userData&&(n.userData=t.userData),void 0!==t.layers&&(n.layers.mask=t.layers),void 0!==t.children){const a=t.children;for(let t=0;t{if(!0!==Kc.has(n))return e&&e(i),r.manager.itemEnd(t),i;s&&s(Kc.get(n)),r.manager.itemError(t),r.manager.itemEnd(t)})):(setTimeout((function(){e&&e(n),r.manager.itemEnd(t)}),0),n);const a={};a.credentials="anonymous"===this.crossOrigin?"same-origin":"include",a.headers=this.requestHeader;const o=fetch(t,a).then((function(t){return t.blob()})).then((function(t){return createImageBitmap(t,Object.assign(r.options,{colorSpaceConversion:"none"}))})).then((function(i){return dc.add(t,i),e&&e(i),r.manager.itemEnd(t),i})).catch((function(e){s&&s(e),Kc.set(o,e),dc.remove(t),r.manager.itemError(t),r.manager.itemEnd(t)}));dc.add(t,o),r.manager.itemStart(t)}}let eu;class iu{static getContext(){return void 0===eu&&(eu=new(window.AudioContext||window.webkitAudioContext)),eu}static setContext(t){eu=t}}class su extends yc{constructor(t){super(t)}load(t,e,i,s){const r=this,n=new xc(this.manager);function a(e){s?s(e):console.error(e),r.manager.itemError(t)}n.setResponseType("arraybuffer"),n.setPath(this.path),n.setRequestHeader(this.requestHeader),n.setWithCredentials(this.withCredentials),n.load(t,(function(t){try{const i=t.slice(0);iu.getContext().decodeAudioData(i,(function(t){e(t)})).catch(a)}catch(t){a(t)}}),i,s)}}const ru=new or,nu=new or,au=new or;class ou{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new ta,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new ta,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(t){const e=this._cache;if(e.focus!==t.focus||e.fov!==t.fov||e.aspect!==t.aspect*this.aspect||e.near!==t.near||e.far!==t.far||e.zoom!==t.zoom||e.eyeSep!==this.eyeSep){e.focus=t.focus,e.fov=t.fov,e.aspect=t.aspect*this.aspect,e.near=t.near,e.far=t.far,e.zoom=t.zoom,e.eyeSep=this.eyeSep,au.copy(t.projectionMatrix);const i=e.eyeSep/2,s=i*e.near/e.focus,r=e.near*Math.tan(Wi*e.fov*.5)/e.zoom;let n,a;nu.elements[12]=-i,ru.elements[12]=i,n=-r*e.aspect+s,a=r*e.aspect+s,au.elements[0]=2*e.near/(a-n),au.elements[8]=(a+n)/(a-n),this.cameraL.projectionMatrix.copy(au),n=-r*e.aspect-s,a=r*e.aspect-s,au.elements[0]=2*e.near/(a-n),au.elements[8]=(a+n)/(a-n),this.cameraR.projectionMatrix.copy(au)}this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(nu),this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(ru)}}class hu extends ta{constructor(t=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=t}}class lu{constructor(t=!0){this.autoStart=t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=cu(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let t=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const e=cu();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}function cu(){return performance.now()}const uu=new Qi,du=new $i,pu=new Qi,mu=new Qi,yu=new Qi;class gu extends Pr{constructor(){super(),this.type="AudioListener",this.context=iu.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new lu}getInput(){return this.gain}removeFilter(){return null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(t){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}updateMatrixWorld(t){super.updateMatrixWorld(t);const e=this.context.listener;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(uu,du,pu),mu.set(0,0,-1).applyQuaternion(du),yu.set(0,1,0).applyQuaternion(du),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(uu.x,t),e.positionY.linearRampToValueAtTime(uu.y,t),e.positionZ.linearRampToValueAtTime(uu.z,t),e.forwardX.linearRampToValueAtTime(mu.x,t),e.forwardY.linearRampToValueAtTime(mu.y,t),e.forwardZ.linearRampToValueAtTime(mu.z,t),e.upX.linearRampToValueAtTime(yu.x,t),e.upY.linearRampToValueAtTime(yu.y,t),e.upZ.linearRampToValueAtTime(yu.z,t)}else e.setPosition(uu.x,uu.y,uu.z),e.setOrientation(mu.x,mu.y,mu.z,yu.x,yu.y,yu.z)}}class fu extends Pr{constructor(t){super(),this.type="Audio",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn("THREE.Audio: Audio is already playing.");if(!1===this.hasPlaybackControl)return void console.warn("THREE.Audio: this Audio has no playback control.");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")}stop(t=0){if(!1!==this.hasPlaybackControl)return this._progress=0,null!==this.source&&(this.source.stop(this.context.currentTime+t),this.source.onended=null),this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(i,s,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(i[t]!==i[t+e]){a.setValue(i,s);break}}saveOriginalState(){const t=this.binding,e=this.buffer,i=this.valueSize,s=i*this._origIndex;t.getValue(e,s);for(let t=i,r=s;t!==r;++t)e[t]=e[s+t%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let i=t;i=.5)for(let s=0;s!==r;++s)t[e+s]=t[i+s]}_slerp(t,e,i,s){$i.slerpFlat(t,e,t,e,t,i,s)}_slerpAdditive(t,e,i,s,r){const n=this._workIndex*r;$i.multiplyQuaternionsFlat(t,n,t,e,t,i),$i.slerpFlat(t,e,t,e,t,n,s)}_lerp(t,e,i,s,r){const n=1-s;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*n+t[i+a]*s}}_lerpAdditive(t,e,i,s,r){for(let n=0;n!==r;++n){const r=e+n;t[r]=t[r]+t[i+n]*s}}}const Au="\\[\\]\\.:\\/",Tu=new RegExp("["+Au+"]","g"),zu="[^"+Au+"]",Iu="[^"+Au.replace("\\.","")+"]",Cu=new RegExp("^"+/((?:WC+[\/:])*)/.source.replace("WC",zu)+/(WCOD+)?/.source.replace("WCOD",Iu)+/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",zu)+/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",zu)+"$"),Bu=["material","materials","bones","map"];class ku{constructor(t,e,i){this.path=e,this.parsedPath=i||ku.parseTrackName(e),this.node=ku.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,i){return t&&t.isAnimationObjectGroup?new ku.Composite(t,e,i):new ku(t,e,i)}static sanitizeNodeName(t){return t.replace(/\s/g,"_").replace(Tu,"")}static parseTrackName(t){const e=Cu.exec(t);if(null===e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);const i={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},s=i.nodeName&&i.nodeName.lastIndexOf(".");if(void 0!==s&&-1!==s){const t=i.nodeName.substring(s+1);-1!==Bu.indexOf(t)&&(i.nodeName=i.nodeName.substring(0,s),i.objectName=t)}if(null===i.propertyName||0===i.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return i}static findNode(t,e){if(void 0===e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const i=t.skeleton.getBoneByName(e);if(void 0!==i)return i}if(t.children){const i=function(t){for(let s=0;s=r){const n=r++,l=t[n];e[l.uuid]=h,t[h]=l,e[o]=n,t[n]=a;for(let t=0,e=s;t!==e;++t){const e=i[t],s=e[n],r=e[h];e[h]=s,e[n]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,i=this._bindings,s=i.length;let r=this.nCachedObjects_,n=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,h=e[o];if(void 0!==h)if(delete e[o],h0&&(e[a.uuid]=h),t[h]=a,t.pop();for(let t=0,e=s;t!==e;++t){const e=i[t];e[h]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const i=this._bindingsIndicesByPath;let s=i[t];const r=this._bindings;if(void 0!==s)return r[s];const n=this._paths,a=this._parsedPaths,o=this._objects,h=o.length,l=this.nCachedObjects_,c=new Array(h);s=r.length,i[t]=s,n.push(t),a.push(e),r.push(c);for(let i=l,s=o.length;i!==s;++i){const s=o[i];c[i]=new ku(s,t,e)}return c}unsubscribe_(t){const e=this._bindingsIndicesByPath,i=e[t];if(void 0!==i){const s=this._paths,r=this._parsedPaths,n=this._bindings,a=n.length-1,o=n[a];e[t[a]]=i,n[i]=o,n.pop(),r[i]=r[a],r.pop(),s[i]=s[a],s.pop()}}}class Eu{constructor(t,e,i=null,s=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=i,this.blendMode=s;const r=e.tracks,n=r.length,a=new Array(n),o={endingStart:Ee,endingEnd:Ee};for(let t=0;t!==n;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(n),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,i=!1){if(t.fadeOut(e),this.fadeIn(e),!0===i){const i=this._clip.duration,s=t._clip.duration,r=s/i,n=i/s;t.warp(1,r,e),this.warp(n,1,e)}return this}crossFadeTo(t,e,i=!1){return t.crossFadeFrom(this,e,i)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,i){const s=this._mixer,r=s.time,n=this.timeScale;let a=this._timeScaleInterpolant;null===a&&(a=s._lendControlInterpolant(),this._timeScaleInterpolant=a);const o=a.parameterPositions,h=a.sampleValues;return o[0]=r,o[1]=r+i,h[0]=t/n,h[1]=e/n,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,i,s){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const s=(t-r)*i;s<0||0===i?e=0:(this._startTime=null,e=i*s)}e*=this._updateTimeScale(t);const n=this._updateTime(e),a=this._updateWeight(t);if(a>0){const t=this._interpolants,e=this._propertyBindings;if(this.blendMode===Fe)for(let i=0,s=t.length;i!==s;++i)t[i].evaluate(n),e[i].accumulateAdditive(a);else for(let i=0,r=t.length;i!==r;++i)t[i].evaluate(n),e[i].accumulate(s,a)}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const i=this._weightInterpolant;if(null!==i){const s=i.evaluate(t)[0];e*=s,t>i.parameterPositions[1]&&(this.stopFading(),0===s&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const i=this._timeScaleInterpolant;if(null!==i){e*=i.evaluate(t)[0],t>i.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,i=this.loop;let s=this.time+t,r=this._loopCount;const n=2202===i;if(0===t)return-1===r||!n||1&~r?s:e-s;if(2200===i){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(s>=e)s=e;else{if(!(s<0)){this.time=s;break t}s=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,n)):this._setEndings(0===this.repetitions,!0,n)),s>=e||s<0){const i=Math.floor(s/e);s-=e*i,r+=Math.abs(i);const a=this.repetitions-r;if(a<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,s=t>0?e:0,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===a){const e=t<0;this._setEndings(e,!e,n)}else this._setEndings(!1,!1,n);this._loopCount=r,this.time=s,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:i})}}else this.time=s;if(n&&!(1&~r))return e-s}return s}_setEndings(t,e,i){const s=this._interpolantSettings;i?(s.endingStart=Pe,s.endingEnd=Pe):(s.endingStart=t?this.zeroSlopeAtStart?Pe:Ee:Oe,s.endingEnd=e?this.zeroSlopeAtEnd?Pe:Ee:Oe)}_scheduleFading(t,e,i){const s=this._mixer,r=s.time;let n=this._weightInterpolant;null===n&&(n=s._lendControlInterpolant(),this._weightInterpolant=n);const a=n.parameterPositions,o=n.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=i,this}}const Pu=new Float32Array(1);class Ou extends Vi{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const i=t._localRoot||this._root,s=t._clip.tracks,r=s.length,n=t._propertyBindings,a=t._interpolants,o=i.uuid,h=this._bindingsByRootAndName;let l=h[o];void 0===l&&(l={},h[o]=l);for(let t=0;t!==r;++t){const r=s[t],h=r.name;let c=l[h];if(void 0!==c)++c.referenceCount,n[t]=c;else{if(c=n[t],void 0!==c){null===c._cacheIndex&&(++c.referenceCount,this._addInactiveBinding(c,o,h));continue}const s=e&&e._propertyBindings[t].binding.parsedPath;c=new _u(ku.create(i,h,s),r.ValueTypeName,r.getValueSize()),++c.referenceCount,this._addInactiveBinding(c,o,h),n[t]=c}a[t].resultBuffer=c.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,i=t._clip.uuid,s=this._actionsByClip[i];this._bindAction(t,s&&s.knownActions[0]),this._addInactiveAction(t,i,e)}const e=t._propertyBindings;for(let t=0,i=e.length;t!==i;++t){const i=e[t];0==i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,i=e.length;t!==i;++t){const i=e[t];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,i=this._nActiveActions,s=this.time+=t,r=Math.sign(t),n=this._accuIndex^=1;for(let a=0;a!==i;++a){e[a]._update(s,t,r,n)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(n);return this}setTime(t){this.time=0;for(let t=0;t=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Zu).distanceTo(t)}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const $u=new Qi,Qu=new Qi;class Ku{constructor(t=new Qi,e=new Qi){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){$u.subVectors(t,this.start),Qu.subVectors(this.end,this.start);const i=Qu.dot(Qu);let s=Qu.dot($u)/i;return e&&(s=Hi(s,0,1)),s}closestPointToPoint(t,e,i){const s=this.closestPointToPointParameter(t,e);return this.delta(i).multiplyScalar(s).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}const td=new Qi;class ed extends Pr{constructor(t,e){super(),this.light=t,this.matrixAutoUpdate=!1,this.color=e,this.type="SpotLightHelper";const i=new Bn,s=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let t=0,e=1,i=32;t1)for(let i=0;i.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{Td.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(Td,e)}}setLength(t,e=.2*t,i=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(i,e,i),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class Bd extends qo{constructor(t=1){const e=[0,0,0,t,0,0,0,0,0,0,t,0,0,0,0,0,0,t],i=new Bn;i.setAttribute("position",new Mn(e,3)),i.setAttribute("color",new Mn([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));super(i,new Eo({vertexColors:!0,toneMapped:!1})),this.type="AxesHelper"}setColors(t,e,i){const s=new Kr,r=this.geometry.attributes.color.array;return s.set(t),s.toArray(r,0),s.toArray(r,3),s.set(e),s.toArray(r,6),s.toArray(r,9),s.set(i),s.toArray(r,12),s.toArray(r,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class kd{constructor(){this.type="ShapePath",this.color=new Kr,this.subPaths=[],this.currentPath=null}moveTo(t,e){return this.currentPath=new jh,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e),this}lineTo(t,e){return this.currentPath.lineTo(t,e),this}quadraticCurveTo(t,e,i,s){return this.currentPath.quadraticCurveTo(t,e,i,s),this}bezierCurveTo(t,e,i,s,r,n){return this.currentPath.bezierCurveTo(t,e,i,s,r,n),this}splineThru(t){return this.currentPath.splineThru(t),this}toShapes(t){function e(t,e){const i=e.length;let s=!1;for(let r=i-1,n=0;nNumber.EPSILON){if(h<0&&(i=e[n],o=-o,a=e[r],h=-h),t.ya.y)continue;if(t.y===i.y){if(t.x===i.x)return!0}else{const e=h*(t.x-i.x)-o*(t.y-i.y);if(0===e)return!0;if(e<0)continue;s=!s}}else{if(t.y!==i.y)continue;if(a.x<=t.x&&t.x<=i.x||i.x<=t.x&&t.x<=a.x)return!0}}return s}const i=yl.isClockWise,s=this.subPaths;if(0===s.length)return[];let r,n,a;const o=[];if(1===s.length)return n=s[0],a=new Wh,a.curves=n.curves,o.push(a),o;let h=!i(s[0].getPoints());h=t?!h:h;const l=[],c=[];let u,d,p=[],m=0;c[m]=void 0,p[m]=[];for(let e=0,a=s.length;e1){let t=!1,i=0;for(let t=0,e=c.length;t0&&!1===t&&(p=l)}for(let t=0,e=c.length;te?(t.repeat.x=1,t.repeat.y=i/e,t.offset.x=0,t.offset.y=(1-t.repeat.y)/2):(t.repeat.x=e/i,t.repeat.y=1,t.offset.x=(1-t.repeat.x)/2,t.offset.y=0),t}(t,e)}static cover(t,e){return function(t,e){const i=t.image&&t.image.width?t.image.width/t.image.height:1;return i>e?(t.repeat.x=e/i,t.repeat.y=1,t.offset.x=(1-t.repeat.x)/2,t.offset.y=0):(t.repeat.x=1,t.repeat.y=i/e,t.offset.x=0,t.offset.y=(1-t.repeat.y)/2),t}(t,e)}static fill(t){return function(t){return t.repeat.x=1,t.repeat.y=1,t.offset.x=0,t.offset.y=0,t}(t)}static getByteLength(t,e,i,s){return Ed(t,e,i,s)}}"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:t}})),"undefined"!=typeof window&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=t);export{et as ACESFilmicToneMapping,v as AddEquation,G as AddOperation,Fe as AdditiveAnimationBlendMode,g as AdditiveBlending,st as AgXToneMapping,Vt as AlphaFormat,wi as AlwaysCompare,W as AlwaysDepth,pi as AlwaysStencilFunc,Wc as AmbientLight,Eu as AnimationAction,cc as AnimationClip,bc as AnimationLoader,Ou as AnimationMixer,Ru as AnimationObjectGroup,$l as AnimationUtils,wh as ArcCurve,hu as ArrayCamera,Cd as ArrowHelper,nt as AttachedBindMode,fu as Audio,Su as AudioAnalyser,iu as AudioContext,gu as AudioListener,su as AudioLoader,Bd as AxesHelper,d as BackSide,We as BasicDepthPacking,o as BasicShadowMap,Ro as BatchedMesh,Da as Bone,sc as BooleanKeyframeTrack,Gu as Box2,Ps as Box3,_d as Box3Helper,Hn as BoxGeometry,Sd as BoxHelper,pn as BufferAttribute,Bn as BufferGeometry,Yc as BufferGeometryLoader,zt as ByteType,dc as Cache,Gn as Camera,vd as CameraHelper,ah as CanvasTexture,hh as CapsuleGeometry,zh as CatmullRomCurve3,tt as CineonToneMapping,lh as CircleGeometry,mt as ClampToEdgeWrapping,lu as Clock,Kr as Color,rc as ColorKeyframeTrack,gs as ColorManagement,rh as CompressedArrayTexture,nh as CompressedCubeTexture,sh as CompressedTexture,vc as CompressedTextureLoader,uh as ConeGeometry,V as ConstantAlphaFactor,N as ConstantColorFactor,Rd as Controls,ia as CubeCamera,ht as CubeReflectionMapping,lt as CubeRefractionMapping,sa as CubeTexture,Mc as CubeTextureLoader,dt as CubeUVReflectionMapping,kh as CubicBezierCurve,Rh as CubicBezierCurve3,Kl as CubicInterpolant,r as CullFaceBack,n as CullFaceFront,a as CullFaceFrontBack,s as CullFaceNone,bh as Curve,Lh as CurvePath,b as CustomBlending,it as CustomToneMapping,ch as CylinderGeometry,Xu as Cylindrical,Rs as Data3DTexture,Bs as DataArrayTexture,Ha as DataTexture,Sc as DataTextureLoader,ln as DataUtils,ii as DecrementStencilOp,ri as DecrementWrapStencilOp,mc as DefaultLoadingManager,Wt as DepthFormat,Ut as DepthStencilFormat,oh as DepthTexture,at as DetachedBindMode,jc as DirectionalLight,fd as DirectionalLightHelper,ec as DiscreteInterpolant,ph as DodecahedronGeometry,p as DoubleSide,k as DstAlphaFactor,E as DstColorFactor,Ci as DynamicCopyUsage,Si as DynamicDrawUsage,Ti as DynamicReadUsage,xh as EdgesGeometry,vh as EllipseCurve,gi as EqualCompare,H as EqualDepth,hi as EqualStencilFunc,ct as EquirectangularReflectionMapping,ut as EquirectangularRefractionMapping,fr as Euler,Vi as EventDispatcher,xl as ExtrudeGeometry,xc as FileLoader,wn as Float16BufferAttribute,Mn as Float32BufferAttribute,Rt as FloatType,la as Fog,ha as FogExp2,ih as FramebufferTexture,u as FrontSide,lo as Frustum,po as FrustumArray,Wu as GLBufferAttribute,ki as GLSL1,Ri as GLSL3,xi as GreaterCompare,J as GreaterDepth,vi as GreaterEqualCompare,q as GreaterEqualDepth,di as GreaterEqualStencilFunc,ci as GreaterStencilFunc,dd as GridHelper,na as Group,Et as HalfFloatType,Tc as HemisphereLight,ud as HemisphereLightHelper,vl as IcosahedronGeometry,tu as ImageBitmapLoader,wc as ImageLoader,vs as ImageUtils,ei as IncrementStencilOp,si as IncrementWrapStencilOp,Ya as InstancedBufferAttribute,Xc as InstancedBufferGeometry,ju as InstancedInterleavedBuffer,io as InstancedMesh,fn as Int16BufferAttribute,bn as Int32BufferAttribute,mn as Int8BufferAttribute,Bt as IntType,ua as InterleavedBuffer,pa as InterleavedBufferAttribute,Ql as Interpolant,Be as InterpolateDiscrete,ke as InterpolateLinear,Re as InterpolateSmooth,Fi as InterpolationSamplingMode,Ni as InterpolationSamplingType,ni as InvertStencilOp,Ke as KeepStencilOp,ic as KeyframeTrack,Ra as LOD,wl as LatheGeometry,xr as Layers,yi as LessCompare,U as LessDepth,fi as LessEqualCompare,D as LessEqualDepth,li as LessEqualStencilFunc,oi as LessStencilFunc,Ac as Light,Hc as LightProbe,Wo as Line,Ku as Line3,Eo as LineBasicMaterial,Eh as LineCurve,Ph as LineCurve3,ql as LineDashedMaterial,Jo as LineLoop,qo as LineSegments,wt as LinearFilter,tc as LinearInterpolant,At as LinearMipMapLinearFilter,St as LinearMipMapNearestFilter,_t as LinearMipmapLinearFilter,Mt as LinearMipmapNearestFilter,Ze as LinearSRGBColorSpace,Q as LinearToneMapping,Ge as LinearTransfer,yc as Loader,Jc as LoaderUtils,pc as LoadingManager,ze as LoopOnce,Ce as LoopPingPong,Ie as LoopRepeat,e as MOUSE,sn as Material,qc as MaterialLoader,Zi as MathUtils,Yu as Matrix2,es as Matrix3,or as Matrix4,_ as MaxEquation,Un as Mesh,rn as MeshBasicMaterial,Ul as MeshDepthMaterial,Dl as MeshDistanceMaterial,Wl as MeshLambertMaterial,Hl as MeshMatcapMaterial,jl as MeshNormalMaterial,Vl as MeshPhongMaterial,Fl as MeshPhysicalMaterial,Nl as MeshStandardMaterial,Ll as MeshToonMaterial,S as MinEquation,yt as MirroredRepeatWrapping,Z as MixOperation,x as MultiplyBlending,Y as MultiplyOperation,gt as NearestFilter,vt as NearestMipMapLinearFilter,xt as NearestMipMapNearestFilter,bt as NearestMipmapLinearFilter,ft as NearestMipmapNearestFilter,rt as NeutralToneMapping,mi as NeverCompare,j as NeverDepth,ai as NeverStencilFunc,m as NoBlending,Xe as NoColorSpace,$ as NoToneMapping,Ne as NormalAnimationBlendMode,y as NormalBlending,bi as NotEqualCompare,X as NotEqualDepth,ui as NotEqualStencilFunc,nc as NumberKeyframeTrack,Pr as Object3D,Zc as ObjectLoader,Je as ObjectSpaceNormalMap,Ml as OctahedronGeometry,T as OneFactor,L as OneMinusConstantAlphaFactor,F as OneMinusConstantColorFactor,R as OneMinusDstAlphaFactor,P as OneMinusDstColorFactor,B as OneMinusSrcAlphaFactor,I as OneMinusSrcColorFactor,Vc as OrthographicCamera,h as PCFShadowMap,l as PCFSoftShadowMap,jh as Path,ta as PerspectiveCamera,ao as Plane,Sl as PlaneGeometry,Ad as PlaneHelper,Fc as PointLight,od as PointLightHelper,Qo as Points,Xo as PointsMaterial,pd as PolarGridHelper,dh as PolyhedronGeometry,Mu as PositionalAudio,ku as PropertyBinding,_u as PropertyMixer,Oh as QuadraticBezierCurve,Nh as QuadraticBezierCurve3,$i as Quaternion,oc as QuaternionKeyframeTrack,ac as QuaternionLinearInterpolant,Ui as RAD2DEG,Ae as RED_GREEN_RGTC2_Format,Se as RED_RGTC1_Format,t as REVISION,Ue as RGBADepthPacking,jt as RGBAFormat,Yt as RGBAIntegerFormat,fe as RGBA_ASTC_10x10_Format,me as RGBA_ASTC_10x5_Format,ye as RGBA_ASTC_10x6_Format,ge as RGBA_ASTC_10x8_Format,xe as RGBA_ASTC_12x10_Format,be as RGBA_ASTC_12x12_Format,ae as RGBA_ASTC_4x4_Format,oe as RGBA_ASTC_5x4_Format,he as RGBA_ASTC_5x5_Format,le as RGBA_ASTC_6x5_Format,ce as RGBA_ASTC_6x6_Format,ue as RGBA_ASTC_8x5_Format,de as RGBA_ASTC_8x6_Format,pe as RGBA_ASTC_8x8_Format,ve as RGBA_BPTC_Format,ne as RGBA_ETC2_EAC_Format,ie as RGBA_PVRTC_2BPPV1_Format,ee as RGBA_PVRTC_4BPPV1_Format,Gt as RGBA_S3TC_DXT1_Format,$t as RGBA_S3TC_DXT3_Format,Qt as RGBA_S3TC_DXT5_Format,De as RGBDepthPacking,Lt as RGBFormat,Xt as RGBIntegerFormat,we as RGB_BPTC_SIGNED_Format,Me as RGB_BPTC_UNSIGNED_Format,se as RGB_ETC1_Format,re as RGB_ETC2_Format,te as RGB_PVRTC_2BPPV1_Format,Kt as RGB_PVRTC_4BPPV1_Format,Zt as RGB_S3TC_DXT1_Format,He as RGDepthPacking,qt as RGFormat,Jt as RGIntegerFormat,Ol as RawShaderMaterial,ar as Ray,Du as Raycaster,Uc as RectAreaLight,Dt as RedFormat,Ht as RedIntegerFormat,K as ReinhardToneMapping,Is as RenderTarget,Nu as RenderTarget3D,pt as RepeatWrapping,ti as ReplaceStencilOp,M as ReverseSubtractEquation,_l as RingGeometry,Te as SIGNED_RED_GREEN_RGTC2_Format,_e as SIGNED_RED_RGTC1_Format,Ye as SRGBColorSpace,$e as SRGBTransfer,ca as Scene,Zn as ShaderMaterial,Pl as ShadowMaterial,Wh as Shape,Al as ShapeGeometry,kd as ShapePath,yl as ShapeUtils,It as ShortType,Xa as Skeleton,nd as SkeletonHelper,Ua as SkinnedMesh,Ms as Source,Qs as Sphere,Tl as SphereGeometry,Ju as Spherical,Dc as SphericalHarmonics3,Fh as SplineCurve,Rc as SpotLight,ed as SpotLightHelper,Ia as Sprite,ma as SpriteMaterial,C as SrcAlphaFactor,O as SrcAlphaSaturateFactor,z as SrcColorFactor,Ii as StaticCopyUsage,Mi as StaticDrawUsage,Ai as StaticReadUsage,ou as StereoCamera,Bi as StreamCopyUsage,_i as StreamDrawUsage,zi as StreamReadUsage,hc as StringKeyframeTrack,w as SubtractEquation,f as SubtractiveBlending,i as TOUCH,qe as TangentSpaceNormalMap,zl as TetrahedronGeometry,Ts as Texture,_c as TextureLoader,Pd as TextureUtils,Oi as TimestampQuery,Il as TorusGeometry,Cl as TorusKnotGeometry,Yr as Triangle,je as TriangleFanDrawMode,Le as TriangleStripDrawMode,Ve as TrianglesDrawMode,Bl as TubeGeometry,ot as UVMapping,xn as Uint16BufferAttribute,vn as Uint32BufferAttribute,yn as Uint8BufferAttribute,gn as Uint8ClampedBufferAttribute,Fu as Uniform,Lu as UniformsGroup,Yn as UniformsUtils,Tt as UnsignedByteType,Nt as UnsignedInt248Type,Ft as UnsignedInt5999Type,kt as UnsignedIntType,Pt as UnsignedShort4444Type,Ot as UnsignedShort5551Type,Ct as UnsignedShortType,c as VSMShadowMap,Gi as Vector2,Qi as Vector3,zs as Vector4,lc as VectorKeyframeTrack,eh as VideoFrameTexture,th as VideoTexture,Es as WebGL3DRenderTarget,ks as WebGLArrayRenderTarget,Ei as WebGLCoordinateSystem,ra as WebGLCubeRenderTarget,Cs as WebGLRenderTarget,Pi as WebGPUCoordinateSystem,oa as WebXRController,kl as WireframeGeometry,Oe as WrapAroundEnding,Ee as ZeroCurvatureEnding,A as ZeroFactor,Pe as ZeroSlopeEnding,Qe as ZeroStencilOp,ss as arrayNeedsUint32,qn as cloneUniforms,os as createCanvasElement,as as createElementNS,Ed as getByteLength,Xn as getUnlitUniformColorSpace,Jn as mergeUniforms,cs as probeAsync,us as toNormalizedProjectionMatrix,ds as toReversedProjectionMatrix,ls as warnOnce}; diff --git a/aperisolve/static/js/three.module.min.js b/aperisolve/static/js/three.module.min.js new file mode 100644 index 0000000..74c3759 --- /dev/null +++ b/aperisolve/static/js/three.module.min.js @@ -0,0 +1,6 @@ +/** + * @license + * Copyright 2010-2025 Three.js Authors + * SPDX-License-Identifier: MIT + */ +import{Matrix3 as e,Vector2 as t,Color as n,mergeUniforms as r,Vector3 as i,CubeUVReflectionMapping as a,Mesh as o,BoxGeometry as s,ShaderMaterial as l,BackSide as c,cloneUniforms as d,Euler as u,Matrix4 as f,ColorManagement as p,SRGBTransfer as m,PlaneGeometry as h,FrontSide as _,getUnlitUniformColorSpace as g,IntType as v,HalfFloatType as E,UnsignedByteType as S,FloatType as T,RGBAFormat as M,Plane as x,EquirectangularReflectionMapping as R,EquirectangularRefractionMapping as A,WebGLCubeRenderTarget as b,CubeReflectionMapping as C,CubeRefractionMapping as L,OrthographicCamera as P,PerspectiveCamera as U,NoToneMapping as D,MeshBasicMaterial as w,NoBlending as y,WebGLRenderTarget as I,BufferGeometry as N,BufferAttribute as O,LinearSRGBColorSpace as F,LinearFilter as B,warnOnce as H,Uint32BufferAttribute as G,Uint16BufferAttribute as V,arrayNeedsUint32 as z,Vector4 as k,DataArrayTexture as W,CubeTexture as X,Data3DTexture as Y,LessEqualCompare as K,DepthTexture as j,Texture as q,GLSL3 as Z,PCFShadowMap as $,PCFSoftShadowMap as Q,VSMShadowMap as J,CustomToneMapping as ee,NeutralToneMapping as te,AgXToneMapping as ne,ACESFilmicToneMapping as re,CineonToneMapping as ie,ReinhardToneMapping as ae,LinearToneMapping as oe,LinearTransfer as se,AddOperation as le,MixOperation as ce,MultiplyOperation as de,UniformsUtils as ue,DoubleSide as fe,NormalBlending as pe,TangentSpaceNormalMap as me,ObjectSpaceNormalMap as he,Layers as _e,Frustum as ge,MeshDepthMaterial as ve,RGBADepthPacking as Ee,MeshDistanceMaterial as Se,NearestFilter as Te,LessEqualDepth as Me,ReverseSubtractEquation as xe,SubtractEquation as Re,AddEquation as Ae,OneMinusConstantAlphaFactor as be,ConstantAlphaFactor as Ce,OneMinusConstantColorFactor as Le,ConstantColorFactor as Pe,OneMinusDstAlphaFactor as Ue,OneMinusDstColorFactor as De,OneMinusSrcAlphaFactor as we,OneMinusSrcColorFactor as ye,DstAlphaFactor as Ie,DstColorFactor as Ne,SrcAlphaSaturateFactor as Oe,SrcAlphaFactor as Fe,SrcColorFactor as Be,OneFactor as He,ZeroFactor as Ge,NotEqualDepth as Ve,GreaterDepth as ze,GreaterEqualDepth as ke,EqualDepth as We,LessDepth as Xe,AlwaysDepth as Ye,NeverDepth as Ke,CullFaceNone as je,CullFaceBack as qe,CullFaceFront as Ze,CustomBlending as $e,MultiplyBlending as Qe,SubtractiveBlending as Je,AdditiveBlending as et,MinEquation as tt,MaxEquation as nt,MirroredRepeatWrapping as rt,ClampToEdgeWrapping as it,RepeatWrapping as at,LinearMipmapLinearFilter as ot,LinearMipmapNearestFilter as st,NearestMipmapLinearFilter as lt,NearestMipmapNearestFilter as ct,NotEqualCompare as dt,GreaterCompare as ut,GreaterEqualCompare as ft,EqualCompare as pt,LessCompare as mt,AlwaysCompare as ht,NeverCompare as _t,NoColorSpace as gt,DepthStencilFormat as vt,getByteLength as Et,DepthFormat as St,UnsignedIntType as Tt,UnsignedInt248Type as Mt,UnsignedShortType as xt,createElementNS as Rt,UnsignedShort4444Type as At,UnsignedShort5551Type as bt,UnsignedInt5999Type as Ct,ByteType as Lt,ShortType as Pt,AlphaFormat as Ut,RGBFormat as Dt,RedFormat as wt,RedIntegerFormat as yt,RGFormat as It,RGIntegerFormat as Nt,RGBAIntegerFormat as Ot,RGB_S3TC_DXT1_Format as Ft,RGBA_S3TC_DXT1_Format as Bt,RGBA_S3TC_DXT3_Format as Ht,RGBA_S3TC_DXT5_Format as Gt,RGB_PVRTC_4BPPV1_Format as Vt,RGB_PVRTC_2BPPV1_Format as zt,RGBA_PVRTC_4BPPV1_Format as kt,RGBA_PVRTC_2BPPV1_Format as Wt,RGB_ETC1_Format as Xt,RGB_ETC2_Format as Yt,RGBA_ETC2_EAC_Format as Kt,RGBA_ASTC_4x4_Format as jt,RGBA_ASTC_5x4_Format as qt,RGBA_ASTC_5x5_Format as Zt,RGBA_ASTC_6x5_Format as $t,RGBA_ASTC_6x6_Format as Qt,RGBA_ASTC_8x5_Format as Jt,RGBA_ASTC_8x6_Format as en,RGBA_ASTC_8x8_Format as tn,RGBA_ASTC_10x5_Format as nn,RGBA_ASTC_10x6_Format as rn,RGBA_ASTC_10x8_Format as an,RGBA_ASTC_10x10_Format as on,RGBA_ASTC_12x10_Format as sn,RGBA_ASTC_12x12_Format as ln,RGBA_BPTC_Format as cn,RGB_BPTC_SIGNED_Format as dn,RGB_BPTC_UNSIGNED_Format as un,RED_RGTC1_Format as fn,SIGNED_RED_RGTC1_Format as pn,RED_GREEN_RGTC2_Format as mn,SIGNED_RED_GREEN_RGTC2_Format as hn,EventDispatcher as _n,ArrayCamera as gn,WebXRController as vn,RAD2DEG as En,createCanvasElement as Sn,SRGBColorSpace as Tn,REVISION as Mn,toNormalizedProjectionMatrix as xn,toReversedProjectionMatrix as Rn,probeAsync as An,WebGLCoordinateSystem as bn}from"./three.core.min.js";export{AdditiveAnimationBlendMode,AlwaysStencilFunc,AmbientLight,AnimationAction,AnimationClip,AnimationLoader,AnimationMixer,AnimationObjectGroup,AnimationUtils,ArcCurve,ArrowHelper,AttachedBindMode,Audio,AudioAnalyser,AudioContext,AudioListener,AudioLoader,AxesHelper,BasicDepthPacking,BasicShadowMap,BatchedMesh,Bone,BooleanKeyframeTrack,Box2,Box3,Box3Helper,BoxHelper,BufferGeometryLoader,Cache,Camera,CameraHelper,CanvasTexture,CapsuleGeometry,CatmullRomCurve3,CircleGeometry,Clock,ColorKeyframeTrack,CompressedArrayTexture,CompressedCubeTexture,CompressedTexture,CompressedTextureLoader,ConeGeometry,Controls,CubeCamera,CubeTextureLoader,CubicBezierCurve,CubicBezierCurve3,CubicInterpolant,CullFaceFrontBack,Curve,CurvePath,CylinderGeometry,Cylindrical,DataTexture,DataTextureLoader,DataUtils,DecrementStencilOp,DecrementWrapStencilOp,DefaultLoadingManager,DetachedBindMode,DirectionalLight,DirectionalLightHelper,DiscreteInterpolant,DodecahedronGeometry,DynamicCopyUsage,DynamicDrawUsage,DynamicReadUsage,EdgesGeometry,EllipseCurve,EqualStencilFunc,ExtrudeGeometry,FileLoader,Float16BufferAttribute,Float32BufferAttribute,Fog,FogExp2,FramebufferTexture,FrustumArray,GLBufferAttribute,GLSL1,GreaterEqualStencilFunc,GreaterStencilFunc,GridHelper,Group,HemisphereLight,HemisphereLightHelper,IcosahedronGeometry,ImageBitmapLoader,ImageLoader,ImageUtils,IncrementStencilOp,IncrementWrapStencilOp,InstancedBufferAttribute,InstancedBufferGeometry,InstancedInterleavedBuffer,InstancedMesh,Int16BufferAttribute,Int32BufferAttribute,Int8BufferAttribute,InterleavedBuffer,InterleavedBufferAttribute,Interpolant,InterpolateDiscrete,InterpolateLinear,InterpolateSmooth,InterpolationSamplingMode,InterpolationSamplingType,InvertStencilOp,KeepStencilOp,KeyframeTrack,LOD,LatheGeometry,LessEqualStencilFunc,LessStencilFunc,Light,LightProbe,Line,Line3,LineBasicMaterial,LineCurve,LineCurve3,LineDashedMaterial,LineLoop,LineSegments,LinearInterpolant,LinearMipMapLinearFilter,LinearMipMapNearestFilter,Loader,LoaderUtils,LoadingManager,LoopOnce,LoopPingPong,LoopRepeat,MOUSE,Material,MaterialLoader,MathUtils,Matrix2,MeshLambertMaterial,MeshMatcapMaterial,MeshNormalMaterial,MeshPhongMaterial,MeshPhysicalMaterial,MeshStandardMaterial,MeshToonMaterial,NearestMipMapLinearFilter,NearestMipMapNearestFilter,NeverStencilFunc,NormalAnimationBlendMode,NotEqualStencilFunc,NumberKeyframeTrack,Object3D,ObjectLoader,OctahedronGeometry,Path,PlaneHelper,PointLight,PointLightHelper,Points,PointsMaterial,PolarGridHelper,PolyhedronGeometry,PositionalAudio,PropertyBinding,PropertyMixer,QuadraticBezierCurve,QuadraticBezierCurve3,Quaternion,QuaternionKeyframeTrack,QuaternionLinearInterpolant,RGBDepthPacking,RGBIntegerFormat,RGDepthPacking,RawShaderMaterial,Ray,Raycaster,RectAreaLight,RenderTarget,RenderTarget3D,ReplaceStencilOp,RingGeometry,Scene,ShadowMaterial,Shape,ShapeGeometry,ShapePath,ShapeUtils,Skeleton,SkeletonHelper,SkinnedMesh,Source,Sphere,SphereGeometry,Spherical,SphericalHarmonics3,SplineCurve,SpotLight,SpotLightHelper,Sprite,SpriteMaterial,StaticCopyUsage,StaticDrawUsage,StaticReadUsage,StereoCamera,StreamCopyUsage,StreamDrawUsage,StreamReadUsage,StringKeyframeTrack,TOUCH,TetrahedronGeometry,TextureLoader,TextureUtils,TimestampQuery,TorusGeometry,TorusKnotGeometry,Triangle,TriangleFanDrawMode,TriangleStripDrawMode,TrianglesDrawMode,TubeGeometry,UVMapping,Uint8BufferAttribute,Uint8ClampedBufferAttribute,Uniform,UniformsGroup,VectorKeyframeTrack,VideoFrameTexture,VideoTexture,WebGL3DRenderTarget,WebGLArrayRenderTarget,WebGPUCoordinateSystem,WireframeGeometry,WrapAroundEnding,ZeroCurvatureEnding,ZeroSlopeEnding,ZeroStencilOp}from"./three.core.min.js";function Cn(){let e=null,t=!1,n=null,r=null;function i(t,a){n(t,a),r=e.requestAnimationFrame(i)}return{start:function(){!0!==t&&null!==n&&(r=e.requestAnimationFrame(i),t=!0)},stop:function(){e.cancelAnimationFrame(r),t=!1},setAnimationLoop:function(e){n=e},setContext:function(t){e=t}}}function Ln(e){const t=new WeakMap;return{get:function(e){return e.isInterleavedBufferAttribute&&(e=e.data),t.get(e)},remove:function(n){n.isInterleavedBufferAttribute&&(n=n.data);const r=t.get(n);r&&(e.deleteBuffer(r.buffer),t.delete(n))},update:function(n,r){if(n.isInterleavedBufferAttribute&&(n=n.data),n.isGLBufferAttribute){const e=t.get(n);return void((!e||e.versione.start-t.start));let t=0;for(let e=1;e 0\n\tvec4 plane;\n\t#ifdef ALPHA_TO_COVERAGE\n\t\tfloat distanceToPlane, distanceGradient;\n\t\tfloat clipOpacity = 1.0;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\tif ( clipOpacity == 0.0 ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tfloat unionClipOpacity = 1.0;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\n\t\t\t\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\n\t\t\t\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tclipOpacity *= 1.0 - unionClipOpacity;\n\t\t#endif\n\t\tdiffuseColor.a *= clipOpacity;\n\t\tif ( diffuseColor.a == 0.0 ) discard;\n\t#else\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\t\tbool clipped = true;\n\t\t\t#pragma unroll_loop_start\n\t\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\t\tplane = clippingPlanes[ i ];\n\t\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t\t}\n\t\t\t#pragma unroll_loop_end\n\t\t\tif ( clipped ) discard;\n\t\t#endif\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvarying vec3 vColor;\n#endif",color_vertex:"#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif\n#ifdef USE_BATCHING_COLOR\n\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\n\tvColor.xyz *= batchingColor.xyz;\n#endif",common:"#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n#ifdef USE_ALPHAHASH\n\tvarying vec3 vPosition;\n#endif\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = objectTangent;\n#endif\n#ifdef USE_BATCHING\n\tmat3 bm = mat3( batchingMatrix );\n\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\n\ttransformedNormal = bm * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = bm * transformedTangent;\n\t#endif\n#endif\n#ifdef USE_INSTANCING\n\tmat3 im = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\n\ttransformedNormal = im * transformedNormal;\n\t#ifdef USE_TANGENT\n\t\ttransformedTangent = im * transformedTangent;\n\t#endif\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE_EMISSIVE\n\t\temissiveColor = sRGBTransferEOTF( emissiveColor );\n\t#endif\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",colorspace_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",colorspace_pars_fragment:"vec4 LinearTransferOETF( in vec4 value ) {\n\treturn value;\n}\nvec4 sRGBTransferEOTF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 sRGBTransferOETF( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform mat3 envMapRotation;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#ifdef USE_ENVMAP\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\t#ifdef USE_ANISOTROPY\n\t\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\n\t\t\t#ifdef ENVMAP_TYPE_CUBE_UV\n\t\t\t\tvec3 bentNormal = cross( bitangent, viewDir );\n\t\t\t\tbentNormal = normalize( cross( bentNormal, bitangent ) );\n\t\t\t\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\n\t\t\t\treturn getIBLRadiance( viewDir, bentNormal, roughness );\n\t\t\t#else\n\t\t\t\treturn vec3( 0.0 );\n\t\t\t#endif\n\t\t}\n\t#endif\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_fragment:"LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;",lights_lambert_pars_fragment:"varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\n#if defined( USE_LIGHT_PROBES )\n\tuniform vec3 lightProbe[ 9 ];\n#endif\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif ( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometryPosition;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_DISPERSION\n\tmaterial.dispersion = dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\t#ifdef USE_ANISOTROPYMAP\n\t\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\n\t\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\n\t\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\n\t#else\n\t\tvec2 anisotropyV = anisotropyVector;\n\t#endif\n\tmaterial.anisotropy = length( anisotropyV );\n\tif( material.anisotropy == 0.0 ) {\n\t\tanisotropyV = vec2( 1.0, 0.0 );\n\t} else {\n\t\tanisotropyV /= material.anisotropy;\n\t\tmaterial.anisotropy = saturate( material.anisotropy );\n\t}\n\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\n\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\n\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\tfloat dispersion;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat anisotropy;\n\t\tfloat alphaT;\n\t\tvec3 anisotropyT;\n\t\tvec3 anisotropyB;\n\t#endif\n};\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\nvec3 sheenSpecularDirect = vec3( 0.0 );\nvec3 sheenSpecularIndirect = vec3(0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n float x2 = x * x;\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_ANISOTROPY\n\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\n\t\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\n\t\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\n\t\tfloat v = 0.5 / ( gv + gl );\n\t\treturn saturate(v);\n\t}\n\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\n\t\tfloat a2 = alphaT * alphaB;\n\t\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\n\t\thighp float v2 = dot( v, v );\n\t\tfloat w2 = a2 / v2;\n\t\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\n\t}\n#endif\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\t#ifdef USE_ANISOTROPY\n\t\tfloat dotTL = dot( material.anisotropyT, lightDir );\n\t\tfloat dotTV = dot( material.anisotropyT, viewDir );\n\t\tfloat dotTH = dot( material.anisotropyT, halfDir );\n\t\tfloat dotBL = dot( material.anisotropyB, lightDir );\n\t\tfloat dotBV = dot( material.anisotropyB, viewDir );\n\t\tfloat dotBH = dot( material.anisotropyB, halfDir );\n\t\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\n\t\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\n\t#else\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t#endif\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometryNormal;\n\t\tvec3 viewDir = geometryViewDir;\n\t\tvec3 position = geometryPosition;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nvec3 geometryPosition = - vViewPosition;\nvec3 geometryNormal = normal;\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\nvec3 geometryClearcoatNormal = vec3( 0.0 );\n#ifdef USE_CLEARCOAT\n\tgeometryClearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometryPosition, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if defined( USE_LIGHT_PROBES )\n\t\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometryNormal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\t#ifdef USE_ANISOTROPY\n\t\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\n\t#else\n\t\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF )\n\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tvFragDepth = 1.0 + gl_Position.w;\n\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\tsampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor );\n\t#endif\n\tdiffuseColor *= sampledDiffuseColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphinstance_vertex:"#ifdef USE_INSTANCING_MORPH\n\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\n\t}\n#endif",morphcolor_vertex:"#if defined( USE_MORPHCOLORS )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_INSTANCING_MORPH\n\t\tuniform float morphTargetBaseInfluence;\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t#endif\n\tuniform sampler2DArray morphTargetsTexture;\n\tuniform ivec2 morphTargetsTextureSize;\n\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t}\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t}\n#endif",normal_fragment_begin:"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\n\t\t#if defined( USE_NORMALMAP )\n\t\t\tvNormalMapUv\n\t\t#elif defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tvClearcoatNormalMapUv\n\t\t#else\n\t\t\tvUv\n\t\t#endif\n\t\t);\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 nonPerturbedNormal = normal;",normal_fragment_maps:"#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif",normal_pars_fragment:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_pars_vertex:"#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif",normal_vertex:"#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = nonPerturbedNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif",iridescence_pars_fragment:"#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif",opaque_fragment:"#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\nconst float Inv255 = 1. / 255.;\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\nvec4 packDepthToRGBA( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec4( 0., 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec4( 1., 1., 1., 1. );\n\tfloat vuf;\n\tfloat af = modf( v * PackFactors.a, vuf );\n\tfloat bf = modf( vuf * ShiftRight8, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\n}\nvec3 packDepthToRGB( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec3( 0., 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec3( 1., 1., 1. );\n\tfloat vuf;\n\tfloat bf = modf( v * PackFactors.b, vuf );\n\tfloat gf = modf( vuf * ShiftRight8, vuf );\n\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\n}\nvec2 packDepthToRG( const in float v ) {\n\tif( v <= 0.0 )\n\t\treturn vec2( 0., 0. );\n\tif( v >= 1.0 )\n\t\treturn vec2( 1., 1. );\n\tfloat vuf;\n\tfloat gf = modf( v * 256., vuf );\n\treturn vec2( vuf * Inv255, gf );\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors4 );\n}\nfloat unpackRGBToDepth( const in vec3 v ) {\n\treturn dot( v, UnpackFactors3 );\n}\nfloat unpackRGToDepth( const in vec2 v ) {\n\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\n}\nvec4 pack2HalfToRGBA( const in vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( const in vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * depth - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_BATCHING\n\tmvPosition = batchingMatrix * mvPosition;\n#endif\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tfloat shadow = 1.0;\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\t\n\t\tfloat lightToPositionLength = length( lightToPosition );\n\t\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\n\t\t\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\t\tdp += shadowBias;\n\t\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\t\tshadow = (\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t\t) * ( 1.0 / 9.0 );\n\t\t\t#else\n\t\t\t\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t\t#endif\n\t\t}\n\t\treturn mix( 1.0, shadow, shadowIntensity );\n\t}\n#endif",shadowmap_pars_vertex:"#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowIntensity;\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tint size = textureSize( boneTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\t}\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn saturate( toneMappingExposure * color );\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 CineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\n\tvec3( 1.6605, - 0.1246, - 0.0182 ),\n\tvec3( - 0.5876, 1.1329, - 0.1006 ),\n\tvec3( - 0.0728, - 0.0083, 1.1187 )\n);\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\n\tvec3( 0.6274, 0.0691, 0.0164 ),\n\tvec3( 0.3293, 0.9195, 0.0880 ),\n\tvec3( 0.0433, 0.0113, 0.8956 )\n);\nvec3 agxDefaultContrastApprox( vec3 x ) {\n\tvec3 x2 = x * x;\n\tvec3 x4 = x2 * x2;\n\treturn + 15.5 * x4 * x2\n\t\t- 40.14 * x4 * x\n\t\t+ 31.96 * x4\n\t\t- 6.868 * x2 * x\n\t\t+ 0.4298 * x2\n\t\t+ 0.1191 * x\n\t\t- 0.00232;\n}\nvec3 AgXToneMapping( vec3 color ) {\n\tconst mat3 AgXInsetMatrix = mat3(\n\t\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\n\t\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\n\t\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\n\t);\n\tconst mat3 AgXOutsetMatrix = mat3(\n\t\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\n\t\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\n\t\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\n\t);\n\tconst float AgxMinEv = - 12.47393;\tconst float AgxMaxEv = 4.026069;\n\tcolor *= toneMappingExposure;\n\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\n\tcolor = AgXInsetMatrix * color;\n\tcolor = max( color, 1e-10 );\tcolor = log2( color );\n\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\n\tcolor = clamp( color, 0.0, 1.0 );\n\tcolor = agxDefaultContrastApprox( color );\n\tcolor = AgXOutsetMatrix * color;\n\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\n\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\n\tcolor = clamp( color, 0.0, 1.0 );\n\treturn color;\n}\nvec3 NeutralToneMapping( vec3 color ) {\n\tconst float StartCompression = 0.8 - 0.04;\n\tconst float Desaturation = 0.15;\n\tcolor *= toneMappingExposure;\n\tfloat x = min( color.r, min( color.g, color.b ) );\n\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\n\tcolor -= offset;\n\tfloat peak = max( color.r, max( color.g, color.b ) );\n\tif ( peak < StartCompression ) return color;\n\tfloat d = 1. - StartCompression;\n\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\n\tcolor *= newPeak / peak;\n\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\n\treturn mix( color, vec3( newPeak ), g );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }",transmission_fragment:"#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmitted = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\n#endif",transmission_pars_fragment:"#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn vec3( 1.0 );\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec4 transmittedLight;\n\t\tvec3 transmittance;\n\t\t#ifdef USE_DISPERSION\n\t\t\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\n\t\t\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\n\t\t\tfor ( int i = 0; i < 3; i ++ ) {\n\t\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\n\t\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\t\trefractionCoords += 1.0;\n\t\t\t\trefractionCoords /= 2.0;\n\t\t\t\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\n\t\t\t\ttransmittedLight[ i ] = transmissionSample[ i ];\n\t\t\t\ttransmittedLight.a += transmissionSample.a;\n\t\t\t\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\n\t\t\t}\n\t\t\ttransmittedLight.a /= 3.0;\n\t\t#else\n\t\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\t\trefractionCoords += 1.0;\n\t\t\trefractionCoords /= 2.0;\n\t\t\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\t\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\t#endif\n\t\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\n\t}\n#endif",uv_pars_fragment:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_pars_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tuniform mat3 anisotropyMapTransform;\n\tvarying vec2 vAnisotropyMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif",uv_vertex:"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ANISOTROPYMAP\n\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_BATCHING\n\t\tworldPosition = batchingMatrix * worldPosition;\n\t#endif\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",background_frag:"uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\t#ifdef DECODE_VIDEO_TEXTURE\n\t\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",backgroundCube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",backgroundCube_frag:"#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nuniform mat3 backgroundRotation;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#elif DEPTH_PACKING == 3202\n\t\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\n\t#elif DEPTH_PACKING == 3203\n\t\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\n\t#endif\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshnormal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",meshnormal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_DISPERSION\n\tuniform float dispersion;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n#ifdef USE_ANISOTROPY\n\tuniform vec2 anisotropyVector;\n\t#ifdef USE_ANISOTROPYMAP\n\t\tuniform sampler2D anisotropyMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include \n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix[ 3 ];\n\tvec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\t#include \n\t#include \n\t#include \n\t#include \n}"},Un={common:{diffuse:{value:new n(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new e},alphaMap:{value:null},alphaMapTransform:{value:new e},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new e}},envmap:{envMap:{value:null},envMapRotation:{value:new e},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new e}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new e}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new e},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new e},normalScale:{value:new t(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new e},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new e}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new e}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new e}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new n(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new n(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new e},alphaTest:{value:0},uvTransform:{value:new e}},sprite:{diffuse:{value:new n(16777215)},opacity:{value:1},center:{value:new t(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new e},alphaMap:{value:null},alphaMapTransform:{value:new e},alphaTest:{value:0}}},Dn={basic:{uniforms:r([Un.common,Un.specularmap,Un.envmap,Un.aomap,Un.lightmap,Un.fog]),vertexShader:Pn.meshbasic_vert,fragmentShader:Pn.meshbasic_frag},lambert:{uniforms:r([Un.common,Un.specularmap,Un.envmap,Un.aomap,Un.lightmap,Un.emissivemap,Un.bumpmap,Un.normalmap,Un.displacementmap,Un.fog,Un.lights,{emissive:{value:new n(0)}}]),vertexShader:Pn.meshlambert_vert,fragmentShader:Pn.meshlambert_frag},phong:{uniforms:r([Un.common,Un.specularmap,Un.envmap,Un.aomap,Un.lightmap,Un.emissivemap,Un.bumpmap,Un.normalmap,Un.displacementmap,Un.fog,Un.lights,{emissive:{value:new n(0)},specular:{value:new n(1118481)},shininess:{value:30}}]),vertexShader:Pn.meshphong_vert,fragmentShader:Pn.meshphong_frag},standard:{uniforms:r([Un.common,Un.envmap,Un.aomap,Un.lightmap,Un.emissivemap,Un.bumpmap,Un.normalmap,Un.displacementmap,Un.roughnessmap,Un.metalnessmap,Un.fog,Un.lights,{emissive:{value:new n(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Pn.meshphysical_vert,fragmentShader:Pn.meshphysical_frag},toon:{uniforms:r([Un.common,Un.aomap,Un.lightmap,Un.emissivemap,Un.bumpmap,Un.normalmap,Un.displacementmap,Un.gradientmap,Un.fog,Un.lights,{emissive:{value:new n(0)}}]),vertexShader:Pn.meshtoon_vert,fragmentShader:Pn.meshtoon_frag},matcap:{uniforms:r([Un.common,Un.bumpmap,Un.normalmap,Un.displacementmap,Un.fog,{matcap:{value:null}}]),vertexShader:Pn.meshmatcap_vert,fragmentShader:Pn.meshmatcap_frag},points:{uniforms:r([Un.points,Un.fog]),vertexShader:Pn.points_vert,fragmentShader:Pn.points_frag},dashed:{uniforms:r([Un.common,Un.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Pn.linedashed_vert,fragmentShader:Pn.linedashed_frag},depth:{uniforms:r([Un.common,Un.displacementmap]),vertexShader:Pn.depth_vert,fragmentShader:Pn.depth_frag},normal:{uniforms:r([Un.common,Un.bumpmap,Un.normalmap,Un.displacementmap,{opacity:{value:1}}]),vertexShader:Pn.meshnormal_vert,fragmentShader:Pn.meshnormal_frag},sprite:{uniforms:r([Un.sprite,Un.fog]),vertexShader:Pn.sprite_vert,fragmentShader:Pn.sprite_frag},background:{uniforms:{uvTransform:{value:new e},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Pn.background_vert,fragmentShader:Pn.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new e}},vertexShader:Pn.backgroundCube_vert,fragmentShader:Pn.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Pn.cube_vert,fragmentShader:Pn.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Pn.equirect_vert,fragmentShader:Pn.equirect_frag},distanceRGBA:{uniforms:r([Un.common,Un.displacementmap,{referencePosition:{value:new i},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Pn.distanceRGBA_vert,fragmentShader:Pn.distanceRGBA_frag},shadow:{uniforms:r([Un.lights,Un.fog,{color:{value:new n(0)},opacity:{value:1}}]),vertexShader:Pn.shadow_vert,fragmentShader:Pn.shadow_frag}};Dn.physical={uniforms:r([Dn.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new e},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new e},clearcoatNormalScale:{value:new t(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new e},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new e},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new e},sheen:{value:0},sheenColor:{value:new n(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new e},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new e},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new e},transmissionSamplerSize:{value:new t},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new e},attenuationDistance:{value:0},attenuationColor:{value:new n(0)},specularColor:{value:new n(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new e},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new e},anisotropyVector:{value:new t},anisotropyMap:{value:null},anisotropyMapTransform:{value:new e}}]),vertexShader:Pn.meshphysical_vert,fragmentShader:Pn.meshphysical_frag};const wn={r:0,b:0,g:0},yn=new u,In=new f;function Nn(e,t,r,i,u,f,v){const E=new n(0);let S,T,M=!0===f?0:1,x=null,R=0,A=null;function b(e){let n=!0===e.isScene?e.background:null;if(n&&n.isTexture){n=(e.backgroundBlurriness>0?r:t).get(n)}return n}function C(t,n){t.getRGB(wn,g(e)),i.buffers.color.setClear(wn.r,wn.g,wn.b,n,v)}return{getClearColor:function(){return E},setClearColor:function(e,t=1){E.set(e),M=t,C(E,M)},getClearAlpha:function(){return M},setClearAlpha:function(e){M=e,C(E,M)},render:function(t){let n=!1;const r=b(t);null===r?C(E,M):r&&r.isColor&&(C(r,1),n=!0);const a=e.xr.getEnvironmentBlendMode();"additive"===a?i.buffers.color.setClear(0,0,0,1,v):"alpha-blend"===a&&i.buffers.color.setClear(0,0,0,0,v),(e.autoClear||n)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil))},addToRenderList:function(t,n){const r=b(n);r&&(r.isCubeTexture||r.mapping===a)?(void 0===T&&(T=new o(new s(1,1,1),new l({name:"BackgroundCubeMaterial",uniforms:d(Dn.backgroundCube.uniforms),vertexShader:Dn.backgroundCube.vertexShader,fragmentShader:Dn.backgroundCube.fragmentShader,side:c,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),T.geometry.deleteAttribute("normal"),T.geometry.deleteAttribute("uv"),T.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(T.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),u.update(T)),yn.copy(n.backgroundRotation),yn.x*=-1,yn.y*=-1,yn.z*=-1,r.isCubeTexture&&!1===r.isRenderTargetTexture&&(yn.y*=-1,yn.z*=-1),T.material.uniforms.envMap.value=r,T.material.uniforms.flipEnvMap.value=r.isCubeTexture&&!1===r.isRenderTargetTexture?-1:1,T.material.uniforms.backgroundBlurriness.value=n.backgroundBlurriness,T.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,T.material.uniforms.backgroundRotation.value.setFromMatrix4(In.makeRotationFromEuler(yn)),T.material.toneMapped=p.getTransfer(r.colorSpace)!==m,x===r&&R===r.version&&A===e.toneMapping||(T.material.needsUpdate=!0,x=r,R=r.version,A=e.toneMapping),T.layers.enableAll(),t.unshift(T,T.geometry,T.material,0,0,null)):r&&r.isTexture&&(void 0===S&&(S=new o(new h(2,2),new l({name:"BackgroundMaterial",uniforms:d(Dn.background.uniforms),vertexShader:Dn.background.vertexShader,fragmentShader:Dn.background.fragmentShader,side:_,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),S.geometry.deleteAttribute("normal"),Object.defineProperty(S.material,"map",{get:function(){return this.uniforms.t2D.value}}),u.update(S)),S.material.uniforms.t2D.value=r,S.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,S.material.toneMapped=p.getTransfer(r.colorSpace)!==m,!0===r.matrixAutoUpdate&&r.updateMatrix(),S.material.uniforms.uvTransform.value.copy(r.matrix),x===r&&R===r.version&&A===e.toneMapping||(S.material.needsUpdate=!0,x=r,R=r.version,A=e.toneMapping),S.layers.enableAll(),t.unshift(S,S.geometry,S.material,0,0,null))},dispose:function(){void 0!==T&&(T.geometry.dispose(),T.material.dispose(),T=void 0),void 0!==S&&(S.geometry.dispose(),S.material.dispose(),S=void 0)}}}function On(e,t){const n=e.getParameter(e.MAX_VERTEX_ATTRIBS),r={},i=c(null);let a=i,o=!1;function s(t){return e.bindVertexArray(t)}function l(t){return e.deleteVertexArray(t)}function c(e){const t=[],r=[],i=[];for(let e=0;e=0){const n=i[t];let r=o[t];if(void 0===r&&("instanceMatrix"===t&&e.instanceMatrix&&(r=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(r=e.instanceColor)),void 0===n)return!0;if(n.attribute!==r)return!0;if(r&&n.data!==r.data)return!0;s++}}return a.attributesNum!==s||a.index!==r}(n,h,l,_),g&&function(e,t,n,r){const i={},o=t.attributes;let s=0;const l=n.getAttributes();for(const t in l){if(l[t].location>=0){let n=o[t];void 0===n&&("instanceMatrix"===t&&e.instanceMatrix&&(n=e.instanceMatrix),"instanceColor"===t&&e.instanceColor&&(n=e.instanceColor));const r={};r.attribute=n,n&&n.data&&(r.data=n.data),i[t]=r,s++}}a.attributes=i,a.attributesNum=s,a.index=r}(n,h,l,_),null!==_&&t.update(_,e.ELEMENT_ARRAY_BUFFER),(g||o)&&(o=!1,function(n,r,i,a){d();const o=a.attributes,s=i.getAttributes(),l=r.defaultAttributeValues;for(const r in s){const i=s[r];if(i.location>=0){let s=o[r];if(void 0===s&&("instanceMatrix"===r&&n.instanceMatrix&&(s=n.instanceMatrix),"instanceColor"===r&&n.instanceColor&&(s=n.instanceColor)),void 0!==s){const r=s.normalized,o=s.itemSize,l=t.get(s);if(void 0===l)continue;const c=l.buffer,d=l.type,p=l.bytesPerElement,h=d===e.INT||d===e.UNSIGNED_INT||s.gpuType===v;if(s.isInterleavedBufferAttribute){const t=s.data,l=t.stride,_=s.offset;if(t.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let o=void 0!==n.precision?n.precision:"highp";const s=a(o);s!==o&&(console.warn("THREE.WebGLRenderer:",o,"not supported, using",s,"instead."),o=s);const l=!0===n.logarithmicDepthBuffer,c=!0===n.reverseDepthBuffer&&t.has("EXT_clip_control"),d=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),u=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS);return{isWebGL2:!0,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===t.has("EXT_texture_filter_anisotropic")){const n=t.get("EXT_texture_filter_anisotropic");i=e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:a,textureFormatReadable:function(t){return t===M||r.convert(t)===e.getParameter(e.IMPLEMENTATION_COLOR_READ_FORMAT)},textureTypeReadable:function(n){const i=n===E&&(t.has("EXT_color_buffer_half_float")||t.has("EXT_color_buffer_float"));return!(n!==S&&r.convert(n)!==e.getParameter(e.IMPLEMENTATION_COLOR_READ_TYPE)&&n!==T&&!i)},precision:o,logarithmicDepthBuffer:l,reverseDepthBuffer:c,maxTextures:d,maxVertexTextures:u,maxTextureSize:e.getParameter(e.MAX_TEXTURE_SIZE),maxCubemapSize:e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),maxAttributes:e.getParameter(e.MAX_VERTEX_ATTRIBS),maxVertexUniforms:e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),maxVaryings:e.getParameter(e.MAX_VARYING_VECTORS),maxFragmentUniforms:e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),vertexTextures:u>0,maxSamples:e.getParameter(e.MAX_SAMPLES)}}function Hn(t){const n=this;let r=null,i=0,a=!1,o=!1;const s=new x,l=new e,c={value:null,needsUpdate:!1};function d(e,t,r,i){const a=null!==e?e.length:0;let o=null;if(0!==a){if(o=c.value,!0!==i||null===o){const n=r+4*a,i=t.matrixWorldInverse;l.getNormalMatrix(i),(null===o||o.length0);n.numPlanes=i,n.numIntersection=0}();else{const e=o?0:i,t=4*e;let n=m.clippingState||null;c.value=n,n=d(u,s,t,l);for(let e=0;e!==t;++e)n[e]=r[e];m.clippingState=n,this.numIntersection=f?this.numPlanes:0,this.numPlanes+=e}}}function Gn(e){let t=new WeakMap;function n(e,t){return t===R?e.mapping=C:t===A&&(e.mapping=L),e}function r(e){const n=e.target;n.removeEventListener("dispose",r);const i=t.get(n);void 0!==i&&(t.delete(n),i.dispose())}return{get:function(i){if(i&&i.isTexture){const a=i.mapping;if(a===R||a===A){if(t.has(i)){return n(t.get(i).texture,i.mapping)}{const a=i.image;if(a&&a.height>0){const o=new b(a.height);return o.fromEquirectangularTexture(e,i),t.set(i,o),i.addEventListener("dispose",r),n(o.texture,i.mapping)}return null}}}return i},dispose:function(){t=new WeakMap}}}const Vn=[.125,.215,.35,.446,.526,.582],zn=20,kn=new P,Wn=new n;let Xn=null,Yn=0,Kn=0,jn=!1;const qn=(1+Math.sqrt(5))/2,Zn=1/qn,$n=[new i(-qn,Zn,0),new i(qn,Zn,0),new i(-Zn,0,qn),new i(Zn,0,qn),new i(0,qn,-Zn),new i(0,qn,Zn),new i(-1,1,-1),new i(1,1,-1),new i(-1,1,1),new i(1,1,1)],Qn=new i;class Jn{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,n=.1,r=100,i={}){const{size:a=256,position:o=Qn}=i;Xn=this._renderer.getRenderTarget(),Yn=this._renderer.getActiveCubeFace(),Kn=this._renderer.getActiveMipmapLevel(),jn=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(a);const s=this._allocateTargets();return s.depthBuffer=!0,this._sceneToCubeUV(e,n,r,s,o),t>0&&this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){null===this._cubemapMaterial&&(this._cubemapMaterial=rr(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial&&(this._equirectMaterial=nr(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial&&this._cubemapMaterial.dispose(),null!==this._equirectMaterial&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial&&this._blurMaterial.dispose(),null!==this._pingPongRenderTarget&&this._pingPongRenderTarget.dispose();for(let e=0;ee-4?s=Vn[o-e+4-1]:0===o&&(s=0),r.push(s);const l=1/(a-2),c=-l,d=1+l,u=[c,c,d,c,d,d,c,c,d,d,c,d],f=6,p=6,m=3,h=2,_=1,g=new Float32Array(m*p*f),v=new Float32Array(h*p*f),E=new Float32Array(_*p*f);for(let e=0;e2?0:-1,r=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0];g.set(r,m*p*e),v.set(u,h*p*e);const i=[e,e,e,e,e,e];E.set(i,_*p*e)}const S=new N;S.setAttribute("position",new O(g,m)),S.setAttribute("uv",new O(v,h)),S.setAttribute("faceIndex",new O(E,_)),t.push(S),i>4&&i--}return{lodPlanes:t,sizeLods:n,sigmas:r}}(r)),this._blurMaterial=function(e,t,n){const r=new Float32Array(zn),a=new i(0,1,0),o=new l({name:"SphericalGaussianBlur",defines:{n:zn,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:r},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:a}},vertexShader:ir(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t",blending:y,depthTest:!1,depthWrite:!1});return o}(r,e,t)}return r}_compileMaterial(e){const t=new o(this._lodPlanes[0],e);this._renderer.compile(t,kn)}_sceneToCubeUV(e,t,n,r,i){const a=new U(90,1,t,n),l=[1,-1,1,1,1,1],d=[1,1,1,-1,-1,-1],u=this._renderer,f=u.autoClear,p=u.toneMapping;u.getClearColor(Wn),u.toneMapping=D,u.autoClear=!1;const m=new w({name:"PMREM.Background",side:c,depthWrite:!1,depthTest:!1}),h=new o(new s,m);let _=!1;const g=e.background;g?g.isColor&&(m.color.copy(g),e.background=null,_=!0):(m.color.copy(Wn),_=!0);for(let t=0;t<6;t++){const n=t%3;0===n?(a.up.set(0,l[t],0),a.position.set(i.x,i.y,i.z),a.lookAt(i.x+d[t],i.y,i.z)):1===n?(a.up.set(0,0,l[t]),a.position.set(i.x,i.y,i.z),a.lookAt(i.x,i.y+d[t],i.z)):(a.up.set(0,l[t],0),a.position.set(i.x,i.y,i.z),a.lookAt(i.x,i.y,i.z+d[t]));const o=this._cubeSize;tr(r,n*o,t>2?o:0,o,o),u.setRenderTarget(r),_&&u.render(h,a),u.render(e,a)}h.geometry.dispose(),h.material.dispose(),u.toneMapping=p,u.autoClear=f,e.background=g}_textureToCubeUV(e,t){const n=this._renderer,r=e.mapping===C||e.mapping===L;r?(null===this._cubemapMaterial&&(this._cubemapMaterial=rr()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===e.isRenderTargetTexture?-1:1):null===this._equirectMaterial&&(this._equirectMaterial=nr());const i=r?this._cubemapMaterial:this._equirectMaterial,a=new o(this._lodPlanes[0],i);i.uniforms.envMap.value=e;const s=this._cubeSize;tr(t,0,0,3*s,2*s),n.setRenderTarget(t),n.render(a,kn)}_applyPMREM(e){const t=this._renderer,n=t.autoClear;t.autoClear=!1;const r=this._lodPlanes.length;for(let t=1;tzn&&console.warn(`sigmaRadians, ${i}, is too large and will clip, as it requested ${h} samples when the maximum is set to 20`);const _=[];let g=0;for(let e=0;ev-4?r-v+4:0),4*(this._cubeSize-E),3*E,2*E),l.setRenderTarget(t),l.render(d,kn)}}function er(e,t,n){const r=new I(e,t,n);return r.texture.mapping=a,r.texture.name="PMREM.cubeUv",r.scissorTest=!0,r}function tr(e,t,n,r,i){e.viewport.set(t,n,r,i),e.scissor.set(t,n,r,i)}function nr(){return new l({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:ir(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t",blending:y,depthTest:!1,depthWrite:!1})}function rr(){return new l({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:ir(),fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t",blending:y,depthTest:!1,depthWrite:!1})}function ir(){return"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t"}function ar(e){let t=new WeakMap,n=null;function r(e){const n=e.target;n.removeEventListener("dispose",r);const i=t.get(n);void 0!==i&&(t.delete(n),i.dispose())}return{get:function(i){if(i&&i.isTexture){const a=i.mapping,o=a===R||a===A,s=a===C||a===L;if(o||s){let a=t.get(i);const l=void 0!==a?a.texture.pmremVersion:0;if(i.isRenderTargetTexture&&i.pmremVersion!==l)return null===n&&(n=new Jn(e)),a=o?n.fromEquirectangular(i,a):n.fromCubemap(i,a),a.texture.pmremVersion=i.pmremVersion,t.set(i,a),a.texture;if(void 0!==a)return a.texture;{const l=i.image;return o&&l&&l.height>0||s&&l&&function(e){let t=0;const n=6;for(let r=0;rn.maxTextureSize&&(M=Math.ceil(S/n.maxTextureSize),S=n.maxTextureSize);const x=new Float32Array(S*M*4*u),R=new W(x,S,M,u);R.type=T,R.needsUpdate=!0;const A=4*E;for(let C=0;C0)return e;const i=t*n;let a=gr[i];if(void 0===a&&(a=new Float32Array(i),gr[i]=a),0!==t){r.toArray(a,0);for(let r=1,i=0;r!==t;++r)i+=n,e[r].toArray(a,i)}return a}function xr(e,t){if(e.length!==t.length)return!1;for(let n=0,r=e.length;n":" "} ${i}: ${n[e]}`)}return r.join("\n")}(e.getShaderSource(t),r)}return i}function Ti(e,t){const n=function(e){p._getMatrix(Ei,p.workingColorSpace,e);const t=`mat3( ${Ei.elements.map((e=>e.toFixed(4)))} )`;switch(p.getTransfer(e)){case se:return[t,"LinearTransferOETF"];case m:return[t,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",e),[t,"LinearTransferOETF"]}}(t);return[`vec4 ${e}( vec4 value ) {`,`\treturn ${n[1]}( vec4( value.rgb * ${n[0]}, value.a ) );`,"}"].join("\n")}function Mi(e,t){let n;switch(t){case oe:n="Linear";break;case ae:n="Reinhard";break;case ie:n="Cineon";break;case re:n="ACESFilmic";break;case ne:n="AgX";break;case te:n="Neutral";break;case ee:n="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),n="Linear"}return"vec3 "+e+"( vec3 color ) { return "+n+"ToneMapping( color ); }"}const xi=new i;function Ri(){p.getLuminanceCoefficients(xi);return["float luminance( const in vec3 rgb ) {",`\tconst vec3 weights = vec3( ${xi.x.toFixed(4)}, ${xi.y.toFixed(4)}, ${xi.z.toFixed(4)} );`,"\treturn dot( weights, rgb );","}"].join("\n")}function Ai(e){return""!==e}function bi(e,t){const n=t.numSpotLightShadows+t.numSpotLightMaps-t.numSpotLightShadowsWithMaps;return e.replace(/NUM_DIR_LIGHTS/g,t.numDirLights).replace(/NUM_SPOT_LIGHTS/g,t.numSpotLights).replace(/NUM_SPOT_LIGHT_MAPS/g,t.numSpotLightMaps).replace(/NUM_SPOT_LIGHT_COORDS/g,n).replace(/NUM_RECT_AREA_LIGHTS/g,t.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,t.numPointLights).replace(/NUM_HEMI_LIGHTS/g,t.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,t.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g,t.numSpotLightShadowsWithMaps).replace(/NUM_SPOT_LIGHT_SHADOWS/g,t.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,t.numPointLightShadows)}function Ci(e,t){return e.replace(/NUM_CLIPPING_PLANES/g,t.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,t.numClippingPlanes-t.numClipIntersection)}const Li=/^[ \t]*#include +<([\w\d./]+)>/gm;function Pi(e){return e.replace(Li,Di)}const Ui=new Map;function Di(e,t){let n=Pn[t];if(void 0===n){const e=Ui.get(t);if(void 0===e)throw new Error("Can not resolve #include <"+t+">");n=Pn[e],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,e)}return Pi(n)}const wi=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function yi(e){return e.replace(wi,Ii)}function Ii(e,t,n,r){let i="";for(let e=parseInt(t);e0&&(g+="\n"),v=["#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,h].filter(Ai).join("\n"),v.length>0&&(v+="\n")):(g=[Ni(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,h,n.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",n.batching?"#define USE_BATCHING":"",n.batchingColor?"#define USE_BATCHING_COLOR":"",n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.instancingMorph?"#define USE_INSTANCING_MORPH":"",n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+u:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.displacementMap?"#define USE_DISPLACEMENTMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.mapUv?"#define MAP_UV "+n.mapUv:"",n.alphaMapUv?"#define ALPHAMAP_UV "+n.alphaMapUv:"",n.lightMapUv?"#define LIGHTMAP_UV "+n.lightMapUv:"",n.aoMapUv?"#define AOMAP_UV "+n.aoMapUv:"",n.emissiveMapUv?"#define EMISSIVEMAP_UV "+n.emissiveMapUv:"",n.bumpMapUv?"#define BUMPMAP_UV "+n.bumpMapUv:"",n.normalMapUv?"#define NORMALMAP_UV "+n.normalMapUv:"",n.displacementMapUv?"#define DISPLACEMENTMAP_UV "+n.displacementMapUv:"",n.metalnessMapUv?"#define METALNESSMAP_UV "+n.metalnessMapUv:"",n.roughnessMapUv?"#define ROUGHNESSMAP_UV "+n.roughnessMapUv:"",n.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+n.anisotropyMapUv:"",n.clearcoatMapUv?"#define CLEARCOATMAP_UV "+n.clearcoatMapUv:"",n.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+n.clearcoatNormalMapUv:"",n.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+n.clearcoatRoughnessMapUv:"",n.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+n.iridescenceMapUv:"",n.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+n.iridescenceThicknessMapUv:"",n.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+n.sheenColorMapUv:"",n.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+n.sheenRoughnessMapUv:"",n.specularMapUv?"#define SPECULARMAP_UV "+n.specularMapUv:"",n.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+n.specularColorMapUv:"",n.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+n.specularIntensityMapUv:"",n.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+n.transmissionMapUv:"",n.thicknessMapUv?"#define THICKNESSMAP_UV "+n.thicknessMapUv:"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.morphColors?"#define USE_MORPHCOLORS":"",n.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+n.morphTextureStride:"",n.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+n.morphTargetsCount:"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+c:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.reverseDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH","\tuniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1","\tattribute vec2 uv1;","#endif","#ifdef USE_UV2","\tattribute vec2 uv2;","#endif","#ifdef USE_UV3","\tattribute vec2 uv3;","#endif","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )","\tattribute vec4 color;","#elif defined( USE_COLOR )","\tattribute vec3 color;","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Ai).join("\n"),v=[Ni(n),"#define SHADER_TYPE "+n.shaderType,"#define SHADER_NAME "+n.shaderName,h,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+d:"",n.envMap?"#define "+u:"",n.envMap?"#define "+f:"",p?"#define CUBEUV_TEXEL_WIDTH "+p.texelWidth:"",p?"#define CUBEUV_TEXEL_HEIGHT "+p.texelHeight:"",p?"#define CUBEUV_MAX_MIP "+p.maxMip+".0":"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",n.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.anisotropy?"#define USE_ANISOTROPY":"",n.anisotropyMap?"#define USE_ANISOTROPYMAP":"",n.clearcoat?"#define USE_CLEARCOAT":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.dispersion?"#define USE_DISPERSION":"",n.iridescence?"#define USE_IRIDESCENCE":"",n.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",n.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",n.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.alphaTest?"#define USE_ALPHATEST":"",n.alphaHash?"#define USE_ALPHAHASH":"",n.sheen?"#define USE_SHEEN":"",n.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",n.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",n.transmission?"#define USE_TRANSMISSION":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.thicknessMap?"#define USE_THICKNESSMAP":"",n.vertexTangents&&!1===n.flatShading?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor||n.batchingColor?"#define USE_COLOR":"",n.vertexAlphas?"#define USE_COLOR_ALPHA":"",n.vertexUv1s?"#define USE_UV1":"",n.vertexUv2s?"#define USE_UV2":"",n.vertexUv3s?"#define USE_UV3":"",n.pointsUvs?"#define USE_POINTS_UV":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+c:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.numLightProbes>0?"#define USE_LIGHT_PROBES":"",n.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",n.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.reverseDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",n.toneMapping!==D?"#define TONE_MAPPING":"",n.toneMapping!==D?Pn.tonemapping_pars_fragment:"",n.toneMapping!==D?Mi("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.opaque?"#define OPAQUE":"",Pn.colorspace_pars_fragment,Ti("linearToOutputTexel",n.outputColorSpace),Ri(),n.useDepthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(Ai).join("\n")),s=Pi(s),s=bi(s,n),s=Ci(s,n),l=Pi(l),l=bi(l,n),l=Ci(l,n),s=yi(s),l=yi(l),!0!==n.isRawShaderMaterial&&(E="#version 300 es\n",g=[m,"#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+g,v=["#define varying in",n.glslVersion===Z?"":"layout(location = 0) out highp vec4 pc_fragColor;",n.glslVersion===Z?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+v);const S=E+g+s,T=E+v+l,M=gi(i,i.VERTEX_SHADER,S),x=gi(i,i.FRAGMENT_SHADER,T);function R(t){if(e.debug.checkShaderErrors){const n=i.getProgramInfoLog(_).trim(),r=i.getShaderInfoLog(M).trim(),a=i.getShaderInfoLog(x).trim();let o=!0,s=!0;if(!1===i.getProgramParameter(_,i.LINK_STATUS))if(o=!1,"function"==typeof e.debug.onShaderError)e.debug.onShaderError(i,_,M,x);else{const e=Si(i,M,"vertex"),r=Si(i,x,"fragment");console.error("THREE.WebGLProgram: Shader Error "+i.getError()+" - VALIDATE_STATUS "+i.getProgramParameter(_,i.VALIDATE_STATUS)+"\n\nMaterial Name: "+t.name+"\nMaterial Type: "+t.type+"\n\nProgram Info Log: "+n+"\n"+e+"\n"+r)}else""!==n?console.warn("THREE.WebGLProgram: Program Info Log:",n):""!==r&&""!==a||(s=!1);s&&(t.diagnostics={runnable:o,programLog:n,vertexShader:{log:r,prefix:g},fragmentShader:{log:a,prefix:v}})}i.deleteShader(M),i.deleteShader(x),A=new _i(i,_),b=function(e,t){const n={},r=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let i=0;i0,J=o.clearcoat>0,ee=o.dispersion>0,te=o.iridescence>0,ne=o.sheen>0,re=o.transmission>0,ie=Q&&!!o.anisotropyMap,ae=J&&!!o.clearcoatMap,oe=J&&!!o.clearcoatNormalMap,se=J&&!!o.clearcoatRoughnessMap,le=te&&!!o.iridescenceMap,ce=te&&!!o.iridescenceThicknessMap,de=ne&&!!o.sheenColorMap,ue=ne&&!!o.sheenRoughnessMap,_e=!!o.specularMap,ge=!!o.specularColorMap,ve=!!o.specularIntensityMap,Ee=re&&!!o.transmissionMap,Se=re&&!!o.thicknessMap,Te=!!o.gradientMap,Me=!!o.alphaMap,xe=o.alphaTest>0,Re=!!o.alphaHash,Ae=!!o.extensions;let be=D;o.toneMapped&&(null!==O&&!0!==O.isXRRenderTarget||(be=e.toneMapping));const Ce={shaderID:C,shaderType:o.type,shaderName:o.name,vertexShader:U,fragmentShader:w,defines:o.defines,customVertexShaderID:y,customFragmentShaderID:I,isRawShaderMaterial:!0===o.isRawShaderMaterial,glslVersion:o.glslVersion,precision:g,batching:G,batchingColor:G&&null!==T._colorsTexture,instancing:H,instancingColor:H&&null!==T.instanceColor,instancingMorph:H&&null!==T.morphTexture,supportsVertexTextures:_,outputColorSpace:null===O?e.outputColorSpace:!0===O.isXRRenderTarget?O.texture.colorSpace:F,alphaToCoverage:!!o.alphaToCoverage,map:V,matcap:z,envMap:k,envMapMode:k&&A.mapping,envMapCubeUVHeight:b,aoMap:W,lightMap:X,bumpMap:Y,normalMap:K,displacementMap:_&&j,emissiveMap:q,normalMapObjectSpace:K&&o.normalMapType===he,normalMapTangentSpace:K&&o.normalMapType===me,metalnessMap:Z,roughnessMap:$,anisotropy:Q,anisotropyMap:ie,clearcoat:J,clearcoatMap:ae,clearcoatNormalMap:oe,clearcoatRoughnessMap:se,dispersion:ee,iridescence:te,iridescenceMap:le,iridescenceThicknessMap:ce,sheen:ne,sheenColorMap:de,sheenRoughnessMap:ue,specularMap:_e,specularColorMap:ge,specularIntensityMap:ve,transmission:re,transmissionMap:Ee,thicknessMap:Se,gradientMap:Te,opaque:!1===o.transparent&&o.blending===pe&&!1===o.alphaToCoverage,alphaMap:Me,alphaTest:xe,alphaHash:Re,combine:o.combine,mapUv:V&&E(o.map.channel),aoMapUv:W&&E(o.aoMap.channel),lightMapUv:X&&E(o.lightMap.channel),bumpMapUv:Y&&E(o.bumpMap.channel),normalMapUv:K&&E(o.normalMap.channel),displacementMapUv:j&&E(o.displacementMap.channel),emissiveMapUv:q&&E(o.emissiveMap.channel),metalnessMapUv:Z&&E(o.metalnessMap.channel),roughnessMapUv:$&&E(o.roughnessMap.channel),anisotropyMapUv:ie&&E(o.anisotropyMap.channel),clearcoatMapUv:ae&&E(o.clearcoatMap.channel),clearcoatNormalMapUv:oe&&E(o.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:se&&E(o.clearcoatRoughnessMap.channel),iridescenceMapUv:le&&E(o.iridescenceMap.channel),iridescenceThicknessMapUv:ce&&E(o.iridescenceThicknessMap.channel),sheenColorMapUv:de&&E(o.sheenColorMap.channel),sheenRoughnessMapUv:ue&&E(o.sheenRoughnessMap.channel),specularMapUv:_e&&E(o.specularMap.channel),specularColorMapUv:ge&&E(o.specularColorMap.channel),specularIntensityMapUv:ve&&E(o.specularIntensityMap.channel),transmissionMapUv:Ee&&E(o.transmissionMap.channel),thicknessMapUv:Se&&E(o.thicknessMap.channel),alphaMapUv:Me&&E(o.alphaMap.channel),vertexTangents:!!x.attributes.tangent&&(K||Q),vertexColors:o.vertexColors,vertexAlphas:!0===o.vertexColors&&!!x.attributes.color&&4===x.attributes.color.itemSize,pointsUvs:!0===T.isPoints&&!!x.attributes.uv&&(V||Me),fog:!!M,useFog:!0===o.fog,fogExp2:!!M&&M.isFogExp2,flatShading:!0===o.flatShading,sizeAttenuation:!0===o.sizeAttenuation,logarithmicDepthBuffer:h,reverseDepthBuffer:B,skinning:!0===T.isSkinnedMesh,morphTargets:void 0!==x.morphAttributes.position,morphNormals:void 0!==x.morphAttributes.normal,morphColors:void 0!==x.morphAttributes.color,morphTargetsCount:P,morphTextureStride:N,numDirLights:l.directional.length,numPointLights:l.point.length,numSpotLights:l.spot.length,numSpotLightMaps:l.spotLightMap.length,numRectAreaLights:l.rectArea.length,numHemiLights:l.hemi.length,numDirLightShadows:l.directionalShadowMap.length,numPointLightShadows:l.pointShadowMap.length,numSpotLightShadows:l.spotShadowMap.length,numSpotLightShadowsWithMaps:l.numSpotLightShadowsWithMaps,numLightProbes:l.numLightProbes,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:o.dithering,shadowMapEnabled:e.shadowMap.enabled&&f.length>0,shadowMapType:e.shadowMap.type,toneMapping:be,decodeVideoTexture:V&&!0===o.map.isVideoTexture&&p.getTransfer(o.map.colorSpace)===m,decodeVideoTextureEmissive:q&&!0===o.emissiveMap.isVideoTexture&&p.getTransfer(o.emissiveMap.colorSpace)===m,premultipliedAlpha:o.premultipliedAlpha,doubleSided:o.side===fe,flipSided:o.side===c,useDepthPacking:o.depthPacking>=0,depthPacking:o.depthPacking||0,index0AttributeName:o.index0AttributeName,extensionClipCullDistance:Ae&&!0===o.extensions.clipCullDistance&&r.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(Ae&&!0===o.extensions.multiDraw||G)&&r.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:r.has("KHR_parallel_shader_compile"),customProgramCacheKey:o.customProgramCacheKey()};return Ce.vertexUv1s=u.has(1),Ce.vertexUv2s=u.has(2),Ce.vertexUv3s=u.has(3),u.clear(),Ce},getProgramCacheKey:function(t){const n=[];if(t.shaderID?n.push(t.shaderID):(n.push(t.customVertexShaderID),n.push(t.customFragmentShaderID)),void 0!==t.defines)for(const e in t.defines)n.push(e),n.push(t.defines[e]);return!1===t.isRawShaderMaterial&&(!function(e,t){e.push(t.precision),e.push(t.outputColorSpace),e.push(t.envMapMode),e.push(t.envMapCubeUVHeight),e.push(t.mapUv),e.push(t.alphaMapUv),e.push(t.lightMapUv),e.push(t.aoMapUv),e.push(t.bumpMapUv),e.push(t.normalMapUv),e.push(t.displacementMapUv),e.push(t.emissiveMapUv),e.push(t.metalnessMapUv),e.push(t.roughnessMapUv),e.push(t.anisotropyMapUv),e.push(t.clearcoatMapUv),e.push(t.clearcoatNormalMapUv),e.push(t.clearcoatRoughnessMapUv),e.push(t.iridescenceMapUv),e.push(t.iridescenceThicknessMapUv),e.push(t.sheenColorMapUv),e.push(t.sheenRoughnessMapUv),e.push(t.specularMapUv),e.push(t.specularColorMapUv),e.push(t.specularIntensityMapUv),e.push(t.transmissionMapUv),e.push(t.thicknessMapUv),e.push(t.combine),e.push(t.fogExp2),e.push(t.sizeAttenuation),e.push(t.morphTargetsCount),e.push(t.morphAttributeCount),e.push(t.numDirLights),e.push(t.numPointLights),e.push(t.numSpotLights),e.push(t.numSpotLightMaps),e.push(t.numHemiLights),e.push(t.numRectAreaLights),e.push(t.numDirLightShadows),e.push(t.numPointLightShadows),e.push(t.numSpotLightShadows),e.push(t.numSpotLightShadowsWithMaps),e.push(t.numLightProbes),e.push(t.shadowMapType),e.push(t.toneMapping),e.push(t.numClippingPlanes),e.push(t.numClipIntersection),e.push(t.depthPacking)}(n,t),function(e,t){l.disableAll(),t.supportsVertexTextures&&l.enable(0);t.instancing&&l.enable(1);t.instancingColor&&l.enable(2);t.instancingMorph&&l.enable(3);t.matcap&&l.enable(4);t.envMap&&l.enable(5);t.normalMapObjectSpace&&l.enable(6);t.normalMapTangentSpace&&l.enable(7);t.clearcoat&&l.enable(8);t.iridescence&&l.enable(9);t.alphaTest&&l.enable(10);t.vertexColors&&l.enable(11);t.vertexAlphas&&l.enable(12);t.vertexUv1s&&l.enable(13);t.vertexUv2s&&l.enable(14);t.vertexUv3s&&l.enable(15);t.vertexTangents&&l.enable(16);t.anisotropy&&l.enable(17);t.alphaHash&&l.enable(18);t.batching&&l.enable(19);t.dispersion&&l.enable(20);t.batchingColor&&l.enable(21);e.push(l.mask),l.disableAll(),t.fog&&l.enable(0);t.useFog&&l.enable(1);t.flatShading&&l.enable(2);t.logarithmicDepthBuffer&&l.enable(3);t.reverseDepthBuffer&&l.enable(4);t.skinning&&l.enable(5);t.morphTargets&&l.enable(6);t.morphNormals&&l.enable(7);t.morphColors&&l.enable(8);t.premultipliedAlpha&&l.enable(9);t.shadowMapEnabled&&l.enable(10);t.doubleSided&&l.enable(11);t.flipSided&&l.enable(12);t.useDepthPacking&&l.enable(13);t.dithering&&l.enable(14);t.transmission&&l.enable(15);t.sheen&&l.enable(16);t.opaque&&l.enable(17);t.pointsUvs&&l.enable(18);t.decodeVideoTexture&&l.enable(19);t.decodeVideoTextureEmissive&&l.enable(20);t.alphaToCoverage&&l.enable(21);e.push(l.mask)}(n,t),n.push(e.outputColorSpace)),n.push(t.customProgramCacheKey),n.join()},getUniforms:function(e){const t=v[e.type];let n;if(t){const e=Dn[t];n=ue.clone(e.uniforms)}else n=e.uniforms;return n},acquireProgram:function(t,n){let r;for(let e=0,t=f.length;e0?r.push(d):!0===o.transparent?i.push(d):n.push(d)},unshift:function(e,t,o,s,l,c){const d=a(e,t,o,s,l,c);o.transmission>0?r.unshift(d):!0===o.transparent?i.unshift(d):n.unshift(d)},finish:function(){for(let n=t,r=e.length;n1&&n.sort(e||zi),r.length>1&&r.sort(t||ki),i.length>1&&i.sort(t||ki)}}}function Xi(){let e=new WeakMap;return{get:function(t,n){const r=e.get(t);let i;return void 0===r?(i=new Wi,e.set(t,[i])):n>=r.length?(i=new Wi,r.push(i)):i=r[n],i},dispose:function(){e=new WeakMap}}}function Yi(){const e={};return{get:function(t){if(void 0!==e[t.id])return e[t.id];let r;switch(t.type){case"DirectionalLight":r={direction:new i,color:new n};break;case"SpotLight":r={position:new i,direction:new i,color:new n,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":r={position:new i,color:new n,distance:0,decay:0};break;case"HemisphereLight":r={direction:new i,skyColor:new n,groundColor:new n};break;case"RectAreaLight":r={color:new n,position:new i,halfWidth:new i,halfHeight:new i}}return e[t.id]=r,r}}}let Ki=0;function ji(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+(t.map?1:0)-(e.map?1:0)}function qi(e){const n=new Yi,r=function(){const e={};return{get:function(n){if(void 0!==e[n.id])return e[n.id];let r;switch(n.type){case"DirectionalLight":case"SpotLight":r={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new t};break;case"PointLight":r={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new t,shadowCameraNear:1,shadowCameraFar:1e3}}return e[n.id]=r,r}}}(),a={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let e=0;e<9;e++)a.probe.push(new i);const o=new i,s=new f,l=new f;return{setup:function(t){let i=0,o=0,s=0;for(let e=0;e<9;e++)a.probe[e].set(0,0,0);let l=0,c=0,d=0,u=0,f=0,p=0,m=0,h=0,_=0,g=0,v=0;t.sort(ji);for(let e=0,E=t.length;e0&&(!0===e.has("OES_texture_float_linear")?(a.rectAreaLTC1=Un.LTC_FLOAT_1,a.rectAreaLTC2=Un.LTC_FLOAT_2):(a.rectAreaLTC1=Un.LTC_HALF_1,a.rectAreaLTC2=Un.LTC_HALF_2)),a.ambient[0]=i,a.ambient[1]=o,a.ambient[2]=s;const E=a.hash;E.directionalLength===l&&E.pointLength===c&&E.spotLength===d&&E.rectAreaLength===u&&E.hemiLength===f&&E.numDirectionalShadows===p&&E.numPointShadows===m&&E.numSpotShadows===h&&E.numSpotMaps===_&&E.numLightProbes===v||(a.directional.length=l,a.spot.length=d,a.rectArea.length=u,a.point.length=c,a.hemi.length=f,a.directionalShadow.length=p,a.directionalShadowMap.length=p,a.pointShadow.length=m,a.pointShadowMap.length=m,a.spotShadow.length=h,a.spotShadowMap.length=h,a.directionalShadowMatrix.length=p,a.pointShadowMatrix.length=m,a.spotLightMatrix.length=h+_-g,a.spotLightMap.length=_,a.numSpotLightShadowsWithMaps=g,a.numLightProbes=v,E.directionalLength=l,E.pointLength=c,E.spotLength=d,E.rectAreaLength=u,E.hemiLength=f,E.numDirectionalShadows=p,E.numPointShadows=m,E.numSpotShadows=h,E.numSpotMaps=_,E.numLightProbes=v,a.version=Ki++)},setupView:function(e,t){let n=0,r=0,i=0,c=0,d=0;const u=t.matrixWorldInverse;for(let t=0,f=e.length;t=i.length?(a=new Zi(e),i.push(a)):a=i[r],a},dispose:function(){t=new WeakMap}}}function Qi(e,n,r){let i=new ge;const a=new t,s=new t,d=new k,u=new ve({depthPacking:Ee}),f=new Se,p={},m=r.maxTextureSize,h={[_]:c,[c]:_,[fe]:fe},g=new l({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new t},radius:{value:4}},vertexShader:"void main() {\n\tgl_Position = vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}),v=g.clone();v.defines.HORIZONTAL_PASS=1;const E=new N;E.setAttribute("position",new O(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const S=new o(E,g),T=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=$;let M=this.type;function x(t,r){const i=n.update(S);g.defines.VSM_SAMPLES!==t.blurSamples&&(g.defines.VSM_SAMPLES=t.blurSamples,v.defines.VSM_SAMPLES=t.blurSamples,g.needsUpdate=!0,v.needsUpdate=!0),null===t.mapPass&&(t.mapPass=new I(a.x,a.y)),g.uniforms.shadow_pass.value=t.map.texture,g.uniforms.resolution.value=t.mapSize,g.uniforms.radius.value=t.radius,e.setRenderTarget(t.mapPass),e.clear(),e.renderBufferDirect(r,null,i,g,S,null),v.uniforms.shadow_pass.value=t.mapPass.texture,v.uniforms.resolution.value=t.mapSize,v.uniforms.radius.value=t.radius,e.setRenderTarget(t.map),e.clear(),e.renderBufferDirect(r,null,i,v,S,null)}function R(t,n,r,i){let a=null;const o=!0===r.isPointLight?t.customDistanceMaterial:t.customDepthMaterial;if(void 0!==o)a=o;else if(a=!0===r.isPointLight?f:u,e.localClippingEnabled&&!0===n.clipShadows&&Array.isArray(n.clippingPlanes)&&0!==n.clippingPlanes.length||n.displacementMap&&0!==n.displacementScale||n.alphaMap&&n.alphaTest>0||n.map&&n.alphaTest>0||!0===n.alphaToCoverage){const e=a.uuid,t=n.uuid;let r=p[e];void 0===r&&(r={},p[e]=r);let i=r[t];void 0===i&&(i=a.clone(),r[t]=i,n.addEventListener("dispose",b)),a=i}if(a.visible=n.visible,a.wireframe=n.wireframe,a.side=i===J?null!==n.shadowSide?n.shadowSide:n.side:null!==n.shadowSide?n.shadowSide:h[n.side],a.alphaMap=n.alphaMap,a.alphaTest=!0===n.alphaToCoverage?.5:n.alphaTest,a.map=n.map,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.clipIntersection=n.clipIntersection,a.displacementMap=n.displacementMap,a.displacementScale=n.displacementScale,a.displacementBias=n.displacementBias,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,!0===r.isPointLight&&!0===a.isMeshDistanceMaterial){e.properties.get(a).light=r}return a}function A(t,r,a,o,s){if(!1===t.visible)return;if(t.layers.test(r.layers)&&(t.isMesh||t.isLine||t.isPoints)&&(t.castShadow||t.receiveShadow&&s===J)&&(!t.frustumCulled||i.intersectsObject(t))){t.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,t.matrixWorld);const i=n.update(t),l=t.material;if(Array.isArray(l)){const n=i.groups;for(let c=0,d=n.length;cm||a.y>m)&&(a.x>m&&(s.x=Math.floor(m/h.x),a.x=s.x*h.x,c.mapSize.x=s.x),a.y>m&&(s.y=Math.floor(m/h.y),a.y=s.y*h.y,c.mapSize.y=s.y)),null===c.map||!0===f||!0===p){const e=this.type!==J?{minFilter:Te,magFilter:Te}:{};null!==c.map&&c.map.dispose(),c.map=new I(a.x,a.y,e),c.map.texture.name=l.name+".shadowMap",c.camera.updateProjectionMatrix()}e.setRenderTarget(c.map),e.clear();const _=c.getViewportCount();for(let e=0;e<_;e++){const t=c.getViewport(e);d.set(s.x*t.x,s.y*t.y,s.x*t.z,s.y*t.w),u.viewport(d),c.updateMatrices(l,e),i=c.getFrustum(),A(n,r,c.camera,l,this.type)}!0!==c.isPointLightShadow&&this.type===J&&x(c,r),c.needsUpdate=!1}M=this.type,T.needsUpdate=!1,e.setRenderTarget(o,l,c)}}const Ji={[Ke]:Ye,[Xe]:ze,[We]:Ve,[Me]:ke,[Ye]:Ke,[ze]:Xe,[Ve]:We,[ke]:Me};function ea(e,t){const r=new function(){let t=!1;const n=new k;let r=null;const i=new k(0,0,0,0);return{setMask:function(n){r===n||t||(e.colorMask(n,n,n,n),r=n)},setLocked:function(e){t=e},setClear:function(t,r,a,o,s){!0===s&&(t*=o,r*=o,a*=o),n.set(t,r,a,o),!1===i.equals(n)&&(e.clearColor(t,r,a,o),i.copy(n))},reset:function(){t=!1,r=null,i.set(-1,0,0,0)}}},i=new function(){let n=!1,r=!1,i=null,a=null,o=null;return{setReversed:function(e){if(r!==e){const n=t.get("EXT_clip_control");e?n.clipControlEXT(n.LOWER_LEFT_EXT,n.ZERO_TO_ONE_EXT):n.clipControlEXT(n.LOWER_LEFT_EXT,n.NEGATIVE_ONE_TO_ONE_EXT),r=e;const i=o;o=null,this.setClear(i)}},getReversed:function(){return r},setTest:function(t){t?W(e.DEPTH_TEST):X(e.DEPTH_TEST)},setMask:function(t){i===t||n||(e.depthMask(t),i=t)},setFunc:function(t){if(r&&(t=Ji[t]),a!==t){switch(t){case Ke:e.depthFunc(e.NEVER);break;case Ye:e.depthFunc(e.ALWAYS);break;case Xe:e.depthFunc(e.LESS);break;case Me:e.depthFunc(e.LEQUAL);break;case We:e.depthFunc(e.EQUAL);break;case ke:e.depthFunc(e.GEQUAL);break;case ze:e.depthFunc(e.GREATER);break;case Ve:e.depthFunc(e.NOTEQUAL);break;default:e.depthFunc(e.LEQUAL)}a=t}},setLocked:function(e){n=e},setClear:function(t){o!==t&&(r&&(t=1-t),e.clearDepth(t),o=t)},reset:function(){n=!1,i=null,a=null,o=null,r=!1}}},a=new function(){let t=!1,n=null,r=null,i=null,a=null,o=null,s=null,l=null,c=null;return{setTest:function(n){t||(n?W(e.STENCIL_TEST):X(e.STENCIL_TEST))},setMask:function(r){n===r||t||(e.stencilMask(r),n=r)},setFunc:function(t,n,o){r===t&&i===n&&a===o||(e.stencilFunc(t,n,o),r=t,i=n,a=o)},setOp:function(t,n,r){o===t&&s===n&&l===r||(e.stencilOp(t,n,r),o=t,s=n,l=r)},setLocked:function(e){t=e},setClear:function(t){c!==t&&(e.clearStencil(t),c=t)},reset:function(){t=!1,n=null,r=null,i=null,a=null,o=null,s=null,l=null,c=null}}},o=new WeakMap,s=new WeakMap;let l={},d={},u=new WeakMap,f=[],p=null,m=!1,h=null,_=null,g=null,v=null,E=null,S=null,T=null,M=new n(0,0,0),x=0,R=!1,A=null,b=null,C=null,L=null,P=null;const U=e.getParameter(e.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let D=!1,w=0;const I=e.getParameter(e.VERSION);-1!==I.indexOf("WebGL")?(w=parseFloat(/^WebGL (\d)/.exec(I)[1]),D=w>=1):-1!==I.indexOf("OpenGL ES")&&(w=parseFloat(/^OpenGL ES (\d)/.exec(I)[1]),D=w>=2);let N=null,O={};const F=e.getParameter(e.SCISSOR_BOX),B=e.getParameter(e.VIEWPORT),H=(new k).fromArray(F),G=(new k).fromArray(B);function V(t,n,r,i){const a=new Uint8Array(4),o=e.createTexture();e.bindTexture(t,o),e.texParameteri(t,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(t,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let o=0;on||i.height>n)&&(r=n/Math.max(i.width,i.height)),r<1){if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof VideoFrame&&e instanceof VideoFrame){const n=Math.floor(r*i.width),a=Math.floor(r*i.height);void 0===f&&(f=g(n,a));const o=t?g(n,a):f;o.width=n,o.height=a;return o.getContext("2d").drawImage(e,0,0,n,a),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+i.width+"x"+i.height+") to ("+n+"x"+a+")."),o}return"data"in e&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+i.width+"x"+i.height+")."),e}return e}function E(e){return e.generateMipmaps}function x(t){e.generateMipmap(t)}function R(t){return t.isWebGLCubeRenderTarget?e.TEXTURE_CUBE_MAP:t.isWebGL3DRenderTarget?e.TEXTURE_3D:t.isWebGLArrayRenderTarget||t.isCompressedArrayTexture?e.TEXTURE_2D_ARRAY:e.TEXTURE_2D}function A(t,r,i,a,o=!1){if(null!==t){if(void 0!==e[t])return e[t];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+t+"'")}let s=r;if(r===e.RED&&(i===e.FLOAT&&(s=e.R32F),i===e.HALF_FLOAT&&(s=e.R16F),i===e.UNSIGNED_BYTE&&(s=e.R8)),r===e.RED_INTEGER&&(i===e.UNSIGNED_BYTE&&(s=e.R8UI),i===e.UNSIGNED_SHORT&&(s=e.R16UI),i===e.UNSIGNED_INT&&(s=e.R32UI),i===e.BYTE&&(s=e.R8I),i===e.SHORT&&(s=e.R16I),i===e.INT&&(s=e.R32I)),r===e.RG&&(i===e.FLOAT&&(s=e.RG32F),i===e.HALF_FLOAT&&(s=e.RG16F),i===e.UNSIGNED_BYTE&&(s=e.RG8)),r===e.RG_INTEGER&&(i===e.UNSIGNED_BYTE&&(s=e.RG8UI),i===e.UNSIGNED_SHORT&&(s=e.RG16UI),i===e.UNSIGNED_INT&&(s=e.RG32UI),i===e.BYTE&&(s=e.RG8I),i===e.SHORT&&(s=e.RG16I),i===e.INT&&(s=e.RG32I)),r===e.RGB_INTEGER&&(i===e.UNSIGNED_BYTE&&(s=e.RGB8UI),i===e.UNSIGNED_SHORT&&(s=e.RGB16UI),i===e.UNSIGNED_INT&&(s=e.RGB32UI),i===e.BYTE&&(s=e.RGB8I),i===e.SHORT&&(s=e.RGB16I),i===e.INT&&(s=e.RGB32I)),r===e.RGBA_INTEGER&&(i===e.UNSIGNED_BYTE&&(s=e.RGBA8UI),i===e.UNSIGNED_SHORT&&(s=e.RGBA16UI),i===e.UNSIGNED_INT&&(s=e.RGBA32UI),i===e.BYTE&&(s=e.RGBA8I),i===e.SHORT&&(s=e.RGBA16I),i===e.INT&&(s=e.RGBA32I)),r===e.RGB&&i===e.UNSIGNED_INT_5_9_9_9_REV&&(s=e.RGB9_E5),r===e.RGBA){const t=o?se:p.getTransfer(a);i===e.FLOAT&&(s=e.RGBA32F),i===e.HALF_FLOAT&&(s=e.RGBA16F),i===e.UNSIGNED_BYTE&&(s=t===m?e.SRGB8_ALPHA8:e.RGBA8),i===e.UNSIGNED_SHORT_4_4_4_4&&(s=e.RGBA4),i===e.UNSIGNED_SHORT_5_5_5_1&&(s=e.RGB5_A1)}return s!==e.R16F&&s!==e.R32F&&s!==e.RG16F&&s!==e.RG32F&&s!==e.RGBA16F&&s!==e.RGBA32F||n.get("EXT_color_buffer_float"),s}function b(t,n){let r;return t?null===n||n===Tt||n===Mt?r=e.DEPTH24_STENCIL8:n===T?r=e.DEPTH32F_STENCIL8:n===xt&&(r=e.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):null===n||n===Tt||n===Mt?r=e.DEPTH_COMPONENT24:n===T?r=e.DEPTH_COMPONENT32F:n===xt&&(r=e.DEPTH_COMPONENT16),r}function C(e,t){return!0===E(e)||e.isFramebufferTexture&&e.minFilter!==Te&&e.minFilter!==B?Math.log2(Math.max(t.width,t.height))+1:void 0!==e.mipmaps&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function L(e){const t=e.target;t.removeEventListener("dispose",L),function(e){const t=i.get(e);if(void 0===t.__webglInit)return;const n=e.source,r=h.get(n);if(r){const i=r[t.__cacheKey];i.usedTimes--,0===i.usedTimes&&U(e),0===Object.keys(r).length&&h.delete(n)}i.remove(e)}(t),t.isVideoTexture&&u.delete(t)}function P(t){const n=t.target;n.removeEventListener("dispose",P),function(t){const n=i.get(t);t.depthTexture&&(t.depthTexture.dispose(),i.remove(t.depthTexture));if(t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++){if(Array.isArray(n.__webglFramebuffer[t]))for(let r=0;r0&&a.__version!==t.version){const e=t.image;if(null===e)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else{if(!1!==e.complete)return void V(a,t,n);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}r.bindTexture(e.TEXTURE_2D,a.__webglTexture,e.TEXTURE0+n)}const y={[at]:e.REPEAT,[it]:e.CLAMP_TO_EDGE,[rt]:e.MIRRORED_REPEAT},I={[Te]:e.NEAREST,[ct]:e.NEAREST_MIPMAP_NEAREST,[lt]:e.NEAREST_MIPMAP_LINEAR,[B]:e.LINEAR,[st]:e.LINEAR_MIPMAP_NEAREST,[ot]:e.LINEAR_MIPMAP_LINEAR},N={[_t]:e.NEVER,[ht]:e.ALWAYS,[mt]:e.LESS,[K]:e.LEQUAL,[pt]:e.EQUAL,[ft]:e.GEQUAL,[ut]:e.GREATER,[dt]:e.NOTEQUAL};function O(t,r){if(r.type!==T||!1!==n.has("OES_texture_float_linear")||r.magFilter!==B&&r.magFilter!==st&&r.magFilter!==lt&&r.magFilter!==ot&&r.minFilter!==B&&r.minFilter!==st&&r.minFilter!==lt&&r.minFilter!==ot||console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),e.texParameteri(t,e.TEXTURE_WRAP_S,y[r.wrapS]),e.texParameteri(t,e.TEXTURE_WRAP_T,y[r.wrapT]),t!==e.TEXTURE_3D&&t!==e.TEXTURE_2D_ARRAY||e.texParameteri(t,e.TEXTURE_WRAP_R,y[r.wrapR]),e.texParameteri(t,e.TEXTURE_MAG_FILTER,I[r.magFilter]),e.texParameteri(t,e.TEXTURE_MIN_FILTER,I[r.minFilter]),r.compareFunction&&(e.texParameteri(t,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(t,e.TEXTURE_COMPARE_FUNC,N[r.compareFunction])),!0===n.has("EXT_texture_filter_anisotropic")){if(r.magFilter===Te)return;if(r.minFilter!==lt&&r.minFilter!==ot)return;if(r.type===T&&!1===n.has("OES_texture_float_linear"))return;if(r.anisotropy>1||i.get(r).__currentAnisotropy){const o=n.get("EXT_texture_filter_anisotropic");e.texParameterf(t,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(r.anisotropy,a.getMaxAnisotropy())),i.get(r).__currentAnisotropy=r.anisotropy}}}function H(t,n){let r=!1;void 0===t.__webglInit&&(t.__webglInit=!0,n.addEventListener("dispose",L));const i=n.source;let a=h.get(i);void 0===a&&(a={},h.set(i,a));const o=function(e){const t=[];return t.push(e.wrapS),t.push(e.wrapT),t.push(e.wrapR||0),t.push(e.magFilter),t.push(e.minFilter),t.push(e.anisotropy),t.push(e.internalFormat),t.push(e.format),t.push(e.type),t.push(e.generateMipmaps),t.push(e.premultiplyAlpha),t.push(e.flipY),t.push(e.unpackAlignment),t.push(e.colorSpace),t.join()}(n);if(o!==t.__cacheKey){void 0===a[o]&&(a[o]={texture:e.createTexture(),usedTimes:0},s.memory.textures++,r=!0),a[o].usedTimes++;const i=a[t.__cacheKey];void 0!==i&&(a[t.__cacheKey].usedTimes--,0===i.usedTimes&&U(n)),t.__cacheKey=o,t.__webglTexture=a[o].texture}return r}function G(e,t,n){return Math.floor(Math.floor(e/n)/t)}function V(t,n,s){let l=e.TEXTURE_2D;(n.isDataArrayTexture||n.isCompressedArrayTexture)&&(l=e.TEXTURE_2D_ARRAY),n.isData3DTexture&&(l=e.TEXTURE_3D);const c=H(t,n),d=n.source;r.bindTexture(l,t.__webglTexture,e.TEXTURE0+s);const u=i.get(d);if(d.version!==u.__version||!0===c){r.activeTexture(e.TEXTURE0+s);const t=p.getPrimaries(p.workingColorSpace),i=n.colorSpace===gt?null:p.getPrimaries(n.colorSpace),f=n.colorSpace===gt||t===i?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,n.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,n.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,n.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,f);let m=v(n.image,!1,a.maxTextureSize);m=$(n,m);const h=o.convert(n.format,n.colorSpace),_=o.convert(n.type);let g,S=A(n.internalFormat,h,_,n.colorSpace,n.isVideoTexture);O(l,n);const T=n.mipmaps,R=!0!==n.isVideoTexture,L=void 0===u.__version||!0===c,P=d.dataReady,U=C(n,m);if(n.isDepthTexture)S=b(n.format===vt,n.type),L&&(R?r.texStorage2D(e.TEXTURE_2D,1,S,m.width,m.height):r.texImage2D(e.TEXTURE_2D,0,S,m.width,m.height,0,h,_,null));else if(n.isDataTexture)if(T.length>0){R&&L&&r.texStorage2D(e.TEXTURE_2D,U,S,T[0].width,T[0].height);for(let t=0,n=T.length;te.start-t.start));let s=0;for(let e=1;e0){const i=Et(g.width,g.height,n.format,n.type);for(const a of n.layerUpdates){const n=g.data.subarray(a*i/g.data.BYTES_PER_ELEMENT,(a+1)*i/g.data.BYTES_PER_ELEMENT);r.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,a,g.width,g.height,1,h,n)}n.clearLayerUpdates()}else r.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,g.width,g.height,m.depth,h,g.data)}else r.compressedTexImage3D(e.TEXTURE_2D_ARRAY,t,S,g.width,g.height,m.depth,0,g.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else R?P&&r.texSubImage3D(e.TEXTURE_2D_ARRAY,t,0,0,0,g.width,g.height,m.depth,h,_,g.data):r.texImage3D(e.TEXTURE_2D_ARRAY,t,S,g.width,g.height,m.depth,0,h,_,g.data)}else{R&&L&&r.texStorage2D(e.TEXTURE_2D,U,S,T[0].width,T[0].height);for(let t=0,i=T.length;t0){const t=Et(m.width,m.height,n.format,n.type);for(const i of n.layerUpdates){const n=m.data.subarray(i*t/m.data.BYTES_PER_ELEMENT,(i+1)*t/m.data.BYTES_PER_ELEMENT);r.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,i,m.width,m.height,1,h,_,n)}n.clearLayerUpdates()}else r.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,m.width,m.height,m.depth,h,_,m.data)}else r.texImage3D(e.TEXTURE_2D_ARRAY,0,S,m.width,m.height,m.depth,0,h,_,m.data);else if(n.isData3DTexture)R?(L&&r.texStorage3D(e.TEXTURE_3D,U,S,m.width,m.height,m.depth),P&&r.texSubImage3D(e.TEXTURE_3D,0,0,0,0,m.width,m.height,m.depth,h,_,m.data)):r.texImage3D(e.TEXTURE_3D,0,S,m.width,m.height,m.depth,0,h,_,m.data);else if(n.isFramebufferTexture){if(L)if(R)r.texStorage2D(e.TEXTURE_2D,U,S,m.width,m.height);else{let t=m.width,n=m.height;for(let i=0;i>=1,n>>=1}}else if(T.length>0){if(R&&L){const t=Q(T[0]);r.texStorage2D(e.TEXTURE_2D,U,S,t.width,t.height)}for(let t=0,n=T.length;t>d),i=Math.max(1,n.height>>d);c===e.TEXTURE_3D||c===e.TEXTURE_2D_ARRAY?r.texImage3D(c,d,p,t,i,n.depth,0,u,f,null):r.texImage2D(c,d,p,t,i,0,u,f,null)}r.bindFramebuffer(e.FRAMEBUFFER,t),Z(n)?l.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,s,c,h.__webglTexture,0,q(n)):(c===e.TEXTURE_2D||c>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&c<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&e.framebufferTexture2D(e.FRAMEBUFFER,s,c,h.__webglTexture,d),r.bindFramebuffer(e.FRAMEBUFFER,null)}function k(t,n,r){if(e.bindRenderbuffer(e.RENDERBUFFER,t),n.depthBuffer){const i=n.depthTexture,a=i&&i.isDepthTexture?i.type:null,o=b(n.stencilBuffer,a),s=n.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,c=q(n);Z(n)?l.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,c,o,n.width,n.height):r?e.renderbufferStorageMultisample(e.RENDERBUFFER,c,o,n.width,n.height):e.renderbufferStorage(e.RENDERBUFFER,o,n.width,n.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,s,e.RENDERBUFFER,t)}else{const t=n.textures;for(let i=0;i{delete n.__boundDepthTexture,delete n.__depthDisposeCallback,e.removeEventListener("dispose",t)};e.addEventListener("dispose",t),n.__depthDisposeCallback=t}n.__boundDepthTexture=e}if(t.depthTexture&&!n.__autoAllocateDepthBuffer){if(a)throw new Error("target.depthTexture not supported in Cube render targets");const e=t.texture.mipmaps;e&&e.length>0?W(n.__webglFramebuffer[0],t):W(n.__webglFramebuffer,t)}else if(a){n.__webglDepthbuffer=[];for(let i=0;i<6;i++)if(r.bindFramebuffer(e.FRAMEBUFFER,n.__webglFramebuffer[i]),void 0===n.__webglDepthbuffer[i])n.__webglDepthbuffer[i]=e.createRenderbuffer(),k(n.__webglDepthbuffer[i],t,!1);else{const r=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,a=n.__webglDepthbuffer[i];e.bindRenderbuffer(e.RENDERBUFFER,a),e.framebufferRenderbuffer(e.FRAMEBUFFER,r,e.RENDERBUFFER,a)}}else{const i=t.texture.mipmaps;if(i&&i.length>0?r.bindFramebuffer(e.FRAMEBUFFER,n.__webglFramebuffer[0]):r.bindFramebuffer(e.FRAMEBUFFER,n.__webglFramebuffer),void 0===n.__webglDepthbuffer)n.__webglDepthbuffer=e.createRenderbuffer(),k(n.__webglDepthbuffer,t,!1);else{const r=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,i=n.__webglDepthbuffer;e.bindRenderbuffer(e.RENDERBUFFER,i),e.framebufferRenderbuffer(e.FRAMEBUFFER,r,e.RENDERBUFFER,i)}}r.bindFramebuffer(e.FRAMEBUFFER,null)}const Y=[],j=[];function q(e){return Math.min(a.maxSamples,e.samples)}function Z(e){const t=i.get(e);return e.samples>0&&!0===n.has("WEBGL_multisampled_render_to_texture")&&!1!==t.__useRenderToTexture}function $(e,t){const n=e.colorSpace,r=e.format,i=e.type;return!0===e.isCompressedTexture||!0===e.isVideoTexture||n!==F&&n!==gt&&(p.getTransfer(n)===m?r===M&&i===S||console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",n)),t}function Q(e){return"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement?(d.width=e.naturalWidth||e.width,d.height=e.naturalHeight||e.height):"undefined"!=typeof VideoFrame&&e instanceof VideoFrame?(d.width=e.displayWidth,d.height=e.displayHeight):(d.width=e.width,d.height=e.height),d}this.allocateTextureUnit=function(){const e=D;return e>=a.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+a.maxTextures),D+=1,e},this.resetTextureUnits=function(){D=0},this.setTexture2D=w,this.setTexture2DArray=function(t,n){const a=i.get(t);t.version>0&&a.__version!==t.version?V(a,t,n):r.bindTexture(e.TEXTURE_2D_ARRAY,a.__webglTexture,e.TEXTURE0+n)},this.setTexture3D=function(t,n){const a=i.get(t);t.version>0&&a.__version!==t.version?V(a,t,n):r.bindTexture(e.TEXTURE_3D,a.__webglTexture,e.TEXTURE0+n)},this.setTextureCube=function(t,n){const s=i.get(t);t.version>0&&s.__version!==t.version?function(t,n,s){if(6!==n.image.length)return;const l=H(t,n),c=n.source;r.bindTexture(e.TEXTURE_CUBE_MAP,t.__webglTexture,e.TEXTURE0+s);const d=i.get(c);if(c.version!==d.__version||!0===l){r.activeTexture(e.TEXTURE0+s);const t=p.getPrimaries(p.workingColorSpace),i=n.colorSpace===gt?null:p.getPrimaries(n.colorSpace),u=n.colorSpace===gt||t===i?e.NONE:e.BROWSER_DEFAULT_WEBGL;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,n.flipY),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,n.premultiplyAlpha),e.pixelStorei(e.UNPACK_ALIGNMENT,n.unpackAlignment),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,u);const f=n.isCompressedTexture||n.image[0].isCompressedTexture,m=n.image[0]&&n.image[0].isDataTexture,h=[];for(let e=0;e<6;e++)h[e]=f||m?m?n.image[e].image:n.image[e]:v(n.image[e],!0,a.maxCubemapSize),h[e]=$(n,h[e]);const _=h[0],g=o.convert(n.format,n.colorSpace),S=o.convert(n.type),T=A(n.internalFormat,g,S,n.colorSpace),R=!0!==n.isVideoTexture,b=void 0===d.__version||!0===l,L=c.dataReady;let P,U=C(n,_);if(O(e.TEXTURE_CUBE_MAP,n),f){R&&b&&r.texStorage2D(e.TEXTURE_CUBE_MAP,U,T,_.width,_.height);for(let t=0;t<6;t++){P=h[t].mipmaps;for(let i=0;i0&&U++;const t=Q(h[0]);r.texStorage2D(e.TEXTURE_CUBE_MAP,U,T,t.width,t.height)}for(let t=0;t<6;t++)if(m){R?L&&r.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,0,0,h[t].width,h[t].height,g,S,h[t].data):r.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,T,h[t].width,h[t].height,0,g,S,h[t].data);for(let n=0;n1;if(u||(void 0===l.__webglTexture&&(l.__webglTexture=e.createTexture()),l.__version=n.version,s.memory.textures++),d){a.__webglFramebuffer=[];for(let t=0;t<6;t++)if(n.mipmaps&&n.mipmaps.length>0){a.__webglFramebuffer[t]=[];for(let r=0;r0){a.__webglFramebuffer=[];for(let t=0;t0&&!1===Z(t)){a.__webglMultisampledFramebuffer=e.createFramebuffer(),a.__webglColorRenderbuffer=[],r.bindFramebuffer(e.FRAMEBUFFER,a.__webglMultisampledFramebuffer);for(let n=0;n0)for(let i=0;i0)for(let r=0;r0)if(!1===Z(t)){const n=t.textures,a=t.width,o=t.height;let s=e.COLOR_BUFFER_BIT;const l=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,d=i.get(t),u=n.length>1;if(u)for(let t=0;t0?r.bindFramebuffer(e.DRAW_FRAMEBUFFER,d.__webglFramebuffer[0]):r.bindFramebuffer(e.DRAW_FRAMEBUFFER,d.__webglFramebuffer);for(let r=0;r= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}",uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new o(new h(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class ia extends _n{constructor(e,n){super();const r=this;let a=null,o=1,s=null,l="local-floor",c=1,d=null,u=null,f=null,p=null,m=null,h=null;const _=new ra,g=n.getContextAttributes();let v=null,E=null;const T=[],x=[],R=new t;let A=null;const b=new U;b.viewport=new k;const C=new U;C.viewport=new k;const L=[b,C],P=new gn;let D=null,w=null;function y(e){const t=x.indexOf(e.inputSource);if(-1===t)return;const n=T[t];void 0!==n&&(n.update(e.inputSource,e.frame,d||s),n.dispatchEvent({type:e.type,data:e.inputSource}))}function N(){a.removeEventListener("select",y),a.removeEventListener("selectstart",y),a.removeEventListener("selectend",y),a.removeEventListener("squeeze",y),a.removeEventListener("squeezestart",y),a.removeEventListener("squeezeend",y),a.removeEventListener("end",N),a.removeEventListener("inputsourceschange",O);for(let e=0;e=0&&(x[r]=null,T[r].disconnect(n))}for(let t=0;t=x.length){x.push(n),r=e;break}if(null===x[e]){x[e]=n,r=e;break}}if(-1===r)break}const i=T[r];i&&i.connect(n)}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=T[e];return void 0===t&&(t=new vn,T[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=T[e];return void 0===t&&(t=new vn,T[e]=t),t.getGripSpace()},this.getHand=function(e){let t=T[e];return void 0===t&&(t=new vn,T[e]=t),t.getHandSpace()},this.setFramebufferScaleFactor=function(e){o=e,!0===r.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")},this.setReferenceSpaceType=function(e){l=e,!0===r.isPresenting&&console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")},this.getReferenceSpace=function(){return d||s},this.setReferenceSpace=function(e){d=e},this.getBaseLayer=function(){return null!==p?p:m},this.getBinding=function(){return f},this.getFrame=function(){return h},this.getSession=function(){return a},this.setSession=async function(t){if(a=t,null!==a){v=e.getRenderTarget(),a.addEventListener("select",y),a.addEventListener("selectstart",y),a.addEventListener("selectend",y),a.addEventListener("squeeze",y),a.addEventListener("squeezestart",y),a.addEventListener("squeezeend",y),a.addEventListener("end",N),a.addEventListener("inputsourceschange",O),!0!==g.xrCompatible&&await n.makeXRCompatible(),A=e.getPixelRatio(),e.getSize(R);if("undefined"!=typeof XRWebGLBinding&&"createProjectionLayer"in XRWebGLBinding.prototype){let t=null,r=null,i=null;g.depth&&(i=g.stencil?n.DEPTH24_STENCIL8:n.DEPTH_COMPONENT24,t=g.stencil?vt:St,r=g.stencil?Mt:Tt);const s={colorFormat:n.RGBA8,depthFormat:i,scaleFactor:o};f=new XRWebGLBinding(a,n),p=f.createProjectionLayer(s),a.updateRenderState({layers:[p]}),e.setPixelRatio(1),e.setSize(p.textureWidth,p.textureHeight,!1),E=new I(p.textureWidth,p.textureHeight,{format:M,type:S,depthTexture:new j(p.textureWidth,p.textureHeight,r,void 0,void 0,void 0,void 0,void 0,void 0,t),stencilBuffer:g.stencil,colorSpace:e.outputColorSpace,samples:g.antialias?4:0,resolveDepthBuffer:!1===p.ignoreDepthValues,resolveStencilBuffer:!1===p.ignoreDepthValues})}else{const t={antialias:g.antialias,alpha:!0,depth:g.depth,stencil:g.stencil,framebufferScaleFactor:o};m=new XRWebGLLayer(a,n,t),a.updateRenderState({baseLayer:m}),e.setPixelRatio(1),e.setSize(m.framebufferWidth,m.framebufferHeight,!1),E=new I(m.framebufferWidth,m.framebufferHeight,{format:M,type:S,colorSpace:e.outputColorSpace,stencilBuffer:g.stencil,resolveDepthBuffer:!1===m.ignoreDepthValues,resolveStencilBuffer:!1===m.ignoreDepthValues})}E.isXRRenderTarget=!0,this.setFoveation(c),d=null,s=await a.requestReferenceSpace(l),V.setContext(a),V.start(),r.isPresenting=!0,r.dispatchEvent({type:"sessionstart"})}},this.getEnvironmentBlendMode=function(){if(null!==a)return a.environmentBlendMode},this.getDepthTexture=function(){return _.getDepthTexture()};const F=new i,B=new i;function H(e,t){null===t?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(null===a)return;let t=e.near,n=e.far;null!==_.texture&&(_.depthNear>0&&(t=_.depthNear),_.depthFar>0&&(n=_.depthFar)),P.near=C.near=b.near=t,P.far=C.far=b.far=n,D===P.near&&w===P.far||(a.updateRenderState({depthNear:P.near,depthFar:P.far}),D=P.near,w=P.far),b.layers.mask=2|e.layers.mask,C.layers.mask=4|e.layers.mask,P.layers.mask=b.layers.mask|C.layers.mask;const r=e.parent,i=P.cameras;H(P,r);for(let e=0;e0&&(e.alphaTest.value=r.alphaTest);const i=t.get(r),a=i.envMap,o=i.envMapRotation;a&&(e.envMap.value=a,aa.copy(o),aa.x*=-1,aa.y*=-1,aa.z*=-1,a.isCubeTexture&&!1===a.isRenderTargetTexture&&(aa.y*=-1,aa.z*=-1),e.envMapRotation.value.setFromMatrix4(oa.makeRotationFromEuler(aa)),e.flipEnvMap.value=a.isCubeTexture&&!1===a.isRenderTargetTexture?-1:1,e.reflectivity.value=r.reflectivity,e.ior.value=r.ior,e.refractionRatio.value=r.refractionRatio),r.lightMap&&(e.lightMap.value=r.lightMap,e.lightMapIntensity.value=r.lightMapIntensity,n(r.lightMap,e.lightMapTransform)),r.aoMap&&(e.aoMap.value=r.aoMap,e.aoMapIntensity.value=r.aoMapIntensity,n(r.aoMap,e.aoMapTransform))}return{refreshFogUniforms:function(t,n){n.color.getRGB(t.fogColor.value,g(e)),n.isFog?(t.fogNear.value=n.near,t.fogFar.value=n.far):n.isFogExp2&&(t.fogDensity.value=n.density)},refreshMaterialUniforms:function(e,i,a,o,s){i.isMeshBasicMaterial||i.isMeshLambertMaterial?r(e,i):i.isMeshToonMaterial?(r(e,i),function(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap)}(e,i)):i.isMeshPhongMaterial?(r(e,i),function(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4)}(e,i)):i.isMeshStandardMaterial?(r(e,i),function(e,t){e.metalness.value=t.metalness,t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap,n(t.metalnessMap,e.metalnessMapTransform));e.roughness.value=t.roughness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap,n(t.roughnessMap,e.roughnessMapTransform));t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}(e,i),i.isMeshPhysicalMaterial&&function(e,t,r){e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap,n(t.sheenColorMap,e.sheenColorMapTransform)),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap,n(t.sheenRoughnessMap,e.sheenRoughnessMapTransform)));t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap,n(t.clearcoatMap,e.clearcoatMapTransform)),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap,n(t.clearcoatRoughnessMap,e.clearcoatRoughnessMapTransform)),t.clearcoatNormalMap&&(e.clearcoatNormalMap.value=t.clearcoatNormalMap,n(t.clearcoatNormalMap,e.clearcoatNormalMapTransform),e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),t.side===c&&e.clearcoatNormalScale.value.negate()));t.dispersion>0&&(e.dispersion.value=t.dispersion);t.iridescence>0&&(e.iridescence.value=t.iridescence,e.iridescenceIOR.value=t.iridescenceIOR,e.iridescenceThicknessMinimum.value=t.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=t.iridescenceThicknessRange[1],t.iridescenceMap&&(e.iridescenceMap.value=t.iridescenceMap,n(t.iridescenceMap,e.iridescenceMapTransform)),t.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=t.iridescenceThicknessMap,n(t.iridescenceThicknessMap,e.iridescenceThicknessMapTransform)));t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=r.texture,e.transmissionSamplerSize.value.set(r.width,r.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap,n(t.transmissionMap,e.transmissionMapTransform)),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap,n(t.thicknessMap,e.thicknessMapTransform)),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor));t.anisotropy>0&&(e.anisotropyVector.value.set(t.anisotropy*Math.cos(t.anisotropyRotation),t.anisotropy*Math.sin(t.anisotropyRotation)),t.anisotropyMap&&(e.anisotropyMap.value=t.anisotropyMap,n(t.anisotropyMap,e.anisotropyMapTransform)));e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap,n(t.specularColorMap,e.specularColorMapTransform));t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap,n(t.specularIntensityMap,e.specularIntensityMapTransform))}(e,i,s)):i.isMeshMatcapMaterial?(r(e,i),function(e,t){t.matcap&&(e.matcap.value=t.matcap)}(e,i)):i.isMeshDepthMaterial?r(e,i):i.isMeshDistanceMaterial?(r(e,i),function(e,n){const r=t.get(n).light;e.referencePosition.value.setFromMatrixPosition(r.matrixWorld),e.nearDistance.value=r.shadow.camera.near,e.farDistance.value=r.shadow.camera.far}(e,i)):i.isMeshNormalMaterial?r(e,i):i.isLineBasicMaterial?(function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform))}(e,i),i.isLineDashedMaterial&&function(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}(e,i)):i.isPointsMaterial?function(e,t,r,i){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*r,e.scale.value=.5*i,t.map&&(e.map.value=t.map,n(t.map,e.uvTransform));t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform));t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}(e,i,a,o):i.isSpriteMaterial?function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform));t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform));t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}(e,i):i.isShadowMaterial?(e.color.value.copy(i.color),e.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function la(e,t,n,r){let i={},a={},o=[];const s=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function l(e,t,n,r){const i=e.value,a=t+"_"+n;if(void 0===r[a])return r[a]="number"==typeof i||"boolean"==typeof i?i:i.clone(),!0;{const e=r[a];if("number"==typeof i||"boolean"==typeof i){if(e!==i)return r[a]=i,!0}else if(!1===e.equals(i))return e.copy(i),!0}return!1}function c(e){const t={boundary:0,storage:0};return"number"==typeof e||"boolean"==typeof e?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",e),t}function d(t){const n=t.target;n.removeEventListener("dispose",d);const r=o.indexOf(n.__bindingPointIndex);o.splice(r,1),e.deleteBuffer(i[n.id]),delete i[n.id],delete a[n.id]}return{bind:function(e,t){const n=t.program;r.uniformBlockBinding(e,n)},update:function(n,u){let f=i[n.id];void 0===f&&(!function(e){const t=e.uniforms;let n=0;const r=16;for(let e=0,i=t.length;e0&&(n+=r-i);e.__size=n,e.__cache={}}(n),f=function(t){const n=function(){for(let e=0;e0),u=!!n.morphAttributes.position,f=!!n.morphAttributes.normal,p=!!n.morphAttributes.color;let m=D;r.toneMapped&&(null!==w&&!0!==w.isXRRenderTarget||(m=C.toneMapping));const h=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,_=void 0!==h?h.length:0,g=pe.get(r),v=R.state.lights;if(!0===J&&(!0===ee||e!==N)){const t=e===N&&r.id===y;Ae.setState(r,e,t)}let E=!1;r.version===g.__version?g.needsLights&&g.lightsStateVersion!==v.state.version||g.outputColorSpace!==s||i.isBatchedMesh&&!1===g.batching?E=!0:i.isBatchedMesh||!0!==g.batching?i.isBatchedMesh&&!0===g.batchingColor&&null===i.colorTexture||i.isBatchedMesh&&!1===g.batchingColor&&null!==i.colorTexture||i.isInstancedMesh&&!1===g.instancing?E=!0:i.isInstancedMesh||!0!==g.instancing?i.isSkinnedMesh&&!1===g.skinning?E=!0:i.isSkinnedMesh||!0!==g.skinning?i.isInstancedMesh&&!0===g.instancingColor&&null===i.instanceColor||i.isInstancedMesh&&!1===g.instancingColor&&null!==i.instanceColor||i.isInstancedMesh&&!0===g.instancingMorph&&null===i.morphTexture||i.isInstancedMesh&&!1===g.instancingMorph&&null!==i.morphTexture||g.envMap!==l||!0===r.fog&&g.fog!==a?E=!0:void 0===g.numClippingPlanes||g.numClippingPlanes===Ae.numPlanes&&g.numIntersection===Ae.numIntersection?(g.vertexAlphas!==c||g.vertexTangents!==d||g.morphTargets!==u||g.morphNormals!==f||g.morphColors!==p||g.toneMapping!==m||g.morphTargetsCount!==_)&&(E=!0):E=!0:E=!0:E=!0:E=!0:(E=!0,g.__version=r.version);let S=g.currentProgram;!0===E&&(S=Qe(r,t,i));let T=!1,M=!1,x=!1;const A=S.getUniforms(),b=g.uniforms;de.useProgram(S.program)&&(T=!0,M=!0,x=!0);r.id!==y&&(y=r.id,M=!0);if(T||N!==e){de.buffers.depth.getReversed()?(te.copy(e.projectionMatrix),xn(te),Rn(te),A.setValue(Ie,"projectionMatrix",te)):A.setValue(Ie,"projectionMatrix",e.projectionMatrix),A.setValue(Ie,"viewMatrix",e.matrixWorldInverse);const t=A.map.cameraPosition;void 0!==t&&t.setValue(Ie,re.setFromMatrixPosition(e.matrixWorld)),ce.logarithmicDepthBuffer&&A.setValue(Ie,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),(r.isMeshPhongMaterial||r.isMeshToonMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial)&&A.setValue(Ie,"isOrthographic",!0===e.isOrthographicCamera),N!==e&&(N=e,M=!0,x=!0)}if(i.isSkinnedMesh){A.setOptional(Ie,i,"bindMatrix"),A.setOptional(Ie,i,"bindMatrixInverse");const e=i.skeleton;e&&(null===e.boneTexture&&e.computeBoneTexture(),A.setValue(Ie,"boneTexture",e.boneTexture,me))}i.isBatchedMesh&&(A.setOptional(Ie,i,"batchingTexture"),A.setValue(Ie,"batchingTexture",i._matricesTexture,me),A.setOptional(Ie,i,"batchingIdTexture"),A.setValue(Ie,"batchingIdTexture",i._indirectTexture,me),A.setOptional(Ie,i,"batchingColorTexture"),null!==i._colorsTexture&&A.setValue(Ie,"batchingColorTexture",i._colorsTexture,me));const L=n.morphAttributes;void 0===L.position&&void 0===L.normal&&void 0===L.color||Le.update(i,n,S);(M||g.receiveShadow!==i.receiveShadow)&&(g.receiveShadow=i.receiveShadow,A.setValue(Ie,"receiveShadow",i.receiveShadow));r.isMeshGouraudMaterial&&null!==r.envMap&&(b.envMap.value=l,b.flipEnvMap.value=l.isCubeTexture&&!1===l.isRenderTargetTexture?-1:1);r.isMeshStandardMaterial&&null===r.envMap&&null!==t.environment&&(b.envMapIntensity.value=t.environmentIntensity);M&&(A.setValue(Ie,"toneMappingExposure",C.toneMappingExposure),g.needsLights&&(U=x,(P=b).ambientLightColor.needsUpdate=U,P.lightProbe.needsUpdate=U,P.directionalLights.needsUpdate=U,P.directionalLightShadows.needsUpdate=U,P.pointLights.needsUpdate=U,P.pointLightShadows.needsUpdate=U,P.spotLights.needsUpdate=U,P.spotLightShadows.needsUpdate=U,P.rectAreaLights.needsUpdate=U,P.hemisphereLights.needsUpdate=U),a&&!0===r.fog&&Me.refreshFogUniforms(b,a),Me.refreshMaterialUniforms(b,r,Y,X,R.state.transmissionRenderTarget[e.id]),_i.upload(Ie,Je(g),b,me));var P,U;r.isShaderMaterial&&!0===r.uniformsNeedUpdate&&(_i.upload(Ie,Je(g),b,me),r.uniformsNeedUpdate=!1);r.isSpriteMaterial&&A.setValue(Ie,"center",i.center);if(A.setValue(Ie,"modelViewMatrix",i.modelViewMatrix),A.setValue(Ie,"normalMatrix",i.normalMatrix),A.setValue(Ie,"modelMatrix",i.matrixWorld),r.isShaderMaterial||r.isRawShaderMaterial){const e=r.uniformsGroups;for(let t=0,n=e.length;t{function n(){r.forEach((function(e){pe.get(e).currentProgram.isReady()&&r.delete(e)})),0!==r.size?setTimeout(n,10):t(e)}null!==le.get("KHR_parallel_shader_compile")?n():setTimeout(n,10)}))};let ke=null;function We(){Ye.stop()}function Xe(){Ye.start()}const Ye=new Cn;function Ke(e,t,n,r){if(!1===e.visible)return;if(e.layers.test(t.layers))if(e.isGroup)n=e.renderOrder;else if(e.isLOD)!0===e.autoUpdate&&e.update(t);else if(e.isLight)R.pushLight(e),e.castShadow&&R.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||Q.intersectsSprite(e)){r&&ie.setFromMatrixPosition(e.matrixWorld).applyMatrix4(ne);const t=Se.update(e),i=e.material;i.visible&&x.push(e,t,i,n,ie.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||Q.intersectsObject(e))){const t=Se.update(e),i=e.material;if(r&&(void 0!==e.boundingSphere?(null===e.boundingSphere&&e.computeBoundingSphere(),ie.copy(e.boundingSphere.center)):(null===t.boundingSphere&&t.computeBoundingSphere(),ie.copy(t.boundingSphere.center)),ie.applyMatrix4(e.matrixWorld).applyMatrix4(ne)),Array.isArray(i)){const r=t.groups;for(let a=0,o=r.length;a0&&Ze(i,t,n),a.length>0&&Ze(a,t,n),o.length>0&&Ze(o,t,n),de.buffers.depth.setTest(!0),de.buffers.depth.setMask(!0),de.buffers.color.setMask(!0),de.setPolygonOffset(!1)}function qe(e,t,n,r){if(null!==(!0===n.isScene?n.overrideMaterial:null))return;void 0===R.state.transmissionRenderTarget[r.id]&&(R.state.transmissionRenderTarget[r.id]=new I(1,1,{generateMipmaps:!0,type:le.has("EXT_color_buffer_half_float")||le.has("EXT_color_buffer_float")?E:S,minFilter:ot,samples:4,stencilBuffer:o,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:p.workingColorSpace}));const i=R.state.transmissionRenderTarget[r.id],a=r.viewport||O;i.setSize(a.z*C.transmissionResolutionScale,a.w*C.transmissionResolutionScale);const s=C.getRenderTarget();C.setRenderTarget(i),C.getClearColor(V),z=C.getClearAlpha(),z<1&&C.setClearColor(16777215,.5),C.clear(),oe&&Ce.render(n);const l=C.toneMapping;C.toneMapping=D;const d=r.viewport;if(void 0!==r.viewport&&(r.viewport=void 0),R.setupLightsView(r),!0===J&&Ae.setGlobalState(C.clippingPlanes,r),Ze(e,n,r),me.updateMultisampleRenderTarget(i),me.updateRenderTargetMipmap(i),!1===le.has("WEBGL_multisampled_render_to_texture")){let e=!1;for(let i=0,a=t.length;i0)for(let t=0,a=n.length;t0&&qe(r,i,e,t),oe&&Ce.render(e),je(x,e,t);null!==w&&0===U&&(me.updateMultisampleRenderTarget(w),me.updateRenderTargetMipmap(w)),!0===e.isScene&&e.onAfterRender(C,e,t),we.resetDefaultState(),y=-1,N=null,b.pop(),b.length>0?(R=b[b.length-1],!0===J&&Ae.setGlobalState(C.clippingPlanes,R.state.camera)):R=null,A.pop(),x=A.length>0?A[A.length-1]:null},this.getActiveCubeFace=function(){return P},this.getActiveMipmapLevel=function(){return U},this.getRenderTarget=function(){return w},this.setRenderTargetTextures=function(e,t,n){const r=pe.get(e);r.__autoAllocateDepthBuffer=!1===e.resolveDepthBuffer,!1===r.__autoAllocateDepthBuffer&&(r.__useRenderToTexture=!1),pe.get(e.texture).__webglTexture=t,pe.get(e.depthTexture).__webglTexture=r.__autoAllocateDepthBuffer?void 0:n,r.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(e,t){const n=pe.get(e);n.__webglFramebuffer=t,n.__useDefaultFramebuffer=void 0===t};const tt=Ie.createFramebuffer();this.setRenderTarget=function(e,t=0,n=0){w=e,P=t,U=n;let r=!0,i=null,a=!1,o=!1;if(e){const s=pe.get(e);if(void 0!==s.__useDefaultFramebuffer)de.bindFramebuffer(Ie.FRAMEBUFFER,null),r=!1;else if(void 0===s.__webglFramebuffer)me.setupRenderTarget(e);else if(s.__hasExternalTextures)me.rebindTextures(e,pe.get(e.texture).__webglTexture,pe.get(e.depthTexture).__webglTexture);else if(e.depthBuffer){const t=e.depthTexture;if(s.__boundDepthTexture!==t){if(null!==t&&pe.has(t)&&(e.width!==t.image.width||e.height!==t.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");me.setupDepthRenderbuffer(e)}}const l=e.texture;(l.isData3DTexture||l.isDataArrayTexture||l.isCompressedArrayTexture)&&(o=!0);const c=pe.get(e).__webglFramebuffer;e.isWebGLCubeRenderTarget?(i=Array.isArray(c[t])?c[t][n]:c[t],a=!0):i=e.samples>0&&!1===me.useMultisampledRTT(e)?pe.get(e).__webglMultisampledFramebuffer:Array.isArray(c)?c[n]:c,O.copy(e.viewport),B.copy(e.scissor),G=e.scissorTest}else O.copy(q).multiplyScalar(Y).floor(),B.copy(Z).multiplyScalar(Y).floor(),G=$;0!==n&&(i=tt);if(de.bindFramebuffer(Ie.FRAMEBUFFER,i)&&r&&de.drawBuffers(e,i),de.viewport(O),de.scissor(B),de.setScissorTest(G),a){const r=pe.get(e.texture);Ie.framebufferTexture2D(Ie.FRAMEBUFFER,Ie.COLOR_ATTACHMENT0,Ie.TEXTURE_CUBE_MAP_POSITIVE_X+t,r.__webglTexture,n)}else if(o){const r=pe.get(e.texture),i=t;Ie.framebufferTextureLayer(Ie.FRAMEBUFFER,Ie.COLOR_ATTACHMENT0,r.__webglTexture,n,i)}else if(null!==e&&0!==n){const t=pe.get(e.texture);Ie.framebufferTexture2D(Ie.FRAMEBUFFER,Ie.COLOR_ATTACHMENT0,Ie.TEXTURE_2D,t.__webglTexture,n)}y=-1},this.readRenderTargetPixels=function(e,t,n,r,i,a,o,s=0){if(!e||!e.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let l=pe.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==o&&(l=l[o]),l){de.bindFramebuffer(Ie.FRAMEBUFFER,l);try{const o=e.textures[s],l=o.format,c=o.type;if(!ce.textureFormatReadable(l))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!ce.textureTypeReadable(c))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i&&(e.textures.length>1&&Ie.readBuffer(Ie.COLOR_ATTACHMENT0+s),Ie.readPixels(t,n,r,i,De.convert(l),De.convert(c),a))}finally{const e=null!==w?pe.get(w).__webglFramebuffer:null;de.bindFramebuffer(Ie.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,r,i,a,o,s=0){if(!e||!e.isWebGLRenderTarget)throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let l=pe.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&void 0!==o&&(l=l[o]),l){if(t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i){de.bindFramebuffer(Ie.FRAMEBUFFER,l);const o=e.textures[s],c=o.format,d=o.type;if(!ce.textureFormatReadable(c))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!ce.textureTypeReadable(d))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const u=Ie.createBuffer();Ie.bindBuffer(Ie.PIXEL_PACK_BUFFER,u),Ie.bufferData(Ie.PIXEL_PACK_BUFFER,a.byteLength,Ie.STREAM_READ),e.textures.length>1&&Ie.readBuffer(Ie.COLOR_ATTACHMENT0+s),Ie.readPixels(t,n,r,i,De.convert(c),De.convert(d),0);const f=null!==w?pe.get(w).__webglFramebuffer:null;de.bindFramebuffer(Ie.FRAMEBUFFER,f);const p=Ie.fenceSync(Ie.SYNC_GPU_COMMANDS_COMPLETE,0);return Ie.flush(),await An(Ie,p,4),Ie.bindBuffer(Ie.PIXEL_PACK_BUFFER,u),Ie.getBufferSubData(Ie.PIXEL_PACK_BUFFER,0,a),Ie.deleteBuffer(u),Ie.deleteSync(p),a}throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(e,t=null,n=0){const r=Math.pow(2,-n),i=Math.floor(e.image.width*r),a=Math.floor(e.image.height*r),o=null!==t?t.x:0,s=null!==t?t.y:0;me.setTexture2D(e,0),Ie.copyTexSubImage2D(Ie.TEXTURE_2D,n,0,0,o,s,i,a),de.unbindTexture()};const nt=Ie.createFramebuffer(),rt=Ie.createFramebuffer();this.copyTextureToTexture=function(e,t,n=null,r=null,i=0,a=null){let o,s,l,c,d,u,f,p,m;null===a&&(0!==i?(H("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),a=i,i=0):a=0);const h=e.isCompressedTexture?e.mipmaps[a]:e.image;if(null!==n)o=n.max.x-n.min.x,s=n.max.y-n.min.y,l=n.isBox3?n.max.z-n.min.z:1,c=n.min.x,d=n.min.y,u=n.isBox3?n.min.z:0;else{const t=Math.pow(2,-i);o=Math.floor(h.width*t),s=Math.floor(h.height*t),l=e.isDataArrayTexture?h.depth:e.isData3DTexture?Math.floor(h.depth*t):1,c=0,d=0,u=0}null!==r?(f=r.x,p=r.y,m=r.z):(f=0,p=0,m=0);const _=De.convert(t.format),g=De.convert(t.type);let v;t.isData3DTexture?(me.setTexture3D(t,0),v=Ie.TEXTURE_3D):t.isDataArrayTexture||t.isCompressedArrayTexture?(me.setTexture2DArray(t,0),v=Ie.TEXTURE_2D_ARRAY):(me.setTexture2D(t,0),v=Ie.TEXTURE_2D),Ie.pixelStorei(Ie.UNPACK_FLIP_Y_WEBGL,t.flipY),Ie.pixelStorei(Ie.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),Ie.pixelStorei(Ie.UNPACK_ALIGNMENT,t.unpackAlignment);const E=Ie.getParameter(Ie.UNPACK_ROW_LENGTH),S=Ie.getParameter(Ie.UNPACK_IMAGE_HEIGHT),T=Ie.getParameter(Ie.UNPACK_SKIP_PIXELS),M=Ie.getParameter(Ie.UNPACK_SKIP_ROWS),x=Ie.getParameter(Ie.UNPACK_SKIP_IMAGES);Ie.pixelStorei(Ie.UNPACK_ROW_LENGTH,h.width),Ie.pixelStorei(Ie.UNPACK_IMAGE_HEIGHT,h.height),Ie.pixelStorei(Ie.UNPACK_SKIP_PIXELS,c),Ie.pixelStorei(Ie.UNPACK_SKIP_ROWS,d),Ie.pixelStorei(Ie.UNPACK_SKIP_IMAGES,u);const R=e.isDataArrayTexture||e.isData3DTexture,A=t.isDataArrayTexture||t.isData3DTexture;if(e.isDepthTexture){const n=pe.get(e),r=pe.get(t),h=pe.get(n.__renderTarget),_=pe.get(r.__renderTarget);de.bindFramebuffer(Ie.READ_FRAMEBUFFER,h.__webglFramebuffer),de.bindFramebuffer(Ie.DRAW_FRAMEBUFFER,_.__webglFramebuffer);for(let n=0;n + + + + + Aperi'Solve + + + + + + + + +
+
+ +

Aperi'Solve

+
+ {% block body_content %} {% endblock %} +
+ +
+ +
+ + + + + {% block footer_content %} {% endblock %} + {% include "footer.html" %} + + + \ No newline at end of file diff --git a/aperisolve/templates/faq.html b/aperisolve/templates/faq.html new file mode 100644 index 0000000..2b72bff --- /dev/null +++ b/aperisolve/templates/faq.html @@ -0,0 +1,409 @@ +{% extends 'base.html' %} +{% block body_content %} +
+

Cheatsheet

+

Disclaimer

+
+
+ This cheatsheet is intended to guide CTF players in their research. This cheatsheet is not representative of + modern steganography/seganalysis techniques, and its content does not match with the creation of an interesting + challenges 😉. +
+
+

Check file type / metadata

+
+
+
    +
  • Check the file extension on the internet if you don't know it. Also check the file format.
  • +
  • Use the file command to check that the extension matches the file type. This + command is based on the Magic Bytes at the beginning of the file, so it may return false positives.
  • +
+
$ file data.raw +
+
+
    +
  • In case of unknown extension and file, inspect the hexadecimal structure of the file with an editor like hexed.it to identify the file structure.
  • +
  • Display the file's metadata with the exiftool command.
  • +
+
+ $ exiftool data.raw +
+
+
+
+

Modify the file structure

+
+
+
    +
  • Modify the file structure with a hexadecimal editor like hexed.it. PNG chunks can be easily edited with TweakPNG (Windows or + Wine).
  • +
+
+ TweakPNG +
+
    +
  • Verify the checksums of the file. These are usually CRC32, some tools like PngCheck or PCRT are usefull to verify and + correct these checksums.
  • +
+
+ $ pngcheck -c file.png
+ $ PCRT.py -v -i file.png +
+
    +
  • For many types of files (PNG, WAV, ...) the media size is contained in the headers. This size can then be + reduced to display only a part of the media (beginning of an image, beginning of a sound, ...).
  • +
+
+
+

Raw data

+
+
+
    +
  • It is possible to import a raw file into Audacity to listen to it as a soundtrack (File > Import > Raw Data).
  • +
+
+ Audacity +
+
    +
  • Similarly, the GIMP tool + allows image import from raw data (File > Open).
  • +
  • The BinVis.io tool allows you to + graphically view binary files and can give hints as to the file type.
  • +
  • The strings command allows you to display the strings present in a file.
  • +
+
+ $ strings -s file.raw
+ $ strings -S file.raw
+ $ strings -b file.raw
+ $ strings -l file.raw
+ $ strings -B file.raw
+ $ strings -L file.raw +
+
+
+

Image

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PNGJPG/JPEGBMP
Aperi'SolveOKOKOK
ZstegOKKOOK
SteghideKOOKOK
OutGuessKOOKKO
+
+
+
    +
  • The robustness of steganography relies on the algorithm used and the knowledge of the cover medium. A search + of the original media allows us to make a comparison and identify the alterations made. A reverse search on Google Image or Yandex Images can find the original + media (be sure to check that the file size and type match).
  • +
  • The Stegsolve + tool allows you to perform operations on 2 images, and thus identify the differences between a cover medium + and a stegano medium using the XOR operation.
  • +
+
+ Stegsolve Xor + Stegsolve Xor 2 +
+
    +
  • The Zsteg tool allows you + to extract messages and binaries encoded on different layers, such as the 2 green LSB.
  • +
+
+ $ zsteg file.png 2b,g,lsb,xy
+ $ zsteg file.png -E '1b,rgb,lsb' +
+
+
    +
  • Sometimes, bit-layer analysis on the Stegsolve tool (or Aperi'Solve) can highlight specific areas that have been altered. + Scripting may then be required to extract specific areas. The following python code retrieves an image as a + list of pixels: [(100,120,43), (230, 124, 110), ...]
  • +
+
+ # pip install Pillow
+ from PIL import Image
+ stegano_image = Image.open('file.png')
+ width, height = stegano_image.size
+ pxs = list(stegano_image.getdata())
+ print(pxs[:10]) +
+
+
    +
  • Stegano mediums can rely on an algorithm using an encryption key. This is the case for Steghide and OutGuess. The password can be the name of the file, a string of characters contained + in the file (strings & exiftool), or the object + represented by the image. In some cases, the password cannot be retrieved and a bruteforce must be performed. + The tool StegCracker + and Stegbrute allows + bruteforce of hidden secrets with Steghide.
  • +
+
+ $ steghide extract -p "secret" -sf file.jpg
+ $ stegcracker file.jpg /usr/share/wordlists/rockyou.txt +
+
+
+

PNG (Portable Network Graphics)

+
+
+
    +
  • Tools like Steghide and OutGuess does not work for PNG files. On the other hand, this type of file allows a + backup without compression, and therefore to hide messages on the LSBs. The tool Zsteg presented above and + available on Aperi'Solve allows the extracting secrets from PNG files.
  • +
+
+ $ zsteg file.png 2b,g,lsb,xy
+ $ zsteg file.png -E '1b,rgb,lsb' +
+
+
    +
  • PNG offers an "APNG" + extension allowing to have an animation of images like GIF files. It is possible that the visualization of the + PNG does not reflect all of its content (for example, a frame with a zero duration, or a very long first + frame). The tool APNG Maker + allows you to view the different frames of an APNG file. A message can also be encoded on the durations of + each frame.
  • +
+
+ APNG +
+
    +
  • The tool TweakPNG + presented earlier allows to perform several types of operations like recalculate checksums, reorder PNG + chunks, increase the visible size of the PNG or modify a header.
  • +
+
+ TweakPNG +
+
+
+

JPEG (Joint Photographic Experts Group)

+
+
+
    +
  • The tool Zsteg does not + work on JPEG files (jpg, jpeg, ...) because the latter necessarily include a compression algorithm reducing + the quality of the image and altering the LSBs. In contrast, the tools Steghide and OutGuess shown above are compatible with this file format.
  • +
+
+ $ outguess -k secret file.jpg output.raw
+ $ steghide extract -p "secret" -sf file.jpg +
+
+
+

GIF (Graphics Interchange Format)

+
+
+
    +
  • GIFs are generally animated images whose format is generally poorly supported by steganalysis tools. In + addition, the image format generally offers a color palette not exceeding 256 colors, against 16 million for + PNG (excluding transparency). However, the tool GIF Maker makes it easy to manipulate GIF files.
  • +
  • GIFs can embed images (frames) with zero duration. These will then not be viewable without an analysis of + each frame.
  • +
+
+ GIF Maker +
+
    +
  • A hidden message can be embedded over the duration of the frames (morse, ascii, binary, ...).
  • +
  • Ffmpeg can be used to extract frames + from a GIF. Completeness of extracted frames cannot be guaranteed.
  • +
+
+ $ ffmpeg -i file.gif -vsync 0 output/file%d.png +
+
+
+
+

Audio

+
+
+
    +
  • The most common technique for sound files is based on the audio spectrum. Indeed, it is possible to draw a + visible message on the audio spectrum with tools like Coagula. Then this spectrum can be analyzed using spectral analysis + tools like Sonic Visualiser, + Audacity or the online tool dcode.
  • +
+
+ Audacity spectrum +
+
Right-clicking the scale to zoom out and view the entire spectrum, or switch to logarithm mode, may be + required. +

+ Audacity spectrum +
+
    +
  • Inaudible frequencies can be used to hide messages. A spectral analysis beyond 20KHz and below 20Hz is + recommended, a message encoded in morse or binary can be hidden there.
  • +
  • Sounds are simple telecommunications signals that can be used for other purposes. Special encoding methods + can be used, such as DTMF Code formerly used in telephony or SSTV used in + television for image transfer. These signals are encoded on audible frequencies but their interpretations + require special decoders. We will then opt for a DTMF decoder for the first technique, and an SSTV decoder like QSSTV for the second one.
  • +
  • Just like PNG files, some sound files embed their theoretical sizes in their headers. This is particularly + the case for WAV files whose DataSize block can be decreased or increased using a + hex editor.
  • +
  • The LSB technique can be used on certain audio files. It is then necessary to extract the LSBs from the + audio data; the WavSteg tool allows you to perform this manipulation on WAV files.
  • +
+
+ $ stegolsb wavsteg -r -i file.wav -o output.txt -n 1 -b 1000 +
+
+
    +
  • The tools Steghide and DeepSound are + commonly used in CTF to hide messages. These can take a key as a parameter, so you will have to guess this key + from the available information (media, file name, challenge name, etc.) or by using a wordlist.
  • +
+

+ DeepSound +
+
+
+

Polyglot Files

+
+
+ This is a file type that is valid for different file formats. For example an image file which can therefore be + viewed and which is also a jar file (which can be executed). There are several types of polyglot file types: +
    +
  • "Simple" polyglot: This is a simple concatenation of files;
  • +
  • "Parasitic" polyglot: This is a file that contains another type of file.
  • +
  • "Mille-feuilles" polyglot: The layers are alternated by controlling the internal structure of the file.
  • +
  • "Chimera" polyglot: The file has a body (data) and several heads. Since several formats use the same + algorithm to store data, such as Zlib's Deflate, the same block of data is used by different headers. (for + example, the pixels of an image). Several headers are present so that this image is visible via several + formats (jpg, png, ..), within the same file.
  • +
  • "Schizophrenic" files: This is a single type of file, but its contents are interpreted differently depending + on the tool that is running or accessing this file. These are usually PDF files (interpretation or not of + javascript) or Images (like the technique of Gamma).
  • +
  • Angecryption : The result of an encryption or decryption of a file gives another valid file of the same type + or of a different type:
  • +
+

+ Angecryption +
+
    +
  • Docx, jar, apk, pptx, odf... files are valid archives and can be decompressed. You must then check whether + the file in question can be opened with a tool other than the one associated with its extension. The file command does not identify polyglot files.
  • +
+
+
+

Encoding and exotic languages

+
+
+
    +
  • ASCII text can be encoded in binary in blocks of 8 bits, it is then easily + identifiable because each block corresponding to a letter begins with a 0. It is possible to remove this 0 , + the blocks are then only 7 bits. The text can also be coded on an integer of + type long (sometimes in a base other than base 10), for example the character + string “Hello world! encoded on a long type in base 10 can be decoded with the following python 2 code:
  • +
+
+ python2> hex(22405534230753963835153736737L)[2:].strip('L').decode("hex")
+ python2> "48656c6c6f20776f726c6421".decode("hex") +
+
+
    +
  • Tools like CyberChef (and + the "magic" option) can help detect the encoding used and decode the hidden message. Sometimes a charset + change may be necessary (monoalphabetic substitution, or base change).
  • +
  • Exotic or esoteric languages are programming languages designed to be unique, difficult to program, or just + plain weird. Their design and their charsets can be particular, it is the case of the most found languages in + CTF like BrainFuck, WhiteSpace, PIET or Malbolge. The website EsoLang references + these different languages and can be useful in your research.
  • +
+
+ brainfuck>
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>++.>+.+++++++..+++.<<++.>>++++++++.--------.+++.------.--------.<<+. +

malbolge>
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#" + `CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbCBA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@> +
+
+ PIET +

+
+
+

To go further

+ +
+{% endblock %} \ No newline at end of file diff --git a/aperisolve/templates/footer.html b/aperisolve/templates/footer.html new file mode 100644 index 0000000..0dad7a3 --- /dev/null +++ b/aperisolve/templates/footer.html @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/aperisolve/templates/index.html b/aperisolve/templates/index.html new file mode 100644 index 0000000..842086c --- /dev/null +++ b/aperisolve/templates/index.html @@ -0,0 +1,38 @@ +{% extends 'base.html' %} +{% block body_content %} +
+
+
+

What is this ?

+

Aperi'Solve is an online platform which performs layer analysis on image. The platform also uses zsteg, + steghide, outguess, exiftool, binwalk, foremost and strings for deeper steganography analysis. The platform + supports the following images format: .png, .jpg, .gif, .bmp, .jpeg, .jfif, .jpe, .tiff...

+
+
+

📂 Drag and drop an image here or click to select

+ + +
+
+
+ + +
+
+ + +
+ +
+
+ 0% +
+
+
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/aperisolve/templates/result.html b/aperisolve/templates/result.html new file mode 100644 index 0000000..e1a7a32 --- /dev/null +++ b/aperisolve/templates/result.html @@ -0,0 +1,12 @@ +{% extends 'base.html' %} +{% block body_content %} +
+
+
+
+{% endblock %} +{% block footer_content %} + +{% endblock %} \ No newline at end of file diff --git a/aperisolve/templates/show.html b/aperisolve/templates/show.html new file mode 100644 index 0000000..6ea78d8 --- /dev/null +++ b/aperisolve/templates/show.html @@ -0,0 +1,10 @@ +{% extends 'base.html' %} +{% block body_content %} +
+ {% for img in images %}
+ +
{% endfor %} +
+{% endblock %} \ No newline at end of file diff --git a/aperisolve/workers.py b/aperisolve/workers.py new file mode 100644 index 0000000..d595654 --- /dev/null +++ b/aperisolve/workers.py @@ -0,0 +1,76 @@ +"""Asynchronous worker for analyzing image submissions.""" + +import threading +from pathlib import Path +from typing import Any + +from .analyzers.binwalk import analyze_binwalk +from .analyzers.decomposer import analyze_decomposer +from .analyzers.exiftool import analyze_exiftool +from .analyzers.foremost import analyze_foremost +from .analyzers.outguess import analyze_outguess +from .analyzers.steghide import analyze_steghide +from .analyzers.strings import analyze_strings +from .analyzers.zsteg import analyze_zsteg +from .app import app, db +from .config import RESULT_FOLDER +from .models import Image, Submission + + +def analyze_image(submission_hash: str) -> None: + """Analyze an image submission in separate threads.""" + with app.app_context(): + submission: Submission = Submission.query.get(submission_hash) # type: ignore + image = Image.query.get_or_404(submission.image_hash) # type: ignore + + if not submission or not image: # No submission found + return + + submission.status = "running" # type: ignore + db.session.commit() + + try: + img_path: Path = Path(image.file) + result_path: Path = RESULT_FOLDER / str(image.hash) / str(submission.hash) + result_path.mkdir(parents=True, exist_ok=True) + + threads: list[threading.Thread] = [] + + def run_analyzer(analyzer_func: Any, *args: Any) -> None: + """Run an analyzer function in a separate thread.""" + try: + analyzer_func(*args) + except Exception as e: + print(f"Error in {analyzer_func.__name__}: {e}") + + analyzers = [ + (analyze_binwalk, img_path, result_path), + (analyze_decomposer, img_path, result_path), + (analyze_exiftool, img_path, result_path), + (analyze_foremost, img_path, result_path), + (analyze_strings, img_path, result_path), + (analyze_steghide, img_path, result_path, submission.password), + (analyze_zsteg, img_path, result_path), + ] + + # Deep analysis only + if submission.deep_analysis: + analyzers.extend( + [ + (analyze_outguess, img_path, result_path), + ] + ) + + for analyzer in analyzers: + thread = threading.Thread(target=run_analyzer, args=analyzer) + threads.append(thread) + thread.start() + + for thread in threads: + thread.join() + + submission.status = "completed" + except Exception: + submission.status = "error" + finally: + db.session.commit() diff --git a/aperisolve/wsgi.py b/aperisolve/wsgi.py new file mode 100644 index 0000000..0bf784b --- /dev/null +++ b/aperisolve/wsgi.py @@ -0,0 +1,6 @@ +"""Aperi'Solve WSGI runner.""" + +from .app import app as application + +if __name__ == "__main__": + application.run() diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml new file mode 100644 index 0000000..e23163d --- /dev/null +++ b/docker-compose-dev.yml @@ -0,0 +1,76 @@ +services: + web: + #image: ghcr.io/zeecka/aperisolve:latest + build: . + container_name: aperisolve-web + restart: always + command: ["flask", "--app", "aperisolve.app", "run", "--host=0.0.0.0", "--port=5000"] + ports: + - "5000:5000" + volumes: + - ./aperisolve:/aperisolve + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_started + worker: + condition: service_started + env_file: + - .env + environment: + - FLASK_DEBUG=true + - FLASK_ENV=development + + worker: + #image: ghcr.io/zeecka/aperisolve:latest + build: . + container_name: aperisolve-worker + restart: always + command: rq worker default --url redis://redis:6379/0 + volumes: + - ./aperisolve:/aperisolve + depends_on: + - redis + - postgres + env_file: + - .env + environment: + - FLASK_DEBUG=true + - FLASK_ENV=development + + redis: + image: redis:7 + container_name: redis + restart: always + env_file: + - .env + + postgres: + image: postgres:14 + container_name: postgres + restart: always + volumes: + - pgdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U aperiuser -d aperisolve"] + interval: 5s + timeout: 5s + retries: 5 + env_file: + - .env + + + rqdashboard: + image: eoranged/rq-dashboard + container_name: rq-dashboard + restart: always + ports: + - "9181:9181" + depends_on: + - redis + env_file: + - .env + +volumes: + pgdata: \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..777fef2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,69 @@ +services: + web: + image: ghcr.io/zeecka/aperisolve:latest + #build: . + container_name: aperisolve-web + restart: always + ports: + - "5000:5000" + volumes: + - apresults:/aperisolve/results + depends_on: + postgres: + condition: service_healthy + redis: + condition: service_started + worker: + condition: service_started + env_file: + - .env + + worker: + image: ghcr.io/zeecka/aperisolve:latest + #build: . + container_name: aperisolve-worker + restart: always + command: rq worker default --url redis://redis:6379/0 + volumes: + - apresults:/aperisolve/results + depends_on: + - redis + - postgres + env_file: + - .env + + postgres: + image: postgres:14 + container_name: postgres + restart: always + volumes: + - pgdata:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U aperiuser -d aperisolve"] + interval: 5s + timeout: 5s + retries: 5 + env_file: + - .env + + redis: + image: redis:7 + container_name: redis + restart: always + env_file: + - .env + + rqdashboard: + image: eoranged/rq-dashboard + container_name: rq-dashboard + restart: always + ports: + - "9181:9181" + depends_on: + - redis + env_file: + - .env + +volumes: + apresults: + pgdata:

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 literal 0 HcmV?d00001 diff --git a/aperisolve/static/img/cheatsheet/audacity_2.png b/aperisolve/static/img/cheatsheet/audacity_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3c56833c9dd74a3c84d739246849651fbafe0402 GIT binary patch literal 86142 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 ASO5S3 literal 0 HcmV?d00001 diff --git a/aperisolve/static/img/cheatsheet/gif_maker.png b/aperisolve/static/img/cheatsheet/gif_maker.png new file mode 100644 index 0000000000000000000000000000000000000000..f976d22f1f07a898928355edf8ccc87d1780e4b8 GIT binary patch literal 114503 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%0Du#Y3NDZyr6BKQpxgN=vG!^cy!f|| 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 literal 0 HcmV?d00001 diff --git a/aperisolve/static/img/cheatsheet/stegsolve_xor.png b/aperisolve/static/img/cheatsheet/stegsolve_xor.png new file mode 100644 index 0000000000000000000000000000000000000000..4ecb83cb1600b48a934f1f31f93c6cba27f95896 GIT binary patch literal 34670 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�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 literal 0 HcmV?d00001 diff --git a/aperisolve/static/img/cheatsheet/stegsolve_xor2.png b/aperisolve/static/img/cheatsheet/stegsolve_xor2.png new file mode 100644 index 0000000000000000000000000000000000000000..e7143a4f2ead1baa7db8288afa83deecc6607b86 GIT binary patch literal 40704 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 literal 0 HcmV?d00001 diff --git a/aperisolve/static/img/cheatsheet/tweakpng.png b/aperisolve/static/img/cheatsheet/tweakpng.png new file mode 100644 index 0000000000000000000000000000000000000000..b82652d9abf7c157ec333be0cb34a0391b1793dc GIT binary patch literal 31404 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 K=?Y1+!2bc(xL3{q literal 0 HcmV?d00001 diff --git a/aperisolve/static/img/logo.svg b/aperisolve/static/img/logo.svg new file mode 100644 index 0000000..b7e5689 --- /dev/null +++ b/aperisolve/static/img/logo.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/aperisolve/static/img/octo.png b/aperisolve/static/img/octo.png new file mode 100644 index 0000000000000000000000000000000000000000..c9715481ec596ac7c2a550e0633e0f2e1e17c8f9 GIT binary patch literal 2381 zcmeHIi&GP65)Xoy2&^Ol5uaf)3=0ZsKxLIxkO|C}4Iq(+tk1+O9ug5jJW-Uw4Ui!y znE|;ZJX~`*6m&&7QDjS4xd=OeFJw^!L=aqXk(UqD6}WJBWtDYTxBtLaeO=w(*ImE< zb=TL`_=Z4#tC@3W(r7d*fT1E9&4e{2bW`Jtd4CDhs7&HT{_9OzsU^wA3nLbbh^Nsk z*i&Lc)8@}H25>hBL-8|tZ_>S}Kq{!w$|$L-^il0~|Z z-}X3Zv1N(GYOnNE{@Wy8R&eaL&nI?jWTBkXkryjk&;{Kz+Ke!O`h*v9WfN*s zH_|o@&#<7+%XG62$c)LXMZY;_YT7tF$6IQCGX4FTV$RwPO#4J{-lCn`3j7xHEZH$+u+s8| zT!Ut09--Ehmt88IUd>oay&VcS(D`XQYXrQBhS23A;O=!b z5_|%Ek9<}2L|f?k4#q?5!1ywt=mwpC1 zkIaV`Dq^+ER2YHZ8E}fY87T?s#_6Z<75FMhhFpOc;<1`dlqgLO(r?DOoy z;EkP!5K?m)kqKp3k=r=ei`}*C5@$q&DsFXHwW`(G7(r#%nx>un9$$`Mg<6mzc%ky4 zb`E*aRT3rf>%OKaz?t|M6ow%1=A{RhN_I-T%MvDvhPN4N&{MEAQAIVMsT_+k;<(0F zj(u@~LLLDH3vQDlA?$qGsV8z)y4|1UD=r+_rCu>4kgrWqP;x?_XO&%1@KO+?du`~)T za0UAz0g?bSGtR1;Rj9LWhbVwmjQt%rQUm1}|2>k|Sz57$&pRA$#}yEb(syVom=2mD zE2P&*?oCJ6p89>I`&YOK1wdz4yuz6ay!E&Ba+pEPWeZ3JR?ct$e)=XoRyKBk2ZbWj z$?HQ2S-2uZ-2)Cm_s8^*D2C(`(Af1a>jSKAr}y(`8sprR8*M3JOvCFZd#OF)^G3hpPlHnh z*tT_aavG)G>phL!^6`^%91^giEXom+E+BuH%>7FBllS^*38=Ym;mj4@J3bR<=)3uo6tn!Mrg*nvpsZsk#X8{>n zUH>mK{>eGNM<%SD22!N`)f^Mx_6gnRDzA}(EyvInhs0;3QJa5~<72WZBV>J9{Ab3J zQYJ4JNI&s3znhrxSY_m}x-)q)FOI>o$1q#?@T|&5s+VuZSNLO<$>(w}fN;5LVBOdm ztVQnxy}9nV-POx$m6+{3+SE1BTj0OMDOzN0pJaX2qxI$OzE!=Kb=cs(7eH%G%*P)l zKd;0ZdwRJYPrt(o(E&|RqaM|JlUfiYjSLRdV`MIF^KJ;6kP)zBb{tbco&c#B1Gpfe z&^K_DIwT{9)b9|viUL{HRAX?kqsWKU41D<0!MwPy3ou*Ij(kas*!DsvVac81LGD7G z2LUy#J72K{KnDtrH|u@$X>eFJLaZh|1LpE~1Bpk}>|!VU4(g*%fmdeRolyD_2w5S_ zLFWPquOAmKjj@hG@H#Z(^17%)+ucEA+3Sk&qWmHk-Fj9!UZ!B-4--a<=H?bpl#V$G@RtavS@jRXMtvOI5kD#w% z2W_9SkC5+@aCCsB#c_q3F;Rccvpq39);)wlNgM3N99-20EsJ?f z3)c1k8DEC+vJ-Z>`VBu|N4&XwO<{{?A)+4Yj;r4$LP2f*B{dwegmPiYk%qcVAS^;u?RbrSpTpbGdl77-mMd1qus?j&lA=cf#kf4=}@6 zcE;jDXYn$I$xI{CmYDe4J&yL})H1XJ@UnwzU26h)amK)-Br|VVX_H0d0@HE0g~hrb!uISudw(F^N$9Q!BM%nHW< literal 0 HcmV?d00001 diff --git a/aperisolve/static/img/octo2.png b/aperisolve/static/img/octo2.png new file mode 100644 index 0000000000000000000000000000000000000000..f7779602f0c3a176522b7028ae38814f6ad9b73b GIT binary patch literal 6700 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 a72oe=T5s|kl?cDPi4YpPuqvo+/g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); +} + +function capitalize(str) { + if (typeof str !== "string" || str.length === 0) return str; + return str.charAt(0).toUpperCase() + str.slice(1); +} + +function slideUp(element, duration = 400) { + element.style.height = element.offsetHeight + "px"; + element.offsetHeight; // force reflow + element.style.transitionProperty = "height, margin, padding"; + element.style.transitionDuration = duration + "ms"; + element.style.boxSizing = "border-box"; + element.style.overflow = "hidden"; + element.style.height = 0; + element.style.paddingTop = 0; + element.style.paddingBottom = 0; + element.style.marginTop = 0; + element.style.marginBottom = 0; + + window.setTimeout(() => { + element.style.display = "none"; + // Optional: reset styles + element.style.removeProperty("height"); + element.style.removeProperty("padding-top"); + element.style.removeProperty("padding-bottom"); + element.style.removeProperty("margin-top"); + element.style.removeProperty("margin-bottom"); + element.style.removeProperty("overflow"); + element.style.removeProperty("transition-duration"); + element.style.removeProperty("transition-property"); + }, duration); +} + +function formatBytes(bytes) { + if (typeof bytes !== "number" || isNaN(bytes)) return bytes; + const units = ["o", "Ko", "Mo", "Go", "To", "Po"]; + let i = 0; + while (bytes >= 1024 && i < units.length - 1) { + bytes /= 1024; + i++; + } + return `${bytes % 1 === 0 ? bytes : bytes.toFixed(2)} ${units[i]}`; +} + +/** + * Alert functions + */ + +function showAlert(message, alertType, reset) { + const resultDiv = document.getElementById("result-analyzers"); + if (reset) { + resultDiv.innerHTML = ""; + } + resultDiv.innerHTML += `