Renderiza¸
c˜
ao n˜
ao fotorealista
INF1339 – Computa¸c˜ao Gr´afica TridimensionalWaldemar Celes
celes@inf.puc-rio.br – sala 505 RDC
Tecgraf, DI/PUC-Rio
Non-photorealistic rendering
I Ilustra¸c˜ao t´ecnicaI Cartoon
I Arte
Renderiza¸c˜
ao de linhas
Renderiza¸c˜ao da malha
Problema: conflito no valor de z
I Rasteriza¸c˜ao de linhas 6= rasteriza¸c˜ao de pol´ıgonos
A
B
Renderiza¸c˜
ao de linhas
Renderiza¸c˜ao da malha
Problema: conflito no valor de z
I Rasteriza¸c˜ao de linhas 6= rasteriza¸c˜ao de pol´ıgonos
A
B
Renderiza¸c˜
ao de linhas
Uso de polygon offset
1. Desenha preenchimento com offset positivo
glPolygonOffset(1.0, 1.0); glEnable(GL POLYGON OFFSET FILL);
2. Desenha linhas sem offset
I Simples
I Exige duas passadas I Permite highlight I Pode falhar
Renderiza¸c˜
ao de linhas
Uso de polygon offset
1. Desenha preenchimento com offset positivo
glPolygonOffset(1.0, 1.0); glEnable(GL POLYGON OFFSET FILL);
2. Desenha linhas sem offset
I Simples
I Exige duas passadas I Permite highlight I Pode falhar
Renderiza¸c˜
ao de linhas
Uso do stencil buffer
I Para cada pol´ıgono
1. Renderiza linha marcando stencil
glStencilFunc(GL ALWAYS, 1, 1);
glStencilOp(GL KEEP, GL KEEP, GL REPLACE); glEnable(GL STENCIL TEST);
2. Renderiza preenchimento sem fragmentos marcados no stencil
glStencilFunc(GL NOTEQUAL, 1, 1); glStencilOp(GL KEEP, GL KEEP, GL KEEP); glEnable(GL STENCIL TEST);
I Baixo desempenho
Renderiza¸c˜
ao de linhas
Uso do stencil buffer
I Para cada pol´ıgono
1. Renderiza linha marcando stencil
glStencilFunc(GL ALWAYS, 1, 1);
glStencilOp(GL KEEP, GL KEEP, GL REPLACE); glEnable(GL STENCIL TEST);
2. Renderiza preenchimento sem fragmentos marcados no stencil
glStencilFunc(GL NOTEQUAL, 1, 1); glStencilOp(GL KEEP, GL KEEP, GL KEEP); glEnable(GL STENCIL TEST);
I Baixo desempenho
Renderiza¸c˜
ao de linhas
Uso de textura 1D I Com multi-textura S 0.0 1.0 level n level n+1 level n+2 1st unit 1.0 1.0 0.0 s 2nd unit 1.0 0.0 1.0 s 3rd unit 0.0 1.0 1.0 sRenderiza¸c˜
ao de linhas
Uso de textura 1D I Com multi-textura S 0.0 1.0 level n level n+1 level n+2 1st unit 1.0 1.0 0.0 s 2nd unit 1.0 0.0 1.0 s 3rd unit 0.0 1.0 1.0 sHidden line
Algoritmo
1. Marca z-buffer com preenchimento
I Com polygon offset I Sem afetar color buffer
2. Renderiza linhas
Hidden line
Algoritmo
1. Marca z-buffer com preenchimento
I Com polygon offset I Sem afetar color buffer
2. Renderiza linhas
Hidden line
Algoritmo
1. Marca z-buffer com preenchimento
I Com polygon offset I Sem afetar color buffer
2. Renderiza linhas vis´ıveis I Com z-test ligado
3. Renderiza linhas n˜ao vis´ıveis I Com z-test not equal
Hidden line
Algoritmo
1. Marca z-buffer com preenchimento
I Com polygon offset I Sem afetar color buffer
2. Renderiza linhas vis´ıveis I Com z-test ligado
3. Renderiza linhas n˜ao vis´ıveis I Com z-test not equal
Haloing
Algoritmo
1. Marca z-buffer com linha grossa
I Com polygon offset I Sem afetar color buffer
2. Renderiza linhas
I Com z-test ligado
Linhas mais grossas podem ocultar linhas vis´ıveis perto dos corners I Uma solu¸c˜ao ´e encurtar as linhas grossas
Haloing
Algoritmo
1. Marca z-buffer com linha grossa
I Com polygon offset I Sem afetar color buffer
2. Renderiza linhas
I Com z-test ligado
Linhas mais grossas podem ocultar linhas vis´ıveis perto dos corners I Uma solu¸c˜ao ´e encurtar as linhas grossas
Haloing
Algoritmo
1. Marca z-buffer com linha grossa
I Com polygon offset I Sem afetar color buffer
2. Renderiza linhas
Toon shading
Caracter´ısticas
I Ilumina¸c˜ao difusa com poucos tons
I Ilumina¸c˜ao especular, em geral, com um tom
I Arestas desenhadas em preto
Toon shading
Ilumina¸c˜ao difusa com poucos tons
Uso de textura 1D
I Filtro de textura para nearest
s s = f (l · n)
Para evitar aliasing
I Filtro de textura para linear
Toon shading
Ilumina¸c˜ao difusa com poucos tons
Uso de textura 1D
I Filtro de textura para nearest
s s = f (l · n)
Para evitar aliasing
I Filtro de textura para linear
Toon shading
Ilumina¸c˜ao difusa com poucos tons
Uso de textura 1D
I Filtro de textura para nearest
s s = f (l · n)
Para evitar aliasing
I Filtro de textura para linear
Toon shading
Ilumina¸c˜ao especular com um tom
Uso de textura 1D
I Filtro de textura para linear
Toon shading
Ilumina¸c˜ao especular com um tom
Uso de textura 1D
I Filtro de textura para linear
Toon shading
Renderiza¸c˜ao das arestas em preto
I Identificar arestas em pr´e-processamento
I Para cada aresta
(adjacente a dois triˆangulos) cos−1(n0· n1) > 60o
Toon shading
Renderiza¸c˜ao das arestas em preto
I Identificar arestas em pr´e-processamento
I Para cada aresta
(adjacente a dois triˆangulos) cos−1(n0· n1) > 60o
Toon shading
Renderiza¸c˜ao da silhueta
M´etodos
I Processamento no espa¸co do objeto
I Para cada aresta, em cada quadro
I Arestas que tem triˆangulos adjacentes: front & back
I Renderiza¸c˜ao direta com textura
Toon shading
Renderiza¸c˜ao da silhueta
M´etodos
I Processamento no espa¸co do objeto
I Para cada aresta, em cada quadro
I Arestas que tem triˆangulos adjacentes: front & back
I Renderiza¸c˜ao direta com textura
Toon shading
Renderiza¸c˜ao da silhueta
M´etodos
I Processamento no espa¸co do objeto
I Para cada aresta, em cada quadro
I Arestas que tem triˆangulos adjacentes: front & back
I Renderiza¸c˜ao direta com textura
Toon shading
Renderiza¸c˜ao direta da silhueta com textura
I Uso de sphere mapping
Toon shading
Renderiza¸c˜ao direta da silhueta com textura
Toon shading
Renderiza¸c˜ao direta da silhueta com back face
1. Desenha front faces
2. Desenha silhueta
I Alternativa 1: Desenha arestas das back faces em preto I Com uso de polygon offset
I Pode variar espessura
I Alternativa 2: Desenha back faces em preto I Valor do offset controla espessura da silhueta
Toon shading
Renderiza¸c˜ao direta da silhueta com back face
1. Desenha front faces
2. Desenha silhueta
I Alternativa 1: Desenha arestas das back faces em preto I Com uso de polygon offset
I Pode variar espessura
I Alternativa 2: Desenha back faces em preto I Valor do offset controla espessura da silhueta
Toon shading
Renderiza¸c˜ao direta da silhueta com back face
1. Desenha front faces
2. Desenha silhueta
I Alternativa 1: Desenha arestas das back faces em preto I Com uso de polygon offset
I Pode variar espessura
I Alternativa 2: Desenha back faces em preto I Valor do offset controla espessura da silhueta