Анимация камеры

Board index Геймдев в Blender Игровой движок Blender

Description: Все вопросы и обсуждения, касающиеся BGE
Moderators: exooman, denis8424

Post #21by Korchy » 02.04.2017, 22:15

M_Rodionov wrote:нужно чтобы рендер БГЕ писался как последовательность png картинок в заданную папку.
Хм, с бге вообще не соприкасался. Надо будет поглядеть, если найду время.
Korchy M
Avatar
Posts: 3024



  • 1

Post #22by Mihanik » 02.04.2017, 23:27

M_Rodionov, Korchy, Отбой всё там работает, внимание на экран, важное подчёркнуто красным
Spoiler
Image
Ааа- модуль забыл подчеркнуть, не скрипт, а модуль)
Он содаёт на диске С папку bge_rendered/ и лепит в неё скрины именем frame_00000001.png - frame_00000002.png и т.д.
Там написано снять галку "использовать частоту кадров", но этого вроде недостаточно для снятия зависимости от FPS, надо пробовать

Added after 6 hours 51 minute:
Строка
Code: Select all
print("Saving to " + filename)
, лишняя, она просто в консоль сообшение пишет видать для отадки писали да не удалили.
Mihanik M
Avatar
Posts: 1571

Post #23by M_Rodionov » 03.04.2017, 09:15

В общем если запекать сферические панорамы в циклах со сцены то можно использовать их как карты отражения и использовать френзель в БГЕ - в примере чувак юзает просто текстурку, но по факту с цикловской нодой рефлекшена можно юзать карты запеченые как в бге так и в циклах и юзать их на отражение - для пола, стекла (всего кроме заркал наверное) - решение просто читовое ИМХО т.к. позволяет фейково делать глосси поверхности практически как в циклах
phpBB [media]


Added after 2 minutes 41 second:
Mihanik wrote:Отбой всё там работает, внимание на экран, важное подчёркнуто красным
спасибо!

по идее если снять галку с ФПС то должно работать т.к. тормоза - это просадка ФПС а если у нас анимация - то пофиг пусть просаживается будет сохранять каждый отрисованный кадр, по идее - надо тестить

Added after 16 minutes 18 seconds:
да сферические карты будут нужны не высокого разрешалова и их даже можно поблюрить - для большинства поверхностей будет достаточно 1024*512 разрешения...
M_Rodionov
Posts: 843

Post #24by Mihanik » 03.04.2017, 11:25

M_Rodionov wrote:но по факту с цикловской нодой рефлекшена можно юзать карты запеченые как в бге так и в циклах и юзать их на отражение -
Только сильно не обольщяйся, как и стандартное бгешное фейковое отражение, так и это косячат по чёрному, юзать можно на уровне "едва видно чего то там размытое" или тщательно подбирать изображение для конкретного объекта, в конкретном месте, и отнюдь не сферические панорамы.
Last edited by Mihanik on 03.04.2017, 11:30, edited 2 times in total.
Mihanik M
Avatar
Posts: 1571

Post #25by M_Rodionov » 03.04.2017, 11:27

да, нужен рыбий глаз запеченый из обьекта - тогда будет выглядеть похоже на отражение - протестил уже, но с другой стороны фреснель нода - в БГЕ есть эпик вин

Added after 2 minutes 56 seconds:
да, запеченка в циклах когда печешь только диффуз директ+диффуз индирект учитвает АО и ее можно невозбранно блюрить выборочным гауссом в гимпе - в итоге на лайтмапу не надо дикого количества семплов - 256 вполне
M_Rodionov
Posts: 843

Post #26by Mihanik » 03.04.2017, 11:31

Если удастся избежать зависимости от FPS можно смелее реалтам отражения юзать, и вообще тяжёлые составные маты с отражениями преломлениями по френелю.
БГЕ всем современным движкам фору даст по настройке матов, там нодами чего хочеш можно наворотить.
Mihanik M
Avatar
Posts: 1571

