@woosh/meep-engine 3.8.0 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bundle-worker-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +3 -2
- package/src/avif/encode_image_source.d.ts +70 -0
- package/src/avif/encode_image_source.d.ts.map +1 -0
- package/src/avif/encode_image_source.js +117 -0
- package/src/avif/encoder_worker.js +15 -126
- package/src/avif/index.d.ts +4 -2
- package/src/avif/index.js +21 -2
- package/src/avif/native/DECISIONS.md +537 -0
- package/src/avif/native/NOTICE.md +61 -0
- package/src/avif/native/api/AvifDecoder.d.ts +67 -0
- package/src/avif/native/api/AvifDecoder.d.ts.map +1 -0
- package/src/avif/native/api/AvifDecoder.js +121 -0
- package/src/avif/native/api/apply_transformations.d.ts +30 -0
- package/src/avif/native/api/apply_transformations.d.ts.map +1 -0
- package/src/avif/native/api/apply_transformations.js +120 -0
- package/src/avif/native/api/avif_to_sampler2d.d.ts +25 -0
- package/src/avif/native/api/avif_to_sampler2d.d.ts.map +1 -0
- package/src/avif/native/api/avif_to_sampler2d.js +42 -0
- package/src/avif/native/api/convert_to_rgba.d.ts +54 -0
- package/src/avif/native/api/convert_to_rgba.d.ts.map +1 -0
- package/src/avif/native/api/convert_to_rgba.js +204 -0
- package/src/avif/native/api/decode_avif.d.ts +24 -0
- package/src/avif/native/api/decode_avif.d.ts.map +1 -0
- package/src/avif/native/api/decode_avif.js +111 -0
- package/src/avif/native/api/decode_image_item.d.ts +18 -0
- package/src/avif/native/api/decode_image_item.d.ts.map +1 -0
- package/src/avif/native/api/decode_image_item.js +234 -0
- package/src/avif/native/api/encode_avif.d.ts +73 -0
- package/src/avif/native/api/encode_avif.d.ts.map +1 -0
- package/src/avif/native/api/encode_avif.js +488 -0
- package/src/avif/native/api/sampler2d_to_avif.d.ts +22 -0
- package/src/avif/native/api/sampler2d_to_avif.d.ts.map +1 -0
- package/src/avif/native/api/sampler2d_to_avif.js +108 -0
- package/src/avif/native/av1/decode/Av1FrameContext.d.ts +286 -0
- package/src/avif/native/av1/decode/Av1FrameContext.d.ts.map +1 -0
- package/src/avif/native/av1/decode/Av1FrameContext.js +622 -0
- package/src/avif/native/av1/decode/block_decoded.d.ts +27 -0
- package/src/avif/native/av1/decode/block_decoded.d.ts.map +1 -0
- package/src/avif/native/av1/decode/block_decoded.js +59 -0
- package/src/avif/native/av1/decode/decode_av1_still.d.ts +22 -0
- package/src/avif/native/av1/decode/decode_av1_still.d.ts.map +1 -0
- package/src/avif/native/av1/decode/decode_av1_still.js +309 -0
- package/src/avif/native/av1/decode/decode_coefficients.d.ts +20 -0
- package/src/avif/native/av1/decode/decode_coefficients.d.ts.map +1 -0
- package/src/avif/native/av1/decode/decode_coefficients.js +259 -0
- package/src/avif/native/av1/decode/decode_palette.d.ts +28 -0
- package/src/avif/native/av1/decode/decode_palette.d.ts.map +1 -0
- package/src/avif/native/av1/decode/decode_palette.js +442 -0
- package/src/avif/native/av1/decode/decode_tile.d.ts +14 -0
- package/src/avif/native/av1/decode/decode_tile.d.ts.map +1 -0
- package/src/avif/native/av1/decode/decode_tile.js +1213 -0
- package/src/avif/native/av1/decode/get_scan.d.ts +16 -0
- package/src/avif/native/av1/decode/get_scan.d.ts.map +1 -0
- package/src/avif/native/av1/decode/get_scan.js +138 -0
- package/src/avif/native/av1/decode/read_lr.d.ts +35 -0
- package/src/avif/native/av1/decode/read_lr.d.ts.map +1 -0
- package/src/avif/native/av1/decode/read_lr.js +277 -0
- package/src/avif/native/av1/decode/read_transform_type.d.ts +19 -0
- package/src/avif/native/av1/decode/read_transform_type.d.ts.map +1 -0
- package/src/avif/native/av1/decode/read_transform_type.js +92 -0
- package/src/avif/native/av1/decode/reconstruct.d.ts +36 -0
- package/src/avif/native/av1/decode/reconstruct.d.ts.map +1 -0
- package/src/avif/native/av1/decode/reconstruct.js +241 -0
- package/src/avif/native/av1/decode/transform_type.d.ts +49 -0
- package/src/avif/native/av1/decode/transform_type.d.ts.map +1 -0
- package/src/avif/native/av1/decode/transform_type.js +137 -0
- package/src/avif/native/av1/encode/Av1BlockSnapshot.d.ts +81 -0
- package/src/avif/native/av1/encode/Av1BlockSnapshot.d.ts.map +1 -0
- package/src/avif/native/av1/encode/Av1BlockSnapshot.js +299 -0
- package/src/avif/native/av1/encode/Av1EncodeContext.d.ts +384 -0
- package/src/avif/native/av1/encode/Av1EncodeContext.d.ts.map +1 -0
- package/src/avif/native/av1/encode/Av1EncodeContext.js +590 -0
- package/src/avif/native/av1/encode/build_headers.d.ts +50 -0
- package/src/avif/native/av1/encode/build_headers.d.ts.map +1 -0
- package/src/avif/native/av1/encode/build_headers.js +359 -0
- package/src/avif/native/av1/encode/choose_chroma_alpha.d.ts +26 -0
- package/src/avif/native/av1/encode/choose_chroma_alpha.d.ts.map +1 -0
- package/src/avif/native/av1/encode/choose_chroma_alpha.js +90 -0
- package/src/avif/native/av1/encode/choose_filters.d.ts +21 -0
- package/src/avif/native/av1/encode/choose_filters.d.ts.map +1 -0
- package/src/avif/native/av1/encode/choose_filters.js +318 -0
- package/src/avif/native/av1/encode/choose_restoration.d.ts +35 -0
- package/src/avif/native/av1/encode/choose_restoration.d.ts.map +1 -0
- package/src/avif/native/av1/encode/choose_restoration.js +616 -0
- package/src/avif/native/av1/encode/decode_effort.d.ts +57 -0
- package/src/avif/native/av1/encode/decode_effort.d.ts.map +1 -0
- package/src/avif/native/av1/encode/decode_effort.js +59 -0
- package/src/avif/native/av1/encode/encode_av1_still.d.ts +17 -0
- package/src/avif/native/av1/encode/encode_av1_still.d.ts.map +1 -0
- package/src/avif/native/av1/encode/encode_av1_still.js +194 -0
- package/src/avif/native/av1/encode/encode_effort.d.ts +56 -0
- package/src/avif/native/av1/encode/encode_effort.d.ts.map +1 -0
- package/src/avif/native/av1/encode/encode_effort.js +97 -0
- package/src/avif/native/av1/encode/encode_tile.d.ts +26 -0
- package/src/avif/native/av1/encode/encode_tile.d.ts.map +1 -0
- package/src/avif/native/av1/encode/encode_tile.js +2331 -0
- package/src/avif/native/av1/encode/quantise.d.ts +51 -0
- package/src/avif/native/av1/encode/quantise.d.ts.map +1 -0
- package/src/avif/native/av1/encode/quantise.js +212 -0
- package/src/avif/native/av1/encode/write_coefficients.d.ts +42 -0
- package/src/avif/native/av1/encode/write_coefficients.d.ts.map +1 -0
- package/src/avif/native/av1/encode/write_coefficients.js +367 -0
- package/src/avif/native/av1/encode/write_lr.d.ts +33 -0
- package/src/avif/native/av1/encode/write_lr.d.ts.map +1 -0
- package/src/avif/native/av1/encode/write_lr.js +174 -0
- package/src/avif/native/av1/encode/write_transform_type.d.ts +21 -0
- package/src/avif/native/av1/encode/write_transform_type.d.ts.map +1 -0
- package/src/avif/native/av1/encode/write_transform_type.js +70 -0
- package/src/avif/native/av1/entropy/CdfContext.d.ts +167 -0
- package/src/avif/native/av1/entropy/CdfContext.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/CdfContext.js +433 -0
- package/src/avif/native/av1/entropy/SymbolReader.d.ts +103 -0
- package/src/avif/native/av1/entropy/SymbolReader.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/SymbolReader.js +317 -0
- package/src/avif/native/av1/entropy/SymbolWriter.d.ts +107 -0
- package/src/avif/native/av1/entropy/SymbolWriter.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/SymbolWriter.js +352 -0
- package/src/avif/native/av1/entropy/coefficient_context.d.ts +71 -0
- package/src/avif/native/av1/entropy/coefficient_context.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/coefficient_context.js +325 -0
- package/src/avif/native/av1/entropy/partition_cdf.d.ts +54 -0
- package/src/avif/native/av1/entropy/partition_cdf.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/partition_cdf.js +98 -0
- package/src/avif/native/av1/entropy/symbol_cost.d.ts +37 -0
- package/src/avif/native/av1/entropy/symbol_cost.d.ts.map +1 -0
- package/src/avif/native/av1/entropy/symbol_cost.js +76 -0
- package/src/avif/native/av1/filter/cdef.d.ts +15 -0
- package/src/avif/native/av1/filter/cdef.d.ts.map +1 -0
- package/src/avif/native/av1/filter/cdef.js +313 -0
- package/src/avif/native/av1/filter/loop_filter.d.ts +14 -0
- package/src/avif/native/av1/filter/loop_filter.d.ts.map +1 -0
- package/src/avif/native/av1/filter/loop_filter.js +377 -0
- package/src/avif/native/av1/filter/loop_restoration.d.ts +42 -0
- package/src/avif/native/av1/filter/loop_restoration.d.ts.map +1 -0
- package/src/avif/native/av1/filter/loop_restoration.js +451 -0
- package/src/avif/native/av1/filter/superres.d.ts +18 -0
- package/src/avif/native/av1/filter/superres.d.ts.map +1 -0
- package/src/avif/native/av1/filter/superres.js +86 -0
- package/src/avif/native/av1/grain/FilmGrainState.d.ts +62 -0
- package/src/avif/native/av1/grain/FilmGrainState.d.ts.map +1 -0
- package/src/avif/native/av1/grain/FilmGrainState.js +87 -0
- package/src/avif/native/av1/grain/film_grain.d.ts +16 -0
- package/src/avif/native/av1/grain/film_grain.d.ts.map +1 -0
- package/src/avif/native/av1/grain/film_grain.js +623 -0
- package/src/avif/native/av1/obu/FrameHeader.d.ts +248 -0
- package/src/avif/native/av1/obu/FrameHeader.d.ts.map +1 -0
- package/src/avif/native/av1/obu/FrameHeader.js +381 -0
- package/src/avif/native/av1/obu/ObuHeader.d.ts +53 -0
- package/src/avif/native/av1/obu/ObuHeader.d.ts.map +1 -0
- package/src/avif/native/av1/obu/ObuHeader.js +62 -0
- package/src/avif/native/av1/obu/SequenceHeader.d.ts +157 -0
- package/src/avif/native/av1/obu/SequenceHeader.d.ts.map +1 -0
- package/src/avif/native/av1/obu/SequenceHeader.js +225 -0
- package/src/avif/native/av1/obu/for_each_obu.d.ts +24 -0
- package/src/avif/native/av1/obu/for_each_obu.d.ts.map +1 -0
- package/src/avif/native/av1/obu/for_each_obu.js +50 -0
- package/src/avif/native/av1/obu/parse_frame_header.d.ts +18 -0
- package/src/avif/native/av1/obu/parse_frame_header.d.ts.map +1 -0
- package/src/avif/native/av1/obu/parse_frame_header.js +841 -0
- package/src/avif/native/av1/obu/parse_obu_header.d.ts +23 -0
- package/src/avif/native/av1/obu/parse_obu_header.d.ts.map +1 -0
- package/src/avif/native/av1/obu/parse_obu_header.js +69 -0
- package/src/avif/native/av1/obu/parse_sequence_header.d.ts +17 -0
- package/src/avif/native/av1/obu/parse_sequence_header.d.ts.map +1 -0
- package/src/avif/native/av1/obu/parse_sequence_header.js +263 -0
- package/src/avif/native/av1/obu/write_frame_header.d.ts +16 -0
- package/src/avif/native/av1/obu/write_frame_header.d.ts.map +1 -0
- package/src/avif/native/av1/obu/write_frame_header.js +579 -0
- package/src/avif/native/av1/obu/write_sequence_header.d.ts +17 -0
- package/src/avif/native/av1/obu/write_sequence_header.d.ts.map +1 -0
- package/src/avif/native/av1/obu/write_sequence_header.js +189 -0
- package/src/avif/native/av1/predict/IntraPredictionState.d.ts +49 -0
- package/src/avif/native/av1/predict/IntraPredictionState.d.ts.map +1 -0
- package/src/avif/native/av1/predict/IntraPredictionState.js +58 -0
- package/src/avif/native/av1/predict/intra_filter_type.d.ts +17 -0
- package/src/avif/native/av1/predict/intra_filter_type.d.ts.map +1 -0
- package/src/avif/native/av1/predict/intra_filter_type.js +79 -0
- package/src/avif/native/av1/predict/predict_chroma_from_luma.d.ts +50 -0
- package/src/avif/native/av1/predict/predict_chroma_from_luma.d.ts.map +1 -0
- package/src/avif/native/av1/predict/predict_chroma_from_luma.js +153 -0
- package/src/avif/native/av1/predict/predict_intra.d.ts +42 -0
- package/src/avif/native/av1/predict/predict_intra.d.ts.map +1 -0
- package/src/avif/native/av1/predict/predict_intra.js +803 -0
- package/src/avif/native/av1/predict/predict_palette.d.ts +23 -0
- package/src/avif/native/av1/predict/predict_palette.d.ts.map +1 -0
- package/src/avif/native/av1/predict/predict_palette.js +36 -0
- package/src/avif/native/av1/tables/av1_symbols.d.ts +411 -0
- package/src/avif/native/av1/tables/av1_symbols.d.ts.map +1 -0
- package/src/avif/native/av1/tables/av1_symbols.js +419 -0
- package/src/avif/native/av1/tables/block_tables.d.ts +181 -0
- package/src/avif/native/av1/tables/block_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/block_tables.js +270 -0
- package/src/avif/native/av1/tables/cdf_tables.d.ts +961 -0
- package/src/avif/native/av1/tables/cdf_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/cdf_tables.js +1893 -0
- package/src/avif/native/av1/tables/coefficient_tables.d.ts +41 -0
- package/src/avif/native/av1/tables/coefficient_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/coefficient_tables.js +82 -0
- package/src/avif/native/av1/tables/derived_block_tables.d.ts +15 -0
- package/src/avif/native/av1/tables/derived_block_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/derived_block_tables.js +23 -0
- package/src/avif/native/av1/tables/filter_tables.d.ts +171 -0
- package/src/avif/native/av1/tables/filter_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/filter_tables.js +313 -0
- package/src/avif/native/av1/tables/grain_tables.d.ts +11 -0
- package/src/avif/native/av1/tables/grain_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/grain_tables.js +190 -0
- package/src/avif/native/av1/tables/prediction_tables.d.ts +141 -0
- package/src/avif/native/av1/tables/prediction_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/prediction_tables.js +223 -0
- package/src/avif/native/av1/tables/quantizer_matrix_tables.d.ts +21 -0
- package/src/avif/native/av1/tables/quantizer_matrix_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/quantizer_matrix_tables.js +38 -0
- package/src/avif/native/av1/tables/quantizer_tables.d.ts +21 -0
- package/src/avif/native/av1/tables/quantizer_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/quantizer_tables.js +160 -0
- package/src/avif/native/av1/tables/scan_tables.d.ts +321 -0
- package/src/avif/native/av1/tables/scan_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/scan_tables.js +727 -0
- package/src/avif/native/av1/tables/segmentation_tables.d.ts +31 -0
- package/src/avif/native/av1/tables/segmentation_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/segmentation_tables.js +48 -0
- package/src/avif/native/av1/tables/transform_tables.d.ts +91 -0
- package/src/avif/native/av1/tables/transform_tables.d.ts.map +1 -0
- package/src/avif/native/av1/tables/transform_tables.js +140 -0
- package/src/avif/native/av1/tables/unpack_table.d.ts +33 -0
- package/src/avif/native/av1/tables/unpack_table.d.ts.map +1 -0
- package/src/avif/native/av1/tables/unpack_table.js +73 -0
- package/src/avif/native/av1/transform/forward_transform_2d.d.ts +61 -0
- package/src/avif/native/av1/transform/forward_transform_2d.d.ts.map +1 -0
- package/src/avif/native/av1/transform/forward_transform_2d.js +574 -0
- package/src/avif/native/av1/transform/inverse_transform_1d.d.ts +76 -0
- package/src/avif/native/av1/transform/inverse_transform_1d.d.ts.map +1 -0
- package/src/avif/native/av1/transform/inverse_transform_1d.js +590 -0
- package/src/avif/native/av1/transform/inverse_transform_2d.d.ts +46 -0
- package/src/avif/native/av1/transform/inverse_transform_2d.d.ts.map +1 -0
- package/src/avif/native/av1/transform/inverse_transform_2d.js +180 -0
- package/src/avif/native/av1/util/ceil_log2.d.ts +13 -0
- package/src/avif/native/av1/util/ceil_log2.d.ts.map +1 -0
- package/src/avif/native/av1/util/ceil_log2.js +18 -0
- package/src/avif/native/av1/util/floor_log2.d.ts +20 -0
- package/src/avif/native/av1/util/floor_log2.d.ts.map +1 -0
- package/src/avif/native/av1/util/floor_log2.js +20 -0
- package/src/avif/native/av1/util/round2.d.ts +22 -0
- package/src/avif/native/av1/util/round2.d.ts.map +1 -0
- package/src/avif/native/av1/util/round2.js +27 -0
- package/src/avif/native/av1/util/round2_signed.d.ts +14 -0
- package/src/avif/native/av1/util/round2_signed.d.ts.map +1 -0
- package/src/avif/native/av1/util/round2_signed.js +17 -0
- package/src/avif/native/av1/util/tile_log2.d.ts +16 -0
- package/src/avif/native/av1/util/tile_log2.d.ts.map +1 -0
- package/src/avif/native/av1/util/tile_log2.js +23 -0
- package/src/avif/native/bitstream/BitReader.d.ts +174 -0
- package/src/avif/native/bitstream/BitReader.d.ts.map +1 -0
- package/src/avif/native/bitstream/BitReader.js +391 -0
- package/src/avif/native/bitstream/BitWriter.d.ts +122 -0
- package/src/avif/native/bitstream/BitWriter.d.ts.map +1 -0
- package/src/avif/native/bitstream/BitWriter.js +351 -0
- package/src/avif/native/color/ColourTransform.d.ts +62 -0
- package/src/avif/native/color/ColourTransform.d.ts.map +1 -0
- package/src/avif/native/color/ColourTransform.js +189 -0
- package/src/avif/native/color/YuvImage.d.ts +51 -0
- package/src/avif/native/color/YuvImage.d.ts.map +1 -0
- package/src/avif/native/color/YuvImage.js +66 -0
- package/src/avif/native/color/clamp_sample.d.ts +18 -0
- package/src/avif/native/color/clamp_sample.d.ts.map +1 -0
- package/src/avif/native/color/clamp_sample.js +25 -0
- package/src/avif/native/color/linear_to_transfer.d.ts +24 -0
- package/src/avif/native/color/linear_to_transfer.d.ts.map +1 -0
- package/src/avif/native/color/linear_to_transfer.js +126 -0
- package/src/avif/native/color/primaries.d.ts +20 -0
- package/src/avif/native/color/primaries.d.ts.map +1 -0
- package/src/avif/native/color/primaries.js +94 -0
- package/src/avif/native/color/rgb_row_to_ycbcr.d.ts +20 -0
- package/src/avif/native/color/rgb_row_to_ycbcr.d.ts.map +1 -0
- package/src/avif/native/color/rgb_row_to_ycbcr.js +78 -0
- package/src/avif/native/color/transfer_to_linear.d.ts +49 -0
- package/src/avif/native/color/transfer_to_linear.d.ts.map +1 -0
- package/src/avif/native/color/transfer_to_linear.js +171 -0
- package/src/avif/native/color/upsample_chroma_row.d.ts +35 -0
- package/src/avif/native/color/upsample_chroma_row.d.ts.map +1 -0
- package/src/avif/native/color/upsample_chroma_row.js +89 -0
- package/src/avif/native/color/ycbcr_row_to_rgb.d.ts +23 -0
- package/src/avif/native/color/ycbcr_row_to_rgb.d.ts.map +1 -0
- package/src/avif/native/color/ycbcr_row_to_rgb.js +78 -0
- package/src/avif/native/heif/AvifFile.d.ts +112 -0
- package/src/avif/native/heif/AvifFile.d.ts.map +1 -0
- package/src/avif/native/heif/AvifFile.js +142 -0
- package/src/avif/native/heif/ItemProperty.d.ts +244 -0
- package/src/avif/native/heif/ItemProperty.d.ts.map +1 -0
- package/src/avif/native/heif/ItemProperty.js +321 -0
- package/src/avif/native/heif/find_item_property.d.ts +17 -0
- package/src/avif/native/heif/find_item_property.d.ts.map +1 -0
- package/src/avif/native/heif/find_item_property.js +28 -0
- package/src/avif/native/heif/find_item_references.d.ts +16 -0
- package/src/avif/native/heif/find_item_references.d.ts.map +1 -0
- package/src/avif/native/heif/find_item_references.js +29 -0
- package/src/avif/native/heif/find_items_referencing.d.ts +17 -0
- package/src/avif/native/heif/find_items_referencing.d.ts.map +1 -0
- package/src/avif/native/heif/find_items_referencing.js +36 -0
- package/src/avif/native/heif/parse_avif_file.d.ts +15 -0
- package/src/avif/native/heif/parse_avif_file.d.ts.map +1 -0
- package/src/avif/native/heif/parse_avif_file.js +383 -0
- package/src/avif/native/heif/parse_image_grid.d.ts +18 -0
- package/src/avif/native/heif/parse_image_grid.d.ts.map +1 -0
- package/src/avif/native/heif/parse_image_grid.js +48 -0
- package/src/avif/native/heif/parse_item_property.d.ts +18 -0
- package/src/avif/native/heif/parse_item_property.d.ts.map +1 -0
- package/src/avif/native/heif/parse_item_property.js +243 -0
- package/src/avif/native/heif/read_item_data.d.ts +22 -0
- package/src/avif/native/heif/read_item_data.d.ts.map +1 -0
- package/src/avif/native/heif/read_item_data.js +97 -0
- package/src/avif/native/heif/write_avif_file.d.ts +50 -0
- package/src/avif/native/heif/write_avif_file.d.ts.map +1 -0
- package/src/avif/native/heif/write_avif_file.js +348 -0
- package/src/avif/native/heif/write_item_property.d.ts +16 -0
- package/src/avif/native/heif/write_item_property.d.ts.map +1 -0
- package/src/avif/native/heif/write_item_property.js +182 -0
- package/src/avif/native/index.d.ts +14 -0
- package/src/avif/native/index.d.ts.map +1 -0
- package/src/avif/native/index.js +56 -0
- package/src/avif/native/isobmff/BoxHeader.d.ts +50 -0
- package/src/avif/native/isobmff/BoxHeader.d.ts.map +1 -0
- package/src/avif/native/isobmff/BoxHeader.js +57 -0
- package/src/avif/native/isobmff/BoxWriter.d.ts +118 -0
- package/src/avif/native/isobmff/BoxWriter.d.ts.map +1 -0
- package/src/avif/native/isobmff/BoxWriter.js +264 -0
- package/src/avif/native/isobmff/ByteCursor.d.ts +125 -0
- package/src/avif/native/isobmff/ByteCursor.d.ts.map +1 -0
- package/src/avif/native/isobmff/ByteCursor.js +298 -0
- package/src/avif/native/isobmff/for_each_box.d.ts +23 -0
- package/src/avif/native/isobmff/for_each_box.d.ts.map +1 -0
- package/src/avif/native/isobmff/for_each_box.js +39 -0
- package/src/avif/native/isobmff/read_box_header.d.ts +22 -0
- package/src/avif/native/isobmff/read_box_header.d.ts.map +1 -0
- package/src/avif/native/isobmff/read_box_header.js +59 -0
- package/src/avif/native/isobmff/read_full_box_header.d.ts +26 -0
- package/src/avif/native/isobmff/read_full_box_header.d.ts.map +1 -0
- package/src/avif/native/isobmff/read_full_box_header.js +33 -0
- package/src/avif/threaded_image_encoder.d.ts +7 -2
- package/src/avif/threaded_image_encoder.d.ts.map +1 -1
- package/src/avif/threaded_image_encoder.js +107 -21
- package/src/core/binary/BinaryBuffer.d.ts +40 -0
- package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
- package/src/core/binary/BinaryBuffer.js +100 -0
- package/src/core/binary/hash/crc32.d.ts +16 -0
- package/src/core/binary/hash/crc32.d.ts.map +1 -0
- package/src/core/binary/hash/crc32.js +96 -0
- package/src/core/binary/utf8/utf8_decode.d.ts +21 -0
- package/src/core/binary/utf8/utf8_decode.d.ts.map +1 -0
- package/src/core/binary/utf8/utf8_decode.js +43 -0
- package/src/core/binary/utf8/utf8_encode_into.d.ts +20 -0
- package/src/core/binary/utf8/utf8_encode_into.d.ts.map +1 -0
- package/src/core/binary/utf8/utf8_encode_into.js +48 -0
- package/src/core/binary/utf8/utf8_encoded_length.d.ts +14 -0
- package/src/core/binary/utf8/utf8_encoded_length.d.ts.map +1 -0
- package/src/core/binary/utf8/utf8_encoded_length.js +36 -0
- package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +417 -0
- package/src/core/color/COLOR_REVIEW_2026_08_28.md +779 -0
- package/src/core/color/Color.d.ts +128 -20
- package/src/core/color/Color.d.ts.map +1 -1
- package/src/core/color/Color.js +959 -866
- package/src/core/color/PQ/PQ_constants.d.ts +10 -0
- package/src/core/color/PQ/PQ_constants.d.ts.map +1 -1
- package/src/core/color/PQ/PQ_constants.js +10 -0
- package/src/core/color/PQ/linear_to_PQ.d.ts.map +1 -1
- package/src/core/color/PQ/linear_to_PQ.js +6 -0
- package/src/core/color/REC709_PRIMARIES.d.ts +50 -0
- package/src/core/color/REC709_PRIMARIES.d.ts.map +1 -0
- package/src/core/color/REC709_PRIMARIES.js +53 -0
- package/src/core/color/construct/color_from_hex.d.ts +21 -0
- package/src/core/color/construct/color_from_hex.d.ts.map +1 -0
- package/src/core/color/construct/color_from_hex.js +33 -0
- package/src/core/color/construct/color_from_temperature.d.ts +22 -0
- package/src/core/color/construct/color_from_temperature.d.ts.map +1 -0
- package/src/core/color/construct/color_from_temperature.js +33 -0
- package/src/core/color/construct/color_from_uint24.d.ts +19 -0
- package/src/core/color/construct/color_from_uint24.d.ts.map +1 -0
- package/src/core/color/construct/color_from_uint24.js +26 -0
- package/src/core/color/construct/color_from_uint32.d.ts +20 -0
- package/src/core/color/construct/color_from_uint32.d.ts.map +1 -0
- package/src/core/color/construct/color_from_uint32.js +39 -0
- package/src/core/color/construct/color_gray.d.ts +17 -0
- package/src/core/color/construct/color_gray.d.ts.map +1 -0
- package/src/core/color/construct/color_gray.js +22 -0
- package/src/core/color/hex/hex2rgb.d.ts +1 -11
- package/src/core/color/hex/hex2rgb.d.ts.map +1 -1
- package/src/core/color/hex/hex2rgb.js +7 -24
- package/src/core/color/hex/hex_to_rgb.d.ts +18 -0
- package/src/core/color/hex/hex_to_rgb.d.ts.map +1 -0
- package/src/core/color/hex/hex_to_rgb.js +62 -0
- package/src/core/color/hex/rgb2hex.d.ts +1 -8
- package/src/core/color/hex/rgb2hex.d.ts.map +1 -1
- package/src/core/color/hex/rgb2hex.js +7 -13
- package/src/core/color/hex/rgb_to_hex.d.ts +9 -0
- package/src/core/color/hex/rgb_to_hex.d.ts.map +1 -0
- package/src/core/color/hex/rgb_to_hex.js +13 -0
- package/src/core/color/hex/rgba_to_hex.d.ts +19 -0
- package/src/core/color/hex/rgba_to_hex.d.ts.map +1 -0
- package/src/core/color/hex/rgba_to_hex.js +23 -0
- package/src/core/color/hsv/hsv2rgb.d.ts +1 -12
- package/src/core/color/hsv/hsv2rgb.d.ts.map +1 -1
- package/src/core/color/hsv/hsv2rgb.js +8 -21
- package/src/core/color/hsv/hsv2rgb_float.d.ts +1 -12
- package/src/core/color/hsv/hsv2rgb_float.d.ts.map +1 -1
- package/src/core/color/hsv/hsv2rgb_float.js +8 -56
- package/src/core/color/hsv/hsv_to_rgb.d.ts +13 -0
- package/src/core/color/hsv/hsv_to_rgb.d.ts.map +1 -0
- package/src/core/color/hsv/hsv_to_rgb.js +39 -0
- package/src/core/color/hsv/hsv_to_rgb_uint8.d.ts +13 -0
- package/src/core/color/hsv/hsv_to_rgb_uint8.d.ts.map +1 -0
- package/src/core/color/hsv/hsv_to_rgb_uint8.js +21 -0
- package/src/core/color/hsv/hue_to_rgb_sextant.d.ts +24 -0
- package/src/core/color/hsv/hue_to_rgb_sextant.d.ts.map +1 -0
- package/src/core/color/hsv/hue_to_rgb_sextant.js +67 -0
- package/src/core/color/hsv/rgb2hsv.d.ts +1 -12
- package/src/core/color/hsv/rgb2hsv.d.ts.map +1 -1
- package/src/core/color/hsv/rgb2hsv.js +7 -42
- package/src/core/color/hsv/rgb_to_hsv.d.ts +13 -0
- package/src/core/color/hsv/rgb_to_hsv.d.ts.map +1 -0
- package/src/core/color/hsv/rgb_to_hsv.js +42 -0
- package/src/core/color/hunt/hpe_to_xyz.d.ts +2 -0
- package/src/core/color/hunt/hpe_to_xyz.d.ts.map +1 -0
- package/src/core/color/hunt/hpe_to_xyz.js +4 -0
- package/src/core/color/hunt/xyz_to_hpe.d.ts +1 -6
- package/src/core/color/hunt/xyz_to_hpe.d.ts.map +1 -1
- package/src/core/color/hunt/xyz_to_hpe.js +12 -15
- package/src/core/color/illuminant/D65_spd_tabulated.d.ts.map +1 -1
- package/src/core/color/illuminant/D65_spd_tabulated.js +107 -104
- package/src/core/color/int2rgb.d.ts +1 -10
- package/src/core/color/int2rgb.d.ts.map +1 -1
- package/src/core/color/int2rgb.js +7 -12
- package/src/core/color/int_to_rgb.d.ts +21 -0
- package/src/core/color/int_to_rgb.d.ts.map +1 -0
- package/src/core/color/int_to_rgb.js +33 -0
- package/src/core/color/kelvin/kelvin_to_rgb.d.ts.map +1 -1
- package/src/core/color/kelvin/kelvin_to_rgb.js +22 -2
- package/src/core/color/kelvin/rgb_to_kelvin.d.ts +22 -2
- package/src/core/color/kelvin/rgb_to_kelvin.d.ts.map +1 -1
- package/src/core/color/kelvin/rgb_to_kelvin.js +22 -2
- package/src/core/color/lab/lab_to_xyz.d.ts +20 -0
- package/src/core/color/lab/lab_to_xyz.d.ts.map +1 -0
- package/src/core/color/lab/lab_to_xyz.js +69 -0
- package/src/core/color/oklab/gamut_clip_adaptive_l0.d.ts +34 -0
- package/src/core/color/oklab/gamut_clip_adaptive_l0.d.ts.map +1 -0
- package/src/core/color/oklab/gamut_clip_adaptive_l0.js +46 -0
- package/src/core/color/oklab/gamut_clip_at_l0.d.ts +33 -0
- package/src/core/color/oklab/gamut_clip_at_l0.d.ts.map +1 -0
- package/src/core/color/oklab/gamut_clip_at_l0.js +84 -0
- package/src/core/color/oklab/gamut_clip_preserve_chroma.d.ts +24 -0
- package/src/core/color/oklab/gamut_clip_preserve_chroma.d.ts.map +1 -0
- package/src/core/color/oklab/gamut_clip_preserve_chroma.js +37 -0
- package/src/core/color/oklab/gamut_clip_project_to_lcusp.d.ts +23 -0
- package/src/core/color/oklab/gamut_clip_project_to_lcusp.d.ts.map +1 -0
- package/src/core/color/oklab/gamut_clip_project_to_lcusp.js +46 -0
- package/src/core/color/oklab/linear_srgb_to_okhsl.d.ts +19 -0
- package/src/core/color/oklab/linear_srgb_to_okhsl.d.ts.map +1 -0
- package/src/core/color/oklab/linear_srgb_to_okhsl.js +93 -0
- package/src/core/color/oklab/linear_srgb_to_okhsv.d.ts +12 -4
- package/src/core/color/oklab/linear_srgb_to_okhsv.d.ts.map +1 -1
- package/src/core/color/oklab/linear_srgb_to_okhsv.js +108 -84
- package/src/core/color/oklab/linear_srgb_to_oklab.d.ts +13 -4
- package/src/core/color/oklab/linear_srgb_to_oklab.d.ts.map +1 -1
- package/src/core/color/oklab/linear_srgb_to_oklab.js +28 -19
- package/src/core/color/oklab/okhsl_chroma_bounds.d.ts +51 -0
- package/src/core/color/oklab/okhsl_chroma_bounds.d.ts.map +1 -0
- package/src/core/color/oklab/okhsl_chroma_bounds.js +128 -0
- package/src/core/color/oklab/okhsl_to_linear_srgb.d.ts +19 -0
- package/src/core/color/oklab/okhsl_to_linear_srgb.d.ts.map +1 -0
- package/src/core/color/oklab/okhsl_to_linear_srgb.js +85 -0
- package/src/core/color/oklab/oklab_to_oklch.d.ts +24 -0
- package/src/core/color/oklab/oklab_to_oklch.d.ts.map +1 -0
- package/src/core/color/oklab/oklab_to_oklch.js +35 -0
- package/src/core/color/oklab/oklch_to_oklab.d.ts +18 -0
- package/src/core/color/oklab/oklch_to_oklab.d.ts.map +1 -0
- package/src/core/color/oklab/oklch_to_oklab.js +26 -0
- package/src/core/color/oklab/toe.d.ts +12 -0
- package/src/core/color/oklab/toe.d.ts.map +1 -1
- package/src/core/color/oklab/toe.js +34 -22
- package/src/core/color/operations/color_add.d.ts +21 -0
- package/src/core/color/operations/color_add.d.ts.map +1 -0
- package/src/core/color/operations/color_add.js +23 -0
- package/src/core/color/operations/color_add_scaled.d.ts +20 -0
- package/src/core/color/operations/color_add_scaled.d.ts.map +1 -0
- package/src/core/color/operations/color_add_scaled.js +30 -0
- package/src/core/color/operations/color_clamp.d.ts +22 -0
- package/src/core/color/operations/color_clamp.d.ts.map +1 -0
- package/src/core/color/operations/color_clamp.js +25 -0
- package/src/core/color/operations/color_darken.d.ts +2 -1
- package/src/core/color/operations/color_darken.d.ts.map +1 -1
- package/src/core/color/operations/color_darken.js +25 -24
- package/src/core/color/operations/color_desaturate.d.ts +2 -1
- package/src/core/color/operations/color_desaturate.d.ts.map +1 -1
- package/src/core/color/operations/color_desaturate.js +25 -24
- package/src/core/color/operations/color_get_hsl.d.ts +18 -0
- package/src/core/color/operations/color_get_hsl.d.ts.map +1 -0
- package/src/core/color/operations/color_get_hsl.js +60 -0
- package/src/core/color/operations/color_is_in_gamut.d.ts +20 -0
- package/src/core/color/operations/color_is_in_gamut.d.ts.map +1 -0
- package/src/core/color/operations/color_is_in_gamut.js +30 -0
- package/src/core/color/operations/color_lerp.d.ts +12 -3
- package/src/core/color/operations/color_lerp.d.ts.map +1 -1
- package/src/core/color/operations/color_lerp.js +55 -46
- package/src/core/color/operations/color_lighten.d.ts +9 -5
- package/src/core/color/operations/color_lighten.d.ts.map +1 -1
- package/src/core/color/operations/color_lighten.js +29 -24
- package/src/core/color/operations/color_mix_okhsv_channel.d.ts +24 -0
- package/src/core/color/operations/color_mix_okhsv_channel.d.ts.map +1 -0
- package/src/core/color/operations/color_mix_okhsv_channel.js +48 -0
- package/src/core/color/operations/color_multiply_rgb.d.ts +21 -0
- package/src/core/color/operations/color_multiply_rgb.d.ts.map +1 -0
- package/src/core/color/operations/color_multiply_rgb.js +26 -0
- package/src/core/color/operations/color_saturate.d.ts +9 -5
- package/src/core/color/operations/color_saturate.d.ts.map +1 -1
- package/src/core/color/operations/color_saturate.js +29 -24
- package/src/core/color/operations/color_scale_okhsv_channel.d.ts +1 -1
- package/src/core/color/operations/color_scale_okhsv_channel.d.ts.map +1 -1
- package/src/core/color/operations/color_scale_okhsv_channel.js +58 -45
- package/src/core/color/operations/color_srgb_apply.d.ts +28 -0
- package/src/core/color/operations/color_srgb_apply.d.ts.map +1 -0
- package/src/core/color/operations/color_srgb_apply.js +40 -0
- package/src/core/color/operations/color_sub.d.ts +16 -0
- package/src/core/color/operations/color_sub.d.ts.map +1 -0
- package/src/core/color/operations/color_sub.js +18 -0
- package/src/core/color/parse_color.d.ts +10 -1
- package/src/core/color/parse_color.d.ts.map +1 -1
- package/src/core/color/parse_color.js +100 -84
- package/src/core/color/parse_color_normalized.d.ts +24 -0
- package/src/core/color/parse_color_normalized.d.ts.map +1 -0
- package/src/core/color/parse_color_normalized.js +38 -0
- package/src/core/color/rgb2uint24.d.ts +1 -8
- package/src/core/color/rgb2uint24.d.ts.map +1 -1
- package/src/core/color/rgb2uint24.js +7 -20
- package/src/core/color/rgb2uint32.d.ts +1 -9
- package/src/core/color/rgb2uint32.d.ts.map +1 -1
- package/src/core/color/rgb2uint32.js +7 -18
- package/src/core/color/rgb_to_luminance.d.ts +14 -5
- package/src/core/color/rgb_to_luminance.d.ts.map +1 -1
- package/src/core/color/rgb_to_luminance.js +24 -13
- package/src/core/color/rgb_to_uint24.d.ts +9 -0
- package/src/core/color/rgb_to_uint24.d.ts.map +1 -0
- package/src/core/color/rgb_to_uint24.js +20 -0
- package/src/core/color/rgb_to_uint32.d.ts +10 -0
- package/src/core/color/rgb_to_uint32.d.ts.map +1 -0
- package/src/core/color/rgb_to_uint32.js +21 -0
- package/src/core/color/sRGB/linear_to_sRGB.d.ts +7 -0
- package/src/core/color/sRGB/linear_to_sRGB.d.ts.map +1 -1
- package/src/core/color/sRGB/linear_to_sRGB.js +39 -32
- package/src/core/color/xyz/hpe_to_xyz.d.ts +24 -0
- package/src/core/color/xyz/hpe_to_xyz.d.ts.map +1 -0
- package/src/core/color/xyz/hpe_to_xyz.js +39 -0
- package/src/core/color/xyz/rgb_to_xyz.d.ts +17 -2
- package/src/core/color/xyz/rgb_to_xyz.d.ts.map +1 -1
- package/src/core/color/xyz/rgb_to_xyz.js +44 -18
- package/src/core/color/xyz/xyz_cmf_tabulated.d.ts.map +1 -1
- package/src/core/color/xyz/xyz_cmf_tabulated.js +217 -211
- package/src/core/color/xyz/xyz_cmf_wyman.d.ts +4 -0
- package/src/core/color/xyz/xyz_cmf_wyman.d.ts.map +1 -1
- package/src/core/color/xyz/xyz_cmf_wyman.js +74 -65
- package/src/core/color/xyz/xyz_to_hpe.d.ts +18 -0
- package/src/core/color/xyz/xyz_to_hpe.d.ts.map +1 -0
- package/src/core/color/xyz/xyz_to_hpe.js +33 -0
- package/src/core/color/xyz/xyz_to_rgb.d.ts +17 -2
- package/src/core/color/xyz/xyz_to_rgb.d.ts.map +1 -1
- package/src/core/color/xyz/xyz_to_rgb.js +39 -16
- package/src/core/color/ycxcz/xyz_to_ycxcz.d.ts +7 -2
- package/src/core/color/ycxcz/xyz_to_ycxcz.d.ts.map +1 -1
- package/src/core/color/ycxcz/xyz_to_ycxcz.js +33 -28
- package/src/core/events/signal/Signal.js +820 -820
- package/src/core/math/clamp_index.d.ts +18 -0
- package/src/core/math/clamp_index.d.ts.map +1 -0
- package/src/core/math/clamp_index.js +23 -0
- package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +803 -0
- package/src/engine/asset/loaders/image/jpeg/JpegFrame.d.ts +5 -3
- package/src/engine/asset/loaders/image/jpeg/JpegFrame.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/jpeg/JpegFrame.js +5 -3
- package/src/engine/asset/loaders/image/jpeg/JpegFrameComponent.d.ts +2 -1
- package/src/engine/asset/loaders/image/jpeg/JpegFrameComponent.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/jpeg/JpegFrameComponent.js +2 -1
- package/src/engine/asset/loaders/image/jpeg/JpegImage.d.ts +17 -0
- package/src/engine/asset/loaders/image/jpeg/JpegImage.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/jpeg/JpegImage.js +197 -157
- package/src/engine/asset/loaders/image/jpeg/idct8x8_float.d.ts +0 -1
- package/src/engine/asset/loaders/image/jpeg/idct8x8_float.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/jpeg/idct8x8_float.js +0 -1
- package/src/engine/asset/loaders/image/jpeg/jpeg_component_row.d.ts +28 -0
- package/src/engine/asset/loaders/image/jpeg/jpeg_component_row.d.ts.map +1 -0
- package/src/engine/asset/loaders/image/jpeg/jpeg_component_row.js +31 -0
- package/src/engine/asset/loaders/image/png/PNG.d.ts +3 -18
- package/src/engine/asset/loaders/image/png/PNG.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/PNG.js +3 -139
- package/src/engine/asset/loaders/image/png/PNGReader.d.ts +16 -16
- package/src/engine/asset/loaders/image/png/PNGReader.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/PNGReader.js +143 -160
- package/src/engine/asset/loaders/image/png/chunk/png_chunk_decode_iTXt.js +3 -3
- package/src/engine/asset/loaders/image/png/chunk/png_chunk_decode_zTXt.js +3 -3
- package/src/engine/asset/loaders/image/png/crc32.d.ts +1 -15
- package/src/engine/asset/loaders/image/png/crc32.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/crc32.js +5 -89
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterNone.d.ts +12 -10
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterNone.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterNone.js +20 -45
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterSub.d.ts +2 -1
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterSub.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterSub.js +2 -0
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterUp.d.ts +2 -1
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterUp.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/png/filter/png_filter_unFilterUp.js +2 -0
- package/src/engine/asset/loaders/image/png/filter/png_unfilter.d.ts +22 -0
- package/src/engine/asset/loaders/image/png/filter/png_unfilter.d.ts.map +1 -0
- package/src/engine/asset/loaders/image/png/filter/png_unfilter.js +68 -0
- package/src/engine/asset/loaders/image/png/png_inflate.d.ts +20 -0
- package/src/engine/asset/loaders/image/png/png_inflate.d.ts.map +1 -0
- package/src/engine/asset/loaders/image/png/png_inflate.js +85 -0
- package/src/engine/asset/loaders/image/png/png_unpack_samples.d.ts +22 -0
- package/src/engine/asset/loaders/image/png/png_unpack_samples.d.ts.map +1 -0
- package/src/engine/asset/loaders/image/png/png_unpack_samples.js +38 -0
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +135 -132
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +16 -3
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1157 -1149
- package/src/engine/graphics/render/frame_graph/FrameGraph.js +900 -900
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +72 -81
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +86 -77
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +451 -0
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +625 -0
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_blend.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_blend.js +5 -4
- package/src/shade/renderer/scene/serialization/decode_image_source_hdr.d.ts +14 -3
- package/src/shade/renderer/scene/serialization/decode_image_source_hdr.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/decode_image_source_hdr.js +50 -51
- package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/deserialize_scene.js +531 -521
- package/src/shade/renderer/scene/serialization/write_image_source.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/write_image_source.js +6 -4
- package/src/shade/renderer/shader/chunk/color/chunk_rgb_to_luminance.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/chunk_rgb_to_luminance.js +34 -32
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.d.ts +31 -0
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.js +62 -31
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_inverse_eotf_st2084.d.ts +10 -0
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_inverse_eotf_st2084.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_inverse_eotf_st2084.js +32 -22
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferOETF.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js +22 -21
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts +6 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js +110 -104
- package/src/shade/renderer/shader/chunk/color/xyz/chunk_rgb_to_xyz.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/xyz/chunk_rgb_to_xyz.js +23 -21
- package/src/shade/renderer/shader/chunk/math/chunk_magnitude_floor.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/math/chunk_magnitude_floor.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_magnitude_floor.js +16 -0
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_magnitude_floor.d.ts +10 -0
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_magnitude_floor.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_magnitude_floor.js +17 -0
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_solve_cubic_blinn.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_solve_cubic_blinn.js +7 -1
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_square_root.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_square_root.js +9 -3
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic.js +13 -7
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic_blinn_smallest.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic_blinn_smallest.js +13 -4
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quadratic.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quadratic.js +20 -13
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quartic_neumark.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quartic_neumark.js +8 -4
- package/src/shade/renderer/shader/chunk/mboit/NOTES.md +35 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_2_trigonometric_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_2_trigonometric_moments.js +18 -5
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_3_trigonometric_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_3_trigonometric_moments.js +21 -8
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_4_trigonometric_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_4_trigonometric_moments.js +25 -12
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_generate_trigonometric_moments_4.d.ts +6 -2
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_generate_trigonometric_moments_4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_generate_trigonometric_moments_4.js +42 -35
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_4_power_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_4_power_moments.js +18 -5
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_6_power_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_6_power_moments.js +24 -9
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_8_power_moments.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_compute_transmittance_from_8_power_moments.js +29 -13
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_generate_power_moments_4.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_generate_power_moments_4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/mboit/moments/power/chunk_generate_power_moments_4.js +38 -48
- package/src/view/elements/ColorPickerView.js +296 -296
- package/src/avif/codec/dec/Readme.md +0 -14
- package/src/avif/codec/dec/avif_dec.cpp +0 -234
- package/src/avif/codec/dec/avif_dec.d.ts +0 -3
- package/src/avif/codec/dec/avif_dec.d.ts.map +0 -1
- package/src/avif/codec/dec/avif_dec.js +0 -16
- package/src/avif/codec/dec/avif_dec.wasm +0 -0
- package/src/avif/codec/enc/README.md +0 -37
- package/src/avif/codec/enc/avif_enc.cpp +0 -216
- package/src/avif/codec/enc/avif_enc.d.ts +0 -3
- package/src/avif/codec/enc/avif_enc.d.ts.map +0 -1
- package/src/avif/codec/enc/avif_enc.js +0 -6144
- package/src/avif/codec/enc/avif_enc.wasm +0 -0
- package/src/avif/codec/enc/avif_enc_mt.d.ts +0 -3
- package/src/avif/codec/enc/avif_enc_mt.d.ts.map +0 -1
- package/src/avif/codec/enc/avif_enc_mt.js +0 -6811
- package/src/avif/codec/enc/avif_enc_mt.wasm +0 -0
- package/src/avif/codec/enc/avif_enc_mt.worker.d.mts +0 -2
- package/src/avif/codec/enc/avif_enc_mt.worker.d.mts.map +0 -1
- package/src/avif/codec/enc/avif_enc_mt.worker.d.ts +0 -11
- package/src/avif/codec/enc/avif_enc_mt.worker.d.ts.map +0 -1
- package/src/avif/codec/enc/avif_enc_mt.worker.js +0 -171
- package/src/avif/codec/enc/avif_enc_mt.worker.mjs +0 -1
- package/src/avif/decode.d.ts +0 -3
- package/src/avif/decode.d.ts.map +0 -1
- package/src/avif/decode.js +0 -42
- package/src/avif/encode.d.ts +0 -3
- package/src/avif/encode.d.ts.map +0 -1
- package/src/avif/encode.js +0 -75
- package/src/avif/meta.d.ts +0 -24
- package/src/avif/meta.d.ts.map +0 -1
- package/src/avif/meta.js +0 -23
- package/src/avif/tsconfig.tsbuildinfo +0 -1
- package/src/avif/utils.d.ts +0 -17
- package/src/avif/utils.d.ts.map +0 -1
- package/src/avif/utils.js +0 -31
- package/src/engine/asset/loaders/image/jpeg/idct8x8_fixed.d.ts +0 -23
- package/src/engine/asset/loaders/image/jpeg/idct8x8_fixed.d.ts.map +0 -1
- package/src/engine/asset/loaders/image/jpeg/idct8x8_fixed.js +0 -214
- package/src/engine/asset/loaders/image/png/inflate.d.ts +0 -7
- package/src/engine/asset/loaders/image/png/inflate.d.ts.map +0 -1
- package/src/engine/asset/loaders/image/png/inflate.js +0 -20
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
import { CodeChunk } from "../../../compiler/CodeChunk.js";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Transforms an RGB color in Rec.709 to CIE XYZ.
|
|
5
|
-
* @type {CodeChunk}
|
|
6
|
-
*/
|
|
7
|
-
export const chunk_rgb_to_xyz = CodeChunk.from(
|
|
8
|
-
//language=WGSL
|
|
9
|
-
`
|
|
10
|
-
fn rgb_to_xyz(c: vec3<f32>) -> vec3<f32>{
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
0.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
import { CodeChunk } from "../../../compiler/CodeChunk.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Transforms an RGB color in Rec.709 to CIE XYZ.
|
|
5
|
+
* @type {CodeChunk}
|
|
6
|
+
*/
|
|
7
|
+
export const chunk_rgb_to_xyz = CodeChunk.from(
|
|
8
|
+
//language=WGSL
|
|
9
|
+
`
|
|
10
|
+
fn rgb_to_xyz(c: vec3<f32>) -> vec3<f32>{
|
|
11
|
+
// the same matrix as core/color/xyz/rgb_to_xyz.js, digit for digit; the middle row is
|
|
12
|
+
// REC709_LUMINANCE_R/G/B from core/color/REC709_PRIMARIES.js
|
|
13
|
+
const M = mat3x3(
|
|
14
|
+
0.41239079926595948129, 0.35758433938387796373, 0.18048078840183428751,
|
|
15
|
+
0.21263900587151035754, 0.71516867876775592746, 0.07219231536073371500,
|
|
16
|
+
0.01933081871559185069, 0.11919477979462598791, 0.95053215224966058086
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
return c * M;
|
|
20
|
+
}
|
|
21
|
+
`
|
|
22
|
+
);
|
|
23
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sign-preserving lower bound on magnitude: |result| >= eps, sign kept (zero counts as
|
|
3
|
+
* positive). For divisors that legitimately pass through zero — the quotient stays finite
|
|
4
|
+
* and keeps its direction as the divisor shrinks.
|
|
5
|
+
* @type {CodeChunk}
|
|
6
|
+
*/
|
|
7
|
+
export const chunk_magnitude_floor: CodeChunk;
|
|
8
|
+
import { CodeChunk } from "../../compiler/CodeChunk.js";
|
|
9
|
+
//# sourceMappingURL=chunk_magnitude_floor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_magnitude_floor.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/math/chunk_magnitude_floor.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,oCAFU,SAAS,CASjB;0BAfwB,6BAA6B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CodeChunk } from "../../compiler/CodeChunk.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Sign-preserving lower bound on magnitude: |result| >= eps, sign kept (zero counts as
|
|
5
|
+
* positive). For divisors that legitimately pass through zero — the quotient stays finite
|
|
6
|
+
* and keeps its direction as the divisor shrinks.
|
|
7
|
+
* @type {CodeChunk}
|
|
8
|
+
*/
|
|
9
|
+
export const chunk_magnitude_floor = CodeChunk.from(
|
|
10
|
+
//language=WGSL
|
|
11
|
+
`
|
|
12
|
+
fn magnitude_floor(x: f32, eps: f32) -> f32 {
|
|
13
|
+
return select(min(x, -eps), max(x, eps), x >= 0.0);
|
|
14
|
+
}
|
|
15
|
+
`
|
|
16
|
+
);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lower bound on the magnitude of a complex number: a value with |z| < eps is snapped to
|
|
3
|
+
* the real value (eps, 0). The direction of a vanishing complex number is numerical noise,
|
|
4
|
+
* so only the magnitude needs preserving. For divisors and normalizers that legitimately
|
|
5
|
+
* pass through zero.
|
|
6
|
+
* @type {CodeChunk}
|
|
7
|
+
*/
|
|
8
|
+
export const chunk_complex_magnitude_floor: CodeChunk;
|
|
9
|
+
import { CodeChunk } from "../../../compiler/CodeChunk.js";
|
|
10
|
+
//# sourceMappingURL=chunk_complex_magnitude_floor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_complex_magnitude_floor.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/complex/chunk_complex_magnitude_floor.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,4CAFU,SAAS,CASjB;0BAhBwB,gCAAgC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CodeChunk } from "../../../compiler/CodeChunk.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Lower bound on the magnitude of a complex number: a value with |z| < eps is snapped to
|
|
5
|
+
* the real value (eps, 0). The direction of a vanishing complex number is numerical noise,
|
|
6
|
+
* so only the magnitude needs preserving. For divisors and normalizers that legitimately
|
|
7
|
+
* pass through zero.
|
|
8
|
+
* @type {CodeChunk}
|
|
9
|
+
*/
|
|
10
|
+
export const chunk_complex_magnitude_floor = CodeChunk.from(
|
|
11
|
+
//language=WGSL
|
|
12
|
+
`
|
|
13
|
+
fn complex_magnitude_floor(z: vec2<f32>, eps: f32) -> vec2<f32> {
|
|
14
|
+
return select(z, vec2<f32>(eps, 0.0), dot(z, z) < eps * eps);
|
|
15
|
+
}
|
|
16
|
+
`
|
|
17
|
+
);
|
package/src/shade/renderer/shader/chunk/math/complex/chunk_complex_solve_cubic_blinn.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_complex_solve_cubic_blinn.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/complex/chunk_complex_solve_cubic_blinn.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_complex_solve_cubic_blinn.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/complex/chunk_complex_solve_cubic_blinn.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,8CAFU,SAAS,CAyEjB;0BArFwB,gCAAgC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CodeChunk } from "../../../compiler/CodeChunk.js";
|
|
2
2
|
import { chunk_complex_cubic_root } from "./chunk_complex_cubic_root.js";
|
|
3
|
+
import { chunk_complex_magnitude_floor } from "./chunk_complex_magnitude_floor.js";
|
|
3
4
|
import { chunk_complex_multiply } from "./chunk_complex_multiply.js";
|
|
4
5
|
import { chunk_complex_reciprocal } from "./chunk_complex_reciprocal.js";
|
|
5
6
|
import { chunk_complex_square } from "./chunk_complex_square.js";
|
|
@@ -45,7 +46,11 @@ fn complex_solve_cubic_blinn(
|
|
|
45
46
|
// faceforward: force discriminant_root OPPOSITE to depressed_d so the subtraction below adds
|
|
46
47
|
// magnitudes (avoids catastrophic cancellation). The sign was inverted vs the HLSL reference.
|
|
47
48
|
let discriminant_root_adj = select(discriminant_root, -discriminant_root, dot(discriminant_root, depressed_d) >= 0.0);
|
|
48
|
-
|
|
49
|
+
// cubed_root vanishes at a triple root, its cubic root with it, and the reciprocal
|
|
50
|
+
// below would then be inf/NaN. The snap keeps the reciprocal finite while
|
|
51
|
+
// depressed_c also vanishes there, so the roots still collapse to the correct
|
|
52
|
+
// limit -b_third.
|
|
53
|
+
let cubed_root = complex_magnitude_floor(discriminant_root_adj - depressed_d, 1e-20);
|
|
49
54
|
let first_root = complex_cubic_root(0.5 * cubed_root);
|
|
50
55
|
|
|
51
56
|
let cubic_roots = array<vec2<f32>, 3>(
|
|
@@ -76,5 +81,6 @@ fn complex_solve_cubic_blinn(
|
|
|
76
81
|
chunk_complex_cubic_root,
|
|
77
82
|
chunk_complex_multiply,
|
|
78
83
|
chunk_complex_reciprocal,
|
|
84
|
+
chunk_complex_magnitude_floor,
|
|
79
85
|
]
|
|
80
86
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_complex_square_root.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/complex/chunk_complex_square_root.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_complex_square_root.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/complex/chunk_complex_square_root.js"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,wCAFU,SAAS,CAkBjB;0BA3BwB,gCAAgC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CodeChunk } from "../../../compiler/CodeChunk.js";
|
|
2
|
+
import { chunk_complex_magnitude_floor } from "./chunk_complex_magnitude_floor.js";
|
|
2
3
|
import { chunk_complex_square_root_unsafe } from "./chunk_complex_square_root_unsafe.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -12,11 +13,16 @@ export const chunk_complex_square_root = CodeChunk.from(
|
|
|
12
13
|
//language=WGSL
|
|
13
14
|
`
|
|
14
15
|
fn complex_square_root(z: vec2<f32>) -> vec2<f32>{
|
|
15
|
-
|
|
16
|
+
// The unsafe kernel evaluates 0 * inverseSqrt(0) = NaN at z = 0 — and a vanishing
|
|
17
|
+
// discriminant (a double root) lands exactly there. The snap degrades a double root
|
|
18
|
+
// into a pair 1e-10 apart instead of poisoning both.
|
|
19
|
+
let z_safe = complex_magnitude_floor(z, 1e-20);
|
|
20
|
+
let z_positive_real_part = vec2<f32>(abs(z_safe.x), z_safe.y);
|
|
16
21
|
let computed_root = complex_square_root_unsafe(z_positive_real_part);
|
|
17
|
-
return select(computed_root.yx, computed_root,
|
|
22
|
+
return select(computed_root.yx, computed_root, z_safe.x >= 0.0);
|
|
18
23
|
}
|
|
19
24
|
`, [
|
|
20
|
-
chunk_complex_square_root_unsafe
|
|
25
|
+
chunk_complex_square_root_unsafe,
|
|
26
|
+
chunk_complex_magnitude_floor
|
|
21
27
|
]
|
|
22
28
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_solve_cubic.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_solve_cubic.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic.js"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,gCAFU,SAAS,CAgDjB;0BAzDwB,gCAAgC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CodeChunk } from "../../../compiler/CodeChunk.js";
|
|
2
|
+
import { chunk_safe_sqrt } from "../chunk_safe_sqrt.js";
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Code taken from the blog "Moments in Graphics" by Christoph Peters.
|
|
@@ -34,19 +35,24 @@ fn solve_cubic(coefficient: vec4<f32>) -> vec3<f32> {
|
|
|
34
35
|
delta.x
|
|
35
36
|
);
|
|
36
37
|
|
|
37
|
-
// Take the cubic root of a normalized complex number
|
|
38
|
-
|
|
38
|
+
// Take the cubic root of a normalized complex number.
|
|
39
|
+
// Both radicands are >= 0 whenever the promised three real roots exist; rounding can
|
|
40
|
+
// push either across zero near a repeated root, and sqrt would then poison every root
|
|
41
|
+
// with NaN.
|
|
42
|
+
let theta = atan2(safe_sqrt(discriminant), -depressed.x) / 3.0;
|
|
39
43
|
let cubic_root = vec2<f32>(cos(theta), sin(theta));
|
|
40
|
-
|
|
41
|
-
// Compute the three roots, scale appropriately and
|
|
44
|
+
|
|
45
|
+
// Compute the three roots, scale appropriately and
|
|
42
46
|
// revert the depression transform
|
|
43
47
|
let root = vec3<f32>(
|
|
44
48
|
cubic_root.x,
|
|
45
49
|
dot(vec2<f32>(-0.5, -0.5 * sqrt(3.0)), cubic_root),
|
|
46
50
|
dot(vec2<f32>(-0.5, 0.5 * sqrt(3.0)), cubic_root)
|
|
47
51
|
);
|
|
48
|
-
|
|
49
|
-
return 2.0 *
|
|
52
|
+
|
|
53
|
+
return 2.0 * safe_sqrt(-depressed.y) * root + vec3<f32>(-coeff.z);
|
|
50
54
|
}
|
|
51
|
-
|
|
55
|
+
`, [
|
|
56
|
+
chunk_safe_sqrt
|
|
57
|
+
]
|
|
52
58
|
);
|
package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic_blinn_smallest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_solve_cubic_blinn_smallest.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic_blinn_smallest.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_solve_cubic_blinn_smallest.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_cubic_blinn_smallest.js"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,+CAFU,SAAS,CA4CjB;0BArDwB,gCAAgC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { CodeChunk } from "../../../compiler/CodeChunk.js";
|
|
2
|
+
import { chunk_magnitude_floor } from "../chunk_magnitude_floor.js";
|
|
3
|
+
import { chunk_safe_sqrt } from "../chunk_safe_sqrt.js";
|
|
2
4
|
|
|
3
5
|
/**
|
|
4
6
|
* Given coefficients of a cubic polynomial
|
|
@@ -26,9 +28,11 @@ fn solve_cubic_blinn_smallest(coeffs: vec4<f32>) -> f32 {
|
|
|
26
28
|
delta.z,
|
|
27
29
|
-coeff.x * delta.y + 2.0 * coeff.y * delta.z
|
|
28
30
|
);
|
|
29
|
-
|
|
31
|
+
// Both radicands are >= 0 whenever the promised three real roots exist; rounding can
|
|
32
|
+
// push either across zero near a repeated root, and sqrt would then return NaN.
|
|
33
|
+
let theta = abs(atan2(coeff.x * safe_sqrt(discriminant), -depressed.y)) / 3.0;
|
|
30
34
|
let sin_cos = vec2<f32>(sin(theta), cos(theta));
|
|
31
|
-
let tmp = 2.0 *
|
|
35
|
+
let tmp = 2.0 * safe_sqrt(-depressed.x);
|
|
32
36
|
let x = vec2<f32>(
|
|
33
37
|
tmp * sin_cos.y,
|
|
34
38
|
tmp * (-0.5 * sin_cos.y - 0.5 * sqrt(3.0) * sin_cos.x)
|
|
@@ -39,7 +43,12 @@ fn solve_cubic_blinn_smallest(coeffs: vec4<f32>) -> f32 {
|
|
|
39
43
|
x.x + x.y < 2.0 * coeff.y
|
|
40
44
|
);
|
|
41
45
|
|
|
42
|
-
|
|
46
|
+
// s.y reaches 0 only when the smallest root escapes to infinity; keep it
|
|
47
|
+
// huge-but-finite rather than inf/NaN.
|
|
48
|
+
return s.x / magnitude_floor(s.y, 1e-10);
|
|
43
49
|
}
|
|
44
|
-
|
|
50
|
+
`, [
|
|
51
|
+
chunk_safe_sqrt,
|
|
52
|
+
chunk_magnitude_floor
|
|
53
|
+
]
|
|
45
54
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_solve_quadratic.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quadratic.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_solve_quadratic.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quadratic.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,oCAFU,SAAS,CAqCjB;0BA5CwB,gCAAgC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CodeChunk } from "../../../compiler/CodeChunk.js";
|
|
2
|
+
import { chunk_safe_sqrt } from "../chunk_safe_sqrt.js";
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Given coefficients of a quadratic polynomial A*x^2+B*x+C, this function
|
|
@@ -13,27 +14,33 @@ fn solve_quadratic(coeffs: vec3<f32>) -> vec2<f32>{
|
|
|
13
14
|
let a = coeffs[0];
|
|
14
15
|
let b = coeffs[1] * 0.5;
|
|
15
16
|
let c = coeffs[2];
|
|
16
|
-
|
|
17
|
+
|
|
17
18
|
var x1: f32;
|
|
18
19
|
var x2: f32;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
|
|
21
|
+
// >= 0 whenever the promised two real roots exist; rounding can cross zero at a
|
|
22
|
+
// double root.
|
|
23
|
+
let tmp = safe_sqrt(b * b - a * c);
|
|
24
|
+
|
|
25
|
+
// The citardauq denominators are >= 0 in their branches, and reach 0 only for a
|
|
26
|
+
// double root at x = 0 (b = tmp = 0 forces c = 0), where the division becomes
|
|
27
|
+
// 0/0 = NaN. The floor turns that root into an exact 0.
|
|
23
28
|
if (b >= 0.0) {
|
|
24
|
-
|
|
25
|
-
x1 = (-c) / (b + tmp);
|
|
29
|
+
|
|
30
|
+
x1 = (-c) / max(b + tmp, 1e-20);
|
|
26
31
|
x2 = (-b - tmp) / a;
|
|
27
|
-
|
|
32
|
+
|
|
28
33
|
} else {
|
|
29
|
-
|
|
34
|
+
|
|
30
35
|
x1 = (-b + tmp) / a;
|
|
31
|
-
x2 = c / (-b + tmp);
|
|
32
|
-
|
|
36
|
+
x2 = c / max(-b + tmp, 1e-20);
|
|
37
|
+
|
|
33
38
|
}
|
|
34
|
-
|
|
39
|
+
|
|
35
40
|
return vec2<f32>(x1, x2);
|
|
36
41
|
}
|
|
37
|
-
|
|
42
|
+
`, [
|
|
43
|
+
chunk_safe_sqrt
|
|
44
|
+
]
|
|
38
45
|
);
|
|
39
46
|
|
package/src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quartic_neumark.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_solve_quartic_neumark.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quartic_neumark.js"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,0CAFU,SAAS,
|
|
1
|
+
{"version":3,"file":"chunk_solve_quartic_neumark.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/math/polynomial/chunk_solve_quartic_neumark.js"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,0CAFU,SAAS,CAqEjB;0BA9EwB,gCAAgC"}
|
|
@@ -41,11 +41,15 @@ fn solve_quartic_neumark(coeffs: array<f32, 5>) -> vec4<f32> {
|
|
|
41
41
|
var h: f32;
|
|
42
42
|
var h_small: f32;
|
|
43
43
|
|
|
44
|
-
// Compute the coefficients of the quadratics adaptively using the two
|
|
45
|
-
// proposed factorizations by Neumark. Choose the appropriate
|
|
44
|
+
// Compute the coefficients of the quadratics adaptively using the two
|
|
45
|
+
// proposed factorizations by Neumark. Choose the appropriate
|
|
46
46
|
// factorizations using the heuristic proposed by Herbison-Evans.
|
|
47
|
+
// Either radicand is >= 0 whenever the promised four real roots exist, and rounding
|
|
48
|
+
// can push it across zero near a repeated root; tmp also divides the linear terms, so
|
|
49
|
+
// it is floored to stay real AND nonzero — a paired root degrades into two roots a
|
|
50
|
+
// hair apart instead of an inf/NaN cascade.
|
|
47
51
|
if (y < 0.0 || (zz + f_e) * bb_fy > zz_f_e * (bb + fy)) {
|
|
48
|
-
let tmp = sqrt(bb_fy);
|
|
52
|
+
let tmp = sqrt(max(bb_fy, 1e-20));
|
|
49
53
|
g = (b + tmp) * 0.5;
|
|
50
54
|
g_small = (b - tmp) * 0.5;
|
|
51
55
|
|
|
@@ -53,7 +57,7 @@ fn solve_quartic_neumark(coeffs: array<f32, 5>) -> vec4<f32> {
|
|
|
53
57
|
h = z * 0.5 + tmp2;
|
|
54
58
|
h_small = z * 0.5 - tmp2;
|
|
55
59
|
} else {
|
|
56
|
-
let tmp = sqrt(zz_f_e);
|
|
60
|
+
let tmp = sqrt(max(zz_f_e, 1e-20));
|
|
57
61
|
h = (z + tmp) * 0.5;
|
|
58
62
|
h_small = (z - tmp) * 0.5;
|
|
59
63
|
|
|
@@ -1,4 +1,38 @@
|
|
|
1
1
|
Alan Wake 2 talk references moment-based OIT, they used it due to simplicity of implementation and integration.
|
|
2
2
|
|
|
3
3
|
* https://github.com/fedoriusv/V3DGameEngine/blob/1f3ef7ad93ee023dfb8f00518f40e55a46b68fe4/Engine/Data/Shaders/transparency_mboit.hlsl#L244
|
|
4
|
-
* https://github.com/AlicesoftHumika/UnityOIT/blob/612c3c04263acb22980f33fa3cb2d3653ed389ff/Assets/Shader/MBOIT/MomentOIT.hlsli#L123
|
|
4
|
+
* https://github.com/AlicesoftHumika/UnityOIT/blob/612c3c04263acb22980f33fa3cb2d3653ed389ff/Assets/Shader/MBOIT/MomentOIT.hlsli#L123
|
|
5
|
+
|
|
6
|
+
## Numerical guards
|
|
7
|
+
|
|
8
|
+
The reference HLSL divides by quantities that legitimately reach zero; the live
|
|
9
|
+
4-power-moment chunk guards its inline quadratic (magnitude clamp on `c[2]`, discriminant
|
|
10
|
+
floor, citardauq root recovery), and the unused 6/8-power and trigonometric variants carry
|
|
11
|
+
the same treatment so they are safe to wire up later:
|
|
12
|
+
|
|
13
|
+
* Deflated-polynomial leading coefficients are clamped through `magnitude_floor` /
|
|
14
|
+
`complex_magnitude_floor` at 1e-4 **of the largest lower coefficient** before entering a
|
|
15
|
+
root solver. The ratio is a range budget, not a precision limit: the solvers normalize
|
|
16
|
+
by the leading coefficient, and normalized coefficients <= ~1e4 keep every solver
|
|
17
|
+
intermediate inside f32 range even when the pivot scaling has amplified the whole
|
|
18
|
+
vector, while the escaped support point out at ~1e4 carries negligible weight in the
|
|
19
|
+
reconstruction.
|
|
20
|
+
* Divided-difference denominators (support-point separations) are floored at the same
|
|
21
|
+
1e-4 — coincident support points otherwise produce 0/0 = NaN.
|
|
22
|
+
* Solver-internal radicands that are non-negative under the "all real roots" contract are
|
|
23
|
+
floored (`safe_sqrt`, or `max(x, 1e-20)` where the root also divides, as in Neumark's
|
|
24
|
+
`tmp`) — rounding pushes them across zero near repeated roots.
|
|
25
|
+
* `complex_square_root` snaps `|z| < 1e-20` to `(1e-20, 0)`: the unsafe kernel evaluates
|
|
26
|
+
`0 * inverseSqrt(0) = NaN` at zero, exactly where a double root lands.
|
|
27
|
+
`complex_solve_cubic_blinn` snaps its `cubed_root` the same way (triple root).
|
|
28
|
+
|
|
29
|
+
The generate chunks (power and trigonometric) return the fragment's raw contribution as a
|
|
30
|
+
struct; summing belongs to additive blending. The reference's quantized-storage variant
|
|
31
|
+
(quantize + normalize + offset against the already-accumulated moments, an ROV) is
|
|
32
|
+
deliberately not ported — it cannot be expressed through additive blending.
|
|
33
|
+
|
|
34
|
+
Specs sit next to the chunks. The division singularities are pinned with exactly-singular
|
|
35
|
+
dyadic moment vectors, because the WGSL emulator computes in f64 — inputs must collapse
|
|
36
|
+
the leading coefficient to exactly 0.0, not merely near it. The emulator also does not
|
|
37
|
+
propagate writes through pointer-to-scalar parameters, which is why the generate chunks
|
|
38
|
+
return structs instead of filling scalar out-parameters.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_compute_transmittance_from_2_trigonometric_moments.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_2_trigonometric_moments.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_compute_transmittance_from_2_trigonometric_moments.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_2_trigonometric_moments.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,uEAFU,SAAS,CA6GjB;0BA3HwB,mCAAmC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CodeChunk } from "../../../../compiler/CodeChunk.js";
|
|
2
2
|
import { chunk_complex_conjugate } from "../../../math/complex/chunk_complex_conjugate.js";
|
|
3
3
|
import { chunk_complex_divide } from "../../../math/complex/chunk_complex_divide.js";
|
|
4
|
+
import { chunk_complex_magnitude_floor } from "../../../math/complex/chunk_complex_magnitude_floor.js";
|
|
4
5
|
import { chunk_complex_divide_real } from "../../../math/complex/chunk_complex_divide_real.js";
|
|
5
6
|
import { chunk_complex_multiply } from "../../../math/complex/chunk_complex_multiply.js";
|
|
6
7
|
import { chunk_complex_real_part } from "../../../math/complex/chunk_complex_real_part.js";
|
|
@@ -60,8 +61,17 @@ fn compute_transmittance_from_2_trigonometric_moments(
|
|
|
60
61
|
c[1] -= complex_multiply(complex_conjugate(l21), c[2]);
|
|
61
62
|
c[0] -= complex_multiply(complex_conjugate(l10), c[1]) + complex_multiply(complex_conjugate(l20), c[2]);
|
|
62
63
|
|
|
63
|
-
// Compute roots of the polynomial
|
|
64
|
-
|
|
64
|
+
// Compute roots of the polynomial.
|
|
65
|
+
// c[2] -> 0 when the canonical distribution needs fewer support points than the
|
|
66
|
+
// solver assumes (e.g. the query sitting on a support point of a sparse pixel); the
|
|
67
|
+
// solver normalizes by it, which unguarded throws the spurious roots to inf/NaN and
|
|
68
|
+
// poisons the weights below. Floored, they land huge-but-finite off the circle where
|
|
69
|
+
// their contribution stays negligible. The floor is relative to the largest lower
|
|
70
|
+
// coefficient — the Toeplitz pivot scaling can amplify the whole vector — so the
|
|
71
|
+
// solver-normalized coefficients stay <= ~1e4 and every solver intermediate fits f32.
|
|
72
|
+
let c_scale = max(1.0, sqrt(max(dot(c[0], c[0]), dot(c[1], c[1]))));
|
|
73
|
+
let c_2 = complex_magnitude_floor(c[2], 1e-4 * c_scale);
|
|
74
|
+
let roots = complex_solve_quadratic(complex_conjugate(c_2), complex_conjugate(c[1]), complex_conjugate(c[0]));
|
|
65
75
|
|
|
66
76
|
// Figure out how to weight the weights
|
|
67
77
|
let depth_parameter = circle_to_parameter(circle_point);
|
|
@@ -77,9 +87,11 @@ fn compute_transmittance_from_2_trigonometric_moments(
|
|
|
77
87
|
let f0 = weight_factor[0];
|
|
78
88
|
let f1 = weight_factor[1];
|
|
79
89
|
let f2 = weight_factor[2];
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
let
|
|
90
|
+
// Coincident support points zero these separations, and complex division by (0, 0)
|
|
91
|
+
// is NaN. Floored, a merged pair contributes one bounded term instead.
|
|
92
|
+
let f01 = complex_divide_real(f1 - f0, complex_magnitude_floor(z[1] - z[0], 1e-4));
|
|
93
|
+
let f12 = complex_divide_real(f2 - f1, complex_magnitude_floor(z[2] - z[1], 1e-4));
|
|
94
|
+
let f012 = complex_divide(f12 - f01, complex_magnitude_floor(z[2] - z[0], 1e-4));
|
|
83
95
|
|
|
84
96
|
var polynomial = array<vec2<f32>, 3>();
|
|
85
97
|
polynomial[0] = f012;
|
|
@@ -104,6 +116,7 @@ fn compute_transmittance_from_2_trigonometric_moments(
|
|
|
104
116
|
chunk_complex_divide,
|
|
105
117
|
chunk_complex_solve_quadratic,
|
|
106
118
|
chunk_complex_conjugate,
|
|
119
|
+
chunk_complex_magnitude_floor,
|
|
107
120
|
//
|
|
108
121
|
chunk_circle_to_parameter,
|
|
109
122
|
chunk_get_root_weight_factor,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_compute_transmittance_from_3_trigonometric_moments.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_3_trigonometric_moments.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_compute_transmittance_from_3_trigonometric_moments.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_3_trigonometric_moments.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,uEAFU,SAAS,CAkIjB;0BAhJwB,mCAAmC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CodeChunk } from "../../../../compiler/CodeChunk.js";
|
|
2
2
|
import { chunk_complex_conjugate } from "../../../math/complex/chunk_complex_conjugate.js";
|
|
3
3
|
import { chunk_complex_divide } from "../../../math/complex/chunk_complex_divide.js";
|
|
4
|
+
import { chunk_complex_magnitude_floor } from "../../../math/complex/chunk_complex_magnitude_floor.js";
|
|
4
5
|
import { chunk_complex_divide_real } from "../../../math/complex/chunk_complex_divide_real.js";
|
|
5
6
|
import { chunk_complex_multiply } from "../../../math/complex/chunk_complex_multiply.js";
|
|
6
7
|
import { chunk_complex_real_part } from "../../../math/complex/chunk_complex_real_part.js";
|
|
@@ -71,8 +72,17 @@ fn compute_transmittance_from_3_trigonometric_moments(
|
|
|
71
72
|
c[1] -= complex_multiply(complex_conjugate(l21), c[2]) + complex_multiply(complex_conjugate(l31), c[3]);
|
|
72
73
|
c[0] -= complex_multiply(complex_conjugate(l10), c[1]) + complex_multiply(complex_conjugate(l20), c[2]) + complex_multiply(complex_conjugate(l30), c[3]);
|
|
73
74
|
|
|
74
|
-
// Compute roots of the polynomial
|
|
75
|
-
|
|
75
|
+
// Compute roots of the polynomial.
|
|
76
|
+
// c[3] -> 0 when the canonical distribution needs fewer support points than the
|
|
77
|
+
// solver assumes (e.g. the query sitting on a support point of a sparse pixel); the
|
|
78
|
+
// solver normalizes by it, which unguarded throws the spurious roots to inf/NaN and
|
|
79
|
+
// poisons the weights below. Floored, they land huge-but-finite off the circle where
|
|
80
|
+
// their contribution stays negligible. The floor is relative to the largest lower
|
|
81
|
+
// coefficient — the Toeplitz pivot scaling can amplify the whole vector — so the
|
|
82
|
+
// solver-normalized coefficients stay <= ~1e4 and every solver intermediate fits f32.
|
|
83
|
+
let c_scale = max(1.0, sqrt(max(dot(c[0], c[0]), max(dot(c[1], c[1]), dot(c[2], c[2])))));
|
|
84
|
+
let c_3 = complex_magnitude_floor(c[3], 1e-4 * c_scale);
|
|
85
|
+
let roots = complex_solve_cubic_blinn(complex_conjugate(c_3), complex_conjugate(c[2]), complex_conjugate(c[1]), complex_conjugate(c[0]));
|
|
76
86
|
|
|
77
87
|
// Figure out how to weight the weights
|
|
78
88
|
let depth_parameter = circle_to_parameter(circle_point);
|
|
@@ -89,12 +99,14 @@ fn compute_transmittance_from_3_trigonometric_moments(
|
|
|
89
99
|
let f1 = weight_factor[1];
|
|
90
100
|
let f2 = weight_factor[2];
|
|
91
101
|
let f3 = weight_factor[3];
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
let
|
|
95
|
-
let
|
|
96
|
-
let
|
|
97
|
-
let
|
|
102
|
+
// Coincident support points zero these separations, and complex division by (0, 0)
|
|
103
|
+
// is NaN. Floored, a merged pair contributes one bounded term instead.
|
|
104
|
+
let f01 = complex_divide_real(f1 - f0, complex_magnitude_floor(z[1] - z[0], 1e-4));
|
|
105
|
+
let f12 = complex_divide_real(f2 - f1, complex_magnitude_floor(z[2] - z[1], 1e-4));
|
|
106
|
+
let f23 = complex_divide_real(f3 - f2, complex_magnitude_floor(z[3] - z[2], 1e-4));
|
|
107
|
+
let f012 = complex_divide(f12 - f01, complex_magnitude_floor(z[2] - z[0], 1e-4));
|
|
108
|
+
let f123 = complex_divide(f23 - f12, complex_magnitude_floor(z[3] - z[1], 1e-4));
|
|
109
|
+
let f0123 = complex_divide(f123 - f012, complex_magnitude_floor(z[3] - z[0], 1e-4));
|
|
98
110
|
|
|
99
111
|
var polynomial = array<vec2<f32>, 4>();
|
|
100
112
|
polynomial[0] = f0123;
|
|
@@ -124,6 +136,7 @@ fn compute_transmittance_from_3_trigonometric_moments(
|
|
|
124
136
|
chunk_complex_divide_real,
|
|
125
137
|
chunk_complex_conjugate,
|
|
126
138
|
chunk_complex_solve_cubic_blinn,
|
|
139
|
+
chunk_complex_magnitude_floor,
|
|
127
140
|
|
|
128
141
|
//
|
|
129
142
|
chunk_circle_to_parameter,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_compute_transmittance_from_4_trigonometric_moments.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_4_trigonometric_moments.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_compute_transmittance_from_4_trigonometric_moments.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_compute_transmittance_from_4_trigonometric_moments.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,uEAFU,SAAS,CAuJjB;0BArKwB,mCAAmC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CodeChunk } from "../../../../compiler/CodeChunk.js";
|
|
2
2
|
import { chunk_complex_conjugate } from "../../../math/complex/chunk_complex_conjugate.js";
|
|
3
3
|
import { chunk_complex_divide } from "../../../math/complex/chunk_complex_divide.js";
|
|
4
|
+
import { chunk_complex_magnitude_floor } from "../../../math/complex/chunk_complex_magnitude_floor.js";
|
|
4
5
|
import { chunk_complex_divide_real } from "../../../math/complex/chunk_complex_divide_real.js";
|
|
5
6
|
import { chunk_complex_multiply } from "../../../math/complex/chunk_complex_multiply.js";
|
|
6
7
|
import { chunk_complex_real_part } from "../../../math/complex/chunk_complex_real_part.js";
|
|
@@ -82,8 +83,17 @@ fn compute_transmittance_from_4_trigonometric_moments(
|
|
|
82
83
|
c[1] -= complex_multiply(complex_conjugate(l21), c[2]) + complex_multiply(complex_conjugate(l31), c[3]) + complex_multiply(complex_conjugate(l41), c[4]);
|
|
83
84
|
c[0] -= complex_multiply(complex_conjugate(l10), c[1]) + complex_multiply(complex_conjugate(l20), c[2]) + complex_multiply(complex_conjugate(l30), c[3]) + complex_multiply(complex_conjugate(l40), c[4]);
|
|
84
85
|
|
|
85
|
-
// Compute roots of the polynomial
|
|
86
|
-
|
|
86
|
+
// Compute roots of the polynomial.
|
|
87
|
+
// c[4] -> 0 when the canonical distribution needs fewer support points than the
|
|
88
|
+
// solver assumes (e.g. the query sitting on a support point of a sparse pixel); the
|
|
89
|
+
// solver normalizes by it, which unguarded throws the spurious roots to inf/NaN and
|
|
90
|
+
// poisons the weights below. Floored, they land huge-but-finite off the circle where
|
|
91
|
+
// their contribution stays negligible. The floor is relative to the largest lower
|
|
92
|
+
// coefficient — the Toeplitz pivot scaling can amplify the whole vector — so the
|
|
93
|
+
// solver-normalized coefficients stay <= ~1e4 and every solver intermediate fits f32.
|
|
94
|
+
let c_scale = max(1.0, sqrt(max(max(dot(c[0], c[0]), dot(c[1], c[1])), max(dot(c[2], c[2]), dot(c[3], c[3])))));
|
|
95
|
+
let c_4 = complex_magnitude_floor(c[4], 1e-4 * c_scale);
|
|
96
|
+
let roots = complex_solve_quartic_neumark(complex_conjugate(c_4), complex_conjugate(c[3]), complex_conjugate(c[2]), complex_conjugate(c[1]), complex_conjugate(c[0]));
|
|
87
97
|
|
|
88
98
|
// Figure out how to weight the weights
|
|
89
99
|
let depth_parameter = circle_to_parameter(circle_point);
|
|
@@ -101,16 +111,18 @@ fn compute_transmittance_from_4_trigonometric_moments(
|
|
|
101
111
|
let f2 = weight_factor[2];
|
|
102
112
|
let f3 = weight_factor[3];
|
|
103
113
|
let f4 = weight_factor[4];
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
let
|
|
107
|
-
let
|
|
108
|
-
let
|
|
109
|
-
let
|
|
110
|
-
let
|
|
111
|
-
let
|
|
112
|
-
let
|
|
113
|
-
let
|
|
114
|
+
// Coincident support points zero these separations, and complex division by (0, 0)
|
|
115
|
+
// is NaN. Floored, a merged pair contributes one bounded term instead.
|
|
116
|
+
let f01 = complex_divide_real(f1 - f0, complex_magnitude_floor(z[1] - z[0], 1e-4));
|
|
117
|
+
let f12 = complex_divide_real(f2 - f1, complex_magnitude_floor(z[2] - z[1], 1e-4));
|
|
118
|
+
let f23 = complex_divide_real(f3 - f2, complex_magnitude_floor(z[3] - z[2], 1e-4));
|
|
119
|
+
let f34 = complex_divide_real(f4 - f3, complex_magnitude_floor(z[4] - z[3], 1e-4));
|
|
120
|
+
let f012 = complex_divide(f12 - f01, complex_magnitude_floor(z[2] - z[0], 1e-4));
|
|
121
|
+
let f123 = complex_divide(f23 - f12, complex_magnitude_floor(z[3] - z[1], 1e-4));
|
|
122
|
+
let f234 = complex_divide(f34 - f23, complex_magnitude_floor(z[4] - z[2], 1e-4));
|
|
123
|
+
let f0123 = complex_divide(f123 - f012, complex_magnitude_floor(z[3] - z[0], 1e-4));
|
|
124
|
+
let f1234 = complex_divide(f234 - f123, complex_magnitude_floor(z[4] - z[1], 1e-4));
|
|
125
|
+
let f01234 = complex_divide(f1234 - f0123, complex_magnitude_floor(z[4] - z[0], 1e-4));
|
|
114
126
|
|
|
115
127
|
var polynomial = array<vec2<f32>, 5>();
|
|
116
128
|
polynomial[0] = f01234;
|
|
@@ -146,6 +158,7 @@ fn compute_transmittance_from_4_trigonometric_moments(
|
|
|
146
158
|
chunk_complex_divide_real,
|
|
147
159
|
chunk_complex_conjugate,
|
|
148
160
|
chunk_complex_solve_quartic_neumark,
|
|
161
|
+
chunk_complex_magnitude_floor,
|
|
149
162
|
//
|
|
150
163
|
chunk_circle_to_parameter,
|
|
151
164
|
chunk_get_root_weight_factor,
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* This function
|
|
3
|
-
* trigonometric moments for NUM_MOMENTS = 4 with SINGLE_PRECISION = true.
|
|
2
|
+
* This function computes one fragment's contribution to the vector of
|
|
3
|
+
* trigonometric moments, for NUM_MOMENTS = 4 with SINGLE_PRECISION = true.
|
|
4
|
+
* b_12 packs the two complex moments as (re_1, im_1, re_2, im_2). The
|
|
5
|
+
* contribution is returned raw; summing across fragments is the caller's
|
|
6
|
+
* business (additive blending into float render targets, or component-wise
|
|
7
|
+
* addition in a loop).
|
|
4
8
|
* @see https://github.com/AlicesoftHumika/UnityOIT/blob/612c3c04263acb22980f33fa3cb2d3653ed389ff/Assets/Shader/MBOIT/MomentOIT.hlsli#L123
|
|
5
9
|
* @type {CodeChunk}
|
|
6
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_generate_trigonometric_moments_4.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_generate_trigonometric_moments_4.js"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"chunk_generate_trigonometric_moments_4.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/shade/renderer/shader/chunk/mboit/moments/geometric/chunk_generate_trigonometric_moments_4.js"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,qDAFU,SAAS,CA8BjB;0BAzCwB,mCAAmC"}
|