Автор Тема: изогнуть видео под сферическое зеркало  (Прочитано 22106 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: изогнуть видео под сферическое зеркало
« Ответ #15 : 15 Ноября 2012, 20:27:38 »
alex123, может есть писание этих преобразований?
вот что получается
Для Кота

Оффлайн alex123

  • Житель
Re: изогнуть видео под сферическое зеркало
« Ответ #16 : 15 Ноября 2012, 21:09:54 »
нет, никаких описаний кроме тех которые давал выше. Но последняя вроде похожа на требуемый результат. Можно попробовать ,я дам кусок видео - Вы переводите в эту проекцию, а я посмотрю под куполом планетария.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: изогнуть видео под сферическое зеркало
« Ответ #17 : 15 Ноября 2012, 21:18:46 »
>>я дам кусок видео
... давай попробуем ...
Для Кота

Оффлайн Илия

  • Житель
Re: изогнуть видео под сферическое зеркало
« Ответ #18 : 26 Февраля 2013, 22:44:40 »
alex123, может есть писание этих преобразований?
вот что получается

А как это преобразование сделано?

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: изогнуть видео под сферическое зеркало
« Ответ #19 : 27 Февраля 2013, 06:56:28 »
>> А как это преобразование сделано?
... если вопрос про картинки которые опубликованы в сообщении  http://blender-3d.ru/forum/index.php/topic,414.msg4900.html#msg4900 , тогда последовательность для blender следующая ...

... создается план (можно прямоугольный и подобный плану исходного изображения, или оставить его квадратным) ...
... план разбивается на NxM элементов в "сетку" ...
... далее добавляем метериал и указываем в качестве текстуры имедж или мувик исходного изображения ...
... делаем UV развертку ...
... далее работает небольшой скрипт, который корректирует точки меша, при этом UV развертка остается преждней ...
... в итоге получем объект на который натянута исходная картинка или мувик по алгортму описанному по этой ссылке 
http://paulbourke.net/dome/warpplayer/


... вот сам скрипт для blender api 2.65 ...
... он топорный, но суть посмотреть функцию sphere(nx,ny) - которая собственно и выполняет рутину по коррекции меша из прямоугольной формы в сферу ...

Код: python [Выделить]

import bpy
import math
import mathutils


def select(ob):
    bpy.ops.object.select_name(name=ob.name,extend=True)

def join():
    bpy.ops.object.join()

def activate(ob):
    bpy.context.scene.objects.active = ob
   
def make_mesh(name):
    me = bpy.data.meshes.new(name)
    ob = bpy.data.objects.new(name, me)
    bpy.context.scene.objects.link(ob)
    return ob,me

def add_data(ob,verts,edges,faces):
    me = ob.data
    me.name = ob.name +' mesh'
    me.from_pydata(verts,edges,faces)
    me.update()



def fface(ds,verts,nx,ny):
    faces=[]
    for j in range(ny-1):
        for i in range(nx-1):
            n0=(j+0)*nx+(i+0)           
            n1=(j+0)*nx+(i+1)       
            n2=(j+1)*nx+(i+1)           
            n3=(j+1)*nx+(i+0)
           
            v02=verts[n0]-verts[n2]
            v13=verts[n1]-verts[n3]
            print(v02.length)
           
            if(v02.length<ds and v13.length<ds):
                faces.append([n0,n1,n2,n3])
    return faces

def plane(nx,ny):
    verts=[]
    for j in range(ny):
        for i in range(nx):
           
            x=(2*i/(nx-1)-1)
            y=(2*j/(ny-1)-1)
           
            v0=mathutils.Vector((x,y,0.0))
            verts.append(v0)
    return verts


def circle(nx,ny):
    verts=[]
    PID2=3.1415/2
   
    for j in range(ny):
        for i in range(nx):
           
            r=i/(nx-1)+PID2*2
            a=PID2*4*j/(ny-1)
           
            x=r*math.sin(a)
            y=r*math.cos(a)
            v0=mathutils.Vector((x,y,0.0))
            verts.append(v0)
    return verts

def sphere(nx,ny):
    verts=[]
    PID2=3.1415/2
   
    for j in range(ny):
        for i in range(nx):
           
            x=(2*i/(nx-1)-1)
            y=(2*j/(ny-1)-1)


            #theta=2*x*PID2-PID2
            #phi=(y-1)/2*PID2

            theta=2*x*PID2+PID2
            phi=(y-1)/2*PID2
                       
            #theta=PID2+x*PID2
            #phi=y*PID2
           
            x=math.cos(phi)*math.cos(theta)
            y=math.cos(phi)*math.sin(theta)
            z=math.sin(phi)
           
            theta=math.atan2(z,x)
            phi=math.atan2(math.sqrt(x*x+z*z),y)
           
            r=phi/PID2
           
            u=(1+r*math.cos(theta))/2
            v=(1+r*math.sin(theta))/2
           
            v0=mathutils.Vector((u,v,0.0))
            verts.append(v0)
    return verts

def remesh(me,verts):
    for i in range(len(verts)):
        me.vertices[i].co=verts[i]       

def main():

    c=250
    step=2
   
    if step==1:
#        verts=plane(c,c)
#        verts=circle(c,c)
        verts=sphere(c,c)

        faces=fface(1/c*10,verts,c,c)
        edges=[]
           
        ob,me=make_mesh('sp')
        add_data(ob,verts,edges,faces)

        verts=plane(c,c)

        remesh(me,verts)

    else:
        verts=sphere(c,c)   
        for me in bpy.data.meshes:
            remesh(me,verts)
   
main()


« Последнее редактирование: 27 Февраля 2013, 07:18:20 от sungreen »
Для Кота

Оффлайн Илия

  • Житель
Re: изогнуть видео под сферическое зеркало
« Ответ #20 : 01 Марта 2013, 17:38:22 »

... если вопрос про картинки которые опубликованы в сообщении  http://blender-3d.ru/forum/index.php/topic,414.msg4900.html#msg4900 , тогда последовательность для blender следующая ...



Спасибо! С Blender пока ни разу не работал, но задачу выполнить надо. Буду разбираться по Вашему описанию.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: изогнуть видео под сферическое зеркало
« Ответ #21 : 01 Марта 2013, 17:49:23 »
... опиши подробнее, может блендер и не нужен для этой задачи ...
Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: изогнуть видео под сферическое зеркало
« Ответ #22 : 02 Марта 2013, 05:24:11 »
... вот еще один вариант решения ...
... это сделано в Blender через Open Shading Language (OSL) ...
... решение очень простое, локаничное и не требует запуска скрипта ...
... суть - по уже упомянотому здесь алгоритму изложенному Paul Bourke, Ian Hooper, Evan Hallein для Dome projection using a spherical mirror сделать обратное преобразование ...
... то есть не искать положение точки на проекции зеркала, а наоборот, найти цвет соотвествующий данной точки зекрала ...


... еще в этом решении используется всего 1 файс, то есть просто плоскость с натянутой текстурой ...

... вот сам код OSL ...
... в отличие от алгоритма Paul Bourke, в котором (x,y) -> (u,v), здесь делается наоборот  (u,v) -> (x,y)  ...
Код: OSL [Выделить]

#include "stdosl.h"
shader simple(vector Vi = 0, output vector Vo = 0){ 
    float x = Vi[0];
    float y = Vi[1];

    x = (0.5-x)*2;
    if(sqrt(x*x+y*y)>1) Vo = vector(0,0,0);
    else {
        float pu = 2*x;
        float pv = 2*y;
        float pr = sqrt(pu*pu+pv*pv);
        float a = atan2(pv,pu);
        float b = pr*M_PI_2;   
        float py = cos(b);
        float pz = sin(b)*sin(a);
        float px = sin(b)*cos(a);
        float theta = atan2(py,px);
        float phi = atan2(pz,sqrt(px*px+py*py));
        y = phi/M_PI_2+1;
        x = ((theta - M_PI_2)/(M_PI_2*2)+1)/2;
        Vo = vector(x,y,0);
    }
}


... схема использования узлов в материале текстуры ...
... видно, что это самый простой материал c имеджем в качестве источника цвета и одним дополнительным узлом script для коррекции координат ...


« Последнее редактирование: 02 Марта 2013, 06:36:13 от sungreen »
Для Кота

Оффлайн Илия

  • Житель
Re: изогнуть видео под сферическое зеркало
« Ответ #23 : 03 Марта 2013, 00:33:17 »
... опиши подробнее, может блендер и не нужен для этой задачи ...

Ну да, ты вроде правильно всё понял. Спасибо!
 Самое сложное для меня в этой ситуации - то, что программу я скачиваю и вижу впервые в жизни)) Многое, что для вас - само собой разумеется - я не понимаю о чём речь. Но буду разбираться.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: изогнуть видео под сферическое зеркало
« Ответ #24 : 03 Марта 2013, 04:11:55 »
>>скачиваю и вижу впервые в жизни
... вот люди делают плагином через vlc http://www.graphicon.ru/proceedings/2011/conference/gc2011vinogradov.pdf ...
... очевидно же, что для видео контента и демонстрации реалтайм естественно использовать видео инструмент ...
... в blender это сделать можно, но нужно будет тратить время на рендеринг мувика ...

>> Но буду разбираться
... есть исходное видео для демонстрации на куполе? можно попробовать его конвертировать и далее уже смотреть прогодность этого для практического использования ...
Для Кота

Оффлайн Илия

  • Житель
Re: изогнуть видео под сферическое зеркало
« Ответ #25 : 04 Марта 2013, 01:22:35 »
>>скачиваю и вижу впервые в жизни
... вот люди делают плагином через


Они делают преобразование из fish-eye видео, как я понял.

 
... есть исходное видео для демонстрации на куполе? можно попробовать его конвертировать и далее уже смотреть прогодность этого для практического использования ...


у меня есть пример изогнутого видео, сделанного из этого видео
http://rutracker.org/forum/viewtopic.php?t=1418879
http://rutracker.org/forum/viewtopic.php?t=3298655


С Blender я пока туплю: создаю план, создаю маетриал и текстуру с видео - текстура на плане не отоброжается. Делал по урокам, не пойму пока, что делаю не так.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: изогнуть видео под сферическое зеркало
« Ответ #26 : 04 Марта 2013, 14:16:01 »
>>Они делают преобразование из fish-eye видео, как я понял.
... там ключевое слово - плагин, то бишь можно подсунуть vlc видеофильтр который будет делать под сферическое зеркало ...

>>текстура на плане не отоброжается
... лучше скинуть мувик в последовательность картинок Image sequence (например v00001.jpeg, v00002.jpeg, это делае ffmpeg), далее работать на выходе тоже с последовательность картинок ...
... после того как все картинки будут подобраны уже собирать обратно в мувик ...

... !!!важно!!! что OSL работает с Cycles, то бишь и материал нужно делать для Cycles ...

... еще по ходу вопрос, а как быть со швами? ...
http://blender-3d.ru/forum/index.php/topic,414.msg4882.html#msg4882
Для Кота

Оффлайн Илия

  • Житель
Re: изогнуть видео под сферическое зеркало
« Ответ #27 : 04 Марта 2013, 17:21:39 »
... там ключевое слово - плагин, то бишь можно подсунуть vlc видеофильтр который будет делать под сферическое зеркало ...


Т.е. предлагаешь напсиать плагин? Ээто не вариант для меня. Это мой мозг и опыт не потянет))

... лучше скинуть мувик в последовательность картинок Image sequence (например v00001.jpeg, v00002.jpeg, это делае ffmpeg), далее работать на выходе тоже с последовательность картинок ...
... после того как все картинки будут подобраны уже собирать обратно в мувик ...
... !!!важно!!! что OSL работает с Cycles, то бишь и материал нужно делать для Cycles ...


Т.е. разбивать видео и в блендер подсовывать покадрово? А это можно сделать автоматически? Т.е. указал папку и идёт обработка всех изображений в этой папке.
Так дело реализовано в программе-скрипте вот здесь: (но опять же с фишая)
http://www.lochnessproductions.com/software/imgwarper/iww.html

... еще по ходу вопрос, а как быть со швами? ...

Не совсем понял, что со швами. Вот маленький кусочек уже искривлённого видео (с того примера, что я указал в прошлый раз). Видно, что часть  видео сверху и  боков немного подрезано маской, чтобы скрыть края (швы?).
http://vk.com/video2453007_164316381
« Последнее редактирование: 04 Марта 2013, 17:29:08 от Илия »

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: изогнуть видео под сферическое зеркало
« Ответ #28 : 04 Марта 2013, 18:09:34 »
>> А это можно сделать автоматически?
... да, конечно ...
1) создай папку
2) скопируй туда мувик
3) ffmpeg -i мувик video%4d.jpg
(будут созданы имеджи на каждый кадр начиная с video0001.jpg)
4) далее указываешь в blender  для image sequence имя этого первого кадра

>> Т.е. предлагаешь напсиать плагин?
... предлагаю собрать больше информации на эту тему ...
... не хотелось бы придумывать велосипедЪ и городить огородЪ :) ,  возможно что всё уже готово, только нужно поискать ...
... с другой стороны пока неясно что проще освоит blender или написать video filter для vlc ...
... но в blender это работает, проверено, только времени требуется чтобы раскадрить, отрендерить и собрать в один мувик ...

>>Видно, что часть  видео сверху и  боков немного подрезано маской, чтобы скрыть края (швы?)
... понятно, тогда вопрос снимается

... есть какой нибудь срок для реализации задачи? ...
« Последнее редактирование: 04 Марта 2013, 18:14:00 от sungreen »
Для Кота

Оффлайн Илия

  • Житель
Re: изогнуть видео под сферическое зеркало
« Ответ #29 : 05 Марта 2013, 01:18:03 »
... но в blender это работает, проверено, только времени требуется чтобы раскадрить, отрендерить и собрать в один мувик ...
... есть какой нибудь срок для реализации задачи? ...

Задача такая: добиться как можно быстрее. Чтобы со временем делать обучающий контент для школьников - в качестве дополнительного образования, выездная обсерватория показывает научпоп фильмы (не только о космосе). Конкретных сроков не ставили, но всё время напоминают.

Такая технология работает и в той программе-скрипте, что делает видео из фишая: разбить на кадры, отрендерить и снова собрать.
Раскадрить и собрать - несложно в любой монтажке (я работаю в premiere).
Сейчас пытаюсь отрендерить небольшой кусок на основе твоего файла и подробного описания. Большое спасибо. Напишу, какие будут результаты.

 

* По форуму

* Последние вложения

Снимок 1.PNG
Скачано: 0
Автор: atmk
Снимок.PNG
Скачано: 0
Автор: atmk
Screw.jpg
Скачано: 5
Автор: Dmi3ryd
Cylinder_animation.gif
Скачано: 6
Автор: Dmi3ryd
seit1.jpg
Скачано: 9
Автор: sandman