范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

用Blender批量创建3DNFT藏品

  我想为大约 1000 多个 NFT 收藏品创建 3D 角色,但不知道该怎么做。手动一个一个地创建所有模型是愚蠢的。
  实际上,我喜欢使用 Blender 来创建 3D 模型,所以也想使用它。
  当我在互联网上搜索时,我发现 Blender Scripting(Python) 可以用于随机组合各种特征以编程方式创建3D模型的解决方案。它使用 Python 语言。 1、NFT藏品目录结构
  目录树如下:
  parts ——其中包含的每个 3D 零件。 body ——身体。 head ——头。 misc  — 其他文件(背景、灯光、相机等)。 outputs——由 Blender 脚本生成的图像和元数据。 script - Python脚本文件。 2、创建3D部件
  这一次,创建 2 种类型的零件,包括 头部 , 身体 。和 misc(包括背景图像、相机、灯光的文件) 。
  步骤如下: 打开 Blender 并创建一个新文件并删除所有默认对象,并将其保存在 body 或 head 文件夹中。(例如 nft-collectibles/parts/head/head_rabbit.blend ) 在 Blender 中,创建一个与文件名相同的新集合。(例如,如果文件名为 head_rabbit.blend ,则集合名称为 head_rabbit ) 在刚刚创建的集合中创建一个零件模型。 调整大小和位置,使角色看起来自然。 最后保存。 2.1 3D NFT 头部件示例
  文件名: nft-collectibles/parts/head/head_rabbit.blend
  收藏名: head_rabbit
  文件名: nft-collectibles/parts/head/head_frog.blend
  收藏名: head_frog
  2.2 3D NFT身体部件示例
  文件名: nft-collectibles/parts/body/body_shirt.blend
  收藏名: body_shirt
  文件名: nft-collectibles/parts/head/body_zombie.blend
  收藏名: body_zombie
  2.3 3D NFT 辅助部件示例
  文件名: nft-collectibles/parts/misc/misc.blend
  收藏名: misc
  3、创建Blender Python脚本文件
  要创建脚本文件,请在 Blender的 脚本工作区 中打开你喜欢的代码/文本编辑器或文本编辑器。 3.1 gen_metadata.py
  这是为了为 NFT 生成随机元数据: import bpy  # The module for Blender Python import json import random  # This time, 100 characters will be generated. TOTAL_CHARACTERS = 100  # Specify the directory in which generate images finally. OUTPUTS_DIR = "c:/nft-collectibles/outputs/"  # List of parts (the file name (collection name) of each created part is included in this.) list_body = [     "hoodie",     "overall",     "pants",     "shirt",     "tanktop",     "t_shirt",     "zombie" ] list_head = [     "devil",     "dragon",     "frog",     "king",     "pirate",     "rabbit",     "robot",     "skull",     "warrior" ]   def random_attributes():     # Select parts randomly from lists     random_head = random.choice(list_head)     random_body = random.choice(list_body)      # Format each name for the value of attributes in metadata (e.g. "head_rabbit" -> "Head Rabbit")     random_head = random_head.replace("_", " ").title()     random_body = random_body.replace("_", " ").title()      attributes = [         {             "trait_type": "Body",             "value": random_body         },         {             "trait_type": "Head",             "value": random_head         }     ]      return attributes   def main():     print("Start generating metadata...")      # Create a tempolary dict     dict_list = []      for i in range(TOTAL_CHARACTERS):         attributes = random_attributes(i)         d = { "attributes": attributes }         dict_list.append(d)      # Create a list of unique data removed duplicates      unique_list = list(map(json.loads, set(map(json.dumps, dict_list))))     # If the duplicated found, cancel scripting and try again     if len(unique_list) < TOTAL_CHARACTERS:         print("ERROR: Properties duplicate")         return      # Save metadata files (.json) to outputs folder     for i, attr_dict in enumerate(unique_list):         # Create a metadata object         obj = {             "name": "Character #" + str(i),             "description": "A collection of 3D character",             "image": "https://example.com/"+ str(i) + ".png",             "external_url": "https://example.com/",             "attributes": attr_dict["attributes"]         }         with open(OUTPUTS_DIR + str(i) + ".json", "w") as outjson:             json.dump(obj, outjson, indent=4)          print("Generated metadata id: {} ".format(i))   main()3.2 gen_model.py
  这是为了从元数据生成模型。 import bpy import json import random import shutil  # This time, 100 characters will be generated. TOTAL_CHARACTERS = 100  # Path PARTS_DIR = "c:/nft-collectibles/parts/" OUTPUTS_DIR = "c:/nft-collectibles/outputs/"   # Initialize the scene (deleting the all default objects) def init():     for obj in bpy.data.objects:         bpy.data.objects.remove(obj)     for col in bpy.data.collections:         bpy.data.collections.remove(col)   # Set configurations for rendering def set_render_config():      # For example, set the rendering engine "EEVEE" (but Blender may be configured EEVEE default. if so, you don"t need to do that)     r = bpy.context.scene.render     r.engine = "BLENDER_EEVEE"     r.resolution_x = 1024     r.resolution_y = 1024      # Set the output file format     r.image_settings.file_format = "PNG"   def append_misc():     path = PARTS_DIR + "misc/" + "misc.blend/Collection/"     collection_name = "misc"     bpy.ops.wm.append(filename=collection_name, directory=path)      # Link camera to scene     cam = bpy.data.objects["camera"]     scene = bpy.context.scene     scene.camera = cam   def append_body(trait_value):     body_name = "body_" + trait_value      path = PARTS_DIR + "body/" + body_name + ".blend/Collection/"     bpy.ops.wm.append(filename=body_name, directory=path)   def append_head(trait_value):     head_name = "head_" + trait_value      path = PARTS_DIR + "head/" + head_name + ".blend/Collection/"     bpy.ops.wm.append(filename=head_name, directory=path)   def render(id):     # Render     bpy.ops.render.render(write_still=1)      # Save     bpy.data.images["Render Result"].save_render(filepath=OUTPUTS_DIR + id + ".png")   def remove_parts():     # Remove all parts except "misc"     for col in bpy.data.collections:         if col.name != "misc":             for obj in col.objects:                 bpy.data.objects.remove(obj)             bpy.data.collections.remove(col)             continue   def generate(id, metadata):     for attr in metadata["attributes"]:         # Body         if attr["trait_type"] == "Body" and attr["value"] != "":             append_body(attr["value"])         # Head         if attr["trait_type"] == "Head" and attr["value"] != "":             append_head(attr["value"])      render(str(id))      # After rendered, remove all parts     remove_parts()   def main():     print("Start generating models...")      init()     set_render_config()     append_misc()   # Regarding "misc", add it to the scene in advance because it is common to all characters.      # Generate character images     for i in TOTAL_CHARACTERS:         with open(OUTPUTS_DIR + str(i) + ".json", "r") as metaJson:             data = json.load(metaJson)             generate(i, data)             print("Generated model id: {} ".format(id))  main()4、 运行脚本
  创建脚本文件后,你可以运行它们。
  打开 Blender 并单击编辑器顶部  几何节点 旁边的 脚本工作区。
  要检查处理过程中的状态,可以通过单击顶部菜单中的 "窗口"->"切换系统控制台"来打开控制台。 4.1、生成元数据
  单击 Open  -> 选择 gen_metadata.py  -> 单击 Run Script 。
  如上源代码所示( gen_metadata.py ,第68-73行),如果数据组合重复,该过程将被取消。在这种情况下,你需要再次单击 运行脚本 。
  之后,可以看到在 output 文件夹中生成了 0.json 、 1.json 等元数据文件。 4.2 生成3D NFT角色
  点击 Open  -> 选择一个 gen_model.py  -> 点击 Run Script 。
  之后,可以看到在 output 文件夹中生成了 0.png 、 1.png 等渲染图像文件。
  原文链接:http://www.bimant.com/blog/blender-nft-scripts/

windows10有必要安装360这样的软件嘛?看了大家回答的,我都有点无语了,对信息安全还是需要普及一下基本知识。你有防火墙能怎样,你知道禁用445端口么?不还是中永恒之蓝。你的Windows有及时更新最新的安全补丁么?你们说python可以做界面吗,怎么做?Python针对图形界面(GUI)开发,提供了丰富的第三方库,比如tkinterwxPythonPyQtPySide库。下面我们使用tkinter库实现一个简单的加减乘除计算器,先为什么国产手机已经是上亿像素,还不如苹果的2000万像素?苹果拉屎舔狗去舔,苹果嫌没舔干净举个例子,拍照就像饿了去吃饭,像素就是碗里的米。苹果一碗饭挺多的,有2000粒米。其他手机虽然只给半碗,但是碾碎了,有一万粒。这时候你问,凭什么一万关于黑白电视机,说出你们关于它的深刻记忆?关于黑白电视,说出你们关于它的深刻记忆?答这个问题,我们这代人最有发言权,因为我们买过黑白电视,看过黑白电视。电视机,现在家家有,一家不只有一台,有的各个房间都有现在电视是彩色的超中国北斗系统大受欢迎,产值超过4000亿,137国寻求合作中国在改革开放之后,在科技领域进行了大量的投入,最终在某些领域实现了弯道超车。目前,世界上知名度最高的定位导航系统就是GPS系统,而现在中国的北斗系统正在争取世界最好定位系统的位置iPhone8Plus升级到iOS12系统,信号满格4G网速却变得很慢经常会断网该怎么办?感谢您的阅读!iPhoneX升级到iOS12系统除了耗电问题之外,最大得问题就是信号问题,之前iPhoneX信号基本都是满格,而升级到iOS12后,信号变成了三格或者四格!更有甚者对象存储服务minio1安装服务器端网址httpsmin。iodownloadlinuxwgethttpsdl。min。ioserverminioreleaselinuxamd64minio指定账号密码常用网络命令总结原创打码日记(微信公众号IDcodelogs),欢迎分享,转载请保留出处。网络连通性检测当应用出现网络异常时,首先需要确认的就是网络的连通性是否正常,下面一组命令可快速检测网络的连应对网络安全问题,珍爱网建立AI治理方案近年来,人们越发依赖线上的交流互动,因而做好网络安全防护也成为了各大平台的第一要务,如何保障用户的隐私信息安全防范电信网络诈骗等问题备受关注。据了解,知名度互联网婚恋服务企业珍爱网中国首家!提供毫米波雷达SOC天线方案的射频芯片厂商矽典微(ICLEGEND)致力于实现射频技术的智能化,专注于研发高性能无线技术相关芯片,尤其是24GHzAIoT毫米波传感器SoC,芯片尺寸仅为4x4mm平方超小面积百毫瓦级超低功黑马编程C学习笔记第10篇后面的课程简直就是举步维艰哭哭2022。4。1P41goto语句(跳转)无条件跳转goto标记(标记存在即跳转,跳转中间)(少用)代码GotoFLATFLATP42数组一维数组的定
币圈事件澳新银行暂不会向加密货币交易所提供银行服务澳新银行暂不会向加密货币交易所提供银行服务9月24日消息,澳新银行CEOShayneElliott周四在常设经济委员会上发言称,该行仍会维持不向加密货币交易所提供银行服务的政策。他手机慢速度快门超清画质拍摄的几张抓拍照片分享(部分旋转)9月20日晚上六点半左右用OPPORENO5PRO手机拍摄慢速度快门抓拍与旋转设定超清画质几张照片分享如附图。XHD,16。7MB,ISO1635,S133s。XHD,17。1MB手机慢速度快门抓拍旋转9月16日晚上七点多在小区北门路口拍摄平移跟拍同时也进行抓拍旋转练习,照片分享如附图。自我检讨。XHD,15。1MB,ISO687,S120s这张跟拍显影不足旋转还可以水平歪了XH爱沙尼亚反洗钱负责人爱沙尼亚应吊销加密货币许可证前英国财政大臣呼吁英国抓住加密货币行业增长带来的机会10月13日消息,前英国财政大臣LordPhilipHammond呼吁英国抓住加密货币行业增长带来的机会。Hammond刚刚加入印度教团呼吁政府监管加密货币当前99。02的比特币供应量处于盈利状态10月16日消息,Glassnode发推称,随着比特币再次突破6万美元,只有0。98的流通供应最后上次的花费价格更高。这185816枚比特币灰度比特币信托溢价率再次降至20左右灰度比特币信托溢价率再次降至20左右灰度投资(GrayscaleInvestments)比特币信托溢价率再次降低至20左右。该溢价率此前在今年四五月份降至20以下,之后几个月逐步有迈阿密市长正探索如何接受比特币纳税迈阿密市长正探索如何接受比特币纳税迈阿密市长FrancisSuarez表示,该城市正在探索如何接受使用比特币进行的纳税,从而在采用比特币方面迈出下一步。根据市长的说法,市政府官员已美国俄勒冈州联邦调查局提醒居民注意防范加密浪漫骗局马斯克因加密货币再次成为全球首富9月29日消息,特斯拉CEO埃隆。马斯克夺回全球第一富豪头衔。数据显示,现在马斯克拥有2014亿美元身家,超越亚马逊创始人贝索斯。此前金色财经报道,电销系统软件排名,北京外呼系统公司电销系统软件排名,北京外呼系统公司外呼系统一般多少钱?每家公司都不一样,这里先用智创良品的外呼系统简单讲解一下。外显号码这点很重要,直接影响了客户的接听率。电销线路一般根据打出去的连续拨号软件自动呼叫,自动外呼软件连续拨号软件自动呼叫,自动外呼软件自动呼叫软件是通过系统自动拨号,再将记录分配给空闲座席,从而很大程度上提高座席代表的工作效率。随着呼叫中心的发展,自动外呼通常也指预测外呼,系统通axb电销线路,axb电销软件axb电销线路,axb电销软件近年来,我国进入了数字征信时代,对信用信息采集整理保存和加工进行了限制性规定,明确了征信机构不得以非法方式采集信息,这一举措,尤其对以电话销售的企业有