iOS開發之SceneKit架構--SCNLight.h

來源:互聯網
上載者:User

標籤:類比   split   顏色   簡單   abstract   phi   使用者   mon      

1、SCNLight簡介

  用於添加光源,串連到一個節點照亮現場,可以給情境添加不同的燈光,類比逼真的環境。

 

2、四種燈光的簡介

  添加一個box立方體、一個tube圓柱管道和一個地板floor,沒有燈光的時候物體都是白色的模型圖:

 

  四種燈光分別為環境光線、全方位光、定向光線和點光源,另外還有一個光域網和熒光探針。添加不同燈光後效果如下:

//燈光類型 枚舉@property(nonatomic, copy) SCNLightType type;
FOUNDATION_EXTERN SCNLightType const SCNLightTypeAmbient;                                                  // 環境光線(Ambient light):環境光線源是控制情境整體亮度的源頭。FOUNDATION_EXTERN SCNLightType const SCNLightTypeOmni;                                                     // 全方位光(Omni light):白天天空中的明亮的光芒 - 太陽 - 基本上是全能的光FOUNDATION_EXTERN SCNLightType const SCNLightTypeDirectional;                                              // 定向光線(Directional light):這種類型在特定方向發射平行光線。FOUNDATION_EXTERN SCNLightType const SCNLightTypeSpot;                                                     // 點光源(Sopt light):這種類型的光也是定向的,但是光從空間中的單個點發射並且以錐形展開。FOUNDATION_EXTERN SCNLightType const SCNLightTypeIES API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0));   // 光域網是一種關於光源亮度分布的三維表現形式,儲存於IES檔案當中。https://baike.baidu.com/item/%E5%85%89%E5%9F%9F%E7%BD%91/86200?fr=aladdinFOUNDATION_EXTERN SCNLightType const SCNLightTypeProbe API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0)); // 熒光探針https://baike.baidu.com/item/%E8%8D%A7%E5%85%89%E6%8E%A2%E9%92%88/2698663
  • 全方位光(SCNLightTypeOmni):例如太陽。(1》在原來模型基礎上添加一個全方位光白色!)

  • 環境光線(SCNLightTypeAmbient):用於控制情境整體亮度的源頭。注意環境光線需要在添加其他光源後才會有效果!(2》在原來全方位光基礎上添加一個環境光線海洋藍!)

  •  定向光線(SCNLightTypeDirectional):光線平行如射線一樣。(3》在以上基礎上添加一個定向光線橙紅色!)
  • 注意橙紅色箭頭就是光的發射方向 

  • 點光源(SCNLightTypeSpot):單個點發射並且以錐形展開。將其用於更集中的光源,如在一架瘋狂的夜總會追逐情境中,警方直升機正在跟蹤逃離劫匪的汽車。(4》去除其它燈光添加點光源紅色)

  • 附:關於燈光座標簡單說明

  • 1、被選中時變為黃色;
  • 2、X軸-紅色箭頭、Y軸-綠色箭頭、Z軸-藍色箭頭(右手法則);
  • 3、螢幕移動選中夾角地區,旋轉就選中夾角地區的邊線;

 

3、其它API簡介

  • 初始化
//初始化+ (instancetype)light;
  • 修改燈光光的外觀
//燈光類型 枚舉@property(nonatomic, copy) SCNLightType type;//燈光顏色@property(nonatomic, retain) id color;//色溫//開爾文溫度。渲染器將光的顏色乘以光的溫度所產生的顏色。預設為6500(純白色)。可以做成動畫。@property(nonatomic) CGFloat temperature API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0));//光亮強度,光通量//這種強度被用來調節光的顏色。當與以物理為基礎的材料一起使用時,它對應於光的光通量,在lumens(lm)中表示。預設為1000。可以做成動畫。@property(nonatomic) CGFloat intensity API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0));//描述光探測器各個方向的估計照明環境的資料。//目前球面諧波僅由光探針(SCNLightTypeProbe)支援。資料是27個32位浮點值的數組,包含三個與紅、綠和藍色係數對應的非交叉資料集。@property(nonatomic, copy, readonly) NSData *sphericalHarmonicsCoefficients API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0));
  • 管理燈光屬性
//燈光名字@property(nonatomic, copy, nullable) NSString *name;
  • 管理光衰減
//光的強度開始減弱的距離。可以做成動畫。//只使用類型點光源SCNLightTypeSpot和全方位光源SCNLightTypeOmni,預設為0@property(nonatomic) CGFloat attenuationStartDistance API_AVAILABLE(macos(10.10));//光的強度被完全削弱的距離//只使用類型點光源SCNLightTypeSpot和全方位光源SCNLightTypeOmni,預設為0@property(nonatomic) CGFloat attenuationEndDistance API_AVAILABLE(macos(10.10));//指定起始和結束衰減距離之間的衰減。0表示一個常數衰減,1個線性衰減,2個二次衰減////只使用類型點光源SCNLightTypeSpot和全方位光源SCNLightTypeOmni,預設為2,可動畫@property(nonatomic) CGFloat attenuationFalloffExponent API_AVAILABLE(macos(10.10));
  • 管理聚光燈的範圍
//可以用一個位置和方向(從包含光線的節點)和一個指定圓錐寬度的角度來定義聚光燈的錐形照明地區。此外,照明地區可以順利地從充分照明過渡到沒有照明。這個屬性決定了整個照明地區的寬度。//預設值為0.0,指定只有聚光燈照明的地區的中心被完全照亮。@property(nonatomic) CGFloat spotInnerAngle API_AVAILABLE(macos(10.10));//這個屬性決定了轉換地區的寬度。預設值是45.0。@property(nonatomic) CGFloat spotOuterAngle API_AVAILABLE(macos(10.10));//在攝影和舞檯燈光的術語中,gobo(也被稱為flag或cookie)是一個模板、凝膠或其他放置在光源前的物體,形成或著色光束。//通過更改永久分配給該屬性的對象的內容屬性來改變聚光燈的外觀。與其他材質屬性一樣,您可以使用一個顏色或映像,或者一個包含動畫內容的核心動畫層,作為一個照明gobo。//此屬性僅適用於類型屬性為spot的燈。@property(nonatomic, readonly, nullable) SCNMaterialProperty *gobo API_AVAILABLE(macos(10.9));
  • 管理光線投射的陰影
