次世代美术工作流

发布于 2019-03-30  147 次阅读


本篇内容为整理次世代美术工作流
基于所见即所得的思想,艺术家在工作时需要得到一个立即的反馈;
比如我在法线贴图上用正强度的画笔画出一个凸起,我需要立刻在模型上观察这个凸起的角度、幅度是否合理;
如果必须要将贴图导入游戏引擎观察效果,是非常繁琐的,这里强调了"即时反馈"的重要性;
现在很多图像软件中参数的变化都有"即时反馈"的特性了,比如ShaderGraph中设置节点和Blender中画主贴图;
但是想要满足次世代工作流的"即时反馈"需求依然困难,法线贴图和区域遮罩这种常见需求算容易解决的;
金属度、粗糙度、噪声偏移贴图等,每个像素的值需要通过具体的shader来计算出最终效果的特殊贴图(区别于纹理);
特殊贴图中的每个通道的值被shader中的代码调用,用于表示颜色(衰减)、方向、偏移量(厚度)、光照模型参数等;
导言的话有点长,本篇中不重点讨论shader,将尽量提高整个工作流的完整性。

参考资料:
Ak's Blog:次世代美术制作流程
Substance Painter文档

安装自定义shader

在SubstancePainter(以下简称SP)中,你可以用GLSL语法写自定义shader,但是只包括fragment着色器的一部分。一个最简单的shader示例:
void shade(V2F inputs)
{
diffuseShadingOutput(vec3(1.0, 0.0, 0.0));
}

将自定义代码保存到一个名为test.glsl的文件;
拖拽.glsl文件到SP的安装目录下,相对路径是:
\resources\shelf\allegorithmic\shaders
打开SP,着色器设置,此时着色器列表中新增了test;
选择test,mesh会变成全红色;

SP相关文件格式

".alg_meta"这个文件夹包含生成的材质缩略图,可删除;
在shaders文件夹中有15个着色器文件可以供我们参考;
shelf文件夹目录对应UI界面中的展架;
resources\shader-doc文件夹有一大堆shader相关的离线文档;
.sbsar:substance designer文件,可作为Material/Filter/Generator;
.sbr:需要使用SD导出为.sbsar文件才能在SP中使用
.spmsk:智能遮罩,Mask
.sppr:材质预设/粒子预设,Material/Particle
.spsm:智能材质球
.spp/.spt:项目/模板文件,模板中不包含模型;
.tga/.png/.jpeg:Texture

使用模板(.spt)新建项目

模板:包括纹理集、shader、baker settings
mesh:选择一个fbx/obj文件,作为绘制载体;
UDIM:一种UV打包方式,平铺大量图层为一个贴图;
法线贴图格式:Unity使用OpenGL模式,左下角VU坐标为(0,0);
逐片元切线空间计算:Unity需要关闭此项;
贴图辨率:Unity默认2048x2048分辨率,可随时更改;
添加贴图:导入要编辑的贴图,如高模法线贴图、环境遮蔽贴图等;

新建导出预设(.spexp)

文件-导出贴图-CONFIGURATION-'+'
Output和Input的通道之间存在映射关系,可实现每个通道保存指定类型数据;
输出通道类型:R/G/B/A/Gray
通道按钮的背景颜色:对应输入贴图类型;
输出贴图的通道默认值:R/G/B/Gray默认为0,A默认为1;
输出贴图的通道赋值后条的颜色:对应输入贴图中的某个通道,可观察鼠标提示;
输入贴图的通道与条的颜色的映射关系:R-红/G-绿/B-蓝/A-黑白/Gray-灰
命名:默认$mesh_$textureSet_输入类型
Mesh maps:烘焙后的贴图
Converted maps:对其他通道做出转换后得到的预计算通道;
Unity外部设置:

术语集

导出预设:保存导出贴图时使用的打包和命名规则;
Mip-Map:保存一个图片序列,内容为源贴图的逐分辨率降低版本,自定义shader用不上;
UV扩张:为了实现Mip-Map效果延伸"源贴图有效部分"的边缘,需设置扩张宽度(像素);
有损压缩:jpg格式图片有损,避免数据丢失时应选择png格式;

视频:

总览
系列教程

Layer与Channel的关系?

Layer编辑

一个Layer层可以覆盖多个Channel;
下拉列表选择Channel的作用:逐Channel设置Layer的混合模式/透明度;
下拉列表中出现的Channel列表基于贴图集设置;
当一个Layer不存在Effect时,缩略图下方的条是灰色的;

