在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Panda3D游戲引擎和OpenGL著色語(yǔ)言來(lái)為3D游戲添加紋理,法線貼圖,泛光,環(huán)境遮擋

DPVg_AI_era ? 來(lái)源:lq ? 2019-05-15 09:03 ? 次閱讀

這篇教程是今日GitHub趨勢(shì)榜第一,一天便達(dá)到了1500星。主要介紹了通過(guò)使用Panda3D游戲引擎和OpenGL著色語(yǔ)言來(lái)為3D游戲添加紋理,法線貼圖,泛光,環(huán)境遮擋等等。教程內(nèi)容十分豐富,動(dòng)圖也非常生動(dòng)。

Shader,是運(yùn)行在GPU上的程序,中文稱(chēng)為著色器。它的主要用途是對(duì)三維物體進(jìn)行著色處理,對(duì)光與影進(jìn)行計(jì)算,以及控制紋理顏色的呈現(xiàn)等,最終,將游戲引擎中的幾何數(shù)據(jù)轉(zhuǎn)化為屏幕上的模型、場(chǎng)景以及特效。

吃雞、農(nóng)藥、戰(zhàn)地、塞爾達(dá)…都離不開(kāi)著色器,著色器被譽(yù)為照亮虛擬世界的"魔法"。 著色器還可以用來(lái)做后期處理,類(lèi)似PS。

著色程序是一整套編譯好并鏈接在一起的著色器的集合。著色器shader的編寫(xiě)需要使用著色語(yǔ)言GL Shader Language(GLSL),GLSL的語(yǔ)法與C語(yǔ)言很類(lèi)似。

著色器編程不光是對(duì)開(kāi)發(fā)技能的考驗(yàn),更是對(duì)程序員想象力的挑戰(zhàn),以至于有說(shuō)法稱(chēng)會(huì)寫(xiě)Shader的程序員是站在食物鏈頂端的人。想成為游戲開(kāi)發(fā)高手,著色器編程是必備技能。

有興趣在3D游戲中添加紋理,光照,陰影,法線貼圖,環(huán)境光遮蔽了嗎?好極了!今天新智元為大家?guī)?lái)一個(gè)Github項(xiàng)目,從零開(kāi)始教會(huì)大家進(jìn)行3D游戲著色。

以下一系列著色技術(shù),都是具有高可移植的技巧,無(wú)論是Godot還是Unity都將適用。通過(guò)這些技術(shù),你的游戲視覺(jué)效果將提升到新的高度。

對(duì)于著色器之間的粘合劑,作者選擇了神器Panda3D游戲引擎和OpenGL著色語(yǔ)言(GLSL)。

Panda3D是一個(gè)強(qiáng)大的渲染引擎。核心渲染模塊基于C++開(kāi)發(fā)。Panda3D提供了Python的腳本化實(shí)用接口

本項(xiàng)目code在以下環(huán)境下測(cè)試通過(guò)。

Linux manjaro 4.9.135-1-MANJARO

OpenGL renderer string: GeForce GTX 970/PCIe/SSE2

OpenGL version string: 4.6.0 NVIDIA 410.73

g++ (GCC) 8.2.1 20180831

Panda3D 1.10.1-1

本文只對(duì)該repo做一個(gè)大致介紹,具體代碼及講解請(qǐng)參閱項(xiàng)目地址:

https://github.com/lettier/3d-game-shaders-for-beginners.git

運(yùn)行示例代碼需要先build

如果你想運(yùn)行示例代碼,首先要先build。根據(jù)不同平臺(tái)安裝對(duì)應(yīng)版本的Panda3D。其次,Clone項(xiàng)目repo,進(jìn)入目錄,開(kāi)始編譯。

Linux:

g++ -c main.cxx -o 3d-game-shaders-for-beginners.o -std=gnu++11 -O2 -I/usr/include/python2.7/ -I/usr/include/panda3d/

編譯完成后執(zhí)行:

g++ 3d-game-shaders-for-beginners.o -o 3d-game-shaders-for-beginners -L/usr/lib/panda3d -lp3framework -lpanda -lpandafx -lpandaexpress -lp3dtoolconfig -lp3dtool -lp3pystub -lp3direct -lpthread

Mac:

clang++ -c main.cxx -o 3d-game-shaders-for-beginners.o -std=gnu++11 -g -O2 -I/usr/include/python2.7/ -I/Developer/Panda3D/include/

編譯完成后執(zhí)行:

clang++ 3d-game-shaders-for-beginners.o -o 3d-game-shaders-for-beginners -L/Developer/Panda3D/lib -lp3framework -lpanda -lpandafx -lpandaexpress -lp3dtoolconfig -lp3dtool -lp3pystub -lp3direct -lpthread坐標(biāo)系統(tǒng)

開(kāi)始插手著色器代碼之前,需要對(duì)3D物體的坐標(biāo)系統(tǒng)有所了解。和在立體幾何的坐標(biāo)系意義,繪制3D物體也是需要x、y、z三個(gè)坐標(biāo)軸的值。

將定義好的坐標(biāo)軸的值轉(zhuǎn)換為實(shí)際繪制的坐標(biāo),需要經(jīng)過(guò)五個(gè)坐標(biāo)系統(tǒng)的轉(zhuǎn)換。

模型空間

相對(duì)于原點(diǎn) (0,0,0) 而自定義的起始坐標(biāo)點(diǎn)。

世界空間

世界空間就是當(dāng)所有物體一起繪制、仍然相對(duì)于原點(diǎn)的、更大的一個(gè)坐標(biāo)系。可以防止模型出現(xiàn)扎堆兒情況。

觀察空間

將世界空間的坐標(biāo)轉(zhuǎn)化為攝像機(jī)的視角所觀察到的空間坐標(biāo)。

裁剪空間

根據(jù)我們的需要來(lái)裁剪一定范圍內(nèi)的物體,而在這個(gè)范圍之外的坐標(biāo)就會(huì)被忽略掉,實(shí)質(zhì)上還是進(jìn)行坐標(biāo)的操作。

屏幕空間

將坐標(biāo)投射到屏幕上。

渲染到紋理

渲染到紋理(Render To Texture, RTT)是現(xiàn)在很多特效里面都會(huì)用到的一項(xiàng)很基本的技術(shù),實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,也很重要。

渲染到紋理是為了實(shí)現(xiàn)一些特殊的效果,比如一個(gè)光滑的球體,它應(yīng)該是可以反射周?chē)h(huán)境的,這個(gè)時(shí)候就需要先渲染到紋理。

在此設(shè)置中,示例代碼執(zhí)行以下操作:

存儲(chǔ)幾何數(shù)據(jù)(如頂點(diǎn)位置或法線)供以后使用

存儲(chǔ)材料數(shù)據(jù)(如漫反射顏色)供以后使用

UV映射各種紋理(漫反射,普通,陰影等)

計(jì)算環(huán)境光,漫反射光,鏡面光和發(fā)光光

呈現(xiàn)霧

紋理和光照(Lighting)

紋理涉及使用UV坐標(biāo)將一些顏色或一些其他類(lèi)型的矢量映射到片段。 U和V的范圍從0到1。每個(gè)頂點(diǎn)都獲得一個(gè)UV坐標(biāo),并在頂點(diǎn)著色器中輸出。

完成lighting涉及到計(jì)算和組合環(huán)境光、漫反射光、鏡面光和發(fā)射光方面。示例代碼使用Phong lighting。Diffuse代碼:

// ... float diffuseIntensity = max(dot(normal, unitLightDirection), 0.0); if (diffuseIntensity > 0) { // ... } // ...

法線貼圖