Post #27by M_Rodionov » 03.04.2017, 12:07

ну мне достаточно того что он умеет зеркала, умеет кубимапы для стекла и фейковые рефлекшен мапы для хрома и глосси материаов, на канал спекуляра можно накидывать мапы - для имитации красивых бликов и лайтмапа в циклах печется - этого всего за глаза для архвиза, - буду искать заказ на анимацию и пробовать ее в БГЕ делать если прокатит то будет здорово.
M_Rodionov
Posts: 843

Post #28by Mihanik » 04.04.2017, 23:23

Наконец нашёл время потестить скрипт сохранения скриншонов. С начала о хорошем.
Если снять галку "использовать частоту кадров" действительно побоку сколько времени считается кадр, всё как в обычном рендере. FPS выплясывает как хочет, а кадры сохраняются как положено.
Но это всё таки игровая сцена, сравнительно лёгкая, надо пробовать на более тяжёлой, прям как обычно делается под виз.
https://www.youtube.com/watch?v=gznfYfIqWXE
А теперь о грустном, пока по маленьку пробовал, с маленьким разрешением всё хорошо было, а вот как захотел записать побольше с разрешением 1920/1080, эти картинки очень бодренько заполнили всю имеющуюся на борту оперативу, просто видимо не успевая сохраняться на жёсткий, часть посчитаных уже кадров потерялись и всё повисло наглухо. Минут пять комп в себя приходил.
Так может кто подскажет как с этитм бороться?
Вот собственно скрипт

Code: Select all
from bge import render


counter = 9547# переменная счётчика кадров

def shoot():
    global counter

    filename = "bge_rendered/frame_" + str(counter).zfill(8) + ".png" # составляем имя сохраняемому скрину
    render.makeScreenshot(filename) # сохраняем скрин

    counter += 1 # увеличиваем переменную счётчика кадров на 1
Или другой вариант.
У бге есть штатный актуатор Game и в нём есть скриншон, но беда что он сохраняет скрины в один и тот же файл. Может кто из прогеров подскажет, как через скрип менять у этого актуатора название файла сохранения? У меня чего то не получается.Может это будет лучше работать?
Mihanik M
Avatar
Posts: 1571

Post #29by stanpy » 05.04.2017, 09:51

А на этот актуатор не действуют бленовские правила именования? Если забить название файла типа file_####, то блен сохранит file_0001, file_0002 и т.д.

по поводу того, что не успевает сохранять на хдд -.вставить в цикл задержку в пару секунд после каждого кадра. ограничить фпс.
Ryzen7 2700x, 64 Gb, RTX 2070 Super, Win10
stanpy
Avatar
Posts: 976

Post #30by M_Rodionov » 06.04.2017, 00:53

Mihanik wrote:Так может кто подскажет как с этитм бороться?
Про это писали на BA - там народ говорил что будет работать только с SSD если с обычным винтом - может тупить.

По поводу полигонажа сцен - интерьерка разбита на комнаты при желании можно внутри бленовского файла сделать несколько сцен и подгружать их при переходе / открывании двери. В принципе так может сработать если делать ВР /интерактивный тур; в случае с анимацией это можно делать руками. Далее в архвизе очень часто юзают неоправданный полигонаж с этим активно борется decimate - например зачем просто ваза круглая (тело вращения) на 50 тыс поликов? или люстра у кторой 1 рожок из за излишнего сабдива - на теже 50 тыс а таких рожков 8 + пара бра на основе тойже люстры - decimate при опции unsubdivide не бьет маппинг и в принципе позволяет срубить полигонаж сцен в 2-4 раза практически без визуальных потерь. В любом случае запекать карты и анврапить такие объекты очень тяжело даже автоанврапом в скрипте - 100 лет будет анврапить. Мягкая мебель с большим количеством складок решается темже decimate + потом с исходника на полученную после decimate геометрию запечь AO+normal map - то c 400 тысячного дивана получить реально такой-же на 40 тыс поликов, а учитывая что у нас не целый уровень, на пару гектаров, а всего-лишь квартирка на 100 - 400 квадратов (больших не встречал) то такой быстрой (decimate + normal map) оптимизации - вполне хватит...

В экстерьерах весь основной полигонаж - это растения. для них придется моделить лополи деревья - это вполне решает speed tree - там есть опция сохранения дерева с заданным количеством поликов и превьюшкой - позволяет сгенерить лоды - очень удобно. И БГЕ понимает инстансы.
M_Rodionov
Posts: 843

Post #31by Mihanik » 06.04.2017, 06:39

stanpy wrote:А на этот актуатор не действуют бленовские правила именования?
Я тоже так думал, но нет.
stanpy wrote:.вставить в цикл задержку в пару секунд после каждого кадра. ограничить фпс.
Ограничить фпс на вкладке мир/физика при снятой галке "использовать частоту кадров" не получается , а при неснятой он подгоняет всё под частоту физики, и либо плучаются лишние кадры, либо пропущенные. Как вставить в цикл задержку чёт не соображу.
M_Rodionov wrote:будет работать только с SSD если с обычным винтом - может тупить.
Ну это понятно, но если говорить о рендере видео,то хотелось бы разработать надёжную методику рендера на БГЕ любых сцен, на любых машинах, иначе зачем было эту тему поднимать? С интерактивом да конечно, игровое приложение есть игровое.
Mihanik M
Avatar
Posts: 1571

  • 1

Post #32by Korchy » 06.04.2017, 09:32

Code: Select all
import time
time.sleep(10)
Некуда приткнуть?
Korchy M
Avatar
Posts: 3024



Post #33by Mihanik » 06.04.2017, 21:28

Korchy, Благодарю, как хорошо знать волшебные слова. В моём случае оказалось достаточно time.sleep(0.05).
Теперь хорошо бы узнать как посмотреть существует ли файл на диске, и уже в зависимости от этого применять задержку или не применять, чтоб не было лишнего ожидания. То есть, я не знаю как проверить существование фала, остальное напишу.
Mihanik M
Avatar
Posts: 1571

Post #34by Korchy » 07.04.2017, 11:29

Code: Select all
import os.path
if os.path.exists('путь к файлу'):
    # файл существует
else:
    # не существует
Korchy M
Avatar
Posts: 3024



Post #35by M_Rodionov » 07.04.2017, 12:26

phpBB [media]

Limion 6 - все реалтайм, ИМХО в БГЕ можно сделать очень похоже

Added after 11 minutes 56 seconds:
Офигенно просто

Spoiler
phpBB [media]

Added after 3 minutes 54 seconds:
phpBB [media]


В общем надо попробовать на БГЕ подобное замутить, думаю что вполне может получиться
M_Rodionov
Posts: 843

Post #36by Bibo » 07.04.2017, 13:28

M_Rodionov wrote:Limion 6 - все реалтайм, ИМХО в БГЕ можно сделать очень похоже
Листва/трава и прочее мелкое не осилит. Но есть UPBGE с внедренным шейдером скоростного рассчета мелких объектов.
Bibo
Avatar
Posts: 613

Post #37by Mihanik » 07.04.2017, 14:39

M_Rodionov wrote:Limion 6 - все реалтайм, ИМХО в БГЕ можно сделать очень похоже
Ни разу не сомневаюсь в качестве картинки, все инструменты для её создания есть, это всего лишь вопрос квалификации автора и затраченного времени. Но вот что касается действительно реалтайм, вот тут уж врят ли, медленный бге очень. А вот рендерить видео такого качества на нём вполне можно.