//是否支援投射陰影//僅支援燈光類型的點光源SCNLightTypeSpot和定向光線SCNLightTypeDirectional@property(nonatomic) BOOL castsShadow;//指定接收器的陰影的顏色(CGColorRef或NSColor)。預設為黑色。可以做成動畫。//在iOS 9或之前的macOS 10.11或更早的時候,預設為黑色50%透明。@property(nonatomic, retain) id shadowColor;//指定用於渲染接收方陰影的樣本半徑。預設值是3.0。可以做成動畫@property(nonatomic) CGFloat shadowRadius;//指定陰影映射的大小。//陰影圖越大,陰影越精確,但計算越慢。如果設定為{0,0},則自動選擇陰影映射的大小。預設為{ 0 }。@property(nonatomic) CGSize shadowMapSize API_AVAILABLE(macos(10.10));//指定每個片段的樣本數目,以計算陰影映射。預設值為0。//在macOS 10.11或更早的時候,shadowSampleCount預設為16。在iOS 9或之前,預設為1.0。//在macOS 10.12、iOS 10和更大的版本中,當shadowSampleCount設定為0時,根據平台選擇預設的樣本計數。@property(nonatomic) NSUInteger shadowSampleCount API_AVAILABLE(macos(10.10));//指定用於投射陰影的模式。預設為SCNShadowModeForward。@property(nonatomic) SCNShadowMode shadowMode API_AVAILABLE(macos(10.10));/*! 枚舉SCNShadowMode @abstract 投射陰影的模式 當陰影模式設定為SCNShadowModeForward時,在計算光照時計算陰影。在這種模式下,只有陰影顏色的阿爾法分量用來改變照明的貢獻。 當陰影模式設定為SCNShadowModeDeferred陰影時,應用作為一個post過程。陰影是混合在最終的映像上,可以是任意的顏色。然而,大部分的時間效率都不如SCNShadowModeForward,除非一個情境有很多的透支。 當陰影模式被設定為SCNShadowModeModulated,光不再照亮情境,它只投射陰影。因此設定淺色沒有效果。在這種模式下,gobos扮演了一個影子投影儀的角色:gobo映像是通過陰影接收器的片段來調製的。典型的用法是使用一個放射狀漸層(黑色到白色)的映像,它被投射到一個字元(並且使用光和節點的categoryBitMask來將字元從陰影接收器中排除)。 */typedef NS_ENUM(NSInteger, SCNShadowMode) {    SCNShadowModeForward   = 0,    SCNShadowModeDeferred  = 1,    SCNShadowModeModulated = 2} API_AVAILABLE(macos(10.10));//應用於陰影的修正量//它乘以一個實現特定的值,以建立一個恒定的深度位移量。預設為1.0@property(nonatomic) CGFloat shadowBias API_AVAILABLE(macos(10.10));//指定用於從定向光線渲染到陰影映射的正投影。預設為1。//僅支援燈光類型的定向光線SCNLightTypeDirectional@property(nonatomic) CGFloat orthographicScale API_AVAILABLE(macos(10.10));//指定光和表面之間的最小距離投射陰影。//如果一個表面比這個最小距離更接近光,那麼表面就不會被遮蔽。接近值必須與零不同。可以做成動畫。預設為1。@property(nonatomic) CGFloat zNear API_AVAILABLE(macos(10.10));//指定光和可見表面之間的最大距離投射陰影。//如果一個表面離光遠超過這個最大距離,那麼表面就不會被遮蔽。可以做成動畫。預設為100。@property(nonatomic) CGFloat zFar API_AVAILABLE(macos(10.10));
  • 選擇要被燈光照亮的節點
//確定將由接收者點亮的節點類別。預設設定為所有位集。它定義了這個光屬於哪個類別。@property(nonatomic) NSUInteger categoryBitMask API_AVAILABLE(macos(10.10));
  • 設定IES檔案
//指定要確定形狀、方向和光照強度的IES檔案。預設為零。@property(nonatomic, retain, nullable) NSURL *IESProfileURL API_AVAILABLE(macos(10.12), ios(10.0), tvos(10.0));
  • 其它屬性
//指定陰影映射投影是否應該由使用者自動或手動完成。預設值為YES。@property(nonatomic) BOOL automaticallyAdjustsShadowProjection API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0));//指定接收光的陰影不被計算的視點的最大距離。預設為100.0。@property(nonatomic) CGFloat maximumShadowDistance API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0));//當啟用時,只渲染陰影腳輪的背面。預設為沒有。@property(nonatomic) BOOL forcesBackFaceCasters API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0));//使用主渲染的樣本分布,以更好地適應陰影製作效果。預設為沒有。@property(nonatomic) BOOL sampleDistributedShadowMaps API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0));//指定將為接收光計算的不同陰影映射的數量。預設為1。最大的是4。@property(nonatomic) NSUInteger shadowCascadeCount API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0));//指定線上性分割(0)和對數分割(1)之間插值的一個因子。預設值為0.15。@property(nonatomic) CGFloat shadowCascadeSplittingFactor API_AVAILABLE(macos(10.13), ios(11.0), tvos(11.0), watchos(4.0));

 

iOS開發之SceneKit架構--SCNLight.h

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.