法線貼圖(英語(yǔ):Normal mapping)是一種模擬凹凸處光照效果的技術(shù),是凸凹貼圖的一種實(shí)現(xiàn)。法線貼圖可以在不添加多邊形的前提下,為模型添加細(xì)節(jié)。常見(jiàn)的使用場(chǎng)景是為低多邊形模型改善外觀、添加細(xì)節(jié),此時(shí)的法線貼圖一般根據(jù)高多邊形模型或高度貼圖生成。

頂點(diǎn)代碼:

// ...uniform mat3 p3d_NormalMatrix;// ...in vec3 p3d_Normal;// ...in vec3 p3d_Binormal;in vec3 p3d_Tangent; // ... vertexNormal = normalize(p3d_NormalMatrix * p3d_Normal); binormal = normalize(p3d_NormalMatrix * p3d_Binormal); tangent = normalize(p3d_NormalMatrix * p3d_Tangent); // ...

描邊

描邊著色器需要一個(gè)輸入紋理,用于檢測(cè)邊緣中的顏色。此輸入紋理的候選者包括材質(zhì)的漫反射顏色、漫反射貼圖的顏色、頂點(diǎn)法線,甚至法線貼圖的顏色。

uniform struct { vec4 diffuse;} p3d_Material;out vec4 fragColor;void main() { vec3 diffuseColor = p3d_Material.diffuse.rgb; fragColor = vec4(diffuseColor, 1);}

霧化、全屏泛光

霧(fog,或在Blender中稱(chēng)為mist)將霧氣效果添加到場(chǎng)景中,提供神秘感和柔化。

// ...uniform struct p3d_FogParameters { vec4 color ; float start ; float end ; } p3d_Fog;// ...

Panda3D提供了一個(gè)很好的數(shù)據(jù)結(jié)構(gòu),可以保存所有fog參數(shù),你也可以手動(dòng)將其傳遞給著色器。

Bloom有時(shí)候也叫Glow效果,中文一般叫做“全屏泛光”,可以使得發(fā)光物體看起來(lái)更逼真。

屏幕空間環(huán)境光遮蔽(SSAO)

環(huán)境光遮蔽(AO,ambient occlusion),大致上指的是幾何物體的拐角處,因?yàn)槭芄獠蝗妫ū幌噜彽拿鎿豕猓诒危瑢?dǎo)致變暗。屏幕環(huán)境光遮蔽技術(shù)使用了屏幕空間場(chǎng)景的深度而不是真實(shí)的幾何體數(shù)據(jù)來(lái)確定遮蔽量。這一做法相對(duì)于真正的環(huán)境光遮蔽不但速度快,而且還能獲得很好的效果,使得它成為近似實(shí)時(shí)環(huán)境光遮蔽的標(biāo)準(zhǔn)。

下面動(dòng)圖展示了用AO和沒(méi)用AO的區(qū)別。用了AO,物體拐角的地方會(huì)變暗看起來(lái)就更逼真。

景深

景深(英語(yǔ):Depth of field, DOF)景深是指相機(jī)對(duì)焦點(diǎn)前后相對(duì)清晰的成像范圍。在光學(xué)中,尤其是錄影或是攝影,是一個(gè)描述在空間中,可以清楚成像的距離范圍。

雖然透鏡只能夠?qū)⒐饩鄣侥骋还潭ǖ木嚯x,遠(yuǎn)離此點(diǎn)則會(huì)逐漸模糊,但是在某一段特定的距離內(nèi),影像模糊的程度是肉眼無(wú)法察覺(jué)的,這段距離稱(chēng)之為景深。

景深淺則模糊范圍大,虛化效果明顯。反之則虛化效果減弱。焦外代碼示例:

// ... vec4 result = vec4(0); for (int i = 0; i < size2; ++i) { x = size - xCount; y = yCount - size; result += texture ( blurTexture , texCoord + vec2(x * separation, y * separation) ); xCount -= 1; if (xCount < countMin) { xCount = countMax; yCount -= 1; } } result = result / size2; // ...色調(diào)分離和像素化

