• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 43,  comments - 64,  trackbacks - 0

            The Direct3D 10 System


            注:SIGGRAPH 2006即將在波士頓開幕,微軟也將發布DirectX10的相關資料。為此特地翻譯了源自微軟DirectX開發社區的一篇PDF文檔,“The Direct3D 10 System”,原文地址為http://download.microsoft.com/download/f/2/d/f2d5ee2c-b7ba-4cd0-9686-b6508b5479a1/Direct3D10_web.pdf。原文的腳注有“ACM, (2006). This is the author’s version of the work. It is posted here by permission of ACM for your personal use. Not for redistribution.”原文版權歸其作者以及相關組織所有,遵守ACM關于僅限個人使用,不得發布的條令。中文版由zhoubo22@hotmail.com翻譯,僅限個人學習之用。有刪節。


            摘要:我們將向您展示第四代GPGPU的系統架構。整套架構新的特征將包括諸如,直接向內存存取流式的Primitive數據,統一頂點數據以及圖像數據資源的管理,以及新的存儲格式。我們也將向您說明一些在新的管線(Pipeline)設計中,所作的對APIRuntimeShading Language的一些改動。


            一、正文:

            OpenGL 以及Direct3D的架構已經發展了好幾代。在過去五年中,技術的逐漸進步推動著處理模式由傳統的固定管線(Fixed Function)向可編程管線過渡(Progammable Pipeline)。在進步過程中,實際上體現了設計者對通用性、性能、成本的綜合考慮。到目前為止我們已經編寫了許多圖形加速的應用程序,比如演示系統,CAD,多媒體處理系統等等,以及游戲。這些程序無一例外的都需要管理數以G字節計算的數據,比如幾何體頂點數據、紋理數據、動畫數據,以及處理圖形的程序,占用大量的系統資源,以人們可以接受的速率渲染逼真的圖形。在許多的系統設計中,我們都可以看到人們如何有效的解決問題。如同舊版本的Direct3D一樣,Direct3D 10實際上是三方面工作的合作成果,硬件設計者,API/Runtime架構者,以及應用程序開發人員。參考了應用程序開發者們反映的意見,我們把一些常見的問題進行了整理:

            1. 狀態機切換代價太高(High State-change overhead)。改變任何的狀態,比如頂點格式、紋理格式、Shader參數、混合模式等,代價太高。為了盡量減少狀態的改變操作,需要我們對處理順序進行排序,使用基于Shader的技術,優化整個程序的性能。比如,需要多重紋理貼圖時,可以將幾個紋理合并到一個紋理上,然后通過對定點坐標的處理,進行多次的貼圖操作。

            2. 廠商之間定義的硬件加速功能過于混雜。有些時候應用程序使用了一些專有廠商自己定義的特殊功能,導致無法在大部分的硬件上有效的運行。

            3. CPU GPU的同步問題。傳統結構在管線中提取出新的數據是有次數限制的。比如渲染場景到紋理(Render To Texture)技術,把場景拷貝出來作為紋理貼圖使用,CPU使用率并不高。盡管這樣,產生新的頂點數據或者創建立方體紋理依舊需要更多的坐標數據,以及GPUCPU之間的同步,降低了效率。

            4. 指令的數目以及數據類型的限制。比如Vertex Shader需要處理數據的精度,以及實現傳統的流程控制(Flow Control)結構。Pixel Shader也一樣。但是無論是Vertex Shader還是Pixel Shader,處理整數的能力要遠遠強于處理浮點數據能力。應用程序要么舍棄了這些代價太高的處理方法,要么以比如基于查招表的方式運行。

            5. 資源限制。太多了,比如紋理單元(Texture Unit)數目的限制,Shader指令數目的限制等等。所以現在很多程序都不得不盡量將算法簡化,或者使用多Shader的方法進行處理。


            二、背景

            整個可編程GPU系統的發展可以分為四個階段,如下表:


            Feature

            1.1 2001

            2.0 2002

            3.0 2004

            4.0 2006

            Instruction slot

            128


            512

            64K

            4+8

            32+64

            512

            Constant registers

            96

            256

            256

            16x4K

            8

            32

            224

            Tmp registers

            12

            12

            32

            4K

            2

            12

            32

            Input registers

            16

            16

            16

            16

            4+2

            8+2

            10

            32

            Render targets

            1

            4

            4

            8

            Samplers

            8

            16

            16

            16

            textures



            4

            128

            8

            16

            16

            2D texture size



            2Kx2K

            8Kx8K

            Integer ops




            Load op




            Sample offsets




            Transcendental ops


            Derivative op



            Flow control


            Static

            Static/dynamic

            dynamic



            硬件實現實現了數據從Vertex ShaderPixel Shader的高速處理。多Vertex ShadersPixel Shaders可以用來并行的處理獨立的頂點以及像素。一般來說GPU的像素處理單元要遠多于頂點處理單元,因為在實際情況中需要處理的像素總是要比頂點多得多。

            OpenGLDirect3D中,可編程處理管線使用低等級的抽象層與硬件交互。這個抽象層對于程序來說是完全透明的,隱藏了各種底層的實現。而其它平臺,比如工作站,和PC平臺就完全不同,直接由硬件實現一切,硬件所有的特性都是向外暴露的。

            早期由于硬件的限制,為了精簡指令數,不得不采用匯編語言進行編碼。如今隨著硬件的發展,處理程序的編寫完全可以使用高等級語言實現,比如C-like的語言進行編寫——而且,熟悉C語言的開發人員非常多。可是,當GPU編程語言等級提高了之后,又產生了一些問題,比如,硬件的編譯模型更像虛擬機,Shader匯編語言比起機器語言跨平臺的特性更好。HLSL語言可以被預編譯,等到運行時再被GPU驅動翻譯成機器語言執行。GLSL語言則不同,它是在運行的時候從源代碼直接翻譯成機器語言執行。


            三、管線

            Direct3D 10 依舊保留了傳統的硬件加速管線,不過增加了2個新的流程。如圖所示:


            Input Assembler IA)將從輸入流(Input Stream)中將所有的1D頂點數據轉換為浮點格式(float32)。每一個流對象指定了一個頂點結構,最多包含16個頂點緩沖結構。一般來說GPU按照頂點的輸入順序處理,必要時應該使用索引緩沖(Index Buffer)提高性能。IA也支持對物體進行快速復制,類似于實例繪制(Instancing)技術,不過更有效率。

            Vertex Shader VS)一般用來做空間變換。VS讀取一個頂點,輸出一個頂點。VS可以和其他的Shader分享數據,允許訪問多達128個紋理,以及16個內部緩沖。更多的內容請看第4節。

            Geometry Shader GS)讀取Primitive中的頂點,輸出定點或者Primitive。可輸入輸出的Primitive可是是不同類型的,但它們對于Shader來說都是一樣的。GS程序可以在輸入的Primitive中插入新的頂點,產生新的Primitive,進而產生新的幾何結構,也可以剔除輸入的Primitive

            Stream Output SO)的作用是將GS輸出的數據拷貝到輸出緩沖。可是由于硬件的限制,SO只可以實現1個最多包含16ElementsMulti-Element的輸出流,或者是4single-element輸出流。IA支持8bit以及16bit數據的讀取,轉換成float32格式,SO只能寫入32bit格式的數據。在GS可以方便的實現數據格式的轉換以及Packing

            Set-up and Rasterization Stage RS)執行諸如ClippingPerspective divideviewport transformprimitive set-upScissoringdepth offsetfragment generation(不好意思沒有翻譯)。GPU的設計中一般都有Early Depth處理。RS負責處理頂點,PrimitiveAttributes,輸出光柵化處理后的像素。

            Pixel Shader PS)讀取Pixel Fragmentattribute,輸出最多包含8attributeFragmentAttribute值被寫入不同的色彩緩沖,如果不符合輸出條件則丟棄(discard)這個像素。一般Depth以及Stencil值在RS中已經被計算好。雖然說在PS中依舊可以進行Depth的計算以及重新寫入,不過為了優化請盡量在RS中進行這些運算。Stencil值不可以被改寫。

            Out Merger OM)讀取PS處理過的像素,進行傳統的Stencil測試和Depth測試,以及Alpha混合。OM綁定了一個Depth/Stencil緩沖,以及最多8Attribute緩沖。PS必須向每個渲染目標都輸出值。當在所有渲染目標之間使用同一個混合函數的時候,您可以分別設置各個渲染目標是否啟用或者禁用混合。


            內存結構與數據Flow

            GPU 需要處理大量儲存在諸如頂點緩沖、索引緩沖、紋理單元里的數據。GPU一般將數據儲存在自己的高速顯存中。這些數據包括1/2/3D的紋理貼圖,1D的索引以及頂點數據等等。在Direct3D 10中把所有的這些都統統稱為資源(resources),目的是為了提高處理效率。因為提高效率無非有兩個方法,在單通道里盡量做最多的事情,或者單通道里創建了Resources后在多通道里復用。

            幾種Resources可以提高單通道渲染的效率。Arrayed Resources。紋理貼圖,以及渲染目標可以被當作線性數組(Linear Arrays)綁定到一個渲染通道中。Shader里用來取得紋理索引的指令被擴展為Computed Array Index。現在有不少的開發人員為了效率將一些紋理放到一張大的紋理上,渲染時通過紋理坐標分割紋理。這種改變可能會給他們帶來一些壓力。當然,Texture Arrays不需要考慮這種特殊情況,因為它是為了處理大量尺寸相同的紋理而設計的。

            當一個渲染目標數組(Array of Render Targets)綁定到OM時,GS處理時可以對Primitive進行排序或者復制。比如,當在單通道中渲染場景生成立方體貼圖時,可以把它當作一個包括62D渲染目標的數組。(Array of 6 2D Textures)。當對物體進行立方體貼圖時,GS將決定使用哪一個面的像素進行貼圖。需要了解的是,GS處理渲染目標數組與PS的多渲染目標輸出之間是獨立的進行的。

            為了使用渲染場景到紋理(Render to cube map)功能以及為了更加方便的使用數組,添加了一個新的概念——View。編碼時,不需要制定資源,不需要額外的輔助參數,Direct3D 10允許創建資源時,不需要指定類型,比如究竟是float16還是snorm16,所以可能會發生非常有限的類型隱式轉換,只有相同大小的類型可以轉換,其余的不可以,比如2float16數字絕對不可以當作1float32數字。資源也無法直接用于管線處理,它們必須通過View綁定。

            流輸出對象特別適合處理連續的1D數據比如頂點坐標等,優點包括,可以支持輸出非常多的數據類型。流對象支持不支持對輸出數據進行隨機訪問。如果有需要在VS里可以做足夠的處理。

            Shader 里操作的數據是32bit的(無論是浮點數還是整數)。此時就需要提供更加豐富的數據類型,減少內存占用以及帶寬。數據會被自動對齊為整數的大小(32bit)。幾乎所有的數據類型都可以作為頂點數據、紋理數據,作為流輸出,以及渲染目標。如下表:

            Name

            Widths

            Range

            UnormN,snormN

            8,16

            [0,1] and [-1,1]

            FloatN

            32,16,11,10

            S32e8,s10e5,6e5,5e5

            UintN,sintN

            8,16,32

            [0,2^n-1] and [-2^n-1,-2^n-1]

            RGBE

            32

            999e5

            SRGB

            8

            [0,1] no-linear

            unorm snorm以及半浮點數是用的最多的格式。比如在需要HDR的程序中,半浮點數可以提供最好的精度以及最合理的帶寬占用,而且硬件也支持豐富的過濾操作。DirectX10里面的32bit數字有兩種格式,第一種是,RG通道各占11bitB10bit,剩下1bit存儲共享的指數;第二種,RGB各占9bit5bit儲存指數。這兩種格式都能夠達到float16格式的精度。其中,低精度的11-11-10格式適合用來儲存HDR色彩數據。當然Direct3D 10依舊支持低動態范圍的壓縮紋理格式。


            設計考慮

            對比以前的架構,Direct3D 10要求所有的Features都由硬件來實現。目前問題有兩個,硬件需要支持32bit紋理過濾以及渲染目標的多重采樣以及反鋸齒。所有的可編程結構可以模擬的固定管線處理功能,都將從核心以及API中去處,包括光照,矩陣變換,Alpha混合。固定處理管線可以很容易的用軟件模擬。不過一些較重要的傳統處理管線依舊保留。我們設計曾經考慮過把IA設計成完全可編程的,但是無法證明一切會變得更加的簡單還是復雜,而在VS里可以計算。事實上,VS可以不需要進行任何的內存讀取操作,直接從IA中讀取數據計算。話雖如此,為了性能我們依舊保留了一些IA的復雜特征,這樣可以完全發揮可編程的優勢,在處理頂點時硬件可以達到最高的效率。

            Gs 的設計更為復雜。GS可以進行并行處理,保存數據(類似于Primitive)的輸入順序,這樣有多個GS單元處理數據時不會發生順序的錯誤。這種并行的設計要求必須有一個輸出緩沖,而且數據的順序必須同輸入的數據相同。讓GS盡可能的多的代替RS的工作,比如Viewport變換等。GS可以做一部分Clipping,比如計算頂點到Clip-Plane的距離,把Clip-Space空間中的坐標傳遞到RSRS采用的依舊是傳統處理管線,對比GS來說精度不高,所以不可能讓GS模擬RS生成Image-Space坐標。Om也是經常被討論的部分。OM是整個管線中唯一可以進行內存讀寫的部分,也經常被要求設計成可編程單元。不過這樣一來管線的復雜度就大大的提高,而且內存系統的效率也會打折扣。曾經提過是否可以把OM結合到PS中,可是如果這樣,多重采樣以及混合操作就會變得非常的復雜(因為PS不可以獲得Fragment內存地址),而且Early Depth/Stencil已經可以顯著的提高性能。


            Shader Model 4

            在以前版本的Direct3D中,可編程管線單元(VS PS)是用一個特殊的虛擬機實現的。每個虛擬機使用馮諾伊曼架構,類似于匯編語言的指令集,擁有輸入輸出寄存器,堆棧,以及可以獲取內存資源的Binding PointsDirect3D 10為每個可編程管線單元定義了一個“Common Core”,新增加了以下內容:

            • 32bit 整數指令,算術運算,Bitwise計算,Conversion計算。

            • 可尋址的(Indexable)通用寄存器,大小為4096x4

            • 分開執行Unfiltered指令與filtered內存讀取指令(讀取以及采樣指令)

            • 支持Shadow Map采樣

            • 16 Constantparameter)緩沖 4096x4

            • 減少Texture Bind Points128),和Sampler State16

            這個統一模型(Unified Model)代替CPU執行所有的算術運算、邏輯運算、以及Flow Control。資源(Resource)比如寄存器、Texture Bind Points,以及指令存儲器等等這些不應該是軟件開發人員頭痛的問題,接下來的幾年,硬件廠商會自己對產品進行性能與成本的折中。Texture Bind Point數目的提高顯然不會對Texture Filtering Combinations有太多的要求。加大Constant存儲空間與更新Constant的效率之間的沖突不可避免。目前的系統一個明顯的問題就是用一般的更新操作更新Constant值效率不高,而如果程序使用了多個Shader那么效率會更加低。在實際情況中Group Of Constant更新的頻率并不相同,有時是每幀,或者每個物體,或者每個實例。由此我們把Constant分開存儲到不同的緩沖中,分開進行操作。而Constants訪問的頻率遠遠高于紋理,Constants一般使用uniform索引,而紋理一般使用紋理坐標。這也要求硬件設計者把Constant與紋理進行分離。同時我們也提高了浮點數的精確度,對比IEEE7540.5ulp,我們達到了1.0ulp。在進行平方開放運行時,精度可以達到2.0ulp


            核心APIRuntime

            核心APIRuntime作為一個瘦抽象層(Thin Abstract Layer)工作于硬件上,對上層的操作進行解釋。APIRuntime負責處理內存資源,建立ViewShaders,綁定到管線上,以及初始化渲染,提供硬件查詢等等。我們希望提高命令執行的效率,把命令分為兩類。一類是處理資源的命令,一類是操作管線的命令。Runtime先初始化一個緩沖,API命令對緩沖執行各種操作,等到緩沖已滿或者需要同步的時候把緩沖上傳到GPU中,比如當回讀渲染目標的時候。Runtime模型在PC系統上發展了十幾年,我們的目標是提高命令的效率,當命令執行時不需要額外的處理。過去這是不可能實現的需求,不過我們改進了一些設計,讓這個目標離我們更加近。其中有一些關鍵原因:

            • API 與硬件之間不兼容

            • 處理延遲

            • 應用程序的真正需要

            第一個問題已經被輕松的解決,這樣在應用程序開發者,Runtime,驅動程序,以及硬件提供者之間,不敢說從此100%的兼容,最起碼能夠滿足不是那么苛刻的要求(壟斷加大棒)。第二個問題經常碰到,尤其是需要做許多處理的時候。不過這樣的好處是,各個處理過程之間互不干擾是正交的。可是,這給CPU帶來了許多負擔,比如當紋理綁定發生更改時需要重新編譯Shader以符合新的紋理格式。我們希望盡可能多的消除硬件中內在關聯的狀態操作,同時在運行期把這些操作歸入Optional Layer進行單獨的操作。狀態機機制也發生了改變。在OpenGL與以前的Direct3D軟件的顆粒度非常令人滿意,比如改變混合方式的操作,樣本過濾操作等。為了提高效率可以使用OpenGLDisplay List或者是Direct3DState Block。我們當然希望更加的優化,提高效率。于是減少了不少固定處理管線。我們的研究發現現有的狀態機結構模型無法再進行效率的提高,所以我們把一些相關聯Functions組成一個固定集合,稱為State ObjectDirect3D 10定義了5State ObjectInputLayerVertex Buffer Layout),SamplerRasterizerDepthStencil,以及Blend。當構造這些對象的事后,驅動程序先在寄存器中初始化硬件操作需要的數值。當對象綁定到管線的時候,所有的數值被拷貝到命令緩沖里(Command Buffer),在硬件本地提供命令以及操作。還有一些難題還無法避免,比如上面說過的Constant問題,還有比如切換資源的讀寫狀態。這需要應用程序自己進行優化。

            一些API的設計為了執行期的效率沒有考慮容錯,或者只為頻繁使用的API提供容錯。對比運行期的錯誤處理機制,我們更青睞在程序開發時就進行錯誤處理。首先我們把出現的錯誤分為兩類,致命的(Critical)和非致命(Non Critical)。運行期時一定會報告致命的錯誤,而非致命的錯誤會被一個特殊的攔截層攔截。開發調試時主要使用Validation Layer。即使如此,也不能全指望API自己的容錯機制,驅動程序也應該阻止一些可能發生硬件損壞的操作。我們的目的是在渲染期間盡量不發生錯誤,也就是說,錯誤檢測不應該在渲染期間執行。致命的錯誤包括Depth Buffer與渲染目標之間尺寸不符合,Shader編譯錯誤等等。

            CPU GPU之間共享資源也是討論已久的問題。比如,OpenGLDirect3D都允許先在程序自己的內存地址里創建一個頂點緩沖,然后全部上傳到顯卡中。雖然說性能有了很大的提高,但是帶寬的差距依舊非常巨大,顯卡與高速顯存只見的帶寬能夠達到50GB/s,而PCI-E總線最多只能在GPU與系統內存之間實現2.8G/s的帶寬。即使如此,由于CPUGPU處理的數據格式并不相同,而且數據儲存的格式也并不相同,所以只能期望應用程序自己進行性能的優化。傳統意義里,GPU一般是資源的Writer,而CPU一般是Reader。為了優化性能,需要明確的知道,那些讀取哪些資源,寫入哪些資源。幸運的是開發人員一般都知道這一點。比如,渲染目標以及紋理一般是GPU的讀取資源,限制寫入操作。可對于頂點緩沖的就有了難題,因為GPU讀取的是靜態的網格,而一般由CPU進行動畫的計算,生成動態的網格,然后在傳入GPU。這樣一來,在CPUGPU之間的讀寫操作就非常頻繁,占用可憐的帶寬。Direct3D 10把資源(Resource4類:DefaultImmutableDynamicStagingDefault資源包括簡單的紋理,渲染目標,靜態的頂點緩沖,一般通過Copy操作生成。而Immutable資源不允許事先通過Copy生成,但是提供了其他的生成方式。DefaultImmutable資源不能被CPU訪問。Dynamic資源可以被綁定到管線,與CPU寫操作進行映射。比如讓CPU進行動畫的計算,視頻解碼等等,直接寫入Dynamic資源。Staging資源允許CPU映射,但是可以互相進行拷貝操作。

            我們也對HLSL語言進行了改進,把底層實現封裝,開發人員無須了解底層虛擬機細節就可以進行開發。特性如下:

            1. 無須顯式進行任何資源的賦值操作。

            2. Bind-by-Position 代替了Bind-by-name

            3. 盡量讓開發人員使用高級語言

            開發人員一般使用在多個Shader里傳遞數值的方式進行通信。當有了多Multiple Constant Buffers后,我們相信編譯器會更加對單緩沖操作進行更好的優化,但是開發人員依舊需要制定要寫入的Constant Buffer第二個變化是非常巨大的,與以前的發展發展方向完全不同。這主要是為了性能和未來的發展考慮。Shader里對輸入輸出變量的聲明更類似于C語言的原型(這一點GLSL已經體現出來)。兼容性,在這里的意義是輸入與輸入的數據類型要完全符合。Bind-by-position也用在了頂點緩沖對IASO的邦定上。盡管這樣在這些處理階段我們還是定義了特殊的Objects,以便在運行期執行昂貴的Matching操作。第三項也是和開發密切相關的,這要求我們在新的實現中不再提供Intermediate語言的支持。我們發現即使非常優化的代碼,編譯器為IL產生的機器碼效率低于其他單元的機器碼。而且當與驅動程序結合起來的時候,我們將不可能只對一個IL單元進行額外的優化。系統可以通過編譯器把IL處理過的數據作為調試信息輸出,不過不允許程序開發者在運行期進行對編譯器的輸出做任何更改。誰都希望編譯產生的代碼是最最優化的,可是這也帶來的許多問題。最重要的是驅動程序究竟能為IL產生多么優化的機器碼。Shader復雜度提高要求開發人員自己對算法、執行順序進行優化。而且,編譯關鍵部分的代碼,結果一定要相同,這樣當使用多通道算法的時候才能產生相同的中間值(Intermediate),在各個Shaders之間進行復制操作。我們考慮了一些實現方式,比如當它們需要內聯的時候,子程序被編譯為相同的碼。同時也不能忽視驅動程序的編譯器,那也是性能優化的關鍵。需要注意的是,我們提倡的使用模型是預先編譯好HLSL代碼,等到執行的時候由驅動程序編譯為機器碼,系統當然也支持運行期的動態編譯與執行。

            我們同時也注意到,可編程管線的價值不僅僅在于Shader Program,也應該動態支持的特效實現比如CgFX。由此,產生了HLSL-FX 10FX系統要考慮問題是,開發人員如何使用,以及如何提高效率。應用了FX系統后,如何有效地進行狀態處理又成為了討論的主題。為了最好的性能最好的辦法依舊是只使用一個效果,渲染好所有的物體。Effect,其實是就是一系列操作的集合。為了性能效率,程序最好一次性渲染好使用同一個效果的物體。在真實的場景中,Effect只是一個環節,其余還有諸如View Position處理,紋理貼圖等等其他操作,而且,不可能總是根據Effect渲染場景,還需要考慮諸如距離,透明狀態等等。


            系統體驗

            整個工程從2003年開始API的設計,以及硬件的設計,2006年公布。2004年開始測試軟件,公開于2005年。測試數據如下,不過都是舊的,因為真正合格的測試環境還沒有。

            Operation

            Direct3D 9

            Direct3D 10 (reference)

            Draw

            1470

            154

            Bind VS Shader

            6636

            416

            Set Constant

            3297

            916

            Set Blend Function

            787

            530

            在開發過程中,我們寫了許多關于GSSO等的DEMO程序。包括Soft shadow volumeProcedural content generationHigh Order normal interpolationmotion blur等。開發人員也在進行程序的移植,從DirectX9過渡到DirectX10,同時我們正在與外部的開發人員使用新的API從頭開始編寫程序,估計過幾年將會出現完全使用DirectX10的程序。


            總結

            我們正在總結開發設計經驗,等到Direct3D10真正發布的時候對API進行一些改動升級。軟件一直在發展,可是硬件的發展卻很緩慢。這些都是在升級時需要考慮的。長遠的,我們依舊在探討管線結構與編程模型。系統的瓶頸依然在如何有效的進行處理,硬件的發展是關鍵。比如傳統的過程紋理以及表面的處理,已經即將被位移映射等新技術代替。我們相信,隨著以后的硬件軟件的發展將會在整體上超越目前的系統。

            posted on 2006-08-01 22:14 周波 閱讀(617) 評論(0)  編輯 收藏 引用 所屬分類: 無庸技術
            <2006年8月>
            303112345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            周波 87年出生 南京林業大學05421班242信箱 專業木材科學與工程工業裝備與過程自動化 遷移到 jedimaster(dot)cnblogs(dot)com

            常用鏈接

            留言簿(4)

            隨筆分類

            隨筆檔案

            新聞檔案

            同學們Blog

            搜索

            •  

            積分與排名

            • 積分 - 54247
            • 排名 - 421

            最新評論

            閱讀排行榜

            久久久无码一区二区三区| 久久中文娱乐网| 精品久久久久一区二区三区| 国产精品对白刺激久久久| 久久乐国产综合亚洲精品| 亚洲午夜无码久久久久| 久久精品亚洲福利| 国产精品久久久天天影视香蕉 | 爱做久久久久久| 热久久这里只有精品| 欧美日韩中文字幕久久伊人| 精品国产福利久久久| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 国产精品久久久天天影视香蕉 | 久久婷婷色香五月综合激情| 色综合久久综合中文综合网| www性久久久com| 久久精品草草草| 久久精品国产99国产精品亚洲| 婷婷伊人久久大香线蕉AV| 亚洲国产精品无码成人片久久| 人妻无码中文久久久久专区| Xx性欧美肥妇精品久久久久久| 99久久这里只精品国产免费| 亚洲午夜久久影院| 久久青青草原精品国产软件| 精品无码久久久久国产| 久久久久国产精品| 思思久久99热只有频精品66| 久久亚洲中文字幕精品有坂深雪| 久久99热国产这有精品| 日韩精品无码久久一区二区三| 久久久无码精品亚洲日韩蜜臀浪潮 | 久久99精品久久久久久水蜜桃 | 日韩精品无码久久一区二区三| 久久精品视频网| 亚洲精品无码久久久久久| 久久精品国产精品亚洲精品| 午夜天堂精品久久久久| 97精品伊人久久大香线蕉| 精品久久久久久国产免费了|