Marius 给了我一个提示,MDLLight
类是描述场景中光源对象的抽象超类。当使用 MDLAsset
类从资产文件加载灯光或在构建用于导出的资产时创建灯光时,可以使用一个或多个具体子类 MDLPhysicallyPlausibleLight
、MDLAreaLight
、MDLPhotometricLight
或 MDLLightProbe
。
而 MDLLightType
是一个枚举类型,它提供了光源形状和样式的选项,用于 lightType 属性:
case unknown = 0
0. 灯光的类型未知或尚未初始化。
case ambient = 1
1. 光源应该均匀地照亮场景,不受位置或方向的影响。
case directional = 2
2. 光源无论位置如何,都会从一个统一的方向照亮场景。
case spot = 3
3. 光源从特定的位置和方向照亮场景。
case point = 4
4. 光源从特定位置向所有方向照亮场景。
case linear = 5
光源从线形区域的所有方向照亮场景。
case discArea = 6
光源从一个圆盘形的区域向所有方向照亮场景。
case rectangularArea = 7
7. 光源从一个矩形区域向所有方向照亮场景。
case superElliptical = 8
8. 光源从矩形区域的所有方向照亮场景。
case photometric = 9
9. 光的照明由光度学配置文件决定。
case probe = 10
10. 光照亮度是由纹理图像决定的,这些图像代表了特定点处场景的样本。
case environment = 11
11. 光的照明效果由纹理图像决定,这些图像代表场景周围环境的样本。
这些内容摘自于苹果公司的Metal API参考文档。
MDLPhysicallyPlausibleLight
MDLPhysicallyPlausibleLight
对象描述了一个光源,用于基于真实世界物理的着色模型。
MDLAreaLight
MDLAreaLight
对象代表一种光源,它不是从单个点或方向照亮3D场景,而是从具有特定形状的区域照亮。区域光的形状是在光的本地坐标空间的xy平面上的二维图形,其照明沿负z轴方向指向(根据继承的innerConeAngle和outerConeAngle属性朝外扩散)。
MDLPhotometricLight
MDLPhotometricLight
对象表示一种光源,其形状、方向和照明强度由光度学文件确定。您可以从IES格式的文件中创建光度学灯光,该文件包含光源的物理测量数据。许多真实世界光源装置的制造商发布这样的文件,描述其产品的照明特性。这个光度学数据测量了光源周围的光网 - 光在源周围所有方向上的强度测量。
MDLLightProbe
MDLLightProbe
对象描述了光源在所有方向上照明颜色和强度的变化。光探针将此变化表示为立方体贴图纹理,其中每个像素表示从立方体中心沿特定方向的光的颜色和强度,或作为一组球面谐波系数。除了描述这样的光源外,MDLLightProbe
还提供了基于场景内容生成光探针纹理和从纹理生成球面谐波系数的方法。