Bruneton 预计算大气渲染#3 —— MultipleScattering
[{“source”:{“position”:200,“lines”:[”}
辐照度(Irradiance)E 定义为从半球内各方向入射到点 P 上、乘以入射角余弦并对立体角积分后的辐射度
cosθ=ωz 是方向 ω 与法线方向的夹角余弦。dω=sinθ dθ dϕ 是立体角微元
注意这里第一个循环是 j<SAMPLE_COUNT / 2,是九十度,其实是上半球积分
GetScattering函数:
-
一阶散射因为比较“简单”,把大气分子(Rayleigh)和气溶胶(Mie)分开存、分开算,再乘相位函数,精度高且贴图小。
-
多阶散射因为数据量大,直接把“密度×相位”结果烘焙到一个 3D 贴图里,运行时直接查表。
"]},"target":{"position":200,"lines":["}
辐照度(Irradiance)E 定义为从半球内各方向入射到点 P 上、乘以入射角余弦并对立体角积分后的辐射度
cosθ=ωz 是方向 ω 与法线方向的夹角余弦。dω=sinθ dθ dϕ 是立体角微元
注意这里第一个循环是 j<SAMPLE_COUNT / 2,是九十度,其实是上半球积分
GetScattering函数:
-
一阶散射因为比较“简单”,把大气分子(Rayleigh)和气溶胶(Mie)分开存、分开算,再乘相位函数,精度高且贴图小。
-
多阶散射因为数据量大,直接把“密度×相位”结果烘焙到一个 3D 贴图里,运行时直接查表。
"]},"type":"CHANGE"},{"source":{"position":228,"lines":["}
ComputeMultipleScattering
理论
这一步的核心是在视线方向 ω 上,对“沿射线每一点 q 处的散射贡献”做一次一维积分,这个散射贡献已经在ComputeScatteringDensity函数中计算完了。
入口函数
#pragma kernel ComputeMultipleScattering"]},"target":{"position":228,"lines":["}
ComputeMultipleScattering
理论
这一步的核心是在视线方向 ω 上,对“沿射线每一点 q 处的散射贡献”做一次一维积分,这个散射贡献已经在ComputeScatteringDensity函数中计算完了。
入口函数
#pragma kernel ComputeMultipleScattering"]},"type":"CHANGE"}]