SceneKit之SCNMaterial
SCNMaterial
A set of shading attributes that define the appearance of a geometry's surface when rendered
当我们创建一个SCNMaterial
对象时,该对象包含一系列SCNMaterialProperty
属性及其他可视化属性、选项。
通过使用SCNGeometry
类的firstMaterial
或materials
属性将一个或多个SCNMaterial
对象附加到SCNMaterial
对象实例上。
SCNMaterialProperty
A container for the color or texture of one of a material’s visual properties.
字面意思看,SCNMaterialProperty
属性为SceneKit的呈现提供了纯色、纹理或其他2D内容。
一种材质有几个视觉特性,它们共同决定了它在光照和阴影下的外观。SceneKit通过将SCNMaterialProperty
属性的信息与灯光的位置、强度和颜色相结合来呈现场景中的每个像素。
SCNMaterialProperty
属性的内容可以是一种颜色,或者是纹理,SceneKit使用材质所依附的几何对象提供的纹理坐标在材质的表面上进行映射。反过来,纹理可以来自任何的几个来源,如image object
, a URL to an image file
,一组特定格式的图像,甚至可以是由Core Animation
,SpriteKit
,AVFoundation
提供的动画 。
SCNMaterial.LightingModel
Constants specifying the lighting and shading algorithm to use for rendering a material.
SceneKit提供了几种不同的照明模型,每种模型都将来自材料的视觉属性的信息与场景中的灯光和其他内容相结合。
照明模型- blinn:包含环境、漫反射和高光属性的阴影,其中高光高光使用Blinn-Phong公式计算。Blinn-Phong公式:
color = ambient * al + diffuse * max(0, dot(N, L)) + specular * pow(max(0, dot(H, N)), shininess)
- constant:统一的阴影,只包含周围的照明。
- Lambert:只包含环境和漫反射属性的阴影。
- phong:包含环境、漫反射和高光属性的阴影,其中高光高光使用Phong公式计算。Phong公式:
color = ambient * al + diffuse * max(0, dot(N, L)) + specular * pow(max(0, dot(R, E)), shininess)
- physicallyBased:基于物理光和材料的现实抽象的阴影。基于物理的阴影主要依赖于以下三个材质属性:
-
漫反射属性(在某些创作工具中称为反照率)提供了材质的“基本”颜色。
-
粗糙度属性(在某些创作工具中称为平滑性)是对真实表面微观细节的近似。通过将这些“微观层面”近似为一个单独的术语,这一特性有助于生成类似于现实世界物理的节能定律的照明计算,从而在哑光和有光泽的表面之间产生更真实的变化。
-
金属特性近似于物理表面的其他方面,如折射率、产生尖锐反射的倾向以及在掠射角上产生菲涅耳反射的倾向,这些特性一起产生了整体的金属或非金属(也称为介电)外观。
总之,SCNMaterial对象的lightingModel
属性确定SceneKit用于将视觉属性与场景中的灯光结合起来的规则,从而为呈现场景中的每个像素生成最终颜色。