锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
緲昏瘧:瀹嬫檽瀹?br>
浠嬬粛錛?/span>
銆銆浼犵粺璁$畻鏈哄浘褰㈠簲鐢?-鐗瑰埆鏄殑搴旂敤鐨勯渶瑕佷竴涓疄鏃訛紝浜や簰鐨勬柟娉曟潵鐜板疄--閫氳繃澶勭悊涓涓彂閫佸埌鏄懼崱鐨勬暟鎹殑鏈鏈夋晥鐨勫浘褰㈡暟鎹瓙闆嗙殑鏂規硶鏉ュ喅瀹氬浘褰㈡暟鎹殑鏄劇ず錛岃屼笉鏄紶閫佸叏閮ㄧ殑鏁版嵁錛屽洓鍙夋爲錛屽叓鍙夋爲錛孊sp鏍戯紝鑳岄潰鍓斿嚭錛宲vs闆嗗悎寰堝鍏朵粬鏂規硶閮芥槸閽堝榪欎釜鐩殑鑰屾彁鍑虹殑銆?br>
銆銆嫻佽鐨勮綆楁満鍥懼艦鍗¤繎浜涘勾鍦ㄥ鐞嗚兘鍔涘拰澶勭悊鏂規硶涓婄▼鎸囨暟澧為暱錛屽綋鍓嶇殑鐘舵佹彮紺哄嚭寰堝鏃跺欏簲璇ユ洿濂界殑鍜屽揩閫熺殑鎵懼埌涓涓ソ鐨勬暟鎹泦鎶婂畠浠佸埌鏄懼崱閲岋紝鑰屼笉鏄妸綺懼姏鏀懼湪鍔姏鐨勬壘鍒頒竴涓渶濂界殑鏁版嵁闆嗐傝繖鏍風殑鏁版嵁闆嗘槸涓涓繎浼肩殑鏈濂界殑鏁版嵁闆嗗茍涓旇兘緇忓父鍙戠幇瀹冮兘鏈夊崄鍒嗘湁鏁堢殑綆楁硶錛屽洜姝ゆ墜澶翠笂鐨勪換鍔″洜姝ゅ氨鍙樻垚浜嗗洖欏懼凡緇忓瓨鍦ㄧ殑鎶鏈拰綆楁硶騫朵笖灝濊瘯鎵懼埌鏈蹇殑閫夋嫨錛岃繖瀵逛簬鎵懼埌鏈濂界殑瑙e喅闂鐨勬柟娉曞茍涓嶆槸浠涔堣礋鎷呫?br>
涓銆佸洓鍙夋爲錛?/span>
銆銆鍥涘弶鏍戜綔涓烘暟鎹鐞嗚〃杈炬妧鏈殑涓涓ソ鏂規硶宸茬粡鏈夊緢澶氬勾浜嗭紝鐗瑰埆鏄湴褰㈡覆鏌撳紩鎿庨兘鑳藉埄鐢ㄤ粬寰堟湁鏁堢殑浣滀負鍓斿嚭鏈哄埗錛屽墿浣欑殑榪欎釜绔犺妭灝嗕細緇欏嚭涓涓皬鏁伴噺鐨勮鏄庡洓鍙夋爲騫朵笖浼犵粺鐨勶紝楂樺眰鐨勬柟娉曚嬌鐢ㄥ洓鍙夋爲錛屽湪鎻忚堪涓涓揩閫熺殑鏂規硶涔嬪墠銆?br>
鍥涘弶鏍戞暟鎹粨鏋勶細
鍥涘弶鏍戣鎻忚堪閫氳繃瀵瑰簲姣忎釜鐖惰妭鐐逛紶閫掑洓涓瓙鑺傜偣錛屽湪涓涓湴褰㈡覆鏌撲笂涓嬫枃閲岋紝鏍硅妭鐐瑰皢浼氳〃杈句負榪欎釜鍥寸粫鍦板艦鐨勬鏂瑰艦鍖哄煙闆嗭紝鑷妭鐐硅〃紺轟負“宸︿笂”錛?#8220;鍙充笂”錛?#8220;宸︿笅”鍜?#8220;鍙充笅”璞¢檺錛岃繖浜涜薄闄愮敱鏍硅妭鐐圭粍鎴愬茍涓旀瘡涓涓兘鏄敱鍥涗釜瀛楄妭鐐歸掑綊鐨勫畾涔変笅闈㈢殑鎻忚堪灝嗕細璇存槑榪欎簺姒傚康涓涓洓鍏冩暟鐨勬暟鎹粨鏋勫茍涓嶈礋璐?涓嬮潰鐨勪吉鐮佹紨紺轟簡榪欎釜鍥涘弶鏍戠殑鑺傜偣錛?
x,y : float;
end;
PQuad = pointer to TQuadNode;
TQuad = record
p1,p2,p3,p4 : TPosition; // corners
c1,c2,c3,c4 : PQuadNode; // children
end;
涓涓畝鍗曠殑閫掑綊鍒濆鍖栦竴涓繁搴︿負max_depth鐨勫洓鍙夋爲濡備笅錛?br>
var
tmp : PQuad;
begin
inc(lev);
if lev > max_depth then return(nil);
new(tmp);
...initialize tmp node with corner data
w := w / 2;
tmp^.c1 := InitQuad(x - w, y - w, w, lev);
tmp^.c2 := InitQuad(x - w, y + w, w, lev);
tmp^.c3 := InitQuad(x + w, y + w, w, lev);
tmp^.c4 := InitQuad(x + w, y - w, w, lev);
return(tmp);
end;
鍩轟簬鍥涘弶鏍戠殑鑳岄潰鍓旈櫎
銆銆鍦ㄥ緢澶氬簲鐢ㄩ噷涓昏鐨勫洓鍙夋爲鍑芥暟鏄彁渚涗竴涓湁鏁堢殑鐨勮鎴綋鏁版嵁鍓旈櫎,涓嬮潰鐨勫熀浜庤鐐圭殑楂樺眰瑙嗘埅浣撳墧闄ゅ凡緇忓浜嗭細
begin
case Clip_Quad_against_View(q) of
inside : DrawQuad(q);
outside : ; // ignore quad
else begin
...CullQuad children of q
end;
end;
end;
Clip_Quad_against_View 鏄痗ullquad鐨勫叧閿嚱鏁幫紝騫朵笖褰撶劧榪愯鐨勫嚱鏁板拰鏂規硶鏉ヨВ鍐寵繖涓棶棰樻槸鍚︽槸涓涓洓鍏冿紙鎴栬呭杈瑰艦錛変氦鍙変簬榪欎釜瑙嗚浣擄紝閫氳繃浜ゅ弶瑙嗚浣撻噾瀛楀浣滀負騫抽潰闆嗗悎媯嫻嬪鉤闈綔涓轟竴濂楀厜綰匡紝鐒跺悗榪炵畫嫻嬭瘯鍑犱綍浣撶殑鍏夌嚎鎬庝箞鍜屽彲瑙嗕綋騫抽潰鐩鎬氦鐨勶紝鍏夌嚎鐩鎬氦嫻嬭瘯鐨勬柟紼嬪湪寰堝錛擄絼鍑犱綍鐨勪功涓婇兘鍙互鎵懼埌錛岃繖閲屼笉鍋氶噸澶嶃?br>
浜屻侀夋嫨鍩轟簬鍥涘弶鏍戠殑瑙嗙偣鍓旈櫎錛?/span>
涓婇潰鎻忚堪鐨勬柟娉曚竴鑸儏鍐典笅浼氬緱鍑烘紜殑緇撴灉錛屼絾鏄粬娌℃湁緇欒繖涓畝鍗曠殑闈欐佺殑鍥涘弶鏍戞彁渚涗換浣曚笢瑗匡紝濂藉鐨勪紭鍖栧彲浠ュ簲鐢ㄥ埌鍥涘弶鏍戠殑鍓旈櫎榪囩▼錛屼笅闈㈢殑涓や釜闃舵浜х敓浜嗕竴涓緢蹇殑鍜屽緢鏈夋晥鐨勫熀浜庡洓鍏冩暟鐨勫墧闄わ細
銆銆*鍩轟簬鐐圭殑鍓旈櫎錛氫竴涓畬鍏ㄧ殑鍓旈櫎璁$畻錛屼粬閫氳繃璁板綍鐩稿叧鐨勫洓涓鐨勫彲瑙嗙偣銆?br>
銆銆寰堝榪欐牱鐨勬儏鍐靛彲浠ヨ鑰冭檻錛屼緥濡傦細濡傛灉涓涓崟鐙殑鐐瑰湪瑙嗚浣撳唴鍙戠幇錛岄偅涔堣繖涓潡灝卞湪瑙嗚浣撳唴錛屽鏋滄墍鏈夌殑鐐歸兘鍦ㄨ瑙佷綋鐨勪竴闈紝閭d箞榪欎釜鍧楀氨涓嶅湪瑙嗚浣撳唴錛庝竴涓暟閲忕殑鍙兘鎬у氨瀛樺湪錛屽茍涓旈渶瑕侀氳繃涓涓畬鍏ㄧ殑璁$畻錛屼絾鏄笂闈㈢粰鍑虹殑涓ょ鎯呭喌寰楀嚭浜嗕竴涓厖瓚崇殑鍚彂鎬ф潵鎺ュ彈錛屼涪寮冩垨鑰呭皢鏉ラ噸鏂板畾涔変竴涓綔鍦ㄧ殑鍧椼?br>
銆銆*錛綇锝嶏綇锝夛綒锝侊綌锝夛綇锝庯細鏄竴縐嶅偍瀛樿綆楃粨鏋滅殑鎶鏈茍涓旇繕闇瑕佺浉鍚岀殑璁$畻鏃舵煡鎵懼偍瀛樼殑緇撴灉銆?br>
銆銆鍥涘厓鏁頒綔涓轟竴涓潤鎬佺粨鏋勶紝榪欑鐗規畩瑙掔殑鐐圭粡甯擱兘鏄浉鍚岀殑錛屽彟澶栵紝寰堝鍧楃殑瑙掓槸鍥涗釜鍧楀叡浜殑錛屽茍涓斿湪寰幆浼犻掑洓鍏冩暟鐨勮涓閬嶅張涓閬嶇殑錛岄氳繃鍐沖畾涓涓鐨勭浉鍏充綅緗叧鑱旇繖涓彲瑙嗕綋鍜屾柟渚跨殑鍌ㄥ瓨榪欎釜鍥涘厓鏁扮殑鐨勮綆楃粨鏋溿?br>
銆銆涓嬮潰鐨勪吉浠g爜澹版槑浜嗚繖涓畻娉曪紝瀵逛簬涓涓洓鍏冩暟妯法鐨勫尯鍩熸槸(0,0)鍒?256,256);
Memoized : array[0..256,0..256] of byte;
posx,posy : float; // origin of FOW
Lx,Ly,Lz : float; // normal of left FOV plane
Rx,Ry,Rz : float; // normal of right FOV plane
function CheckPos(x, y : int) : int;
// checks position x,y against FOV planes, memoize
// Results: bit 1 (inside), bit 2 (left), bit 3 (right)
var
res : int;
begin
res := 0;
if (x-posx)*Lx + (y-posy)*Ly > 0 then res := 2;
if (x-posx)*Rx + (y-posy)*Ry > 0 then res := res or 4;
if res = 0 then res := 1;
Memoized[x,y] := res;
return res;
end;
function TestQuad(x, y, w : int) : int;
// quad-midpoint: (x,y)
// quad-width: 2w
// test quad against FOV
// Results: 0 (out), 1 (partially in), 2 (completely in), -1 (unknown)
var
m1,m2,m3,m4 : int;
tmp : int;
begin
m1 := Memoized[x - w, y + w];
if m1 = 0 then CheckPos(x - w, y + w);
m2 := Memoized[x + w, y + w];
if m2 = 0 then CheckPos(x + w, y + w);
m3 := Memoized[x + w, y - w];
if m3 = 0 then CheckPos(x + w, y - w);
m4 := Memoized[x - w, y - w];
if m4 = 0 then CheckPos(x - w, y - w);
tmp := m1 and m2 and m3 and m4;
if tmp = 1 then
return 2; // quad completely inside FOV
if m1 or m2 or m3 or m4 = 1 then
return 1; // quad partially inside FOV
if tmp => 0 then
return 0; // quad completely outside FOV
return -1; // else quad state undetermined
end;
涓婇潰鐨勫嚱鏁板簲璇ヨ娓呴櫎騫朵笖鍙婃棭鐨勯渶瑕佹暣鏁扮殑鐨勫洓鍏冨潡紼嬪簭
begin
Clear_Memoized_Array_to_Zero;
CullQuad(Quadtree_Root);
end;
procedure CullQuad(q : PQuad);
begin
case Test(quadmidpoints and half-width) of
2 : ...handle complete quad
1 : ...handle partial quad
0 : ; // ignore quad
else begin
...CullQuad children of q
end;
end;
end;
涓夈佸彟澶栭渶瑕佽冭檻鐨勶細
寰堝鍦ㄤ唬鐮侀噷鍜屼竴鑸殑綆楁硶閲岄兘闇瑕佽鑰冭檻鐨勬槸錛?br>
銆銆*鍥涘弶鏍戠畻娉曠殑鐗堟湰閲岃〃鐜板嚭鐨勫彧鍓旈櫎宸?鍙籌紝涓嶆槸榪戣鍓潰錛屼笉鏄繙瑁佸噺闈㈡垨鑰呬笂涓嬮兘娌℃湁鑰冭檻錛屽彟澶栧彧鏈夊鉤闈㈣瑙掋傚洜姝よ繖涓畻娉曞彧瑕嗙洊浜嗗洓鍙夋爲鐨勭殑楂樺害鍓旈櫎鍜岃瑙侀潰娌跨潃榪欎釜鍥涘弶鏍戠殑闈€?br>
銆銆鎴戜滑鎵╁睍榪欎簺浠g爜娌跨潃3d鐨勫洓鍙夋爲錛屽鍔犲錛氬簲鐢ㄥ洓鍙夋爲鐨勭Щ鍑虹畻娉?浠諱綍鍙鐨勪綅緗拰鏂瑰悜灝嗕細姝g‘鐨勮繘琛岀殑涓滆タ銆?br>
銆銆*鍙﹀寰堝闄勫姞鐨勭偣錛岃瑙佷綋闇瑕佽冭檻鎵ц鐨勬瘮濡傦細濡傛灉涓や釜鐐瑰湪瑙嗚浣撶殑鍓嶉潰騫朵笖瀵硅繖FOV鐨勪竴涓潰錛岃繖涓潡閮ㄥ垎鍦ㄨ繖涓瑙佷綋閲岋紝瀵逛簬寰堝鐨勭畻娉曪紝榪欐牱鐨勫叧鍗℃弧瓚寵繖涓粨鏋溿?br>
銆銆*涓昏鍏沖績榪欎釜綆楁硶鐨勯渶瑕佹槸鍦ㄨ蹇嗛渶姹傞噷錛屽敖綆′竴鑸殑娌夋蹈璁板繂瀵逛簬姣忎釜鍙兘鐨勫潡鏌愪簺鐐歸渶瑕佷竴涓檮鍔犵殑瀛楄妭銆傚洜姝ゅ鏋滄鏂瑰艦鐨勫尯鍩熸湁n涓棿闅旓紝姣忎釜闈㈤兘閮介渶瑕乶涓瓧鑺傛潵鍌ㄥ瓨錛岄氳繃鍏稿瀷鐨勫彧鏈変竴涓鐗囩殑鍐呭瓨琚竴涓粰瀹氱殑閬嶅巻璁塊棶錛岃繖涓閮ㄥ垎灝辮璁塊棶浜嗗緢澶氭銆?br>
銆銆榪欑瘒鏂囩珷鎬葷粨浜嗙畻娉曠殑琛ㄨ揪錛屾垜鍙戠幇榪欐槸涓涓湁鐢ㄧН鏋佺殑綆楁硶錛屽鏋滀綘鏌ヨ浜嗙浉鍏崇殑綆楁硶騫朵笖鏈夋劅瑙﹀彲浠ュ啓淇$粰鎴戝挩璇€?
]]>
瀹為檯娓告垙鍒朵綔褰撲腑,鐙箟鐨勭伅鍏夊彧鏄寚紼嬪簭瀹炴椂鏍規嵁鐏厜褰卞搷鐨勯《鐐硅壊鍜屽姩鎬侀槾褰?浣嗗疄闄呭簲鐢ㄥ綋涓?褰卞搷鐜╁鏁翠綋鎰熻鐨勫厜褰辨晥鏋?涔熷氨鏄箍涔変笂鐨勫厜褰辨晥鏋滃寘鍚殑鑼冨洿瑕佹洿鍔犲箍娉涖?br>紼嬪簭鐨勫嵆鏃跺厜褰?shader鐨勫畾鍒跺浐鐒跺鍏夊獎鏁堟灉鑷沖叧閲嶈,緹庢湳鍒朵綔鐨刲ightmap,normalmap,VertexColor涔冭嚦Glow閮藉彲浠ユ瀯鎴愪竴鑸帺瀹惰鐭ヤ笂鐨勭伅鍏夋晥鏋溿?br>鍗蟲槸璇?鍦ㄦ父鎴忓埗浣滃簲璇ヤ互娓告垙鐜╁鐨勬劅瑙変負鍩哄噯鏁翠綋鐨勮緗厜褰辯殑鏁堟灉,鑰屽茍闈炰粎浠ユ妧鏈墜孌典綔涓哄垎鐣?瀵逛簬娓告垙鍒朵綔鏉ヨ,緇煎悎紼嬪簭緹庢湳鐨勫縐嶈〃鐜版墜孌?鏈緇堝憟鐜扮粰鐜╁鐨勫厜褰辯殑鎰熻,鎵嶆槸娓告垙鍒朵綔褰撲腑鐨勭伅鍏夈?br>
浜屻佸熀鏈伅鍏夌郴緇熶粙緇嶅強浣跨敤鏂規硶
浠庣敾闈㈡覆鏌撴潵璇?鏃犺涓鑸綉娓歌繕鏄涓栦唬娓告垙,榪愮畻鐨勮鍒欐瀯寤烘槸澶т綋鐩鎬技鐨?鎴戜滑鍙互閫氳繃鍒嗘瀽榪欎釜鏋勬灦寰楀嚭鍏朵腑鍒朵綔鍚勭鍏夊獎鏁堟灉鐨勫彲鑳芥?涓嬪浘鏄瘮杈冨父瑙勭殑鍚勭鍥劇礌緇忚繃濡備綍鐨勮繍綆楄揪鎴愪簡鏈緇堢敾闈㈢殑pipeline銆?br>
鍦ㄨ繖鏍風殑pipeline涓?瀵規渶緇堝厜褰辨湁褰卞搷鐨勭幆鑺?br>
Dark Map
Dark Map 涔熻縐頒負 Lightmap錛岃繖鏄垜浠洰鍓嶅父浣跨敤鐨勬柟娉曚箣涓銆?br>榪欎釜閫氶亾涓鑸斁緗産ake榪囩殑鐏厜璐村浘,鎴栬匒mbient Occlusion Map, 甯哥敤鐨勬柟寮忔槸璧嬩簣涓涓彟澶栫殑UV ,榪欎竴寮犲緢灝忕殑Dark Map灝卞彲浠ュ湪娌℃湁鐏厜鐨勬儏鍐典笅鑾峰緱鑹ソ鐨勫厜褰辨晥鏋?寰堝寮曟搸褰撲腑鏄彲浠ョ敱鐏厜鑷姩鐢熸垚lightmap鐨?瀹冪殑鏁堟灉涓鑸敤鍦ㄩ潤鎬佺墿浣撲笂銆?br>
Project lights
Project lights灝辨槸涓鑸垜浠墍璇寸殑紜歡鐏厜,鐢變簬鏁堟灉鏄嵆鏃惰繍綆?鏈変竴瀹氱殑紜歡瑕佹眰,鎺ㄨ崘涓鑸笉瑕佽秴榪?鐩?鍚﹀垯瀵規晥鐜囦細鏈変竴瀹氱殑褰卞搷.闄ら潪瀹屽叏蹇呰錛屼笉寤鴻浣跨敤榪欑鏂規硶銆?br>Project lights鐨勮繍鐢ㄤ竴鑸槸涓変釜騫寵鍏夋潵鏋勭瓚涓涓暣浣撶殑澶╁厜鐜,(鍙﹀ Ambient light鍦ㄨ繖涓繃紼嬩腑涔熸湁閲嶈鐨勬剰涔?,鐢變簬Project lights鏄璧勬簮姣旇緝鑰楄垂鐨勯儴鍒?搴旇鐢辯▼搴忓敖閲忎紭鍖栥?br>
Base map
Base map灝辨槸diffuse map灝辨槸鎴戜滑甯歌鐨勶細璐村浘銆?br>鍦ㄨ創鍥句笂鎴戜滑鍙互鍦ㄥ浐鏈夎壊涔嬩笂榪涜鍏夊拰闃村獎鐨勭粯鍒?浠庤繖涓搴︽潵璇翠篃鏄獎鍝嶅厜褰辨晥鏋滅殑閲嶈鏂瑰紡,榪欑鍋氭硶鍑犱箮涓嶄細鍦ㄥ厜褰辮〃鐜頒笂鑰楄垂浠諱綍緋葷粺璧勬簮銆傛晥鏋滀富瑕佷緷璧栫編鏈漢鍛樼粯鍒惰創鍥劇殑姘村鉤銆?br>鍚屾椂錛岃繖涔熸槸鍦ㄧ編鏈漢鍛樿兘鍔涜鍙殑鏉′歡涓嬶紝瀹屾垚澶ч儴鍒嗗厜褰辯殑鏈浣蟲柟寮忋?br>
Project Shadow
Project Shadow鍜宲roject light涓鑸湁鐩稿悓鐨勫厜婧愮偣浜х敓,浣滅敤鏄敓鎴愰槾褰?鐢變簬project Shadow鏄姩鎬佺殑闃村獎,涓鑸敤浜庤〃鐜版湁鍔ㄧ敾鐨勭墿浣?瀹為檯榪愮敤涓璓roject Shadow鍜宭ightmap寰寰浜掕ˉ浣跨敤,鍒嗗埆瑙e喅闈欐佸拰鍔ㄧ敾鐗╀綋鐨勯槾褰便傚悓鏍鳳紝榪欑鏂規硶闈炲父鑰楄垂緋葷粺璧勬簮錛岄櫎闈炲畬鍏ㄥ繀瑕侊紝涓嶅緩璁嬌鐢ㄨ繖縐嶆柟娉曘?br>
Normal Map
Normal Map鏄涓栦唬娓告垙甯哥敤鐨勬妧鏈?浠栬В鍐充簡鏈鴻兘瀵歸潰鏁伴檺鍒剁殑鎯呭喌涓嬪浣曚綋鐜扮墿浣撶粏鑺傜殑闂,閫氳繃RGB涓夎壊浠f浛XYX涓変釜Normal杞村悜鍊肩殑鏂瑰紡鑾峰緱浜嗘洿澶氱墿浣撶粏鑺傘?br>Noraml Map鏈虹悊鐨勪富瑕佹槸鍦ㄥ悇縐嶇伅鍏変綅緗細瀵圭墿浣撶殑diffuse specular鍜宺eflect榪涜鎵洸鏉ヨ揪鍒拌繎浼肩湡瀹?浣嗘槸浠栦笉浼氬base map浜х敓褰卞搷,鏃㈡槸璇磏ormal map褰卞搷鐨勪粎浠呮槸鏉愯川鏈韓,鑰岄潪璐村浘銆?br>鐢變簬Normal Map鐨勮繖涓鐩茬偣,prallax map(鎴杁isplacemap)鏂瑰紡琚垱閫犲嚭鏉ュ譏琛ormal map涓嶈兘鎵洸basemap鐨勭己闄?瀹為檯搴旂敤涓?甯稿父鍦ㄨ繍鐢∟ormal Map涔嬪悗閰嶅悎prallax map鏉ヨ揪鍒版洿濂芥晥鏋溿?br>
Vertex Color
Material of vertex map鏄父鎴忎腑閲嶈鐨勮繍鐢?欏剁偣鑹插彲浠ラ傜敤鐨勮寖鍥村緢澶?閫忔槑鏌斾綋絳夐兘鍙繍鐢?浣嗘槸鏈涓昏鐨勫簲鐢ㄥ湪鑹插僵涓?閫氳繃鍒峰彇欏剁偣鑹插彲浠ユ柟渚胯繀閫熺殑鏀瑰彉鐗╀綋鐨勮壊璋?瀵圭郴緇熻祫婧愮殑瑕佹眰涔熻緝浣?浣嗘槸浠栦笌鐏厜鑹插僵鏈変竴瀹氬啿紿?閫氬父鎯呭喌涓嬬伅鍏夎壊褰╀笌欏剁偣鑹蹭笉浼氱敤浜庡悓涓鐗╀綋浠ラ伩鍏嶅啿紿?欏剁偣鑹插彲浠ユ墜鍔ㄧ粯鍒舵垨鑰呯伅鍏夌儤鍩?鍦ㄩ潰鏁拌緝浣庣殑鐗╀綋涓婅兘鍙戞尌鏇村鐨勫獎鍝嶃?br>欏剁偣鑹叉槸瀵規父鎴忓厜褰辨渶浣崇殑瑙e喅鏂規硶涔嬩竴錛屼篃鏄渶甯哥敤鐨勮В鍐蟲柟娉曘?br>
Gloss map
Gloss map鍗蟲垜浠墍璇撮珮鍏夎創鍥?涓鑸伅鍏夊鐗╀綋楂樺厜鏄熀浜庨《鐐硅壊榪涜褰卞搷,濡傝鑹叉瘺鍙?鐨。絳夌墿浣撹儲鏀垮緢闅捐〃鐜板嚭璐ㄦ劅,濡傛灉榪愮敤Gloss map鍗沖彲鍊熷姪璐村浘鐨勮倢鐞嗙晫瀹氶珮鍏夌殑澶栧艦,涔熸槸鍙互閫氳繃杈冨皯璧勬簮鍗犵敤杈懼埌褰卞搷鍏夊獎鏁堟灉鐨勬墜孌?鍙﹀寰堥噸瑕佷竴鐐?Gloss map涓庢垜浠竴鑸父鐢?D杞歡涓殑鐣屽畾涓嶅悓,騫墮潪浠呬粎褰卞搷楂樺厜,瀵瑰弽灝勮創鍥句篃鏈夊獎鍝嶃?br>
Gloss map鍏跺疄騫朵笉涓瀹氶渶瑕佹槸鐏板害鍥?鐢ㄥ僵鑹茶創鍥句竴鏍峰彲浠ヤ嬌鐢?
Environment Map
Environment Map鍙互鐞嗚В涓烘垜浠竴鑸墍璋撶殑鍙嶅皠璐村浘,鏈夌悆褰㈠拰鐩掍綋絳夊縐嶆柟寮?琛ㄧ幇閲戝睘鐗╀綋鏃跺父鐢?鍙互閫氳繃 gloss map榪涜闄愬埗銆?br>Enivironment Map鍦╩ax涓嬬殑璐村浘妲戒負Reflection slot,榛樿鐨勮創鍥炬斁緗繘鍘諱細鐢ㄧ悆褰㈠潗鏍囨柟寮忚繘琛屽弽灝?濡傛灉瀵硅創鍥炬湁鏇撮珮瑕佹眰,涔熶嬌鐢╞ox璐村浘,鍏紶璐村浘緇勬垚鍙嶅皠鐩?濡傛灉鏄痙ds box璐村浘鍙互鐩存帴璋冪敤,浣嗘槸鍧愭爣浼氭湁涓嶅悓銆?br>
MixGlow Map
Glow Map涓鑸敤浠ヤ綋鐜板悇縐嶅彂鍏夌墿浣?濡傜伅錛岀伀鐒扮瓑絳夛紝鏄瘮杈冨父鐢ㄧ殑鐗規晥綾籧hannel錛屽湪Glow 璐村浘鏍忛噷闈㈣創涓婃墍鐢╣low map 錛屼細鍜屽叾浠栬創鍥劇殑鏈緇堟晥鏋滀駭鐢熺浉涔樻晥鏋溿?br>
Post Effects
闄ゅ幓涓婅堪鏁堟灉錛屽湪Final鏁堟灉杈撳嚭涔嬪悗錛屾湁鏃舵垜浠細閫氳繃鍚勭post effect鏁堟灉瀵圭敾闈㈠姞寮猴紝濡侴low絳夛紝瀵圭敾闈㈠厜褰辨劅瑙変篃浼氭湁宸ㄥぇ鐨勫獎鍝嶃?br>
Channel Mix
鐏厜緋葷粺鍒嗙駭鏂規硶鍙婂埗浣滆鐐?/strong>
鍦ㄥ疄闄呮父鎴忓埗浣滃綋涓?涓鑸笉浼氬皢鎵鏈夌殑channel閮藉紑鍚?涓鏂歸潰鍏跺疄瑕佸仛鍑轟竴嬈懼嚭鑹茬殑娓告垙鐢婚潰騫墮潪鍙栧喅浜庝嬌鐢ㄥ灝戞柊鎶鏈?浠や竴鏂歸潰涔熻鑰冭檻紼嬪簭鐨勮礋杞姐?br>鏍規嵁娓告垙鐨勭綾誨拰闇姹傞夋嫨姝g‘鐨勬柟娉曞悎鐞嗙殑鑺傜渷璧勬簮鑳藉璁╂父鎴忔嫢鏈夋洿濂界殑鏁堟灉銆?br>
鎶鏈槸鎵嬫錛屼笉鏄瘔姹?/strong>
銆奃oom III銆?铏界劧鍦ㄥ綋鏃舵槸鎶鏈粷瀵歸鍏堢殑娓告垙,浣嗘槸緹庢湳榪囧害鐨勪緷璧栧厛榪涚殑鎶鏈?瀵艱嚧鍦ㄧ編鏈鏍間笂鐨勫垏鍏ヤ笉澶?鏈簲璇ユ洿浼樼鐨勬父鎴?鏈兘鏇翠笂涓姝ャ?br>
涓庝箣鐩稿,鍑犲勾鍚庢帹鍑虹殑銆奓ost Plant銆嬪垯鎴愬姛鎵懼洖浜嗘父鎴忕編鏈渶鏈川鐨勪笢瑗匡紝浣挎妧鏈垚涓轟竴縐嶆墜孌點?br>
鍝簺鍦版柟錛熻浣跨敤鍝簺鎵嬫?
鎴戜滑棣栧厛瑕佹槑紜紝鍦ㄤ竴涓垚鐔熺殑緹庢湳鍥㈤槦涓傚浜庝竴嬈炬父鎴忕敾闈腑鐨勫悇縐嶅厜褰憋紝鏄浣曞幓琛ㄧ幇錛屼互杈懼埌鐢婚潰鏁堟灉鍜岀郴緇熻礋鎷呮渶浣崇殑緇撳悎鐐圭殑錛?br>鎴戜滑闇瑕佹壘鍒幫細鏈浼樺寲鐨勬墜孌點?br>
From http://www.wz-online.net/web2/home/Detail.asp?id=47&FromType=1
]]>
涓涓ā鍨嬶紙鏈変竴澶у爢欏剁偣璺熺儲寮曟暟鎹粍鎴愶級鎻忕敾鐨勬柟寮忥紝璺熸潗璐ㄦ湁寰堝ぇ鐨勫叧緋匯?br>Gamebryo鎻愪緵浜嗕竴涓緢寮哄ぇ鐨勬潗璐ㄧ郴緇熴?br>
棣栧厛gamebryo浣跨敤浜嗕竴涓嚜瀹氫箟鐨凱ipeline錛岃繖涓篃鏄湪涔嬪墠鐨勬枃绔犱腑浠嬬粛榪囩殑銆傚叾瀹炶繖涓狿ipeline灝辨槸澶у鏈甯哥敤鐨勪竴浜汼hader銆侴B甯垜浠葷粨鍑烘潵浜嗭紝騫跺仛鎴愪簡涓涓爣鍑嗙殑鏉愯川銆傝繖鍦℅B閲屽彨StandardMaterial銆?br>
鏍囧噯鏉愯川璺烶ipeline鏄浉瀵瑰簲鐨勩備絾鏄爣鍑嗘潗璐ㄧ殑瀹炵幇鏄潪甯稿洶闅劇殑錛屽彲浠ユ煡闃匩iStandartMaterial錛屽ぇ綰︽湁5000澶氳浠g爜銆侴B浼氶鍏堟煡鎵句竴涓婼hader鏂囦歡澶逛笅鐨勯偅浜汼hader銆?br>榪欎簺Shader鐨勬枃浠跺悕鏄敱涓瀵規暟瀛?瀛楁瘝緇勬垚鐨勩傝繖浜涙枃浠墮兘鏄笉閲嶅鐨勶紝鍥犱負GB鍐呴儴閫氳繃Hash鐮佸緱鍑鴻繖浜涘箋傚鏋滃湪Shader鏂囦歡澶逛笅娌℃湁錛岄偅涔圙B浼氭妸褰撳墠鐨勬覆鏌撴柟寮忚褰曞埌榪欎釜Shader涓幓錛屼綔涓虹紦瀛樸?br>
褰撶劧浣犱篃鍙互鏋勫緩鑷繁鐨凪aterial緋葷粺錛屾瘮濡侴B鐨凬iCommonMaterial閲屼篃緇欏嚭浜嗕竴浜涙瀯寤鴻嚜宸辨潗璐ㄧ郴緇熺殑渚嬪瓙錛屼笉榪囪繖鏄潪甯稿鏉傦紝鍩烘湰鎬濇兂閮芥槸闇瑕佺淮鎶や竴涓猄hader鏍戙?br>
涓嶈繃鑷繁鍐橲hader鏄潪甯告柟渚跨殑錛屼綘鍙互鐢≧enderMonkey鎴栬匰haderFX錛屾妸鍋氬ソ鐨?.fx鏂囦歡鏀懼埌Shader鏂囦歡澶逛腑錛孧AX鍐嶆鎵撳紑鐨勬椂鍊欏氨浼氭壘鍒拌繖浜汼hader銆傝緹庡伐浣跨敤璧鋒潵闈炲父鐨勬柟渚褲?br>

