|
@@ -375,13 +375,616 @@ void CGfxCharacter::SkinModels() {
|
|
|
//locret_17FAB0
|
|
|
}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
-//0017FAB8
|
|
|
-void CGfxCharacter::RenderBatch(ESHADOWMAP_SAMPLING e_1, int i_2) {
|
|
|
+// 0017FAB8 ^_- 经过单元测试,功能正常(5,6两关 2022.02.20)
|
|
|
+void CGfxCharacter::RenderBatch(ESHADOWMAP_SAMPLING eShadowMap1, int i2) {
|
|
|
+ // 0017FAD2
|
|
|
+
|
|
|
+ if (eShadowMap1 == ESHADOWMAP_SAMPLING_1 || eShadowMap1 == ESHADOWMAP_SAMPLING_2) {
|
|
|
+ if (eShadowMap1 == ESHADOWMAP_SAMPLING_1) {
|
|
|
+ // loc_17FAEA
|
|
|
+ CPlayerShader::s_tInstance.SetShadowMap(EPlayerShader_ShadowMap_1);
|
|
|
+ } else if (eShadowMap1 == ESHADOWMAP_SAMPLING_2) {
|
|
|
+ // 0017FAE4
|
|
|
+ CPlayerShader::s_tInstance.SetShadowMap(EPlayerShader_ShadowMap_2);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 0017FAF4
|
|
|
+ if (CGfxShadowMapManager::ms_pManager->filed_20.ch[0]) {
|
|
|
+ // 0017FAFA !!!
|
|
|
+ int r0_index=CGfxShadowMapManager::ms_pManager->filed_20.ch[0];
|
|
|
+ if(CGfxShadowMapManager::ms_pManager->filed_20.ch[0]>=1){
|
|
|
+ r0_index=0;
|
|
|
+ }
|
|
|
+ CFTTTexParam tTexPar(CGfxShadowMapManager::ms_pManager->filed_4[r0_index]->GetTexture());
|
|
|
+ CPlayerShader::s_tInstance.SetShadowMapTex(tTexPar);
|
|
|
+ } else {
|
|
|
+ // loc_17FB12
|
|
|
+ CFTTTexParam tTexPar(((CGfxShadowMap*)(NULL))->GetTexture());
|
|
|
+ CPlayerShader::s_tInstance.SetShadowMapTex(tTexPar);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // loc_17FB08
|
|
|
+
|
|
|
+ CPlayerShader::s_tInstance.SetShadowMap(EPlayerShader_ShadowMap_0);
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_17FB22
|
|
|
+
|
|
|
+ CFTTModel *pCFTTModel_sp58 = m_BodyModles_4[m_lod_7c.m_lod1];
|
|
|
+ CFTTModel *pCFTTModel_sp64 = m_HairModeles_18[m_lod_7c.m_lod2];
|
|
|
+ CFTTModel *pCFTTModel_r9 = m_HeaderModles_2c[m_lod_7c.m_lod3];
|
|
|
+
|
|
|
+ // 0017FB3C
|
|
|
+ CGfxEnvironmentMap *r11_pCGfxEnvironmentMap = CGfxEnvironmentMap::Get();
|
|
|
+
|
|
|
+ ETimeOfDay r5_eETimeOfDay;
|
|
|
+ // 0017FB46
|
|
|
+ if (r11_pCGfxEnvironmentMap->GetForced() == EEnvMapOverride_1) {
|
|
|
+ // 0017FB4E
|
|
|
+
|
|
|
+ r5_eETimeOfDay = ETimeOfDay_0;
|
|
|
+ } else if (r11_pCGfxEnvironmentMap->GetForced() == EEnvMapOverride_2 ||
|
|
|
+ r11_pCGfxEnvironmentMap->GetForced() == EEnvMapOverride_3) { // loc_17FB52
|
|
|
+ // loc_17FB68
|
|
|
+
|
|
|
+ r5_eETimeOfDay = ETimeOfDay_1;
|
|
|
+ } else {
|
|
|
+ // loc_18075E
|
|
|
+ // eETimeOfDay_r5 = ETimeOfDay_1; // 00180764 此行是编译优化的结果不需要写出来 Anderson
|
|
|
+ if (r11_pCGfxEnvironmentMap->GetForced() == EEnvMapOverride_4 ||
|
|
|
+ tGame.mTLogic_6678.bisRunning_A9==0 ||
|
|
|
+ CMatchSetup::ms_tInfo.eTimeOfDay_0) {
|
|
|
+
|
|
|
+ r5_eETimeOfDay = ETimeOfDay_1; // 0018076C
|
|
|
+ } else {
|
|
|
+
|
|
|
+ r5_eETimeOfDay = ETimeOfDay_0; // 00180786
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_17FB6A
|
|
|
+ int ePlayerLightingQuality_44_sp70 = GFXSPEC_pSpecification->ePlayerLightingQuality_44;
|
|
|
+ int var_C0_sp78;
|
|
|
+ if (GFXSPEC_pSpecification->bFloatEnvMap_3E &&
|
|
|
+ g_pGraphicsDevice->FloatTextureSupported() &&
|
|
|
+ g_pGraphicsDevice->TextureLODSupported() &&
|
|
|
+ CGfxEnvironmentMap::Get()->GetForced() != EEnvMapOverride_3 &&
|
|
|
+ CGfxEnvironmentMap::Get()->GetForced() != EEnvMapOverride_4) {
|
|
|
+ var_C0_sp78 = 1;
|
|
|
+ CPlayerShader::s_tInstance.SetFloatingPoint(EPlayerShader_FloatingPoint_1);
|
|
|
+ } else {
|
|
|
+ // loc_17FBB0
|
|
|
+ var_C0_sp78 = 0;
|
|
|
+ CPlayerShader::s_tInstance.SetFloatingPoint(EPlayerShader_FloatingPoint_0);
|
|
|
+ }
|
|
|
+
|
|
|
+ CFTTTexture *pTexture_118_sp20;
|
|
|
+ CFTTTexture *pTexture_114_sp24;
|
|
|
+ CFTTTexture *pTexture_110_sp28;
|
|
|
+ CFTTTexture *pTexture_108_sp30;
|
|
|
+ CFTTTexture *pTexture_104_sp34;
|
|
|
+ CFTTTexture *pTexture_100_sp38;
|
|
|
+ CFTTTexture *pTexture_FC_sp3C;
|
|
|
+ CFTTTexture *pTexture_F8_sp40;
|
|
|
+ CFTTTexture *pTexture_F0_sp48;
|
|
|
+ CFTTTexture *pTexture_EC_sp4C;
|
|
|
+ CFTTTexture *pTexture_D0_sp68;
|
|
|
+ CFTTTexture *pTexture_CC_sp6C;
|
|
|
+
|
|
|
+ // 0017FBC0
|
|
|
+ if (r5_eETimeOfDay != ETimeOfDay_0) {
|
|
|
+
|
|
|
+ CPlayerShader::s_tInstance.SetModel(EPlayerShader_Model_1); // 0017FBD2
|
|
|
+
|
|
|
+ CFTTTexParam aTexParam(r11_pCGfxEnvironmentMap->GetDiffuseEnv()); // 0017FBD8 !!!
|
|
|
+ CPlayerShader::s_tInstance.SetDiffuseEnv(aTexParam); // 0017FBE6
|
|
|
+
|
|
|
+ aTexParam.setTexture(r11_pCGfxEnvironmentMap->GetBRDFLUT());
|
|
|
+ CPlayerShader::s_tInstance.SetBRDFLUT(aTexParam); // 0017FBF6
|
|
|
+
|
|
|
+ pTexture_118_sp20 = nullptr;
|
|
|
+ pTexture_114_sp24 = nullptr;
|
|
|
+ pTexture_110_sp28 = nullptr;
|
|
|
+ pTexture_108_sp30 = nullptr;
|
|
|
+ pTexture_104_sp34 = nullptr;
|
|
|
+ pTexture_100_sp38 = nullptr;
|
|
|
+ pTexture_FC_sp3C = nullptr;
|
|
|
+ pTexture_F8_sp40 = nullptr;
|
|
|
+ pTexture_F0_sp48 = nullptr;
|
|
|
+ pTexture_EC_sp4C = nullptr;
|
|
|
+ pTexture_D0_sp68 = nullptr;
|
|
|
+ pTexture_CC_sp6C = nullptr;
|
|
|
+ } else {
|
|
|
+ // loc_17FC28
|
|
|
+
|
|
|
+ CPlayerShader::s_tInstance.SetModel(EPlayerShader_Model_0);
|
|
|
+
|
|
|
+ pTexture_EC_sp4C = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_0); // 0017FC40
|
|
|
+ pTexture_CC_sp6C = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_6); // 0017FC48
|
|
|
+ pTexture_FC_sp3C = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_1); // 0017FC50
|
|
|
+ pTexture_108_sp30 = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_2); // 0017FC58
|
|
|
+ pTexture_F8_sp40 = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_3); // 0017FC60
|
|
|
+ pTexture_100_sp38 = CPBRLighting::Get()->GetDiffuse(EPBRLightingMat_4); // 0017FC68
|
|
|
+ // 0017FC70
|
|
|
+ if (var_C0_sp78) {
|
|
|
+ // 0017FC72
|
|
|
+ pTexture_F0_sp48 = CPBRLighting::Get()->GetVersatile();
|
|
|
+ pTexture_114_sp24 = CPBRLighting::Get()->GetVersatile();
|
|
|
+ pTexture_110_sp28 = CPBRLighting::Get()->GetVersatile();
|
|
|
+ pTexture_118_sp20 = CPBRLighting::Get()->GetVersatile();
|
|
|
+ pTexture_104_sp34 = CPBRLighting::Get()->GetVersatile();
|
|
|
+ pTexture_D0_sp68 = CPBRLighting::Get()->GetVersatile();
|
|
|
+ } else {
|
|
|
+ // loc_17FC9A
|
|
|
+ pTexture_F0_sp48 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_0);
|
|
|
+ pTexture_114_sp24 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_1);
|
|
|
+ pTexture_110_sp28 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_2);
|
|
|
+ pTexture_118_sp20 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_3);
|
|
|
+ pTexture_104_sp34 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_4);
|
|
|
+ pTexture_D0_sp68 = CPBRLighting::Get()->GetSpecular(EPBRLightingMat_6);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_17FCCE
|
|
|
+ float fs16 = 0.449999988f;
|
|
|
+ float fs18 = 0.550000012f;
|
|
|
+ float fs20 = 0.550000012f;
|
|
|
+ float fs22 = 0.200000003f;
|
|
|
+ //sp7C=this
|
|
|
+ //sp60=r9
|
|
|
+ //sp54=r11
|
|
|
+
|
|
|
+ if (tGame.mTLogic_6678.bisRunning_A9) { // 0017FCF2
|
|
|
+ // 0017FCF6
|
|
|
+ if (CMatchSetup::ms_tInfo.eWeather_4) {
|
|
|
+ // 0017FD04
|
|
|
+ fs20 = 0.5f;
|
|
|
+ if (CMatchSetup::ms_tInfo.eWeather_4 == EWeather_2) {
|
|
|
+ fs16 = 0.449999988f;
|
|
|
+ fs18 = 0.550000012f;
|
|
|
+ fs20 = 0.550000012f;
|
|
|
+ fs22 = 0.200000003f;
|
|
|
+ } else {
|
|
|
+ fs16 = 0.400000006f;
|
|
|
+ fs18 = 0.400000006f;
|
|
|
+ fs22 = 0.100000001f;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_17FD7C
|
|
|
+ float fr9 = powf(fs20, 3.0f);
|
|
|
+ CFTTVector32x4 tVec32_60_spD8;
|
|
|
+ tVec32_60_spD8.my[0] = fs20; // 0017FD9C
|
|
|
+ float s_30 = 1.0f / (fr9 + fr9);
|
|
|
+ tVec32_60_spD8.my[2] = s_30 * 0.75f;
|
|
|
+ tVec32_60_spD8.my[1] = fs22;
|
|
|
+
|
|
|
+ tVec32_60_spD8.my[3] = powf(fs20, 0.10000000149f);
|
|
|
+
|
|
|
+ CFTTVector32x4 tVec32_78_spC0;
|
|
|
+ tVec32_78_spC0.my[0] = 0.400000006f; // 0017FDAE
|
|
|
+ tVec32_78_spC0.my[1] = 0.009999999776f;
|
|
|
+ tVec32_78_spC0.my[2] = 7.812499523163f;
|
|
|
+ tVec32_78_spC0.my[3] = 0.912443518639f;
|
|
|
+
|
|
|
+ CFTTVector32x4 tVec32_88_spB0;
|
|
|
+ tVec32_88_spB0.my[0] = fs20; // 0017FDCC
|
|
|
+ tVec32_88_spB0.my[1] = fs22;
|
|
|
+ tVec32_88_spB0.my[2] = 1.0f / (powf(fs20, 3.0f) + powf(fs20, 3.0f));
|
|
|
+ tVec32_88_spB0.my[3] = powf(fs20, 0.10000000149f);
|
|
|
+
|
|
|
+ CFTTVector32x4 tVec32_98_spA0;
|
|
|
+ tVec32_98_spA0.my[0] = fs20; // 0017FDF6
|
|
|
+ tVec32_98_spA0.my[1] = fs22;
|
|
|
+ tVec32_98_spA0.my[2] = 1.0f / (powf(fs20, 3.0f) + powf(fs20, 3.0f));
|
|
|
+ tVec32_98_spA0.my[3] = powf(fs20, 0.10000000149f);
|
|
|
+
|
|
|
+ CFTTVector32x4 tVec32_A8_sp90;
|
|
|
+ tVec32_A8_sp90.my[0] = fs18; // 0017FE2C
|
|
|
+ tVec32_A8_sp90.my[1] = 0.028000000864f;
|
|
|
+ tVec32_A8_sp90.my[2] = 1.0f / (powf(fs18, 3.0f) + powf(fs18, 3.0f));
|
|
|
+ tVec32_A8_sp90.my[3] = powf(fs18, 0.10000000149f);
|
|
|
+
|
|
|
+ CFTTVector32x4 tVec32_B8_sp80;
|
|
|
+ tVec32_B8_sp80.my[0] = fs16; // 0017FE58
|
|
|
+ tVec32_B8_sp80.my[1] = 0.028000000864f;
|
|
|
+ tVec32_B8_sp80.my[2] = 1.0f / (powf(fs16, 3.0) + powf(fs16, 3.0));
|
|
|
+ tVec32_B8_sp80.my[3] = powf(fs16, 0.100000001f);
|
|
|
+
|
|
|
+ // 0017FE66
|
|
|
+ fs22= tVec32_A8_sp90.my[2];
|
|
|
+ float fs26 = 1.0f / (powf(fs16, 3.0) + powf(fs16, 3.0));
|
|
|
+ if (ePlayerLightingQuality_44_sp70 <= 0) {
|
|
|
+ // 0017FE72
|
|
|
+ fs22 = fs22 * 0.75f;
|
|
|
+ fs26 = fs26 * 0.75f;
|
|
|
+ tVec32_60_spD8.my[2] = tVec32_60_spD8.my[2]* 0.75f;
|
|
|
+ tVec32_78_spC0.my[2] = 5.859374523163f;
|
|
|
+ tVec32_88_spB0.my[2] = tVec32_88_spB0.my[2] * 0.75f;
|
|
|
+ tVec32_98_spA0.my[2] = tVec32_98_spA0.my[2] * 0.75f;
|
|
|
+ tVec32_A8_sp90.my[2] = fs22;
|
|
|
+ tVec32_B8_sp80.my[2] = fs26;
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_17FE9E
|
|
|
+ if (CMatchSetup::ms_tInfo.eWeather_4 == EWeather_1) {
|
|
|
+ tVec32_A8_sp90.my[2] = fs22 * 0.25f;
|
|
|
+ fs22=tVec32_A8_sp90.my[2];
|
|
|
+ }
|
|
|
+
|
|
|
+ float flt_2FEF3C[7] = {8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 8.0f, 0.0f};
|
|
|
+ float flt_2FDEA8[8] = {1.0f, 1.0f, 1.0f, 0.5f, 0.75f, 0.75f, 0.5f, 0.25f};
|
|
|
+
|
|
|
+ if ((r5_eETimeOfDay & var_C0_sp78) == 1) { // 0017FEC4
|
|
|
+ // 0017FEC8
|
|
|
+ tVec32_60_spD8.my[0] = sqrtf(fs20); // 0017FEE4
|
|
|
+ tVec32_78_spC0.my[0] = 0.632455527782f; // 0017FEF6
|
|
|
+ tVec32_88_spB0.my[0] = tVec32_60_spD8.my[0]; // 0017FF08
|
|
|
+ tVec32_98_spA0.my[0] = tVec32_60_spD8.my[0]; // 0017FF24
|
|
|
+ tVec32_A8_sp90.my[0] = sqrtf(fs18); // 0017FF40
|
|
|
+ tVec32_B8_sp80.my[0] = sqrtf(fs16); // 0017FF68
|
|
|
+
|
|
|
+ tVec32_60_spD8.my[2] = 0.75f;
|
|
|
+ tVec32_78_spC0.my[2] = 1.0f;
|
|
|
+ tVec32_88_spB0.my[2] = 1.0f;
|
|
|
+ tVec32_98_spA0.my[2] = 1.0f;
|
|
|
+ tVec32_A8_sp90.my[2] = flt_2FEF3C[m_Skincolor1_B8C] * 1.25f;
|
|
|
+ tVec32_B8_sp80.my[2] = flt_2FDEA8[m_HairColour_BA4];
|
|
|
+ } else {
|
|
|
+ // loc_17FF94
|
|
|
+ tVec32_A8_sp90.my[2] = flt_2FEF3C[m_Skincolor1_B8C] * fs22;
|
|
|
+ tVec32_B8_sp80.my[2] = flt_2FDEA8[m_HairColour_BA4] * fs26;
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_17FFC4
|
|
|
+
|
|
|
+ EPlayerShader_Bin r1_eShader = EPlayerShader_Bin_8;
|
|
|
+ int i_r6 = m_Materials_C24[2];
|
|
|
+
|
|
|
+ typedef void (*pfun)(void *, CFTTModel *, int, const CFTTMatrix32 *);
|
|
|
+ pfun pFunc_10C_sp2C = NULL;
|
|
|
+
|
|
|
+ // 0017FFD4
|
|
|
+ if (GFXSPEC_pSpecification->bDynNormMap_3F) {
|
|
|
+ // 0017FFD6
|
|
|
+ if ((int)m_lod_7c.m_lod1 < 2) {
|
|
|
+ pFunc_10C_sp2C = CGfxDynNormMap::PostSkinCB;
|
|
|
+ r1_eShader = EPlayerShader_Bin_3;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // loc_18001C
|
|
|
+ pFunc_10C_sp2C = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_180020
|
|
|
+ CPlayerShader::s_tInstance.SetBin(r1_eShader, i_r6);
|
|
|
+
|
|
|
+ CFTTTexParam tTexParam; // !!!
|
|
|
+ tTexParam.setDataEx(m_KitTextureID_B94);
|
|
|
+ CPlayerShader::s_tInstance.SetDiffuse(tTexParam, i_r6); // 00180052
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iKitSpecularTexture); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetSpecular(tTexParam, i_r6); // 0018006E
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iKitDynamicNormalTexture); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetNormal(tTexParam, i_r6); // 0018008C
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iKitDynamicAmbientTexture); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetAmbient(tTexParam, i_r6); // 001800AA
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_EC_sp4C); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, i_r6); // 001800B6
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_F0_sp48);
|
|
|
+ CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, i_r6); // 001800C2
|
|
|
+
|
|
|
+ CPlayerShader::s_tInstance.SetPBR(tVec32_60_spD8, i_r6); // 001800CC
|
|
|
+
|
|
|
+ int i_cc0 = m_Materials_C24[3];
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::m_KitTextureID_B94); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[3]); // 001800EA
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_CC_sp6C); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[3]); // 001800F4
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_D0_sp68); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[3]); // 00180100
|
|
|
+
|
|
|
+ int i_sp44 = i_cc0;
|
|
|
+ CPlayerShader::s_tInstance.SetPBR(tVec32_78_spC0, m_Materials_C24[3]); // 0018010C
|
|
|
+
|
|
|
+ //int i_c28 = m_Materials_C24[1];
|
|
|
+
|
|
|
+ tTexParam.setDataEx(m_UnknowTexture_BB4); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[1]); // 00180132
|
|
|
+
|
|
|
+ int r5_i = m_UnknowType_A4 - 1;
|
|
|
+ // 00180134
|
|
|
+ if (r5_i >= 2) // 3
|
|
|
+ r5_i = 2;
|
|
|
+ else if (r5_i < 0)
|
|
|
+ r5_i = 0;
|
|
|
+
|
|
|
+ //最终r5_i只有可能是 2, 1, 0
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iManagerSpecularTextures[r5_i]); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetSpecular(tTexParam, m_Materials_C24[1]); // 0018015C
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iManagerNormalTextures[r5_i]); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetNormal(tTexParam, m_Materials_C24[1]); // 0018017C
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iManagerAmbientTextures[r5_i]); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetAmbient(tTexParam, m_Materials_C24[1]); // 0018019C
|
|
|
+
|
|
|
+ if (((uint)(m_UnknowType_A4 - 1)) <= 1) {
|
|
|
+ LOGE("CGfxCharacter::RenderBatch_29");
|
|
|
+ tTexParam.setTexture(pTexture_F8_sp40);
|
|
|
+ CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[1]); // 001801B6
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_118_sp20);
|
|
|
+ CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[1]); // 001801C2
|
|
|
+
|
|
|
+ CPlayerShader::s_tInstance.SetPBR(tVec32_88_spB0, m_Materials_C24[1]);
|
|
|
+ } else {
|
|
|
+
|
|
|
+ // loc_1801EC
|
|
|
+ tTexParam.setTexture(pTexture_100_sp38);
|
|
|
+ CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[1]);
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_104_sp34);
|
|
|
+ CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[1]);
|
|
|
+ CPlayerShader::s_tInstance.SetPBR(tVec32_98_spA0, m_Materials_C24[1]);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 0018020E
|
|
|
+ tTexParam.setDataEx(m_UnknowTexture_BB4); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[0]); // 00180230
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iTorsoNormalTexture); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetNormal(tTexParam, m_Materials_C24[0]); // 00180254
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iTorsoSpecularTexture); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetSpecular(tTexParam, m_Materials_C24[0]); // 00180278
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_FC_sp3C);
|
|
|
+ CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[0]); // 00180290
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_114_sp24);
|
|
|
+ CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[0]); // 001802A6
|
|
|
+
|
|
|
+ CPlayerShader::s_tInstance.SetPBR(tVec32_A8_sp90, m_Materials_C24[0]); // 001802B6
|
|
|
+
|
|
|
+ tTexParam.setTexture(GetMegaTexture()); // 001802BE
|
|
|
+ CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[5]); // 001802CA
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iAtlasNormalTexture); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetNormal(tTexParam, m_Materials_C24[5]); // 001802EC
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iAtlasSpecularTexture); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetSpecular(tTexParam, m_Materials_C24[5]); // 0018030C
|
|
|
+
|
|
|
+ tTexParam.setDataEx(m_AtlasAmbientTexture_B98 ); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetAmbient(tTexParam, m_Materials_C24[5]); // 00180326
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_FC_sp3C);
|
|
|
+ CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[5]); // 00180336
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_114_sp24);
|
|
|
+ CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[5]); // 00180342
|
|
|
+
|
|
|
+ CPlayerShader::s_tInstance.SetPBR(tVec32_A8_sp90, m_Materials_C24[5]); // 0018034E
|
|
|
+
|
|
|
+ // int v86 = m_Materials_C24[4];
|
|
|
+ tTexParam.setTexture(GetMegaTexture()); // 00180358
|
|
|
+ CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[4]); // 00180364
|
|
|
+
|
|
|
+ // tTexParam.setTexture(GetMegaTexture()); // 00180358
|
|
|
+ // CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[4]); // 00180364
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_CC_sp6C);
|
|
|
+ CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[4]); // 0018036E
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_D0_sp68);
|
|
|
+ CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[4]); // 00180378
|
|
|
+
|
|
|
+ CPlayerShader::s_tInstance.SetPBR(tVec32_78_spC0, m_Materials_C24[4]); // 00180380
|
|
|
+
|
|
|
+ tTexParam.setDataEx(s_iHairMegaTexture); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetDiffuse(tTexParam, m_Materials_C24[6]); // 001803AA
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iHairNormalTexture); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetNormal(tTexParam, m_Materials_C24[6]); // 001803CC
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iHairSpecularTexture); // !!!
|
|
|
+ CPlayerShader::s_tInstance.SetSpecular(tTexParam, m_Materials_C24[6]); // 001803EC
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_108_sp30);
|
|
|
+ CPlayerShader::s_tInstance.SetDiffRimLightLUT(tTexParam, m_Materials_C24[6]); // 001803F8
|
|
|
+
|
|
|
+ tTexParam.setTexture(pTexture_110_sp28);
|
|
|
+ CPlayerShader::s_tInstance.SetSpecLightLUT(tTexParam, m_Materials_C24[6]); // 00180406
|
|
|
+
|
|
|
+ CPlayerShader::s_tInstance.SetPBR(tVec32_B8_sp80, m_Materials_C24[6]); // 0018040E
|
|
|
+
|
|
|
+ tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_0)); // 0018041E
|
|
|
+ CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[2]); // 00180430
|
|
|
+
|
|
|
+ tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_0));
|
|
|
+ CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, i_sp44); // 00180442
|
|
|
+
|
|
|
+ tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_1)); // 00180448
|
|
|
+ CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[5]); // 00180454
|
|
|
+
|
|
|
+ tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_0)); // 0018045A
|
|
|
+ CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[4]); // 00180466
|
|
|
+
|
|
|
+ tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_2)); // 0018046C
|
|
|
+ CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[6]); // 0018047C
|
|
|
+
|
|
|
+ tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_0));
|
|
|
+ CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[1]); // 0018048E
|
|
|
+
|
|
|
+ tTexParam.setTexture(r11_pCGfxEnvironmentMap->GetSpecularEnv(EPBRLightingMat_0));
|
|
|
+ CPlayerShader::s_tInstance.SetSpecularEnv(tTexParam, m_Materials_C24[0]); // 001804A2
|
|
|
+
|
|
|
+ CGfxPlayer::SetupBatchConstants(); // 001804A8
|
|
|
+
|
|
|
+ for (int ir4 = 0; ir4 != 8; ir4++) { // loc_1804EA
|
|
|
+ // 001804DC
|
|
|
+
|
|
|
+ GFXPLAYER_spBatchBins[ir4]->SetMaterialID(m_Materials_C24[ir4]);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 001804F4
|
|
|
+ GFXPLAYER_spBatchBins[7]->SetMaterialID(m_Materials_C24[6]);
|
|
|
+
|
|
|
+ // 00180500
|
|
|
+ int d_sp70 = i2 + 1;
|
|
|
+
|
|
|
+ // 001804F4
|
|
|
+ TFTTCacheInstance pTFTTCacheLookup_0;
|
|
|
+ pTFTTCacheLookup_0.ci_0 = (uint8)i2;
|
|
|
+ pTFTTCacheLookup_0.ci_1 = 0;
|
|
|
+
|
|
|
+ if (i2 == -1) {
|
|
|
+ LOGE("CGfxCharacter::RenderBatch_34");
|
|
|
+ pTFTTCacheLookup_0.ci_0 = pTFTTCacheLookup_0.ci_0;
|
|
|
+ pTFTTCacheLookup_0.ci_1 = 0xff;
|
|
|
+ }
|
|
|
+
|
|
|
+ GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
|
|
|
+ m_SalMatrix_E4,
|
|
|
+ m_BodyUV_40[m_lod_7c.m_lod1],
|
|
|
+ pTFTTCacheLookup_0, // sp 138
|
|
|
+ 2, // sp 134
|
|
|
+ -1, // sp 130
|
|
|
+ pFunc_10C_sp2C, // sp 12C
|
|
|
+ nullptr); // 00180558
|
|
|
+
|
|
|
+ GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
|
|
|
+ m_SalMatrix_E4,
|
|
|
+ m_BodyUV_40[m_lod_7c.m_lod1],
|
|
|
+ pTFTTCacheLookup_0,
|
|
|
+ 3,
|
|
|
+ -1,
|
|
|
+ nullptr,
|
|
|
+ nullptr); // 0018057A
|
|
|
+
|
|
|
+ GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
|
|
|
+ m_SalMatrix_E4,
|
|
|
+ m_BodyUV_40[m_lod_7c.m_lod1],
|
|
|
+ pTFTTCacheLookup_0,
|
|
|
+ 5,
|
|
|
+ -1,
|
|
|
+ nullptr,
|
|
|
+ nullptr); // 0018059C
|
|
|
+
|
|
|
+ GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
|
|
|
+ m_SalMatrix_E4,
|
|
|
+ m_BodyUV_40[m_lod_7c.m_lod1],
|
|
|
+ pTFTTCacheLookup_0,
|
|
|
+ 4,
|
|
|
+ -1,
|
|
|
+ nullptr,
|
|
|
+ nullptr); // 001805BE
|
|
|
+
|
|
|
+ GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
|
|
|
+ m_SalMatrix_E4,
|
|
|
+ m_BodyUV_40[m_lod_7c.m_lod1],
|
|
|
+ pTFTTCacheLookup_0,
|
|
|
+ 0,
|
|
|
+ -1,
|
|
|
+ nullptr,
|
|
|
+ nullptr); // 001805DE
|
|
|
+
|
|
|
+ GFXPLAYER_pBatch->AddModel(pCFTTModel_sp58,
|
|
|
+ m_SalMatrix_E4,
|
|
|
+ m_BodyUV_40[m_lod_7c.m_lod1],
|
|
|
+ pTFTTCacheLookup_0,
|
|
|
+ 1,
|
|
|
+ -1,
|
|
|
+ nullptr,
|
|
|
+ nullptr); // 00180606
|
|
|
+
|
|
|
+ int i_CC_sp6C = GFXPLAYER_spBatchBins[6]->GetDrawCalls(); // 00180610
|
|
|
+ int ir8 = GFXPLAYER_spBatchBins[7]->GetDrawCalls(); // 0018061A
|
|
|
+
|
|
|
+ if (m_HeaderModles_2c[m_lod_7c.m_lod3] != nullptr) {
|
|
|
+ TFTTCacheInstance tCacheLookup;
|
|
|
+ tCacheLookup.ci_0 = 0;
|
|
|
+ tCacheLookup.ci_1 = 0xFF;
|
|
|
+ if (i2 != -1) {
|
|
|
+ tCacheLookup.ci_0 = 0;
|
|
|
+ tCacheLookup.ci_1 = 0x1;
|
|
|
+ }
|
|
|
+ tCacheLookup.ci_0 |=pTFTTCacheLookup_0.ci_0;
|
|
|
+ tCacheLookup.ci_1 |=pTFTTCacheLookup_0.ci_1;
|
|
|
+ GFXPLAYER_pBatch->AddModel(m_HeaderModles_2c[m_lod_7c.m_lod3],
|
|
|
+ m_SalMatrix_E4,
|
|
|
+ m_HeaderUV_68[m_lod_7c.m_lod3],
|
|
|
+ tCacheLookup,
|
|
|
+ -1,
|
|
|
+ -1,
|
|
|
+ nullptr,
|
|
|
+ nullptr); // 00180654
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_180658
|
|
|
+ if (m_HairModeles_18[m_lod_7c.m_lod2] != nullptr) {
|
|
|
+ TFTTCacheInstance tCacheLookup;
|
|
|
+ tCacheLookup.ci_0 = 0xff;
|
|
|
+ tCacheLookup.ci_1 = 0xff;
|
|
|
+ GFXPLAYER_pBatch->AddModel(m_HairModeles_18[m_lod_7c.m_lod2],
|
|
|
+ m_SalMatrix_E4,
|
|
|
+ m_HairUV_54[m_lod_7c.m_lod2],
|
|
|
+ tCacheLookup,
|
|
|
+ -1,
|
|
|
+ -1,
|
|
|
+ nullptr,
|
|
|
+ nullptr);
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_180684
|
|
|
+ if (GFXRENDER_bIsDepthPass || GFXRENDER_bIsBlackDepthPass) {
|
|
|
+ // 00180698
|
|
|
+
|
|
|
+ int ir6 = GFXPLAYER_spBatchBins[6]->GetDrawCalls(); // 0018069C
|
|
|
+ int ir5 = GFXPLAYER_spBatchBins[7]->GetDrawCalls(); // 001806A6
|
|
|
+
|
|
|
+ if (i_CC_sp6C != ir6 && ir6 != 0) {
|
|
|
+ // 001806B6
|
|
|
+ LOGE("CGfxCharacter::RenderBatch_38");
|
|
|
+ int ir4 = GFXPLAYER_spBatchBins[6]->GetLastMatID();
|
|
|
+ CLinearDepthShader::s_tInstance.SetSource(ELinearDepthShader_Source_1, ir4);
|
|
|
+
|
|
|
+ // 001806D6
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iHairMegaTexture);
|
|
|
+ CLinearDepthShader::s_tInstance.SetDiffuseMaterial(tTexParam, ir4);
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_1806F2
|
|
|
+ if (ir8 != ir5 && ir5 != 0) {
|
|
|
+ // 001806FA
|
|
|
+ LOGE("CGfxCharacter::RenderBatch_39");
|
|
|
+ int ir4 = GFXPLAYER_spBatchBins[7]->GetLastMatID(); // 001806FE
|
|
|
+ CLinearDepthShader::s_tInstance.SetSource(ELinearDepthShader_Source_1, ir4);
|
|
|
+
|
|
|
+ tTexParam.setDataEx(CGfxCharacter::s_iHairMegaTexture);
|
|
|
+ CLinearDepthShader::s_tInstance.SetDiffuseMaterial(tTexParam, ir4);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // loc_180730
|
|
|
+ if (CGfxPlayer::ms_iNumHairMats <= 32) {
|
|
|
+ CGfxPlayer::ms_iHairMatList[CGfxPlayer::ms_iNumHairMats++] = m_Materials_C24[6];
|
|
|
+ }
|
|
|
}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
//00180860 ^_^
|
|
|
CFTTTexture *CGfxCharacter::GetMegaTexture() {
|
|
|
- return 0;
|
|
|
+ LOGE("CGfxCharacter::GetMegaTexture");
|
|
|
+ return (CFTTTexture *)rand();
|
|
|
}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
//001808AC ^_- 经过单元测试,功能正常
|