這一節教程是關於渲染3d物體的發光邊緣,**結構如下:
這裡借用下虛幻四引擎演示下「邊緣發光效果」,如下圖所示:
如上面圖中虛幻四引擎中被選中的立方體的邊緣是發光的,我實現的就是這種發光效果
這裡有篇部落格介紹了「glow」是怎麼實現的:
[unity3d][shader 著色器]給物體邊緣加高光輪廓的辦法
這裡大致說下我實現的方法步驟:
(1)正常的渲染整個場景得到一張rtt,我稱其為scenertt,如下所示:
(2)渲染要發光的物體成一張blackwhitertt(也就是只有黑白兩種顏色的rt),如下所示:
實現的shader**:
drawblackwhiteshader.fx
cbuffer cbmatrix:register(b0)
;struct vertexin
;struct vertexout
;vertexout vs(vertexin ina)
float4 ps(vertexout outa) : sv_target
(3)對blackwhitertt進行高斯模糊,將物體邊緣的畫素偏移,也就是先進行水平模糊,然後進行垂直模糊,最終得到glowmapverticalblurrtt,如下所示:
相應的shader實現**:
horizontalblurshader.fx
texture2d shadertexture:register(t0); //紋理資源
samplerstate sampletype:register(s0); //取樣方式
//vertexshader
cbuffer cbmatrix:register(b0)
;cbuffer cbscreenwidth:register(b1)
struct vertexin
;struct vertexout
;vertexout vs(vertexin ina)
float4 ps(vertexout outa) : sv_target
verticalblurshader.fx
texture2d shadertexture:register(t0); //紋理資源
samplerstate sampletype:register(s0); //取樣方式
//vertexshader
cbuffer cbmatrix:register(b0)
;cbuffer cbscreenheight:register(b1)
struct vertexin
;struct vertexout
;vertexout vs(vertexin ina)
float4 ps(vertexout outa) : sv_target
(4)進行2d rendering,將第一步得到的「scenertt」和第三步得到的「glowmapverticalblurrtt」作為紋理資源使用。實現「發光邊緣」的思路:由於我們對之前只有黑白兩色的blackwhitertt進行渲染,那麼經過高斯模糊後,glowmapverticalblurrtt的邊緣顏色值變為灰色,也就是位於0.0f和1.0f之間,將這部分的畫素變為「高亮部分」,如下圖所示:
實現的shader**如下:
glowshader.fx
texture2d scenertt:register(t0); //scenertt
texture2d glowmaprtt:register(t1); //glowmaprtt
samplerstate wrapsampletype:register(s0); //取樣方式
cbuffer cbmatrix:register(b0)
;cbuffer cbglow:register(b1)
;struct vertexin
;struct vertexout
;vertexout vs(vertexin ina)
float4 ps(vertexout outa) : sv_target
else
return color;
}
Directx11教程四十二下之進行骨骼動畫的渲染
前面兩小節分別說明了骨骼動畫的數學原理和一種骨骼動畫格式m3d的讀取,這一節講解渲染的思路。其實,進行骨骼動畫的渲染,整體思路是 第一,求出某個動畫片段下某乙個時間點下所有骨骼的finalmatrix 由骨骼在某一幀的pos,scale,quat求出 第二,由於 第一 中渲染骨骼動畫的時間點可能不在...
Directx11教程37 紋理對映 7
本章是在教程35 36的基礎上來實現乙個光照紋理結合的程式,就是把場景中旋轉的cube加上紋理。lighttex.vs中頂點的結構現在為 struct vertexinputtype 紋理座標 output.tex input.tex 紋理座標不做任何變化,只是單純的從vs輸出到ps中。lightt...
Directx11教程38 紋理對映 8
上篇日誌中,我們用紋理和光照顏色調製的方式得到最終顏色,本章我們嘗試用紋理取樣的顏色,直接做為材質的漫反射係數kd,並用它來做光照計算,最後再做個gamma校正,如果不做的話,效果會偏亮。lighttex.ps主要改動 float4 texturecolor shadertexture.sample...