Talk:M2/Rendering: Difference between revisions
< Talk:M2
Jump to navigation
Jump to search
m (→MoP) |
m (→MoP) |
||
Line 52: | Line 52: | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
boneInfluences = element->skinSection->boneInfluences; | |||
// 3-bit int stored in bits 29-31 | // 3-bit int stored in bits 29-31 | ||
Line 59: | Line 59: | ||
if ( v10 == 2 ) { | if ( v10 == 2 ) { | ||
if ( boneInfluences >= 1 ) { | |||
if ( | if ( boneInfluences <= 2u ) { | ||
v34 = | v34 = boneInfluences; | ||
} else { | } else { | ||
Line 82: | Line 81: | ||
} else { | } else { | ||
if ( boneInfluences <= 2u ) { | |||
if ( | |||
v11 = | v11 = boneInfluences; | ||
} else { | } else { | ||
Line 105: | Line 103: | ||
} else if ( localLightCount <= 2 ) { | } else if ( localLightCount <= 2 ) { | ||
v17 = localLightCount | v17 = 1 + localLightCount; | ||
} else { | } else { | ||
v17 = 2 | v17 = 1 + 2; | ||
} | } | ||
// v16: use instancing (1) | // v16: use instancing (1) | ||
// v44: bone permute offset (see above) | |||
// v17: light count? (0 - 3) | // v17: light count? (0 - 3) | ||
Revision as of 00:07, 5 December 2016
D3D11_BLEND
typedef enum D3D11_BLEND {
D3D11_BLEND_ZERO = 1,
D3D11_BLEND_ONE = 2,
D3D11_BLEND_SRC_COLOR = 3,
D3D11_BLEND_INV_SRC_COLOR = 4,
D3D11_BLEND_SRC_ALPHA = 5,
D3D11_BLEND_INV_SRC_ALPHA = 6,
D3D11_BLEND_DEST_ALPHA = 7,
D3D11_BLEND_INV_DEST_ALPHA = 8,
D3D11_BLEND_DEST_COLOR = 9,
D3D11_BLEND_INV_DEST_COLOR = 10,
D3D11_BLEND_SRC_ALPHA_SAT = 11,
D3D11_BLEND_BLEND_FACTOR = 14,
D3D11_BLEND_INV_BLEND_FACTOR = 15,
D3D11_BLEND_SRC1_COLOR = 16,
D3D11_BLEND_INV_SRC1_COLOR = 17,
D3D11_BLEND_SRC1_ALPHA = 18,
D3D11_BLEND_INV_SRC1_ALPHA = 19
} D3D11_BLEND;
3.3.5a Shader Buffer Layouts
Vertex
- c10: vec4(diffuse.rgb, padding)
- c11: vec4(ambient.rgb, padding)
- c12: vec4(lightDir.xyz, padding) (lightDir is transformed by view matrix before upload to GPU)
- c28: vec4(?, ?, ?, texWeight) (texWeight is the value from the animated texture weight track for batch)
- c29: vec4(animColor.rgb, ?) (animColor is the value from the animated color track for batch)
Draw Layers
Not sure what to call these... layers? modes? passes?
- 0: CM2SceneRender::DrawBatchProj
- 1: CM2SceneRender::DrawPrepassBatch || CM2SceneRender::DrawBatch
- 2: CM2SceneRender::DrawBatchDoodad
- 3: CM2SceneRender::DrawRibbon
- 4: CM2SceneRender::DrawParticle
- 5: CM2SceneRender::DrawCallback
Shader Permute Selection
MoP
boneInfluences = element->skinSection->boneInfluences;
// 3-bit int stored in bits 29-31
v10 = (element->renderInfo & 0xE0000000) >> 29;
if ( v10 == 2 ) {
if ( boneInfluences >= 1 ) {
if ( boneInfluences <= 2u ) {
v34 = boneInfluences;
} else {
v34 = 2;
}
v44 = 4 * v34;
} else {
v44 = 4;
}
} else {
if ( boneInfluences <= 2u ) {
v11 = boneInfluences;
} else {
v11 = 2;
}
v44 = 4 * v11;
}
// Can be disabled by s_shadedList[blendingMode] == 0, or by M2Material.flags & 0x01
if ( lightingDisabled ) {
v17 = 0;
} else if ( localLightCount <= 2 ) {
v17 = 1 + localLightCount;
} else {
v17 = 1 + 2;
}
// v16: use instancing (1)
// v44: bone permute offset (see above)
// v17: light count? (0 - 3)
element->m_vertexShaderPermuteIdx =
v45
+ v16
+ 4 * (((v15 >> 1) & 1) + 4 * (v44 + v17));
// v20: possibly 'use ssao' (1)
// v21: lighting enabled (1)
// v38: custom type (seems to only check for type 4)
element->m_pixelShaderPermuteIdx =
v14
+ 4 * (CShaderEffect::s_usePcfFiltering + 2 * (v43 + 2 * (v21 + 2 * (a4 + 2 * (v20 + 2 * (v38 == 4))))));