arisaie
-
Posts
86 -
Joined
-
Last visited
Content Type
Forums
Blogs
Knowledge Base
Posts posted by arisaie
-
-
So I tested it and the local texture preview allows 4k textures.
Are they going to keep it that way?
I'm not sure if it's just the viewer settings (I turned down shadows and TPed to sky without any other objects) but with just 1 4k pbr material my gpu utilisation was at 65% and 50C with rtx 3070.
4k looks nicer, there's more details but what will happen if everyone upgrades their mesh with 4k textures? I feel like the body and head creators will try to upgrade to 4k for even more details.
Anyone can enlighten me?
-
Is SL really getting PBR texturing?
-
Thank you Wulfie and Quistess. Your formatting is certainly informative. Will look into the info you provided.
-
I am making a script for my HUD that has the outline of the body and you click on the faces to show/hide parts of mesh that you clicked (Clicking lower leg hides mesh on lower leg)
I thought everything is OK until I noticed that I actually need to click another HUD face 2 times. 1st click hides the part I want no problem, but then to hide another part I have to click the other face 2 times. I suspect the problem is due to the switch script I am using. It is the normal switch script you can find when googling for light switch script.
Another issue is, sometimes the HUD change is opposite - i click the HUD to hide the face, but the mesh face appears. I click the HUD to unhide the face and the mesh face disappears.
3rd issue is I have no idea how to incorporate the glow pattern into the hide face script. I figured out how to hide the static glow when hiding a mesh face (glow remains even when the mesh alpha is 0). But the glow pattern uses a timer and I have no idea how to use it. (I might drop the glow pattern if its too difficult)
First script is the HUD, 2nd script is the mesh listener. Any help appreciated.
integer dChannel; integer lHandle; key id; key AvatarKey; integer isOne; default { changed(integer change) { if(change & CHANGED_OWNER) { llResetScript(); } } attach(key AvatarKey) { AvatarKey = llGetOwner(); llRequestPermissions(AvatarKey, PERMISSION_ATTACH); } run_time_permissions(integer perm) { AvatarKey = llGetOwner(); llRequestPermissions(AvatarKey, PERMISSION_ATTACH); } touch_start(integer num_detected) { //dChannel = ((integer)("0x"+llGetSubString((string)llGetOwner(),-8,-1)) & 0x3FFFFFFF); isOne = !isOne; dChannel = 1; integer link = llDetectedLinkNumber(0); integer face = llDetectedTouchFace(0); AvatarKey = llGetOwner(); integer perm; if (face == TOUCH_INVALID_FACE) llSay(PUBLIC_CHANNEL, "Sorry, your viewer doesn't support touched faces."); else { // store the original color list colorParams = llGetLinkPrimitiveParams(link, [PRIM_COLOR, face]); vector originalColor = llList2Vector(colorParams, 0); //WHITE--------------------------------------------------------------------- if (face == 4 && link == 1) llRegionSay(dChannel, "StarSetColorWhite"); //RED--------------------------------------------------------------------- if (face == 3 && link == 1) llRegionSay(dChannel, "StarSetColorRed"); //ORANGE--------------------------------------------------------------------- if (face == 2 && link == 1) llRegionSay(dChannel, "StarSetColorOrange"); //YELLOW--------------------------------------------------------------------- if (face == 5 && link == 1) llRegionSay(dChannel, "StarSetColorYellow"); //Green--------------------------------------------------------------------- if (face == 0 && link == 1) llRegionSay(dChannel, "StarSetColorGreen"); //Torquise--------------------------------------------------------------------- if (face == 4 && link == 2) llRegionSay(dChannel, "StarSetColorTorquise"); //Blue--------------------------------------------------------------------- if (face == 1 && link == 2) llRegionSay(dChannel, "StarSetColorBlue"); //Purple--------------------------------------------------------------------- if (face == 3 && link == 2) llRegionSay(dChannel, "StarSetColorPurple"); //Pink--------------------------------------------------------------------- if (face == 2 && link == 2) llRegionSay(dChannel, "StarSetColorPink"); //Black--------------------------------------------------------------------- if (face == 0 && link == 2) llRegionSay(dChannel, "StarSetColorBlack"); //--------------------------------------------------------------------- //Glow--------------------------------------------------------------------- if (face == 0 && link == 3) llRegionSay(dChannel, "GlitterGlow0"); if (face == 1 && link == 3) llRegionSay(dChannel, "GlitterGlow15"); if (face == 2 && link == 3) llRegionSay(dChannel, "GlitterGlow30"); if (face == 3 && link == 3) llRegionSay(dChannel, "GlitterGlowPulse"); //ALPHA--------------------------------------------------------------------- if (face == 0 && link == 16) { if(isOne) { llRegionSay(dChannel, "ShowHideLowerLegLeft"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 0, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideLowerLegLeft"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 0, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 1 && link == 16) { if(isOne) { llRegionSay(dChannel, "ShowHideLowerLegRight"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 1, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideLowerLegRight"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 1, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 4 && link == 16) { if(isOne) { llRegionSay(dChannel, "ShowHideUpperLegLeft"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 4, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideUpperLegLeft"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 4, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 5 && link == 16) { if(isOne) { llRegionSay(dChannel, "ShowHideUpperLegRight"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 5, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideUpperLegRight"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 5, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 2 && link == 16) { if(isOne) { llRegionSay(dChannel, "ShowHideThightLeft"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 2, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideThightLeft"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 2, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 3 && link == 16) { if(isOne) { llRegionSay(dChannel, "ShowHideThightRight"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 3, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideThightRight"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 3, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 6 && link == 16) { if(isOne) { llRegionSay(dChannel, "ShowHideTummy"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 6, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideTummy"); llSetLinkPrimitiveParamsFast(16, [PRIM_COLOR, 6, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 4 && link == 15) { if(isOne) { llRegionSay(dChannel, "ShowHideChest"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 4, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideChest"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 4, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 2 && link == 14) { if(isOne) { llRegionSay(dChannel, "ShowHideLeftPeck"); llSetLinkPrimitiveParamsFast(14, [PRIM_COLOR, 2, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideLeftPeck"); llSetLinkPrimitiveParamsFast(14, [PRIM_COLOR, 2, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 3 && link == 14) { if(isOne) { llRegionSay(dChannel, "ShowHideRightPeck"); llSetLinkPrimitiveParamsFast(14, [PRIM_COLOR, 3, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideRightPeck"); llSetLinkPrimitiveParamsFast(14, [PRIM_COLOR, 3, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 5 && link == 15) { if(isOne) { llRegionSay(dChannel, "ShowHideNeck"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 5, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideNeck"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 5, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 0 && link == 15) { if(isOne) { llRegionSay(dChannel, "ShowHideLowerArmLeft"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 0, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideLowerArmLeft"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 0, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 1 && link == 15) { if(isOne) { llRegionSay(dChannel, "ShowHideLowerArmRight"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 1, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideLowerArmRight"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 1, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 2 && link == 15) { if(isOne) { llRegionSay(dChannel, "ShowHideUpperArmLeft"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 2, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideUpperArmLeft"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 2, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 3 && link == 15) { if(isOne) { llRegionSay(dChannel, "ShowHideUpperArmRight"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 3, <1.0, 1.0, 1.0>, 0.4]); } else { llRegionSay(dChannel, "ShowHideUpperArmRight"); llSetLinkPrimitiveParamsFast(15, [PRIM_COLOR, 3, <1.0, 1.0, 1.0>, 1.0]); } } if (face == 3 && link == 13) { llRegionSay(dChannel, "ShowHideALL"); llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES); } }} }
integer dChannel; integer lHandle; key id; list pattern = [0.0,0.05,0.1,0.15,0.20,0.25,0.3,0.25,0.20,0.15,0.10,0.05]; float interval = 0.15; integer prim = LINK_SET; integer face = ALL_SIDES; integer glow_index; integer color_index; integer counter; integer isOn; integer glowOn; remove_listen_handle() { llListenRemove(lHandle); } Pulse() { glow_index = (glow_index + 1) % llGetListLength(pattern); llSetLinkPrimitiveParamsFast(prim,[PRIM_GLOW,face,llList2Float(pattern,glow_index)]); } default { changed(integer change) { if(change & (CHANGED_OWNER | CHANGED_INVENTORY)) //note that it's & and not &&... it's bitwise! { llResetScript(); } } on_rez(integer start_param) { llResetScript(); } state_entry() { dChannel = 1; id = llDetectedKey(0); lHandle = llListen(dChannel, "", "", ""); } listen(integer channel, string name, key id, string message) { list params = llGetLinkPrimitiveParams(1, [PRIM_DESC]); float para = llList2Float(params, glowOn); isOn = !isOn; //WHITE--------------------------------------------------------------------- if (message == "StarSetColorWhite") { llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_COLOR, ALL_SIDES, <1.0, 1.0, 1.0>, 1.0]); } //RED--------------------------------------------------------------------- if (message == "StarSetColorRed") { llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_COLOR, ALL_SIDES, <1.0, 0.0, 0.498>, 1.0]); } //ORANGE--------------------------------------------------------------------- if (message == "StarSetColorOrange") { llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_COLOR, ALL_SIDES, <0.929, 0.635, 0.337>, 1.0]); } //YELLOW--------------------------------------------------------------------- if (message == "StarSetColorYellow") { llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_COLOR, ALL_SIDES, <0.929, 0.929, 0.388>, 1.0]); } //Green--------------------------------------------------------------------- if (message == "StarSetColorGreen") { llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_COLOR, ALL_SIDES, <0.365, 1.000, 0.365>, 1.0]); } //Torqiose--------------------------------------------------------------------- if (message == "StarSetColorTorquise") { llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_COLOR, ALL_SIDES, <0.467, 0.929, 0.929>, 1.0]); } //Blue--------------------------------------------------------------------- if (message == "StarSetColorBlue") { llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_COLOR, ALL_SIDES, <0.192, 0.596, 1.000>, 1.0]); } //Purple--------------------------------------------------------------------- if (message == "StarSetColorPurple") { llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_COLOR, ALL_SIDES, <0.647, 0.294, 1.000>, 1.0]); } //Pink--------------------------------------------------------------------- if (message == "StarSetColorPink") { llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_COLOR, ALL_SIDES, <0.996, 0.325, 1.000>, 1.0]); } //Black--------------------------------------------------------------------- if (message == "StarSetColorBlack") { llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_COLOR, ALL_SIDES, <0.0, 0.0, 0.000>, 1.0]); } //GLOW--------------------------------------------------------------------- if (message == "GlitterGlow0") { llSetLinkPrimitiveParams(1,[PRIM_DESC, "0.0"]); llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_GLOW, ALL_SIDES, 0.0]); llSetTimerEvent(0.0); } if (message == "GlitterGlow15") { llSetLinkPrimitiveParams(1, [PRIM_DESC, "0.15"]); llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_GLOW, ALL_SIDES, 0.15]); llSetTimerEvent(0.0); } if (message == "GlitterGlow30") { llSetLinkPrimitiveParams(1, [PRIM_DESC, "0.30"]); llSetLinkPrimitiveParamsFast(LINK_SET,[ PRIM_GLOW, ALL_SIDES, 0.30]); llSetTimerEvent(0.0); } if (message == "GlitterGlowPulse") { llSetLinkPrimitiveParams(1, [PRIM_DESC, "0.0,0.05,0.1,0.15,0.20,0.25,0.3,0.25,0.20,0.15,0.10,0.05"]); llSetTimerEvent(interval); Pulse(); } if (message == "ShowHideLowerLegLeft") { if(isOn) { llSetLinkAlpha(2, 1.0, 0); llSetLinkPrimitiveParamsFast(2,[ PRIM_GLOW, 0, 0.0]); } else { llSetLinkAlpha(2, 0.0, 0); llSetLinkPrimitiveParamsFast(2,[ PRIM_GLOW, 0, para]); } } if (message == "ShowHideLowerLegRight") { if(isOn) { llSetLinkAlpha(2, 0.0, 3); } else { llSetLinkAlpha(2, 1.0, 3); } } if (message == "ShowHideLowerLegLeft") { if(isOn) { llSetLinkAlpha(2, 0.0, 0); } else { llSetLinkAlpha(2, 1.0, 0); } } if (message == "ShowHideUpperLegLeft") { if(isOn) { llSetLinkAlpha(2, 0.0, 1); } else { llSetLinkAlpha(2, 1.0, 1); } } if (message == "ShowHideUpperLegRight") { if(isOn) { llSetLinkAlpha(2, 0.0, 4); } else { llSetLinkAlpha(2, 1.0, 4); } } if (message == "ShowHideThightLeft") { if(isOn) { llSetLinkAlpha(2, 0.0, 2); } else { llSetLinkAlpha(2, 1.0, 2); } } if (message == "ShowHideThightRight") { if(isOn) { llSetLinkAlpha(2, 0.0, 5); } else { llSetLinkAlpha(2, 1.0, 5); } } if (message == "ShowHideTummy") { if(isOn) { llSetLinkAlpha(4, 0.0, 2); } else { llSetLinkAlpha(4, 1.0, 2); } } if (message == "ShowHideChest") { if(isOn) { llSetLinkAlpha(3, 0.0, 7); } else { llSetLinkAlpha(3, 1.0, 7); } } if (message == "ShowHideLeftPeck") { if(isOn) { llSetLinkAlpha(3, 0.0, 3); } else { llSetLinkAlpha(3, 1.0, 3); } } if (message == "ShowHideRightPeck") { if(isOn) { llSetLinkAlpha(3, 0.0, 6); } else { llSetLinkAlpha(3, 1.0, 6); } } if (message == "ShowHideNeck") { if(isOn) { llSetLinkAlpha(3, 0.0, 0); } else { llSetLinkAlpha(3, 1.0, 0); } } if (message == "ShowHideLowerArmLeft") { if(isOn) { llSetLinkAlpha(3, 0.0, 1); } else { llSetLinkAlpha(3, 1.0, 1); } } if (message == "ShowHideLowerArmRight") { if(isOn) { llSetLinkAlpha(3, 0.0, 4); } else { llSetLinkAlpha(3, 1.0, 4); } } if (message == "ShowHideUpperArmLeft") { if(isOn) { llSetLinkAlpha(3, 0.0, 2); } else { llSetLinkAlpha(3, 1.0, 2); } } if (message == "ShowHideUpperArmRight") { if(isOn) { llSetLinkAlpha(3, 0.0, 5); } else { llSetLinkAlpha(3, 1.0, 5); } } if (message == "ShowHideALL") { llSetLinkAlpha(LINK_SET, 1.0, ALL_SIDES); } } timer() { Pulse(); } }
-
Thanks Felix, for all the tips and help.
-
7 minutes ago, Fenix Eldritch said:
Firstly, what is the id variable initialized to? What do you expect it to be the first time anyone clicks on the object? Because it is not shown from the snipped you've posted. And if it's never actually set to anything first, then it will be NULL_KEY.
Secondly, the problem as I see it is that you're always updating dChannel and id when anyone clicks the object, even if they're not the owner. That will have repercussions for the next time the touch_start event is triggered. Consider this sequence:
- object freshly rezzed.
- person A clicks it (they are not the owner)
- in the touch_start event, dChannel is set to... something, we don't know, but ignore that for now.
- variable id is set to person A's key
- person A is not the owner , so the IF clause evaluates to false and nothing else happens.
- person B clicks the object (they are the owner)
- in the touch_start event, dChannel is set to some number based off of person A's key because id still holds that value from last time.
- variable id is set to person B's key
- person B is the owner so the IF clause evaluates to true and continues on
- llListen is called using dChannel - but remember, dChannel is based off of person A's key from the previous click. Is that what you wanted?
It's hard to say for sure without knowing more about your script, but since you only open the listen when the owner clicks, I'm assuming you only want dChannel to be based off of the owner's key. If that's accurate, then you should probably move the updating of dChannel into the same section of code where llListen is, within the IF clause.
Otherwise dChannel will always be based on the key of the previous person who clicked the object, and not the current person who clicked it (especially if they're also the owner).
This script is in an object that is rezzed in world in link 4 that acts as a button to initialise listen to the HUD that an avatar wears (I went this route to close the listen handle, as seemingly, never ending listen has impact on SIM resources - dunno how big). This is the whole script minus the UUIDs for textures, normals, specular and other settings in the listen event.
I intended to make the object listen only to the owner and their HUD. That's why I found this way of doing the channel.
If I used a random channel like -8899 on all objects, I think the HUD would react to to different people's HUDs on the ame sim (no matter how small chance it is that 2 people will buy my object).
I'm a scripter beginner, so I found this channel on forums here with Google.
I think i changed it and used LlGetOwnerKey instead of LlGetKey which was in the original post.
The reasoning for this is, I thought that llGetKey won't work as the object and the HUD will have different keys and the HUD won't work.
The id variable should work in the touch start with the if statement, so if an owner touches it, it starts the listen event, if someone else touches it. It does nothing.
I tried changing it since posting this to include this under if(id == llGetOwner)
if(id != llGetOwner)
{
//Do nothing
}
But that didn't work alone
What seemingly worked was: I changed
dChannel = ((integer)("0x"+llGetSubString((string)llGetOwnerKey(id),-8,-1)) & 0x3FFFFFFF) ^ 0x3FFFFFFF;
To
dChannel = ((integer)("0x"+llGetSubString((string)llGetOwner()),-8,-1)) & 0x3FFFFFFF) ^ 0x3FFFFFFF;
This seemingly works, I can touch the button on a different avatar, and then touch the button as the object owner and the object now responds to the HUD.
Tried this on 3 different avis, clicking the button and it still worked and the object responded.
You are correct in what you said about what was happening in the sequence.
I assumed that
id = llDetectedKey(0);
if (id == llGetOwner())
{
lHandle = llListen(dChannel, "", "", "");
Will mean that the object will only start the listen if the toucher is the owner. if it's someone else it won't listen.
Likewise I assumed if I used llGetOwnerKey, the object won't use someone else's key, but only the owners.
As I said I'm very much of a scripting beginner.
Is it OK to use it like that with llGetOwner instead of llGetOwnerKey in dChaannel?
I will try to move it within the if statement.
(I typed this on phone, sorry if there's bad formatting)
-
I have been testing my HUD and noticed it wont listen to HUD commands if the object is touched by another avatar when rezzed. (rez object - > touch the start listen button on different avi -> object wont listen). Only resetting the script manually makes it work again.
The "llOwnerSay("HUD activated. The listener will remain active for 3 minutes.");" still works on button touch but it looks like the object isnt getting any command from the HUD.
Any idea why?
Thanks!
integer dChannel; integer lHandle; key id; remove_listen_handle() { llListenRemove(lHandle); } default { changed(integer change) { if (change & CHANGED_OWNER) { llResetScript(); } } on_rez(integer start_param) { llResetScript(); } touch_start(integer total_number) { dChannel = ((integer)("0x"+llGetSubString((string)llGetOwnerKey(id),-8,-1)) & 0x3FFFFFFF) ^ 0x3FFFFFFF; id = llDetectedKey(0); if (id == llGetOwner()) { lHandle = llListen(dChannel, "", "", ""); llOwnerSay("HUD activated. The listener will remain active for 3 minutes."); llSetTimerEvent(180.0); } } listen(integer channel, string name, key id, string message) .............. timer() { remove_listen_handle(); } }
-
2 minutes ago, ChinRey said:
The boudnign box of the linkset as a whole doesn't matter, it's the one for each part of it. So, if one part is 0.1 cm in size along any axis you wn't be able to scale down the linkset.
I figured it out as to why it works on beta grid and not on the main grid according to what you mentioned. You were correct.
On beta grid I left the logo as 0.1, 0.1, 0.1 cube. On main grid I squished the logo cube on y axis to 0.01. That is why I was unable to scale it down on main grid.
When making the lenght on y axis back to 0.1, I am able to scale the object down properly now.
Thank you!
- 1
-
I have a linkset object with 7.4, 3.8, 0.5 bounding box and I am unable to scale it down on main grid.
I can scale the object down from identical dae files on beta grid. The link numbers are the same on main and beta grid. Trying to scale it down with Shift+ctrl + drag in edit mode. I can scale it up.
Any idea why?
-
7 minutes ago, Frionil Fang said:
Pretty sure that shouldn't happen, so I'm gonna guess using them on the beta grid caused them to be cached, and your viewer still sees a valid cache entry while you're on the main grid so it shows you that copy. Try clearing cache and see if your beta uploads stop showing.
Aaaaand you are right.
Cleared the cache and the textures are gone. The object just had grey blank textures.
I knew it was too good to be true! But I thought texture cache is separate for each avatar, thats why I was surprised I can still see the textures on my alts.
-
I made my HUD script and uploaded textures on beta grid to test it out, and now I copied the script along with beta grid texture UUIDs - and they work on the main grid?
I tried to relog and log in on my alts to see and I can see the textures normally (minus 1 which didnt carry over.). The normals and speculars work too.
Can I use the UUIDs or should I re upload them on the main grid?
Why do they work if beta grid is a separate entity?
-
Yep, all fits now! No changing size between LODs.
I had issue with physics shape though. Had to be set to PRIM but sometimes the LI jumped from 10 to 24, the other time the LI actually increased when scaled down and stayed the same when scaled up.
So I fixed it by making a separate object with the physics set to convex hull, joined them, and set the original to NONE. No LI increase so its propably fine.
-
Turns out I was doing it wrong...
For some reason I was making the LODs fit the bounding box and not the main object mesh and also doing the mirrored objects at once so I actually only had half the bounding box.
This time I made triangles diagonal across each other on X and Y and Z axis for each mirror and now the bounding boxes and LOD swap distance is identical across the objects.
-
9 objects uploaded as 1.
I have been trying to optimise my mesh LODs for the lowest LI but running into a problem where 4 (2 mirrored) objects Med>LOW LOD swap distance is 49m, while the other 5 objects have Med>Low LOD swap distance 77.6 - 78.2m.
This is kind of breaking the LOD1 impostor swapping in as between 49 and 78 m camera view theres an empty space in between and it doesnt look good.The impostor is part of the 78m Object and is both sided planes with baked material (so it looks like the object from far away but its actually just planes). The 49m object gets removed in LOD1 and LOD0 and is replaced by the impostor. I have tried leaving triangles at the edges on all sides where the 4 objects are to keep the object same proportions but that didnt seem to help.
49m seems far enough, who cares about LODs! /s
Is it something to do with bounding boxes?
The whole object bounding box is <7.522, 1.66, 3.922>. Only importing the part with the "bad" LOD swap gives me a bounding box of <7.340, 1.32, 3.7468>.
I managed to make it swap correctly once or twice when trying uploads with lowest LI but I have since merged/deleted objects/faces and I cant seem to make it so it swaps at the same distance again.
Thanks.
-
Is it possible to create a HUD that detects which face was touched and it relays the info to another mesh? For example, I'd click a a face with an image of red dress..and the click would relay the uuid to the dress and apply the texture.
Asking because this seems a quicker and better solution to standard huds. You create the main prim, and the prim buttons and textures.
Doing with UV seems simpler because you create the layout as a plane in blender, assign materials to the faces you want and then use the exported UV map to Photoshop as foundation for face buttons than you need.
IS that how mesh bodie alphas in HUD menu works? You click a piece likes leg. And it hides the leg.
IS it possible to do?
-
-
I think I read something about the uploader will increase vertex count /split normals on hard surfaces sharp edges?
Like a cube, it has 8 vertices, but when you go upload it. The vertice count will get bigger, presumably by the engine splitting the vertices .
1. Keep it like it comes from blender and let the uploader handle it.
2. Use split vertex normal modifier.
3. Set object to smooth, rip vertices on the same position to get rid of shading artifacts.
is any of these 3 the best way to go?
Asking because I exported some game models from and other game (to learn) and most of the models are set the shade smooth and it seems like each vertex point is actually 3 more in the same space.
When I merge them I get a message that 700 vertices has been removed and it creates shading artifacts.
It's a game ready asset so I assume it's the correct way to do it?
I get a feeling that this is not very important but I'm curious.
Thanks!
-
I recently got a devkit (meshbody classic) and I've been wondering about how to correctly use it to make pants.
The devkit comes with legs very close together and it's nearly impossible to fit or model around it.
So I thought I can just move the legs 5 degrees to the sides, well apparently you can't.
When I rig it and import it in SL, the mesh is wider on the sides. I think it's because of the legs I rotated?
Anyone would tell me the correct way to do it?
I tried applying the rotation as restpose in avastar but that yields the same result.
Thanks!
-
I wanted to create a simple tattoo that's between the clavicle and elbow.
I got thestandard UV layout from a website.
So I wanted to use this layout (imagine small circles going around the upper arm creating this sort of tattoo.
Im using affinity photo and copy pasted the circles around the places where they (think) should be.
Well, there's this stretching goin on. Some circles are stretched, some are not.
The hands on the UV are not leveled , so I am also having a difficult time matching between the seams.
Also tried substance painter, but doing it with painter creates black edges even with no padding or dilation.
Anyone can point me in the right direction?
Thank you!
-
Thanks everyone!
- 1
-
I've been thinking which bodies, female and male are most used nowadays?
I haven't shopped in SL for ages so I'm in the dark now.
Ultimately I would like to apply for devkits.
Any idea which body creator has the best chance of getting a devkit?
I know there's maitreya, ebody, lithium(?).
I think there's also one body from the mesh project, but not sure if they rebranded.
Thanks!
-
16 hours ago, Lucia Nightfire said:
Make sure you're not getting bit by this bug.
The last comment explains what is going on.
Wow..so after I tried the script you provided and reattached my attachment I got this:
Left Hand got 1 attachment at risk - listed as the correct attachment. This is what I saw when I made this thread (only I swapped the hands in the title x.x) When I detach this L hand object it keeps on playing R animation.
Right hand tells me theres 11! attachments at risk. Including my hair, body, head (which should not matter as rigged objects dont play animations, unless its animesh..i guess?)and also the L hand attachment.
I am having a hard time understanding how to determine which key is lower. Is there any way to circumvene this? Do I just copy paste objects and wish for a different key?
But then theres a chance the other object will get a lower key.
Since the bug seems to be from 2018, I think I will just have to live with it.
-
I seem to have run into a small problem.
I have an object that has animations for the left hand (keyframed L bones) and an identical object with the same mirrored animation for right hand.
I'm using this snippet from llStartAnimation wiki
attach(key id)
{
if (id)
{ // If it was just attached, request permission to animate.
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
}
else
{ // It's being detached...
if (llGetPermissions() & PERMISSION_TRIGGER_ANIMATION)
{ // If we have permission to animate, stop the animation.
llStopAnimation(animation_name);
}
}
}
I'm stopping animations on detach in the else flow control (where // it's being detached).
The problem is if I detach the right hand object the animations in left hand stop and vice versa.
I made sure multiple times that neither animation contains keyframes from the opposite hand. I keyframed only the bones I need and exporting as .anim.
I've noticed that just opening an animation in my inventory (not hitting play ) stops the animations from playing and get stuck.
Is stopping the animations on detach the correct way to script and object or can I just delete the lines?
Im curious as to why detaching one side object stops animation in the other hand, if the animation doesn't contain keyframes from the other hand.
Im using priority 5 animation because I want the animation to play over AO but got the same result with priority 6.
I wasn't sure whether to post this in here or scripting forum. What is the reason the animation stop by just opening the animation window from the inventory?
-
Thanks everyone!
PBR is coming...
in Building and Texturing Forum
Posted
This is the next thing I wanted to ask...does the SL viewer downscale textures with camera distance?