999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于unity實現的半蘭伯特光照模型

2020-07-04 02:14:28彭人杰段華瓊
電腦知識與技術 2020年14期

彭人杰 段華瓊

摘要:該文介紹了計算機圖形學中基本的光照效果,講解了基本的蘭伯特光照模型與其改進方案半蘭伯特光照模型。給出了實際運用在uniIy游戲開發中的場景光照解決方案。

關鍵詞:unity;計算機圖形學;光照模型

中圖分類號:TP393 文獻標識碼:A

文章編號:1009-3044(2020)14-01 12-02

游戲是計算機等電子產品設備普及以來產生的一種娛樂方式,隨著硬件技術的進步,人們對游戲體驗的要求也越來越高,對游戲的畫面要求也大大提升。一款游戲的畫面質量,很大程度上取決于其貼圖紋理和場景光照的效果。本文通過介紹基本的光照模型,并運用到實際開發流程中所要做出的改進模型,以此實現提升玩家游玩體驗的光照效果。

1基本的蘭伯特光照模型

蘭伯特光照模型,于1760年由JohannHeinrich Lambea提出的,在其著作Photometria中,蘭伯特光照模型定義了一個理想的無光澤表面或漫反射表面,無論觀察視角如何改變,這個表面的亮度永遠不變。也就是說,該光照模型是符合各向同性的。這個模型是由表面法線向量和光線向量所決定的。計算二者夾角的余弦值得到物體表面反射光線的強度。公式如下:

該光照模型以表面法線和光源方向做向量點乘運算,但是,這兩個向量的夾角有可能為鈍角,比如,光線照不到的地方,那么該點乘運算結果則是負值,這樣的結果就會造成不符合現實的場景出現在我們的游戲中,比如物體會被后面射來的光照亮,破壞了游戲場景的逼真度。為此,我們對向量點乘的運算結果進行一個截取,使其計算結果為非負值。如代碼中的max函數,取0和點乘結果的最大值,若點乘為負,值取0。圖1為著色器代碼在uniIv引擎中運行的結果。

2改進后的半蘭伯特光照模型

將上述的蘭伯特定律在unity中以shader文件進行實現后,我們就得到了一個簡單的基于蘭伯特定律的漫反射光照模型,如圖2所示。但是,在這些模型的背面,是完全黑的,沒有任何的明暗變化,這就導致了該光照模型在光照無法到達的區域看起來宛如一個平面一樣,模型沒有任何細節,游戲畫面顯得突兀,死板。這種光照要是運用到游戲中,會大幅度消減玩家的游玩體驗。

對于上述的畫面問題,人們提出了一些解決方案,例如間接光照。在現實生活中,即使有物體沒有被光源直接照射,人的肉眼還是可以看見它。這就是因為光的反射造成的間接光照。在現在的計算機圖形學中,可以通過環境光系數來統一代表間接光,或者是采用更加復雜,對硬件要求更高,畫面更加寫實的光線追蹤技術來渲染間接光。

但在某些情況下,比如在早期的游戲制作中,當時的計算機技術遠遠沒有現在的成熟,沒有條件實現間接光照。就催生出一種基于蘭伯特定理的改進模型,即半蘭伯特光照模型,該模型既保證了蘭伯特模型計算出來的光照結果大于0,又整體提升了亮度,使非直接受光面不是單純的置為黑色。這里運用了一個在圖形學領域經常有的變換,區間轉化——將另一個區間上的問題,轉化為已知公式的區間上去,并借助已知的公式或函數性質,使問題得到解決。在建立蘭伯特模型的時候,我們就將值范圍從(-1,1)化為(0,1)防止物體的背光面被從后面射來的光線照亮。那么蘭伯特光照模型的視覺改進型——半蘭伯特光照模型,也是如此。它的本質就是一個區間轉化,將值范圍縮小,使其背光面不要太黑。

半蘭伯特光照模型的公式如下:

將半蘭伯特應用于unity中,我們就得到了圖3,可以看到,此時的背光面視角已經改善了不少。雖然這種視覺加強技術并不一定符合現實物理規律,但它可以被應用于不少的實際開發中,市場上不少二次元風格的手游會應用到這種節約資源的視覺光照技術。

3基于unity實現半蘭伯特光照的過程

3.1編程接口

我們這里采用unity shader這個unity內置的編程接口來實現我們所需要的光照模型,shader,意為著色器。著色器是一種渲染圖形的一門技術,也是渲染流水線的一個環節。

3.2渲染流水線基礎

渲染流水線也稱為渲染管線,是顯示芯片內部處理圖像信號相互獨立的并行處理單元。它將儲存在計算機內部的圖像數據轉化為肉眼可見的圖形,渲染流水線的工作原理與生活中的生產流水線相符,其效率都是由最耗費時間的環節決定。一般情況下有三個階段:應用階段,幾何階段和光柵化階段。應用階段的任務是輸出渲染圖元(即完成渲染工作所需要的幾何信息);幾何階段將應用階段得到的圖形頂點坐標從模型空間轉換為屏幕空間,再將數據傳遞給光柵化階段;光柵化階段決定了各個像素的繪制位置等。

3.3 CPU與渲染流水線

