Jump to content
Korean Random

MasterModeley

User
  • Content Count

    37
  • Joined

  • Last visited

Posts posted by MasterModeley


  1. 11 часов назад, john39 сказал:

    Приветствую всех,подскажите пожалуйста как соединить текстуры,интересен корнет - эм,есть 3d моделька из данной игрушки но текстурки не могу их соединить с помощью UnsplitAllDDS,может там нумерация должна быть с нуля но там 5 - 6, вот текстурки ссылка,помогите если кто сможет сделать слияние,за ранее спасибо

     

    Нужны файлы с расширением *.0

    Это заголовки файлов, без них собрать сложнее и не факт, что будет правильно.

     

    Сконвертировал https://yadi.sk/d/9CZp1QQLQC6Z7Q

    "Соединить" текстуры у меня не получается, так как это карты шейдеров.

    • Upvote 1

  2. В 15.03.2016 в 17:39, Natsuru TV сказал:

    А есть гайд о том как вытянуть саму 3d модель танка? Что бы можно было ее потом крутить, вертеть как угодно и использовать в фотошопе, для создания превью для видео к примеру. 

     

    Удалось найти метод вытаскивания моделей?

    Формат файлов моделей настолько запутанный, что у меня получилось вытащить модели только частично.


  3. Я не знаю, как и что там на самом деле, но делаю так:

    для packedVertices по 32 бита данных на вершину = 10 + 11 + 11

    $tx = ( ( $packed & 0xFFC00000 ) >> 22 ) / 0x3FF; //
    $ty = ( ( $packed & 0x3FF800 ) >> 11 ) / 0x7FF;    
    $tz = ( $packed & 0x7FF ) / 0x7FF;

    для sharedVertices по 64 бита данных на вершину = 22 + 21 + 21

    $tx = ( ( $packed >> 42 ) & 0x3FFFFF ) / 0x3FFFFF;
    $ty = ( ( $packed >> 21 ) & 0x1FFFFF ) / 0x1FFFFF;
    $tz = ( $packed & 0x1FFFFF ) / 0x1FFFFF;

     

    Получаются нормированные координаты. Масштаб и смещение подбирается из параметров 'codecParams' и/или 'domain'.

     

    Найди меня в соцсетях или по почте [email protected]. Здесь я бываю редко и не всегда смогу ответить быстро.

    • Upvote 1

  4. 56 минут назад, Pavel3333 сказал:

    @MasterModeley а вообще, из этих файлов можно выделить модель или только данные по коллизиям?

     

    Модели бронирования, которые у меня на сайте, как раз выделены из этого файла. Это, по сути, обычная 3D  модель с вершинами и поверхностями, в которой вместо цвета и текстур прописаны их физические параметры.


  5. 35 минут назад, Pavel3333 сказал:

    @MasterModeley а почему удалили свой репозиторий? был очень полезный материал...

     

    Принцип, который там использовался, был не совсем правильный. После очередного обновления танков всё порушилось.

     

    Как уже писал чуть выше, правильная и полная информация находится в репозитории https://github.com/blueskythlikesclouds/TagTools

     

     

    • Upvote 1

  6. Решить проблему "в лоб" оказалось слишком сложно. Пришлось серьёзно заняться гуглением. В результате нашёл кое-что полезное.

     

    Вот здесь https://github.com/blueskythlikesclouds/TagTools отлично расписано, что и как хранится в havok файле.

     

    После небольших исправлений cможет переварить файлы WoT. Тем более, в новой версии WoT формат havok очистился от лишнего.

    • Upvote 3

  7. В 20.02.2018 в 12:13, reven86 сказал:

    Из того, что видно - модель теперь состоит из отдельных частей, которые могут пересекаться друг с другом

     

    Мне кажется, что эти "части" должны быть замкнутыми (возможно выпуклыми) фигурами , поэтому пересекаются друг с другом. Осталось научиться отделять значимые полигоны от служебных.


  8. Внимательно присмотревшись к блоку TNA1 можно обнаружить его связь с TSTR:

    8127
    0000                                hkRootLevelContainer
    0102                                hkArray
    0203                                tT
    0304                                tAllocator
    0400                                hkRootLevelContainer::NamedVariant
    0500                                hkContainerHeapAllocator
    0601 0203                           T*
    0700                                int
    0800                                hkStringPtr
    0900                                hkRefVariant
    0A00                                char*
    0B00 0601 020A                      hkReferencedObject
    0C00                                hkBaseObject
    0D00 0000                           hkPropertyBag
    0E00                                char
    0F00                                hkMemoryResourceContainer
    1000 0102 0215 0304 0102 0217 0304  hkResourceContainer
    1100                                hkResourceBase
    1201                                hkRefPtr
    1319 0601 0215 1201 1310 0601 0217  tTYPE
    1400 0601 0219 0601 0210            hkMemoryResourceHandle
    1500 0102 021E 0304                 hkResourceHandle
    1600 0601 021E                      hkMemoryResourceHandle::ExternalLink
    1700 0102 0223 0304                 HKBodyFlagsData
    1800                                hkVector4
    1900 0601 0223                      HKBodyFlagsData::Info
    1A00                                hkVector4f
    1B00                                hkInt64
    1C00                                unsigned int
    1D00                                float
    1E00                                long long
    и т.д.

     


  9. 2 часа назад, SkepticalFox сказал:

    https://github.com/Dexesttp/hkxpack/tree/master/core/src/test/resources

    Там и структура в доках расписана для той версии

     

    К сожалению, там слишком маленький тестовый файл. И на первый взгляд он не имеет ничего  общего с исследуемой версией.


  10. Вот до чего я пока докопался в staticModules_default:

    - блок TAG0

         - блок SDKV :  версия SDK в текстовом виде

         - блок DATA :  данные геометрии и физики (?)

    - блок TYPE

         - TSTR : строки (в большинстве с префиксом hk* )

         - TNA1 : ?

         - FSTR : строки (имена параметров?)

         - TBDY : ?

         - TPAD : ?

    - блок INDX

         - ITEM : массив индексов { uint32 флаги(?), uint32 позиция в блоке DATA, uint32 количество (не размер!) данных }

     

    Причём, блок TYPE кажется одинаков для всех файлов(?)

     

    Может ли кто-нибудь кинуть в меня "типичный" havok файл, который можно конвертировать hkxcmd и посмотреть, что в итоге должно примерно получиться? Можно бросаться уже конвертированными.


  11. Подводем итоги проведённым изысканиям.

     

    Рассмотрим подробно принципы формирования новых текстур на примере шасси Сфинкса. Материал определён в файле "\Objects\vehicles\afv\sphinx\sphinx_hull.mtl" и имеет вот такой вид:

    Цитата

    <Material Name="Wheels" MtlFlags="524416" Shader="AT_LayeredPaint" GenMask="800004000" StringGenMask="%BUMP_MAP%DIFFUSE_EXISTS" SurfaceType="mat_vehicle_armor" MatTemplate="" Diffuse="0.04614884,0.042987008,0.014310519" Specular="1,1,1" Emissive="0,0,0" Shininess="60" Opacity="1" HeatAmountScaled="83" LayerAct="1">
       <LayeredConfig>
        <File Val="objects/vehicles/afv/sphinx/textures/new/wheels/id.xml"/>
        <Layers>
         <Item>
          <LayerKey Val="BasePaint"/>
          <Material Val="materials/at_materials/basepaint_01"/>
          <AlbedoAlpha Val="3.4300001"/>
          <SurfaceAlpha Val="1.34"/>
        .......
        <Item>
          <LayerKey Val="RubberRaw"/>
          <Material Val="materials/at_materials/rubberraw_01"/>
          <AlbedoAlpha Val="1.12"/>
          <SurfaceAlpha Val="1"/>
        ......

     

    Перебирая "Item" в "Layers" мы можем получим набор цветов, соответствующих "LayerKey". Для этого надо исследовать файл материалов, определённый в "Material". Например, для "RubberRaw" это будет файл  "/materials/at_materials/rubberraw_01.mtl":

    Цитата

    <Material MtlFlags="524288" Shader="AT_SingleLayer" GenMask="0" StringGenMask="" SurfaceType="" MatTemplate="" Diffuse="0.020951131,0.020951131,0.020951131" Specular="0.031551391,0.031551391,0.031551391" Emissive="0,0,0" SimplifiedDiffuseScalar="2" Shininess="40" Opacity="1" CloakAmount="0" LayerAct="1">
     <Textures />
     <PublicParams FresnelContribution="1" SurfaceTilingU="3" NormalRotation="0" SurfaceIndex="2" EmissiveExponent="0" SurfaceRotation="0" NormalsContribution="0" NormalTilingV="3" EmissiveMultiplier="0" CamoWeight="0" SmoothnessContribution="1" FresnelScale="3" FresnelBias="0.2" NormalIndex="2" SurfaceTilingV="3" GlobalAlbedoWeight="0" NormalTilingU="3" DiffuseContribution="0.315" GlobalMaterialScale="4" IndirectColor="0.25,0.25,0.25"/>
    </Material>

     

    Здесь нас интересует атрибут "Diffuse", мы и будем использовать. В нашем случае это чёрная резина с цветом #050505.

     

    Составив таблицу цветов, займёмся файлом "/objects/vehicles/afv/sphinx/textures/new/wheels/id.xml" в котором описаны материалы и их слои:

    Цитата

    <?xml version="1.0"?>
    <Palettes>
      <Palette id="1">
        <Layer name="Dirt.tga" />
        <Layer name="BasePaint.tga" />
        <Layer name="Scratch.tga" />
        <Layer name="RubberRaw.tga" />
        <BaseLayer name="base_00FFFF" />
      </Palette>
      <Palette id="2">
        <Layer name="Dirt.tga" />
        <Layer name="BasePaint.tga" />
        <Layer name="Scratch.tga" />
        <BaseLayer name="base_0000FF" />
      </Palette>
      <Palette id="3">
        <Layer name="Dirt.tga" />
        <Layer name="BasePaint.tga" />
        <Layer name="Scratch.tga" />
        <BaseLayer name="base_FF0000" />
      </Palette>


      Мы видим три материала из 4-5 слоёв.
      По идее, вместо вычисленных выше цветов можно просто использовать текстуры, определённые в этом файле. Но найти их мне не удалось.
      "BaseLayer" определяет цвет основы, на которую наносятся остальные слои. Интенсивность первого первого слоя определяется R каналом в файле "/objects/vehicles/afv/sphinx/textures/new/wheels/w.dds", интенсивность второго, третьего и четвёртого слоёв каналами G, B и A соответственно.
     
      Файл "/objects/vehicles/afv/sphinx/textures/new/wheels/id.dds" в красном канале содержит карту применения того или иного материала. В нашем случае пикселы с R == 1 соответствуют материалу с <Palette id="1"> и т.д.
     
      В результате, алгоритм расчёта пикселя тестуры выглядит следующим образом:
      1) выбираем пиксель из w.dds и раскладываем на каналы как R, G, B, A
      2) выбираем соответствующий пиксель из id.dds и выбираем R канал как M
      3) если M == 0 - пиксель не используется
      4) выбираем Palette с id == M как P
      5) выбираем цвет как СOLOR из таблицы цветов для P[BaseLayer]
      6) для каждого слоя P[Layer] выбираем соответствующие цвета из таблицы цветов как cl и смешиваем с СOLOR используя (R, G, B, A): COLOR = blend( COLOR,  cl, {R, G, B, A}  )
      7) закрашиваем пиксель текстуры цветом COLOR
      

    • Upvote 2

  12. 2 часа назад, Andrakann сказал:

    А это не зоны пробития случаем?

     

    Нет. Это зоны применения того или иного материала/шейдера. Причем "синий" шейдер для колёс это не то же самое, что и "синий" для корпуса или башни. 

    Но ваша теория очень интересная. Попробую проверить её.


  13. 10 минут назад, romand сказал:

    Попробуй в UV 1:1 поставить. У меня так получалось.

     

    Я рендерю у себя на сайте. Там нет такой возможности. Либо неправильно читаю UV из сgf.

     

    Надо будет еще со смешением цветов поэкспериментировать. Пока результат мне не очень нравится.

    • Upvote 1
×
×
  • Create New...