Jump to content

Hi There

Welcome to Klub Exile. If you happened to make your way to the site either from Lovers Lab or a Search on Google, we are glad you found us.  To unlock the entire site you will need to have a account registered.  Don't worry it is free but in the mean time you can read up on why we made the site and other little tidbits.  Feel free to join or Discord Server also if you have any more questions.  Thanks for stopping by and See You on the other side.

admin admin

Hair morphs discussion............


Smoke

Recommended Posts

  • Administrator

Hey folks, so many tutorial post needs a clean up and a update. I'm currently making some hair addon and noticed that information for hair morphs is lacking or not there. Figured I get that started and out the way, find it here:

Also, I currently encountered a issue - with PE morphs and customization morphs. Currently the system is only allowing '1 selection' (PE morphs OR Customization morphs). This could be the lack of information and it still be uncharted territory for modders and we need to find the missing piece - or it legit could be limited (but I don't believe that).

That said, if you have ANY vital information. Please share it here!

  • Love It 1
Link to comment
Share on other sites

You can call a hair morph from both PE or Customizer. There is not much different than clothes I would say. Just call them correctly.

Hair morphs can be problematic in visual results if the hair faces are sorted and the morph is screwing the faces distance towards the camera. You will run into alpha sorting issues that can be from barely noticeable to total mess up.

  • Like 1
Link to comment
Share on other sites

  • Administrator
On 7/12/2023 at 7:50 AM, hfg2 said:

You can call a hair morph from both PE or Customizer. There is not much different than clothes I would say. Just call them correctly.

Hair morphs can be problematic in visual results if the hair faces are sorted and the morph is screwing the faces distance towards the camera. You will run into alpha sorting issues that can be from barely noticeable to total mess up.

Provide a code similar to that of appExppress. The version that I currently use is not working for hair. Before you asked, yes I tested it. So provide a different code (assuming that there is different methods)

  • Like 1
Link to comment
Share on other sites

Sorry, you lost me here. You can control hair from ccPerson style scripts in customizer or from PE using SNode?.BlendControl from Ac scripts.

With which one you have problems with?

What means appExppress? If you mean AppExprLinear then yes, you can do that as well, but is less desirable as this approach is prone to errors and executes continuously, stressing the engine along other AppExprLinear that can't be avoided.

Link to comment
Share on other sites

  • Administrator
4 hours ago, hfg2 said:

What means appExppress? If you mean AppExprLinear then yes, you can do that as well, but is less desirable as this approach is prone to errors and executes continuously, stressing the engine along other AppExprLinear that can't be avoided.

Provide code. Write it down so I can test it or compare with the current codes that I have. Otherwise read my comment(s) slowly and carefully. I provided working codes/inputs/examples/etc. But like I mentioned, for some reason the game does not want both to work at the same time.

4 hours ago, hfg2 said:

Sorry, you lost me here. You can control hair from ccPerson style scripts in customizer or from PE using SNode?.BlendControl from Ac scripts.

I know that - I told you/comment on the first post and posted in the tutorial. I suggest that you read my post carefully and slowly. They are working as I have tested both out and they are working. If you have another method that is different that can used in the AcScript, PLEASE WRITE IT DOWN.

To explain more thoroughly:

appexprlinear DOES NOT work (read that slow and carefully) - IT DOES NOT WORK. Now if you have a similar input that uses appexprlinear, I'll repeat myself for the 3rd/4th time. Please share. I would like to compare it to the version that I have as perhaps this come be the only way to have PE morphs and customization morphs working at the same time.

And I'll repeat this again - BOTH METHODS DO WORK BUT YOU CANNOT/CAN'T/CAN NOT/WILL NOT work at the same time. Meaning that the customization morphs can work ONLY if PE morphs are not used. And the PE MORPH will work but it will override and disable ccPerson (I don't know why).

And I'm not being a dick or asshole. I want straight to the point answers and not play these stupid riddle guessing games as I would rather have solid answers and document them.

 

 

Link to comment
Share on other sites

56 minutes ago, Smoke said:

I provided working codes.

The code you provided is only partial that has some references to :[CustomNameHere]_mesh and Hair:S1 and Hair:S2.

This is complicated for me to follow, I have problems understanding something even when I see the complete addon, in your case where you provide some parts only is even more confusing. Upload your complete addon so I can try to understand.

56 minutes ago, Smoke said:

But like I mentioned, for some reason the game does not want both to work at the same time.

appexprlinear DOES NOT work (read that slow and carefully) - IT DOES NOT WORK.

...

And I'll repeat this again - BOTH METHODS DO WORK BUT YOU CANNOT/CAN'T/CAN NOT/WILL NOT work at the same time. Meaning that the customization morphs can work ONLY if PE morphs are not used. And the PE MORPH will work but it will override and disable ccPerson (I don't know why).

Maybe this is a false problem in your case: Both don't work at the same time.

Bu let me ask you: Why should they work?

I'm not that used to your ccPerson method, but I know for sure that an AppExprLinear is supposed to process and calculate like every frame of the game, and its results are sent to the output every time you make a change. That means you can't use an AppExprLinear to modify directly something that is also changed from PE or Customizer because it will overwrite the values sent from those ones.

So in your case, I believe the PE slider probably overwrites the ccPerson customizer slider value, if both targets the same thing.

Yes, I do have some methods to write from AppExprLinear/PE/ccPerson at the same time, but those are complicated methods, applied to very specific scenario, with very specific use case and most probably won't suit your needs or maybe not useful for you. So before jumping on those, publish your addon so I can understand better what you are dealing with and what challenges there are.

Then explain why you want to use AppExprLinear for a hair, what you try to accomplish with this method. 🙂

One last question, why do you keep the lua code for including the ccPerson bs part? Why not make directly a bs file?

 

One last thing, I've seen that you are a fan of going the hair_group workflow.

	AppReplaceSkeleton . {
		.SourcePath "/Person" + :person + "TeamKEHair1/hair_group";
		.TargetPath "/Person" + :person + "Anim/Model01:TRS_group/Model01:hair_group";
		.SourceRootPath "/Person" + :person + "TeamKEHair1";
		.TargetRootPath "/Person" + :person + "Anim";
	};

But I personally go with the TRS hair, like:

	AppReplaceSkeleton . {
		.SourcePath "/Person" + :person + "R9Hair520/TRS_group";
		.SourceRootPath "/Person" + :person + "R9Hair520";
		.TargetPath "/Person" + :person + "Anim/Model01:TRS_group";
		.TargetRootPath "/Person" + :person + "Anim";
	};

Don't remember exactly what were my problems with the hair_group approach back then, but RK said I should use TRS_group instead.

When you make hair with CollaTkane you have 2 options, one is hair_group, the other is TRS_group.

Link to comment
Share on other sites

  • Administrator
54 minutes ago, hfg2 said:

The code you provided is only partial that has some references to :[CustomNameHere]_mesh and Hair:S1 and Hair:S2.

This is complicated for me to follow, I have problems understanding something even when I see the complete addon, in your case where you provide some parts only is even more confusing. Upload your complete addon so I can try to understand.

Then write down a complete sequence. I don't know how many times I have to ask you to write down the code that you would use.

And so you are aware. Which I think you are, there are different methods on writing it down in both ccperson and ACscripts. That said, if such codes are partial, they would have not worked when I test it out individually. And I stated that they DO WORK which indicates its just another method that people can use. And like I said, I would like to document those working methods so people don't encounter issues when they make their own addons.

54 minutes ago, hfg2 said:

Bu let me ask you: Why should they work?

Because if clothing addons can work/or other body addons can work under similar circumstance, than why SHOULDN'T it Work? Unless you already knew the answer that it will NOT work you should of told me from the beginning that HAIR cannot work and like I told you, I don't like playing guess games as I would rather put my time effort on other issues.

54 minutes ago, hfg2 said:

So in your case, I believe the PE slider probably overwrites the ccPerson customizer slider value, if both targets the same thing.

Ok now you are slightly asking better questions. The code I provided for ACScript pretty much goes down the set path of the names of the shape keys in the scene file (example of names: Morphs1, Morph2, Morph3, Morph4, Morph5, etc). There is no way to specify which shape keys it should read (example: If I just want ACScript to use Morph1 and Morph4 and I could use the rest in the ccPerson bs/lua file). AppExprLinear allows users to specify which shape keys they can use in the ACScript.

BUT as I stated, appexprlinear DOES NOT WORK. Unless there is slightly modified code for hairs and what. Which I do not know and I WANT TO KNOW. Otherwise, the AppExpr codes are similar to what is being used on clothing addon, and like I said - it does not work.

And AS I STATED - the current codes/sequences for ACScript and bs/lua work. BUT THEY WILL NOT WORK TOGETHER. I assumed it would read the names of the morphs as they were exported and I structured the basic structure that the game can read it by (Morph1, Morph2, Morph3, Morph4, Morph5, etc - by that, ACScript will use Morph1, Morph2, and Morph3 - ccPerson will use Morph4 and Morph5.

54 minutes ago, hfg2 said:

Then explain why you want to use AppExprLinear for a hair, what you try to accomplish with this method. 🙂

You have stated that you use 'stuff' differently - you have mentioned that you don't see morphs having certain benefits. That is fine. I have seen benefits to using morphs. If I can create morphs that changes the 'style' of addon (example: I can make the hair longer or shorter), I place them in the ccPerson file. If I can use a morph that looks like the wind is blowing the hair, I would like to use that in the PE sliders as it could/can create interesting animation. You can use both methods which clothing addons which is great (I suggest that you either download HDiddy work or mine to properly understand). 

54 minutes ago, hfg2 said:

Yes, I do have some methods to write from AppExprLinear/PE/ccPerson at the same time, but those are complicated methods, applied to very specific scenario, with very specific use case and most probably won't suit your needs or maybe not useful for you. So before jumping on those, publish your addon so I can understand better what you are dealing with and what challenges there are.

Honestly, it sounds like the current method is complicated for you. I don't know, I doubt it. Maybe read it carefully and slowly so you can understand it better. I will not publish such work early because it isn't my style and I prefer to not have 'leecher' download it and create a mess on asking stupid question or something that I already know - you know this as you have complained about it (seeing the same 'stuff' being asked). The codes/sequences I provided are pretty much the same that I used. It is why I asking if there are other methods to inputting them.

If you want to look at it, I would be happy to shoot you a copy but I would like solid answers and no more guessing games 😉

54 minutes ago, hfg2 said:

One last question, why do you keep the lua code for including the ccPerson bs part? Why not make directly a bs file?

for some reason, the regular method was creating a odd issue when wanting to properly address shape key and customization inputs. lua eliminated that.

Link to comment
Share on other sites

I can't write you down a complete sequence because I don't have such an addon I would use and I don't understand what you would like to obtain. I sort of understand what you want generally speaking, but you need to provide a "work in progress" addon so I can take a look. 

Again, this is not my problem, is YOUR problem. You are the one that is supposed to provide working/non-working code, so I can try to help.

I haven't used PE cloth morphs in a long time, but I used recently Appexprlinear, PE and Customizer morphs for bodies and hairs and I can assure you both/all three works, but NOT exactly ALL at the same time. So is a bit confusing for me when you say that those works for clothes, I was not aware of that and don't understand why those works the way you claim. Maybe I'm wrong and we speak of different things.

The way you mention you plan to use like first 1,2,3 for PE then you want to use 4,5 for ccPerson probably is not ok.

For example this code:

:[CustomNameHere]_mesh.SNode?.BlendControl [
	:Person" + :person + "Anim:vx_hairMorph01;
];

will set you hair addon to have only 1 single morph. 

Maybe you defined S1 and S2 (I can't know that since you don't publish your addon), but if you have those two in ccPerson, I can assure you that at least the second morph will not work for sure because you clamped the array to 1 single element.

 

The way to connect morphs to various controllers like:

SNode?.BlendControl [
	:Person" + :person + "Anim:vx_hairMorph01;
	...
	...
	...
];

is pure genius, like RK told us way back, but it has a huge drawback. Once you start going that route, you need to make sure to keep the array at the original size to ensure old existing morphs will works.

If this is your problem, you might be better in testing by injecting duplicate morphs using "<<" operator.

Link to comment
Share on other sites

  • Administrator
7 hours ago, hfg2 said:

Again, this is not my problem, is YOUR problem. You are the one that is supposed to provide working/non-working code, so I can try to help.

By this logic than you cannot provide any help as I doubt you would know as you have not done anything of that nature. Realize that there are people that make stuff and don't share but can at least provide some help to how they would use morphs. As it stand - NO ONE has shared or completed what I'm trying to do - otherwise, I would have not made this post as I would of studied their structure. It is the reason why I even made a guide (which is labelled WiP), so people can have little problem and a better understanding of the codes for ACScript and ccPerson. Currently this is 'my problem'. But at the end is 'everyones' problem if they want to create something. You need to slow down and read what I say. You complain that there isn't not proper talk or documentation of 'modding'. And when that talk is right in front of you are hesitant to even provide working code and sequences. I provided WORKING CODES how many times do I have to say that? Otherwise I would have not put it up in the first place. And I even explain, such code(s) DO WORK TOGETHER in other addons for some reason it does not work with hair. I even said that the AppExprLinear sequence does not work. You tend to nite pick when something is mention so this is the code that DOES NOT work (Its also why I've been repeating myself and asking you if there is another method to input codes in appexpr to write it!):

};
AppExprLinear . {
	.InputObjectNameArray [ "Person" + :person + "Anim:vx_hairMorph01" ];
	.InputAttrArray [ @ BlendControl .Weight ];
	.CombineMatrixArray [ ( F32(0.25), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0) ) ];
	.OutputMin ( F32(-0.5), F32(0), F32(0), F32(0) );
	.OutputMax ( F32(1), F32(0), F32(0), F32(0) );
	.OutputObjectName "Person" + :person + "TeamKEHair1:Wind1";
	.OutputAttr @ BlendControl .Weight;
};

That said - I will send you a 'copy' of the addon. But I ask you this to NOT get side track and answer the questions. You tend to rant on subjects unrelated to what is being asked and ignore the question(s) on hand. I have stated that I don't like playing that type of game and would rather 'waste' my time on other issues. 

 

7 hours ago, hfg2 said:

will set you hair addon to have only 1 single morph. 

Maybe you defined S1 and S2 (I can't know that since you don't publish your addon), but if you have those two in ccPerson, I can assure you that at least the second morph will not work for sure because you clamped the array to 1 single element.

 

The way to connect morphs to various controllers like:

Like I said DUDE SLOW DOWN. JEEZ - DID IS SAY THAT I AM USING JUST THAT 1 CODE AND WANTING ALL TO WORK? YOU ARE MAKING THINGS MORE COMPLICATED BUT REPEATING WHAT I HAD ALREADY SAID BUT MAKING IT MORE CONFUSING THAN IT SHOULD BE (and yes its on caps but not screaming but perhaps it will get you to read stuff clearer before jumping to wild answers) 😑

Link to comment
Share on other sites

7 hours ago, Smoke said:

you cannot provide any help as I doubt you would know as you have not done anything of that nature

You are right in all your assumptions as always, I've never done this kind of shit, so how should I know?!?

But I decided to give it a try, just a 5 minutes job, maybe I'm just lucky when it comes to scripting. And this shows up? Does this ticks all your checkmarks?

 

 

So the solution. Using AppExprLinear. Which I don't like. But not bothering to explain more into other ways because you don't want to listen or understand and because you don't like riddles and you always want to skip the whole fun.


 

Spoiler

 


AppModel . {
	.ComponentArray [ AppImportScene . {
		.NodeName "Person" + :person + "SmokeHair12";
		.ParentPath "/Primary01";
		.SceneFile "Shared/Hair/SmokeHair12";
	};
	AppReplaceSkeleton . {
		.SourcePath "/Person" + :person + "SmokeHair12/hair_group";
		.TargetPath "/Person" + :person + "Anim/Model01:TRS_group/Model01:hair_group";
		.SourceRootPath "/Person" + :person + "SmokeHair12";
		.TargetRootPath "/Person" + :person + "Anim";
		};
		AppScript . {
				.MainContext True;
				.Script "			

					
					::GUI:PoseEdit_HairTrack1.Visibility 1u;
					::GUI:PoseEdit_HairTrack2.Visibility 1u;
					::GUI:PoseEdit_HairTrack3.Visibility 1u;
					::GUI:PoseEdit_HairTrack4.Visibility 1u;
					::GUI:PoseEdit_HairTrack5.Visibility 1u;
					
					::GUI:PoseEdit_Hair1_Label.Text \"N Wind 1\";
					::GUI:PoseEdit_Hair2_Label.Text \"N Wind 2\";
					::GUI:PoseEdit_Hair3_Label.Text \"N Wind 3\";
					::GUI:PoseEdit_Hair4_Label.Text \"N Wind 4\";
					::GUI:PoseEdit_Hair5_Label.Text \"N Wind 5\";
         ";
    };
	
		AppExprLinear . {
			.InputObjectNameArray [ "Person" + :person + "Anim:vx_hairMorph01" ];
			.InputAttrArray [ @ BlendControl .Weight ];
			.CombineMatrixArray [ ( F32(0.25), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0), F32(0) ) ];
			.OutputMin ( F32(-0.5), F32(0), F32(0), F32(0) );
			.OutputMax ( F32(1), F32(0), F32(0), F32(0) );
			.OutputObjectName "Person" + :person + "Hair:PE1";
			.OutputAttr @ BlendControl .Weight;
		};
			
	];
};

 

  • Thanks 1
Link to comment
Share on other sites

  • Administrator
57 minutes ago, hfg2 said:

You are right in all your assumptions as always, I've never done this kind of shit, so how should I know?!?

Its not that I'm right. I never claimed that I am right. All I asked is for you to provide a simple code ON HOW YOU WOULD DO IT. You added 10 steps on a process that really need 1 step. This isn't the first time you have done this. This is how you operate in non effective manner. You have ranted on not liking to when your time is wasted. I don't like being told to jump to hoops just to have a questioned answered nor wanting to hear on your rant on the history of roman numbers. You are basically repeating stuff that I already know and you assuming that I don't. There is a reason why I asked you to provide something different and you still went out your way to rant in which the assumption was that you would PM me with the answer in which you clearly broke what what I had asked you in your DM.

Link to comment
Share on other sites

  • Administrator
1 hour ago, hfg2 said:

You are right in all your assumptions as always, I've never done this kind of shit, so how should I know?!?

But I decided to give it a try, just a 5 minutes job, maybe I'm just lucky when it comes to scripting. And this shows up? Does this ticks all your checkmarks?

 

 

So the solution. Using AppExprLinear. Which I don't like. But not bothering to explain more into other ways because you don't want to listen or understand and because you don't like riddles and you always want to skip the whole fun.


 

  Reveal hidden contents

 

Regardless - THANK YOU FOR PROVIDE A CODE. Something that I asked 5+ times or so and you not wanting to provide. Now that I managed to dig that info out of you - you 'helped' on providing another method to document.

Link to comment
Share on other sites

I always work with something. Something that you must provide first.

I don't make an addon to prove/show/demonstrate how to implement something because I never know what others exactly wants and maybe I'm wrong in my assumptions or in my understanding of things.

You can ask 500+ times, I'm not giving you any code. You need to provide code that is not working, and I need the full addon to understand, not just some snippets. This is how it works for me, and I do this to make sure I don't waste both our times. Otherwise we can just chit chat. And in fact we just chit chat until you stop asking 500+ times and just provide the source code of your addon.

The moment you provided full code right away I was able to give you something useful.

Another method to document?!? But it was you who asked for another method, so I gave you the AppExprLinear solution that you claimed is not working.

--------

I don't understand the PM part. I was supposed to keep my explanations in PM?!? I don't do that, since the discussion started on a public forum and this is learning material for others as well, I think is more helpful for the forum to have this open.

I was supposed to keep that monk hair secret? Not reveal what you were working on or something? If that is the case, sorry, I didnt realized, but I can remove the video link above if that is the case.

  • Confused 1
Link to comment
Share on other sites

  • Administrator
