Article
未读介绍MetaHumans Creator是虚幻引擎用来创建cg角色的工具。如同官方介绍的一样,它能够在几分钟创造出一个照片级的数字角色。
可以将它导入到Maya,Blender,Unreal等软件进行动画制作和渲染。(下图为MetaHuman的面部绑定)
MetaHumans Creator暂时是一个云端流应用(不知道以后会不会演变成本地app)。如果要使用它,需要在虚幻官网申请测试权限,这里贴一个申请链接:https://www.unrealengine.com/zh-CN/metahuman-creator
点击申请测试权限,填一下需要的信息就好。
使用MetaHuman Creator的一些要求:
需要unreal的版本大于4.26(如果要将MetaHuman导入到unreal中)
需要下载安装Quixel Bridge应用(用于模型导出)
每次使用云端工具时间为一小时,一小时后会自动关闭网页会话,等待一小段时间可以再次开启云端应用
开始使用获得测试权限后,在这个链接登陆即可:https://metahuman.unrealengine.com/需要等待数分钟,给它一些 ...
Article
未读前言
看过之前电影视效制作中的Matchmove这篇文章的朋友应该知道,跟踪最基本的步骤就是为匹配物或场景添加二维跟踪点。
在进行摄像机反求的时候,可能单一软件的解算效果不是很理想,通常我们切换到另一个软件进行尝试解算。(比如对于变焦镜头来说,SynthEyes的变焦解算会稍好于3DEqualizer。)而这些二维跟踪点,在跟踪软件之间是不互通的。
当我们已经完成了二维点的添加工作,想要更换跟踪软件的时候。就需要一个工具来进行点之间的转换。
分析为了得知不同软件之间导出二维点格式的区别,我们可以在同一段素材的同一个位置,添加一个二维点。然后导出:
首先可以看到,点数据是以一个txt文本存储的,里面记录了点的名称,帧数,和对应帧的x,y位置。
其中除排序格式不一样之外,最重要的则是对二维点x,y位置描述上的不同。像3DE,PFTrack和Boujou,是以图像像素为标尺。而SynthEyes则要独树一帜些。
以1920x1080的尺寸素材为例,我们可以为素材的四个角分别添加跟踪点,观察点的x,y数值,这里用画图来表示结果:(红线为X轴,绿线为Y轴)
PFTrack和3DE是相同的, ...
Article
未读来自未知开发者1sudo xattr -rd com.apple.quarantine sesinetd
你没有权限打开应用程序123456brew install upx# 这里以xf-adsk软件来举例# 把xf-adsk放到桌面,右键包内容进入到MacOSsudo upx -d /Users/lingyunzhang/Desktop/xf-adsk20.app/Contents/MacOS/x-force
打开dmg资源忙1.打开活动管理器2.搜索disk的进程
3.随便退出几个进程就可以了(双击 - 强制退出)
Homebrew安装12345# 官方安装/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"# 国内源/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
今后安装 ...
Article
未读前言视效制作中,在完成Camera Tracking后,可能会被告知:“素材进行了翻转处理”。然后丢给你一个镜像后的素材,并要求你重新进行Tracking。
翻转素材一般有两种情况:
基于x轴镜像
基于y轴镜像对于这样的镜头,不用重新再做一遍Tracking,只需要在Maya里进行一些处理就可以了。
这篇文章主要是讲如何让摄像机和场景物体匹配上翻转后的素材。
基本方法1.对于x轴翻转的,将摄像机的ty,rx,rz轴的数值设为其相反数。
2.对于y轴翻转的,将摄像机的tx,ry,rz轴的数值设为其相反数。
3.最后把场景中其它物体(不要摄像机)打组,以原点为中心缩放-1的数值。(如果是x轴翻转,缩放y轴;如果是y轴翻转,缩放x轴)
脚本实现上述最麻烦了的就是对摄像机进行操作,因为如果手动的去修改每一帧数值会非常繁琐。
通常这样的问题可以交给代码来处理。
1234567891011# 选择你的摄像机,运行下面的代码import pymel.core as pmcam = pm.ls(sl=1)[0]start_t = int(pm.playbackOptions(q=1, min=1) ...
Learn
未读安装在官网 https://docs.conda.io/en/latest/miniconda.html#macosx-installers 下载:
在终端里(会安装到当前目录):
12345bash Miniconda2-latest-MacOSX-x86_64.sh# 需新建Terminal Session或手动加载环境变量来使得conda生效# 手动加载source ~/.bash_profie
常用命令创建虚拟环境12# 这里djangocms为环境名称conda create -n env_name python=2.7 -y
激活以及退出虚拟环境12345678# 激活conda activate env_name# 查看环境下所有pip包pip freeze# 退出conda deactivate
列出所有存在的环境1conda-env list
删除一个已有环境1conda remove --name env_name --all
包管理123456789# 查看当前环境下已安装的包conda list# 查看某个指定环境的已安装包conda list -n ...
Learn
未读公共属性使用id()可以查看,公共属性的地址是一样的。
Dog.d_type = '藏獒' 一旦更改,其他的实例对应属性也会随之更改。
12345class Dog: d_type = '京巴' # 公共属性, 类属性, 类变量 def say_hi(self): print('hello, i am a dog, my type is ', self.d_type)
好处是可以节省内存空间。
重写父类的方法继承父类方法后,需要重写父类方法,并调用父类方法的话。
可以用到super函数
1234567891011121314151617181920212223class Animal: def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def eat(self): print('%s is eating..' % self.n ...
Article
未读下面的内容在py3.8测试ok,有些是3.5或者3.7之后才开放的特性
语句变成函数print语句在python3里变成了print()函数。
1234567# python2print 'hello pig!'# python3print('hello pig')print('1', '2', '3', sep='+')print('1', '2', '3', sep='\n')
raise语句。
12345# python2raise Exception, 'I made a mistake.'# python3raise Exception('I made a mistake.')
当然还有exec()。
12345# python2exec 'print("Hello World")'# pyt ...
Code
未读读取和写入json文件1234567# 写with open(json_path, 'w') as f: json.dump(self.items, f)# 读with open(json_path) as f: items = json.load(f)
读取和写入csv文件1234567891011# 读with open(csv_file) as f: csv_reader = csv.reader(f, delimiter=',') for row in csv_reader: print row# 写with open(csv_file, 'wb') as f: csv_write = csv.writer(f) for row in csv_data_list: csv_write.writerow(row)
OrderedDict 排序1234567891011121314>>> from collections import O ...
Code
未读
方法
描述
cmp(dict1, dict2)
比较两个字典元素。
len(dict)
计算字典元素个数,即键的总数。
str(dict)
输出字典可打印的字符串表示。
type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。
dict.clear()
删除字典内所有元素
dict.copy()
返回一个字典的浅复制
dict.fromkeys(seq[, val])
创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值
dict.has_key(key)
如果键在字典dict里返回true,否则返回false
dict.items()
以列表返回可遍历的(键, 值) 元组数组
dict.keys()
以列表返回一个字典所有的键
dict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加 ...
Code
未读
方法
描述
cmp(list1, list2)
比较两个列表的元素
len(list)
列表元素个数
max(list)
返回列表元素最大值
min(list)
返回列表元素最小值
list(seq)
将元组转换为列表
list.append(obj)
在列表末尾添加新的对象
list.count(obj)
统计某个元素在列表中出现的次数
list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
list.insert(index, obj)
将对象插入列表
list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj)
移除列表中某个值的第一个匹配项
list.reverse()
反向列表中元素
list.sort(cmp=None, key=None, reverse=False)
对原列表 ...