@aura3d/rendering 1.3.3 → 1.4.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/dist/ForwardPass.js +7 -1
- package/dist/ForwardPass.js.map +1 -1
- package/dist/MorphTarget.d.ts +1 -0
- package/dist/MorphTarget.d.ts.map +1 -1
- package/dist/MorphTarget.js.map +1 -1
- package/dist/Renderer.js +7 -1
- package/dist/Renderer.js.map +1 -1
- package/package.json +38 -4
- package/src/ArchitecturalLightingFixtures.ts +0 -241
- package/src/ArchitecturalMaterialCatalog.ts +0 -130
- package/src/ArchitecturalMeasurementFixtures.ts +0 -155
- package/src/BRDFLut.ts +0 -47
- package/src/CameraFraming.ts +0 -200
- package/src/CanonicalSceneFixtures.ts +0 -95
- package/src/CascadedShadowMaps.ts +0 -449
- package/src/ColorManagement.ts +0 -127
- package/src/CullingFixtures.ts +0 -280
- package/src/DecalGeometry.ts +0 -26
- package/src/DepthPass.ts +0 -110
- package/src/EnvironmentBackgroundPass.ts +0 -194
- package/src/EnvironmentBackgroundResources.ts +0 -309
- package/src/EnvironmentLighting.ts +0 -96
- package/src/EnvironmentMapResources.ts +0 -1026
- package/src/EnvironmentPipeline.ts +0 -69
- package/src/EnvironmentPlatform.ts +0 -1306
- package/src/EnvironmentPreset.ts +0 -155
- package/src/Exposure.ts +0 -66
- package/src/ExternalParityRenderPreset.ts +0 -725
- package/src/ForwardPass.ts +0 -1663
- package/src/FrameVisualMetrics.ts +0 -301
- package/src/Geometry.ts +0 -461
- package/src/GeometryPrimitives.ts +0 -2
- package/src/HDRRenderPipeline.ts +0 -94
- package/src/IBL.ts +0 -86
- package/src/IndexBuffer.ts +0 -57
- package/src/InstancedPBRMaterial.ts +0 -186
- package/src/InstancedUnlitMaterial.ts +0 -60
- package/src/Instancing.ts +0 -19
- package/src/LightCollector.ts +0 -82
- package/src/LightUniforms.ts +0 -47
- package/src/LightingDebug.ts +0 -80
- package/src/LightingDefaults.ts +0 -79
- package/src/LightingRig.ts +0 -301
- package/src/LineGeometry.ts +0 -2
- package/src/Material.ts +0 -209
- package/src/MaterialBinding.ts +0 -131
- package/src/MaterialInstance.ts +0 -59
- package/src/MaterialPresets.ts +0 -272
- package/src/MorphTarget.ts +0 -123
- package/src/MorphTargetPlan.ts +0 -178
- package/src/MorphUnlitMaterial.ts +0 -60
- package/src/NormalMappedPBRMaterial.ts +0 -188
- package/src/OceanFixtures.ts +0 -318
- package/src/PBRLightingDefaults.ts +0 -12
- package/src/PBRMaterial.ts +0 -442
- package/src/PMREM.ts +0 -53
- package/src/PbrReference.ts +0 -681
- package/src/PostProcessPass.ts +0 -2507
- package/src/ProceduralTextureFixtures.ts +0 -393
- package/src/ProductTurntableFixtures.ts +0 -815
- package/src/Raycaster.ts +0 -21
- package/src/ReflectionProbe.ts +0 -13
- package/src/ReflectionSurfaces.ts +0 -219
- package/src/RenderBackend.ts +0 -43
- package/src/RenderDebugViews.ts +0 -138
- package/src/RenderDevice.ts +0 -836
- package/src/RenderGraph.ts +0 -194
- package/src/RenderPass.ts +0 -27
- package/src/RenderPipeline.ts +0 -101
- package/src/RenderQueue.ts +0 -12
- package/src/RenderState.ts +0 -12
- package/src/Renderer.ts +0 -2626
- package/src/RendererDebugOverlay.ts +0 -80
- package/src/RendererFeatureGates.ts +0 -150
- package/src/RendererPostprocessPlan.ts +0 -279
- package/src/RendererTiming.ts +0 -251
- package/src/RendererVisualPipelineReport.ts +0 -836
- package/src/ResourceLifecycle.ts +0 -21
- package/src/Sampler.ts +0 -37
- package/src/SceneOptimization.ts +0 -518
- package/src/ShaderChunks.ts +0 -393
- package/src/ShaderLibrary.ts +0 -2766
- package/src/ShaderModule.ts +0 -36
- package/src/ShaderPreprocessor.ts +0 -260
- package/src/ShaderReflection.ts +0 -201
- package/src/ShadowMap.ts +0 -237
- package/src/ShadowPass.ts +0 -198
- package/src/ShadowProjection.ts +0 -115
- package/src/SkinnedLitMaterial.ts +0 -397
- package/src/SkinnedUnlitMaterial.ts +0 -63
- package/src/SkinningBounds.ts +0 -131
- package/src/SpaceEnvironmentFixtures.ts +0 -200
- package/src/SpriteGeometry.ts +0 -21
- package/src/StereoCameraRig.ts +0 -127
- package/src/StereoEffects.ts +0 -274
- package/src/TerrainFixtures.ts +0 -180
- package/src/Texture.ts +0 -307
- package/src/TextureBinding.ts +0 -91
- package/src/TexturedPBRMaterial.ts +0 -1112
- package/src/TexturedUnlitMaterial.ts +0 -67
- package/src/ToneMapping.ts +0 -105
- package/src/UniformBinder.ts +0 -16
- package/src/UniformLayout.ts +0 -129
- package/src/UnlitMaterial.ts +0 -75
- package/src/VegetationFixtures.ts +0 -314
- package/src/VertexBuffer.ts +0 -120
- package/src/VertexFormat.ts +0 -171
- package/src/VoxelWorldFixtures.ts +0 -280
- package/src/WeatherFixtures.ts +0 -223
- package/src/WebGL2Device.ts +0 -2280
- package/src/WebGL2StateCache.ts +0 -330
- package/src/WebGPUDevice.ts +0 -2877
- package/src/WebGPURenderToTextureProof.ts +0 -139
- package/src/advanced-runtime/AdvancedRenderer.ts +0 -73
- package/src/advanced-runtime/index.ts +0 -9
- package/src/animation/AnimationMaterialStyle.ts +0 -32
- package/src/animation/AnimationRenderPreset.ts +0 -45
- package/src/animation/AnimationToonMaterial.ts +0 -387
- package/src/animation/AnimationVisualQuality.ts +0 -71
- package/src/animation/applyAnimationRenderPreset.ts +0 -180
- package/src/animation/index.ts +0 -5
- package/src/cinematic/BloomPass.ts +0 -26
- package/src/cinematic/CinematicDepthComposition.ts +0 -30
- package/src/cinematic/CinematicEvidence.ts +0 -123
- package/src/cinematic/CinematicLightingRig.ts +0 -144
- package/src/cinematic/CinematicMaterialPresets.ts +0 -130
- package/src/cinematic/CinematicPostProcess.ts +0 -83
- package/src/cinematic/DepthHazePass.ts +0 -30
- package/src/cinematic/EmissivePracticalLightSystem.ts +0 -45
- package/src/cinematic/FilmGrainPass.ts +0 -24
- package/src/cinematic/FogVolumeSystem.ts +0 -30
- package/src/cinematic/GlowCardSystem.ts +0 -44
- package/src/cinematic/RainParticleSystem.ts +0 -151
- package/src/cinematic/VignettePass.ts +0 -25
- package/src/cinematic/WetReflectionApproximation.ts +0 -27
- package/src/cinematic/index.ts +0 -14
- package/src/effects/CollisionModule.ts +0 -64
- package/src/effects/ColorModule.ts +0 -60
- package/src/effects/ForceModule.ts +0 -25
- package/src/effects/GPUParticleBackend.ts +0 -569
- package/src/effects/Particle.ts +0 -108
- package/src/effects/ParticleDiagnostics.ts +0 -224
- package/src/effects/ParticleEffectPresets.ts +0 -147
- package/src/effects/ParticleEmitter.ts +0 -326
- package/src/effects/ParticleModule.ts +0 -26
- package/src/effects/ParticleRenderPass.ts +0 -117
- package/src/effects/ParticleRenderer.ts +0 -132
- package/src/effects/ParticleSystem.ts +0 -333
- package/src/effects/SizeModule.ts +0 -56
- package/src/effects/TrailModule.ts +0 -72
- package/src/effects/VelocityModule.ts +0 -75
- package/src/effects/index.ts +0 -15
- package/src/index.ts +0 -925
- package/src/materials/AlphaSorting.ts +0 -30
- package/src/materials/MaterialExtensions.ts +0 -42
- package/src/materials/PhysicalMaterial.ts +0 -133
- package/src/materials/TransmissionPass.ts +0 -51
- package/src/performance/BVH.ts +0 -18
- package/src/performance/Batcher.ts +0 -2
- package/src/performance/FrustumCuller.ts +0 -9
- package/src/performance/LOD.ts +0 -20
- package/src/performance/Octree.ts +0 -10
- package/src/performance/RenderItemSorting.ts +0 -170
- package/src/performance/RendererStats.ts +0 -43
- package/src/performance/ResourceBudget.ts +0 -44
- package/src/postprocess/BloomPass.ts +0 -28
- package/src/postprocess/CinematicDiagnostics.ts +0 -642
- package/src/postprocess/ColorGradingPass.ts +0 -24
- package/src/postprocess/DepthOfFieldPass.ts +0 -12
- package/src/postprocess/EffectComposer.ts +0 -349
- package/src/postprocess/SSAOPass.ts +0 -20
- package/src/postprocess/index.ts +0 -34
- package/src/production-runtime/AnimationControlsPipeline.ts +0 -77
- package/src/production-runtime/PBRHDRPipeline.ts +0 -381
- package/src/production-runtime/ProductionEffectsPipeline.ts +0 -85
- package/src/production-runtime/ProductionRendererTypes.ts +0 -136
- package/src/production-runtime/ProductionRuntimeRenderer.ts +0 -172
- package/src/production-runtime/ProductionWebGL2Renderer.ts +0 -313
- package/src/production-runtime/ProductionWebGPURenderer.ts +0 -396
- package/src/production-runtime/TransmissionBackdropCapture.ts +0 -130
- package/src/production-runtime/animation/MorphTargetRenderer.ts +0 -2
- package/src/production-runtime/animation/SkinningRenderer.ts +0 -2
- package/src/production-runtime/backends/RendererBackend.ts +0 -17
- package/src/production-runtime/backends/WebGL2RendererBackend.ts +0 -30
- package/src/production-runtime/backends/WebGPURendererBackend.ts +0 -24
- package/src/production-runtime/backends/webgl2/WebGL2Buffer.ts +0 -2
- package/src/production-runtime/backends/webgl2/WebGL2Capabilities.ts +0 -2
- package/src/production-runtime/backends/webgl2/WebGL2RenderTarget.ts +0 -2
- package/src/production-runtime/backends/webgl2/WebGL2Shader.ts +0 -2
- package/src/production-runtime/backends/webgl2/WebGL2StateCache.ts +0 -1
- package/src/production-runtime/backends/webgl2/WebGL2Texture.ts +0 -2
- package/src/production-runtime/backends/webgpu/WebGPUBuffer.ts +0 -2
- package/src/production-runtime/backends/webgpu/WebGPUCapabilities.ts +0 -2
- package/src/production-runtime/backends/webgpu/WebGPURenderTarget.ts +0 -2
- package/src/production-runtime/backends/webgpu/WebGPUShader.ts +0 -2
- package/src/production-runtime/backends/webgpu/WebGPUTexture.ts +0 -2
- package/src/production-runtime/color/ColorManagement.ts +0 -3
- package/src/production-runtime/color/ToneMapping.ts +0 -7
- package/src/production-runtime/diagnostics/FrameCapture.ts +0 -2
- package/src/production-runtime/diagnostics/GPUCapabilities.ts +0 -2
- package/src/production-runtime/diagnostics/RendererStats.ts +0 -2
- package/src/production-runtime/environment/EnvironmentMap.ts +0 -1
- package/src/production-runtime/environment/HDRLoader.ts +0 -57
- package/src/production-runtime/environment/PMREMGenerator.ts +0 -713
- package/src/production-runtime/framegraph/FrameGraph.ts +0 -18
- package/src/production-runtime/framegraph/RenderPass.ts +0 -15
- package/src/production-runtime/geometry/ProjectedDecalGeometry.ts +0 -439
- package/src/production-runtime/index.ts +0 -127
- package/src/production-runtime/lights/LightManager.ts +0 -7
- package/src/production-runtime/lights/ShadowMapRenderer.ts +0 -5
- package/src/production-runtime/materials/GLTFMaterialAdapter.ts +0 -6
- package/src/production-runtime/materials/GLTFPBRMaterialAdapter.ts +0 -2
- package/src/production-runtime/materials/MaterialCompiler.ts +0 -7
- package/src/production-runtime/materials/MaterialTextureBindings.ts +0 -5
- package/src/production-runtime/materials/PBRMaterial.ts +0 -2
- package/src/production-runtime/materials/PBRShaderFeatures.ts +0 -2
- package/src/production-runtime/passes/ContactShadowPass.ts +0 -184
- package/src/production-runtime/passes/DepthPrepass.ts +0 -7
- package/src/production-runtime/passes/OpaquePass.ts +0 -7
- package/src/production-runtime/passes/ShadowPass.ts +0 -7
- package/src/production-runtime/passes/SkyboxPass.ts +0 -7
- package/src/production-runtime/passes/ToneMappingPass.ts +0 -7
- package/src/production-runtime/passes/TransparentPass.ts +0 -7
- package/src/production-runtime/postprocess/BloomPass.ts +0 -51
- package/src/production-runtime/postprocess/ColorGradingPass.ts +0 -49
- package/src/production-runtime/postprocess/DOFPass.ts +0 -47
- package/src/production-runtime/postprocess/FXAAPass.ts +0 -53
- package/src/production-runtime/postprocess/ProductionEffectComposer.ts +0 -78
- package/src/production-runtime/postprocess/ProductionPostProcessTypes.ts +0 -174
- package/src/production-runtime/postprocess/SSAOPass.ts +0 -45
- package/src/production-runtime/resources/GPUBuffer.ts +0 -2
- package/src/production-runtime/resources/GPUTexture.ts +0 -2
- package/src/production-runtime/resources/RenderTarget.ts +0 -3
- package/src/production-runtime/resources/ResourceCache.ts +0 -7
- package/src/production-runtime/scene/Camera.ts +0 -1
- package/src/production-runtime/scene/Lights.ts +0 -2
- package/src/production-runtime/scene/RenderableMesh.ts +0 -2
- package/src/production-runtime/scene/RenderablePrimitive.ts +0 -1
- package/src/production-runtime/scene/RenderableScene.ts +0 -4
- package/src/production-runtime/shaders/ShaderProgramLibrary.ts +0 -7
- package/src/production-runtime/shaders/chunks/brdf.glsl +0 -2
- package/src/production-runtime/shaders/chunks/ibl.glsl +0 -3
- package/src/production-runtime/shaders/chunks/pbr.frag.glsl +0 -47
- package/src/production-runtime/shaders/chunks/pbr.vert.glsl +0 -8
- package/src/production-runtime/shaders/chunks/shadows.glsl +0 -2
- package/src/production-runtime/shaders/wgsl/pbr.wgsl +0 -3
- package/src/production-runtime/shaders/wgsl/postprocess.wgsl +0 -2
- package/src/production-runtime/shaders/wgsl/skybox.wgsl +0 -2
- package/src/shaders/depth.frag.glsl +0 -5
- package/src/shaders/depth.vert.glsl +0 -8
- package/src/shaders/pbr-direct.frag.glsl +0 -687
- package/src/shaders/pbr-direct.vert.glsl +0 -18
- package/src/shaders/unlit.frag.glsl +0 -18
- package/src/shaders/unlit.vert.glsl +0 -13
- package/src/shadows/CascadedShadowPipeline.ts +0 -53
- package/src/shadows/ContactShadows.ts +0 -106
- package/src/shadows/ShadowDebugViews.ts +0 -46
- package/src/threejs-compatibility/InstancingSystem.ts +0 -17
- package/src/threejs-compatibility/LightingSystem.ts +0 -22
- package/src/threejs-compatibility/MaterialSystem.ts +0 -9
- package/src/threejs-compatibility/RenderTargetSystem.ts +0 -35
- package/src/threejs-compatibility/RendererDiagnostics.ts +0 -61
- package/src/threejs-compatibility/SceneRenderer.ts +0 -34
- package/src/threejs-compatibility/ShadowSystem.ts +0 -19
- package/src/threejs-compatibility/TextureSystem.ts +0 -19
- package/src/threejs-compatibility/ThreeCompatRenderer.ts +0 -90
- package/src/threejs-compatibility/TransparencySystem.ts +0 -19
- package/src/threejs-compatibility/index.ts +0 -29
- package/src/threejs-compatibility/performance/BVH.ts +0 -14
- package/src/threejs-compatibility/performance/FrustumCulling.ts +0 -10
- package/src/threejs-compatibility/performance/Instancing.ts +0 -4
- package/src/threejs-compatibility/performance/LODSystem.ts +0 -16
- package/src/threejs-compatibility/performance/OcclusionCulling.ts +0 -6
- package/src/threejs-compatibility/performance/RaycastAcceleration.ts +0 -12
- package/src/threejs-compatibility/performance/RendererProfiler.ts +0 -19
- package/src/threejs-compatibility/performance/TextureStreaming.ts +0 -4
- package/src/threejs-compatibility/performance/index.ts +0 -12
- package/src/threejs-compatibility/postprocess/BloomPass.ts +0 -16
- package/src/threejs-compatibility/postprocess/ColorGradingPass.ts +0 -16
- package/src/threejs-compatibility/postprocess/DepthOfFieldPass.ts +0 -21
- package/src/threejs-compatibility/postprocess/EffectComposer.ts +0 -14
- package/src/threejs-compatibility/postprocess/FXAAPass.ts +0 -15
- package/src/threejs-compatibility/postprocess/MotionBlurPass.ts +0 -20
- package/src/threejs-compatibility/postprocess/OutlinePass.ts +0 -21
- package/src/threejs-compatibility/postprocess/PostProcessTypes.ts +0 -169
- package/src/threejs-compatibility/postprocess/RenderPass.ts +0 -9
- package/src/threejs-compatibility/postprocess/SMAAPass.ts +0 -15
- package/src/threejs-compatibility/postprocess/SSAOPass.ts +0 -21
- package/src/threejs-compatibility/postprocess/ShaderPass.ts +0 -7
- package/src/threejs-compatibility/postprocess/TAAPass.ts +0 -15
- package/src/threejs-compatibility/postprocess/VignettePass.ts +0 -16
- package/src/threejs-compatibility/postprocess/index.ts +0 -15
- package/src/threejs-compatibility/shaders/NodeMaterial.ts +0 -21
- package/src/threejs-compatibility/shaders/RawShaderMaterial.ts +0 -6
- package/src/threejs-compatibility/shaders/ShaderDiagnostics.ts +0 -17
- package/src/threejs-compatibility/shaders/ShaderMaterial.ts +0 -18
- package/src/threejs-compatibility/shaders/ThreeCompatShaderChunks.ts +0 -6
- package/src/threejs-compatibility/shaders/Uniforms.ts +0 -18
- package/src/threejs-compatibility/shaders/index.ts +0 -9
- package/src/threejs-compatibility/vfx/GPUPointCloud.ts +0 -7
- package/src/threejs-compatibility/vfx/LineRenderer.ts +0 -13
- package/src/threejs-compatibility/vfx/ParticleSystem.ts +0 -23
- package/src/threejs-compatibility/vfx/SpriteSystem.ts +0 -14
- package/src/threejs-compatibility/vfx/TrailRenderer.ts +0 -8
- package/src/threejs-compatibility/vfx/VFXDiagnostics.ts +0 -23
- package/src/threejs-compatibility/vfx/index.ts +0 -9
- package/src/threejs-example-parity/index.ts +0 -205
- package/src/webgpu/WebGPUBuffer.ts +0 -1
- package/src/webgpu/WebGPUCompute.ts +0 -2
- package/src/webgpu/WebGPUPipelineCache.ts +0 -15
- package/src/webgpu/WebGPUPostProcess.ts +0 -2
- package/src/webgpu/WebGPUTexture.ts +0 -2
- package/tsconfig.json +0 -26
- package/vitest.config.ts +0 -20
|
@@ -1,309 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createEnvironmentBackgroundUniforms,
|
|
3
|
-
type EnvironmentBackgroundEncoding,
|
|
4
|
-
type EnvironmentBackgroundOptions
|
|
5
|
-
} from "./EnvironmentBackgroundPass";
|
|
6
|
-
import { RenderDeviceError } from "./RenderDevice";
|
|
7
|
-
import { Texture, bytesPerPixel, type TextureColorSpace, type TextureCubeFace, type TextureFormat, type TexturePixelData } from "./Texture";
|
|
8
|
-
import { TextureBinding } from "./TextureBinding";
|
|
9
|
-
|
|
10
|
-
export type EnvironmentBackgroundPixelFormat = Extract<TextureFormat, "rgba8" | "rgba16f" | "rgba32f">;
|
|
11
|
-
|
|
12
|
-
export interface EnvironmentBackgroundResourceOptions {
|
|
13
|
-
readonly encoding?: EnvironmentBackgroundEncoding;
|
|
14
|
-
readonly intensity?: number;
|
|
15
|
-
readonly rotation?: number;
|
|
16
|
-
readonly outputColorSpace?: "linear" | "srgb";
|
|
17
|
-
readonly format?: EnvironmentBackgroundPixelFormat;
|
|
18
|
-
readonly colorSpace?: TextureColorSpace;
|
|
19
|
-
readonly textureLabel?: string;
|
|
20
|
-
readonly bindingName?: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface EquirectEnvironmentBackgroundResourceOptions extends EnvironmentBackgroundResourceOptions {
|
|
24
|
-
readonly width: number;
|
|
25
|
-
readonly height: number;
|
|
26
|
-
readonly data: TexturePixelData;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface CubemapEnvironmentBackgroundFacePixels {
|
|
30
|
-
readonly face: TextureCubeFace;
|
|
31
|
-
readonly data: TexturePixelData;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface CubemapEnvironmentBackgroundResourceOptions extends EnvironmentBackgroundResourceOptions {
|
|
35
|
-
readonly size: number;
|
|
36
|
-
readonly faces: readonly CubemapEnvironmentBackgroundFacePixels[];
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export const ENVIRONMENT_BACKGROUND_CUBE_FACES: readonly TextureCubeFace[] = ["px", "nx", "py", "ny", "pz", "nz"];
|
|
40
|
-
|
|
41
|
-
export function createEquirectEnvironmentBackgroundOptions(
|
|
42
|
-
options: EquirectEnvironmentBackgroundResourceOptions
|
|
43
|
-
): EnvironmentBackgroundOptions {
|
|
44
|
-
const format = options.format ?? "rgba8";
|
|
45
|
-
const encoding = options.encoding ?? "linear";
|
|
46
|
-
const colorSpace = options.colorSpace ?? textureColorSpaceForEncoding(encoding);
|
|
47
|
-
validateEquirectPixelSource(options.width, options.height, options.data, format);
|
|
48
|
-
validateEncodingFormat(encoding, format);
|
|
49
|
-
|
|
50
|
-
const texture = new Texture({
|
|
51
|
-
width: options.width,
|
|
52
|
-
height: options.height,
|
|
53
|
-
dimension: "2d",
|
|
54
|
-
format,
|
|
55
|
-
colorSpace,
|
|
56
|
-
label: options.textureLabel ?? "environment-background-equirect",
|
|
57
|
-
data: options.data
|
|
58
|
-
});
|
|
59
|
-
const background: EnvironmentBackgroundOptions = {
|
|
60
|
-
projection: "equirect",
|
|
61
|
-
texture: new TextureBinding({
|
|
62
|
-
name: options.bindingName ?? "u_environmentBackgroundTexture",
|
|
63
|
-
texture,
|
|
64
|
-
required: true,
|
|
65
|
-
expectedColorSpace: colorSpace
|
|
66
|
-
}),
|
|
67
|
-
encoding,
|
|
68
|
-
intensity: options.intensity,
|
|
69
|
-
rotation: options.rotation,
|
|
70
|
-
outputColorSpace: options.outputColorSpace
|
|
71
|
-
};
|
|
72
|
-
return validateEnvironmentBackgroundResourceOptions(background);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export function createCubemapEnvironmentBackgroundOptions(
|
|
76
|
-
options: CubemapEnvironmentBackgroundResourceOptions
|
|
77
|
-
): EnvironmentBackgroundOptions {
|
|
78
|
-
const format = options.format ?? "rgba8";
|
|
79
|
-
const encoding = options.encoding ?? "linear";
|
|
80
|
-
const colorSpace = options.colorSpace ?? textureColorSpaceForEncoding(encoding);
|
|
81
|
-
validateCubemapPixelSource(options.size, options.faces, format);
|
|
82
|
-
validateEncodingFormat(encoding, format);
|
|
83
|
-
|
|
84
|
-
const texture = new Texture({
|
|
85
|
-
width: options.size,
|
|
86
|
-
height: options.size,
|
|
87
|
-
dimension: "cube",
|
|
88
|
-
format,
|
|
89
|
-
colorSpace,
|
|
90
|
-
label: options.textureLabel ?? "environment-background-cubemap",
|
|
91
|
-
cubeFaces: ENVIRONMENT_BACKGROUND_CUBE_FACES.map((face) => ({
|
|
92
|
-
face,
|
|
93
|
-
mipLevels: [{
|
|
94
|
-
width: options.size,
|
|
95
|
-
height: options.size,
|
|
96
|
-
data: options.faces.find((candidate) => candidate.face === face)!.data
|
|
97
|
-
}]
|
|
98
|
-
}))
|
|
99
|
-
});
|
|
100
|
-
const background: EnvironmentBackgroundOptions = {
|
|
101
|
-
projection: "cubemap",
|
|
102
|
-
texture: new TextureBinding({
|
|
103
|
-
name: options.bindingName ?? "u_environmentBackgroundCubeTexture",
|
|
104
|
-
texture,
|
|
105
|
-
required: true,
|
|
106
|
-
expectedColorSpace: colorSpace
|
|
107
|
-
}),
|
|
108
|
-
encoding,
|
|
109
|
-
intensity: options.intensity,
|
|
110
|
-
rotation: options.rotation,
|
|
111
|
-
outputColorSpace: options.outputColorSpace
|
|
112
|
-
};
|
|
113
|
-
return validateEnvironmentBackgroundResourceOptions(background);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
export function validateEnvironmentBackgroundResourceOptions(options: EnvironmentBackgroundOptions): EnvironmentBackgroundOptions {
|
|
117
|
-
const texture = options.texture.texture;
|
|
118
|
-
if (texture) {
|
|
119
|
-
if (options.projection === "equirect") {
|
|
120
|
-
validateEquirectTexture(texture.width, texture.height, texture.dimension, texture.format);
|
|
121
|
-
} else if (options.projection === "cubemap") {
|
|
122
|
-
validateCubemapTexture(texture.width, texture.height, texture.dimension, texture.cubeFaces.map((face) => face.face), texture.format);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
createEnvironmentBackgroundUniforms(options);
|
|
126
|
-
return options;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function validateEquirectPixelSource(
|
|
130
|
-
width: number,
|
|
131
|
-
height: number,
|
|
132
|
-
data: TexturePixelData,
|
|
133
|
-
format: EnvironmentBackgroundPixelFormat
|
|
134
|
-
): void {
|
|
135
|
-
validateEquirectTexture(width, height, "2d", format);
|
|
136
|
-
validatePixelData(width, height, data, format, "Equirect environment background pixels");
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
function validateCubemapPixelSource(
|
|
140
|
-
size: number,
|
|
141
|
-
faces: readonly CubemapEnvironmentBackgroundFacePixels[],
|
|
142
|
-
format: EnvironmentBackgroundPixelFormat
|
|
143
|
-
): void {
|
|
144
|
-
validatePositiveInteger(size, "Cubemap environment background size");
|
|
145
|
-
if (faces.length !== 6) {
|
|
146
|
-
throw new RenderDeviceError("Cubemap environment background requires exactly six faces", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
147
|
-
faceCount: faces.length
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
const seen = new Set<TextureCubeFace>();
|
|
151
|
-
for (const face of faces) {
|
|
152
|
-
validateCubeFace(face.face);
|
|
153
|
-
if (seen.has(face.face)) {
|
|
154
|
-
throw new RenderDeviceError("Duplicate cubemap environment background face", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
155
|
-
face: face.face
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
seen.add(face.face);
|
|
159
|
-
validatePixelData(size, size, face.data, format, `Cubemap environment background face ${face.face}`);
|
|
160
|
-
}
|
|
161
|
-
for (const face of ENVIRONMENT_BACKGROUND_CUBE_FACES) {
|
|
162
|
-
if (!seen.has(face)) {
|
|
163
|
-
throw new RenderDeviceError("Cubemap environment background is missing a required face", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
164
|
-
face
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
function validateEquirectTexture(width: number, height: number, dimension: string, format: TextureFormat): void {
|
|
171
|
-
validateSupportedBackgroundFormat(format);
|
|
172
|
-
validatePositiveInteger(width, "Equirect environment background width");
|
|
173
|
-
validatePositiveInteger(height, "Equirect environment background height");
|
|
174
|
-
if (dimension !== "2d") {
|
|
175
|
-
throw new RenderDeviceError("Equirect environment background requires a 2D texture", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
176
|
-
textureDimension: dimension
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
if (width !== height * 2) {
|
|
180
|
-
throw new RenderDeviceError("Equirect environment background pixels must use a 2:1 width-to-height ratio", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
181
|
-
width,
|
|
182
|
-
height
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
function validateCubemapTexture(
|
|
188
|
-
width: number,
|
|
189
|
-
height: number,
|
|
190
|
-
dimension: string,
|
|
191
|
-
faces: readonly TextureCubeFace[],
|
|
192
|
-
format: TextureFormat
|
|
193
|
-
): void {
|
|
194
|
-
validateSupportedBackgroundFormat(format);
|
|
195
|
-
validatePositiveInteger(width, "Cubemap environment background width");
|
|
196
|
-
validatePositiveInteger(height, "Cubemap environment background height");
|
|
197
|
-
if (dimension !== "cube") {
|
|
198
|
-
throw new RenderDeviceError("Cubemap environment background requires a cube texture", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
199
|
-
textureDimension: dimension
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
if (width !== height) {
|
|
203
|
-
throw new RenderDeviceError("Cubemap environment background faces must be square", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
204
|
-
width,
|
|
205
|
-
height
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
if (faces.length !== 6) {
|
|
209
|
-
throw new RenderDeviceError("Cubemap environment background requires exactly six faces", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
210
|
-
faceCount: faces.length
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
const seen = new Set<TextureCubeFace>();
|
|
214
|
-
for (const face of faces) {
|
|
215
|
-
validateCubeFace(face);
|
|
216
|
-
if (seen.has(face)) {
|
|
217
|
-
throw new RenderDeviceError("Duplicate cubemap environment background face", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
218
|
-
face
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
seen.add(face);
|
|
222
|
-
}
|
|
223
|
-
for (const face of ENVIRONMENT_BACKGROUND_CUBE_FACES) {
|
|
224
|
-
if (!seen.has(face)) {
|
|
225
|
-
throw new RenderDeviceError("Cubemap environment background is missing a required face", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
226
|
-
face
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
function validatePixelData(
|
|
233
|
-
width: number,
|
|
234
|
-
height: number,
|
|
235
|
-
data: TexturePixelData,
|
|
236
|
-
format: EnvironmentBackgroundPixelFormat,
|
|
237
|
-
label: string
|
|
238
|
-
): void {
|
|
239
|
-
validateSupportedBackgroundFormat(format);
|
|
240
|
-
const expectedBytes = width * height * bytesPerPixel(format);
|
|
241
|
-
if (data.byteLength !== expectedBytes) {
|
|
242
|
-
throw new RenderDeviceError(`${label} for ${format} must contain exactly ${expectedBytes} bytes`, "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
243
|
-
width,
|
|
244
|
-
height,
|
|
245
|
-
format,
|
|
246
|
-
byteLength: data.byteLength,
|
|
247
|
-
expectedBytes
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
if (format === "rgba8" && !(data instanceof Uint8Array) && !(data instanceof Uint8ClampedArray)) {
|
|
251
|
-
throw new RenderDeviceError(`${label} for rgba8 must be Uint8Array or Uint8ClampedArray`, "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
252
|
-
format
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
if (format === "rgba16f" && !(data instanceof Uint16Array)) {
|
|
256
|
-
throw new RenderDeviceError(`${label} for rgba16f must be Uint16Array half-float data`, "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
257
|
-
format
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
|
-
if (format === "rgba32f") {
|
|
261
|
-
if (!(data instanceof Float32Array)) {
|
|
262
|
-
throw new RenderDeviceError(`${label} for rgba32f must be Float32Array data`, "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
263
|
-
format
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
if (!Array.from(data).every(Number.isFinite)) {
|
|
267
|
-
throw new RenderDeviceError(`${label} for rgba32f must contain finite values`, "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
268
|
-
format
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
function validateCubeFace(face: TextureCubeFace): void {
|
|
275
|
-
if (!ENVIRONMENT_BACKGROUND_CUBE_FACES.includes(face)) {
|
|
276
|
-
throw new RenderDeviceError("Unsupported cubemap environment background face", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
277
|
-
face
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
function validateEncodingFormat(encoding: EnvironmentBackgroundEncoding, format: EnvironmentBackgroundPixelFormat): void {
|
|
283
|
-
if ((encoding === "srgb" || encoding === "rgbe") && format !== "rgba8") {
|
|
284
|
-
throw new RenderDeviceError("sRGB and RGBe environment background encodings require rgba8 pixel data", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
285
|
-
encoding,
|
|
286
|
-
format
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
function validateSupportedBackgroundFormat(format: TextureFormat): asserts format is EnvironmentBackgroundPixelFormat {
|
|
292
|
-
if (format !== "rgba8" && format !== "rgba16f" && format !== "rgba32f") {
|
|
293
|
-
throw new RenderDeviceError("Environment background pixel format must be rgba8, rgba16f, or rgba32f", "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
294
|
-
format
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
function validatePositiveInteger(value: number, label: string): void {
|
|
300
|
-
if (!Number.isInteger(value) || value <= 0) {
|
|
301
|
-
throw new RenderDeviceError(`${label} must be a positive integer`, "ENVIRONMENT_BACKGROUND_RESOURCE_CONTRACT", {
|
|
302
|
-
value
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
function textureColorSpaceForEncoding(encoding: EnvironmentBackgroundEncoding): TextureColorSpace {
|
|
308
|
-
return encoding === "srgb" ? "srgb" : "linear";
|
|
309
|
-
}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import type { EnvironmentLightingOptions, ProceduralEnvironmentMapLightingOptions } from "./ForwardPass";
|
|
2
|
-
|
|
3
|
-
export interface EnvironmentLightingCompositionOptions {
|
|
4
|
-
readonly environmentMapIntensity?: number;
|
|
5
|
-
readonly environmentMapSpecularIntensity?: number;
|
|
6
|
-
readonly minimumEnvironmentMapIntensity?: number;
|
|
7
|
-
readonly minimumEnvironmentMapSpecularIntensity?: number;
|
|
8
|
-
readonly sampledReplacesProceduralMap?: boolean;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function composeEnvironmentLighting(
|
|
12
|
-
base: EnvironmentLightingOptions,
|
|
13
|
-
sampled: EnvironmentLightingOptions,
|
|
14
|
-
options: EnvironmentLightingCompositionOptions = {}
|
|
15
|
-
): EnvironmentLightingOptions {
|
|
16
|
-
const environmentMapIntensity = resolveLightingScalar(
|
|
17
|
-
options.environmentMapIntensity,
|
|
18
|
-
options.minimumEnvironmentMapIntensity,
|
|
19
|
-
base.environmentMapIntensity,
|
|
20
|
-
sampled.environmentMapIntensity
|
|
21
|
-
);
|
|
22
|
-
const environmentMapSpecularIntensity = resolveLightingScalar(
|
|
23
|
-
options.environmentMapSpecularIntensity,
|
|
24
|
-
options.minimumEnvironmentMapSpecularIntensity,
|
|
25
|
-
base.environmentMapSpecularIntensity,
|
|
26
|
-
sampled.environmentMapSpecularIntensity
|
|
27
|
-
);
|
|
28
|
-
const environmentMapRotation = sampled.environmentMapRotation ?? base.environmentMapRotation;
|
|
29
|
-
const environmentMapMipCount = sampled.environmentMapMipCount ?? base.environmentMapMipCount;
|
|
30
|
-
const environmentMapEncoding = sampled.environmentMapEncoding ?? base.environmentMapEncoding;
|
|
31
|
-
const proceduralMap = options.sampledReplacesProceduralMap
|
|
32
|
-
? sampled.proceduralMap
|
|
33
|
-
: base.proceduralMap ?? sampled.proceduralMap;
|
|
34
|
-
|
|
35
|
-
return {
|
|
36
|
-
color: cloneColor(base.color),
|
|
37
|
-
intensity: base.intensity,
|
|
38
|
-
...(proceduralMap ? { proceduralMap: cloneProceduralMap(proceduralMap) } : {}),
|
|
39
|
-
...(sampled.environmentMapTexture ?? base.environmentMapTexture
|
|
40
|
-
? { environmentMapTexture: sampled.environmentMapTexture ?? base.environmentMapTexture }
|
|
41
|
-
: {}),
|
|
42
|
-
...(sampled.environmentCubeMapTexture ?? base.environmentCubeMapTexture
|
|
43
|
-
? { environmentCubeMapTexture: sampled.environmentCubeMapTexture ?? base.environmentCubeMapTexture }
|
|
44
|
-
: {}),
|
|
45
|
-
...(environmentMapIntensity !== undefined ? { environmentMapIntensity } : {}),
|
|
46
|
-
...(environmentMapSpecularIntensity !== undefined ? { environmentMapSpecularIntensity } : {}),
|
|
47
|
-
...(environmentMapRotation !== undefined ? { environmentMapRotation } : {}),
|
|
48
|
-
...(environmentMapMipCount !== undefined ? { environmentMapMipCount } : {}),
|
|
49
|
-
...(environmentMapEncoding ? { environmentMapEncoding } : {}),
|
|
50
|
-
...(sampled.environmentBrdfLutTexture ?? base.environmentBrdfLutTexture
|
|
51
|
-
? { environmentBrdfLutTexture: sampled.environmentBrdfLutTexture ?? base.environmentBrdfLutTexture }
|
|
52
|
-
: {})
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function resolveLightingScalar(
|
|
57
|
-
explicit: number | undefined,
|
|
58
|
-
minimum: number | undefined,
|
|
59
|
-
base: number | undefined,
|
|
60
|
-
sampled: number | undefined
|
|
61
|
-
): number | undefined {
|
|
62
|
-
const value = explicit ?? maxFinite(base, sampled);
|
|
63
|
-
if (value === undefined) return finiteOrUndefined(minimum);
|
|
64
|
-
const finiteMinimum = finiteOrUndefined(minimum);
|
|
65
|
-
return finiteMinimum === undefined ? value : Math.max(value, finiteMinimum);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function maxFinite(a: number | undefined, b: number | undefined): number | undefined {
|
|
69
|
-
const finiteA = finiteOrUndefined(a);
|
|
70
|
-
const finiteB = finiteOrUndefined(b);
|
|
71
|
-
if (finiteA === undefined) return finiteB;
|
|
72
|
-
if (finiteB === undefined) return finiteA;
|
|
73
|
-
return Math.max(finiteA, finiteB);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function finiteOrUndefined(value: number | undefined): number | undefined {
|
|
77
|
-
return value === undefined || !Number.isFinite(value) ? undefined : value;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function cloneColor(color: readonly [number, number, number]): [number, number, number] {
|
|
81
|
-
return [color[0], color[1], color[2]];
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function cloneProceduralMap(
|
|
85
|
-
map: ProceduralEnvironmentMapLightingOptions | undefined
|
|
86
|
-
): ProceduralEnvironmentMapLightingOptions | undefined {
|
|
87
|
-
if (!map) return undefined;
|
|
88
|
-
return {
|
|
89
|
-
skyColor: cloneColor(map.skyColor),
|
|
90
|
-
horizonColor: cloneColor(map.horizonColor),
|
|
91
|
-
groundColor: cloneColor(map.groundColor),
|
|
92
|
-
specularColor: cloneColor(map.specularColor),
|
|
93
|
-
intensity: map.intensity,
|
|
94
|
-
specularIntensity: map.specularIntensity
|
|
95
|
-
};
|
|
96
|
-
}
|