Godot三面投影着色器:可视化节点实现地形材质防拉伸
1. 三面投影着色器的核心价值与适用场景第一次在Godot里做地形材质的时候我踩了一个几乎所有新手都会踩的坑用普通的UV映射把一张岩石纹理贴到起伏不平的地形上结果陡坡处的纹理被拉得老长像被人拽着两头扯开的橡皮筋山顶和崖壁的纹理密度完全对不上。这个问题在程序化生成的地形或者关卡原型阶段特别致命因为你不可能给每一块临时拼出来的几何体手动展UV——那工作量足以让人放弃整个项目。三面投影Triplanar Projection就是来解决这个问题的。它的核心思路非常朴素既然沿表面法线方向的UV映射会在陡峭区域产生拉伸那我干脆从三个轴向X、Y、Z分别投影一次纹理然后根据表面法线的朝向把这三个投影结果混合起来。法线朝上的面多用Y轴投影朝侧面的面多用X或Z轴投影过渡区域做平滑插值。这样无论几何体怎么起伏、怎么旋转纹理都能保持大致均匀的密度不会出现明显的拉伸和接缝。这个技术最早在离线渲染和地形系统里用得比较多后来逐渐进入实时渲染管线。在Godot里你可以用代码着色器写也可以用可视化着色器Visual Shader搭。可视化着色器的好处是直观——节点连线的方式让整个混合逻辑一目了然调参数的时候不用反复改代码再重编译特别适合关卡原型阶段快速迭代。你可以在编辑器里实时看到纹理混合的效果拖动几个滑杆就能调整投影缩放、混合锐度、法线强度这种即时反馈对美术向的开发者非常友好。适合读这篇内容的人大概分三类一是刚接触Godot着色器、想找一个完整案例入门的开发者二是做关卡原型时被UV问题困扰、想快速搞一套通用地形材质的技术美术三是已经会用代码写着色器、但想看看可视化着色器怎么组织复杂节点树的从业者。不管你是哪一类下面我会从设计思路开始一步步拆到节点连线和参数调优把整个流程讲透。2. 可视化着色器的整体设计与节点规划2.1 为什么选可视化着色器而不是纯代码纯代码着色器当然更灵活一行vec3 blend abs(normal);就能搞定混合权重的计算但可视化着色器在原型阶段有几个不可替代的优势。第一是调试直观你可以把中间结果接到ALBEDO或者EMISSION上直接在场景里看到混合权重的分布不用靠脑补。第二是参数暴露方便可视化着色器里的FloatParameter和VectorParameter节点会自动在材质检查器里生成滑杆和颜色选择器美术同学不用碰代码就能调效果。第三是节点树的复用你可以把三面投影的逻辑封装成一个子函数或者复制粘贴到其他材质里改一处就能全局生效。当然可视化着色器也有代价。节点树一复杂连线就会变成蜘蛛网可读性急剧下降。所以我的做法是先用可视化着色器把逻辑跑通、参数调好如果项目后期需要极致性能优化再把节点树翻译成代码着色器。这样既享受了原型的便利又保留了优化的空间。2.2 节点树的分层设计思路整个三面投影着色器的节点树可以分成四层输入层、投影采样层、混合权重层、输出合成层。输入层负责接收世界坐标、世界法线、三张纹理和缩放参数投影采样层用三个Texture节点分别从X、Y、Z方向采样混合权重层计算法线在三个轴上的分量并做锐化处理输出合成层把三个采样结果按权重加权平均再叠加法线贴图和粗糙度。这种分层设计的好处是每一层都可以独立调试。比如你发现混合过渡太生硬只需要调混合权重层的pow指数发现纹理太密或太疏只需要改投影采样层的缩放参数。不用在几百个节点里大海捞针。2.3 关键参数的前期规划在动手连线之前先把需要暴露的参数列出来这样后面加节点的时候心里有数。我一般会暴露这几个参数名类型默认值作用texture_scaleFloat0.5控制纹理在世界空间中的密度blend_sharpnessFloat4.0控制三轴混合的过渡锐度normal_strengthFloat1.0法线贴图的强度roughness_valueFloat0.8基础粗糙度albedo_tintColor白色整体色调调整这些参数在可视化着色器里用FloatParameter和ColorParameter节点创建命名的时候尽量用下划线分隔的小写字母方便在检查器里阅读。blend_sharpness这个参数特别关键它决定了三个投影面之间的过渡是平滑还是锐利。值太小会让过渡区域模糊一片值太大又会出现明显的硬边。后面我会详细讲怎么调。3. 三面投影的数学原理与节点实现3.1 世界空间坐标与法线的获取三面投影必须在世界空间里做因为物体空间的坐标会随着物体旋转而变化导致纹理跟着物体一起转失去“世界锁定”的效果。在Godot的可视化着色器里你可以用WorldVertex节点拿到世界空间的顶点坐标用WorldNormal节点拿到世界空间的法线。注意WorldNormal输出的是归一化后的法线范围在-1到1之间这正是我们计算混合权重需要的。这里有个细节如果你在顶点着色器阶段做投影性能会更好因为每个顶点只计算一次然后插值到片元。但可视化着色器默认是在片元阶段计算的对于地形这种顶点数不多的网格片元阶段的开销可以接受。如果你要做大规模地形可以考虑把投影坐标的计算挪到顶点阶段但混合权重的计算还是得在片元阶段做因为法线插值后的精度在片元阶段更高。3.2 三个轴向的投影采样投影采样的逻辑很直接用世界坐标的YZ分量作为X轴投影的UVXZ分量作为Y轴投影的UVXY分量作为Z轴投影的UV。在可视化着色器里你需要用VectorDecompose节点把世界坐标拆成X、Y、Z三个分量然后用VectorCompose节点重新组合成三个二维UV。具体连线是这样的WorldVertex的输出接到一个VectorDecompose得到x、y、z三个浮点输出。然后创建三个VectorCompose节点分别组合成(y, z)、(x, z)、(x, y)。这三个二维向量再分别乘以texture_scale参数最后接到三个Texture节点的UV输入上。这里要注意纹理的环绕模式。如果你的地形很大UV会超出0到1的范围所以纹理的repeat模式必须打开否则边缘会出现拉伸。在Godot的纹理导入设置里把Repeat设为Enabled就行。3.3 混合权重的计算与锐化混合权重的计算是整个着色器的核心。基本公式是取世界法线的绝对值然后做归一化。因为法线的三个分量平方和等于1所以abs(normal)的平方和也等于1直接除以abs(normal).x abs(normal).y abs(normal).z就能归一化。但在可视化着色器里更常见的做法是用pow函数做锐化让混合过渡更集中。具体操作WorldNormal的输出接到VectorDecompose得到nx、ny、nz。然后分别接Abs节点取绝对值。接着把三个绝对值分别接Power节点指数用blend_sharpness参数。最后把三个Power的输出相加再用每个Power的输出除以这个和得到归一化的权重。为什么要用pow而不是直接归一化因为直接归一化会让过渡区域非常宽三个投影面之间的混合会显得很模糊像蒙了一层雾。用pow锐化之后法线接近某个轴向时该轴的权重会迅速接近1其他轴的权重迅速接近0过渡带变窄纹理的细节更清晰。blend_sharpness的值我一般设在3到6之间太低会模糊太高会出现硬边。3.4 三路采样的加权合成有了三个采样结果和三个权重合成就简单了final_color color_x * weight_x color_y * weight_y color_z * weight_z。在可视化着色器里用三个Multiply节点分别把颜色和权重相乘然后用两个Add节点把三路结果加起来。这里有个性能优化的技巧如果三张纹理是同一张你可以只用一个Texture节点把三个UV分别接进去采样三次。但如果三张纹理不同比如顶面用草地、侧面用岩石那就需要三个独立的Texture节点。对于关卡原型我建议先用同一张纹理跑通流程确认效果后再替换成不同的纹理。4. 关卡原型中的实操流程与参数调优4.1 从零搭建节点树的完整步骤打开Godot新建一个ShaderMaterial在Shader属性里新建一个VisualShader。把着色器类型设为Spatial然后双击打开可视化着色器编辑器。你会看到一个默认的Vertex、Fragment、Light三个输出节点。我们主要在Fragment里操作。第一步创建参数节点。在左侧节点库的Input分类里找到FloatParameter拖三个出来分别命名为texture_scale、blend_sharpness、normal_strength。再拖一个ColorParameter出来命名为albedo_tint。这些参数会自动出现在材质检查器里。第二步获取世界坐标和法线。在Input分类里找到WorldVertex和WorldNormal各拖一个出来。WorldVertex输出的是vec3WorldNormal输出的也是vec3。第三步拆分坐标和法线。拖两个VectorDecompose节点分别接WorldVertex和WorldNormal。你会看到每个VectorDecompose有三个输出x、y、z。第四步构建三个投影UV。拖三个VectorCompose节点。第一个组合(y, z)第二个组合(x, z)第三个组合(x, y)。注意连线的时候VectorCompose的输入顺序是x、y、z你只需要接前两个第三个留空或者接0。第五步缩放UV。拖三个VectorMultiply节点每个节点的A输入接对应的VectorCompose输出B输入接texture_scale参数。然后把结果接到三个Texture节点的UV输入上。第六步计算混合权重。从WorldNormal的VectorDecompose输出x、y、z分别接三个Abs节点。然后三个Abs输出分别接三个Power节点指数输入接blend_sharpness参数。接着用两个Add节点把三个Power输出加起来得到权重和。最后用三个Divide节点分别把每个Power输出除以权重和得到归一化权重。第七步合成颜色。三个Texture节点的RGB输出分别接三个Multiply节点另一个输入接对应的归一化权重。然后用两个Add节点把三路结果加起来。最后接一个Multiply节点和albedo_tint相乘输出到Fragment的ALBEDO。第八步处理法线贴图。如果你要用法线贴图需要把三个投影的法线也混合起来。逻辑和颜色混合一样只是采样的是法线纹理混合后还要做切线空间到世界空间的转换。这一步比较复杂新手可以先跳过用纯颜色纹理跑通再说。4.2 参数调优的实战经验texture_scale的取值取决于你的地形尺寸和纹理分辨率。假设你的地形是100米见方纹理是1024像素你希望每米重复一次纹理那么texture_scale应该设为1/100 0.01。但实际调的时候我建议从0.5开始然后根据视觉效果微调。太小会让纹理糊成一片太大又会出现明显的重复图案。blend_sharpness的调优更微妙。我一般会先设成1.0观察过渡区域的大小然后逐渐加大到4.0左右。如果你发现陡坡和平面之间的过渡有一条明显的亮边或暗边说明锐度太高了需要降低。如果过渡区域看起来像蒙了一层灰说明锐度太低了需要提高。normal_strength控制法线贴图的强度。如果你用了法线贴图这个值一般在0.5到2.0之间。太高会让表面看起来像塑料太低又看不出凹凸感。我通常设成1.0然后根据光照效果微调。4.3 在关卡原型中快速验证效果搭好节点树之后不要急着往正式场景里放。先新建一个测试场景放一个MeshInstance网格用一个起伏比较大的PlaneMesh或者HeightMapShape生成的地形。把材质赋上去然后旋转这个网格观察纹理在不同角度下的表现。如果旋转到某个角度时纹理突然拉伸或者出现接缝说明混合权重的计算有问题。我习惯用EMISSION输出调试混合权重。把三个归一化权重分别接到EMISSION的RGB三个通道你会看到红色代表X轴权重、绿色代表Y轴权重、蓝色代表Z轴权重。在平面上绿色应该接近1红蓝接近0在陡坡上红或蓝应该占主导。如果颜色分布混乱说明法线获取或者权重计算有误。5. 常见问题排查与性能优化5.1 纹理拉伸和接缝的排查最常见的问题是纹理在陡坡处仍然有拉伸。这通常是因为混合权重的锐度不够导致过渡区域太宽两个投影面的纹理在过渡带里互相干扰。解决办法是提高blend_sharpness或者检查法线是否归一化。如果法线没有归一化abs之后的权重和可能不等于1导致混合结果偏暗或偏亮。另一个常见问题是接缝。三面投影在三个投影面的交界处比如45度斜面容易出现一条细缝因为三个投影的纹理在交界处没有完全对齐。这个问题很难彻底消除但可以通过提高纹理的环绕精度和混合锐度来缓解。如果接缝特别明显可以考虑在交界处叠加一个微弱的噪声扰动打散接缝的直线感。5.2 性能开销的分析与优化三面投影的性能开销主要来自三个方面三次纹理采样、权重计算、以及可能的法线贴图混合。在桌面端这些开销通常可以忽略但在移动端或者大规模地形上就需要优化了。第一个优化是减少纹理采样次数。如果三张纹理是同一张你可以只用一个Texture节点把三个UV分别接进去采样三次。但更激进的做法是只在法线接近某个轴向时才采样该轴的纹理其他轴用近似值代替。不过这需要分支逻辑在GPU上分支的开销可能比直接采样还大所以慎用。第二个优化是把投影坐标的计算挪到顶点着色器。在可视化着色器里你可以把WorldVertex和VectorDecompose、VectorCompose这些节点放到Vertex阶段然后把结果通过Varying传递给Fragment。这样每个顶点只计算一次投影UV片元阶段只需要做采样和混合。对于高面数地形这个优化能省不少。第三个优化是降低纹理分辨率。三面投影对纹理的重复度要求不高512x512的纹理在大多数场景下已经够用。如果你非要用4K纹理那性能开销肯定小不了。5.3 与其他材质特性的兼容性三面投影着色器可以和Godot的PBR材质特性兼容但需要注意几点。如果你要用NORMAL_MAP必须把三个投影的法线也混合起来并且做切线空间转换。如果你要用ROUGHNESS和METALLIC可以直接用参数控制不需要投影。如果你要用EMISSION可以把三面投影的颜色接到EMISSION上但要注意自发光会覆盖环境光的影响。还有一个坑是UV1和UV2的冲突。如果你在同一个材质里同时用了三面投影和普通的UV映射Godot可能会报错因为UV变量被重复定义。解决办法是把三面投影的UV计算完全用世界坐标不碰UV变量。6. 从原型到成品的扩展思路6.1 多纹理混合与高度混合跑通单张三面投影之后下一步自然是多纹理混合。比如在地形上低海拔用草地高海拔用岩石陡坡用泥土。你可以在三面投影的基础上再叠加一层高度权重和坡度权重把不同的纹理按权重混合起来。高度权重可以用世界坐标的Y分量坡度权重可以用法线的Y分量。这样一套地形材质就能覆盖大部分自然场景。高度混合的节点树会比单纹理复杂不少但逻辑是类似的每个纹理都做一次三面投影然后按权重加权平均。权重可以来自高度、坡度、噪声或者手绘的遮罩图。我建议先用两个纹理做实验确认混合逻辑没问题后再扩展到四个或更多。6.2 与程序化生成的结合如果你在用Godot做程序化地形生成三面投影几乎是必备的。程序化生成的地形通常没有UV或者UV质量很差三面投影可以直接用世界坐标采样完全绕过UV的问题。你可以在生成地形的同时根据高度和坡度自动分配纹理权重实现全自动的材质分布。更进一步你可以把三面投影的混合权重输出到一张渲染目标上作为后续处理的输入。比如用权重图做植被分布、用高度图做水体遮罩。这种“着色器输出到纹理”的流程在Godot里可以通过Viewport和SubViewport实现虽然有点绕但灵活性很高。6.3 可视化着色器到代码着色器的迁移当你对节点树的效果满意之后可以考虑把它翻译成代码着色器。代码着色器的优势是性能更好、可读性更高对熟悉代码的人来说、以及更容易做版本控制。翻译的时候把每个节点对应成一行或几行代码参数用uniform声明。比如混合权重的计算在代码里就是vec3 n abs(normal); vec3 weights pow(n, vec3(blend_sharpness)); weights / dot(weights, vec3(1.0));这比在可视化着色器里连十几个节点要简洁得多。但代码着色器的调试没有可视化那么直观所以我的建议是原型阶段用可视化成品阶段用代码。两者结合效率最高。6.4 实际项目中的经验教训最后分享几个我在实际项目里踩过的坑。第一不要在地形边缘用三面投影因为边缘的法线可能不准确导致权重计算错误。解决办法是在地形边缘加一圈过渡带或者用高度图做遮罩。第二三面投影的纹理重复度很高容易看出明显的图案重复。可以在采样的时候叠加一层低频噪声扰动UV打散重复感。第三如果场景里有大量使用三面投影的物体考虑用材质实例共享参数避免每个物体都编译一份着色器节省内存和编译时间。还有一个细节Godot的可视化着色器在保存的时候会生成一份代码你可以在材质检查器里点Shader旁边的Convert to Shader按钮把可视化节点树转成代码着色器。这个功能在你想学习节点树对应的代码实现时非常有用我经常用它来对照学习。这套三面投影着色器我从第一个版本到现在前后改了大概七八次每次都是在实际项目里遇到问题再回来调。最开始混合权重算错了纹理全是糊的后来锐度调太高接缝像刀切的一样再后来性能不够又把投影计算挪到顶点阶段。现在这套节点树已经比较稳定了在几个关卡原型里跑下来效果和性能都能接受。如果你也在做类似的东西建议先把单纹理跑通再逐步加功能不要一上来就搞多纹理混合那样出了问题很难定位。

