Unity Polybrush与顶点色着色器

  今年年初,我们宣布了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,所以绘制区域也有发光效果。

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

   o.Emission = pow(rim, _RimPower) * IN.vertexColor.r;

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

  

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

  卡通色阶如下图所示:

  

  高光色阶如下图所示:

  

  2

  摇摆动画

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

  

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

  

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

   v.vertex.yz += sin(_Time.y * movementcalculation ) * v.vertexColor.r;

  

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

  3

  三平面多纹理

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

  

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

  float primary = step(0.6* noisetexture,IN.vertexColor.r );

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

  float primaryEdge = (step(0.5* noisetexture,IN.vertexColor.r )) * (1-primary);

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

  

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

  小结

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

  Polybrush仍然在测试阶段,但计划今年会直接集成进入Unity,相关信息请关注Unity官方中文论坛(UnityChina.cn)!

  推荐阅读

  Unity Shader着色器优化

  Shader Graph着色器视图示例项目介绍

  Unity着色器训练营(1):入门篇

  Unity 着色器训练营(2) - MVP转换和法线贴图

  ProBuilder快速关卡建模实践

  使用Unity创作逼真的VR视觉体验

  Unity VR/AR项目优化技巧与工具

  Unity UI性能优化技巧

  Made with Unity动画短片《大白的梦之数羊》

  官方活动

  Unity官方教师培训报名火热进行中

  Unity将在10月22-26日,举办为期5天的专业的Unity官方教师培训课程,诚邀广大教师与Unity一同学习分享最新技术![了解详情...]

猜你喜欢

转载自blog.csdn.net/jiergio/article/details/103622453
今日推荐