Unity的GICache简介

GICache是由全局照明(GI)系统用于存储中间文件时预计算实时GI和烘烤时的静态光照贴图,反射光探针和探针。缓存在计算机上的所有Unity项目之间共享,因此具有相同内容和相同版本的照明系统的项目可以共享文件并加快后续构建。
GICache被用于全局照明(GI)系统预计算实时GI 和 烘培静态光照贴图(baking Static LIghtmaps),反射光探针(Reflection Probes)和探针(Light Probes)中。
GICache在本地的所有Unity工程中共享,所以当各项目中有相同内容和相同版本的光照系统时可以直接共享,而不用重新构建。

Unity的Universal Render Pipeline (URP) 中,物体可以接收并产生投影通常用于制作环境光遮蔽效果,比如实时全局光照(Real-Time GI)。这涉及到两个过程: 1. 接收投影(Light Propagation Volume, LPV 或 Light Cache): 当环境中存在动态光源时,例如点光源、聚光灯等,这些光源会将它们的信息“投射”到LPV(也称为光线捕捉体积)上。这个过程类似于现实中的间接照明,通过计算来自所有光源的累积影响,生成一张预计算的辐射图(Radiance Map)。当物体进入这个体积时,它会被自动采样这张辐射图,得到接收的投影信息。 2. 产生投影: 对于静态光源或场景的一部分,如环境光,它们本身不会直接参与LPV的更新。然而,我们可以创建一个自发光材质(Emissive Material),设置为从预计算的辐射图上获取颜色值。这样,这个自发光物体就会反射出接收到的环境光,给人一种自然的光照感。 在HLSL(High-Level Shading Language)中,这可能会涉及一些顶点和片段着色器代码。以下是简化的例子: **顶点着色器(Vertex Shader):** ```hlsl float4 main(inout appdata_full v) : SV_POSITION { // 传递原始位置和UV坐标 v.vertex = UnityObjectToClipPos(v.vertex); v.uv = v.texcoord; // 如果需要,添加额外的输入变量来控制LPV的影响 return v; } ``` **片段着色器(Fragment Shader)(接收投影):** ```hlsl float4 frag(appdata_full v) : SV_Target { float4 baseColor = tex2D(_BaseTexture, v.uv); // 基础颜色 float4 receivedLight = tex2D(_LightPropagationVolume, v.uv); // 从LPV采样 // 将接收到的光与基础颜色混合 float4 finalColor = lerp(baseColor, receivedLight, _ReceiveIntensity); // _ReceiveIntensity是一个衰减系数 return finalColor; } ``` **自发光片段着色器(Emissive Material)(产生投影):** ```hlsl float4 frag(appdata_full v) : SV_Target { float4 emittedColor = tex2D(_EnvironmentRadianceMap, v.uv); // 从预计算的辐射图中取颜色 return emittedColor; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值