TinyGlade造景工具逆向拆解:程序化生成与实时交互实现思路
1. 从一款治愈系造景工具说起为什么值得拆解它的实现思路第一次看到 TinyGlade 的演示画面时我的反应和大多数人一样——这玩意儿也太舒服了。没有资源管理没有战斗数值没有任务清单你只是在一块空地上拖拽鼠标城墙就沿着你画的路径自己长出来藤蔓顺着墙壁攀爬小石子路蜿蜒到河边整个过程像在捏一块会自己生长的橡皮泥。它把造景这件事从繁琐的建模操作里彻底解放了出来玩家不需要懂任何三维软件的操作逻辑凭直觉就能搭出一座有模有样的小城堡。这款工具的核心价值在于它重新定义了低门槛创作的边界。传统的三维场景搭建哪怕是用最傻瓜化的引擎你也得理解网格、材质、光照、碰撞体这些概念。但 TinyGlade 把这些全藏起来了用户面对的只有我想在这里放一堵墙我想让这条路拐个弯这样的直觉操作。它解决的不是如何建模的问题而是如何让没有建模基础的人也能享受空间创作的乐趣这个问题。适合参考这篇内容的人有三类一是对程序化生成感兴趣但不知从何下手的开发者二是想了解现代交互式创作工具设计思路的产品人三是单纯好奇这效果到底怎么实现的的技术爱好者。我会从逆向拆解的角度把这类工具背后的核心技术点、实现思路和实操中会遇到的坑用尽量直白的方式讲清楚。需要提前说明的是我并没有拿到 TinyGlade 的源码以下所有分析都是基于公开演示、技术分享和同类项目的实现经验做的合理推断重点在于讲清楚如果我来做类似的东西会怎么设计。2. 核心机制拆解程序化生成与交互设计的结合点2.1 为什么传统建模流程在这里行不通要理解 TinyGlade 这类工具的设计逻辑得先明白它和传统建模工具的根本差异。在 Blender 或 Maya 里你创建一个立方体然后通过挤出、倒角、细分等操作一步步塑造形状。这个过程是显式的——每一步操作都直接对应网格顶点的变化用户需要理解这些操作对几何体的影响。但 TinyGlade 走的是另一条路用户画一条线系统根据这条线自动生成一堵墙墙的高度、厚度、砖块排列方式全由算法决定。这背后的核心思路是约束求解加程序化生成。用户输入的不是具体的几何数据而是一组约束条件——路径的走向、区域的边界、笔刷的粗细。系统拿到这些约束后通过一套预设的生成规则自动计算出符合约束的几何体。这样做的好处是用户不需要关心实现细节坏处是生成结果的可控性完全取决于算法设计者的规则覆盖范围。我试过用类似思路做过一个小型的栅栏生成器用户画一条曲线程序沿着曲线等距放置栅栏柱然后在柱子之间生成横杆。听起来简单但实际做起来要考虑的问题一大堆曲线拐弯太急时柱子会重叠怎么办地面有起伏时栅栏怎么贴合用户想要不同样式的栅栏怎么切换这些问题在 TinyGlade 里同样存在只是它处理得更优雅。2.2 路径生成算法的选择与取舍TinyGlade 里最核心的交互就是画路径然后生成结构。城墙、道路、篱笆、河流本质上都是沿着一条用户绘制的曲线生成对应的几何体。这里面的技术选型有几个关键决策点。第一个决策是曲线表示方式。常见的选择有贝塞尔曲线、Catmull-Rom 样条、以及基于点的折线。贝塞尔曲线控制灵活但需要额外的控制点操作Catmull-Rom 样条会自动平滑通过所有输入点折线最简单但不够平滑。从 TinyGlade 的操作手感来看它大概率用的是 Catmull-Rom 或者类似的插值样条因为用户只需要拖拽鼠标画出大致路径系统就会自动平滑处理不需要额外调整控制柄。第二个决策是采样密度。曲线是连续的但生成几何体时需要离散化。采样太密会导致顶点数爆炸采样太疏则拐角处会出现明显的棱角。常见的做法是根据曲率自适应采样——直线段少采样弯道处多采样。我在自己的项目里试过固定步长采样结果就是画大圆弧时性能还行但画小半径弯道时要么棱角分明要么顶点数飙升。后来改成基于弧长和曲率双重控制的采样策略效果好了很多。第三个决策是截面形状的生成方式。一堵墙的截面可能是一个矩形但 TinyGlade 里的墙有砖块纹理、有顶部盖瓦、有底部基座。这些细节如果全部用几何体表现顶点数会非常可观。合理的做法是主体结构用低模加纹理只有近距离观察时才通过细分或置换贴图增加细节。这种 LOD 思路在实时渲染里是标配但要在程序化生成阶段就规划好不同层级的几何复杂度需要提前设计好生成管线。2.3 交互反馈的实时性保障TinyGlade 最让人上瘾的地方在于它的即时反馈——鼠标拖到哪里结构就实时生成到哪里没有任何卡顿或延迟感。这种体验背后是大量的性能优化工作。首先是增量更新。用户修改路径时不需要重新生成整个场景只需要更新受影响的局部区域。这要求系统维护一个空间索引结构能够快速定位到哪些几何体需要重新计算。常见的做法是用网格划分或者四叉树来管理场景对象路径修改时只重建与修改区域相交的网格单元。其次是异步计算。复杂的几何生成和网格重建如果全部放在主线程帧率必然受影响。合理的做法是把生成任务拆分成小块分配到工作线程去处理主线程只负责最终的合并和渲染。我在一个地形编辑项目里用过这种方案用户拖动笔刷时后台线程在计算新的地形网格前台用低精度的预览网格先顶着等计算完成后再无缝替换。TinyGlade 的流畅感很可能也用了类似的策略。还有一个容易被忽视的点是生成规则的缓存。很多生成参数在用户操作过程中是不变的比如砖块的尺寸、藤蔓的生长规则、石头的分布密度。这些可以预先计算好并缓存起来实际生成时只需要查表或做简单变换能省下大量重复计算。3. 从零搭建一个简易版造景工具实操过程记录3.1 环境准备与技术栈选择假设我们要做一个类似 TinyGlade 的简易造景工具第一步是选技术栈。如果是 Web 端Three.js 是最成熟的选择生态完善社区资源多。如果追求更好的性能和更底层的控制可以用 Rust 加 wgpu或者 C 加 OpenGL/Vulkan。考虑到开发效率和可分享性我选择用 Three.js 来做演示浏览器打开就能跑方便读者直接复现。项目的基础依赖很简单Three.js 负责渲染一个样条曲线库处理路径平滑或者自己实现 Catmull-Rom再加上一个简单的前端框架来管理 UI 状态。不需要物理引擎不需要复杂的着色器先把核心的画路径生成几何体这个流程跑通。初始化场景的代码很标准创建场景、相机、渲染器加一个环境光和一个方向光地面用一个大的平面网格。这里有个小细节——地面的网格线要足够淡不能干扰用户观察生成的结构但又要提供足够的空间参考。我试过完全去掉网格线结果用户很难判断自己画的结构在空间中的位置关系后来改成用很淡的虚线网格效果好很多。// 场景初始化核心代码 const scene new THREE.Scene(); scene.background new THREE.Color(0x1a1a2e); const camera new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.set(10, 15, 10); camera.lookAt(0, 0, 0); const renderer new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); renderer.shadowMap.enabled true; document.body.appendChild(renderer.domElement); // 地面网格 const gridHelper new THREE.GridHelper(50, 50, 0x333355, 0x222244); scene.add(gridHelper);3.2 路径绘制与样条平滑的实现用户交互的核心是鼠标拖拽绘制路径。在 Three.js 里这需要把屏幕坐标转换成世界坐标中的地面平面交点。做法是用 Raycaster 从相机发射一条射线与地面平面求交得到鼠标在地面上的位置。const raycaster new THREE.Raycaster(); const mouse new THREE.Vector2(); const groundPlane new THREE.Plane(new THREE.Vector3(0, 1, 0), 0); function getGroundPoint(event) { mouse.x (event.clientX / window.innerWidth) * 2 - 1; mouse.y -(event.clientY / window.innerHeight) * 2 1; raycaster.setFromCamera(mouse, camera); const point new THREE.Vector3(); raycaster.ray.intersectPlane(groundPlane, point); return point; }拿到一系列地面点后需要做平滑处理。Catmull-Rom 样条的特点是曲线会通过所有控制点而且计算简单。Three.js 内置了CatmullRomCurve3直接传入点数组就能得到平滑曲线。const points []; // 用户绘制的原始点 const curve new THREE.CatmullRomCurve3(points); const smoothPoints curve.getPoints(100); // 采样100个点这里有个实操心得原始点不能太密否则样条会过度拟合产生抖动。我的做法是设置一个最小距离阈值鼠标移动距离小于这个阈值时不记录新点。阈值太小会导致点太密太大则曲线不够贴合用户意图。经过几次测试在地面尺度为 50 单位的情况下0.5 到 1.0 的阈值比较合适。3.3 沿路径生成墙体几何体有了平滑后的路径点接下来就是沿路径生成墙体。核心思路是对路径上的每个采样点计算该点的切线方向然后沿垂直于切线的方向即墙的厚度方向生成两个顶点再根据墙的高度生成上下两排顶点最后用三角形把这些顶点连接起来。function generateWall(pathPoints, height, thickness) { const vertices []; const indices []; for (let i 0; i pathPoints.length; i) { const point pathPoints[i]; // 计算切线方向 const tangent i pathPoints.length - 1 ? new THREE.Vector3().subVectors(pathPoints[i 1], point).normalize() : new THREE.Vector3().subVectors(point, pathPoints[i - 1]).normalize(); // 计算法线方向垂直于切线在地面平面上 const normal new THREE.Vector3(-tangent.z, 0, tangent.x).normalize(); // 生成四个顶点底部左、底部右、顶部左、顶部右 const halfThickness thickness / 2; const bottomLeft point.clone().addScaledVector(normal, -halfThickness); const bottomRight point.clone().addScaledVector(normal, halfThickness); const topLeft bottomLeft.clone().add(new THREE.Vector3(0, height, 0)); const topRight bottomRight.clone().add(new THREE.Vector3(0, height, 0)); vertices.push(bottomLeft, bottomRight, topLeft, topRight); } // 生成三角形索引... return { vertices, indices }; }这段代码看起来简单但实际跑起来会遇到几个问题。第一个问题是拐角处的接缝——当路径转弯时相邻两个采样点的法线方向不同生成的墙体在拐角处会出现重叠或缝隙。解决办法是在拐角处做额外的处理比如计算角平分线方向或者用更密的采样来减小误差。TinyGlade 里的城墙在拐角处看起来非常自然说明它在拐角处理上下了功夫可能是用了基于角度阈值的自适应细分。第二个问题是墙的端头处理。路径的起点和终点如果没有封口从某些角度看会露出内部的空腔。简单的做法是在端头加一个盖面但更优雅的方式是让端头的形状根据墙的类型自动调整——比如城墙的端头可能是塔楼篱笆的端头可能是柱子。3.4 材质与纹理的自动适配几何体生成后需要给它上材质。TinyGlade 里的砖墙纹理不是简单平铺的砖块的排列会沿着墙的走向自动调整拐角处的砖块也有特殊的处理。这种效果用普通的 UV 映射很难实现需要根据路径的弧长来动态计算 UV 坐标。// 根据弧长计算U坐标V坐标根据高度归一化 let accumulatedLength 0; for (let i 0; i pathPoints.length; i) { if (i 0) { accumulatedLength pathPoints[i].distanceTo(pathPoints[i - 1]); } const u accumulatedLength / textureRepeatLength; // 四个顶点的UV坐标 uvs.push( new THREE.Vector2(u, 0), // 底部左 new THREE.Vector2(u, 0), // 底部右厚度方向UV可以单独处理 new THREE.Vector2(u, 1), // 顶部左 new THREE.Vector2(u, 1) // 顶部右 ); }这样砖块纹理就会沿着墙的走向连续排列不会因为路径弯曲而拉伸变形。厚度方向的纹理需要单独处理通常用世界坐标或者局部坐标来映射保证砖块的厚度看起来一致。4. 逆向思维下的技术选型分析哪些方案值得借鉴4.1 程序化生成 vs 手工建模的边界在哪里拆解 TinyGlade 的过程中我一直在思考一个问题程序化生成的边界在哪里哪些东西适合用算法自动生成哪些必须留给用户手动调整从 TinyGlade 的设计来看它把结构性的东西交给了程序化生成——墙的走向、砖块的排列、藤蔓的分布、石头的散布这些都是有规律可循的算法可以处理得很好。但它也保留了一些手动调整的空间比如用户可以改变墙的高度、切换不同的建筑风格、调整植被的密度。这种程序化生成加参数化调整的组合既保证了操作的简便性又给了用户足够的控制感。我在自己的项目里试过全自动生成结果就是用户觉得这不是我想要的但我又不知道怎么改。后来加入了几个关键参数的滑块比如密度、高度、随机种子用户的满意度明显提升。这说明程序化生成工具的设计重点不是全自动而是在自动生成的基础上提供直观的调整手段。4.2 实时反馈的技术代价与优化策略TinyGlade 的实时反馈体验是有代价的。每次用户修改路径系统都需要重新计算几何体、更新网格、重新计算光照和阴影。如果场景规模大这个计算量相当可观。从技术角度分析它可能用了以下几种优化策略的组合。第一是分块生成把场景划分成固定大小的区块只重新生成受影响的区块。第二是LOD 分级远处的结构用低精度网格近处的用高精度。第三是延迟计算用户快速拖动时先用简化的预览停下来后再生成完整细节。第四是GPU 加速把部分生成逻辑放到计算着色器里执行。我在一个地形编辑项目里对比过 CPU 生成和 GPU 生成的性能差异。在生成规则简单的情况下两者差距不大但当生成规则复杂到需要大量分支判断时GPU 的并行优势就体现出来了。不过 GPU 生成的调试难度远高于 CPU需要权衡开发成本和运行效率。4.3 从 TinyGlade 看 Vibe Coding 的实践特征Vibe Coding这个词最近被讨论得很多大意是指一种更依赖直觉和氛围、而非严格工程规范的编程方式。从 TinyGlade 的设计哲学里我能看到一些相似的气质。它的交互设计不追求功能的完备性而是追求感觉对了。你画一条线墙就长出来了这个过程没有复杂的参数面板没有繁琐的确认步骤一切都跟着直觉走。这种设计思路要求开发者对用户想要什么有极强的同理心而不是堆砌功能。在实现层面Vibe Coding 往往意味着快速原型、频繁迭代、容忍一定程度的不完美。TinyGlade 的生成结果不是精确的工程模型砖块之间可能有微小的缝隙藤蔓的分布可能不完全均匀但这些不完美反而增加了场景的自然感。如果开发者一开始就追求完美的几何精度和严格的规则覆盖可能根本做不出这种轻松愉快的体验。5. 实操中容易踩的坑与排查技巧5.1 路径自交与重叠处理用户画路径时很容易画出自己交叉的曲线。比如画一个8字形的城墙或者路径绕了一圈又回到起点。这种情况下简单的沿路径生成算法会产生大量重叠的几何体不仅浪费性能视觉上也会出现难看的穿插。处理路径自交的常见做法是在生成前先做路径的简化与分段。可以用 Ramer-Douglas-Peucker 算法简化路径点然后用扫描线或者空间索引检测自交区域。对于自交的部分可以选择合并、裁剪或者直接提示用户重新绘制。TinyGlade 里似乎对路径自交有比较好的处理画交叉路径时生成的结构会自然融合不会出现明显的穿模。我在自己的项目里试过一种偷懒的做法检测到自交时只保留自交点之前的路径后面的直接忽略。用户体验很差因为画到一半突然不响应了。后来改成在自交点处自动分段每段独立生成然后在交点处做融合处理效果好很多。5.2 地面起伏时的贴合问题如果地面不是完全平坦的沿路径生成的墙体需要根据地面的高度做调整。简单的做法是每个采样点都从地面向上生成但这样墙的顶部会跟着地面起伏看起来像波浪。更好的做法是保持墙顶的水平只让墙的底部贴合地面。// 获取地面高度假设有高度图或射线检测 function getGroundHeight(x, z) { // 射线检测或采样高度图 return height; } // 生成时底部顶点用地面高度顶部顶点用统一高度 const groundY getGroundHeight(point.x, point.z); const bottomLeft new THREE.Vector3(point.x, groundY, point.z); const topLeft new THREE.Vector3(point.x, wallTopY, point.z);但这样又会出现新问题如果地面起伏很大墙的底部和地面之间会出现缝隙。解决办法是在底部额外生成一段裙边几何体向下延伸到地面以下或者用更密的采样来贴合地面。5.3 性能瓶颈的定位与优化当场景中的结构越来越多时性能问题会逐渐暴露。常见的瓶颈有三个顶点数过多、绘制调用过多、以及生成计算耗时过长。定位性能问题最直接的工具是浏览器的 Performance 面板或者引擎自带的 Profiler。先看帧时间主要消耗在哪里——是渲染还是脚本计算。如果是渲染再看是顶点处理还是像素填充。如果是脚本计算用console.time和console.timeEnd包裹关键函数找出耗时最长的部分。优化手段方面顶点数过多可以用 LOD 和网格简化来缓解绘制调用过多可以用 InstancedMesh 或者合并几何体来减少生成计算耗时可以用 Web Worker 或者分帧计算来分摊。我在一个场景里把上千个小石头的生成从主线程移到 Worker 后帧率从 30 提升到了稳定的 60。5.4 常见问题速查表问题现象可能原因排查思路解决方案路径拐弯处墙体出现缝隙采样密度不足或法线计算错误检查拐角处的采样点间距和法线方向增加曲率自适应采样拐角处做特殊处理纹理沿路径拉伸变形UV 坐标按顶点索引而非弧长计算检查 UV 生成逻辑改用弧长累积计算 U 坐标快速拖动时卡顿明显每帧都在重新生成完整几何体用 Performance 面板确认耗时分布加入节流和增量更新拖动时用简化预览场景规模大时帧率骤降绘制调用过多或顶点数爆炸查看渲染统计信息合并几何体启用 LOD使用 InstancedMesh墙体与地面之间有缝隙地面起伏但墙体底部未贴合检查地面高度采样逻辑底部顶点使用地面高度或生成裙边几何体6. 这类工具还能怎么扩展一些个人想法拆解完核心机制后我一直在想这类造景工具还能往哪些方向走。一个很自然的方向是增加生成规则的类型。TinyGlade 目前主要是建筑和植被如果加入地形雕刻、水体模拟、天气效果创作空间会大很多。但每增加一种规则交互设计和性能优化的工作量都会成倍增加需要谨慎权衡。另一个方向是引入简单的逻辑系统。比如让用户设置太阳位置变化时影子怎么移动下雨时屋顶的雨水怎么流下来。这需要把程序化生成和简单的物理模拟结合起来技术复杂度会上升一个台阶但能带来的沉浸感提升也很可观。还有一个我觉得很有意思的方向是生成结果的可导出性。TinyGlade 目前更像一个玩具用户在里面搭完场景后除了截图似乎没有太多导出选项。如果能导出为通用的三维格式或者直接导出为游戏引擎可用的资产它的实用价值会大大提升。当然这涉及到几何体的优化、材质的烘焙、LOD 的生成等一系列工程问题不是简单加个导出按钮就能解决的。我个人在实际操作中的体会是做这类工具最难的从来不是某个具体的技术点而是如何在生成规则的丰富度和用户操作的简洁性之间找到平衡。规则太少用户觉得受限规则太多用户又觉得复杂。TinyGlade 在这方面做得很好它的每一条生成规则都对应着一种直观的操作用户不需要学习成本就能理解。这种规则即操作的设计思路值得所有做创作工具的人参考。

