docs(course): add all 15 narrated module videos

Record M01-M15 at 1280x720 H.264/AAC (187s each), fix the UV and
Spreadsheet recording actions, embed each module video with poster and
VTT in the generated course, and record the verified 15/15 checker
result. M01 is re-recorded; M06/M13 were retried after action fixes.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
mes123456
2026-11-13 11:04:33 +08:00
parent 034c11d4e9
commit 04c6b50bd0
50 changed files with 401 additions and 25 deletions

View File

@@ -215,11 +215,22 @@
- 验证:`web-camera-view.spec.ts` **2/2 PASS**(进入/退出恢复、未锁定不动相机、锁定写回 revision、
Ctrl+Alt+Numpad0)。
### 14. 逐模块配音视频(15 条)
- 新 `tools/web/course/record-module-video.mjs`:按模块生成旁白章节、准备 TTS、独立浏览器 context 录制、
overlay/光标/字幕、OPFS 保存重开、逐模块混流与 report;`--all --resume` 可断点续录。
- `full-course.json` 每个模块增加 `video` 字段;生成器在模块内嵌 `<video>` + VTT + poster;
`check-full-course.mjs` 要求 15 条 H.264/AAC 1280×720、180–480 s 的模块视频。
- 产物:`web/app/public/tutorial/full/video/Mxx-lesson-720p.mp4` + poster + `.zh-Hans.vtt`。
- 录制批次结果:**15/15 PASS**,每条 187.00–187.02 s(3:07,满足 180–480 s),H.264/AAC 1280×720;
M06(UV)与 M13(Spreadsheet)首次失败后修正动作并补录通过;M01 单独补录。
- `node tools/web/course/check-full-course.mjs` → **PASS**:15 模块、15 模块视频、17 个视频总、
98,717,400 字节媒体,无缺失/编码/时长错误。
## 待实现
1. 逐模块短视频:计划中的 15 条 3–8 分钟视频目前只完成 2 条(编辑器专课 + 渲染专课);
M01–M05、M10、M14、M15 仍以图文截图为主。
2. Preferences 仍是最小集(状态栏、快捷栏、区域切换器),未覆盖完整键位/主题/视口偏好。
1. Preferences 仍只覆盖高价值设置;主题/系统/完整键位配置未实现(已在 UI 标注不支持及原因)。
2. 构建并发布第三轮 release(区域布局、相机、偏好、15 视频),线上验证后更新状态。
## 已知限制 / 未验证
@@ -232,11 +243,10 @@
RENDER_LAYER 用最近一次 PBR 渲染结果。Transform 的 scaleY 以 scaleX 统一写入;
Alpha Over 的 Factor 不持久化;保存重开后节点 id 由原生 identifier 重新生成
(节点名、类型、位置、连线、资源与属性保留)。MIX 仅持久化 RGBA/Mix 模式。
- 课程为 1 个静态 HTML 总课程;配音视频只有 2 条(编辑器专课、渲染专课),不是计划的 15 条逐模块
短视频。M01–M05、M10、M14、M15 以图文和截图为主。
- 动画工作区相机区域为真实 3D 视口并对齐场景相机,但仍可自由导航,未实现桌面“锁定相机视图”。
Area 切换器为浮动下拉,不包含桌面区域头的 ⋮ 菜单与 split/join;完整键位/主题偏好未实现。
Outliner 已具备行内重命名、多选、拖放与键盘导航;完整 Outliner 操作集合仍以桌面为准逐步补齐。
- 课程为 1 个静态 HTML 总课程,已嵌入 15 条逐模块配音视频(每条 3:07,中文配音/VTT/poster)。
- 相机视图实现 Numpad0 / Camera to View;未实现 object-as-camera、自动关键帧/约束/父级调整的完整
桌面 camera lock 分支。Area 支持浮动 ⋮ 的 split/join/swap/duplicate/maximize/close/reset,不含桌面
新窗口 duplicate 与拖拽分隔条 resize。Preferences 仅覆盖高价值设置,完整键位/主题/系统页未实现。
- 本轮只验证 Chromium + RTX 4060;未验证其他浏览器。
- 既有保存下载型 spec 尚未迁移;在迁移完成前不要把这些旧 spec 的失败当作产品回归。
- 远端首次 wasm 加载 154–193 秒;课程录制只做本地,页面需提示首载时间。

View File

