最近把HairWorks整合到了UE4 4.20, 整合的过程中发现了一些没法直接merge的代码, 主要集中在LightRendering.cpp和DeferredLightingPixelShader.usf中. 所以顺便简单读了一下代码, 把其中的一些关键字概念整理出来方便查阅理解.
UE4使用了一些宏来辅助定义UniformBuffer中的结构体, 在Shader中是可以打到对应的定义的.
不如叫Particle Light, 粒子系统中发射的简单点光源. 因为数量很多, 所以算法做了简化, 没有阴影之类的效果
Light Function在我看来更像是一个可以用材质节点控制的Shadow Mask, 改变光照区域的强度, 不能叠加颜色.
有三种:
用来剔除挡住的光源的
点光源或聚光灯都是Radial Light, 方向光就不是, 做选择题时字面意思很好理解, 但是第一眼看到时就很蒙.
见IES Light Profiles, 参考现实中照明设备的标准的一个亮度曲线算法, 跟强度用流明一个套路
Forward Rendering时代美术惯用的技俩, UE4一开始用了Deferred Rendering没加的, 估计架不住用户习惯又加回来了, 见Lighting Channels
SSS相关
Rect Light用的 参考[ Heitz et al. 2016, “Real-Time Polygonal-Light Shading with Linearly Transformed Cosines”
渲染simple light时用的tiled deferred lighting, 估计粒子点光太多了架不住. 其它光源就是延迟渲染的标准做法了.
这里有两个关键名词, 实时GI估计大家都是这么搞的吧:
其实就是开了阴影的光源