相关新闻

Helm离线安装

Helm离线安装

文章目录一、引言二、离线安装Helm CLI2.1 下载二进制包2.2 离线安装2.3 验证安装三、总结一、引言 Helm是Kubernetes的包管理器,其核心价值在于将应用部署所需的全部Kubernetes资源定义,包括Deployment、Service、ConfigMap等封装为一个可版本化、可复…

2026/10/11 6:34:20 阅读更多 →
同样是hello!,Redis编码为什么不同?从SET和APPEND看字符串的历史

同样是hello!,Redis编码为什么不同?从SET和APPEND看字符串的历史

同样是 hello!,Redis 编码为什么不同? 我原本只想验证:Redis String 存数字和存文本时,内部是不是一样。实验里更有意思的却是另一件事:先 SET hello 再 APPEND !,与直接 SET hello!,读出来完全…

2026/10/11 6:33:20 阅读更多 →
软考高项备考:每日5题拆解挣值管理与关键路径

软考高项备考:每日5题拆解挣值管理与关键路径

3月12日,距离上半年软考高项(信息系统项目管理师)考试还有两个多月。这天晚上,我照例在备考群里发完当天的“每日5题”,顺手把解析整理到了个人笔记里。没想到五道题里有一道挣值管理的基础判断题,四个人错…

