首页 > 其他分享 >面向Three.js开发者的3D自动纹理化开发包

面向Three.js开发者的3D自动纹理化开发包

时间:2023-10-31 10:49:36浏览次数:44  
标签:DreamTexture 模型 Three 纹理 开发包 js 3D

DreamTexture.js 是面向 three.js 开发者的 3D 模型纹理自动生成与设置开发包,可以为 webGL 应用增加 3D 模型的快速自动纹理化能力。

aa3

图一为原始模型, 图二图三为贴图后的模型。提示词:

city, Realistic , cinematic , Front view ,Game scene graph

1、DreamTexture.js 开发包内容

DreamTexture.js 基于 Three.js 和稳定扩散(stable diffusion) AI 模型开发,用于实现 3D 模型的自动纹理化,当然版本 V1.0,主要文件及目录组织结构如下:

开发包文件说明
dream-texture.cjs cjs 格式库文件
dream-texture.esm esm 格式库文件
dream-texture.umd umd 格式库文件
stable-diffusion-guide.md 用于 DreamTexture.js 的稳定扩散服务安装指南
LICENSE.md 开发包许可协议文件
example/ DreamTexture.js 使用示例目录

2、DreamTexture.js 开发包快速上手

以 ESM 库为例介绍如何使用 DreamTexture.js 开发包为 Three.js 应用增加 3D 模型的自动化纹理能力。

首先参考开发包中的稳定扩散服务安装指南部署自己的 stable diffusion api 服务,支持 windows 和 Linux。

接下来安装 three.js 开发环境,安装完成后需要引入 DreamTexture.js 库文件,以 ESM 库为例,引入代码如下:

import * as THREE from 'three';
import DreamTexture from './dream-texture.esm.min';

现在创建一个场景,在场景中导入 GLTF 模型 ,并可以适当的旋转或移动模型:

//将模型导入到场景
const gltfLoader = new THREE.GLTFLoader();
gltfLoader.load('monkey.glb', async (e) => {
  scene.add(e.scene);
});

// 将模型旋转到任何你想要的角度!
box.rotation.y = -Math.PI / 4;

然后实例化一个 DreamTexture 对象,注意要在参数中指定你的稳定扩散 API 服务的 URL:

//初始化DreamTexture对象,传入您的stable diffusion api 地址
const dt = new DreamTexture({
  baseUrl: 'http://127.0.0.1:7860', //stable diffusion url
});

现在就可以调用 DreamTexture 对象的 setTexture 方法传入提示词等参数, 让 AI 模型自动生成生成一张纹理图片,并投射到模型上,代码如下:

//编写提示词和其他参数
// 成功启动stable diffusion api后,可在 http://127.0.0.1:7860/docs 查看文档
const params = {
    prompt: 'monkey head, Brown hair, cartoon',//描述所需图像的细节越详细,Stable Diffusion生成效果越接近描述,较少描述则更具创意性。
    negative_prompt: 'blurry',//不希望Stable Diffusion生成的内容,用于排除不需要的元素。
    denoising_strength: 0.85,// 去噪强度
    cfg_scale: 15,//文字CFG比例
    image_cfg_scale: 7,//图片CFG比例
    steps: 10,//采样步数
    sampler_index: 'DPM++ SDE Karras',
    sampler_name: '',
};
dt.setTexture(scene, params).then((res) => {
  console.log('纹理添加成功!');
});

3D 模型的自动纹理化效果如下:

案例 1:

aa2

图一为原始模型, 图二图三为贴图后的模型。提示词:

car, Realistic , photography , hyper quality , high detail , high resolution , Unreal Engine , Side view

案例 2:

aa1

图一为原始模型, 图二图三为贴图后的模型。图二提示词:

Realistic , photography, bottle, porcelain

图三:将'porcelain'换为'glass'

3、DreamTexture.js 开发包 cjs/umd 库文件的使用

DreamTexture 支持三种常用的 js 库格式,除了前面介绍的 esm 格式,还支持 cjs、umd 格式:

cjs 库的引入代码如下:

const ProjectedMaterial = require('./dream-texture.cjs.js');

umd 库的引入代码如下:

<script src="./three.js"></script>
<script src="./dream-texture.umd.js"></script>

4、DreamTexture.js 开发包 API 接口说明

DreamTexture.js 的 API 接口非常简单,说明如下:

  • new DreamTexture({ baseUrl })

初始化 DreamTexture 对象,稍后用于 3D 模型的自动纹理化。

参数描述
baseUrl stable diffusion api 地址
  • dreamTexture.setTexture(object3d:THREE.Object3D, params)

DreamTexture 会将传入的 object3d 的正视图作为依据来完成 3D 场景的自动纹理化,包括纹理的生成和自动投射。

参数描述
object3d THREE.Object3D。支持 Group 和 Mesh。
params stable diffusion img2img api 的参数

3D自动纹理开发包:DreamTexture.js自动纹理化开发包 - NSDT

 

转载:面向Three.js开发者的3D自动纹理化开发包 (mvrlink.com)

标签:DreamTexture,模型,Three,纹理,开发包,js,3D
From: https://www.cnblogs.com/mvrlink/p/17799723.html

相关文章

  • 聊聊多层嵌套的json的值如何解析/替换
    前言前阵子承接了2个需求,一个数据脱敏,一个是低代码国际化多语言需求,这两个需求有个共同特点,都是以json形式返回给前端,而且都存在多层嵌套,其中数据脱敏的数据格式是比较固定,而低代码json的格式存在结构固定和不固定2种格式。最后不管是数据脱敏或者是多语言,业务抽象后,都存在需要......
  • js 中 == 和 === 区别
    在JavaScript中,==和===是用于比较值的两个不同的操作符,它们具有不同的行为:1)==(等于):它是相等操作符,用于比较两个值是否在类型转换后相等。如果两个值的内容相等,它返回true,否则返回false。类型转换是自动的,因此在比较之前,JavaScript会尝试将两个值转换为相同的类型,然后进行比较。......
  • 新手使用nodejs的SerialPort获取数据时需要注意的一个小点
    onData(callback:(data:Buffer)=>void):void{if(this.serialPort!=null){this.serialPort.on("data",(data:Buffer)=>{callback(data);})}}​ 上面的代码相当于当串口接收到数据之后就通知......
  • 基于Vue.js和Vanta.js的动态天空颜色效果实现
    背景最近在写一个Vue项目,想要在登录界面加一个动态背景效果,搜索之后发现了Vanta.js(https://www.vantajs.com/)这个库。Vanta可以借助three.js(WebGL)或p5.js渲染动态的3D背景效果,提供了多种预设。几种效果都挺不错的,最终我决定采用clouds效果。随即我发现这个效果是可......
  • SocketJS使用记录
    SockJS是一个JavaScript库,用于处理WebSocket或WebSocket风格的双向通信。以下是SockJS的一些主要函数及其作用的简要介绍,并附带一些示例:newSockJS(url,[options]):创建SockJS客户端实例。url参数是WebSocket服务器的URL或端点,options是一个可选的配置对象,......
  • [Springboot整合thymeleaf]处理js中的路径问题。
    使用了thymeleaf模板引擎之后,html中的标签,都可以直接替换成th:srcth:href但是处理js的中的资源路径并不是像jsp那么简单了。可以通过以下方式解决。<!--处理路径问题--><scriptth:inline="javascript">varpath=[[${#request.contextPath}]]</script><scriptth:inl......
  • JavaWeb-JS基础
    4.JS基础(1)JS的引入方式HTML内部引入将JS代码放在“<script></script>”标签之间在HTML文档中,可以在任意地方放置任意数量的<script>一般将其放在body元素的底部,改善显示速度<script>alert("WY")//JS代码</script>外部.js文件引入在外部单独编写js......
  • JS_0077:JS 中对象操作 preventExtensions 禁止添加新属性 defineProperty 添加新属性
    1,//这是定义一个对象constnonExtensible={removalbe:true};//这是通过preventExtensions方法令指定对象无法再添加新的属性Object.preventExtensions(nonExtensib......
  • .Net Core中读取json配置文件
    1、编写实例化类。新建可供实例化的配置类JwtConfig///<summary>///Jwt的配置类///</summary>publicclassJwtConfig{///<summary>///定位///</summary>publicconststringPosition="Jwt";///<summary>///验证......
  • python json5 转 json
    JSON5是JSON的超集,它的目标是使JSON更易于人类阅读和编写。JSON5引入了一些在ECMAScript5中的一些特性,如注释、尾逗号、单引号等¹。要将JSON5转换为JSON,你需要删除JSON5中的所有注释、尾逗号和单引号,并确保所有的键都被双引号包围。这可以通过编程实现,也可以使用在......