Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mejora para TgcSimpleTerrain #130

Open
rejurime opened this issue Apr 17, 2020 · 0 comments
Open

Mejora para TgcSimpleTerrain #130

rejurime opened this issue Apr 17, 2020 · 0 comments

Comments

@rejurime
Copy link
Member

En el TgcSimpleTerrain las texturas del pasto o tierra en los heighmaps no estan en escala.

El Heightmap puede medir por ejemplo 256 x 256 y es todo el escenario, en proporcion al personaje, que por ejemplo mide 4 x 2 (en este caso un camion), el hmap es gigante. No hay forma de ponerle una textura y que quede bien. Para atacar ese problema, sin entrar en muchas complicaciones, se puede usar una textura (colorMap) con el mismo tamaño del hmap (es decir que ocupa exactamente lo mismo que el heightmap). Esa textura es la que tenia historicamente el Simpleterrain: ahi se ve a la izquierda el hmap y a la derecha el colormap

photo_71@10-04-2020_20-40-23

Despues, otras 2 o 3 texturas, por ejemplo, pasto, tierra y piedras. Estas texturas van a una escala mucho mas grande, y para que no se note el patron repetitivo conviene que esten a distintas escalas de numeros comprimos entre si. La textura tiene que ser "tileable" para que no se note la separacion entre 2 patches suseviso, o bien cualquie textura con MIRROR en address mode, pero eso no queda tan bien como una textura tileable con address mode en WRAP.

photo_72@10-04-2020_20-40-43

El shader del terrain entonces modula la texturas del terreno (tierra, grass, etc) de acuerdo al colormap, (en este caso uso un solo canal, el R indica que tiene mas textura tierra que textura pasto). Y tambien aplica un pseudo ambient occlusion en base a la altura del terrain, cuando mas bajo menos luz se supone que le llega.

float4 ps_RenderTerrain(PS_INPUT input) : COLOR0
{
float hmin = 61/256;
float hmax = 6
254/256;
float h = lerp(0.3 , 1 , (input.WorldPos.y-hmin)/(hmax-hmin));

float3 N = normalize(input.WorldNormal);
float3 L = normalize(lightPosition - input.WorldPos);
float kd = saturate( 0.4 + 0.7*saturate(dot(N, L)));

float3 c = tex2D(colorMap, input.Texcoord).rgb;
float3 tex1 = tex2D(diffuseMap, input.Texcoord31).rgb;
float3 tex2 = tex2D(diffuseMap2, input.Texcoord
27).rgb;
float3 tex3 = tex2D(diffuseMap3, input.Texcoord17).rgb;
float3 clr = lerp ( lerp(tex1 , tex3, c.r), c , 0.3);
return float4(clr
kd, 1);
}

Aca un par de screen shots como se comporta en las distintas escalas de view:

photo_73@10-04-2020_20-41-07
photo_74@10-04-2020_20-41-15
photo_75@10-04-2020_20-41-21
photo_76@10-04-2020_20-41-30

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant