Talk:M2/Rendering: Difference between revisions
< Talk:M2
Jump to navigation
Jump to search
m (→MoP) |
mNo edit summary |
||
(23 intermediate revisions by the same user not shown) | |||
Line 31: | Line 31: | ||
* <tt>c11: vec4(ambient.rgb, padding)</tt> | * <tt>c11: vec4(ambient.rgb, padding)</tt> | ||
* <tt>c12: vec4(lightDir.xyz, padding)</tt> (lightDir is transformed by view matrix before upload to GPU) | * <tt>c12: vec4(lightDir.xyz, padding)</tt> (lightDir is transformed by view matrix before upload to GPU) | ||
* <tt>c28: vec4(?, ?, ?, | * <tt>c28: vec4(?, ?, ?, alpha)</tt> (alpha is M2Element->alpha) | ||
* <tt>c29: vec4(animColor.rgb, ?)</tt> (animColor is the value from the animated color track for batch) | * <tt>c29: vec4(animColor.rgb, ?)</tt> (animColor is the value from the animated color track for batch) | ||
== Draw | == Draw Type == | ||
Not sure what to call these... layers? modes? passes? | Not sure what to call these... layers? modes? passes? | ||
Line 45: | Line 45: | ||
* 4: CM2SceneRender::DrawParticle | * 4: CM2SceneRender::DrawParticle | ||
* 5: CM2SceneRender::DrawCallback | * 5: CM2SceneRender::DrawCallback | ||
== Shader Permute Selection == | == Shader Permute Selection == | ||
Line 52: | Line 51: | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
boneInfluences = element->skinSection->boneInfluences; | |||
// 3-bit int stored in bits 29-31 (possibly draw type, see above) | |||
drawMode = (element->renderInfo & 0xE0000000) >> 29; | |||
if ( drawMode == DRAW_BATCH_DOODAD ) { | |||
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; | |||
} | |||
if ( !(model->m_currentLighting->m_flags & 0x10) || material.flags & 0x100 || material.flags & 0x1 ) { | |||
v45 = 0; | |||
} else if ( !scene->dword284 ) { | |||
v45 = 0; | |||
} else { | |||
v45 = 192; | |||
} | |||
// v45: maybe 'use shadows' offset | |||
// v16: use instancing | |||
0: instancing disabled | |||
1: instancing enabled | |||
// v44: bone permute offset (see above) | |||
// v17: light count | |||
// 0: no lighting | |||
// 1: global lighting only | |||
// 2 - 3: global lighting with 1 - 2 point lights | |||
element->m_vertexShaderPermuteIdx = | 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)))))); | |||
</syntaxhighlight> | |||
== Liquid == | |||
<syntaxhighlight lang="cpp"> | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 00:20, 7 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(?, ?, ?, alpha) (alpha is M2Element->alpha)
- c29: vec4(animColor.rgb, ?) (animColor is the value from the animated color track for batch)
Draw Type
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 (possibly draw type, see above)
drawMode = (element->renderInfo & 0xE0000000) >> 29;
if ( drawMode == DRAW_BATCH_DOODAD ) {
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;
}
if ( !(model->m_currentLighting->m_flags & 0x10) || material.flags & 0x100 || material.flags & 0x1 ) {
v45 = 0;
} else if ( !scene->dword284 ) {
v45 = 0;
} else {
v45 = 192;
}
// v45: maybe 'use shadows' offset
// v16: use instancing
0: instancing disabled
1: instancing enabled
// v44: bone permute offset (see above)
// v17: light count
// 0: no lighting
// 1: global lighting only
// 2 - 3: global lighting with 1 - 2 point lights
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))))));