Шукати в цьому блозі

Вимоги до ігрової 3D графіки 2020

Ігрові моделі повинні мати по 4своїх версії з різною деталізацією LOD0 -LOD3  і кількістю полігонів,  високополігональні моделі відображатимуться в грі коли ви бачите їх поряд, низькополігональні з великої відстані.

Рекомендації кількості полігонів

винищувач:
LOD0  25 000 - 75 000 полігонів
LOD1  7 500 -11 500 
LOD2  750 -1000
LOD3  75

бомбардувальник:
LOD0  30 000 - 125 000 полігонів
LOD1  9 000 -16 500 
LOD2  750 -1000
LOD3  75

танки:
LOD0  70 000  полігонів
LOD1  35 000 
LOD2  2 500
LOD3  250

Дистанції на яких будуть відображатися моделі:
  • LOD0 - 0-70 метрів
  • LOD1 - 70-200 метрів
  • LOD2 - 200-550 метрів
  • LOD3 - 550+ метрів

ОКРЕМІ ОБ'ЄКТИ
всі рухомі або змінні деталі треба робити окремими об'єктами
танк
-колеса
-башта
-корпус
-гусіні(можуть бути пошкоджені і замінені іншою моделлю пошкодженої гусіні)
-люки (відкриваються, або їх може відірвати пострілом)
-гармата
-кулемет

літак
-Фюзеляж
-Крила окремо(при пошкодженні модель крила заміняється на пошкоджене)
-Хвіст
-шассі
-лонжерони

всі інші об'єкти повинні бути вшиті в модель а не окремо для правильного розрахунку оклюзії

ПОШКОДЖЕНІ ОБ'ЄКТИ
всі об'єкти які змінюють форму при пошкодженні повинні мати свої версії DMG моделей з текстурами

Танк:
Гармата(зігнута)
гусінь (розірвана)

Літак
Крила (розірвані)
Хвіст
пропелер(погнутий) (пропеллер відображається лише в ангарі, тому LOD моделі робити не потрібно, в польоті пропеллер відображаєтьсяполігоном з анімованою текстурою)

пошкоджені об'єкти повинні мати по 4 варіанти геометрії LOD0 -LOD3 

всі інші пошкодження відображаються на текстурі.

нуль-полигони


об'єкти які повинні бути зєднані як один  об'єкт (наприклад фюзеляж і крила) щоб не було помітно стиків повинні стикуватися з перекриттям на один ряд полігонів, полігони які перекриваються повинні мати окремий матеріал на текстурі







МОДЕЛІ ДЛЯ КОЛІЗІЇ
Потрібна низькополігональна модель геометрії CLS без текстур , для розрахунку колізій у грі 


CLS геометрія деталей танку:
геометрія для колізії
-Корпус
-Башта
-Гармата
-інші деталі танку які може відірвати від танку і по яких реба враховувати колізію(люк танку, кулемет, лопата)

CLS геометрія деталей Літака:
-Фюзеляж
Крила
Хвіст
жвигун
лонжерони


DM геометрія деталей танку:
-внутрішні деталі танку по яких потрібна колізія(боєкомплект, двигун, екіпаж)

внутрішня геометрія для колізії













Розміри текстур

Танк

Корпус - 4096х4096 (включає тестури нової покраски і текстури пошкодженої)
Башта- 2048х2048
Гармата- 2048х1024
Траки - 1024х512 (тайл з 4х траків підряд)

Типи текстур

Albedo(текстура кольору) -Diffuse+Specular Color
NormalMap
Metalness (карта металічності)
Smoothness (карта гладкості)
Ambient Occlusion (карта освітлення)

Всі круглі повернхні повинні мати парну кількість граней
Діаметр гармати/граней
  1. <30 12="" li="">
  2. 30-45мм – 16 граней.
  3. 45-120мм – 24 граней.
  4. >120мм – 32 граней.

Діаметр колес/граней
  1. 12 граней<200 li="">
  2. 16 граней– 200-300мм
  3. 18 граней– 300-400мм
  4. 24 граней– 400-500мм
  5. 32 граней– 500-650мм
  6. 36 граней– 650-900мм
  7. 48 граней– 900-1500мм
  8. 64 граней>1500мм




Додаткова інформація на іноземних сайтах:
https://habr.com/ru/post/433186/
https://wiki.warthunder.ru/Создание_3D-модели_танка
https://wiki.warthunder.ru/Создание_3D-модели_самолёта
https://wiki.warthunder.ru/PBR_совместимость_текстур

Внутрішньоігрові продажі "плагін iab"


----------------

if not tv then
 pcall(function() require "iab" end)
end
if IAB then
 if android then
  if kindle then
   iab=IAB.new("amazon")
   iab:setProducts({credit50="credit_50",credit100="credit_100",credit500="credit_500",credit1000="credit_1000"})
  else
   iab=IAB.new("google")
   iab:setUp(googleLicence)
   iab:setProducts({credit50="credit50",credit100="credit100",credit500="credit500",credit1000="credit1000"})
  end
 elseif ios then
  iab=IAB.new("ios")
  iab:setProducts({credit50="credit50",credit100="credit100",credit500="credit500",credit1000="credit1000"})
 end
 
 if iab then
  iab:setConsumables({"credit50","credit100","credit500","credit1000"})
  iab:addEventListener(Event.AVAILABLE,function(e)
   print("iab is available")
   iabCheck=false
   iab:requestProducts()
  end)
 
  -- зазвичай тут ми б встановили прапор, що можна робити покупки
                -- в основному ви можете дозволити робити всі файли iap після того, як ця подія викликана
 
  --[[ ЗАПРОС ТОВАРІВ]]--
  --Якщо ця подія викликається, ми отримали перелік продуктів та інформацію про них
  iab:addEventListener(Event.PRODUCTS_COMPLETE,function(e)
   print("Product list completed")
   for i = 1, #e.products do
    local p=e.products[i]
    --id, title, description and price
    print(p.productId,p.title,p.description,p.price)
    if p.productId=="fullgame" then
     iabCheck=true
     iabFullGame=false
    end
    for loop=1,#creditText do
     local c=creditText[loop]
     if p.productId==c[1] then
      c[2]=p.price
      c[3]=true
     end
    end
   end
   iab:restore()
  end)
 
  --Інакше ми не змогли отримати інформацію про товари зараз
  iab:addEventListener(Event.PRODUCTS_ERROR,function(e)
   print(e:getType(),e.error)
  end)
 
  iab:addEventListener(Event.PURCHASE_COMPLETE,function(e)
   -- покупки успішно виконані
--тут вам потрібно перевірити, чи не було раніше збережено квитанцію IDI
-- в тому випадку, якщо покупка ще не була здійснена
-- тоді ви можете розблокувати елемент тут
-- і зберігати квитанцію, імовірно, щоб знати
-- що ви вже надали цей елемент користувачеві
   print("Покупка завершена")
   if remainingCredits<0 then remainingCredits=0 end
   if e.productId=="credit50" then
    remainingCredits+=50
    saveSettings()
   elseif e.productId=="credit100" then
    remainingCredits+=100
    saveSettings()
   elseif e.productId=="credit500" then
    remainingCredits+=500
    saveSettings()
   elseif e.productId=="credit1000" then
    remainingCredits+=1000
    saveSettings()
   elseif e.productId=="fullgame" then
    iabCheck=true
    iabFullGame=true
   end
   print(e:getType(),e.productId,e.receiptId)
  end)
 
  iab:addEventListener(Event.PURCHASE_ERROR,function(e)
    -- не вдалося завершити покупку,
                         --інформувати користувача
   --if e.error=="Unable to buy item (response: 7:Item Already Owned)" then
    iab:isAvailable()
   --end
 --  print(e:getType(),e.error)
  end)
 
  iab:addEventListener(Event.RESTORE_COMPLETE,function(e)
   
--тут вам потрібно перевірити, чи не було раніше збережено квитанцію IDI
-- в тому випадку, якщо покупка ще не була здійснена
-- тоді ви можете розблокувати елемент тут
-- і зберігати квитанцію, імовірно, щоб знати
-- що ви вже надали цей елемент користувачеві
   if iabCheck then
    fullgame=iabFullGame
    saveSettings()
   end
   print("Відновлення завершено")
   --iab:purchase("credit500")
  end)
 
  iab:addEventListener(Event.RESTORE_ERROR,function(e)
   -- відновлення не вдалося завершити,
                        --інформувати користувача
  -- print(e:getType(),e.error)
 
  end)
  iab:isAvailable() 
 --  iab:purchase("credit100")
 else 
  print("Iab постачальник не доступний")
 end
else
 print("Iab недоступний")
end


--------------
зробити покупку так:

if iab then iab:purchase("credit50")