HashLips Art Engine源码解读:main.js核心函数工作流程

HashLips Art Engine源码解读:main.js核心函数工作流程

【免费下载链接】hashlips_art_engine HashLips Art Engine is a tool used to create multiple different instances of artworks based on provided layers. 【免费下载链接】hashlips_art_engine 项目地址: https://gitcode.com/gh_mirrors/ha/hashlips_art_engine

HashLips Art Engine 是一款基于图层生成艺术作品的工具,通过配置不同图层元素组合,可批量创建独特的数字艺术品。本文将深入解析核心文件 src/main.js 的工作流程,帮助你理解其如何将图层转化为最终艺术作品。

初始化与配置加载

程序启动时首先初始化基础路径与依赖项,从 src/config.js 加载核心配置,包括图层顺序、画布尺寸、稀有度设置等关键参数。

const basePath = process.cwd();
const { NETWORK } = require(`${basePath}/constants/network.js`);
const {
  format,               // 画布尺寸配置
  layerConfigurations,  // 图层顺序配置
  uniqueDnaTorrance,    // DNA唯一性检查阈值
  background            // 背景生成设置
} = require(`${basePath}/src/config.js`);

配置加载后,系统会初始化画布环境并准备构建目录:

const canvas = createCanvas(format.width, format.height);
const ctx = canvas.getContext("2d");

图层系统核心机制

图层初始化流程

layersSetup() 函数负责将图层目录结构转换为程序可识别的对象模型。它会扫描 layers/ 目录下的所有子文件夹,解析每个元素的稀有度权重与显示名称:

const layers = layersSetup(layerConfigurations[layerConfigIndex].layersOrder);

图层元素解析通过 getElements() 实现,该函数会处理文件名中的稀有度标记(如 Red#1.png 中的 #1 表示权重为1),并生成包含路径、ID和权重的元素列表。

DNA生成与唯一性校验

艺术作品的独特性通过DNA系统实现。createDna() 函数根据图层权重随机生成DNA序列,每个图层元素对应DNA中的一段编码:

let newDna = createDna(layers);  // 生成新DNA
if (isDnaUnique(dnaList, newDna)) {  // 检查DNA唯一性
  // 处理唯一DNA...
}

DNA由图层元素ID和文件名组成,例如 0:Background#1.png-3:Eye#5.png,系统通过 isDnaUnique() 确保不会生成重复的作品组合。

图像渲染流水线

背景绘制

drawBackground() 函数根据配置生成背景,支持静态颜色或随机渐变色:

if (background.generate) {
  drawBackground();  // 绘制背景
}

图层合成

startCreating() 是渲染流程的核心函数,它协调图层加载、绘制和元数据生成的全过程:

  1. 图层加载:通过 loadLayerImg() 异步加载所有图层图像
  2. 图像合成:使用 drawElement() 将图层按顺序绘制到画布
  3. 元数据生成:通过 addMetadata() 创建作品元数据

关键代码流程:

// 加载图层元素
let loadedElements = [];
results.forEach((layer) => {
  loadedElements.push(loadLayerImg(layer));
});

// 绘制图层到画布
await Promise.all(loadedElements).then((renderObjectArray) => {
  ctx.clearRect(0, 0, format.width, format.height);  // 清空画布
  if (background.generate) drawBackground();         // 绘制背景
  
  // 按顺序绘制所有图层
  renderObjectArray.forEach((renderObject, index) => {
    drawElement(renderObject, index, layers.length);
  });
  
  saveImage(abstractedIndexes[0]);  // 保存图像
  addMetadata(newDna, abstractedIndexes[0]);  // 保存元数据
});

文件输出系统

生成的作品与元数据通过以下函数保存到磁盘:

文件组织结构遵循配置中的设定,支持区块链格式的元数据输出。

核心工作流程图

mermaid

关键函数调用关系

函数名主要功能调用位置
buildSetup()创建输出目录结构startCreating()
layersSetup()解析图层配置startCreating()
createDna()生成随机DNA序列startCreating()
isDnaUnique()检查DNA唯一性startCreating()
constructLayerToDna()DNA转图层对象startCreating()
drawElement()绘制图层到画布startCreating()

通过理解这些核心函数的协作方式,你可以自定义图层逻辑、调整稀有度算法或扩展新的输出格式,从而实现更复杂的数字艺术生成需求。

【免费下载链接】hashlips_art_engine HashLips Art Engine is a tool used to create multiple different instances of artworks based on provided layers. 【免费下载链接】hashlips_art_engine 项目地址: https://gitcode.com/gh_mirrors/ha/hashlips_art_engine

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值