OpenGL Shading Language



Documentos relacionados
Computação Gráfica. GLSL - Programação de Shaders Iluminação

Computação Gráfica. GLSL - Programação de Shaders Iluminação

Computação Gráfica. GLSL Programação de Shaders

Bruno Pereira Evangelista.

GLSL Programação de Shaders

GPU and GLSL. Prof. João Madeiras Pereira 2008/2009

Computação Gráfica. GLSL - Programação de Shaders Toon Mapping; Texturas

Introdução ao OpenGL 2.1 e GLSL 1.2

Prof. Fernando V. Paulovich 16 de maio de SCC Computação Gráca

Instituto Tecnológico de Aeronáutica. Prof. Carlos Henrique Q. Forster Sala 121 IEC. Luiz Felipe Simões Hoffmann

Animação e Visualização Tridimensional

Computação Gráfica. Renderização em Tempo Real. Erivaldo Xavier de Lima Filho

Universidade de Brasília Instituto de Ciências Exatas Departamento de Ciência da Computação. Shader Não Fotorrealístico para Desenho de Mangás

Utilização. de Shaders de efeitos realistas para jogos. Bruno Pereira Evangelista. Pontifícia Universidade Católica de Minas Gerais

Modelos de Iluminação Métodos de surface-rendering

8. Síntese de Imagens: Cálculo de Cor

1. Evolução do OpenGL

Geração Procedural de Terrenos em GPU

Luiz Gonzaga da Silveira Jr

Computação Gráfica. GLSL - Introdução e Programação da Aplicação OpenGL

INF 1620 P1-10/04/02 Questão 1 Nome:

Instituto Tecnológico de Aeronáutica. Prof. Carlos Henrique Q. Forster Sala 121 IEC. Luiz Felipe Simões Hoffmann

Introdução à Linguagem

Conceitos de Linguagens de Programação

2 Orientação a objetos na prática

Iluminação e sombreamento

Um Tutorial sobre GPUs

MC-102 Aula 17 Strings e Matrizes

OpenGL 3.* INF Rendering em Tempo Real. Waldemar Celes Departamento de Informática, PUC-Rio

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

Expressões. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Java. Marcio de Carvalho Victorino

XNA Game Studio Express. Introdução. aos Shaders. Aula 9. Alexandre Santos Lobão

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

Explorando Charcoal Rendering

Introdução a POO. Introdução a Linguagem C++ e POO

Paulo Sérgio Rodrigues. Exercícios de Laboratório

Introdução à Programação

Linguagens de Programação

INTRODUÇÃO À LINGUAGEM C++

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

Introdução a Linguagem C

Programação Paralela e Distribuída (DCC/UFRJ)

Formação em game programming: 01 - Introdução à programação

Algoritmos e Programação Estruturada

Programação de Computadores I. Linguagem C Vetores

Prof. Fernando V. Paulovich 3 de maio de SCC Computação Gráca

Introdução a Java. Hélder Nunes

Iluminaçao. Os modelos de Iluminação são técnicas usadas para calcular a intensidade da cor de um ponto a ser exibido.

Programando em C# Orientado a Objetos. By: Maromo

Técnicas de Programação I

Harrison Kinsley Will McGugan

Estruturas (registros)

INF 1005 Programação I

Manipulação de Arquivos

Aula 1. // exemplo1.cpp /* Incluímos a biblioteca C++ padrão de entrada e saída */ #include <iostream>

O COMPUTADOR. Introdução à Computação

Introdução à Programação em OpenGL. Prof. Márcio Bueno

Java 2 Standard Edition Como criar classes e objetos

struct LISTA item quant

Capítulo 14. Herança a e Polimorfismo. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

OpenGL. Uma Abordagem Prática e Objetiva. Marcelo Cohen Isabel Harb Manssour. Novatec Editora

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

2ª LISTA DE EXERCÍCIOS CLASSES E JAVA Disciplina: PC-II. public double getgeracaoatual() {return geracaoatual;}

UNIVERSIDADE FEDERAL DO PARANÁ

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Programação Básica em Arduino Aula 2

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 4

Fundamentos de Programação II. Introdução à linguagem de programação C++

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

glslangel: Uma Ferramenta de Depuração para a Linguagem GLSL

Algoritmos e Programação _ Departamento de Informática

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

INTRODUÇÃO A OPENGL. Computação Gráfica

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Programação 1. Rafael Vargas Mesquita. ftp://ftp.ci.ifes.edu.br/informatica/rafael/

Programação por Objectos. Java

Trabalho 3: Agenda de Tarefas

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

OpenCV.

Linguagem de Programação. Introdução ao PHP. Prof Mauricio Lederer Ciência da Computação - UNIANDRADE 1

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Algoritmos e Programação

Estrutura de Dados Básica

Application Note FBEE Comunicação Serial Wireless REV Rev01

Computação Gráfica - 13

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Aproximação experimental da complexidade assintótica de shaders para dispositivos móveis utilizando OpenGL ES

Cap.2.5: Design de Algoritmos e Programação Estruturada. Algoritmos, fluxogramas e pseudo-código

Desenvolvimento Web TCC Turma A-1 /

Programação científica C++

Curso de Linguagem C

Algoritmos e Programação II. Sobrecarga

Sistemas Microcontrolados

Prof. Esp. Adriano Carvalho

Prof. Dr. Abel Gomes Cap.4: Design de Algoritmos e Programação Estruturada. Algoritmos, fluxogramas e pseudo-código

Aula 1 Tipo Abstrato de Dados

Transcrição:

OpenGL Shading Language Guilherme S. Moura (gsm@cin.ufpe.br) Saulo A. Pessoa (sap@cin.ufpe.br) Vladimir Alves (vap2@cin.ufpe.br) Felipe Maia O que é? High Level Shading Language para OpenGL Descreve shaders Programa que define as propriedades de um vértice (vertex) ou pixel (fragment) Vertex -> Posição Fragment -> Cor 2

Por que usar Versatilidade - funcionalidade programável permite maior expressividade criativa Efeitos de última geração são possíveis em tempo real por GPUs programáveis Poder de processamento mais pode ser feito na GPU Libera a CPU para outras tarefas importantes GPU faz operações em paralelo 3 Por que usar Tudo o que pode ser feito pela funcionalidade fixa de OpenGL pode ser realizado por shaders, e muito mais! Inclusive cálculos não-gráficos GLSL é multi-plataforma - através dos vendedores de hardware e através dos sistemas operacionais 4

Vertex shaders Programas que operam sob vértices e seus dados associados; Intencionado a realizar: Vertex transformation Normal transformation and normalization Texture coordinate generation Texture coordinate transformation Lighting Color material application 5 Fragment shaders Programas que operam sob fragmentos (pixels) e seus dados associados; Intencionado a realizar: Operações em valores interpolados Acesso de textura Aplicação de textura Fog Soma de cores 6

Gramática GLSL Parece com C, mas com algumas importantes diferenças Não possui ponteiros Não possui operadores bit a bit Tipos básicos adicionais, incluindo vetores, matrizes, e samplers. Não há doubles ou strings 7 Tipos Básicos float, int, bool, sampler Vetores vec2, vec3, vec4 ivec2, ivec3, ivec4 bvec2, bvec3, bvec4 Matrizes mat2, mat3, mat4 8

Algumas operações vec4(1.0, 2.0, 3.0, 4.0) vec4.x => 1.0 vec4.xy => vec2(1.0, 2.0) vec4.rgba => vec4(1.0, 2.0, 3.0, 4.0) vec4.b => 3.0 vec4.xgb => erro! 9 Algumas operações vec4(1.0, 2.0, 3.0, 4.0) vec4.x => 1.0 vec4.xy => vec2(1.0, 2.0) vec4.rgba => vec4(1.0, 2.0, 3.0, 4.0) vec4.b => 3.0 vec4.xgb => erro! Swizzling e Smearing vec4.wzyx => vec4.abgr => (4.0, 3.0, 2.0, 1.0) vec4.yyy => vec3(3.0, 3.0, 3.0) 10

