原创作品

筒状模型UV材质

坏熊猫 发表于   2021-11-19 16:07:21
14846
57
170

在制作角色身上能量缭绕效果时 因为模型UV比较混乱的原因 UV动画总是以一种奇怪的方式在流动 不连续 流动方向大多也比较混乱 于是笔者就在思考有没有什么办法能基于模型表面平滑连续的流动。
方法1:使用双uv,但是作为特效 我们还要去修改模型部分的东西 总会引起美术资产制作流水线的混乱 而且修改繁琐,不过这是一种常规风险低实现难度低的办法,可以考虑。这种办法笔者这里就不多做介绍了
方法2:基于shader,我们根据算法给模型在材质里加一套UV,比如一个垂直地面的圆筒UV,这样就能比较贴合的包裹模型来流动,这里我们就基于此种办法来进行探索
首先我们先拿到模型,挂好相应的材质,我们进行一个思考,uv流动从脚底到头顶,这个过程在世界空间就是从y轴低到高的流动,有了这个思路我们先根据世界坐标进行尝试,用世界坐标减去本身坐标,得到相对位置矩阵。再以xy为UV大概我们得到一个拍平的UV如下图百片所示
image.png
材质如下图 这是一个最简单也最容易让人想到的办法
image.png
下面我们进行测试
hz2.gif
我们发现因为是基于世界坐标,坐标朝向不会旋转,所以我们在转动模型时,呈现出了非常奇怪的视觉效果,而且因为我们是用xy做的UV,并没有计算z方向,所以我们侧面看模型的话,模型侧面UV是拉伸的,这样的效果显示是不能放进游戏的。到了这里会回到了原点。基于世界空间,uv无法旋转,那么我们肯定得基于local space,侧面看UV拉伸,那么我们的uv肯定与z轴有关联,我们突然想到如果uv是按照一个垂直于地面的圆筒覆盖到模型上的就能满足我们的需求。
先解决第一个问题,让这个坐标轴是基于local space的,我们思考下,脚底到头顶位置的变化,笔者也是灵光乍现,想到了一个节点vertex positon。这不是能完美的契合我们想要的东西吗,速度连上做测试。
image.png
hz3.gif
Nice!我们完美解决了旋转问题!!!前进一大步!那么现在的UV就是最上面那个平片模样的 只有一个角度能看,侧面看还是拉伸的,因为坐标基于xy轴,跟z轴无关,这样的uv肯定不会正确的,我们想要的是一个筒状的uv,而不是片,冷静思考下,我们画出示意图,构建数学模型。
image.png
既然是圆筒状的UV,那么垂直方向比较简单就是顶点位置的y方向,u方式是一个难点,我们现在剔除v方向,只考虑u方向,画出平面图
image.png
我们可以想象一下,拿一个白纸往这个圆柱上贴,那张白纸就是我们的贴图,我们选一个点(x,z),v采样坐标就是y轴,那么x方向的采样坐标应该是途中L这段弧长,迅速翻出初中数学课本,翻到弧长公式,离我们的数学模型更近一步了!
image.png
公式里的n就是圆心角,R为半径,我们再看上面的图,先办法算出n的表达式,这样L就能算出来了。
image.png
根据图示我们发现 tan(n)=x/z,那么我们进行推到n=arctan(x/z);再讲n带入上面的弧长公式,得到L=((arctan(x/z)180/π)πR)/180  简化下就是L=arctan(x/z)Rps:需要强调下的是这里我们n的取值范围是-90到90,我们的uv会被打成两段。我们得到了弧长,下一步我们希望弧长是0-1之间的,方便贴图连续起来,我们知道圆的周长是2πR,那半圆的周长就是πR,那么综上我们实际u的采样范围是(-π/2)R到(π/2)R。我们直接映射下把这个区间映射到0-1。我们已经找到u方向采样的数学模型了!速度照着公式连起来!ps:这里为了减少参数我直接将R默认为1了,然后重铺就靠后面的tile值来调整微信图片_20211120110052.png
微信图片_20211120110303.png这样水平接缝问题也解决了hz4.gif
Cool!!!我们成功了,可以旋转,xz方向无拉伸!后面我们连上panner,加上noise,做个小测试。
hz1.gif
经过测试发现这个shader用途很广 我决定制作成成品完善材质

材质演示:

【自定义模型桶状UV材质-哔哩哔哩】https://b23.tv/qX46uNG


材质面板

image.png


功能合并至熊猫超级shader 请转至


https://www.magesbox.com/article/detail/id/1321.html


特别感谢WenWen大佬的BUG指正 感谢夜火大佬提供的材质优化方向

标签:
确定
评论(57)
juju
熊猫大佬,我用了你的shader然后我再想用shader graph连的outline不兼容,你用的模型outline能不能发一个给我啊。谢谢大佬1684864859@qq.com
回复
1115天前
老树哥哥
大佬牛逼
回复
1242天前
深南大道的桶
如何可以加入油腻联盟呢
回复
1254天前
菜冰
偶像!
回复
1261天前
柚柚子
跪求UE的大佬分享一下
回复
1263天前
坏熊猫
回复
柚柚子
https://www.magesbox.com/works/detail/id/8522 昨天有朋友做了 我ue不熟练
回复
1262天前
贤锅
熊猫牛逼
回复
1265天前
canaan
大佬 n=arctan(x/z) n=arctan(x/z)180/π 看不明白这个是什么转换的
回复
1266天前
坏熊猫
回复
canaan
弧度转角度
回复
1266天前
canaan
请问 那么综上我们实际u的采样范围是(-π/2)R到(π/2)R 是怎么得出这个结论点
回复
1266天前
坏熊猫
回复
canaan
实际n的取值范围是-90 到90 是个半圆周长 左右对称 总长度是pi
回复
1266天前
canaan
回复
坏熊猫
哦哦
回复
1263天前
我学习很好的
大佬你这个是两个模型 一个膨胀了一点然后用这个Shader吗
回复
1267天前
坏熊猫
回复
我学习很好的
看我那个b站演示视频 里面有操作演示
回复
1267天前
小刘酱
材质直接分享了~ 大方大方,必须感谢一波
回复
1267天前
buraaisu
可以试试 actan2 函数 输入 x z 返回数值 /π 结果也差不多
回复
1268天前
坏熊猫
回复
buraaisu
感谢大佬指点 是个好思路
回复
1268天前
垃圾乌鸦丶
n=arctan(x/z)? 为什么n=arctan(x/z)180/π
回复
1268天前
坏熊猫
回复
垃圾乌鸦丶
弧度转化成角度
回复
1268天前
垃圾乌鸦丶
回复
坏熊猫
大佬 tan(n)=x/z 那么n=arctan(x/z)嘛 为什么你写的是n=arctan(x/z)180/π 我没有想通
回复
1268天前
坏熊猫
回复
萌新特效小朋友
上面公式里n是角度 arctan算出来是弧度 这俩需要转换下啊
回复
1268天前
坏熊猫
回复
萌新特效小朋友
其实我是觉得的大家对角度更敏感 弧长公式还有个形式就是弧度乘半径 直接就是下面那个简化后的公式
回复
1268天前
爱的战士
酷啊
回复
1269天前
zcy
大佬 为什么你的效果感觉是模型上包裹了一层纹理流动,我这边连好的效果好像就在模型表面流动...
回复
1269天前
坏熊猫
回复
zcy
给一点点顶点膨胀
回复
1269天前
zcy
回复
坏熊猫
vertex offset顶点偏移这个参数吗?
回复
1269天前
坏熊猫
回复
zcy
对的 乘个vertexnormal 再乘一个膨胀系数 这个系数给个很小的值就行
回复
1269天前
小小炉子
cool!
回复
1269天前
YSQ
tql
回复
1269天前
Sin
太加吧吊了
回复
1270天前
By丶By丶By
NB
回复
1270天前
am
感谢分享!请问圆筒的大小该如何修改呢
回复
1270天前
am
回复
am
指半径,是直接修改VertexPosition的数值吗
回复
1270天前
坏熊猫
回复
am
直接修改后面的tiling就行
回复
1270天前
果冻老师傅
谢谢熊猫大佬!!!!
回复
1270天前
Across
坏熊猫YYDS
回复
1271天前
Nor_Zed
厉害
回复
1271天前
坏熊猫
回复
Nor_Zed
Zed大佬的分享也让我受益匪浅
回复
1271天前
稀有番号
专门上号给你赞、伟神牛逼!!!
回复
1271天前
坏熊猫
回复
稀有番号
感谢大佬 同样关注大佬很久了
回复
1271天前
褪色者
大佬辛苦了~照着你shader连了半天。一想UE4会不会有自带的~然后打开UE4发现真有~。辛苦辛苦 下次阔以抄UE4官方的作业~保护头发~
回复
1273天前
坏熊猫
回复
褪色者
卧槽 节点名字是啥啊
回复
1273天前
youdian
回复
褪色者
是什么呢
回复
1271天前
学界恶棍
回复
坏熊猫
BoundingBoxBased_0-1_UVW官方自带的Funtion
回复
1271天前
坏熊猫
回复
学界恶棍
卧槽 改天看看去 合着我着花了十个小时研究白费了
回复
1271天前
坏熊猫
回复
学界恶棍
那侧面还是拉伸的啊!
回复
1271天前
Ohh丶
大佬我用ue连在你的公式哪里卡住了= =
回复
1274天前
坏熊猫
回复
Ohh丶
缺哪个节点了?
回复
1274天前
Ohh丶
回复
坏熊猫
那个vertex Position,前面的世界坐标减自身坐标实现了
回复
1274天前
坏熊猫
回复
Ohh丶
前面那个连发做个静态的可以 不能旋转
回复
1274天前
Ohh丶
回复
坏熊猫
晓得现在就是止步在旋转,苦恼
回复
1274天前
Vegetable
回复
Ohh丶
减完后加一个transformvector将world space转换成local space可以解决旋转问题
回复
1271天前
坏熊猫
回复
Vegetable
感谢指点 一会去试试
回复
1269天前
小Y
20的半径是怎么得到的
回复
1274天前
坏熊猫
回复
小Y
这个根据效果调整的 这个数值不固定
回复
1274天前
小Y
回复
坏熊猫
可以,从今天起我就是你的小弟
回复
1274天前
坏熊猫
回复
小Y
可以想象你在3dmax里把uv打成了圆柱 你可以缩放圆柱
回复
1274天前
坏熊猫
回复
夸夸公司员工
别大哥 我只是个特效仔 我何德何能
回复
1274天前
224
《熊猫为什么是神?》
回复
1274天前
小小千
太牛逼了
回复
1274天前
奔跑的夏天
太强了!
回复
1274天前
霸道总裁蛋
我tm直接舔爆熊猫大佬
回复
1274天前
Albert
恭喜您获得“真丶知识分享者”称号!跪舔胸毛哥。
回复
1274天前
Abx
嗯~,嗯?卧槽~
回复
1274天前
CAI_DarZ
跪舔胸毛哥。
回复
1274天前
魑魅魍魉
恭喜您获得“真丶知识分享者”称号!
回复
1274天前
夜火
猫总流动的能量如同我流出的水一样绵绵不绝
回复
1274天前
杰瑞
回复
夜火
你不对劲
回复
1274天前
TamTam
你早点分享我就省掉2180了!
回复
1274天前
坏熊猫
回复
TamTam
我也想早点啊 想解决方案想的头发都掉了一半了
回复
1274天前
草裙恰恰恰
伟哥牛逼!
回复
1274天前
大馒头
这才是真正的知识分享者
回复
1274天前
小Y
这才是真正的知识分享者
回复
1274天前
Duse
熊猫大佬NB
回复
1274天前
剑来
我tm直接舔爆熊猫大佬
回复
1274天前
离水
建议你直接退休回家养老,不要再拉高上限了
回复
1274天前
坏熊猫
回复
离水
感谢水哥支持
回复
1271天前
Various
我tm直接舔爆熊猫大佬
回复
1274天前
坏熊猫
回复
Various
谢谢涵佬支持
回复
1271天前
氵氵灬灬
我直接趴下舔大佬
回复
1274天前
坏熊猫
回复
氵氵灬灬
谢谢朋友的支持
回复
1271天前
David
我tm直接跪下舔!!!
回复
1274天前
坏熊猫
回复
David
感谢大卫支持
回复
1271天前
Mends
我tm直接舔爆熊猫大佬
回复
1274天前
坏熊猫
回复
Mends
谢谢朋友支持
回复
1271天前
魔王虾
tql!!!!!!
回复
1274天前
坏熊猫
回复
魔王虾
谢谢皮皮虾大佬支持
回复
1274天前
仲冬
这就叫专业!
回复
1274天前
坏熊猫
回复
仲冬
赶紧教我设计吧 我技术瓶颈了 设计菜扣脚
回复
1274天前
小葱白Cong
这都可以出个800的小课程了,求求你不要再分享了
回复
1274天前
坏熊猫
回复
小葱白Cong
小葱白大佬言重了 互相学习 交个朋友
回复
1274天前
小葱白Cong
回复
坏熊猫
我们已经是好友了
回复
1274天前
八云辉夜
我tm直接舔爆熊猫大佬
回复
1274天前
坏熊猫
回复
八云辉夜
希望也能看到大家的分享
回复
1274天前
ADY521
牛逼!熊猫牛逼!我的天神!随便动动手就解决特效难题之一
回复
1274天前
坏熊猫
回复
ADY521
感谢大佬支持
回复
1274天前
星衍
我tm直接舔爆熊猫大佬
回复
1274天前
坏熊猫
回复
星衍
哈哈 不用舔 好好看看学会有能做很多效果
回复
1274天前
Xx小坦克
牛啊
回复
1274天前
坏熊猫
回复
Xx小坦克
感谢小坦克捧场
回复
1274天前
梨bing
什么是真正的行业分享者啊(战术后仰)
回复
1274天前
坏熊猫
回复
梨bing
感谢梨大佬支持 个人技术分析 看看就好 不系统 也不专业
回复
1274天前
20
懂了,又没完全懂
回复
1274天前
坏熊猫
回复
20
仔细看看 这个能做的效果海了 是曾经一个大难题
回复
1274天前
lolmingmmmm
我tm直接舔爆熊猫大佬
回复
1274天前
坏熊猫
回复
lolmingmmmm
感谢明神支持
回复
1274天前
彭师傅
赞一个!!
回复
1274天前
坏熊猫
回复
彭师傅
谢谢彭师傅捧场
回复
1274天前
没有更多啦~