Detailmap
Home Nach oben

 

Nach oben
Dungeons
Detailmap
Einführung
Multitexture Terrain
Plantbox
Aussenlevel (Block)
Tag & Nachtwechsel
KI
Waving Grass
Framerate

Detailmap auf Terrains

Die Detailmap ist eine gekachelte Textur, die zur Verbesserung der Schärfe besonders bei hoch skalierten Texturen hinzugefügt wird. Es ist eine Textur auf der ein feines Muster abgebildet wird (normalerweise wird hier ein "Rauschen" Effekt verwendet). Die Detailmap wird über das Terrain gekachelt und dabei mit der Colormap mit verschiedenen Operatoren kombiniert.

Der Nachteil der Detailmap ist, dass das Terrain auf die Dauer etwas eintönig wirken kann, da sich die Detailmap nicht ändert. 

Zusätzlich ist es schwierig eine Detailmap zu generieren, die sowohl auf allen Flächentypen (Grass, Weg, Berg, ...) einen gleichbleibend guten Effekt bietet.

Trotzdem ist die Detailmap eine einfache und schnelle Methode die Qualität der Terrains zu verbessern.

 

Beispiel Detailmap  


Download Detailmap 1 als TGA

Download Detailmap 2 als TGA

Die Detailmap ist idealerweise ein kachelbares Graustufenimage. Oben dargestelltes Image habe ich für die in der Rubrik "Screenshot" dargestellte Terrainverbesserung verwendet.

 

Bilder: Nachfolgende Szene ist ohne und mit den oben dargestellten Detailmaps gerendert


Szene ohne Detailmap

Szene mit Detailmap 1

Szene mit Detailmap 2

(Detailmap 1 weichgezeichnet und dann wieder gekachelt)

 

Die Effekte der Detailmap können in Grafiktools wie Paint Shop Pro einfach verändert werden. Ich nutze anschließend das Programm Texture Maker um die Textur dann wieder Seamless zu erzeugen. Es ist unheimlich wichtig dass die Detailmap kachelbar ist. Sonst zeigen sich auf dem Terrain störende Linien.

Auf der Downloadseite ist das Freeware Tool sTile mit dem ebenfalls die Detailmap-Texturen nachbearbeitet und dann wieder Seamless überarbeitet werden können.

Ich habe noch nicht viel Erfahrung mit der Detailmap Technik aber das oben dargestellte Beispiel zeigt auf wie einfach eine riesige Verbesserung innerhalb eines Terrains mit einfachen Mitteln erreicht werden kann. 

 

Hinzufügen der Detailmap über C-Script

Die Detailmap kann dem Terrain in MED hinzugefügt werden. Dieser Weg ist mehrfach im Gamestudio Forum dargestellt. Da ich die Terrains jedoch durch IceX automatisch generieren lasse wäre es umständlich nach jeder Generierung die 256 Terraindateien manuell nachzubearbeiten.

Deshalb habe ich mich entschieden die Detailmap über C-Script automatisch hinzuzufügen.

Den Sourcecode habe ich weitestgehend ebenfalls aus dem Gamestudio Forum aus einem Beitrag von Nick Smith (Username: ulillillia).

Nachfolgender Source wird für das Hinzufügen der Detailmap an ein Terrain benötigt:

// Detailmap

bmap detailmap = <detailmap.tga>;

function BG_roughness() {
    bmap_to_mipmap(mtl.Skin1);
    mtl.matrix11 = float(18); 
    mtl.matrix22 = float(18); 
}

MATERIAL mtl_terrain {
    skin1=detailmap;
    event=BG_roughness;

    effect =
    "
        matrix matMtl;
        texture entSkin1;
        texture mtlSkin1;
        technique add_roughness
        {
            pass P0
            {
                lighting=false;//false;
                ditherenable=true;
                zwriteenable=true;
                zenable=true;

                alphablendenable=true;
                Texture[0] = <entSkin1>;

                magFilter[0]=linear;
                minFilter[0]=linear;
                mipFilter[0]=linear;

                TextureTransformflags[0] = disable;
                texcoordindex[0]=0;

                ColorArg1[0] = Texture; 
                ColorOp[0] = modulate;//2x;
                ColorArg2[0]=Diffuse;

                Texture[1] = <mtlSkin1>;

                magFilter[1]=linear;
                minFilter[1]=linear;
                mipFilter[1]=linear;

                ColorOp[1]=addsigned;
                ColorArg1[1]=Texture;
                ColorArg2[1]=Current;
                AlphaOp[1] = Disable; // this might be the cause to the problem

                TextureTransformFlags[1] = Count2;
                TextureTransform[1] = <matMtl>;
                texcoordindex[1]=1;

                colorop[2]=disable;
                alphaop[2]=disable; // as well as this
            }
        }
    ";
}

        Diese Aktion wird dem Terrain als Aktion zugewiesen:

ACTION icx_terrain
{
    my.material = mtl_terrain;
}

 

Jetzt ist die Detailmap dem Terrain zugewiesen und wird zur Verbesserung der Terrainschärfe verwendet. Mit Hilfe des Parameters detail_size in der Mainfunktion kann der Effekt noch beeinflusst werden.

 

detail_size=4;      Die Werte beeinflussen die Skalierung der Kachelung und sollten ausprobiert werden.
                              Werte zwischen 2 und 8 erscheinen hier geeignet.