【Unity Shader】聚光灯体积光效果的简单实现

本文介绍了一种在Unity中创建简单光束效果的方法。通过使用自定义锥体模型结合Shader编程,实现了边缘虚化和尾部渐变效果,增强真实感。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果如下:

在这里插入图片描述
在这里插入图片描述
Unity中的聚光灯SpotLight,可以用作手电筒,射灯等类似的效果,比如这样的
在这里插入图片描述
在这里插入图片描述
但是如果想把光束的效果做出来,就超出了SpotLight的能力范围了,本篇就为了记录一下一种简单的实现光束效果的办法。(不会用到体积光复杂的计算,当然局限性也很大,适合于要求不是很高的场景)

原理:

准备好一个锥体模型,半透明着色,并处理好边缘的虚化。

1.椎体网格,就是光束的样子,用来模拟光束的体积感
在这里插入图片描述
2.开始编写shader,简单的输出颜色即可,不需要纹理也不需要计算UV,因为是模拟光,就普通的半透明材质,采用blend SrcAlpha OneMinusSrcAlpha的混合模式。vert和frag代码如下:

v2f vert (appdata v)
{
   
	v2f o;
	o.vertex = UnityObjectToClipPos(v.vertex);
	return o;
}

fixed4 frag (v2f i) : SV_Target
{
   
	fixed4 col = _TintColor;
	return col;
}

基本上已经是最简洁的情况了,大概调个颜色则可以达到下面的效果,右下角就利用模型的穿模从而达到一种感觉光是打在了这个立方体上面一样的感觉。
在这里插入图片描述
3.那么问题来了,这个光也太假了点吧,边缘居然可以这么硬,一般看到的光束应该是像这样的感觉才对呢,比如:
在这里插入图片描述
所以接下来就要处理灯光的边缘,让他虚化一些。查找边缘,就和模型描边,边缘泛光Rim等思路是差不多的,只要找到边缘,将边缘部分透明度降低一些即可达到虚化边缘的效果。这里就采用法线normal和视线的夹角来识别边缘,椎体侧面的法线是刚好垂直朝向,越往中间走,法线与视线方向的夹角越来越小,dot值越来越大(尴尬的手绘图没有画出3D的感觉,所以中间部分的法线就靠想象了)

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值