Created
October 6, 2025 04:54
-
-
Save greggman/f300b442061a446d597537235939424d to your computer and use it in GitHub Desktop.
three.js rendering issue repo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<style> | |
canvas { | |
margin: 5px; | |
max-width: 300px; | |
max-height: 300px; | |
} | |
</style> | |
<body style="text-align: center;"> | |
<canvas id="#webgpu" width=800 height=600></canvas> | |
<script> | |
function wrap(Obj, method) { | |
Obj.prototype[method] = (function (origFn) { | |
return function (...args) { | |
const a0 = Array.isArray(args[0]) ? args[0][0] : args[0]; | |
const prefix = a0?.label ? [a0.label] : []; | |
console.log(this.label, method, ...prefix, ...args); | |
return origFn.apply(this, args); | |
}; | |
})(Obj.prototype[method]); | |
} | |
wrap(GPUDevice, 'createCommandEncoder'); | |
wrap(GPUCommandEncoder, 'beginRenderPass'); | |
wrap(GPUCommandEncoder, 'finish'); | |
wrap(GPURenderPassEncoder, 'end'); | |
wrap(GPURenderPassEncoder, 'draw'); | |
wrap(GPURenderPassEncoder, 'drawIndexed'); | |
wrap(GPURenderPassEncoder, 'setBindGroup'); | |
wrap(GPUQueue, 'submit'); | |
GPUQueue.prototype.writeBuffer = (function (origFn) { | |
return function (...args) { | |
console.log(args[0].label, args[3], new Float32Array(args[2].buffer)); | |
return origFn.apply(this, args); | |
}; | |
})(GPUQueue.prototype.writeBuffer); | |
function makeShot(canvas) { | |
const c = document.createElement('canvas'); | |
c.width = canvas.width / 10; | |
c.height = canvas.height / 10; | |
const ctx = c.getContext('2d'); | |
ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, c.width, c.height) | |
document.body.insertBefore(c, document.body.firstChild); | |
} | |
let D = new Array(37); | |
async function main() { | |
await loadData(); | |
let canvas = document.getElementById("#webgpu"); | |
let context = canvas.getContext("webgpu"); | |
let frameLabel = document.createElement("div"); | |
frameLabel.style = "position: absolute; top: 10px; left: 10px; font-size: 24pt; color: #f00;"; | |
document.body.append(frameLabel); | |
let x,xAdapter,xDevice,xQueue,xTexture,xTexture1,xcolorAttachment_0TextureView,xTextureView,xrenderContext_0CommandEncoder,xRenderPassEncoder,cubePosBuffer,xArrayBuffer,cubeNrmBuffer,xArrayBuffer1,cubeNdxBuffer,xArrayBuffer2,xBindGroupLayout,xbindingBuffer_renderBuffer,xbindingBuffer_renderBuffer1,xbindGroup_renderBindGroup,xBindGroupLayout1,xbindingBuffer_objectBuffer,xbindingBuffer_objectBuffer1,xbindGroup_objectBindGroup,xvertexShaderModule,xfragmentShaderModule,xPipelineLayout,xrenderPipeline_MeshStandardMaterial_17RenderPipeline,xShadowMapTexture,xShadowDepthTextureTexture,xcolorAttachment_0TextureView1,xTextureView1,xrenderContext_1CommandEncoder,xRenderPassEncoder1,xBindGroupLayout2,xbindingBuffer_renderBuffer2,xbindGroup_renderBindGroup1,xBindGroupLayout3,xbindingBuffer_objectBuffer2,xbindingBuffer_objectBuffer3,xbindGroup_objectBindGroup1,xvertex_ShadowMaterialShaderModule,xfragment_ShadowMaterialShaderModule,xPipelineLayout1,xrenderPipeline_ShadowMaterial_21RenderPipeline,xCommandBuffer,planePosBuffer,xArrayBuffer3,planeNrmBuffer,xArrayBuffer4,planeNdxBuffer,xArrayBuffer5,xBindGroupLayout4,xbindingBuffer_renderBuffer3,xbindingBuffer_renderBuffer4,xbindGroup_renderBindGroup2,xSampler,xSampler1,xBindGroupLayout5,xbindingBuffer_objectBuffer4,xTextureView2,xTextureView3,xbindingBuffer_objectBuffer5,xbindGroup_objectBindGroup2,xbindGroup_objectBindGroup3,xvertexShaderModule1,xfragmentShaderModule1,xPipelineLayout2,xrenderPipeline_MeshStandardMaterial_18RenderPipeline,xCommandBuffer1,xdepthBufferTexture,xTextureView4,xTexture2,xTextureView5,xrenderContext_2CommandEncoder,xRenderPassEncoder2,xBuffer6,xArrayBuffer6,xBindGroupLayout6,xbindingBuffer_renderBuffer5,xbindGroup_renderBindGroup3,xBindGroupLayout7,xTextureView6,xbindingBuffer_objectBuffer6,xbindingBuffer_objectBuffer7,xbindGroup_objectBindGroup4,xbindGroup_objectBindGroup5,xvertex_outputColorTransformShaderModule,xfragment_outputColorTransformShaderModule,xPipelineLayout3,xrenderPipeline_outputColorTransform_16RenderPipeline,xCommandBuffer2; | |
x = navigator.gpu; | |
xAdapter = await x.requestAdapter({}); | |
const requiredFeatures = []; | |
for (const x of xAdapter.features) { | |
requiredFeatures.push(x); | |
} | |
const requiredLimits = {}; | |
const exclude = new Set(["minSubgroupSize", "maxSubgroupSize"]); | |
for (const x in xAdapter.limits) { | |
if (!exclude.has(x)) { | |
requiredLimits[x] = xAdapter.limits[x]; | |
} | |
} | |
xDevice = await xAdapter.requestDevice({"requiredFeatures":requiredFeatures,"requiredLimits":requiredLimits}); | |
xQueue = xDevice.queue; | |
xTexture = xDevice.createTexture({"label":"","size":{"width":734,"height":1924,"depthOrArrayLayers":1},"mipLevelCount":1,"sampleCount":1,"dimension":"2d","format":"rgba16float","usage":23}); | |
xTexture1 = xDevice.createTexture({"label":"","size":{"width":734,"height":1924,"depthOrArrayLayers":1},"mipLevelCount":1,"sampleCount":1,"dimension":"2d","format":"depth24plus","usage":23}); | |
xcolorAttachment_0TextureView = xTexture.createView({"label":"colorAttachment_0","baseMipLevel":0,"mipLevelCount":1,"baseArrayLayer":0,"arrayLayerCount":1,"dimension":"2d"}); | |
xTextureView = xTexture1.createView({}); | |
xrenderContext_0CommandEncoder = xDevice.createCommandEncoder({"label":"color-cmd-buf"}); | |
xRenderPassEncoder = xrenderContext_0CommandEncoder.beginRenderPass({label: xrenderContext_0CommandEncoder.label, "colorAttachments":[{"view":xcolorAttachment_0TextureView,"loadOp":"clear","storeOp":"store","clearValue":{"r":0,"g":0,"b":0,"a":1}}],"depthStencilAttachment":{"view":xTextureView,"depthClearValue":1,"depthLoadOp":"clear","depthStoreOp":"store"}}); | |
cubePosBuffer = xDevice.createBuffer({"label":"","size":288,"usage":44,"mappedAtCreation":true}); | |
xArrayBuffer = cubePosBuffer.getMappedRange(); | |
new Uint8Array(xArrayBuffer).set(D[0]); | |
cubePosBuffer.unmap(); | |
cubeNrmBuffer = xDevice.createBuffer({"label":"","size":288,"usage":44,"mappedAtCreation":true}); | |
xArrayBuffer1 = cubeNrmBuffer.getMappedRange(); | |
new Uint8Array(xArrayBuffer1).set(D[1]); | |
cubeNrmBuffer.unmap(); | |
cubeNdxBuffer = xDevice.createBuffer({"label":"","size":144,"usage":28,"mappedAtCreation":true}); | |
xArrayBuffer2 = cubeNdxBuffer.getMappedRange(); | |
new Uint8Array(xArrayBuffer2).set(D[2]); | |
cubeNdxBuffer.unmap(); | |
xBindGroupLayout = xDevice.createBindGroupLayout({"entries":[{"binding":0,"visibility":2,"buffer":{}},{"binding":1,"visibility":1,"buffer":{}}]}); | |
xbindingBuffer_renderBuffer = xDevice.createBuffer({"label":"bindingBuffer_render_objectStruct","size":112,"usage":72}); | |
xbindingBuffer_renderBuffer1 = xDevice.createBuffer({"label":"bindingBuffer_render_renderStruct","size":128,"usage":72}); | |
xbindGroup_renderBindGroup = xDevice.createBindGroup({"label":"bindGroup_render","layout":xBindGroupLayout,"entries":[{"binding":0,"resource":{"buffer":xbindingBuffer_renderBuffer}},{"binding":1,"resource":{"buffer":xbindingBuffer_renderBuffer1}}]}); | |
xBindGroupLayout1 = xDevice.createBindGroupLayout({"entries":[{"binding":0,"visibility":2,"buffer":{}},{"binding":1,"visibility":1,"buffer":{}}]}); | |
xbindingBuffer_objectBuffer = xDevice.createBuffer({"label":"bindingBuffer_object_objectStruct","size":48,"usage":72}); | |
xbindingBuffer_objectBuffer1 = xDevice.createBuffer({"label":"bindingBuffer_object_renderStruct","size":112,"usage":72}); | |
xbindGroup_objectBindGroup = xDevice.createBindGroup({"label":"bindGroup_object","layout":xBindGroupLayout1,"entries":[{"binding":0,"resource":{"buffer":xbindingBuffer_objectBuffer}},{"binding":1,"resource":{"buffer":xbindingBuffer_objectBuffer1}}]}); | |
xQueue.writeBuffer(xbindingBuffer_renderBuffer,0,D[4],0); | |
xQueue.writeBuffer(xbindingBuffer_renderBuffer1,0,D[6],0); | |
xQueue.writeBuffer(xbindingBuffer_objectBuffer,0,D[8],0); | |
xQueue.writeBuffer(xbindingBuffer_objectBuffer1,0,D[10],0); | |
xvertexShaderModule = xDevice.createShaderModule({"code":`// Three.js r181dev - Node System | |
// directives | |
// structs | |
// uniforms | |
struct renderStruct { | |
cameraViewMatrix : mat4x4<f32>, | |
cameraProjectionMatrix : mat4x4<f32> | |
}; | |
@binding( 1 ) @group( 0 ) | |
var<uniform> render : renderStruct; | |
struct objectStruct { | |
nodeUniform5 : mat3x3<f32>, | |
nodeUniform12 : mat4x4<f32> | |
}; | |
@binding( 1 ) @group( 1 ) | |
var<uniform> object : objectStruct; | |
// varyings | |
struct VaryingsStruct { | |
@location( 3 ) v_normalViewGeometry : vec3<f32>, | |
@location( 4 ) v_positionViewDirection : vec3<f32>, | |
@builtin( position ) Vertex : vec4<f32> | |
}; | |
var<private> varyings : VaryingsStruct; | |
// codes | |
@vertex | |
fn main( @location( 0 ) normal : vec3<f32>, | |
@location( 1 ) position : vec3<f32> ) -> VaryingsStruct { | |
// vars | |
var normalLocal : vec3<f32>; | |
var modelViewMatrix : mat4x4<f32>; | |
var nodeVar71 : vec4<f32>; | |
var v_modelViewProjection : vec4<f32>; | |
var v_positionView : vec3<f32>; | |
var positionLocal : vec3<f32>; | |
// flow | |
// code | |
normalLocal = normal; | |
varyings.v_normalViewGeometry = normalize( ( render.cameraViewMatrix * vec4<f32>( ( object.nodeUniform5 * normalLocal ), 0.0 ) ).xyz ); | |
positionLocal = position; | |
modelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform12 ); | |
v_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz; | |
varyings.v_positionViewDirection = ( - v_positionView ); | |
nodeVar71 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) ); | |
v_modelViewProjection = nodeVar71; | |
// result | |
varyings.Vertex = v_modelViewProjection; | |
return varyings; | |
} | |
`,"label":`vertex`}); | |
xfragmentShaderModule = xDevice.createShaderModule({"code":`// Three.js r181dev - Node System | |
// global | |
diagnostic( off, derivative_uniformity ); | |
// structs | |
struct OutputStruct { | |
@location(0) color: vec4<f32> | |
}; | |
var<private> output : OutputStruct; | |
// uniforms | |
struct objectStruct { | |
nodeUniform0 : vec3<f32>, | |
nodeUniform1 : f32, | |
nodeUniform2 : f32, | |
nodeUniform3 : f32, | |
nodeUniform6 : vec3<f32>, | |
nodeUniform7 : f32 | |
}; | |
@binding( 0 ) @group( 1 ) | |
var<uniform> object : objectStruct; | |
struct renderStruct { | |
cameraViewMatrix : mat4x4<f32>, | |
nodeUniform9 : vec3<f32>, | |
nodeUniform10 : vec3<f32>, | |
nodeUniform11 : vec3<f32> | |
}; | |
@binding( 0 ) @group( 0 ) | |
var<uniform> render : renderStruct; | |
// codes | |
fn V_GGX_SmithCorrelated ( alpha : f32, dotNL : f32, dotNV : f32 ) -> f32 { | |
var nodeVar0 : f32; | |
nodeVar0 = ( alpha * alpha ); | |
return ( 0.5 / max( ( ( dotNL * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNV * dotNV ) ) ) ) ) + ( dotNV * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNL * dotNL ) ) ) ) ) ), 0.000001 ) ); | |
} | |
fn D_GGX ( alpha : f32, dotNH : f32 ) -> f32 { | |
var nodeVar0 : f32; | |
var nodeVar1 : f32; | |
nodeVar0 = ( alpha * alpha ); | |
nodeVar1 = ( 1.0 - ( ( dotNH * dotNH ) * ( 1.0 - nodeVar0 ) ) ); | |
return ( ( nodeVar0 / ( nodeVar1 * nodeVar1 ) ) * 0.3183098861837907 ); | |
} | |
fn DFGApprox ( roughness : f32, dotNV : vec3<f32> ) -> vec2<f32> { | |
var nodeVar0 : vec4<f32>; | |
nodeVar0 = ( ( roughness * vec4<f32>( -1.0, -0.0275, -0.572, 0.022 ) ) + vec4<f32>( 1.0, 0.0425, 1.04, -0.04 ) ); | |
return ( ( vec3<f32>( vec2<f32>( -1.04, 1.04 ), 0.0 ) * ( ( min( vec3<f32>( ( nodeVar0.x * nodeVar0.x ) ), exp2( ( dotNV * vec3<f32>( -9.28 ) ) ) ) * vec3<f32>( nodeVar0.x ) ) + vec3<f32>( nodeVar0.y ) ) ) + vec3<f32>( nodeVar0.zw, 0.0 ) ).xy; | |
} | |
@fragment | |
fn main( @location( 3 ) v_normalViewGeometry : vec3<f32>, | |
@location( 4 ) v_positionViewDirection : vec3<f32> ) -> OutputStruct { | |
// vars | |
var DiffuseColor : vec4<f32>; | |
var Metalness : f32; | |
var Roughness : f32; | |
var normalViewGeometry : vec3<f32>; | |
var nodeVar0 : vec3<f32>; | |
var SpecularColor : vec3<f32>; | |
var SpecularF90 : f32; | |
var EmissiveColor : vec3<f32>; | |
var Output : vec4<f32>; | |
var directDiffuse : vec3<f32>; | |
var NORMAL_normalView : vec3<f32>; | |
var normalView : vec3<f32>; | |
var nodeVar1 : vec3<f32>; | |
var nodeVar2 : vec4<f32>; | |
var nodeVar3 : vec4<f32>; | |
var nodeVar4 : vec3<f32>; | |
var nodeVar5 : vec3<f32>; | |
var nodeVar6 : f32; | |
var nodeVar7 : vec3<f32>; | |
var nodeVar8 : vec3<f32>; | |
var nodeVar9 : vec3<f32>; | |
var nodeVar10 : vec3<f32>; | |
var directSpecular : vec3<f32>; | |
var positionViewDirection : vec3<f32>; | |
var nodeVar11 : vec3<f32>; | |
var nodeVar12 : f32; | |
var nodeVar13 : f32; | |
var nodeVar14 : f32; | |
var nodeVar15 : vec3<f32>; | |
var nodeVar16 : vec3<f32>; | |
var nodeVar17 : vec3<f32>; | |
var indirectDiffuse : vec3<f32>; | |
var irradiance : vec3<f32>; | |
var nodeVar18 : vec4<f32>; | |
var nodeVar19 : vec4<f32>; | |
var nodeVar20 : vec4<f32>; | |
var singleScattering : vec3<f32>; | |
var multiScattering : vec3<f32>; | |
var nodeVar21 : f32; | |
var nodeVar22 : vec2<f32>; | |
var nodeVar23 : vec3<f32>; | |
var nodeVar24 : f32; | |
var nodeVar25 : vec3<f32>; | |
var nodeVar26 : vec3<f32>; | |
var nodeVar27 : vec3<f32>; | |
var nodeVar28 : vec3<f32>; | |
var nodeVar29 : vec3<f32>; | |
var nodeVar30 : vec3<f32>; | |
var nodeVar31 : vec3<f32>; | |
var nodeVar32 : f32; | |
var nodeVar33 : f32; | |
var nodeVar34 : f32; | |
var nodeVar35 : vec3<f32>; | |
var nodeVar36 : vec3<f32>; | |
var nodeVar37 : vec3<f32>; | |
var nodeVar38 : vec3<f32>; | |
var nodeVar39 : vec3<f32>; | |
var nodeVar40 : vec3<f32>; | |
var indirectSpecular : vec3<f32>; | |
var radiance : vec3<f32>; | |
var nodeVar41 : vec3<f32>; | |
var nodeVar42 : vec3<f32>; | |
var iblIrradiance : vec3<f32>; | |
var nodeVar43 : vec3<f32>; | |
var nodeVar44 : vec3<f32>; | |
var nodeVar45 : vec3<f32>; | |
var nodeVar46 : vec3<f32>; | |
var nodeVar47 : f32; | |
var nodeVar48 : f32; | |
var nodeVar49 : f32; | |
var nodeVar50 : f32; | |
var nodeVar51 : vec4<f32>; | |
var nodeVar52 : vec4<f32>; | |
var nodeVar53 : vec4<f32>; | |
var ambientOcclusion : f32; | |
var nodeVar54 : vec3<f32>; | |
var nodeVar55 : f32; | |
var nodeVar56 : f32; | |
var nodeVar57 : f32; | |
var nodeVar58 : f32; | |
var nodeVar59 : f32; | |
var nodeVar60 : f32; | |
var nodeVar61 : f32; | |
var nodeVar62 : f32; | |
var nodeVar63 : f32; | |
var nodeVar64 : f32; | |
var nodeVar65 : f32; | |
var nodeVar66 : vec3<f32>; | |
var totalDiffuse : vec3<f32>; | |
var nodeVar67 : vec3<f32>; | |
var totalSpecular : vec3<f32>; | |
var nodeVar68 : vec3<f32>; | |
var outgoingLight : vec3<f32>; | |
var nodeVar69 : vec3<f32>; | |
var nodeVar70 : vec4<f32>; | |
// flow | |
// code | |
DiffuseColor = vec4<f32>( object.nodeUniform0, 1.0 ); | |
DiffuseColor.w = ( DiffuseColor.w * object.nodeUniform1 ); | |
DiffuseColor.w = 1.0; | |
Metalness = object.nodeUniform2; | |
normalViewGeometry = normalize( v_normalViewGeometry ); | |
nodeVar0 = max( abs( dpdx( normalViewGeometry ) ), abs( - dpdy( normalViewGeometry ) ) ); | |
Roughness = min( ( max( object.nodeUniform3, 0.0525 ) + max( max( nodeVar0.x, nodeVar0.y ), nodeVar0.z ) ), 1.0 ); | |
SpecularColor = mix( vec3<f32>( 0.04, 0.04, 0.04 ), DiffuseColor.xyz, Metalness ); | |
SpecularF90 = 1.0; | |
DiffuseColor = vec4<f32>( ( DiffuseColor.xyz * vec3<f32>( ( 1.0 - object.nodeUniform2 ) ) ), DiffuseColor.w ); | |
EmissiveColor = ( object.nodeUniform6 * vec3<f32>( object.nodeUniform7 ) ); | |
directDiffuse = vec3<f32>( 0.0, 0.0, 0.0 ); | |
NORMAL_normalView = normalViewGeometry; | |
normalView = NORMAL_normalView; | |
nodeVar1 = ( render.nodeUniform9 - render.nodeUniform10 ); | |
nodeVar2 = vec4<f32>( nodeVar1, 0.0 ); | |
nodeVar3 = ( render.cameraViewMatrix * nodeVar2 ); | |
nodeVar4 = normalize( nodeVar3.xyz ); | |
nodeVar5 = nodeVar4; | |
nodeVar6 = dot( normalView, nodeVar5 ); | |
nodeVar7 = ( vec3<f32>( clamp( nodeVar6, 0.0, 1.0 ) ) * render.nodeUniform11 ); | |
nodeVar8 = ( DiffuseColor.xyz * vec3<f32>( 0.3183098861837907 ) ); | |
nodeVar9 = ( nodeVar7 * nodeVar8 ); | |
nodeVar10 = ( directDiffuse + nodeVar9 ); | |
directDiffuse = nodeVar10; | |
directSpecular = vec3<f32>( 0.0, 0.0, 0.0 ); | |
positionViewDirection = normalize( v_positionViewDirection ); | |
nodeVar11 = normalize( ( nodeVar5 + positionViewDirection ) ); | |
nodeVar12 = clamp( dot( positionViewDirection, nodeVar11 ), 0.0, 1.0 ); | |
nodeVar13 = exp2( ( ( ( nodeVar12 * -5.55473 ) - 6.98316 ) * nodeVar12 ) ); | |
nodeVar14 = ( Roughness * Roughness ); | |
nodeVar15 = ( ( ( ( SpecularColor * vec3<f32>( ( 1.0 - nodeVar13 ) ) ) + vec3<f32>( ( 1.0 * nodeVar13 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar14, clamp( dot( normalView, nodeVar5 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar14, clamp( dot( normalView, nodeVar11 ), 0.0, 1.0 ) ) ) ); | |
nodeVar16 = ( nodeVar7 * nodeVar15 ); | |
nodeVar17 = ( directSpecular + nodeVar16 ); | |
directSpecular = nodeVar17; | |
indirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 ); | |
irradiance = vec3<f32>( 0.0, 0.0, 0.0 ); | |
nodeVar18 = ( DiffuseColor * vec4<f32>( 0.3183098861837907 ) ); | |
nodeVar19 = ( vec4<f32>( irradiance, 1.0 ) * nodeVar18 ); | |
nodeVar20 = ( vec4<f32>( indirectDiffuse, 1.0 ) + nodeVar19 ); | |
indirectDiffuse = nodeVar20.xyz; | |
singleScattering = vec3<f32>( 0.0, 0.0, 0.0 ); | |
multiScattering = vec3<f32>( 0.0, 0.0, 0.0 ); | |
nodeVar21 = dot( normalView, positionViewDirection ); | |
nodeVar22 = DFGApprox( Roughness, vec3<f32>( clamp( nodeVar21, 0.0, 1.0 ) ) ); | |
nodeVar23 = ( SpecularColor * vec3<f32>( nodeVar22.x ) ); | |
nodeVar24 = ( SpecularF90 * nodeVar22.y ); | |
nodeVar25 = ( nodeVar23 + vec3<f32>( nodeVar24 ) ); | |
nodeVar26 = ( singleScattering + nodeVar25 ); | |
singleScattering = nodeVar26; | |
nodeVar27 = ( vec3<f32>( 1.0 ) - SpecularColor ); | |
nodeVar28 = nodeVar27; | |
nodeVar29 = ( nodeVar28 * vec3<f32>( 0.047619 ) ); | |
nodeVar30 = ( SpecularColor + nodeVar29 ); | |
nodeVar31 = ( nodeVar25 * nodeVar30 ); | |
nodeVar32 = ( nodeVar22.x + nodeVar22.y ); | |
nodeVar33 = ( 1.0 - nodeVar32 ); | |
nodeVar34 = nodeVar33; | |
nodeVar35 = ( vec3<f32>( nodeVar34 ) * nodeVar30 ); | |
nodeVar36 = ( vec3<f32>( 1.0 ) - nodeVar35 ); | |
nodeVar37 = nodeVar36; | |
nodeVar38 = ( nodeVar31 / nodeVar37 ); | |
nodeVar39 = ( nodeVar38 * vec3<f32>( nodeVar34 ) ); | |
nodeVar40 = ( multiScattering + nodeVar39 ); | |
multiScattering = nodeVar40; | |
indirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 ); | |
radiance = vec3<f32>( 0.0, 0.0, 0.0 ); | |
nodeVar41 = ( radiance * singleScattering ); | |
nodeVar42 = ( indirectSpecular + nodeVar41 ); | |
indirectSpecular = nodeVar42; | |
iblIrradiance = vec3<f32>( 0.0, 0.0, 0.0 ); | |
nodeVar43 = ( iblIrradiance * vec3<f32>( 0.3183098861837907 ) ); | |
nodeVar44 = ( multiScattering * nodeVar43 ); | |
nodeVar45 = ( indirectSpecular + nodeVar44 ); | |
indirectSpecular = nodeVar45; | |
nodeVar46 = ( singleScattering + multiScattering ); | |
nodeVar47 = max( nodeVar46.x, nodeVar46.y ); | |
nodeVar48 = max( nodeVar47, nodeVar46.z ); | |
nodeVar49 = ( 1.0 - nodeVar48 ); | |
nodeVar50 = nodeVar49; | |
nodeVar51 = ( DiffuseColor * vec4<f32>( nodeVar50 ) ); | |
nodeVar52 = ( nodeVar51 * vec4<f32>( nodeVar43, 1.0 ) ); | |
nodeVar53 = ( vec4<f32>( indirectDiffuse, 1.0 ) + nodeVar52 ); | |
indirectDiffuse = nodeVar53.xyz; | |
ambientOcclusion = 1.0; | |
nodeVar54 = ( indirectDiffuse * vec3<f32>( ambientOcclusion ) ); | |
indirectDiffuse = nodeVar54; | |
nodeVar55 = dot( normalView, positionViewDirection ); | |
nodeVar56 = ( clamp( nodeVar55, 0.0, 1.0 ) + ambientOcclusion ); | |
nodeVar57 = ( Roughness * -16.0 ); | |
nodeVar58 = ( 1.0 - nodeVar57 ); | |
nodeVar59 = nodeVar58; | |
nodeVar60 = ( - nodeVar59 ); | |
nodeVar61 = exp2( nodeVar60 ); | |
nodeVar62 = pow( nodeVar56, nodeVar61 ); | |
nodeVar63 = ( 1.0 - nodeVar62 ); | |
nodeVar64 = nodeVar63; | |
nodeVar65 = ( ambientOcclusion - nodeVar64 ); | |
nodeVar66 = ( indirectSpecular * vec3<f32>( clamp( nodeVar65, 0.0, 1.0 ) ) ); | |
indirectSpecular = nodeVar66; | |
nodeVar67 = ( directDiffuse + indirectDiffuse ); | |
totalDiffuse = nodeVar67; | |
nodeVar68 = ( directSpecular + indirectSpecular ); | |
totalSpecular = nodeVar68; | |
nodeVar69 = ( totalDiffuse + totalSpecular ); | |
outgoingLight = nodeVar69; | |
nodeVar70 = max( vec4<f32>( ( outgoingLight + EmissiveColor ), DiffuseColor.w ), vec4<f32>( 0.0 ) ); | |
Output = nodeVar70; | |
// result | |
output.color = nodeVar70; | |
return output; | |
} | |
`,"label":`fragment`}); | |
xPipelineLayout = xDevice.createPipelineLayout({"bindGroupLayouts":[xBindGroupLayout,xBindGroupLayout1]}); | |
xrenderPipeline_MeshStandardMaterial_17RenderPipeline = xDevice.createRenderPipeline({"label":"renderPipeline_MeshStandardMaterial_17","vertex":{"module":xvertexShaderModule,"entryPoint":"main","buffers":[{"arrayStride":12,"attributes":[{"shaderLocation":0,"offset":0,"format":"float32x3"}],"stepMode":"vertex"},{"arrayStride":12,"attributes":[{"shaderLocation":1,"offset":0,"format":"float32x3"}],"stepMode":"vertex"}]},"fragment":{"module":xfragmentShaderModule,"entryPoint":"main","targets":[{"format":"rgba16float","writeMask":15}]},"primitive":{"topology":"triangle-list","frontFace":"ccw","cullMode":"back"},"multisample":{"count":1,"alphaToCoverageEnabled":false},"layout":xPipelineLayout,"depthStencil":{"format":"depth24plus","depthWriteEnabled":true,"depthCompare":"less-equal"}}); | |
xRenderPassEncoder.setPipeline(xrenderPipeline_MeshStandardMaterial_17RenderPipeline); | |
xRenderPassEncoder.setBindGroup(0,xbindGroup_renderBindGroup); | |
xRenderPassEncoder.setBindGroup(1,xbindGroup_objectBindGroup); | |
xRenderPassEncoder.setIndexBuffer(cubeNdxBuffer,"uint32"); | |
xRenderPassEncoder.setVertexBuffer(0,cubePosBuffer); | |
xRenderPassEncoder.setVertexBuffer(1,cubeNrmBuffer); | |
xRenderPassEncoder.drawIndexed(36,1,0,0,0); | |
xShadowMapTexture = xDevice.createTexture({"label":"ShadowMap","size":{"width":512,"height":512,"depthOrArrayLayers":1},"mipLevelCount":1,"sampleCount":1,"dimension":"2d","format":"rgba8unorm","usage":23}); | |
xShadowDepthTextureTexture = xDevice.createTexture({"label":"ShadowDepthTexture","size":{"width":512,"height":512,"depthOrArrayLayers":1},"mipLevelCount":1,"sampleCount":1,"dimension":"2d","format":"depth24plus","usage":23}); | |
xcolorAttachment_0TextureView1 = xShadowMapTexture.createView({"label":"colorAttachment_0","baseMipLevel":0,"mipLevelCount":1,"baseArrayLayer":0,"arrayLayerCount":1,"dimension":"2d"}); | |
xTextureView1 = xShadowDepthTextureTexture.createView({}); | |
xrenderContext_1CommandEncoder = xDevice.createCommandEncoder({"label":"depth-cmd-buf"}); | |
xRenderPassEncoder1 = xrenderContext_1CommandEncoder.beginRenderPass({label: xrenderContext_1CommandEncoder.label, "colorAttachments":[{"view":xcolorAttachment_0TextureView1,"loadOp":"clear","storeOp":"store","clearValue":{"r":0,"g":0,"b":0,"a":0}}],"depthStencilAttachment":{"view":xTextureView1,"depthClearValue":1,"depthLoadOp":"clear","depthStoreOp":"store"}}); | |
xRenderPassEncoder1.setViewport(0,0,512,512,0,1); | |
xBindGroupLayout2 = xDevice.createBindGroupLayout({"entries":[{"binding":0,"visibility":1,"buffer":{}}]}); | |
xbindingBuffer_renderBuffer2 = xDevice.createBuffer({"label":"bindingBuffer_render_objStruct","size":128,"usage":72}); | |
xbindGroup_renderBindGroup1 = xDevice.createBindGroup({"label":"bindGroup_render_rendStruct","layout":xBindGroupLayout2,"entries":[{"binding":0,"resource":{"buffer":xbindingBuffer_renderBuffer2}}]}); | |
xBindGroupLayout3 = xDevice.createBindGroupLayout({"entries":[{"binding":0,"visibility":2,"buffer":{}},{"binding":1,"visibility":1,"buffer":{}}]}); | |
xbindingBuffer_objectBuffer2 = xDevice.createBuffer({"label":"bindingBuffer_object_objStruct","size":16,"usage":72}); | |
xbindingBuffer_objectBuffer3 = xDevice.createBuffer({"label":"bindingBuffer_object_rendStruct","size":64,"usage":72}); | |
xbindGroup_objectBindGroup1 = xDevice.createBindGroup({"label":"bindGroup_object","layout":xBindGroupLayout3,"entries":[{"binding":0,"resource":{"buffer":xbindingBuffer_objectBuffer2}},{"binding":1,"resource":{"buffer":xbindingBuffer_objectBuffer3}}]}); | |
xQueue.writeBuffer(xbindingBuffer_renderBuffer2,0,D[12],0); | |
xQueue.writeBuffer(xbindingBuffer_objectBuffer2,0,D[14],0); | |
xQueue.writeBuffer(xbindingBuffer_objectBuffer3,0,D[16],0); | |
xvertex_ShadowMaterialShaderModule = xDevice.createShaderModule({"code":`// Three.js r181dev - Node System | |
// directives | |
// structs | |
// uniforms | |
struct renderStruct { | |
cameraProjectionMatrix : mat4x4<f32>, | |
cameraViewMatrix : mat4x4<f32> | |
}; | |
@binding( 0 ) @group( 0 ) | |
var<uniform> render : renderStruct; | |
struct objectStruct { | |
nodeUniform3 : mat4x4<f32> | |
}; | |
@binding( 1 ) @group( 1 ) | |
var<uniform> object : objectStruct; | |
// varyings | |
struct VaryingsStruct { | |
@builtin( position ) Vertex : vec4<f32> | |
}; | |
var<private> varyings : VaryingsStruct; | |
// codes | |
@vertex | |
fn main( @location( 0 ) position : vec3<f32> ) -> VaryingsStruct { | |
// vars | |
var modelViewMatrix : mat4x4<f32>; | |
var nodeVar1 : vec4<f32>; | |
var v_modelViewProjection : vec4<f32>; | |
var v_positionView : vec3<f32>; | |
var positionLocal : vec3<f32>; | |
// flow | |
// code | |
positionLocal = position; | |
modelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform3 ); | |
v_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz; | |
nodeVar1 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) ); | |
v_modelViewProjection = nodeVar1; | |
// result | |
varyings.Vertex = v_modelViewProjection; | |
return varyings; | |
} | |
`,"label":`vertex_ShadowMaterial`}); | |
xfragment_ShadowMaterialShaderModule = xDevice.createShaderModule({"code":`// Three.js r181dev - Node System | |
// global | |
diagnostic( off, derivative_uniformity ); | |
// structs | |
struct OutputStruct { | |
@location(0) color: vec4<f32> | |
}; | |
var<private> output : OutputStruct; | |
// uniforms | |
struct objectStruct { | |
nodeUniform0 : f32 | |
}; | |
@binding( 0 ) @group( 1 ) | |
var<uniform> object : objectStruct; | |
// codes | |
@fragment | |
fn main( ) -> OutputStruct { | |
// vars | |
var DiffuseColor : vec4<f32>; | |
var Output : vec4<f32>; | |
var nodeVar0 : vec4<f32>; | |
// flow | |
// code | |
DiffuseColor = vec4<f32>( 0.0, 0.0, 0.0, 1.0 ); | |
DiffuseColor.w = ( DiffuseColor.w * object.nodeUniform0 ); | |
DiffuseColor.w = 1.0; | |
nodeVar0 = max( vec4<f32>( DiffuseColor.xyz, DiffuseColor.w ), vec4<f32>( 0.0 ) ); | |
Output = nodeVar0; | |
// result | |
output.color = nodeVar0; | |
return output; | |
} | |
`,"label":`fragment_ShadowMaterial`}); | |
xPipelineLayout1 = xDevice.createPipelineLayout({"bindGroupLayouts":[xBindGroupLayout2,xBindGroupLayout3]}); | |
xrenderPipeline_ShadowMaterial_21RenderPipeline = xDevice.createRenderPipeline({"label":"renderPipeline_ShadowMaterial_21","vertex":{"module":xvertex_ShadowMaterialShaderModule,"entryPoint":"main","buffers":[{"arrayStride":12,"attributes":[{"shaderLocation":0,"offset":0,"format":"float32x3"}],"stepMode":"vertex"}]},"fragment":{"module":xfragment_ShadowMaterialShaderModule,"entryPoint":"main","targets":[{"format":"rgba8unorm","writeMask":15}]},"primitive":{"topology":"triangle-list","frontFace":"ccw","cullMode":"back"},"multisample":{"count":1,"alphaToCoverageEnabled":false},"layout":xPipelineLayout1,"depthStencil":{"format":"depth24plus","depthWriteEnabled":true,"depthCompare":"less-equal"}}); | |
xRenderPassEncoder1.setPipeline(xrenderPipeline_ShadowMaterial_21RenderPipeline); | |
xRenderPassEncoder1.setBindGroup(0,xbindGroup_renderBindGroup1); | |
xRenderPassEncoder1.setBindGroup(1,xbindGroup_objectBindGroup1); | |
xRenderPassEncoder1.setIndexBuffer(cubeNdxBuffer,"uint32"); | |
xRenderPassEncoder1.setVertexBuffer(0,cubeNrmBuffer); | |
xRenderPassEncoder1.drawIndexed(36,1,0,0,0); | |
xRenderPassEncoder1.end(); | |
xCommandBuffer = xrenderContext_1CommandEncoder.finish(xrenderContext_1CommandEncoder) | |
xQueue.submit([xCommandBuffer]); | |
planePosBuffer = xDevice.createBuffer({"label":"","size":48,"usage":44,"mappedAtCreation":true}); | |
xArrayBuffer3 = planePosBuffer.getMappedRange(); | |
new Uint8Array(xArrayBuffer3).set(D[17]); | |
planePosBuffer.unmap(); | |
planeNrmBuffer = xDevice.createBuffer({"label":"","size":48,"usage":44,"mappedAtCreation":true}); | |
xArrayBuffer4 = planeNrmBuffer.getMappedRange(); | |
new Uint8Array(xArrayBuffer4).set(D[18]); | |
planeNrmBuffer.unmap(); | |
planeNdxBuffer = xDevice.createBuffer({"label":"","size":24,"usage":28,"mappedAtCreation":true}); | |
xArrayBuffer5 = planeNdxBuffer.getMappedRange(); | |
new Uint8Array(xArrayBuffer5).set(D[19]); | |
planeNdxBuffer.unmap(); | |
xBindGroupLayout4 = xDevice.createBindGroupLayout({"entries":[{"binding":0,"visibility":2,"buffer":{}},{"binding":1,"visibility":1,"buffer":{}}]}); | |
xbindingBuffer_renderBuffer3 = xDevice.createBuffer({"label":"bindingBuffer_render_objectStruct","size":208,"usage":72}); | |
xbindingBuffer_renderBuffer4 = xDevice.createBuffer({"label":"bindingBuffer_render_rStruct","size":128,"usage":72}); | |
xbindGroup_renderBindGroup2 = xDevice.createBindGroup({"label":"bindGroup_render","layout":xBindGroupLayout4,"entries":[{"binding":0,"resource":{"buffer":xbindingBuffer_renderBuffer3}},{"binding":1,"resource":{"buffer":xbindingBuffer_renderBuffer4}}]}); | |
xSampler = xDevice.createSampler({"addressModeU":"clamp-to-edge","addressModeV":"clamp-to-edge","addressModeW":"clamp-to-edge","magFilter":"linear","minFilter":"linear","mipmapFilter":"linear","maxAnisotropy":1}); | |
xSampler1 = xDevice.createSampler({"addressModeU":"clamp-to-edge","addressModeV":"clamp-to-edge","addressModeW":"clamp-to-edge","magFilter":"nearest","minFilter":"nearest","mipmapFilter":"nearest","maxAnisotropy":1,"compare":"less"}); | |
xBindGroupLayout5 = xDevice.createBindGroupLayout({"entries":[{"binding":0,"visibility":2,"buffer":{}},{"binding":1,"visibility":2,"sampler":{}},{"binding":2,"visibility":2,"texture":{}},{"binding":3,"visibility":2,"sampler":{"type":"comparison"}},{"binding":4,"visibility":2,"texture":{"sampleType":"depth"}},{"binding":5,"visibility":1,"buffer":{}}]}); | |
xbindingBuffer_objectBuffer4 = xDevice.createBuffer({"label":"bindingBuffer_object","size":48,"usage":72}); | |
xTextureView2 = xShadowMapTexture.createView({"aspect":"all","dimension":"2d","mipLevelCount":1}); | |
xTextureView3 = xShadowDepthTextureTexture.createView({"aspect":"all","dimension":"2d","mipLevelCount":1}); | |
xbindingBuffer_objectBuffer5 = xDevice.createBuffer({"label":"bindingBuffer_object","size":112,"usage":72}); | |
xbindGroup_objectBindGroup2 = xDevice.createBindGroup({"label":"bindGroup_object","layout":xBindGroupLayout5,"entries":[{"binding":0,"resource":{"buffer":xbindingBuffer_objectBuffer4}},{"binding":1,"resource":xSampler},{"binding":2,"resource":xTextureView2},{"binding":3,"resource":xSampler1},{"binding":4,"resource":xTextureView3},{"binding":5,"resource":{"buffer":xbindingBuffer_objectBuffer5}}]}); | |
xQueue.writeBuffer(xbindingBuffer_renderBuffer3,0,D[21]/*D[36]*/,0); | |
xQueue.writeBuffer(xbindingBuffer_renderBuffer4,0,D[23],0); | |
xQueue.writeBuffer(xbindingBuffer_objectBuffer4,0,D[25],0); | |
xQueue.writeBuffer(xbindingBuffer_objectBuffer5,0,D[27],0); | |
xbindGroup_objectBindGroup3 = xDevice.createBindGroup({"label":"bindGroup_object","layout":xBindGroupLayout5,"entries":[{"binding":0,"resource":{"buffer":xbindingBuffer_objectBuffer4}},{"binding":1,"resource":xSampler},{"binding":2,"resource":xTextureView2},{"binding":3,"resource":xSampler1},{"binding":4,"resource":xTextureView3},{"binding":5,"resource":{"buffer":xbindingBuffer_objectBuffer5}}]}); | |
xvertexShaderModule1 = xDevice.createShaderModule({"code":`// Three.js r181dev - Node System | |
// directives | |
// structs | |
// uniforms | |
struct renderStruct { | |
cameraViewMatrix : mat4x4<f32>, | |
cameraProjectionMatrix : mat4x4<f32> | |
}; | |
@binding( 1 ) @group( 0 ) | |
var<uniform> render : renderStruct; | |
struct objectStruct { | |
nodeUniform5 : mat3x3<f32>, | |
nodeUniform12 : mat4x4<f32> | |
}; | |
@binding( 5 ) @group( 1 ) | |
var<uniform> object : objectStruct; | |
// varyings | |
struct VaryingsStruct { | |
@location( 3 ) v_normalViewGeometry : vec3<f32>, | |
@location( 4 ) v_positionWorld : vec3<f32>, | |
@location( 5 ) v_positionViewDirection : vec3<f32>, | |
@builtin( position ) Vertex : vec4<f32> | |
}; | |
var<private> varyings : VaryingsStruct; | |
// codes | |
@vertex | |
fn main( @location( 0 ) normal : vec3<f32>, | |
@location( 1 ) position : vec3<f32> ) -> VaryingsStruct { | |
// vars | |
var normalLocal : vec3<f32>; | |
var modelViewMatrix : mat4x4<f32>; | |
var nodeVar120 : vec4<f32>; | |
var v_modelViewProjection : vec4<f32>; | |
var v_positionView : vec3<f32>; | |
var positionLocal : vec3<f32>; | |
// flow | |
// code | |
normalLocal = normal; | |
varyings.v_normalViewGeometry = normalize( ( render.cameraViewMatrix * vec4<f32>( ( object.nodeUniform5 * normalLocal ), 0.0 ) ).xyz ); | |
positionLocal = position; | |
varyings.v_positionWorld = ( object.nodeUniform12 * vec4<f32>( positionLocal, 1.0 ) ).xyz; | |
modelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform12 ); | |
v_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz; | |
varyings.v_positionViewDirection = ( - v_positionView ); | |
nodeVar120 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) ); | |
v_modelViewProjection = nodeVar120; | |
// result | |
varyings.Vertex = v_modelViewProjection; | |
return varyings; | |
} | |
`,"label":`vertex`}); | |
xfragmentShaderModule1 = xDevice.createShaderModule({"code":`// Three.js r181dev - Node System | |
// global | |
diagnostic( off, derivative_uniformity ); | |
// structs | |
struct OutputStruct { | |
@location(0) color: vec4<f32> | |
}; | |
var<private> output : OutputStruct; | |
// uniforms | |
@binding( 1 ) @group( 1 ) var nodeUniform13_sampler : sampler; | |
@binding( 2 ) @group( 1 ) var nodeUniform13 : texture_2d<f32>; | |
@binding( 3 ) @group( 1 ) var nodeUniform17_sampler : sampler_comparison; | |
@binding( 4 ) @group( 1 ) var nodeUniform17 : texture_depth_2d; | |
struct objectStruct { | |
nodeUniform0 : vec3<f32>, | |
nodeUniform1 : f32, | |
nodeUniform2 : f32, | |
nodeUniform3 : f32, | |
nodeUniform6 : vec3<f32>, | |
nodeUniform7 : f32 | |
}; | |
@binding( 0 ) @group( 1 ) | |
var<uniform> object : objectStruct; | |
struct renderStruct { | |
cameraViewMatrix : mat4x4<f32>, | |
nodeUniform9 : vec3<f32>, | |
nodeUniform10 : vec3<f32>, | |
nodeUniform11 : vec3<f32>, | |
nodeUniform14 : mat4x4<f32>, | |
nodeUniform15 : f32, | |
nodeUniform16 : f32, | |
nodeUniform18 : vec2<f32>, | |
nodeUniform19 : f32, | |
nodeUniform20 : f32 | |
}; | |
@binding( 0 ) @group( 0 ) | |
var<uniform> render : renderStruct; | |
// codes | |
fn V_GGX_SmithCorrelated ( alpha : f32, dotNL : f32, dotNV : f32 ) -> f32 { | |
var nodeVar0 : f32; | |
nodeVar0 = ( alpha * alpha ); | |
return ( 0.5 / max( ( ( dotNL * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNV * dotNV ) ) ) ) ) + ( dotNV * sqrt( ( nodeVar0 + ( ( 1.0 - nodeVar0 ) * ( dotNL * dotNL ) ) ) ) ) ), 0.000001 ) ); | |
} | |
fn D_GGX ( alpha : f32, dotNH : f32 ) -> f32 { | |
var nodeVar0 : f32; | |
var nodeVar1 : f32; | |
nodeVar0 = ( alpha * alpha ); | |
nodeVar1 = ( 1.0 - ( ( dotNH * dotNH ) * ( 1.0 - nodeVar0 ) ) ); | |
return ( ( nodeVar0 / ( nodeVar1 * nodeVar1 ) ) * 0.3183098861837907 ); | |
} | |
fn DFGApprox ( roughness : f32, dotNV : vec3<f32> ) -> vec2<f32> { | |
var nodeVar0 : vec4<f32>; | |
nodeVar0 = ( ( roughness * vec4<f32>( -1.0, -0.0275, -0.572, 0.022 ) ) + vec4<f32>( 1.0, 0.0425, 1.04, -0.04 ) ); | |
return ( ( vec3<f32>( vec2<f32>( -1.04, 1.04 ), 0.0 ) * ( ( min( vec3<f32>( ( nodeVar0.x * nodeVar0.x ) ), exp2( ( dotNV * vec3<f32>( -9.28 ) ) ) ) * vec3<f32>( nodeVar0.x ) ) + vec3<f32>( nodeVar0.y ) ) ) + vec3<f32>( nodeVar0.zw, 0.0 ) ).xy; | |
} | |
@fragment | |
fn main( @location( 3 ) v_normalViewGeometry : vec3<f32>, | |
@location( 4 ) v_positionWorld : vec3<f32>, | |
@location( 5 ) v_positionViewDirection : vec3<f32> ) -> OutputStruct { | |
// vars | |
var DiffuseColor : vec4<f32>; | |
var Metalness : f32; | |
var Roughness : f32; | |
var normalViewGeometry : vec3<f32>; | |
var nodeVar0 : vec3<f32>; | |
var SpecularColor : vec3<f32>; | |
var SpecularF90 : f32; | |
var EmissiveColor : vec3<f32>; | |
var Output : vec4<f32>; | |
var directDiffuse : vec3<f32>; | |
var NORMAL_normalView : vec3<f32>; | |
var normalView : vec3<f32>; | |
var nodeVar1 : vec3<f32>; | |
var nodeVar2 : vec4<f32>; | |
var nodeVar3 : vec4<f32>; | |
var nodeVar4 : vec3<f32>; | |
var nodeVar5 : vec3<f32>; | |
var nodeVar6 : f32; | |
var shadowPositionWorld : vec3<f32>; | |
var normalWorld : vec3<f32>; | |
var nodeVar7 : vec4<f32>; | |
var nodeVar8 : vec3<f32>; | |
var nodeVar9 : vec3<f32>; | |
var nodeVar10 : vec4<f32>; | |
var nodeVar11 : f32; | |
var nodeVar12 : vec2<f32>; | |
var nodeVar13 : f32; | |
var nodeVar14 : f32; | |
var nodeVar15 : vec2<f32>; | |
var nodeVar16 : f32; | |
var nodeVar17 : vec2<f32>; | |
var nodeVar18 : f32; | |
var nodeVar19 : f32; | |
var nodeVar20 : vec2<f32>; | |
var nodeVar21 : f32; | |
var nodeVar22 : f32; | |
var nodeVar23 : f32; | |
var nodeVar24 : vec2<f32>; | |
var nodeVar25 : f32; | |
var nodeVar26 : vec2<f32>; | |
var nodeVar27 : f32; | |
var nodeVar28 : f32; | |
var nodeVar29 : vec2<f32>; | |
var nodeVar30 : f32; | |
var nodeVar31 : vec2<f32>; | |
var nodeVar32 : f32; | |
var nodeVar33 : vec2<f32>; | |
var nodeVar34 : f32; | |
var nodeVar35 : f32; | |
var nodeVar36 : vec2<f32>; | |
var nodeVar37 : f32; | |
var nodeVar38 : vec2<f32>; | |
var nodeVar39 : f32; | |
var nodeVar40 : f32; | |
var nodeVar41 : f32; | |
var nodeVar42 : vec2<f32>; | |
var nodeVar43 : f32; | |
var nodeVar44 : vec2<f32>; | |
var nodeVar45 : f32; | |
var nodeVar46 : vec2<f32>; | |
var nodeVar47 : f32; | |
var nodeVar48 : vec2<f32>; | |
var nodeVar49 : f32; | |
var nodeVar50 : vec2<f32>; | |
var nodeVar51 : f32; | |
var nodeVar52 : vec2<f32>; | |
var nodeVar53 : f32; | |
var nodeVar54 : vec4<f32>; | |
var nodeVar55 : vec4<f32>; | |
var nodeVar56 : vec4<f32>; | |
var nodeVar57 : vec3<f32>; | |
var nodeVar58 : vec4<f32>; | |
var nodeVar59 : vec4<f32>; | |
var directSpecular : vec3<f32>; | |
var positionViewDirection : vec3<f32>; | |
var nodeVar60 : vec3<f32>; | |
var nodeVar61 : f32; | |
var nodeVar62 : f32; | |
var nodeVar63 : f32; | |
var nodeVar64 : vec3<f32>; | |
var nodeVar65 : vec4<f32>; | |
var nodeVar66 : vec4<f32>; | |
var indirectDiffuse : vec3<f32>; | |
var irradiance : vec3<f32>; | |
var nodeVar67 : vec4<f32>; | |
var nodeVar68 : vec4<f32>; | |
var nodeVar69 : vec4<f32>; | |
var singleScattering : vec3<f32>; | |
var multiScattering : vec3<f32>; | |
var nodeVar70 : f32; | |
var nodeVar71 : vec2<f32>; | |
var nodeVar72 : vec3<f32>; | |
var nodeVar73 : f32; | |
var nodeVar74 : vec3<f32>; | |
var nodeVar75 : vec3<f32>; | |
var nodeVar76 : vec3<f32>; | |
var nodeVar77 : vec3<f32>; | |
var nodeVar78 : vec3<f32>; | |
var nodeVar79 : vec3<f32>; | |
var nodeVar80 : vec3<f32>; | |
var nodeVar81 : f32; | |
var nodeVar82 : f32; | |
var nodeVar83 : f32; | |
var nodeVar84 : vec3<f32>; | |
var nodeVar85 : vec3<f32>; | |
var nodeVar86 : vec3<f32>; | |
var nodeVar87 : vec3<f32>; | |
var nodeVar88 : vec3<f32>; | |
var nodeVar89 : vec3<f32>; | |
var indirectSpecular : vec3<f32>; | |
var radiance : vec3<f32>; | |
var nodeVar90 : vec3<f32>; | |
var nodeVar91 : vec3<f32>; | |
var iblIrradiance : vec3<f32>; | |
var nodeVar92 : vec3<f32>; | |
var nodeVar93 : vec3<f32>; | |
var nodeVar94 : vec3<f32>; | |
var nodeVar95 : vec3<f32>; | |
var nodeVar96 : f32; | |
var nodeVar97 : f32; | |
var nodeVar98 : f32; | |
var nodeVar99 : f32; | |
var nodeVar100 : vec4<f32>; | |
var nodeVar101 : vec4<f32>; | |
var nodeVar102 : vec4<f32>; | |
var ambientOcclusion : f32; | |
var nodeVar103 : vec3<f32>; | |
var nodeVar104 : f32; | |
var nodeVar105 : f32; | |
var nodeVar106 : f32; | |
var nodeVar107 : f32; | |
var nodeVar108 : f32; | |
var nodeVar109 : f32; | |
var nodeVar110 : f32; | |
var nodeVar111 : f32; | |
var nodeVar112 : f32; | |
var nodeVar113 : f32; | |
var nodeVar114 : f32; | |
var nodeVar115 : vec3<f32>; | |
var totalDiffuse : vec3<f32>; | |
var nodeVar116 : vec3<f32>; | |
var totalSpecular : vec3<f32>; | |
var nodeVar117 : vec3<f32>; | |
var outgoingLight : vec3<f32>; | |
var nodeVar118 : vec3<f32>; | |
var nodeVar119 : vec4<f32>; | |
// flow | |
// code | |
DiffuseColor = vec4<f32>( object.nodeUniform0, 1.0 ); | |
DiffuseColor.w = ( DiffuseColor.w * object.nodeUniform1 ); | |
DiffuseColor.w = 1.0; | |
Metalness = object.nodeUniform2; | |
normalViewGeometry = normalize( v_normalViewGeometry ); | |
nodeVar0 = max( abs( dpdx( normalViewGeometry ) ), abs( - dpdy( normalViewGeometry ) ) ); | |
Roughness = min( ( max( object.nodeUniform3, 0.0525 ) + max( max( nodeVar0.x, nodeVar0.y ), nodeVar0.z ) ), 1.0 ); | |
SpecularColor = mix( vec3<f32>( 0.04, 0.04, 0.04 ), DiffuseColor.xyz, Metalness ); | |
SpecularF90 = 1.0; | |
DiffuseColor = vec4<f32>( ( DiffuseColor.xyz * vec3<f32>( ( 1.0 - object.nodeUniform2 ) ) ), DiffuseColor.w ); | |
EmissiveColor = ( object.nodeUniform6 * vec3<f32>( object.nodeUniform7 ) ); | |
directDiffuse = vec3<f32>( 0.0, 0.0, 0.0 ); | |
NORMAL_normalView = normalViewGeometry; | |
normalView = NORMAL_normalView; | |
nodeVar1 = ( render.nodeUniform9 - render.nodeUniform10 ); | |
nodeVar2 = vec4<f32>( nodeVar1, 0.0 ); | |
nodeVar3 = ( render.cameraViewMatrix * nodeVar2 ); | |
nodeVar4 = normalize( nodeVar3.xyz ); | |
nodeVar5 = nodeVar4; | |
nodeVar6 = dot( normalView, nodeVar5 ); | |
shadowPositionWorld = v_positionWorld; | |
normalWorld = normalize( ( vec4<f32>( normalView, 0.0 ) * render.cameraViewMatrix ).xyz ); | |
nodeVar7 = ( render.nodeUniform14 * vec4<f32>( ( shadowPositionWorld + ( normalWorld * vec3<f32>( render.nodeUniform15 ) ) ), 1.0 ) ); | |
nodeVar8 = ( nodeVar7.xyz / vec3<f32>( nodeVar7.w ) ); | |
nodeVar9 = vec3<f32>( nodeVar8.x, ( 1.0 - nodeVar8.y ), ( ( ( nodeVar8.z * 2.0 ) - 1.0 ) + render.nodeUniform16 ) ); | |
nodeVar10 = textureSample( nodeUniform13, nodeUniform13_sampler, nodeVar9.xy ); | |
if ( ( ( ( ( ( nodeVar9.x >= 0.0 ) && ( nodeVar9.x <= 1.0 ) ) && ( nodeVar9.y >= 0.0 ) ) && ( nodeVar9.y <= 1.0 ) ) && ( nodeVar9.z <= 1.0 ) ) ) { | |
nodeVar12 = ( vec2<f32>( 1.0, 1.0 ) / render.nodeUniform18 ); | |
nodeVar13 = ( ( - nodeVar12.x ) * render.nodeUniform19 ); | |
nodeVar14 = ( ( - nodeVar12.y ) * render.nodeUniform19 ); | |
nodeVar15 = ( nodeVar9.xy + vec2<f32>( nodeVar13, nodeVar14 ) ); | |
nodeVar16 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar15, nodeVar9.z ); | |
nodeVar17 = ( nodeVar9.xy + vec2<f32>( 0.0, nodeVar14 ) ); | |
nodeVar18 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar17, nodeVar9.z ); | |
nodeVar19 = ( nodeVar12.x * render.nodeUniform19 ); | |
nodeVar20 = ( nodeVar9.xy + vec2<f32>( nodeVar19, nodeVar14 ) ); | |
nodeVar21 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar20, nodeVar9.z ); | |
nodeVar22 = ( nodeVar13 / 2.0 ); | |
nodeVar23 = ( nodeVar14 / 2.0 ); | |
nodeVar24 = ( nodeVar9.xy + vec2<f32>( nodeVar22, nodeVar23 ) ); | |
nodeVar25 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar24, nodeVar9.z ); | |
nodeVar26 = ( nodeVar9.xy + vec2<f32>( 0.0, nodeVar23 ) ); | |
nodeVar27 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar26, nodeVar9.z ); | |
nodeVar28 = ( nodeVar19 / 2.0 ); | |
nodeVar29 = ( nodeVar9.xy + vec2<f32>( nodeVar28, nodeVar23 ) ); | |
nodeVar30 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar29, nodeVar9.z ); | |
nodeVar31 = ( nodeVar9.xy + vec2<f32>( nodeVar13, 0.0 ) ); | |
nodeVar32 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar31, nodeVar9.z ); | |
nodeVar33 = ( nodeVar9.xy + vec2<f32>( nodeVar22, 0.0 ) ); | |
nodeVar34 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar33, nodeVar9.z ); | |
nodeVar35 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar9.xy, nodeVar9.z ); | |
nodeVar36 = ( nodeVar9.xy + vec2<f32>( nodeVar28, 0.0 ) ); | |
nodeVar37 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar36, nodeVar9.z ); | |
nodeVar38 = ( nodeVar9.xy + vec2<f32>( nodeVar19, 0.0 ) ); | |
nodeVar39 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar38, nodeVar9.z ); | |
nodeVar40 = ( nodeVar12.y * render.nodeUniform19 ); | |
nodeVar41 = ( nodeVar40 / 2.0 ); | |
nodeVar42 = ( nodeVar9.xy + vec2<f32>( nodeVar22, nodeVar41 ) ); | |
nodeVar43 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar42, nodeVar9.z ); | |
nodeVar44 = ( nodeVar9.xy + vec2<f32>( 0.0, nodeVar41 ) ); | |
nodeVar45 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar44, nodeVar9.z ); | |
nodeVar46 = ( nodeVar9.xy + vec2<f32>( nodeVar28, nodeVar41 ) ); | |
nodeVar47 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar46, nodeVar9.z ); | |
nodeVar48 = ( nodeVar9.xy + vec2<f32>( nodeVar13, nodeVar40 ) ); | |
nodeVar49 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar48, nodeVar9.z ); | |
nodeVar50 = ( nodeVar9.xy + vec2<f32>( 0.0, nodeVar40 ) ); | |
nodeVar51 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar50, nodeVar9.z ); | |
nodeVar52 = ( nodeVar9.xy + vec2<f32>( nodeVar19, nodeVar40 ) ); | |
nodeVar53 = textureSampleCompare( nodeUniform17, nodeUniform17_sampler, nodeVar52, nodeVar9.z ); | |
nodeVar11 = ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( nodeVar16 + nodeVar18 ) + nodeVar21 ) + nodeVar25 ) + nodeVar27 ) + nodeVar30 ) + nodeVar32 ) + nodeVar34 ) + nodeVar35 ) + nodeVar37 ) + nodeVar39 ) + nodeVar43 ) + nodeVar45 ) + nodeVar47 ) + nodeVar49 ) + nodeVar51 ) + nodeVar53 ) * 0.058823529411764705 ); | |
} else { | |
nodeVar11 = 1.0; | |
} | |
nodeVar54 = mix( vec4<f32>( 1.0 ), mix( nodeVar10, vec4<f32>( 1.0 ), vec4<f32>( nodeVar11 ) ), ( render.nodeUniform20 * nodeVar10.w ) ); | |
nodeVar55 = ( vec4<f32>( render.nodeUniform11, 1.0 ) * nodeVar54 ); | |
nodeVar56 = ( vec4<f32>( clamp( nodeVar6, 0.0, 1.0 ) ) * nodeVar55 ); | |
nodeVar57 = ( DiffuseColor.xyz * vec3<f32>( 0.3183098861837907 ) ); | |
nodeVar58 = ( nodeVar56 * vec4<f32>( nodeVar57, 1.0 ) ); | |
nodeVar59 = ( vec4<f32>( directDiffuse, 1.0 ) + nodeVar58 ); | |
directDiffuse = nodeVar59.xyz; | |
directSpecular = vec3<f32>( 0.0, 0.0, 0.0 ); | |
positionViewDirection = normalize( v_positionViewDirection ); | |
nodeVar60 = normalize( ( nodeVar5 + positionViewDirection ) ); | |
nodeVar61 = clamp( dot( positionViewDirection, nodeVar60 ), 0.0, 1.0 ); | |
nodeVar62 = exp2( ( ( ( nodeVar61 * -5.55473 ) - 6.98316 ) * nodeVar61 ) ); | |
nodeVar63 = ( Roughness * Roughness ); | |
nodeVar64 = ( ( ( ( SpecularColor * vec3<f32>( ( 1.0 - nodeVar62 ) ) ) + vec3<f32>( ( 1.0 * nodeVar62 ) ) ) * vec3<f32>( V_GGX_SmithCorrelated( nodeVar63, clamp( dot( normalView, nodeVar5 ), 0.0, 1.0 ), clamp( dot( normalView, positionViewDirection ), 0.0, 1.0 ) ) ) ) * vec3<f32>( D_GGX( nodeVar63, clamp( dot( normalView, nodeVar60 ), 0.0, 1.0 ) ) ) ); | |
nodeVar65 = ( nodeVar56 * vec4<f32>( nodeVar64, 1.0 ) ); | |
nodeVar66 = ( vec4<f32>( directSpecular, 1.0 ) + nodeVar65 ); | |
directSpecular = nodeVar66.xyz; | |
indirectDiffuse = vec3<f32>( 0.0, 0.0, 0.0 ); | |
irradiance = vec3<f32>( 0.0, 0.0, 0.0 ); | |
nodeVar67 = ( DiffuseColor * vec4<f32>( 0.3183098861837907 ) ); | |
nodeVar68 = ( vec4<f32>( irradiance, 1.0 ) * nodeVar67 ); | |
nodeVar69 = ( vec4<f32>( indirectDiffuse, 1.0 ) + nodeVar68 ); | |
indirectDiffuse = nodeVar69.xyz; | |
singleScattering = vec3<f32>( 0.0, 0.0, 0.0 ); | |
multiScattering = vec3<f32>( 0.0, 0.0, 0.0 ); | |
nodeVar70 = dot( normalView, positionViewDirection ); | |
nodeVar71 = DFGApprox( Roughness, vec3<f32>( clamp( nodeVar70, 0.0, 1.0 ) ) ); | |
nodeVar72 = ( SpecularColor * vec3<f32>( nodeVar71.x ) ); | |
nodeVar73 = ( SpecularF90 * nodeVar71.y ); | |
nodeVar74 = ( nodeVar72 + vec3<f32>( nodeVar73 ) ); | |
nodeVar75 = ( singleScattering + nodeVar74 ); | |
singleScattering = nodeVar75; | |
nodeVar76 = ( vec3<f32>( 1.0 ) - SpecularColor ); | |
nodeVar77 = nodeVar76; | |
nodeVar78 = ( nodeVar77 * vec3<f32>( 0.047619 ) ); | |
nodeVar79 = ( SpecularColor + nodeVar78 ); | |
nodeVar80 = ( nodeVar74 * nodeVar79 ); | |
nodeVar81 = ( nodeVar71.x + nodeVar71.y ); | |
nodeVar82 = ( 1.0 - nodeVar81 ); | |
nodeVar83 = nodeVar82; | |
nodeVar84 = ( vec3<f32>( nodeVar83 ) * nodeVar79 ); | |
nodeVar85 = ( vec3<f32>( 1.0 ) - nodeVar84 ); | |
nodeVar86 = nodeVar85; | |
nodeVar87 = ( nodeVar80 / nodeVar86 ); | |
nodeVar88 = ( nodeVar87 * vec3<f32>( nodeVar83 ) ); | |
nodeVar89 = ( multiScattering + nodeVar88 ); | |
multiScattering = nodeVar89; | |
indirectSpecular = vec3<f32>( 0.0, 0.0, 0.0 ); | |
radiance = vec3<f32>( 0.0, 0.0, 0.0 ); | |
nodeVar90 = ( radiance * singleScattering ); | |
nodeVar91 = ( indirectSpecular + nodeVar90 ); | |
indirectSpecular = nodeVar91; | |
iblIrradiance = vec3<f32>( 0.0, 0.0, 0.0 ); | |
nodeVar92 = ( iblIrradiance * vec3<f32>( 0.3183098861837907 ) ); | |
nodeVar93 = ( multiScattering * nodeVar92 ); | |
nodeVar94 = ( indirectSpecular + nodeVar93 ); | |
indirectSpecular = nodeVar94; | |
nodeVar95 = ( singleScattering + multiScattering ); | |
nodeVar96 = max( nodeVar95.x, nodeVar95.y ); | |
nodeVar97 = max( nodeVar96, nodeVar95.z ); | |
nodeVar98 = ( 1.0 - nodeVar97 ); | |
nodeVar99 = nodeVar98; | |
nodeVar100 = ( DiffuseColor * vec4<f32>( nodeVar99 ) ); | |
nodeVar101 = ( nodeVar100 * vec4<f32>( nodeVar92, 1.0 ) ); | |
nodeVar102 = ( vec4<f32>( indirectDiffuse, 1.0 ) + nodeVar101 ); | |
indirectDiffuse = nodeVar102.xyz; | |
ambientOcclusion = 1.0; | |
nodeVar103 = ( indirectDiffuse * vec3<f32>( ambientOcclusion ) ); | |
indirectDiffuse = nodeVar103; | |
nodeVar104 = dot( normalView, positionViewDirection ); | |
nodeVar105 = ( clamp( nodeVar104, 0.0, 1.0 ) + ambientOcclusion ); | |
nodeVar106 = ( Roughness * -16.0 ); | |
nodeVar107 = ( 1.0 - nodeVar106 ); | |
nodeVar108 = nodeVar107; | |
nodeVar109 = ( - nodeVar108 ); | |
nodeVar110 = exp2( nodeVar109 ); | |
nodeVar111 = pow( nodeVar105, nodeVar110 ); | |
nodeVar112 = ( 1.0 - nodeVar111 ); | |
nodeVar113 = nodeVar112; | |
nodeVar114 = ( ambientOcclusion - nodeVar113 ); | |
nodeVar115 = ( indirectSpecular * vec3<f32>( clamp( nodeVar114, 0.0, 1.0 ) ) ); | |
indirectSpecular = nodeVar115; | |
nodeVar116 = ( directDiffuse + indirectDiffuse ); | |
totalDiffuse = nodeVar116; | |
nodeVar117 = ( directSpecular + indirectSpecular ); | |
totalSpecular = nodeVar117; | |
nodeVar118 = ( totalDiffuse + totalSpecular ); | |
outgoingLight = nodeVar118; | |
nodeVar119 = max( vec4<f32>( ( outgoingLight + EmissiveColor ), DiffuseColor.w ), vec4<f32>( 0.0 ) ); | |
Output = nodeVar119; | |
// result | |
output.color = nodeVar119; | |
return output; | |
} | |
`,"label":`fragment`}); | |
xPipelineLayout2 = xDevice.createPipelineLayout({"bindGroupLayouts":[xBindGroupLayout4,xBindGroupLayout5]}); | |
xrenderPipeline_MeshStandardMaterial_18RenderPipeline = xDevice.createRenderPipeline({"label":"renderPipeline_MeshStandardMaterial_18","vertex":{"module":xvertexShaderModule1,"entryPoint":"main","buffers":[{"arrayStride":12,"attributes":[{"shaderLocation":0,"offset":0,"format":"float32x3"}],"stepMode":"vertex"},{"arrayStride":12,"attributes":[{"shaderLocation":1,"offset":0,"format":"float32x3"}],"stepMode":"vertex"}]},"fragment":{"module":xfragmentShaderModule1,"entryPoint":"main","targets":[{"format":"rgba16float","writeMask":15}]},"primitive":{"topology":"triangle-list","frontFace":"ccw","cullMode":"back"},"multisample":{"count":1,"alphaToCoverageEnabled":false},"layout":xPipelineLayout2,"depthStencil":{"format":"depth24plus","depthWriteEnabled":true,"depthCompare":"less-equal"}}); | |
xRenderPassEncoder.setPipeline(xrenderPipeline_MeshStandardMaterial_18RenderPipeline); | |
xRenderPassEncoder.setBindGroup(0,xbindGroup_renderBindGroup2); | |
xRenderPassEncoder.setBindGroup(1,xbindGroup_objectBindGroup3); | |
xRenderPassEncoder.setIndexBuffer(planeNdxBuffer,"uint32"); | |
xRenderPassEncoder.setVertexBuffer(0,planePosBuffer); | |
xRenderPassEncoder.setVertexBuffer(1,planeNrmBuffer); | |
xRenderPassEncoder.drawIndexed(6,1,0,0,0); | |
xRenderPassEncoder.end(); | |
xCommandBuffer1 = xrenderContext_0CommandEncoder.finish(xrenderContext_0CommandEncoder) | |
xQueue.submit([xCommandBuffer1]); | |
xdepthBufferTexture = xDevice.createTexture({"label":"depthBuffer","size":{"width":734,"height":1924,"depthOrArrayLayers":1},"mipLevelCount":1,"sampleCount":1,"dimension":"2d","format":"depth24plus","usage":23}); | |
xTextureView4 = xdepthBufferTexture.createView(); | |
context.configure({"device":xDevice,"format":"bgra8unorm","usage":17,"alphaMode":"premultiplied","toneMapping":{"mode":"standard"}}); | |
setCanvasSize(context.canvas, 734, 1924) | |
xTexture2 = context.getCurrentTexture(); | |
xTextureView5 = xTexture2.createView(); | |
xrenderContext_2CommandEncoder = xDevice.createCommandEncoder({"label":"canvas-cmd-buf"}); | |
xRenderPassEncoder2 = xrenderContext_2CommandEncoder.beginRenderPass({label: xrenderContext_2CommandEncoder.label, "colorAttachments":[{"view":xTextureView5,"loadOp":"load","storeOp":"store"}],"depthStencilAttachment":{"view":xTextureView4,"depthLoadOp":"load","depthStoreOp":"store"}}); | |
xBuffer6 = xDevice.createBuffer({"label":"","size":36,"usage":44,"mappedAtCreation":true}); | |
xArrayBuffer6 = xBuffer6.getMappedRange(); | |
new Uint8Array(xArrayBuffer6).set(D[28]); | |
xBuffer6.unmap(); | |
xBindGroupLayout6 = xDevice.createBindGroupLayout({"entries":[{"binding":0,"visibility":1,"buffer":{}}]}); | |
xbindingBuffer_renderBuffer5 = xDevice.createBuffer({"label":"bindingBuffer_render","size":128,"usage":72}); | |
xbindGroup_renderBindGroup3 = xDevice.createBindGroup({"label":"bindGroup_render","layout":xBindGroupLayout6,"entries":[{"binding":0,"resource":{"buffer":xbindingBuffer_renderBuffer5}}]}); | |
xBindGroupLayout7 = xDevice.createBindGroupLayout({"entries":[{"binding":0,"visibility":2,"sampler":{}},{"binding":1,"visibility":2,"texture":{}},{"binding":2,"visibility":2,"buffer":{}},{"binding":3,"visibility":1,"buffer":{}}]}); | |
xTextureView6 = xTexture.createView({"aspect":"all","dimension":"2d","mipLevelCount":1}); | |
xbindingBuffer_objectBuffer6 = xDevice.createBuffer({"label":"bindingBuffer_object","size":16,"usage":72}); | |
xbindingBuffer_objectBuffer7 = xDevice.createBuffer({"label":"bindingBuffer_object","size":64,"usage":72}); | |
xbindGroup_objectBindGroup4 = xDevice.createBindGroup({"label":"bindGroup_object","layout":xBindGroupLayout7,"entries":[{"binding":0,"resource":xSampler},{"binding":1,"resource":xTextureView6},{"binding":2,"resource":{"buffer":xbindingBuffer_objectBuffer6}},{"binding":3,"resource":{"buffer":xbindingBuffer_objectBuffer7}}]}); | |
xQueue.writeBuffer(xbindingBuffer_renderBuffer5,0,D[30],0); | |
xQueue.writeBuffer(xbindingBuffer_objectBuffer6,0,D[32],0); | |
xQueue.writeBuffer(xbindingBuffer_objectBuffer7,0,D[34],0); | |
xbindGroup_objectBindGroup5 = xDevice.createBindGroup({"label":"bindGroup_object","layout":xBindGroupLayout7,"entries":[{"binding":0,"resource":xSampler},{"binding":1,"resource":xTextureView6},{"binding":2,"resource":{"buffer":xbindingBuffer_objectBuffer6}},{"binding":3,"resource":{"buffer":xbindingBuffer_objectBuffer7}}]}); | |
xvertex_outputColorTransformShaderModule = xDevice.createShaderModule({"code":`// Three.js r181dev - Node System | |
// directives | |
// structs | |
// uniforms | |
struct renderStruct { | |
cameraProjectionMatrix : mat4x4<f32>, | |
cameraViewMatrix : mat4x4<f32> | |
}; | |
@binding( 0 ) @group( 0 ) | |
var<uniform> render : renderStruct; | |
struct objectStruct { | |
nodeUniform4 : mat4x4<f32> | |
}; | |
@binding( 3 ) @group( 1 ) | |
var<uniform> object : objectStruct; | |
// varyings | |
struct VaryingsStruct { | |
@builtin( position ) Vertex : vec4<f32> | |
}; | |
var<private> varyings : VaryingsStruct; | |
// codes | |
@vertex | |
fn main( @location( 0 ) position : vec3<f32> ) -> VaryingsStruct { | |
// vars | |
var modelViewMatrix : mat4x4<f32>; | |
var nodeVar1 : vec4<f32>; | |
var v_modelViewProjection : vec4<f32>; | |
var v_positionView : vec3<f32>; | |
var positionLocal : vec3<f32>; | |
// flow | |
// code | |
positionLocal = position; | |
modelViewMatrix = ( render.cameraViewMatrix * object.nodeUniform4 ); | |
v_positionView = ( modelViewMatrix * vec4<f32>( positionLocal, 1.0 ) ).xyz; | |
nodeVar1 = ( render.cameraProjectionMatrix * vec4<f32>( v_positionView, 1.0 ) ); | |
v_modelViewProjection = nodeVar1; | |
// result | |
varyings.Vertex = v_modelViewProjection; | |
return varyings; | |
} | |
`,"label":`vertex_outputColorTransform`}); | |
xfragment_outputColorTransformShaderModule = xDevice.createShaderModule({"code":`// Three.js r181dev - Node System | |
// global | |
diagnostic( off, derivative_uniformity ); | |
// structs | |
struct OutputStruct { | |
@location(0) color: vec4<f32> | |
}; | |
var<private> output : OutputStruct; | |
// uniforms | |
@binding( 0 ) @group( 1 ) var nodeUniform0_sampler : sampler; | |
@binding( 1 ) @group( 1 ) var nodeUniform0 : texture_2d<f32>; | |
struct objectStruct { | |
nodeUniform1 : vec2<f32> | |
}; | |
@binding( 2 ) @group( 1 ) | |
var<uniform> object : objectStruct; | |
// codes | |
fn sRGBTransferOETF ( color : vec3<f32> ) -> vec3<f32> { | |
return mix( ( ( pow( color, vec3<f32>( 0.41666 ) ) * vec3<f32>( 1.055 ) ) - vec3<f32>( 0.055 ) ), ( color * vec3<f32>( 12.92 ) ), vec3<f32>( ( color <= vec3<f32>( 0.0031308 ) ) ) ); | |
} | |
@fragment | |
fn main( @builtin( position ) fragCoord : vec4<f32> ) -> OutputStruct { | |
// vars | |
var nodeVar0 : vec4<f32>; | |
// flow | |
// code | |
nodeVar0 = textureSample( nodeUniform0, nodeUniform0_sampler, ( fragCoord.xy / object.nodeUniform1 ) ); | |
// result | |
output.color = vec4<f32>( sRGBTransferOETF( nodeVar0.xyz ), nodeVar0.w ); | |
return output; | |
} | |
`,"label":`fragment_outputColorTransform`}); | |
xPipelineLayout3 = xDevice.createPipelineLayout({"bindGroupLayouts":[xBindGroupLayout6,xBindGroupLayout7]}); | |
xrenderPipeline_outputColorTransform_16RenderPipeline = xDevice.createRenderPipeline({"label":"renderPipeline_outputColorTransform_16","vertex":{"module":xvertex_outputColorTransformShaderModule,"entryPoint":"main","buffers":[{"arrayStride":12,"attributes":[{"shaderLocation":0,"offset":0,"format":"float32x3"}],"stepMode":"vertex"}]},"fragment":{"module":xfragment_outputColorTransformShaderModule,"entryPoint":"main","targets":[{"format":"bgra8unorm","writeMask":15}]},"primitive":{"topology":"triangle-list","frontFace":"ccw","cullMode":"back"},"multisample":{"count":1,"alphaToCoverageEnabled":false},"layout":xPipelineLayout3,"depthStencil":{"format":"depth24plus","depthWriteEnabled":true,"depthCompare":"less-equal"}}); | |
xRenderPassEncoder2.setPipeline(xrenderPipeline_outputColorTransform_16RenderPipeline); | |
xRenderPassEncoder2.setBindGroup(0,xbindGroup_renderBindGroup3); | |
xRenderPassEncoder2.setBindGroup(1,xbindGroup_objectBindGroup5); | |
xRenderPassEncoder2.setVertexBuffer(0,xBuffer6); | |
xRenderPassEncoder2.draw(3,1,0,0); | |
xRenderPassEncoder2.end(); | |
xCommandBuffer2 = xrenderContext_2CommandEncoder.finish(xrenderContext_2CommandEncoder) | |
xQueue.submit([xCommandBuffer2]); | |
makeShot(canvas); | |
async function f0() { | |
} | |
async function f1() { | |
let xrenderContext_0CommandEncoder1,xRenderPassEncoder3,xrenderContext_1CommandEncoder1,xRenderPassEncoder4,xCommandBuffer3,xCommandBuffer4,xTexture3,xTextureView7,xrenderContext_2CommandEncoder1,xRenderPassEncoder5,xCommandBuffer5; | |
xrenderContext_0CommandEncoder1 = xDevice.createCommandEncoder({"label":"color-cmd-buf2"}); | |
xRenderPassEncoder3 = xrenderContext_0CommandEncoder1.beginRenderPass({label: xrenderContext_0CommandEncoder1.label, "colorAttachments":[{"view":xcolorAttachment_0TextureView,"loadOp":"clear","storeOp":"store","clearValue":{"r":0,"g":0,"b":0,"a":1}}],"depthStencilAttachment":{"view":xTextureView,"depthClearValue":1,"depthLoadOp":"clear","depthStoreOp":"store"}}); | |
xRenderPassEncoder3.setPipeline(xrenderPipeline_MeshStandardMaterial_17RenderPipeline); | |
xRenderPassEncoder3.setBindGroup(0,xbindGroup_renderBindGroup); | |
xRenderPassEncoder3.setBindGroup(1,xbindGroup_objectBindGroup); | |
xRenderPassEncoder3.setIndexBuffer(cubeNdxBuffer,"uint32"); | |
xRenderPassEncoder3.setVertexBuffer(0,cubePosBuffer); | |
xRenderPassEncoder3.setVertexBuffer(1,cubeNrmBuffer); | |
xRenderPassEncoder3.drawIndexed(36,1,0,0,0); | |
xrenderContext_1CommandEncoder1 = xDevice.createCommandEncoder({"label":"depth-cmd-buf2"}); | |
xRenderPassEncoder4 = xrenderContext_1CommandEncoder1.beginRenderPass({label: xrenderContext_1CommandEncoder1.label, "colorAttachments":[{"view":xcolorAttachment_0TextureView1,"loadOp":"clear","storeOp":"store","clearValue":{"r":0,"g":0,"b":0,"a":0}}],"depthStencilAttachment":{"view":xTextureView1,"depthClearValue":1,"depthLoadOp":"clear","depthStoreOp":"store"}}); | |
xRenderPassEncoder4.setViewport(0,0,512,512,0,1); | |
xRenderPassEncoder4.setPipeline(xrenderPipeline_ShadowMaterial_21RenderPipeline); | |
xRenderPassEncoder4.setBindGroup(0,xbindGroup_renderBindGroup1); | |
xRenderPassEncoder4.setBindGroup(1,xbindGroup_objectBindGroup1); | |
xRenderPassEncoder4.setIndexBuffer(cubeNdxBuffer,"uint32"); | |
xRenderPassEncoder4.setVertexBuffer(0,cubeNrmBuffer); | |
xRenderPassEncoder4.drawIndexed(36,1,0,0,0); | |
xRenderPassEncoder4.end(); | |
xCommandBuffer3 = xrenderContext_1CommandEncoder1.finish(xrenderContext_1CommandEncoder1) | |
xQueue.submit([xCommandBuffer3]); | |
xQueue.writeBuffer(xbindingBuffer_renderBuffer3,0,D[36],0); | |
xRenderPassEncoder3.setPipeline(xrenderPipeline_MeshStandardMaterial_18RenderPipeline); | |
xRenderPassEncoder3.setBindGroup(0,xbindGroup_renderBindGroup2); | |
xRenderPassEncoder3.setBindGroup(1,xbindGroup_objectBindGroup3); | |
xRenderPassEncoder3.setIndexBuffer(planeNdxBuffer,"uint32"); | |
xRenderPassEncoder3.setVertexBuffer(0,planePosBuffer); | |
xRenderPassEncoder3.setVertexBuffer(1,planeNrmBuffer); | |
xRenderPassEncoder3.drawIndexed(6,1,0,0,0); | |
xRenderPassEncoder3.end(); | |
xCommandBuffer4 = xrenderContext_0CommandEncoder1.finish(xrenderContext_0CommandEncoder1) | |
xQueue.submit([xCommandBuffer4]); | |
setCanvasSize(context.canvas, 734, 1924) | |
xTexture3 = context.getCurrentTexture(); | |
xTextureView7 = xTexture3.createView(); | |
xrenderContext_2CommandEncoder1 = xDevice.createCommandEncoder({"label":"canvas-cmd-buf2"}); | |
xRenderPassEncoder5 = xrenderContext_2CommandEncoder1.beginRenderPass({label: xrenderContext_2CommandEncoder1.label, "colorAttachments":[{"view":xTextureView7,"loadOp":"load","storeOp":"store"}],"depthStencilAttachment":{"view":xTextureView4,"depthLoadOp":"load","depthStoreOp":"store"}}); | |
xRenderPassEncoder5.setPipeline(xrenderPipeline_outputColorTransform_16RenderPipeline); | |
xRenderPassEncoder5.setBindGroup(0,xbindGroup_renderBindGroup3); | |
xRenderPassEncoder5.setBindGroup(1,xbindGroup_objectBindGroup5); | |
xRenderPassEncoder5.setVertexBuffer(0,xBuffer6); | |
xRenderPassEncoder5.draw(3,1,0,0); | |
xRenderPassEncoder5.end(); | |
xCommandBuffer5 = xrenderContext_2CommandEncoder1.finish(xrenderContext_2CommandEncoder1) | |
xQueue.submit([xCommandBuffer5]); | |
makeShot(canvas); | |
} | |
async function f2() { | |
} | |
let frames=[f0,f1,f2,]; | |
let frame = 0; | |
let lastFrame = -1; | |
let t0 = performance.now(); | |
async function renderFrame() { | |
console.log("---------------------", frame, "----------------------") | |
if (frame > 2) return; | |
requestAnimationFrame(renderFrame); | |
if (frame == lastFrame) return; | |
lastFrame = frame; | |
let t1 = performance.now(); | |
frameLabel.innerText = "F: " + (frame + 1) + " T:" + (t1 - t0).toFixed(2); | |
t0 = t1; | |
try { | |
await frames[frame](); | |
} catch (err) { | |
console.log("Error Frame:", frame); | |
console.error(err.message); | |
} | |
frame++; | |
} | |
requestAnimationFrame(renderFrame); | |
} | |
function setCanvasSize(canvas, width, height) { | |
if (canvas.width !== width || canvas.height !== height) { | |
canvas.width = width; | |
canvas.height = height; | |
} | |
} | |
async function B64ToA(s, type, length) { | |
if (Uint8Array.fromBase64) { | |
const s2 = s.substr(s.indexOf(",") + 1); | |
const b = Uint8Array.fromBase64(s2); | |
if (type == "Uint32Array") { | |
return new Uint32Array(b.buffer); | |
} | |
return b; | |
} | |
const res = await fetch(s); | |
const x = new Uint8Array(await res.arrayBuffer()); | |
if (type == "Uint32Array") { | |
return new Uint32Array(x.buffer, 0, x.length/4); | |
} | |
return new Uint8Array(x.buffer, 0, x.length); | |
} | |
async function loadData() { | |
D[0] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/", "ArrayBuffer", 288); | |
D[1] = await B64ToA("data:application/octet-stream;base64,AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAC/AAAAPwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAvwAAAD8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAC/AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAA/AAAAPwAAAD8AAAC/AAAAvwAAAD8AAAC/AAAAPwAAAL8AAAC/AAAAvwAAAL8AAAC/", "ArrayBuffer", 288); | |
D[2] = await B64ToA("data:application/octet-stream;base64,AAAAAAIAAAABAAAAAgAAAAMAAAABAAAABAAAAAYAAAAFAAAABgAAAAcAAAAFAAAACAAAAAoAAAAJAAAACgAAAAsAAAAJAAAADAAAAA4AAAANAAAADgAAAA8AAAANAAAAEAAAABIAAAARAAAAEgAAABMAAAARAAAAFAAAABYAAAAVAAAAFgAAABcAAAAVAAAA", "ArrayBuffer", 144); | |
D[3] = await B64ToA("data:application/octet-stream;base64,8wQ1P+wF0b46zRM/AAAAAAAAACXsBVE/Os0TPwAAAADzBDW/7AXRvjrNEz8AAAAAAAAwpwAAwKZnkArBAACAPwAAoEAAAKBAAACgwAAAAAAAAAAAAAAAAAAAAAAAAAAAJxU9PycVPT8AAEBAAAAAAA==", "Float32Array", 112); | |
D[4] = await B64ToA("data:application/octet-stream;base64,8wQ1P+wF0b46zRM/AAAAAAAAACXsBVE/Os0TPwAAAADzBDW/7AXRvjrNEz8AAAAAAAAwpwAAwKZnkArBAACAPwAAoEAAAKBAAACgwAAAAAAAAAAAAAAAAAAAAAAAAAAAJxU9PycVPT8AAEBAAAAAAA==", "Float32Array", 112); | |
D[5] = await B64ToA("data:application/octet-stream;base64,8wQ1P+wF0b46zRM/AAAAAAAAACXsBVE/Os0TPwAAAADzBDW/7AXRvjrNEz8AAAAAAAAwpwAAwKZnkArBAACAPx+hWkAAAAAAAAAAAAAAAAAAAAAAF9CmPwAAAAAAAAAAAAAAAAAAAABHA4C/AACAvwAAAAAAAAAARwOAvwAAAAA=", "Float32Array", 128); | |
D[6] = await B64ToA("data:application/octet-stream;base64,8wQ1P+wF0b46zRM/AAAAAAAAACXsBVE/Os0TPwAAAADzBDW/7AXRvjrNEz8AAAAAAAAwpwAAwKZnkArBAACAPx+hWkAAAAAAAAAAAAAAAAAAAAAAF9CmPwAAAAAAAAAAAAAAAAAAAABHA4C/AACAvwAAAAAAAAAARwOAvwAAAAA=", "Float32Array", 128); | |
D[7] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAACAPwAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA/", "Float32Array", 48); | |
D[8] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAACAPwAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA/", "Float32Array", 48); | |
D[9] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPw==", "Float32Array", 112); | |
D[10] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPw==", "Float32Array", 112); | |
D[11] = await B64ToA("data:application/octet-stream;base64,zcxMPgAAAAAAAAAAAAAAAAAAAADNzEw+AAAAAAAAAAAAAAAAAAAAAAU0A7sAAAAAAAAAgAAAAIAFNIO6AACAP/MENb/sBdG+Os0TPwAAAAAAAAAl7AVRPzrNEz8AAAAA8wQ1v+wF0T46zRO/AAAAAAAAwKYAAIAmZ5AKwQAAgD8=", "Float32Array", 128); | |
D[12] = await B64ToA("data:application/octet-stream;base64,zcxMPgAAAAAAAAAAAAAAAAAAAADNzEw+AAAAAAAAAAAAAAAAAAAAAAU0A7sAAAAAAAAAgAAAAIAFNIO6AACAP/MENb/sBdG+Os0TPwAAAAAAAAAl7AVRPzrNEz8AAAAA8wQ1v+wF0T46zRO/AAAAAAAAwKYAAIAmZ5AKwQAAgD8=", "Float32Array", 128); | |
D[13] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAAAAAA==", "Float32Array", 16); | |
D[14] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAAAAAA==", "Float32Array", 16); | |
D[15] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPw==", "Float32Array", 64); | |
D[16] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPw==", "Float32Array", 64); | |
D[17] = await B64ToA("data:application/octet-stream;base64,AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/", "ArrayBuffer", 48); | |
D[18] = await B64ToA("data:application/octet-stream;base64,AABIwgAASEIAAAAAAABIQgAASEIAAAAAAABIwgAASMIAAAAAAABIQgAASMIAAAAA", "ArrayBuffer", 48); | |
D[19] = await B64ToA("data:application/octet-stream;base64,AAAAAAIAAAABAAAAAgAAAAMAAAABAAAA", "ArrayBuffer", 24); | |
D[20] = await B64ToA("data:application/octet-stream;base64,8wQ1P+wF0b46zRM/AAAAAAAAACXsBVE/Os0TPwAAAADzBDW/7AXRvjrNEz8AAAAAAAAwpwAAwKZnkArBAACAPwAAoEAAAKBAAACgwAAAAAAAAAAAAAAAAAAAAAAAAAAAJxU9PycVPT8AAEBAAAAAAMPQkL3wNye9G4CXugAAAADNzEwj8DenPRuAl7oAAAAAw9CQvfA3Jz0bgJc6AAAAAAAAAD8AAAA/2dSFPAAAgD8AAAAAAAAAAAAAAEQAAABEAACAPwAAgD8AAAAAAAAAAA==", "Float32Array", 208); | |
D[21] = await B64ToA("data:application/octet-stream;base64,8wQ1P+wF0b46zRM/AAAAAAAAACXsBVE/Os0TPwAAAADzBDW/7AXRvjrNEz8AAAAAAAAwpwAAwKZnkArBAACAPwAAoEAAAKBAAACgwAAAAAAAAAAAAAAAAAAAAAAAAAAAJxU9PycVPT8AAEBAAAAAAMPQkL3wNye9G4CXugAAAADNzEwj8DenPRuAl7oAAAAAw9CQvfA3Jz0bgJc6AAAAAAAAAD8AAAA/2dSFPAAAgD8AAAAAAAAAAAAAAEQAAABEAACAPwAAgD8AAAAAAAAAAA==", "Float32Array", 208); | |
D[22] = await B64ToA("data:application/octet-stream;base64,8wQ1P+wF0b46zRM/AAAAAAAAACXsBVE/Os0TPwAAAADzBDW/7AXRvjrNEz8AAAAAAAAwpwAAwKZnkArBAACAPx+hWkAAAAAAAAAAAAAAAAAAAAAAF9CmPwAAAAAAAAAAAAAAAAAAAABHA4C/AACAvwAAAAAAAAAARwOAvwAAAAA=", "Float32Array", 128); | |
D[23] = await B64ToA("data:application/octet-stream;base64,8wQ1P+wF0b46zRM/AAAAAAAAACXsBVE/Os0TPwAAAADzBDW/7AXRvjrNEz8AAAAAAAAwpwAAwKZnkArBAACAPx+hWkAAAAAAAAAAAAAAAAAAAAAAF9CmPwAAAAAAAAAAAAAAAAAAAABHA4C/AACAvwAAAAAAAAAARwOAvwAAAAA=", "Float32Array", 128); | |
D[24] = await B64ToA("data:application/octet-stream;base64,AACAPwAAgD8AAIA/AACAPwAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA/", "Float32Array", 48); | |
D[25] = await B64ToA("data:application/octet-stream;base64,AACAPwAAgD8AAIA/AACAPwAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA/", "Float32Array", 48); | |
D[26] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAIAAAAAAAAAAAAAAAAAAAIAlAACAvwAAAAAAAACAAACAPwAAgCUAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIAlAACAvwAAAAAAAAAAAACAPwAAgCUAAAAAAAAAAAAAAAAAAAAAAACAPw==", "Float32Array", 112); | |
D[27] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAIAAAAAAAAAAAAAAAAAAAIAlAACAvwAAAAAAAACAAACAPwAAgCUAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIAlAACAvwAAAAAAAAAAAACAPwAAgCUAAAAAAAAAAAAAAAAAAAAAAACAPw==", "Float32Array", 112); | |
D[28] = await B64ToA("data:application/octet-stream;base64,AACAvwAAQEAAAAAAAACAvwAAgL8AAAAAAABAQAAAgL8AAAAA", "ArrayBuffer", 36); | |
D[29] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgL8AAAAAAAAAgAAAAIAAAACAAACAPwAAgD8AAAAAAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8=", "Float32Array", 128); | |
D[30] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgL8AAAAAAAAAgAAAAIAAAACAAACAPwAAgD8AAAAAAAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8=", "Float32Array", 128); | |
D[31] = await B64ToA("data:application/octet-stream;base64,AIA3RACA8EQAAAAAAAAAAA==", "Float32Array", 16); | |
D[32] = await B64ToA("data:application/octet-stream;base64,AIA3RACA8EQAAAAAAAAAAA==", "Float32Array", 16); | |
D[33] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAACAPw==", "Float32Array", 64); | |
D[34] = await B64ToA("data:application/octet-stream;base64,AACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAACAPw==", "Float32Array", 64); | |
D[35] = await B64ToA("data:application/octet-stream;base64,8wQ1P+wF0b46zRM/AAAAAAAAACXsBVE/Os0TPwAAAADzBDW/7AXRvjrNEz8AAAAAAAAwpwAAwKZnkArBAACAPwAAoEAAAKBAAACgwAAAAAAAAAAAAAAAAAAAAAAAAAAAJxU9PycVPT8AAEBAAAAAAMPQkL3wNye9G4AXugAAAADNzEwj8DenPRuAF7oAAAAAw9CQvfA3Jz0bgBc6AAAAAAAAAD8AAAA/UxcCPwAAgD8AAAAAAAAAAAAAAEQAAABEAACAPwAAgD8AAAAAAAAAAA==", "Float32Array", 208); | |
D[36] = await B64ToA("data:application/octet-stream;base64,8wQ1P+wF0b46zRM/AAAAAAAAACXsBVE/Os0TPwAAAADzBDW/7AXRvjrNEz8AAAAAAAAwpwAAwKZnkArBAACAPwAAoEAAAKBAAACgwAAAAAAAAAAAAAAAAAAAAAAAAAAAJxU9PycVPT8AAEBAAAAAAMPQkL3wNye9G4AXugAAAADNzEwj8DenPRuAF7oAAAAAw9CQvfA3Jz0bgBc6AAAAAAAAAD8AAAA/UxcCPwAAgD8AAAAAAAAAAAAAAEQAAABEAACAPwAAgD8AAAAAAAAAAA==", "Float32Array", 208); | |
} | |
main(); | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment