欧美日韩精品一区二区在线线,一级无码在线收看,精品国产高清91,久久精品欧美电影

# 燈光

燈光組件Light用于給場景提供照明,也是陰影的核心。相機組件一般被代理到燈光元素XRLight中使用,其派生自XRNode,對應(yīng)在xml中的標(biāo)簽為xr-light。

# 創(chuàng)建燈光

燈光元素的一個典型使用方式如下:

<xr-light type="ambient" color="1 1 1" intensity="0.1" />
<xr-light type="directional" rotation="40 170 0" color="1 1 1" intensity="0.2" />
<xr-light type="point" position="0 0 0" color="1 0 0" range="3" intensity="3" />
<xr-light type="spot" position="0.1 0 -0.1" color="0 0 1" range="12" intensity="10" rotation="0 120 0" inner-cone-angle="80" outer-cone-angle="90" />

這里寫了四個燈光,分別對應(yīng)于支持的四周燈光類型。框架針對一個場景共支持六個燈光,它們又被分成兩類——主光源和追加光源。

# 主光源

主光源包含兩部分——按照編寫順序第一個寫的環(huán)境光和平行光:

  1. 環(huán)境光:類型是ambient,支持顏色color和亮度intensity,直接影響物體的基礎(chǔ)顏色和亮度。
  2. 平行光:類型是directional,支持顏色color和亮度intensity,以及通過旋轉(zhuǎn)rotation決定的方向,為物體表面通過不同光照算法提供明暗。

主平行光同時還決定著這個場景的陰影計算,詳見陰影一節(jié)。

以上信息會在渲染時通過全局宏和uniforms傳入著色器,它們是:

類型 uniforms 說明
環(huán)境光 顏色和亮度u_ambientLightColorIns 是否開啟WX_USE_AMBIENT_LIGHT [r, g, b, ins]
平行光 顏色和亮度u_mainLightColorIns和方向u_mainLightDir 是否開啟WX_USE_MAIN_DIR_LIGHT [r, g, b, ins]/vec3

# 追加光源

在兩個主光源之后,場景還支持四個追加的光源,除了上面說到的平行光之外,還支持點光源和聚光燈:

  1. 點光源:支持顏色color和亮度intensity,以及position決定的位置和range決定的照亮范圍。
  2. 聚光燈:支持顏色color和亮度intensity,以及position決定的位置、rotation決定的方向、range決定的照亮范圍,和inner-cone-angleouter-cone-angle決定的錐角。

以上信息會在渲染時通過全局宏和uniforms傳入著色器,它們是:

類型 說明
開啟追加光源 WX_USE_ADD_LIGHTS bool
燈光數(shù)量 WX_ADD_LIGHTS_COUNT int
類型 uniforms 說明
燈光信息 u_addLightsInfo [type, range, innerConeAngle, outerConeAngle][4]
燈光位置 u_addLightsPos vec3[4]
燈光方向 u_addLightsDir vec3[4]
燈光顏色亮度 u_addLightsColorIns [r, g, b, ins][4]

# 陰影

在前面網(wǎng)格一章中我們提到過陰影,陰影是燈光和這二者的協(xié)作結(jié)果,只有主平行光能夠產(chǎn)生陰影,以如下場景為例:

<xr-mesh node-id="plane" position="0 -0.4 0" scale="5 0.2 5" geometry="cube"  uniforms="u_baseColorFactor:0.48 0.78 0.64 1" receive-shadow
/>
<xr-gltf model="test-gltf" cast-shadow/>
<xr-camera
  position="3 3 3" target="plane" 
/>
<xr-light type="directional" rotation="60 0 0" color="1 1 1" intensity="2.5" cast-shadow />

可見,我們給plane這個xr-mesh開啟了receive-shadow去接收陰影,然后開啟了xr-gltfcast-shadow來產(chǎn)生陰影,最后開啟了主光源的cast-shadow總開關(guān)允許燈光產(chǎn)生陰影。

當(dāng)然,在實際使用中會有一些需要關(guān)注的地方:

  1. 支持自己給自己投影,可以同時開啟產(chǎn)生和接收陰影。
  2. 可能需要視情況調(diào)整shadow-distance來避免陰影投影過大或者過小。
  3. 適當(dāng)調(diào)整shadow-bias來防止自陰影。

# 宏和uniforms

以下宏或者uniforms會被傳遞到著色器中:

類型 說明
開啟接受陰影 WX_RECEIVE_SHADOW bool

可以直接通過以下方法來獲取當(dāng)前物體陰影:

方法 說明
float shadowCalculation(vec3 posWorld) 傳入世界坐標(biāo),返回陰影強度