zoukankan      html  css  js  c++  java
  • Substance Matrerial(.sbsar文件)

    1. 什么是Substance Matrerial
    Substance是Allegorithmic公司技术制作的程序化贴图材质。
    Substance基本上是一组map,用所有编辑器中所产生的参数(Diffuse, Normal, Specular, Bump等)来定义整个材质的最终效果。

    1.1 支持Substance材质的3d软件
    Substance Designer
    Substance Player
    Unity 3d (3.5 以上的版本)
    Autodesk maya 2012 以上的版本 
    Autodesk 3dsmax 2012 以上的版本
    Autodesk Flame 2012 以上的版本


    2. Substance 材质示例
    这里,我们在unity3d中,将Substance 材质和普通材质做一个对比,帮助还没有完全理解Substance的读者直观的理解Substance材质。

    2.1  普通材质
    以下是一个应用了一张Diffuse 贴图的坦克模型。
    <ignore_js_op>


    <ignore_js_op>



    2.2  Substance材质
    我们用Substance材质替换随模型导入的默认材质,看看有什么不同,从模型上看,似乎除了反射面略暗,颜色偏灰,没有太多不同。
    <ignore_js_op>



    但是观察一下Substance材质, 你会发现它和普通材质相比,多了一些参数:
    <ignore_js_op>



    修改Dirtness和Bumpness参数,让我们看看Substance给我们带来了什么。
    Dirtness = 0.5, Bumpness = 0.5的效果:
    <ignore_js_op>



    Dirtness = 1, Bumpness = 0的效果:
    <ignore_js_op>



    也就是说,Substance通过可视化和可编程化的参数接口,允许用户在运行时动态的生成不同的贴图,是不是很酷?更重要的是,用户只需要提供一张Diffuse贴图,就可以得到法线,和高光贴图, 图片体积比普通的贴图材质减少了3倍!

    3. 创建Substance材质
    Substance Designer是 Allegorithmic公司发布的制作Substance材质的设计工具, 目前最新的版本是3.7, 官方授权费是570美元/2台机器。 大家如果是商业应用,请购买正版授权。

    Substance文件类型
    在学习Substance Designer之前,先介绍一下Substance 文件。
    和程序代码一样,Substance也有源文件和二进制发布文件。
    源文件是以sbs后缀,内容为xml格式。 源文件可以在Substance designer 编辑并发布。
    二进制发布文件是以 sbsar后缀,sbsar文件是不可编辑的。Unity, 3dsmax, Maya中能使用的都是sbsar文件。只有substance designer可以发布sbsar文件。

    使用Substance designer制作坦克材质
    关于Substance Designer的操作界面,快捷键,菜单栏等等基础内容,笔者不打算在这里详述,Substance Designer 界面非常简洁,自带有User Guide文档。
    <ignore_js_op>



    3.1 创建Substance
    菜单栏 File -> New Substance
    在弹出窗口中把Graph Name设为TankSkin, 其它保持默认。点击Ok。
    <ignore_js_op>



    3.2 添加Diffuse贴图
    将IS_4M.dds文件拖动到主面板。在接下来的弹出窗口按实际需要选择Import Resource或者Link Resource。 一个是把图像文件链接到sbs文件中(体积小),另一个是把图像文件内容嵌入到sbs中(体积大)。

    IS_4M.dds:
    <ignore_js_op>



    这时你的主操作面板应该是这样的:
    <ignore_js_op>



    3.3 让坦克变脏 - 添加Dirtness参数
    制作一个充满污点的贴图是Substance最典型的应用之一,也非常容易实现。

    3.3.1 添加Moisture Noise节点
    首先在Substance Desgner的左下方,Library下面的文本输入栏输入Noise, 会出现几排Substance预定义好的噪音生成器。
    <ignore_js_op>


    将Moisture Noise拖放到主操作面板中。

    3.3.2 Add Node -> 添加Gradient Map节点
    将Moisture Noise的输出管线链接到Gradient Map的输入管线。
    这样做的目的是将Moisture Noise 从一个灰阶图(Gray scale)转换成一个色彩图(Color Map)。为什么要这样做,稍后就会解释。
    这时你的主面板应该是这样:

     

    <ignore_js_op>



    3.3.3 添加Blend节点
    Substance Designer 提供了许多预定义好的功能节点,Blend是其中比较常用的一个节点。它和3ds max材质中的Blend功能一样,可以将两张位图以不同的模式合成在一起。

    接下来要添加Blend节点并且输出Diffuse贴图了。
    首先, 在主操作界面右键单击-> Add Node -> Blend。这会在你的操作界面上添加一个Blend节点。
    <ignore_js_op>



    仔细观察一下Blend节点, 它有三个输入源:
    最上面的是Foreground(前景图), 它一半是灰色,一般是橙色,意思是它可以接受灰阶或者色彩图。
    第二个是Background(背景图), 它也可以接受灰阶或者色彩图。
    第三个是Opacity (硬度图), 它是可选的,如果你不分配Opacity图, 它就是通过参数 – Opacity 控制。硬度图必须是灰阶图。

    需要注意的是,Blend节点要求Foreground和Background的灰阶或色彩属性保持一致。也就是说,Foreground和background必须同时为灰阶或者色彩图! 这就是为什么我们在3.3.2 要用一个Gradient Map 将灰阶噪音图转换为色彩图的原因。

    将Moisture Noise链接到Foreground 接口, 将IS4.dds位图链接到Background接口。 然后将Blend接口的输入端链接到Diffuse节点的输入端。

    这时你的界面看起来是这样的:
    <ignore_js_op>



    选择Blend节点, 找到Blending Mode, 将Blending Mode 改成 Multiply
    <ignore_js_op>



    调节Opacity参数:
    0 = Foreground像素最弱,也就是无污点。
    1 = Foreground像素最强,也就是污点最强。 

    Opacity = 0   
    <ignore_js_op>

         

    Opacity = 1
    <ignore_js_op>



    3.3.4 导出Blend/Opacity参数为可编程化参数
    现在你已经可以通过Blend节点的Opacity参数调节位图的污点程度。但是到目前为止,Opacity参数还只能在Substance Designer中可见, 离开了Substance Designer, 在Unity, Maya, 3dsmax 中是无法修改这个参数的,因为它还没有全局化, 它还只是Blend节点的一个本地参数。

    现在让我们把这个参数导出成全局化的参数。

    双击Blend节点
    在Opacity右边找到函数编辑按钮,它的图标是一个正弦曲线。
    <ignore_js_op>



    点击Expose, 这会将Opacity参数暴露给外界,变成一个可视化的参数。
    在弹出的Expose Parameter对话框,为Input Name制定一个名字 Dirtness:
    <ignore_js_op>



    <ignore_js_op>



     



    一旦你将Opacity参数导出成全局变量 Dirtness, 它就不会再属于Blend节点了,要修改这个变量,你必须点击右上角的sbs项目才能在右边的属性窗口编辑这个全局变量。
    <ignore_js_op>



    这样,你就完成了生成一个动态污点的Substance材质的全部工作。

    3.3.5 编译发布Substance – sbsar文件
    Substance已经就绪了! 你可以编译并发布它了。
    在右上角右键单击你的sbs项目,点击Publish: 
    <ignore_js_op>



    把这个sbsar文件放到Unity中,去看看效果吧 !

    3.4 生成法线凹凸贴图
    Substance制作法线凹凸贴图也是非常强力的!而且不需要提供额外的贴图文件,直接从Diffuse 贴图生成。

    这里要补充一下,Substance将Diffuse贴图转换成Normal贴图的原理是将贴图中的RGB标量值,通过公式计算转换成代表法线的向量值。但是这并不能反映出你的模型真实的凹凸情况,也就是说通过 Diffuse贴图生成的法线并不是真正基于模型本身的顶点信息生成的,而是通过Diffuse贴图的RGB值生成的, 如果你需要的效果是能真正反映出模型本身的凹凸特性,你应该直接添加一个法线贴图,而不是用Diffuse贴图生成。

    3.4.1 添加节点
    首先请添加以下节点: Clouds_3(从Library中搜索), Levels(标准功能节点), Normal(标准功能节点),并链接到Normal Output.

    如果你没有找到Normal output.可以用这样添加一个Normal Output: Add node -> output, 并将usage设为Normal(默认是diffuse).

    这时你的主操作界面应该看起来是这样的(之前的污点贴图我就不截屏了):
    <ignore_js_op>




    这个图的意思是: Clouds_3 = 原始输入,用于产生高度图。
    Levels = 控制器,控制生成的平坦度。
    Normal = 转换器,将高度图装换成法线图。
    Ouptut Normal = 最终输出法线贴图。

    3.4.2 关于Normal节点
    Normal节点的功能是: 接受一个代表高度图的灰阶图,并通过公式将这个高度图转换成法线贴图。
    灰阶图越白的像素,代表高度越高,越暗的像素代表高度越低。如果一个图片区域内的黑白像素越不均匀,则代表这一区域内的法线越不规则。反之,如果一个区域内的黑白像素十分均匀,例如,全部是黑色,或者全部是白色,则这个区域的法线则全部指向同一个方向,也就是越规则。

    3.4.3 关于Level节点
    Level节点是Substance制作中最常用的标准功能节点之一。它的作用是在输入和输出端设置阀值,常用来调整图形的密度,明暗度等属性。
    在这里,我们通过Levels来限制输入像素的黑度,以达到调整法线的平坦度的目的。
    双击Levels节点,在右边的属性栏窗口,找到Specific Parameters 卷边栏,点击Values按钮:
    <ignore_js_op>



    点击Values按钮会从矩形图界面切换到到参数化界面。
    <ignore_js_op>



    调节Level Out Hight参数,观察Normal和Normal output节点, 你会发现随着Level out high的数值变小,输出法线贴图变的平坦。这是因为,你修改了Level节点输出的最大值。如果最大值为0,就是说所有输出像素的最大值是0,这样你的法线节点就是接受一个全黑的单色图片。

    小结:Level out high越小,高度图的黑白像素越单调,输出的Normal 贴图也就越平滑。

    3.4.4 导出Level/Level Output High参数
    将Level Output High 参数导出为 smoothness 后,你就可以在Unity/3ds max/Maya中通过这个参数来调节Substance材质的光华程度了。

    小结
    以上只是介绍了 Substance 最典型的用途之一,并且介绍了Substance Designer设计Diffuse和Normal贴图的一般过程。 事实上Substance还能支持众多的输出通道,如Specular 高光贴图通道,Bump 凹凸贴图通道, Reflection 反射贴图等等。

  • 相关阅读:
    1.1.9 如何从正文开始设置页眉页脚
    1.1.8 怎样在Word的页眉中插入一级标题
    1.1.5 在同一折线图中画2条曲线
    1.1.4 图片自动编号
    1.1.3 公式编号对齐
    1.1.2 一页摘要不分栏,正文分栏
    1.1.1 参考文献格式未满行直接换行
    kernel page_size
    kernel cpu_cur_freq
    kernel printk
  • 原文地址:https://www.cnblogs.com/muyouking/p/6479326.html
Copyright © 2011-2022 走看看