千家信息网

Unity3D 卡通描边之如何控制线条粗细

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章给大家分享的是有关Unity3D 卡通描边之如何控制线条粗细的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、前言在之前的实时描边中,使用了几何着色器中的LineS
千家信息网最后更新 2024年11月11日Unity3D 卡通描边之如何控制线条粗细

这篇文章给大家分享的是有关Unity3D 卡通描边之如何控制线条粗细的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、前言

在之前的实时描边中,使用了几何着色器中的LineStream来进行绘制线条的,这样绘制线条是无法脱离底层特性来在所有平台上通用式地控制线条的粗细,这就需要我们再做文章。

二、原理

关于图形学中如何控制线条粗细这个问题,其实早就有人做了研究,文章 在这 。

借用该文章的一张图

原理看图就一目了然,在裁剪空间中,e0和e1是线条的2个顶点,之后依次计算出二维向量ext和n,在通过这2个向量计算出4个点,再用这4个点绘制出2个三角形即可拼出这个四边形。

本文在此基础上做了一点调整,如下图所示。

简单来说就是以线的2点为中线,来绘制四边形,而不是作为四边形的一条边,因为2个点的位置顺序在本文中的几何着色器中获取到的是无序的,可能是e1误被当初e0,也可能e0被误当成e1,如果要让它们变得有序那会变得复杂,而以此为中线绘制四边形,那么就会变得很简单。接下来只要计算出四边形的4个点,再由几何着色器分裂出2个三角形,即可得到此四边形。

n和ext在unity3D的Shader中是这样计算的:

float PctExtend = 0.01;float2 ext = PctExtend * (e1.xy - e0.xy);float2 v = normalize(float3(e1.xy - e0.xy, 0)).xy;float2 n = float2(-v.y, v.x) * 线条宽度;

从上述代码可以看出,宽度是在n的计算中控制的,我们可以把这个参数提取出来,让使用者随意调整。

三、编码

以前的代码写得比较乱,为了方便就不再整理了,编码略复杂,请自行整理。

这里附上 源码 https://github.com/L-LingRen/UnitySimpleCartoonLine

四、运行

效果还不错,性能做不评价,unity3d貌似内部做了优化,帧数不知为啥时高时低。

感谢各位的阅读!关于"Unity3D 卡通描边之如何控制线条粗细"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

线条 四边 四边形 控制 粗细 几何 卡通 不错 复杂 三角形 中线 代码 内容 原理 向量 宽度 文章 更多 篇文章 编码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 高质量软件开发与设计模式 java安卓软件开发流程 舟山品牌服务器 逾期上报金融信息数据库 新三板公司翻译软件开发 nacos内置数据库配置 软件开发风险识别思路 血源连不上服务器 电脑服务器复制资料公司会知道吗 苹果笔记本怎么才能找到服务器 杭州口碑好的网络技术哪家便宜 吃鸡总连接服务器失败 云服务器如何搜索 网络安全协议和pki的关系 服务器cpu占用过高的危害 从信访服务器 在数据库中产生数据不一致的根 如何链接到最新一行数据库 国际快递软件开发 学软件开发想进国企单位 路由器显示上网设置服务器无响应 崇明区智能化软件开发制品价格 无锡网络技术服务报价 web服务器安全设置有哪些 软件开发培训学校梦见 医药公司软件开发 为啥服务器列表会自己换 机器上怎么装数据库 提高网络安全讲座英语作文 数据库系统如何选型
0