【转载】Unity Polybrush与顶点色着色器
手机游戏引擎手游引擎Unity3D技术 1636 0
实名

通过了实名认证的内容创造者

发布于 2019-11-20 10:06:26

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

x
本帖最后由 kanisen 于 2019-11-20 10:07 编辑

2018年初,我们宣布了ProBuilder和Polybrush将正式成为Unity的一部分。我们已经详细介绍过使用ProBuilder快速关卡建模,而Polybrush可以帮助我们完成粗略的雕刻、纹理混合、对象散布和顶点色绘制等功能。








通常为了处理顶点色,必须进行3D程序代码编写并估计最终结果。但有了Polybrush后,我们可以直接在编辑器中进行绘制,然后看到处理后的效果。

本文将展示一些使用顶点色的着色器示例,介绍如何将Polybrush和它们一起使用。

获取Polybrush

你可以访问Asset Store资源商店下载Polybrush :

https://www.assetstore.unity3d.com/cn/?stay#!/content/111427

下载完毕后导入资源包,点击菜单栏,选择Tools > Polybrush > Polybrush Window。



打开Polybrush 窗口中,如下图所示,我们可以看见四个功能选项:


  • 雕刻(Sculpting)
  • 顶点色绘制(Vertex Color Painting)
  • 对象散布(Object Scattering)
  • 纹理混合(Texture Blending)




功能介绍

1.雕刻

该功能拥有二个标签页,第一个标签页用于升降顶点位置,第二个标签页用于平滑处理顶点位置。



2.对象散布

在使用该部分功能前,首先需要给Palette添加一些预制件,预制件位于目录Procore > PolybrushPrefab Palettes > Default下。



将想要绘制的预制件拖入到此处。如果想要删除预制件,选取后按下退格键。



现在就可以点击放置对象,笔刷的强度(Strength)属性控制对象密度。



3.纹理混合

纹理混合功能需要具体的着色器设置,它使用三个UV集。资源包内含有一些示例,我们可以通过示例了解如何进行设置。

下面展示Polybrush的TriPlanar Blend功能。



给材质添加想要的纹理,然后在Texture Paint Settings中选择纹理即可。Flood选项会将整个网格绘制为所选颜色,Fill选项只会绘制预览图中的顶点,Brush选项会以光标为圆心绘制特定半径的圆形区域。

顶点色绘制

现在让我们详细介绍顶点色绘制。

1.读取着色器中的顶点色

为了访问着色器中的顶点色,你只需在Input Struct(表面着色器使用的结构)或Appdata Struct(顶点/片段着色器使用的结构)添加一行代码即可。


  • 顶点/片段着色器

下图代码会在Appdata struct中读取颜色,在v2F struct中声明颜色,然后将颜色在二个结构间传递。你可以在片段着色器中使用"i.color"读取颜色。




  • 表面着色器

你可以使用"IN.vertexColor"读取顶点色。



如果你不想编写代码,访问下面链接,这是最基本的顶点着色器:

https://pastebin.com/6wwsnJgY



现在我们就可以绘制顶点色了,让我们了解一些有趣的示例。

示例

1.高光

访问下面的链接,这是一个卡通高光着色器(Toon Specular):

https://www.patreon.com/posts/quick-game-art-13059579



如果不设置静态遮罩,该着色器效果会更棒,我们可以使用该着色器在任意位置进行绘制,从而使对象看起来潮湿或看起来像玻璃。

为了实现这部分,我们将伪高光数值乘以IN.vertexColor.r,o.Emission通道的边缘光也乘以IN.vertexColor.r,所以绘制区域也有发光效果。

  1. float3 spec = (step(_SpecSize, rampS.r) * IN.vertexColor.r;

  2. o.Emission =  pow(rim, _RimPower) * IN.vertexColor.r;
点击此处复制文本


这意味着绘制红色的位置都会发光,如果不想让发光效果太明显,可以使用较深的红色。



高光顶点色着色器代码:https://pastebin.com/xBMNuySz

卡通色阶如下图所示:



高光色阶如下图所示:



2.摇摆动画

该动画类似动态草丛,如果我们不想在旗帜、树叶和链子等一些静态物体使用Cloth/Physics模拟效果,我们可以使用一个处理顶点动画的着色器。



多数全局解决方案会带来剪裁问题。使用顶点色版解决方案的好处是可以设置允许的移动量。在下图的示例中,我们想要使旗帜的顶端不会移动,但只让旗杆的中间位置稍微移动一点。



我们可以乘以红色顶点色通道,控制效果的位置。

  1. v.vertex.yz += sin(_Time.y * movementcalculation ) * v.vertexColor.r;
点击此处复制文本




摇摆顶点色着色器代码:https://pastebin.com/SsDaBEgy

3.三平面多纹理

本文前面部分展示的纹理混合工具提供了非常平滑或模糊效果。对于一些艺术风格而言,该效果还不错,但我们可以尝试让边缘更清晰并带有噪音效果。

该着色器使用了和三平面一样的基色,但没有在世界法线使用“Grass”,它使用红色和蓝色顶点通道来添加新纹理。

  1. float primary = step(0.6* noisetexture,IN.vertexColor.r );
点击此处复制文本


将它与红色通道上显示的纹理相乘,然后对于纹理周围的边缘,将比原始部分稍大的区域乘以反转的原始部分,从而只留下一小部分。

  1. float primaryEdge = (step(0.5* noisetexture,IN.vertexColor.r )) * (1-primary);
点击此处复制文本


顶点色非常模糊,但是由于Step函数和噪音纹理的缘故,获得的结果非常干净。我们也可以重制纹理混合着色器来实现类似效果,因为多个UV集会得到更多纹理。



三平面顶点色着色器代码:https://pastebin.com/r9EcWvgH

小结

关于Polybrush就分享到这里,希望你能使用该工具并尝试文中的示例,但是需要注意,如果你修改了正在处理网格的导入设置,可能会破坏几何体,导致必须重新进行制作。
        





评分

参与人数 1元素币 +30 展开 理由
元素界王神... + 30

查看全部评分

使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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