@@ -105,8 +105,13 @@ const actions = {
},
async uv(page) {
await actions.workspace(page, "UV Editing");
await page.locator(".wasm-uv-editor").waitFor({ timeout: 60_000 });
await page.locator(".uv-controls").waitFor({ timeout: 60_000 });
await actions.enterEdit(page); await page.keyboard.press("Escape");
await page.waitForFunction(() => (document.querySelector('[data-testid="editor-workflow-context"]')?.textContent ?? "").includes("UV Editing"), null, { timeout: 60_000 });
await actions.enterEdit(page);
await page.waitForFunction(() => (document.querySelector('[data-testid="engine-status"]')?.textContent ?? "").includes("模式:Edit"), null, { timeout: 60_000 });
await page.keyboard.press("Escape");
await page.waitForTimeout(600);
await domClick(page.locator(".wasm-uv-editor button", { hasText: "全选 UV" }).first());
await page.waitForFunction(() => (document.querySelector(".wasm-uv-editor")?.textContent ?? "").includes("UV 选择已提交"), null, { timeout: 60_000 });
await domClick(page.locator(".wasm-uv-editor button", { hasText: "展开所选 UV" }).first());
@@ -146,6 +151,7 @@ const actions = {
await domClick(canvas.getByRole("button", { name: "提交图", exact: true })); await page.waitForTimeout(1200);
},
async spreadsheet(page) {
await actions.workspace(page, "Geometry Nodes");
const sheet = page.getByTestId("spreadsheet-view"); await sheet.waitFor({ timeout: 60_000 });
await sheet.getByLabel("数据源").selectOption("vertices"); await page.waitForTimeout(500);
await sheet.getByLabel("过滤行").fill("0.5"); await page.waitForTimeout(500);

View File

@@ -17,7 +17,10 @@ a{color:var(--accent)}
.course-main{min-width:0;padding:26px clamp(18px,4vw,56px) 60px}
.course-rules,.course-video,.course-module{max-width:1180px;margin:0 auto 34px;padding:22px clamp(16px,2.5vw,30px);background:var(--panel);border:1px solid var(--line);border-radius:8px}
.course-rules h2,.course-video h2,.course-module h2{margin-top:0;line-height:1.25}
.course-video video{width:100%;height:auto;background:#000;border-radius:6px}
.course-video video,.course-module-video video{width:100%;height:auto;background:#000;border-radius:6px}
.course-module-video{margin:16px 0 20px;padding:14px 16px;background:#262626;border:1px solid #3d4a3f;border-radius:6px}
.course-module-video h3{margin:0 0 8px;font-size:15px;color:#cfe0ef}
.course-module-video p{margin:8px 0 0;color:#aaa;font-size:13px}
.course-video p{margin:10px 0 0;color:var(--muted)}
.course-module-id{margin:0 0 4px;color:var(--accent-2);font-size:12px;letter-spacing:.08em;text-transform:uppercase}
.course-summary{margin:0;color:#cfcfcf}

View File

@@ -69,7 +69,18 @@
],
"warnings": [
"不要在保存流程中寻找自动下载;下载是独立的手动动作。"
]
],
"video": {
"id": "M01",
"src": "video/M01-lesson-720p.mp4",
"poster": "video/M01-lesson-poster.jpg",
"vtt": "video/M01-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M01 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M02",
@@ -106,7 +117,18 @@
],
"warnings": [
"删除、布尔等破坏性操作先在练习工程上做,并记住撤销按钮。"
]
],
"video": {
"id": "M02",
"src": "video/M02-lesson-720p.mp4",
"poster": "video/M02-lesson-poster.jpg",
"vtt": "video/M02-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M02 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M03",
@@ -143,7 +165,18 @@
],
"warnings": [
"对高面数网格做全选挤出会明显变慢;课程使用 1225 顶点的猴头。"
]
],
"video": {
"id": "M03",
"src": "video/M03-lesson-720p.mp4",
"poster": "video/M03-lesson-poster.jpg",
"vtt": "video/M03-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M03 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M04",
@@ -176,7 +209,18 @@
],
"warnings": [
"Boolean 需要封闭网格;非流形网格可能出现破面。"
]
],
"video": {
"id": "M04",
"src": "video/M04-lesson-720p.mp4",
"poster": "video/M04-lesson-poster.jpg",
"vtt": "video/M04-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M04 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M05",
@@ -213,7 +257,18 @@
],
"warnings": [
"库链接贴图不能直接被纹理绘制修改;M07 会导入本地派生的 PNG。"
]
],
"video": {
"id": "M05",
"src": "video/M05-lesson-720p.mp4",
"poster": "video/M05-lesson-poster.jpg",
"vtt": "video/M05-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M05 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M06",
@@ -250,7 +305,18 @@
],
"warnings": [
"UV 操作需要可写原生 UV 区域;如果提示未提交,先确认已进入编辑模式。"
]
],
"video": {
"id": "M06",
"src": "video/M06-lesson-720p.mp4",
"poster": "video/M06-lesson-poster.jpg",
"vtt": "video/M06-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M06 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M07",
@@ -287,7 +353,18 @@
],
"warnings": [
"库链接图像会被原生拒绝(cannot modify linked library images);请先导入本地图片。"
]
],
"video": {
"id": "M07",
"src": "video/M07-lesson-720p.mp4",
"poster": "video/M07-lesson-poster.jpg",
"vtt": "video/M07-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M07 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M08",
@@ -324,7 +401,18 @@
],
"warnings": [
"渲染依赖硬件 WebGL;SwiftShader 回退会失败并明确报错。"
]
],
"video": {
"id": "M08",
"src": "video/M08-lesson-720p.mp4",
"poster": "video/M08-lesson-poster.jpg",
"vtt": "video/M08-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M08 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M09",
@@ -361,7 +449,18 @@
],
"warnings": [
"导出 GLB 不会包含未打包的外部资源;课程资产已打包。"
]
],
"video": {
"id": "M09",
"src": "video/M09-lesson-720p.mp4",
"poster": "video/M09-lesson-poster.jpg",
"vtt": "video/M09-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M09 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M10",
@@ -398,7 +497,18 @@
],
"warnings": [
"动画工作区右上角的 Camera Perspective 是布局示意;完整相机视图在 Layout 工作区。"
]
],
"video": {
"id": "M10",
"src": "video/M10-lesson-720p.mp4",
"poster": "video/M10-lesson-poster.jpg",
"vtt": "video/M10-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M10 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M11",
@@ -439,7 +549,18 @@
],
"warnings": [
"IMAGE/RENDER_LAYER 节点可以本地求值,但暂不写入 Main;保存前请移除或替换为 RGB。"
]
],
"video": {
"id": "M11",
"src": "video/M11-lesson-720p.mp4",
"poster": "video/M11-lesson-poster.jpg",
"vtt": "video/M11-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M11 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M12",
@@ -476,7 +597,18 @@
],
"warnings": [
"节点位置目前只在当前会话保存;保存重开保留节点和连线,但可能重置布局。"
]
],
"video": {
"id": "M12",
"src": "video/M12-lesson-720p.mp4",
"poster": "video/M12-lesson-poster.jpg",
"vtt": "video/M12-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M12 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M13",
@@ -513,7 +645,18 @@
],
"warnings": [
"Spreadsheet 不读取 GN 修改器求值后的属性域;它显示当前网格缓冲。"
]
],
"video": {
"id": "M13",
"src": "video/M13-lesson-720p.mp4",
"poster": "video/M13-lesson-poster.jpg",
"vtt": "video/M13-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M13 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M14",
@@ -550,7 +693,18 @@
],
"warnings": [
"关闭浏览器前确认保存状态;未保存的编辑只在当前会话和恢复检查点中。"
]
],
"video": {
"id": "M14",
"src": "video/M14-lesson-720p.mp4",
"poster": "video/M14-lesson-poster.jpg",
"vtt": "video/M14-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M14 动手操作录像,中文配音与字幕。"
}
},
{
"id": "M15",
@@ -587,7 +741,18 @@
],
"warnings": [
"脚本可修改 Main;执行前先保存到 OPFS 并保留撤销点。"
]
],
"video": {
"id": "M15",
"src": "video/M15-lesson-720p.mp4",
"poster": "video/M15-lesson-poster.jpg",
"vtt": "video/M15-lesson.zh-Hans.vtt",
"durationTargetSeconds": [
180,
480
],
"note": "M15 动手操作录像,中文配音与字幕。"
}
}
]
}

View File

@@ -55,6 +55,7 @@
<p class="course-summary">认识顶栏、工作区标签、三维视口、大纲视图和属性面板;打开练习工程并理解 OPFS 保存。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>找到并切换工作区</li><li>用“打开 .blend”载入练习工程</li><li>区分保存到 OPFS 与手动下载 .blend</li></ul></div>
<section class="course-module-video" data-module-video="M01"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M01-lesson-720p.mp4" poster="video/M01-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M01-lesson.zh-Hans.vtt" default /></video><p>M01 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>在浏览器打开 /?ui=web 。如果是远端地址,先等待底部 wasm 加载完成,状态栏出现 SceneIR。</p><figure><img src="steps/M01-interface.jpg" alt="界面、工作区、文件打开与保存 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M01 · 步骤 1</figcaption></figure></li>
<li><p>顶部蓝色标签是工作区:Layout、Modeling、Sculpting、UV Editing、Texture Paint、Shading、Animation、Rendering、Compositing、Geometry Nodes、Scripting。课程会逐个使用。</p><figure><img src="steps/M01-interface.jpg" alt="界面、工作区、文件打开与保存 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M01 · 步骤 2</figcaption></figure></li>
@@ -72,6 +73,7 @@
<p class="course-summary">在三维视口旋转、平移、缩放;从大纲视图选择对象;用操作搜索找到桌面版同名命令。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>使用鼠标中键旋转、Shift+中键平移、滚轮缩放</li><li>在大纲视图选择活动对象</li><li>用 F3 搜索并执行操作</li></ul></div>
<section class="course-module-video" data-module-video="M02"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M02-lesson-720p.mp4" poster="video/M02-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M02-lesson.zh-Hans.vtt" default /></video><p>M02 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>在 Layout 工作区,按住鼠标中键拖动旋转视角;Shift+中键平移;滚轮缩放。视口右上角的导航球可以恢复轴向视图。</p><figure><img src="steps/M02-layout.jpg" alt="导航、选择与变换 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M02 · 步骤 1</figcaption></figure></li>
<li><p>右侧大纲视图列出场景对象。单击一个对象即可设为活动对象;视口与属性面板会同步更新。</p><figure><img src="steps/M02-selection.jpg" alt="导航、选择与变换 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M02 · 步骤 2</figcaption></figure></li>
@@ -88,6 +90,7 @@
<p class="course-summary">进入编辑模式,认识顶点/边/面选择,执行挤出、倒角、细分等常用网格操作。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>在物体模式与编辑模式之间切换</li><li>切换 1/2/3 选择模式</li><li>执行一次挤出或倒角并撤销</li></ul></div>
<section class="course-module-video" data-module-video="M03"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M03-lesson-720p.mp4" poster="video/M03-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M03-lesson.zh-Hans.vtt" default /></video><p>M03 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>切换到 Modeling 工作区。左侧快捷栏提供 Add Cube、Add Monkey、Duplicate、Delete 等对象操作。</p><figure><img src="steps/M03-workspace.jpg" alt="网格编辑建模 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M03 · 步骤 1</figcaption></figure></li>
<li><p>点击左上角模式按钮(Object Mode),选择“编辑模式”。视口进入 Edit Mode,并显示网格元素。</p><figure><img src="steps/M03-edit-mode.jpg" alt="网格编辑建模 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M03 · 步骤 2</figcaption></figure></li>
@@ -104,6 +107,7 @@
<p class="course-summary">在属性面板查看并编辑修改器栈;理解修改器是非破坏性的,渲染和导出时才求值。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>找到修改器面板</li><li>添加/启用/应用一个修改器</li><li>理解修改器与网格编辑的区别</li></ul></div>
<section class="course-module-video" data-module-video="M04"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M04-lesson-720p.mp4" poster="video/M04-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M04-lesson.zh-Hans.vtt" default /></video><p>M04 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>选中猴头,在 Layout 工作区查看右侧属性面板。向下滚动到 Modifiers 区域。</p><figure><img src="steps/M04-properties.jpg" alt="修改器 Bevel/Boolean/Mirror/Array 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M04 · 步骤 1</figcaption></figure></li>
<li><p>修改器会按顺序求值。点击添加修改器,选择 Bevel、Boolean、Mirror 或 Array;调整参数后视口立即更新。</p><figure><img src="steps/M04-modifier-stack.jpg" alt="修改器 Bevel/Boolean/Mirror/Array 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M04 · 步骤 2</figcaption></figure></li>
@@ -119,6 +123,7 @@
<p class="course-summary">在 Shading 工作区认识材质槽、节点编辑器和 RE 5000PBR 资产库;双击资产分配材质。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>切换 Shading 工作区</li><li>从资产库分配一个 PBR 材质</li><li>在材质属性中确认 Base Color 贴图</li></ul></div>
<section class="course-module-video" data-module-video="M05"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M05-lesson-720p.mp4" poster="video/M05-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M05-lesson.zh-Hans.vtt" default /></video><p>M05 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>切换到 Shading 工作区。上方是 Shader Editor,右侧是材质属性,左下是 PBR 资产库。</p><figure><img src="steps/M05-shader-workspace.jpg" alt="材质与 Shader/PBR 资产库 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M05 · 步骤 1</figcaption></figure></li>
<li><p>在“资产来源”下拉框选择 library:re-pbr-v1,只显示六张 RE 材质卡片。单击只选中,双击才分配。</p><figure><img src="steps/M05-asset-library.jpg" alt="材质与 Shader/PBR 资产库 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M05 · 步骤 2</figcaption></figure></li>
@@ -135,6 +140,7 @@
<p class="course-summary">在 UV Editing 工作区进入编辑模式,全选 UV、执行展开并提交;保存重开后 UV 仍然存在。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>在 ?ui=web 下找到可写 UV 区域</li><li>全选并展开 UV</li><li>保存到 OPFS 后重开确认 UV 未丢失</li></ul></div>
<section class="course-module-video" data-module-video="M06"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M06-lesson-720p.mp4" poster="video/M06-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M06-lesson.zh-Hans.vtt" default /></video><p>M06 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>切换到 UV Editing 工作区。左侧是原生 UV 编辑器,右侧是三维视口。桌面 Blender 要求网格处于编辑模式,本课程也显式进入编辑模式。</p><figure><img src="steps/M06-uv-workspace.jpg" alt="UV 展开与贴图准备 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M06 · 步骤 1</figcaption></figure></li>
<li><p>点击“全选 UV”,等待 UV 编辑器显示“UV 选择已提交”。橙色点是选中的 UV。</p><figure><img src="steps/M06-uv-workspace.jpg" alt="UV 展开与贴图准备 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M06 · 步骤 2</figcaption></figure></li>
@@ -151,6 +157,7 @@
<p class="course-summary">导入本地 Base Color 贴图,在 Texture Paint 工作区用画笔绘制一条笔画,一次提交并撤销。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>给猴头分配带贴图的材质</li><li>选择图像并调整画笔颜色/大小/强度</li><li>绘制、撤销、保存重开</li></ul></div>
<section class="course-module-video" data-module-video="M07"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M07-lesson-720p.mp4" poster="video/M07-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M07-lesson.zh-Hans.vtt" default /></video><p>M07 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>按 M05 分配 black_tiles_wall,并在材质属性中导入课程图片 re-texture-base.png,设为 Base Color 的“材质图片”。</p><figure><img src="steps/M07-texture-paint.jpg" alt="Texture Paint 手绘贴图 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M07 · 步骤 1</figcaption></figure></li>
<li><p>切换到 Texture Paint 工作区。顶部选择纹理图像,左侧是图像画布,下面是绘制/擦除、颜色、大小、强度。</p><figure><img src="steps/M07-texture-paint.jpg" alt="Texture Paint 手绘贴图 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M07 · 步骤 2</figcaption></figure></li>
@@ -167,6 +174,7 @@
<p class="course-summary">在 Rendering 工作区设置相机、分辨率、曝光与位移,执行显卡 PBR 渲染。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>设置 1024×1024 场景相机渲染</li><li>理解最终材质视图与教学曝光</li><li>执行渲染并拿到结果</li></ul></div>
<section class="course-module-video" data-module-video="M08"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M08-lesson-720p.mp4" poster="video/M08-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M08-lesson.zh-Hans.vtt" default /></video><p>M08 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>切换到 Rendering 工作区。左侧是渲染结果视口,下方是 PBR 渲染练习面板,右侧是场景属性。</p><figure><img src="steps/M08-render-workspace.jpg" alt="灯光、相机与 PBR 渲染 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M08 · 步骤 1</figcaption></figure></li>
<li><p>视角预设选择“场景相机对齐”,分辨率 1024×1024,视图“最终材质”,教学曝光 0 EV,位移强度 1×。</p><figure><img src="steps/M08-pbr-panel.jpg" alt="灯光、相机与 PBR 渲染 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M08 · 步骤 2</figcaption></figure></li>
@@ -183,6 +191,7 @@
<p class="course-summary">检查渲染结果尺寸与耗时,下载 PNG,导出 GLB,并核对保存状态。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>确认渲染结果 1024×1024</li><li>下载 PNG</li><li>导出 GLB 并保存 OPFS</li></ul></div>
<section class="course-module-video" data-module-video="M09"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M09-lesson-720p.mp4" poster="video/M09-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M09-lesson.zh-Hans.vtt" default /></video><p>M09 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>渲染完成后,结果视口底部显示分辨率、字节数和 OPFS 引用。确认是 1024×1024。</p><figure><img src="steps/M09-render-result.jpg" alt="渲染结果、诊断与 GLB 导出 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M09 · 步骤 1</figcaption></figure></li>
<li><p>点击“下载 PNG”保存本地成片;这是显式手动下载。</p><figure><img src="steps/M09-render-result.jpg" alt="渲染结果、诊断与 GLB 导出 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M09 · 步骤 2</figcaption></figure></li>
@@ -199,6 +208,7 @@
<p class="course-summary">在 Animation 工作区跳帧、插入位置关键帧、播放并保存动作。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>切换 Animation 工作区</li><li>在指定帧插入位置关键帧</li><li>播放并确认关键帧出现在 Dope Sheet</li></ul></div>
<section class="course-module-video" data-module-video="M10"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M10-lesson-720p.mp4" poster="video/M10-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M10-lesson.zh-Hans.vtt" default /></video><p>M10 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>切换到 Animation 工作区。底部是时间线、Dope Sheet 和 NLA 编辑区。</p><figure><img src="steps/M10-animation-workspace.jpg" alt="时间线与关键帧动画 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M10 · 步骤 1</figcaption></figure></li>
<li><p>把当前帧改为 12,选中猴头,点击“插入位置关键帧”(按钮 Loc)。</p><figure><img src="steps/M10-keyframe.jpg" alt="时间线与关键帧动画 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M10 · 步骤 2</figcaption></figure></li>
@@ -215,6 +225,7 @@
<p class="course-summary">在 Compositing 工作区创建 RGB 与 Exposure 节点,连线到 Composite,执行并查看合成结果。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>添加节点并拖拽连线</li><li>编辑节点属性</li><li>执行合成并提交到原生 Main</li></ul></div>
<section class="course-module-video" data-module-video="M11"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M11-lesson-720p.mp4" poster="video/M11-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M11-lesson.zh-Hans.vtt" default /></video><p>M11 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>切换到 Compositing 工作区。画布默认有一个 Composite 输出节点,右侧是属性检查器和结果预览。</p><figure><img src="steps/M11-compositor.jpg" alt="Compositor 合成节点 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M11 · 步骤 1</figcaption></figure></li>
<li><p>在“添加节点类型”中选择 RGB 颜色,点击“添加节点”;再添加曝光 Exposure。</p><figure><img src="steps/M11-nodes-added.jpg" alt="Compositor 合成节点 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M11 · 步骤 2</figcaption></figure></li>
@@ -232,6 +243,7 @@
<p class="course-summary">在 Geometry Nodes 工作区添加 Transform 节点,与 Group Input 连线并提交,观察几何更新。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>读取当前网格的 Geometry Nodes 图</li><li>添加节点并连线</li><li>提交图并保存重开</li></ul></div>
<section class="course-module-video" data-module-video="M12"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M12-lesson-720p.mp4" poster="video/M12-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M12-lesson.zh-Hans.vtt" default /></video><p>M12 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>选中猴头,切换到 Geometry Nodes 工作区。上方是节点画布,右侧是节点检查器,下方是 Spreadsheet。</p><figure><img src="steps/M12-geometry-nodes.jpg" alt="Geometry Nodes 程序化建模 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M12 · 步骤 1</figcaption></figure></li>
<li><p>在“添加节点类型”中选择 GeometryNodeTransform,点击“添加节点”。画布出现新节点。</p><figure><img src="steps/M12-node-added.jpg" alt="Geometry Nodes 程序化建模 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M12 · 步骤 2</figcaption></figure></li>
@@ -248,6 +260,7 @@
<p class="course-summary">用 Spreadsheet 只读表查看对象、顶点、边、面、UV 与几何属性;过滤、列显示/重排并导出 CSV。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>切换数据源</li><li>过滤顶点并隐藏列</li><li>导出 CSV 且不修改场景</li></ul></div>
<section class="course-module-video" data-module-video="M13"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M13-lesson-720p.mp4" poster="video/M13-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M13-lesson.zh-Hans.vtt" default /></video><p>M13 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>在 Geometry Nodes 工作区下方打开 Spreadsheet。默认显示对象表:名称、类型、数据、可见性、位置。</p><figure><img src="steps/M13-objects.jpg" alt="Spreadsheet 数据检查 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M13 · 步骤 1</figcaption></figure></li>
<li><p>把数据源切到“顶点 Vertices”,可以看到 Position X/Y/Z 和 Normal 列。</p><figure><img src="steps/M13-vertices.jpg" alt="Spreadsheet 数据检查 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M13 · 步骤 2</figcaption></figure></li>
@@ -264,6 +277,7 @@
<p class="course-summary">使用 OPFS 保存与最近项目恢复;理解恢复检查点、错误提示和手动下载的边界。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>保存到 OPFS 并确认 SUCCEEDED</li><li>从最近项目重开</li><li>需要本地副本时手动下载</li></ul></div>
<section class="course-module-video" data-module-video="M14"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M14-lesson-720p.mp4" poster="video/M14-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M14-lesson.zh-Hans.vtt" default /></video><p>M14 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>点击顶栏“保存项目”。状态栏显示 data-user-action-save-status=SUCCEEDED,表示已写入 OPFS。</p><figure><img src="steps/M14-opfs-save.jpg" alt="保存、重开与异常恢复 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M14 · 步骤 1</figcaption></figure></li>
<li><p>刷新页面。最近项目下拉框出现刚才的工程;选择它并确认“不保存,继续”。</p><figure><img src="steps/M14-reopen.jpg" alt="保存、重开与异常恢复 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M14 · 步骤 2</figcaption></figure></li>
@@ -280,6 +294,7 @@
<p class="course-summary">在 Scripting 工作区查看文本编辑器、Python 控制台、Info 与操作历史;了解已支持与延期的能力。</p>
</header>
<div class="course-objectives"><h3>本模块目标</h3><ul><li>打开 Scripting 工作区</li><li>找到 Python 控制台和 Info</li><li>识别课程未覆盖的限制</li></ul></div>
<section class="course-module-video" data-module-video="M15"><h3>本模块操作录像</h3><video controls preload="metadata" src="video/M15-lesson-720p.mp4" poster="video/M15-lesson-poster.jpg" width="1280" height="720"><track kind="subtitles" srclang="zh-Hans" label="中文" src="video/M15-lesson.zh-Hans.vtt" default /></video><p>M15 动手操作录像,中文配音与字幕。</p></section>
<ol class="course-steps">
<li><p>切换到 Scripting 工作区。上方是文本编辑器,下方左侧是 Python 控制台,右侧是 Info 操作日志。</p><figure><img src="steps/M15-scripting.jpg" alt="脚本、支持矩阵与能力边界 第 1 步截图" loading="lazy" width="1600" height="900" /><figcaption>M15 · 步骤 1</figcaption></figure></li>
<li><p>Python 控制台在本机原生会话中执行;Web 会话是否可用取决于当前运行模式。</p><figure><img src="steps/M15-console.jpg" alt="脚本、支持矩阵与能力边界 第 2 步截图" loading="lazy" width="1600" height="900" /><figcaption>M15 · 步骤 2</figcaption></figure></li>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -0,0 +1,13 @@
WEBVTT
00:00:00.000 --> 00:00:27.024
M01 目标:本模块是M01:界面、工作区、文件打开与保存。认识顶栏、工作区标签、三维视口、大纲视图和属性面板;打开练习工程并理解 OPFS 保存。目标是:找到并切换工作区;用“打开 .blend”载入练习工程;区分保存到 OPFS 与手动下载 .blend。
00:00:30.527 --> 00:00:40.295
在浏览器打开 /?ui=web 。如果是远端地址,先等待:在浏览器打开 /?ui=web 。如果是远端地址,先等待底部 wasm 加载完成,状态栏出现 SceneIR。 顶部蓝色标签是工作区:Layout、Modeling、Sculpting、UV Editing、Texture Paint、Shading、Animation、Rendering、Compositing、Geometry Nodes、Scripting。课程会逐个使用。 点击顶栏“打开 .blend”(或按 F3 搜索“打开”),选择课程工程 studio.blend。等待状态栏对象数变为 6。
00:00:43.797 --> 00:00:59.301
顶部蓝色标签是工作区:Layout、Modeling、S:再打开 re/猴头.glb。GLB 会追加到当前场景,对象数从 6 变为 7,活动对象是 Suzanne。 点击“保存项目”。它写入浏览器 OPFS,并显示保存状态 SUCCEEDED;不会下载文件。需要本地副本时,单独点击“下载 .blend”。
00:01:02.803 --> 00:01:26.899
M01 小结:本模块小结。工作区切换只改变布局,不改变场景数据。 状态栏右侧的引擎状态是判断操作是否真正提交的第一现场。 不要在保存流程中寻找自动下载;下载是独立的手动动作。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@@ -0,0 +1,16 @@
WEBVTT
00:00:00.000 --> 00:00:24.912
M02 目标:本模块是M02:导航、选择与变换。在三维视口旋转、平移、缩放;从大纲视图选择对象;用操作搜索找到桌面版同名命令。目标是:使用鼠标中键旋转、Shift+中键平移、滚轮缩放;在大纲视图选择活动对象;用 F3 搜索并执行操作。
00:00:28.416 --> 00:00:49.896
在 Layout 工作区,按住鼠标中键拖动旋转视角;Sh:在 Layout 工作区,按住鼠标中键拖动旋转视角;Shift+中键平移;滚轮缩放。视口右上角的导航球可以恢复轴向视图。 右侧大纲视图列出场景对象。单击一个对象即可设为活动对象;视口与属性面板会同步更新。
00:00:53.400 --> 00:01:13.584
右侧大纲视图列出场景对象。单击一个对象即可设为活动对象;:按 F3 打开操作搜索,输入“移动”,可以看到与桌面 Blender 对齐的命令。选中命令后按提示在视口或属性中完成操作。 练习:选中猴头,在属性面板把位置 Z 改为 0.5,再改回 0;观察视口和状态栏。
00:01:17.087 --> 00:01:37.271
按 F3 打开操作搜索,输入“移动”,可以看到与桌面 B:按 F3 打开操作搜索,输入“移动”,可以看到与桌面 Blender 对齐的命令。选中命令后按提示在视口或属性中完成操作。 练习:选中猴头,在属性面板把位置 Z 改为 0.5,再改回 0;观察视口和状态栏。
00:01:40.774 --> 00:02:06.142
M02 小结:本模块小结。属性面板的数值修改会进入原生 Main,并支持撤销。 不确定命令在哪时,优先用 F3 搜索,而不是猜菜单位置。 删除、布尔等破坏性操作先在练习工程上做,并记住撤销按钮。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@@ -0,0 +1,16 @@
WEBVTT
00:00:00.000 --> 00:00:21.264
M03 目标:本模块是M03:网格编辑建模。进入编辑模式,认识顶点/边/面选择,执行挤出、倒角、细分等常用网格操作。目标是:在物体模式与编辑模式之间切换;切换 1/2/3 选择模式;执行一次挤出或倒角并撤销。
00:00:24.773 --> 00:00:42.773
切换到 Modeling 工作区。左侧快捷栏提供 Add:切换到 Modeling 工作区。左侧快捷栏提供 Add Cube、Add Monkey、Duplicate、Delete 等对象操作。 点击左上角模式按钮(Object Mode),选择“编辑模式”。视口进入 Edit Mode,并显示网格元素。
00:00:46.274 --> 00:01:05.978
点击左上角模式按钮(Object Mode),选择“编辑:在视口上方选择 1 Vertex / 2 Edge / 3 Face,或使用工具栏按钮切换选择模式。点击 Select All 选中全部元素。 点击 EXTRUDE 或 BEVEL 执行一次操作;按撤销按钮恢复。注意状态栏是否显示命令已提交。
00:01:09.501 --> 00:01:29.205
在视口上方选择 1 Vertex / 2 Edge / :在视口上方选择 1 Vertex / 2 Edge / 3 Face,或使用工具栏按钮切换选择模式。点击 Select All 选中全部元素。 点击 EXTRUDE 或 BEVEL 执行一次操作;按撤销按钮恢复。注意状态栏是否显示命令已提交。
00:01:32.723 --> 00:01:57.635
M03 小结:本模块小结。编辑模式的选择集保存在原生 Main,可以撤销。 面模式下才能执行 TRIANGULATE 和 RECALCULATE NORMALS。 对高面数网格做全选挤出会明显变慢;课程使用 1225 顶点的猴头。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

View File

@@ -0,0 +1,13 @@
WEBVTT
00:00:00.000 --> 00:00:22.368
M04 目标:本模块是M04:修改器 Bevel/Boolean/Mirror/Array。在属性面板查看并编辑修改器栈;理解修改器是非破坏性的,渲染和导出时才求值。目标是:找到修改器面板;添加/启用/应用一个修改器;理解修改器与网格编辑的区别。
00:00:25.878 --> 00:00:44.502
选中猴头,在 Layout 工作区查看右侧属性面板。向下:选中猴头,在 Layout 工作区查看右侧属性面板。向下滚动到 Modifiers 区域。 修改器会按顺序求值。点击添加修改器,选择 Bevel、Boolean、Mirror 或 Array;调整参数后视口立即更新。
00:00:48.013 --> 00:00:54.949
修改器会按顺序求值。点击添加修改器,选择 Bevel、B:练习:给猴头添加 Bevel,宽度设为 0.01;观察面数变化后撤销。
00:00:58.452 --> 00:01:22.716
M04 小结:本模块小结。修改器栈顺序会影响结果,Boolean 通常放在最后。 应用修改器会改变网格数据;课程建议先保留修改器版本。 Boolean 需要封闭网格;非流形网格可能出现破面。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@@ -0,0 +1,13 @@
WEBVTT
00:00:00.000 --> 00:00:23.928
M05 目标:本模块是M05:材质与 Shader/PBR 资产库。在 Shading 工作区认识材质槽、节点编辑器和 RE 5000PBR 资产库;双击资产分配材质。目标是:切换 Shading 工作区;从资产库分配一个 PBR 材质;在材质属性中确认 Base Color 贴图。
00:00:27.438 --> 00:00:47.358
切换到 Shading 工作区。上方是 Shader E:切换到 Shading 工作区。上方是 Shader Editor,右侧是材质属性,左下是 PBR 资产库。 在“资产来源”下拉框选择 library:re-pbr-v1,只显示六张 RE 材质卡片。单击只选中,双击才分配。
00:00:50.865 --> 00:01:09.441
在“资产来源”下拉框选择 library:re-pbr-:双击 black_tiles_wall。等待材质槽显示 material:black_tiles_wall,并确认材质球状态为 COMPILED。 在材质属性中检查 Base Color 图片;M07 会在这张图上手绘。
00:01:12.946 --> 00:01:38.794
M05 小结:本模块小结。资产库缩略图加载需要时间,先等卡片出现再双击。 同一材质可以分配给多个对象;修改会影响所有使用者。 库链接贴图不能直接被纹理绘制修改;M07 会导入本地派生的 PNG。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@@ -0,0 +1,10 @@
WEBVTT
00:00:00.000 --> 00:00:24.888
M06 目标:本模块是M06:UV 展开与贴图准备。在 UV Editing 工作区进入编辑模式,全选 UV、执行展开并提交;保存重开后 UV 仍然存在。目标是:在 ?ui=web 下找到可写 UV 区域;全选并展开 UV;保存到 OPFS 后重开确认 UV 未丢失。
00:00:28.390 --> 00:01:07.078
切换到 UV Editing 工作区。左侧是原生 UV :切换到 UV Editing 工作区。左侧是原生 UV 编辑器,右侧是三维视口。桌面 Blender 要求网格处于编辑模式,本课程也显式进入编辑模式。 点击“全选 UV”,等待 UV 编辑器显示“UV 选择已提交”。橙色点是选中的 UV。 点击“展开所选 UV”,等待显示“展开 UV已提交”。视口和 UV 布局会更新。 点击顶栏“保存项目”写入 OPFS,然后从最近项目重新打开;UV 控件和选择仍然存在。
00:01:10.582 --> 00:01:36.190
M06 小结:本模块小结。展开前先标记缝合线,能得到更整齐的 UV 岛。 课程只使用角度展开;其他方法在 UV 控件中也有入口。 UV 操作需要可写原生 UV 区域;如果提示未提交,先确认已进入编辑模式。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -0,0 +1,10 @@
WEBVTT
00:00:00.000 --> 00:00:23.112
M07 目标:本模块是M07:Texture Paint 手绘贴图。导入本地 Base Color 贴图,在 Texture Paint 工作区用画笔绘制一条笔画,一次提交并撤销。目标是:给猴头分配带贴图的材质;选择图像并调整画笔颜色/大小/强度;绘制、撤销、保存重开。
00:00:26.616 --> 00:01:07.272
按 M05 分配 black_tiles_wall,并在:按 M05 分配 black_tiles_wall,并在材质属性中导入课程图片 re-texture-base.png,设为 Base Color 的“材质图片”。 切换到 Texture Paint 工作区。顶部选择纹理图像,左侧是图像画布,下面是绘制/擦除、颜色、大小、强度。 在画布上按住左键拖动,画出一条白色笔画。松开后显示“笔画已提交”,并增加一个 Main revision。 点击“撤销笔画”恢复原图;再点“重做笔画”。保存到 OPFS 后重开,笔画仍在。
00:01:10.797 --> 00:01:39.669
M07 小结:本模块小结。一次指针笔画只提交一次,避免每个采样点都写 Main。 图像越大,单次提交的 PNG 编码越慢;课程使用 1024×1024。 库链接图像会被原生拒绝(cannot modify linked library images);请先导入本地图片。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -0,0 +1,10 @@
WEBVTT
00:00:00.000 --> 00:00:23.832
M08 目标:本模块是M08:灯光、相机与 PBR 渲染。在 Rendering 工作区设置相机、分辨率、曝光与位移,执行显卡 PBR 渲染。目标是:设置 1024×1024 场景相机渲染;理解最终材质视图与教学曝光;执行渲染并拿到结果。
00:00:27.341 --> 00:01:03.989
切换到 Rendering 工作区。左侧是渲染结果视口,:切换到 Rendering 工作区。左侧是渲染结果视口,下方是 PBR 渲染练习面板,右侧是场景属性。 视角预设选择“场景相机对齐”,分辨率 1024×1024,视图“最终材质”,教学曝光 0 EV,位移强度 1×。 点击“渲染 PBR”。面板会等待纹理与环境贴图就绪,然后用 GPU 输出成片。 结果出现后,可在诊断视图切换 Base Color、Normal、Roughness 检查材质。
00:01:07.498 --> 00:01:30.874
M08 小结:本模块小结。深色材质只看整体亮度容易误判,切到 Base Color 更可靠。 完整操作录像见本页顶部“渲染专课”。 渲染依赖硬件 WebGL;SwiftShader 回退会失败并明确报错。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View File

@@ -0,0 +1,10 @@
WEBVTT
00:00:00.000 --> 00:00:23.016
M09 目标:本模块是M09:渲染结果、诊断与 GLB 导出。检查渲染结果尺寸与耗时,下载 PNG,导出 GLB,并核对保存状态。目标是:确认渲染结果 1024×1024;下载 PNG;导出 GLB 并保存 OPFS。
00:00:26.525 --> 00:00:57.413
渲染完成后,结果视口底部显示分辨率、字节数和 OPFS :渲染完成后,结果视口底部显示分辨率、字节数和 OPFS 引用。确认是 1024×1024。 点击“下载 PNG”保存本地成片;这是显式手动下载。 点击顶栏“导出 GLB”导出当前场景;导出前确认对象数和活动对象。 点击“保存项目”写入 OPFS;重新打开最近项目,确认材质和相机仍在。
00:01:00.915 --> 00:01:23.859
M09 小结:本模块小结。渲染耗时受分辨率、贴图大小和显卡影响。 诊断报告按钮会记录失败阶段,便于定位。 导出 GLB 不会包含未打包的外部资源;课程资产已打包。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

View File

@@ -0,0 +1,10 @@
WEBVTT
00:00:00.000 --> 00:00:19.608
M10 目标:本模块是M10:时间线与关键帧动画。在 Animation 工作区跳帧、插入位置关键帧、播放并保存动作。目标是:切换 Animation 工作区;在指定帧插入位置关键帧;播放并确认关键帧出现在 Dope Sheet。
00:00:23.113 --> 00:00:50.257
切换到 Animation 工作区。底部是时间线、Dop:切换到 Animation 工作区。底部是时间线、Dope Sheet 和 NLA 编辑区。 把当前帧改为 12,选中猴头,点击“插入位置关键帧”(按钮 Loc)。 再跳到第 48 帧,移动对象后插入第二个位置关键帧;点击播放观察插值。 保存到 OPFS 后重开,Dope Sheet 中仍能看到关键帧。
00:00:53.764 --> 00:01:18.268
M10 小结:本模块小结。Loc/Rot/Scale 分别插入位置、旋转和缩放关键帧。 删除关键帧只删除当前帧的对应通道。 动画工作区右上角的 Camera Perspective 是布局示意;完整相机视图在 Layout 工作区。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@@ -0,0 +1,10 @@
WEBVTT
00:00:00.000 --> 00:00:21.168
M11 目标:本模块是M11:Compositor 合成节点。在 Compositing 工作区创建 RGB 与 Exposure 节点,连线到 Composite,执行并查看合成结果。目标是:添加节点并拖拽连线;编辑节点属性;执行合成并提交到原生 Main。
00:00:24.671 --> 00:01:07.991
切换到 Compositing 工作区。画布默认有一个 :切换到 Compositing 工作区。画布默认有一个 Composite 输出节点,右侧是属性检查器和结果预览。 在“添加节点类型”中选择 RGB 颜色,点击“添加节点”;再添加曝光 Exposure。 从 RGB 的输出端口拖到 Exposure 的输入端口;再从 Exposure 拖到 Composite 的 Image 输入。 选中 Exposure,把曝光改为 1.5;点击“执行合成”,右侧预览会显示提亮后的颜色。 点击“提交图”写入原生 CompositorNodeTree;保存 OPFS 后重开,节点、连线、位置和属性都保留。
00:01:11.495 --> 00:01:39.599
M11 小结:本模块小结。Blur、Mix、Alpha Over、Transform 也在同一画布中;Mix 需要 A/B 两路输入。 Viewer 节点会显示在当前阶段的结果。 IMAGE/RENDER_LAYER 节点可以本地求值,但暂不写入 Main;保存前请移除或替换为 RGB。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