相关新闻

SAP销售订单MWST条件丢失排查:从定价链到税配置的完整修复路径

SAP销售订单MWST条件丢失排查:从定价链到税配置的完整修复路径

简介:针对SAP顾问、运维及技术支持人员,解决创建销售订单时提示“定价条件错误:必要条件MWST丢失”的典型故障。文档从MWST增值税条件概念入手,系统梳理物料主数据、客户主数据、条件记录、定价程序等五类常见成因;以具…

2026/10/16 0:22:18 阅读更多 →
死锁的四个必要条件深度解析:从原理到线上排查实战

死锁的四个必要条件深度解析:从原理到线上排查实战

1. 死锁是什么,以及为什么偏偏是"四个必要条件"干并发开发或者系统设计的人,几乎都绕不开死锁。面试里它是经典题,工作里它是线上事故的常客。所谓死锁,就是一组线程或者进程,每个都在等一个由别人持有的资源…

2026/10/16 0:22:18 阅读更多 →
功能点分析法:软件规模估算方法论与落地实践指南

功能点分析法:软件规模估算方法论与落地实践指南

简介:这份PDF资料聚焦软件系统规模估算中的功能点分析法,面向软件公司研发管理者、企业信息化负责人以及需要与厂商商谈工期费用的项目干系人。内容从实际应用角度出发,依次讲解背景、概述、基本概念、计算方法、延伸计算、优缺点与总结&…

