news 2026/9/5 9:06:33

AI重绘技术如何解决2D游戏素材边缘模糊与锯齿问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI重绘技术如何解决2D游戏素材边缘模糊与锯齿问题

这次我们来看一个面向游戏开发者的实用工具改造项目。核心痛点很直接:很多游戏开发者在处理2D游戏素材,特别是从图集(Sprite Sheet)中拆分出的小图时,经常会遇到边缘模糊、锯齿严重的问题,严重影响最终游戏画质。手动修复费时费力,而通用的AI绘画工具又难以精确处理这种带透明通道、需要保持原始轮廓的图片。

这个项目正是为了解决这个问题而生:它在一个已有的“拆图工具”(可能是用于解析图集或切割图片的工具)基础上,集成了AI重绘能力。其目标不是生成全新的图像,而是对拆解后图片的边缘、细节进行智能修复和增强,从而显著提升画质,让像素风或2D游戏素材看起来更清晰、更锐利。

对于独立开发者或小团队来说,这意味着一套本地化、可批量处理的画质增强流水线。我们最关心的几个点:它是否支持CPU/GPU、显存要求如何、能否一键启动、是否提供API供其他工具调用、以及处理效果到底怎么样,都会在本文中逐一验证。

本文将带你从零开始,理解这个工具的组合逻辑,完成本地环境的部署,并通过实际测试来看AI重绘对游戏素材边缘的修复效果。无论你是Unity3D、Godot还是其他引擎的2D游戏开发者,如果正在为素材清晰度烦恼,这篇文章提供的思路和工具链都值得一试。

1. 核心能力速览

这个项目本质是一个“拆图+AI修复”的集成工具。为了快速判断其价值和使用门槛,我们将核心信息整理如下表:

能力项说明与评估
核心功能1.拆图(Sprite Sheet Unpacking):解析游戏图集,分割为独立小图。
2.AI边缘重绘(AI Inpainting):针对分割后图像的模糊边缘,进行智能修复与锐化。
3.批量处理:支持对整个图集或目录下的图片进行一键式拆解与增强。
技术栈拆图部分可能基于传统图像处理库(如PIL/Pillow, OpenCV)。AI重绘部分依赖于一个图像修复模型,例如Stable Diffusion Inpainting、Lama等,具体需看实现。
硬件门槛重点:取决于集成的AI模型。如果使用轻量级模型,可能支持CPU推理。若使用SD等较大模型,则需要GPU。显存需求不确定,需以实际加载的模型为准,但针对小图修复,通常对显存要求不会太高(可能2G-4G即可尝试)。
输入/输出输入:单张图集文件(如PNG)或包含图集的目录。
输出:分割后的单张图片,以及经过AI修复后的版本。通常会保留Alpha透明通道。
启动与部署预计提供Python脚本启动方式。理想情况下应提供简易配置文件或命令行参数,实现“准一键启动”。也可能封装为带界面的工具(如PyQt/Tkinter)或Web UI。
接口能力如果设计为服务化,可能提供本地API(如HTTP服务),供其他开发工具(如Unity编辑器扩展)调用。这是提升工作流效率的关键。
适合场景1. 2D游戏开发(像素风、手绘风)素材后期处理。
2. 从老旧游戏资源或低分辨率素材中提取并增强可用图像。
3. 独立开发者快速优化大量精灵(Sprite)画质,无需手动PS。
使用边界1.非通用AI绘画:主要用于修复和增强,而非从零生成。
2.依赖原始结构:重绘效果依赖于拆图工具分割的准确性。
3.版权与授权:仅用于处理你拥有合法版权的素材,严禁用于盗版游戏资源。

2. 适用场景与使用边界

2.1 谁需要这个工具?

  • 2D游戏独立开发者:资源预算有限,无法聘请专业美术对大量素材进行精修。
  • 游戏重制/复刻项目开发者:需要将老游戏的像素素材提取出来,并在保持原风格的基础上提升清晰度。
  • 游戏美术/技术美术(TA):希望将AI修复作为工作流中的一个自动化环节,提高效率。
  • 游戏引擎爱好者:在使用Unity3D、Godot、GameMaker等引擎时,需要高质量、边缘清晰的精灵图。