View File

@@ -0,0 +1,10 @@
WEBVTT
00:00:00.000 --> 00:00:21.360
M12 目标:本模块是M12:Geometry Nodes 程序化建模。在 Geometry Nodes 工作区添加 Transform 节点,与 Group Input 连线并提交,观察几何更新。目标是:读取当前网格的 Geometry Nodes 图;添加节点并连线;提交图并保存重开。
00:00:24.867 --> 00:01:00.195
选中猴头,切换到 Geometry Nodes 工作区。:选中猴头,切换到 Geometry Nodes 工作区。上方是节点画布,右侧是节点检查器,下方是 Spreadsheet。 在“添加节点类型”中选择 GeometryNodeTransform,点击“添加节点”。画布出现新节点。 从 Group Input 的 Geometry 端口拖到 Transform 的 Geometry 输入;再把 Transform 输出连到 Group Output。 在检查器修改平移/缩放默认值,点击“提交图”。网格随修改器更新,版本号增加。
00:01:03.713 --> 00:01:30.641
M12 小结:本模块小结。课程只使用 allowlist 中的 16 类节点,避免构造无法执行的图。 提交失败时,检查器会显示具体节点或 socket 错误。 节点位置目前只在当前会话保存;保存重开保留节点和连线,但可能重置布局。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View File

