2012-06-25 140 views
7

我已經使用glsl成功實現了一個cel着色器。但我的問題是概述一切,因特網上的每一個opengl例子都很老舊,與當前的技術不匹配,所以技術太慢等等......所以我無法找到在glsl中做到的。我想到了一些想法,比如將最不密集的區域着色爲黑色,但對於gl_Vertex,gl_Position和眼睛位置還沒有足夠的解釋。所以,由於每種技術都太舊了,我終於決定向某人詢問這個輪廓問題。OpenGL GLSL Cel着色和輪廓算法

回答

9

我將使用某種類型的邊緣檢測濾波器對zbuffer然後調節與(逆向)結果幀緩衝器(可能與在濾色緩衝邊緣檢測進行組合)。其中最常見的邊緣檢測濾波器是Sobel算子:

http://en.wikipedia.org/wiki/Sobel_operator

編輯:這樣做的另一種廉價的方式是你渲染普通網繪製網格的黑色副本撲殺面臨前倒置,頂點稍微向法線方向移動。這可能是他們在XIII中所做的,我也很確定這是在Jet Set Radio中完成的。

EDIT2:如果您希望輪廓的厚度與觀察者之間的距離保持恆定,則應該用這個距離來縮放移動頂點的量。

+1

我認爲這是一個簡單的輪廓過於昂貴。 – deniz

+0

你瞄準什麼樣的硬件? –

+0

像x1650pro equivelant。 XIII遊戲以某種方式滿足真正舊硬件的要求。 – deniz