Superfícies Paramétricas - Patches

As superfícies paramétricas,ou patches, constituem a forma mais geral de se representar superfícies curvas. Enquanto polígonos são mais utilizados em superfícies facetadas e quádricas são limitadas em sua variedade de formas, as superfícies paramétricas apresentam grande flexibilidade ao se manipular superfícies curvas.

Na Interface RenderMan duas classes de superfícies paramétricas são suportadas: superfícies uniformes e NURBs (Non-Uniform Rational B-splines). Restringiremo-nos ao estudo das superfícies uniformes.

As superfícies uniformes, ainda, podem ser divididas em bilineares e bicúbicas.


Patches Bilineares

Um patch bilinear é um quadrilátero com arestas retilíneas delimitado por quatro vértices, não necessariamente coplanares, no espaço tridimensional. O nome bilinear é devido ao fato de que sua superfície é descrita através de uma interpolação bilinear das posições dos vértices.

Abaixo são apresentados cilindros e esferas aproximados por patches bilineares em diversas resoluções (número de patches utilizados na aproximação).
Cilindro em baixa resolução.
Cilindro em média resolução.
Cilindro em alta resolução.
Esfera em baixa resolução.
Esfera em média resolução.
Esfera em alta resolução.

Patches bilineares podem ser utilizados em superfícies facetadas ou para aproximar superfícies curvas pequenas (onde a interpolação resulta numa superfície aparentemente suave), já que, para esses casos, a geração de imagens de patches bilineares é mais eficiente quando comparada à geração de imagens de polígonos e de patches bicúbicos


Patches Bicúbicos

Um patch bicúbico é uma superfície curva, também de quatro arestas, porém com um formato mais flexível. É descrita através de um conjunto de pontos de controle arranjados numa matriz 4x4, chamado "control hull". O "control hull" aproxima a superfície e seus pontos podem ser manipulados de forma a alterar o formato da superfície de forma previsível.

Existem alguns tipos de patches bicúbicos, suportados pela Interface RenderMan, classificados de acordo com a maneira pela qual o "control hull" é interpretado ao se descrever um superfície. São eles: Bézier, B-spline, Catmull-Rom e Hermite.

Como um patch bicúbico é derivado de uma curva ("spline"), definida matematicamente por um polinômio, os tipos de patches acima apresentados serão descritos por meio de suas curvas correspondentes. Tais curvas são definidas por quatro pontos de controle na Interface RenderMan.

A curva na qual uma superfície Bézier é baseada, Bézier spline, interpola o primeiro e o último pontos de controle, sendo que os dois restantes dão a direção da curva nos pontos extremos. Esta é uma curva que provê grande controle sobre sua forma por parte do usuário. Ao lado encontra-se representada uma superfície do tipo Bézier.

Bézier (rib)

Bézier - Control Hull (rib)
Para melhor caracterizar a superfície Bézier, a imagem ao lado apresenta os pontos de controle utilizados para que fosse gerada a superfície apresentada acima.

A curva na qual se baseia a superfície B-spline, é uma curva mais difícil de ser controlada, uma vez que ela é totalmente aproximada. Porém ela resulta numa aparência muito suave. Ao lado encontra-se representada uma superfície do tipo B-spline.

B-spline (rib)

Catmull-Rom (rib)
Para a superfície Catmul-Rom, a curva base interpola o segundo e o terceiro pontos de controle. A tangente nestes pontos é paralela à linha que liga o ponto anterior(ao segundo ou terceiro ponto) ao ponto seguinte. Uma superfície representativa do tipo Catmul-Rom encontra-se ao lado.

A curva na qual se baseia uma superfície do tipo Hermite, interpola o primeiro e o terceiro pontos de controle. Os outros dois pontos são vetores, com comprimento e direção, que determinam a tangente da curva nos pontos interpolados. O comprimento destes vetores define a curvatura da curva nos pontos extremos. Ao lado, encontra-se uma superfície do tipo Hermite.

Hermite (rib)

Para facilitar a representação de superfícies mais complexas, a Interface RenderMan suporta, ainda, patch meshes.

Patch Meshes

Patch mesh é um conjunto de patches adjacentes declarados numa matriz bidimensional. Podem ser tanto bilineares como bicúbicos. Este conjunto de patches pode definir superfícies bastante complexas, uma vez que o que se tem é um grande número de pontos de controle, possibilitando uma manipulação maior do formato da superfície.

Abaixo temos dois exemplos de patch meshes bicúbicos representando superfícies de revolução.
O pino de boliche ao lado foi gerado a partir de uma curva constituida de pontos do perfil do pino. Este perfil é então varrido em torno de seu eixo - eixo que passa pelo centro da base e segue até o centro do topo do pino - dando origem a uma superfície fechada. A superfície resultante é do tipo Bézier.

Pino de Boliche (listagem em C)

Lata de Cerveja (listagem em C)
Para a síntese da lata de cerveja ao lado, usou-se o mesmo procedimento do pino de boliche. A superfície resultante também é do tipo Bézier.
Para dar uma melhor aparência à lata de cerveja gerada, foi adicionada a ela uma textura de um rótulo de cerveja real.

Lata de Cerveja (listagem em C)

Volta para Introdução