@meimu/mutracer 0.3.0 → 0.3.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/CHANGELOG.md +222 -0
- package/LICENSES/FidelityFX-FSR.txt +19 -0
- package/LICENSES/pbrt-v4-Apache-2.0.txt +202 -0
- package/THIRD_PARTY_NOTICES.md +18 -4
- package/dist/assets/bvh.worker.js +1 -1
- package/dist/mutracer.umd.js +6260 -5580
- package/docs/api.md +45 -18
- package/docs/materials.md +4 -2
- package/docs/performance.md +7 -0
- package/docs/post-processing.md +62 -9
- package/docs/progressive-rendering.md +3 -0
- package/docs/sampling.md +4 -0
- package/docs/technical/acceleration.md +52 -0
- package/docs/technical/aovs.md +79 -0
- package/docs/technical/caustics.md +109 -0
- package/docs/technical/continuous-spectrum.md +29 -0
- package/docs/technical/display-upscale.md +82 -0
- package/docs/technical/openpbr.md +99 -0
- package/docs/technical/pbrt-import.md +168 -0
- package/docs/technical/tiling.md +74 -0
- package/docs/technical/webgl.md +53 -0
- package/docs/viewer.md +11 -1
- package/lib/Display.d.ts +19 -5
- package/lib/Display.js +10 -7
- package/lib/Display.js.map +1 -1
- package/lib/Engine.d.ts +2 -1
- package/lib/Engine.js +30 -2
- package/lib/Engine.js.map +1 -1
- package/lib/Render.d.ts +20 -11
- package/lib/Render.js +32 -7
- package/lib/Render.js.map +1 -1
- package/lib/main.d.ts +3 -1
- package/lib/main.js +1 -0
- package/lib/main.js.map +1 -1
- package/lib/oidn.d.ts +1 -1
- package/lib/renderer/AovPrimitiveCache.js +39 -8
- package/lib/renderer/AovPrimitiveCache.js.map +1 -1
- package/lib/renderer/DisplayPostProcess.d.ts +8 -3
- package/lib/renderer/DisplayPostProcess.js +51 -18
- package/lib/renderer/DisplayPostProcess.js.map +1 -1
- package/lib/renderer/MaterialData.js +7 -2
- package/lib/renderer/MaterialData.js.map +1 -1
- package/lib/renderer/RenderingPipeline.d.ts +7 -1
- package/lib/renderer/RenderingPipeline.js.map +1 -1
- package/lib/renderer/TileRender.d.ts +2 -2
- package/lib/renderer/TileRender.js +128 -7
- package/lib/renderer/TileRender.js.map +1 -1
- package/lib/renderer/WGPUAov.d.ts +6 -1
- package/lib/renderer/WGPUAov.js +108 -14
- package/lib/renderer/WGPUAov.js.map +1 -1
- package/lib/renderer/WGPUCanvasSurface.js +12 -1
- package/lib/renderer/WGPUCanvasSurface.js.map +1 -1
- package/lib/renderer/WGPUEnvMapDistribution.js +19 -19
- package/lib/renderer/WGPUFullQuadPass.js +3 -3
- package/lib/renderer/WGPURayTraceOutput.js +12 -12
- package/lib/renderer/WGPURayTracePass.d.ts +17 -4
- package/lib/renderer/WGPURayTracePass.js +194 -71
- package/lib/renderer/WGPURayTracePass.js.map +1 -1
- package/lib/renderer/WGPURenderingPipeline.js +46 -40
- package/lib/renderer/WGPURenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLAov.js +3 -3
- package/lib/renderer/WebGLAov.js.map +1 -1
- package/lib/renderer/WebGLFullQuadPass.d.ts +1 -1
- package/lib/renderer/WebGLFullQuadPass.js +8 -2
- package/lib/renderer/WebGLFullQuadPass.js.map +1 -1
- package/lib/renderer/WebGLJNLMDenoiser.js +66 -66
- package/lib/renderer/WebGLJNLMDenoiser.js.map +1 -1
- package/lib/renderer/WebGLRayTraceOutputPass.js +4 -4
- package/lib/renderer/WebGLRayTracePass.d.ts +14 -10
- package/lib/renderer/WebGLRayTracePass.js +115 -111
- package/lib/renderer/WebGLRayTracePass.js.map +1 -1
- package/lib/renderer/WebGLRenderingPipeline.js +10 -3
- package/lib/renderer/WebGLRenderingPipeline.js.map +1 -1
- package/lib/renderer/WebGLSkyBaker.js +57 -57
- package/lib/renderer/aov.d.ts +13 -1
- package/lib/renderer/aov.js +21 -2
- package/lib/renderer/aov.js.map +1 -1
- package/lib/renderer/aovDisplay.js +2 -2
- package/lib/renderer/aovDisplay.js.map +1 -1
- package/lib/renderer/binnedSahBvh.d.ts +2 -1
- package/lib/renderer/binnedSahBvh.js +24 -17
- package/lib/renderer/binnedSahBvh.js.map +1 -1
- package/lib/renderer/bvhAccel.d.ts +3 -1
- package/lib/renderer/bvhAccel.js +36 -6
- package/lib/renderer/bvhAccel.js.map +1 -1
- package/lib/renderer/cameraUniform.d.ts +1 -1
- package/lib/renderer/cameraUniform.js +6 -2
- package/lib/renderer/cameraUniform.js.map +1 -1
- package/lib/renderer/compactVertices.d.ts +14 -0
- package/lib/renderer/compactVertices.js +124 -0
- package/lib/renderer/compactVertices.js.map +1 -0
- package/lib/renderer/easu.d.ts +11 -0
- package/lib/renderer/easu.js +156 -0
- package/lib/renderer/easu.js.map +1 -0
- package/lib/renderer/geometryUpdateState.d.ts +1 -0
- package/lib/renderer/geometryUpdateState.js.map +1 -1
- package/lib/renderer/geometryUpdates.js +3 -2
- package/lib/renderer/geometryUpdates.js.map +1 -1
- package/lib/renderer/glsl/aovDisplay.frag.js +5 -5
- package/lib/renderer/glsl/aovReflectance.glsl.js +35 -35
- package/lib/renderer/glsl/aovReflectanceSamples.glsl.js +1 -1
- package/lib/renderer/glsl/aovTrace.frag.js +44 -36
- package/lib/renderer/glsl/aovTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/chunks/cameraProjection.glsl.d.ts +2 -0
- package/lib/renderer/glsl/chunks/cameraProjection.glsl.js +16 -0
- package/lib/renderer/glsl/chunks/cameraProjection.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/cameraRay.glsl.d.ts +1 -1
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js +9 -16
- package/lib/renderer/glsl/chunks/cameraRay.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/emissiveLight.glsl.js +8 -8
- package/lib/renderer/glsl/chunks/envMap.glsl.js +67 -67
- package/lib/renderer/glsl/chunks/intersect.glsl.js +390 -375
- package/lib/renderer/glsl/chunks/intersect.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/materialBuffer.glsl.js +120 -120
- package/lib/renderer/glsl/chunks/openPbrBsdf.glsl.js +562 -562
- package/lib/renderer/glsl/chunks/rand.glsl.js +3 -3
- package/lib/renderer/glsl/chunks/random.glsl.js +4 -4
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js +37 -35
- package/lib/renderer/glsl/chunks/rayTraceCore.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js +70 -74
- package/lib/renderer/glsl/chunks/sampleLight.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.d.ts +1 -1
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js +107 -88
- package/lib/renderer/glsl/chunks/sampleMaterial.glsl.js.map +1 -1
- package/lib/renderer/glsl/chunks/sampleShadowCatcher.glsl.js +11 -11
- package/lib/renderer/glsl/chunks/sampling.glsl.js +77 -77
- package/lib/renderer/glsl/chunks/sobol.glsl.js +70 -70
- package/lib/renderer/glsl/chunks/spectralPrefix.glsl.d.ts +6 -0
- package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js +47 -0
- package/lib/renderer/glsl/chunks/spectralPrefix.glsl.js.map +1 -0
- package/lib/renderer/glsl/chunks/textureLinear.glsl.js +5 -5
- package/lib/renderer/glsl/chunks/uvProjection.glsl.js +11 -11
- package/lib/renderer/glsl/depthQuery.frag.js +12 -6
- package/lib/renderer/glsl/depthQuery.frag.js.map +1 -1
- package/lib/renderer/glsl/normalizeRayTraceOutput.frag.js +10 -10
- package/lib/renderer/glsl/rayTrace.frag.js +233 -170
- package/lib/renderer/glsl/rayTrace.frag.js.map +1 -1
- package/lib/renderer/glsl/shadowCatcher.frag.js +10 -9
- package/lib/renderer/glsl/shadowCatcher.frag.js.map +1 -1
- package/lib/renderer/glsl/webglPipeline.frag.js +58 -58
- package/lib/renderer/gpuMemory.js +1 -1
- package/lib/renderer/gpuMemory.js.map +1 -1
- package/lib/renderer/openPbrEnergyLut.d.ts +2 -1
- package/lib/renderer/openPbrEnergyLut.js +18 -1
- package/lib/renderer/openPbrEnergyLut.js.map +1 -1
- package/lib/renderer/pathLimits.d.ts +5 -4
- package/lib/renderer/pathLimits.js +6 -5
- package/lib/renderer/pathLimits.js.map +1 -1
- package/lib/renderer/prepareMeshBVH.d.ts +2 -0
- package/lib/renderer/prepareMeshBVH.js +5 -3
- package/lib/renderer/prepareMeshBVH.js.map +1 -1
- package/lib/renderer/progressiveScheduler.js +1 -1
- package/lib/renderer/progressiveScheduler.js.map +1 -1
- package/lib/renderer/renderPipeline.d.ts +4 -0
- package/lib/renderer/renderPipeline.js +1 -0
- package/lib/renderer/renderPipeline.js.map +1 -1
- package/lib/renderer/researchTransport.d.ts +1 -1
- package/lib/renderer/researchTransport.js.map +1 -1
- package/lib/renderer/sceneAssembly.d.ts +1 -1
- package/lib/renderer/sceneAssembly.js +4 -3
- package/lib/renderer/sceneAssembly.js.map +1 -1
- package/lib/renderer/sceneChangeDetector.d.ts +1 -1
- package/lib/renderer/sceneChangeDetector.js +3 -1
- package/lib/renderer/sceneChangeDetector.js.map +1 -1
- package/lib/renderer/sceneLayoutSchema.d.ts +1 -0
- package/lib/renderer/sceneLayoutSchema.js +2 -2
- package/lib/renderer/sceneLayoutSchema.js.map +1 -1
- package/lib/renderer/scenePreparation.d.ts +3 -2
- package/lib/renderer/scenePreparation.js +18 -2
- package/lib/renderer/scenePreparation.js.map +1 -1
- package/lib/renderer/scratchSampling.js +6 -6
- package/lib/renderer/spectrum.js +2 -2
- package/lib/renderer/staticBvhPreparation.d.ts +9 -0
- package/lib/renderer/staticBvhPreparation.js +8 -2
- package/lib/renderer/staticBvhPreparation.js.map +1 -1
- package/lib/renderer/surfaceHit.d.ts +10 -0
- package/lib/renderer/surfaceHit.js +22 -0
- package/lib/renderer/surfaceHit.js.map +1 -0
- package/lib/renderer/tangentRequirements.d.ts +2 -0
- package/lib/renderer/tangentRequirements.js +7 -0
- package/lib/renderer/tangentRequirements.js.map +1 -0
- package/lib/renderer/textureAtlas.d.ts +4 -0
- package/lib/renderer/textureAtlas.js +48 -2
- package/lib/renderer/textureAtlas.js.map +1 -1
- package/lib/renderer/webgl.js +4 -0
- package/lib/renderer/webgl.js.map +1 -1
- package/lib/renderer/webglVertexAttributes.d.ts +17 -0
- package/lib/renderer/webglVertexAttributes.js +44 -0
- package/lib/renderer/webglVertexAttributes.js.map +1 -0
- package/lib/renderer/wgpuBindlessSource.js +2 -2
- package/lib/renderer/wgpuMaterialConstants.js +4 -3
- package/lib/renderer/wgpuMaterialConstants.js.map +1 -1
- package/lib/renderer/wgpuSceneUniform.js +2 -2
- package/lib/renderer/wgpuSceneUniform.js.map +1 -1
- package/lib/renderer/wgpuShaderSource.d.ts +15 -0
- package/lib/renderer/wgpuShaderSource.js +1 -1
- package/lib/renderer/wgpuShaderSource.js.map +1 -1
- package/lib/renderer/wgsl/aovCompact.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/aovCompact.wgsl.js +26 -0
- package/lib/renderer/wgsl/aovCompact.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/aovDisplay.wgsl.js +9 -9
- package/lib/renderer/wgsl/aovReflectance.wgsl.js +39 -39
- package/lib/renderer/wgsl/aovReflectanceSamples.wgsl.js +1 -1
- package/lib/renderer/wgsl/aovResolve.wgsl.d.ts +4 -0
- package/lib/renderer/wgsl/aovResolve.wgsl.js +21 -2
- package/lib/renderer/wgsl/aovResolve.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js +2 -2
- package/lib/renderer/wgsl/aovSnapshot.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/aovTrace.wgsl.js +31 -31
- package/lib/renderer/wgsl/aovTraceDisplay.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js +56 -0
- package/lib/renderer/wgsl/aovTraceDisplay.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/bloom.wgsl.js +18 -18
- package/lib/renderer/wgsl/causticLight.compute.d.ts +1 -1
- package/lib/renderer/wgsl/causticLight.compute.js +121 -119
- package/lib/renderer/wgsl/causticLight.compute.js.map +1 -1
- package/lib/renderer/wgsl/chunks/background.wgsl.js +46 -46
- package/lib/renderer/wgsl/chunks/causticAdjoint.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/causticAtomic.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/caustics.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/common.wgsl.js +4 -4
- package/lib/renderer/wgsl/chunks/envMap.wgsl.js +30 -30
- package/lib/renderer/wgsl/chunks/intersect.wgsl.d.ts +6 -2
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js +550 -542
- package/lib/renderer/wgsl/chunks/intersect.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js +18 -16
- package/lib/renderer/wgsl/chunks/intersectionAlpha.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.d.ts +2 -1
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js +70 -69
- package/lib/renderer/wgsl/chunks/materialBuffer.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/openPbrBsdf.wgsl.js +593 -593
- package/lib/renderer/wgsl/chunks/pdm_displacement.wgsl.js +118 -118
- package/lib/renderer/wgsl/chunks/rand.wgsl.js +3 -3
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.d.ts +4 -1
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js +32 -26
- package/lib/renderer/wgsl/chunks/rayTraceCore.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleLight.wgsl.js +114 -114
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js +159 -137
- package/lib/renderer/wgsl/chunks/sampleMaterial.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/chunks/sampleShadowCatcher.wgsl.js +8 -8
- package/lib/renderer/wgsl/chunks/sampling.wgsl.js +74 -74
- package/lib/renderer/wgsl/chunks/sobol.wgsl.js +74 -74
- package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.d.ts +6 -0
- package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js +66 -0
- package/lib/renderer/wgsl/chunks/spectralPrefix.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/chunks/uvProjection.wgsl.js +11 -11
- package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js +61 -0
- package/lib/renderer/wgsl/chunks/vertexAttributes.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/compose.frag.wgsl.js +99 -97
- package/lib/renderer/wgsl/compose.frag.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/customDenoise.wgsl.js +10 -10
- package/lib/renderer/wgsl/depthQuery.wgsl.d.ts +1 -1
- package/lib/renderer/wgsl/depthQuery.wgsl.js +11 -2
- package/lib/renderer/wgsl/depthQuery.wgsl.js.map +1 -1
- package/lib/renderer/wgsl/easu.wgsl.d.ts +2 -0
- package/lib/renderer/wgsl/easu.wgsl.js +80 -0
- package/lib/renderer/wgsl/easu.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/easuDetail.wgsl.d.ts +21 -0
- package/lib/renderer/wgsl/easuDetail.wgsl.js +230 -0
- package/lib/renderer/wgsl/easuDetail.wgsl.js.map +1 -0
- package/lib/renderer/wgsl/jnlm.compute.js +74 -74
- package/lib/renderer/wgsl/jnlm.compute.js.map +1 -1
- package/lib/renderer/wgsl/offlineAdaptive.compute.js +26 -26
- package/lib/renderer/wgsl/oidnAuxiliary.wgsl.js +3 -3
- package/lib/renderer/wgsl/photonMap.compute.js +89 -89
- package/lib/renderer/wgsl/proceduralSky.compute.js +61 -61
- package/lib/renderer/wgsl/rayTrace.compute.d.ts +14 -0
- package/lib/renderer/wgsl/rayTrace.compute.js +395 -333
- package/lib/renderer/wgsl/rayTrace.compute.js.map +1 -1
- package/lib/scene/Scene.js.map +1 -1
- package/lib/settings/render.d.ts +11 -0
- package/lib/settings/render.js +1 -0
- package/lib/settings/render.js.map +1 -1
- package/lib/util/fromTHREE.js +21 -14
- package/lib/util/fromTHREE.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +5 -2
- package/lib/oidnBundledWeights.cdn.d.ts +0 -2
- package/lib/oidnBundledWeights.cdn.js +0 -5
- package/lib/oidnBundledWeights.cdn.js.map +0 -1
- package/lib/renderer/bvh.worker.d.ts +0 -1
- package/lib/renderer/bvh.worker.js +0 -16
- package/lib/renderer/bvh.worker.js.map +0 -1
- package/lib/renderer/bvhWorkerBuild.d.ts +0 -13
- package/lib/renderer/bvhWorkerBuild.js +0 -17
- package/lib/renderer/bvhWorkerBuild.js.map +0 -1
- package/lib/renderer/lightCore.d.ts +0 -12
- package/lib/renderer/lightCore.js +0 -13
- package/lib/renderer/lightCore.js.map +0 -1
- package/lib/renderer/materialCore.d.ts +0 -8
- package/lib/renderer/materialCore.js +0 -9
- package/lib/renderer/materialCore.js.map +0 -1
- package/lib/scene/PixelTexture.d.ts +0 -6
- package/lib/scene/PixelTexture.js +0 -10
- package/lib/scene/PixelTexture.js.map +0 -1
- package/lib/util/studioLighting.d.ts +0 -18
- package/lib/util/studioLighting.js +0 -36
- package/lib/util/studioLighting.js.map +0 -1
|
@@ -11,16 +11,14 @@ import random from './chunks/random.glsl.js';
|
|
|
11
11
|
import cameraRay from './chunks/cameraRay.glsl.js';
|
|
12
12
|
import rand from './chunks/rand.glsl.js';
|
|
13
13
|
const surface = /* glsl */ `
|
|
14
|
-
uint
|
|
15
|
-
vec3
|
|
16
|
-
mat4
|
|
17
|
-
Ray
|
|
18
|
-
|
|
19
|
-
vec4 target = viewProjectionInv*vec4(uv*2.0-1.0,1.0,1.0);
|
|
20
|
-
Ray ray; initRay(ray, origin.xyz/origin.w, normalize(target.xyz*origin.w-origin.xyz*target.w)); return ray;
|
|
14
|
+
uint kp(int index) { ivec2 size = textureSize(aovScene,0); uvec4 v = texelFetch(aovScene, ivec2((index/4)%size.x, (index/4)/size.x),0); return v[index%4]; }
|
|
15
|
+
vec3 iV(int offset){return vec3(uintBitsToFloat(kp(offset)),uintBitsToFloat(kp(offset+1)),uintBitsToFloat(kp(offset+2)));}
|
|
16
|
+
mat4 lC(int offset) { mat4 m; for (int i=0;i<4;i++) for(int j=0;j<4;j++) m[i][j]=uintBitsToFloat(kp(offset+i*4+j)); return m; }
|
|
17
|
+
Ray zl(vec2 uv) {
|
|
18
|
+
return cV(uv);
|
|
21
19
|
}
|
|
22
|
-
bool
|
|
23
|
-
Ray ray=
|
|
20
|
+
bool jS(Ray zB, out SurfaceInteraction si, out OpenPbrResolvedMaterial material) {
|
|
21
|
+
Ray ray=zB; si.triangleIndex=-1;
|
|
24
22
|
for(int layer=0;layer<32;layer++) {
|
|
25
23
|
intersectScene(ray,si,false); if(!si.hit) return false;
|
|
26
24
|
getMaterial(material,si.materialIndex,si.uv,si.uv1,si.instanceIndex,si.vertexColor);
|
|
@@ -35,7 +33,7 @@ export function aovTraceFragment(center) {
|
|
|
35
33
|
outputs: center ? ['id', 'motion'] : ['geometry', 'position', 'diffuse', 'specular'],
|
|
36
34
|
outputTypes: center ? { id: 'uvec4' } : {}, defines: { DEPTH_QUERY_MODE: true },
|
|
37
35
|
includes: [core, materials, intersect, random],
|
|
38
|
-
uniforms: { viewProjectionInv: Shader.uniform('mat4'), viewInv: Shader.uniform('mat4'),
|
|
36
|
+
uniforms: { viewProjectionInv: Shader.uniform('mat4'), projectionInv: Shader.uniform('mat4'), viewInv: Shader.uniform('mat4'),
|
|
39
37
|
cameraApertureRadius: Shader.uniform('float', 0), cameraFocusDistance: Shader.uniform('float', 10),
|
|
40
38
|
viewportSize: Shader.uniform('vec2'), aovScene: Shader.uniform('usampler2D'),
|
|
41
39
|
previousId: Shader.uniform('usampler2D'), previousMotion: Shader.uniform('sampler2D'),
|
|
@@ -57,60 +55,70 @@ ${surface}
|
|
|
57
55
|
void main() {
|
|
58
56
|
${center ? /* glsl */ `
|
|
59
57
|
out_id=uvec4(0xffffffffu); out_motion=vec4(0.0);
|
|
60
|
-
Ray ray=
|
|
58
|
+
Ray ray=zl((floor(gl_FragCoord.xy)+0.5)/viewportSize);
|
|
61
59
|
SurfaceInteraction si; OpenPbrResolvedMaterial material;
|
|
62
|
-
if(!
|
|
60
|
+
if(!jS(ray,si,material)) return;
|
|
63
61
|
int offset=52+si.instanceIndex*24;
|
|
64
|
-
out_id=uvec4(
|
|
65
|
-
out_motion.z=dot(si.position-
|
|
66
|
-
if(
|
|
67
|
-
vec4
|
|
68
|
-
vec4
|
|
69
|
-
if(
|
|
70
|
-
vec3
|
|
71
|
-
if(any(lessThan(
|
|
72
|
-
uvec4 identity=texelFetch(previousId,ivec2(
|
|
73
|
-
if(any(notEqual(identity.xy,out_id.xy))||abs(
|
|
74
|
-
out_motion=vec4((
|
|
62
|
+
out_id=uvec4(kp(offset),kp(offset+1),kp(int(kp(16))+si.materialIndex),kp(int(kp(17))+si.triangleIndex));
|
|
63
|
+
out_motion.z=dot(si.position-iV(36),iV(40));
|
|
64
|
+
if(kp(offset+2)==0u)return;
|
|
65
|
+
vec4 rF=lC(offset+4)*vec4(si.position,1.0);
|
|
66
|
+
vec4 qp=lC(0)*rF;
|
|
67
|
+
if(qp.w<=0.0)return;
|
|
68
|
+
vec3 vJ=qp.xyz/qp.w;vec2 iF=(vJ.xy*0.5+0.5)*viewportSize;
|
|
69
|
+
if(any(lessThan(iF,vec2(0.0)))||any(greaterThanEqual(iF,viewportSize))||abs(vJ.z)>1.0)return;
|
|
70
|
+
uvec4 identity=texelFetch(previousId,ivec2(iF),0);float rE=texelFetch(previousMotion,ivec2(iF),0).z;
|
|
71
|
+
if(any(notEqual(identity.xy,out_id.xy))||abs(rE-dot(rF.xyz-iV(44),iV(48)))>max(1e-4,abs(rE)*1e-3))return;
|
|
72
|
+
out_motion=vec4((iF-gl_FragCoord.xy)*vec2(1.0,-1.0),out_motion.z,3.0);
|
|
75
73
|
` : /* glsl */ `
|
|
76
74
|
ivec2 coord=ivec2(gl_FragCoord.xy);
|
|
77
75
|
out_geometry=aovSample==0 ? vec4(0.0) : texelFetch(previousGeometry,coord,0);
|
|
78
76
|
out_position=aovSample==0 ? vec4(0.0) : texelFetch(previousPosition,coord,0);
|
|
79
77
|
out_diffuse=aovSample==0 ? vec4(0.0) : texelFetch(previousDiffuse,coord,0);
|
|
80
78
|
out_specular=aovSample==0 ? vec4(0.0) : texelFetch(previousSpecular,coord,0);
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
Ray ray=
|
|
79
|
+
sP(); aJ=uvec2(floor(gl_FragCoord.xy));
|
|
80
|
+
fA(floor(gl_FragCoord.xy),int(aC ^ cD(uint(sequenceSeed))));
|
|
81
|
+
Ray ray=zl((floor(gl_FragCoord.xy)+sample2D(CAMERA_PIXEL))/viewportSize);
|
|
84
82
|
if(cameraApertureRadius>0.0) {
|
|
85
83
|
vec3 eye=viewInv[3].xyz, forward=-normalize(viewInv[2].xyz);
|
|
86
|
-
vec3
|
|
87
|
-
vec2
|
|
88
|
-
vec3 origin=(viewInv*vec4(
|
|
89
|
-
initRay(ray,origin,normalize(
|
|
84
|
+
vec3 jY=eye+ray.d*(cameraFocusDistance/dot(ray.d,forward));
|
|
85
|
+
vec2 wJ=cameraApertureRadius*kX(sample2D(CAMERA_LENS));
|
|
86
|
+
vec3 origin=(viewInv*vec4(wJ,0.0,1.0)).xyz;
|
|
87
|
+
initRay(ray,origin,normalize(jY-origin));
|
|
90
88
|
}
|
|
91
89
|
SurfaceInteraction si; OpenPbrResolvedMaterial material;
|
|
92
|
-
if(!
|
|
90
|
+
if(!jS(ray,si,material)) return;
|
|
93
91
|
float depth=max(dot(si.position-viewInv[3].xyz,-normalize(viewInv[2].xyz)),0.0);
|
|
94
92
|
bool unsupported=material.materialType!=STANDARD || material.alpha<1.0 || material.coatWeight>0.0 || material.fuzzWeight>0.0 || material.specularAnisotropy>0.0 || material.subsurfaceWeight>0.0 || dot(material.mediumScattering,material.mediumScattering)>0.0 || material.bevel>0.0 || material.thinFilmWeight>0.0 || material.transmissionDispersionScale>0.0;
|
|
95
93
|
out_geometry+=vec4(depth,material.specularRoughness,material.baseMetalness,unsupported?1.0:0.0);
|
|
96
94
|
#ifdef AOV_REFLECTANCE
|
|
97
95
|
if((aovMask&24)!=0 && !unsupported){
|
|
98
|
-
vec3 normal=si.normal,face=si.faceNormal;float cosine=-dot(normal,ray.d),
|
|
96
|
+
vec3 normal=si.normal,face=si.faceNormal;float cosine=-dot(normal,ray.d),fk=-dot(face,ray.d);
|
|
99
97
|
if(material.thinWalled&&(material.transmissionWeight>0.0||material.subsurfaceWeight>0.0)){
|
|
100
|
-
if(cosine<0.0){normal=-normal;cosine=-cosine;}if(
|
|
98
|
+
if(cosine<0.0){normal=-normal;cosine=-cosine;}if(fk<0.0){face=-face;fk=-fk;}
|
|
101
99
|
}
|
|
102
|
-
if(
|
|
100
|
+
if(fk>=0.0&&cosine<0.0){normal=face;cosine=fk;}
|
|
103
101
|
if(cosine<0.0)normal=-normal;
|
|
104
102
|
material.inside=cosine<=0.0&&!material.thinWalled;material.relativeIor=cosine>0.0?1.0/material.specularIor:material.specularIor;
|
|
105
103
|
vec3 tangent=vec3(0.0);
|
|
106
104
|
#ifdef USE_TANGENT
|
|
107
105
|
tangent=si.tangent;
|
|
108
106
|
#endif
|
|
109
|
-
OpenPbrPreparedBsdf prepared=
|
|
107
|
+
OpenPbrPreparedBsdf prepared=bX(tangent,material,-ray.d,normal);
|
|
110
108
|
vec3 diffuse,specular;aovReflectance(prepared,(aovMask&8)!=0,(aovMask&16)!=0,diffuse,specular);
|
|
111
|
-
|
|
109
|
+
if((aovMask&8)!=0)out_diffuse+=vec4(diffuse,1.0);
|
|
110
|
+
if((aovMask&16)!=0)out_specular+=vec4(specular,1.0);
|
|
112
111
|
}
|
|
113
112
|
#endif
|
|
113
|
+
|
|
114
|
+
if((aovMask&384)!=0 && material.materialType==STANDARD && material.alpha>=1.0 && material.transmissionWeight<=0.0 && dot(material.mediumScattering,material.mediumScattering)<=0.0){
|
|
115
|
+
float metal=clamp(material.baseMetalness,0.0,1.0);
|
|
116
|
+
vec3 base=material.baseWeight*material.baseColor;
|
|
117
|
+
vec3 layer=mix(vec3(1.0),material.coatColor,clamp(material.coatWeight,0.0,1.0));
|
|
118
|
+
float f=(material.specularIor-1.0)/(material.specularIor+1.0);
|
|
119
|
+
if((aovMask&128)!=0)out_diffuse+=vec4(layer*base*(1.0-metal),1.0);
|
|
120
|
+
if((aovMask&256)!=0)out_specular+=vec4(layer*(metal*base+(1.0-metal)*material.specularWeight*material.specularColor*f*f),1.0);
|
|
121
|
+
}
|
|
114
122
|
out_position+=vec4(si.position,1.0);
|
|
115
123
|
`}
|
|
116
124
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aovTrace.frag.js","sourceRoot":"","sources":["../../../src/renderer/glsl/aovTrace.frag.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,8BAA8B,CAAC;AAChD,OAAO,QAAQ,MAAM,2BAA2B,CAAC;AACjD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAC,cAAc,EAAE,MAAM,EAAC,MAAM,cAAc,CAAC;AACpD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,IAAI,MAAM,+BAA+B,CAAC;AACjD,OAAO,SAAS,MAAM,iCAAiC,CAAC;AACxD,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,YAAY,MAAM,+BAA+B,CAAC;AACzD,OAAO,MAAM,MAAM,yBAAyB,CAAC;AAC7C,OAAO,SAAS,MAAM,4BAA4B,CAAC;AACnD,OAAO,IAAI,MAAM,uBAAuB,CAAC;AACzC,MAAM,OAAO,GAAG,UAAU,CAAC
|
|
1
|
+
{"version":3,"file":"aovTrace.frag.js","sourceRoot":"","sources":["../../../src/renderer/glsl/aovTrace.frag.ts"],"names":[],"mappings":"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","sourcesContent":["import bsdf from './chunks/openPbrBsdf.glsl.js';\nimport sampling from './chunks/sampling.glsl.js';\nimport reflectance from './aovReflectance.glsl.js';\nimport {FragmentShader, Shader} from '../shader.js';\nimport common from './chunks/common.glsl.js';\nimport core from './chunks/rayTraceCore.glsl.js';\nimport materials from './chunks/materialBuffer.glsl.js';\nimport intersect from './chunks/intersect.glsl.js';\nimport uvProjection from './chunks/uvProjection.glsl.js';\nimport random from './chunks/random.glsl.js';\nimport cameraRay from './chunks/cameraRay.glsl.js';\nimport rand from './chunks/rand.glsl.js';\nconst surface = /* glsl */ `\nuint aovWord(int index) { ivec2 size = textureSize(aovScene,0); uvec4 v = texelFetch(aovScene, ivec2((index/4)%size.x, (index/4)/size.x),0); return v[index%4]; }\nvec3 aovVector(int offset){return vec3(uintBitsToFloat(aovWord(offset)),uintBitsToFloat(aovWord(offset+1)),uintBitsToFloat(aovWord(offset+2)));}\nmat4 aovMatrix(int offset) { mat4 m; for (int i=0;i<4;i++) for(int j=0;j<4;j++) m[i][j]=uintBitsToFloat(aovWord(offset+i*4+j)); return m; }\nRay aovRay(vec2 uv) {\n return initCameraRay(uv);\n}\nbool aovSurface(Ray inputRay, out SurfaceInteraction si, out OpenPbrResolvedMaterial material) {\n Ray ray=inputRay; si.triangleIndex=-1;\n for(int layer=0;layer<32;layer++) {\n intersectScene(ray,si,false); if(!si.hit) return false;\n getMaterial(material,si.materialIndex,si.uv,si.uv1,si.instanceIndex,si.vertexColor);\n if(material.materialType!=SHADOW_CATCHER && material.alpha>=0.5) return true;\n ray.o=si.position+ray.d*(EPS*0.02);\n }\n return false;\n}\n`;\nexport function aovTraceFragment(center: boolean) {\n const shader = new FragmentShader({name: center ? 'AOV center' : 'AOV accumulation',\n outputs: center ? ['id','motion'] : ['geometry','position','diffuse','specular'],\n outputTypes: center ? {id: 'uvec4'} : {}, defines: {DEPTH_QUERY_MODE: true},\n includes: [core,materials,intersect,random],\n uniforms: {viewProjectionInv: Shader.uniform('mat4'), projectionInv: Shader.uniform('mat4'), viewInv: Shader.uniform('mat4'),\n cameraApertureRadius: Shader.uniform('float',0), cameraFocusDistance: Shader.uniform('float',10),\n viewportSize: Shader.uniform('vec2'), aovScene: Shader.uniform('usampler2D'),\n previousId: Shader.uniform('usampler2D'), previousMotion: Shader.uniform('sampler2D'),\n previousGeometry: Shader.uniform('sampler2D'), previousPosition: Shader.uniform('sampler2D'),\n previousDiffuse: Shader.uniform('sampler2D'), previousSpecular: Shader.uniform('sampler2D'),\n openPbrEnergyLut: Shader.uniform('sampler2D'), aovMask: Shader.uniform('int',0),\n aovSample: Shader.uniform('int',0)},\n main: /* glsl */ `\n${common}\n${rand}\n${random.main}\n${core.main}\n${uvProjection}\n${materials.main}\n${intersect.main}\n${cameraRay}\n${center ? '' : sampling+bsdf+reflectance}\n${surface}\nvoid main() {\n ${center ? /* glsl */ `\n out_id=uvec4(0xffffffffu); out_motion=vec4(0.0);\n Ray ray=aovRay((floor(gl_FragCoord.xy)+0.5)/viewportSize);\n SurfaceInteraction si; OpenPbrResolvedMaterial material;\n if(!aovSurface(ray,si,material)) return;\n int offset=52+si.instanceIndex*24;\n out_id=uvec4(aovWord(offset),aovWord(offset+1),aovWord(int(aovWord(16))+si.materialIndex),aovWord(int(aovWord(17))+si.triangleIndex));\n out_motion.z=dot(si.position-aovVector(36),aovVector(40));\n if(aovWord(offset+2)==0u)return;\n vec4 oldWorld=aovMatrix(offset+4)*vec4(si.position,1.0);\n vec4 oldClip=aovMatrix(0)*oldWorld;\n if(oldClip.w<=0.0)return;\n vec3 oldNdc=oldClip.xyz/oldClip.w;vec2 oldPixel=(oldNdc.xy*0.5+0.5)*viewportSize;\n if(any(lessThan(oldPixel,vec2(0.0)))||any(greaterThanEqual(oldPixel,viewportSize))||abs(oldNdc.z)>1.0)return;\n uvec4 identity=texelFetch(previousId,ivec2(oldPixel),0);float oldDepth=texelFetch(previousMotion,ivec2(oldPixel),0).z;\n if(any(notEqual(identity.xy,out_id.xy))||abs(oldDepth-dot(oldWorld.xyz-aovVector(44),aovVector(48)))>max(1e-4,abs(oldDepth)*1e-3))return;\n out_motion=vec4((oldPixel-gl_FragCoord.xy)*vec2(1.0,-1.0),out_motion.z,3.0);\n ` : /* glsl */ `\n ivec2 coord=ivec2(gl_FragCoord.xy);\n out_geometry=aovSample==0 ? vec4(0.0) : texelFetch(previousGeometry,coord,0);\n out_position=aovSample==0 ? vec4(0.0) : texelFetch(previousPosition,coord,0);\n out_diffuse=aovSample==0 ? vec4(0.0) : texelFetch(previousDiffuse,coord,0);\n out_specular=aovSample==0 ? vec4(0.0) : texelFetch(previousSpecular,coord,0);\n initRandom(); samplingPixel=uvec2(floor(gl_FragCoord.xy));\n rng_initialize(floor(gl_FragCoord.xy),int(pixelSampleIndex ^ sampleHash(uint(sequenceSeed))));\n Ray ray=aovRay((floor(gl_FragCoord.xy)+sample2D(CAMERA_PIXEL))/viewportSize);\n if(cameraApertureRadius>0.0) {\n vec3 eye=viewInv[3].xyz, forward=-normalize(viewInv[2].xyz);\n vec3 focusPoint=eye+ray.d*(cameraFocusDistance/dot(ray.d,forward));\n vec2 lens=cameraApertureRadius*sampleCircle(sample2D(CAMERA_LENS));\n vec3 origin=(viewInv*vec4(lens,0.0,1.0)).xyz;\n initRay(ray,origin,normalize(focusPoint-origin));\n }\n SurfaceInteraction si; OpenPbrResolvedMaterial material;\n if(!aovSurface(ray,si,material)) return;\n float depth=max(dot(si.position-viewInv[3].xyz,-normalize(viewInv[2].xyz)),0.0);\n bool unsupported=material.materialType!=STANDARD || material.alpha<1.0 || material.coatWeight>0.0 || material.fuzzWeight>0.0 || material.specularAnisotropy>0.0 || material.subsurfaceWeight>0.0 || dot(material.mediumScattering,material.mediumScattering)>0.0 || material.bevel>0.0 || material.thinFilmWeight>0.0 || material.transmissionDispersionScale>0.0;\n out_geometry+=vec4(depth,material.specularRoughness,material.baseMetalness,unsupported?1.0:0.0);\n #ifdef AOV_REFLECTANCE\n if((aovMask&24)!=0 && !unsupported){\n vec3 normal=si.normal,face=si.faceNormal;float cosine=-dot(normal,ray.d),faceCosine=-dot(face,ray.d);\n if(material.thinWalled&&(material.transmissionWeight>0.0||material.subsurfaceWeight>0.0)){\n if(cosine<0.0){normal=-normal;cosine=-cosine;}if(faceCosine<0.0){face=-face;faceCosine=-faceCosine;}\n }\n if(faceCosine>=0.0&&cosine<0.0){normal=face;cosine=faceCosine;}\n if(cosine<0.0)normal=-normal;\n material.inside=cosine<=0.0&&!material.thinWalled;material.relativeIor=cosine>0.0?1.0/material.specularIor:material.specularIor;\n vec3 tangent=vec3(0.0);\n#ifdef USE_TANGENT\n tangent=si.tangent;\n#endif\n OpenPbrPreparedBsdf prepared=openpbr_prepare(tangent,material,-ray.d,normal);\n vec3 diffuse,specular;aovReflectance(prepared,(aovMask&8)!=0,(aovMask&16)!=0,diffuse,specular);\n if((aovMask&8)!=0)out_diffuse+=vec4(diffuse,1.0);\n if((aovMask&16)!=0)out_specular+=vec4(specular,1.0);\n }\n #endif\n // Resolved texture colors (diffuseColor/specularColor), matching WGSL.\n if((aovMask&384)!=0 && material.materialType==STANDARD && material.alpha>=1.0 && material.transmissionWeight<=0.0 && dot(material.mediumScattering,material.mediumScattering)<=0.0){\n float metal=clamp(material.baseMetalness,0.0,1.0);\n vec3 base=material.baseWeight*material.baseColor;\n vec3 layer=mix(vec3(1.0),material.coatColor,clamp(material.coatWeight,0.0,1.0));\n float f=(material.specularIor-1.0)/(material.specularIor+1.0);\n if((aovMask&128)!=0)out_diffuse+=vec4(layer*base*(1.0-metal),1.0);\n if((aovMask&256)!=0)out_specular+=vec4(layer*(metal*base+(1.0-metal)*material.specularWeight*material.specularColor*f*f),1.0);\n }\n out_position+=vec4(si.position,1.0);\n `}\n}\n`});\n shader.parallelCompile = true;\n return shader;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: "\nRay initCameraRay(vec2 coord) {\n vec4 origin = projectionInv * vec4(coord * 2.0 - 1.0, -1.0, 1.0);\n vec4 center = projectionInv * vec4(coord * 2.0 - 1.0, 1.0, 1.0);\n vec3 direction = center.xyz * origin.w - origin.xyz * center.w;\n Ray cam;\n initRay(cam, (viewInv * vec4(origin.xyz / origin.w, 1.0)).xyz,\n normalize((viewInv * vec4(direction, 0.0)).xyz));\n return cam;\n}\n";
|
|
2
|
+
export default _default;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Portions adapted from ray-tracing-renderer@0.10.15
|
|
2
|
+
// (https://github.com/hoverinc/ray-tracing-renderer).
|
|
3
|
+
// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.
|
|
4
|
+
// Keep unprojection in camera space to avoid cancellation from world translation.
|
|
5
|
+
export default /* glsl */ `
|
|
6
|
+
Ray cV(vec2 coord) {
|
|
7
|
+
vec4 origin = projectionInv * vec4(coord * 2.0 - 1.0, -1.0, 1.0);
|
|
8
|
+
vec4 center = projectionInv * vec4(coord * 2.0 - 1.0, 1.0, 1.0);
|
|
9
|
+
vec3 direction = center.xyz * origin.w - origin.xyz * center.w;
|
|
10
|
+
Ray cam;
|
|
11
|
+
initRay(cam, (viewInv * vec4(origin.xyz / origin.w, 1.0)).xyz,
|
|
12
|
+
normalize((viewInv * vec4(direction, 0.0)).xyz));
|
|
13
|
+
return cam;
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
16
|
+
//# sourceMappingURL=cameraProjection.glsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cameraProjection.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/cameraProjection.glsl.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kFAAkF;AAElF,kFAAkF;AAClF,eAAe,UAAU,CAAC;;;;;;;;;;CAUzB,CAAC","sourcesContent":["// Portions adapted from ray-tracing-renderer@0.10.15\n// (https://github.com/hoverinc/ray-tracing-renderer).\n// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.\n\n// Keep unprojection in camera space to avoid cancellation from world translation.\nexport default /* glsl */ `\nRay initCameraRay(vec2 coord) {\n vec4 origin = projectionInv * vec4(coord * 2.0 - 1.0, -1.0, 1.0);\n vec4 center = projectionInv * vec4(coord * 2.0 - 1.0, 1.0, 1.0);\n vec3 direction = center.xyz * origin.w - origin.xyz * center.w;\n Ray cam;\n initRay(cam, (viewInv * vec4(origin.xyz / origin.w, 1.0)).xyz,\n normalize((viewInv * vec4(direction, 0.0)).xyz));\n return cam;\n}\n`;\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const _default:
|
|
1
|
+
declare const _default: string;
|
|
2
2
|
export default _default;
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
// Portions adapted from ray-tracing-renderer@0.10.15
|
|
2
2
|
// (https://github.com/hoverinc/ray-tracing-renderer).
|
|
3
3
|
// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.
|
|
4
|
+
import cameraProjection from './cameraProjection.glsl.js';
|
|
4
5
|
// Shared primary-ray construction keeps beauty and catcher coverage aligned.
|
|
5
6
|
export default /* glsl */ `
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
vec4 target = viewProjectionInv * vec4(coord * 2.0 - 1.0, 1.0, 1.0);
|
|
9
|
-
Ray cam;
|
|
10
|
-
initRay(cam, origin.xyz / origin.w, normalize(target.xyz * origin.w - origin.xyz * target.w));
|
|
11
|
-
|
|
12
|
-
return cam;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
vec2 kq(vec2 p) {
|
|
7
|
+
${cameraProjection}
|
|
8
|
+
vec2 kX(vec2 p) {
|
|
16
9
|
p = 2.0 * p - 1.0;
|
|
17
10
|
bool greater = abs(p.x) > abs(p.y);
|
|
18
11
|
float r = greater ? p.x : p.y;
|
|
@@ -20,16 +13,16 @@ float theta = greater ? 0.25 * PI * p.y / p.x : PI * (0.5 - 0.25 * p.x / p.y);
|
|
|
20
13
|
return r * vec2(cos(theta), sin(theta));
|
|
21
14
|
}
|
|
22
15
|
|
|
23
|
-
Ray
|
|
24
|
-
Ray cam =
|
|
16
|
+
Ray pq() {
|
|
17
|
+
Ray cam = cV(v_Texcoord + uH());
|
|
25
18
|
if (cameraApertureRadius > 0.0) {
|
|
26
19
|
|
|
27
20
|
vec3 eye = viewInv[3].xyz;
|
|
28
21
|
vec3 forward = -normalize(viewInv[2].xyz);
|
|
29
|
-
vec3
|
|
30
|
-
vec2
|
|
31
|
-
vec3 origin = vec3(viewInv * vec4(
|
|
32
|
-
initRay(cam, origin, normalize(
|
|
22
|
+
vec3 jY = eye + cam.d * (cameraFocusDistance / dot(cam.d, forward));
|
|
23
|
+
vec2 uh = cameraApertureRadius * kX(sample2D(CAMERA_LENS));
|
|
24
|
+
vec3 origin = vec3(viewInv * vec4(uh, 0.0, 1.0));
|
|
25
|
+
initRay(cam, origin, normalize(jY - origin));
|
|
33
26
|
}
|
|
34
27
|
return cam;
|
|
35
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cameraRay.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/cameraRay.glsl.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kFAAkF;AAElF,6EAA6E;AAC7E,eAAe,UAAU,CAAC
|
|
1
|
+
{"version":3,"file":"cameraRay.glsl.js","sourceRoot":"","sources":["../../../../src/renderer/glsl/chunks/cameraRay.glsl.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,sDAAsD;AACtD,kFAAkF;AAElF,OAAO,gBAAgB,MAAM,4BAA4B,CAAC;AAE1D,6EAA6E;AAC7E,eAAe,UAAU,CAAC;EACxB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;CAsBjB,CAAC","sourcesContent":["// Portions adapted from ray-tracing-renderer@0.10.15\n// (https://github.com/hoverinc/ray-tracing-renderer).\n// Copyright (c) 2019 HOVER, MIT license; see LICENSES/RayTracingRenderer-MIT.txt.\n\nimport cameraProjection from './cameraProjection.glsl.js';\n\n// Shared primary-ray construction keeps beauty and catcher coverage aligned.\nexport default /* glsl */ `\n${cameraProjection}\nvec2 sampleCircle(vec2 p) {\n p = 2.0 * p - 1.0;\n bool greater = abs(p.x) > abs(p.y);\n float r = greater ? p.x : p.y;\n float theta = greater ? 0.25 * PI * p.y / p.x : PI * (0.5 - 0.25 * p.x / p.y);\n return r * vec2(cos(theta), sin(theta));\n}\n\nRay primaryCameraRay() {\n Ray cam = initCameraRay(v_Texcoord + pixelJitter());\n if (cameraApertureRadius > 0.0) {\n // Thin lens: the focus plane is perpendicular to the view direction.\n vec3 eye = viewInv[3].xyz;\n vec3 forward = -normalize(viewInv[2].xyz);\n vec3 focusPoint = eye + cam.d * (cameraFocusDistance / dot(cam.d, forward));\n vec2 lensPoint = cameraApertureRadius * sampleCircle(sample2D(CAMERA_LENS));\n vec3 origin = vec3(viewInv * vec4(lensPoint, 0.0, 1.0));\n initRay(cam, origin, normalize(focusPoint - origin));\n }\n return cam;\n}\n`;\n"]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
export default /* glsl */ `
|
|
2
|
-
vec4
|
|
3
|
-
void
|
|
2
|
+
vec4 ep(int i) { return fetchData(emissiveLightData,i,emissiveLightColumns); }
|
|
3
|
+
void pc(vec3 x, vec3 rnd, inout LightSampleRec ls) {
|
|
4
4
|
ls.pdf=0.0;ls.isDelta=false;ls.sourceType=0;ls.sourceIndex=-1;
|
|
5
5
|
if(emissiveChoiceCount<=0) return;
|
|
6
6
|
float scaled=rnd.z*float(emissiveChoiceCount);int column=min(int(scaled),emissiveChoiceCount-1);
|
|
7
|
-
vec4 first=
|
|
7
|
+
vec4 first=ep(emissiveChoiceOffset+column);
|
|
8
8
|
int chosen=fract(scaled)<first.x?column:floatBitsToInt(first.y);
|
|
9
|
-
vec4 choice=
|
|
10
|
-
float pmf=
|
|
9
|
+
vec4 choice=ep(emissiveChoiceOffset+chosen);int kind=floatBitsToInt(choice.z),index=floatBitsToInt(choice.w);
|
|
10
|
+
float pmf=ep(emissivePmfOffset+chosen).x;
|
|
11
11
|
if(kind==1) {
|
|
12
12
|
#ifdef USE_ENVMAP
|
|
13
|
-
|
|
13
|
+
iM(rnd.xy,ls);ls.pdf*=pmf;
|
|
14
14
|
#endif
|
|
15
15
|
} else if(kind==2) {
|
|
16
16
|
#ifdef NUM_LIGHTS
|
|
@@ -20,8 +20,8 @@ ls.sourceType=2;ls.sourceIndex=index;
|
|
|
20
20
|
sampleAnalyticLight(light,x,rnd.xy,ls);ls.pdf*=pmf;
|
|
21
21
|
#endif
|
|
22
22
|
} else if(kind==3) {
|
|
23
|
-
vec4 a=
|
|
24
|
-
vec4 d=
|
|
23
|
+
vec4 a=ep(index*6),b=ep(index*6+1),c=ep(index*6+2);
|
|
24
|
+
vec4 d=ep(index*6+3),e=ep(index*6+4),f=ep(index*6+5);
|
|
25
25
|
float u=sqrt(rnd.x);vec3 bary=vec3(1.0-u,u*(1.0-rnd.y),u*rnd.y);
|
|
26
26
|
vec3 p=a.xyz*bary.x+b.xyz*bary.y+c.xyz*bary.z;
|
|
27
27
|
ls.normal=normalize(cross(b.xyz-a.xyz,c.xyz-a.xyz));ls.direction=normalize(p-x);ls.dist=distance(x,p);
|
|
@@ -16,17 +16,17 @@ export default createShaderMixin({
|
|
|
16
16
|
groundedBackgroundCenter: Shader.uniform('vec2')
|
|
17
17
|
},
|
|
18
18
|
main: glsl `
|
|
19
|
-
vec2
|
|
20
|
-
float phi = mod(atan(-
|
|
21
|
-
float theta = acos(clamp(
|
|
19
|
+
vec2 eP(vec3 gz) {
|
|
20
|
+
float phi = mod(atan(-gz.z, -gz.x), TWOPI);
|
|
21
|
+
float theta = acos(clamp(gz.y, -1.0, 1.0));
|
|
22
22
|
return vec2(phi * 0.5 * INVPI, theta * INVPI);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
vec2
|
|
26
|
-
return
|
|
25
|
+
vec2 cU(vec3 oA) {
|
|
26
|
+
return eP(transpose(environmentRotation) * oA);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
float
|
|
29
|
+
float sN(float u, out int vOffset, out float pdf) {
|
|
30
30
|
ivec2 size = textureSize(envMap, 0);
|
|
31
31
|
|
|
32
32
|
int left = 0;
|
|
@@ -52,7 +52,7 @@ pdf = s0.y;
|
|
|
52
52
|
return (float(vOffset) + (u - s0.x) / (s1.x - s0.x)) / float(size.y);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
float
|
|
55
|
+
float sM(float u, int vOffset, out float pdf) {
|
|
56
56
|
ivec2 size = textureSize(envMap, 0);
|
|
57
57
|
|
|
58
58
|
int left = 0;
|
|
@@ -66,16 +66,16 @@ left = mid + 1;
|
|
|
66
66
|
right = mid;
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
-
int
|
|
69
|
+
int qG = left - 1;
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
|
|
73
|
-
vec2 s0 = texelFetch(envMapDistribution, ivec2(1 +
|
|
74
|
-
vec2 s1 = texelFetch(envMapDistribution, ivec2(1 +
|
|
73
|
+
vec2 s0 = texelFetch(envMapDistribution, ivec2(1 + qG, vOffset), 0).xy;
|
|
74
|
+
vec2 s1 = texelFetch(envMapDistribution, ivec2(1 + qG + 1, vOffset), 0).xy;
|
|
75
75
|
|
|
76
76
|
pdf = s0.y;
|
|
77
77
|
|
|
78
|
-
return (float(
|
|
78
|
+
return (float(qG) + (u - s0.x) / (s1.x - s0.x)) / float(size.x);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
|
|
@@ -86,21 +86,21 @@ return partialPdf.x * partialPdf.y * INVPI2 / (2.0 * sinTheta);
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
|
|
89
|
-
vec3
|
|
89
|
+
vec3 qx(vec2 random, out vec2 uv, out float pdf) {
|
|
90
90
|
vec2 partialPdf;
|
|
91
91
|
int vOffset;
|
|
92
92
|
|
|
93
|
-
uv.y =
|
|
94
|
-
uv.x =
|
|
93
|
+
uv.y = sN(random.x, vOffset, partialPdf.y);
|
|
94
|
+
uv.x = sM(random.y, vOffset, partialPdf.x);
|
|
95
95
|
|
|
96
96
|
float phi = uv.x * TWOPI;
|
|
97
97
|
float theta = uv.y * PI;
|
|
98
|
-
float
|
|
98
|
+
float cv = cos(theta);
|
|
99
99
|
float sinTheta = sin(theta);
|
|
100
|
-
float
|
|
101
|
-
float
|
|
100
|
+
float xV = cos(phi);
|
|
101
|
+
float yo = sin(phi);
|
|
102
102
|
|
|
103
|
-
vec3 dir = vec3(-sinTheta *
|
|
103
|
+
vec3 dir = vec3(-sinTheta * xV, cv, -sinTheta * yo);
|
|
104
104
|
|
|
105
105
|
pdf = envMapSolidAnglePdf(partialPdf, uv.y);
|
|
106
106
|
|
|
@@ -112,82 +112,82 @@ vec2 size = vec2(textureSize(envMap, 0));
|
|
|
112
112
|
|
|
113
113
|
ivec2 pixel = clamp(ivec2(uv * size), ivec2(0), ivec2(size) - ivec2(1));
|
|
114
114
|
|
|
115
|
-
float
|
|
116
|
-
float
|
|
115
|
+
float vO = texelFetch(envMapDistribution, ivec2(1 + pixel.x, pixel.y), 0).y;
|
|
116
|
+
float vP = texelFetch(envMapDistribution, ivec2(0, pixel.y), 0).y;
|
|
117
117
|
|
|
118
|
-
return envMapSolidAnglePdf(vec2(
|
|
118
|
+
return envMapSolidAnglePdf(vec2(vO, vP), uv.y);
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
float
|
|
122
|
-
float
|
|
123
|
-
if (
|
|
121
|
+
float dk(vec3 point, float height, float radius) {
|
|
122
|
+
float gc = length(point);
|
|
123
|
+
if (gc < 0.00001) {
|
|
124
124
|
return -radius;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
float
|
|
128
|
-
float
|
|
129
|
-
float
|
|
130
|
-
if (
|
|
131
|
-
|
|
132
|
-
} else if (
|
|
133
|
-
|
|
127
|
+
float jf = radius * point.y / gc;
|
|
128
|
+
float iS = -1.5 * height;
|
|
129
|
+
float ez;
|
|
130
|
+
if (jf >= 0.0) {
|
|
131
|
+
ez = radius;
|
|
132
|
+
} else if (jf < iS) {
|
|
133
|
+
ez = -height * gc / point.y;
|
|
134
134
|
} else {
|
|
135
|
-
float
|
|
136
|
-
-
|
|
137
|
-
|
|
135
|
+
float cA = 1.0
|
|
136
|
+
- jf * jf / (3.0 * iS * iS);
|
|
137
|
+
ez = radius * cA;
|
|
138
138
|
}
|
|
139
|
-
return
|
|
139
|
+
return gc - ez;
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
vec3
|
|
142
|
+
vec3 eW(vec3 origin, vec3 d) {
|
|
143
143
|
#ifdef USE_GROUNDED_BACKGROUND
|
|
144
144
|
float height = groundedBackgroundParams.x;
|
|
145
145
|
float radius = groundedBackgroundParams.y;
|
|
146
|
-
float
|
|
147
|
-
vec3
|
|
148
|
-
vec3
|
|
146
|
+
float zZ = groundedBackgroundParams.z;
|
|
147
|
+
vec3 bT = normalize(d);
|
|
148
|
+
vec3 bA = origin - vec3(
|
|
149
149
|
groundedBackgroundCenter.x,
|
|
150
|
-
|
|
150
|
+
zZ + height,
|
|
151
151
|
groundedBackgroundCenter.y
|
|
152
152
|
);
|
|
153
153
|
|
|
154
154
|
|
|
155
155
|
|
|
156
|
-
float
|
|
157
|
-
float
|
|
158
|
-
- dot(
|
|
159
|
-
if (
|
|
160
|
-
float
|
|
156
|
+
float eN = dot(bA, bT);
|
|
157
|
+
float bk = eN * eN
|
|
158
|
+
- dot(bA, bA) + radius * radius;
|
|
159
|
+
if (bk > 0.0) {
|
|
160
|
+
float cB = -eN + sqrt(bk);
|
|
161
161
|
if (
|
|
162
|
-
|
|
163
|
-
&&
|
|
162
|
+
cB > 0.0
|
|
163
|
+
&& dk(bA, height, radius) <= 0.0
|
|
164
164
|
) {
|
|
165
|
-
vec3
|
|
166
|
-
if (
|
|
167
|
-
return normalize(
|
|
165
|
+
vec3 pw = bA + bT * cB;
|
|
166
|
+
if (pw.y >= 0.0) {
|
|
167
|
+
return normalize(pw);
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
if (
|
|
171
|
-
float
|
|
172
|
-
vec3
|
|
173
|
-
float
|
|
170
|
+
if (bT.y < -0.00001 && radius > 1.5 * height) {
|
|
171
|
+
float iz = (-height - bA.y) / bT.y;
|
|
172
|
+
vec3 pm = bA + bT * iz;
|
|
173
|
+
float qb = (2.0 / 3.0)
|
|
174
174
|
* sqrt(radius * radius - 2.25 * height * height);
|
|
175
|
-
if (
|
|
176
|
-
return normalize(
|
|
175
|
+
if (iz > 0.0 && length(pm.xz) <= qb) {
|
|
176
|
+
return normalize(pm);
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
float
|
|
180
|
+
float cK = 0.0;
|
|
181
181
|
for (int i = 0; i < 14; i++) {
|
|
182
|
-
float
|
|
183
|
-
vec3
|
|
184
|
-
if (
|
|
185
|
-
|
|
182
|
+
float fp = (cK + cB) * 0.5;
|
|
183
|
+
vec3 rD = bA + bT * fp;
|
|
184
|
+
if (dk(rD, height, radius) > 0.0) {
|
|
185
|
+
cB = fp;
|
|
186
186
|
} else {
|
|
187
|
-
|
|
187
|
+
cK = fp;
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
|
-
vec3 hit =
|
|
190
|
+
vec3 hit = bA + bT * ((cK + cB) * 0.5);
|
|
191
191
|
return normalize(hit);
|
|
192
192
|
}
|
|
193
193
|
}
|
|
@@ -195,15 +195,15 @@ return normalize(hit);
|
|
|
195
195
|
return d;
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
vec4
|
|
199
|
-
d =
|
|
198
|
+
vec4 cq(vec3 origin, vec3 d) {
|
|
199
|
+
d = eW(origin, d);
|
|
200
200
|
#ifdef USE_BACKGROUND
|
|
201
201
|
vec4 t = backgroundMapTransform;
|
|
202
202
|
d = vec3(t.x * d.x - t.y * d.z, d.y, t.y * d.x + t.x * d.z);
|
|
203
|
-
vec4 aW = textureLinear(backgroundMap,
|
|
203
|
+
vec4 aW = textureLinear(backgroundMap, eP(transpose(backgroundMapRotation) * d));
|
|
204
204
|
return vec4(aW.rgb * t.z, aW.a);
|
|
205
205
|
#else
|
|
206
|
-
return textureLinear(backgroundMap,
|
|
206
|
+
return textureLinear(backgroundMap, cU(d));
|
|
207
207
|
#endif
|
|
208
208
|
}`
|
|
209
209
|
});
|