2.2 能解决什么问题?

  1. 边缘模糊与锯齿:这是核心痛点。图片在缩放、压缩或从图集拆解后,边缘像素信息丢失,产生模糊或锯齿。AI重绘可以预测并重建清晰的边缘。
  2. 画质不统一:来自不同来源的素材清晰度不一,通过批量AI处理,可以使整套素材的画风和质量更统一。
  3. 效率提升:手动用Photoshop等工具一张张修复边缘耗时极长。此工具可实现自动化批量处理,解放人力。

2.3 不适合什么场景?

  1. 完全改变美术风格:如果你想将写实素材转为卡通风格,这属于风格迁移,而非边缘修复,需要其他AI工具。
  2. 处理极度复杂、破损严重的图片:如果原始图集质量极差,分割后缺失大量信息,AI可能无法正确理解并修复。
  3. 实时处理:AI推理需要时间,不适合游戏运行时的实时素材加载。它属于开发阶段的资产预处理工具。
  4. 无透明通道需求的图片:如果图片不需要透明背景(Alpha通道),简单的超分辨率工具可能更合适。

2.4 版权与合规提醒

必须严格遵守

  • 仅处理自有版权素材:确保你拥有待处理图集和素材的完整版权或合法使用权。禁止处理来自盗版游戏、未经授权的网络资源。
  • AI生成内容的责任:修复后的图像属于“衍生作品”。如果你计划将处理后的素材用于商业游戏发行,需确认所使用的AI模型许可证是否允许商用,并评估潜在的法律风险。
  • 隐私保护:不要处理包含个人信息、人脸肖像(除非已获授权)的图片。

3. 环境准备与前置条件

在运行这个“拆图+AI重绘”工具前,你需要准备好基础软件环境。由于项目具体实现未知,以下列出通用性最高的准备清单。

3.1 操作系统

  • Windows 10/11(推荐,兼容性最好)
  • macOS(需注意ARM架构Apple Silicon的适配)
  • Linux(如Ubuntu,适合服务器部署)

3.2 Python环境(最可能依赖)

此类工具极大概率基于Python开发。

  1. 安装Python:版本建议在Python 3.8 - 3.10之间,这是多数AI框架的稳定支持范围。
  2. 包管理工具:使用pip。建议先升级至最新版:pip install --upgrade pip
  3. 虚拟环境(强烈推荐):为项目创建独立环境,避免依赖冲突。
    # 创建虚拟环境 python -m venv venv_game_sprite_ai # 激活环境 (Windows) venv_game_sprite_ai\Scripts\activate # 激活环境 (macOS/Linux) source venv_game_sprite_ai/bin/activate

3.3 深度学习框架与CUDA(如果AI部分需要GPU)

如果AI重绘基于PyTorch的模型(如Stable Diffusion)。

  1. PyTorch安装:前往 PyTorch官网 获取安装命令。根据你的CUDA版本选择。
    • 例如,CUDA 11.8的命令:pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
    • 仅CPU:如果只有CPU,安装CPU版本:pip3 install torch torchvision torchaudio
  2. CUDA与cuDNN:如需GPU加速,确保安装与PyTorch版本匹配的NVIDIA CUDA Toolkit和cuDNN。可通过nvidia-smi查看驱动支持的CUDA最高版本。

3.4 图像处理库

基础图像操作离不开它们。

pip install Pillow opencv-python

3.5 模型文件准备

这是关键一步,需要明确工具使用的是哪个AI模型。

  • 可能性1:内置或自动下载:工具脚本可能内置模型下载逻辑。
  • 可能性2:手动下载:你需要根据文档,从Hugging Face、GitHub Releases等地方下载特定的预训练模型文件(如*.ckpt,*.safetensors,*.pth),并放置到指定目录(如./models)。
  • 常见模型猜测:用于局部修复的模型如lamasd-v1-5-inpaintingstable-diffusion-2-inpainting等。具体需以项目说明为准。

3.6 磁盘空间

  • 预留至少2-10 GB空间用于存放Python包、AI模型和临时文件。

4. 安装部署与启动方式推测

由于没有具体的项目仓库地址,我们基于常见开源项目结构,推测并给出两种最可能的部署方式。

4.1 方式一:Python脚本直接运行(最可能)

假设项目是一个GitHub仓库,结构如下:

