
Scene Kit
|
255
let noiseNormalMapTexture =
noiseTexture.generatingNormalMap(withSmoothness: 0.1,
contrast: 1.0)
一旦获得法向贴图纹理,我们就可以在几何体上通过
normal
属性来使用它:
greenMaterial.normal.contents = noiseNormalMapTexture
讨论
当计算某个受光物体的颜色时,
3D
渲染器会一个像素一个像素地计算其亮度,每
个像素的亮度取决于光线的方向以及光线到达物体表面的角度,这个角度就叫作法
向。在普通的场景中,物体任意位置的法向都垂直于物体表面;假设你将
iPhone
平放到桌面上,手机向上的那一面的法向就是正上方。
当你在一个物体上应用法向贴图时,我们改变了默认的法向值,并告诉
3D
渲染器
光线反射将发生轻微的波动。由于肉眼观察到了这些变化,物体的表面于是显得粗
糙不平了。当我们将单一纹理贴到材质上时,这会导致物体显示出更多的几何细节,
通常会显得更加自然。
8.11
约束对象
问题
我们想让物体的位置和旋转角度被其他物体约束。
解决方案
首先,创建一个被约束对象:
let pointer = SCNPyramid(width: 0.5, height: 0.9, length: 4.0)
let pointerNode = SCNNode(geometry: pointer)
pointerNode.position ...