Unity Polybrush与顶点色着色器
技术综合 417 0
实名

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

发布于 2023-10-27 23:06:24

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

x
去年年初,unity宣布了ProBuilder和Polybrush将正式成为Unity的一部分。

unity已经详细介绍过使用ProBuilder快速关卡建模,而Polybrush可以帮助我们完成粗略的雕刻、纹理混合、对象散布和顶点色绘制等功能。

1f082f8f-27ad-4ba2-8bf0-d0c4180d31bc_image.png

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


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


  • 获取Polybrush


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




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

a80380c5-9ee2-4ec2-8779-30588c1fdfb2_image.png


打开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"读取顶点色。


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






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



  • 示例


1.高光


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








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



为了实现这部分,我们将伪高光数值乘以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)!







评分

参与人数 4元素币 +29 活跃度 +26 展开 理由
wwwxajhcom + 3 + 5 天下武功出少林,世界资源入元素。
小毒爷 + 6 + 1 强势围观
wyzlbw + 7 + 5 收藏就对了
源支始 + 13 + 15 【点赞】这很有大网气质!

查看全部评分

本帖被以下画板推荐:

天将雨 夜三思
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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