game-sprite-ai-tool/ ├── README.md ├── requirements.txt ├── main.py # 主启动脚本 ├── unpack_sprites.py # 拆图模块 ├── ai_repaint.py # AI重绘模块 ├── config.yaml # 配置文件 └── models/ # 存放AI模型

部署步骤:

  1. 克隆或下载项目:获取源代码。
  2. 安装依赖
    cd game-sprite-ai-tool pip install -r requirements.txt
    requirements.txt内容可能包含:torch,transformers,diffusers,Pillow,opencv-python,numpy,yaml等。
  3. 放置模型文件:将下载的AI模型文件放入models/目录。
  4. 配置参数:编辑config.yaml或通过命令行参数设置,如输入输出路径、模型选择、AI重绘强度等。
  5. 启动
    • 命令行模式:处理单张图集。
      python main.py --input ./my_spritesheet.png --output ./output --model lama
    • 批量模式:处理一个文件夹。
      python main.py --input ./input_folder --output ./output_folder --batch
    • Web UI模式:如果提供了UI。
      python webui.py --port 7860
      然后在浏览器访问http://127.0.0.1:7860

4.2 方式二:Docker容器化部署(如果项目支持)

如果项目提供了Dockerfile,部署会更简单,适合环境隔离。

  1. 构建Docker镜像
    docker build -t game-sprite-ai .
  2. 运行容器
    docker run -p 7860:7860 -v $(pwd)/input:/app/input -v $(pwd)/output:/app/output -v $(pwd)/models:/app/models game-sprite-ai
    此命令将本地inputoutputmodels目录映射到容器内,并启动服务。

启动后验证:无论哪种方式,启动后观察命令行日志,应无报错,并提示服务已就绪或开始处理任务。

5. 功能测试与效果验证

我们模拟一个完整的测试流程,从准备素材到评估结果。

5.1 测试准备:素材与目标

  • 测试素材:准备一张简单的2D游戏图集(PNG格式,带透明通道)。例如,一个包含多个角色站立、行走帧的精灵图。
  • 原始问题:将该图集放大观察,或拆分成小图后,观察角色边缘是否有模糊、锯齿。
  • 测试目标:验证工具能否成功拆图,并对拆出的小图边缘进行有效修复,使边缘更清晰平滑。

5.2 测试一:基础拆图功能

目的:确认工具能正确识别图集网格或通过其他方式(如JSON元数据)分割图片。

  1. 执行拆图(假设命令如下):
    python unpack_sprites.py --sheet ./test_spritesheet.png --grid 8x4 --output ./unpacked
    (参数--grid 8x4表示图集是8列4行的均匀网格,实际参数需根据工具设计调整)。
  2. 预期结果:在./unpacked目录下生成一系列独立PNG文件(如sprite_0_0.png,sprite_0_1.png...)。
  3. 成功标准
    • 图片数量正确(8*4=32张)。
    • 每张图片尺寸一致。
    • 透明背景(Alpha通道)被保留。
  4. 常见问题
    • 分割错位:网格尺寸(--grid)设置错误。需要精确知道图集的行列数。
    • 丢失透明通道:检查拆图代码是否正确处理了PNG的RGBA模式。

5.3 测试二:AI边缘重绘功能

目的:验证AI模型对单张拆分后小图的边缘修复效果。

  1. 执行重绘(假设命令如下):
    python ai_repaint.py --input ./unpacked/sprite_0_0.png --output ./repainted/sprite_0_0_enhanced.png --strength 0.5
    --strength参数控制修复强度,需要测试调整)。
  2. 操作步骤
    • 工具应加载AI模型。
    • 识别图片中的主体轮廓(通过Alpha通道或边缘检测)。
    • 将轮廓外围的模糊区域作为“蒙版”,送入AI模型进行修复(Inpainting)。
    • 生成修复后的图片,并与原主体融合。
  3. 预期结果:输出图片的主体内容不变,但边缘的模糊像素被替换为更清晰、连贯的像素,锯齿感减弱。
  4. 效果对比方法
    • 并排对比:用图片查看器同时打开处理前和处理后的图片,放大到200%-400%观察边缘。
    • 指标评估:主观评估清晰度、锯齿改善程度、是否引入不合理的AI“脑补”痕迹。
  5. 常见问题
    • 边缘过度平滑或风格改变:AI“重绘”强度过高,导致边缘纹理丢失或风格变化。尝试降低--strength
    • 主体被修改:蒙版区域可能覆盖了部分主体。需要调整边缘检测或蒙版扩张的参数。
    • 无效果:AI模型未正确加载,或蒙版区域全黑/全白。检查模型路径和图片的Alpha通道。

5.4 测试三:端到端批量处理

目的:测试从图集到最终修复图片的全自动化流水线。

  1. 执行批量命令(假设工具提供了集成命令):
    python main.py --input ./test_spritesheet.png --output ./final_results --grid 8x4 --repaint --batch-size 4
    --batch-size 4表示同时处理4张小图,提高GPU利用率)。
  2. 预期结果:在./final_results目录下,直接得到所有经过AI修复的精灵图。
  3. 成功标准
    • 流程自动完成,无需人工干预。
    • 所有输出图片命名有序,且质量提升效果一致。
    • 观察系统资源(GPU显存)占用是否稳定,是否在处理多张图后出现内存泄漏(显存持续增长)。
  4. 性能观察:记录处理一张图所需平均时间,估算处理整个图集的总耗时。这对于评估工具实用性至关重要。

6. 接口API与批量任务集成

对于希望将此功能集成到自定义工具链或编辑器中的开发者,API接口至关重要。

6.1 本地HTTP服务启动

如果工具提供了API模式,启动方式可能如下:

python api_server.py --host 0.0.0.0 --port 8000 --model_path ./models/best_model.pth

启动后,服务将在http://localhost:8000提供API。

6.2 API调用示例

假设提供两个端点:/unpack(拆图) 和/repaint(重绘)。

1. 拆图接口调用 (Python Requests):

import requests, json, os api_base = "http://127.0.0.1:8000" sheet_path = "./game_assets/spritesheet.png" # 上传图集并指定分割参数 with open(sheet_path, 'rb') as f: files = {'file': f} data = {'grid': '8x4'} # 或提供json元数据文件 response = requests.post(f"{api_base}/unpack", files=files, data=data) if response.status_code == 200: result = response.json() # 假设返回打包为zip的下载链接 zip_url = result['zip_url'] # 下载并解压拆分的图片 # ... 下载代码 ... print("拆图成功!") else: print(f"拆图失败: {response.text}")

2. AI重绘接口调用:

import requests, base64, json api_base = "http://127.0.0.1:8000" sprite_path = "./unpacked/sprite_0_0.png" # 将图片编码为base64发送(或使用multipart/form-data上传文件) with open(sprite_path, 'rb') as f: img_base64 = base64.b64encode(f.read()).decode('utf-8') payload = { "image": img_base64, "strength": 0.6, # 修复强度 "mask_dilation": 3 # 蒙版扩张像素,用于控制修复边缘的宽度 } headers = {'Content-Type': 'application/json'} response = requests.post(f"{api_base}/repaint", json=payload, headers=headers, timeout=60) if response.status_code == 200: result = response.json() enhanced_img_data = base64.b64decode(result['enhanced_image']) with open('./enhanced/sprite_0_0_enhanced.png', 'wb') as f_out: f_out.write(enhanced_img_data) print("AI重绘成功!") else: print(f"AI重绘失败: {response.text}")

6.3 批量任务队列设计

对于大量素材,需要稳定的批量处理。

  1. 目录监视模式:工具可以监视一个输入文件夹,自动处理任何新放入的图集。
    python batch_processor.py --watch ./input_dir --output ./output_dir
  2. 任务队列(高级):使用Redis或数据库管理任务状态。
    • 生产者:将需要处理的图集路径写入队列。
    • 消费者:工具作为Worker,从队列读取任务,处理,并更新状态。
    • 这适合与游戏引擎的资产导入管道集成。

7. 资源占用与性能观察

本地运行AI工具,资源占用是必须关注的。

7.1 显存占用观察

  • 启动时:运行nvidia-smi命令,观察加载AI模型后的显存占用量。这是基础开销。
  • 推理时:在处理图片(尤其是批量处理)时,显存占用会波动。观察峰值显存。
  • 降低显存技巧
    • 减小--batch-size(批量大小),设为1最省显存。
    • 使用--half--fp16参数进行半精度推理(如果模型支持)。
    • 启用CPU卸载(如果框架支持,如Diffusers的enable_cpu_offload)。

7.2 CPU与内存占用

  • 即使使用GPU,数据预处理和后处理也会用到CPU。观察任务管理器中Python进程的CPU和内存使用率。
  • 批量处理大量图片时,注意内存是否持续增长,防止内存泄漏。

7.3 处理速度与优化

  • 单张图片处理时间:从读图、预处理、AI推理到保存,记录端到端时间。
  • 影响因素
    • 图片尺寸:尺寸越大,耗时越长。游戏精灵图通常较小(如128x128),速度会很快。
    • AI模型复杂度:轻量模型(如Lama)比重型模型(SD Inpainting)快得多。
    • 硬件:GPU型号是关键。
  • 性能测试命令示例(如果工具支持):
    python benchmark.py --input ./test_images --model lama --iterations 10
    输出平均处理时间、峰值显存等数据。

8. 常见问题与排查方法

问题现象可能原因排查方式解决方案
启动报错:ModuleNotFoundErrorPython依赖包未安装或版本冲突。检查错误信息中缺失的模块名。运行pip list查看已安装包。1. 安装缺失包:pip install <module_name>
2. 严格按requirements.txt安装:pip install -r requirements.txt
启动报错:CUDA error / 无法找到GPUCUDA版本与PyTorch不匹配,或GPU驱动太旧。运行python -c "import torch; print(torch.cuda.is_available())"检查CUDA是否可用。1. 更新NVIDIA显卡驱动。
2. 根据PyTorch官网指令重装匹配CUDA版本的PyTorch。
3. 退而使用CPU模式(如果支持)。
模型加载失败模型文件路径错误、文件损坏或格式不被支持。检查日志中模型加载的错误信息。确认模型文件是否在正确路径,且文件完整。1. 重新下载模型文件。
2. 检查配置文件中的模型路径设置。
3. 确认工具支持的模型格式(.ckpt,.safetensors,.pth)。
拆图结果错位或尺寸不对网格参数(行、列)设置错误,或图集并非均匀网格。使用图片查看器打开原图,数清精灵的行列数。检查图集是否包含空白间隔。1. 精确设置--grid参数。
2. 如果图集不规则,需使用带JSON元数据(记录每个精灵位置)的拆图方式。
AI重绘后边缘有奇怪色块或扭曲AI修复强度过高,或蒙版区域覆盖了不该修复的部分。对比原图和生成的蒙版(如果工具能输出蒙版),看蒙版区域是否准确。1. 降低--strength参数(如从0.7调到0.3)。
2. 调整边缘检测或蒙版扩张的像素值,让蒙版更贴合边缘。
处理速度非常慢1. 使用了CPU模式。
2. 图片尺寸过大。
3. 模型过于复杂。
检查任务管理器,看是CPU还是GPU满负荷。测量单步耗时。1. 确保在GPU模式下运行。
2. 如果精灵图很大,考虑先按需缩放再处理。
3. 尝试换用更轻量的AI修复模型。
批量处理中途程序崩溃显存不足(Out of Memory)。观察崩溃前nvidia-smi显示的显存占用是否接近100%。1. 减小--batch-size
2. 使用--sequential参数一张张处理,而非并行。
3. 尝试启用CPU卸载或使用内存更低的模型。
Web UI或API服务无法访问端口被占用,或服务未成功启动。1. 检查启动日志是否有错误。
2. 在命令行运行 `netstat -ano
findstr :<端口号>(Win) 或lsof -i:<端口号>` (Mac/Linux) 查看端口占用。

9. 最佳实践与使用建议

为了让这个工具真正融入你的游戏开发工作流,并避免踩坑,遵循以下建议:

  1. 从小规模测试开始:不要一开始就处理整个游戏的所有图集。选择一张有代表性的、问题明显的图集进行测试,调整参数(如--strength,--grid)直到效果满意。
  2. 建立备份和版本管理:处理前,务必备份原始素材。输出结果建议使用新文件名或新目录,避免覆盖原文件。考虑使用Git管理原始资产和处理后的资产。
  3. 参数调优是关键
    • 修复强度(Strength):这是最重要的参数。从0.3开始尝试,逐步增加。过高的强度会导致图像内容被“AI化”而失真。
    • 蒙版扩张(Mask Dilation):控制修复边缘的宽度。对于轻微模糊,1-3像素即可;对于严重锯齿,可能需要5像素以上。
  4. 分步处理与质量检查:建议先运行纯拆图功能,检查分割是否正确。确认无误后,再对拆分好的图片进行AI重绘。在批量处理全自动流水线前,这个分步验证能避免大规模错误。
  5. 与游戏引擎工作流集成
    • Unity:可以编写一个Editor脚本,在导入图集后自动调用本工具的API进行处理,然后将处理后的精灵直接赋值给Sprite。
    • Godot:类似地,可以创建导入插件(Import Plugin)来集成此功能。
  6. 处理失败的重试机制:对于批量任务,总有少数图片可能处理失败(如AI生成异常)。设计脚本时,应记录失败列表,并允许单独重试,而不是整个任务重跑。
  7. 版权合规复查:处理完成后,人工抽查一部分增强后的图片,确保AI没有引入不属于原作的、有版权风险的视觉元素(某些模型可能训练数据混杂)。

10. 总结与下一步

这个“拆图工具+AI重绘”的组合,精准地命中了2D游戏开发中素材处理的一个痒点:自动化提升画质。它最大的价值在于将两个独立环节(拆解和修复)串联起来,形成本地化、可批量的解决方案,特别适合资源有限的独立开发者。

你最应该优先验证的,是AI重绘对边缘的修复效果是否自然。这直接决定了工具的可用性。如果效果理想,接下来可以探索如何将其无缝接入到你的引擎资产管道中,实现素材“导入即优化”。

最容易踩的坑主要集中在环境配置参数调整。确保Python环境、PyTorch/CUDA版本匹配,是跑起来的第一步。而strengthmask参数则需要耐心调试,以在“去除锯齿”和“保持原貌”之间找到最佳平衡点。

未来,这个工具链还可以进一步扩展,例如:

  • 支持更多图集格式:不仅支持均匀网格,还能解析TexturePacker、Shoebox等工具生成的复杂图集和数据文件。
  • 集成更多AI模型:提供多种修复模型(轻量/重量级)供选择,适应不同质量与速度的需求。
  • 实时预览:在Web UI中提供处理前后的实时对比滑块,方便参数微调。
  • 与版本控制系统联动:自动记录哪些素材经过了AI处理,便于团队协作和资产管理。

对于受困于素材画质的游戏开发者来说,这类工具值得投入时间研究和整合。建议收藏本文的部署和排查指南,在实战中逐步构建起属于自己的高效素材处理流水线。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 9:06:31

告别传统供电模式!建筑空间直流照明系统优势全解析

绿色建筑、零碳建筑已经成为建筑行业的主流发展方向。建筑照明作为刚需用电系统&#xff0c;想要实现节能降碳&#xff0c;不能只依靠更换节能光源&#xff0c;供电配电体系的革新才是突破口。直流照明系统区别于我们沿用多年的交流照明配电体系&#xff0c;从配电端重构照明供…

作者头像 李华
网站建设 2026/9/5 9:03:37

高性能电机控制MCU选型对比:精度、功耗与实时性如何兼得?

在工业自动化、机器人关节和新能源汽车电驱等应用场景中&#xff0c;电机控制系统的性能边界正在被不断推高。位置反馈精度要求从角度级迈向角秒级&#xff0c;电流环响应时间从百微秒级压缩至微秒级&#xff0c;系统功耗则需要在算力倍增的前提下持续优化。这些相互制约的指标…

作者头像 李华
网站建设 2026/9/5 9:02:31

大模型 Agent 化改造实践:从工具调用到自动化运维

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

作者头像 李华
网站建设 2026/9/5 9:02:25

Ollama本地大模型部署实战:从安装到IDE与API集成

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

作者头像 李华
网站建设 2026/9/5 9:01:26

CSS Grid布局与关键帧动画实战:性能优化与复杂场景应用

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

作者头像 李华
网站建设 2026/9/5 9:00:55

Unity游戏开发架构设计与性能优化实战解析

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

作者头像 李华