以《Alba》為例談談,如何完整打造出一座島嶼的環境生態?
由ustwo games開發的《Alba:A Wildlife Adventure》是一款關於環保主義和觀鳥的 3D 開放世界探索遊戲,背景設定在一個名為 Pinar del Mar 的西班牙小島上。此前,《Alba》環境藝術家 Jessie van Aelst詳細介紹了環境設計和開發過程。
Alba的靈感
從一開始,這個專案就受到了地中海的童年以及對觀鳥和攝影的熱愛的啟發。
遊戲在最終確定chillectathon(慢走馬拉松)理念之前經歷了幾個迭代階段,即玩家可以按照自己的節奏四處探索。遊戲的核心程式是通過收集簽名來完成一份請願書。你可以在島上四處幫助人們,並以此為一個更大的目標聚集他們的支援。保護野生動物和環境的主題是將故事聯絡在一起的一條主線。
為了確保遊戲能夠呈現出真正意義上的西班牙,我花了很多時間與我們的創意總監David一起在谷歌地圖上旅行。他帶我參觀了巴倫西亞、Náquera、塞拉和埃爾帕爾馬等地區。
有些區域深受現實世界的啟發。下面這些圖片是真實世界中的建築,它們以某種形式出現在遊戲中。
觀鳥
我們還和團隊一起去了赫特福德郡的拉伊米德實地考察,真正捕捉到觀鳥的感覺!
環境藝術風格
當我第一次加入團隊時,環境藝術是使用簡單的幾何形狀和純色來構建的。這一過程讓我們能夠快速且輕鬆地在引擎內部建立內容。同樣的過程也被用於創造我們的角色。
雖然這不是我們想要的最後的外觀,但它相當迷人。它給遊戲帶來了一種孩子般的視角,就像你通過Alba的眼睛看到的世界一樣。我們非常喜歡這款遊戲,遊戲角色一直保持著這種簡單的外觀,直到最終發行。
從那時起,David和我便開始合作創造適合遊戲美術方向的環境美術風格。
調色盤
最後的調色盤很大程度上受到了實地拍攝的真實照片以及Joaquín Sorolla的作品的啟發——一位西班牙畫家1863-1923年的作品。他的作品不僅激發了調色盤的靈感,而且也激發了我們想在Alba描繪的主題和情緒,你通常會在他的作品中發現的。我們密切關注玩家所在位置的結構,這樣玩家就可以享受拍攝周圍環境的樂趣,並捕捉一張野生動物照片。
關卡細節
為了保持我們所喜歡的簡單形狀和純色,我們也很自然地將其引入到環境資產中。一旦我們開始用這種方式製作大型資產,我們需要明確一種讓陰影區域更加精確的方式。我們將模型的UV拉伸,然後將我們將一個漸變色紋理對映到上面。
貼花(Decals)
純色以及漸變色在大部分物體中都很好, 但是在一些比較大的物體上,我們用一些紋理來增強質感。大型物體的表面例如城鎮住房、混凝土橋墩以及通風牆等。
我們希望避免使用平鋪紋理,因為它們難以基於我們純色和漸變色的工作流實現。這也意味這我們可以將貼花貼圖整合到帶漸變的紋理對映流程中來。
為優化效能,我們儘量避免使用透明貼花。同時,出於效能的考慮,我們烘焙了光照。所以我們將貼花從Mesh中分離出來以避免其投射陰影。因此並非所有物體都被優化為了1個Drallcall。
碎片(Chipping)
我們的資產都是低多邊形(lowpoly)的,這樣我們可以讓我們的遊戲流暢執行,並保持如同角色一樣乾淨和簡單的形狀。但是在某些地方,我們想要一些破碎來烘托世界的真實感。我們在建模時用布林運算製造各種破碎的痕跡,這種方式讓我們在不使用貼花的情況下,僅僅使用三角面就實現了轉角破損。
聚集(Clumping)
考慮到漸變色、貼花、破損,這些都是在mesh層面做的,我們還把各種不同的模型混合在一起,以避免世界中出現視覺上的直線輪廓。
為了減少紋理大小,我們在Alba中並沒有使用法線紋理。作為替代方法,我們選擇通過編輯頂點以平滑法線。Normal Transfer是面向我們的著色器語言的,可以將一個平滑模型的法線對映到一個複雜模型上來讓一些物體看起來比較平滑和連續。
相機視角(FOV)
Alba是基於移動平臺的考慮而建立的。在usttwo games,我們為自己迭代遊戲設計而感到自豪,這樣我們就可以用一隻手自然地玩遊戲。
為了讓遊戲更符合這一標準,我們選擇了人像模式相機,玩家可以用拇指導航Alba,相機會從後面跟隨。
這種方法的缺點在於,我們需要一個非常大的視角,這樣玩家就可以在不讓攝像機太靠後的情況下看到他們左右兩邊的更多東西,但這樣你就看不到可愛的主角了。
我們的一些資產,特別是建築,因此從一層向上的比例就被壓縮了,所以當它們站在一個大的建築前面時,它們看起來仍然與角色保持一定的比例,但不會過度拉伸視角。
優化
事實上,我們創造的是一款開放世界的手機遊戲,這意味著我們將挑戰這類裝置所能承受的極限。
從一開始,環境藝術就需要使用有限的紋理空間。正如在美術風格部分所提到的,我們故意使用漸變和貼花來為我們的環境資產獲得最大限度的純色風格。
LODs
使用漸變色對映就意味著我們會重度依賴模型頂點。同時,這也成為一個相當的開銷,因此我們必須為我們的模型製作大量的LOD。然而這本身並不是沒有開銷的。
為模型做更多的LOD網格意味著我們的包體和記憶體開銷將增大。所以我們必須仔細考慮哪些模型需要LOD、需要多少個級別以及在什麼級別我們可以完全剔除。(不同的模型LOD應用於不同的距離, 某些模型比較小可能1-2級的LOD就可以剔除了)
我們最後使用InstaLOD工具來生成我們的LOD。我們在Maya中使用外掛可以根據一個優化後的減面演算法快速為我們的模型建立LOD。這為我們節省了大量的時間,讓我們可以進一步打磨、清理以完善我們的遊戲。
減少紋理空間加重我們遊戲內網格資料,所以我們需要LOD特定的網格。
地形和工具
我們用來製作Alba的最大的定製工具是地形編輯器。從一開始,我們就知道我們想要在我們的地形上繪畫和雕琢,但我們也想要移動這些部分,以便讓空間變得更近或更遠,同時設計在位置、組成和距離上進行迭代。
為了讓空間變得可識別,我們選擇了一種程式化的方法。幸運的是,我們所使用的島嶼的整體尺寸並不太大,從美術角度來看,我們可以在地形上只使用4種材料,所以我們設法讓我們的工具只執行在1個地形網格上。
我們用來製作Alba的最大的定製工具可能是我們的地形編輯器。
地形渲染/地貌(Terrain Height manipulations)
地形工具使用3種高度模式:
這些都可以通過曲線和變數(如噪聲)進行編輯。地形高度控制將被放入高度貼圖中,然後再反饋到地形中。
用脊線實現高度操控——紅色標記都代表一個“拉點”
高度地圖也提供給地形著色器,我們有4種地塊(地貌),每個地塊都有自己的顏色通道(RGBA):
地塊通過預定義的高度規則分成RGBA
對於每一種地塊,我們都有一個規則集。沙子只會出現在地勢較低的地方。汙垢會在下一層的高度出現,也會出現在平坦的表面上。然後過渡到草地,幾乎所有的遊戲區域都是草地,除非坡度太大,然後會變成懸崖。
在這裡可以看到所有的4個地形塊。
在這個過程完成後,我們新增了更多的細節地圖到每個地塊。這意味著地塊之間的梯度轉換現在會有更多的細節。
在整個遊戲中,我們只有4種地塊,所以我們需要讓它們發揮作用。
這些地圖確實幫助我們擴充套件了有限的地形寬度。
這些地圖中的灰色區域將決定細節在塊地梯度之間呈現的速度。
地形筆刷(Terrain Stamps)
在很長一段時間裡,地形的程式化生成方法正是我們所需要的。直到我們想要更小心地處理這些地塊。在平坦的區域,地形生成會產生塵土,但如果我們想要一大片平坦的草地呢?
我們想要獲得更多自由的方法便是使用地形標記。這些將由已經分配給地塊的相同的RGBA值組成。筆刷本身可以使用任何我們想要的蒙版形狀,儘管我們通常只使用有限的一套。在所有高度計算完成後,這些資料將被投影到地形上。
地形筆刷為美術團隊提供了更多的靈活性和控制。
地形標記的作用不僅在於給平坦的區域更多的定義,而且還在於把原本會有草的地方變成泥土。由於草的技術,我們會在草地形塗記的地方生成草網格,當草穿過農藥坑、樓梯或車道等淺層網格時,並不總是理想的。這就是我們的解決辦法。
地形生物群落
我們不僅使用了程式化的高度地圖資料來渲染我們的地形,我們還程式化地生成了很大一部分生物群落。
Alba島上有許多動物,它們都集中在一個小島上。我們想讓玩家覺得他們身處截然不同的區域,這也解釋了動物群的變化。
再一次地,們知道這一改變是高度迭代的,所以為了讓美術團隊更輕鬆地載入內容,我們便編寫了一種工具去隨機分散生物群落資產。
我們用生物群系元素來定義每個生物群系。例如:松樹林生物群落包括松樹、松果和灌木生物群落元素。生物群落元素都有不同的目錄槽,以及指示每個資產產生的可能性和規模範圍的變數。
這些生物群落將以類似於地形渲染的方式放置在地形上。該標記將投射立方體到地形上,以指示它將生成生物群落的區域。這些立方體的顏色代表:
這些顏色對於我們在生成地形之前理解會發生什麼非常有用。我們提出的一個要求是,能夠在生物群落標記周圍移動,並保持內部成分完整。例如,一叢以正確的組合生成的樹木將以相同的組合生成,即使我們將這個生物群落移到島的另一邊。
生物群系通常是重疊的,那麼我們如何讓它們一起工作呢?為了重疊或把一個生物群落放到另一個生物群落中,我們制定了一個優先順序系統。因此,標記的垂直位置將決定什麼將被覆蓋。
這一切是如何發生的
所有這些地形工具都非常有用,我們可以在此基礎上進行裝飾。當優化階段到,我們決定移除一些程式,然後再次放置資產以獲得更好的控制水平。
在這裡,你可以看到所有這些工作是如何組合在一起,形成Alba一些美麗的地方。希望這一分析能夠幫助那些想要了解我們在手機平臺上如何創造一款開放世界遊戲所使用的技術的人。
- 製作:早期,團隊為整個遊戲定義了四大支柱——關愛自然、西班牙意識、人類對自然世界的影響以及童年的自由。
- 研究:他們通過谷歌地圖在西班牙進行虛擬旅行,甚至在現實生活中觀鳥。他們收集了很多參考照片並組裝了情緒板。
- Blockout:他們製作了具有簡單幾何形狀和平面顏色的島嶼的早期版本,使他們能夠快速迭代和測試遊戲系統/角色——一旦他們對遊戲有了更好的瞭解,他們後來重新設計並完全重建了島嶼。
Alba的靈感
從一開始,這個專案就受到了地中海的童年以及對觀鳥和攝影的熱愛的啟發。
遊戲在最終確定chillectathon(慢走馬拉松)理念之前經歷了幾個迭代階段,即玩家可以按照自己的節奏四處探索。遊戲的核心程式是通過收集簽名來完成一份請願書。你可以在島上四處幫助人們,並以此為一個更大的目標聚集他們的支援。保護野生動物和環境的主題是將故事聯絡在一起的一條主線。
為了確保遊戲能夠呈現出真正意義上的西班牙,我花了很多時間與我們的創意總監David一起在谷歌地圖上旅行。他帶我參觀了巴倫西亞、Náquera、塞拉和埃爾帕爾馬等地區。
有些區域深受現實世界的啟發。下面這些圖片是真實世界中的建築,它們以某種形式出現在遊戲中。
觀鳥
我們還和團隊一起去了赫特福德郡的拉伊米德實地考察,真正捕捉到觀鳥的感覺!
環境藝術風格
當我第一次加入團隊時,環境藝術是使用簡單的幾何形狀和純色來構建的。這一過程讓我們能夠快速且輕鬆地在引擎內部建立內容。同樣的過程也被用於創造我們的角色。
雖然這不是我們想要的最後的外觀,但它相當迷人。它給遊戲帶來了一種孩子般的視角,就像你通過Alba的眼睛看到的世界一樣。我們非常喜歡這款遊戲,遊戲角色一直保持著這種簡單的外觀,直到最終發行。
從那時起,David和我便開始合作創造適合遊戲美術方向的環境美術風格。
左圖:在環境藝術就位之前建立了2019年的Demo。右圖: Alba角色的早期版本,由許多原始形狀組成
調色盤
最後的調色盤很大程度上受到了實地拍攝的真實照片以及Joaquín Sorolla的作品的啟發——一位西班牙畫家1863-1923年的作品。他的作品不僅激發了調色盤的靈感,而且也激發了我們想在Alba描繪的主題和情緒,你通常會在他的作品中發現的。我們密切關注玩家所在位置的結構,這樣玩家就可以享受拍攝周圍環境的樂趣,並捕捉一張野生動物照片。
遊戲環境的主要藝術靈感來自西班牙畫家Joaquín Sorolla 1863-1923
關卡細節
為了保持我們所喜歡的簡單形狀和純色,我們也很自然地將其引入到環境資產中。一旦我們開始用這種方式製作大型資產,我們需要明確一種讓陰影區域更加精確的方式。我們將模型的UV拉伸,然後將我們將一個漸變色紋理對映到上面。
左:我們用純色製作了第一個建築物 右:在相同的建築物上是否應用漸變對映的區別
在漸變紋理上調整UV可讓完全控制陰影細節。
貼花(Decals)
純色以及漸變色在大部分物體中都很好, 但是在一些比較大的物體上,我們用一些紋理來增強質感。大型物體的表面例如城鎮住房、混凝土橋墩以及通風牆等。
我們希望避免使用平鋪紋理,因為它們難以基於我們純色和漸變色的工作流實現。這也意味這我們可以將貼花貼圖整合到帶漸變的紋理對映流程中來。
為優化效能,我們儘量避免使用透明貼花。同時,出於效能的考慮,我們烘焙了光照。所以我們將貼花從Mesh中分離出來以避免其投射陰影。因此並非所有物體都被優化為了1個Drallcall。
碎片(Chipping)
我們的資產都是低多邊形(lowpoly)的,這樣我們可以讓我們的遊戲流暢執行,並保持如同角色一樣乾淨和簡單的形狀。但是在某些地方,我們想要一些破碎來烘托世界的真實感。我們在建模時用布林運算製造各種破碎的痕跡,這種方式讓我們在不使用貼花的情況下,僅僅使用三角面就實現了轉角破損。
布林技術用於切割我們的資產和減少直線。
聚集(Clumping)
考慮到漸變色、貼花、破損,這些都是在mesh層面做的,我們還把各種不同的模型混合在一起,以避免世界中出現視覺上的直線輪廓。
在長長的直線周圍放置裝飾性的網格有助於打破直線輪廓。
為了減少紋理大小,我們在Alba中並沒有使用法線紋理。作為替代方法,我們選擇通過編輯頂點以平滑法線。Normal Transfer是面向我們的著色器語言的,可以將一個平滑模型的法線對映到一個複雜模型上來讓一些物體看起來比較平滑和連續。
左:不正常轉移 右:正常轉移
平臺的考慮
相機視角(FOV)
Alba是基於移動平臺的考慮而建立的。在usttwo games,我們為自己迭代遊戲設計而感到自豪,這樣我們就可以用一隻手自然地玩遊戲。
為了讓遊戲更符合這一標準,我們選擇了人像模式相機,玩家可以用拇指導航Alba,相機會從後面跟隨。
這種方法的缺點在於,我們需要一個非常大的視角,這樣玩家就可以在不讓攝像機太靠後的情況下看到他們左右兩邊的更多東西,但這樣你就看不到可愛的主角了。
我們的一些資產,特別是建築,因此從一層向上的比例就被壓縮了,所以當它們站在一個大的建築前面時,它們看起來仍然與角色保持一定的比例,但不會過度拉伸視角。
左:現實比例-右:擠壓一樓
優化
事實上,我們創造的是一款開放世界的手機遊戲,這意味著我們將挑戰這類裝置所能承受的極限。
從一開始,環境藝術就需要使用有限的紋理空間。正如在美術風格部分所提到的,我們故意使用漸變和貼花來為我們的環境資產獲得最大限度的純色風格。
我們使用了一個在梯度上預先展開的原始集合來快速建立資產。
這些相同的資產通過使用我們的梯度顏色地圖集快速重新著色。
LODs
使用漸變色對映就意味著我們會重度依賴模型頂點。同時,這也成為一個相當的開銷,因此我們必須為我們的模型製作大量的LOD。然而這本身並不是沒有開銷的。
為模型做更多的LOD網格意味著我們的包體和記憶體開銷將增大。所以我們必須仔細考慮哪些模型需要LOD、需要多少個級別以及在什麼級別我們可以完全剔除。(不同的模型LOD應用於不同的距離, 某些模型比較小可能1-2級的LOD就可以剔除了)
我們最後使用InstaLOD工具來生成我們的LOD。我們在Maya中使用外掛可以根據一個優化後的減面演算法快速為我們的模型建立LOD。這為我們節省了大量的時間,讓我們可以進一步打磨、清理以完善我們的遊戲。
減少紋理空間加重我們遊戲內網格資料,所以我們需要LOD特定的網格。
松樹是遊戲中最常見的資產之一。它也相當高,所以可以從遠處看到-因此它有4個LOD。
從許多角度都可以看到遊戲中的藍色高層建築。它優先獲得比大多數其他資產更多LOD級別。
地形和工具
我們用來製作Alba的最大的定製工具是地形編輯器。從一開始,我們就知道我們想要在我們的地形上繪畫和雕琢,但我們也想要移動這些部分,以便讓空間變得更近或更遠,同時設計在位置、組成和距離上進行迭代。
為了讓空間變得可識別,我們選擇了一種程式化的方法。幸運的是,我們所使用的島嶼的整體尺寸並不太大,從美術角度來看,我們可以在地形上只使用4種材料,所以我們設法讓我們的工具只執行在1個地形網格上。
我們用來製作Alba的最大的定製工具可能是我們的地形編輯器。
地形渲染/地貌(Terrain Height manipulations)
地形工具使用3種高度模式:
- 山脊-用於建造山丘、懸崖、海灘和梯田
- 山谷-用於河流、排水口和池塘
- 水平-用於平坦區域和平滑的斜坡過渡
這些都可以通過曲線和變數(如噪聲)進行編輯。地形高度控制將被放入高度貼圖中,然後再反饋到地形中。
地形脊線特徵
用脊線實現高度操控——紅色標記都代表一個“拉點”
高度地圖也提供給地形著色器,我們有4種地塊(地貌),每個地塊都有自己的顏色通道(RGBA):
- R -汙垢-麵包和黃油打破其他濺起的東西。
- G -粘土-橘色粘土懸崖。代表著西班牙的這個地區。
- B -草-沒有草就沒有自然——
- A-沙,任何島嶼都離不開它!
地塊通過預定義的高度規則分成RGBA
對於每一種地塊,我們都有一個規則集。沙子只會出現在地勢較低的地方。汙垢會在下一層的高度出現,也會出現在平坦的表面上。然後過渡到草地,幾乎所有的遊戲區域都是草地,除非坡度太大,然後會變成懸崖。
在這裡可以看到所有的4個地形塊。
在這個過程完成後,我們新增了更多的細節地圖到每個地塊。這意味著地塊之間的梯度轉換現在會有更多的細節。
在整個遊戲中,我們只有4種地塊,所以我們需要讓它們發揮作用。
這些地圖確實幫助我們擴充套件了有限的地形寬度。
這些地圖中的灰色區域將決定細節在塊地梯度之間呈現的速度。
地形筆刷(Terrain Stamps)
在很長一段時間裡,地形的程式化生成方法正是我們所需要的。直到我們想要更小心地處理這些地塊。在平坦的區域,地形生成會產生塵土,但如果我們想要一大片平坦的草地呢?
我們想要獲得更多自由的方法便是使用地形標記。這些將由已經分配給地塊的相同的RGBA值組成。筆刷本身可以使用任何我們想要的蒙版形狀,儘管我們通常只使用有限的一套。在所有高度計算完成後,這些資料將被投影到地形上。
地形筆刷為美術團隊提供了更多的靈活性和控制。
地形標記的作用不僅在於給平坦的區域更多的定義,而且還在於把原本會有草的地方變成泥土。由於草的技術,我們會在草地形塗記的地方生成草網格,當草穿過農藥坑、樓梯或車道等淺層網格時,並不總是理想的。這就是我們的解決辦法。
在農場區域自定義地形筆刷
地形生物群落
我們不僅使用了程式化的高度地圖資料來渲染我們的地形,我們還程式化地生成了很大一部分生物群落。
Alba島上有許多動物,它們都集中在一個小島上。我們想讓玩家覺得他們身處截然不同的區域,這也解釋了動物群的變化。
再一次地,們知道這一改變是高度迭代的,所以為了讓美術團隊更輕鬆地載入內容,我們便編寫了一種工具去隨機分散生物群落資產。
我們用生物群系元素來定義每個生物群系。例如:松樹林生物群落包括松樹、松果和灌木生物群落元素。生物群落元素都有不同的目錄槽,以及指示每個資產產生的可能性和規模範圍的變數。
森林生物群落及其生物群落元素
這些生物群落將以類似於地形渲染的方式放置在地形上。該標記將投射立方體到地形上,以指示它將生成生物群落的區域。這些立方體的顏色代表:
- 黃色-生物群系產生的區域。
- 綠色-一個資產將在這裡生成。
- 紅色-一個資產可以在這裡生成,但不會被限制。
這些顏色對於我們在生成地形之前理解會發生什麼非常有用。我們提出的一個要求是,能夠在生物群落標記周圍移動,並保持內部成分完整。例如,一叢以正確的組合生成的樹木將以相同的組合生成,即使我們將這個生物群落移到島的另一邊。
生物群系通常是重疊的,那麼我們如何讓它們一起工作呢?為了重疊或把一個生物群落放到另一個生物群落中,我們制定了一個優先順序系統。因此,標記的垂直位置將決定什麼將被覆蓋。
生成森林生物群落
標記高度變化產生的生物群落的優先順序
這一切是如何發生的
所有這些地形工具都非常有用,我們可以在此基礎上進行裝飾。當優化階段到,我們決定移除一些程式,然後再次放置資產以獲得更好的控制水平。
地形生成和手動放置資產
在這裡,你可以看到所有這些工作是如何組合在一起,形成Alba一些美麗的地方。希望這一分析能夠幫助那些想要了解我們在手機平臺上如何創造一款開放世界遊戲所使用的技術的人。
相關文章
- 以QT為例談環境搭建QT
- 以IT行業為例,談談KAIZEN模式的優勢!行業AI模式
- 以 ZGC 為例,談一談 JVM 是如何實現 Reference 語義的GCJVM
- 淺談 Monorepo 帶來的效益:以 Turborepo 為例Mono
- 談談測試環境管理與實踐
- 以美術資源生產為例,談遊戲研發中臺PM實戰遊戲
- 開發者以Band of Defenders為例談遊戲的系統建造遊戲
- 淺談JS詞法環境JS
- Mac下配置Java開發環境以Java 8 為例MacJava開發環境
- 最大島嶼面積
- 談談如何抓取ajax動態網站網站
- Leedcode-島嶼的周長
- 以Aliyun體驗機為例,從零搭建LNMPR環境(上)LNMP
- 以Aliyun體驗機為例,從零搭建LNMPR環境(下)LNMP
- 以《天涯明月刀》為例,談人設對內容營銷的助力
- 談談“資料庫中介軟體”生態與發展資料庫
- 200. 島嶼數量
- [LintCode]NumberofIslands(島嶼個數)
- 淺談公司java開發執行環境搭建(ubuntu環境)JavaUbuntu
- 以同程藝龍客服機器人為例,談談意圖識別和對話管理建設機器人
- 【Linux】詳解六種配置Linux環境變數的方法(以centos為例)Linux變數CentOS
- 多位開發者以產品為例談三消遊戲的設計關鍵遊戲
- LeetCode 463. 島嶼的周長 JAVALeetCodeJava
- 淺談之SpringBoot的環境搭建及快速入門Spring Boot
- 談談Shiro的原理及在SSM和SpringBoot兩種環境下的使用姿勢(下篇)SSMSpring Boot
- 程式碼隨想錄day52 || 圖論搜尋 島嶼數量,島嶼的最大面積圖論
- 談談RxSwift和狀態管理Swift
- 痞子衡嵌入式:以i.MXRT1xxx的GPIO模組為例談談中斷處理函式(IRQHandler)的標準流程函式
- 淺談法律與輿論的關係——以許霆案與藥家鑫案為例(上)
- JDK環境變數的兩種配置方法——以JDK8和JDK10為例JDK變數
- 小島秀夫專訪:談談《死亡擱淺》的立意、概念與哲學
- 圖靈訪談系列之九:CNode社群談Node.js技術及生態圖靈Node.js
- 以DApps為例 看看當今區塊鏈app生態系統的4大特點APP區塊鏈
- 企業環境下如何把ubuntu的dhcp改為靜態IPUbuntu
- 何以能持續暢銷?以《少年三國志2》為例淺談數值卡牌
- 談一談動態規劃和dfs動態規劃
- 為什麼你學不過動態規劃?告別動態規劃,談談我的經驗動態規劃
- 以Sid Meier切入,談談遊戲中的趣味選擇設計遊戲