@plastic-software/three 0.180.0 → 0.181.1
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/three.cjs +943 -486
- package/build/three.core.js +506 -327
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +435 -163
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +8 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +3753 -1177
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +3752 -1176
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/animation/CCDIKSolver.js +1 -1
- package/examples/jsm/controls/ArcballControls.js +1 -1
- package/examples/jsm/controls/DragControls.js +1 -1
- package/examples/jsm/controls/FirstPersonControls.js +1 -1
- package/examples/jsm/controls/FlyControls.js +1 -1
- package/examples/jsm/controls/OrbitControls.js +2 -2
- package/examples/jsm/controls/PointerLockControls.js +2 -2
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +1 -1
- package/examples/jsm/effects/AsciiEffect.js +8 -8
- package/examples/jsm/exporters/DRACOExporter.js +2 -2
- package/examples/jsm/exporters/EXRExporter.js +1 -1
- package/examples/jsm/exporters/GLTFExporter.js +3 -3
- package/examples/jsm/exporters/USDZExporter.js +9 -2
- package/examples/jsm/geometries/DecalGeometry.js +2 -2
- package/examples/jsm/geometries/ParametricGeometry.js +1 -1
- package/examples/jsm/geometries/TeapotGeometry.js +2 -2
- package/examples/jsm/geometries/TextGeometry.js +3 -2
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/ViewHelper.js +43 -5
- package/examples/jsm/inspector/Inspector.js +427 -0
- package/examples/jsm/inspector/RendererInspector.js +415 -0
- package/examples/jsm/inspector/tabs/Console.js +204 -0
- package/examples/jsm/inspector/tabs/Parameters.js +332 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +170 -0
- package/examples/jsm/inspector/ui/Style.js +654 -0
- package/examples/jsm/inspector/ui/Tab.js +46 -0
- package/examples/jsm/inspector/ui/Values.js +423 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +6 -10
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/jsm/interactive/SelectionBox.js +30 -0
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +1 -1
- package/examples/jsm/loaders/3MFLoader.js +1 -1
- package/examples/jsm/loaders/ColladaLoader.js +2 -2
- package/examples/jsm/loaders/DDSLoader.js +1 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -22
- package/examples/jsm/loaders/FBXLoader.js +2 -2
- package/examples/jsm/loaders/FontLoader.js +23 -5
- package/examples/jsm/loaders/GLTFLoader.js +5 -3
- package/examples/jsm/loaders/KTX2Loader.js +28 -21
- package/examples/jsm/loaders/KTXLoader.js +2 -2
- package/examples/jsm/loaders/LDrawLoader.js +1 -1
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -2
- package/examples/jsm/loaders/LUTCubeLoader.js +1 -1
- package/examples/jsm/loaders/LWOLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +22 -5
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PDBLoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +2 -2
- package/examples/jsm/loaders/UltraHDRLoader.js +1 -1
- package/examples/jsm/math/ConvexHull.js +1 -1
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/math/SimplexNoise.js +1 -1
- package/examples/jsm/misc/ProgressiveLightMap.js +9 -3
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +7 -1
- package/examples/jsm/misc/TubePainter.js +383 -40
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/objects/ReflectorForSSRPass.js +1 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/SkyMesh.js +1 -1
- package/examples/jsm/objects/Water.js +3 -3
- package/examples/jsm/objects/WaterMesh.js +6 -6
- package/examples/jsm/postprocessing/GlitchPass.js +2 -2
- package/examples/jsm/postprocessing/UnrealBloomPass.js +8 -6
- package/examples/jsm/renderers/CSS2DRenderer.js +16 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +7 -6
- package/examples/jsm/renderers/SVGRenderer.js +1 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +1 -1
- package/examples/jsm/shaders/AfterimageShader.js +1 -1
- package/examples/jsm/shaders/BleachBypassShader.js +1 -1
- package/examples/jsm/shaders/BokehShader.js +1 -1
- package/examples/jsm/shaders/BokehShader2.js +1 -1
- package/examples/jsm/shaders/DotScreenShader.js +1 -1
- package/examples/jsm/shaders/FocusShader.js +1 -1
- package/examples/jsm/shaders/GTAOShader.js +2 -2
- package/examples/jsm/shaders/GodRaysShader.js +1 -1
- package/examples/jsm/shaders/KaleidoShader.js +1 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +2 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SepiaShader.js +1 -1
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +1 -1
- package/examples/jsm/shaders/TriangleBlurShader.js +1 -1
- package/examples/jsm/shaders/VignetteShader.js +1 -1
- package/examples/jsm/transpiler/TSLEncoder.js +7 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +26 -24
- package/examples/jsm/tsl/display/AnamorphicNode.js +2 -1
- package/examples/jsm/tsl/display/BloomNode.js +4 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +2 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +7 -0
- package/examples/jsm/tsl/display/GTAONode.js +45 -5
- package/examples/jsm/tsl/display/GaussianBlurNode.js +5 -3
- package/examples/jsm/tsl/display/OutlineNode.js +11 -0
- package/examples/jsm/tsl/display/SSGINode.js +654 -0
- package/examples/jsm/tsl/display/SSRNode.js +2 -0
- package/examples/jsm/tsl/display/SSSNode.js +488 -0
- package/examples/jsm/tsl/display/TRAANode.js +123 -6
- package/examples/jsm/tsl/display/boxBlur.js +1 -0
- package/examples/jsm/tsl/display/hashBlur.js +1 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +21 -1
- package/examples/jsm/webxr/XRControllerModelFactory.js +1 -1
- package/examples/jsm/webxr/XRHandModelFactory.js +2 -6
- package/package.json +5 -10
- package/src/Three.Core.js +3 -2
- package/src/Three.TSL.js +7 -1
- package/src/Three.WebGPU.Nodes.js +2 -0
- package/src/Three.WebGPU.js +2 -0
- package/src/animation/AnimationClip.js +3 -2
- package/src/animation/AnimationMixer.js +3 -3
- package/src/animation/AnimationObjectGroup.js +2 -1
- package/src/animation/KeyframeTrack.js +7 -6
- package/src/animation/PropertyBinding.js +12 -11
- package/src/audio/Audio.js +10 -9
- package/src/audio/PositionalAudio.js +1 -1
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/cameras/StereoCamera.js +2 -2
- package/src/constants.js +1 -1
- package/src/core/BufferGeometry.js +8 -8
- package/src/core/EventDispatcher.js +1 -1
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +3 -2
- package/src/core/Object3D.js +3 -2
- package/src/core/Raycaster.js +2 -1
- package/src/core/RenderTarget.js +10 -1
- package/src/extras/Controls.js +5 -4
- package/src/extras/DataUtils.js +2 -1
- package/src/extras/Earcut.js +6 -0
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +268 -55
- package/src/extras/core/Curve.js +2 -1
- package/src/extras/core/Interpolations.js +7 -1
- package/src/extras/core/ShapePath.js +4 -4
- package/src/extras/lib/earcut.js +7 -7
- package/src/geometries/BoxGeometry.js +1 -0
- package/src/geometries/CapsuleGeometry.js +1 -0
- package/src/geometries/CircleGeometry.js +1 -0
- package/src/geometries/ConeGeometry.js +1 -0
- package/src/geometries/CylinderGeometry.js +1 -0
- package/src/geometries/DodecahedronGeometry.js +1 -0
- package/src/geometries/ExtrudeGeometry.js +8 -6
- package/src/geometries/IcosahedronGeometry.js +1 -0
- package/src/geometries/LatheGeometry.js +1 -0
- package/src/geometries/OctahedronGeometry.js +1 -0
- package/src/geometries/PlaneGeometry.js +1 -0
- package/src/geometries/RingGeometry.js +1 -0
- package/src/geometries/ShapeGeometry.js +1 -0
- package/src/geometries/SphereGeometry.js +1 -0
- package/src/geometries/TetrahedronGeometry.js +1 -0
- package/src/geometries/TorusGeometry.js +1 -0
- package/src/geometries/TorusKnotGeometry.js +1 -0
- package/src/geometries/TubeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +1 -1
- package/src/loaders/AnimationLoader.js +2 -1
- package/src/loaders/AudioLoader.js +2 -1
- package/src/loaders/BufferGeometryLoader.js +2 -2
- package/src/loaders/Cache.js +2 -2
- package/src/loaders/DataTextureLoader.js +1 -1
- package/src/loaders/FileLoader.js +3 -2
- package/src/loaders/ImageBitmapLoader.js +5 -4
- package/src/loaders/ImageLoader.js +1 -1
- package/src/loaders/Loader.js +3 -3
- package/src/loaders/LoadingManager.js +25 -3
- package/src/loaders/MaterialLoader.js +3 -2
- package/src/loaders/ObjectLoader.js +13 -13
- package/src/loaders/TextureLoader.js +1 -1
- package/src/loaders/nodes/NodeLoader.js +3 -2
- package/src/materials/Material.js +4 -3
- package/src/materials/MeshBasicMaterial.js +1 -0
- package/src/materials/MeshDepthMaterial.js +1 -0
- package/src/materials/MeshLambertMaterial.js +2 -1
- package/src/materials/MeshMatcapMaterial.js +22 -0
- package/src/materials/MeshNormalMaterial.js +1 -0
- package/src/materials/MeshPhongMaterial.js +2 -1
- package/src/materials/MeshPhysicalMaterial.js +2 -1
- package/src/materials/MeshStandardMaterial.js +8 -7
- package/src/materials/MeshToonMaterial.js +1 -0
- package/src/materials/PointsMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +2 -2
- package/src/materials/nodes/Line2NodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/NodeMaterial.js +62 -22
- package/src/materials/nodes/manager/NodeMaterialObserver.js +2 -1
- package/src/math/Color.js +6 -5
- package/src/math/ColorManagement.js +2 -2
- package/src/math/Cylindrical.js +1 -1
- package/src/math/Euler.js +2 -1
- package/src/math/MathUtils.js +13 -11
- package/src/math/Matrix2.js +1 -1
- package/src/math/Matrix3.js +2 -2
- package/src/math/Matrix4.js +7 -7
- package/src/math/Plane.js +1 -1
- package/src/math/Quaternion.js +68 -66
- package/src/math/Spherical.js +1 -1
- package/src/nodes/Nodes.js +1 -1
- package/src/nodes/TSL.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +3 -2
- package/src/nodes/accessors/InstanceNode.js +22 -4
- package/src/nodes/accessors/Lights.js +10 -0
- package/src/nodes/accessors/Normal.js +5 -4
- package/src/nodes/accessors/Position.js +18 -2
- package/src/nodes/accessors/ReferenceNode.js +2 -1
- package/src/nodes/accessors/SceneNode.js +2 -1
- package/src/nodes/accessors/StorageBufferNode.js +2 -1
- package/src/nodes/accessors/StorageTextureNode.js +22 -0
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +61 -27
- package/src/nodes/code/FunctionCallNode.js +5 -4
- package/src/nodes/core/ArrayNode.js +1 -0
- package/src/nodes/core/AttributeNode.js +2 -1
- package/src/nodes/core/ContextNode.js +5 -10
- package/src/nodes/core/IndexNode.js +2 -2
- package/src/nodes/core/InputNode.js +2 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/{CacheNode.js → IsolateNode.js} +40 -7
- package/src/nodes/core/Node.js +137 -12
- package/src/nodes/core/NodeBuilder.js +135 -21
- package/src/nodes/core/NodeFrame.js +20 -20
- package/src/nodes/core/NodeFunction.js +2 -1
- package/src/nodes/core/NodeParser.js +2 -1
- package/src/nodes/core/NodeUtils.js +17 -90
- package/src/nodes/core/ParameterNode.js +31 -0
- package/src/nodes/core/PropertyNode.js +7 -0
- package/src/nodes/core/StackNode.js +16 -14
- package/src/nodes/core/UniformNode.js +2 -1
- package/src/nodes/core/VarNode.js +70 -12
- package/src/nodes/core/VaryingNode.js +3 -2
- package/src/nodes/display/BlendModes.js +5 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/ColorAdjustment.js +1 -1
- package/src/nodes/display/NormalMapNode.js +2 -1
- package/src/nodes/display/PassNode.js +51 -10
- package/src/nodes/display/RenderOutputNode.js +28 -2
- package/src/nodes/display/ScreenNode.js +2 -1
- package/src/nodes/display/ToneMappingNode.js +31 -4
- package/src/nodes/display/ToonOutlinePassNode.js +8 -0
- package/src/nodes/fog/Fog.js +3 -2
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/DFGApprox.js +60 -19
- package/src/nodes/functions/BasicLightingModel.js +2 -1
- package/src/nodes/functions/PhysicalLightingModel.js +3 -2
- package/src/nodes/functions/VolumetricLightingModel.js +5 -5
- package/src/nodes/geometry/RangeNode.js +40 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +2 -1
- package/src/nodes/gpgpu/ComputeNode.js +17 -5
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +25 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +2 -1
- package/src/nodes/lighting/EnvironmentNode.js +6 -6
- package/src/nodes/lighting/LightsNode.js +2 -3
- package/src/nodes/lighting/PointShadowNode.js +6 -0
- package/src/nodes/lighting/ShadowFilterNode.js +2 -0
- package/src/nodes/lighting/ShadowNode.js +75 -8
- package/src/nodes/math/ConditionalNode.js +6 -5
- package/src/nodes/math/MathNode.js +22 -4
- package/src/nodes/math/OperatorNode.js +3 -2
- package/src/nodes/pmrem/PMREMUtils.js +117 -2
- package/src/nodes/shapes/Shapes.js +1 -1
- package/src/nodes/tsl/TSLBase.js +5 -2
- package/src/nodes/tsl/TSLCore.js +36 -15
- package/src/nodes/utils/DebugNode.js +2 -1
- package/src/nodes/utils/EventNode.js +36 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +37 -19
- package/src/nodes/utils/JoinNode.js +3 -2
- package/src/nodes/utils/LoopNode.js +20 -24
- package/src/nodes/utils/MemberNode.js +2 -1
- package/src/nodes/utils/PostProcessingUtils.js +28 -1
- package/src/nodes/utils/RTTNode.js +12 -2
- package/src/nodes/utils/ReflectorNode.js +10 -3
- package/src/objects/Line.js +2 -1
- package/src/objects/LineSegments.js +2 -1
- package/src/objects/Skeleton.js +3 -2
- package/src/objects/SkinnedMesh.js +3 -1
- package/src/objects/Sprite.js +2 -1
- package/src/renderers/WebGLRenderer.js +48 -32
- package/src/renderers/common/Animation.js +13 -1
- package/src/renderers/common/Backend.js +93 -30
- package/src/renderers/common/Background.js +2 -1
- package/src/renderers/common/Bindings.js +56 -2
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/Geometries.js +26 -0
- package/src/renderers/common/Info.js +4 -2
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/PostProcessing.js +6 -25
- package/src/renderers/common/QuadMesh.js +7 -1
- package/src/renderers/common/RenderList.js +7 -3
- package/src/renderers/common/RenderObject.js +3 -1
- package/src/renderers/common/RenderObjects.js +1 -1
- package/src/renderers/common/Renderer.js +436 -228
- package/src/renderers/common/RendererUtils.js +9 -0
- package/src/renderers/common/SampledTexture.js +8 -0
- package/src/renderers/common/Sampler.js +37 -11
- package/src/renderers/common/StorageTexture.js +9 -1
- package/src/renderers/common/Textures.js +89 -35
- package/src/renderers/common/TimestampQueryPool.js +63 -1
- package/src/renderers/common/UniformsGroup.js +2 -1
- package/src/renderers/common/XRManager.js +7 -3
- package/src/renderers/common/extras/PMREMGenerator.js +160 -65
- package/src/renderers/common/nodes/NodeLibrary.js +4 -2
- package/src/renderers/common/nodes/NodeSampler.js +13 -1
- package/src/renderers/common/nodes/Nodes.js +38 -16
- package/src/renderers/shaders/DFGLUTData.js +64 -0
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +52 -18
- package/src/renderers/shaders/UniformsLib.js +1 -0
- package/src/renderers/shaders/UniformsUtils.js +25 -4
- package/src/renderers/webgl/WebGLCapabilities.js +2 -1
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLProgram.js +11 -10
- package/src/renderers/webgl/WebGLPrograms.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +2 -1
- package/src/renderers/webgl/WebGLState.js +15 -14
- package/src/renderers/webgl/WebGLTextures.js +18 -14
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl-fallback/WebGLBackend.js +22 -41
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +74 -11
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +2 -3
- package/src/renderers/webgl-fallback/utils/WebGLState.js +6 -5
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +117 -16
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +42 -12
- package/src/renderers/webgpu/WebGPUBackend.js +134 -108
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +2 -1
- package/src/renderers/webgpu/WebGPURenderer.js +3 -2
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +21 -19
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +2 -1
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +5 -0
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +44 -16
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +6 -8
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +146 -74
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +29 -6
- package/src/renderers/webgpu/utils/WebGPUUtils.js +22 -2
- package/src/renderers/webxr/WebXRManager.js +3 -2
- package/src/textures/Source.js +2 -1
- package/src/textures/Texture.js +3 -2
- package/src/textures/VideoTexture.js +2 -0
- package/src/utils.js +67 -3
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Fn, If, vec4 } from '../tsl/TSLBase.js';
|
|
2
2
|
import { mix, min, step } from '../math/MathNode.js';
|
|
3
|
+
import { warn } from '../../utils.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Represents a "Color Burn" blend mode.
|
|
@@ -183,7 +184,7 @@ export const unpremultiplyAlpha = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
|
183
184
|
*/
|
|
184
185
|
export const burn = ( ...params ) => { // @deprecated, r171
|
|
185
186
|
|
|
186
|
-
|
|
187
|
+
warn( 'TSL: "burn" has been renamed. Use "blendBurn" instead.' );
|
|
187
188
|
return blendBurn( params );
|
|
188
189
|
|
|
189
190
|
};
|
|
@@ -198,7 +199,7 @@ export const burn = ( ...params ) => { // @deprecated, r171
|
|
|
198
199
|
*/
|
|
199
200
|
export const dodge = ( ...params ) => { // @deprecated, r171
|
|
200
201
|
|
|
201
|
-
|
|
202
|
+
warn( 'TSL: "dodge" has been renamed. Use "blendDodge" instead.' );
|
|
202
203
|
return blendDodge( params );
|
|
203
204
|
|
|
204
205
|
};
|
|
@@ -213,7 +214,7 @@ export const dodge = ( ...params ) => { // @deprecated, r171
|
|
|
213
214
|
*/
|
|
214
215
|
export const screen = ( ...params ) => { // @deprecated, r171
|
|
215
216
|
|
|
216
|
-
|
|
217
|
+
warn( 'TSL: "screen" has been renamed. Use "blendScreen" instead.' );
|
|
217
218
|
return blendScreen( params );
|
|
218
219
|
|
|
219
220
|
};
|
|
@@ -228,7 +229,7 @@ export const screen = ( ...params ) => { // @deprecated, r171
|
|
|
228
229
|
*/
|
|
229
230
|
export const overlay = ( ...params ) => { // @deprecated, r171
|
|
230
231
|
|
|
231
|
-
|
|
232
|
+
warn( 'TSL: "overlay" has been renamed. Use "blendOverlay" instead.' );
|
|
232
233
|
return blendOverlay( params );
|
|
233
234
|
|
|
234
235
|
};
|
|
@@ -11,7 +11,7 @@ import { Fn, nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
|
|
|
11
11
|
const dHdxy_fwd = Fn( ( { textureNode, bumpScale } ) => {
|
|
12
12
|
|
|
13
13
|
// It's used to preserve the same TextureNode instance
|
|
14
|
-
const sampleTexture = ( callback ) => textureNode.
|
|
14
|
+
const sampleTexture = ( callback ) => textureNode.isolate().context( { getUV: ( texNode ) => callback( texNode.uvNode || uv() ), forceUVContext: true } );
|
|
15
15
|
|
|
16
16
|
const Hll = float( sampleTexture( ( uvNode ) => uvNode ) );
|
|
17
17
|
|
|
@@ -82,7 +82,7 @@ export const hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
|
|
|
82
82
|
* @function
|
|
83
83
|
* @param {Node<vec3>} color - The color value to compute the luminance for.
|
|
84
84
|
* @param {?Node<vec3>} luminanceCoefficients - The luminance coefficients. By default predefined values of the current working color space are used.
|
|
85
|
-
* @return {Node<
|
|
85
|
+
* @return {Node<float>} The luminance.
|
|
86
86
|
*/
|
|
87
87
|
export const luminance = (
|
|
88
88
|
color,
|
|
@@ -6,6 +6,7 @@ import { nodeProxy, vec3 } from '../tsl/TSLBase.js';
|
|
|
6
6
|
|
|
7
7
|
import { TangentSpaceNormalMap, ObjectSpaceNormalMap } from '../../constants.js';
|
|
8
8
|
import { directionToFaceDirection } from './FrontFacingNode.js';
|
|
9
|
+
import { error } from '../../utils.js';
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* This class can be used for applying normals maps to materials.
|
|
@@ -91,7 +92,7 @@ class NormalMapNode extends TempNode {
|
|
|
91
92
|
|
|
92
93
|
} else {
|
|
93
94
|
|
|
94
|
-
|
|
95
|
+
error( `NodeMaterial: Unsupported normal map type: ${ normalMapType }` );
|
|
95
96
|
|
|
96
97
|
output = normalView; // Fallback to default normal view
|
|
97
98
|
|
|
@@ -10,6 +10,7 @@ import { Vector2 } from '../../math/Vector2.js';
|
|
|
10
10
|
import { Vector4 } from '../../math/Vector4.js';
|
|
11
11
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
12
12
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
13
|
+
import { warn } from '../../utils.js';
|
|
13
14
|
|
|
14
15
|
const _size = /*@__PURE__*/ new Vector2();
|
|
15
16
|
|
|
@@ -135,6 +136,7 @@ class PassMultipleTextureNode extends PassTextureNode {
|
|
|
135
136
|
newNode.depthNode = this.depthNode;
|
|
136
137
|
newNode.compareNode = this.compareNode;
|
|
137
138
|
newNode.gradNode = this.gradNode;
|
|
139
|
+
newNode.offsetNode = this.offsetNode;
|
|
138
140
|
|
|
139
141
|
return newNode;
|
|
140
142
|
|
|
@@ -341,7 +343,7 @@ class PassNode extends TempNode {
|
|
|
341
343
|
* @type {number}
|
|
342
344
|
* @default 1
|
|
343
345
|
*/
|
|
344
|
-
this.
|
|
346
|
+
this._resolutionScale = 1;
|
|
345
347
|
|
|
346
348
|
/**
|
|
347
349
|
* Custom viewport definition.
|
|
@@ -389,18 +391,45 @@ class PassNode extends TempNode {
|
|
|
389
391
|
|
|
390
392
|
}
|
|
391
393
|
|
|
394
|
+
/**
|
|
395
|
+
* Sets the resolution scale for the pass.
|
|
396
|
+
* The resolution scale is a factor that is multiplied with the renderer's width and height.
|
|
397
|
+
*
|
|
398
|
+
* @param {number} resolutionScale - The resolution scale to set. A value of `1` means full resolution.
|
|
399
|
+
* @return {PassNode} A reference to this pass.
|
|
400
|
+
*/
|
|
401
|
+
setResolutionScale( resolutionScale ) {
|
|
402
|
+
|
|
403
|
+
this._resolutionScale = resolutionScale;
|
|
404
|
+
|
|
405
|
+
return this;
|
|
406
|
+
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Gets the current resolution scale of the pass.
|
|
411
|
+
*
|
|
412
|
+
* @return {number} The current resolution scale. A value of `1` means full resolution.
|
|
413
|
+
*/
|
|
414
|
+
getResolutionScale() {
|
|
415
|
+
|
|
416
|
+
return this._resolutionScale;
|
|
417
|
+
|
|
418
|
+
}
|
|
419
|
+
|
|
392
420
|
/**
|
|
393
421
|
* Sets the resolution for the pass.
|
|
394
422
|
* The resolution is a factor that is multiplied with the renderer's width and height.
|
|
395
423
|
*
|
|
396
424
|
* @param {number} resolution - The resolution to set. A value of `1` means full resolution.
|
|
397
425
|
* @return {PassNode} A reference to this pass.
|
|
426
|
+
* @deprecated since r181. Use {@link PassNode#setResolutionScale `setResolutionScale()`} instead.
|
|
398
427
|
*/
|
|
399
|
-
setResolution( resolution ) {
|
|
428
|
+
setResolution( resolution ) { // @deprecated, r181
|
|
400
429
|
|
|
401
|
-
|
|
430
|
+
warn( 'PassNode: .setResolution() is deprecated. Use .setResolutionScale() instead.' );
|
|
402
431
|
|
|
403
|
-
return this;
|
|
432
|
+
return this.setResolutionScale( resolution );
|
|
404
433
|
|
|
405
434
|
}
|
|
406
435
|
|
|
@@ -408,10 +437,13 @@ class PassNode extends TempNode {
|
|
|
408
437
|
* Gets the current resolution of the pass.
|
|
409
438
|
*
|
|
410
439
|
* @return {number} The current resolution. A value of `1` means full resolution.
|
|
440
|
+
* @deprecated since r181. Use {@link PassNode#getResolutionScale `getResolutionScale()`} instead.
|
|
411
441
|
*/
|
|
412
|
-
getResolution() {
|
|
442
|
+
getResolution() { // @deprecated, r181
|
|
443
|
+
|
|
444
|
+
warn( 'PassNode: .getResolution() is deprecated. Use .getResolutionScale() instead.' );
|
|
413
445
|
|
|
414
|
-
return this.
|
|
446
|
+
return this.getResolutionScale();
|
|
415
447
|
|
|
416
448
|
}
|
|
417
449
|
|
|
@@ -705,6 +737,7 @@ class PassNode extends TempNode {
|
|
|
705
737
|
|
|
706
738
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
707
739
|
const currentMRT = renderer.getMRT();
|
|
740
|
+
const currentAutoClear = renderer.autoClear;
|
|
708
741
|
const currentMask = camera.layers.mask;
|
|
709
742
|
|
|
710
743
|
this._cameraNear.value = camera.near;
|
|
@@ -724,11 +757,19 @@ class PassNode extends TempNode {
|
|
|
724
757
|
|
|
725
758
|
renderer.setRenderTarget( this.renderTarget );
|
|
726
759
|
renderer.setMRT( this._mrt );
|
|
760
|
+
renderer.autoClear = true;
|
|
761
|
+
|
|
762
|
+
const currentSceneName = scene.name;
|
|
763
|
+
|
|
764
|
+
scene.name = this.name ? this.name : scene.name;
|
|
727
765
|
|
|
728
766
|
renderer.render( scene, camera );
|
|
729
767
|
|
|
768
|
+
scene.name = currentSceneName;
|
|
769
|
+
|
|
730
770
|
renderer.setRenderTarget( currentRenderTarget );
|
|
731
771
|
renderer.setMRT( currentMRT );
|
|
772
|
+
renderer.autoClear = currentAutoClear;
|
|
732
773
|
|
|
733
774
|
camera.layers.mask = currentMask;
|
|
734
775
|
|
|
@@ -745,8 +786,8 @@ class PassNode extends TempNode {
|
|
|
745
786
|
this._width = width;
|
|
746
787
|
this._height = height;
|
|
747
788
|
|
|
748
|
-
const effectiveWidth = this._width * this._pixelRatio * this.
|
|
749
|
-
const effectiveHeight = this._height * this._pixelRatio * this.
|
|
789
|
+
const effectiveWidth = Math.floor( this._width * this._pixelRatio * this._resolutionScale );
|
|
790
|
+
const effectiveHeight = Math.floor( this._height * this._pixelRatio * this._resolutionScale );
|
|
750
791
|
|
|
751
792
|
this.renderTarget.setSize( effectiveWidth, effectiveHeight );
|
|
752
793
|
|
|
@@ -786,7 +827,7 @@ class PassNode extends TempNode {
|
|
|
786
827
|
|
|
787
828
|
}
|
|
788
829
|
|
|
789
|
-
this._scissor.multiplyScalar( this._pixelRatio * this.
|
|
830
|
+
this._scissor.multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
|
|
790
831
|
|
|
791
832
|
}
|
|
792
833
|
|
|
@@ -822,7 +863,7 @@ class PassNode extends TempNode {
|
|
|
822
863
|
|
|
823
864
|
}
|
|
824
865
|
|
|
825
|
-
this._viewport.multiplyScalar( this._pixelRatio * this.
|
|
866
|
+
this._viewport.multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
|
|
826
867
|
|
|
827
868
|
}
|
|
828
869
|
|
|
@@ -56,9 +56,10 @@ class RenderOutputNode extends TempNode {
|
|
|
56
56
|
/**
|
|
57
57
|
* The tone mapping type.
|
|
58
58
|
*
|
|
59
|
+
* @private
|
|
59
60
|
* @type {?number}
|
|
60
61
|
*/
|
|
61
|
-
this.
|
|
62
|
+
this._toneMapping = toneMapping;
|
|
62
63
|
|
|
63
64
|
/**
|
|
64
65
|
* The output color space.
|
|
@@ -78,13 +79,38 @@ class RenderOutputNode extends TempNode {
|
|
|
78
79
|
|
|
79
80
|
}
|
|
80
81
|
|
|
82
|
+
/**
|
|
83
|
+
* Sets the tone mapping type.
|
|
84
|
+
*
|
|
85
|
+
* @param {number} value - The tone mapping type.
|
|
86
|
+
* @return {ToneMappingNode} A reference to this node.
|
|
87
|
+
*/
|
|
88
|
+
setToneMapping( value ) {
|
|
89
|
+
|
|
90
|
+
this._toneMapping = value;
|
|
91
|
+
|
|
92
|
+
return this;
|
|
93
|
+
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Gets the tone mapping type.
|
|
98
|
+
*
|
|
99
|
+
* @returns {number} The tone mapping type.
|
|
100
|
+
*/
|
|
101
|
+
getToneMapping() {
|
|
102
|
+
|
|
103
|
+
return this._toneMapping;
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
81
107
|
setup( { context } ) {
|
|
82
108
|
|
|
83
109
|
let outputNode = this.colorNode || context.color;
|
|
84
110
|
|
|
85
111
|
// tone mapping
|
|
86
112
|
|
|
87
|
-
const toneMapping = ( this.
|
|
113
|
+
const toneMapping = ( this._toneMapping !== null ? this._toneMapping : context.toneMapping ) || NoToneMapping;
|
|
88
114
|
const outputColorSpace = ( this.outputColorSpace !== null ? this.outputColorSpace : context.outputColorSpace ) || NoColorSpace;
|
|
89
115
|
|
|
90
116
|
if ( toneMapping !== NoToneMapping ) {
|
|
@@ -5,6 +5,7 @@ import { Fn, nodeImmutable, vec2 } from '../tsl/TSLBase.js';
|
|
|
5
5
|
|
|
6
6
|
import { Vector2 } from '../../math/Vector2.js';
|
|
7
7
|
import { Vector4 } from '../../math/Vector4.js';
|
|
8
|
+
import { warn } from '../../utils.js';
|
|
8
9
|
|
|
9
10
|
let _screenSizeVec, _viewportVec;
|
|
10
11
|
|
|
@@ -282,7 +283,7 @@ export const viewportUV = /*@__PURE__*/ viewportCoordinate.div( viewportSize );
|
|
|
282
283
|
*/
|
|
283
284
|
export const viewportResolution = /*@__PURE__*/ ( Fn( () => { // @deprecated, r169
|
|
284
285
|
|
|
285
|
-
|
|
286
|
+
warn( 'TSL: "viewportResolution" is deprecated. Use "screenSize" instead.' );
|
|
286
287
|
|
|
287
288
|
return screenSize;
|
|
288
289
|
|
|
@@ -4,6 +4,7 @@ import { rendererReference } from '../accessors/RendererReferenceNode.js';
|
|
|
4
4
|
|
|
5
5
|
import { NoToneMapping } from '../../constants.js';
|
|
6
6
|
import { hash } from '../core/NodeUtils.js';
|
|
7
|
+
import { error } from '../../utils.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* This node represents a tone mapping operation.
|
|
@@ -32,9 +33,10 @@ class ToneMappingNode extends TempNode {
|
|
|
32
33
|
/**
|
|
33
34
|
* The tone mapping type.
|
|
34
35
|
*
|
|
36
|
+
* @private
|
|
35
37
|
* @type {number}
|
|
36
38
|
*/
|
|
37
|
-
this.
|
|
39
|
+
this._toneMapping = toneMapping;
|
|
38
40
|
|
|
39
41
|
/**
|
|
40
42
|
* The tone mapping exposure.
|
|
@@ -62,14 +64,39 @@ class ToneMappingNode extends TempNode {
|
|
|
62
64
|
*/
|
|
63
65
|
customCacheKey() {
|
|
64
66
|
|
|
65
|
-
return hash( this.
|
|
67
|
+
return hash( this._toneMapping );
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Sets the tone mapping type.
|
|
73
|
+
*
|
|
74
|
+
* @param {number} value - The tone mapping type.
|
|
75
|
+
* @return {ToneMappingNode} A reference to this node.
|
|
76
|
+
*/
|
|
77
|
+
setToneMapping( value ) {
|
|
78
|
+
|
|
79
|
+
this._toneMapping = value;
|
|
80
|
+
|
|
81
|
+
return this;
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Gets the tone mapping type.
|
|
87
|
+
*
|
|
88
|
+
* @returns {number} The tone mapping type.
|
|
89
|
+
*/
|
|
90
|
+
getToneMapping() {
|
|
91
|
+
|
|
92
|
+
return this._toneMapping;
|
|
66
93
|
|
|
67
94
|
}
|
|
68
95
|
|
|
69
96
|
setup( builder ) {
|
|
70
97
|
|
|
71
98
|
const colorNode = this.colorNode || builder.context.color;
|
|
72
|
-
const toneMapping = this.
|
|
99
|
+
const toneMapping = this._toneMapping;
|
|
73
100
|
|
|
74
101
|
if ( toneMapping === NoToneMapping ) return colorNode;
|
|
75
102
|
|
|
@@ -83,7 +110,7 @@ class ToneMappingNode extends TempNode {
|
|
|
83
110
|
|
|
84
111
|
} else {
|
|
85
112
|
|
|
86
|
-
|
|
113
|
+
error( 'ToneMappingNode: Unsupported Tone Mapping configuration.', toneMapping );
|
|
87
114
|
|
|
88
115
|
outputNode = colorNode;
|
|
89
116
|
|
|
@@ -72,6 +72,14 @@ class ToonOutlinePassNode extends PassNode {
|
|
|
72
72
|
*/
|
|
73
73
|
this._materialCache = new WeakMap();
|
|
74
74
|
|
|
75
|
+
/**
|
|
76
|
+
* The name of this pass.
|
|
77
|
+
*
|
|
78
|
+
* @type {string}
|
|
79
|
+
* @default 'Outline Pass'
|
|
80
|
+
*/
|
|
81
|
+
this.name = 'Outline Pass';
|
|
82
|
+
|
|
75
83
|
}
|
|
76
84
|
|
|
77
85
|
updateBefore( frame ) {
|
package/src/nodes/fog/Fog.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { positionView } from '../accessors/Position.js';
|
|
2
2
|
import { smoothstep } from '../math/MathNode.js';
|
|
3
3
|
import { Fn, output, vec4 } from '../tsl/TSLBase.js';
|
|
4
|
+
import { warn } from '../../utils.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Returns a node that represents the `z` coordinate in view space
|
|
@@ -91,7 +92,7 @@ export const fog = Fn( ( [ color, factor ] ) => {
|
|
|
91
92
|
*/
|
|
92
93
|
export function rangeFog( color, near, far ) { // @deprecated, r171
|
|
93
94
|
|
|
94
|
-
|
|
95
|
+
warn( 'TSL: "rangeFog( color, near, far )" is deprecated. Use "fog( color, rangeFogFactor( near, far ) )" instead.' );
|
|
95
96
|
return fog( color, rangeFogFactor( near, far ) );
|
|
96
97
|
|
|
97
98
|
}
|
|
@@ -107,7 +108,7 @@ export function rangeFog( color, near, far ) { // @deprecated, r171
|
|
|
107
108
|
*/
|
|
108
109
|
export function densityFog( color, density ) { // @deprecated, r171
|
|
109
110
|
|
|
110
|
-
|
|
111
|
+
warn( 'TSL: "densityFog( color, density )" is deprecated. Use "fog( color, densityFogFactor( density ) )" instead.' );
|
|
111
112
|
return fog( color, densityFogFactor( density ) );
|
|
112
113
|
|
|
113
114
|
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import BRDF_GGX from './BRDF_GGX.js';
|
|
2
|
+
import DFGApprox from './DFGApprox.js';
|
|
3
|
+
import { normalView } from '../../accessors/Normal.js';
|
|
4
|
+
import { positionViewDirection } from '../../accessors/Position.js';
|
|
5
|
+
import { EPSILON } from '../../math/MathNode.js';
|
|
6
|
+
import { Fn, float } from '../../tsl/TSLBase.js';
|
|
7
|
+
|
|
8
|
+
// GGX BRDF with multi-scattering energy compensation for direct lighting
|
|
9
|
+
// This provides more accurate energy conservation, especially for rough materials
|
|
10
|
+
// Based on "Practical Multiple Scattering Compensation for Microfacet Models"
|
|
11
|
+
// https://blog.selfshadow.com/publications/turquin/ms_comp_final.pdf
|
|
12
|
+
const BRDF_GGX_Multiscatter = /*@__PURE__*/ Fn( ( { lightDirection, f0, f90, roughness: _roughness, f, USE_IRIDESCENCE, USE_ANISOTROPY } ) => {
|
|
13
|
+
|
|
14
|
+
// Single-scattering BRDF (standard GGX)
|
|
15
|
+
const singleScatter = BRDF_GGX( { lightDirection, f0, f90, roughness: _roughness, f, USE_IRIDESCENCE, USE_ANISOTROPY } );
|
|
16
|
+
|
|
17
|
+
// Multi-scattering compensation
|
|
18
|
+
const dotNL = normalView.dot( lightDirection ).clamp();
|
|
19
|
+
const dotNV = normalView.dot( positionViewDirection ).clamp();
|
|
20
|
+
|
|
21
|
+
// Precomputed DFG values for view and light directions
|
|
22
|
+
const dfgV = DFGApprox( { roughness: _roughness, dotNV } );
|
|
23
|
+
const dfgL = DFGApprox( { roughness: _roughness, dotNV: dotNL } );
|
|
24
|
+
|
|
25
|
+
// Single-scattering energy for view and light
|
|
26
|
+
const FssEss_V = f0.mul( dfgV.x ).add( f90.mul( dfgV.y ) );
|
|
27
|
+
const FssEss_L = f0.mul( dfgL.x ).add( f90.mul( dfgL.y ) );
|
|
28
|
+
|
|
29
|
+
const Ess_V = dfgV.x.add( dfgV.y );
|
|
30
|
+
const Ess_L = dfgL.x.add( dfgL.y );
|
|
31
|
+
|
|
32
|
+
// Energy lost to multiple scattering
|
|
33
|
+
const Ems_V = float( 1.0 ).sub( Ess_V );
|
|
34
|
+
const Ems_L = float( 1.0 ).sub( Ess_L );
|
|
35
|
+
|
|
36
|
+
// Average Fresnel reflectance
|
|
37
|
+
const Favg = f0.add( f0.oneMinus().mul( 0.047619 ) ); // 1/21
|
|
38
|
+
|
|
39
|
+
// Multiple scattering contribution
|
|
40
|
+
// Uses geometric mean of view and light contributions for better energy distribution
|
|
41
|
+
const Fms = FssEss_V.mul( FssEss_L ).mul( Favg ).div( float( 1.0 ).sub( Ems_V.mul( Ems_L ).mul( Favg ).mul( Favg ) ).add( EPSILON ) );
|
|
42
|
+
|
|
43
|
+
// Energy compensation factor
|
|
44
|
+
const compensationFactor = Ems_V.mul( Ems_L );
|
|
45
|
+
|
|
46
|
+
const multiScatter = Fms.mul( compensationFactor );
|
|
47
|
+
|
|
48
|
+
return singleScatter.add( multiScatter );
|
|
49
|
+
|
|
50
|
+
} );
|
|
51
|
+
|
|
52
|
+
export default BRDF_GGX_Multiscatter;
|
|
@@ -1,30 +1,71 @@
|
|
|
1
|
-
import { Fn, vec2
|
|
1
|
+
import { Fn, vec2 } from '../../tsl/TSLBase.js';
|
|
2
|
+
import { texture } from '../../accessors/TextureNode.js';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { DataTexture } from '../../../textures/DataTexture.js';
|
|
5
|
+
import { RGFormat, HalfFloatType, LinearFilter, ClampToEdgeWrapping } from '../../../constants.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Precomputed DFG LUT for Image-Based Lighting
|
|
9
|
+
* Resolution: 32x32
|
|
10
|
+
* Samples: 4096 per texel
|
|
11
|
+
* Format: RG16F (2 half floats per texel: scale, bias)
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const DATA = new Uint16Array( [
|
|
15
|
+
0x2cd9, 0x3b64, 0x2d0e, 0x3b43, 0x2e20, 0x3aa7, 0x3061, 0x39fb, 0x325e, 0x397c, 0x3454, 0x3908, 0x357d, 0x3893, 0x3698, 0x381e, 0x379d, 0x375b, 0x3845, 0x3689, 0x38af, 0x35ca, 0x390d, 0x351e, 0x395f, 0x3484, 0x39a8, 0x33f9, 0x39e6, 0x330a, 0x3a1c, 0x3239, 0x3a4b, 0x3183, 0x3a73, 0x30e5, 0x3a95, 0x305b, 0x3ab1, 0x2fc6, 0x3ac9, 0x2ef7, 0x3ade, 0x2e43, 0x3aee, 0x2da7, 0x3afc, 0x2d1f, 0x3b07, 0x2ca9, 0x3b10, 0x2c42, 0x3b17, 0x2bd1, 0x3b1c, 0x2b34, 0x3b1f, 0x2aaa, 0x3b22, 0x2a31, 0x3b23, 0x29c7, 0x3b23, 0x2968,
|
|
16
|
+
0x32d4, 0x3a4b, 0x32dc, 0x3a45, 0x3308, 0x3a26, 0x3378, 0x39d0, 0x3425, 0x394a, 0x34c9, 0x38be, 0x359c, 0x383e, 0x3688, 0x3796, 0x3778, 0x36c4, 0x382f, 0x3603, 0x3898, 0x3553, 0x38f7, 0x34b3, 0x394b, 0x3424, 0x3994, 0x334c, 0x39d3, 0x326c, 0x3a08, 0x31a9, 0x3a35, 0x30fe, 0x3a5a, 0x306a, 0x3a78, 0x2fd1, 0x3a90, 0x2ef1, 0x3aa2, 0x2e2e, 0x3ab0, 0x2d86, 0x3aba, 0x2cf3, 0x3ac1, 0x2c74, 0x3ac4, 0x2c05, 0x3ac4, 0x2b49, 0x3ac2, 0x2aa1, 0x3abd, 0x2a0c, 0x3ab7, 0x298b, 0x3aaf, 0x2918, 0x3aa6, 0x28b3, 0x3a9b, 0x285a,
|
|
17
|
+
0x3559, 0x3954, 0x355a, 0x3951, 0x3566, 0x3944, 0x3582, 0x391e, 0x35b6, 0x38d3, 0x360a, 0x386a, 0x3684, 0x37ed, 0x3720, 0x370d, 0x37d3, 0x3641, 0x3847, 0x3588, 0x38a3, 0x34e2, 0x38fa, 0x344d, 0x3948, 0x3391, 0x398d, 0x32a6, 0x39c8, 0x31d6, 0x39fa, 0x3121, 0x3a22, 0x3082, 0x3a43, 0x2ff0, 0x3a5c, 0x2f01, 0x3a6f, 0x2e32, 0x3a7c, 0x2d7e, 0x3a84, 0x2ce2, 0x3a87, 0x2c5b, 0x3a87, 0x2bcc, 0x3a83, 0x2b00, 0x3a7b, 0x2a4e, 0x3a71, 0x29b3, 0x3a66, 0x292c, 0x3a58, 0x28b4, 0x3a4b, 0x284b, 0x3a3d, 0x27dc, 0x3a2e, 0x2739,
|
|
18
|
+
0x3709, 0x387c, 0x370a, 0x387b, 0x3710, 0x3874, 0x3720, 0x385f, 0x373d, 0x3834, 0x376a, 0x37e1, 0x37ac, 0x3732, 0x3805, 0x3675, 0x383f, 0x35bc, 0x3883, 0x3511, 0x38cb, 0x3476, 0x3912, 0x33d8, 0x3955, 0x32e2, 0x3991, 0x3208, 0x39c6, 0x3149, 0x39f1, 0x30a1, 0x3a15, 0x300f, 0x3a30, 0x2f21, 0x3a44, 0x2e45, 0x3a51, 0x2d87, 0x3a59, 0x2ce2, 0x3a5b, 0x2c53, 0x3a58, 0x2bb0, 0x3a52, 0x2ada, 0x3a49, 0x2a1f, 0x3a40, 0x297d, 0x3a34, 0x28f0, 0x3a25, 0x2874, 0x3a13, 0x2807, 0x3a00, 0x274e, 0x39eb, 0x26a6, 0x39d5, 0x2611,
|
|
19
|
+
0x3840, 0x3780, 0x3840, 0x377e, 0x3842, 0x3776, 0x3846, 0x375e, 0x384f, 0x372a, 0x385b, 0x36d3, 0x386c, 0x3659, 0x3885, 0x35c7, 0x38a8, 0x352d, 0x38d4, 0x3497, 0x3906, 0x340c, 0x393b, 0x331a, 0x3970, 0x323a, 0x39a0, 0x3172, 0x39cb, 0x30c3, 0x39ef, 0x302a, 0x3a0c, 0x2f4a, 0x3a21, 0x2e63, 0x3a2f, 0x2d9b, 0x3a37, 0x2ced, 0x3a39, 0x2c57, 0x3a37, 0x2baa, 0x3a34, 0x2ac9, 0x3a2c, 0x2a05, 0x3a20, 0x295d, 0x3a11, 0x28ca, 0x39ff, 0x2849, 0x39eb, 0x27b2, 0x39d5, 0x26ed, 0x39be, 0x2640, 0x39a5, 0x25aa, 0x398b, 0x2523,
|
|
20
|
+
0x38e2, 0x363b, 0x38e2, 0x363b, 0x38e3, 0x3635, 0x38e6, 0x3626, 0x38ea, 0x3606, 0x38f0, 0x35cd, 0x38f8, 0x3579, 0x3903, 0x350e, 0x3915, 0x3495, 0x392d, 0x3418, 0x394c, 0x3340, 0x3970, 0x3261, 0x3995, 0x3197, 0x39b8, 0x30e4, 0x39d8, 0x3046, 0x39f3, 0x2f76, 0x3a08, 0x2e86, 0x3a16, 0x2db5, 0x3a1e, 0x2cff, 0x3a22, 0x2c61, 0x3a24, 0x2bb3, 0x3a20, 0x2ac7, 0x3a17, 0x29fc, 0x3a0a, 0x294c, 0x39fa, 0x28b2, 0x39e7, 0x282e, 0x39d1, 0x2773, 0x39b9, 0x26a9, 0x399f, 0x25fa, 0x3985, 0x255f, 0x3968, 0x24d6, 0x394a, 0x245d,
|
|
21
|
+
0x396e, 0x3524, 0x396e, 0x3524, 0x396e, 0x3520, 0x396f, 0x3517, 0x3971, 0x3502, 0x3973, 0x34dd, 0x3975, 0x34a5, 0x3978, 0x3458, 0x397e, 0x33f9, 0x3987, 0x3332, 0x3997, 0x326b, 0x39aa, 0x31ac, 0x39c0, 0x30fb, 0x39d7, 0x305c, 0x39eb, 0x2f9e, 0x39fc, 0x2ea7, 0x3a07, 0x2dcf, 0x3a0f, 0x2d13, 0x3a16, 0x2c70, 0x3a17, 0x2bc4, 0x3a14, 0x2ad0, 0x3a0a, 0x29fc, 0x39fd, 0x2945, 0x39ed, 0x28a6, 0x39d9, 0x281d, 0x39c2, 0x274a, 0x39a9, 0x267c, 0x398e, 0x25c7, 0x3971, 0x2528, 0x3952, 0x249e, 0x3931, 0x2425, 0x3910, 0x2374,
|
|
22
|
+
0x39e5, 0x3436, 0x39e5, 0x3435, 0x39e5, 0x3434, 0x39e5, 0x342e, 0x39e5, 0x3420, 0x39e5, 0x3408, 0x39e3, 0x33c4, 0x39e1, 0x3359, 0x39df, 0x32d3, 0x39de, 0x323a, 0x39e1, 0x319a, 0x39e7, 0x30fb, 0x39f0, 0x3065, 0x39f9, 0x2fb6, 0x3a02, 0x2ec0, 0x3a08, 0x2de6, 0x3a0d, 0x2d26, 0x3a12, 0x2c7e, 0x3a13, 0x2bda, 0x3a0e, 0x2adc, 0x3a05, 0x2a02, 0x39f8, 0x2945, 0x39e7, 0x28a1, 0x39d3, 0x2813, 0x39bc, 0x2730, 0x39a2, 0x265c, 0x3985, 0x25a3, 0x3966, 0x2501, 0x3945, 0x2475, 0x3923, 0x23f3, 0x3901, 0x231c, 0x38dd, 0x225e,
|
|
23
|
+
0x3a4b, 0x32d6, 0x3a4a, 0x32d6, 0x3a4a, 0x32d4, 0x3a4a, 0x32cc, 0x3a48, 0x32bb, 0x3a47, 0x329d, 0x3a43, 0x326b, 0x3a3d, 0x3222, 0x3a36, 0x31c2, 0x3a2e, 0x314f, 0x3a28, 0x30d2, 0x3a23, 0x3052, 0x3a20, 0x2fab, 0x3a1e, 0x2ec2, 0x3a1b, 0x2def, 0x3a19, 0x2d31, 0x3a1a, 0x2c89, 0x3a18, 0x2beb, 0x3a11, 0x2aea, 0x3a07, 0x2a0a, 0x39fa, 0x2948, 0x39e9, 0x28a1, 0x39d4, 0x280f, 0x39bd, 0x2721, 0x39a2, 0x2647, 0x3985, 0x258b, 0x3964, 0x24e5, 0x3942, 0x2455, 0x391f, 0x23b3, 0x38fb, 0x22d8, 0x38d4, 0x2219, 0x38ad, 0x2172,
|
|
24
|
+
0x3aa0, 0x3180, 0x3aa0, 0x3180, 0x3aa0, 0x317f, 0x3a9f, 0x317b, 0x3a9d, 0x3170, 0x3a99, 0x315d, 0x3a95, 0x313d, 0x3a8d, 0x310c, 0x3a82, 0x30ca, 0x3a76, 0x3077, 0x3a69, 0x3019, 0x3a5c, 0x2f68, 0x3a4f, 0x2e9e, 0x3a42, 0x2dde, 0x3a37, 0x2d2b, 0x3a30, 0x2c89, 0x3a29, 0x2bef, 0x3a1f, 0x2af0, 0x3a12, 0x2a0f, 0x3a03, 0x294a, 0x39f1, 0x28a0, 0x39dc, 0x280c, 0x39c5, 0x2717, 0x39a9, 0x2638, 0x398b, 0x2578, 0x396a, 0x24d0, 0x3947, 0x243f, 0x3923, 0x2380, 0x38fc, 0x22a4, 0x38d4, 0x21e4, 0x38ac, 0x213c, 0x3883, 0x20a8,
|
|
25
|
+
0x3ae8, 0x3062, 0x3ae8, 0x3062, 0x3ae7, 0x3061, 0x3ae6, 0x305f, 0x3ae4, 0x305a, 0x3ae0, 0x304f, 0x3ada, 0x303b, 0x3ad1, 0x301b, 0x3ac5, 0x2fdd, 0x3ab6, 0x2f6a, 0x3aa4, 0x2ede, 0x3a91, 0x2e45, 0x3a7c, 0x2da5, 0x3a67, 0x2d0a, 0x3a57, 0x2c77, 0x3a48, 0x2bdc, 0x3a38, 0x2ae5, 0x3a27, 0x2a0a, 0x3a16, 0x2947, 0x3a02, 0x289d, 0x39eb, 0x2808, 0x39d3, 0x270d, 0x39b6, 0x262b, 0x3997, 0x256a, 0x3976, 0x24bf, 0x3952, 0x242b, 0x392d, 0x2358, 0x3904, 0x227a, 0x38db, 0x21b8, 0x38b2, 0x2110, 0x3887, 0x207d, 0x385b, 0x1ff6,
|
|
26
|
+
0x3b23, 0x2ee8, 0x3b23, 0x2ee8, 0x3b22, 0x2ee8, 0x3b21, 0x2ee7, 0x3b1f, 0x2ee3, 0x3b1a, 0x2ed6, 0x3b14, 0x2ec1, 0x3b0b, 0x2e99, 0x3afe, 0x2e60, 0x3aee, 0x2e12, 0x3ad8, 0x2dad, 0x3ac1, 0x2d3d, 0x3aa5, 0x2cc3, 0x3a8b, 0x2c48, 0x3a76, 0x2ba2, 0x3a60, 0x2ac0, 0x3a49, 0x29f2, 0x3a32, 0x2938, 0x3a1b, 0x2893, 0x3a02, 0x27ff, 0x39e8, 0x26ff, 0x39ca, 0x261e, 0x39aa, 0x255b, 0x3988, 0x24b0, 0x3964, 0x241c, 0x393d, 0x2336, 0x3913, 0x2257, 0x38e9, 0x2195, 0x38be, 0x20eb, 0x3891, 0x2059, 0x3864, 0x1fae, 0x3837, 0x1ecd,
|
|
27
|
+
0x3b54, 0x2d61, 0x3b54, 0x2d61, 0x3b53, 0x2d61, 0x3b52, 0x2d62, 0x3b4f, 0x2d61, 0x3b4b, 0x2d5c, 0x3b45, 0x2d51, 0x3b3b, 0x2d3d, 0x3b2e, 0x2d1a, 0x3b1d, 0x2ce7, 0x3b06, 0x2ca3, 0x3aeb, 0x2c52, 0x3acb, 0x2bee, 0x3ab0, 0x2b31, 0x3a94, 0x2a74, 0x3a77, 0x29bf, 0x3a5a, 0x2915, 0x3a3f, 0x287a, 0x3a22, 0x27de, 0x3a05, 0x26e4, 0x39e5, 0x2609, 0x39c3, 0x2547, 0x39a0, 0x249f, 0x397b, 0x240c, 0x3953, 0x2314, 0x3928, 0x2238, 0x38fd, 0x2175, 0x38d0, 0x20cb, 0x38a2, 0x2038, 0x3873, 0x1f71, 0x3844, 0x1e90, 0x3815, 0x1dce,
|
|
28
|
+
0x3b7c, 0x2c22, 0x3b7c, 0x2c22, 0x3b7b, 0x2c23, 0x3b7a, 0x2c25, 0x3b77, 0x2c27, 0x3b73, 0x2c26, 0x3b6d, 0x2c23, 0x3b64, 0x2c1a, 0x3b57, 0x2c07, 0x3b46, 0x2bd1, 0x3b2e, 0x2b79, 0x3b0f, 0x2b07, 0x3aef, 0x2a86, 0x3ad1, 0x29f8, 0x3ab0, 0x2967, 0x3a8e, 0x28d7, 0x3a6d, 0x284e, 0x3a4c, 0x279f, 0x3a2b, 0x26b7, 0x3a08, 0x25e5, 0x39e4, 0x252c, 0x39be, 0x2488, 0x3998, 0x23f0, 0x396f, 0x22f2, 0x3943, 0x2215, 0x3917, 0x2155, 0x38e8, 0x20ae, 0x38b9, 0x201c, 0x3888, 0x1f38, 0x3857, 0x1e5a, 0x3826, 0x1d9a, 0x37eb, 0x1cf0,
|
|
29
|
+
0x3b9c, 0x2a43, 0x3b9c, 0x2a43, 0x3b9b, 0x2a46, 0x3b9a, 0x2a4a, 0x3b98, 0x2a50, 0x3b93, 0x2a54, 0x3b8e, 0x2a59, 0x3b85, 0x2a56, 0x3b79, 0x2a45, 0x3b67, 0x2a24, 0x3b4f, 0x29ee, 0x3b2f, 0x29a4, 0x3b10, 0x294b, 0x3aef, 0x28e5, 0x3ac9, 0x2877, 0x3aa4, 0x2809, 0x3a7e, 0x2739, 0x3a59, 0x266d, 0x3a34, 0x25af, 0x3a0c, 0x2503, 0x39e4, 0x2468, 0x39bb, 0x23bb, 0x3990, 0x22c6, 0x3963, 0x21f0, 0x3936, 0x2133, 0x3906, 0x208f, 0x38d5, 0x1ffd, 0x38a3, 0x1f04, 0x3870, 0x1e28, 0x383d, 0x1d69, 0x380b, 0x1cc3, 0x37b0, 0x1c32,
|
|
30
|
+
0x3bb5, 0x28aa, 0x3bb5, 0x28ab, 0x3bb5, 0x28ad, 0x3bb4, 0x28b2, 0x3bb2, 0x28b9, 0x3bae, 0x28c2, 0x3ba8, 0x28ca, 0x3ba0, 0x28d1, 0x3b94, 0x28cd, 0x3b83, 0x28c1, 0x3b6a, 0x28a3, 0x3b4b, 0x2876, 0x3b2d, 0x283d, 0x3b09, 0x27ea, 0x3ae1, 0x274b, 0x3ab9, 0x26a6, 0x3a8f, 0x25fe, 0x3a67, 0x255d, 0x3a3d, 0x24c5, 0x3a11, 0x2439, 0x39e6, 0x2371, 0x39b9, 0x228d, 0x398a, 0x21c1, 0x395a, 0x210b, 0x3929, 0x206c, 0x38f7, 0x1fc1, 0x38c3, 0x1ecb, 0x388f, 0x1df6, 0x385a, 0x1d3a, 0x3825, 0x1c99, 0x37e1, 0x1c08, 0x3779, 0x1b1b,
|
|
31
|
+
0x3bc9, 0x26d3, 0x3bc9, 0x26d4, 0x3bc9, 0x26d9, 0x3bc8, 0x26e3, 0x3bc6, 0x26ef, 0x3bc2, 0x2705, 0x3bbd, 0x271a, 0x3bb6, 0x2731, 0x3baa, 0x273c, 0x3b9a, 0x273d, 0x3b81, 0x2726, 0x3b65, 0x26f7, 0x3b46, 0x26af, 0x3b20, 0x2650, 0x3af7, 0x25e1, 0x3acd, 0x256a, 0x3aa1, 0x24eb, 0x3a75, 0x246f, 0x3a46, 0x23ee, 0x3a17, 0x230d, 0x39e9, 0x223e, 0x39b7, 0x2183, 0x3985, 0x20d8, 0x3953, 0x2043, 0x391e, 0x1f7a, 0x38e9, 0x1e8d, 0x38b3, 0x1dbf, 0x387c, 0x1d0b, 0x3845, 0x1c6c, 0x380e, 0x1bc4, 0x37b0, 0x1ad2, 0x3745, 0x19fd,
|
|
32
|
+
0x3bd9, 0x24e4, 0x3bd9, 0x24e5, 0x3bd9, 0x24e8, 0x3bd8, 0x24f2, 0x3bd5, 0x24fe, 0x3bd2, 0x2512, 0x3bce, 0x252b, 0x3bc6, 0x2544, 0x3bbc, 0x255a, 0x3bac, 0x256b, 0x3b93, 0x2569, 0x3b7a, 0x2557, 0x3b5b, 0x252f, 0x3b34, 0x24f7, 0x3b0c, 0x24ad, 0x3adf, 0x2458, 0x3ab1, 0x23f8, 0x3a82, 0x233f, 0x3a4f, 0x2286, 0x3a1e, 0x21d5, 0x39eb, 0x2130, 0x39b6, 0x2098, 0x3982, 0x200e, 0x394b, 0x1f25, 0x3914, 0x1e45, 0x38dc, 0x1d83, 0x38a3, 0x1cd6, 0x386b, 0x1c3d, 0x3831, 0x1b71, 0x37f2, 0x1a87, 0x3782, 0x19bc, 0x3714, 0x1909,
|
|
33
|
+
0x3be5, 0x22d8, 0x3be5, 0x22d9, 0x3be4, 0x22df, 0x3be4, 0x22ef, 0x3be1, 0x2305, 0x3bde, 0x232a, 0x3bda, 0x2358, 0x3bd4, 0x2392, 0x3bcb, 0x23ca, 0x3bbb, 0x23f4, 0x3ba3, 0x2405, 0x3b8c, 0x2405, 0x3b6c, 0x23ec, 0x3b47, 0x23ae, 0x3b1d, 0x2353, 0x3af0, 0x22e2, 0x3ac0, 0x2261, 0x3a8e, 0x21d9, 0x3a5a, 0x214e, 0x3a26, 0x20c7, 0x39ee, 0x2045, 0x39b7, 0x1f97, 0x397f, 0x1eba, 0x3945, 0x1df0, 0x390b, 0x1d3a, 0x38d0, 0x1c9a, 0x3895, 0x1c0a, 0x385a, 0x1b18, 0x381f, 0x1a39, 0x37c9, 0x1975, 0x3756, 0x18cc, 0x36e6, 0x1836,
|
|
34
|
+
0x3bed, 0x20a8, 0x3bed, 0x20a9, 0x3bed, 0x20ae, 0x3bed, 0x20bb, 0x3beb, 0x20cf, 0x3be8, 0x20ef, 0x3be4, 0x2119, 0x3bde, 0x214f, 0x3bd6, 0x2189, 0x3bc6, 0x21b8, 0x3bb1, 0x21de, 0x3b9a, 0x21f2, 0x3b7b, 0x21f2, 0x3b57, 0x21d8, 0x3b2d, 0x21a4, 0x3b00, 0x215f, 0x3acf, 0x2108, 0x3a99, 0x20a8, 0x3a64, 0x2043, 0x3a2c, 0x1fba, 0x39f2, 0x1ef3, 0x39b8, 0x1e36, 0x397c, 0x1d86, 0x3940, 0x1ce5, 0x3903, 0x1c52, 0x38c6, 0x1b9e, 0x3888, 0x1ab3, 0x384a, 0x19e4, 0x380e, 0x192b, 0x37a3, 0x188b, 0x372d, 0x17f7, 0x36ba, 0x1701,
|
|
35
|
+
0x3bf4, 0x1e23, 0x3bf4, 0x1e25, 0x3bf4, 0x1e2d, 0x3bf3, 0x1e41, 0x3bf1, 0x1e64, 0x3bef, 0x1e9c, 0x3beb, 0x1ee1, 0x3be6, 0x1f40, 0x3bde, 0x1fa7, 0x3bce, 0x2001, 0x3bbd, 0x202f, 0x3ba6, 0x204e, 0x3b88, 0x205f, 0x3b64, 0x205b, 0x3b3b, 0x2044, 0x3b0e, 0x201f, 0x3adb, 0x1fcf, 0x3aa6, 0x1f4e, 0x3a6e, 0x1ec1, 0x3a33, 0x1e2b, 0x39f7, 0x1d95, 0x39ba, 0x1d06, 0x397b, 0x1c7d, 0x393c, 0x1bfc, 0x38fc, 0x1b13, 0x38bc, 0x1a40, 0x387c, 0x1983, 0x383c, 0x18da, 0x37fa, 0x1842, 0x377f, 0x177f, 0x3706, 0x1695, 0x3691, 0x15c8,
|
|
36
|
+
0x3bf8, 0x1bca, 0x3bf8, 0x1bcc, 0x3bf8, 0x1bd8, 0x3bf8, 0x1bf7, 0x3bf6, 0x1c1b, 0x3bf4, 0x1c45, 0x3bf1, 0x1c83, 0x3bec, 0x1cce, 0x3be4, 0x1d21, 0x3bd5, 0x1d78, 0x3bc5, 0x1dd1, 0x3bb0, 0x1e17, 0x3b93, 0x1e4a, 0x3b70, 0x1e5f, 0x3b48, 0x1e57, 0x3b1b, 0x1e35, 0x3ae7, 0x1df6, 0x3ab2, 0x1da4, 0x3a77, 0x1d44, 0x3a3a, 0x1cdb, 0x39fc, 0x1c6e, 0x39bb, 0x1c03, 0x397a, 0x1b35, 0x3938, 0x1a72, 0x38f5, 0x19bb, 0x38b3, 0x1914, 0x3870, 0x187d, 0x382e, 0x17eb, 0x37db, 0x16f9, 0x375c, 0x1621, 0x36e1, 0x1565, 0x3669, 0x14be,
|
|
37
|
+
0x3bfb, 0x18b9, 0x3bfb, 0x18ba, 0x3bfb, 0x18c3, 0x3bfb, 0x18da, 0x3bf9, 0x190a, 0x3bf7, 0x1948, 0x3bf5, 0x19ac, 0x3bf0, 0x1a20, 0x3be9, 0x1ab3, 0x3bdb, 0x1b49, 0x3bcd, 0x1be6, 0x3bb7, 0x1c34, 0x3b9c, 0x1c6d, 0x3b7a, 0x1c8e, 0x3b54, 0x1c9e, 0x3b26, 0x1c96, 0x3af2, 0x1c75, 0x3abc, 0x1c47, 0x3a80, 0x1c09, 0x3a42, 0x1b85, 0x3a01, 0x1aec, 0x39be, 0x1a50, 0x397a, 0x19b5, 0x3935, 0x1921, 0x38f0, 0x1895, 0x38aa, 0x1814, 0x3866, 0x173a, 0x3821, 0x1665, 0x37be, 0x15a4, 0x373c, 0x14f9, 0x36be, 0x1460, 0x3644, 0x13b3,
|
|
38
|
+
0x3bfd, 0x156b, 0x3bfd, 0x156c, 0x3bfd, 0x1578, 0x3bfd, 0x1598, 0x3bfc, 0x15dd, 0x3bfa, 0x163c, 0x3bf7, 0x16cb, 0x3bf3, 0x177b, 0x3beb, 0x1833, 0x3be0, 0x18ad, 0x3bd2, 0x192e, 0x3bbd, 0x19a6, 0x3ba4, 0x1a0c, 0x3b83, 0x1a5a, 0x3b5d, 0x1a8c, 0x3b30, 0x1a9b, 0x3afd, 0x1a86, 0x3ac6, 0x1a5c, 0x3a89, 0x1a11, 0x3a49, 0x19b7, 0x3a06, 0x194f, 0x39c1, 0x18e3, 0x397a, 0x1873, 0x3933, 0x1805, 0x38eb, 0x173a, 0x38a3, 0x1676, 0x385c, 0x15bf, 0x3816, 0x1519, 0x37a2, 0x1482, 0x371d, 0x13f7, 0x369c, 0x1306, 0x3620, 0x1231,
|
|
39
|
+
0x3bff, 0x11cb, 0x3bff, 0x11cd, 0x3bfe, 0x11dd, 0x3bfe, 0x1219, 0x3bfd, 0x126b, 0x3bfb, 0x12e9, 0x3bf9, 0x13c5, 0x3bf5, 0x1460, 0x3bee, 0x150f, 0x3be3, 0x15c9, 0x3bd6, 0x168a, 0x3bc3, 0x174f, 0x3baa, 0x1806, 0x3b8b, 0x184f, 0x3b66, 0x1888, 0x3b39, 0x18a6, 0x3b07, 0x18ad, 0x3acf, 0x189c, 0x3a92, 0x1876, 0x3a50, 0x1840, 0x3a0c, 0x17fd, 0x39c4, 0x176a, 0x397b, 0x16ce, 0x3931, 0x1634, 0x38e6, 0x1599, 0x389c, 0x1508, 0x3852, 0x147f, 0x380a, 0x1401, 0x3788, 0x131c, 0x36ff, 0x124a, 0x367c, 0x1190, 0x35fe, 0x10ea,
|
|
40
|
+
0x3bff, 0x0daa, 0x3bff, 0x0dad, 0x3bff, 0x0dc0, 0x3bff, 0x0e0e, 0x3bfe, 0x0e87, 0x3bfc, 0x0f14, 0x3bfb, 0x1029, 0x3bf7, 0x10d1, 0x3bf0, 0x11d3, 0x3be6, 0x12c9, 0x3bd9, 0x13fc, 0x3bc7, 0x1499, 0x3bb0, 0x152a, 0x3b92, 0x15ab, 0x3b6e, 0x1615, 0x3b42, 0x165a, 0x3b10, 0x1681, 0x3ad8, 0x1683, 0x3a9a, 0x1665, 0x3a57, 0x1629, 0x3a11, 0x15dd, 0x39c8, 0x1580, 0x397c, 0x1518, 0x3930, 0x14ae, 0x38e3, 0x1441, 0x3896, 0x13b1, 0x384a, 0x12e9, 0x37ff, 0x122f, 0x376f, 0x1182, 0x36e3, 0x10e5, 0x365e, 0x1057, 0x35de, 0x0fac,
|
|
41
|
+
0x3c00, 0x08ea, 0x3c00, 0x08ed, 0x3c00, 0x0902, 0x3c00, 0x0961, 0x3bff, 0x09f3, 0x3bfd, 0x0abc, 0x3bfb, 0x0c1f, 0x3bf8, 0x0d15, 0x3bf1, 0x0e5b, 0x3be8, 0x0fb4, 0x3bdc, 0x10b0, 0x3bcb, 0x1190, 0x3bb5, 0x126c, 0x3b97, 0x132c, 0x3b74, 0x13de, 0x3b4a, 0x1432, 0x3b18, 0x145e, 0x3ae0, 0x1472, 0x3aa2, 0x146f, 0x3a5f, 0x1456, 0x3a17, 0x142e, 0x39cc, 0x13ee, 0x397e, 0x136b, 0x392f, 0x12e1, 0x38df, 0x124f, 0x3890, 0x11bd, 0x3842, 0x1131, 0x37eb, 0x10ac, 0x3757, 0x102e, 0x36c9, 0x0f76, 0x3640, 0x0ea3, 0x35bf, 0x0de4,
|
|
42
|
+
0x3c00, 0x039b, 0x3c00, 0x039d, 0x3c00, 0x03b2, 0x3c00, 0x041c, 0x3bff, 0x04be, 0x3bfd, 0x05d6, 0x3bfc, 0x0764, 0x3bf8, 0x08e2, 0x3bf2, 0x0a67, 0x3bea, 0x0c1b, 0x3bde, 0x0d41, 0x3bcd, 0x0e5f, 0x3bb8, 0x0f8c, 0x3b9c, 0x1057, 0x3b7a, 0x10e5, 0x3b51, 0x1155, 0x3b20, 0x11a5, 0x3ae8, 0x11da, 0x3aaa, 0x11ef, 0x3a66, 0x11e5, 0x3a1d, 0x11c1, 0x39d0, 0x1185, 0x3980, 0x113b, 0x392e, 0x10e5, 0x38dc, 0x1087, 0x388b, 0x1028, 0x383b, 0x0f94, 0x37d9, 0x0edb, 0x3741, 0x0e2c, 0x36af, 0x0d89, 0x3625, 0x0cf2, 0x35a1, 0x0c69,
|
|
43
|
+
0x3c00, 0x0107, 0x3c00, 0x0108, 0x3c00, 0x0110, 0x3c00, 0x0145, 0x3bff, 0x0197, 0x3bfe, 0x0224, 0x3bfc, 0x030c, 0x3bf8, 0x0478, 0x3bf3, 0x062c, 0x3beb, 0x0833, 0x3be0, 0x0979, 0x3bd0, 0x0aeb, 0x3bbc, 0x0c3d, 0x3ba0, 0x0d01, 0x3b80, 0x0dbd, 0x3b57, 0x0e69, 0x3b27, 0x0eeb, 0x3af0, 0x0f53, 0x3ab1, 0x0f8a, 0x3a6c, 0x0f9f, 0x3a22, 0x0f8b, 0x39d4, 0x0f5b, 0x3982, 0x0f0f, 0x392f, 0x0eac, 0x38da, 0x0e3d, 0x3886, 0x0dc9, 0x3834, 0x0d51, 0x37c7, 0x0cd9, 0x372c, 0x0c65, 0x3697, 0x0bef, 0x360a, 0x0b20, 0x3585, 0x0a62,
|
|
44
|
+
0x3c00, 0x0031, 0x3c00, 0x0031, 0x3c00, 0x0034, 0x3c00, 0x004b, 0x3bff, 0x006f, 0x3bfe, 0x00c9, 0x3bfc, 0x011b, 0x3bf9, 0x0207, 0x3bf4, 0x02d6, 0x3bec, 0x0415, 0x3be1, 0x0587, 0x3bd2, 0x0703, 0x3bbf, 0x087d, 0x3ba5, 0x096a, 0x3b85, 0x0a59, 0x3b5d, 0x0b32, 0x3b2e, 0x0bee, 0x3af7, 0x0c44, 0x3ab8, 0x0c7c, 0x3a73, 0x0c9c, 0x3a28, 0x0ca4, 0x39d8, 0x0c98, 0x3985, 0x0c77, 0x392f, 0x0c4a, 0x38d9, 0x0c10, 0x3882, 0x0ba0, 0x382e, 0x0b14, 0x37b6, 0x0a84, 0x3717, 0x09f5, 0x3680, 0x0969, 0x35f0, 0x08e6, 0x356a, 0x086a,
|
|
45
|
+
0x3c00, 0x0004, 0x3c00, 0x0004, 0x3c00, 0x0004, 0x3c00, 0x000d, 0x3bff, 0x0021, 0x3bfe, 0x003b, 0x3bfd, 0x0070, 0x3bf9, 0x00c7, 0x3bf4, 0x012e, 0x3bed, 0x01c8, 0x3be3, 0x0274, 0x3bd4, 0x033b, 0x3bc1, 0x043a, 0x3ba8, 0x0534, 0x3b89, 0x0641, 0x3b62, 0x073b, 0x3b34, 0x0815, 0x3afd, 0x087c, 0x3abf, 0x08d0, 0x3a7a, 0x090a, 0x3a2e, 0x092c, 0x39dd, 0x0936, 0x3988, 0x0928, 0x3930, 0x0907, 0x38d7, 0x08d7, 0x387f, 0x089b, 0x3828, 0x0855, 0x37a7, 0x080b, 0x3704, 0x077b, 0x366a, 0x06e1, 0x35d8, 0x0649, 0x3550, 0x05b8,
|
|
46
|
+
0x3c00, 0x0000, 0x3c00, 0x0000, 0x3c00, 0x0000, 0x3c00, 0x0003, 0x3bff, 0x0012, 0x3bfe, 0x001a, 0x3bfd, 0x0035, 0x3bfa, 0x0050, 0x3bf4, 0x0061, 0x3bed, 0x00a5, 0x3be4, 0x00ee, 0x3bd6, 0x0146, 0x3bc3, 0x01ab, 0x3bab, 0x0211, 0x3b8d, 0x028e, 0x3b67, 0x0303, 0x3b39, 0x0375, 0x3b04, 0x03e2, 0x3ac6, 0x0441, 0x3a80, 0x0492, 0x3a34, 0x04cd, 0x39e1, 0x04f2, 0x398b, 0x0504, 0x3931, 0x0502, 0x38d6, 0x04ec, 0x387c, 0x04c7, 0x3822, 0x0496, 0x3798, 0x045c, 0x36f2, 0x041a, 0x3655, 0x03d5, 0x35c1, 0x038e, 0x3537, 0x0347
|
|
47
|
+
] );
|
|
8
48
|
|
|
9
|
-
|
|
49
|
+
let lut = null;
|
|
50
|
+
|
|
51
|
+
const DFGApprox = /*@__PURE__*/ Fn( ( { roughness, dotNV } ) => {
|
|
10
52
|
|
|
11
|
-
|
|
53
|
+
if ( lut === null ) {
|
|
12
54
|
|
|
13
|
-
|
|
55
|
+
lut = new DataTexture( DATA, 32, 32, RGFormat, HalfFloatType );
|
|
56
|
+
lut.minFilter = LinearFilter;
|
|
57
|
+
lut.magFilter = LinearFilter;
|
|
58
|
+
lut.wrapS = ClampToEdgeWrapping;
|
|
59
|
+
lut.wrapT = ClampToEdgeWrapping;
|
|
60
|
+
lut.generateMipmaps = false;
|
|
61
|
+
lut.needsUpdate = true;
|
|
14
62
|
|
|
15
|
-
|
|
63
|
+
}
|
|
16
64
|
|
|
17
|
-
const
|
|
65
|
+
const uv = vec2( roughness, dotNV );
|
|
18
66
|
|
|
19
|
-
return
|
|
67
|
+
return texture( lut, uv ).rg;
|
|
20
68
|
|
|
21
|
-
} ).setLayout( {
|
|
22
|
-
name: 'DFGApprox',
|
|
23
|
-
type: 'vec2',
|
|
24
|
-
inputs: [
|
|
25
|
-
{ name: 'roughness', type: 'float' },
|
|
26
|
-
{ name: 'dotNV', type: 'vec3' }
|
|
27
|
-
]
|
|
28
69
|
} );
|
|
29
70
|
|
|
30
71
|
export default DFGApprox;
|
|
@@ -4,6 +4,7 @@ import { MultiplyOperation, MixOperation, AddOperation } from '../../constants.j
|
|
|
4
4
|
import { materialSpecularStrength, materialReflectivity } from '../accessors/MaterialNode.js';
|
|
5
5
|
import { mix } from '../math/MathNode.js';
|
|
6
6
|
import { vec4 } from '../tsl/TSLBase.js';
|
|
7
|
+
import { warn } from '../../utils.js';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Represents the lighting model for unlit materials. The only light contribution
|
|
@@ -85,7 +86,7 @@ class BasicLightingModel extends LightingModel {
|
|
|
85
86
|
break;
|
|
86
87
|
|
|
87
88
|
default:
|
|
88
|
-
|
|
89
|
+
warn( 'BasicLightingModel: Unsupported .combine value:', material.combine );
|
|
89
90
|
break;
|
|
90
91
|
|
|
91
92
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import BRDF_Lambert from './BSDF/BRDF_Lambert.js';
|
|
2
2
|
import BRDF_GGX from './BSDF/BRDF_GGX.js';
|
|
3
|
+
import BRDF_GGX_Multiscatter from './BSDF/BRDF_GGX_Multiscatter.js';
|
|
3
4
|
import DFGApprox from './BSDF/DFGApprox.js';
|
|
4
5
|
import EnvironmentBRDF from './BSDF/EnvironmentBRDF.js';
|
|
5
6
|
import F_Schlick from './BSDF/F_Schlick.js';
|
|
@@ -561,7 +562,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
561
562
|
const Ess = fab.x.add( fab.y );
|
|
562
563
|
const Ems = Ess.oneMinus();
|
|
563
564
|
|
|
564
|
-
const Favg =
|
|
565
|
+
const Favg = Fr.add( Fr.oneMinus().mul( 0.047619 ) ); // 1/21
|
|
565
566
|
const Fms = FssEss.mul( Favg ).div( Ems.mul( Favg ).oneMinus() );
|
|
566
567
|
|
|
567
568
|
singleScatter.addAssign( FssEss );
|
|
@@ -597,7 +598,7 @@ class PhysicalLightingModel extends LightingModel {
|
|
|
597
598
|
|
|
598
599
|
reflectedLight.directDiffuse.addAssign( irradiance.mul( BRDF_Lambert( { diffuseColor: diffuseColor.rgb } ) ) );
|
|
599
600
|
|
|
600
|
-
reflectedLight.directSpecular.addAssign( irradiance.mul(
|
|
601
|
+
reflectedLight.directSpecular.addAssign( irradiance.mul( BRDF_GGX_Multiscatter( { lightDirection, f0: specularColor, f90: 1, roughness, f: this.iridescenceFresnel, USE_IRIDESCENCE: this.iridescence, USE_ANISOTROPY: this.anisotropy } ) ) );
|
|
601
602
|
|
|
602
603
|
}
|
|
603
604
|
|
|
@@ -30,7 +30,7 @@ class VolumetricLightingModel extends LightingModel {
|
|
|
30
30
|
|
|
31
31
|
start( builder ) {
|
|
32
32
|
|
|
33
|
-
const { material
|
|
33
|
+
const { material } = builder;
|
|
34
34
|
|
|
35
35
|
const startPos = property( 'vec3' );
|
|
36
36
|
const endPos = property( 'vec3' );
|
|
@@ -79,13 +79,13 @@ class VolumetricLightingModel extends LightingModel {
|
|
|
79
79
|
|
|
80
80
|
linearDepthRay.assign( linearDepth( viewZToPerspectiveDepth( positionViewRay.z, cameraNear, cameraFar ) ) );
|
|
81
81
|
|
|
82
|
-
context.sceneDepthNode = linearDepth( material.depthNode ).toVar();
|
|
82
|
+
builder.context.sceneDepthNode = linearDepth( material.depthNode ).toVar();
|
|
83
83
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
context.positionWorld = positionRay;
|
|
87
|
-
context.shadowPositionWorld = positionRay;
|
|
88
|
-
context.positionView = positionViewRay;
|
|
86
|
+
builder.context.positionWorld = positionRay;
|
|
87
|
+
builder.context.shadowPositionWorld = positionRay;
|
|
88
|
+
builder.context.positionView = positionViewRay;
|
|
89
89
|
|
|
90
90
|
scatteringDensity.assign( 0 );
|
|
91
91
|
|