2 hours ago, hfg2 said:

I don't make an addon to prove/show/demonstrate how to implement something because I never know what others exactly wants and maybe I'm wrong in my assumptions or in my understanding of things.

Dude do you read what you type? Do you even read what is even asked? I asked you what I wanted, which was different implementations for morphs. That all I wanted. Not not damn lecture of you personal ideology.

2 hours ago, hfg2 said:

You can ask 500+ times, I'm not giving you any code. You need to provide code that is not working, and I need the full addon to understand, not just some snippets. This is how it works for me, and I do this to make sure I don't waste both our times. Otherwise we can just chit chat. And in fact we just chit chat until you stop asking 500+ times and just provide the source code of your addon.

Like I told you and the truth hurts you. IF you would said this from the beginning, I would understand and sent you it. There are ways of approaching it; like - 'hey can you send me the addon you are having issues with. I might have a solution' Not no damn back and forth bickering. Which you clearly admitting to being 'fun to you'. Otherwise, plain and simple, your rants are nothing more than a waste of time.

2 hours ago, hfg2 said:

Another method to document?!? But it was you who asked for another method, so I gave you the AppExprLinear solution that you claimed is not working.

Again, don't read the first word. Read it all. I don't see you attempting to document anything. More unwarranted lazy criticism of 'you should do this' yet go on to express wanting to see how people create different methods.

2 hours ago, hfg2 said:

I don't understand the PM part. I was supposed to keep my explanations in PM?!? I don't do that, since the discussion started on a public forum and this is learning material for others as well, I think is more helpful for the forum to have this open.

I was supposed to keep that monk hair secret? Not reveal what you were working on or something? If that is the case, sorry, I didnt realized, but I can remove the video link above if that is the case.

Its not 'because you revealed anything'. If more like I ASKED YOU to provide example(s) or continue the talk there to move on quicker there but yet you still went on and ranted.

That said move on. Thanks again. Topic close. Go jerk off to some hentai, reflect on your life and enjoy your day. PEACE

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

WARNING! Adult Only Content You must be 18 years of age or older to enter. By accepting you agree to Klub Exile's Terms of Use and Guidelines upon creating an account.