进入遮罩编辑模式:Alt+鼠标左键
禁用/启用遮罩:Shift+鼠标左键
复制遮罩:右键>复制遮罩 => 右键>粘贴进遮罩
反转遮罩:右键>反转遮罩
保存遮罩:右键>创建智能遮罩
使用智能遮罩:(按住Ctrl> 可选/覆盖Effect)拖拽智能遮罩到Layer

混合模式(每一层Layer都对Layer链的输出进行过滤):
Normal:不对结果产生影响,直接复制下层Layer的结果;
Passthrough:

快速遮罩

主菜单-视图-开启快速遮罩(Y,同时进入遮罩的编辑模式)
编辑遮罩-退出遮罩的编辑模式(U,同时进入绘制模式)

画笔工具

笔刷属性

必须要先选择一个Layer才能选择画笔工具
Size:笔刷宽度(感压)
Flow:笔刷厚度/透明度
Stroke opacity:未知 从效果上来看和Flow差不多
Spacing:笔划中的帧(笔印)间隔
Angle:设置笔刷旋转角度
Follow Path:笔刷的旋转角度跟随笔划路径方向

笔刷快捷键:
Ctrl + 鼠标右键左右 = 调整 Size.
Ctrl + 鼠标右键上下 = 调整形状模糊度,越高时帧边缘越清晰;
Ctrl + Left Mouse + Drag left-right = change flow
Ctrl + Left Mouse + Drag up-down = change rotation.
绘制直线:按下笔刷 > 按住Shift(+Ctrl) > 移动笔刷

Size/Flow/Angle/Position Jitter:随机抖动值,根据百分比幅度对帧进行调整
Alignment:帧在投影时的对齐方式
Backface culling:背面剔除,避免绘制到其他表面;
Size Space:默认Object

透明

Stencil遮罩

屏幕空间的灰度图作为遮罩,可在mini展架上选择Stencil遮罩;

Stencil遮罩快捷键
按住S > 鼠标左键/中间/右键:旋转/平移/缩放Stencil遮罩

材质

材质的属性定义将要绘制到mesh上的内容;
一个材质可以对应多个Channel,控制选择性、颜色、表面细节;
笔刷的来源:颜色/灰度/材质预设/物体
单个Channel可以加载bitmap和物体

克隆(Clone)工具的使用
新建Layer作为克隆图层 > 选择Clone > 按下V进行踩点 > 在指定区域绘制
absolute source Clone工具会在每次克隆宏回归踩点处

污迹(Smudge)工具的使用
新建Layer作为污迹图层 > 选择污迹工具

投影工具
操作方式与Stencil遮罩相似
遮罩部分不能自由选择,可以使用遮罩当笔刷;

工具栏+上下文工具栏

画笔:基于笔刷预设(.sppr)的绘图工具,用于图层/遮罩的绘制;
物理笔刷:基于粒子预设(.sppr)的特殊笔刷,包含物理属性;
擦除:特殊笔刷,用于移除图层/遮罩上的内容;
在指定的Channel进行绘制:按钮关闭无关的Channel

上下文工具栏用于调整当前选择的工具
画笔/擦除/投影/弄脏/克隆
填充:
材质拾取器

术语集
精度模式:滑动Slider时,按下Shift键将减缓滑动速率;
预览shader:用于渲染材质球在展架上的球形预览状态使用的shader;
贴图集列表:对应一个mesh的submesh数组和material数组
重设贴图集:当submesh数量大于1时可以调整submesh和material的映射关系
新建shader实例:使用shader创建material,material用于保存shader的参数
颜色空间(Gamma/Linear):对颜色进行加码和解码
加码(拍摄时):0.5 ≈ 0.22的0.45次方 将自然界光照0.22强度保存为0.5
解码(播放时):0.22 ≈ 0.5的2.2次方 将0.5的数值显示为0.22的光照强度
在Unity的Gamma模式下,shader输出(0.22,0,0)后屏幕上采样得到(0.22,0,0)
切换至Linear模式后,采样到(0.5,0,0),shader的输出被加码(曲线不同/值域不变)
sRGB图片:已经被加码过的图片
使用RGB吸管采样到的颜色值为加码后/解码前的值
预设(Preset):保存了笔刷/材质/笔刷+材质的配置


关注成长,注重因果。