Перейти к содержанию

[Resident Evil 6] Отрисовка сцены


Рекомендуемые сообщения

В ходе попытки сделать простой aimbot возникли вопросы того, как рисует сцену движок

как я написал тут, я наше матрицу, которую передают во все vertex shader (всегда c1 регист)

вопрос вот в чем, если все объекты расположены в разных позициях

имеют свою матрицу трансформации, то как же они правильно располагаются?

вот например такая матрица

Цитата

 

1.66 0.00 0.16 0.16

0.00 2.99 0.00 0.00

0.27 0.01 -0.99 -0.99

86.18 -374.67 -651.33 -635.32

 

вот шейдер

 

Скрытый текст

//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
//   float4 CBROPTest__packed0;
//   float4 CBSkinning__packed0;
//   float4 CBVertexDisplacement2__packed0;
//   float4 CBVertexDisplacement__packed0;
//   float4 CBVertexDisplacement__packed1;
//   sampler2D SSClampLinear__tVtxDisplacement;
//   sampler2D SSPoint__tMatrixMap;
//   sampler2D SSWrapLinear__tVtxDispMask;
//   float4 __tMatrixMap__invsize;
//   float4 __tVtxDisplacement__invsize;
//   float2 fScreenHalfPixelOffset;
//   row_major float4x4 fViewProj;
//
//
// Registers:
//
//   Name                            Reg   Size
//   ------------------------------- ----- ----
//   fViewProj                       c1       4
//   CBROPTest__packed0              c5       1
//   fScreenHalfPixelOffset          c6       1
//   CBSkinning__packed0             c7       1
//   __tMatrixMap__invsize           c8       1
//   CBVertexDisplacement__packed0   c9       1
//   CBVertexDisplacement__packed1   c10      1
//   __tVtxDisplacement__invsize     c11      1
//   CBVertexDisplacement2__packed0  c12      1
//   SSPoint__tMatrixMap             s0       1
//   SSClampLinear__tVtxDisplacement s1       1
//   SSWrapLinear__tVtxDispMask      s2       1
//

    vs_3_0
    def c0, 2, -1, 32768, -0
    def c13, 0.125, 1, 0, 3
    dcl_position v0
    dcl_normal v1
    dcl_tangent v2
    dcl_binormal v3
    dcl_2d s0
    dcl_2d s1
    dcl_2d s2
    dcl_position o0
    dcl_color o1.xy
    dcl_texcoord o2
    add r0.x, c9.x, v3.x
    frc r0.x, r0.x
    mul r0.x, r0.x, c9.z
    mov r0.yzw, c13.xxyz
    texldl r0, r0, s1
    add r0.y, c12.x, v3.y
    frc r0.y, r0.y
    mul r1.x, r0.y, c12.z
    mov r1.y, c13.x
    mov r0.zw, c13
    mad r1.xy, c11, r0.zwzw, r1
    mov r1.zw, -c0.xyyw
    texldl r1, r1, s1
    mul r2, -c0.yyww, v3.xyxx
    texldl r2, r2, s2
    mul r0.y, r2.x, c12.y
    mul r0.z, r2.x, c9.y
    mul r0.y, r0.y, r1.x
    mad r0.x, r0.x, r0.z, r0.y
    mov r1.zw, -c0.w
    mul r0.y, c0.z, v0.w
    frc r0.z, r0.y
    add r0.y, -r0.z, r0.y
    mad r2.x, r0.y, c7.x, c7.y
    mov r3.xyw, c0
    mul r2.yzw, -r3.xyww, c7.z
    mad r1.xy, c8, -r3.ywzw, r2
    texldl r1, r1, s0
    mad r0.yzw, v1.xxyz, c0.x, c0.y
    dp3 r4.y, r1, r0.yzww
    mad r3.xy, c8, r3_abs.xwzw, r2
    texldl r2, r2, s0
    mov r3.zw, -c0.w
    texldl r3, r3, s0
    dp3 r4.z, r3, r0.yzww
    dp3 r4.x, r2, r0.yzww
    nrm r5.xyz, r4
    mad r4, v2, c0.x, c0.y
    dp3 r6.y, r1, r4
    dp3 r6.z, r3, r4
    dp3 r6.x, r2, r4
    nrm r4.xyz, r6
    mul r0.yzw, r5.xyzx, r4.xzxy
    mad r0.yzw, r4.xyzx, r5.xzxy, -r0
    mad r4.xyz, r4, c10.x, r5
    mul r0.yzw, r4.w, r0
    mad r0.yzw, r0, c10.y, r4.xxyz
    nrm r4.xyz, r0.yzww
    mad r5, v0.xyzx, -c0.yyyw, -c0.wwwy
    dp4 r1.y, r1, r5
    dp4 r1.z, r3, r5
    dp4 r1.x, r2, r5
    mad r0.xyz, r4, r0.x, r1
    mul r1, r0.y, c2
    mad r1, r0.x, c1, r1
    mad r0, r0.z, c3, r1
    add r0, r0, c4
    mad o0.x, c6.x, -r0.w, r0.x
    mad o0.y, c6.y, r0.w, r0.y
    add o0.z, r0.z, c5.z
    mov o0.w, r0.w
    mov o1.xy, r0.zwzw
    mov o2, v3.xyxy

