Skip to content

Instantly share code, notes, and snippets.

@greggman
Created October 6, 2025 04:54
Show Gist options
  • Save greggman/f300b442061a446d597537235939424d to your computer and use it in GitHub Desktop.
Save greggman/f300b442061a446d597537235939424d to your computer and use it in GitHub Desktop.
three.js rendering issue repo
<!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