一组阴影属性,用于定义渲染时几何图形表面的外观。
class SCNMaterial : NSObject
创建材质时,可以定义视觉属性及其选项的集合,然后可以将其重新用于场景中的多个几何图形。
材质具有多种视觉属性,每个属性都定义了SceneKit照明和着色过程的不同部分。每个视觉属性都是SCNMaterialProperty类的实例,该类为SceneKit的渲染方面提供纯色,纹理或其他2D内容。然后,材质的LightingModel属性确定SceneKit用于将视觉属性与场景中的灯光组合在一起的公式,以为渲染场景中的每个像素生成最终颜色。有关渲染过程的更多详细信息,请参见SCNMaterial.LightingModel。
您可以使用其firstMaterial或materials属性将一种或多种材料附加到SCNGeometry类的实例。多个几何可以引用相同的材料。在这种情况下,更改材质的属性会更改使用该材质的每个几何的外观。
convenience init(mdlMaterial: MDLMaterial)
Creates a material from the specified Model I/O material object.
从指定的Model I / O 纹理对象创建纹理。
var name: String? { get set }
A name associated with the material.
给纹理起的一个名字
var lightingModel: SCNMaterial.LightingModel { get set }
The lighting formula that SceneKit uses to render the material.
SceneKit 的光线方案
var diffuse: SCNMaterialProperty { get }
An object that manages the material’s diffuse response to lighting.
管理材质对照明的漫反射的对象。
var metalness: SCNMaterialProperty { get }
An object that provides color values to determine how metallic the material’s surface appears.
提供颜色的对象,用来确定材料表面的金属外观
此属性仅测量颜色值的总强度; 纹理内容最好以灰度定义。
此属性通常近似物理表面的各个方面(例如,折射率,产生尖锐反射的趋势以及在掠射角处产生菲涅耳反射的趋势),它们共同产生整体的金属或非金属(也称为介电质)外观。 较低的值(较暗的颜色)会使材料看起来更像介电表面。 较高的值(较亮的颜色)会使表面看起来更具金属感。
该属性仅在材料的lightingModel值是PhysicalBased时适用。
var roughness: SCNMaterialProperty { get }
An object that provides color values to determine the apparent smoothness of the surface.
一个提供颜色的对象,用于确定材料表面的 粗糙度,光滑度
此属性仅测量颜色值的总强度; 纹理内容最好以灰度定义。
此属性近似于表面的微观细节水平,例如微小的凹凸。 通过将这些“微刻面”近似为一个术语,此属性有助于进行类似于真实世界物理的节能定律的照明计算,从而在粗糙表面和发亮表面之间产生更真实的变化。 较低的值(较暗的颜色)会使材质显得发亮,并具有清晰的镜面高光。 较高的值(较亮的颜色)会导致镜面反射的高光散开,并且材质的漫反射颜色会变得更加反光。
该属性仅在材料的lightingModel值是PhysicalBased时适用。
var normal: SCNMaterialProperty { get }
An object that defines the nominal orientation of the surface at each point for use in lighting.
一个定义了名义方向,也就是法线方向(每个点使用光纤的)表面的物体
模拟灯光与材料的相互作用需要有关每个点的表面方向的信息。通常,由几何对象提供的法向矢量会提供此信息。但是,这限制了表面轮廓的细节级别,因为几何结构只能为每个顶点提供一个唯一的表面法线向量(并且增加顶点数量以对高度详细的表面进行建模会导致较高的性能成本)。
或者,您可以将纹理图像用作法线贴图,该法线贴图描述纹理中每个像素的表面方向。当SceneKit使用图像时,它将每个R,G和B分量视为表面法线向量的X,Y和Z分量。由于法线贴图纹理可以存储比几何图形更详细的表面信息,因此您可以使用材质的法线属性来模拟粗糙的表面(例如石材),或者在其他光滑的表面上添加浮雕或雕刻的设计。
默认情况下,普通属性的内容对象为白色。将法线属性的内容设置为任何纯色都会禁用法线贴图,从而导致SceneKit仅使用其几何形状提供的表面法线信息来对材质进行着色。将普通属性的内容设置为图像或其他纹理映射的内容将启用普通映射,这也会自动将材质的isLitPerPixel属性设置为true。
下图显示了将普通属性的内容设置为其他属性具有默认内容的材质上的纹理图像的效果。
var emission: SCNMaterialProperty { get }
An object that defines the color emitted by each point on a surface.
定义 曲面上的每个点发射出的颜色的对象
您可以使用自发光贴图纹理来模拟自发光的曲面部分。 SceneKit不会将材料视为光源-而是,发射属性确定与照明无关的材料的颜色。 (要创建看起来发光的对象,您可能希望将几何图形与自发光贴图以及添加到场景中的其他SCNLight对象结合在一起。)
默认情况下,发射属性的内容对象是黑色,导致该属性没有可见效果。将发射属性的内容设置为任何纯色,将使材质独立于照明而获得统一的颜色。要创建选择性发光效果,请将属性的内容设置为图像或其他纹理映射的内容,这些图像或发光内容的发光区域使用明亮的颜色,而其他区域使用较暗的颜色。在发射贴图的深色部分(以及不透明性降低的部分)中,该材料的其他视觉特性有助于其在场景照明下的外观。
下图显示了提供发射贴图图像之前和之后的材质(具有漫反射特性的纹理)。
简单来说就是当提供一张有不同亮度的图片作为emission 时, 会在原来的基础上叠合种种效果
var selfIllumination: SCNMaterialProperty { get }
An object that provides color values representing the global illumination of the surface.
自发光
提供颜色值,代表全局曲面的照明的对象
自发光适用于所有材料,但对于使用基于物理的阴影的对象特别有用(请参阅physicalBased)。 基于物理的材料与基于环境的照明效果最佳(请参阅SCNScene属性LightingEnvironment),但对于某些材料,让表面本身定义其照明的一部分可能会很有用,例如,某个物体的位置使其从“ 天空”提供主要的照明环境。 当您为该属性分配内容时,它们将覆盖环境照明对漫反射阴影的贡献,但是环境照明仍对镜面效果有所贡献。
var ambientOcclusion: SCNMaterialProperty { get }
An object that provides color values to be multiplied with the ambient light affecting the material.
提供颜色值乘以影响材质的环境光的对象。
使用此属性可以将环境光遮挡纹理贴图分配给曲面。 如果场景中没有环境光,则此属性无效。 如果此属性不为nil,SceneKit将忽略环境属性。
当使用基于物理的阴影(请参见physicalBased)时,环境光遮挡近似于使全局照明模糊的大规模表面细节。
var ambient: SCNMaterialProperty { get }
管理材料对环境光的响应的对象。
环境阴影描述了材料反射的环境光的数量和颜色。 表面上的所有点的环境阴影在所有方向上都是均匀的。 如果场景不包含类型为环境的灯光,则此属性不会影响材质的外观。
默认情况下,环境属性的内容对象为深灰色。 通过更改环境属性的内容,可以为未由场景中的灯光直接照亮的表面区域指定不同的颜色或纹理。 要使材质对环境光和漫射光具有相同的响应,请将其locksAmbientWithDiffuse属性设置为true。
下图显示了将环境属性的内容设置为纯色之前和之后的一种材质(具有其漫反射特性的纹理)。
var specular: SCNMaterialProperty { get }
An object that manages the material’s specular response to lighting.
管理材料高光的对象
镜面反射阴影描述了材料直接朝向观察者反射的光的数量和颜色,在表面上形成了明亮的高光并模拟了光泽或发亮的外观。您可以使用材质的光泽属性来调整镜面高光的清晰度。
默认情况下,镜面反射属性的内容对象为黑色,导致材质显得暗淡或无光。将镜面反射属性的内容更改为较亮的颜色会导致镜面反射高光以该颜色显示,从而使表面显得发亮。当您将纹理应用于镜面反射属性时,纹理图像将变为镜面反射贴图-图像中每个像素的亮度决定了材质表面上每个点在照明时创建镜面高光的趋势。
下图显示了提供镜面贴图图像之前和之后的材质(具有用于漫反射特性的纹理)。请注意,明亮的镜面反射高光仅出现在镜面反射图图像为白色的表面部分上。
材质的LightingModel属性确定SceneKit用于将其镜面反射性和其他视觉属性与场景中的灯光和其他内容结合使用的公式,以为渲染场景中的每个渲染像素生成最终颜色。 有关详细信息,请参见照明模型。
该材料属性不适用于基于物理的材料(请参见PhysicallyBased)。
![](https://img.haomeiwen.com/i4474910/725898bb9b7c7384.png)
var reflective: SCNMaterialProperty { get }
An object that defines the reflected color for each point on a surface.
定义反射颜色的对象
This material property does not apply to physically-based materials
这个材料属性不会应用于 基于physicllyBased的属性
![](https://img.haomeiwen.com/i4474910/b30c28bba655a865.png)
var multiply: SCNMaterialProperty { get }
在完成所有其他着色后,提供与材料中的像素相乘的颜色值的对象。
将材质的其他视觉属性与照明和有关场景的其他信息结合在一起后,“场景”工具包将每个渲染像素的颜色乘以该属性提供的颜色。 您可以使用此属性来使表面变暗或着色,而与照明和其他属性的效果无关,或者可以通过阴影贴图将预先计算的照明添加到场景中。
默认情况下,multiple属性的内容对象为白色,导致该属性没有可见效果。
下图显示了将乘法属性的内容设置为纯色之前和之后的材质(具有漫反射和发射特性的纹理)。 请注意,乘法颜色甚至可以调制由发射贴图添加的亮区域。
![](https://img.haomeiwen.com/i4474910/76002ed967ba17b2.png)
var transparent: SCNMaterialProperty { get }
确定材质中每个点的不透明度的对象。
使用此属性有选择地使材料的某些部分显得透明。 您可以使用材质的透明度属性来统一调整材质的不透明度,也可以使用节点的不透明度属性来统一调整附加到节点的所有内容的不透明度。
默认情况下,透明属性的内容对象是完全不透明的黑色,导致该属性没有可见效果。 将透明属性的内容设置为任何纯色都会根据该颜色的不透明度值均匀地淡化材质的不透明度。 要使材料的某些部分看起来透明,请将属性的内容设置为图像或其他具有纹理贴图的内容,这些内容的Alpha通道定义了完全或部分不透明的区域。
下图显示了提供透明性纹理图像之前和之后的半透明材料。 (为使透明效果更明显,透明材料后面显示了一个蓝色球形。)
![](https://img.haomeiwen.com/i4474910/b2b7b9458f5a4b29.png)
var shininess: CGFloat { get set }
镜面反射高光的清晰度。 可动画的。
材料的光泽度与它的镜面反射特性和场景中的灯光交互作用,以在表面上产生明亮的高光。 较高的值会产生更清晰的高光,使表面看起来更平滑和更有光泽。
您可以对此属性的值进行动画处理。 请参见使SceneKit内容动画化。
var fresnelExponent: CGFloat { get set }
菲涅耳指数
A factor affecting the material’s reflectivity. Animatable.
影响材料反射率的因素。 可动画的。材料的菲涅耳指数与其反射特性相互作用,以根据其相对于观察者的角度确定表面中的反射强度。 当从浅角度观察材料时,较高的菲涅耳指数可增加反射的可见性。
您可以对此属性的值进行动画处理。 请参见使SceneKit内容动画化。
var locksAmbientWithDiffuse: Bool { get set }
一个布尔值,该值确定材料对环境照明和漫射照明的响应是否相同。 可动画的。
在对真实世界的照明进行建模时,通常将表面视为在环境光和漫射光下均可见的单一“基本”颜色或纹理。当此属性的值为false时,SceneKit不受此限制:您可以使用材质的漫反射属性提供在直接照明下可见的颜色或纹理,而其环境属性为未直接照明的区域提供不同的颜色或纹理。
当此属性的值为true时,或在使用physicallyBased阴影模式时,SceneKit会将漫反射属性用于环境照明,而忽略该环境属性,并确保材质对环境和漫反射光具有相同的响应。
对于所有平台上的新应用,此属性的默认值为true。 (在OS X v10.9和更早版本中,默认值为false。)
您可以对此属性的值进行动画处理。请参见使SceneKit内容动画化。对该属性进行动画处理会淡入每个状态的渲染结果之间。
网友评论