色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是光柵化 光柵化中陰影的處理

電子工程師 ? 來源:網絡整理 ? 作者:工程師3 ? 2018-05-07 11:11 ? 次閱讀

陰影

在光柵化中處理陰影非常不直觀,需要相當多的運算:需要從每條光線的視角渲染場景,再存儲在紋理中,隨后在光照階段再次投射。更糟糕的是,這樣做未必會產生優質的圖像質量:那些陰影很容易混疊(因為光線所視的像素與攝像頭所視的像素并不對應),或堵塞(因為暗影貼圖的紋素存儲的是單一的深度值,但卻可以覆蓋大部分區域。此外,大多數光柵化需要支持專門的陰影貼圖“類型“,如立方體貼圖陰影(用于無方向性的光線),或級聯陰影貼圖(用于大型戶外場景),而這大大增加了渲染器的復雜性。

在光線追蹤器中,單一的代碼路徑可以處理所有的陰影場景。更重要的是,投影過程簡單直觀,與光線從曲面投向光源及檢查光線是否受阻一樣。PowerVR光線跟蹤架構呈現了快速的“試探”光線,其用于檢測光線投射方向的幾何圖形,這也使得它們特別適合進行有效的陰影渲染。

一、先了解下 什么是光柵化及光柵化的簡單過程?

光柵化是將幾何數據經過一系列變換后最終轉換為像素,從而呈現在顯示設備上的過程,如下圖:

什么是光柵化 光柵化中陰影的處理

光柵化的本質是坐標變換、幾何離散化,如下圖:

什么是光柵化 光柵化中陰影的處理

有關光柵化過程的詳細內容有空再補充。

二、以下內容展示紋素到像素時的一些細節:

When rendering 2D output using pre-transformed vertices, care must be taken to ensure that each texel area correctly corresponds to a single pixel area, otherwise texture distortion can occur. By understanding the basics of the process that Direct3D follows when rasterizing and texturing triangles, you can ensure your Direct3D application correctly renders 2D output.

當使用已經執行過頂點變換的頂點作為2D輸出平面的時候,我們必須確保每個紋素正確的映射到每個像素區域,否則紋理將產生扭曲,通過理解Direct3D在光柵化和紋理采樣作遵循的基本過程,你可以確保你的Direct3D程序正確的輸出一個2D圖像。

什么是光柵化 光柵化中陰影的處理

圖1: 6 x 6 resolution display

Figure 1 shows a diagram wherein pixels are modeled as squares. In reality, however, pixels are dots, not squares. Each square in Figure 1 indicates the area lit by the pixel, but a pixel is always just a dot at the center of a square. This distinction, though seemingly small, is important. A better illustration of the same display is shown in Figure 2:

圖片1展示了用一個方塊來描述像素的。實際上,像素是點,不是方塊,每個圖片1中的方塊表明了被一個像素點亮的區域,然而像素始終是方塊中間的一個點,這個區別,看起來很小,但是很重要。圖片二展示了一種更好的描述方式。

什么是光柵化 光柵化中陰影的處理

圖 2: Display is composed of pixels

This diagram correctly shows each physical pixel as a point in the center of each cell. The screen space coordinate (0, 0) is located directly at the top-left pixel, and therefore at the center of the top-left cell. The top-left corner of the display is therefore at (-0.5, -0.5) because it is 0.5 cells to the left and 0.5 cells up from the top-left pixel. Direct3D will render a quad with corners at (0, 0) and (4, 4) as illustrated in Figure 3.

這張圖正確地通過一個點來描述每個單元中央的物理像素。屏幕空間的坐標原點(0,0)是位于左上角的像素,因此就在最左上角的方塊的中央。最左上角方塊的最左上角因此是(-0.5,-0.5),因為它距最左上角的像素是(-0.5,-0.5)個單位。Direct3D將會在(0,0)到(4,4)的范圍內渲染一個矩形,如圖3所示

什么是光柵化 光柵化中陰影的處理

圖3

Figure 3 shows where the mathematical quad is in relation to the display, but does not show what the quad will look like once Direct3D rasterizes it and sends it to the display. In fact, it is impossible for a raster display to fill the quad exactly as shown because the edges of the quad do not coincide with the boundaries between pixel cells. In other words, because each pixel can only display a single color, each pixel cell is filled with only a single color; if the display were to render the quad exactly as shown, the pixel cells along the quad‘s edge would need to show two distinct colors: blue where covered by the quad and white where only the background is visible.

Instead, the graphics hardware is tasked with determining which pixels should be filled to approximate the quad. This process is called rasterization, and is detailed inRasterization Rules. For this particular case, the rasterized quad is shown in Figure 4:

圖片3展示了數學上應該顯示的矩形。但是并不是Direct3D光柵化之后的樣子。實際上,像圖3這樣光柵化是根本不可能的,因為每個像素點亮區域只能是一種顏色,不可能一半有顏色一半沒有顏色。如果可以像上面這樣顯示,那么矩形邊緣的像素區域必須顯示兩種不同的顏色:藍色的部分表示在矩形內,白色的部分表示在矩形外。

因此,圖形硬件將會執行判斷哪個像素應該被點亮以接近真正的矩形的任務。這個過程被稱之為光柵化,詳細信息請查閱Rasterization Rules.。對于我們這個特殊的例子,光柵化后的結果如圖4所示

什么是光柵化 光柵化中陰影的處理

圖4

Note that the quad passed to Direct3D (Figure 3) has corners at (0, 0) and (4, 4), but the rasterized output (Figure 4) has corners at (-0.5,-0.5) and (3.5,3.5)。 Compare Figures 3 and 4 for rendering differences. You can see that what the display actually renders is the correct size, but has been shifted by -0.5 cells in the x and y directions. However, except for multi-sampling techniques, this is the best possible approximation to the quad. (See theAntialias Sample for thorough coverage of multi-sampling.) Be aware that if the rasterizer filled every cell the quad crossed, the resulting area would be of dimension 5 x 5 instead of the desired 4 x 4.

If you assume that screen coordinates originate at the top-left corner of the display grid instead of the top-left pixel, the quad appears exactly as expected. However, the difference becomes clear when the quad is given a texture. Figure 5 shows the 4 x 4 texture you’ll map directly onto the quad.

注意我們傳給Direct3D(圖三)的兩個角的坐標為(0,0)和(4,4)(相對于物理像素坐標)。但是光柵化后的輸出結果(圖4)的兩個角的坐標為(-0.5,-0.5)和(3.5,3.5)。比較圖3和圖4,的不同之處。你可以看到圖4的結果才是正確的矩形大小。但是在x,y方向上移動了-0.5個像素矩形單位。然而,拋開multi-sampling技術,這是接近真實大小矩形的最好的光柵化方法。注意如果光柵化過程中填充所有被覆蓋的物理像素的像素區域,那么矩形區域將會是5x5,而不是4x4.

如果你結社屏幕坐標系的原點在最左上角像素區域的最左上角,而不是最左上角的物理像素,這個方塊顯示出來和我們想要的一樣。然而當我們給定一個紋理的時候,區別就顯得異常突出了,圖5 展示了一個用于映射到我們的矩形的4x4的紋理。

什么是光柵化 光柵化中陰影的處理

圖5

Because the texture is 4 x 4 texels and the quad is 4 x 4 pixels, you might expect the textured quad to appear exactly like the texture regardless of the location on the screen where the quad is drawn. However, this is not the case; even slight changes in position influence how the texture is displayed. Figure 6 illustrates how a quad between (0, 0) and (4, 4) is displayed after being rasterized and textured.

因為紋理有4x4個紋素,并且矩形是4x4個像素,你可能想讓紋理映射后的矩形就像紋理圖一樣。然而,事實上并非如此,一個位置點的輕微變化也會影響貼上紋理后的樣子,圖6闡釋了一個(0,0)(4,4)的矩形被光柵化和紋理映射后的樣子。

什么是光柵化 光柵化中陰影的處理

圖6

The quad drawn in Figure 6 shows the textured output (with a linear filtering mode and a clamp addressing mode) with the superimposed rasterized outline. The rest of this article explains exactly why the output looks the way it does instead of looking like the texture, but for those who want the solution, here it is: The edges of the input quad need to lie upon the boundary lines between pixel cells. By simply shifting the x and y quad coordinates by -0.5 units, texel cells will perfectly cover pixel cells and the quad can be perfectly recreated on the screen. (Figure 8 illustrates the quad at the corrected coordinates.)

圖6中展示了貼上紋理后的矩形(使用線性插值模式和CLAMP尋址模式),文中剩下的部分將會解釋為什么他看上去是這樣而不像我們的紋理圖。先提供一個解決這個問題的方法:輸入的矩形的邊界線需要位于兩個像素區域之間。通過簡單的將x和y值移動-0.5個像素區域單位,紋素將會完美地覆蓋到矩形區域并且在屏幕上重現(圖8闡釋了這個完美覆蓋的正確的坐標)(譯者:這里你創建的窗口的坐標必須為整數,因此位于像素區域的中央,你的客戶區屏幕最左像素區域的邊界線在沒有進行移位-0.5之前也必位于某個像素區域的中央)

The details of why the rasterized output only bears slight resemblance to the input texture are directly related to the way Direct3D addresses and samples textures. What follows assumes you have a good understanding oftexture coordinate space And bilinear texture filtering.

關于為什么光柵化和紋理映射出來的圖像只有一點像我們的原始紋理圖的原因和Direct3D紋理選址模式和過濾模式有關。

Getting back to our investigation of the strange pixel output, it makes sense to trace the output color back to the pixel shader: The pixel shader is called for each pixel selected to be part of the rasterized shape. The solid blue quad depicted in Figure 3 could have a particularly simple shader:

回到我們調查為什么會輸出奇怪像素的過程中,為了追蹤輸出的顏色,我們看看像素著色器:像素作色器在光柵后的圖形中的每個像素都會被調用一次。圖3中藍色的線框圍繞的矩形區域都會使用一個簡單的作色器:

float4 SolidBluePS() : COLOR

{

return float4( 0, 0, 1, 1 );

}

For the textured quad, the pixel shader has to be changed slightly:

texture MyTexture;

sampler MySampler =

sampler_state

{

Texture = 《MyTexture》;

MinFilter = Linear;

MagFilter = Linear;

AddressU = Clamp;

AddressV = Clamp;

};

float4 TextureLookupPS( float2 vTexCoord : TEXCOORD0 ) : COLOR

{

return tex2D( MySampler, vTexCoord );

}

That code assumes the 4 x 4 texture of Figure 5 is stored in MyTexture. As shown, the MySampler texture sampler is set to perform bilinear filtering on MyTexture. The pixel shader gets called once for each rasterized pixel, and each time the returned color is the sampled texture color at vTexCoord. Each time the pixel shader is called, the vTexCoord argument is set to the texture coordinates at that pixel. That means the shader is asking the texture sampler for the filtered texture color at the exact location of the pixel, as detailed in Figure 7:

代碼假設圖5中的4x4的紋理存儲在MyTexture中。MySampler被設置成雙線性過濾。光柵化每個像素的時候調用一次這個Shader.每次返回的顏色值都是對sampled texture使用vTexCoord取樣的結果,vTexCoord是物理像素值處的紋理坐標。這意味著在每個像素的位置都會查詢紋理以得到這點的顏色值。詳情如圖7所示:

什么是光柵化 光柵化中陰影的處理

圖7

The texture (shown superimposed) is sampled directly at pixel locations (shown as black dots)。 Texture coordinates are not affected by rasterization (they remain in the projected screen-space of the original quad)。 The black dots show where the rasterization pixels are. The texture coordinates at each pixel are easily determined by interpolating the coordinates stored at each vertex: The pixel at (0,0) coincides with the vertex at (0, 0); therefore, the texture coordinates at that pixel are simply the texture coordinates stored at that vertex, UV (0.0, 0.0)。 For the pixel at (3, 1), the interpolated coordinates are UV (0.75, 0.25) because that pixel is located at three-fourths of the texture‘s width and one-fourth of its height. These interpolated coordinates are what get passed to the pixel shader.

紋理(重疊上的區域)是在物理像素的位置采樣的(黑點)。紋理坐標不會受光柵化的影響(它們被保留在投影到屏幕空間的原始坐標中)黑點是光柵化的物理像素點的位置。每個像素點的紋理坐標值可以通過簡單的線性插值得到:頂點(0,0)就是物理像素(0,0)UV是(0.0,0.0)。像素(3,1)紋理坐標是UV(0.75,0.25)因為像素值是在3/4 紋理寬度和1/4紋理高度的位置上。這些插過值的紋理坐標被傳遞給了像素著色器。

The texels do not line up with the pixels in this example; each pixel (and therefore each sampling point) is positioned at the corner of four texels. Because the filtering mode is set to Linear, the sampler will average the colors of the four texels sharing that corner. This explains why the pixel expected to be red is actually three-fourths gray plus one-fourth red, the pixel expected to be green is one-half gray plus one-fourth red plus one-fourth green, and so on.

每個紋素并不和每個像素重疊,每個像素都在4個紋素的中間。因為過濾模式是雙線性。過濾器將會取像素周圍4個顏色的平均值。這解釋了為什么我們想要的紅色實際上確是3/4的灰色加上1/4的紅色。應該是綠色的像素點是1/2的灰色加上1/4的紅色加上1/4的綠色等等。

To fix this problem, all you need to do is correctly map the quad to the pixels to which it will be rasterized, and thereby correctly map the texels to pixels. Figure 8 shows the results of drawing the same quad between (-0.5, -0.5) and (3.5, 3.5), which is the quad intended from the outset.

為了修正這個問題,你需要做的就是正確的將矩形映射到像素,然后正確地映射紋素到像素。圖8顯示了將(-0.5, -0.5) and (3.5, 3.5)的矩形進行紋理映射后的結果。

什么是光柵化 光柵化中陰影的處理

圖8

Summary

In summary, pixels and texels are actually points, not solid blocks. Screen space originates at the top-left pixel, but texture coordinates originate at the top-left corner of the texture’s grid. Most importantly, remember to subtract 0.5 units from the x and y components of your vertex positions when working in transformed screen space in order to correctly align texels with pixels.

總結:

總的來說,像素和紋素實際上是點,不是實體的塊。屏幕空間原點是左上角的物理像素,但是紋理坐標原點是紋素矩形的最左上角。最重要的是,記住當你要將紋理中的紋素正確的映射到屏幕空間中的像素時,你需要減去0.5個單位

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    如何評價光柵渲染光線在場景的折返?

    對于那些想要獲得現實感的藝術家或開發人員而言,一款可以模擬光在場景中發生相互作用(即光反射、光吸收、光折射等)的渲染器(具有創建視覺效果的功能)十分重要。這就需要在處理每個像素時,對場景有一個全方位的了解,這里不是指最常見的渲染技術,而是需要實時的光柵
    發表于 05-22 10:17 ?2484次閱讀

    刻劃光柵和全息光柵的區別

    ? 由于刻劃光柵和全息光柵的制造工藝之間的區別,每種類型的光柵相對于另一種都有優點和缺點,本文將對其進行簡單描述。 光柵效率的差異 刻劃光柵
    的頭像 發表于 08-10 06:45 ?1070次閱讀
    刻劃<b class='flag-5'>光柵</b>和全息<b class='flag-5'>光柵</b>的區別

    Littrow結構光柵系統的配置與優化

    光柵周期自動調整光柵的方向和探測器的方向和位置,來確保Littrow條件滿足。在第二個例子,我們討論了在Littrow配置下使用光柵的優化,目標是設計
    發表于 12-25 15:35

    測定衍射光柵光柵常數

    測定衍射光柵光柵常數:1、了解光柵衍射的基本原理。2、學會光柵常數的測量方法。----光具座法光柵是一種常用的光學色散元件,具有空間周期性
    發表于 11-03 15:31 ?31次下載

    光柵的構造,光柵尺的構造和種類,光柵讀數頭

    光柵的構造 光柵是利用光的透射、衍射現象制成的光電檢測元件,它主要由標尺光柵光柵讀數頭兩部分組成。通常,標尺
    發表于 05-06 23:15 ?6794次閱讀
    <b class='flag-5'>光柵</b>的構造,<b class='flag-5'>光柵</b>尺的構造和種類,<b class='flag-5'>光柵</b>讀數頭

    光柵衍射原理

    光柵衍射原理 光柵  光柵光柵是結合數碼科技與傳統印刷的技術,能在特制的膠片上顯現不同的特殊效果。在平面上展示栩栩
    發表于 11-24 18:30 ?1.7w次閱讀

    波導光柵,波導光柵原理什么?

    波導光柵,波導光柵原理什么? 數組波導光柵屬于平面光路技術(Planar Light Circuit; PLC)的一種,因此在介紹數組波導光柵之前,需先談談平面波導技
    發表于 04-02 16:13 ?5852次閱讀

    光纖光柵,光纖光柵是什么意思

    光纖光柵,光纖光柵是什么意思 Fiber Bragg Grating(FBG)是衍射光柵概念的發展,其衍射是由光纖內部折射率的變化實現的。 FBG好像一個窄帶的
    發表于 04-02 16:35 ?3533次閱讀

    實時光線的混合渲染:光線追蹤VS光柵

    在上一篇文章,我們闡述了PowerVR光線追蹤API的基本知識,包括場景生成和光線處理。在本文中,我們將展示如何有效地使用這些光線來呈現不同的效果,并將其結果與光柵進行對比。 以下
    發表于 02-23 11:34 ?2250次閱讀

    基于FPGA的光柵傳感器信號處理電路研究

    光柵計量技術在工業計量領域得到了飛速發展,其中光柵傳感器在線位移和角位移測量得到廣泛應用。對光柵信號進行處理有很多方法,如傳統電路、 單片
    發表于 08-30 18:10 ?5次下載
    基于FPGA的<b class='flag-5'>光柵</b>傳感器信號<b class='flag-5'>處理</b>電路研究

    光柵尺是什么_光柵尺的工作原理

    光柵尺,也稱為光柵尺位移傳感器或光柵尺傳感器,是通過利用光柵的光學原理工作的測量反饋裝置。光柵尺經常應用于數控機床的閉環伺服系統
    發表于 12-12 18:51 ?4.4w次閱讀
    <b class='flag-5'>光柵</b>尺是什么_<b class='flag-5'>光柵</b>尺的工作原理

    為什么要光柵?怎么實現光柵方法?

    光柵是在計算機上生成圖像的重要步驟,然而無論是opengl還是directx還是其他的圖形接口都封裝了光柵方法。我自己做了個光柵器,接下
    發表于 04-27 11:19 ?8986次閱讀
    為什么要<b class='flag-5'>光柵</b><b class='flag-5'>化</b>?怎么實現<b class='flag-5'>光柵</b><b class='flag-5'>化</b>方法?

    光柵傳感器的應用_光柵傳感器選型指南

    由于光柵傳感器測量精度高、動態測量范圍廣、可進行無接觸測量、易實現系統的自動和數字,因而在機械工業得到了廣泛的應用。
    發表于 10-12 08:43 ?3420次閱讀

    安全光柵和安全光幕是什么,有什么區別

      安全光柵傳感器在自動及機械加工行業的有著重要的保護作用。常見的應用有沖床安全光柵,油壓機安全光柵,折彎機雙手安全
    的頭像 發表于 11-23 09:50 ?7174次閱讀

    3D渲染——光柵渲染原理解析

    渲染進行介紹,描述了簡單場景下3D渲染過程,主要幫助讀者了解基于光柵的 3D 渲染原理及過程。本文為系列文章,并在下一篇系列文章以 Intel Gen12 為例,講述 GPU 一些基本硬件單元
    的頭像 發表于 05-18 17:29 ?2311次閱讀
    3D渲染——<b class='flag-5'>光柵</b><b class='flag-5'>化</b>渲染原理解析
    主站蜘蛛池模板: 强开少妇嫩苞又嫩又紧九色| 5G在线观看免费年龄确认18| 公和我做好爽添厨房中文字幕| 青娱乐在线一区| 冈本视频黄页正版| 性吧 校园春色| 娇妻在床上迎合男人| 19十主播福利视频| 人妖操女人| 国产在线公开视频| 中国特级黄色大片| 日本精品久久久久中文字幕 1 | 久久久性色精品国产免费观看| 99久久精品国产亚洲AV| 特级做A爰片毛片免费69| 接吻吃胸摸下面啪啪教程| AV福利无码亚洲网站麻豆| 我不卡影院手机在线观看| 久久精品影院永久网址| 成人免费观看在线视频| 亚洲中文字幕AV在天堂| 热热久久超碰精品中文字幕| 黄A无码片内射无码视频| BL低喘贯穿顶弄老师H| 亚洲成a人不卡在线观看| 欧美日韩高清一区二区三区| 国模丽丽啪啪一区二区| wwwwxxxx欧美| 一级毛片皇帝 宫女| 日日噜噜噜噜夜夜爽亚洲精品| 久久精品国产清白在天天线 | 无颜之月全集免费观看| 久久天天婷婷五月俺也去| 国产AV一区二区三区日韩| 最近中文字幕在线中文高清版| 丝袜美腿美女被狂躁在线观看| 美女脱精光让男生桶下面| 果冻传媒免费观看| 成人性生交大片| 最新精品学生国产自在现拍| 驯服有夫之妇HD中字日本|