//如果定义了lightmap,就transform 静态LightmapUV OUTPUT_LIGHTMAP_UV(a.staticLightmapUV, unity_LightmapST, v.staticLightmapUV); //如果定义了动态lightmap,就transform 动态LightmapUV #ifdef DYNAMICLIGHTMAP_ON v.dynamicLightma
按照官方的说法,Lightmap中不仅可以包括物体表面的光照颜色信息(传统的Lightmap功能),还可以包括物体和物体之间的光线渗透关系信息(新版中的Realtime Lighting功能),也就是说,动态光源也可以对于烘焙了光照贴图的静态场景物体产生正确的光照。 光照贴图需要将所有参与的场景物体的UV重新排列组合成互不重叠且尽量少形变的方...
在这个函数里会混合两个来自 ReflectionProbe 的 Cubemap,并将剩余 weight 应用到环境 Cubemap 上 Static Object - Cube 这里的渲染带着 LIGHTMAP_ON 和DYNAMICLIGHTMAP_ON 两个Keyword 间接光照 在vertex shader 中输出 dynamic lightmap 和 lightmap 的 uv 这两个 uv 在 TEXCOORD1 和 TEXCOORD2 这两个槽...
UNITY_SAMPLE_TEX2D(unity_DynamicLightmap, i.dynamicLightmapUV) ); 1. 2. 3. Light Probe Proxy Volumes LPPV一般用于体积较大的物体,体积较大的物体不同位置受到的GI不同,如果使用light probe,得到的效果会不准确: 而开启LPPV后效果如下: 当开启LPPV时,UNITY_LIGHT_PROBE_PROXY_VOLUME宏会开启,但这个关键...
LightMapUV是第二套 output.staticLightmapUV = input.staticLightmapUV * unity_LightmapST.xy + unity_LightmapST.zw; 1. 然后计算完UV偏移以后,传递到片元着色器 在片元着色器中,我们只需要和之前的SH进行一个宏的判断,用来对间接光漫反射进行修改。
...2.2 光照贴图的坐标 要得到光照贴图的UV坐标,就必须由Unity将其发送到着色器。我们需要告诉管线对每个被烘焙了灯光信息的对象执行此操作。...光照贴图纹理被称为unity_Lightmap,并带有采样器状态。它包含在Core RP Library中的EnityLighting.hlsl里,我们需要使用它来检索灯光数据。 ?
UnityLight mainLight = MainLight (s.normalWorld); half atten = SHADOW_ATTENUATION(i); half occlusion = Occlusion(i.tex.xy); UnityGI gi = FragmentGI (s, occlusion, i.ambientOrLightmapUV, atten, mainLight); half4 c = UNITY_BRDF_PBS (s.diffColor, s.specColor, s.oneMinusReflectivity,...
这样一来,只要物体之间的关系不变(也就是所有的静态物体都不移动位置),就不需要重新烘焙,从而使得我们可以在场景中随意运用动态光源(dynamic lights)。而传统的Lightmapping光照贴图方式则不支持动态光源效果(改变光源不会改变场景光照)。Realtime Lighting比Lightmapping要更耗费系统资源,所以手游上就不要考虑了。
Indirect Resolution间接光分辨率:物体单位表面积占Dynamic Lightmap的像素数量。 增加此值可提高间接光的视觉质量,但也增加了烘烤光照贴图所需的时间。此值对烘焙时间的影响最为严重, 想要快速预览效果可降低此值。默认是2,一般建议户外大场景0.5~1,室内场景2~3。
典型应用一:灯光的间接光部分被烘焙到lightmap中,烘焙完成后,该光源还能继续参与实时光照计算,以提供材质的法线高光效果。 典型应用二:将灯光对静态物体产生的阴影烘焙到单独的lightmap中,这种lightmap叫做ShadowMask,在运行时,根据ShadowMask,对动态物体产生的实时阴影能够与烘焙阴影更好地混合。