色調(diào)分離是指一幅圖像原本是由緊緊相鄰的漸變色階構(gòu)成,被數(shù)種突然的顏色轉(zhuǎn)變所代替。這一種突然的轉(zhuǎn)變,亦稱(chēng)作“跳階”。色調(diào)分離其實(shí)就是用來(lái)制造分色效果。

將3D游戲像素化使他看起來(lái)很有趣,并可以節(jié)省時(shí)間,不必手動(dòng)創(chuàng)建所有的像素藝術(shù)。和色調(diào)分離相結(jié)合,可以打造真正的復(fù)古外觀。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • OpenGL
    +關(guān)注

    關(guān)注

    1

    文章

    85

    瀏覽量

    29251
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3615

    瀏覽量

    93732
  • 3D游戲
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    10061

原文標(biāo)題:Github霸榜:從零開(kāi)始學(xué)3D著色器編程

文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    蘋(píng)果手機(jī)(IPHONE) OpenGL ES 3D 游戲開(kāi)發(fā)培訓(xùn)班

    在線聊天工程,用 Quartz開(kāi)發(fā)過(guò)大型繪圖程序,精通OpenGL ES 3D游戲開(kāi)發(fā),作為主計(jì)師開(kāi)發(fā)過(guò)跨平臺(tái)GUI類(lèi)庫(kù)、基于MAC的圖形設(shè)計(jì)引擎等。 ◆【李老師】8年手機(jī)開(kāi)發(fā)經(jīng)驗(yàn),是
    發(fā)表于 05-16 14:50

    Android 最值得推薦的8款開(kāi)源游戲引擎

    環(huán)境標(biāo)準(zhǔn)OpenGL,AndroidOpenGLES), 以Java語(yǔ)言基礎(chǔ)的,擁有功能強(qiáng)
    發(fā)表于 07-30 12:24

    3D游戲運(yùn)行時(shí)無(wú)法重新創(chuàng)建NvFBC對(duì)象?

    當(dāng)我在虛擬PC(win7)中運(yùn)行3D游戲時(shí),3D游戲將改變桌面分辨率,因此我釋放Nvfbc對(duì)象并嘗試重新創(chuàng)建它,但status.bCanCreateNow將為false,直到
    發(fā)表于 09-14 10:37

    分享[親測(cè)]最新3dsmax2021簡(jiǎn)中文永久使用版

    dmax2021于近日發(fā)布啦,3dmax2021新版本還是增加不少的功能,比如新的OSL明暗器,新的 Substance2 貼圖,加權(quán)法線修改器等等,可以幫助3D設(shè)計(jì)人員大幅度的提高工
    發(fā)表于 03-17 15:45

    iMX8QM安卓平臺(tái)支持3D游戲嗎?

    的錯(cuò)誤日志 1. iMX8QM安卓平臺(tái)支持3D游戲嗎?2. 如果是,是否需要額外添加一些東西才能啟用 3D 游戲
    發(fā)表于 04-04 07:42

    實(shí)時(shí)3D藝術(shù)最佳實(shí)踐-材料和著色器用戶(hù)指南

    材質(zhì)和著色器決定3D對(duì)象在屏幕上的顯示方式,了解它們做什么,以及如何優(yōu)化它們。 本指南涵蓋了多種不同的材質(zhì)和著色器優(yōu)化,可以幫助您的游戲 跑步效率更高,看起來(lái)更好。 本指南也以Un
    發(fā)表于 08-02 06:11

    實(shí)時(shí)3D藝術(shù)最佳實(shí)踐-紋理技術(shù)解讀

    紋理貼圖獲取2D曲面圖像并將其映射到3D多邊形上。 本指南涵蓋了幾種紋理優(yōu)化,可以幫助您的游戲運(yùn)
    發(fā)表于 08-02 06:12

    Arm OpenGL ES 3.0開(kāi)發(fā)者指南

    紋理。 ?GLSL ES著色語(yǔ)言的新版本,完全支持整數(shù)和32位浮點(diǎn)運(yùn)算。 ?增強(qiáng)的紋理功能,包括: ? 保證支持浮點(diǎn)紋理。 ?
    發(fā)表于 08-08 06:03

    長(zhǎng)時(shí)間玩3D游戲影響NB壽命?

    長(zhǎng)時(shí)間玩3D游戲影響NB壽命?  dothan核心的賽揚(yáng)cpu長(zhǎng)時(shí)間玩3d游戲是不是也會(huì)很"燙手"呢?這樣是否會(huì)大大影響本本的壽命呢?
    發(fā)表于 01-23 15:02 ?764次閱讀

    樂(lè)和游戲推出結(jié)合游戲3D 電子賀卡

    樂(lè)和游戲推出結(jié)合游戲3D 電子賀卡     香港2010年3月10日電 /美通社亞洲/ -- 樂(lè)和游戲
    發(fā)表于 03-10 21:00 ?793次閱讀

    3D圖像引擎,3D圖像引擎原理

    3D圖像引擎,3D圖像引擎原理 產(chǎn)生的背景和定義 隨著計(jì)算機(jī)軟、硬件突飛猛進(jìn)的發(fā)展,計(jì)算機(jī)圖形學(xué)在各個(gè)行業(yè)的應(yīng)用也得
    發(fā)表于 03-26 15:54 ?1465次閱讀

    索尼:3D立體游戲將是未來(lái)主宰

    索尼:3D立體游戲將是未來(lái)主宰 據(jù)報(bào)道,索尼3D研發(fā)團(tuán)隊(duì)高級(jí)主管Simon Benson近日在接受采訪時(shí)表示,3D立體游戲將是左右索尼未來(lái)
    發(fā)表于 04-12 17:35 ?526次閱讀

    Unity 3D引擎制作的憤怒的小鳥(niǎo)游戲

    Unity 3D引擎制作的憤怒的小鳥(niǎo)游戲
    發(fā)表于 05-12 09:37 ?2次下載

    HarmonyOS 3D渲染引擎介紹

    隨著3D技術(shù)的應(yīng)用普及,越來(lái)越多的場(chǎng)景都能看到3D的身影,比如充電動(dòng)效、3D壁紙、游戲等等,給用戶(hù)帶來(lái)了更有趣、更豐富的體驗(yàn)。要滿(mǎn)足用戶(hù)的3D
    的頭像 發(fā)表于 12-23 09:49 ?4373次閱讀
    HarmonyOS <b class='flag-5'>3D</b>渲染<b class='flag-5'>引擎</b>介紹

    HarmonyOS如何玩 3d 游戲

    總有網(wǎng)友期待 HarmonyOS 什么時(shí)候能出 3d 游戲,今天就教你寫(xiě)一個(gè)能玩的 3d 游戲
    的頭像 發(fā)表于 01-04 14:23 ?2304次閱讀
    主站蜘蛛池模板: 色西西| 狠狠干网站| 亚洲成人综合在线| 欧美性free免费| 午夜视频免费在线播放| 日本人xxxxxxxx6969| 亚洲免费人成在线视频观看| 久久婷婷国产综合精品| 人人干人人干| 成年人三级视频| 久久亚洲成人| 久久99国产亚洲高清观看首页| 国产精品久久久久乳精品爆| 女人的天堂网站| 你懂的手机在线观看| 国产精品久久久久久吹潮| 久久免费精品国产72精品剧情| 男人资源| 伊人亚洲| xxxx欧美69免费| h国产在线观看| 欧美色频| 九九热在线免费观看| 五月婷婷深深爱| 一本高清在线视频| 天天色成人网| 狠狠尻| 欧美18在线| 女人张开腿给男人桶爽免费| 欧美色图影院| 午夜免费福利片| 午夜视频国产| 最好看的2019中文字幕免费高清 | 亚洲第一香蕉视频| 亚洲国产福利精品一区二区| 久久美女性网| 欧美乱乱| 美女流白浆网站| 亚洲 另类色区 欧美日韩| 全部在线播放免费毛片| 九九碰|