// approximately 75 instruction slots used (12 texture, 63 arithmetic)

 

ну их очень много, но все похожие

я сделал такой

 

Скрытый текст

 

row_major float4x4 WorldViewProj : WORLDVIEWPROJ;

struct VS_OUTPUT
{
    float4 Pos  : POSITION;
};

VS_OUTPUT main(float4 inPos : POSITION )
{
    VS_OUTPUT Out;

    Out.Pos = mul(inPos,  WorldViewProj );

    return Out;
};

 

компилится в такое
 

Скрытый текст

 

Microsoft (R) Direct3D Shader Compiler 9.29.952.3111
Copyright (C) Microsoft Corporation 2002-2009. All rights reserved.

//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
//   fxc /Tvs_3_0 C:\tmp\test.hlsl
//
//
// Parameters:
//
//   row_major float4x4 WorldViewProj;
//
//
// Registers:
//
//   Name          Reg   Size
//   ------------- ----- ----
//   WorldViewProj c0       4
//

    vs_3_0
    dcl_position v0
    dcl_position o0
    mul r0, c1, v0.y
    mad r0, v0.x, c0, r0
    mad r0, v0.z, c2, r0
    mad o0, v0.w, c3, r0

// approximately 4 instruction slots used

 

проверял через Nvidia NSight 4.1, мои линии рисуются где то не понятно где

(ошибок в вызовах методов  pDevice нет)

 

потом поняв что не получается решил перемещать объект простой (например спрей)

в точку которую хочу, у меня есть координаты игрока, партнера, камеры

еще вектора, подумал если я буду перемещать то хотя бы наглядно пойму что я делал не так при aimbot

я нашел место где создается объект спрея, но понять как он создается пока не очень понял

я знаю что в игре в архивах есть файлы lot, в которых встречаются строки типа такой

cSetInfoItem.....uItem.........H.......uWp1173

в файле заметок по игре у меня был адрес, где он обрабатывает эти файлы, ставил бряк перед вызовом и менял содержимое

после получалось что спавнился другой объект

но жесткий тот сдох, я там многое потерял

по памяти что то восстановил

...чтоб не тратить много времени решил пока просто перемещать уже расставленый предмет

нашел коллекцию объеков uItem, правда каждый раз тот спрей на сцене под разным номером

пока вручную придется (ну или проверять позицию что она не нулевая, просто придется по всему списку пройтись сначала и найти по определенному классу его)

 

Игра рисует сцену раза 3 4

сначала просто, потом кажется определяет глубину, потом освещенность

меши игроков разбиты по частям

список bone mapping я находил вроде, трансформацию тоже (но туда пока не лез)

Изменено пользователем X86Jumps
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.