2026/10/11 6:33:20 阅读更多 →

最新新闻

C++20 Concepts实战:从模板约束到std::ranges联动

C++20 Concepts实战:从模板约束到std::ranges联动

做 C 这些年,模板写了无数行,也读了不少编译器吐出来的"天书"报错。每次有人跟我抱怨模板报错看不懂,我都觉得特别能理解——enable_if那套东西,写出来费劲,读起来更费劲,报错信息更是能把人劝退…

2026/10/11 7:18:44 阅读更多 →
ThreadLocal深度解析:内存泄漏、线程池陷阱与源码级实践

ThreadLocal深度解析:内存泄漏、线程池陷阱与源码级实践

1. 先从一段真实的生产事故说起两年前我在维护一个电商订单系统时,遇到过这样一个诡异的问题:某个定时任务跑了几分钟后,偶然会出现个别订单的价格凭空多出一段脏数据。排查了很久,最后发现罪魁祸首不是数据库,不是Red…

2026/10/11 7:18:44 阅读更多 →
影像开发必备五类多媒体软件工具

影像开发必备五类多媒体软件工具

影像开发中,要经常和图片、视频、音频、tuning、元数据打交道,分析和调试这些音视频数据,有趁手的工具往往能事倍功半。分享这些年亲测使用过常见的一些工具,每类仅记录一二个,不用选择困难。 更及时的更新和排版可以…

2026/10/11 7:18:44 阅读更多 →
AnyPS5跨平台输入适配实战:从手柄归一化到体验一致性

AnyPS5跨平台输入适配实战:从手柄归一化到体验一致性

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里蹦出来的第一个念头是:这大概率是一个围绕"PS5"这个游戏主机平台做扩展、模拟或者跨端适配的项目。名字里的"Any&qu…

2026/10/11 7:18:44 阅读更多 →
标签打印系统集成方案怎么选?四种数据接入方式的对比与取舍

标签打印系统集成方案怎么选?四种数据接入方式的对比与取舍

一、集成的本质:把“打印”变成一个业务动作在没有集成的情况下,标签打印是一个独立的人工动作:拿到单据 → 打开软件 → 录入 → 打印。集成之后,它变成业务流程里的一个节点:单据生效 → 自动生成标签 → 打印 → 回…

2026/10/11 7:18:44 阅读更多 →
基于gym的多智能体追逃博弈强化学习实战指南

基于gym的多智能体追逃博弈强化学习实战指南

简介:本资源是一套基于OpenAI Gym框架构建的多智能体追逃博弈强化学习平台源码,专为计算机及相关专业学生完成课程设计、期末大作业提供高分实践方案。项目经导师指导并获评98分,覆盖环境建模(2D/3D追逃场景)、智能体协…

2026/10/11 7:17:44 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →