Автор Тема: Небходима помощь по написанию экспрта в свой формат на языке Python.  (Прочитано 24615 раз)

Оффлайн LanuHum

  • Житель
Игровые движки давно уже считают скелетную анимацию и производители видюх активно продвигают физические ускорители типа PhysX (Nvidia). Это всё считается не процом... Ты ж пойми, что это реалтайм :)  Тебе надо хотя бы в Half-Life  2 (2004 г.) погонять  https://ru.wikipedia.org/wiki/Half-Life_2
или посмотреть видео...
https://youtu.be/Ka7ObnyGfnM
сейчас игры гораздо круче...

Можешь скачать этот движок https://ru.wikipedia.org/wiki/Unreal_Engine
https://www.unrealengine.com/unreal-engine-4
Он с недавнего времени бесплатен, пока ты не занимаешься коммерческой деятельностью на нём...
Цитировать
Текущая политика лицензирования: Unreal Engine 4
2 марта 2015 года Unreal Engine 4 стал бесплатным. Однако, разработчики игр, как и прежде, должны передавать 5 % от прибыли игры компании Epic Games, но при условии, что доходы игры составляют более $3000 за квартал.
Видео https://youtu.be/JA5VlncAr74
Вот, не хочется мне всего этого знать. Стар я. Я ужасно злюсь, когда не понимаю чужой код, а тут такое...nvidia..
Вообще, интересно, как производители железа берут потихоньку власть в свои руки...бестии...
Интересно в плане: чем же ж всё закончится...или...не интересно...
Странно были разрисованы питерские маршрутки: В КАЖДОМ ИЗ НАС ЖИВУТ ДВОЕ...это ломало моё представление о мире, разбивало его в пух и прах...

Оффлайн Samovar

  • Житель

Цитировать
... по ходу для разработки под него нужно хорошее железо, а вот unity3d по сравнению с ним шустрик ...
Да как угодно :) Это просто, как пример возможностей реалтаймового виза и физики... BGE не плох и B4W... смотря под какие задачи... Я последние лет 10 вообще в 3D-игры не особо... Если и играюсь нечасто, то в 2D или в 2,5D казуалки... Одна из любимых "Don't Starve"
Цитировать
Вообще, интересно, как производители железа берут потихоньку власть в свои руки...бестии...
Угу :) https://youtu.be/xjsCdwHSIzw Несчастная баба :)


Оффлайн LanuHum

  • Житель

Цитировать
... по ходу для разработки под него нужно хорошее железо, а вот unity3d по сравнению с ним шустрик ...
Да как угодно :) Это просто, как пример возможностей реалтаймового виза и физики... BGE не плох и B4W... смотря под какие задачи... Я последние лет 10 вообще в 3D-игры не особо... Если и играюсь нечасто, то в 2D или в 2,5D казуалки... Одна из любимых "Don't Starve"
Двойственное, во что я играл - это ши сен сё и break out...
Ши сен сё - самая крутая игра с настройками по умолчанию... и не надо запрашивать усложнения в настройках...

Оффлайн Samovar

  • Житель
В Маджонг как-то не доводилось... вторая знакома ) Первым делом воплощались настольные игры, типа шахмат, шашек, рэндзю... но и дофига нового появилось... люблю стратегии и квесты с нелинейным сценарием...
А вообще - это моя первая домашняя видеоигра в детстве ( или аналогичная, точно уже не помню) :)

Оффлайн LanuHum

  • Житель
В Маджонг как-то не доводилось... вторая знакома ) Первым делом воплощались настольные игры, типа шахмат, шашек, рэндзю... но и дофига нового появилось... люблю стратегии и квесты с нелинейным сценарием...
А вообще - это моя первая домашняя видеоигра в детстве ( или аналогичная, точно уже не помню) :)

Блин, опять мы с тобой во флудеры записываемся. Лет 12 назад жил в Купчино, а к хозяйке квартиры приехала сестра с мальчонкой лет десяти с Украины. У меня тогда стояла винда. Мальчонке я купил Х, по-моему, оно так называлось. Он просыпался раньше меня, до шести ноль ноль, чтобы просить меня попасть в мою комнату и поиграть, а когда я возвращался с работы, он рассказывал мне, в каких галактиках он побывал. У него отчёт был на листке бумаги. "Дядь Лёнь, дядь Лёнь, глянь, я уже почти дома..." Там из-за сбоя в работе двигателя космический корабль оказывался на неизвестной территории вселенной со сломанным оборудованием. Экипаж должен был торговать, приобретая оружие, имея оружие должен был сопровождать за деньги, защищая от пиратов просящих защиты, и, не знаю как должен был найти наш Млечный Путь, чтобы вернуться домой.
По сей день эту игру считаю единственно достойной внимания. Но, перед игрой нужно пройти тест проведения корабля через какие-то там кольца. Мальчонка проходил, я врезался в третье-четвёртое кольцо...а колец было не меньше десятка...

Оффлайн Bulbash

  • Житель
Разобрался! Все оказалась вовсе не сложно вот ссылка на англоязычный форум с вопросом про индексы:
http://blender.stackexchange.com/questions/3637/get-indices-of-vertices-of-triangulated-faces-in-python
Я также столкнулся с проблемой что в Blender существует два типа полинона квадратный и треугольный, в DX11 насколько я знаю использутся только треугольный, решилось все очень просто :
http://blender3d.org.ua/forum/modeling/151.html

Оффлайн LanuHum

  • Житель
решилось все очень просто :
Это решение ни всегда может помочь. Там же мы когда-то об этом беседовали. Четырехугольник можно разрезать двумя вариантами. На изгибах будет видно, правильно разрезалось или нет.

Оффлайн LanuHum

  • Житель
Опять же таки при экспорте нет необходимости портить свой меш, превращая четырехугольники в треугольники.
Пишем функцию:
Код
def mesh_triangulate(me):
    import bmesh
    bm = bmesh.new()
    bm.from_mesh(me)
    bmesh.ops.triangulate(bm, faces=bm.faces)
    bm.to_mesh(me)
    bm.free()
Затем используем её по назначению:
Код
     me = ob.to_mesh(scene, True, 'RENDER',calc_tessface=True)
     mesh_triangulate(me)
И, не забываем после экспорта объекта удалить me
Код
bpy.data.meshes.remove(me)


Оффлайн Bulbash

  • Житель
Очередная проблема... Захотел реализовать код предоставленный LanuHum выше. Объявил функцию и попробовал ее использовать. Указывает в место, куда я ее вставляю и пишет "name mesh_triangulate is not defined" : я понимаю что он указывает мне что я не определил ее но тем не менее она определена строкой выше. Если верить всем статьям которые я прочитал про питон, синтаксис правильный. Подскажите, в чем беда?

Оффлайн LanuHum

  • Житель
Очередная проблема... Захотел реализовать код предоставленный LanuHum выше. Объявил функцию и попробовал ее использовать. Указывает в место, куда я ее вставляю и пишет "name mesh_triangulate is not defined" : я понимаю что он указывает мне что я не определил ее но тем не менее она определена строкой выше. Если верить всем статьям которые я прочитал про питон, синтаксис правильный. Подскажите, в чем беда?
Ну, а текст кода где? Как ошибку искать-то?

Оффлайн Bulbash

  • Житель
Извините, не подумал вот :

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
...
def mesh_triangulate(self,me):
...
self.mesh_triangulate(mesh)
...

либо выносить определение mesh_triangulate вне класса
Для Кота

Оффлайн LanuHum

  • Житель
Извините, не подумал вот :
Нужно вынести функцию за пределы класса:
Код
import bmesh


def mesh_triangulate(me):
   bm = bmesh.new()
   bm.from_mesh(me)
   bmesh.ops.triangulate(bm, faces=bm.faces)
   bm.to_mesh(me)
   bm.free()

class KfoExport(bpy.types.Operator):

Оффлайн Bulbash

  • Житель
Спасибо sungreen, все работает!

Оффлайн LanuHum

  • Житель
Спасибо sungreen, все работает!
Ну, если тебе всё же хочется, чтобы после экспорта сетка оригинала состояла из треугольников, то нормально, но, я всё же писал бы так:
Код
        File = open(self.filepath + ".kfo", 'wb')
         
        meshesCout  = len(bpy.data.meshes)# тут я узнаю сколько у меня мэшей
         
        File.write(np.int32(meshesCout)) # сохраняю количество мэшей

        for ob in bpy.data.objects:
            if ob.type == 'MESH':
                mesh = ob.to_mesh(scene, True, 'RENDER',calc_tessface=False)
                mesh_triangulate(mesh)

                File.write(np.int32(len(mesh.vertices)))
                for vert in mesh.vertices:
                    File.write(np.float32(vert.co.x)) # Х кордината вертекса
                    File.write(np.float32(vert.co.y)) # Y кордината вертекса
                    File.write(np.float32(vert.co.z)) # Z кордината вертекса
                    File.write(np.float32(0)) # значение падинг для уравнения в передачи вшейдер
                    File.write(np.float32(0)) # X кордината текстуры
                    File.write(np.float32(0)) # Y кордината текстуры
                    File.write(np.float32(0)) # X кордината нормали
                    File.write(np.float32(0)) # Y кордината нормали
                    File.write(np.float32(0)) # Z кордината нормали
                    File.write(np.float32(0)) # X кордината тангента
                    File.write(np.float32(0)) # Y кордината тангента
                    File.write(np.float32(0)) # Z кордината тангента

                size = len(mesh.polygons) * 3
                File.write(np.int32(size))
                for face in mesh.polygons:
                    File.write(np.int32(face.vertices[2]))
                    File.write(np.int32(face.vertices[1]))
                    File.write(np.int32(face.vertices[0]))
                bpy.data.meshes.remove(mesh)
        File.close()
При такой записи после экспорта твой меш останется таким, каким и был до экспорта, ты можешь дальше продолжать над ним работать...

 


Яметрика

* По форуму

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

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

1 (1).png
Скачано: 64
Автор: LEXA ANЭGROWND
blender.png
Скачано: 74
Автор: ipv2007
4.png
Скачано: 96
Автор: hiroyukiss
2.png
Скачано: 119
Автор: hiroyukiss

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