Gramática GLSL Variáveis built-in (ex. posição e cor) Funções built-in (ex. sine, exponentiation, cross product, etc.) Fortemente tipada, a única conversão implícita é de int pra float; 11 Qualificadores de tipo attribute For frequently changing information, from the application to the vertex shader eg. position, normal etc. attribute vec4 gl_vertex; attribute vec3 gl_normal; uniform For infrequently changing information, from the application to the vertex or fragment shader eg. light position, texture unit, other constants uniform mat4 gl_modelviewmatrix; uniform mat3 gl_normalmatrix 12

Qualificadores de tipo varying For interpolated information passed from a vertex shader to a fragment shader eg. texture coordinates, vertex color varying vec4 gl_color; // fragment varying vec4 gl_texcoord[]; const To declare nonwritable, compile time constant variables 13 Vertex Program 14

Fragment Program 15 Example: Vertex Shader varying vec4 diffusecolor; varying vec3 fragnormal; varying vec3 lightvector; uniform vec3 eyespacelightposition; void main(){ vec3 eyespacevertex= vec3(gl_modelviewmatrix * gl_vertex); lightvector= vec3(normalize(eyespacelightposition - eyespacevertex)); fragnormal = normalize(gl_normalmatrix * gl_normal); } diffusecolor = gl_color; gl_position = gl_modelviewprojectionmatrix * gl_vertex; 16

Example: Fragment Shader varying vec4 diffusecolor; varying vec3 lightvector; varying vec3 fragnormal; void main(){ float perfragmentlighting=max(dot(lightvector,fragnormal),0.0); } gl_fragcolor = diffusecolor * perfragmentlighting; 17 Exercício 1 Crie um projeto novo no RenderMonkey Adicione o efeito padrão Position ao workspace (AddDefaultEffect/OpenGL/Position) Modifique o modelo 3D para teapot.3ds Abra o Fragment Shader e modifique a cor de saída para vermelha 18

Exercício 2 Abra o projeto Exercicio1.rfx no RenderMonkey Abra o Vertex Shader e passe o valor da normal de cada vértice para o Fragment Shader Exiba o valor da normal recebido no Fragment Shader como cor Altere o Vertex Shader para passar valor da normal em coordenadas de vista 19 Exercício 3 Crie um novo projeto no RenderMonkey Adicione o efeito padrão Textured ao Workspace Modifique a textura base para o arquivo DayEarth.jpg Adicione uma textura nova ao efeito e escolha o arquivo NightEarth.jpg Modifique a origem de ambas as textura para Bottom Left Adicione um Texture Object ao Pass 0 que referencie a textura nova Também adicione uma variável do tipo Float ao Pass 0 Modifique o Fragment Shader para que o resultado exibido seja uma mistura entre as texturas NightEarth.jpg e DayEarth.jpg de acordo com o valor da variável (zero exibe noite e um exibe dia). 20

Exercício 4 Implemente o modelo de iluminação de Phong Criar variáveis para passar os coeficientes difuso, especular e ambiental do objeto Criar variáveis para passar a posição e a cor de uma fonte de luz onidirecional 21 Posso usar GLSL? Atualmente, quase todas as GPUs oferecem suporte GLEW OpenGL Extension Wrangler Library http://prdownloads.sourceforge.net/glew/glew- 1.3.2-src.zip?download http://glew.sourceforge.net/ glewinfo.exe Irá lhe fornecer as funcionalidades da sua placa 22

Instalação e Inicialização glew32.dll, glew32.lib, glew.h, wglew.h Execute glewinit(); após glutinit(); GLenum err = glewinit(); if (GLEW_OK!= err) { } Também pode checar extensões if (GLEW_ARB_vertex_shader && GLEW_ARB_fragment_shader) printf("ready for GLSL\n"); else { printf("no GLSL support\n"); exit(1); } 23 Setup 24

Duvidas? Referencias KESSENICH, John M. The OpenGL Shading Language. Language Version: 1.20.8, http://www.opengl.org/documentation/glsl/ ROST, R. J. OpenGL Shading Language. Addison-Wesley Professional, 2004. ISBN 0321197895. Keith O Conor. An Introduction to the OpenGL Shading Language. 25