Top Banner
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
15

Efeitos De TurbulêNcia

Jun 26, 2015

Download

Technology

Descrição e explicação do algoritmo de Perlin para gerar ruído. Foco especialmente no exemplo do toco de madeira.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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