Jump to content

Somewhere to put any knowledge learned about using the .mu plugin.


Recommended Posts

@ColdJ Appears it's loading but it still doesn't show.

 

In the log:

[LOG 18:25:03.016] Load MU model: Yezcorp/Buildings/Servicetower/MST37
[LOG 18:25:03.029] [Shabby] custom shader: KSP/Diffuse
[LOG 18:25:03.029] [Shabby] custom shader: KSP/Diffuse

the CFG:

 

// Generated by Kerbal Konstructs

STATIC
{
   Snip
}

 

I have literally zero idea what to do. it's so frustrating as i feel that i have tried all that i can over the course of the last few days.

Edited by CollectingSP
Snip
Link to comment
Share on other sites

@ColdJ

Update.

Was able to get it into the game successfully, however some of the model's textures appear to not be applied to the surface of the model. Could this related to UV mapping? I can send it all over through PM.

Thanks!
 

(Pictures snipped as to not give away what I’m developing)

Edited by CollectingSP
Snip
Link to comment
Share on other sites

  • 1 month later...

Thank you, @ColdJ, this thread is a lifesaver. I wish I had read it before I got a strong urge to hit my head with a keyboard, rip it off and throw it out of the window (my head, not a keyboard) while learning things the hard way.

Things like this wouldn't be possible without this thread

QOWTfjC.png

N6vqFJ5.pngI'm still running into symmetry issues, KSP just hates mirror symmetry when it is forced to actually mirror parts and not just flip them upside down. So when KSP mirrors a part without flipping it upside down, transforms get flipped

 

DyeAPsK.png

poNO0Nk.png

Link to comment
Share on other sites

10 hours ago, Manul said:

issues, KSP just hates mirror symmetry when it is forced to actually mirror parts and not just flip them upside down. So when KSP mirrors a part without flipping it upside down, transforms get flipped

That is why I prefer to make a right and a left when it comes to landing gear. You can actually build just one side in the 3D modeling program, even animate it, then as long as you follow the practice of having 2 empties at the top of your heirachy, mirror the second empty in and there you have your other landing gear.

Is that model all your own work? What is it that you are building?

Link to comment
Share on other sites

2 hours ago, ColdJ said:

Is that model all your own work? What is it that you are building?

I "borrowed" a canopy and some textures from NMB F22, everything else (except for wheel mesh and texture) is made by me.  It was supposed to be something like the F/A XX concept but ended up looking like a consequence of R34 between Raptor and Dassault Rafale (and maybe some random JAS 39 Gripen passing by)

Link to comment
Share on other sites

Posted (edited)

A heads up to people with .blend files from the 2.79 era (as I have - many!)!

By some reason, opening a 2.79 .blend file on Blender > 2.8 will make the lights 10 times stronger than they should - everything will be washed out on IVAs. By importing the mu files again on Blender > 2.8, things will be fine - the problem only manifests itself by opening .blend files that had imported a mu file on the 2.79 era.

It's probably some  stupid configuration I need to do somewhere on 2.8 after loading the older blend file, but I'm still struggling to find it.

My work around is to just set the light intensity to 10% of the original - i.e., if the light had a 250W intensity, I set it to 25W.

P.S.: Remember to set the Scene Property's Units to Metric too! This will allow you to use Watts on light's intensity.

Edited by Lisias
Link to comment
Share on other sites

There's a somewhat interesting discussion about how to build IVAs using Blender and the mu plugin here:

I think we should move the discussion here. Until there, may I suggest @ColdJ to take a look on that post and comment here what you think?

Link to comment
Share on other sites

Posted (edited)
On 6/11/2024 at 12:40 PM, Lisias said:

I think we should move the discussion here. Until there, may I suggest @ColdJ to take a look on that post and comment here what you think?

Unless I am misunderstanding your posts on that thread (and that is always possible) you seem to be going about things the hard way.

You want multiple seats in an internal.

Once you have your basic container/cockpit/cabin etc set up, import in an internal that has a seat already set up in it. You want to do this even if you intend to build your own seat because the distance of the relationships between the seat and the "EMPTY" that is the transform point for it, is already set up. Also the orientation of the "EMPTY" is correct for that seat, as is the distance and orientation of the camera. Remove everything but the seat mesh, seat transform empty and the camera. Highlight all three in the heirachy then while holding down SHIFT, left click and hold one of the highlighted and drag the selection over the named empty that contains all your internal meshes in it. Then also hold down ALT before releasing the mouse button to drop the selection inside your empty. Holding ALT before release makes sure that the orientation you are seeing stays the same. Once done, highlight the top most empty of your heirachy and then use "Clear inverse" button found inside the "Mu Heirachy" button to make sure they are now aligned with your heirachy.

If you plan to keep this model for your seat, first go into "Edit Mode" while the seat model is highlighted and then use "Merge by distance" to remove the excess vertices that get created for Unity ( they will get recreated on export but if you are working on a mesh you don't want them in there and they can get doubled up on export). Then go back to the main work space and go into "Material Properties" and change the material property to the one used by your internal. (This will cut down on the number of texture pics you need.) Then go into "UV Editing" and use "UV" to pick a remap option ( I prefer to use an orthagonal view and "Project from View" myself) to simplify mapping textures. Remember you can highlight groups of vertices at a time so that you can move them around separately on the UV texture pic. You now have a seat set up and can duplicate it to make more.

If you are making your own seat, build it in "Edit Mode" and overlay it over the imported seat so that your seat and seat back are in the correct places to look correct when the game projects a Kerbal on it based on the "Seat Transform Empty".

Once this is all done, highlight the 3 crucial pieces , the seat mesh, seat transform empty and camera, then use the move option to give you the 3 coloured arrows. Use them to drag the 3 pieces to where you want the seat to be.

(It has come to my attention that unless you want a custom camera angle, you can forgo the camera, in the model and config, and the module will assign a default.)

While all 3 are still highlighted, use the "Duplicate Objects" option to create more. Drag the 3 new pieces together to where you want your next seat to go. Then go in and rename them with a new end number, so "Seat1.001" becomes "Seat2" etc (This is important, if you don't do this then the module that assigns the Kerbal in the internal config will get confused.)

Repeat this process for any more seats you want e.g Seat3, Seat4, etc.

If you are wanting to rotate the seat for other location etc then pop all three inside their own empty using the methods we used before so that you can move all three pieces easily and maintain their relations to each other.

Once done, export the .mu and open your config file. Then just duplicate the seat module and remame the end number for each seat you added. Here is an example from one of mine. As long as the transform name matches what you named in the model it works fine. If you are dealing with planes/cars/boats where they don't need helmets then " allowCrewHelmet = false"

    MODULE
    {
        name = InternalSeat
        seatTransformName = pilotSeat_01
        portraitCameraName = pilotCamera_01 //(You can leave this out if you are happy with the default camera)
        allowCrewHelmet = true
        kerbalEyeOffset = 0.0, 0.04, 0.0
    }
    MODULE
    {
        name = InternalSeat
        seatTransformName = pilotSeat_02
        portraitCameraName = pilotCamera_02
        allowCrewHelmet = true
        kerbalEyeOffset = 0.0, 0.04, 0.0
    }

    MODULE
    {
        name = InternalSeat
        seatTransformName = pilotSeat_03
        portraitCameraName = pilotCamera_03
        allowCrewHelmet = true
        kerbalEyeOffset = 0.0, 0.04, 0.0
    }

Hope that covers it. Once you have done it the first time it will become easy. If you are happy with your seat then anytime you make a new internal you can just import them from your other work and adjust to your new set up.

Edited by ColdJ
Link to comment
Share on other sites

3 hours ago, ColdJ said:

Unless I am misunderstanding your posts on that thread (and that is always possible) you seem to be going about things the hard way.

You want multiple seats in an internal.

Once you have your basic container/cockpit/cabin etc set up, import in an internal that has a seat already set up in it. You want to do this even if you intend to build your own seat because the distance of the relationships between the seat and the "EMPTY" that is the transform point for it, is already set up. Also the orientation of the "EMPTY" is correct for that seat, as is the distance and orientation of the camera. Remove everything but the seat mesh, seat transform empty and the camera. Highlight all three in the heirachy then while holding down SHIFT, left click and hold one of the highlighted and drag the selection over the named empty that contains all your internal meshes in it. Then also hold down ALT before releasing the mouse button to drop the selection inside your empty. Holding ALT before release makes sure that the orientation you are seeing stays the same. Once done, highlight the top most empty of your heirachy and then use "Clear inverse" button found inside the "Mu Heirachy" button to make sure they are now aligned with your heirachy.

If you plan to keep this model for your seat, first go into "Edit Mode" while the seat model is highlighted and then use "Merge by distance" to remove the excess vertices that get created for Unity ( they will get recreated on export but if you are working on a mesh you don't want them in there and they can get doubled up on export). Then go back to the main work space and go into "Material Properties" and change the material property to the one used by your internal. (This will cut down on the number of texture pics you need.) Then go into "UV Editing" and use "UV" to pick a remap option ( I prefer to use an orthagonal view and "Project from View" myself) to simplify mapping textures. Remember you can highlight groups of vertices at a time so that you can move them around separately on the UV texture pic. You now have a seat set up and can duplicate it to make more.

If you are making your own seat, build it in "Edit Mode" and overlay it over the imported seat so that your seat and seat back are in the correct places to look correct when the game projects a Kerbal on it based on the "Seat Transform Empty".

Once this is all done, highlight the 3 crucial pieces , the seat mesh, seat transform empty and camera, then use the move option to give you the 3 coloured arrows. Use them to drag the 3 pieces to where you want the seat to be.

While all 3 are still highlighted, use the "Duplicate Objects" option to create more. Drag the 3 new pieces together to where you want your next seat to go. Then go in and rename them with a new end number, so "Seat1.001" becomes "Seat2" etc (This is important, if you don't do this then the module that assigns the Kerbal in the internal config will get confused.)

Repeat this process for any more seats you want e.g Seat3, Seat4, etc.

If you are wanting to rotate the seat for other location etc then pop all three inside their own empty using the methods we used before so that you can move all three pieces easily and maintain their relations to each other.

Once done, export the .mu and open your config file. Then just duplicate the seat module and remame the end number for each seat you added. Here is an example from one of mine. As long as the transform name matches what you named in the model it works fine. If you are dealing with planes/cars/boats where they don't need helmets then " allowCrewHelmet = false"

    MODULE
    {
        name = InternalSeat
        seatTransformName = pilotSeat_01
        portraitCameraName = pilotCamera_01
        allowCrewHelmet = true
        kerbalEyeOffset = 0.0, 0.04, 0.0
    }
    MODULE
    {
        name = InternalSeat
        seatTransformName = pilotSeat_02
        portraitCameraName = pilotCamera_02
        allowCrewHelmet = true
        kerbalEyeOffset = 0.0, 0.04, 0.0
    }

    MODULE
    {
        name = InternalSeat
        seatTransformName = pilotSeat_03
        portraitCameraName = pilotCamera_03
        allowCrewHelmet = true
        kerbalEyeOffset = 0.0, 0.04, 0.0
    }

Hope that covers it. Once you have done it the first time it will become easy. If you are happy with your seat then anytime you make a new internal you can just import them from your other work and adjust to your new set up.

Oh god this is so much more complicated than necessary.  You can put the seat module IN the seat prop (either in the prop cfg or in the prop placement).  Then it just goes wherever the prop does.

Link to comment
Share on other sites

6 minutes ago, JonnyOThan said:

Oh god this is so much more complicated than necessary.  You can put the seat module IN the seat prop (either in the prop cfg or in the prop placement).  Then it just goes wherever the prop does.

 

4 hours ago, ColdJ said:

If you are wanting to rotate the seat for other location etc then pop all three inside their own empty using the methods we used before so that you can move all three pieces easily and maintain their relations to each other.

Hi, I know your a whiz at making complex internals, but please remember this is written for people just starting out who need to understand how things work and interact.

The "Seat Module" is only in the config file and requires the named empties used as transforms in the internal model.mu in order to work. I don't know how it works in the mods you use to create props but in stock if you don't have the transforms in the model then every seat module you add will put every Kerbal in the exact same spot as the original transform and put their orientation the wrong way around.

If you want to put in a comprehesive tutorial using the methods you know, then feel free to add one. But please don't write a simple comment that will confuse people who are new to this.

Been working with stock a long time and once you set up the initial work it is extremely simple to add seats in a very short time, without having to work out the co-ordinates and rotation of evey new seat you add.

Link to comment
Share on other sites

3 hours ago, ColdJ said:

The "Seat Module" is only in the config file and requires the named empties used as transforms in the internal model.mu in order to work

No, it doesn’t.  It can use transforms from the prop model or just the origin of the prop.

Heres a synthesized version of a stock seat prop showing one of the techniques: https://github.com/FirstPersonKSP/FreeIva/blob/7483fe7ed01a4607c4a000d674f8b053ebb85c33/GameData/FreeIva/Props/Seat_Passenger.cfg#L16

Edited by JonnyOThan
Link to comment
Share on other sites

2 hours ago, JonnyOThan said:

No, it doesn’t.  It can use transforms from the prop model or just the origin of the prop.

Where did you find the documentation for it? I looked in every IVA on Stock + DLC and none use it. I'm hunting down 3rd parties, but until the moment, your repo is the only one I found using it and I assumed it was a custom module, as the INTERNAL I found in your repo was using a custom InternalModule.

Spoiler

I want to bring to your attention that, unless you had hijacked an email account and username and so it's a different person I thinking you are, your employer is currently suing people using Reverse Engineering as offense - and it's winning. The lawsuit grounds, unless it's reverted on the appeal, will poison the tree on every knowledge acquired by using Reverse Engineering.

So, even by you being right (and you probably is, why in Kraken's name you would make up something like this?), it's convenient (to say the least) to have additional evidences from 3rd parties to rely on, as I'm afraid relying only on you is a liability for now.

(Obviously, if that court decision is reverted, we can revisit the issue).

 

Link to comment
Share on other sites

4 hours ago, JonnyOThan said:

No, it doesn’t.  It can use transforms from the prop model or just the origin of the prop.

The link is to MM patch that calls on the mod Free IVA.

Please show me how an unmodded game can use this to place multiple seats with Kerbals in each one when the stock prop for "Seat_Passenger" is just a mesh with no transforms included (I just imported it into Blender to make sure) The patch also does not give co-ordinate or rotational data to say where the prop should be placed within the internal model. Also it has the transform as "model" and even if you could use the mesh as a transform by placing it's origin point as being just right place so that the Kerbal comes out looking like it was in the right place, The mesh is called "Seat_Passenger" in the model so the "seatTransformName = model" is not actually pointing to anything.

Please put a stock internal config here for a completely vanilla game with a model/prop setup in it that works for a stock game to do what you say and I will apply it to one of my configs to see the result in game.

If you can do that then I will accept and say it is possible.

This thread is for people to create their own works without having to add other mods to do it. That way their works can be used in any moddern version of KSP without having to bundle or make other mods dependencies.

Link to comment
Share on other sites

48 minutes ago, ColdJ said:

The link is to MM patch that calls on the mod Free IVA.

No, it doesn’t use any modded code. This patch just clones one of the stock props and adds a seat module. Then you can place that seat in your internals and they all get modules in the right spot.

it is *also* possible to place the seat module directly in the prop placement inside the INTERNAL node, which allows it to use transforms from the seat prop model without having to worry about duplicating or aligning transforms in the internal model.

Edited by JonnyOThan
Link to comment
Share on other sites

22 hours ago, ColdJ said:

The "Seat Module" is only in the config file and requires the named empties used as transforms in the internal model.mu in order to work.

ALCOR seatV2 and Vulkan's fighter seat have their own seat transforms and they work just fine when I use them in a Seat Module instead of the original seat transform like this

Quote

INTERNAL
{
    name = JCockpit3
    MODULE
    {
        name = InternalSeat
        seatTransformName = KerbalTransform  //pilot_left
        allowCrewHelmet = false
    }
    MODULE
    {
        name = InternalSeat
        seatTransformName = pilot_right
        allowCrewHelmet = false
    }

The downside is that it works for only one seat due to the lack of unique transform names, so co-pilots's or engineer's seats should be separate mu models with their transforms named differently.

Link to comment
Share on other sites

Talking about unique transform names, this is what I've learned: multiple thrust or gimbal transforms with the same name work as intended within one engine/gimbal module, no idea about intake transforms (idk how to test it, maybe by occluding one of transforms) and control surface transforms don't work at all, only the first of them is moving

Link to comment
Share on other sites

Posted (edited)
On 6/12/2024 at 4:53 PM, Manul said:

The downside is that it works for only one seat due to the lack of unique transform names, so co-pilots's or engineer's seats should be separate mu models with their transforms named differently.

Exactly, each kerbal seat requires it's own unique transform name, otherwise the kerbals just stack on the original transform. Also the module only tells the game to add a Kerbal and uses the location and rotation of the transform to place the kerbal in the space. ( this part seems to have been proven wrong if using JonnyOThan's prop seat method, but is still valid when making your own seat, bench or whatever.) If you use a Prop seat, even one with a transform included, you still need to give the config file the location and rotation co-ordinates to place the Prop seat within the internal model. All internal models are unique to the craft, there is no universal location for a seat to be placed. (This is still true)

Now using my method, especially if you place the seat mesh, Seat transform and camera inside their own "Empty" so that it is easy to duplicate and move them, you can very quickly add as many seats as you want that all have a unique transform and camera. Each time you duplicate it will add the duplicates with .001, .002, .003 etc. You just remove the ".00" from each and you have your unique numbered transforms and cameras. Then just copy and paste the module within the config as many times as needed and change the number at the end of transform name. Quick and simple. The very first seat you texture as you would like it and then every duplicate uses the exact same set up. It is also geometric. Say you want an airliner cabin with 24 seats. Duplicate the first and place, you have 2, duplicate that and you have 4, duplicate the 4 to get 8, duplicate the 8 etc. Far less effort than having to calculate the co-ordinates and put them in the config for every prop chair.

Here is quick proof of concept that all up took less than 10 minutes. Just turned the MK2 inline cockpit into a 3 seater.
 

Spoiler

FZ3JdsD.pngvFYOKTf.png

INTERNAL
{
    name = mk2InlineInternal2
    MODEL
    {
        model = Squad/Spaces/mk2InlineInternal/Mk2InlineIVA2
    }
    MODEL
    {
        model = Squad/Spaces/OverlayMasks/Mk2InlineMask
        rotation = 0, 180, 0
    }
    MODEL
    {
        model = Squad/Spaces/OverlayMasks/Mk2InlineBorder
        rotation = 0, 180, 0
    }
    MODULE
    {
        name = InternalSeat
        seatTransformName = Seat1
        portraitCameraName = PilotCam1
        allowCrewHelmet = false
        kerbalEyeOffset = 0, 0.06, 0.005
        displayseatName = #autoLoc_6002197 //#autoLoc_6002197 = Seat <<1>>
        displayseatIndex = 1
    }
    MODULE
    {
        name = InternalSeat
        seatTransformName = Seat2
        portraitCameraName = PilotCam2
        allowCrewHelmet = false
        kerbalEyeOffset = 0, 0.05, 0
        displayseatName = #autoLoc_6002197 //#autoLoc_6002197 = Seat <<1>>
        displayseatIndex = 1
    }
    MODULE
    {
        name = InternalSeat
        seatTransformName = Seat3
        portraitCameraName = PilotCam2
        allowCrewHelmet = false
        kerbalEyeOffset = 0, 0.05, 0
        displayseatName = #autoLoc_6002197 //#autoLoc_6002197 = Seat <<1>>
        displayseatIndex = 1
    }

This included editing the rear chairs into controlless passenger chairs.

@JonnyOThan Please provide a config with your method that will achieve the same result.

On 6/12/2024 at 5:27 PM, Manul said:

Talking about unique transform names, this is what I've learned: multiple thrust or gimbal transforms with the same name work as intended within one engine/gimbal module, no idea about intake transforms (idk how to test it, maybe by occluding one of transforms) and control surface transforms don't work at all, only the first of them is moving

Thrust and intake transforms can all be the same name with .001, .002 etc and will work fine (don't name your thrust transform the same as the name Squad uses as it will turn 90 degrees on export, don't know why but it is annoying. Luckily all that matters in a transform is that the name you used matches what you put in your config file. Took me awhile to figure that out.) The intake transforms do to a small extent get affected by the direction the craft is flying vs the orientation, but usually it is neligible. The thrust transforms will all work and how you place them will affect the push they have on your craft. I use 4 thrust transforms of the same name, placed equidistantly at 4 corners of a model I want to hover in order to make sure it is stable. So my helicopters use this set up. Your thrust transform does not have to be your effects transform, so except for the smoke effect that can only use 1 named transform, you can have engine plume effects wherever you want without affecting your push. I used this for Thunderbird 2. Because the position of the downward facing engines would not be stable in real life. So in game it looks like the hover engines are working but that is not where the thrust is coming from.

Now to control surface. You can have multiple control surfaces on one wing but each must have it's own named transform and it's own module in the config. The module just tells the game to rotate the named transform empty or mesh around a set axis direction, and it will only do that to the first empty or mesh that uses the name. So each different flap needs it's own unique name and module. (getting the rotation to work for unique angles is even more involved and I recommend you download my "ColdJs Military Planes" mod and open up the various wings and rudders to see how I do it. Remember that the orientation of the empties is important and you can see those by changing the plain axis to "Arrows".

My F-18 wings use multiple control surfaces with one mesh named Flap and the other named Flaps

    MODULE
    {
        name = ModuleControlSurface
        useInternalDragModel = True
        dragCoeff = 0.6
        deflectionLiftCoeff = 2.0        
        ctrlSurfaceRange = 25
        ctrlSurfaceArea = 0.40
        actuatorSpeed = 25
        transformName = Flap
    }
    MODULE
    {
        name = ModuleControlSurface
        useInternalDragModel = True
        dragCoeff = 0.6
        deflectionLiftCoeff = 1.0        
        ctrlSurfaceRange = 25
        ctrlSurfaceArea = 0.20
        actuatorSpeed = 25
        transformName = Flaps
    }

Feel free to look at my models and configs together to workout how it is done. I find it the best way to learn.

Edited by ColdJ
Link to comment
Share on other sites

2 hours ago, ColdJ said:

Now using my method, especially if you place the seat mesh, Seat transform and camera inside their own "Empty" so that it is easy to duplicate and move them, you can very quickly add as many seats as you want that all have a unique transform and camera.

NOW I GOT IT!

You are meaning parenting the objects!!!

Yes, excellent idea. Really good!

 

Link to comment
Share on other sites

3 hours ago, ColdJ said:

Exactly, each kerbal seat requires it's own unique transform name

Not if the transform is in the prop.

3 hours ago, ColdJ said:

f you use a Prop seat, even one with a transform included, you still need to give the config file the location and rotation co-ordinates to place the Prop seat within the internal model

Well yes, just like every prop.  And positioning those in blender or parttools is very easy.

Duplicating meshes in the internal model itself is not great - the geometry is not shared between the objects; they're all imported uniquely by unity.  Using a prop means that the model only exists once and is shared.  There are some tradeoffs here - each gameobject will be drawn separately so there can be some benefits to baking stuff down in the mesh - but only if you're merging them into a single model and not leaving them separate.

Props also have the advantage that you can update them in one place (better art, textures, more features) and it'll just work everywhere.  This is super important when dealing with hatches, seats, etc. for FreeIva and KerbalVR support.

3 hours ago, ColdJ said:

Please provide a config with your method that will achieve the same result.

Fine.  Note that the seats in the stock mk2internal are already baked into the model, so you can't really apply this directly there unless you make a new model with them removed (which it seems like you're already comfortable doing, regardless of redistributing modified stock assets, but whatever).  Note that FreeIva also has some functionality for removing gameobjects from internals at load time, which can help with that kind of thing and doesn't require distributing a new model.

// Creates a new version of the stock Seat_Passenger prop that contains the internal seat
PROP
{
	name = Seat_Passenger_wModule
	MODEL
	{
		model = Squad/Props/PropsGeneric/Seat_Passenger
	}

	MODULE
	{
		name = InternalSeat
		seatTransformName = model
		allowCrewHelmet = false
	}
}

INTERNAL
{
	name = mk2InlineInternal_demo
	MODEL
	{
		model = Squad/Spaces/mk2InlineInternal/mk2InlineIVA
	}

	// This prop was placed in unity with parttools
	PROP
	{
		name = Seat_Passenger_wModule
		position = 0.581,-0.358,0.296
		rotation = 0,0.7071068,0,0.7071068
		scale = 1,1,1
	}
}

// make the part point at the above internal
@PART[mk2Cockpit_Inline]
{
	@INTERNAL
	{
		@name = mk2InlineInternal_demo
	}
}

Placing the prop in unity:

s4NsjFEe.png

Seat in game:

 iKbSffb.png

 

And then here's the same kind of thing but with the module in the prop placement:

 

INTERNAL
{
	name = mk2InlineInternal_demo
	MODEL
	{
		model = Squad/Spaces/mk2InlineInternal/mk2InlineIVA
	}

	// Using the normal stock seat prop
	PROP
	{
		name = Seat_Passenger
		position = 0.581,-0.358,0.296
		rotation = 0,0.7071068,0,0.7071068
		scale = 1,1,1

		// but we put the seat module HERE instead
		MODULE
		{
			name = InternalSeat
			seatTransformName = model
			allowCrewHelmet = false
		}
	}
}

 

Edited by JonnyOThan
Link to comment
Share on other sites

@JonnyOThan@Lisias@Manul

Ok I have been able to replicate the second method given by JonnyOThan and it even automatically assigns a camera to each seat. I can't say that I understand how it works but then again I have been asking how things work with the modules since I joined the Forum and maybe getting 1 answer out of every 300 questions that I have asked. Important thing is that it works so thank you JonnyOThan for that.
 

Spoiler

    MODULE
    {
        name = InternalSeat
        seatTransformName = Seat1
        portraitCameraName = PilotCam1
        allowCrewHelmet = false
        kerbalEyeOffset = 0, 0.06, 0.005
        displayseatName = #autoLoc_6002197 //#autoLoc_6002197 = Seat <<1>>
        displayseatIndex = 1
    }
    MODULE
    {
        name = InternalSeat
        seatTransformName = Seat2
        portraitCameraName = PilotCam2
        allowCrewHelmet = false
        kerbalEyeOffset = 0, 0.05, 0
        displayseatName = #autoLoc_6002197 //#autoLoc_6002197 = Seat <<1>>
        displayseatIndex = 1
    }
    MODULE
    {
        name = InternalSeat
        seatTransformName = Seat3
        portraitCameraName = PilotCam2
        allowCrewHelmet = false
        kerbalEyeOffset = 0, 0.05, 0
        displayseatName = #autoLoc_6002197 //#autoLoc_6002197 = Seat <<1>>
        displayseatIndex = 1
    }
    PROP
    {
        name = Seat_Passenger
        position = 0.581,-0.358,0.296
        rotation = 0,0.7071068,0,0.7071068
        scale = 1,1,1

        // but we put the seat module HERE instead
        MODULE
        {
            name = InternalSeat
            seatTransformName = model
            allowCrewHelmet = false
        }
    }

    PROP
    {
        name = Seat_Passenger
        position = -0.581,-0.358,0.296
        rotation = 0,-0.7071068,0,0.7071068
        scale = 1,1,1

        // but we put the seat module HERE instead
        MODULE
        {
            name = InternalSeat
            seatTransformName = model
            allowCrewHelmet = false
        }
    }

rubkVIW.png1yCR3lN.png

Trouble I have with this is that it requires manually entering the data from blender into the config file for every seat added (part of the reason I drag my feet on making internals for my models is that I hate having to do this.) and the layout needs to be translated from how blender sets it out to how it is set out in the config. You can see the difference in the pick below. (I know of no way to automate this process.)

5fkOnnu.png

9 hours ago, JonnyOThan said:

Duplicating meshes in the internal model itself is not great - the geometry is not shared between the objects; they're all imported uniquely by unity.  Using a prop means that the model only exists once and is shared.  There are some tradeoffs here - each gameobject will be drawn separately so there can be some benefits to baking stuff down in the mesh - but only if you're merging them into a single model and not leaving them separate.

Once you have finalised your model set up it is easy to combine all the seats into a single mesh, as long as it remains less than 10,500 vertices per mesh due to Unity's needs.

9 hours ago, JonnyOThan said:

(which it seems like you're already comfortable doing, regardless of redistributing modified stock assets, but whatever)

There is no redistributing, this was just a proof of concept using a model that is available to anyone who has purchased KSP so they can replicate the methods for themselves. It was never suggested that you add some seats to an existing model and then put it out as your own mod.

10 hours ago, Lisias said:

You are meaning parenting the objects!!!

Yes that is a term that is used. Basically I had to teach myself all the stuff I put in this thread for others so I assume that someone new may not be familiar with blender lingo and try to keep it simple to grasp when you are new to it.

9 hours ago, JonnyOThan said:

Props also have the advantage that you can update them in one place (better art, textures, more features) and it'll just work everywhere.  This is super important when dealing with hatches, seats, etc. for FreeIva and KerbalVR support.

The same is true of my method and has the advantage of not having to have separate texture pics for the seats. Texture pics cause most of the bloat to a mod download. By having a simple texture pic made up of squares of different texture panels and a simple UV map for the chair you can easily paint and change the chairs, they can easily be imported from a model you have already made to a new one you are making

 

9 hours ago, JonnyOThan said:

Note that the seats in the stock mk2internal are already baked into the model

Easily changed using my method.

9 hours ago, JonnyOThan said:

And positioning those in blender or parttools is very easy.

Links to Unity and part tools a very broken these days. If you have a way for new people to get access, could you please start a new thread with links to the needed downloads and a simple tutorial on how to set them up?

 

So in conclusion, I am very glad that you have been able to provide us with an alternative method, and I thank you for that, but due to the need to manually input the co-ordinates into the config for every chair you add, I do not feel that this method is any simpler than what I have been doing. Also my method means you can make unique chairs for your model and not be locked in to someone elses designs.

Link to comment
Share on other sites

8 minutes ago, ColdJ said:

,but due to the need to manually input the co-ordinates into the config for every chair you add, I do not feel that this method is any simpler than what I have been doing. Also my method means you can make unique chairs for your model and not be locked in to someone elses designs.

But it can be, if we write a CFG export on Blender. It's the reason I was doing things "the hard way", I was probing how to automate the process .

I had wrote tools based on Blender 2.79 for Orbiter in the past, so I have some experience on it.

https://www.orbiter-forum.com/threads/orbiter-tools-mesh-lint.33263/

The way I did it, you can run the tool from a command-line and fully automate the process, not needing even to load Blender yourself.

Now, where I had shoved that source code? I have a lot of details to remember.

Link to comment
Share on other sites

Posted (edited)
8 minutes ago, Lisias said:

But it can be, if we write a CFG export on Blender. It's the reason I was doing things "the hard way", I was probing how to automate the process .

As you know I have no programming experience, so if you can make a tool that will gather all the location and rotation and scale data of all the props I have placed in an internal model and then translate it to the layout required in the config file and export that into a txt file.

I would happily use it.

Edited by ColdJ
Link to comment
Share on other sites

1 hour ago, ColdJ said:

Trouble I have with this is that it requires manually entering the data from blender into the config file for every seat added (part of the reason I drag my feet on making internals for my models is that I hate having to do this.) and the layout needs to be translated from how blender sets it out to how it is set out in the config. You can see the difference in the pick below. (I know of no way to automate this process.)

Blender is fine for positioning a few props, but if you need to do a lot then use Unity.  And translating the coords from blender is easy - there’s a button labeled “show MODEL transform” which dumps the cfg lines you need to the blender output log.

2 hours ago, ColdJ said:

The same is true of my method and has the advantage of not having to have separate texture pics for the seats

I’m pretty sure that’s not true. I don’t know of any mechanism that is able to share meshes within a single .mu file. But maybe I’m missing something.  And the texture point is orthogonal - there’s nothing stopping you from putting prop and internal textures on one sheet if you wish.

Link to comment
Share on other sites

2 hours ago, JonnyOThan said:

Blender is fine for positioning a few props, but if you need to do a lot then use Unity.

 

4 hours ago, ColdJ said:

Links to Unity and part tools a very broken these days. If you have a way for new people to get access, could you please start a new thread with links to the needed downloads and a simple tutorial on how to set them up?

This is afterall a thread for using the .mu plugin in blender, not a thread for using Unity with part tools.

2 hours ago, JonnyOThan said:

And translating the coords from blender is easy - there’s a button labeled “show MODEL transform” which dumps the cfg lines you need to the blender output log.

I can bring this up in blender but can't find the log outside of it. It is also clunky and output rotation is in degrees, even though I am set to the quarternions that the config file uses. This is no easier than manually entering.

2 hours ago, JonnyOThan said:

I’m pretty sure that’s not true. I don’t know of any mechanism that is able to share meshes within a single .mu file

Could you clarify what you mean by this?

I do not know what you mean by share meshes as most models are made up of several meshes within the same .mu file. Taking the Chair mesh from one .mu model and reparenting it in another is easy. You just change the material setup to your new model, then you just move the UV mapped pieces to the texture panels you want on the texture pic.

Also I only state things I have already done as everything has to be replicatable by anyone who uses the info I give.

 

Link to comment
Share on other sites

6 hours ago, ColdJ said:

This is afterall a thread for using the .mu plugin in blender, not a thread for using Unity with part tools.

As a matter of fact, using Unity is undesirable IMHO. I don't plan to promote them after that mega fiasco on licensing.

Fully porting the parttools into Blender would be marvelous IMHO.

 

11 hours ago, ColdJ said:

it even automatically assigns a camera to each seat. I can't say that I understand how it works but then again I have been asking how things work with the modules since I joined the Forum and maybe getting 1 answer out of every 300 questions that I have asked.

I have a hint. I'm allowing the InternalModule to automatically calculate the portrait camera position, and I'm getting screwed sometimes. I think the code just gets the seat position and adds half a meter (guess) into the -Z axis.

ECErK0F.png

On the picture above, all the Mk1 Crew Cabin variants are working fine with automatic camera positioning, except the central one with 4 Kerbals, where the camera position is inside the walls for the first row, and inside the seat for the second row (the two screwed portraits on the lower right of the screen, the 3rd portrait is from the right PAX on the 3 crew cabin behind the 4 crewed one).

In time, the table on the 3 and 1 crewed part is a prop! :)

Link to comment
Share on other sites

This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...