Не забывать!

Блог, чтобы сохранить рабочие моменты, которые забываются или теряются, как ни обидно... Попробуем устранить это недоразумение. Возможно эти тексты еще кому пригодятся.

суббота, 1 ноября 2014 г.

Тестовый экспорт самолета Су-7 в War Thunder

Создал болванку(не финальную модель) самолета. На основе су-7. Все лоды, Все лоды dmg. DM, все анимации. Моя цель наоборот: хотел сначала разобраться с экспортом, после чего моделирование самолета. Мне важно всегда видеть конечный результат. Все делал по инструкции. Так же все необходимые текстуры(тоже болванки) и материалы. Начал экспортить, поправил ошибки — экспорт удался.
Но. Теперь не пойму как починить текстуры. Их не видно во вьювере.
Так это осн. мысль. Теперь по-порядку:


1. 3ds max:
Все по слоям, все по инструкции (материалы, названия объектов, треки анимации linear, note track). В общем старался все соблюсти по «бумажке».

болванка с пробниками-текстурами:
d1b8700aaad1c0dcfa6289cf06957194.png

все лоды, Дмы, клип-поинты, и все, все, все...
764d80375eb3a8169eb58fbd340d2d99.png

разложил, чтоб было понятнее, кому не понятно:
14ab3700907f94fae071db622d9bfc95.png


2. Экспорт: 
Натыкался на некоторые ошибки. Все полики должны иметь группу сглажиавания - исправил. Далее была ошибка degenerate faces - поможет wertex weld.
И тут первая не ясность: какие включать слои? Экспортится только открытое.
для ДМ я выбрал только этот слой.
для лода 00 выбрал лод00, gun, pilot (винта у меня нет)
далее для лодов просто переключал слои лодов. там были везде включены ГАН и ПИЛОТ. Тоже самое и для дмг2лодов

Вот это и хочу спросить у разрабов правильно я делал? Такой инфы в СДК не видел.
Неясность вторая: у меня материалы используются не все. В примеры используется 11 идэшников. Но у меня нет винта и прочего. 
Можно ли пропускать ненужные ИД или как-то по другому решать? Хочется ответ)
скриншот:


8de7d037e388.jpg

Тем не менее имею следующее при экспорте:

номер раз! нет текстур: (они есть в списке и отображаются в просмотре)
e2b35b940478.jpg


теперь я проэкспортил sample i186, то же самое:
7fe8b8b361c6.png


оригинальный sample i186 в порядке:
2c026963f639.jpg


далее понимаю, что экспорченую анимацию мне не посмотреть, но к ней мы еще вернемся.
Теперь я натыкаюсь на еще непонятку: Скелет не хочет генериться, читаться, экспортиться - выбирай любое. 
Наверное читаться. Заметил, что у каждого объекта есть в user defined properties описания сл. вида:

renderable:b=yes
cast_shadows:b=yes
normals:t="disable"
dir:p3=0, 0, 0
cast_on_self:b=yes
unwrapScheme:i=0
collidable:b=no
collision:t="box"
phmat:t=""
massType:t="none"
preferMass:b=no
mass:r=-1
density:r=-1
animated_node:b=yes
billboard:b=no
occluder:b=no

Когда делал копировал пилота, модельки пламени, и слиппоинты из примера. Так вот первый мой скелет был похож на этот:

скелетон дамадж состояния:
видите объекты  bomb,flare,pilot, именно ини были скопированны из примера СДК.
27d9889316a2.jpg


Делаю вывод, что те описания кроме всего прочего описывают и скелет. Об этом тоже ни слова в СДК.
В разных деталях описания отличаются, что естественно. Скопировав для примера с одного объекта user defined properties во все свои на слое LOD00, получил следующее:
Вопрос: Что че значит? Вообще интуитивно понятно. Особенно некоторые понятия настройки рендера (я очень визуализатор потому что))) Но хочется больше инфы от разрабов.

скелетон LOD00 после ctrlC,ctrlV user defined properties:
521ace731637.jpg


Идем дальше. 
Вид _dm показался правильным в сравнении с примером и очень радует:
afdc463f9f90.jpg


3. Копаю глубже. Сравниваю файлы .dag 
Беру СДК sample i185 и сравниваю с моим экспортом его же.

Вот пример ЛОД03:
6e94a3511b83.png

цыфра 1: этосамое первое различие и тут вижу, что в моем файте просто нет пути до текстуры, а у сэмпла есть точно тот путь, что определен в .max файле.
цыфра 2: вижу те данные из user defined properties, что доказывает их значение.
смотрим дальше, и там попорядку перечислены похоже все пути:
ade57affdf50.png

и вот последнее в строке:
dad771ae705c.png

Все остальные различия не кажутся существенными. Тем более я помню сравнивал предыдущие свои версии и там было только одно отличие: та первая строчка с путями/именами.tga Если мне не изменяет память они создавались мной до обновления CDK 1.43.
еще привожу сравнение LOD00, потому как во вьювере выше я показал именно его. тут то же положение вещей:
d664ab1782a7.png


Вот еще сравнение _dm. И тут одно отличие по поводу с путями/именами.tga:
39e864c33073.png


Теперь анимации. Тоже непонятки были. Говорил выше, что вернусь к ним. Сравнение выявило одно несущественное отличие, связанное, возможно, с версиями. Делаю вывод: значит анимации экспортил правильно. А делал это следующим образом: Выбирал слои для лода00, т.к. сказано, что анимации должны быть только на деталях лод00. Далее нажимаем кнопку экспорта анимации, имя файла, читаем лог, там все в порядке.
Вопрос можно не задавать, однако хочется от разрабов «кивок головой» )) по этому поводу.

Скриншот файлов анимации:
7dc389ad1986.png

проэкспортил из 64макса и с текстурами все хорошо

далее когда запускал ругался на несуществующие модули в _dm. это я поправил.

файл test_su7b.blk сейчас:
// ==============================================================================
// Sample Model (based on I_185 M-82)
// ==============================================================================

model:t="test_su7b"
fmFile:t="fm/i_185_m82.blk"
hasQualityModels:b=true

ikPilot{
  model:t="pilot_su_char"
  maxHeadHorAngle:r = 60
  maxHeadDownAngle:r = 60
  maxHeadUpAngle:r = 10
  headNode:t = "Bip01 Head"
  pelvisNode:t = "Bip01 Pelvis"
  pelvisTargetNode:t = "Bip01 Pelvis01"

  ikNode
  {
    downNode:t = "Bip01 L Hand"
    midNode:t = "Bip01 L Forearm"
    upNode:t = "Bip01 L UpperArm"
    targetNode:t = "throttle_lhand_1"
    flexionDir:p3 = 0, -1, 0.2
  }

  ikNode
  {
    downNode:t = "Bip01 R Hand"
    midNode:t = "Bip01 R Forearm"
    upNode:t = "Bip01 R UpperArm"
    targetNode:t = "stick_rhand_1"
    flexionDir:p3 = 0, -1, -0.5
  }

  ikNode
  {
    downNode:t = "Bip01 L Foot"
    midNode:t = "Bip01 L Calf"
    upNode:t = "Bip01 L Thigh"
    targetNode:t = "pedal_lfoot_1"
    flexionDir:p3 = 0, 1, 0.3
  }

  ikNode
  {
    downNode:t = "Bip01 R Foot"
    midNode:t = "Bip01 R Calf"
    upNode:t = "Bip01 R Thigh"
    targetNode:t = "pedal_rfoot_1"
    flexionDir:p3 = 0, 1, -0.3
  }

}

attach{
  "pilot1":t="pilot_su_500"
}

cut_parts
{
  wing_l
  {
    part:t="wing_l"
    part:t="flap_l"
    part:t="slat_l"
    part:t="aileron_l"
    part:t="pylon_bomb1"
    part:t="bomb1"
}

  wing_r
  {
    part:t="wing_r"
    part:t="flap_r"
    part:t="slat_r"
    part:t="aileron_r"
    part:t="pylon_bomb2"
    part:t="bomb2"
  }

  tail
  {
    part:t="tail"
    part:t="rudder"
    part:t="elevator0"
    part:t="elevator1"
  }
}

commonWeapons{
  Weapon
  {
    trigger:t = "cannon"
    blk:t = "gameData/Weapons/cannonShVAK.blk"
    emitter:t = "flare1"
    flash:t = "flare1"
    dm:t = "cannon1_dm"
    bullets:i = 250
    spread:r = 1
    counterIndex:i = 2
  }

  Weapon
  {
    trigger:t = "cannon"
    blk:t = "gameData/Weapons/cannonShVAK.blk"
    emitter:t = "flare2"
    flash:t = "flare2"
    dm:t = "cannon2_dm"
    bullets:i = 250
    spread:r = 1
    traceOffset:i = 1
    counterIndex:i = 1
  }

}

fightAiBehaviour:t="fighter"

Shop{
  maxAltitude:r=10450
  maxSpeed:r=170.83
  turnTime:r=22
  airfieldLen:r=357.74
  climbTime:r=324
  maxSpeedAlt:r=6470
  climbAlt:r=5000
  climbSpeed:r=15.43
}

testFlight:t="testFlight_stalingrad"
type:t="typeFighter"
paratrooper:t="ally"

balanceData{
  accSpd:r=2.62542
  climbSpeed:r=18.51
  maxSpeed:r=170.83
  turnTime:r=22
}

weapon_presets{}
modifications{}


tags{
  piston_engine:b=yes
  training:b=yes
  all:b=yes
  ally:b=yes
  country_ussr:b=yes
  type_fighter:b=yes
  year1941:b=yes
  year1942:b=yes
  year1943:b=yes
  soviet:b=yes
  
  berlin:b=yes
  
  eastern_front:b=yes
  far_eastern_front:b=yes
  
  can_be_played_with_cockpit_view_only:b=yes; hangar:b=yes
}

years_active {
  year1941 {
    khalkin_gol:r=0.5; berlin:r=0.5; korsun:r=0.5; krymsk:r=0.5; mozdok:r=0.5; stalingrad:r=0.5; stalingrad_w:r=0.5
  }
  year1942 {
    khalkin_gol:r=0.3; berlin:r=0.3; korsun:r=0.3; krymsk:r=0.3; mozdok:r=0.3; stalingrad:r=0.3; stalingrad_w:r=0.3
  }
  year1943 {
    khalkin_gol:r=0.2; berlin:r=0.1; korsun:r=0.1; krymsk:r=0.1; mozdok:r=0.1; stalingrad:r=0.1; stalingrad_w:r=0.1
  }
}

DamageParts{
  armor10{
    cannon1_dm{
      hp:r=38.3072
    }
    cannon2_dm{
      hp:r=38.3072
    }
  }
  armor_engine_air{
    engine1_dm{
      hp:r=30
    }
  }
  c_percal_dural{
  }
  c_wood10{
  }
  c_wood20{
  }
  dural{
    wing1_l_dm{
      deadExplProb:r=0.5; hp:r=20.8464
    }
    wing1_r_dm{
      deadExplProb:r=0.5; hp:r=20.8464
    }
    wing2_l_dm{
      deadExplProb:r=0.5; hp:r=20.8464
    }
    wing2_r_dm{
      deadExplProb:r=0.5; hp:r=20.8464
    }
    wing_l_dm{
      deadExplProb:r=0.5; hp:r=20.8464
    }
    wing_r_dm{
      deadExplProb:r=0.5; hp:r=20.8464
    }
    tail_dm{
      deadExplProb:r=0.5; hp:r=20.8464
    }
    aileron_l_dm{
      hp:r=12.6
    }
    aileron_r_dm{
      hp:r=12.6
    }
    elevator0_dm{
      hp:r=19.1536
    }
    elevator1_dm{
      hp:r=19.1536
    }
    flap_l_dm{
      hp:r=26.058
    }
    flap_r_dm{
      hp:r=26.058
    }
    flap1_l_dm{
      hp:r=26.058
    }
    flap1_r_dm{
      hp:r=26.058
    }
    rudder_dm{
      hp:r=18.9
    }
    fin_dm{
      hp:r=10.4232
    }
    stab_dm{
      hp:r=19
    }
    cover1_dm{
      hp:r=78.4
    }
    fuse_dm{
      hp:r=20.8464
    }
    fuse1_dm{
      hp:r=20.8464
    }
    fuse2_dm{
      hp:r=20.8464
    }
  }
  dural5{
    spar1_l_dm{
      hp:r=20.8464
    }
    spar1_r_dm{
      hp:r=20.8464
    }
    spar2_l_dm{
      hp:r=20.8464
    }
    spar2_r_dm{
      hp:r=20.8464
    }
    spar_l_dm{
      hp:r=20.8464
    }
    spar_r_dm{
      hp:r=20.8464
    }
  }
  protected_controls{
    tailcontrol_dm{
      hp:r=31.2696
    }
    wingcontrol_l_dm{
      hp:r=31.2696
    }
    wingcontrol_r_dm{
      hp:r=31.2696
    }
  }
  steel{
    gear_l_dm{
      hp:r=20.8464
    }
    gear_r_dm{
      hp:r=20.8464
    }
  }
  steel_cooling_sys{
    oil1_dm{
      hp:r=8
    }
  }
  steel_pilot{
    pilot_dm{ fireProtectionHp:r=20
      hp:r=20
    }
  }
  steel_tank_s{
    tank1_dm{
      hp:r=10.4232
    }
    tank2_dm{
      hp:r=10.4232
    }
    tank3_dm{
      hp:r=10.4232
    }
  }
}
DamageEffects{
  part{
    name:t="aileron_l_dm"
    onHit{
      cut:r=0.3; damage:r=17
    }
    onKill{
      cut:r=1; nothing:r=4
    }
  }
  part{
    name:t="aileron_r_dm"
    onHit{
      cut:r=0.3; damage:r=17
    }
    onKill{
      cut:r=1; nothing:r=4
    }
  }
  part{
    name:t="armor1_dm"
  }
  part{
    name:t="armor2_dm"
  }
  part{
    name:t="armor3_dm"
  }
  part{
    name:t="cannon1_dm"
  }
  part{
    name:t="cannon2_dm"
  }
  part{
    name:t="cover1_dm"
  }
  part{
    name:t="cover2_dm"
  }
  part{
    name:t="cover3_dm"
  }
  part{
    name:t="elevator_dm"
    onHit{
      cut:r=0.3; damage:r=17
    }
    onKill{
      cut:r=1; nothing:r=4
    }
  }
  part{
    name:t="engine1_dm"
    onHit{
      expl:r=0.001; leak_oil:r=0.2
    }
    onKill{
      expl:r=1; fire:r=2; nothing:r=7
    }
  }
  part{
    name:t="fin_dm"
    onKill{
      nothing:r=7; rudder_dm:r=1
    }
  }
  part{
    name:t="flap_l_dm"
    onHit{
      cut:r=0.3; damage:r=17
    }
    onKill{
      cut:r=1; nothing:r=4
    }
  }
  part{
    name:t="flap_r_dm"
    onHit{
      cut:r=0.3; damage:r=17
    }
    onKill{
      cut:r=1; nothing:r=4
    }
  }
  part{
    name:t="fuse1_dm"
    onHit{
      tailcontrol_dm:r=0.005; wingcontrol_dm:r=0.001
    }
    onHit{
      damage:r=28; tailcontrol_dm:r=0.1; wingcontrol_dm:r=0.001
    }
    onKill{
      nothing:r=10; tailcontrol_dm:r=1; wingcontrol_dm:r=1
    }
  }
  part{
    name:t="fuse_dm"
    onHit{
      tailcontrol_dm:r=0.0005
    }
    onHit{
      damage:r=28; tail_dm:r=0.3; tailcontrol_dm:r=0.2
    }
    onKill{
      nothing:r=7; tail_dm:r=2; tailcontrol_dm:r=1; tank1_dm:r=1
    }
  }
  part{
    name:t="gear_l_dm"
  }
  part{
    name:t="gear_r_dm"
  }
  part{
    name:t="oil1_dm"
    onHit{
      leak_oil:r=0.33
    }
    onKill{
      leak_oil:r=1
    }
  }
  part{
    name:t="oil2_dm"
  }
  part{
    name:t="pilot_dm"
    onHit{
      pilot_dm:r=0.03
    }
  }
  part{
    name:t="rudder_dm"
    onHit{
      cut:r=0.3; damage:r=17
    }
    onKill{
      cut:r=1; nothing:r=4
    }
  }
  part{
    name:t="spar1_l_dm"
  }
  part{
    name:t="spar1_r_dm"
  }
  part{
    name:t="spar2_l_dm"
  }
  part{
    name:t="spar2_r_dm"
  }
  part{
    name:t="spar_l_dm"
  }
  part{
    name:t="spar_r_dm"
  }
  part{
    name:t="stab_dm"
    onKill{
      elevator_dm:r=1; nothing:r=7
    }
  }
  part{
    name:t="tail_dm"
    onHit{
      tailcontrol_dm:r=0.001
    }
    onHit{
      cut:r=0.6; damage:r=30
    }
    onKill{
      nothing:r=9; tailcontrol_dm:r=1
    }
    onKill{
      cut:r=1; damage:r=10; nothing:r=9
    }
  }
  part{
    name:t="tailcontrol_dm"
  }
  part{
    name:t="tank1_dm"
    onHit{
      leak:r=0.035
    }
    onHit{
      damage:r=2; fire:r=0.03; leak:r=0.05
    }
    onKill{
      expl:r=0.1; fire:r=0.9; leak:r=2; nothing:r=3
    }
  }
  part{
    name:t="tank2_dm"
    onHit{
      leak:r=0.035
    }
    onHit{
      damage:r=2; fire:r=0.03; leak:r=0.05
    }
    onKill{
      expl:r=0.1; fire:r=0.9; leak:r=2; nothing:r=3
    }
  }
  part{
    name:t="tank3_dm"
    onHit{
      leak:r=0.035
    }
    onHit{
      damage:r=2; fire:r=0.03; leak:r=0.05
    }
    onKill{
      expl:r=0.1; fire:r=0.9; leak:r=2; nothing:r=3
    }
  }
  part{
    name:t="wing1_l_dm"
    onHit{
      wingcontrol_l_dm:r=0.001
    }
    onHit{
      cut:r=0.6; damage:r=31
    }
    onKill{
      nothing:r=9; wingcontrol_l_dm:r=1
    }
    onKill{
      cut:r=1; damage:r=3; nothing:r=5
    }
  }
  part{
    name:t="wing1_r_dm"
    onHit{
      wingcontrol_r_dm:r=0.001
    }
    onHit{
      cut:r=0.6; damage:r=31
    }
    onKill{
      nothing:r=9; wingcontrol_r_dm:r=1
    }
    onKill{
      cut:r=1; damage:r=3; nothing:r=5
    }
  }
  part{
    name:t="wing2_l_dm"
    onHit{
      wingcontrol_l_dm:r=0.001
    }
    onHit{
      cut:r=0.6; damage:r=31
    }
    onKill{
      nothing:r=9; wingcontrol_l_dm:r=1
    }
    onKill{
      cut:r=1; damage:r=3; nothing:r=5
    }
  }
  part{
    name:t="wing2_r_dm"
    onHit{
      wingcontrol_r_dm:r=0.001
    }
    onHit{
      cut:r=0.6; damage:r=31
    }
    onKill{
      nothing:r=9; wingcontrol_r_dm:r=1
    }
    onKill{
      cut:r=1; damage:r=3; nothing:r=5
    }
  }
  part{
    name:t="wing_l_dm"
    onHit{
      wingcontrol_l_dm:r=0.001
    }
    onHit{
      cut:r=0.6; damage:r=31
    }
    onKill{
      nothing:r=9; wingcontrol_l_dm:r=1
    }
    onKill{
      cut:r=1; damage:r=3; nothing:r=5
    }
  }
  part{
    name:t="wing_r_dm"
    onHit{
      wingcontrol_r_dm:r=0.001
    }
    onHit{
      cut:r=0.6; damage:r=31
    }
    onKill{
      nothing:r=9; wingcontrol_r_dm:r=1
    }
    onKill{
      cut:r=1; damage:r=3; nothing:r=5
    }
  }
  part{
    name:t="wingcontrol_l_dm"
  }
  part{
    name:t="wingcontrol_r_dm"
  }
}

