matBones

Enthält ein Shader ein Matrix-Array mit diesem Namen, berechnet die Engine die Bonesanimation auf der GPU anstatt auf der CPU. Auf diese Weise werden bones-animierte Modelle bis zu zehnmal schneller gerendet, vor allem dann, wenn sie viele Bones oder Bones-Gewichte haben.

Typ:

float4x3

Bemerkungen:

Edition:

A8  P 

Beispiel:

// bones animation shader

#include <transform>
#include <fog>
#include <pos>
#include <normal>
#include <lights>
#include <texture>
#include <color>
float4x3 matBones[72]; int iWeights; struct vsOut { float4 Pos: POSITION; float Fog: FOG; float4 Ambient:COLOR; float2 Tex: TEXCOORD0; }; vsOut bones_VS ( in float4 inPos: POSITION, in float3 inNormal: NORMAL, in float2 inTex: TEXCOORD0, in int4 inBoneIndices: BLENDINDICES, in float4 inBoneWeights: BLENDWEIGHT ) { vsOut Out; Out.Tex = DoTexture(inTex); Out.Fog = DoFog(inPos); Out.Ambient = DoAmbient(); float3 P = DoPos(inPos); float3 N = DoNormal(inNormal); for (int i=0; i<iLights; i++) // Add 8 dynamic lights Out.Ambient.xyz += DoLight(P,N,i)*0.5*vecDiffuse; float3 WorldPos = 0; for (int i=0; i<iWeights; i++) WorldPos += mul(inPos.xzyw,matBones[inBoneIndices[i]])*inBoneWeights[i]; Out.Pos = DoTransform(float4(WorldPos.xzy,1.0)); return Out; } technique bones { pass { VertexShader = compile vs_2_0 bones_VS(); } }

Siehe auch:

Shader variables, matTangent

► latest version online