2026/10/16 0:22:18 阅读更多 →

最新新闻

OpenSceneGraph 缩放平移实战:从原理到顺滑交互实现

OpenSceneGraph 缩放平移实战:从原理到顺滑交互实现

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

2026/10/16 5:50:43 阅读更多 →
ASTER GDEM镶嵌全流程:从数据预处理到接边处理与质检

ASTER GDEM镶嵌全流程:从数据预处理到接边处理与质检

1. 为什么我要自己动手做ASTER GDEM镶嵌第一次接触ASTER GDEM是在做一个区域地形分析的小项目,当时需要覆盖三个省份的连续高程数据。我一开始想得很简单,直接去下载现成的分幅数据,用GIS软件拼一下不就完了。结果打开一看,每幅数…

2026/10/16 5:50:43 阅读更多 →
Dijkstra算法三步证明:从贪心选择到最优路径的完整推导

Dijkstra算法三步证明:从贪心选择到最优路径的完整推导

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

2026/10/16 5:50:43 阅读更多 →
手写识别技术演进综述:从传统管道到Transformer的深度解读

手写识别技术演进综述:从传统管道到Transformer的深度解读

最近集中啃了一批手写识别相关的文献,这篇《Survey on Handwritten Recognition》算是我收获比较大的一篇。它收录在2022年IEEE旗下一个综合性研讨会上,虽然名字带Survey,但并不是那种罗列论文的流水账,而是把过去几十年的方法脉络…

2026/10/16 5:50:43 阅读更多 →
LAMMPS fix viscous/sphere 命令完全指南:有限尺寸球体角速度阻尼的实现、scale 缩放与实战应用

LAMMPS fix viscous/sphere 命令完全指南:有限尺寸球体角速度阻尼的实现、scale 缩放与实战应用

科研科学计算高性能计算 【免费下载链接】lammps Public development project of the LAMMPS MD software package 项目地址: https://gitcode.com/gh_mirrors/la/lammps 点击查看 免费下载 导读:fix viscous/sphere 是 LAMMPS 中专门面向有限尺寸球体…

2026/10/16 5:50:43 阅读更多 →
REA 逆向环境一次装对:装前三问、装中三步、装后一条命令

REA 逆向环境一次装对:装前三问、装中三步、装后一条命令

REA 逆向环境一次装对:装前三问、装中三步、装后一条命令 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea 敲下 rea 的那一刻&#xff0…

2026/10/16 5:49:43 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →