Light Unit
2025-03-02 18:49:22
18
0
0
duadua
--- # survey > [mat][pbr][frostbite]Moving%20Frostbite%20to%20Physically%20based%20rendering%203.0.pdf  > - 一般精准光源(如平行光)的直接光照时,光源单位光使用lux(lm/m^2),相当于是乘过立体角的,这样相当于乘了渲染方程的微元立体角。 > - 平行光的luminance一般为1.6*10^9 nit,但是我们一般使用12w lux的强度作为其能量,这是因为其立体角在0.000066左右,所以乘了其立体角之后就变成12w了。  > - 点光/聚光灯一般以lm或者cd为单位,并以单位立体角上的强度作为着色表面入射的辐射照度E(不带单位1/sr,单位还是lm,相当于乘了1 sr),然后现经过平方反比衰减(E的单位变为lm/m^2,真正成为irradiance/illuminance)。然后经过RTE乘以brdf(单位1/sr)之后得到出射的radiance/luminance。 --- # old 1. 辐射度量  球面度(solid angle)。sr。 辐射通量(radiant flux)。单位时间的辐射能。瓦特(W),焦耳每秒(J/s)。$$\Phi = \frac { dQ } { dt }$$ 辐射强度(radiant intensity)。单位立体角的辐射通量。单位为瓦特每球面度(W/sr)。$$I = \frac { d\Phi } { d\Omega }$$ 辐射亮度(radiance)。光源方向的垂直方向上的单位表面积单位立体角所发出的辐射通量。也可以说是单位表面积所发出的辐射强度。瓦特每球面度平方米(W/(sr * m^2))。 $$L = \frac {dI} {dA^{\bot}}$$ 辐射照度(irradiance)。光在单位表面积所发出的辐射通量。瓦特每平方米(W/(m^2))。 $$E = \frac {d\Phi} {dA}$$ brdf单位:1/sr。 $$\color{red} { L(p, \vec{v}) = \int_{\vec{l}_i \in \Omega} f(p, \vec{l}_i, \vec{v}) \ast L(p, \vec{l}_i) \ast (\vec{n} \cdot \vec{l}_{i}) \ast d\vec{l}_i }$$ $$\frac{W}{sr * m^2} = \int \frac{1}{sr} * \frac{W}{sr * m^2} * sr$$ 所以入射光源是radiance。被积函数除去brdf之外的部分是irradiance。出射光线是radiance,也是最后看到的颜色。 2. 光度量   https://zhuanlan.zhihu.com/p/156877301 Lumen : lm Lux : lx; lm/m^2; cd*sr/m^2; 单位面积 Candela : cd; lm/sr; 单位立体角 Nit : cd/m^2; lm/(sr * m^2); lx/sr 单位立体角单位面积 3. 单位转换 发光效率/光效 K = 683.002 lm/W ConvertPointLightLumenToCandela(float intensity 4. 点光 4.1 点光单位使用 Lumen 4.2 点光单位使用 cd 4.3 点光单位使用 Lux 4.4 代码流程 cpu gpu Context.Infinitesimal.LightColor = LightData.Color USpotLightComponent::SetLightBrightness 问题: 4.5 计算流程 5. 平行光 FDirectionalLightData FLocalLightData FLightShaderParameters FDeferredLightData 聚光 面光 6. 统一参数面板 统一光源ub cpu侧:forward: 不同光源属于不同的ub Deferred: 不同光源都有相同的ub,但使用不同的pass去render lighting gpu侧:forward: 不同光源通过getXXXLightData组成不同的data,再通过ConvertToDeferredData形成相同的参数,然后复用deferred的光照流程 Deferred: 不同光源都使用相同的参数,走相同的光照流程。但在光照函数内部会根据type判断走不同的光源处理。 目前引擎里使用的是forward,所以不使用相同的参数也无伤大雅,但也可统一一下,但不推荐在光照函数内部根据type来判断。 平行光打光参考   注意 Source angle 对物理大气单位的影响 congcong SH之后有小于0的情况导致不守恒 Source angle 对 L的影响 -- disk area 平行光 SunSphereAreaApproximation_Frostbite 平行光光源为Top光源Lux,需要转化  frobstbite(close bloom)(source rot = 10)  Unreal 方案 按照统一的Capsule Light 计算 SourceLength = 0 LightParameters.SourceRadius = FMath::Sin( 0.5f * FMath::DegreesToRadians( LightSourceAngle ) ); FLightAccumulator AccumulateDynamicLighting FAreaLightIntegrateContext CreateCapsuleIntegrateContext 1. Change NoL 2. ToLight = ClosestPointLineToRay( Capsule.LightPos[0], Capsule.LightPos[1], Capsule.Length, R );
Pre:
LTC(Linearly Transformed Cosines)
Next:
Test
0
likes
18
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Submit
Sign in
to leave a comment.
No Leanote account?
Sign up now.
0
comments
More...
Table of content
No Leanote account? Sign up now.