license: openrail
datasets:
- gvecchio/MatSynth
language:
- en
library_name: diffusers
pipeline_tag: text-to-image
tags:
- 材质
- PBR
- SVBRDF
- 3D
- 纹理
inference: false
StableMaterials
StableMaterials 是一款基于扩散模型的物理渲染(PBR)材质生成工具。该模型通过结合半监督学习与潜在扩散模型(LDM),能够根据文本或图像提示生成高分辨率、可平铺的材质贴图。StableMaterials 可同时推断漫反射(基础色)和镜面反射(粗糙度、金属度)属性,以及材质介观结构(高度、法线)。🌟
更多详情,请访问项目主页或阅读arXiv上的完整论文。
⚠️ 本仓库包含基础模型的权重和管道代码(含LDM和LCM版本)。精炼模型及其管道、修复管道将很快发布。
模型架构
🧩 基础模型
基础模型通过压缩VAE(变分自编码器)和潜在扩散过程生成低分辨率(512x512)材质贴图。该架构基于LDM范式适配的MatFuse方案,专为材质贴图生成优化,注重多样性和高视觉保真度。🖼️
🔑 核心特性
- 半监督学习:结合标注与非标注数据进行训练,利用对抗训练从大规模预训练图像生成模型中提炼知识。📚
- 知识蒸馏:将SDXL模型生成的未标注纹理样本纳入训练过程,弥合不同数据分布间的差距。🌐
- 潜在一致性:采用潜在一致性模型实现快速生成,减少高质量输出所需的推理步数。⚡
- 特征滚动:通过滚动U-Net架构中每个卷积层和注意力层的特征图,创新实现可平铺性技术。🎢
应用场景
StableMaterials 专为计算机图形学领域设计,可用于生成高质量、逼真的PBR材质,适用于电子游戏开发、建筑可视化及数字内容创作等场景。该模型支持文本和图像双模态提示,实现灵活直观的材质生成。🕹️🏛️📸
� 使用指南
使用StableMaterials基础模型生成材质的代码示例如下:
标准模型
from diffusers import DiffusionPipeline
from diffusers.utils import load_image
pipe = DiffusionPipeline.from_pretrained(
"gvecchio/StableMaterials",
trust_remote_code=True,
torch_dtype=torch.float16
)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
pipe = pipe.to(device)
material = pipe(
prompt="带有剥落油漆的老旧生锈金属条",
guidance_scale=10.0,
tileable=True,
num_images_per_prompt=1,
num_inference_steps=50,
).images[0]
material = pipe(
prompt=load_image("输入图片路径.jpg"),
guidance_scale=10.0,
tileable=True,
num_images_per_prompt=1,
num_inference_steps=50,
).images[0]
basecolor = material.basecolor
normal = material.normal
height = material.height
roughness = material.roughness
metallic = material.metallic
一致性模型
from diffusers import DiffusionPipeline, LCMScheduler, UNet2DConditionModel
from diffusers.utils import load_image
unet = UNet2DConditionModel.from_pretrained(
"gvecchio/StableMaterials",
subfolder="unet_lcm",
torch_dtype=torch.float16,
)
pipe = DiffusionPipeline.from_pretrained(
"gvecchio/StableMaterials",
trust_remote_code=True,
unet=unet,
torch_dtype=torch.float16
)
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
pipe = pipe.to(device)
material = pipe(
prompt="带有剥落油漆的老旧生锈金属条",
guidance_scale=10.0,
tileable=True,
num_images_per_prompt=1,
num_inference_steps=4,
).images[0]
material = pipe(
prompt=load_image("输入图片路径.jpg"),
guidance_scale=10.0,
tileable=True,
num_images_per_prompt=1,
num_inference_steps=4,
).images[0]
basecolor = material.basecolor
normal = material.normal
height = material.height
roughness = material.roughness
metallic = material.metallic
🗂️ 训练数据
模型训练数据整合自MatSynth和Deschaintre等人的数据集,包含6,198组独特PBR材质。另纳入4,000组通过SDXL模型生成的纹理-文本配对样本。🔍
🔧 局限性
当前版本存在以下限制:
- 对描述复杂空间关系的提示处理能力有限。🧩
- 难以准确呈现高度细节化的图案或图形。🎨
- 某些材质类型的反射属性可能生成不准确。✨
未来更新将通过纳入更多样化的训练提示和改进复杂纹理处理机制来优化这些问题。
📖 引用文献
若在研究中使用本模型,请引用以下论文:
@article{vecchio2024stablematerials,
title={StableMaterials:通过半监督学习增强材质生成多样性},
author={Vecchio, Giuseppe},
journal={arXiv预印本 arXiv:2406.09293},
year={2024}
}