Голосование

Нужны ли "ноды" для POV-Ray?

Да
0 (0%)
Нет
0 (0%)
Не понимаю вопрос
0 (0%)

Проголосовало пользователей: 0

Автор Тема: Povray-3.7: Неофициальный экспортёр  (Прочитано 122938 раз)

Оффлайн LanuHum

  • Житель
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #180 : 22 Июль 2014, 19:48:18 »
Цитировать
Блин, ну не все же сразу?
Да, не всё сразу, но, необходимо, всё-равно, прикинуть направление развития, и, заложить необходимый потенциал, чтоб потом не переделывать всё с самого начала из-за того, что сразу плюнул, решив, что потом.
Всё будет нормально, в общем. :)

Оффлайн LanuHum

  • Житель
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #181 : 22 Июль 2014, 23:11:23 »
В общем, не добился я желаемого, пошёл по доступному пути. Где-то, что-то ни так, но, после работы голова не очень соображает. На выходных нужно сосредоточиться:
Код
            ob=scene.objects.active
            mat=ob.active_material
            povTexName=string_strip_hyphen(bpy.path.clean_name(mat.name))
            color = "pigment {rgbt <%.4g,%.4g,%.4g,0>}"%mat.diffuse_color[:]
            if mat.use_nodes:
                ntree = mat.node_tree
                declareNodes=[]
                if len(ntree.nodes)==0:
                    file.write('#declare %s = texture {%s}\n'%(povTexName,color))
                else:
                    for node in ntree.nodes:
                        povNodeName=string_strip_hyphen(bpy.path.clean_name(node.name))
                        if node.bl_idname == "PovrayImageNode" and node.outputs["Color"].is_linked:
                            declareNodes.append(node.name)
                            if node.image == "":
                                file.write('#declare %s = %s\n'%(povNodeName,color))
                            else:
                                im=bpy.data.images[node.image]
                                if im.filepath and os.path.exists(bpy.path.abspath(im.filepath)):
                                    uv=""
                                    filepath=bpy.path.abspath(im.filepath)
                                    file.write('#declare %s = pigment {%s image_map {\n'%(povNodeName,uv))
                                    file.write('    "%s" map_type %s interpolate %s}}\n'%(filepath,node.map_type,node.interpolate))
                    for i in range(0,len(ntree.nodes)):
                        for node in ntree.nodes:
                            if node.type=='VALTORGB':
                                inShader=0
                                decShader=0
                                for inp in node.inputs:
                                    if inp.name not in {"Pattern","Mapping","Transform","Modifier"} and inp.is_linked: # тут, по-моему, что-то не так!
                                        inShader+=1
                                        for link in ntree.links:
                                            lts=link.to_socket
                                            if lts.node==node and lts.name==str(inShader) and (link.from_node.name in declareNodes):
                                                decShader+=1
                                if inShader == decShader and (node.name not in declareNodes):
                                    declareNodes.append(node.name)
                    print (declareNodes)

Git обновлён.
« Последнее редактирование: 22 Июль 2014, 23:15:37 от LanuHum »

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #182 : 23 Июль 2014, 05:31:11 »
>> Git обновлён.
... а тестовые файлы (сцены) есть? ...
Для Кота

bdancer

  • Гость
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #183 : 23 Июль 2014, 13:11:18 »
Цитировать
Код
if inp.name not in {"Pattern","Mapping","Transform","Modifier"} and inp.is_linked: # тут, по-моему, что-то не так!
node.name (и node.label) может переопределить пользователь, для сравнения надо использовать node.bl_idname либо node.bl_rna.identifier.

Оффлайн LanuHum

  • Житель
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #184 : 23 Июль 2014, 20:09:11 »
>> Git обновлён.
... а тестовые файлы (сцены) есть? ...
Пока нет файлов. Да, и  пока не будет основательно прописан указанный мною код, смысла их создавать нет. Как только я закончу развязку нодов, можно будет тестировать назначение материалов. Тогда я и выложу несколько файлов.

Оффлайн LanuHum

  • Житель
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #185 : 23 Июль 2014, 21:39:54 »
По-моему, можно прошептать "Ура"
Вроде как, добился правильной очерёдности декларации нодов.


[вложение удалено Администратором]

Оффлайн LanuHum

  • Житель
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #186 : 25 Июль 2014, 20:16:07 »
Так. Сейчас я подправил код превью, чтобы работало в Виндовс. Поскольку у меня нету Виндовс, тестить придётся Old Demon.
Нужно скачать последнее обновление с GitHub, а затем создать элементарную схему, используя красным подчёркнутое и отмеченное по образцу на картинке. Очень будет хорошо, если в превью появится такой же чёрно-белый шарик.

Обнаружил проблему (когда ж эти проблемы прекратятся?!)
Если сохранить этот файл, а, затем открыть, то мы увидим, что модифицированный нод ни хрена не сохранился. Блендер не сохраняет внесённые в ноды изменения. Вот тебе и здрасьте!

[вложение удалено Администратором]

bdancer

  • Гость
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #187 : 25 Июль 2014, 20:25:51 »
Цитировать
что модифицированный нод ни хрена не сохранился.
Что значит "модифицированный нод"? Что конкретно не сохраняется?

Оффлайн LanuHum

  • Житель
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #188 : 25 Июль 2014, 20:41:44 »
Цитировать
что модифицированный нод ни хрена не сохранился.
Что значит "модифицированный нод"? Что конкретно не сохраняется?

Это значит, что я беру стандартный нод Color ramp, удаляю ненужные сокеты и добавляю нужные. После перезагрузки файла открывается стандартный нод Color ramp с дефолтным сокетом, а те сокеты, что я добавил оператором, отсутствуют полностью.

Код
            tmap = tree.nodes.new('ShaderNodeValToRGB')
            tmap.label="Pattern"
            for inp in tmap.inputs:
                tmap.inputs.remove(inp)
            for outp in tmap.outputs:
                tmap.outputs.remove(outp)
            pattern = tmap.inputs.new('PovraySocketPattern', "Pattern")
            pattern.hide_value = True
            mapping=tmap.inputs.new('NodeSocketVector', "Mapping")
            mapping.hide_value=True
            transform=tmap.inputs.new('NodeSocketVector', "Transform")
            transform.hide_value=True
            modifier=tmap.inputs.new('NodeSocketVector', "Modifier")
            modifier.hide_value=True
            for i in range(0,2):
                tmap.inputs.new('NodeSocketShader', "%s"%(i+1))
            tmap.outputs.new('NodeSocketShader', "Material")
            tmap.outputs.new('NodeSocketColor', "Color")

bdancer

  • Гость
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #189 : 25 Июль 2014, 21:09:45 »
LanuHum, скорее всего это так и должно быть. Питон АПИ для нод сделано, чтобы создавать свои питоновые ноды, а не модифицировать существующие (которые из C/C++).

Оффлайн LanuHum

  • Житель
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #190 : 25 Июль 2014, 22:11:34 »
LanuHum, скорее всего это так и должно быть. Питон АПИ для нод сделано, чтобы создавать свои питоновые ноды, а не модифицировать существующие (которые из C/C++).
Ну-да, раз так есть, то, значит, так и должно быть, это ж не Lanuhum писал а Прайс, или кто там...
Создаю я свои или пользуюсь штатными нодами, для кого функция remove socket?
Если я пишу свой нод, мне не нужно удалять сокет. А, если я его удалил, то, зачем мне это нужно, если это всего лишь на одну сессию? Глупость, которую не натянуть на голову.
Скажи, как в собственный нод добавить на layout color ramp? Я знаю один только способ: вместе с нодом создавать материал и забирать template с diffuse color ramp, но , это ж геморрой перечёркивающий любой смысл использования нодов
« Последнее редактирование: 25 Июль 2014, 22:15:41 от LanuHum »

Оффлайн LanuHum

  • Житель
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #191 : 27 Июль 2014, 16:22:52 »
Я вообще не понимаю нафига все ноды пихать в одну кучу,если не делаешь визуального программирования ... Если так, то надо просто язык перевести в узлы и все (что проще- язык поврея и переводишь в  инженерную структуру блок-схемы)... о чем я трындю и трындю...
Иначе, фиг его знает, как-то по иному по смыслу разбить, но не делать кучей... в интернале так: ноды матов отдельно, текстур-отдельно... значит, надо и ноды светильников - отдельно и т.д и т.п... ну ты понял, надеюсь... Можно и как в Сусле все до кучи, не вопрос... Но если там еще появятся изоповерхности, со временем, думаю это будет тихий ужос :)
Собственно, я, и перевожу язык в узлы, а о чём ты трындишь и трындишь мне непонятно, но, хотелось бы спросить, ты превью проверил по моей просьбе? Проверка мне нужна была только для написания правильных команд для Винды, которые она должна прочитать  и выполнить. Только это и не больше.
Другой вопрос. :)
Так лучше?

[вложение удалено Администратором]
« Последнее редактирование: 27 Июль 2014, 16:24:50 от LanuHum »

Оффлайн LanuHum

  • Житель
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #192 : 27 Июль 2014, 21:00:20 »
Цитировать
1. Зачем было все ранее написанное "ломать" и переводить на систему "нодов Сусла"?
Чтобы изучить и понять. Сегодняшняя картинка говорит о том, что я уже отказался от системы нодов Сусла

Цитировать
2. Почему нельзя было оставить старый код? и просто добавить кнопку типа {Use Nodes}, как это реализовано в Internal Renderer, и от того "плясать" далее?
Потому что из-за отсутствия документации было неизвестно, как прикрутить к RenderEngine POVRAY ноды материалов.
Только по примерам других экспортёров я мог добиваться использования нодов в своей старой версии, но меня не удовлетворял результат, потому что Graph Editor не видел F-Curve параметров нодов, созданных на базе Custom nodes. Только собственными экспериментами я пришёл к положительному результату, заставив F-Curve появиться там, где они и должны быть

« Последнее редактирование: 27 Июль 2014, 22:21:04 от LanuHum »

Оффлайн LanuHum

  • Житель
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #193 : 27 Июль 2014, 21:32:24 »
Цитировать
3. Концепция прикручивания этих самых узлов , так и не ясна до сих пор: Расшифровываю: Sungreen, писал о механизме преобразования .pov фалов в систему узлов и обратно. Это самый гибкий вариант, на самом деле, но требующий разработки продуманного механизма импорта экспорта в .pov файл. т.е. того самого ядра твоего экспортера. Узлы бы тогда могли писать сами юзеры, и тебе бы это облегчило работу. ...Я тебе писал про различия  в подходе к узлам Суслика  и Интернала (см. пункты 1 и 2) и про то, что бы ты сначала хорошенько все продумал, и  определился со своим подходом ...а решать только тебе, это ж твой экспортер... но... пока какая-то абракадабра...уж извини, если тебя реально волнует моё мнение.

Не знаю, чего вы хотите с Sungreen , и, зачем узлы писать юзерам.
Всё же очень просто. Главное правильно создать узлы. Если я их не создам, то юзеры и подавно. И, никаких повфайлов юзерам не нужно, и импорт из повфайла пусть пишет какой нибудь другой программист. Это очень сложно и ненужно никому! Ни юзеру, ни тебе, ни Sungreen.
У вас какая-то непонятная паника.
Привожу пример. Где-то вы видели пугающий вас файл типа этого:
Код
#declare Texture_3=texture{
    pigment_pattern { agate pigment_map{
    [0 color rgb 0]
    [1 color rgb 1]}
    }
    texture_map {[0 texture{pigment{granite
     pigment_map{[0 color rgb 0]
                                [0.1 pigment{agate pigment_map{[0 color rgb 0][1 color rgb 1]}}]
                            [1 color rgb 1]}}
                                finish{reflection 1 metallic 1}}]
                 [1 texture{pigment{granite
                  pigment_map{[0 pigment{agate pigment_map{
                  [0 color rgb 0]
                  [1 color rgb 1]}
                  }]
    [0.1 pigment{granite pigment_map{[0 color rgb 0]
    [0.1 pigment{agate pigment_map{[0 color rgb 0][1 color rgb 1]}}]
    [1 color rgb 1]}}]
    [0.1 pigment{granite pigment_map{[0 color rgb 0] [0.1 color rgb 0.6]
    [0.1 pigment{granite pigment_map{[0 color rgb 0]
    [0.1 pigment{agate pigment_map{[0 color rgb 0][1 color rgb 1]}}] [1 color rgb 1]}}]}}]}} finish{emission 0.3}}]}
    }

Вся эта абракадабра легко приводится к виду:
Код
#declare Pigment_1=pigment{agate pigment_map{[0 color rgb 0][1 color rgb 1]}}

#declare Pigment_2=pigment{granite pigment_map{[0 color rgb 0] [0.1 {Pigment_1}] [1 color rgb 1]}}

#declare Pigment_3=pigment{granite pigment_map{[0 color rgb 0] [0.1 color rgb 0.6] [0.1 {Pigment_2}]}}

#declare Pigment_4=pigment{granite pigment_map{[0 {Pigment_1}] [0.1 {Pigment_2}] [0.1 {Pigment_3}]}}

#declare Mirror=finish{reflection 1 metallic 1}

#declare Emitter=finish{emission 0.3}

#declare Texture_1=texture{pigment{Pigment_2} finish{Mirror}}

#declare Texture_2=texture{pigment{Pigment_4} finish{Emitter}}

#declare Texture_3=texture{
    pigment_pattern { Pigment_1 }
    texture_map {[0 Texture_1][1 Texture_2]}
    }

Каждая строчка #declare - это узел, при чём абсолютно вписывающийся в один из нескольких правильно написанных узлов:
Это либо image_map, либо pigment_pattern, либо pattern. Это и есть ядро: три несущих нода. Все остальные ноды - это дополнительная информация для основных, они не включаются последовательно, а только присоединяются справа или слева к основным нодам

Оффлайн LanuHum

  • Житель
Re: Povray-3.7: Неофициальный экспортёр
« Ответ #194 : 27 Июль 2014, 21:53:35 »
Самое сложное - создать паттерн
Код
#declare Pattern_1 = texture{ marble texture map
    [0 Texture_1]
    .....................
    [1 Texture_n]}
Именно, для этого мне хотелось, чтобы пользователь мог добавлять любое количество сокетов, которые блендер, как назло сохранять не хочет.
Придётся вязать, как написал Sungreen, обратной связью, чего мне хотелось меньше всего, так как это увеличивает число нодов, и, соответственно, время чтения для выдачи предпросмотра.

 


Яметрика

* По форуму

* Рекламный блок

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

1 (1).png
Скачано: 90
Автор: LEXA ANЭGROWND
blender.png
Скачано: 97
Автор: ipv2007
4.png
Скачано: 127
Автор: hiroyukiss
2.png
Скачано: 146
Автор: hiroyukiss

Скачано: 156
Автор: Dilifa12