Added after 1 hour 9 minutes:
Korchy, Чёт не получается, нет такого файла и всё тут, То есть строка
Code: Select all
if os.path.exists('путь к файлу'):
Всегда ложна, уж по всякому попробовал.
Spoiler
Image
Сам скрипт целиком.
Code: Select all
from bge import render
import bge
import time
import os.path
counter = 0# переменная счётчика кадров

def shoot():
    global counter

    filename = "bge_rendered/frame_" + str(counter).zfill(8) + ".png" # составляем имя сохраняемому скрину
    render.makeScreenshot(filename) # сохраняем скрин
    if counter>10 :# если 10 кадров уже посчитано
        back_counter = counter- 5 # некая переменная на 5 меньше чем counter
        filename = "bge_rendered/frame_" + str(back_counter).zfill(8) + ".png" # составляем имя проверяемому скрину
        if os.path.exists(filename ):
              print (counter)
        else:
              time.sleep(0.05)
   
    counter += 1 # увеличиваем переменную счётчика кадров на 1
Mihanik M
Avatar
Posts: 1571

Post #38by Korchy » 07.04.2017, 16:11

У тебя filename насколько я понимаю относительный, а exists проверяте полный путь.
Попробуй так:
Code: Select all
os.path.exists(os.path.dirname(bpy.data.filepath) + os.path.sep + filename)
os.path.dirname(bpy.data.filepath) - это текущее расположение проекта (blend-файла)
Korchy M
Avatar
Posts: 3024



Post #39by Mihanik » 07.04.2017, 17:26

Теперь начал ругаться bpy у него видишь ли не определён.
Spoiler
Image
Korchy wrote:У тебя filename насколько я понимаю относительный
Походу нет полный "C:" + filename . А файл лежит C:\content\Kotelni, и если написать
os.path.exists("C:" + filename), то уже не ругается но файла опять же не обнаруживает.
Mihanik M
Avatar
Posts: 1571

Post #40by Bibo » 07.04.2017, 18:06

Mihanik wrote:Теперь начал ругаться bpy у него видишь ли не определён.
Потому что он не был импортирован.
А вообще, не используйте bpy модуль в работе с BGE. Чтобы получить абсолютный путь к текущему бленд-файлу используйте функцию expandPath
Работая с путями через модуль os.path, не забываем, что пути будут рассчитываться исходя из пути к интерпретатору питона в папке блендера, а не из пути к текущему бленд-файлу.

Если путь относительно текущего бленд-файла:
Spoiler
Code: Select all
import os
from bge import logic

blend_path = logic.expandPath("//")  # Получаем путь к текущему бленд-файлу
filename = ""     # Путь файлу

def main(cont):
    print(os.path.exists(blend_path+filename))

Если указываем полный путь ручками, думаю понятно:
Spoiler
Code: Select all
import os
from bge import logic

filename = ""     # Путь файлу

def main(cont):
    print(os.path.exists(filename))

Вместо os.path.exists можно использовать os.path.isfile.

Added after 35 minutes 30 seconds:
Code: Select all
back_counter = counter- 5 # некая переменная на 5 меньше чем counter
К слову, а почему проверяется существование пятого файла с конца, а не текущего файла сразу после сохранения?
Как-то так у меня получилось
Spoiler
Code: Select all
from bge import render, logic
import time
import os.path

save_folder = "//bge_rendered/" # Относительный путь к папке сохранения
file_name = "frame_"            # Имя сохраняемого файла
counter = 0                     # Счетчик кадров

def shoot():
    global counter
    save_path = save_folder + file_name + str(counter).zfill(8)
    render.makeScreenshot(save_path) # Сохраняем скрин
    # Получаем абсолютный путь к файлу
    full_path = logic.expandPath(save_path)
    # Ждем до тех пор, пока файл не будет сохранен
    while not os.path.exists(full_path):
        time.sleep(0.05)
    counter += 1 # Увеличиваем переменную счётчика кадров на 1
Bibo
Avatar
Posts: 613

PreviousNext

Return to Игровой движок Blender

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest