0 registered members (),
1,397
guests, and 7
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Searching HLSL Terrain Multitexturing...
[Re: Espér]
#322974
05/10/10 18:33
05/10/10 18:33
|
Joined: Apr 2010
Posts: 172
wdlmaster
Member
|
Member
Joined: Apr 2010
Posts: 172
|
Wenn du viele Texturvariationen brauchst (3-4 Grasarten, wie du sagst), dann wäre ja fast die Methode, die ich am Anfang irgendwo erwähnt hab, das Mittel der Wahl. Damit kannst du pro kanal 4 Texturen verwenden. Das wären dann 17 Texturen. Aber diese müssen nach variation Gruppiert werden, denn man kann (wie schon mehrfach erwähnt) nicht von z.B. "rot 4" direkt auf "grün 4" überblenden. Dazwischen befindet sich IMMER ein schmaler bereich, in dem alle dazwischenliegenden Texturen zu sehen sind (oder besser gesagt: ein Mix aus allen dazwischenliegenden Texturen)... Aber ich hab mit meinen Tests festgestellt, dass diese Methode die beste ist, solange die Texturen in ähnlichen Gruppen zusammengefasst werden. Der Vorteil is, dass das alles in einen einzigen Renderdurchgang passt. @muffel: exakt das, was ich Eingangs erwähnt hab. Rein theoretisch kann man pro farbkanal 255 Texturen verwenden. Das wären dann 1024 Texturen. Allerdings unterstützt das weder eine Grafikkarte noch irgendein Shader-Model in einem Renderdurchgang !
Last edited by wdlmaster; 05/10/10 18:37.
|
|
|
Re: Searching HLSL Terrain Multitexturing...
[Re: wdlmaster]
#322990
05/10/10 19:54
05/10/10 19:54
|
Joined: Aug 2007
Posts: 1,922 Schweiz
Widi
Serious User
|
Serious User
Joined: Aug 2007
Posts: 1,922
Schweiz
|
Sorry das ich mich hier einmische. Habe eine Frage an wdlmaster. Ich habe einen Terrainshader mit 7 texturen. Wie berechnest du die zusätzlichen texturen beim splitten des alphakanals? (alpha 0 - 127 = textur1, 128 - 255 = textur2)
float4 color = tex2D(sTex8, In.Tex7);
color = lerp(color,tex2D(sTex5, In.Tex4),BlendColor.r);
color = lerp(color,tex2D(sTex6, In.Tex5),BlendColor.g);
color = lerp(color,tex2D(sTex7, In.Tex5),BlendColor.b);
color = lerp(color,tex2D(sTex9, In.Tex4),saturate(BlendColor.r - BlendColor.a));
color = lerp(color,tex2D(sTex10,In.Tex5),saturate(BlendColor.g - BlendColor.a));
color = lerp(color,tex2D(sTex11,In.Tex7),saturate(BlendColor.b - BlendColor.a));
@Esper: So wie wdlmaster erklärt hat funktioniert das was du willst...
|
|
|
Re: Searching HLSL Terrain Multitexturing...
[Re: Widi]
#322993
05/10/10 20:00
05/10/10 20:00
|
Joined: Apr 2010
Posts: 172
wdlmaster
Member
|
Member
Joined: Apr 2010
Posts: 172
|
das kommt auf die Anzahl der Texturen an, die du in einem Kanal unterbringen willst (maximal 4, denn es werden nur 16 Texturzugriffe unterstützt!)
bei 2 Farben: color = lerp(color,tex2D(skin1,tex),saturate(BlendColor.r*2)); color = lerp(color,tex2D(skin2,tex),saturate(BlendColor.r*2-1));
bei 4 Farben: color = lerp(color,tex2D(skin1,tex),saturate(BlendColor.r*4 )); color = lerp(color,tex2D(skin2,tex),saturate(BlendColor.r*4-1)); color = lerp(color,tex2D(skin3,tex),saturate(BlendColor.r*4-2)); color = lerp(color,tex2D(skin4,tex),saturate(BlendColor.r*4-3));
aber: es gelten die (ganz) oben genannten Einschränkungen!
|
|
|
|