powroupi / blender_mmd_tools

mmd_tools is a blender addon for importing Models and Motions of MikuMikuDance.
GNU General Public License v3.0
1.83k stars 277 forks source link

Blender 2.8 will possibly suck #140

Closed Hogarth-MMD closed 5 years ago

Hogarth-MMD commented 6 years ago

Blender 2.8 development builds are here: https://builder.blender.org/download/

There is no beta version of Blender 2.8 yet, so we can't really evaluate it yet.

So what do you think, @powroupi ? Should we just give up on developing mmd_tools , because Blender 2.8 will demolish and waste our efforts?

powroupi commented 6 years ago

As long as someone wants to develop mmd_tools, it will keep going. :smile:

There are some Blender Python API changes, the document is not ready (list of API documents), so currently I just focus on Blender 2.7x versions. :)

I'm not sure if we can manage PMX materials in Blender Eevee Engine, it is going to replace Blender Internal Renderer. If it's not too complicated to update mmd_tools, it is worth to give it a try. :smile:

Hogarth-MMD commented 6 years ago

What about development of mmd_tools material shaders and material morphs? This seems to be the last big task to complete the import and export of PMX and VMD. Are you going to continue this now, or wait until after Blender 2.8 is released?

nathanvasil commented 6 years ago

Prsumably this is about BI? I'm not sure what the issue is. MMD Tools is great for exporting models to .pmx, for importing .pmx models to Blender to render (in BI or in Cycles,) and for other things as well.

Any kind of material issues that can be handled in BI can be handled in Cycles and presumably in Eevee.

Eevee is, to my understanding, a full rasterization renderer with an interface built around the Cycles interface-- not exactly the same, but designed for material compatibility with Cycles. Eevee promises to improve both speed and quality as compared to BI. This is a good thing for those using mmd_tools, not a bad thing.

It's my intention to make a "true" MMD renderer for Cycles or Eevee one of these days. Eevee would be preferable, because there'd be no benefit to raytracing, just a performance cost, but it depends on when I get around to it-- if 2.8 isn't out yet, I'll just do it for Cycles instead and hope that it works okay for Eevee.

Hogarth-MMD commented 6 years ago

So, I guess that we will end up doing MMD material shaders and material morphs in 3 different node editors of 3 different rendering engines: Cycles, Eevee and Blender Internal. (OMG!!) :roll_eyes: :roll_eyes:

(Did I say "we"? Oh well, isn't it so nice that @powroupi is going to volunteer to do this task. Right, @powroupi :smile: @powroupi loves doing this stuff. :smile: )

Hogarth-MMD commented 6 years ago

I have already written some Blender Internal node editor code for toon textures. Maybe @powroupi and @nathanvasil can take this code and amend and perfect it into a complete MMD material shader. Maybe there is some python code, or some technique which can automatically convert Blender Internal material nodes to Cycles material nodes. Maybe the python API for Eevee will have some nice backwards compatibility with Blender Internal. Maybe Blender Internal will be available as an add-on in Blender 2.8. And this is the best sunny optimism which I am able to think of. :smiley:

Hogarth-MMD commented 6 years ago

Cycles can use OSL shaders, but OSL is not a real-time shader language, and Cycles renders slowly. HLSL (which is used bt MME) is a real-time shader language which renders quickly. If Eevee is supposed to be a fast and real-time version of Cycles, then will that possibly bring us closer to being able to port HLSL shaders into Blender?

nathanvasil commented 6 years ago

My understanding of Eevee (which could be very flawed) is that it is a rasterizer (as opposed to a raytracer) that relies on the creation of lightprobes (environment maps, it's all the same thing) to emulate raytracing capabilities. I'm not sure that OSL has anything to do with it. It shouldn't be seen as a version of Cycles, because the underlying tech is very different, but efforts have been made to share data between the renderers to make things easier, so at a certain level of use and development, interfaces should be very similar.

I don't think you'll ever be able to just grab a MMD effect and drop it into Blender. Things like OGL vs DX make that unlikely. For example, there's no way to know if some particular float4 in an HLSL shader should be converted to OGL's left-handed coordinate system (maybe it's a translation, maybe it's a color?), not without AI far past what we currently got :) However, it should make it a little easier to translate an effect if that's what you want. Mostly, because Eevee will be using a more similar philosophy to HLSL game engine shaders.

Note that you absolutely can, already, create any HLSL effect in Blender using nodes. It's kind of stupid, because to make the HLSL effects means losing out on a lot of cool things Blender does (you're basically simulating rasterization in a raytracer.) And it's hard work, requires understanding both HLSL and Blender to a high level. All that, just to run a slow HLSL effect that you might as well run in MMD :)

Cyces nodes aren't that hard to figure out if you take a look. If you wanted to, you could quite easily convert BI materials into a principled-node-based material, automatically, without much work, and I'd be surprised if nobody has already done that. Will it be exactly the same? No, they're different renderers, you'd have to make some aesthetic judgments. But trying to recreate BI in Cycles doesn't make much sense, because you're losing out on a lot of things it can do. You'd be much better off learning how to make good Cycles materials-- it's even a lot of fun!

Hogarth-MMD commented 6 years ago

OMG, I just had a horrible thought! What if there is no default cube or Suzanne the monkey in Blender 2.8? :worried:

Takuyax commented 6 years ago

This issue seem rather uninformed. Was that assumption based on an old pre-alpha dev build?

Eevee uses Cycles material nodes, so most likely few changes are required on mmd tools side, since it already supports these nodes. The only difference i'm aware of, is that Eevee requires blend modes to be set per material for alpha transparency to work. And the Eevee sun lamp requires a few extra parameters.

The MMD tools menus will need a new home since the tool tabs are gone. Pablo Vasquez (blender core developer, UI designer) said in one of his "Blender Today" videos, that the developers are considering to allow add-ons to define their own editors, which if really implemented would give the add-on much more space than the 2.79 tools panel. Although that design choice is not final yet, the developers know that new space for add-on menus is mandatory.

Besides a few python API changes, the switch to the new collections, instead of null objects and groups, will probably be the main concern. Data types and data structures stay the same though. You can set up a model, camera and motions up in 2.79, configure cycles materials, and load the project in 2.8. Set the Eevee blend modes for transparent materials and start rendering with correct results.

Darkblader24 commented 6 years ago

@Takuyax mmd_tools won't need a new home. I tested it with the latest beta build and the old tool bar simply appears again when enabling the addon.

Hogarth-MMD commented 6 years ago

Thanks for the info @Takuyax . If Eevee and Cycles are using the same material nodes, that will be a big time-saver in programming mmd_tools. Blender 2.8 has not yet reached the stage of beta testing, has it?

Takuyax commented 6 years ago

@Darkblader24 Oh, you're right, it really shows up fine in 2.8.

@Hogarth-MMD The 2.8 code quest ends this week. Beta status is supposed to be reached in July or August if I remember correctly, though there is no fixed date yet as far as I know.

Takuyax commented 6 years ago

Currently the blender developers plan to freeze the python API on September 19: https://code.blender.org/2018/06/beyond-the-code-quest/ Before that, they don't recommend porting add-ons, since the API will still change.

Hogarth-MMD commented 5 years ago

https://en.blender.org/index.php/Dev:2.8/Source/Python

There is no available Blender 2.8 Python API available for download is there? I did a Google search and I found the link above, but no API.

Hogarth-MMD commented 5 years ago

There is no beta version of Blender 2.8 yet, as far as I can tell(?). No Blender 2.8 beta and no Blender 2.8 Python API, but the resourceful @powroupi is already making commits updating mmd_tools for Blender 2.8.

Hogarth-MMD commented 5 years ago

Blender 2.8 has a compatibility mode for Blender 2.79. So if I leave mmd_tools_helper add-on exactly as it is now, with no updating for Blender 2.8, will people be able to use it okay in the Blender 2.79 compatibility mode of Blender 2.8?

Takuyax commented 5 years ago

@Hogarth-MMD The WIP API docs are here: https://docs.blender.org/api/blender2.8/ As far as I know Bastien Montagne is the developer handling anything python API related in 2.8. You can see his weekly updates here: https://wiki.blender.org/wiki/User:Mont29/Foundation/2018#Week_268_-_10.2F27_to_11.2F02

Hogarth-MMD commented 5 years ago

Thank you for the link @Takuyax . :+1: It seems to me that whoever is programming the changes to the Blender 2.8 Python API has a strong obligation to write a python script which will update all scripts and add-ons automatically for Blender 2.8. If there is no Blender 2.8 automatic updating python script, then there should be a mass protest against this situation. Blender 2.8 breaking all add-ons would be a completely unacceptable imposition on people's time. I am not going to waste my precious time trying to manually update mmd_tools_helper for Blender 2.8. I am going to wait for someone to supply a Blender 2.8 automatic updating python script for add-ons.

Takuyax commented 5 years ago

@Hogarth-MMD You seem pretty aggressive about API changes lately. Your earlier complaint toward powroupi about the mmd_tools API seemed unnecessarily aggressive, even after powroupi explained that he had to change it to fix a naming conflict. He didn't do this out of malicious intent. The same way Blender 2.8 API changes are not made for malicious reasons. They need to make a lot of changes due to the new features it has. Multi object editing probably requires many changes, the new OpenGL version caused lots of changes. The new collections systems replaced layers and object groups, which were integrated deeply into the software, so it probably required more API changes than I can imagine. They probably took that opportunity to clean up a lot of legacy API functions too.

The most widely accepted philosophy with FLOSS development, is that developers don't have any obligation. In this case they already provide a 3D software suite for free, that would set you back a minimum of $5000 if it were owned by Autodesk. Even then, Blender Foundation developers are more likely to listen to you than Autodesk developers. If you have any good ideas you can post them on Right-Click Select, which is read by the core developers and allows people to vote on features they're interested in: https://blender.community/c/rightclickselect/

Automatic script updating would probably be much too complicated with the changes they made, since they didn't just rename functions, but made fundamental design changes. At the moment your best chance to upgrade your scripts, is to go over the change log and update the API calls according to it: https://docs.blender.org/api/blender2.8/change_log.html

Hogarth-MMD commented 5 years ago

This is what got me all riled up about Blender add-ons being broken: @nagadomi wrote: Anyway, blender 2.8 will break all addons. :cry:

Yes, here I am, sword in hand, and vowing to wreak havoc on these savage demons who are causing the tears of my my programming brother @nagadomi to be shed, and who are causing the tears of my fellow add-ons makers to be shed. LOL :smile: :smile: :smile:

sword guy render

When I posted my previous comment, that was actually the first time that I realized that maybe there will be a Blender 2.8 automatic updating script for add-ons. After thinking about it, it really seems to me that most likely there WILL be a Blender 2.8 automatic updating script for add-ons. The Blender developers need to have such a script just for development and testing purposes don't they? @powroupi is a highly clever programmer. Probably even someone who is not a Blender developer, like @powroupi could make such a script. I don't see anything here that couldn't be scripted: https://en.blender.org/index.php/Dev:2.8/Source/Python