[toc]本篇内容为整理次世代美术工作流 基于所见即所得的思想,艺术家在工作时需要得到一个立即的反馈; 比如我在法线贴图上用正强度的画笔画出一个凸起,我需要立刻在模型上观察这个凸起的角度、幅度是否合理; 如果必须要将贴图导入游戏引擎观察效果,是非常繁琐的,这里强调了”即时反馈”的重要性; 现在很多图像软件中参数的变化都有”即时反馈”的特性了,比如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):保存了笔刷/材质/笔刷+材质的配置