ThreeJs-06詳解燈光與陰影

Heymar-10發表於2024-12-10

一.gsap動畫庫

1.1 基本使用和原理

首先直接npm安裝然後匯入

比如讓一個物體,x軸時間為5s

GIF

旋轉同理

image-20241128214756914

動畫的速度曲線,可以在官網的文件找到

image-20241128215002275

1.2 控制動畫屬性與方法

當然這裡面也有一些方法,動畫完成,動畫開始等

image-20241128215200803

一些屬性

image-20241128215321286

GIF

也可實現停止動畫隨時,給到一個變數

image-20241128215435858

雙擊暫停以及恢復

image-20241128215547134

二.燈光與陰影詳解

新增環境光

這種光一般是用來增亮,他沒有陰影效果

image-20241128215713865

GIF

平行光:類似於太陽

預設在這個位置朝著原點打光

image-20241128215940076

image-20241128220146024

image-20241128220120320

image-20241128220133926

也可以改變平行光的照射點

image-20241128220257997

image-20241128220312060

建立陰影四部曲

image-20241128220442295

image-20241128220504137

誰產生陰影

image-20241128220531950

image-20241128220543681

image-20241128220550572

注意:物體可以投射陰影,也可以接受陰影,不只是要在平面上接受

image-20241128220636819

2.1 直線光與陰影詳細設定

移動球體z軸前後,出了一定範圍會被剪下掉

image-20241128225842782

平行光是有範圍的

image-20241128225911266

列印這個燈光,可以看到其範圍

image-20241128230152414

far是後面,near是前面

image-20241128230143933

image-20241128230224691

現在就比剛才更遠一點,到了10的邊緣才被擷取

image-20241128230246682

此時這個陰影是有鋸齒感的

image-20241128230406432

預設是512

image-20241128230425752

image-20241128230437585

2.2 聚光燈

target就是聚光燈打向什麼地方

image-20241202222227398

image-20241202222257316

設定好角度之後

image-20241202222452216

image-20241202222441442

如果想設定邊緣的光慢慢衰減

image-20241202222603605

image-20241202222556576

衰減的快慢設定

GIF

2.3點光源

聚光燈是往一個地方發散,點光源是四面八方

image-20241202223924686

image-20241202223934578

點光源也可以設定距離和衰減情況

image-20241202224159648

image-20241202224151140

三.透明度紋理和陰影

加入給一個物體貼上一個透明度紋理,黑色就是全透明,白色就是不透明

image-20241202224758219

此時透明度有了,但是陰影還是正常的

image-20241202224839208

image-20241202224905647

加上alphatest即可,此時表示大於0.5就是透明,小於0.5就是不透明

image-20241202225016165

image-20241202225037314

此時新的問題貼上貼圖後會有條紋的現象

這是由於燈光和陰影形成的一個問題

解決方法

設定燈光陰影的bias

image-20241202225211278

偏移量,讓陰影便宜一點點

GIF

四.大場景動態級聯陰影設定

新增一個相機輔助器把燈光加入進來

image-20241202225536814

可以看到物體在相機範圍內有陰影超過就沒有陰影

GIF

那如果實在一個很大的場景,比如把相機的陰影場景改的很大

image-20241202225741339

會發現陰影出現了鋸齒狀

image-20241202225813878

image-20241202225753220

那麼此時的解決思路就是,分模組分遠近來展示陰影

也就是級聯陰影

類似於這樣,近處的細節就比較細,遠處稍微模糊點,因為距離遠了也看不太清了

image-20241202230154511

匯入

image-20241202230235699

需要的引數,這些都是可以直接複製threejs上面這一個圖的官方例子

image-20241202230325297

然後建立級聯陰影例項

maxfar表示陰影最大到多遠,cascades多少個等級,mode是模式,parent當前級聯陰影的父級,mapsize級聯陰影的大小,lightdirection燈光的位置

image-20241202230427224

然後把所有需要設定陰影的材質都設定為級聯陰影

image-20241202230644039

然後需要一直更新渲染

image-20241202231032394

此時燈管也不再需要投射陰影了交給級聯來投射

image-20241202231311960

GIF

如果想設定燈光方向

image-20241202231438017

加上軟陰影實現一個更柔滑的效果

image-20241202231509943

image-20241202231517749

前面對於燈光陰影的設定也可以不要了

image-20241202231536114

相關文章