From 2dfd7491806a41a3e12e78e0b37b2047c07160e9 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Mon, 20 Jul 2026 23:30:29 -0500 Subject: [PATCH] render gltf model --- common.js | 11 ++++ gltf.js | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++ gltf.wgsl | 82 +++++++++++++++++++++++++++ index.html | 1 + index.js | 39 ++++++++----- index2.js | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++ monkey.glb | Bin 0 -> 101284 bytes rotate.c | 2 +- torus.glb | Bin 0 -> 118584 bytes 9 files changed, 444 insertions(+), 14 deletions(-) create mode 100644 common.js create mode 100644 gltf.js create mode 100644 gltf.wgsl create mode 100644 index2.js create mode 100644 monkey.glb create mode 100644 torus.glb diff --git a/common.js b/common.js new file mode 100644 index 0000000..3154443 --- /dev/null +++ b/common.js @@ -0,0 +1,11 @@ +function getPath(path) +{ + return fetch(path).then((response) => { + if (!response.ok) { + throw new Error(`${path}: ${response.status}`) + } + return response.blob() + }).then((blob) => { return blob.text() }) +} + +export { getPath }; diff --git a/gltf.js b/gltf.js new file mode 100644 index 0000000..3c45dd3 --- /dev/null +++ b/gltf.js @@ -0,0 +1,162 @@ +function jsonChunk(buffer, offset, length) +{ + const decoder = new TextDecoder(); + const array = new Uint8Array(buffer); + const object = JSON.parse(decoder.decode(array.subarray(offset, offset + length))); + //console.log(object); + return object; +} + +function parseGltfChunks(buffer) +{ + const view = new DataView(buffer); + + const magic = view.getUint32(0, true); + const version = view.getUint32(4, true); + const length = view.getUint32(8, true); + console.assert(magic === 0x46546C67); + console.assert(version === 2); + + const gltf = {}; + + var offset = 12; + while ((length - offset) > 0) { + const chunkLength = view.getUint32(offset + 0, true); + const chunkType = view.getUint32(offset + 4, true); + console.log("chunkLength", chunkLength); + console.log("chunkType", chunkType); + offset += 8; + + console.assert(chunkType === 0x4E4F534A || chunkType === 0x004E4942); + if (chunkType === 0x4E4F534A) { + const object = jsonChunk(buffer, offset, chunkLength); + console.assert(!("json" in gltf)); + gltf.json = object; + } + if (chunkType === 0x004E4942) { + console.assert(!("bin" in gltf)); + gltf.bin = {buffer: buffer, offset: offset, length: chunkLength}; + } + + offset += chunkLength; + } + + console.assert(offset == length); + return gltf; +} + +function componentCount(componentType) +{ + switch (componentType) { + case "SCALAR": return 1; + case "VEC2": return 2; + case "VEC3": return 3; + case "VEC4": return 4; + default: + console.assert(false, componentType); + break; + } +} + +function typeStride(type) +{ + switch (type) { + case 5120: // signed byte + return 1; + case 5121: // unsigned byte + return 1; + case 5122: // signed short + return 2; + case 5123: // unsigned short + return 2; + case 5125: // unsigned int + return 4; + case 5126: // float + return 4; + default: + console.assert(false, type); + break; + } +} + +function attributeStride(componentType, type) +{ + const t = typeStride(componentType); + const c = componentCount(type); + return c * t; +} + +function vertexFormat(componentType, type) +{ + switch (componentType) { + case 5120: // signed byte + if (type === "SCALAR") return "sint8"; + else if (type === "VEC2") return "sint8x2"; + else if (type === "VEC4") return "sint8x4"; + else console.assert(false, [componentType, type]); + case 5121: // unsigned byte + if (type === "SCALAR") return "uint8"; + else if (type === "VEC2") return "uint8x2"; + else if (type === "VEC4") return "uint8x4"; + else console.assert(false, [componentType, type]); + case 5122: // signed short + if (type === "SCALAR") return "sint16"; + else if (type === "VEC2") return "sint16x2"; + else if (type === "VEC4") return "sint16x4"; + else console.assert(false, [componentType, type]); + case 5123: // unsigned short + if (type === "SCALAR") return "uint16"; + else if (type === "VEC2") return "uint16x2"; + else if (type === "VEC4") return "uint16x4"; + else console.assert(false, [componentType, type]); + case 5125: // unsigned int + if (type === "SCALAR") return "uint32"; + else if (type === "VEC2") return "uint32x2"; + else if (type === "VEC3") return "uint32x3"; + else if (type === "VEC4") return "uint32x4"; + else console.assert(false, [componentType, type]); + case 5126: // float + if (type === "SCALAR") return "float32"; + else if (type === "VEC2") return "float32x2"; + else if (type === "VEC3") return "float32x3"; + else if (type === "VEC4") return "float32x4"; + else console.assert(false, [componentType, type]); + default: + console.assert(false, [componentType, type]); + break; + } +} + +function primitiveVertexBufferLayouts(gltf, primitive) +{ + const accessors = [ + gltf.json.accessors[primitive.attributes["POSITION"]], + gltf.json.accessors[primitive.attributes["NORMAL"]], + gltf.json.accessors[primitive.attributes["TEXCOORD_0"]], + ]; + + const layouts = []; + + for (let i = 0; i < accessors.length; i++) { + const componentType = accessors[i].componentType; + const type = accessors[i].type; + + const bufferView = gltf.json.bufferViews[accessors[i].bufferView]; + + const arrayStride = "byteStride" in bufferView ? bufferView.byteStride : attributeStride(componentType, type); + const offset = "byteOffset" in accessors[i] ? accessors[i].byteOffset : 0; + const layout = { + arrayStride: arrayStride, + attributes: [{ + format: vertexFormat(componentType, type), + offset: offset, + shaderLocation: i, + }], + stepMode: "vertex", + }; + layouts.push(layout); + } + return layouts; +} + +export { parseGltfChunks, primitiveVertexBufferLayouts }; diff --git a/gltf.wgsl b/gltf.wgsl new file mode 100644 index 0000000..e68ee35 --- /dev/null +++ b/gltf.wgsl @@ -0,0 +1,82 @@ +struct Configuration { + matrix: mat4x4f, + matrixWorld: mat4x4f, +}; + +@group(0) @binding(0) var config: Configuration; + +struct VertexInput { + @location(0) position: vec3f, + @location(1) normal: vec3f, + @location(2) texture: vec2f, +}; + +struct VertexOutput { + @builtin(position) position: vec4f, + @location(0) positionWorld: vec3f, + @location(1) normal: vec3f, +}; + +struct FragmentInput { + @location(0) positionWorld: vec3f, + @location(1) normal: vec3f, +}; + +@vertex +fn vertexMain(input: VertexInput) -> VertexOutput +{ + let position = vec4f(input.position, 1); + let normal = vec4f(input.normal, 0.0f); + var output: VertexOutput; + output.position = config.matrix * position; + output.positionWorld = (config.matrixWorld * position).xyz; + output.normal = (config.matrixWorld * normal).xyz; + return output; +} + +fn schlickFresnel(R0: vec3f, normal: vec3f, lightVector: vec3f) -> vec3f +{ + let incidentAngle = saturate(dot(normal, lightVector)); + + let f0 = 1.0 - incidentAngle; + let reflectPercent = R0 + (1.0f - R0) * (f0 * f0 * f0 * f0 * f0); + + return reflectPercent; +} + +fn blinnPhong(ndotl: f32, lightVector: vec3f, normal: vec3f, toEye: vec3f) -> vec3f +{ + let roughness = 0.1; + + let m = roughness * 256.0; + let halfVec = normalize(toEye + lightVector); + let roughnessFactor = (m + 8.0) * pow(ndotl, m) / 8.0f; + + let fresnelR0 = vec3f(0.95f, 0.95f, 0.95f); + let fresnelFactor = schlickFresnel(fresnelR0, normal, lightVector); + + let specular = fresnelFactor * roughnessFactor; + + return specular; +} + +fn lighting(position: vec3f, normal: vec3f) -> vec3f +{ + let d = 0.9; + let eyePosition = vec3f(d, d / 2, d); + let lightPosition = vec3f(1, 1, 1); + let lightVector = normalize(lightPosition - position); + let ndotl = max(dot(lightVector, normal), 0.0); + let intensity = (ndotl + 0.3) / 1.3; + + let toEye = normalize(eyePosition - position); + + return (1.0 + blinnPhong(ndotl, lightVector, normal, toEye)) * intensity; +} + +@fragment +fn fragmentMain(input: FragmentInput) -> @location(0) vec4f +{ + let intensity = lighting(input.positionWorld, normalize(input.normal)); + return vec4(intensity, 1.0); +} diff --git a/index.html b/index.html index 5f392a8..cb859cc 100644 --- a/index.html +++ b/index.html @@ -59,6 +59,7 @@ } + diff --git a/index.js b/index.js index a9b25e9..3ead499 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,6 @@ +import { getPath } from "./common.js"; +import { loadGltf } from "./index2.js"; + if (!navigator.gpu) { throw new Error("WebGPU not supported on this browser."); } @@ -154,16 +157,6 @@ const vertexBufferLayouts = [ }, ]; -function getPath(path) -{ - return fetch(path).then((response) => { - if (!response.ok) { - throw new Error(`${path}: ${response.status}`) - } - return response.blob() - }).then((blob) => { return blob.text() }) -} - const indexWgsl = getPath("index.wgsl"); const computeWgsl = getPath("compute.wgsl"); @@ -190,7 +183,7 @@ const bindGroupLayouts = [ }] }), device.createBindGroupLayout({ - label: "bind group layout 0", + label: "bind group layout 1", entries: [{ binding: 0, visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, @@ -360,7 +353,7 @@ modelSelect.value = currentModel; const lightingSelect = document.getElementById("lighting-select"); lightingSelect.value = "unlit"; -function render() +function recreateDepth() { if (canvas.clientWidth !== canvas.width || canvas.clientWidth !== canvas.height) { canvas.width = canvas.clientWidth; @@ -371,6 +364,11 @@ function render() } depthTexture = createDepthTexture(); } +} + +function render() +{ + recreateDepth(); const encoder = device.createCommandEncoder(); @@ -432,4 +430,19 @@ function render() requestAnimationFrame(render) } -requestAnimationFrame(render) +//requestAnimationFrame(render); + +const gltfRenderer = await loadGltf(device, canvasFormat); +function render2() +{ + recreateDepth(); + const colorView = context.getCurrentTexture().createView(); + + const aspect = canvas.width / canvas.height; + rotate.instance.exports.rotate(tick * 0.01, aspect, 0); + device.queue.writeBuffer(gltfRenderer.uniformBuffer, 0, uniformArray, 0, gltfRenderer.uniformBufferSize / 4); + + gltfRenderer.render(device, colorView, depthTexture); + requestAnimationFrame(render2); +} +requestAnimationFrame(render2); diff --git a/index2.js b/index2.js new file mode 100644 index 0000000..df6f927 --- /dev/null +++ b/index2.js @@ -0,0 +1,161 @@ +import { getPath } from "./common.js"; +import { parseGltfChunks, primitiveVertexBufferLayouts } from "./gltf.js"; + +class GltfRenderer { + constructor(device, canvasFormat, shaderModule, gltf, primitive, bufferLayouts) + { + this.gltf = gltf; + this.primitive = primitive; + + ////////////////////////////////////////////////////////////////////// + // buffer + ////////////////////////////////////////////////////////////////////// + + console.assert(gltf.json.buffers[0].byteLength == gltf.bin.length); + this.vertexBuffer = device.createBuffer({ + label: "gltf vertex buffer 0", + size: gltf.bin.length, + usage: GPUBufferUsage.INDEX | GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST, + }); + device.queue.writeBuffer(this.vertexBuffer, 0, gltf.bin.buffer, gltf.bin.offset, gltf.bin.length); + + ////////////////////////////////////////////////////////////////////// + // pipeline + ////////////////////////////////////////////////////////////////////// + + const bindGroupLayouts = [ + device.createBindGroupLayout({ + label: "gltf bind group layout 0", + entries: [{ + binding: 0, + visibility: GPUShaderStage.VERTEX, + buffer: { type: "uniform" } + }] + }), + ]; + + const pipelineLayout = device.createPipelineLayout({ + label: "gltf pipeline layout", + bindGroupLayouts: bindGroupLayouts, + }); + + this.renderPipeline = device.createRenderPipeline({ + label: "gltf pipeline", + layout: pipelineLayout, + vertex: { + module: shaderModule, + entryPoint: "vertexMain", + buffers: bufferLayouts, + }, + fragment: { + module: shaderModule, + entryPoint: "fragmentMain", + targets: [{ + format: canvasFormat, + }] + }, + primitive: { + topology: 'triangle-list', + }, + depthStencil: { + depthWriteEnabled: true, + depthCompare: 'less', + format: 'depth24plus', + }, + }); + + ////////////////////////////////////////////////////////////////////// + // bind group + ////////////////////////////////////////////////////////////////////// + + this.uniformBufferSize = (4 * 4 * 4) * 2; + this.uniformBuffer = device.createBuffer({ + label: "gltf uniform 0", + size: this.uniformBufferSize, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST, + }); + + this.bindGroups = [ + device.createBindGroup({ + label: "cell bind group 0", + layout: bindGroupLayouts[0], + entries: [{ + binding: 0, + resource: { buffer: this.uniformBuffer }, + }] + }), + ]; + } + + render(device, colorView, depthTexture) + { + const encoder = device.createCommandEncoder(); + const renderPass = encoder.beginRenderPass({ + colorAttachments: [{ + view: colorView, + loadOp: "clear", + clearValue: { r: 0.2, g: 0.2, b: 0.4, a: 1 }, + storeOp: "store", + }], + depthStencilAttachment: { + view: depthTexture.createView(), + depthClearValue: 1.0, + depthLoadOp: 'clear', + depthStoreOp: 'store', + }, + }); + + renderPass.setPipeline(this.renderPipeline); + + const attributes = ["POSITION", "NORMAL", "TEXCOORD_0"]; + for (let i = 0; i < attributes.length; i++) { + const attributeIndex = this.primitive.attributes[attributes[i]]; + const bufferViewIndex = this.gltf.json.accessors[attributeIndex].bufferView; + const bufferView = this.gltf.json.bufferViews[bufferViewIndex]; + + renderPass.setVertexBuffer(i, this.vertexBuffer, bufferView.byteOffset, bufferView.byteLength); + } + + const indicesAccessor = this.gltf.json.accessors[this.primitive.indices]; + const indicesBufferView = this.gltf.json.bufferViews[indicesAccessor.bufferView]; + renderPass.setIndexBuffer(this.vertexBuffer, + "uint16", + indicesBufferView.byteOffset, + indicesBufferView.byteLength); + + renderPass.setBindGroup(0, this.bindGroups[0]); + renderPass.drawIndexed(indicesAccessor.count); + + renderPass.end(); + + const commandBuffer = encoder.finish(); + device.queue.submit([commandBuffer]); + } +} + +async function loadGltf(device, canvasFormat) +{ + const response = await fetch("monkey.glb"); + const buffer = await response.arrayBuffer(); + const gltf = parseGltfChunks(buffer); + console.log(gltf); + + const primitive = gltf.json.meshes[0].primitives[0]; + //console.log(primitive.indices); + //console.log(primitive.attributes); + + const bufferLayouts = primitiveVertexBufferLayouts(gltf, primitive); + console.log(bufferLayouts); + + const code = await getPath("gltf.wgsl"); + const shaderModule = device.createShaderModule({ + label: "gltf module", + code: await code, + }); + + const renderer = new GltfRenderer(device, canvasFormat, shaderModule, gltf, primitive, bufferLayouts); + + return renderer; +} + +export { loadGltf }; diff --git a/monkey.glb b/monkey.glb new file mode 100644 index 0000000000000000000000000000000000000000..07e4b053842e5ae52d865d41e78686d0e3d478f4 GIT binary patch literal 101284 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 literal 0 HcmV?d00001 diff --git a/rotate.c b/rotate.c index 7a8c233..8d0f604 100644 --- a/rotate.c +++ b/rotate.c @@ -9,7 +9,7 @@ void rotate(float angle, float aspect, float * buffer) //XMMATRIX mat2 = XMMatrixTranslation(0, 0, 1); //XMStoreFloat4x4((XMFLOAT4X4*)buffer, mat * mat2); - float d = 0.9; + float d = 1.9; XMVECTOR eye = XMVectorSet(d, d / 2, d, 0); XMVECTOR at = XMVectorSet(0, 0, 0, 0); XMVECTOR up = XMVectorSet(0, 1, 0, 0); diff --git a/torus.glb b/torus.glb new file mode 100644 index 0000000000000000000000000000000000000000..083565aa77210cbf85972f2644b743a786a69cca GIT binary patch literal 118584 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 literal 0 HcmV?d00001