渲染流水線中的每一步輸入信息都是由上一步處理后得到的,而渲染流水線的輸人則是由CPU完成的。通過CPU將數據從硬盤加載到系統內存中,之后從內存加載到顯存。CPU還會將一個命令發送給GPU并指令GPU通過頂點數據和渲染狀態完成各個網格的渲染工作,輸出最終像素。這個命令是由CPU調用圖形編程接口完成的(也稱為DrawCall)。

3.4 GPU處理渲染流水線

GPU以流水線的形式高效地完成了渲染工作,如圖4。

其中,頂點著色器,曲面細分著色器,幾何著色器和片元著色器是可以由開發者編程控制的(除了頂點著色器,其余都是可選的)。頂點著色器主要實現頂點的空間變換和逐頂點光照,所有的頂點都要調用一次頂點著色器,該著色器最重要的一個功能是,將頂點從模型空間變換至齊次裁剪空間中,方便后續的計算。曲面細分著色器和幾何著色器分別負責細分圖元和圖元著色工作。片元著色器(DirectX中被稱為“像素著色器”)將得到的位于齊次裁剪坐標下的頂點數據進行計算,計算出每個像素的最終顏色和深度以及丟棄無需的片元。該著色器可以多次訪問紋理內存,并以任意方式結合所讀取的值。在這次對于半蘭伯特光照的實現中,我們就要重點完成頂點著色器和片元著色器的代碼編寫。

3.5利用unity的ShaderLab實現著色器編程

Unity中的所有著色器文件都是使用名為ShaderLab的聲明性語言來編寫。在文件中,嵌套大括號語法聲明了描述著色器的各種內容,比如使用哪種混合模式,是否使用前向光照,在材質面板顯示哪些屬性等等。這種語言并不只是著色器代碼,而是包含了一個游戲對象的材質所需包含的全部信息。

Unity引擎會根據運行的平臺來把我們編寫的uniIv shader編譯成真正的代碼和著色器文件。我們僅需要完成ShaderLab的編程設計。

3.6 CG代碼實現

Unity shader我們采用ShaderLab編寫,而里面的頂點著色器和片元著色器,則使用CG,HLSL,GLSL這類著色語言編寫,因為CG和HLSL十分類似,所以在unity里,CG和HLSL是等價的,實現代碼如下:

4結束語

本文論述了以unitv引擎為基礎實現的半蘭伯特光照模型,通過借助對基本的蘭伯特定律推斷出來的漫反射光照模型進行區間轉化,將值范圍修改至符合人體視覺感受的光照效果范圍,并且GPu無需太大的消耗。該光照實現方案可運用于Cel-shading、Toon-Shading和漸變紋理中。

主站蜘蛛池模板: 免费毛片视频| 久久精品人人做人人综合试看| 好吊日免费视频| 国模在线视频一区二区三区| 国产日产欧美精品| 婷婷综合在线观看丁香| 亚洲AV无码久久精品色欲| 亚洲成人免费在线| 园内精品自拍视频在线播放| 这里只有精品在线| 国产福利观看| 狂欢视频在线观看不卡| 91免费观看视频| 国内精品久久人妻无码大片高| 亚洲国产看片基地久久1024| 欧美色图第一页| 国产va在线观看免费| 永久在线播放| 亚洲AV无码乱码在线观看代蜜桃 | 免费三A级毛片视频| 国产杨幂丝袜av在线播放| 91最新精品视频发布页| 国产成人a在线观看视频| 国产原创演绎剧情有字幕的| 台湾AV国片精品女同性| 伊人久综合| 婷婷色一二三区波多野衣| 视频二区欧美| 又爽又大又光又色的午夜视频| 亚洲手机在线| 亚洲性一区| 国产午夜看片| 亚洲男人的天堂网| а∨天堂一区中文字幕| 人妻丝袜无码视频| 欧美人在线一区二区三区| 亚洲成a人在线播放www| 国产女人水多毛片18| 多人乱p欧美在线观看| 亚洲欧洲自拍拍偷午夜色| 国产97视频在线观看| 国产理论最新国产精品视频| 人人澡人人爽欧美一区| 天堂成人在线视频| 久久精品一品道久久精品| 国产在线精品网址你懂的| 69视频国产| 女人18毛片水真多国产| 国产伦片中文免费观看| 中文字幕伦视频| 国产欧美日韩视频一区二区三区| 91国内在线视频| 免费人成又黄又爽的视频网站| 国产青青草视频| 激情综合激情| 亚洲激情99| 国产精品伦视频观看免费| 成人午夜久久| 影音先锋丝袜制服| 欧美爱爱网| 欧美午夜在线观看| 久久黄色一级视频| 91最新精品视频发布页| 欧美中文字幕一区| 91久久国产成人免费观看| 毛片视频网| 日韩无码黄色| 91免费国产高清观看| 在线精品亚洲国产| 国产成人精品第一区二区| 国产午夜不卡| 91娇喘视频| 亚洲欧美日韩成人高清在线一区| 国产色爱av资源综合区| 国产办公室秘书无码精品| 中国一级特黄视频| 成人亚洲国产| 欧洲欧美人成免费全部视频| 国产网站一区二区三区| 国产夜色视频| 亚洲三级片在线看| 亚洲最新网址|