浩克网 手游攻略 软件教程 球球大作战毅呦(球球大作战杀马特)

球球大作战毅呦(球球大作战杀马特)

时间:2025-12-21 14:59:17 来源:网络整理 浏览:0

实现环境贴图的技术途径主要有三种:立方体贴图、IBL和球面谐波照明。

我之前已经讲过立方体贴图和IBL,今天我将重点讨论球面调和照明。

在立方体贴图IBL的基本设置中,除了镜面反射(光泽反射)之外,卷积类型属性还可以设置为漫反射(红外)。

IBL使用镜面反射来模拟间接光镜面反射,而漫反射则用于模拟间接光漫反射。

间接照明漫反射(以下简称漫反射)有两种实现方式:一种是IBL,另一种是球面谐波照明。让我们看看IBL是如何实现漫反射的。

IBL漫反射漫反射不同于镜面反射,它的颜色变化不会随着视角的旋转而改变。要用IBL实现漫反射,我们必须首先设置漫反射(反射率)属性。

镜面反射的颜色会随着视角的变化而变化,漫反射则不会。计算颜色时,只与法线方向有关。因此,IBL漫反射的计算公式为

//漫反射颜色的计算float4 uv_ibl=float4(normal_dir,MIP _ level);half 4 color _ cube map=texCUBElod(_ cube map,uv _ ibl);half 3 env _ color=解码HDR(color _ cube map,_ cube map _ HDR);大家可以对比一下离子束刻蚀法高光反射计算的方式,

半4色立方体贴图=UNITY _ SAMPLE _ tex cube _ LOD(UNITY _ spec cube 0,reflect_dir,MIP _ Level);half 3 env _ color=解码HDR(颜色立方体贴图,unity _ spec立方体0 _ HDR);在贴图尺寸设置上,

漫反射效果,忽略AO,物体周围的光线强度基本一致,强弱差别不大,视觉上也呈现出温和的效果。

球面调和照明球面调和照明的主要应用是计算间接照明(也叫环境光),其中间接照明是指天空盒发出的光。

IBL还计算间接照明。skybox发出的环境光有什么特点?它最大的特点就是skybox是无限的,所以我们可以忽略位置信息,只考虑法线信息。也就是说,不管我们的模型有多大,

当计算模型上的特定点时,我们认为它在天球的中心。

然而,IBL在计算间接光照时最大的缺点是纹理采样。使用IBL的方法,我们需要存储一个立方体地图。纹理采样的带宽对于电脑来说可能不算什么,但是对于手机来说就有点奢侈了。

球面谐波照明可以说是一种性能更加优化的计算方法,弥补了IBL的不足。

这里不讨论如何实现球面谐波照明,因为涉及的数学模型计算过于复杂。我们只关注如何统一实现球面谐波照明。

我们首先要了解球谐照明最基本的原理,就是从立方体贴图中提取7个球谐照明系数,然后通过一些复杂的数学计算生成照明颜色,最后赋予物体。

这些系数的格式如下所示,仅供参考:

获取到这些系数后,然后把它传递到shader里面参与计算,计算的核心代码如下所示:

float4 normalForSH=float4(normal_dir, 1.0);//SHEvalLinearL0L1half3 x;x.r=dot(custom_SHAr, normalForSH);x.g=dot(custom_SHAg, normalForSH);x.b=dot(custom_SHAb, normalForSH);//SHEvalLinearL2half3 x1, x2;//4 of the quadratic (L2) polynomialshalf4 vB=normalForSH.xyzz * normalForSH.yzzx;x1.r=dot(custom_SHBr, vB);x1.g=dot(custom_SHBg, vB);x1.b=dot(custom_SHBb, vB);//Final (5th) quadratic (L2) polynomialhalf vC=normalForSH.x*normalForSH.x - normalForSH.y*normalForSH.y;x2=custom_SHC.rgb * vC;float3 sh=max(float3(0.0, 0.0, 0.0), (x + x1 + x2));sh=pow(sh, 1.0/2.2);half3 env_color=sh;光照探针掌握了球谐光照的基本原理,

球谐光照是光照探针的使用基础,如果手动实现球谐光照,就要像上面一样又是计算光照系数,又是引入立方体贴图,还要在shader中进行大量复杂的计算。这无疑非常困难。

但unity已经给开发者封装好了这一系列操作,它就是光照探针!我们来看看光照探针是如何使用的。

全局光照探针如果场景中没有放置光照探针,unity会默认使用一个全局光照探针,它是在Lightint面板中设置的。

不过,在此之前要先烘焙立方体贴图,这和使用反射探针的操作是一样的。

Environment Light是设置光照探针烘焙贴图的相关属性

Environment Reflections是设置反射探针烘焙贴图的相关属性

设置完成后,点击Generate Lighting按钮,就会在场景Scene文件夹下生成一张带有光照信息的立方体贴图。

第二歩、漫反射的计算。球谐光照的shader计算很复杂,但是使用unity内置的球谐光照计算方法ShadeSH9(),计算就会变得非常简单,不过在此之前,还需要设置LightMode、引入相关文件,

具体如下:

Tags{'LightMode'='ForwardBase'}CGPROGRAM#pragma multi_compile_fwdbase#include 'AutoLight.cginc'#include 'UnityCG.cginc'half3 env_color=ShadeSH9(float4(normal_dir,1.0));打开Frame Debugger,在渲染流程中可以查看到球谐光照的系数信息

手动计算球谐光照,需要开发者自己在参数面板上设置球谐系数值,这些系数值的计算是一个非常复杂的过程,往往需要借助一些第三方工具。而使用全局光照探针和unity内置的球谐光照计算的函数,

就免去了上述一系列复杂的操作。

对比一下手动计算球谐光照和使用光照探针计算球谐光照的效果,二者之间没有太大的差别。

局部光照探针局部光照探针需要开发者手动添加,我们来看看该如何操作?

1、添加LightProbeGroup

2、进入edit 模式,排列布置探针小球的采样点位置

3、添加光源,光源模式设置为Baked

4、在Lighting面板中勾选“Baked Global Illumination”,然后点击“Generate Lighting”

5、最后看看效果,当物体移动时,物体表面的光照也会时刻发生变化。

为什么会这样呢?这是因为烘焙贴图后,光照探针组的每一个光照小球,都带有球谐值。我们可以通过下面的设置,直接查看光照小球的信息。

点击物体模型,带线条的小球就是对物体光照产生影响的光照探针。当物体移动时,它附近的光照小球可以将携带的球谐信息进行插值混合运算,生成新的球谐系数,最后再赋予给物体的shader,从而照亮物体。

标题:球球大作战毅呦(球球大作战杀马特)
链接:https://www.52hkw.com/news/rj/65461.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
Tiktok专用的梯子加速器(TK加速器全球加速)

Tiktok作为当前最火爆的短视频平台,受到了全球用户的热烈欢迎。然而,由于网络限制或者其他原因,很多用户在观看

2025-12-21
德国游戏排行榜前十名(德国出品的游戏)

中国的玩家可能在新闻里听过德国科隆游戏展,但对德国的游戏却感觉很陌生。游戏玩家大部分多少应该都体验过SL

2025-12-21
怎么不让快递放菜鸟驿站

菜鸟裹裹怎么禁止放快递?经常网购的小伙伴都知道,如果附近有菜鸟驿站,那么驿站的快递员会默认选择放在驿站中,并

2025-12-21
菜鸟驿站怎么送货上门

菜鸟裹裹怎么送货上门?有过菜鸟驿站拿快递的小伙伴都知道,很多菜鸟驿站在派送快递时,默认是放在菜鸟驿站,需要我

2025-12-21