Jump to content

carley Greymoon

Resident
  • Posts

    53
  • Joined

  • Last visited

Posts posted by carley Greymoon

  1. are you saying you know how to make the clothes and rigging if you had the avatars? if so then you have to see if they have a developer kit, they likely do. find out the creator and look for some info or contact them.

     

  2. to take care of your "crumble" problem. press Ctrl+Alt+d to turn on the menu named “Advanced”. at the bottom of that menu, second to last, it says "show debug settings", click on that, a window opens, scroll until you find RenderVolumeLODFactor click on that and increase it to 4. you can go higher up to 8 (personally that is where i keep it) but mostly people say 4 is good enough. after you do that your scuplties won't crumble when you zoom out. remember that setting because firestorm likes to change it back to 2 when it feels like and you'll have to change it back again every once in a while.

    as for making mesh. blender is a very hard program to learn, especially for someone who doesn't know much about 3D to begin with.  you should start with some easier programs and as you start to get some idea of mesh creation you can move on to learning blender. a good program to start with is sculptris, it is a free program by the makers of Zbrush, you can find it here http://pixologic.com/sculptris/

    after you make something in sculptris, you have to export it as an .obj file. but sl does not support .obj mesh files, you can only upload .dae format. so here is where a little blender is needed. open blender, go to "file" click "import" and then select "wavefront (.obj), then browse to your file and import it. then right click on your object(mesh) and go back to file and click "export" then select "collada (dae)". then open your sl viewer, go to "build" and choose "upload> mesh model". then browse to your .dae file and select it. it will show up in the uploader window. check the box that says "generate normals", then press "calculate weights and fees" and after a little bit the same button will say "upload" click that. your mesh will be uploaded to sl.

    doing this will get you started in understanding mesh.

  3. On 9/27/2017 at 6:25 AM, nomedgrl said:

    ive ben looking everyone for them but i cant find them. i dont know if she took them down because she got bigger and didnt want people to know what she does. or they just vanished 

    im wondering if anyone knows where i can find them or if anyone reuploaded them

    because i personally feel they would help out allot for anyone wanting to become a photo editor for secondlife

    i can't help you directly, but if they were on a website, you can try finding it through the waybackmachine web archive.

  4.  

    ahhh ok  i get it. :)  and the llDialog method sounds very coolB|

    I learned a lot from this thread. Thanks again, without people like you, Rolig and Nova life would be much harder.

     

    13 minutes ago, Fluffy Sharkfin said:

    in the original script that I posted earlier the textures are meant to be sent in a certain order (head, torso, lower), the script simply assumes that's the order in which the three UUIDs have been sent and applies them to the corresponding bodyparts.

    As for the new script, since you're sending them one at a time you have to specify which bodypart it applies the texture to and include that information in the message (i.e. "torso,111-1111-1111-111" or "lower,222-2222-222").  As I suggested earlier you could include an llDialog command to open a menu with three buttons (head, torso, lower) then when the user presses one the script automatically opens the text input window to allow them to input the texture UUID.  That way they don't have to type in the name of the bodypart they can just select it from the menu, but having separate buttons for each section works just as well (although you can also do that using a single script rather than three separate ones if you put the script in the root object and use llDetectedLinkNumber() in the touch event). ;)

     

    Anyway, I'm glad it's working for you now! :)

     

  5. oh wow, Thank you so much Fluffy:) it's working now as separate scripts. one for each section. 3 sections each with their own buttons. which is just fine with me, it serves my purpose.

    but i don't understand how all 3 could work with one script. the user can input 3 UUIDs into one text box? i know you must be right, i just don't get how the script could know which UUID belongs to what section. lets say the torso texture UUID is 111-1111-1111-111 and the lower is 222-2222-222. how could the script know texture 111-1111-111 belongs to list torso = [42, 43, 44, 45, 46, 47, 48, 49, 53, 54, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134];?

    in any case i thank you profusely:) and everyone else as well.

  6. i just tried the script again as a whole and the only part that gets the texture set is the head section, wich is also the root prim.


    list head = [1];
    list torso = [42, 43, 44, 45, 46, 47, 48, 49, 53, 54, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134];
    list lower = [50, 51, 52, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93];

    setTexture(list link_numbers, key texture)
    {
      integer i;
      for (i=0; i < llGetListLength(link_numbers); i++)
        llSetLinkPrimitiveParamsFast(llList2Integer(link_numbers,i), [PRIM_TEXTURE, ALL_SIDES, texture, <1,1,0>, <0,0,0>, 0.0]);
    }

    default
    {
      state_entry()
      {
        llListen (-xxxxxx,"","","");
      }

      listen(integer channel, string name, key id, string msg)
      {
        if (llGetOwnerKey(id) == llGetOwner()){
          list textures = llCSV2List(msg);
          setTexture(head,llList2Key(textures,0));
          setTexture(torso,llList2Key(textures,1));
          setTexture(lower,llList2Key(textures,2));
        }
      }
    }

    i also tried it with llList2String, same result, only the head section gets the texture set.

     

  7. 1 hour ago, Nova Convair said:

    This doesn't work:

    
     listen(integer channel, string name, key id, string msg)
     {
        if (llGetOwnerKey(id) == llGetOwner()){
          list textures = llCSV2List(msg);
    
          setTexture(lower,llList2Key(textures,2));
        }
     }

    msg is a string
    the list you compose out of msg consists of strings
    llList2Key only works if the list has stored a key it does not convert a string to a key
    you need to use:

    
    setTexture(lower,(key)llList2String(textures,2));

     

    hi Nova, i just tried that and i still get the same result, the lower section just turns gray. when open the edit panel it show a gray texture in the texture window same as before.

    this is the script with your change:

    list lower = [50, 51, 52, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93];

    setTexture(list link_numbers, key texture)
    {
      integer i;
      for (i=0; i < llGetListLength(link_numbers); i++)
        llSetLinkPrimitiveParamsFast(llList2Integer(link_numbers,i), [PRIM_TEXTURE, ALL_SIDES, texture, <1,1,0>, <0,0,0>, 0.0]);
    }

    default
    {
      state_entry()
      {
        llListen(-xxxxxx,"","","");
      }

      listen(integer channel, string name, key id, string msg)
      {
        if (llGetOwnerKey(id) == llGetOwner()){
          list textures = llCSV2List(msg);

          setTexture(lower,(key)llList2String(textures,2));
        }
      }
    }
    -----------------------------------------------------------------------

    this starting to get weird. i'm wracking my brain to think of something i might be overlooking and not including here but i can't think of anything.

    i'm sorry to be such a pain. i get the feeling once it is figured out why it's not working i'm going to feel bad for having overlooked mentioning some thing.

  8. On 9/27/2017 at 4:18 AM, GunshotOwner said:

    hi, i try to fix a problem but cant find information about it.

    i create a cloth and then import it to zbrush to add more details. after i finish it, i export it and import it to blender then rig it. In blender everything looks fine, moves perfect with bones and with the avatars. But when i try to upload it to second life, it cant find data. All settings are zero. 

    so i try to understand, i miss something in zbrush? or i do something wrong in blender while i rig it. Cuz when i try to upload it without rigs, just dae file, i can upload it to second life.

    but after i rig, i cant upload avastar dae file to second life.

    is it a wrong way to join seperate meshes, and rig them together to the bones? cuz i tried to create parents between seperate meshes, then rig them to the bones. it became weird, cant let them move together in a smooth way. or do i need to rig them totally seperate, and upload to sl seperate, then join them in sl? 

    btw i hope i could explain my problem,with my bad english :) 

    not sure if this is may be the issue but are you using mirror and weld in Zbrush? sometimes blender has issues with mirrored objects.

    also i am guessing you are using firestorm to upload. if you are when you get the "can't find data" error. trying using the official SL viewer to upload. it's happened to me many times and caused me a lot of grief until i decided it could not be the mesh so i tried the sl viewer and boom upload without issue. 

  9. 8 hours ago, Ark Vuckovic said:

    I'm reliatively new to rigging in Blender a now learning all the tricks yet. Could you, please, clarify how should I transfer the weights? 

    try this. before you bind the shirt to the rig, make the underlying avatar visible, then you when you go to bind it, choose "from meshes" from the drop down menu located right by the bind to rig button. avastar will then use the weights of the visible mesh to apply weights to your shirt.

    to transfer weight paints. click on the "tool" tab, that is the top tab on the left panel, same place the avastar tab is only above it. then right click on the mesh that has the weights, hold down shift and right click on the mesh that receives the weights. then at the bottom of the window where it says "object mode", open that and select "weight paint". then scroll to the bottom of the tool tab and you will see "transfer weights" click that. the weights from the first mesh you selected will transfer to the second mesh you selected. then switch back to object mode.

  10. learning blender would be really awesome for you, but if you are willing to spend about a couple of hundred dollars for some programs, your life and learning curve will be so much easier.

    for making mesh you can buy Zbrush core. i think it is about $135. you can do much of what can be done in Zbrush proper except paint. Or you can buy a fully featured version of 3d coat for $99 which is a very powerful program for both mesh creation and painting textures, UV unwrapping, material maps and other things. It really is an outstanding program for the price.

    a great image editor is Paintshop Pro. it costs $99, sometimes you can find it on sale for $69. it is VERY easy to learn and has just about every feature you will need. or you can go with Gimp, which is free.

    as for rigging meshes such as Avatars, you will need "Avastar" plugin for blender. that costs about $25. it is soooooooo worth it and spare you much grief.

    so with Zbrush/3D Coat, PaintShop/gimp and blender with Avastar. you will advance much more rapidly than if you just used blender and Photoshop.

    try the demo versions of the programs i mentioned and see for yourself.

  11. this is a bit old, not sure if it's still of interest to you, but from looking at that texture it is clear the avatar has it's own unique set of UVs. no texture will fit it properly other than a texture that maps to the avatar's UVs. there are some hackney tricks you can try, like taking a screenshot of that texture, then in an external photo editor like gimp you can crop the screenshot to the edges of the texture, then resize it to 1024 x 1024. then you can use it as a template guide to make something new. but given the layout of that texture you are not likely to get good results.

    short of getting the original mesh into a 3d program you are out of luck. the only other thing you can try is to contact the creator and ask if there is anything they can do for you.

  12. hi Rolig, the texture UUID is input by the user via a text box. this is the code of the sender script

    default
    {
        state_entry()
        {
            llListen(-xxxxxx,"","","");
        }

        touch_start(integer total_number)
        {
            llTextBox(llDetectedKey(0)," \n Enter a texture UUID",-xxxxxx);
        }
       
        listen(integer channel, string name, key id, string msg)
        {
            llRegionSay(-12345,msg);
        }
    }

    and this is the code of the receiver script provided by fluffy(much thanks), i modified it to split it into one script for each section, so the user would have one button per section so they could apply textures independently.

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    list lower = [50, 51, 52, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93];

    setTexture(list link_numbers, key texture)
    {
      integer i;
      for (i=0; i < llGetListLength(link_numbers); i++)
        llSetLinkPrimitiveParamsFast(llList2Integer(link_numbers,i), [PRIM_TEXTURE, ALL_SIDES, texture, <1,1,0>, <0,0,0>, 0.0]);
    }

    default
    {
      state_entry()
      {
        llListen(-xxxxxx,"","","");
      }

      listen(integer channel, string name, key id, string msg)
      {
        if (llGetOwnerKey(id) == llGetOwner()){
          list textures = llCSV2List(msg);

          setTexture(lower,llList2Key(textures,2));
        }
      }
    }

     

     

  13. hi Fluffy, no worries, i'm just grateful for the help.

    i got it all set up and the scripts, the sender and receiver are communicating but the texture is not being set, instead it just turns gray. could it be the texture UUID is not getting passed onto the receiver script?

  14. 26 minutes ago, Rolig Loon said:

    Are you actually coloring those test prims Red (<1,0,0>), Green (<0,1,0>) and Blue (<0,0,1>), not just some random reddish, greenish, bluish colors?  As written, that little script will be looking for pure hues.

    hi rolig, yes that was the problem. in the color picker i was using "rgb" with the values of 100, 0 ,0 and so on instead of "lsl". thanks for that:)

    i'm going to try the mesh now:) i'll be back a bit later with hopefully some good news:)

  15. 1 hour ago, Fluffy Sharkfin said:

    Well, it's not automatic but you can do it with a simple script like so...

    
    default
    {
        state_entry()
        {
            integer i;
            vector color;
            list head = [];
            list torso = [];
            list lower = [];
            for (i=1; i<=llGetNumberOfPrims(); i++)
            {
                color = llList2Vector(llGetLinkPrimitiveParams(i,[PRIM_COLOR,0]),0);
                if (color == <1,0,0>)
                    head = head + [i];
                else if (color == <0,1,0>)
                    torso = torso + [i];
                else if (color == <0,0,1>)
                    lower = lower + [i];
            }
            llOwnerSay("\nlist head = ["+llList2CSV(head)+"];\nlist torso = ["+llList2CSV(torso)+"];\nlist lower = ["+llList2CSV(lower)+"];");
        }
    }

    ... just tint the different sections red, green and blue and then drop the above script in and it will output the lists of link numbers for each section complete with formatting so you can just copy and paste, replacing the first three lines of the other script.

    hi fluffy, i tried the script but the only output i got in chat was

    list head = [];
    list torso = [];
    list lower = [];

    no face numbers.

  16. i don't think i can use setlink. imagine an avatar, it is one mesh( 1 linkset) but has 3 sections, the head, torso and lower with 3 different textures. separating the sections into their own object, then i could apply the texture to the whole thing with SetLink but then each section would have to be worn separately, meaning a person would have to use 3 attachment points.

    so that's why i put a script in each part, in essence i grouped them by using different listening channels for each section.

    before i added the owner check it work really well, no issues at all.

     

    Nova, i had no idea it should check if it did indeed receive a UUID but it sounds logical that it should, thank you for pointing that out and providing an example snippet. i will try to insert that bit.

    i'm not sure what you mean by number 3. i myself can change other things to get it to update eventually but i can't ask that of users, although i'm sure i'm not understanding what you mean.

     

  17. hi, i'm making a texture change HUD. the code i used was:

    default
    {
        state_entry()
        {
            llListen (-xxxxx,"","","");
        }

        listen(integer channel, string name, key id, string msg)
        {
            llSetTexture(msg,ALL_SIDES);
    }

    that worked perfect. you wore or rezzed the object, click on the HUD, enter the UUID and all the parts changed very fast and reliable. trouble was anyone else using the same HUD could change the texture on your object as well.

    so to make it owner specific i added

    if (llGetOwnerKey(id) == llGetOwner()) making it:

     

    default
    {
        state_entry()
        {
            llListen (-xxxxxx"","","");
        }

        listen(integer channel, string name, key id, string msg)
        {
            if (llGetOwnerKey(id) == llGetOwner()){
            llSetTexture(msg,ALL_SIDES);
            }
        }
    }

     

    that technically works but it is very glitchy, sometimes the linkset goes randomly transparent, other times just some parts get the texture. reapplying the same texture does nothing, using a different texture makes everything change again but wit the same randomness and unreliable. only after 4 or 5 tries does it finally work right. it's maddening.

    i'm guessing it is lag and that when the desired texture finally gets into the cache it works. can it be that adding the get owner key and comparing it causes too much lag and it makes the scripts fail randomly?

    this script goes into an object with about 90 prims. in other words there is 90 iterations of the script firing at once.

    is that the problem and is there a better way of doing it?

    i'm new to scripting and have just cobbled together code i've found here and on other sites.

    thank you for any help.

     

     

     

×
×
  • Create New...