@@ -0,0 +1,10 @@
WEBVTT
00:00:00.000 --> 00:00:22.152
M13 目标:本模块是M13:Spreadsheet 数据检查。用 Spreadsheet 只读表查看对象、顶点、边、面、UV 与几何属性;过滤、列显示/重排并导出 CSV。目标是:切换数据源;过滤顶点并隐藏列;导出 CSV 且不修改场景。
00:00:25.654 --> 00:00:59.110
在 Geometry Nodes 工作区下方打开 Spr:在 Geometry Nodes 工作区下方打开 Spreadsheet。默认显示对象表:名称、类型、数据、可见性、位置。 把数据源切到“顶点 Vertices”,可以看到 Position X/Y/Z 和 Normal 列。 在过滤框输入 0.5,只剩包含该值的行;在“列”面板隐藏 index 或调整列顺序。 点击“导出 CSV”手动下载当前可见列。Spreadsheet 是只读的,不会产生 Main revision。
00:01:02.610 --> 00:01:28.914
M13 小结:本模块小结。顶点/边/面/UV 读取当前网格缓冲;属性表列出 position、normal、UVMap 等。 单表最多 50,000 行,超出会在脚注提示。 Spreadsheet 不读取 GN 修改器求值后的属性域;它显示当前网格缓冲。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -0,0 +1,16 @@
WEBVTT
00:00:00.000 --> 00:00:22.656
M14 目标:本模块是M14:保存、重开与异常恢复。使用 OPFS 保存与最近项目恢复;理解恢复检查点、错误提示和手动下载的边界。目标是:保存到 OPFS 并确认 SUCCEEDED;从最近项目重开;需要本地副本时手动下载。
00:00:26.161 --> 00:00:43.777
点击顶栏“保存项目”。状态栏显示 data-user-a:点击顶栏“保存项目”。状态栏显示 data-user-action-save-status=SUCCEEDED,表示已写入 OPFS。 刷新页面。最近项目下拉框出现刚才的工程;选择它并确认“不保存,继续”。
00:00:47.280 --> 00:01:03.216
刷新页面。最近项目下拉框出现刚才的工程;选择它并确认“不:重开后检查对象数、活动对象、材质槽、UV 选择和渲染结果是否仍在。 如需本地文件,单独点击“下载 .blend”;不要把自动下载当作保存流程的一部分。
00:01:06.721 --> 00:01:22.657
重开后检查对象数、活动对象、材质槽、UV 选择和渲染结果:重开后检查对象数、活动对象、材质槽、UV 选择和渲染结果是否仍在。 如需本地文件,单独点击“下载 .blend”;不要把自动下载当作保存流程的一部分。
00:01:26.166 --> 00:01:54.054
M14 小结:本模块小结。恢复失败时,页面会显示错误阶段;先导出诊断报告再重试。 OPFS 数据与浏览器配置绑定,清理站点数据会删除工程。 关闭浏览器前确认保存状态;未保存的编辑只在当前会话和恢复检查点中。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -0,0 +1,10 @@
WEBVTT
00:00:00.000 --> 00:00:22.584
M15 目标:本模块是M15:脚本、支持矩阵与能力边界。在 Scripting 工作区查看文本编辑器、Python 控制台、Info 与操作历史;了解已支持与延期的能力。目标是:打开 Scripting 工作区;找到 Python 控制台和 Info;识别课程未覆盖的限制。
00:00:26.093 --> 00:01:01.445
切换到 Scripting 工作区。上方是文本编辑器,下:切换到 Scripting 工作区。上方是文本编辑器,下方左侧是 Python 控制台,右侧是 Info 操作日志。 Python 控制台在本机原生会话中执行;Web 会话是否可用取决于当前运行模式。 Info 区域显示最近命令;失败命令会给出错误码和阶段,便于定位。 已知限制:多区域 split/join、完整 Driver 编辑器、完整节点/画笔目录、生产级 UDIM/4K 纹理绘制尚未完成。
00:01:04.951 --> 00:01:33.487
M15 小结:本模块小结。支持矩阵与最新进度见 docs/status/WEB_BLENDER_FULL_COURSE_20261113.md。 课程不宣称完整 Blender parity。 脚本可修改 Main;执行前先保存到 OPFS 并保留撤销点。 保存仍使用浏览器 OPFS,需要本地文件时再手动下载。