主角遮擋渲染輪廓線方案

2021-08-02 13:54:05 字數 1394 閱讀 7729

1.在前向渲染中,直接使用下面shader就可以實現。

2.在延遲渲染中,由於光源是後邊計算的,所以不能直接使用該shader,直接使用會導致畫素顏色參與光照等計算顯示不對,方案有如下:

一.使用graphics.drawmeshnow()去實時渲染主角輪廓線,提前設定好材質的pass,該方案遇到乙個問題 渲染無法實時根據主角動畫變化。

二.使用動態shader替換,還是會出現1的現象。

三.使用camera.renderwithshader在螢幕後處理階段實時重新渲染輪廓線.首先把主角shader替換 只給subshader增加乙個tag標記,然後renderwithshader的時候過濾該tag。最後因為是螢幕後處理和其他場景顏色混合 所以下邊的shader用不了。需要兩個pass第乙個用來stencil 標記ztest leqal的。然後第二個pass過濾第乙個的標記部分再用ztest greater ,不然直接乙個pass 會渲染很多東西。另外第二個pass需要 blend one one 因為主角etc alpha是0  顏色輸出 直接輸出乙個固定值就行了 不需要另外計算。如果其他角色擋住玩家也不需要透視,那麼其他玩家也需要進行pass0的模板測試。

camera.clearflags=cameraflags.nothing;

camera.settargetbuffers(rt.colorbuffer,rt.depthbuffer)//設定當前相機的渲染目標rendertarget//和camera.targettexture類似。

camera.renderwithshader(shader,"rendertype")

shader "penglu/occtransvf"     

_rimcolor("rimcolor",color) = (0,1,1,1)

_rimpower ("rim power", range(0.1,8.0)) = 1.0

}

subshader

pass

; struct v2f ;

float4 frag (v2f i) : color

endcg

} pass

;

struct v2f ;

float4 frag (v2f i) : color

endcg

}

}

fallback "diffuse"

}

這裡要注意:要想主角材質之間不渲染相互遮擋,所有renderqueue必須設成相同,才能保證在同一批裡邊渲染 深度值是一樣的(同一批renderqueue渲染的深度快取值是一樣的,渲完再寫入),如果先後渲染順序不同,深度值已經被寫入過,就會出現內部互相遮擋渲染。

}

大樓輪廓線

輸入第一行乙個數表示有n座大樓,後面依次輸入n行,每一行表示大樓的起始點,終點和高度,輸出為大樓輪廓資訊 如下圖 第一行輸出為3 後面有三行輸入表示大樓的資訊 第二行為 1 3 3 第三行為 2 4 4 第三行為 5 6 1 輸出大樓輪廓資訊 第一行 1 2 3 第二行 2 4 4 第三行 5 6 ...

輪廓線動態規劃

這類問題的共同特點是 在乙個比較 窄 的棋盤上進行複雜操作。如果採用傳統方法 以整行整列為狀態 進行動態規劃,將無法進行狀態轉移,因此只能把參差不齊的 輪廓線 作為狀態的一部分。儘管輪廓線的形態複雜,但由於棋盤比較窄,狀態總數仍然可以控制在可以接受的範圍內。直接看例題 1,鋪放骨牌 用1 2骨牌覆蓋...

輪廓線DP 專項

題意 n m n mn m n,m 11 的矩陣,填1 2 1 21 2或2 12 1 2 1方塊,求方案數 解析 以前寫過狀壓的做法,直接一行一行維護,現在寫輪廓線的做法 注意 當前填紅點的意思是,以紅點作為方塊的右下角 因為方塊長度為2,所以對紅點位置有三種操作 向上填 為了使所有方塊填滿,如果...