找回密码
 立即注册
查看: 547|回复: 5

Substance in Unity

[复制链接]
发表于 2022-4-25 07:17 | 显示全部楼层 |阅读模式
前言

随着PBR的流行与普及,Substance工具流也逐渐变得普及开来,那么本文就来聊一聊有关Substance Designer制作的程序化贴图如何在Unity中来跑通流程。
<hr/>Substance Designer简介

Substance Designer是Adobe大家族(2019年Adobe从Allegorithmic收购) 中的一个神奇的CG软件(以下简称SD),它打破了传统的美术绘制纹理的方式,在不动用一笔一画的情况下就可以制作出非常精艳的纹理效果,而且还可以拥有各种动态的参数便于随时生成不同的效果与变体。
让我们一起来随便欣赏几个案例:
(都是Substance Source中的资源,A站也有好多非常棒的效果,就不贴出来了)






Substance Designer可以保存两种格式的文件:

  • sbs
    相当于3ds Max的.max格式,原始论文件。
  • sbsar
    Substance Designer导出给其它应用软件的格式,有点类似于于3ds Max导出的.FBX格式,但是导出的sbsar只能在现有给定的参数上进行调节,无法更改它本身的内容.
<hr/>插件集成

我们可以在Unity中以两种方式来使用SD生成的纹理

  • 直接以传统纹理的方式
    利用SD直接导出纹理或者在Unity中从sbsar上导出纹理都可以,这种方式只是把SD当成纯作图工作来使用,并没有使用到程序化参数的概念。
  • 程序化纹理使用的方式
    利用Allegorithmic官方出品的插件,集成进Unity中,在Unity中使用可动态调整的程序化纹理。
不管是以上哪种方式,我们都需要在Unity中集成一个插件:Substance In Unity,所以呢,我们先来安装一下这个插件。
先从AssetStore中下载插件(免费的)
Substance in Unity


然后将下载好的package包导入Unity中,完成后,会在菜单栏看到多了一个Substance的选项。


此菜单项下的说明:

  • About:关于插件版本的简介
  • Preferences:插件通用设置相关
  • Substance Source:官方的材质库,平常是在网页上和Substance Launcher上查看的,安装了此插件后,也可以在Unity内部查看使用了.



Substance Launcher



Unity

<hr/>引擎使用

OK,一切准备就绪后,现在让我们来看看如何在Unity中使用程序化纹理.
首先把你的sbsar格式的文件拖入到Unity中(我这里以在Substance Source中下载的ocean_islands为例).


然后我们在Project面板中选中,在Inspector面板会显示如下:


图示中的1234分别为:

  • 材质球
  • 纹理贴图
  • Graph
  • 变体

我们依次来看下

  • Material
很好理解,和我们在Unity中使用的材质球一样,默认是Standard Shader。可以通过最上方的Shader更换自己需要的Shader.



  • Textures
一张张纹理,由我们在SD中设置的纹理输出类型决定。  



  • Graph
程序化纹理的参数调节全在这里,我们在SD中曝露的属性也都会在这个面板显示出来。
所以很好的一种方式是导入Unity中为sbsar格式的文件,然后在此面板搭配场景细微调整自己需要的效果。
同时如果只是想单纯的使用纹理的话,也可以在这个面板中烘焙(通过Bake textures to folder按钮),将真正的变成文件夹中的一张张纹理。  



  • 变体
假如我们希望由一个sbsar文件生成数个材质球供不同的物体使用(这种需求很常见),这个时候变体就派上用场了.
通过在变体面板中点击+号来生成新的一个变体,然后选中它就可以像上面123步骤一样的去控制这个变体效果了。


<hr/>运行时动态生成

除了在Unity编缉器下控制参数以外,我们还可以在游戏打包到指定平台上运行时通过代码动态的去调整参数。
控制的脚本须引入Substance的命名空间
using Substance.Game;
然后通过以下方法来动态更改:
mySubstance.Set... //有好多Set,自己看着用
mySubstance.QueueForRender ();
Substance.Game.Substance.RenderSubstancesAsync ();
不过这种情况下,会产生延迟,具体时间取决于你的硬件性能,因为图片的动态生成需要时间。
就拿上面的案例,我在小米Max2手机上动态生成花了近10秒钟.....
<hr/>性能方面

如果你需要在游戏运行时生成纹理的话,那么一定要注意SD中节点的耗时,这会直接影响运行时生成的时间。
SD虽说是程序化的数据,但是在游戏运行时,内存中还是一张张的纹理,这和传统的纹理内存并没有什么不一样。
如下图中发布到手机上时Profile内存的情况:


另外,我记得之前用SD的sbsar格式可以大大的减小包体大小,也就是说在打包时并不会生成纹理,而只是存储的很小的程序化数据,关于这点,近期测试的结果并不是这样,我特意打完包并解包发现其中已经有纹理了。
所以这点上有点不太清楚是改版后的原因(插件版本是2.4.3)还是哪里设置的问题,有知道的还请告之一下。


<hr/>总结

最后来说下SD的优点:

  • 纯程序化纹理,迭代方面,效果出众
  • 纹理分辨率可控,随意调节
  • 纹理可动态调节参数,动态变化
  • 自动生成所有需要的纹理(比如法线、AO等等)
那既然有这么多优点,那我们还等什么呢?抓紧学起来呀!
最近建了个SD撸图群:457970483
计划每日都放一张图片来模仿学习,群友比拼谁做的快谁的技巧妙,大家互相交流互相学习,有兴趣的可以加入。
目前刚开始,还处于最基本的图案临摹,我也是刚学,欢迎大牛进群指点~
争取2020年撸它个两三百张图!
学习从点滴开始~
别一年后别人都在进步,你却还在原地踏步!
<hr/>最后

欢迎大家关注更多干货的公众号:Unity技术美术 ( ID:gh_8b69cca044dc )


Unity技术美术QQ交流分享群:19470667(1群已满)763506271

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
 楼主| 发表于 2022-4-25 07:26 | 显示全部楼层
sbsar比喻成fbx不贴切,毕竟sbsar没办法再编辑,而fbx可以
发表于 2022-4-25 07:29 | 显示全部楼层
说的对,我改
 楼主| 发表于 2022-4-25 07:33 | 显示全部楼层
群已满
发表于 2022-4-25 07:40 | 显示全部楼层
你好,我的substance source加载不出来,您知道什么原因吗
发表于 2022-4-25 07:49 | 显示全部楼层
請問unity2010導入插畫依然用不了是什麽原因
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-1-22 21:01 , Processed in 0.108424 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表