feat(web): finish RE 5000PBR lesson video and fix non-ASCII GLB import
- Add 11:07 Chinese-narrated lesson video, VTT, poster and 13 chapter screenshots. - Regenerate 20-render WebGL2 matrix and 15 operation captures on RTX 4060. - Fix WASM staging for non-ASCII import filenames (猴头.glb); rebuild web_engine. - Harden lesson video recording pipeline; fix stale lesson-link E2E selector. - Add RE PBR derived libraries, lesson page, evidence and status report. Co-Authored-By: Claude Code <noreply@anthropic.com>
BIN
tests/files/web/pbr-render-lesson/monkey-head.glb
Normal file
|
After Width: | Height: | Size: 137 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 113 KiB |
52
tests/golden/RE-PBR-LIMITS-001/diagnostics/report.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "RE-PBR-LIMITS-001",
|
||||
"batch": "D-diagnostics",
|
||||
"status": "PASS",
|
||||
"generatedAt": "2026-11-12T02:45:33.522245+00:00",
|
||||
"material": "black_worn_wall_brick",
|
||||
"resolution": 512,
|
||||
"camera": "SCENE",
|
||||
"views": [
|
||||
{
|
||||
"mode": "BASE_COLOR",
|
||||
"path": "tests/golden/RE-PBR-LIMITS-001/diagnostics/diagnostic-base-color-512.png",
|
||||
"sha256": "ecb7eb53cc87bd921d3b80a98fe4d9b364fe73f1e75b384edaf02f6b4778c773",
|
||||
"bytes": 140435,
|
||||
"resolution": 512,
|
||||
"mean": 93.8943,
|
||||
"std": 44.8765
|
||||
},
|
||||
{
|
||||
"mode": "NORMAL",
|
||||
"path": "tests/golden/RE-PBR-LIMITS-001/diagnostics/diagnostic-normal-512.png",
|
||||
"sha256": "986d33b201f3d53754ba0001d4c5e7890297d96e8c834c4365f89047f31e0dfa",
|
||||
"bytes": 149281,
|
||||
"resolution": 512,
|
||||
"mean": 97.0305,
|
||||
"std": 46.0513
|
||||
},
|
||||
{
|
||||
"mode": "ROUGHNESS",
|
||||
"path": "tests/golden/RE-PBR-LIMITS-001/diagnostics/diagnostic-roughness-512.png",
|
||||
"sha256": "c4e3989db1863209800c46b69e5c8184b5bc38f1941d550b18b793adf20ea97f",
|
||||
"bytes": 115922,
|
||||
"resolution": 512,
|
||||
"mean": 99.7463,
|
||||
"std": 48.5612
|
||||
}
|
||||
],
|
||||
"exposure": {
|
||||
"values": [
|
||||
0,
|
||||
2
|
||||
],
|
||||
"meanDeltaGreaterThan": 1,
|
||||
"result": "PASS"
|
||||
},
|
||||
"notes": [
|
||||
"Diagnostic views replace only the active object material for the still; the ground stays final.",
|
||||
"Base Color = MeshBasicMaterial(map); Normal = MeshNormalMaterial(normalMap); Roughness = MeshBasicMaterial(roughnessMap).",
|
||||
"Teaching exposure is a renderer toneMappingExposure multiplier and does not change material data."
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 386 KiB |
|
After Width: | Height: | Size: 386 KiB |
42
tests/golden/RE-PBR-LIMITS-001/displacement/report.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "RE-PBR-LIMITS-001",
|
||||
"batch": "A-displacement",
|
||||
"status": "PASS",
|
||||
"generatedAt": "2026-11-12T02:13:19.742774+00:00",
|
||||
"nativeBinding": {
|
||||
"usage": "HEIGHT",
|
||||
"imageId": "image:black_worn_wall_brick_Height.jpg",
|
||||
"scale": 0.001,
|
||||
"midlevel": 0.5,
|
||||
"bias": -0.0005
|
||||
},
|
||||
"subdivision": {
|
||||
"level": 3,
|
||||
"sourceTriangles": 968,
|
||||
"renderTriangles": 61952,
|
||||
"maxTriangles": 100000
|
||||
},
|
||||
"renders": {
|
||||
"1x": {
|
||||
"path": "tests/golden/RE-PBR-LIMITS-001/displacement/displacement-1x-1024.png",
|
||||
"sha256": "95105d1e3d3844c815e39a9a41f41761cc798a5cc7f1756f9fd5521f545470ea",
|
||||
"bytes": 395215,
|
||||
"mean": 93.9552,
|
||||
"std": 44.7742
|
||||
},
|
||||
"100x": {
|
||||
"path": "tests/golden/RE-PBR-LIMITS-001/displacement/displacement-100x-1024.png",
|
||||
"sha256": "f5b5e0872de3ad9cb34479a867c892bcd2e69c8a06eab57bd1fdf8dd69f905d5",
|
||||
"bytes": 395465,
|
||||
"mean": 93.8682,
|
||||
"std": 44.8044
|
||||
}
|
||||
},
|
||||
"meanDelta": 0.087,
|
||||
"notes": [
|
||||
"HEIGHT binding comes from the native reader of the real RE library blend.",
|
||||
"renderStill subdivides the 968-triangle monkey to 61,952 triangles at level 3 and applies MeshPhysicalMaterial.displacementMap.",
|
||||
"1x preserves the source Scale=0.001; 100x is a renderer-only teaching multiplier and does not write the material."
|
||||
]
|
||||
}
|
||||
84
tests/golden/RE-PBR-LIMITS-001/gpu/batch0-gpu-enable.json
Normal file
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "RE-PBR-LIMITS-001",
|
||||
"batch": "0-gpu-enable",
|
||||
"status": "PASS",
|
||||
"generatedAt": "2026-11-12T00:58:45.890906+00:00",
|
||||
"browser": {
|
||||
"executable": "/usr/bin/google-chrome",
|
||||
"headed": true,
|
||||
"display": ":1"
|
||||
},
|
||||
"launch": {
|
||||
"gpuMode": "hardware",
|
||||
"args": [
|
||||
"--no-sandbox",
|
||||
"--use-gl=angle",
|
||||
"--use-angle=gl",
|
||||
"--ignore-gpu-blocklist",
|
||||
"--enable-gpu-rasterization",
|
||||
"--enable-zero-copy",
|
||||
"--enable-unsafe-webgpu"
|
||||
]
|
||||
},
|
||||
"webgl": {
|
||||
"vendor": "Google Inc. (NVIDIA Corporation)",
|
||||
"renderer": "ANGLE (NVIDIA Corporation, NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2, OpenGL 4.5.0)",
|
||||
"version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)"
|
||||
},
|
||||
"webgpu": {
|
||||
"adapter": "present",
|
||||
"info": {}
|
||||
},
|
||||
"e2e": {
|
||||
"spec": "web/tests/e2e/re-pbr-render-workflow.spec.ts",
|
||||
"grep": "assign six materials",
|
||||
"result": "1 passed",
|
||||
"durationSeconds": 27.0,
|
||||
"swiftshaderReferenceDurationSeconds": 35.8
|
||||
},
|
||||
"render": {
|
||||
"material": "black_worn_wall_brick",
|
||||
"resolution": 1024,
|
||||
"camera": "SCENE",
|
||||
"hardware": {
|
||||
"path": "tests/golden/RE-PBR-LIMITS-001/gpu/hardware-black_worn_wall_brick-1024.png",
|
||||
"sha256": "62d9aaf2b598f7622029a66c483cdcd6388bb47e4d2b4bb43476739742a1ce67",
|
||||
"bytes": 412605
|
||||
},
|
||||
"swiftshader": {
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_worn_wall_brick-1024-scene.png",
|
||||
"sha256": "16f7d4ef3ae678c7d787c1da470d0bc7363e0ed160b7f7e42d4b3a21361ce0b5",
|
||||
"bytes": 399540
|
||||
},
|
||||
"meanStd": {
|
||||
"hardware": {
|
||||
"mean": 95.277,
|
||||
"std": 44.758
|
||||
},
|
||||
"swiftshader": {
|
||||
"mean": 95.332,
|
||||
"std": 44.724
|
||||
}
|
||||
},
|
||||
"note": "Renderer confirms NVIDIA RTX 4060 via ANGLE; SHA differs only by raster timing, mean/std within 0.06."
|
||||
},
|
||||
"notes": [
|
||||
"Playwright config now selects hardware when GPU_MODE=hardware or DISPLAY is present; SwiftShader is explicit fallback.",
|
||||
"Capture scripts accept --gpu hardware|swiftshader and probe WEBGL_debug_renderer_info before capture; hardware lane fails closed on SwiftShader/llvmpipe."
|
||||
],
|
||||
"hardwareCapture": {
|
||||
"status": "PASS",
|
||||
"renders": 20,
|
||||
"steps": 15,
|
||||
"uniqueSha": 20,
|
||||
"report": "tests/golden/RE-PBR-RENDER-001/report.json",
|
||||
"reportSha256": "40c5a758df05c566d24c9973862c6bb6fa01e74dc6bbc772f4fe5a9623be4481",
|
||||
"webgl": {
|
||||
"vendor": "Google Inc. (NVIDIA Corporation)",
|
||||
"renderer": "ANGLE (NVIDIA Corporation, NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2, OpenGL 4.5.0)",
|
||||
"version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)"
|
||||
},
|
||||
"note": "20/20 unique; SCENE vs VIEWPORT now differ because the capture waits for the new result src / idle button. ready:0:0 on reopen remains for Phase C."
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 403 KiB |
BIN
tests/golden/RE-PBR-LIMITS-001/hq/hq-2048-1024.png
Normal file
|
After Width: | Height: | Size: 387 KiB |
38
tests/golden/RE-PBR-LIMITS-001/hq/report.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "RE-PBR-LIMITS-001",
|
||||
"batch": "E-hq-2048",
|
||||
"status": "PASS",
|
||||
"generatedAt": "2026-11-12T02:56:52.562806+00:00",
|
||||
"library": {
|
||||
"id": "library:re-pbr-hq-v1",
|
||||
"path": "web/app/public/assets/re-pbr-hq/re-pbr-library.blend",
|
||||
"sha256": "2875cf7b3715fb0658582e2c6219300b72681e477079506e1b41a8551cd62efe",
|
||||
"bytes": 10846909,
|
||||
"textures": "original 2048 packed JPEG"
|
||||
},
|
||||
"material": "black_worn_wall_brick_HQ",
|
||||
"resolution": 1024,
|
||||
"camera": "SCENE",
|
||||
"render": {
|
||||
"path": "tests/golden/RE-PBR-LIMITS-001/hq/hq-2048-1024.png",
|
||||
"sha256": "6ed6a69b7eb5a130037da32303b4f3d6a64bb940953934d3640070d548afca06",
|
||||
"bytes": 396748,
|
||||
"mean": 93.9619,
|
||||
"std": 44.7738
|
||||
},
|
||||
"budget": {
|
||||
"gpuDecodedBytes": 67633152,
|
||||
"payloadBytes": 2625921,
|
||||
"loaded": 5,
|
||||
"rejected": 0,
|
||||
"underWebGL2Limit": true,
|
||||
"webgl2DecodedLimitBytes": 536870912
|
||||
},
|
||||
"mode": "lazy on-demand via PbrLessonPanel; standard library remains default",
|
||||
"notes": [
|
||||
"HQ material names use _HQ suffix to avoid conflict with standard library.",
|
||||
"Native reader now reads packed JPEG dimensions; Height images verified 2048x2048.",
|
||||
"Budget is base-level decoded; mipmaps can add ~1/3."
|
||||
]
|
||||
}
|
||||
102
tests/golden/RE-PBR-LIMITS-001/manifest.json
Normal file
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "RE-PBR-LIMITS-001",
|
||||
"status": "IMPLEMENTED_NOT_USER_ACCEPTED",
|
||||
"generatedAt": "2026-11-12T03:10:25.986813+00:00",
|
||||
"gpu": {
|
||||
"mode": "hardware",
|
||||
"renderer": "ANGLE (NVIDIA Corporation, NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2, OpenGL 4.5.0)"
|
||||
},
|
||||
"evidence": {
|
||||
"displacement": {
|
||||
"path": "tests/golden/RE-PBR-LIMITS-001/displacement/report.json",
|
||||
"sha256": "7cb8f1c699f869e197aa8995a71dd2c002388080aa33aaecc3eb467027f43073",
|
||||
"bytes": 1361
|
||||
},
|
||||
"diagnostics": {
|
||||
"path": "tests/golden/RE-PBR-LIMITS-001/diagnostics/report.json",
|
||||
"sha256": "0931566cf9c2b0575659f6aba0a22f27216d43e2edc14e67536eff7a5689ee8c",
|
||||
"bytes": 1633
|
||||
},
|
||||
"hq": {
|
||||
"path": "tests/golden/RE-PBR-LIMITS-001/hq/report.json",
|
||||
"sha256": "034188535227a629e9da69b700edd287f102629c058041ce6de159194c7c6154",
|
||||
"bytes": 1252
|
||||
},
|
||||
"gpuEnable": {
|
||||
"path": "tests/golden/RE-PBR-LIMITS-001/gpu/batch0-gpu-enable.json",
|
||||
"sha256": "f74d4da0e4858cff4fe1f5602face87e313f8b00dcde90fa5e4ba03969cbe5a9",
|
||||
"bytes": 2839
|
||||
},
|
||||
"renders": {
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/report.json",
|
||||
"sha256": "1478eae327295857a12d757e3d5f5f06c2d6f0f9adb89c411a4c752d10cc62c4",
|
||||
"bytes": 17168
|
||||
},
|
||||
"lesson": {
|
||||
"path": "web/app/public/tutorial/pbr/render-lesson.html",
|
||||
"sha256": "fb2aaf90c7e08c30273cf2ddee6535b75ccf628beb9ba07c2c85251dd893473d",
|
||||
"bytes": 27485
|
||||
},
|
||||
"hqLibrary": {
|
||||
"path": "web/app/public/assets/re-pbr-hq/re-pbr-library.blend",
|
||||
"sha256": "2875cf7b3715fb0658582e2c6219300b72681e477079506e1b41a8551cd62efe",
|
||||
"bytes": 10846909
|
||||
}
|
||||
},
|
||||
"summary": {
|
||||
"displacement": {
|
||||
"nativeUsage": "HEIGHT",
|
||||
"scale": 0.001,
|
||||
"midlevel": 0.5,
|
||||
"sourceTriangles": 968,
|
||||
"renderTriangles": 61952,
|
||||
"meanDelta": 0.087
|
||||
},
|
||||
"diagnostics": {
|
||||
"views": [
|
||||
"BASE_COLOR",
|
||||
"NORMAL",
|
||||
"ROUGHNESS"
|
||||
],
|
||||
"exposureEv": [
|
||||
0,
|
||||
2
|
||||
]
|
||||
},
|
||||
"hq": {
|
||||
"libraryBytes": 10846909,
|
||||
"gpuDecodedBytes": 67633152,
|
||||
"payloadBytes": 2625921,
|
||||
"loaded": 5,
|
||||
"rejected": 0
|
||||
},
|
||||
"camera": {
|
||||
"presets": [
|
||||
"SCENE_CAMERA",
|
||||
"COMPARISON"
|
||||
],
|
||||
"uniqueRenders": 20
|
||||
},
|
||||
"reopen": {
|
||||
"textureStatus": "ready:5:0:",
|
||||
"loaded": 5
|
||||
},
|
||||
"crossBrowser": "policy-excluded: Chromium-only"
|
||||
},
|
||||
"checks": {
|
||||
"typecheck": "PASS",
|
||||
"unitShaderCompiler": "13/13",
|
||||
"mainE2E": "PASS 3.6m",
|
||||
"fastE2E": "5/5",
|
||||
"pbrRegressions": "3/3",
|
||||
"checkRePbrLesson": "PASS",
|
||||
"checkRePbrLibraryHQ": "PASS",
|
||||
"checkRePbrLimits": "PASS"
|
||||
},
|
||||
"notes": [
|
||||
"Desktop EEVEE reference not run; displacement proof is Web 100x.",
|
||||
"HQ mipmaps can add ~1/3 over base-level budget.",
|
||||
"User acceptance pending."
|
||||
]
|
||||
}
|
||||
BIN
tests/golden/RE-PBR-RENDER-001/lesson-page-dist.png
Normal file
|
After Width: | Height: | Size: 315 KiB |
BIN
tests/golden/RE-PBR-RENDER-001/lesson-page.png
Normal file
|
After Width: | Height: | Size: 315 KiB |
79
tests/golden/RE-PBR-RENDER-001/manifest.json
Normal file
@@ -0,0 +1,79 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "RE-PBR-RENDER-001",
|
||||
"status": "IMPLEMENTED_NOT_USER_ACCEPTED",
|
||||
"renderer": "WEB_WEBGL2",
|
||||
"headed": true,
|
||||
"browser": "151.0.7922.137",
|
||||
"display": ":1",
|
||||
"generatedAt": "2026-11-11T14:46:37.441Z",
|
||||
"source": {
|
||||
"catalog": {
|
||||
"path": "re/5000PBR\u7cbe\u7b80\u7248/5000+ PBR catalog.blend",
|
||||
"sha256": "54942f057f913c9923752ba0d4ddcfa6d1f77e98c5e812b83409fb128968c125"
|
||||
},
|
||||
"glb": {
|
||||
"path": "tests/files/web/pbr-render-lesson/monkey-head.glb",
|
||||
"sha256": "60267d607b63ceb5bfc972342a9ff17310d6978ff632f240ecb963c4d5a7e003"
|
||||
},
|
||||
"studio": {
|
||||
"path": "web/app/public/tutorial/pbr/studio.blend",
|
||||
"sha256": "621ffacc0eaea9f9efd087849de048804dd45cd13f94494b1f1a91328143feed"
|
||||
}
|
||||
},
|
||||
"derived": {
|
||||
"library": {
|
||||
"path": "web/app/public/assets/re-pbr/re-pbr-library.blend",
|
||||
"sha256": "d67f5a058c154626dfc7171c5bc7fc254b8ee183fea8740261b9711b3309d782",
|
||||
"libraryId": "library:re-pbr-v1"
|
||||
},
|
||||
"manifest": {
|
||||
"path": "web/app/public/assets/re-pbr/manifest.json",
|
||||
"sha256": "2c68527e7ecfa5107aff2161a642c49135ec212e78532cf49682563ac0f3fdd0"
|
||||
},
|
||||
"materials": 6,
|
||||
"previews": 6
|
||||
},
|
||||
"rendererArtifact": {
|
||||
"web_engine.wasm": "909290259e2911af49f1d6f308e1e05e01f62aa1841847b878bcd3191b98c24c"
|
||||
},
|
||||
"lesson": {
|
||||
"html": {
|
||||
"path": "web/app/public/tutorial/pbr/render-lesson.html",
|
||||
"sha256": "d7a1545c225c60f30a7ecb190bcbf3cf89b7e2fdaaaae65dde58db67e476490f"
|
||||
},
|
||||
"css": {
|
||||
"path": "web/app/public/tutorial/pbr/render-lesson.css",
|
||||
"sha256": "72118b8b041fb457c7f8cdc26c5d1eb3be3493a3fed46a62d893a26b9394ee76"
|
||||
},
|
||||
"renders": 20,
|
||||
"steps": 15
|
||||
},
|
||||
"checks": {
|
||||
"re-pbr-library": "PASS",
|
||||
"shader-compiler-unit": "13/13",
|
||||
"typecheck": "PASS",
|
||||
"build": "PASS",
|
||||
"re-pbr-render-workflow-e2e-headed": "2/2",
|
||||
"pbr-regressions-headed": "3/3",
|
||||
"re-pbr-lesson-check": "PASS",
|
||||
"lesson-page-headed": "35 images decoded; no HTTP failures"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/report.json",
|
||||
"sha256": "cf9ad91274e0709e767220300754e1a4e3bb2a1cf82c39c86fe3bb8c81073aee"
|
||||
},
|
||||
"notes": [
|
||||
"Six RE materials include the formerly unmarked Black_Anti_Slip_grip; source .blend untouched.",
|
||||
"Displacement is ignored by the Web renderer; Base Color/Normal/Roughness are rendered.",
|
||||
"Viewport and scene camera images can be identical because the default viewport is aligned to the studio camera."
|
||||
],
|
||||
"savedProject": {
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/re-pbr-lesson-saved.blend",
|
||||
"sha256": "8d41376ae030e1d2aad43a27dd511e446d141fc8122347af3d5cac422ede3ebb"
|
||||
},
|
||||
"lessonPageScreenshot": {
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/lesson-page.png",
|
||||
"sha256": "e5d0359028241d873b50f66e61d5a98fc1e17e75e4fb81d8854bd17d762dbf38"
|
||||
}
|
||||
}
|
||||
BIN
tests/golden/RE-PBR-RENDER-001/re-pbr-lesson-saved.blend
Normal file
|
After Width: | Height: | Size: 326 KiB |
|
After Width: | Height: | Size: 397 KiB |
|
After Width: | Height: | Size: 540 KiB |
|
After Width: | Height: | Size: 135 KiB |
|
After Width: | Height: | Size: 339 KiB |
|
After Width: | Height: | Size: 426 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 369 KiB |
|
After Width: | Height: | Size: 458 KiB |
|
After Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 398 KiB |
|
After Width: | Height: | Size: 521 KiB |
|
After Width: | Height: | Size: 139 KiB |
|
After Width: | Height: | Size: 364 KiB |
|
After Width: | Height: | Size: 469 KiB |
|
After Width: | Height: | Size: 129 KiB |
|
After Width: | Height: | Size: 386 KiB |
|
After Width: | Height: | Size: 518 KiB |
|
After Width: | Height: | Size: 135 KiB |
|
After Width: | Height: | Size: 386 KiB |
411
tests/golden/RE-PBR-RENDER-001/report.json
Normal file
@@ -0,0 +1,411 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "RE-PBR-RENDER-001",
|
||||
"renderer": "WEB_WEBGL2",
|
||||
"headed": true,
|
||||
"gpuMode": "hardware",
|
||||
"browser": "151.0.7922.137",
|
||||
"chromePath": "/usr/bin/google-chrome",
|
||||
"display": ":1",
|
||||
"generatedAt": "2026-11-12T13:24:47.364Z",
|
||||
"studioSha256": "621ffacc0eaea9f9efd087849de048804dd45cd13f94494b1f1a91328143feed",
|
||||
"glbSha256": "60267d607b63ceb5bfc972342a9ff17310d6978ff632f240ecb963c4d5a7e003",
|
||||
"materials": [
|
||||
"Black_Anti_Slip_grip",
|
||||
"Blackish_Brick_Wall_016",
|
||||
"black_randome_tile",
|
||||
"black_shinning_tile",
|
||||
"black_tiles_wall",
|
||||
"black_worn_wall_brick"
|
||||
],
|
||||
"renders": [
|
||||
{
|
||||
"name": "baseline-unassigned-1024-scene",
|
||||
"material": null,
|
||||
"resolution": 1024,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/baseline-unassigned-1024-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/baseline-unassigned-1024-scene.jpg",
|
||||
"sha256": "4084f64fcd9cb981e241ddc120c5a0f6e256d1c7896d525579a6e3be60ffc265",
|
||||
"byteLength": 333634,
|
||||
"mean": 94.5402,
|
||||
"std": 45.4315,
|
||||
"textureStatus": "ready:1:0:",
|
||||
"textureAssets": 1,
|
||||
"compileStatus": "BASELINE"
|
||||
},
|
||||
{
|
||||
"name": "material-Black_Anti_Slip_grip-1024-scene",
|
||||
"material": "Black_Anti_Slip_grip-1024-scene",
|
||||
"resolution": 1024,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-Black_Anti_Slip_grip-1024-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-Black_Anti_Slip_grip-1024-scene.jpg",
|
||||
"sha256": "dcc7194607f100bea6f8c7ae376cda991e208e0341e51f8f42edb8ea79026eeb",
|
||||
"byteLength": 406827,
|
||||
"mean": 94.6004,
|
||||
"std": 45.5247,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-Black_Anti_Slip_grip-1024-viewport",
|
||||
"material": "Black_Anti_Slip_grip-1024-viewport",
|
||||
"resolution": 1024,
|
||||
"camera": "VIEWPORT",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-Black_Anti_Slip_grip-1024-viewport.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-Black_Anti_Slip_grip-1024-viewport.jpg",
|
||||
"sha256": "a2906859a592b3fe550db7cac69f6d968f8cccb92569dda2edcc50ff7670d760",
|
||||
"byteLength": 552825,
|
||||
"mean": 68.1723,
|
||||
"std": 19.4146,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-Black_Anti_Slip_grip-512-scene",
|
||||
"material": "Black_Anti_Slip_grip-512-scene",
|
||||
"resolution": 512,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-Black_Anti_Slip_grip-512-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-Black_Anti_Slip_grip-512-scene.jpg",
|
||||
"sha256": "d97dbd711526016c8f7e4abc6ea565ae1243a8f982bfce9eac6c3cfd4b256273",
|
||||
"byteLength": 138648,
|
||||
"mean": 94.5944,
|
||||
"std": 45.4802,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-Blackish_Brick_Wall_016-1024-scene",
|
||||
"material": "Blackish_Brick_Wall_016-1024-scene",
|
||||
"resolution": 1024,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-Blackish_Brick_Wall_016-1024-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-Blackish_Brick_Wall_016-1024-scene.jpg",
|
||||
"sha256": "3f57bbdf0db50a9ef31e730e6e868e138917143fbb5f08c2d78fc10fd2d89d57",
|
||||
"byteLength": 347506,
|
||||
"mean": 93.4853,
|
||||
"std": 45.7205,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-Blackish_Brick_Wall_016-1024-viewport",
|
||||
"material": "Blackish_Brick_Wall_016-1024-viewport",
|
||||
"resolution": 1024,
|
||||
"camera": "VIEWPORT",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-Blackish_Brick_Wall_016-1024-viewport.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-Blackish_Brick_Wall_016-1024-viewport.jpg",
|
||||
"sha256": "dc590cdd28d7a04f773a03fa8f5977adc22fd4db96df4b23196356380f322bd0",
|
||||
"byteLength": 436440,
|
||||
"mean": 66.7569,
|
||||
"std": 17.6259,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-Blackish_Brick_Wall_016-512-scene",
|
||||
"material": "Blackish_Brick_Wall_016-512-scene",
|
||||
"resolution": 512,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-Blackish_Brick_Wall_016-512-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-Blackish_Brick_Wall_016-512-scene.jpg",
|
||||
"sha256": "8b6a49a0c3141c9ac1c904792f47f8b4492348992db481550f2067c6c8a128c9",
|
||||
"byteLength": 125970,
|
||||
"mean": 93.4702,
|
||||
"std": 45.7063,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_randome_tile-1024-scene",
|
||||
"material": "black_randome_tile-1024-scene",
|
||||
"resolution": 1024,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_randome_tile-1024-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_randome_tile-1024-scene.jpg",
|
||||
"sha256": "a54f9caf195b9726e6792dc3fa7e92d59c9dc485f3c3bc7e65d94cc62a900253",
|
||||
"byteLength": 377709,
|
||||
"mean": 93.6921,
|
||||
"std": 45.541,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_randome_tile-1024-viewport",
|
||||
"material": "black_randome_tile-1024-viewport",
|
||||
"resolution": 1024,
|
||||
"camera": "VIEWPORT",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_randome_tile-1024-viewport.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_randome_tile-1024-viewport.jpg",
|
||||
"sha256": "697e37d18a2b7575b1b2a05a0b931c17565ac48c3869358dac1c509a21491457",
|
||||
"byteLength": 469187,
|
||||
"mean": 67.1074,
|
||||
"std": 17.5655,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_randome_tile-512-scene",
|
||||
"material": "black_randome_tile-512-scene",
|
||||
"resolution": 512,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_randome_tile-512-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_randome_tile-512-scene.jpg",
|
||||
"sha256": "ee40d1e815c7d60d8f96c5a0c3edeefdb3245a25c76c35ec7193e0d6bcc182e4",
|
||||
"byteLength": 134145,
|
||||
"mean": 93.6227,
|
||||
"std": 45.5507,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_shinning_tile-1024-scene",
|
||||
"material": "black_shinning_tile-1024-scene",
|
||||
"resolution": 1024,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_shinning_tile-1024-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_shinning_tile-1024-scene.jpg",
|
||||
"sha256": "4252afbc06e936d552c40bd20c1de4fbf74902df5521e574b3e49f3633af045d",
|
||||
"byteLength": 407550,
|
||||
"mean": 94.6918,
|
||||
"std": 45.7203,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_shinning_tile-1024-viewport",
|
||||
"material": "black_shinning_tile-1024-viewport",
|
||||
"resolution": 1024,
|
||||
"camera": "VIEWPORT",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_shinning_tile-1024-viewport.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_shinning_tile-1024-viewport.jpg",
|
||||
"sha256": "3996b7d704dceaa4215a0126db4ee6387ef00c48b67932e86c75983e22dd5c07",
|
||||
"byteLength": 533567,
|
||||
"mean": 68.3535,
|
||||
"std": 20.5096,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_shinning_tile-512-scene",
|
||||
"material": "black_shinning_tile-512-scene",
|
||||
"resolution": 512,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_shinning_tile-512-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_shinning_tile-512-scene.jpg",
|
||||
"sha256": "2a4bd3aa9aa24998d7d236b1450a95fc93ccaae8d34bc0ee2fe64620d8bf4c79",
|
||||
"byteLength": 142153,
|
||||
"mean": 94.6237,
|
||||
"std": 45.5561,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_tiles_wall-1024-scene",
|
||||
"material": "black_tiles_wall-1024-scene",
|
||||
"resolution": 1024,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_tiles_wall-1024-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_tiles_wall-1024-scene.jpg",
|
||||
"sha256": "b2e037c2151bd53eab519f59495590c09588c0b89573b39c7b802435f91c5171",
|
||||
"byteLength": 372178,
|
||||
"mean": 94.207,
|
||||
"std": 45.2282,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_tiles_wall-1024-viewport",
|
||||
"material": "black_tiles_wall-1024-viewport",
|
||||
"resolution": 1024,
|
||||
"camera": "VIEWPORT",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_tiles_wall-1024-viewport.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_tiles_wall-1024-viewport.jpg",
|
||||
"sha256": "0b1f61d4c9db1cb8b142af3b7bfa0bbca75884aba3f4130dec0e2e22269d3440",
|
||||
"byteLength": 479935,
|
||||
"mean": 68.0221,
|
||||
"std": 17.3012,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_tiles_wall-512-scene",
|
||||
"material": "black_tiles_wall-512-scene",
|
||||
"resolution": 512,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_tiles_wall-512-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_tiles_wall-512-scene.jpg",
|
||||
"sha256": "7bff874cb5992052880cbb947394d026589600fa59cc9b0405458edd605cfd9d",
|
||||
"byteLength": 131660,
|
||||
"mean": 94.1789,
|
||||
"std": 45.2036,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_worn_wall_brick-1024-scene",
|
||||
"material": "black_worn_wall_brick-1024-scene",
|
||||
"resolution": 1024,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_worn_wall_brick-1024-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_worn_wall_brick-1024-scene.jpg",
|
||||
"sha256": "95105d1e3d3844c815e39a9a41f41761cc798a5cc7f1756f9fd5521f545470ea",
|
||||
"byteLength": 395215,
|
||||
"mean": 94.3206,
|
||||
"std": 45.1801,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_worn_wall_brick-1024-viewport",
|
||||
"material": "black_worn_wall_brick-1024-viewport",
|
||||
"resolution": 1024,
|
||||
"camera": "VIEWPORT",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_worn_wall_brick-1024-viewport.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_worn_wall_brick-1024-viewport.jpg",
|
||||
"sha256": "1ac2d53d563f77a81e02d81c897bd1866a948e5451f9a89070d6ebbd00014461",
|
||||
"byteLength": 530442,
|
||||
"mean": 68.5761,
|
||||
"std": 17.6293,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_worn_wall_brick-512-scene",
|
||||
"material": "black_worn_wall_brick-512-scene",
|
||||
"resolution": 512,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_worn_wall_brick-512-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_worn_wall_brick-512-scene.jpg",
|
||||
"sha256": "0e175dc7ee9432e08496ad2ff57e96457646e08344039f7d6ee113c5f4b5376f",
|
||||
"byteLength": 138231,
|
||||
"mean": 94.2668,
|
||||
"std": 45.1655,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "COMPILED"
|
||||
},
|
||||
{
|
||||
"name": "material-black_worn_wall_brick-reopen-1024-scene",
|
||||
"material": "black_worn_wall_brick-reopen-1024-scene",
|
||||
"resolution": 1024,
|
||||
"camera": "SCENE",
|
||||
"path": "tests/golden/RE-PBR-RENDER-001/renders/material-black_worn_wall_brick-reopen-1024-scene.png",
|
||||
"jpg": "web/app/public/tutorial/pbr/lesson/renders/material-black_worn_wall_brick-reopen-1024-scene.jpg",
|
||||
"sha256": "d2c9f5eb4d3e93c24c7dd3d0d7e2c8e7eacee99698fca1d996ecacbdbbff147e",
|
||||
"byteLength": 395066,
|
||||
"mean": 94.3106,
|
||||
"std": 45.1856,
|
||||
"textureStatus": "ready:5:0:",
|
||||
"textureAssets": 5,
|
||||
"compileStatus": "REOPENED"
|
||||
}
|
||||
],
|
||||
"steps": [
|
||||
{
|
||||
"name": "01-open-studio",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/01-open-studio.jpg",
|
||||
"sha256": "cbedb2be5fd6a9defebdddc23a2bbeb8410ea848416b9f677617e8c7b16af58d"
|
||||
},
|
||||
{
|
||||
"name": "02-import-glb",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/02-import-glb.jpg",
|
||||
"sha256": "3a060c51daa6a61a98e07a80e8455373f8b7bebbfaccb7660215c47a41f173a2"
|
||||
},
|
||||
{
|
||||
"name": "03-asset-library-Black_Anti_Slip_grip",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/03-asset-library-Black_Anti_Slip_grip.jpg",
|
||||
"sha256": "afdca32dc63617c82ca199c1fdcab51998dc17618d2098ab0f1bd412eb005eef"
|
||||
},
|
||||
{
|
||||
"name": "04-assign-Black_Anti_Slip_grip",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/04-assign-Black_Anti_Slip_grip.jpg",
|
||||
"sha256": "5c3501511c0aae269d40ac96f5f3375668c7e8304cbabfb7d757cd64ccd62faa"
|
||||
},
|
||||
{
|
||||
"name": "03-asset-library-Blackish_Brick_Wall_016",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/03-asset-library-Blackish_Brick_Wall_016.jpg",
|
||||
"sha256": "afdca32dc63617c82ca199c1fdcab51998dc17618d2098ab0f1bd412eb005eef"
|
||||
},
|
||||
{
|
||||
"name": "04-assign-Blackish_Brick_Wall_016",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/04-assign-Blackish_Brick_Wall_016.jpg",
|
||||
"sha256": "fbd8a368e86bb19cce387312a23eeb5c503abc221475cda4e6feb2597a76d8d0"
|
||||
},
|
||||
{
|
||||
"name": "03-asset-library-black_randome_tile",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/03-asset-library-black_randome_tile.jpg",
|
||||
"sha256": "afdca32dc63617c82ca199c1fdcab51998dc17618d2098ab0f1bd412eb005eef"
|
||||
},
|
||||
{
|
||||
"name": "04-assign-black_randome_tile",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/04-assign-black_randome_tile.jpg",
|
||||
"sha256": "9087fb6b6af7ac3e6291174a6df245c9ea49abf049444d0152e1396d4ad775ba"
|
||||
},
|
||||
{
|
||||
"name": "03-asset-library-black_shinning_tile",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/03-asset-library-black_shinning_tile.jpg",
|
||||
"sha256": "afdca32dc63617c82ca199c1fdcab51998dc17618d2098ab0f1bd412eb005eef"
|
||||
},
|
||||
{
|
||||
"name": "04-assign-black_shinning_tile",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/04-assign-black_shinning_tile.jpg",
|
||||
"sha256": "cf3fbdaa66fd612f8d26faa6015f1abc208a64d06bdedd77bea9e4ca1d23b383"
|
||||
},
|
||||
{
|
||||
"name": "03-asset-library-black_tiles_wall",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/03-asset-library-black_tiles_wall.jpg",
|
||||
"sha256": "afdca32dc63617c82ca199c1fdcab51998dc17618d2098ab0f1bd412eb005eef"
|
||||
},
|
||||
{
|
||||
"name": "04-assign-black_tiles_wall",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/04-assign-black_tiles_wall.jpg",
|
||||
"sha256": "9ee41dd525128d31ed46664d9edfcf3de150db65c47522002cd307605af7681e"
|
||||
},
|
||||
{
|
||||
"name": "03-asset-library-black_worn_wall_brick",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/03-asset-library-black_worn_wall_brick.jpg",
|
||||
"sha256": "afdca32dc63617c82ca199c1fdcab51998dc17618d2098ab0f1bd412eb005eef"
|
||||
},
|
||||
{
|
||||
"name": "04-assign-black_worn_wall_brick",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/04-assign-black_worn_wall_brick.jpg",
|
||||
"sha256": "847032ffa0bbed0836478b0468504b0c48709159240351c4e21bffef9198e86f"
|
||||
},
|
||||
{
|
||||
"name": "05-reopen",
|
||||
"path": "web/app/public/tutorial/pbr/lesson/steps/05-reopen.jpg",
|
||||
"sha256": "f09769ce96480560b499ad616ab868f3a8ddeb97a4f7998bb9f80c451da6b4e7"
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"webgl": {
|
||||
"vendor": "Google Inc. (NVIDIA Corporation)",
|
||||
"renderer": "ANGLE (NVIDIA Corporation, NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2, OpenGL 4.5.0)",
|
||||
"version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)"
|
||||
},
|
||||
"webgpu": {
|
||||
"info": {}
|
||||
},
|
||||
"status": "PASS",
|
||||
"consoleErrors": []
|
||||
}
|
||||
109
tests/golden/RE-PBR-VIDEO-001/narration.json
Normal file
@@ -0,0 +1,109 @@
|
||||
{
|
||||
"voice": "zh-CN-XiaoxiaoNeural",
|
||||
"chapters": [
|
||||
{
|
||||
"id": "intro",
|
||||
"title": "开场:会得到什么",
|
||||
"narration": "这一课我们从灰色猴头开始。你会打开摄影棚,导入只有一个猴头网格的 GLB 文件,从 RE 五零零零 PBR 资产库分配六种材质,最后在浏览器里用显卡渲染、下载 PNG、保存工程并重新打开。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/intro.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/intro.wav",
|
||||
"durationMs": 19608
|
||||
},
|
||||
{
|
||||
"id": "open-studio",
|
||||
"title": "载入摄影棚",
|
||||
"narration": "先打开 Web Blender 的 Rendering 工作区。在 PBR 渲染练习面板里点击载入练习摄影棚。这个场景已经准备好相机、三点面光、太阳光、世界环境和地面。等待状态栏显示 Engine SceneIR,并且对象数是六。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/open-studio.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/open-studio.wav",
|
||||
"durationMs": 19992
|
||||
},
|
||||
{
|
||||
"id": "import-glb",
|
||||
"title": "导入猴头 GLB",
|
||||
"narration": "接下来点击导入猴头 GLB,选择课程目录里的 monkey head 点 GLB。导入会追加到当前场景,不会替换摄影棚。看到对象数从六变成七,活动对象是 Suzanne 就对了。此时猴头没有材质,所以是灰色的,这是正常的基线。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/import-glb.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/import-glb.wav",
|
||||
"durationMs": 21216
|
||||
},
|
||||
{
|
||||
"id": "asset-library",
|
||||
"title": "认识 Shading 与 RE 资产库",
|
||||
"narration": "切换到 Shading 工作区。左下角是 PBR 资产库,现在有二十个资产。用资产来源下拉框选择 RE 五零零零 PBR,只留下六张材质卡片。单击卡片只会选中,双击才会把材质分配出去。缩略图加载完成后就可以继续。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/asset-library.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/asset-library.wav",
|
||||
"durationMs": 22176
|
||||
},
|
||||
{
|
||||
"id": "assign-materials",
|
||||
"title": "分配六种材质",
|
||||
"narration": "回到 Rendering 工作区。在 PBR 渲染练习面板下方,新加了 RE 五零零零 PBR 材质选择器,它显示完整材质名和缩略图,不受左侧窄栏影响。依次双击六种材质:防滑颗粒、砖墙、随机瓷砖、光亮瓷砖、规则砖墙和做旧砖墙。每次等待材质槽更新,并确认材质球显示 COMPILED。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/assign-materials.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/assign-materials.wav",
|
||||
"durationMs": 28608
|
||||
},
|
||||
{
|
||||
"id": "render-settings",
|
||||
"title": "设置渲染",
|
||||
"narration": "现在设置渲染。分辨率选一零二四,相机选场景相机,视图保持最终材质,教学曝光保持零,位移强度保持一倍,视角预设选场景相机对齐。这样得到的就是固定摄影棚下的标准成片。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/render-settings.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/render-settings.wav",
|
||||
"durationMs": 18648
|
||||
},
|
||||
{
|
||||
"id": "render-download",
|
||||
"title": "渲染与下载 PNG",
|
||||
"narration": "点击渲染 PBR。面板会先等待纹理和环境贴图就绪,然后输出一张一零二四乘一零二四的 WebGL2 成片。结果出现后,点击下载 PNG,浏览器会保存 pbr 一零二四点 PNG。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/render-download.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/render-download.wav",
|
||||
"durationMs": 18312
|
||||
},
|
||||
{
|
||||
"id": "save-reopen",
|
||||
"title": "保存与重开",
|
||||
"narration": "点击顶部的保存项目,下载点 blend 工程。然后再次导入刚才保存的工程;如果询问是否保存当前修改,选择不保存并继续。重新打开后对象数仍是七,材质槽仍然保留做旧砖墙,再渲染一次确认贴图没有丢失。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/save-reopen.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/save-reopen.wav",
|
||||
"durationMs": 20568
|
||||
},
|
||||
{
|
||||
"id": "diagnostics",
|
||||
"title": "诊断视图与教学曝光",
|
||||
"narration": "深色材质只看整体亮度容易误判。把视图切到 Base Color,可以看到基础色贴图;切到 Normal,可以看到法线和砖缝;切到 Roughness,可以看到粗糙度。教学曝光可以加一档或两档 EV,只改变渲染曝光,不改变材质本身。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/diagnostics.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/diagnostics.wav",
|
||||
"durationMs": 20880
|
||||
},
|
||||
{
|
||||
"id": "displacement",
|
||||
"title": "位移与细分",
|
||||
"narration": "Height 贴图现在会真正参与几何位移。位移强度一倍保留源材质零点零零一的 Scale,画面变化很细;切到一百倍只是渲染时的教学放大,不写回材质。静帧会把九百六十八个三角形细分到六万一千九百五十二个,再执行位移。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/displacement.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/displacement.wav",
|
||||
"durationMs": 21048
|
||||
},
|
||||
{
|
||||
"id": "camera",
|
||||
"title": "对比视角",
|
||||
"narration": "视角预设默认与场景相机精确对齐,所以场景和视口可能看起来一样。选择对比四十五度后,当前视口会以主体为中心偏转三十度,得到明显不同的构图;主视口导航不受影响。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/camera.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/camera.wav",
|
||||
"durationMs": 17520
|
||||
},
|
||||
{
|
||||
"id": "hq-2048",
|
||||
"title": "高清 2048 贴图",
|
||||
"narration": "如果需要原始分辨率,点击加载高清贴图二零四八。素材会按需合并,材质名带 HQ 后缀。切换到高清来源,双击分配做旧砖墙 HQ,再渲染一次。五个纹理全部加载,显存预算约六十四点五兆,低于五百一十二兆上限。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/hq-2048.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/hq-2048.wav",
|
||||
"durationMs": 22008
|
||||
},
|
||||
{
|
||||
"id": "summary",
|
||||
"title": "总结与教案",
|
||||
"narration": "到这里,你已经完成从灰色猴头到六种 PBR 材质的完整流程:打开场景、导入 GLB、分配材质、渲染下载、保存重开,以及诊断、位移、对比相机和高清贴图。更多截图和文字步骤在渲染图文教案里,地址是 tutorial pbr render lesson 点 HTML。",
|
||||
"mp3": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/summary.mp3",
|
||||
"wav": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration/summary.wav",
|
||||
"durationMs": 24936
|
||||
}
|
||||
]
|
||||
}
|
||||
111
tests/golden/RE-PBR-VIDEO-001/record-report.json
Normal file
@@ -0,0 +1,111 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"status": "PASS",
|
||||
"gpu": {
|
||||
"vendor": "Google Inc. (NVIDIA Corporation)",
|
||||
"renderer": "ANGLE (NVIDIA Corporation, NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2, OpenGL 4.5.0)",
|
||||
"version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)"
|
||||
},
|
||||
"gpuMode": "hardware",
|
||||
"smoke": false,
|
||||
"durationMs": 669467,
|
||||
"chapters": [
|
||||
{
|
||||
"id": "intro",
|
||||
"title": "开场:会得到什么",
|
||||
"startMs": 3630,
|
||||
"endMs": 39087,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/intro.jpg"
|
||||
},
|
||||
{
|
||||
"id": "open-studio",
|
||||
"title": "载入摄影棚",
|
||||
"startMs": 39088,
|
||||
"endMs": 74925,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/open-studio.jpg"
|
||||
},
|
||||
{
|
||||
"id": "import-glb",
|
||||
"title": "导入猴头 GLB",
|
||||
"startMs": 74925,
|
||||
"endMs": 111990,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/import-glb.jpg"
|
||||
},
|
||||
{
|
||||
"id": "asset-library",
|
||||
"title": "认识 Shading 与 RE 资产库",
|
||||
"startMs": 111991,
|
||||
"endMs": 150022,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/asset-library.jpg"
|
||||
},
|
||||
{
|
||||
"id": "assign-materials",
|
||||
"title": "分配六种材质",
|
||||
"startMs": 150022,
|
||||
"endMs": 283150,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/assign-materials.jpg"
|
||||
},
|
||||
{
|
||||
"id": "render-settings",
|
||||
"title": "设置渲染",
|
||||
"startMs": 283150,
|
||||
"endMs": 317656,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/render-settings.jpg"
|
||||
},
|
||||
{
|
||||
"id": "render-download",
|
||||
"title": "渲染与下载 PNG",
|
||||
"startMs": 317656,
|
||||
"endMs": 378905,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/render-download.jpg"
|
||||
},
|
||||
{
|
||||
"id": "save-reopen",
|
||||
"title": "保存与重开",
|
||||
"startMs": 378906,
|
||||
"endMs": 416940,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/save-reopen.jpg"
|
||||
},
|
||||
{
|
||||
"id": "diagnostics",
|
||||
"title": "诊断视图与教学曝光",
|
||||
"startMs": 416941,
|
||||
"endMs": 492011,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/diagnostics.jpg"
|
||||
},
|
||||
{
|
||||
"id": "displacement",
|
||||
"title": "位移与细分",
|
||||
"startMs": 492012,
|
||||
"endMs": 528899,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/displacement.jpg"
|
||||
},
|
||||
{
|
||||
"id": "camera",
|
||||
"title": "对比视角",
|
||||
"startMs": 528900,
|
||||
"endMs": 562279,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/camera.jpg"
|
||||
},
|
||||
{
|
||||
"id": "hq-2048",
|
||||
"title": "高清 2048 贴图",
|
||||
"startMs": 562279,
|
||||
"endMs": 625129,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/hq-2048.jpg"
|
||||
},
|
||||
{
|
||||
"id": "summary",
|
||||
"title": "总结与教案",
|
||||
"startMs": 625130,
|
||||
"endMs": 665905,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/summary.jpg"
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"screencast": {
|
||||
"path": "tests/golden/RE-PBR-VIDEO-001/screencast.webm",
|
||||
"sha256": "e1ccb9497c851b2a0a3c2fe677b00587e68399340ff956a5bbe54a6bce942778",
|
||||
"bytes": 42699067
|
||||
}
|
||||
}
|
||||
111
tests/golden/RE-PBR-VIDEO-001/timeline.json
Normal file
@@ -0,0 +1,111 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"status": "PASS",
|
||||
"gpu": {
|
||||
"vendor": "Google Inc. (NVIDIA Corporation)",
|
||||
"renderer": "ANGLE (NVIDIA Corporation, NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2, OpenGL 4.5.0)",
|
||||
"version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)"
|
||||
},
|
||||
"gpuMode": "hardware",
|
||||
"smoke": false,
|
||||
"durationMs": 669467,
|
||||
"chapters": [
|
||||
{
|
||||
"id": "intro",
|
||||
"title": "开场:会得到什么",
|
||||
"startMs": 3630,
|
||||
"endMs": 39087,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/intro.jpg"
|
||||
},
|
||||
{
|
||||
"id": "open-studio",
|
||||
"title": "载入摄影棚",
|
||||
"startMs": 39088,
|
||||
"endMs": 74925,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/open-studio.jpg"
|
||||
},
|
||||
{
|
||||
"id": "import-glb",
|
||||
"title": "导入猴头 GLB",
|
||||
"startMs": 74925,
|
||||
"endMs": 111990,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/import-glb.jpg"
|
||||
},
|
||||
{
|
||||
"id": "asset-library",
|
||||
"title": "认识 Shading 与 RE 资产库",
|
||||
"startMs": 111991,
|
||||
"endMs": 150022,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/asset-library.jpg"
|
||||
},
|
||||
{
|
||||
"id": "assign-materials",
|
||||
"title": "分配六种材质",
|
||||
"startMs": 150022,
|
||||
"endMs": 283150,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/assign-materials.jpg"
|
||||
},
|
||||
{
|
||||
"id": "render-settings",
|
||||
"title": "设置渲染",
|
||||
"startMs": 283150,
|
||||
"endMs": 317656,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/render-settings.jpg"
|
||||
},
|
||||
{
|
||||
"id": "render-download",
|
||||
"title": "渲染与下载 PNG",
|
||||
"startMs": 317656,
|
||||
"endMs": 378905,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/render-download.jpg"
|
||||
},
|
||||
{
|
||||
"id": "save-reopen",
|
||||
"title": "保存与重开",
|
||||
"startMs": 378906,
|
||||
"endMs": 416940,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/save-reopen.jpg"
|
||||
},
|
||||
{
|
||||
"id": "diagnostics",
|
||||
"title": "诊断视图与教学曝光",
|
||||
"startMs": 416941,
|
||||
"endMs": 492011,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/diagnostics.jpg"
|
||||
},
|
||||
{
|
||||
"id": "displacement",
|
||||
"title": "位移与细分",
|
||||
"startMs": 492012,
|
||||
"endMs": 528899,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/displacement.jpg"
|
||||
},
|
||||
{
|
||||
"id": "camera",
|
||||
"title": "对比视角",
|
||||
"startMs": 528900,
|
||||
"endMs": 562279,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/camera.jpg"
|
||||
},
|
||||
{
|
||||
"id": "hq-2048",
|
||||
"title": "高清 2048 贴图",
|
||||
"startMs": 562279,
|
||||
"endMs": 625129,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/hq-2048.jpg"
|
||||
},
|
||||
{
|
||||
"id": "summary",
|
||||
"title": "总结与教案",
|
||||
"startMs": 625130,
|
||||
"endMs": 665905,
|
||||
"screenshot": "web/app/public/tutorial/pbr/lesson/video-steps/summary.jpg"
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"screencast": {
|
||||
"path": "tests/golden/RE-PBR-VIDEO-001/screencast.webm",
|
||||
"sha256": "e1ccb9497c851b2a0a3c2fe677b00587e68399340ff956a5bbe54a6bce942778",
|
||||
"bytes": 42699067
|
||||
}
|
||||
}
|
||||
22
tests/golden/RE-PBR-VIDEO-001/video-probe.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"programs": [
|
||||
|
||||
],
|
||||
"streams": [
|
||||
{
|
||||
"codec_name": "h264",
|
||||
"codec_type": "video",
|
||||
"width": 1280,
|
||||
"height": 720
|
||||
},
|
||||
{
|
||||
"codec_name": "aac",
|
||||
"codec_type": "audio"
|
||||
}
|
||||
],
|
||||
"format": {
|
||||
"duration": "667.040000",
|
||||
"size": "13706823"
|
||||
}
|
||||
}
|
||||
|
||||
117
tests/golden/RE-PBR-VIDEO-001/video-report.json
Normal file
@@ -0,0 +1,117 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"status": "PASS",
|
||||
"voice": "zh-CN-XiaoxiaoNeural",
|
||||
"video": {
|
||||
"path": "/home/mes123456/workinf_Blender_Wasm/web/app/public/tutorial/pbr/lesson/video/re-pbr-lesson-720p.mp4",
|
||||
"sha256": "6a5b3b51c52945d0594a984ad6b5ff2e557ec319c574679673bd8d6d2a8a2916",
|
||||
"bytes": 13706823
|
||||
},
|
||||
"narration": {
|
||||
"path": "/home/mes123456/workinf_Blender_Wasm/tests/golden/RE-PBR-VIDEO-001/narration.wav",
|
||||
"sha256": "adc2658938ad48b278aa434cb9635343491f7241f4632b4af6c9baa9271b9220",
|
||||
"bytes": 64268876
|
||||
},
|
||||
"vtt": {
|
||||
"path": "/home/mes123456/workinf_Blender_Wasm/web/app/public/tutorial/pbr/lesson/video/re-pbr-lesson.zh-Hans.vtt",
|
||||
"sha256": "4199af3a9c1ad501ebd7832e43693d43d2bbd30a646a8285343eefc08a237aa3",
|
||||
"cues": 13
|
||||
},
|
||||
"poster": {
|
||||
"path": "/home/mes123456/workinf_Blender_Wasm/web/app/public/tutorial/pbr/lesson/video/poster.jpg",
|
||||
"sha256": "6461410e032de2c92f3f898873d9dca9834f2538e65cd0e4b2d8f3c443d0f444"
|
||||
},
|
||||
"chapters": [
|
||||
{
|
||||
"id": "intro",
|
||||
"title": "开场:会得到什么",
|
||||
"startMs": 3630,
|
||||
"endMs": 23238,
|
||||
"narration": "这一课我们从灰色猴头开始。你会打开摄影棚,导入只有一个猴头网格的 GLB 文件,从 RE 五零零零 PBR 资产库分配六种材质,最后在浏览器里用显卡渲染、下载 PNG、保存工程并重新打开。"
|
||||
},
|
||||
{
|
||||
"id": "open-studio",
|
||||
"title": "载入摄影棚",
|
||||
"startMs": 39088,
|
||||
"endMs": 59080,
|
||||
"narration": "先打开 Web Blender 的 Rendering 工作区。在 PBR 渲染练习面板里点击载入练习摄影棚。这个场景已经准备好相机、三点面光、太阳光、世界环境和地面。等待状态栏显示 Engine SceneIR,并且对象数是六。"
|
||||
},
|
||||
{
|
||||
"id": "import-glb",
|
||||
"title": "导入猴头 GLB",
|
||||
"startMs": 74925,
|
||||
"endMs": 96141,
|
||||
"narration": "接下来点击导入猴头 GLB,选择课程目录里的 monkey head 点 GLB。导入会追加到当前场景,不会替换摄影棚。看到对象数从六变成七,活动对象是 Suzanne 就对了。此时猴头没有材质,所以是灰色的,这是正常的基线。"
|
||||
},
|
||||
{
|
||||
"id": "asset-library",
|
||||
"title": "认识 Shading 与 RE 资产库",
|
||||
"startMs": 111991,
|
||||
"endMs": 134167,
|
||||
"narration": "切换到 Shading 工作区。左下角是 PBR 资产库,现在有二十个资产。用资产来源下拉框选择 RE 五零零零 PBR,只留下六张材质卡片。单击卡片只会选中,双击才会把材质分配出去。缩略图加载完成后就可以继续。"
|
||||
},
|
||||
{
|
||||
"id": "assign-materials",
|
||||
"title": "分配六种材质",
|
||||
"startMs": 150022,
|
||||
"endMs": 178630,
|
||||
"narration": "回到 Rendering 工作区。在 PBR 渲染练习面板下方,新加了 RE 五零零零 PBR 材质选择器,它显示完整材质名和缩略图,不受左侧窄栏影响。依次双击六种材质:防滑颗粒、砖墙、随机瓷砖、光亮瓷砖、规则砖墙和做旧砖墙。每次等待材质槽更新,并确认材质球显示 COMPILED。"
|
||||
},
|
||||
{
|
||||
"id": "render-settings",
|
||||
"title": "设置渲染",
|
||||
"startMs": 283150,
|
||||
"endMs": 301798,
|
||||
"narration": "现在设置渲染。分辨率选一零二四,相机选场景相机,视图保持最终材质,教学曝光保持零,位移强度保持一倍,视角预设选场景相机对齐。这样得到的就是固定摄影棚下的标准成片。"
|
||||
},
|
||||
{
|
||||
"id": "render-download",
|
||||
"title": "渲染与下载 PNG",
|
||||
"startMs": 317656,
|
||||
"endMs": 335968,
|
||||
"narration": "点击渲染 PBR。面板会先等待纹理和环境贴图就绪,然后输出一张一零二四乘一零二四的 WebGL2 成片。结果出现后,点击下载 PNG,浏览器会保存 pbr 一零二四点 PNG。"
|
||||
},
|
||||
{
|
||||
"id": "save-reopen",
|
||||
"title": "保存与重开",
|
||||
"startMs": 378906,
|
||||
"endMs": 399474,
|
||||
"narration": "点击顶部的保存项目,下载点 blend 工程。然后再次导入刚才保存的工程;如果询问是否保存当前修改,选择不保存并继续。重新打开后对象数仍是七,材质槽仍然保留做旧砖墙,再渲染一次确认贴图没有丢失。"
|
||||
},
|
||||
{
|
||||
"id": "diagnostics",
|
||||
"title": "诊断视图与教学曝光",
|
||||
"startMs": 416941,
|
||||
"endMs": 437821,
|
||||
"narration": "深色材质只看整体亮度容易误判。把视图切到 Base Color,可以看到基础色贴图;切到 Normal,可以看到法线和砖缝;切到 Roughness,可以看到粗糙度。教学曝光可以加一档或两档 EV,只改变渲染曝光,不改变材质本身。"
|
||||
},
|
||||
{
|
||||
"id": "displacement",
|
||||
"title": "位移与细分",
|
||||
"startMs": 492012,
|
||||
"endMs": 513060,
|
||||
"narration": "Height 贴图现在会真正参与几何位移。位移强度一倍保留源材质零点零零一的 Scale,画面变化很细;切到一百倍只是渲染时的教学放大,不写回材质。静帧会把九百六十八个三角形细分到六万一千九百五十二个,再执行位移。"
|
||||
},
|
||||
{
|
||||
"id": "camera",
|
||||
"title": "对比视角",
|
||||
"startMs": 528900,
|
||||
"endMs": 546420,
|
||||
"narration": "视角预设默认与场景相机精确对齐,所以场景和视口可能看起来一样。选择对比四十五度后,当前视口会以主体为中心偏转三十度,得到明显不同的构图;主视口导航不受影响。"
|
||||
},
|
||||
{
|
||||
"id": "hq-2048",
|
||||
"title": "高清 2048 贴图",
|
||||
"startMs": 562279,
|
||||
"endMs": 584287,
|
||||
"narration": "如果需要原始分辨率,点击加载高清贴图二零四八。素材会按需合并,材质名带 HQ 后缀。切换到高清来源,双击分配做旧砖墙 HQ,再渲染一次。五个纹理全部加载,显存预算约六十四点五兆,低于五百一十二兆上限。"
|
||||
},
|
||||
{
|
||||
"id": "summary",
|
||||
"title": "总结与教案",
|
||||
"startMs": 625130,
|
||||
"endMs": 650066,
|
||||
"narration": "到这里,你已经完成从灰色猴头到六种 PBR 材质的完整流程:打开场景、导入 GLB、分配材质、渲染下载、保存重开,以及诊断、位移、对比相机和高清贴图。更多截图和文字步骤在渲染图文教案里,地址是 tutorial pbr render lesson 点 HTML。"
|
||||
}
|
||||
]
|
||||
}
|
||||