efeitos de turbulência

15
Efeitos de turbulência Usando o exemplo “wood.cpp” e outros envolvendo o conceito de ruído (‘noise’) Luiz Fernando Estevão da Silva DRE: 107362404 Data: 21/09/2009

Upload: luiz-fernando-estevao-da-silva

Post on 26-Jun-2015

410 views

Category:

Technology


0 download

DESCRIPTION

Descrição e explicação do algoritmo de Perlin para gerar ruído. Foco especialmente no exemplo do toco de madeira.

TRANSCRIPT

Page 1: Efeitos De TurbulêNcia

Efeitos de turbulência

Usando o exemplo “wood.cpp” e outros envolvendo o conceito de

ruído (‘noise’)

Luiz Fernando Estevão da SilvaDRE: 107362404 Data: 21/09/2009

Page 2: Efeitos De TurbulêNcia

Observando o código// wood.vert

varying float LightIntensity;varying vec3 MCposition;

void main(){float Scale = 0.5;vec3 ECposition = vec3(gl_ModelViewMatrix * gl_Vertex);MCposition = vec3(gl_Vertex) * Scale;vec3 tnorm = normalize(vec3 (gl_NormalMatrix * gl_Normal));LightIntensity = dot(normalize(gl_LightSource[0].position - ECposition), tnorm);LightIntensity *= 1.5;gl_Position = ftransform();

}

Page 3: Efeitos De TurbulêNcia

// wood.frag

varying float LightIntensity; varying vec3 MCposition;varying vec3 pos;varying vec3 normal;uniform sampler3D Noise;

void main(void){vec3 LightWoodColor = vec3(0.6, 0.3, 0.1);vec3 DarkWoodColor = vec3(0.4, 0.2, 0.07);float RingFreq = 4.7; // “incremento do raio das circunferências”float LightGrains = 1.0; // grânulos clarosfloat DarkGrains = 0.0; // grânulos escurosfloat GrainThreshold = 0.5; // limiar de granulosidadevec3 NoiseScale = vec3(0.5, 0.1, 0.1);float Noisiness = 3.0; float GrainScale = 27.0;

Page 4: Efeitos De TurbulêNcia

vec4 matspec = gl_FrontMaterial.specular; float shininess = gl_FrontMaterial.shininess;

vec4 lightspec = gl_LightSource[0].specular;

vec3 noisevec = vec3 (texture3D(Noise, MCposition * NoiseScale) *

Noisiness);vec3 location = MCposition + noisevec;

float dist = sqrt(location.x * location.x + location.z * location.z);dist *= RingFreq;

float r = fract(dist + noisevec[0] + noisevec[1] + noisevec[2]) * 2.0;

if (r > 1.0)r = 2.0 - r;

vec3 color = mix(LightWoodColor, DarkWoodColor, r);

Page 5: Efeitos De TurbulêNcia

r = fract((MCposition.x + MCposition.z) * GrainScale + 0.5);noisevec[2] *= r;if (r < GrainThreshold)

color += LightWoodColor * LightGrains * noisevec[2];else

color -= LightWoodColor * 0.0 * noisevec[2];

color *= LightIntensity;

color = clamp(color, 0.0, 1.0); // clamp not needed for book shader

gl_FragColor = vec4 (color, 1.0);}

Page 6: Efeitos De TurbulêNcia

Um exemplo visual

• O círculo será perturbado para gerar o efeito de anel da tora de madeira.

• O ângulo irá ser varrido de 0 a 2π. O raio irá variar conforme o critério usado.

Page 7: Efeitos De TurbulêNcia

Aleatório

• A aparência de círculo é completamente perdida.

• Gera descontinuidade visualmente perceptível.

Page 8: Efeitos De TurbulêNcia

Perlin noise

• O aspecto circular apesar de modificado, guarda semelhança.

• As descontinuidades são pequenas e normalmente imperceptíveis.

Page 9: Efeitos De TurbulêNcia

Gráfico de “Perlin noise”

T (iteração)

R ( 0,5

unid)

Page 10: Efeitos De TurbulêNcia

Explicando

• A cada iteração o raio da figura se altera.

• O raio anterior é considerado. Assim não se perde a continuidade da curva.

• Quanto mais perto do 0, maior é a chance do raio aumentar, e quanto mais perto do 2, a de diminuir. (o raio 1 é o equilíbrio).

Page 11: Efeitos De TurbulêNcia

Outros exemplos

Page 12: Efeitos De TurbulêNcia
Page 13: Efeitos De TurbulêNcia
Page 14: Efeitos De TurbulêNcia

Bibliografia

• http://books.google.com.br/books?id=zkEY9RIm4WkC&pg=PA538&lpg=PA538&dq=glsl+wood+texture&source=bl&ots=tWw8GGObGY&sig=Z05SeD3TVCdlp-E0glZd-ddOiM8&hl=pt-BR&ei=6sa2Sv-6MYGo8AaO45jLDQ&sa=X&oi=book_result&ct=result&resnum=1#v=onepage&q=&f=false

Page 15: Efeitos De TurbulêNcia

• http://www.davidcornette.com/glsl/gallery.html

• http://lumina.sourceforge.net/Tutorials/Noise.html

• http://freespace.virgin.net/hugo.elias/models/m_perlin.htm