GameBryo鎻愪緵浜嗕竴澶熀鏈殑妯℃澘瀹瑰櫒綾伙紝榪欎簺瀹瑰櫒鍦ㄦ暣涓簱鍐呬嬌鐢ㄣ?/p>
Lists
NiTPointerList瀵硅薄鍙互鍖呭惈鍜岀鐞嗘寚閽堬紝鏅鴻兘鎸囬拡錛屼互鍙婂叾浠栦換浣曞ぇ灝忓皬浜庣瓑浜庢寚閽堢殑鍏冪礌錛岃閾捐〃鍙互鏈夋晥鐨勬彃鍏ュ拰鍒犻櫎鎵鏈夊厓绱狅紝浠ュ強姝e悜閬嶅巻鍜屽弽鍚戦亶鍘嗘墍鏈夊厓绱狅紝鍚屾牱鍙互閫氳繃緇欏畾鍊兼煡鎵懼厓绱犵殑瀹炰綋鍜屾墍鍦ㄤ綅緗紝NiTPointerList鐨勫厓绱犵殑鍐呭瓨鏄粠涓涓叡浜唴瀛樹腑鍒嗛厤鐨勶紝浠庤屾彁楂樼被鐨勬墽琛岄熷害鍜屽唴瀛樻晥鐜囷紝濡傛灉閾捐〃鍏冪礌澶т簬鎸囬拡錛岀▼搴忓彲浠ヤ嬌鐢∟iTObjectList.
Array
NiTArray瀵硅薄瀹炵幇鍕掑嚑涔庡彲浠ュ寘鍚墍鏈夊璞$殑鍔ㄦ佹暟緇勶紝璇ユ暟緇勫彲浠ョ緝鏀撅紝騫朵笖鍙互鍘嬬緝(閫氳繃杞Щ鍏冪礌鏉ョЩ闄ょ┖絀洪棿)銆傚唴緗被鍨?char*, float, int絳?浣跨敤NiTPrimitiveArray銆侼iMemObject媧劇敓鍑虹殑綾誨瀷浣跨敤NiTobjectArray銆傛敞鎰廚iTArray鐨勫厓绱犱笂闄愪負65535錛涘鏋滃ぇ浜庤闄愬埗錛屼嬌鐢∟iTLargeArray媧劇敓鍑虹殑綾伙紝姣斿NiTLargePrimitiveArray鎴朜iTLargeObjectArray銆?/font>
Map
NiTPointMap瀵硅薄瀹炵幇鍕掑搱甯岃〃鐨勫姛鑳斤紝鍏佽浠諱綍綾誨瀷鐨勯敭鍊兼潵褰卞皠鍒版寚閽堬紝鏅鴻兘鎸囬拡錛屼互鍙婂叾浠栦換浣曞ぇ灝忓皬浜庣瓑浜庢寚閽堢殑鍏冪礌錛屽茍鑳藉揩閫熺殑鍌ㄥ瓨鍜屾煡鎵鵑敭鍊煎錛屼笉榪囦笉鑳戒嬌鐢ㄥ瓧絎︿覆閿搱甯岃〃錛岃孨iTStringPointerMap瀵硅薄鏄笓涓烘璁捐鐨勶紝NiTPointMap鍜孨iTStringPointerMap鐨勫厓绱犲唴瀛樹篃鏄粠涓涓叡浜唴瀛樹腑鍒嗛厤鐨勶紝浠庤屾彁楂樻墽琛岄熷害鍜屽唴瀛樻晥鐜囷紝濡傛灉map鍏冪礌澶т簬鎸囬拡錛岀▼搴忓彲浠ヤ嬌鐢∟iTMap鍜孨iTStringMap
StringMap
NiTStringMap鍜孨iTStringPointerMap瀵硅薄鐨勫嚱鏁板拰NiTMap鍜孨iTPointerMap椋庢牸綾諱技錛屼絾鏄厑璁稿瓧絎︿覆浣滀負閿紝騫朵笖閫氳繃瀛楃涓叉瘮杈冩潵榪涜閿暎鍒?/font>
FixedStringMap
NiTFixedStringMap瀵硅薄鍑芥暟鍜孨iTMap瀵硅薄椋庢牸鐩鎬技錛屼絾鏄厑璁窷iFixedString瀵硅薄浣滀負閿?/font>
Queue
NiTQueue瀹炵幇鍕掑熀鏈墍鏈夌被鍨嬪璞$殑鍏堣繘鍏堝嚭闃熷垪錛屼絾涓嶆彁渚涙櫤鑳芥寚閽堬紝闇瑕佹敞鎰忛摼琛ㄥ彲浠ュ綋鍋氶槦鍒楁潵浣跨敤
Set
NiTSet瀹炵幇浜嗗熀鏈墍鏈夌被鍨嬬殑鏃犲簭闆嗗悎錛屼篃娌℃彁渚涙櫤鑳芥寚閽堬紝鍐呯疆綾誨瀷(char*, float, int絳?浣跨敤NiTPrimitiveSet銆侼iMemObject媧劇敓鍑虹殑綾誨瀷浣跨敤NiTobjectSet錛屾櫤鑳芥寚閽堝垯浣跨敤NiTObject鎴栬匩iTPrimitivePtrSet錛岃繖灝嗘紜殑澶勭悊寮曠敤璁℃暟銆?/font>
Pool
NiTPool瀹炵幇浜嗗皬鍨嬪璞$殑姹狅紝浣垮緱紼嬪簭鑳介氳繃涓涓睜鏉ュ垎閰嶅皬鍨嬪璞★紝騫惰兘閲嶅浣跨敤錛岃屼笉鏄崟鐙殑鍘誨垎閰嶅拰閲婃斁涓涓皬鍨嬪璞?/font>
涓涓▼搴忎細鍦ㄩ渶瑕佺殑鏃跺欐敼鍙樹竴涓妭鐐圭殑杞崲錛岃綆楄鑺傜偣鐨勬椂闂磋漿鎹紝浠ュ強璇ヨ妭鐐瑰瓙鑺傜偣鐨勫叾浠栬漿鎹㈠皢琚歡榪燂紝鐩村埌搴旂敤紼嬪簭璋冪敤渚嬭鐨剈pdate銆?/p>
update鏄珮鏁堜嬌鐢ㄦ繁搴︿紭鍏堟潵閬嶅巻瀛愬浘璁$畻涓栫晫杞崲鍜屼笘鐣屽寘鍥寸悆錛屼粠鑰屾渶澶ч檺搴︾殑鍑忓皯鑺傜偣鐨勮闂紝褰撳悜涓嬮掑綊鏃訛紝杞崲琚洿鏂幫紝鍖呮嫭鎵鏈夌殑鑷妭鐐癸紝褰撶煩闃墊洿鏂板悗錛屼笘鐣屽寘鍥寸悆閫氳繃閫掑綊璋冪敤榪斿洖
鎬諱箣錛岃漿鎹㈠湪閫掑綊涓鏇存柊錛岃屽寘鍥寸悆鍦ㄩ掑綊榪斿洖鏃跺緱鍒?/p>
閫氬父澶у鏁扮殑瀵硅薄閮戒笉浼氱Щ鍔ㄧ殑錛屾墍鏈夊彧鏇存柊鍙檺浜庡皬閮ㄥ垎鍙互縐誨姩鐨勫璞°傚湪鍦烘櫙鍥劇殑鏁版嵁澶勭悊鍒濆鍖栦腑錛屽綋搴旂敤紼嬪簭浣跨敤鍒板満鏅浘鍓嶏紝鑷沖皯瑕佸鍦烘櫙鍥劇殑鏍硅妭鐐硅繘琛屼竴嬈′緥琛寀pdate錛岃繖鏍蜂繚璇佹墍鏈夎妭鐐圭殑涓栫晫淇℃伅鍙婃湰鍦頒俊鎭兘鏄渶鏂扮殑銆?/p>
鍦ㄥ簲鐢ㄧ▼搴忓撫鍒板撫鐨勮繍琛屼腑錛屽綋絎﹀悎涓嬮潰浠諱綍涓鏉℃椂錛屽簲鐢ㄧ▼搴忓繀欏昏皟鐢ㄥ璞?#8220;O”鐨剈pdate銆?/p>
·O琚粦瀹氬埌鐖朵翰鑺傜偣鎴栬呬粠鐖朵翰鑺傜偣瑙i櫎緇戝畾
·O緇戝畾浜嗕竴涓柊瀛愯妭鐐規垨鑰呰В闄や簡涓涓瓙鑺傜偣鐨勭粦瀹?/p>
·O浠諱綍涓涓漿鎹㈣鏀瑰彉
娉ㄦ剰涓涓嬶紝璋冪敤褰撳墠鍙戠埗浜茶妭鐐規垨鑰呬換浣曠鍏堣妭鐐圭殑update鍙互浠f浛褰撳墠鑺傜偣update鐨勮皟鐢ㄣ備緥濡傦紝濡傛灉瀵硅薄A緇戝畾浜嗗瓙鑺傜偣B鍜孋錛屽彧闇瑕佽皟鐢ˋ鐨剈pdate灝卞浜嗐傛病鏈夊繀瑕佽皟鐢ㄤ笁涓璞$殑update錛屽簲鐢ㄧ▼搴忎細浠ユ壒澶勭悊鐨勬柟寮忔洿鏂般?/p>
渚嬪錛屽綋搴旀壙闇瑕佹敼鍙樹簡涓涓椿鍔ㄨ鑹茬殑鎵鏈夌殑鍏寵妭鐭╅樀錛屼粬搴旇鎺ㄨ繜update鐩村埌鎵鏈夌殑鏀瑰彉閮藉畬鎴愶紝騫朵笖鍙渶瑕佽皟鐢ㄤ竴嬈¤鑹叉牴鑺傜偣鐨剈pdate銆?/p>
浣嗘槸錛屾敞鎰弖pdate灝介噺鍦ㄥ満鏅浘鐨勬洿涓嬪眰璋冪敤錛屽鏋滀竴涓満鏅浘姣忓撫鍙湁涓涓彾瀛愯鏀瑰彉錛岄偅涔堣皟鐢ㄦ牴鑺傜偣鐨剈pdate灝卞お榪囧垎浜嗭紝榪欏皢闄嶄綆鎬ц兘銆?/p>
GameBryo ---- 緗戞牸鏁版嵁鍏變韓
涓轟簡涓栫晫涓璞″彧闇瑕佸皯閲忕殑欏剁偣錛屼竴媯墊爲鍙互鐢ㄦ潵浠h〃鍦烘櫙鍥撅紝姣忎釜瀵硅薄琚崟鐙〃鐜頒負鏍戜腑鐨勮妭鐐廣備絾鏄紝鍦ㄧ粷澶у鏁板満鏅浘涓紝浼氬嬈″嚭鐜頒竴涓渶瑕佸ぇ閲忓唴瀛樻潵瀛樺偍鐨勫鏉傚璞★紝緇濆ぇ澶氭暟鐨勫唴瀛樻槸娑堣楀湪綰圭悊鍜岄《鐐規暟鎹笂錛屾瘮濡傜汗鐞嗗潗鏍囧拰娉曠嚎銆?/font>
濡傛灉涓涓簲鐢ㄧ▼搴忛渶瑕佸浠借繖鏍蜂竴涓璞★紝鏄湁鍙兘閫氳繃鍏變韓鐨凬iDataStream鏉ュ垎浜ā鍨嬬┖闂寸殑鍑犱綍淇℃伅錛岄鑹詫紝綰圭悊鍜屽叾浠栭鑹層傛崲鍙ヨ瘽璇達紝鑻ュ共緗戞牸瀵硅薄鍙兘鍒嗕韓NiDataStream瀵硅薄錛屽湪榪欑鎯呭喌涓嬶紝鍦烘櫙鍥炬槸鏈夊悜闈炲驚鐜浘錛岃屼笉鏄竴媯墊爲銆?/font>
鍦ㄥ嚑浣曟暟鎹叡浜殑鎯呭喌涓嬶紝鍙剁綉鏍煎璞″叡浜玁iDataStream瀵硅薄鐨勬ā鍨嬬┖闂寸綉鏍箋備絾鏄?涓や釜妯″瀷鏁版嵁鐨勫疄渚嬫槸鍦ㄤ笘鐣岀殑涓嶅悓浣嶇疆,鍥犱負浠栦滑浠h〃鐨勫涓綉鏍煎璞?騫朵笖姣忎釜鍓湰鑷繁鍗曠嫭鐨勮漿鎹€?/font>
榪欎簺綆$悊鏄湪搴旂敤紼嬪簭鐨勫唴閮ㄩ忔槑澶勭悊鐨勨斺斿簲鐢ㄧ▼搴忓彧闇瑕佸緩绔嬩袱涓綉鏍煎璞′嬌鐢ㄥ悓涓涓狽iDataStream瀵硅薄銆傜綉鏍煎璞$敋鑷寵姣斾竴濂楁渶灝忕殑緗戞牸鏁版嵁灝忕殑澶氾紝鍥犱負緗戞牸瀵硅薄涓嶅儚鏁版嵁嫻侊紝涓嶅瓨鍦ㄦ瘡涓《鐐圭殑鏁版嵁
涓嬮潰鐨勫浘璞℃槸涓涓吀鍨嬬殑鎯呭喌錛?/font>

(涓や釜緗戞牸瀵硅薄浣跨敤鍚屼竴涓狽iDataStream)
涓や釜鍙剁綉鏍煎璞″垎浜竴涓疆鑳嶯iDataStream瀵硅薄鐨勯《鐐逛綅緗拰娉曠嚎銆備竴涓綉鏍煎璞″搴斿埌鑷杞︾殑鍓嶈疆錛屽彟涓涓搴斿埌鑷杞︾殑鍚庤疆銆侼iDataStream瀵硅薄鑷韓瀛樺偍鐨勭綉鏍奸《鐐圭殑浣嶇疆鍜屾硶綰胯鍏變韓錛屼袱涓綉鏍煎璞¢兘淇濆瓨琛ㄧ幇鑷繁緗戞牸鐨勮漿鎹€?/font>
娉ㄦ剰浠ヤ笅錛孏amebryo涓嶄負浠諱綍綾誨瀷鐨凬iAVObject鎻愪緵澶氱埗浜茬殑鍔熻兘銆傜粦瀹氫竴涓凡緇忔嫢鏈夌埗鑺傜偣鐨勫璞錛屼細瀵艱嚧C鑷姩鑴辯鍘熸潵鐨勭埗鑺傜偣
Gamebryo閫氳繃涓濂楃浉浜掔嫭绔嬬殑娓叉煋鎬ц川涓烘瘡涓兘娓叉煋鐨勫彾瀛愬璞″畾涔変簡娓叉煋灞炴э紝姣忎竴涓覆鏌撳睘鎬ч兘涓鴻兘娓叉煋鐨勫璞″畾涔変簡鏌愪竴鏂歸潰鐨勬覆鏌撶姸鎬侊紝騫朵笖閮芥槸NiProperty鐨勫瓙綾匯傚涓彲娓叉煋鐨勫璞″彲浠ュ叡浜覆鏌撳睘鎬с傞拡瀵逛竴涓璞$殑瀹屾暣娓叉煋鐘舵佹槸鎵鏈夊睘鎬х殑瀹屾暣緇勫悎銆傚綋灞炴х姸鎬佸璞″瓨鍦ㄤ笌NiRenderObject鍙跺瓙鑺傜偣鏃訛紝榪欎釜涓綋娓叉煋灞炴у氨琚粦瀹氬湪鍦烘櫙鍥劇殑浠諱綍NiAVObject涓娿傝繖姝e紡鐢ㄤ簬姣忎釜鍙覆鏌撳彾瀛愬璞′駭鐢熷睘鎬х姸鎬佺殑姣忎釜NiAVObject鐨勫睘鎬с備竴涓睘鎬ц緇戝畾鍒頒竴涓狽iAVObject灝嗗獎鍝嶆墍鏈夊瓙鏁頒笂鐨勫瓙瀵硅薄(鍖呮嫭瀹冭嚜宸?錛岄櫎闈炲湪瀛愭爲涓悓鏍風殑灞炴х被鍨嬭鍏朵粬灞炴ф墍鏇夸唬銆傚鏋滄病鏈変換浣曞睘鎬ц璁劇疆鍒板満鏅浘鐨勫璞′笂錛岃瀵硅薄浼氶氳繃鍚堥傜殑榛樿灞炴ф潵緇樺埗銆傛瘡涓睘鎬х被鍨嬬殑榛樿鐩稿綋浜庝負璇ョ被鍨嬭緗竴涓粯璁ゆ瀯閫狅紝姣忎釜NiAVObject閮藉寘鍚簡涓涓粦瀹氫笌瀹冪殑鎵鏈夊睘鎬х殑閾捐〃錛屼竴涓狽iAVObject鍙兘娌℃湁浠諱綍灞炴х粦瀹氾紝涔熸湁鍙兘緇戝畾涓涓垨澶氫釜灞炴с傛墍鏈夌殑鏂瑰紡杈懼埌涓涓狽iAVObject鑳界粦瀹氱殑姣忔牱灞炴х殑鏈澶у箋傛敞鎰忕‘淇濆簲鐢ㄧ▼搴忎換浣曟椂鍊欓兘涓嶈兘緇欏崟涓鐨凬iAVObject緇戝畾涓涓互涓婂凡緇忕被鍨嬬殑灞炴с備竴涓崟涓鐨凬iAVObject緇戝畾宸茬粡綾誨瀷鐨勪竴涓互涓婄殑灞炴т細瀵艱嚧濂囨殑瑙嗚鏁堟灉鍜屾湭鐭ョ殑闂銆?/font>
緇樺埗灞炴х被鍨?/font>
NiProperty瀵硅薄鍦℅amebryo涓殑鏁版嵁灞傛濡備笅錛?/font>
NiObject
NiProperty
NiAlphaProperty
NiDitherProperty
NiFogProperty
NiMaterialProperty
NiShadeProperty
NiSpecularProperty
NiStencilProperty
NiTexturingProperty
NiVertwxColorProperty灝卞涓婇潰璁ㄨ鐨勶紝灞炴ц緗粠鏍瑰埌鍙跺眰嬈°備竴涓緇戝畾鍒癗iAVObject瀵硅薄鐨勫睘鎬т細褰卞搷璇ュ璞″強瀹冪殑瀛愬璞°傞櫎闈炲湪鏇翠綆鐨勫瓙鏍戜腑緇戝畾璇ョ被鍨嬬殑鍏朵粬灞炴с傚洜姝わ紝涓涓彲娓叉煋鍙惰妭鐐圭殑褰撳墠鐘舵佹槸鐢卞満鏅浘涓畠紲栧厛鐨勯摼鎵鍐沖畾鐨?/p>
NiWireFramProperty
NiZBufferProperty
鏇存柊灞炴у埌闆嗗悎鐗╀綋涓?/font>
Gamebryo浼氳鏁翠釜鍦烘櫙鍥句繚鎸佺粦瀹氬睘鎬э紝緇戝畾鍦ㄦ瘡涓彲娓叉煋鍙跺璞$殑灞炴х姸鎬佹槸鍖呭惈鎵鏈夋彁渚涚殑綾誨瀷鐨勫睘鎬х殑鏁扮粍錛岃繖鏍鳳紝姣忎釜鍙覆鏌撶殑瀵硅薄鍖呭惈涓涓洿鎺ユ寚鍚戠敤鏉ョ粯鍒剁殑娓叉煋灞炴х殑鎸囬拡銆傝繖寰堥噸瑕侊紝鍥犱負娓叉煋鍙秹鍙婂彲娓叉煋鐨勫彾瀵硅薄錛岃屼笉鏄暣涓満鏅浘銆備簬鏄瘡涓彲娓叉煋瀵硅薄鐨勫睘鎬х姸鎬侀兘鏄戶鎵垮叾浠栧彲娓叉煋瀵硅薄鐨勬墍鏈夊睘鎬х殑鍓湰銆?/p>
Gamebryo浣跨敤涓涓郴緇熺被浼間嬌鐢∟iAVObject::Update鍑芥暟鏉ユ洿鏂拌繖浜涘睘鎬х姸鎬佸璞°傝繖涓被浼肩殑娓叉煋灞炴у嚱鏁版槸NiAVObject::UpdateProperties銆傚綋鍑虹幇涓嬮潰鐨勬儏鍐礥pdateProperties蹇呴』鍦╫bejct"O"鎴栦換浣曚竴涓粬鐨勭鍏堣皟鐢ㄤ笅涓嬈℃覆鏌?/p>
·涓涓互O涓牴鑺傜偣鐨勬爲鍒氳鍒涘緩
·涓涓睘鎬ц緇戝畾鍒癘鎴栦粠O縐婚櫎
·O琚粦瀹氬埌鑺傜偣P鎴栦粠P涓婅縐婚櫎
娉ㄦ剰錛屽綋鍙敼鍙樹簡涓涓凡鏈夊睘鎬э紝搴旂敤紼嬪簭涓嶉渶瑕佽皟鐢║pdateProperties銆?/p>
瑕佸疄鐜版渶浣蟲ц兘錛岃繖浜沀pdateProperties鐨勮皟鐢ㄥ彲浠ヤ互鐩稿悓鐨勬柟寮忚繘琛屾壒澶勭悊鏉ユ墽琛屾壒澶勭悊鏇存柊,濡傛灉搴旂敤紼嬪簭灝嗗湪瀛愭爲涓婄粦瀹氭垨瑙i櫎緇戝畾璁稿灞炴э紝瀹冨繀欏昏皟鐢ㄦ墍鏈夌殑緇戝畾鎴栬В闄ょ粦瀹氬嚱鏁幫紝鐒跺悗鍦ㄥ瓙鏍戠殑鏍歸儴璋冪敤涓嬈pdateProperties錛岄氬父鐨勶紝鍥犱負灞炴у拰瀛愯妭鐐圭殑緇戝畾鍜岃В緇戞病鏈夋瘡涓甯ц繖鏍烽綣侊紝鎵浠pdateProperties瑕佹瘮姣忓撫縐瘡灞炴у揩鐨勫錛屼絾鏄浜庣▼搴忓憳銆傚皢澶氬嚭涓涓澶栫殑灝忚礋鎷呫?/p>
GameBryo ---- SoftParticles
杞矑瀛愪富瑕佹槸涓轟簡瑙e喅綺掑瓙騫垮憡鐗屽拰鍦烘櫙鍑犱綍鐩鎬氦鏃訛紝浜х敓鐨勭敓紜竟緙橈紝濡備笅鍥劇儫闆句笌鍦伴潰鐩鎬氦鏃剁殑杈?img class=blogimg border=0 src="http://hiphotos.baidu.com/%BA%DA%B5%C4%B7%A2%D7%CF/pic/item/b117d366e9752f0faa184c1c.jpg" small="0">
涓轟簡瑙e喅涓婇潰鐨勬儏鍐碉紝鎴戜滑闇瑕佺敤鍒板満鏅殑娣卞害淇℃伅錛屽涓嬪浘錛?/p>

鍦ㄤ竴鑸殑娓叉煋綆$嚎涓紝鐐筆3灝辨槸浜х敓鐢熺‖杈圭殑鐐癸紝涓轟簡鏀瑰杽榪欑鎯呭喌錛孲oftParticles閫氳繃鏀瑰彉綺掑瓙鐨刟lpha鍊兼潵澶勭悊綺掑瓙鍚庨潰鐨勫満鏅紝榪欓噷浣跨敤浜嗚嚜瀹氫箟鐨剆hader甯擱噺鏉ュ喅瀹氳窛紱籨浠ヤ究鎴戜滑璋冩暣alpha鍊鹼紙d涓簑orld place涓級錛屼換浣曡窛紱誨師鍦烘櫙娣卞害澶т簬d鐨勭矑瀛愮浉绱犳垜浠皢涓嶅鐞嗕粬鐨刟lpha鍊?瀵瑰簲涓婂浘P1鐨勫叕寮?錛?/p>
涓婂浘涓偣P1姝eソ杈懼埌璇ヨ窛紱伙紝鐐筆1鍒癙3鐨刟lpha娣峰悎紼嬪害浼氶掑錛岃窛紱籨璁劇疆鐨勮秺灝忥紝閭f晥鏋滃氨瓚婃帴榪戜簬紜矑瀛愮殑鏁堟灉錛屽洜涓篜1鐨勬潯浠跺緢瀹規槗婊¤凍錛屽alpha鍊肩殑淇敼浼氬噺灝戯紝浣嗘槸濡傛灉璺濈璁劇疆鐨勮繃澶э紝閭2灝卞緢瀹規槗婊¤凍錛岃繖鏍峰鑷碙en/d浜х敓鐨勫煎緢灝忥紝璁╃矑瀛愬彉鐨勫緢閫忔槑錛岄犳垚鐨勭矑瀛愬緢紼鐤忥紝鍏蜂綋鐨勬晥鏋滆鑷繁鎵嬪姩璋冭妭銆?/p>
榪欑杈圭紭杞寲鐨勬柟寮忓彧鏄繎浼肩殑錛屽綋鍦烘櫙鐨勬硶綰夸簬鎽勫儚鏈烘柟鍚戦敜瀛愭椂浼氬け鏁堬紝褰撳嚭鐜拌繖縐嶆儏鍐墊椂錛岄殢渚跨矑瀛愪笌鐩鎬氦闈㈠緢鎺ヨ繎浜嗭紝浣嗗洜涓烘憚鍍忔満涓庣浉浜ら潰榪戜箮鍨傜洿錛岃岀矑瀛愮浉绱犵殑娣卞害媯嫻嬫槸娌夸笌鎽勫儚鏈烘柟鍚戠殑錛屼粠鑰屼駭鐢熶竴涓緢澶en鍊鹼紝瀵艱嚧浜嗘湰鏉ュ簲璇ユ垚涓篜3鏁堟灉鐨勭偣錛屾垚涓篜1銆?/p>
DEMO5涓被錛?span class=NDLSystemFont>SoftParticles錛?span class=NDLSystemFont>MRT_ColorDepthMaterial錛?span class=NDLSystemFOnt>SoftParticlesMaterial錛?span class=NDLSystemFont>SoftParticlesManager錛孧RT_ColorBlackMaterial
SoftParticles::CreateScene()
璐熻矗鍒涘緩鍦烘櫙錛屼粠Nif鏂囦歡涓幏鍙栧満鏅紝鎽勫儚鏈哄強綺掑瓙緋葷粺錛岃緗產lpha鎺掑簭錛屽墧闄わ紝鍙婇粯璁ゆ潗璐∕RT_ColorDepthMaterial, MRT_ColorDepthMaterial緇ф壙浜嶯iStandardMaterial錛岄噸杞戒簡鍑芥暟bool HandleFinalVertexOutputs()鍜屽嚱鏁癰ool HandleFinalPixelOutputs()錛岃繖涓や釜鍑芥暟鍒嗗埆鍦╲ertex shader鍜宲ixel shader鐨勬渶鍚庢墽琛岋紝閫氳繃HandleFinalVertexOutputs鍑芥暟錛屼負vertex shader鐨刼utput緇撴瀯澧炲姞鎴愬憳NiMaterialResource* pkVertOutViewTexCoord = Context.m_spOutputs->AddInputResource("float4", "TexCoord", "World",
"PosViewPassThrough");浣滀負綰圭悊鍧愭爣鐨勬牸寮忚緭鍑?/span>
NiMaterialNode* pkSplitterNode = GetAttachableNodeFromLibrary(
"PositionToDepthNormal");
kContext.m_spConfigurator->AddNode(pkSplitterNode);
kContext.m_spConfigurator->AddBinding(pkViewPos,
pkSplitterNode->GetInputResourceByVariableName("Input"));
kContext.m_spConfigurator->AddBinding(
pkSplitterNode->GetOutputResourceByVariableName("Output"),
pkVertOutViewTexCoord);
鑾峰緱鑷畾涔夊嚱鏁癙ositionToDepthNormal錛屽皢pkViewPos浣滀負浼犲叆鍙傛暟錛屾妸鏂板鐨刾kVertOutViewTexCoord浣滀負杈撳嚭鍙傛暟
鑰孒andleFinalPixelOutputs鍒欏湪杈撳叆緇撴瀯涓鍔爁loat4 WorldPosProjected : TEXCOORD6;浠g爜濡備笅
NiMaterialNode * pkInputResource;
pkInputResource = kContext.m_spConfigurator->GetNodeByName("PixelIn");
NiMaterialResource* pkDepthFromVP = pkInputResource->AddOutputResource(
"float4", "TexCoord", "World", "WorldPosProjected");
鐒跺悗鍦ㄨ緭鍑虹粨鏋勪腑澧炲姞娣卞害棰滆壊錛岄氳繃WorldPosProjected鏉ヨ祴鍊鹼紝CreateScene()榪樺皢鍦烘櫙涓墍鏈夌殑綺掑瓙緋葷粺娣誨姞榪?span class=NDLSystemFont>SoftParticlesManager錛屾坊鍔犲畬鎵鏈夌殑ParticlesSystem鍚庯紝SoftParticlesManager閫氳繃Initialize()鍑芥暟錛屽垱寤洪粯璁ょ殑綺掑瓙鏉愯川錛屼互鍙?span class=NDLSystemFont>SoftParticlesManager鑷繁鐨凴nderView鍙奵lick,鐒跺悗閫氳繃InitializeScene()涓烘瘡涓矑瀛愮郴緇熻緗潗璐紝騫舵坊鍔犺繘RnderView,榪欓噷瑕佹敞鎰忔墽琛岄『搴?/span>
SoftParticles::CreateFrame()璇ュ嚱鏁頒腑錛岄氳繃鑾峰彇鍚庡緙撳啿鐨勫睘鎬э紝鏉ュ垱寤虹浉鍚屼竴寮爐exture錛岀敤鏉ユ覆鏌撴繁搴︼紝涓嶈繃鏍煎紡瑕佽緗負NiTexture::FormatPrefs::SINGLE_COLOR_32錛岃〃紺?2浣嶇殑鍗曢氶亾棰滆壊錛岀敤R閫氶亾琛ㄧず錛岀劧鍚庢柊寤轟竴涓猂enderGroup錛岃鍖呭惈鍘熸潵鐨勫悗澶囩紦鍐蹭互鍙婂厛寤虹殑浣嶅浘緙撳啿錛岃鍦烘櫙鍚屾椂娓叉煋鍒拌繖涓や釜緙撳啿涓婏紝騫跺皢綰圭悊緙撳啿浣滀負SoftParticlesManager涓垱寤虹殑click鐨勪竴涓緭鍏?/span>
MSAA(MultiSampling Anti-Aliasing)
GB涓璏SAA瀹炵幇鐨勫叧閿唬鐮佸熀鏈槸鐩存帴鐢ㄧ殑D3D錛岄櫎浜嗚嚜宸辯殑娓叉煋鎵規緋葷粺錛孌X9涓嶈兘鐩存帴瀵規覆鏌撳埌綰圭悊鍚敤MSAA錛屼絾鏄彁渚涗簡娓叉煋琛ㄩ潰surface,鍙互瀵箂urface鍚敤MSAA銆?/p>
瀹炵幇鐨勫叧閿楠ゅぇ鑷村涓?/p>
1銆侼iRenderedTexture::Create鍒涘緩涓涓拰鑳屾櫙緙撳啿涓鏍峰ぇ鐨凴enderTexture錛孨iRenderTargetGroup::Create鍒╃敤RenderTexture鍒涘緩RenderTarget錛屽睆騫曟渶緇堟覆鏌撶殑鐩爣灝辨槸璇enderTarget錛屾垜浠渶瑕佺殑涔熸槸灝哅SAA鍚庣殑鏁版嵁緇橰enderTexture
2銆傞氳繃D3D鐨凜reateRenderTarget鎸夌収鑷畾鐨凪SAA綰у埆鏉ュ垱寤簊urface錛屽埄鐢╯urface鐨刡uffer鍒涘緩鍙﹀涓涓狹SAARenderTarget
3銆傛柊寤轟竴涓猂enderView錛孏B涓敤鐨凬iScreenFillingRenderView錛屽氨鏄疍3D涓洓涓《鐐圭粍鎴愮殑鐭╁艦錛岃RenderView緇戝畾涓涓猙aseTexture涓烘楠?鎵鍒涘緩鐨凴enderTexture鐨凬iTexturingProperty錛屽垱寤篟enderClick鎸傛帴璇enderView錛屽茍璁劇疆涓涓狢allBackFunc錛岀劧鍚庡皢璇lick鎻掑埌mainClick鍚庨潰錛岃繖鏍風敤涓ass鏉ュ畬鎴怣SAA
4銆備富click灝嗙敾闈㈡覆鏌撳埌寮鍚疢SAA鐨凪SAARenderTarget錛岀劧鍚庤繘鍏ユ柊click鐨凜allBackFunc錛岃幏鍙朚SAARenderTarget鐨刡uffer錛岀敤D3D鐨凷tretchRect澶嶅埗鏁版嵁鍒癛enderTexture錛岃繖鏍鋒柊click灝變細娓叉煋鍑鴻繘琛孧SAA鍚庣殑texture
GameByro浣滀負涓嬈炬涓栦唬寮曟搸錛屼嬌鐢ㄤ簡澶嶆潅鐨勬潗璐ㄧ郴緇燂紝鐢ㄦ潵婊¤凍鍚勭鍚勬牱鐨勯渶姹傘傛潗璐ㄤ唬琛ㄤ簡鐗╀綋鍙楀埌鍏夌収鍚庢墍鍛堢幇鍑虹殑璐ㄦ劅錛岃岃繖縐嶈川鎰熷湪璁$畻鏈哄浘褰㈠涓渶瑕佺潃鑹蹭唬鐮佹潵瀹屾垚錛屾墍浠ュ綋鍓嶆祦琛岀殑鍥懼艦寮曟搸璁捐鏄嬌鐢ㄨ娓叉煋瀵硅薄鐨勬潗璐ㄤ笌shader鐩稿叧鑱旓紝GameByro涔熶笉渚嬪銆侴ameByro鐨勬潗璐ㄧ郴緇熷彲浠ラ氳繃shade tree鐢熸垚shader紼嬪簭錛屽寮轟簡搴旂敤紼嬪簭灞傚鍙紪紼嬫覆鏌撶綰跨殑鎺у埗鑳藉姏銆?/p>
鍦℅ameByro涓紝瀵硅薄琛ㄩ潰鐨勮壊褰┿佺汗鐞嗐佸厜婊戝害銆侀忔槑搴︺佸弽灝勭巼銆佹姌灝勭巼銆佸彂鍏夊害絳夊彲瑙嗗睘鎬т笌浼犵粺鐨勬潗璐ㄧ郴緇熷垎紱伙紝鐙珛鐨勬垚涓轟簡瀵硅薄鐨勬覆鏌撳睘鎬э紙NiProperty錛夛紝鑰屾潗璐紙NiMaterial錛変粎鐢ㄦ潵瀵圭潃鑹茬▼搴忕殑灝佽錛岃繖鏍峰氨瀹炵幇浜嗘覆鏌撴暟鎹拰娓叉煋鏂規硶鐨勫垎紱伙紝闄嶄綆浜嗚﹀悎鎬с傚涓婃墍璇寸殑榪欎簺鍙灞炴у湪Gamebyro涓細灝佽鎴愪竴涓睘鎬у璞★紝鍦ㄥ簲鐢ㄧ▼搴忎腑濡傛灉瀵瑰璞℃寕杞借繖涓睘鎬у璞★紝鍦℅PU紼嬪簭涓氨鍙互璁塊棶榪欎釜灞炴у璞$殑鍊箋傛覆鏌撳睘鎬у璞″彲浠ュ湪鍒涘緩鏃舵寚瀹氬叾綾誨瀷錛屽綰圭悊銆佹誕鐐廣佺煩闃點佸悜閲忔垨鏁扮粍錛屾澶栦竴浜涘叏灞鎬х殑瀵硅薄涔熷彲浠ラ氳繃鍦⊿hader涓敤璇剰澹版槑涓哄叏灞object瀵硅薄錛屽鐏厜鍜屾憚褰辨満絳夛紝榪欐牱灝卞彲浠ヤ互鍚屾牱鐨勬柟寮忔潵璁塊棶榪欎簺瀵硅薄涓婄殑灞炴с?/p>
GameByro姣忎竴甯х殑娓叉煋錛圢iRenderFrame錛夊垝鍒嗕負澶氫釜姝ラ錛圢iRenderStep錛夛紝姣忎釜姝ラ鍙堝寘鍚緢澶氫釜鎵癸紙NiRenderClick錛夛紝NiRenderFrame灝佽浜嗕笂灞傚娓叉煋緋葷粺璋冪敤鐨勬帴鍙o紝鑰孨iRenderClick鍒欎唬琛ㄤ簡鍥懼艦紜歡鐨勪竴嬈$粯鍒舵搷浣滐紙瀵規覆鏌撻槦鍒椾腑鎵鏈夌殑瀵硅薄鐨勯《鐐圭紦瀛樿皟鐢―rawPrimitive錛夛紝褰撳簲鐢ㄧ▼搴忚皟鐢∟iRenderFrame鐨凞isplay鎺ュ彛鏃? NiRenderFrame浼氫緷嬈¤皟鐢ㄦ瘡涓涓狽iRenderStep鐨凴ender()鎺ュ彛錛孨iRenderStep灝變細鎵ц鎵鏈夌殑NiRenderClick鎿嶄綔銆?/p>
瀵逛簬姣忎釜NiRenderClick鏉ヨ錛岄鍏堣璁劇疆瑙嗗彛鍜屾覆鏌撶洰鏍囷紝涔熷氨鏄覆鏌撴暟鎹祦鐨勫叆鍙e拰鍑哄彛銆傝鍙e緩绔嬩互鍚庡氨鍙互閫氳繃鍏寵仈鐨勬憚褰辨満瀵瑰満鏅浘涓殑瀵硅薄榪涜瑁佸壀錛堥粯璁ょ殑鏈夎鍙h鍓拰閬尅瑁佸壀錛屾澶栬繕鍙互閫氳繃鍥炶皟鍑芥暟鍔犲叆鑷繁鐨勮鍓柟寮忥級錛屽皢鏈瑁佸壀鐨勫璞℃斁鍏ユ覆鏌撻槦鍒椼傜劧鍚嶨ambyro浼氭牴鎹潗璐ㄦ潵瀵規覆鏌撻槦鍒椾腑鐨勫璞¤繘琛屾帓搴忥紝璁╂潗璐ㄧ浉鍚岀殑瀵硅薄澶勪簬鐩擱偦浣嶇疆錛岃繖鏍峰彲浠ュ噺灝戝垏鎹hader鐨勫紑閿銆?/p>
濡傚浘鎵紺轟負甯ф覆鏌撶郴緇熺殑緇撴瀯鍥撅紙綆鍖栫増錛?/p>
GameByro涓殑鏉愯川浠h〃娓叉煋瀵硅薄鎵閲囩敤鐨勬柟娉曘傚墠闈㈣榪囥傜汗鐞嗗睘鎬у寘鍚簡鐫鑹叉墍闇鐨勫師鏂欙紝閭d箞鏉愯川灝辨寚瀹氫簡瀵硅繖浜涘師鏂欑殑鍔犲伐鏂規硶銆傚熀浜庡綋鍓嶅彲緙栫▼娓叉煋綆$嚎璁捐錛屾潗璐ㄥ氨鎴愪負榪炴帴瀵硅薄涓嶨PU紼嬪簭鐨勪腑闂村眰錛屽簲鐢ㄧ▼搴忓彲浠ラ氳繃鏉愯川灝唖hader搴旂敤浜庡嚑浣曚綋銆?/p>
NiMaterial綾繪槸鎵鏈夋潗璐ㄧ殑鍩虹被錛岃繖涓被閫氳繃涓涓狹ap鏉ヤ繚瀛樺綋鍓嶅簲鐢ㄧ▼搴忎腑鎵鏈塏iMaterial鐨勬寚閽堬紝褰撶劧榪欎釜Map鏄潤鎬佷篃灝辨槸璇寸浉褰撲簬鍏ㄥ眬鍙橀噺錛岄氳繃static NiMaterial* NiMaterial:: GetMaterial(const NiFixedString& kName)鎺ュ彛瀵硅繖涓叏灞鐨凪ap榪涜璁塊棶銆備篃灝辨槸璇達紝褰撳墠鐜涓墍鏈夌殑NiMaterial瀵硅薄鏄氳繃NiMaterial綾繪潵綆$悊鐨勩傛澶朜iMaterial綾昏繕閫氳繃闈欐佹垚鍛樺彉閲忎繚瀛樹簡涓涓伐浣滆礬寰勶紙鍗硈hader鏂囦歡璺緞錛夛紝閫氳繃榪欎釜璺緞鍔犺澆shader鏂囦歡銆侼iMaterial灝卞儚鏄竴涓腑浠嬶紝鍏ㄦ潈浠g悊瀵瑰璞$殑娓叉煋宸ヤ綔銆傜敤鎴峰彲浠ラ氳繃閲嶈澆NiMaterial鏉ュ疄鐜拌嚜宸辯殑娓叉煋鏈哄埗銆傛瘡涓狽iMaterial閮芥槸鍏ㄥ眬鎬х殑錛屽彲浠ヤ綔鐢ㄤ簬澶氫釜鐢氳嚦鏄墍鏈夌殑娓叉煋瀵硅薄錛屼絾涓涓覆鏌撳璞′篃鍙互鎷ユ湁澶氫釜NiMaterial錛屼絾鍙兘鏈変竴涓浜庢縺媧葷姸鎬佺殑NiMaterial銆?/p>
NiMaterial鐨勬淳鐢熺被NiFragmentMaterial鎻愪緵浜嗗鍙紪紼嬫覆鏌撶綰垮畬鏁寸殑鎺у埗鏈哄埗錛屽唴閮ㄤ繚瀛樹簡NiShader鐨勫搱甯岃〃銆佷竴涓狽iGPUProgramCache鏁扮粍銆傚茍涓擭iFragmentMaterial浼氱敓鎴愪竴涓敤鏉ョ紪璇慓PU紼嬪簭鐨剆hade tree錛堝悗闈細鏈夎В閲婏級銆傝繖鏍風殑璇濓紝姣忎釜NiFragmentMaterial鍙互瀵瑰簲澶氫釜shader紼嬪簭錛岃繖鏍峰氨鎻愪緵浜嗕竴縐嶆満鍒訛紝鍦ㄨ繍琛屾椂鏍規嵁涓嶅悓鐨勮繍琛岀幆澧冨拰娓叉煋瀵硅薄涓嶅悓鐨勭姸鎬侊紝鏉ラ夋嫨鍚堥傜殑shader紼嬪簭銆傚湪NiRenderClick渚濇娓叉煋鍙闆嗕腑鐨勬瘡涓璞℃椂錛岄鍏堜細鍒ゆ柇鍏舵槸鍚﹂渶瑕佽娓叉煋鐨勬爣璁幫紙flag錛夛紝濡傛灉闇瑕佽娓叉煋錛屽垯浣跨敤NiMaterial::IsShaderCurrent鎺ュ彛鍒ゆ柇褰撳墠shader錛堜笂涓嬈℃覆鏌撴墍浣跨敤鐨剆hader錛夋槸鍚︽湁鏁堬紝鎵璋撴湁鏁堝氨鏄粛鐒跺瓨鍦ㄥ茍涓斿彲浠ュ簲鐢ㄤ簬鏈鐨勬覆鏌撳璞★紝濡傛灉鏃犳晥錛屽垯浼氳皟鐢∟iMaterial::GetCurrentShader鑾峰緱shader錛岀敤浜庢湰嬈℃覆鏌撱侼iMaterial::GetCurrentShader浼氭牴鎹覆鏌撳璞$殑灞炴у拰褰撳墠鐜紜歡鏉′歡鏉ラ夋嫨鍚堥傜殑shader紼嬪簭銆傚綋鐒訛紝鍙互閫氳繃閲嶈澆IsShaderCurrent鍜孏etCurrentShader鎺ュ彛鏉ユ寚瀹氳嚜宸辯殑鏈夋晥鎬у垽鏂鍒欏拰濡備綍閫夋嫨shader紼嬪簭鐨勬柟妗堛?NiFragmentMaterial鎻愪緵浜嗕竴濂楁惌寤簊hade tree鐨勬鏋訛紝鐢ㄦ埛鍙互閫氳繃閲嶈澆鏉ユ惌寤鴻嚜宸辯殑shade tree錛屽綋鐒訛紝濡傛灉涓嶆兂閫氳繃shade tree鐨勫艦寮忕敓鎴恠hader紼嬪簭涔熷彲浠ワ紝浣跨敤NiSingleShaderMaterial鍙互浠庢枃浠剁敓鎴恠hader紼嬪簭銆?/p>
Shade Tree錛?/strong>
浠涔堟槸shade tree鍛紵鎴戜滑閫氬父緙栧啓鐨剆hader浠g爜鏄嚎鎬ф墽琛岀殑錛屽嵆姣忎釜pass嫻佺▼鎵ц鐨勬槸鏂囨湰涓婂畾涔夊ソ鐨剆hader嫻佺▼錛屾瘡涓孌祍hader鍔熻兘妯″潡鏄寜涓瀹氶『搴忎緷嬈℃墽琛岀殑銆傚鏋滈渶瑕佷慨鏀規祦紼嬩腑鐨勬煇涓閮ㄥ垎灝遍渶瑕佹洿鏀圭浉鍏崇殑shader浠g爜騫墮噸鏂扮紪璇戙傝宻hade tree灝唖hader浠g爜浠ユ爲褰㈢粨鏋勭粍緇囪搗鏉ワ紝姣忎竴涓猻hader浠g爜鍧楋紙涓鑸槸涓涓嚱鏁幫級閮戒細琚紪璇戞垚涓涓妭鐐癸紝閫氳繃瀹氫箟杈撳叆鍙橀噺鍜岃緭鍑哄彉閲忔潵鎻愪緵鏁版嵁嫻佺殑鍏ュ彛鍜屽嚭鍙o紝榪欎簺鑺傜偣鐨勬彃鍏ュ拰鍒犻櫎鍙互閫氳繃搴旂敤紼嬪簭鏉ユ帶鍒訛紝浠庤岀伒媧葷殑鎺у埗鏁翠釜娓叉煋榪囩▼銆傝繖鏍穝hader紼嬪簭涓殑涓浜涙牳蹇冩ā鍧楀彲浠ョ敱緹庢湳閫氳繃宸ュ叿鐢熸垚錛岀劧鍚庢彃鍏ュ埌shade tree涓紝鍙杈撳叆鍜岃緭鍑虹殑鎺ュ彛涓嶅彉錛屽氨鏃犻』淇敼鍏朵粬浠g爜錛屼粠鑰岄檷浣庝簡緹庢湳寮鍙憇hader鐨勯棬妲涖?/p>
GameByro閫氳繃浠ヤ笅鍑犱釜綾繪惌寤簊hade tree:
l NiMaterialConfigurator錛歴hade tree琚皝瑁呭湪榪欎釜瀵硅薄涓紝Uniform constants琚皝瑁呭湪NiMaterialResource涓紝鑰孨iMaterialNode灝佽浜嗙浉鍏崇殑shader浠g爜錛屾墍鏈夌殑璧勬簮鍜岃妭鐐歸氳繃NiMaterialResourceBinding榪炴帴璧鋒潵銆傚綋鎵鏈夌殑榪炴帴閮界‘绔嬩互鍚庯紝NiMaterialConfigurator浼氳皟鐢‥valuate鎺ュ彛鐢熸垚GPU紼嬪簭鍜屼竴涓緭鍏niform璧勬簮鐨勯泦鍚堛?/p>
l NiMaterialFragmentNodes錛氳繖涓被鍖呭惈浜嗕竴涓猻hader浠g爜鐗囨鐨勯泦鍚堬紝榪欎簺浠g爜鐗囨涓轟笉鍚岀殑騫沖彴鍜岀紪紼嬭璦鎵緙栧啓銆傝繖灝變負shader紼嬪簭鍛樻彁渚涗簡鏇村ぇ鐨勭伒媧繪э紝鐢ㄤ互鎺у埗浠栦滑鐨勪唬鐮佸湪涓嶅悓騫沖彴鍜屽浘褰㈢‖浠朵笂鐨勮〃鐜般備緥濡傦細鍦ㄩ珮绔鉤鍙板彲浠ラ噰鐢ㄩ珮綰х殑shader model鎻愪緵鏇村ソ鐨勬晥鏋滐紝鑰屽湪浣庣騫沖彴涓婂彲浠ュ叧闂竴浜涚壒鏁堟潵鍔犲揩閫熷害銆?/p>
l NiMaterialNodeLibraries錛氳繖涓被鏄竴涓狽iMaterialNode鐨勯泦鍚堬紝鍏跺疄涔熷氨鏄竴涓猻hader搴撱傚畠鍏佽shade tree鑺傜偣瀹屽叏鍩轟簬鏁版嵁椹卞姩銆俿hader搴撶殑鐢熸垚鍙互閫氳繃涓ょ鏂瑰紡錛岃В鏋怷ML鏂囦歡鎴栫敤XML鏂囦歡鐢熸垚C++浠g爜銆侴ameByro鎻愪緵浜嗙浉鍏崇殑瑙f瀽鍣ㄥ拰浠g爜鐢熸垚鍣ㄣ?/p>
l NiMaterialResources錛歴hade tree涓殑Uniform constants錛屾敮鎸佸縐嶆暟鎹被鍨嬶紝鍖呮嫭Constant銆丳redefined銆丄ttribute銆丟lobal銆丱bject銆?/p>
鍥哄畾綆$嚎鐨勬覆鏌擄細
GameByro鏀寔鍥哄畾綆$嚎鐨勬覆鏌擄紝鍏剁汗鐞嗘販鍚堣繃紼嬪涓嬨?/p>
鍥哄畾綆$嚎鐨勭潃鑹插鐞嗘祦紼?/p>
涓婂浘寰堟竻妤氱殑鏄劇ず鍑轟簡姣忎釜stage鐨勬搷浣滐紝騫寵鐨勮〃紺轟袱寮犵汗鐞嗙殑閲囨牱鏄悓鏃惰繘琛岀殑錛岀壒瀹氭儏鍐典笅鍙寵竟鐨勭汗鐞嗗彲鑳借蹇界暐銆?/p>
澶ч儴鍒嗘儏鍐典笅錛屽簲鐢ㄧ▼搴忎笉浼氫嬌鐢ㄤ笂闈㈡墍鏈夌殑stage錛屽紑鍚垨鑰呭叧闂偅涓猻tage鍙互鐢卞簲鐢ㄧ▼搴忔潵鎸囧畾銆?/p>
浠ヤ笅涓哄閲嶉噰鏍風殑鍘熺悊鍥?
鍥哄畾綆$嚎鐨勭汗鐞嗗閲嶉噰鏍?/p>
GameByro鎻愪緵浜嗕竴涓粯璁ょ殑鐫鑹插鐞嗘祦紼嬶紝灝佽鍦∟iMaterial鐨勬淳鐢熺被NiStandardMaterial涓紝榪欎釜綾繪墽琛岀被浼間簬鍥哄畾綆$嚎鐨勬祦紼嬶紝鍦ㄤ笉鍚岄樁孌靛皢綰圭悊閲囨牱銆佸茍灝嗛噰鏍峰埌鐨勬暟鎹販鍚堝埌鏈緇堢殑緇撴灉涓幓銆?/p>
GameByro榛樿鐨勬潗璐ㄧ郴緇熺殑鐗規у涓嬶細
涓嬪浘鏄劇ず涓轟笉鍚岀殑綰圭悊銆佺伅鍏夈佹潗璐ㄥ睘鎬х殑緇勫悎榪囩▼錛屼笉榪囬渶瑕佹敞鎰忕殑鏄紝瑙嗗樊璐村浘鍜屽嚬鍑歌創鍥懼睘浜庣壒孌婄殑鎯呭喌錛屽畠浠粎浠呭獎鍝嶅埌綰圭悊閲囨牱鐨刄V鍧愭爣錛岃屽茍闈炵洿鎺ュ鏈鍚庣殑棰滆壊鍊間駭鐢熻礎鐚傝宸創鍥句細鏀瑰彉鎵鏈夎創鍥鵑噰鏍風殑UV鍧愭爣錛岃屽嚬鍑歌創鍥句粎瀵圭幆澧冭創鍥劇殑UV浜х敓褰卞搷銆?/p>
浠ヤ笂嫻佺▼瀹屽叏鐢眘hade tree鏋勫緩錛孨iStandardMaterial鎻愪緵浜嗗ぇ閲忕殑鍑芥暟鎺ュ彛鐢ㄤ簬瀵規瘡涓祦紼嬬殑鎺у埗錛岀敤鎴峰彲浠ラ氳繃閲嶈澆鐩稿叧鐨勬帴鍙o紝鎻掑叆鑷繁鐨剆hade tree鑺傜偣錛屼慨鏀規瘡涓姝ョ殑鎿嶄綔鎴栧鐞嗚繃紼嬨備緥濡傦細
virtual bool HandleBaseMap(Context& kContext, NiMaterialResource* pkUVSet,
NiMaterialResource*& pkDiffuseColorAccum,
NiMaterialResource*& pkOpacity, bool bOpacityOnly);
褰撶劧錛屾暣涓祦紼嬬殑欏哄簭鍜岀粨鏋勪慨鏀硅搗鏉ユ瘮杈冨洶闅撅紝濡傛灉鏈夐渶瑕佸彲浠ュ畾鍒惰嚜宸辯殑鏉愯川緋葷粺錛屾惌寤鴻嚜宸辯殑shade tree銆?/p>
NiStandardMaterial鎻愪緵浜嗚嫢騫插洖璋冨嚱鏁幫紝榪欎簺鍑芥暟鍙互鍔ㄦ佺殑淇敼嫻佺▼錛屽垎鍓睵ASS錛屽shader榪愯澶辮觸榪涜瀹歸敊銆?/p>
l SplitPerPixelLights/SplitPerVertexLights:榪欎袱涓嚱鏁板垎鍒綔鐢ㄤ簬閫愰《鐐瑰厜鐓у拰閫愬儚绱犲厜 鐓э紝褰撶墿浣撴墍鍙楃殑鍏夋簮鏁伴噺澶錛岃秴榪囦簡欏剁偣鎴栧儚绱犵潃鑹插櫒鐨勮兘鍔涙椂錛岄氳繃榪欎簺鍑芥暟鍙互灝嗗け璐ョ殑pass鍒嗗壊鎴愪袱涓紝濡傛灉鍒嗗壊鍑虹殑pass浠嶇劧涓嶈兘鎵ц錛岄偅涔堝嚱鏁頒細琚掑綊璋冪敤錛岀洿鍒版瘡涓猵ass鍙湁涓涓厜婧愪負姝€?/p>
l SplitTextureMaps錛氳繖涓嚱鏁頒細鎶婂綰圭悊閲囨牱鐨刾ass榪涜鍒嗗壊錛屽綋綰圭悊鏌ヨ榪囧鏃訛紝欏剁偣鎴栧儚绱犵潃鑹插櫒灝變細榪囦簬澶嶆潅錛岃繖鏃跺氨鍙兘瀵艱嚧shader榪愯澶辮觸銆傛鍑芥暟鍙兘榪唬涓嬈★紝鐢熸垚涓涓澶栫殑pass銆?/p>
l DropParallaxMap錛氳繖涓嚱鏁扮敤鏉ヤ粠鍑犱綍浣撲笂縐婚櫎瑙嗗樊璐村浘錛屼笖涓嶄駭鐢熼澶栫殑pass銆?/p>
l DropParallaxMapThenSplitLights錛氳繖涓嚱鏁伴鍏堣皟鐢―ropParallaxMap縐婚櫎瑙嗗樊璐村浘錛岀劧鍚庝竴鐩磋皟鐢⊿plitPerPixelLights鐩村埌澶辮觸涓烘銆?/p>
NiMaterial騫朵笉鏄洿鎺ヤ笌NiRenderObject鐩稿叧鑱旓紝鑰屾槸緇忚繃浜哊iMaterialIstance榪欎釜涓棿灞傦紝鐢卞畠鏉ヤ唬鐞嗗皢NiMaterial鍏寵仈鍒板嚑浣曚綋錛屽畠璐熻矗璋冪敤NiMaterial涓篘iRenderObject鐢熸垚NiShader錛岄氳繃鏀瑰彉NiMaterialIstance涓婄殑鎺ュ彛SetMaterialNeedsUpdate錛屽彲浠ュ喅瀹氭瘡涓甯iRenderObject鎵浣跨敤鐨勬潗璐ㄦ槸鍚﹂渶瑕佽鏇存崲錛岄氳繃鎺ュ彛SetDefaultMaterialNeedsUpdateFlag錛屽彲浠ュ喅瀹氬綋鍓嶆潗璐ㄦ墍闇鐨勬暟鎹紙鍗沖綋鍓嶆覆鏌撴祦紼嬫墍闇鐨勬暟鎹級鏄惁瑕佽鏇存柊銆傝繖鏍鋒瘡涓狽iMaterialIstance鍙兘琚竴涓狽iRenderObject鎵鎷ユ湁錛岃屽涓狽iMaterialIstance鍙互鍏變韓涓涓狽iMaterial錛岃繖鏍峰氨鍑忓皯浜嗛噸澶嶅垱寤篘iMaterial鐨勬椂闂村拰絀洪棿涓婄殑寮閿錛屽悓鏃墮檷浣庝簡娓叉煋瀵硅薄涓潗璐ㄤ箣闂寸殑鑰﹀悎搴︺?/p>
濡備笅涓烘潗璐ㄧ郴緇熺殑綾葷粨鏋勭畝鍖栧浘錛?/p>
鍓嶉潰鎻愬埌榪囷紝GameByro灝嗘覆鏌撴墍闇瑕佸姞宸ョ殑鏁版嵁鍏ㄩ儴灝佽鍦ㄤ簡NiProperty涓紝鍙鍦╯hader涓敤鎸囧畾鐨勮娉曡繘琛屽0鏄庯紝灝卞彲浠ヨ闂繖浜涘睘鎬х殑鍊箋?/p>
鐩墠寮曟搸涓凡緇忓畾涔変簡12縐嶅睘鎬э紝鍧囨淳鐢熻嚜NiProperty錛屽垎鍒唬琛ㄦ覆鏌撴暟鎹殑12縐嶄笉鍚岀被鍨嬶細
鐢ㄦ埛涔熷彲浠ヨ嚜瀹氫箟灞炴х被鍨嬶紝浣嗘墍瀵瑰簲鐨勬暟鎹被鍨嬭琚玸hader璇█鎵鏀寔銆?/p>
鍏夌収涓庨槾褰卞瘑涓嶅彲鍒嗭紝鍥犱負闃村獎灝辨槸鐢卞厜鐓т駭鐢熺殑錛屽墠闈㈠湪鏉愯川緋葷粺涓凡緇忔彁鍒拌繃鍏夌収瀵圭潃鑹茬殑褰卞搷錛岃繖閲岄噸鐐歸槓榪幫紝GameByro鏄庢牱鏍規嵁鍏夋簮浜х敓闃村獎鐨勩傜敱GameByro鎻愪緵鐨勯槾褰卞潎鍩轟簬ShadowMap鎶鏈紝
浣嗕篃鎻愪緵浜哠haowVolume鐨勭ず渚嬩唬鐮併?/p>
Shadowing System鏄畬鍏ㄥ緩绔嬪湪甯ф覆鏌撶郴緇熶笂鐨勶紝 閫氳繃涓涓猂enderClick鐢熸垚ShadowMap錛岀劧鍚庡湪姝e父娓叉煋嫻佺▼寮濮嬩箣鍓嶅皢ShadowMap鏇存柊鍒板彲瑙侀泦鍐呮瘡涓涓覆鏌撳璞′笂銆傝繖鏍峰綋娓叉煋瀵硅薄浣跨敤NiStandardMaterial鏃跺氨浼氭牴鎹厜婧愮殑闃村獎鎶鏈潵瀵筍hadowMap榪涜閲囨牱錛屽茍灝嗙粨鏋滀笌鏈緇堢殑杈撳嚭棰滆壊鎸変竴瀹氭瘮渚嬫販鍚堛?/p>
闃村獎緋葷粺鐢變互涓嬪嚑涓被鏋勬垚錛?/p>
GameByro鎻愪緵浜嗕笁縐嶇被鍨嬬殑Shadow Write Materials錛屽垎鍒負NiPointShadowWriteMaterial銆?/p>
NiDirectionalShadowWriteMaterial銆丯iSpotShadowWriteMaterial錛岄傜敤浜庝笁縐嶄笉鍚岀殑鍏夋簮綾誨瀷銆?/p>
闃村獎緋葷粺闈欐佺粨鏋勫涓嬶細
1. 鍦ㄥ簲鐢ㄧ▼搴忓垵濮嬪寲闃舵錛岄氳繃璋冪敤NiShadowManager鐨処nitialize()鎺ュ彛瀹炵幇瀵規暣涓槾褰辯郴緇熺殑鍒濆鍖栵紝姝ゆ椂搴旂敤紼嬪簭浼氭敞鍐屾墍鏈夌殑ShadowTechnique錛屽茍鍒濆鍖朜iShadowClickGenerator銆?/p>
2. 褰撴垜浠垱寤轟竴涓狽iLight浠ュ悗錛屾垜浠彲浠ラ氳繃NiShadowManager涓鴻繖涓狽iLight鏂板緩涓涓狽iShadowGenerator錛孨iShadowGenerator浼氶氳繃NiLight鐨勭被鍨嬫潵閫夋嫨鍚堥傜殑NiShadowTechnique錛屾鏃禢iShadowManager浼氫負鏂扮殑NiShadowGenerator鍒涘緩涓涓狽iShadowRenderClick銆?/p>
3. 褰撳撫娓叉煋緋葷粺鍚姩鍚庯紝NiShadowRenderClick鐨凱erformRendering()鎺ュ彛浼氳璋冪敤錛屾鏃禢iShadowRenderClick浼氶氳繃寮曠敤鐨凬iGenerator鑾峰緱闃村獎鐢熸垚鐨勭潃鑹茬▼搴忓拰鎵闇鐨勬暟鎹紙渚嬪娣卞害鍋忕Щ錛夛紝鍚屾椂閫氳繃NiGenerator寮曠敤鐨凜amera鑾峰緱鍦烘櫙鍥句腑鐨勫彲瑙侀泦銆備笅涓姝ュ氨鏄鍙闆嗕腑鐨勬覆鏌撳璞℃坊鍔燬hadowWriteMaterial騫惰涓烘縺媧葷姸鎬侊紝鑰孲hadowWriteMaterial鐨勭被鍨嬫槸鏍規嵁NiDyamicEffect鐨勭被鍨嬫寚瀹氱殑銆傛渶鍚嶯iRenderClick灝變細鍚姩娓叉煋嫻佹按綰匡紝灝嗗彲瑙侀泦涓殑瀵硅薄鐨勬繁搴﹀叏閮ㄦ覆鏌撳埌ShadowMap涓?/p>
4. 鍦ㄧ涓涓猂enderClick涓敓鎴愪簡ShadowMap錛屼笅闈㈠氨瑕佷嬌鐢ㄨ繖浜汼hadowMap鎶曞皠闃村獎銆傚湪姣忎竴甯у紑濮嬩箣鍓嶏紝鐢ㄦ埛榪樺彲浠ヨ嚜宸辨寚瀹氫笉鎺ュ彈闃村獎鐨勮妭鐐癸紝鎵嬪姩灝嗗叾鎻掑叆NiShadowGenerator錛氾細m_kUnaffectedReceiverList涓傚湪娓叉煋BackBuffer鐨凴enderClick涓紝棣栧厛浼氬鍦烘櫙鍥句腑鐨勮妭鐐硅繘琛屼竴嬈¢亶鍘嗭紝灝嗕笉鍙楅槾褰辯殑鑺傜偣鏀懼叆NiShadowGenerator錛氾細 m_kUnaffectedCasterList鐨勫垪琛ㄣ傚湪瀵規瘡涓妭鐐硅繘琛屾覆鏌撴椂錛屼細閬嶅巻NiShadowManager涓墍鏈夌殑NiShadowGenerator錛屽垽鏂繖浜汵iShadowGenerator鏄惁瀵硅繖涓妭鐐規湁褰卞搷錛屽垽鏂殑瑙勫垯鏄鑺傜偣鏄惁瀛樺湪浜嶶naffectedReceiverList鍜孶naffectedCasterList榪欎袱涓摼琛ㄤ腑錛屽鏋滃瓨鍦ㄤ簬浠諱綍涓涓摼琛紝鍒欒妭鐐逛笉鍙楁NiShadowGenerator褰卞搷錛屽鏋滃彈姝iShadowGenerator褰卞搷錛岄偅涔堝氨灝嗚NiShadowGenerator涓婄殑ShadowMap鍜屾暟鎹洿鏂板埌鑺傜偣涓婄殑娓叉煋灞炴т腑錛孨iStandardMaterial浼氭牴鎹繖浜涙暟鎹夋嫨瀵筍hadowMap閲囨牱鐨勬柟寮忥紝騫跺皢緇撴灉娣峰悎鍒版渶緇堢殑杈撳嚭棰滆壊涓?/p>
鍊煎緱娉ㄦ剰鐨勬槸錛岀偣鍏夋簮鐨剆hadowMap榛樿鐨勬槸閲囩敤CubeMap瀹炵幇錛岀敤鎴峰彲浠ラ氳繃鎺ュ彛閫夋嫨涓嶄嬌鐢–ubeMap瀹炵幇錛屽綋閲囩敤CubeMap瀹炵幇鏃訛紝鍏夋簮鏃犳硶浜х敓杞槾褰便?/p>
涓轟簡楠岃瘉GameByro娓叉煋緋葷粺鐨勬墿灞曟э紝絎旇呭皾璇曠潃鍔犲叆浜嗕竴涓悗鏈熷鐞嗙壒鏁圫creen Space Ambient Occlusion錛圫SAO錛?鍗沖睆騫曠┖闂寸殑閬斀錛岀敱浜庝粎浠呬負浜嗙啛鎮塆ameByro鐨勬覆鏌撴祦紼嬶紝鎵浠ョ瑪鑰呭茍鏈SSAO綆楁硶鍋氭繁絀訛紝浠呬粎鐢ㄤ簡鑷繁綆鍖栫殑綆楁硶銆?/p>
鍦ㄦ覆鏌撹繃紼嬩腑鍏堝崟鐙嬌鐢ㄤ竴涓猂anderClick灝嗗満鏅腑鐨勬繁搴︽覆鏌撳埌涓寮犵汗鐞嗕笂錛岀劧鍚庡湪娓叉煋鍒板悗鍙扮紦鍐插尯鐨凴enderClick涓娣卞害綰圭悊榪涜閲囨牱錛屾墽琛孲SAO綆楁硶錛屽皢緇撴灉娣峰悎鍒版渶緇堢殑緇撴灉涓傞噰鏍風偣鐨勫亸縐誨潗鏍囨槸閫氳繃瀵逛竴緇勯殢鏈哄悜閲忚繘琛屽綊涓鍖栧啀涔樹互0~1涔嬮棿鐨勯殢鏈烘暟鑰岀敓鎴愮殑錛屽嵆闀垮害涓?~1涔嬮棿鐨勯殢鏈哄悜閲忋?/p>
PS浠g爜濡備笅錛?/p>
float VerticalRange:GLOBAL; //鎺у埗XY鏂瑰悜閲囨牱鑼冨洿鍙橀噺錛屽彲浠ュ湪搴旂敤紼嬪簭灞傚鍏惰繘琛岃皟鏁?/p>
float HorizontalRange:GLOBAL; //鎺у埗鍦╖鏂瑰悜閲囨牱鑼冨洿鐨勫彉閲?/p>
float calAO(float2 texCoord,float dw, float dh ) //閫氳繃褰撳墠鍍忕礌鎵鏍囧拰鍋忕Щ閲忚綆桝O
{
float2 coord = float2(texCoord.x + dw, texCoord.y + dh);
float4 CenterPos = tex2D(DepthSampler,texCoord);
float4 CurPos = tex2D(DepthSampler,coord);
float depthDiff = clamp(CenterPos.z - CurPos.z,0,VerticalRange);
float ao = depthDiff/length(CurPos.xyz - CenterPos.xyz);
return ao;
}
// Pixel shader
float4 PS_SSAO(VS_OUTPUT In) : COLOR
{
float2 texCoord = In.BaseTex;
float depth = tex2D(DepthSampler,texCoord).z;
float ao = 0.0;
float scale = HorizontalRange/depth; //鍥犱負閲囨牱鑼冨洿浼氬彈娣卞害褰卞搷錛屾晠闄や互姝ょ郴鏁般?/p>
for(int i=0; i<32; ++i)
{
float2 offset = arrRandomPt[i].xy* scale;
ao += calAO(texCoord, offset.x, offset.y);
}
ao/=32;
float4 color = tex2D(BaseSampler,texCoord);
color.xyz *= (1.0 - ao);
return color;
}
鏈緇堝疄鐜版晥鏋滃涓嬶細
SSAO鐢熸垚鐨勬槑鏆楀浘 鏃燬SAO鏉愯川
浠ヤ笅涓ゅ浘涓婂浘涓烘棤SSAO鏁堟灉錛屼笅鍥句負寮鍚疭SAO鍚庣殑鏁堟灉銆?/p>
GameByro鐨勫撫娓叉煋緋葷粺鏄瘮杈冪伒媧伙紝鎯沖姞鍏ヨ嚜宸辯殑娓叉煋嫻佺▼鏄瘮杈冨鏄撶殑錛屾澶栫敱浜嶳enderTarget鍜孯enderView閮藉彲浠ョ敱鐢ㄦ埛鎸囧畾錛屾墍浠ユ兂瀹炵幇鑷繁鐨剆hader鏁堟灉涓嶆槸寰堥毦銆傜劧鑰岋紝NiStanderMaterial鐨剆hade tree姣旇緝澶嶆潅錛屾誨叡楂樿揪6000琛屼唬鐮佷互涓婏紝榪囩▼闈炲父澶嶆潅錛岃繖灝辨槸璇達紝濡傛灉鎯沖疄鐜拌嚜宸辯殑鏉愯川澶勭悊嫻佺▼涔熻浠樺嚭鐩稿綋澶х殑宸ヤ綔閲忥紝闃村獎緋葷粺铏界劧瀹炵幇浜嗚緝浣庣殑鑰﹀悎搴︼紝浣嗘槸瀹炵幇榪囦簬澶嶆潅錛屼笉澶熺畝媧侀珮鏁堛?/p>
浣滆咃細鍙惰搗娑熸吉
GameByro鏄竴嬈炬垚鐔熺殑鍟嗕笟寮曟搸錛屽凡緇忚璁稿鎴愬姛鐨勫晢涓氶」鐩墍浣跨敤錛屼笉浠呭寘鎷枃鏄?銆佷笂鍙ゅ嵎杞?錛岃緪灝?絳夎法騫沖彴鐭ュ悕鍗曟満娓告垙錛岃繕鏈塃A鐨勫ぇ鍨?DMMORPG鎴橀敜online銆侴ameByro瀹屽叏鍩轟簬闈㈠瀵硅薄璁捐錛岀粨鏋勬竻鏅幫紝渚夸簬浣跨敤鍜屾墿灞曘傜伒媧葷殑鍙紪紼嬫覆鏌撴灦鏋勪嬌瀹冩瘮杈冨鏄撴敮鎸佹渶鏂扮殑鍥懼艦鎶鏈傚彟涓鏂歸潰錛岀敱浜庡己璋冮氱敤鎬э紝GameByro騫舵病鏈夊涓婂眰搴旂敤鍋氬お澶氱殑鏀寔錛屽叾宸ュ叿鍜屾彃浠跺ぇ澶氫粎鍏鋒湁涓浜涢氱敤鍔熻兘錛屾墍浠ュ畠鏇村儚鏄竴涓父鎴忓紑鍙戝浠惰屼笉鏄竴涓畬鏁寸殑FrameWork銆?
寮曟搸鐗規ф瑙堬細
· 璺ㄥ鉤鍙幫紙PC,XBOX360,PS3錛?
· 鍦烘櫙鍥捐〃鐜頒負灞傛鍖栫殑緇撴瀯
· 鍚岀洰鍓嶄富瑕佺殑寤烘ā宸ュ叿闆嗘垚錛堟彃浠舵敮鎸侊級
· 楂樻晥鐨勫彲瑙嗘ц鍓?
· 鍦ㄦ墍鏈夌殑騫沖彴涓婃敮鎸侀珮綰?D紜歡鍔犻?
· 楂樼駭綰圭悊鍜岀潃鑹叉晥鏋?
· 鍔ㄦ佺鎾炴嫻?
· 緇嗚妭鍒嗙駭琛ㄧ幇錛圠OD錛?
· 鐏墊椿鐨勬覆鏌擄紝鎺掑簭鍜岃鍓畻娉?
瀵硅薄緋葷粺錛?
GameByro鐨勫璞$郴緇熺殑浣跨敤閬嶅強鏁翠釜寮曟搸錛屽叾涓昏瀹炵幇濡傚璞$鐞嗭紝寮曠敤璁℃暟錛屽璞$敓瀛樻湡絳夊姛鑳姐傚彲浠ラ氳繃瀵瑰嚑涓熀綾葷殑緇ф壙鏉ヤ嬌鐢ㄥ璞$郴銆?
鍏朵富瑕佺壒鎬т富瑕佹湁錛?
1. 鏅鴻兘鎸囬拡錛堝紩鐢ㄨ鏁幫級
2. 榪愯鏃剁被璇嗗埆錛圧TTI錛?
3. 鍦烘櫙瀵硅薄澶嶅埗
4. 搴忓垪鍖栵紙瀵硅薄鏂囨。鍖栵級
5. 瀵硅薄鍛藉悕
6. 瀵硅薄鎵╁睍鏁版嵁鐨勭鐞?
7. 瀹氭椂鍣紙涓昏鐢ㄤ簬鍔ㄧ敾錛?
8. 澶氱嚎紼嬫搷浣?
椹卞姩灞?/strong>錛?
GameByro瀵瑰浘褰㈡帴鍙h繘琛屼簡灝佽錛屽皢鍥懼艦API浠庡紩鎿庣殑娓叉煋緋葷粺涓墺紱誨嚭鏉ワ紝鍦≒C緋葷粺涓婏紝GameByro鍚屾椂鏀寔DX9鍜孌X10涓ょ鎺ュ彛銆?
DX9娓叉煋鍣ㄧ壒鎬?/strong>錛?
l GameByro涓嶅厑璁稿涓狣X9Renderer瀵硅薄鍚屾椂瀛樺湪錛屼笖涓嶈兘涓嶥X10Renderer鍏卞瓨銆備絾鍦ㄥ悓涓甯у唴錛孏ameByro鐨凞X9Renderer鍙互鍚屾椂娓叉煋澶氫釜紿楀彛銆?
l GameByro鐨凞X9娓叉煋鍣ㄦ敮鎸佸璧勬簮鐨勫綰跨▼璁塊棶錛屽悓鏃朵篃鏀寔瀵硅祫婧愮殑棰勮澆錛屼絾鏄綰跨▼鐨勬搷浣滀粛鐒跺彈鍒頒弗鏍肩殑闄愬埗銆?
l DX9Renderer 鐨勫浐瀹氱綰胯挋鐨搷浣滄渶灝戞敮鎸?鍧楅楠鹼紙鐭╅樀錛夛紝鍚屾椂鍩轟簬shader鐨勮挋鐨搷浣滄敮鎸?0鍧楅楠箋?
l DX9Renderer閫氳繃瀵瑰悗鍙扮紦鍐茬殑澶氶噸閲囨牱鏀寔鍏ㄥ睆鎶楅敮榻匡紝鑼冨洿鍦?鍊嶅埌4鍊嶄箣闂淬?
l 澶у鏁扮‖浠跺湪DX9涓嬪鍑犱綍浣撶殑涓涓崟涓鐨刾iece鎵鑳芥帴鍙楃殑鍏夌収鏁伴噺閮芥湁涓瀹氱殑闄愬埗錛堟寚娓叉煋鐨勪竴涓壒錛夛紝濡傛灉瓚呰繃榪欎釜闄愬埗錛孏ameByro浼氭牴鎹窛紱繪垨鑰呮槸褰卞搷鍥犲瓙鏀懼純涓浜涘厜鐓с傛鍥犲姝わ紝鍦ㄥ簲鐢ㄧ▼搴忎腑錛屽綋8涓互涓婄殑閫愰《鐐瑰厜鐓т綔鐢ㄤ簬鍚屼竴瀵硅薄鏃訛紝灝變細鏈変竴浜涜鎶涘純銆?
l DX9Renderer鎻愪緵浜嗚鍙g殑宸﹀彸鍙嶅悜鍔熻兘錛岀敤浜庡疄鐜板悗瑙嗛暅銆佺珛鏂逛綋璐村浘琛ㄩ潰緇樺埗絳夊姛鑳姐?
l DX9Renderer鏀寔欏剁偣闆撅紝鍙互閫氳繃鐩稿叧鎺ュ彛璁劇疆闆劇殑鏈澶у箋?
l DX9Renderer瀹屽叏鏀寔DX鐨勭汗鐞嗘牸寮忋傚簲鐢ㄧ▼搴忓彲浠ュ皢鑷繁鐨凞irect3D textures鎻愪緵緇橤ameByro錛屽紩鎿庝細鑷姩灝嗗叾灝佽鍒拌嚜宸辯殑鏉愯川瀵硅薄涓茍鍏佽娣誨姞灞炴у拰鐗規晥銆傞氳繃鎻愪緵鑷繁鐨凞X鐨勭汗鐞嗘牸寮忥紝GameByro鑳藉姝g‘鐨勪嬌鐢ㄨ嚜騫墮潪澶╃劧鏀寔鐨勭汗鐞嗘牸寮忋?
l 綰圭悊鐩稿叧鐗規у拰闄愬埗錛欴X9Renderer闇瑕佹樉鍗℃敮鎸佸湪鍚屼竴pass涓嚦灝戜嬌鐢ㄤ袱涓汗鐞嗭紝鍚﹀垯娓叉煋鍣ㄥ垯涓嶄細鍒涘緩鎴愬姛銆傛澶栧彈闄愪簬紜歡鐨勫姛鑳借繕鏈夛細
1. Cube Mapping錛堢珛鏂逛綋綰圭悊錛?
2. Specular Bump Mapping錛堝嚬鍑擱暅闈㈣創鍥撅級
3. Diffuse Bump Mapping錛堝嚬鍑稿弽灝勮創鍥撅級
4. Non-Power-of-Two Texture Size錛堢紪闀塊潪浜屾暣鏁板箓鐨勭汗鐞嗭級錛氫嬌鐢ㄨ繖縐嶇汗鐞嗘湁濡備笅闄愬埗錛氱汗鐞嗗鍧妯″紡蹇呴』璁劇疆涓篶lamp錛孧ipmapping涓嶈兘浣跨敤銆?
5. Texture Downsizing錛堢汗鐞嗙簿搴︾緝鍑忥級
6. Texture Compression錛堝帇緙╃汗鐞嗭級錛孌X9Renderer鏀寔杞藉叆緇忚繃鍘嬬緝鐨勭汗鐞嗘牸寮忥紝騫舵彁渚涗簡綰圭悊鍗蟲椂鍘嬬緝鐨勫姛鑳姐傚鏋滅‖浠舵敮鎸佸帇緙╃汗鐞嗭紝DX9Renderer鍙互灝嗙粡榪囧帇緙╃殑綰圭悊鏁版嵁鐩存帴浜ょ粰紜歡澶勭悊錛屽惁鍒橠X9Renderer浼氳嚜鍔ㄥ皢鏁版嵁瑙e帇鍚庡啀浜ょ粰紜歡銆?
7. Texture Apply Modes Supported錛欴X9Renderer涓嶆敮鎸丄PPLY_DECAL綰圭悊搴旂敤妯″紡銆?
8. Texture Format Requests錛堢汗鐞嗘牸寮忚姹傦級錛氱簿紜殑綰圭悊鍍忕礌鏄犲皠渚濊禆浜庣洰鏍囩‖浠跺拰鏄劇ず鍣ㄥ儚绱犱綅瀹姐?
9. Palettized Texture Formats錛堣皟鑹叉澘綰圭悊鏍煎紡鐨勬敮鎸侊級銆?
10. Sphere Mapping錛堢悆闈㈡槧灝勶級錛欸ameByro涓墍鏈夌殑娓叉煋鍣ㄩ兘鏀寔涓栫晫絀洪棿涓殑鐞冮潰鏄犲皠銆?
11. DX9Renderer鏀寔鍔犺澆鍖呮嫭DDS銆乀GA銆丅MP鏍煎紡鐨勬枃浠躲侰ube textures鍜寁olume textures閮借兘琚紜殑鍔犺澆錛屼絾鏄彧鑳介氳繃涓夌淮鍧愭爣瀵誨潃銆?
12. GameByro鐨勭紪杈戝櫒鏀寔瀵煎嚭DX鍘熸牸寮忕殑綰圭悊錛屽茍鍦ㄥ姞杞界殑鏃跺欎笉榪涜鏍煎紡杞崲銆傚皢DX鏍煎紡鐨勭汗鐞嗙洿鎺ヤ氦緇橠X澶勭悊銆?
寮曟搸娓叉煋緋葷粺鍒嗘瀽
GameByro鐨勬覆鏌撴槸鐢卞撫娓叉煋緋葷粺(Frame Rendering System) 鎺у埗鐨勶紝甯ф覆鏌撶郴緇熷皝瑁呬簡姣忎竴涓壒嬈$殑緇樺埗榪囩▼錛岃繖鏍峰彲浠ユ柟渚跨殑鎺у埗鏁翠釜娓叉煋嫻佺▼銆?
闃村獎緋葷粺錛?/strong>
GameByro鐨勯槾褰辯郴緇熸槸浣跨敤甯ф覆鏌撶郴緇熺殑鍏歌寖錛岄氳繃瀵瑰凡鏈夌殑綾諱互緇ф壙鐨勬柟寮忚繘琛屽姛鑳芥墿灞曪紝瀹炵幇浜嗙伒媧葷殑闃村獎娓叉煋鍔熻兘銆侴ameByro鑷韓鏀寔涓夌鍏夋簮鐨勯槾褰卞浘鐢熸垚錛屽垎鍒負鐐瑰厜婧愶紙鍏ㄦ柟鍚戝厜錛夈佸鉤琛屽厜銆佽仛鍏夌伅銆?
闃村獎緋葷粺緇熶竴鐢變竴涓鐞嗗櫒璐熻矗鎺у埗銆傞槾褰辯殑綆楁硶琚皝瑁呮垚浜嗕竴涓釜綾誨璞′腑銆傜郴緇熶腑鍚屾椂瀛樺湪鐫鍑犵闃村獎鎶鏈紝鍗沖彲浠ラ夋嫨浣跨敤錛屼篃鍙互鍚屾椂浣跨敤鍑犵闃村獎鎶鏈綔鐢ㄤ簬鍚屼竴鍑犱綍浣撱傞槾褰辯郴緇熶細鑷姩瑁佸壀鎺夐偅浜涙病鏈夐槾褰辨帴鍙椾綋鐨勫厜婧愶紝鍚屾椂鍦ㄨ綆楁瘡涓厜婧愭墍浜х敓鐨勯槾褰辨椂錛屼細瑁佸壀鎺夐偅浜涗笉鍙楁鍏夋簮褰卞搷鐨勫嚑浣曚綋錛岃揪鍒版ц兘浼樺寲鐨勭洰鐨勩傜敤鎴峰緢瀹規槗瀵歸槾褰辯郴緇熻繘琛屾墿灞曪紝瀹炵幇鑷繁鐨勯槾褰辯畻娉曘?
GameByro鐨勯槾褰變富瑕佹槸鍩轟簬shadowMap鎶鏈紝鐐瑰厜婧愪嬌鐢ㄤ簡绔嬫柟浣撻槾褰卞浘錛岃蔣闃村獎鍒欎嬌鐢ㄤ簡鏂瑰樊闃村獎鍥炬妧鏈紙VSM錛夈?
GameByro鐨勯槾褰辯郴緇熼泦鎴愬埌浜嗗満鏅紪杈戝櫒涓紝鍙互鍦ㄧ紪杈戝櫒涓洿鎺ヤ負鍏夋簮鎸囧畾闃村獎鏁堟灉錛屾墍瑙佸嵆鎵寰楋紝鎻愰珮浜嗗紑鍙戞晥鐜囥?
錛堝鍥炬墍紺猴紝鍦ㄧ紪杈戝櫒涓悓鏃朵嬌鐢ㄧ偣鍏夋簮闃村獎鍜屾柟鍚戝厜浜х敓鐨勮蔣闃村獎錛?
鍦板艦緋葷粺錛?/strong>
GameByro鐨則errain鏄畝鍗曟槗鐢ㄧ殑錛屽茍涓旀柟渚夸負鍏舵墿灞曪紝鐢ㄤ互婊¤凍欏圭洰鐨勫叾浠栧姛鑳介渶姹傘?
鍦板艦緋葷粺鐢變互涓嬪嚑閮ㄥ垎緇勬垚錛?
1. NiTerrainComponent錛氭槸鏁翠釜鍦板艦緋葷粺鐨勫叆鍙o紝閫氳繃Terrain Interactor鍙互鍍忚闂鍣ㄤ竴鏍瘋闂甆iTerrainComponent鎵鏈夌殑sub-component銆?
2. Terrain Interactor 鍦板艦榪唬鍣紝閫氳繃Terrain Interactor鍙互鍚姩鎵鏈夌殑鏁版嵁鏌ヨ錛屾瘮濡傜畝鍗曠殑紕版挒媯嫻嬶紝meta-data鏌ヨ錛岄珮搴﹀浘瀵煎叆鍜屾枃浠跺姞杞姐傚嚑涔庢墍鏈夊熀浜巘errain緋葷粺鐨勬搷浣滈兘鏄氳繃Terrain Interactor瀹屾垚鐨勩?
3. NiTerrainSectorComponent 鐨勫唴閮ㄤ富瑕佸寘鍚竴涓礋璐g粍緇囧湴褰㈡暟鎹潡鐨勫洓鍙夋爲銆傛瀵硅薄璐熻矗浠庣鐩樺姞杞芥墽琛岀墿浣撲笌鍦板艦鐨勫皠綰跨浉浜ゆ煡璇紝杞崲鍦板艦鍑犱綍浣擄紝綆$悊鍐呴儴璧勬簮錛堝寘鎷叡浜殑欏剁偣嫻佸拰shader錛夈傚悓鏃禢iTerrainSectorComponent榪樿礋璐h繘琛屽洓鍙夋爲鐨勯伄鎸℃煡璇㈠拰鐢熸垚鍙闆嗐?
4. Data Leaves and Blocks 鍥涘弶鏍戠殑鍒囧垎絳夌駭鏄氳繃NiTerrainComponent璁劇疆鐨勶紝鍥涘弶鏍戠殑姣忎釜鑺傜偣閮藉寘鍚竴涓湴褰㈠潡錛屽潡鐨勮竟闀垮繀欏繪槸2鐨勬暣鏁板箓銆傚洓鍙夋爲鐨勬牴鑺傜偣絳夌駭涓篘錛屽彾鑺傜偣涓?錛岀敱楂樺埌搴曠粏鑺備緷嬈″鍔狅紝絳夌駭涓?鐨勫彾鑺傜偣鎵鍖呭惈鐨勫湴褰㈠潡鎷ユ湁鏈楂樼殑緇嗚妭銆?
5. Material Layers錛氬湴褰㈢郴緇熼氳繃鎺╃爜鍥炬潵涓哄湴褰㈡寚瀹氭潗璐ㄣ傛帺鐮佺殑鏁版嵁鎸囧畾浜嗗湴琛ㄧ殑姣忎釜閮ㄥ垎鎵瀵瑰簲鐨勬潗璐ㄣ傚悓涓鍦拌〃鏈澶氭敮鎸佸洓縐嶆潗璐紝鏍規嵁鍚勮嚜鐨勬潈閲嶈繘琛屾販鍚堬紝鏉冮噸鏁版嵁涔熸槸閫氳繃鎺╃爜鏉ヨ幏寰椼?
鏉愯川鍦ㄥ湴褰㈢殑娓叉煋緋葷粺涓壆婕旂潃寰堢壒孌婄殑瑙掕壊錛屽彲浠ラ氳繃瀵規潗璐ㄦ寚瀹歮eta-data鏉ラ檮杞藉叾浠栫殑淇℃伅錛堟瘮濡傚湪闆湴琛岃蛋鐨勫0闊籌級錛屽悓鏃朵篃鍙互閫氳繃瀵規潗璐ㄧ殑綰圭悊璐村浘涓哄湴琛ㄥ鍔犻《鐐規垨鍍忕礌鐫鑹茬▼搴忋傛澶栨瘡縐嶆潗璐ㄥ彲浠ュ寘鍚涓嬫寚瀹氱被鍨嬬殑綰圭悊璐村浘錛?
l Diffuse/Base Map 鍙嶅皠璐村浘錛岄氳繃3鎴?涓氶亾鍐沖畾鍙嶅皠鍏夌殑棰滆壊銆?
l Detail Map 緇嗚妭璐村浘錛屼負鍙嶅皠璐村浘鎻愪緵Alpha鍊箋?
l Normal Map 娉曠嚎璐村浘銆?
l Parallax Map 瑙嗗樊璐村浘錛岀敤鏉ヤ繚瀛樿〃闈㈠儚绱犵殑楂樺害鍋忕Щ淇℃伅銆?
姝ゅGameByro榪樻彁渚涗簡綆鍗曠殑鍦板艦灝勭嚎榪借釜鍜屾按闈㈡覆鏌撱傚湴褰㈠皠綰胯拷韙洰鍓嶇殑瀹炵幇寰堢畝鍗曪紝灝辨槸鐢ㄤ竴涓皠綰挎煡璇㈠湴琛ㄧ殑涓夎褰紝浠ュ悗浼氫笌Physics榪涜闆嗘垚錛屾敮鎸侀氳繃鐗╃悊寮曟搸l瀹炵幇鐗╀綋涓庡湴琛ㄧ殑紕版挒媯嫻嬨傛按闈㈡覆鏌撲富瑕佹槸鐢ㄤ袱寮犵汗鐞嗗姩鐢繪販鍚堣屾垚錛岄氳繃鍑瑰嚫璐村浘鏉ヨ〃鐜版按娉€傚紩鎿庝負姘撮潰鎵鍦ㄧ殑鍦拌〃鐢熸垚涓涓伆搴﹀浘錛屼繚瀛樺湴琛ㄨ窛紱繪按闈㈢殑楂樺害銆傝繖閲岄鍏堝畾涔変簡涓ょ棰滆壊錛屾繁姘撮鑹插拰嫻呮按棰滆壊錛屽鏋滄按闈互涓嬫病鏈夊湴琛ㄥ氨鐩存帴浣跨敤娣辨按棰滆壊銆傚啀鍍忕礌鐫鑹插櫒涓彲浠ュ楂樺害鍥捐繘琛岄噰鏍鳳紝浠庤屽緱鍑哄綋鍓嶅儚绱犵殑姘存繁錛岀劧鍚庢牴鎹繖涓繁搴﹀湪娣辮壊鍜屾祬鑹蹭箣闂磋繘琛屽樊鍊鹼紝寰楀埌鏈緇堟按鐨勯鑹層備笉榪囪繖涓晥鏋滃茍涓嶆槸寰堢悊鎯籌紝濡傞渶鏇村ソ鐨勬晥鏋滐紝榪橀渶瑕佸鍏惰繘琛屾墿灞曪紝姣斿璇達紝澧炲姞鍙嶅皠鍜屾姌灝勭瓑銆?
鏉愯川錛?
GameByro鐨勬潗璐ㄤ富瑕佹槸閫氳繃3DMAX鐨勬彃浠惰繘琛岀紪杈戠殑錛屽茍鎻愪緵浜嗘爣鍑嗙殑鏉愯川鑺傜偣銆?
錛堝湪GameByro涓紝鏉愯川鑺傜偣鐨勪富瑕佷綔鐢ㄦ槸璐熻矗鏍規嵁鐫鑹茶繃紼嬬敓鎴愮浉搴旂殑shader浠g爜錛夎繖涓妭鐐逛竴鍏辨湁9涓氶亾錛屽茍鎻愪緵浜嗗ぇ閲忓彲渚涜皟鏁寸殑鍙傛暟錛岃繖鏍峰氨鍙互璁╃編鏈柟渚跨殑浣跨敤閫愬儚绱犲厜鐓с佽宸創鍥俱佺幆澧冧綋璐村浘榪欎簺鏁堟灉錛屽湪娓告垙涓紝GameByro閫氳繃涓嶅悓鐨勬潗璐ㄥ睘鎬у拰涓嶅悓鐨勫厜鐓х幆澧冪紪璇戝嚭涓嶅悓鐨剆hader浠g爜錛屼互浜岃繘鍒剁殑褰㈠紡淇濆瓨鍦ㄧ鐩樹笂錛屼笅嬈″惎鍔ㄦ椂杞藉叆鍐呭瓨錛岃繖鏍峰氨涓嶇敤閲嶅緙栬瘧錛屼絾鍦ㄧ涓嬈¤繘鍏ユ父鎴忎腑鏃朵細鏈変簺寤惰繜銆傜伒媧誨己澶х殑鏉愯川鏄涓栦唬寮曟搸鐨勯噸瑕佺壒寰侊紝GameByro鍦ㄨ繖鏂歸潰鍋氬埌浜嗙伒媧伙紝浣嗘槸緹庢湳浠嶇劧涓嶈兘閫氳繃鍙鍖栧伐鍏鋒帶鍒舵潗璐ㄧ殑澶勭悊榪囩▼錛屽彧鑳界紪杈戣祫婧愬拰淇敼鍙傛暟錛岀紪杈戞ц繕涓嶅寮哄ぇ銆?
Shader錛?
GameByro鎻愪緵浜嗕竴涓瀬鍏鋒墿灞曟х殑shader緋葷粺錛屽茍灝嗗畠涓庤壓鏈垱浣滃伐鍏風揣瀵嗙粨鍚堛侴ameByro瀹氫箟浜嗚嚜宸辯殑shader鏍煎紡錛屽熀浜庢枃鏈殑.NSF鏂囦歡鍜屽熀浜庝簩榪涘埗鐨?NSB鏂囦歡錛?NSF鏂囦歡緙栬瘧鍚庣敓鎴?NSB鏂囦歡錛岃繖涓繃紼嬪嵆鍙互鍦ㄥ紑鍙戞椂瀹屾垚錛屼篃鍙互鍦ㄨ繍琛屾椂榪涜銆?.NSF鏂囦歡浣跨敤鐨勬槸GameByro鑷畾涔夌殑璇硶錛屽茍浣跨敤鑷繁鐨勮娉曞垎鏋愬櫒灝嗗叾緙栬瘧鎴愮浉鍏沖鉤鍙扮殑浠g爜銆傚疄闄呬笂錛孏ameByro鐨剆hader緋葷粺鍦ㄥ簲鐢ㄧ▼搴忓拰GPU紼嬪簭涔嬮棿鍋氫簡涓灞傚皝瑁咃紝灞忚斀浜嗕笉鍚屽鉤鍙頒箣闂寸殑宸紓錛屼嬌寰楀簲鐢ㄧ▼搴忓彲浠ョ敤鐩稿悓鐨勬帴鍙f潵涓嶨PU涔嬮棿榪涜浜や簰錛岃孏PU紼嬪簭鏈緇堣繕鏄氳繃cg鎴杊lsl鏉ュ疄鐜扮殑錛岃繖鏍峰仛鐨勫ソ澶勬槸錛屽綋騫沖彴鍙戠敓鏀瑰彉鏃訛紝鍙渶瑕佹牴鎹叿浣撶殑騫沖彴鏉ョ紪鍐欑浉搴旂殑shader紼嬪簭錛岃屼笉闇瑕佸幓淇敼搴旂敤紼嬪簭銆傚綋鐒訛紝shader緋葷粺涔熺洿鎺ユ敮鎸乧g鍜宧lsl鏍煎紡鐨勬枃浠訛紝浣跨敤鏂規硶鍚孨SF銆丯SB鏂囦歡鐩鎬技銆侴ameByro鐨凷hader緋葷粺鎻愪緵浜嗕竴濂楀畬鏁寸殑鏌ラ敊鏈哄埗錛屾柟渚夸嬌鐢ㄨ呭紼嬪簭榪涜debug銆?
GameByro鐨剆hader緋葷粺闆嗘垚鍒頒簡鎵鏈夌殑閰嶅寮鍙戝伐鍏蜂腑錛岃繖鏍峰氨瀹炵幇浜嗘墍瑙佸嵆鎵寰楋紝緹庢湳鍦ㄥ伐鍏蜂腑灝卞彲浠ョ洿鎺ョ湅鍒拌祫婧愬湪娓告垙涓殑鏁堟灉錛屼粠鑰屾彁楂樹簡寮鍙戞晥鐜囥?
GameByro閫氳繃寮曞叆鑷繁鐨剆hader鏂囦歡鏍煎紡涓鴻法騫沖彴鎻愪緵浜嗘柟渚匡紝鍚屾椂涔熷鍔犱簡緋葷粺鐨勫鏉傛э紝浣跨敤璧鋒潵紼嶅井鏈夌偣綣佺悙錛屽紑鍙戜漢鍛樺張涓嶅緱涓嶅幓鐔熸倝瀹冪殑璇硶錛屽鏋滃紑鍙戜腑涓嶈冭檻璺ㄥ鉤鍙扮殑璇濓紝鎯寵鑷繁寮鍙戠壒鏁堬紝涔熷彲浠ヤ笉浣跨敤NSF鏂囦歡錛岀洿鎺ヤ嬌鐢╢x鏍煎紡鐨勬枃浠躲?
寮曟搸鑷甫鐨勭壒孌婃潗璐?/strong>錛?
AdditiveLightMapsMaterial錛堥檮鍔犲厜鐓у浘鏉愯川,浣跨敤棰濆鐨勫厜鐓у浘綰圭悊鏉ユ販鍚堝綋鍓嶅満鏅厜鐓ц綆楃殑緇撴灉銆備笅闈㈢殑鎻掑浘鏄嬌鐢ㄦ姇灝勫厜鐓у浘綰圭悊鐨勬覆鏌撴晥鏋溿傦級
AlphaTextureBlender錛堢汗鐞咥lpha娣峰悎錛?
Aniso錛堝悇鍚戝紓鎬у厜鐓э紝宸︿笅鐨勯鏈猴級銆?strong>Halo ASMSkinningLighting錛堝弬涓庡厜鐓ц綆楃殑楠ㄩ鍔ㄧ敾钂欑毊錛?
ASMSkinningNoLighting錛堜笉鍙備笌鍏夌収璁$畻鐨勯楠煎姩鐢昏挋鐨紝鏁堢巼緇忚繃浜嗕紭鍖栵級
BaseBumpWithSpatialGlow錛堝甫鏈夎緣鍏夋晥鏋滅殑鍑瑰嚫璐村浘錛?strong> Chrome錛堥噾灞炲琛紝浣跨敤鍩烘湰綰圭悊銆佹極鍙嶅皠cube map銆侀暅闈㈠弽灝刢ube map銆佹硶綰胯創鍥劇瓑鏁堟灉瀹炵幇綾諱技浜庨噾灞炶〃闈㈢殑鍏夋辰鍜岃川鎰燂紝騫舵敮鎸佸熀浜庢鏁堟灉鐨勮挋鐨搷浣滐級
Colorize錛堜嬌鐢ㄤ竴涓嚜瀹氫箟鐨勫睘鎬ф潵鍔ㄦ佺殑璁劇疆鎴栬呬慨鏀歸鑹詫級
FXSkinning and HLSLSkinning錛堜嬌鐢ㄥ彲緙栫▼娓叉煋綆$嚎榪涜楠ㄩ鍔ㄧ敾鐨勮挋鐨級
GeneralGlow錛堟櫘閫氳緣鍏夋晥鏋滐級
GeneralDiffuseSpecularGlow(鏅氶暅闈㈠弽灝勯珮鍏夎緣鍏?
GeneralDiffuseSpecular錛堟櫘閫氶暅闈㈠弽灝勯珮鍏夛紝鏀寔钂欑毊鎿嶄綔錛?
Dot3BumpMap錛堝嚬鍑歌創鍥撅紝鍙沖浘涓鴻挋鐨晥鏋滐級
Glass (鐜葷拑鏁堟灉)
OilyFilm錛堟補鐘惰杽鑶滐級
LuminanceTransfer錛堢被浼間簬鐑簮渚︽祴浠殑鏁堟灉錛?strong> Outlining錛堣摑鍥炬垨鑽夊浘錛?
ParallaxMapping錛堣宸創鍥撅紝涓嬮潰鍙沖浘鏄嬌鐢ㄤ簡ParallaxMapping鐨勬晥鏋滐級
PerPixelLighting錛堥愬儚绱犲厜鐓э紝鍚屾椂鏀寔鍥哄畾綆$嚎鍜屽彲緙栫▼娓叉煋綆$嚎錛?
SkinnedToonShadingWithOutline錛堝崱閫氭覆鏌擄紝鏀寔楠ㄩ钂欑毊銆佹弿杈癸級
綰圭悊錛?
GameByro鐨勭汗鐞嗙郴緇熸敮鎸佸閲嶇汗鐞嗐佹姇灝勭汗鐞嗐佸姩鎬佺汗鐞嗐佺壒鏁堢汗鐞嗭紝騫朵笖浣跨敤綰圭悊鐨勪竴浜涢珮綰х壒鎬ф槸騫沖彴鏃犲叧鐨勩傚綋鐒禛ameByro涓汗鐞嗙殑鍔熻兘浠嶇劧鍙楅檺浜庣‖浠剁壒寰併備富瑕佺壒鎬у拰闄愬埗瑙佹覆鏌撳櫒銆?
宸ュ叿鍙婃彃浠訛細
GameByro鎻愪緵浜嗗満鏅紪杈戝櫒錛岃祫婧愭祻瑙堝櫒錛岃祫婧愮殑鐗╃悊妯″瀷嫻忚鍣ㄣ佸姩鐢葷紪杈戝伐鍏鳳紝瀛椾綋鍒涘緩宸ュ叿錛屼互鍙?DMAX銆丮AYA鎻掍歡錛屾潗璐ㄧ紪杈戞槸鍦ㄦ彃浠朵腑榪涜鐨勶紝榪欏宸ュ叿鍖呭惈浜嗗畬鏁寸殑3D璧勬簮寮鍙戞祦紼嬨?strong> 鐗╃悊緋葷粺
GameByro閫氳繃PhysX鎻愪緵鐗╃悊浠跨湡妯℃嫙錛屽彧闇鍑犺綆鍗曠殑浠g爜灝卞彲浠ュ皢GameByro鐨勫満鏅拰PhysX寤虹珛璧瘋仈緋伙紝涓嶈繃闇瑕佸湪鏄懼紡鐨勮皟鐢ㄧ浉鍏蟲帴鍙f潵榪涜鐗╃悊浠跨湡瀵硅薄鍜屽満鏅璞¢棿鐨勫悓姝ワ紝鍗沖皢鐗╃悊浠跨湡鐨勭粨鏋滀綔鐢ㄤ簬鍦烘櫙涓殑瀵硅薄銆傚悓鏃訛紝榪樺彲浠ラ氳繃鍙傛暟鏉ュ喅瀹氭槸鍚﹂渶瑕佺瓑寰呯墿鐞嗕豢鐪熻繍綆楃殑緇撴灉銆傝繖灝變繚璇佷簡涓瀹氱殑鐏墊椿鎬э紝渚嬪錛岀敤鎴峰彲浠ヤ笉瀵歸潤鎬佺墿浣撹繘琛屽悓姝ワ紝杈懼埌浼樺寲鐨勭洰鐨勩傝繕鍙互閫氳繃鎶婃洿鏂扮殑鎺ュ彛鏀懼湪涓嬩竴嬈″驚鐜紑濮嬬殑鏃跺欒皟鐢紝榪欐牱鍙互鍑忓皯鐢變簬絳夊緟鐗╀綋浠跨湡妯℃嫙閫犳垚綰跨▼鐨勯樆濉烇紝鍏呭垎鐨勫埄鐢ㄤ簡CPU璧勬簮銆?
綺掑瓙緋葷粺錛?
GameByro鐨勭矑瀛愮郴緇熶負3ds max 鍜?Maya絳夌矑瀛愮敓鎴愬伐鍏鋒彁渚涗簡瀹屾暣鐨勬彃浠剁郴緇燂紝騫跺畬鍏ㄦ敮鎸佽蔣綺掑瓙錛屽嵆綺掑瓙浼氬彈鍒板姏鐨勫獎鍝嶃?
嫻佸鐞嗗紩鎿?/strong>錛?
GameByro瀹炵幇浜嗕竴涓畬鍏ㄨ法騫沖彴鐨勬祦澶勭悊寮曟搸銆備嬌鐢ㄨ呭彲浠ユ柟渚跨殑鍒╃敤瀹冨畬鎴愬綰跨▼浠誨姟錛屽璧勬簮鐨勫姞杞界瓑錛屽畬鍏ㄥ彂鎸ュ澶勭悊鍣ㄥ鉤鍙扮殑濞佸姏錛岃屼笉鐢ㄥ叧娉ㄥ簳灞傜粏鑺傘?
鏁堢巼鍒嗘瀽錛?/strong>
涓轟簡瀵笹ameByro榪涜鍏ㄩ潰鐨勮瘎浼幫紝絎旇呰瘯鐫瀵笹ameByro鐨勬覆鏌撴晥鐜囪繘琛屼簡綆鍗曠殑嫻嬭瘯錛屾湰浜虹殑鏈哄櫒閰嶇疆濡備笅錛?
l CPU錛欵2180
l GPU錛?400PRO
l 鍐呭瓨錛?GB
鍩烘湰鍙互浠h〃褰撳墠涓綆绔帺瀹剁殑閰嶇疆銆?
鍦烘櫙涓錛?
涓嬪浘涓轟竴涓ぇ鐨勫澶栧湴褰㈠満鏅紝鍖呮嫭寤虹瓚鐗┿佹按闈紝鍦拌〃浣跨敤浜嗘硶綰胯創鍥撅紝闄や簡妞嶈浠ュ錛屽熀鏈寘鍚玀MORPG鐨勫ぇ閮ㄥ垎瀹ゅ鍦烘櫙瑕佺礌銆傛渶鍚庢祴璇曠殑緇撴灉騫沖潎甯ф暟涓?1甯с傚撫鏁板亸浣庣殑鍘熷洜鏄暣涓満鏅嬌鐢ㄤ簡閫愬儚绱犲厜鐓э紝鍚屾椂娌℃湁閲囩敤LOD榪涜浼樺寲銆?
鍦烘櫙浜?/strong>錛?
濡傚浘鎵紺哄満鏅腑鏈?00涓鑹插湪鍋氫笉鍚岀殑鍔ㄧ敾錛屾瘡涓鑹叉湁51涓楠鹼紝鏁翠釜鍦烘櫙鍏辨湁287900涓杈瑰艦鍜?56600涓《鐐癸紝騫朵笖鍦烘櫙涓湁涓涓偣鍏夋簮鍜屽鉤琛屽厜婧愶紝鍦ㄦ病鏈夐槾褰辯殑鎯呭喌涓嬪撫鏁板ぇ綰﹀湪27~28甯у乏鍙熾傝繖浜涢楠煎姩鐢諱嬌鐢ㄤ簡GameByro鎻愪緵鐨勯楠煎姩鐢諱紭鍖栨柟娉曪紝鎬ц兘鏈変竴瀹氭彁鍗囥?
鐢變互涓婄粨鏋滃彲浠ョ湅鍑猴紝GameByro鐨勯楠煎姩鐢繪覆鏌撴晥鐜囧皻鍙紝鑰屽澶栧湴褰㈡覆鏌撶郴緇熺殑鎬ц兘紼嶆樉涓嶈凍錛屽啀娌℃湁瑙掕壊鍜屾琚殑鎯呭喌涓嬶紝浠呰兘杈懼埌22甯у乏鍙籌紝濡傛灉鍦ㄥ疄闄呯殑娓告垙鐜榪樿綆椾笂鍏朵粬娓告垙緋葷粺錛堢綉緇溿侀昏緫銆乁I絳夛級鐨勬ц兘娑堣楋紝榪欐槸涓嶈凍浠ヨ鐜╁嫻佺晠榪涜娓告垙鐨勶紝榪橀渶榪涗竴姝ユ墜鍔ㄧ殑浼樺寲銆?
鎬葷粨錛?
GameByro鎷ユ湁涓濂楃伒媧葷殑鏋舵瀯錛屼究浜庝嬌鐢ㄥ拰鎵╁睍錛屾槗浜庝笂鎵嬶紱閰嶅鐨勫紑鍙戝伐鍏鋒瘮杈冮綈鍏紝鎷ユ湁瀹屾暣鐨勭編鏈紑鍙戞祦紼嬶紱瀹屽叏鏀寔璺ㄥ鉤鍙幫紝渚夸簬娓告垙鐨勭Щ妞嶏紱鍚屾椂鐢變簬涓轟簡淇濊瘉鐏墊椿鎬э紝鍦ㄨ璁′笂闈㈡瘮杈冨亸閲嶄簬鍔熻兘鍜屾墿灞曪紝鑰屼笉鏄ц兘銆?
楂樺害鐨勫彲瀹氬埗鎬у甫鏉ョ殑鏄緝浣庣殑鏁村悎錛孏ameByro娌℃湁鎻愪緵娓告垙妗嗘灦錛屽湴鍥劇紪杈戝櫒涔熶粎浠呭疄鐜頒簡鏈閫氱敤鐨勫姛鑳斤紝鍗沖湴琛ㄥ拰鐗╀歡鐨勬憜鏀俱傝繖灝辮鏄庯紝濡傛灉瑕佷嬌鐢℅ameByro寮鍙戜駭鍝侊紝灝遍渶瑕佽嚜宸辨暣鍚圙ameByro錛屽茍瀵瑰叾榪涜涓瀹氱殑淇敼鍜屾墿灞曘傝繖涔熸槸瀹冧笌UnrealEngine3鍖哄埆鏈澶х殑鍦版柟銆?
浣滆咃細鍙惰搗娑熸吉
]]>
GameBryo鎷ユ湁涓濂楀鏉傜殑鏉愯川緋葷粺錛岃繖濂楁潗璐ㄧ郴緇熷彲浠ユ牴鎹覆鏌撳璞$殑鐘舵佸拰灞炴х敓鎴愪笉鍚岀殑shader浠g爜錛屾彁楂樹簡娓叉煋嫻佺▼鐨勯傚簲鎬э紝鍙互浣夸綘瀹氫箟涓濂楁潗璐ㄨ兘閫傚簲澶氱娓叉煋瀵硅薄銆傚悓鏃訛紝GameByro灝唖hader鐨勫垵濮嬪寲鍜屼嬌鐢ㄦ彃浠跺寲錛屾柟渚夸笌緹庢湳宸ュ叿闆嗘垚錛屽茍涓斿疄鐜頒簡騫沖彴鏃犲叧鎬с備負浜嗗疄鐜拌繖浜涚洰鐨勶紝GameByro浣跨敤浜嗕竴濂楀鏉傜殑鏈哄埗錛屾湰鏂囦富瑕佽В鏋怗ameByro濡備綍鐢熸垚銆佺紪璇戝茍浣跨敤shader浠g爜銆?
GameBryo鐨剆hader鐨勬帴鍙e皝瑁呭湪NiShader涓紝欏剁偣鏁版嵁嫻佸0鏄庯紝甯擱噺琛ㄧ殑璁塊棶錛屾覆鏌撶姸鎬佺殑璁劇疆閮芥槸閫氳繃榪欎釜綾伙紙鏈夌偣綾諱技浜嶥3Deffect錛夈傚湪紼嬪簭榪愯NiShader鏄敱NiShaderFactory璐熻矗綆$悊鐨勶紝NiShaderFactory閫氳繃NiShaderLibrary浠庢枃浠朵腑鍒涘緩shader錛岀敤鍏ㄥ眬鎬х殑map綆$悊璧鋒潵銆侼iShaderLibrary閫氳繃瑙f瀽shader鏂囨湰鍒涘緩NiShader瀵硅薄錛屽茍璋冪敤3D鍥懼艦鎺ュ彛緙栬瘧shader浠g爜錛屽皢榪欎釜綾諱互dll鐨勫艦寮忓皝瑁咃紝灝卞彲浠ヤ綔涓烘彃浠舵潵浣跨敤銆侼iShader綾葷殑鍒涘緩鍙互閫氳繃瑙f瀽鏂囦歡鏉ヨ繘琛岋紝涔熷彲浠ラ氳繃C++鐨勭被鏉ュ畾鍒訛紝鍙渶浠嶯iShader涓婄戶鎵垮嵆鍙侴ameByro涓篜C騫沖彴鎻愪緵浜嗕竴涓狽iD3DXEffectShaderLib搴擄紝榪欎釜搴撴彁渚涗簡瑙f瀽shader鏂囦歡鍜屽垵濮嬪寲shader瀵硅薄鐨勫姛鑳姐傜敤鎴峰彧闇鎸塆ameByro瀹氫箟鐨勬牸寮忕紪鍐檚hader浠g爜鐨勮鎰忓拰娉ㄩ噴錛孨iD3DXEffectShaderLibrary灝變細鏍規嵁鏂囨湰鏉ュ垱寤篘iD3Dshader瀵硅薄錛屽湪搴旂敤紼嬪簭涓氨鍙互閫氳繃Techinqe鐨勫悕縐版潵璁塊棶榪欎釜瀵硅薄銆傞氳繃榪欑鏈哄埗錛屾垜浠皢shader鏂囨湰鏂囦歡鏀懼湪鐩稿叧緹庢湳宸ュ叿鎸囧畾鐨勭洰褰曚笅錛屽湪宸ュ叿涓氨鍙互浣跨敤榪欎簺shader錛屽茍涓旇兘澶熼氳繃shader鐨勮鎰忓拰娉ㄩ噴涓虹浉鍏沖弬鏁板拰鍙橀噺鐢熸垚UI錛屾柟渚跨編鏈皟璇曘?
WIN騫沖彴涓婄殑鏁翠釜嫻佺▼濡備笅錛?
1. 搴旂敤紼嬪簭鍦ㄥ惎鍔ㄦ椂浼氬厛鍒濆鍖栨暣涓猻hader緋葷粺錛屾帴涓嬫潵瀵煎叆Shader瑙f瀽搴撳拰鍔犺澆搴擄紙dll鐨勫艦寮忥級銆?
2. 鎺ヤ笅鏉ュ簲鐢ㄧ▼搴忓皢NiD3DShader鐨勫垵濮嬪寲宸ヤ綔濮旀墭緇橬iShaderLibrary鏉ュ鐞嗭紝NiShaderLibrary棣栧厛閫氳繃NiD3DXEffectLoader杞藉叆鎵鏈夌殑shader鏂囨湰鏂囦歡錛屽茍閫氳繃NiD3DXEffectParser瑙f瀽鏂囨湰鐢熸垚NiD3DXEffectFile瀵硅薄錛屽悓鏃禢iD3DXEffectLoader榪樿礋璐e皢shader浠g爜緙栬瘧鎴愪簩榪涘埗褰㈠紡鐨凣PU紼嬪簭銆?
3. 鏈鍚庣敱NiD3DXEffectTechnique璐熻矗閫氳繃NiD3DXEffectFile涓婄殑淇℃伅鐢熸垚NiD3Dshader瀵硅薄銆?
4. 鎵鏈夌殑shader瀵硅薄鍒涘緩鍚庯紝NiShaderLibrary鐨勫垵濮嬪寲灝辯粨鏉熶簡錛屾渶鍚庣敱NiShaderFactory璐熻矗緇熶竴綆$悊銆?
NiMaterial涓烘覆鏌撳璞$敓鎴愬拰瀹氫箟Shader,NiMaterialInstance涓烘覆鏌撳璞″垎閰?鍜孋ach Shader銆侼iFragmentMaterial鎻愪緵浜嗕竴涓猄hader Tree妗嗘灦錛屽湪瀹冪殑緇ф壙綾諱腑鍙互浣跨敤榪欎釜妗嗘灦鎼緩shader tree銆傝繖涓満鍒跺厑璁窷iFragmentMaterial鏍規嵁瀵硅薄涓嶅悓鐨勬覆鏌撶姸鎬佺敓鎴愪笉鍚岀殑shader浠g爜錛孋ach鍦ㄥ唴瀛樹腑錛屽茍淇濆瓨鍒扮鐩樻枃浠躲侴ameByro鎻忚堪絎︾殑姒傚康澶ч噺浣跨敤錛屽寘鎷墠闈㈡彁鍒扮殑Shader瑙f瀽榪囩▼涔熸槸閫氳繃鎻忚堪絎︽潵浼犻掍俊鎭傚湪鏉愯川緋葷粺涓富瑕佷嬌鐢ㄤ簡NiMaterialDescriptor鍜孨iGPUProgramDescriptor榪欎釜涓や釜綾誨仛鎻忚堪絎︼紝榪欎袱涓被涓繚瀛樼殑淇℃伅鏄吋瀹圭殑錛岄兘鏄負浜嗘弿榪版煇縐嶆潗璐ㄥ湪娓叉煋瀵硅薄鐨勬煇涓鐗瑰畾娓叉煋鐘舵佷笅鎵瀵瑰簲鐨凣PU紼嬪簭鐨勭壒寰併侼iFragmentMaterial閫氳繃娓叉煋鐩爣鐨勭姸鎬佸拰灞炴х敓鎴怤iMaterialDescriptor錛屽茍閫氳繃NiMaterialDescriptor鏌ユ壘鍖歸厤鐨剆hader錛屽鏋滄壘涓嶅埌錛屽垯閫氳繃shader tree鐢熸垚鐩稿簲鐨剆hader紼嬪簭錛屽茍淇濆瓨鍒扮鐩樻枃浠朵腑銆傚綋涓嬩竴嬈″簲鐢ㄧ▼搴忓惎鍔ㄦ椂灝卞彲浠ラ氳繃榪欎釜鏂囦歡鐩存帴鍒涘緩NiShader瀵硅薄銆傚彲浠ヨ閫氳繃NiFragmentMaterial鐢熸垚鐨剆hader浠g爜鏄負鐗瑰畾鐨勬覆鏌撳璞″湪鐗瑰畾鐨勬儏鍐典笅閲忚韓鎵撻犵殑銆?
鏁翠釜榪囩▼鐨勮緇嗘祦紼嬪涓嬶細
1. 鍦ㄦ瘡嬈℃覆鏌撲竴涓墿浣撲箣鍓嶏紝NiMaterialInstance浼氬厛鍒ゆ柇榪欎釜鐗╀綋鐨剆hader紼嬪簭鏄惁闇瑕佹洿鏂幫紝濡傛灉涓嶉渶瑕佹洿鏂幫紝灝辯洿鎺ヨ繑鍥炲綋鍓岰ach鐨凬iShader錛涘鏋滈渶瑕佹洿鏂幫紝 NiMaterialInstance棣栧厛浼氭牴鎹墿浣撶殑娓叉煋鐘舵佷負鍏剁敓鎴愪竴涓狽iMaterialDescriptor錛岀劧鍚庡皢榪欎釜NiMaterialDescriptor鍜屽綋鍓岰ach浣忕殑NiShader榪涜姣旇緝錛屽鏋滃尮閰嶄粛鐒惰繑鍥炲綋鍓岰ach鐨凬iShader錛屽鏋滀笉鍖歸厤錛屽皢鑾峰緱shader鐨勫伐浣滆漿浜ょ粰NiMaterial榪涜銆?
2. NiMaterial棣栧厛閫氳繃榪欎釜NiShaderFactory 鏌ヨ鍖歸厤榪欎釜NiMaterialDescriptor鐨凬iShader錛屽鏋滄壘涓嶅埌錛屽氨閫氳繃NiMaterialDescriptor鐢熸垚NiShader錛屽悓鏃剁敓鎴愪竴孌礢hader浠g爜錛屽茍淇濆瓨鍒頒互shader鎻忚堪絎︿腑鐨勭壒寰佺爜鏉ュ懡鍚嶅搴旂殑shader鏂囦歡銆?
3. 褰撹幏寰楃浉搴旂殑NiShader瀵硅薄鍚庯紝NiMaterialInstance浼氳皟鐢∟iShader鐨凷etupGeometry鎺ュ彛錛屽湪榪欎釜鎺ュ彛涓細榪涜欏剁偣澹版槑銆?
浠ヤ笅鏄疦iMaterialInstance涓篏eometry閫夋嫨shader鐨勪唬鐮侊細
NiShader* NiMaterialInstance::GetCurrentShader(NiRenderObject* pkGeometry,
const NiPropertyState* pkState,
const NiDynamicEffectState* pkEffects)
{
if (m_spMaterial)
{
bool bGetNewShader = m_eNeedsUpdate == DIRTY;
if (m_eNeedsUpdate == UNKNOWN)
bGetNewShader = pkGeometry->GetMaterialNeedsUpdateDefault();
// Check if shader is still current
if (bGetNewShader && m_spCachedShader)
{
bGetNewShader = !m_spMaterial->IsShaderCurrent(m_spCachedShader,
pkGeometry, pkState, pkEffects, m_uiMaterialExtraData);
}
// Get a new shader
if (bGetNewShader)
{
NiShader* pkNewShader = m_spMaterial->GetCurrentShader(
pkGeometry, pkState, pkEffects, m_uiMaterialExtraData);
if (pkNewShader)
{
NIASSERT(m_spCachedShader != pkNewShader);
ClearCachedShader();
m_spCachedShader = pkNewShader;
if (!pkNewShader->SetupGeometry(pkGeometry, this))
ClearCachedShader();
}
else
{
ClearCachedShader();
}
}
m_eNeedsUpdate = UNKNOWN;
}
return m_spCachedShader;
}
濡傛灉鎯抽氳繃NiFragmentMaterial瀹炵幇鑷繁鐨剆hader tree灝遍渶瑕佸湪NiFragmentMaterial鎻愪緵鐨勬帴鍙d腑瀹炵幇鑷繁鎷艱浠g爜鐨勯昏緫錛屼唬鐮佸潡鐢盢iMaterialLibraryNode灝佽錛孨iMaterialLibraryNode鏃㈠彲浠ョ洿鎺ュ啓C++浠g爜鏉ュ畾涔夛紝涔熷彲浠ュ厛鍐欐垚XML鑴氭湰錛屽啀鐢變笓闂ㄧ殑瑙f瀽宸ュ叿杞崲鎴怌++浠g爜銆?
鐢盢iStandardMaterial鐢熸垚鐨剆hader浠g爜鏂囦歡濡備笅鍥炬墍紺猴細
鏂囦歡鍚嶅氨鏄疦iMaterialDescriptor鐨勬帺鐮侊紝鐢ㄦ潵鏍囪瘑鐨剆hader浠g爜鐨勮涓恒?
Shader浠g爜鐨勮涓烘弿榪板涓嬶細
Shader description:
APPLYMODE = 1
WORLDPOSITION = 0
WORLDNORMAL = 0
WORLDNBT = 0
WORLDVIEW = 0
NORMALMAPTYPE = 0
PARALLAXMAPCOUNT = 0
BASEMAPCOUNT = 1
NORMALMAPCOUNT = 0
DARKMAPCOUNT = 0
DETAILMAPCOUNT = 0
BUMPMAPCOUNT = 0
GLOSSMAPCOUNT = 0
GLOWMAPCOUNT = 0
CUSTOMMAP00COUNT = 0
CUSTOMMAP01COUNT = 0
CUSTOMMAP02COUNT = 0
CUSTOMMAP03COUNT = 0
CUSTOMMAP04COUNT = 0
DECALMAPCOUNT = 0
FOGENABLED = 0
ENVMAPTYPE = 0
PROJLIGHTMAPCOUNT = 0
PROJLIGHTMAPTYPES = 0
PROJLIGHTMAPCLIPPED = 0
PROJSHADOWMAPCOUNT = 0
PROJSHADOWMAPTYPES = 0
PROJSHADOWMAPCLIPPED = 0
PERVERTEXLIGHTING = 1
UVSETFORMAP00 = 0
UVSETFORMAP01 = 0
UVSETFORMAP02 = 0
UVSETFORMAP03 = 0
UVSETFORMAP04 = 0
UVSETFORMAP05 = 0
UVSETFORMAP06 = 0
UVSETFORMAP07 = 0
UVSETFORMAP08 = 0
UVSETFORMAP09 = 0
UVSETFORMAP10 = 0
UVSETFORMAP11 = 0
POINTLIGHTCOUNT = 0
SPOTLIGHTCOUNT = 0
DIRLIGHTCOUNT = 0
SHADOWMAPFORLIGHT = 0
SPECULAR = 1
AMBDIFFEMISSIVE = 0
LIGHTINGMODE = 1
APPLYAMBIENT = 0
BASEMAPALPHAONLY = 0
APPLYEMISSIVE = 0
SHADOWTECHNIQUE = 0
ALPHATEST = 0
NiStanderMaterial灝辨槸鏍規嵁榪欎簺鎺╃爜鐨勬暟鎹潵鐢熸垚shader浠g爜錛岀敤鎴峰彲浠ラ氳繃閲嶈澆GenerateVertexShadeTree銆丟eneratePixelShadeTree銆丆reateShader榪欎簺鎺ュ彛鏉ュ畾涔夎嚜宸辯殑shader鐢熸垚瑙勫垯銆?
閫氳繃鍓嶅嚑鑺傛垜浠彲浠ヤ簡瑙e埌錛屾兂瀹氫箟鑷繁鐨勬潗璐紝涓鏄氳繃緙栧啓shader浠g爜瀹屾垚銆傚湪搴旂敤紼嬪簭鍒濆鍖栫殑鏃跺欙紝榪欎簺shader浠g爜浼氳鍒濆鍖栨垚NiShader瀵硅薄錛岃繘涓姝ョ殑閫氳繃NiShader瀵硅薄鏉ュ垵濮嬪寲NiSingleShaderMaterial瀵硅薄錛屽茍鍒嗛厤緇欐覆鏌撳璞°傚湪GameByro榛樿鐨勬覆鏌撴祦紼嬩腑錛岃繖浜涙楠ら兘鏄嚜鍔ㄨ繘琛岀殑錛岀編鏈彧闇鍦?DMAX鎻掍歡涓負鍑犱綍浣撶殑鏉愯川鎸囧畾Shader紼嬪簭錛屽鍑哄埌nif鏂囦歡錛屽簲鐢ㄧ▼搴忓氨鑳芥紜姞杞藉茍娓叉煋錛涗簩鏄畾涔夎嚜宸辯殑NiMaterialFragment綾伙紝鍦ㄧ被涓畾涔夊浣曠敓鎴恠hader錛屽湪搴旂敤紼嬪簭榪愯鏃跺彧瑕佸皢榪欎釜綾葷殑瀹炰緥鎸囨淳緇欏嚑浣曚綋錛岃繖涓被灝變細鑷姩涓哄嚑浣曚綋鐢熸垚shader銆傝繖涓ょ鏂瑰紡瀵逛簬緹庢湳浜哄憳鏉ヨ錛屼富瑕佸尯鍒湪浜庯紝閲囩敤絎竴縐嶆柟娉曞畾涔夌殑鏉愯川錛屽叾娓叉煋鏁版嵁鐨勮緗繀欏諱弗鏍肩鍚坰hader浠g爜涓墍闇鐨勬暟鎹紝鍚﹀垯灝變細鎶ラ敊銆傦紙姣斿璇達紝欏剁偣鏁版嵁嫻佸繀欏諱弗鏍肩鍚坰hader紼嬪簭鐨勫畾涔夛紝蹇呴』涓簊hader涓瘡涓噰鏍峰櫒鎻愪緵鏍煎紡姝g‘鐨勭汗鐞嗭級錛涜岄噰鐢ㄧ浜岀鏂規硶瀹氫箟鐨勬潗璐紝灝辨湁寰堥珮鐨勫閿欏拰閫傚簲鎬э紝浣嗘槸榪欑瀹歸敊鎬у拰閫傚簲鎬ч渶瑕佽嚜宸卞啓浠g爜鏉ュ畬鎴愶紝GameByro鎻愪緵鐨凬iStanderMaterial灝辨彁渚涗簡榪欏瀹屾暣鐨勬満鍒躲傛瘡涓創鍥炬Ы鍐呯殑璐村浘濡傛灉浣犺緗氨浼氱敓鎴愮浉搴旂殑璐村浘澶勭悊嫻佺▼錛屽鏋滀笉璁劇疆錛屽氨娌℃湁榪欏紶璐村浘鐨勫鐞嗘祦紼嬨?
涓轟簡楠岃瘉榪欎釜榪囩▼錛岀瑪鑰呭皾璇曞鍔犱簡涓涓嚜宸辯殑shader鐗規晥鈥斺擲ubSurfaceScattering錛岀畝縐?s錛屽叾鍘熺悊鏄ā鎷熷厜鍦ㄥ崐閫忔槑鐗╀綋涓暎灝勭殑鏁堟灉銆傜敱浜庤鏁堟灉鏃犻』棰勫鐞嗚繃紼嬶紝鎵鏈夌殑璐村浘鍧囨潵鑷鐩樻枃浠訛紝鎵浠ユ瘮杈冨鏄撹瀺鍚堝埌GameByro宸ヤ綔嫻佷腑銆?
絎旇呭皢鍦‵X COMPOSER涓皟璇曢氳繃鐨刦x鏂囦歡鏀懼叆SDK涓殑SDK\Win32\Shaders\Data鐩綍涓嬶紝鍦?DMAX鐨勬潗璐ㄩ潰鏉塊夋嫨GameByroShader錛岀劧鍚庡氨鍙湪鏄劇ずshader鐨勭粍鍚堟涓湅鍒版枃浠朵腑瀹氫箟鐨凾echinqe錛岄夋嫨鐐瑰嚮apply鎸夐挳錛屽氨浼氬嚭鐜拌嚜瀹氫箟鐨勫弬鏁拌皟鏁寸晫闈€?
閫氳繃璋冩暣鍙傛暟錛屾渶緇堝緱鍒扮毊鑲ゅ拰鐜夊櫒鐨勬覆鏌撴晥鏋滃涓嬶細
鐨偆
鐜夊櫒
GameByro鐨勮繖濂楀紑鍙戞祦紼嬮潪甯告柟渚跨洿瑙傦紝浣嗘槸緹庢湳浠呰兘涓簊hader紼嬪簭鍒嗛厤闈欐佺殑鏁版嵁婧愶紝姣斿璇村厜鐓у浘絳夛紝CubeMap絳夛紱鑰屼竴浜涘湪紼嬪簭涓疄鏃剁敓鎴愮殑綰圭悊鏁版嵁鍒欐棤娉曟暣鍚堝埌緹庢湳宸ュ叿涓紝姣斿璇撮槾褰卞浘銆佹姌灝勫浘銆佸弽灝勫浘絳夛紝榪欎簺閮介渶瑕佺▼搴忓啓浠g爜鏉ュ疄鐜般傝皟璇曡搗鏉ュ氨涓嶅ぇ鏂逛究浜嗐傚ぇ閮ㄥ垎鎯呭喌涓嬶紝鎴戜滑鍙渶瑕佷嬌鐢℅ameByro鎻愪緵鐨凬iStanderMaterial灝卞彲浠ュ畬鎴愬ぇ閮ㄥ垎鏉愯川鐨勯渶姹傦紝鐗規畩鐨勬晥鏋滃彲浠ヨ嚜宸卞啓shader鎴栬呴氳繃寮曟搸鎻愪緵鐨剆hader搴撴潵瀹屾垚錛屽彧鏈夊綋鎴戜滑闇瑕佸嵆鏍規嵁澶嶆潅鐨勬儏鍐靛仛寰堝涓嶅悓鐨勫鐞嗘椂錛屾垜浠墠闇瑕侀噸杞絅iFragmentMaterial鎼緩鑷繁鐨剆hader tree銆備笉榪囨惌寤簊hader tree鐨勭▼搴忎竴鑸瘮杈冨鏉傦紝緙栧啓闅懼害澶э紝铏界劧寮曟搸鍏佽閫氳繃XML鏂囦歡鏉ョ紪鍐欐潗璐ㄨ妭鐐癸紝浣嗘槸浣跨敤璧鋒潵浠嶇劧涓嶆柟渚褲侴ameByro騫舵病鏈夋彁渚涚浉鍏崇殑鍚庢湡澶勭悊鐨勫紑鍙戝伐鍏鳳紝鍚庢湡澶勭悊鐨勭壒鏁堝茍涓嶈兘鎵瑙佸嵆鎵寰楋紝榪欐柟闈㈣繕闇瀹屽杽銆?
GameByro涓哄嚑浣曚綋鍦ㄧ壒瀹氱殑鐜涓嬬敓鎴愪笓鐢ㄧ殑shader浠g爜錛屽叿鏈変竴瀹氱殑鐏墊椿鎬э紝浣嗘槸涔熶粯鍑轟簡浠ヤ笅浠d環錛?
l 鍒嗘瀽鍑犱綍浣撶殑灞炴у拰褰撳墠鐘舵侊紝涓哄叾鐢熸垚shader浠g爜鐨勮繃紼嬫湁鎬ц兘鎹熻椼?
l Shader浠g爜鐢熸垚鍚庝細淇濆瓨鍒扮鐩樻枃浠朵腑錛岃繖涓繃紼嬪鏋滀笉浣跨敤寮傛錛屽彲鑳戒細寮曡搗闃誨銆?
l 鐢熸垚鐨凬iShader瀵硅薄浼氭湁鍐呭瓨娑堣椼傜敱浜嶨ameByro榛樿鐨勫疄鐜版槸灝嗘墍鏈夌殑shader鏂囦歡鍒濆鍖栨垚NiShader瀵硅薄錛屾墍浠ュ綋娓告垙榪愯鐨勬椂闂翠箙浜嗕互鍚庝細鐢熸垚澶ч噺鐨剆hader鏂囦歡錛岃繖鏃跺欏唴瀛樼殑娑堣楀彲鑳戒細寰堝彲瑙傦紝鍚屾椂鍔犺澆鐨勬椂闂翠篃浼氬鍔犮備笉榪囧彲浠ヨ嚜宸辨帶鍒跺姞杞界殑嫻佺▼錛屽湪榪欓噷榪涜鎬ц兘浼樺寲銆?
浣滆咃細鍙惰搗娑熸吉