MetaParts
{
  wing_l_structure
  {
    hp:r = 500
    part:t = "wing_l_dm"
    part:t = "wing1_l_dm"
    part:t = "wing2_l_dm"
    part:t = "spar_l_dm"
    part:t = "spar1_l_dm"
    part:t = "spar2_l_dm"
    effects
    {
      cutPart:t="wing_l_dm"
    }
  }
  wing_r_structure
  {
    hp:r = 500
    part:t = "wing_r_dm"
    part:t = "wing1_r_dm"
    part:t = "wing2_r_dm"
    part:t = "spar_r_dm"
    part:t = "spar1_r_dm"
    part:t = "spar2_r_dm"
    effects
    {
      cutPart:t="wing_r_dm"
    }
  }
  tail_structure
  {
    hp:r = 1000
    part:t = "fuse2_dm"
    part:t = "tail_dm"
    part:t = "stab_dm"
    part:t = "fin_dm"
    effects
    {
      cutPart:t="tail_dm"
    }
  }
}

Sound{
  Engine:t="engine03"
  gun:t="gun_default"
}

explosion_dm
{
  hitPowerMult:r=1
  nearHitPower:p2=1.0,50
  midHitPower:p2=0.9,400
  farHitPower:p2=0.1,1000
  endHitPower:p2=0.01,1500

  relativeVelHitShift:p2=300,1000
  nearArmorPower:p2=10,50
  midArmorPower:p2=7,400
  farArmorPower:p2=0.2,700
  relativeVelArmorShift:p2=200,1000

  explodeTreshold:r=0.0001
  explodeHitPower:r=60
  explodeArmorPower:r=60
  explodeRadius:p2=5,30
}
turbulence{
  segmentlength:r=100
  startSpeed:r=28
  maxSpeed:r=140
  maxPower:r=6
  initialRadius:r=12
  radiusSpeed:r=2
}

overheat_arcade
{
  engineOverheatCooldownTime:r = 14
  engineOverheatTime:r = 25
  engineCooldownTime:r = 18
  engineTempAfterOverheat:r = 0.15

  gunOverheatCooldownTime:r = 3
  gunOverheatTime:r = 8
  gunCooldownTime:r = 2.5
  gunTempAfterOverheat:r = 0.15
}

Как запустил миссию повис над водой а самолет не видно. больше ничего сделать не дает. интерфейса нет, меню нет.
так же пробовал семпл: и185 тоже не показывается самолет и я вишу над водой.
пробовал прописать в миссию самолеты: f2a-1, f2a-3, p-400, p-39n они летают. прописал p-39q, который не открыт у меня -  не летит.

когда самолет определяется его полное имя пишется по-русски и вооружение пишется. 
p-39q, mig-3-15 не определился написал p-39q_0, mig-3-15_0 Так же писал про мой test_su7b_0, sample_i_185_m82_0
Однако если написать i_185_m82 идешник этот подхватывается и пишет имя самолета и вооружение. Этот самолет не открыт у меня и когда запускаешь он предупреждает, что нужен этот самолет.

Заметил, что не экспортится ХАЙ-модель. только с припиской low_
пошел в файл folder.blk
там нашел палку в колесе:

virtual_res_blk{
  find:t="^(.*)\.lod00\.dag$"
  className:t="dynModel"
  contents {
  export_PC:b=no //убрал эту строку
    lod { range:r=70; }
    lod { range:r=200; }
    lod { range:r=500; }
    lod { range:r=3000; }
    ref_skeleton:t="$1_skeleton"
    all_animated:b=yes
  }
  stopProcessing:b=false
}

Сева видно, что проэкспортились все. крестиков нигде не стоит. Оба самолета свой и семпл.



эх все равно не летит...