Re: Looking for artists
PS: and it has been scientifically proved that websites using HTML tables for non-tabular data can't be serious. lol, that one killed me dude. 2013/9/23 Graham D Clark mailgrahamdcl...@gmail.com No I don't think they are based in Scottsdale thats Domainsbyproxy.com, maybe go down the other paths to Techstudios LLC, to Techstudios.net and keep if you have the time. Lucky to have a job right now, so I don't. Next time they'll ask you to answer a riddle to apply. Domain Name: BCVIPSTUDIO.COM Registrar: WILD WEST DOMAINS, LLC Whois Server: whois.wildwestdomains.com Referral URL: http://www.wildwestdomains.com Name Server: NS57.DOMAINCONTROL.COM Name Server: NS58.DOMAINCONTROL.COM Status: clientDeleteProhibited Status: clientRenewProhibited Status: clientTransferProhibited Status: clientUpdateProhibited Updated Date: 16-sep-2013 Creation Date: 16-sep-2013 Expiration Date: 16-sep-2014 bcvipstudio.com registrar whois Updated 1 minute ago Domain Name: BCVIPSTUDIO.COM Updated Date: 2013-09-16 20:48:52 Creation Date: 2013-09-16 20:48:52 Registrar Expiration Date: 2014-09-16 20:48:52 Registrar: TechStudios, llc Registrant Name: Registration Private Registrant Organization: Domains By Proxy, LLC Registrant Street: DomainsByProxy.com Registrant Street: 14747 N Northsight Blvd Suite 111, PMB 309 Registrant City: Scottsdale Registrant State/Province: Arizona Registrant Postal Code: 85260 Registrant Country: United States Admin Name: Registration Private Admin Organization: Domains By Proxy, LLC Admin Street: DomainsByProxy.com Admin Street: 14747 N Northsight Blvd Suite 111, PMB 309 Admin City: Scottsdale Admin State/Province: Arizona Admin Postal Code: 85260 Admin Country: United States Admin Phone: (480) 624-2599 Admin Fax: (480) 624-2598 Admin Email: [image: email]@domainsbyproxy.com Tech Name: Registration Private Tech Organization: Domains By Proxy, LLC Tech Street: DomainsByProxy.com Tech Street: 14747 N Northsight Blvd Suite 111, PMB 309 Tech City: Scottsdale Tech State/Province: Arizona Tech Postal Code: 85260 Tech Country: United States Tech Phone: (480) 624-2599 Tech Fax: (480) 624-2598 Tech Email: [image: email]@domainsbyproxy.com Name Server: NS57.DOMAINCONTROL.COM Name Server: NS58.DOMAINCONTROL.COM The data contained in this Registrar's Whois database, while believed by the registrar to be reliable, is provided as is with no guarantee or warranties regarding its accuracy. This information is provided for the sole purpose of assisting you in obtaining information about domain name registration records. Any use of this data for any other purpose is expressly forbidden without the prior written permission of this registrar. By submitting an inquiry, you agree to these terms of usage and limitations of warranty. In particular, you agree not to use this data to allow, enable, or otherwise make possible, dissemination or collection of this data, in part or in its entirety, for any purpose, such as the transmission of unsolicited advertising and solicitations of any kind, including spam. You further agree not to use this data to enable high volume, automated or robotic electronic processes designed to collect or compile this data for any purpose, including mining this data for your own personal or commercial purposes. Please note: the owner of the domain name is specified in the registrant section. In most cases, the Registrar is not the owner of domain names listed in this database. Graham D Clark, Head of Stereography, Deluxe 3D dba Stereo D phone: why-I-stereo http://www.linkedin.com/in/grahamclark On Sep 22, 2013, at 7:16 PM, Sebastien Sterling sebastien.sterl...@gmail.com wrote: Are you Based in Scottsdale ? On 23 September 2013 01:10, Guillaume Laforge guillaume.laforge...@gmail.com wrote: The reason we decided to post a job offer in this list, is more than evident. You never said it was a job offer. On Sun, Sep 22, 2013 at 6:29 PM, BC Artist Pool softimage.l...@bcvipstudio.com wrote: As Mirko said. We are all grown ups here. The reason we decided to post a job offer in this list, is more than evident. We appreciate your feedback in the way we are handling our talent search. You believe that we are not serious because we have a page with HTML tables, it's ok. You don't like the Intrigue and Drama as you say, It is ok. You believe it is a scam. Ok no problem also. And as we are a studio, yes, we have a limited number of seats. We respect your feelings, and we also respect if you don't want to send a simple e-mail to find out more. But we are not changing our strategy. As you can see, a lot is being filtered out already by itself. People that really want more information are sending the mail, and they are being attended properly. Our main 3D core is based on Softimage and that is why we decided to post to this mailing list in first place, a list which we respect.
Re: Open source json camera I/O platform
well job Gene, I would now spent a bit of time on the code itself to make it more flexible. It would be great to have clear separation between plugins, core lib and ui code imho. @Alan, don't do that please... http://en.wikipedia.org/wiki/Year_2038_problem 2013/7/11 Alan Fregtman alan.fregt...@gmail.com Minor pet peeve with how you're storing date and time as a string... you're missing seconds! but I think it might be more efficient to store the unix timestamp (seconds since epoch) instead of a fully formatted long string. Let the reader module handle the datetime formatting. On Thu, Jul 11, 2013 at 9:41 PM, Gene Crucean emailgeneonthel...@gmail.com wrote: Update: https://bitbucket.org/crewshin/json-cam Output file: https://bitbucket.org/crewshin/json-cam/src/bae3c009d10002aa6d033036079064eda9d4d8d0/FromSoftimage.cam?at=master ScreenGrabs: https://bitbucket.org/crewshin/json-cam/src/bae3c009d10002aa6d033036079064eda9d4d8d0/Export.png?at=master https://bitbucket.org/crewshin/json-cam/src/bae3c009d10002aa6d033036079064eda9d4d8d0/Import.png?at=master Spec: https://bitbucket.org/crewshin/json-cam/src/bae3c009d10002aa6d033036079064eda9d4d8d0/SPEC_1.0.txt?at=master Thoughts so far? I should have Maya in the next day or so. Btw, feel free to send pull requests for tweaks if interested. @Jordi: Wanna give that Houdini .otl a test? On Thu, Jul 11, 2013 at 8:56 AM, Gene Crucean emailgeneonthel...@gmail.com wrote: RE animatable parameters: This spec currently allows for any param to be animatable by just adding it to the anim dictionary. All the importers/exporters would have to do is simply check if any param besides transforms exist and add keyframes. This would be left up to the individual app scripts to implement, but the spec itself would allow for anything to be animatable. On Thu, Jul 11, 2013 at 1:41 AM, Michael Heberlein micheberl...@gmail.com wrote: A bit off-topic already :) but I just found pyalembic in Gohlkes invaluable Windows binaries list: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyalembic But I also agree that something as simple and readable as JSON would be cool to have for (plotted?) world-space camera exchange. And _all_ parameters should be animatable. Michael On Thu, Jul 11, 2013 at 6:17 AM, Raffaele Fragapane raffsxsil...@googlemail.com wrote: The unit needs only be an arbitrary value in the header. Autodesk can say whatever it wants, but the truth is that if you change maya from imperial to metric at the beginning of a project (and you might have that on client's side) there will be repercussions, and if your cameras were intended as 1cm but get imported as 1 inch things will be out of whack. Majorly. Several parameters, especially so if this will get a further level of abstraction later on, are actually world scale dependent. The flm back can change with a unit change (in some apps it does, in some it doesn't), several rendering and grooming parameters change and so on. As for scale, I've had plenty instances when the camera was scaled for various reasons, frequently enough to be relevant entire chunks of a pipe would rely on a stupid-renderman-trick style scaled camera. On Thu, Jul 11, 2013 at 2:10 PM, Gene Crucean emailgeneonthel...@gmail.com wrote: Thanks for the input guys! I'm ingesting all of it :) I'm quite against adding units into the main camera section of the file... but what about adding them to the metadata section? I really don't understand why anyone would want this in the file though. Units should only be conceptual imo. Autodesk says that 1 SI unit = 1 decimeter, but it has no concept of units... at all. Our current project is in meters, so conceptually we just know that 1 SI unit = 1 meter. Did we change anything? Nope. Same thing in Maya... 1 unit = 1 meter. Didn't change a thing on the Maya side either. I would love for someone to give me an example of why this should be different. Either way, I'll have an update tomorrow at some point, along with i/o for Houdini and updated Soft scripts. Maya is next and then hopefully I can talk one of our Nuke dev's into banging out an importer. Unless someone on here knows it's API and want's to donate some skills (once the 1.0 spec is finished). Same with any other apps :) Cheers On Wed, Jul 10, 2013 at 6:59 PM, Matt Lind ml...@carbinestudios.comwrote: I started a toolset a few years ago based on XML as well. It works and I can store robust data, but the downside is the file sizes are huge and slow to read/write. Memory becomes an issue at some point. If you only want to transfer cameras or simple stuff, it works fine, but large scenes with lots of animation data is not advised with XML as other formats may be better suited. ** ** Matt ** ** ** ** ** ** ** ** ** ** *From:* softimage-boun...@listproc.autodesk.com [mailto: softimage-boun...@listproc.autodesk.com] *On
Re: Open source json camera I/O platform
@Alan, indeed, I usually tend to stay simple... datetime.datetime.now().strftime(%Y%m%d%H%M%S) '20130711232548' is imho acceptable as the number of bytes is constant and the format is easy and fast to parse for the datetime implementation. you still might find crazy stuff to pack a timestamp, though, I don't see any direct benefits. @Gene, I know. I am going to have more free time this summer, I might give a hand. 2013/7/11 Gene Crucean emailgeneonthel...@gmail.com Hehe... I love unixtime and use it for all kinds of stuff. The way I see it, if my code is still around in 2038, I did DAMN good :D I feel ya Jo. I'd love to abstract all this but my Python skills are weak at best. I'm an Obj-C guy and can't stand python to be honest. Please feel free to tweak it and shoot me a pull request if you feel strong enough about it. On Thu, Jul 11, 2013 at 11:15 PM, Alan Fregtman alan.fregt...@gmail.comwrote: *Oh my...* So what's the ideal short-form datetime storage? A long string? On Fri, Jul 12, 2013 at 2:00 AM, jo benayoun jobenay...@gmail.comwrote: well job Gene, I would now spent a bit of time on the code itself to make it more flexible. It would be great to have clear separation between plugins, core lib and ui code imho. @Alan, don't do that please... http://en.wikipedia.org/wiki/Year_2038_problem 2013/7/11 Alan Fregtman alan.fregt...@gmail.com Minor pet peeve with how you're storing date and time as a string... you're missing seconds! but I think it might be more efficient to store the unix timestamp (seconds since epoch) instead of a fully formatted long string. Let the reader module handle the datetime formatting. On Thu, Jul 11, 2013 at 9:41 PM, Gene Crucean emailgeneonthel...@gmail.com wrote: Update: https://bitbucket.org/crewshin/json-cam Output file: https://bitbucket.org/crewshin/json-cam/src/bae3c009d10002aa6d033036079064eda9d4d8d0/FromSoftimage.cam?at=master ScreenGrabs: https://bitbucket.org/crewshin/json-cam/src/bae3c009d10002aa6d033036079064eda9d4d8d0/Export.png?at=master https://bitbucket.org/crewshin/json-cam/src/bae3c009d10002aa6d033036079064eda9d4d8d0/Import.png?at=master Spec: https://bitbucket.org/crewshin/json-cam/src/bae3c009d10002aa6d033036079064eda9d4d8d0/SPEC_1.0.txt?at=master Thoughts so far? I should have Maya in the next day or so. Btw, feel free to send pull requests for tweaks if interested. @Jordi: Wanna give that Houdini .otl a test? On Thu, Jul 11, 2013 at 8:56 AM, Gene Crucean emailgeneonthel...@gmail.com wrote: RE animatable parameters: This spec currently allows for any param to be animatable by just adding it to the anim dictionary. All the importers/exporters would have to do is simply check if any param besides transforms exist and add keyframes. This would be left up to the individual app scripts to implement, but the spec itself would allow for anything to be animatable. On Thu, Jul 11, 2013 at 1:41 AM, Michael Heberlein micheberl...@gmail.com wrote: A bit off-topic already :) but I just found pyalembic in Gohlkes invaluable Windows binaries list: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyalembic But I also agree that something as simple and readable as JSON would be cool to have for (plotted?) world-space camera exchange. And _all_ parameters should be animatable. Michael On Thu, Jul 11, 2013 at 6:17 AM, Raffaele Fragapane raffsxsil...@googlemail.com wrote: The unit needs only be an arbitrary value in the header. Autodesk can say whatever it wants, but the truth is that if you change maya from imperial to metric at the beginning of a project (and you might have that on client's side) there will be repercussions, and if your cameras were intended as 1cm but get imported as 1 inch things will be out of whack. Majorly. Several parameters, especially so if this will get a further level of abstraction later on, are actually world scale dependent. The flm back can change with a unit change (in some apps it does, in some it doesn't), several rendering and grooming parameters change and so on. As for scale, I've had plenty instances when the camera was scaled for various reasons, frequently enough to be relevant entire chunks of a pipe would rely on a stupid-renderman-trick style scaled camera. On Thu, Jul 11, 2013 at 2:10 PM, Gene Crucean emailgeneonthel...@gmail.com wrote: Thanks for the input guys! I'm ingesting all of it :) I'm quite against adding units into the main camera section of the file... but what about adding them to the metadata section? I really don't understand why anyone would want this in the file though. Units should only be conceptual imo. Autodesk says that 1 SI unit = 1 decimeter, but it has no concept of units... at all. Our current project is in meters, so conceptually we just know that 1 SI unit = 1 meter. Did we change anything? Nope. Same thing in Maya... 1 unit = 1 meter. Didn't change
Re: Open source json camera I/O platform
Hey Gene, that's a very good idea and if well developed could de facto become useful to many studio outta here (most comes with their own because of this lack of standard that would answer any needs). Some rough notes though if I may: - unit: as soon as you store transforms in a file, you want to keep track of what units have been used (houdini, maya, etc are not using the same scene units as units are usually set per show) - camera rigs: cameras can be quite complex hierarchies, would be great to have a way to describe what our camera rig is and it to be correctly exported. - scale: required (even if 1 is always assumed) - double precision: do we really need to store so high precision doubles for transforms? (having an option would be nice) - file format: your backend should not be that tied to the exporting code (use abstraction)... for many studios, json is not suitable and they might prefer for legacy reasons to use others or use binary formats for compression. - spec version: backward compatibility reasons - channels: allow the export of channels/extra attributes (would be parameters in softimage) - frame ranges: use frame ranges. if your range is from 0 to 99, you dont want to write an array of numbers, considering that: 10 + (90 * 2 characters) + 99 commas + ']' + '[' = 291 bytes (with no counting whitespaces + newlines chars) while '0-99x1' = 6 bytes... - namespaces: believe me this will very quickly become a nightmare! - ids: you always want ids... (for very quick comparison, and integrity checks)... we can't rely on names. - metadatas: what department produced it? for what role? has it been published as an asset? how many cameras? etc. You usually cant guess right what they would be, so allow your users to have a storage place where they can store them (available in your API as a dict or whatever datastructure for clients to manipulate them). - ... hope this contributes! :) --jonathan 2013/7/10 Jordi Bares jordiba...@gmail.com I really love the idea, if we can help surely that would good… Houdini import/export Jordi Bares jordiba...@gmail.com On 10 Jul 2013, at 14:54, Michael Heberlein micheberl...@gmail.com wrote: Sounds like a good idea. There are a few things I would like to add: I'd prefer one common class/module for file IO and all the necessary conversions like millimeters -- inches, focal length -- horizontal view angle, picture ratio -- film aperture, etc. so each application module can derive from this and stay as lightweight as possible. Another module could handle the dialogs but if they're optional, it's easier to integrate the importer/exporter into a scripted pipeline or toolbars. Plugins could just use the correct application module but be separate files again so people don't have to use them. Also, to make it not just another almost-useful tool, don't forget less common properties like optical center shift etc. required by stereo setups, for example. As you already wrote in SPEC.txt, all expected units have to be defined. Michael On Wed, Jul 10, 2013 at 8:53 AM, Sandy Sutherland sandy.mailli...@gmail.com wrote: Gene - this would be of huge interest I think - every studio I have been at we have needed to do this, and have always fudged it - never had the time to even start looking at creating a tool! So - a big yes from me! S. On 2013/07/10 5:09 AM, Gene Crucean wrote: Hey folks, Who's in the mood for some open-source camera I/O code? I'm kind of getting bummed out on having to write the same camera tools at every studio just to get a simple, lightweight and most importantly reliable camera pushed around from app to app. FBX does *not* cut it, not to mention it's not available for all apps that could make use of it. So I thought I would whip up a spec based on json and offer it up open source so anyone willing to donate some time, could create some simple tools to import/export for their favorite app. The spec is VERY lightweight and doesn't include some things that I'm sure someone will want... but please let me know your thoughts. I already have a Softimage plugin working (consider it alpha). At this point it only has minor sanity checking and logic tests and I'm sure there are a zillion ways to improve it. But it's a start. The goal is to at least have plugins that all read and write the same spec from Houdini, Softimage, Maya, Max, Blender, Nuke... and more. I've built the Soft one using PyQt and it would be nice to maintain some consistency between apps, so I'm hopeful that the other versions could be based off of the same .ui file. What do you guys think? Any interest in this? I know it's a simple thing but I'm sure a lot of you also write these tools at studios quite a bit too and could possibly be into something like this. Check out the spec and source, and if you have time, play with the Soft plugin here: https://bitbucket.org/crewshin/json-cam If you have completely zero
Re: Open source json camera I/O platform
Hey Gene, no worries, I don't take it wrong. It is tough to compile a set of arguments in a so short amount of time, but I'll give it a try. So forgive me if I repeat myself or I am not enough detailled. At the end there is always a good reason mostly driven by our own experience, the production or the studio toolset. I do believe like Alan said that you want to keep that simple and lightweight, and this is with this in mind that I suggested those additions. I am not reasoning for your tool to become THE standard but being enough generic and flexible for studios considering its integration. I will try to elaborate on some of my notes. - units are usually in productions set per show whatever software's defaults are, in other words, whatever go through the pipeline must be talked in that unit. In real-life, nothing is that perfect and often a third-party user (individuals, dept, software) tweaks the unit which lead to data-corruption and headaches for the pipeline tds if the camera gets exported without considering this. I would say most of the time this data would be there for pure debug purpose though as your format is intended to be cross-applications and might even be cross-shows, you cannot force/restrict/deduce the metrics used. Your file might also get lost somewhere in the middle of the jungle, without this critical piece of informations, the data is good for garbage. It happened more than once at work that data get exported with a different unit that the pipeline was supposed to support by the anim dept, fucking up lighter's work for example. - spec version, this information should be stored in the file itself, even if you're working with version is 1.0. Once the first cam file will be exported and published as an asset, the asset and file will be sealed because of possible dependencies. With that piece of informations, you will be able to make additions/extensions to the file format without breaking existings. - I mentioned the scale for pure flexibility, an artist/dept might be working at a smaller scale than another, this informations is required to scale accordingly your camera transforms. Actually this should always be the case, when transforms are saved (not in a matrix form), the scale or globalScale should follow. To transpose this to a similar issue, transforms are usually baked out from the global space which piss off shot modelers. The shot modeler does his job fixing deformations, the geometry is baked out, but the rig is modified and so all the shapes must be done again. Again pure convenience and flexibility. - concerning the camera rigs, the idea is not to track down an entire hierarchy but being aware of that hierarchy. Cameras are more than a null in a scene and even if you're willing to simplify this, you cannot assume everybody want. A side effect of being able to describe a camera rig to your library and this library to understand it is you dont even have to code specific procedures to extract informations as the library will do it for you according the description you've done of the rig. - high-precision doubles is not necessarily something wanted to be output, because they waste space, are expensive to compute (double semantics) and conversion are slow (bytes to doubles). FYI, UltraJSON offers a similar option. - JSON is a huge standard for the web and maybe for some small studios but I am not aware of a lot of studios using it in their pipeline (they usually prefer standards such as yaml for config files and xml for whatever else, and when comes the need of speed, google protobuf). Actually some of them ended up creating their own, as Dreamworks or R+H. Anyway, here I am talking about your architecture: you want to abstract the backend for clients to add in a highly convenient way support for the format they have choosen. My first thought is the support of a binary file format, they dont want to wait after you to add it. - Channels are extra properties attached to a scene object (softimage object parameters, Maya node attributes, ...) A lot of informations are stored in those, and other applications may require them to properly re-build a camera from the data. Again, you dont know what will be their specifics (naming conv, which ones must be ignored, etc -- it depends a lot from the artist/dept/studio). - what you call tiny a file size may be not acceptable size for others. exporting a camera with a frame range spanning 1000 frames will result in 2mb on disk just to store a frame range which can be specify as simply as 1-1001x1. Time is also spent in reading those data. Size is just an argument as convenience could be, this makes the data dense and editing might be tedious as error-prone. We had a need once to export very dense geometries with their internal structure. Because our pipeline was not designed to handle so much density, the firt try has been a disaster resulting in easily an hour
Re: Python Multiprocessing in Softimage
Hey Vincent, multithreading is different of multiprocessing... short long story, multithreading is about running many threads in the same memory space (so shared memory and so use of patterns such as mutex, semaphore,...) while multiprocessing is about running different external processes (all having their own memory space)... It becomes tedious when you want to share data then across those different processes as they don't share a common memory space, Python designers achieve this by simply pickling the datas you want to share (and so you have to be sure they are pickable) and saving them somewhere in memory or on disk (where processes known where to look for). multiprocessing is a powerful concept equivalent in theory to pipes or even co-routines. As Matt said, the sdk is not thread-safe, so forgetting about multithreading is a good rule to follow, while I wouldnt even think about multiprocessing to access scene graph components. To boost your operator, review and be sure your code is optimized (thats just all what it takes 90% of the cases) ! if this is still too slow, move to Cpp... --jon 2013/5/30 Matt Lind ml...@carbinestudios.com Outside of ICE, the SDK is not thread safe. Matt -Original Message- From: softimage-boun...@listproc.autodesk.com [mailto: softimage-boun...@listproc.autodesk.com] On Behalf Of Vincent Ullmann Sent: Thursday, May 30, 2013 3:43 PM To: softimage@listproc.autodesk.com Subject: Re: Python Multiprocessing in Softimage Hmm... ok, thanks Is it possible to write a multiThreaded CustomOperator in C++ ? I already build a simpler version of my ScriptedOp in C, so i might just make it multiThreaded ;-) But first it would be nice to know if Softimage could handle this Am 31.05.2013 00:36, schrieb Matt Lind: Outside of ICE, the SDK is not thread safe. Matt
Re: WWD the 3D movie
I wasnt expecting this. Really surprised as it looks really good, congrats to the team for the release! -- jo Le mercredi 1 mai 2013, Christopher a écrit : The next one will make a louder dino sound, that is what it will differentiate it from the other 30 :) ::Christopher Andre De Angelis wrote: You mean to go along with his other 30? ;-) On Thu, May 2, 2013 at 11:47 AM, Christopher christop...@thecreativesheep.ca javascript:_e({}, 'cvml', 'christop...@thecreativesheep.ca'); wrote: You know your son is going to want a toy dinosaur soon, just warning you :) ::Christopher Andre De Angelis wrote: Looks stunning Raf, I made the mistake of watching the trailer in front of my son and now he has is looping. On Thu, May 2, 2013 at 10:39 AM, Raffaele Fragapane raffsxsil...@googlemail.com javascript:_e({}, 'cvml', 'raffsxsil...@googlemail.com'); wrote: Thought I'd plug it here since all rigging and animation (not to mention a considerable amount of topology work) is Softimage, and some familiar names from the list worked on it: http://io9.com/walking-with-dinosaurs-3d-trailer-is-simply-stunning-486248262 -- Andre De Angelis -- Andre De Angelis
Re: Modo's Deformation (Weight Containers)
actually, this is not really new and is quite similar to the way envelopping is done for years in the in-house 3D package at R+H from what I remember. They had a complete different way to do rigging/skinning that I was used to see in other studios. I wouldn't be surprised, this feature is coming from one of those big. -- jon Le samedi 13 avril 2013, Sebastien Sterling a écrit : (this may be a stupid assumption) i didn't exactly follow all the dude was saying, thx matt for the clarification, his examples where very abstract... would being able to disassociate parent hierarchy have any effect on gimble lock ? making it easier to evade ? On 13 April 2013 17:23, Marco Peixoto mpe...@gmail.com wrote: At first I thought that it was a simple Pose based Deformation like Secondary Shape Modeling, but its not. He says that Modo has now a very similar Weighting System that Pixar uses (he doesnt say that on the video but he did on the forums) and that video was to show what Hippodrome (ex Pixar character Modeler) will be teaching on its coming iBook Art of Moving Points: http://hippydrome.com/iBookExmpls.html On 13-04-2013 16:06, Christopher wrote: I watched the video, interesting stuff, I'd like to see a comparison between what was shown in the video and Softimage, specifically what I liked in the Modo video was the sliding skin effect. Christopher Matt Lind Friday, April 12, 2013 11:19 PM Basically the guy took 24 minutes to explain a 2 minute concept. The main point is Modo can define the order in which deformers are evaluated to solve envelope weights, and envelope weights are assigned using 'weight containers' which are logical assignments of points to deformers. A different kind of weight map. The example shows an arm enveloped over 2 bones (3 joints). In Softimage you'd normally place the bones into a hierarchy and assign the weights to the joints. as you rotate the shoulder, the elbow and wrist would tag along for the ride via inheritance of the shoulder's transformation. If you rotate the elbow, the shoulder is unaffected, but the wrist moves because it inherit's the elbow's transformation. The point being the deformer has to reside in the location of the envelope deformation, and this can be inconvenient for thinking/viewing certain problems such as wanting to only rotate a deformer by a few degrees. in the case of the elbow, it may already be rotated to some arbitrary angle making adding/subtracting a few degrees difficult to visualize. In Modo, the weights were assigned to the individual bones via 'weight containers' (their version of a weight map), but the bones were not placed into a hiearchy. they were scattered about wherever was convenient. This allowed the artist to work with the deformations in the local space of the deformer so if he wanted to say, limit envelope deformations to rotations of 10 degrees or less, the artist could easily see a 10 degree rotation and work with the deformer weights. think of it as compensation mode for vertices of an envelope. You apply the envelope to the defomers, but compose-unknown-contact.jpg
Re: SI 2014 sneak peek
I am still amazed by seeing what big studios with a few software developers can produce as amazing technologies in a year and what is released every year for 3d packages by AD... I can clearly say that the status of technologies last time I checked were ten times more exciting (in rigging, lighting, compositing, ... fields) than what we get this year... What is released to public don't really show what new technologies in this industry are and in-use in studios... Though, the quality is there and the product is pleasant to play with! -- jon 2013/2/28 Michal Doniec doni...@gmail.com And the animatic part counts for about 1% of the work for most studios There are many studios which use Softimage for games, especially in Japan, I don't have exact numbers, but I would risk saying that majority of Softimage seats are used to create games, not adverts or film. This sort of workflow is definitely not 1% of the work and is very important for in game cinematics. On 28 February 2013 06:36, Stefan Andersson sander...@gmail.com wrote: ok this was probably the dumbest sneak preview to date. I can't comment on the 3dsmax preview as I don't use 3dsmax *Maya*: Great, but there already is a grease pencil plugin (free) out there. Though it's nice that it now comes out of the box. Added value: None *Softimage: *A good addition, but not really something amazing. And I've seen it in action before. And the animatic part counts for about 1% of the work for most studios, I see it handy for the pre-viz studios. For me it's rather pointless as we have fixed shots to begin with. I'm sure there are other improvements, but as a sneak preview (which is supposed to get you excited) this was pretty dumb. be safe stefan On Wed, Feb 27, 2013 at 11:08 PM, Ahmidou Lyazidi ahmidou@gmail.comwrote: http://area.autodesk.com/blogs/shawn/sneak-peek-time Ahmidou Lyazidi Director | TD | CG artist http://vimeo.com/ahmidou/videos -- *Stefan Andersson | Digital Janitor* blog http://sanders3d.wordpress.com | showreelhttp://vimeo.com/sanders3d| twitter http://twitter.com/sanders3d | LinkedInhttp://www.linkedin.com/in/sanders3d| cell: +46-73-6268850 | skype:sanders3d -- -- Michal http://uk.linkedin.com/in/mdoniec
Re: fastest way through script to get all parameters in a scene of certain value?
Hey Enoch, unless I missed something, the way you're doing is already the fastest on my machine... for reference: # INFO : tag operation1 (tag): 2.13486326588 # INFO : tag operation2 (tag+): 18.2174550721 # INFO : tag operation3 (OM): 18.2086833524 # INFO : get operation1 (tagparams): 0.452397979784 4204 # INFO : get operation2 (xsicoll): 7.46562998296 4204 import time from win32com.client import constants class Softimage: __getattr__ = lambda x, a: getattr(Application, a, False) or getattr(constants, a) softimage = Softimage() softimage.factory = XSIFactory softimage.message = lambda x, *args: softimage.LogMessage(str(x).format(*args)) softimage.SetUserPref(SCR_CMDLOG_ENABLED, False) items = softimage.ActiveSceneRoot.FindChildren2() t = time.clock() parameters = [{0}.visibility.viewvis.format(x) for x in items] softimage.Tag(parameters, softimage.siTag1) softimage.message(tag operation1 (tag): {0}, time.clock() - t) t = time.clock() for item in items: softimage.Tag(item.FullName + '.visibility.viewvis', softimage.siTag1) softimage.message(tag operation2 (tag+): {0}, time.clock() - t) t = time.clock() tag1 = softimage.siTag1 parameters = (x.Properties(visibility).Parameters(viewvis) for x in items) for parameter in parameters: parameter.Tags |= tag1 softimage.message(tag operation3 (OM): {0}, time.clock() - t) t = time.clock() params = softimage.ActiveSceneRoot.TaggedParameters(softimage.siTag1) softimage.message(get operation1 (tagparams): {0} {1}, time.clock() - t, params.Count) t = time.clock() parameters = softimage.factory.CreateObject(XSI.Collection) parameters.SetAsText(*.visibility.viewvis) parameters = [x for x in parameters if x.Tags softimage.siTag1] softimage.message(get operation2 (xsicoll): {0} {1}, time.clock() - t, len(parameters)) parameters = (x.Properties(visibility).Parameters(viewvis) for x in items) for param in parameters: param.Tags = ~softimage.siTag1 2013/2/28 Matt Lind ml...@carbinestudios.com Retrieving the value is the same. If you use the object model you’ll have direct access to the parameter whether it’s the tag or the value. Just switch “oParameter.Tags” with “oParameter.value” in my example and you have your answer. ** ** If you’re looking to retrieve a specific value, or parameters with a common value, then you have no choice but to loop through all of them and do comparisons to find what you’re looking for. In your case using the other notation with wildcards is only useful if you’re setting a set of parameters to a common value. ** ** ** ** Matt ** ** ** ** *From:* softimage-boun...@listproc.autodesk.com [mailto: softimage-boun...@listproc.autodesk.com] *On Behalf Of *Enoch Ihde *Sent:* Thursday, February 28, 2013 10:00 AM *To:* softimage *Subject:* Re: fastest way through script to get all parameters in a scene of certain value? ** ** sorry, i wasn't really clear. i'm aware the tagging bit was slow, i couldn't be bothered to tag it object modelwise. i'm referring only to the value retrieval of the parameter. not the setup time. again: # INFO : 0.788785183814 seconds --- accessing 3618 parameters's values by tag # INFO : 2.12563553863 seconds --- accesssing 3618 parameters's values by GetPropertyFromName2(propertyname).Parameters(paramname) # INFO : 7.84713397563 accessing 3618 parameter's values by Property(propertyname).Parameters(paramname) tagging is by far the fastest, but in imo, is unacceptably slow. compare that to a method such as IsSelected(), getting a report on a large number of objects is negligible. ** ** ** ** On Wed, Feb 27, 2013 at 10:29 PM, Matt Lind ml...@carbinestudios.com wrote: The slowness is coming from using the Tag() command. Try using the object model to cut out the middle man: // Jscript main(); function main() { var oItems = ActiveSceneRoot.FindChildren2(); LogMessage( oItems.Count ); for ( var i = oItems.Count - 1; i = 0; i--) { var oItem = oItems(i); var oParameter = oItem.Properties( Visibility ).Parameters( viewvis ); oParameter.Tags = siTagNone; } return; } If the parameters you are attempting to modify have a large degree of consistency in name and location, you can use some of Softimage’s wildcards to find them faster: var oParameters = XSIFactory.CreateActiveXObject( “XSI.Collection” ); oParameters.Unique = true; // Get viewvis and rendvis parameters of the visibility property on each X3DObject oParameters.items =
Re: fastest way through script to get all parameters in a scene of certain value?
I suspect it to be the runtime dispatching and attribute access (dictionary lookups) cost... Tho the Tag command allow us to pass a collection instead of giving sequentially items, this resulting in a great improvement. -- jon 2013/2/28 Matt Lind ml...@carbinestudios.com Interesting how much choice of language affects performance. ** ** In your tests the Object model has the same runtime as calling commands. On my computer using Jscript, the object model is at least 4x faster than calling Tag() command. ** ** ** ** Matt ** ** ** ** ** ** ** ** *From:* softimage-boun...@listproc.autodesk.com [mailto: softimage-boun...@listproc.autodesk.com] *On Behalf Of *jo benayoun *Sent:* Thursday, February 28, 2013 2:49 PM *To:* softimage@listproc.autodesk.com *Subject:* Re: fastest way through script to get all parameters in a scene of certain value? ** ** Hey Enoch, unless I missed something, the way you're doing is already the fastest on my machine... ** ** ** ** for reference: ** ** # INFO : tag operation1 (tag): 2.13486326588 # INFO : tag operation2 (tag+): 18.2174550721 # INFO : tag operation3 (OM): 18.2086833524 # INFO : get operation1 (tagparams): 0.452397979784 4204 # INFO : get operation2 (xsicoll): 7.46562998296 4204 ** ** ** ** import time from win32com.client import constants class Softimage: __getattr__ = lambda x, a: getattr(Application, a, False) or getattr(constants, a) softimage = Softimage() softimage.factory = XSIFactory softimage.message = lambda x, *args: softimage.LogMessage(str(x).format(*args)) softimage.SetUserPref(SCR_CMDLOG_ENABLED, False) items = softimage.ActiveSceneRoot.FindChildren2() ** ** ** ** t = time.clock() parameters = [{0}.visibility.viewvis.format(x) for x in items] softimage.Tag(parameters, softimage.siTag1) softimage.message(tag operation1 (tag): {0}, time.clock() - t) ** ** t = time.clock() for item in items: softimage.Tag(item.FullName + '.visibility.viewvis', softimage.siTag1) softimage.message(tag operation2 (tag+): {0}, time.clock() - t) ** ** t = time.clock() tag1 = softimage.siTag1 parameters = (x.Properties(visibility).Parameters(viewvis) for x in items) for parameter in parameters: parameter.Tags |= tag1 softimage.message(tag operation3 (OM): {0}, time.clock() - t) ** ** t = time.clock() params = softimage.ActiveSceneRoot.TaggedParameters(softimage.siTag1) softimage.message(get operation1 (tagparams): {0} {1}, time.clock() - t, params.Count) ** ** t = time.clock() parameters = softimage.factory.CreateObject(XSI.Collection) parameters.SetAsText(*.visibility.viewvis) parameters = [x for x in parameters if x.Tags softimage.siTag1] softimage.message(get operation2 (xsicoll): {0} {1}, time.clock() - t, len(parameters)) ** ** parameters = (x.Properties(visibility).Parameters(viewvis) for x in items) for param in parameters: param.Tags = ~softimage.siTag1 ** ** ** ** ** ** ** ** ** ** ** ** 2013/2/28 Matt Lind ml...@carbinestudios.com Retrieving the value is the same. If you use the object model you’ll have direct access to the parameter whether it’s the tag or the value. Just switch “oParameter.Tags” with “oParameter.value” in my example and you have your answer. If you’re looking to retrieve a specific value, or parameters with a common value, then you have no choice but to loop through all of them and do comparisons to find what you’re looking for. In your case using the other notation with wildcards is only useful if you’re setting a set of parameters to a common value. Matt *From:* softimage-boun...@listproc.autodesk.com [mailto: softimage-boun...@listproc.autodesk.com] *On Behalf Of *Enoch Ihde *Sent:* Thursday, February 28, 2013 10:00 AM *To:* softimage *Subject:* Re: fastest way through script to get all parameters in a scene of certain value? sorry, i wasn't really clear. i'm aware the tagging bit was slow, i couldn't be bothered to tag it object modelwise. i'm referring only to the value retrieval of the parameter. not the setup time. again: # INFO : 0.788785183814 seconds --- accessing 3618 parameters's values by tag # INFO : 2.12563553863 seconds --- accesssing 3618 parameters's values by GetPropertyFromName2(propertyname).Parameters(paramname) # INFO : 7.84713397563 accessing 3618 parameter's values by Property(propertyname).Parameters(paramname) tagging is by far the fastest, but in imo, is unacceptably slow. compare that to a method such as IsSelected(), getting a report on a large number of objects is negligible. On Wed, Feb 27, 2013 at 10:29
Re: Sublime definitions for Softimage
IDEs provide code completion and code analysis by actually having a backend specific to the language the editor is set to. Thats actually one of the main difference between a text editor (sublime) and an IDE (eclipse). The editor does not just consider the text as a suite of words but as a language and so understand what you write. To implement such thing, you will need basically to do the job of the python engine (minus compilation/interpreter step). Meaning, use an ast generator and write python specifics. The actual parser generator used internally by the CPython implementation is exposed in the std library under the name pgen2 (do a grep for seeing its usage). Because this is just a parser generator, you will need then a way to get and manipulate the ast the parser will generate for ya. fortunately, there is a bunch of modules that provide exactly what you need (ast, keyword, ...) that let you go further in the code exploration. (pgen2 and parser/ast/keyword/... are two separate things with two different usages, dont mix them up) Thats about python, for the softimage libraries, you're on the right way :) --jon 2013/1/31 Alan Fregtman alan.fregt...@gmail.com I've generated autocompletions, but it seems (and kinda makes sense) that I cannot really know what class someone is coding for to show the methods filtered by that class alone, so in its current state I will autocomplete both global commands AND all methods. That said, for methods I put [blabla class] after them so you know which one it's for. I still think it's useful, but I wish it could be better. Anyone have any bright ideas for somehow knowing what class someone is coding for? (...because Sublime won't load Softimage's Python environment to actually know what is what, what with the dynamic dispatching and all.) By the way, once you tab to choose one, I autocomplete all the arguments as a snippet and you can tab through the named arguments to write your own variables or delete them. On Wed, Jan 30, 2013 at 10:56 PM, Alan Fregtman alan.fregt...@gmail.comwrote: Okay... Getting somewhere! import sysimport os.pathfrom win32com.client import makepy tlbs = ['/path/to/Softimage_2013_SP1/Application/bin/Converter.tlb','/path/to/Softimage_2013_SP1/Application/bin/LightRig.tlb','/path/to/Softimage_2013_SP1/Application/bin/XSIDial.tlb','/path/to/Softimage_2013_SP1/Application/bin/dotXSI_ie.tlb','/path/to/Softimage_2013_SP1/Application/bin/dsauto.tlb','/path/to/Softimage_2013_SP1/Application/bin/enums.tlb','/path/to/Softimage_2013_SP1/Application/bin/ophelper.tlb','/path/to/Softimage_2013_SP1/Application/bin/si3dobjectmodel.tlb','/path/to/Softimage_2013_SP1/Application/bin/si3dobjectmodel10.tlb','/path/to/Softimage_2013_SP1/Application/bin/siobjectmodel.tlb','/path/to/Softimage_2013_SP1/Application/bin/xsiutils.tlb'] for path in tlbs: baseFolder = r'/path/somewhere/to/save/pyfiles/' sys.argv = [makepy, -o, %s/%s.py % (baseFolder, os.path.basename(path).split('.')[0]), path] makepy.main() This gets me some files I can introspect for methods and such. On Wed, Jan 30, 2013 at 10:20 PM, Alan Fregtman alan.fregt...@gmail.comwrote: Reviving this old thread out of interest... So, with that sample code, we can introspect predefined global objects like Application and XSIUtils. That's cool, but for example, another object type like... Parameter that's a class but I can't create it. I can't do win32com.client.Dispatch(Parameter) and XSIFactory.CreateObject(Parameter) won't work either. Is there any way I can somehow create the object on the fly, knowing its class type, some other way so that I can query its methods and properties? ps: Raff, could you elaborate how you AL guys got your introspection going for non-predefined globals? On Fri, Jan 4, 2013 at 6:15 AM, Andy Nicholas a...@andynicholas.comwrote: You guys should check this out. It might give you a good start... http://xsisupport.com/2012/10/06/saturday-snippet-getting-a-list-of-properties-and-methods-with-python-introspection/ On 04 January 2013 at 00:54 jo benayoun jobenay...@gmail.com wrote: The Softimage API (object model) is not visible because its all about dynamic dispatching at runtime. This is like thinking your editor will be natively enough smart to detect attributes you would add dynamically when overriding the __getattr__ method of a class. Happily for us the dispatching is cached somewhere and even introspectable by using the pythoncom/pywin32 API. With a little effort and sticking with python, one would have no problem in developing a plugin for this text editor specially if sublime API is as convenient as it is claimed. The first step is to learn how to use correctly the pywin32 package and what it does under the hood to fully understand what the 'ultimate' solution could be. --jo 2013/1/3 César Sáez cesa...@gmail.com mailto:cesa...@gmail.com
Re: building asset tools
hey Stefan I would say, the most important is to make the right difference between the asset and the file on disk. The asset is just a concept, often just an entry in whatever storage unit you choose with metadatas and bind to a file on disk. So to keep things simple, why not considering your asset as a zip archive on disk, in which you may use different file formats to store datas depending on the type of the asset and the application it's most often used in. Bundled with the archive, add it a json/xml/whatever file used to store the metadatas (creator, ctime, asset-type, ...) It becomes easy then when an asset is wanted to retrieve the adequat file (if exists) or run a converter (if needed). This allows you to keep application-specific file formats while not having trade-offs on their re-use in others by abstracting. Your asset manager don't know about the files but only about assets. Dont bother with file formats but make your asset manager enough solid to handle whatever is used underneath to store datas. --jon 2013/1/27 Stefan Andersson sander...@gmail.com Hello everyone, I'm building a set of tools for a asset manager for Softimage. I've had it working in Maya for a while, but I'm now converting it and re-writing it to fit Softimage. I'm quite tempted to use Collada as it's a xml format and pretty easy to work with. But I would like to hear what everyone else is using? I *need* to be able to export it as collada or fbx for the model assets so that it can be imported into other applications. The Rig/Sim assets will be native emdl as they are only going to be used in softimage (though I have my issues there too...). A few things my exporter is doing are * exporting MatLib with all materials * exporting ColladaXML * exporting/converting images to exr (via OIIO) * parse MatLib and fix the filepaths for the textures (pointing at asset location) Big plus for using Collada * will work with most applications * can be used in Softimage as Reference * xml based Big plus for FBX * will work with most applications Big Minus for FBX * can NOT be used in Softimage as Reference * not a xml format (need to make your own parser) Big Minus for dotXSI * tends to crash other applications when importing dotXSI Big Minus for emdl * binary, impossible to edit So all of the above points towards Collada, but what do you guys think? Any takers? regards stefan -- *Stefan Andersson | Digital Janitor* blog http://sanders3d.wordpress.com | showreelhttp://vimeo.com/sanders3d| twitter http://twitter.com/sanders3d | LinkedInhttp://www.linkedin.com/in/sanders3d| cell: +46-73-6268850 | skype:sanders3d
Re: Get enum array items
looks like Eric is already preparing the 2013 contest by creating new threads that he solves himself! nice try Eric but no ... :P --jon 2013/1/4 Eric Thivierge ethivie...@gmail.com Scratch that. oItem = PPG.Item(myItemName) lUIItems = oItem.UIItems Eric Thivierge http://www.ethivierge.com On Fri, Jan 4, 2013 at 4:38 PM, Eric Thivierge ethivie...@gmail.comwrote: Need to get the array items of an enum control in a PPG. I thought I saw a thread a while back with that but can't seem to find it... any help? Eric Thivierge http://www.ethivierge.com
Re: Sublime definitions for Softimage
The Softimage API (object model) is not visible because its all about dynamic dispatching at runtime. This is like thinking your editor will be natively enough smart to detect attributes you would add dynamically when overriding the __getattr__ method of a class. Happily for us the dispatching is cached somewhere and even introspectable by using the pythoncom/pywin32 API. With a little effort and sticking with python, one would have no problem in developing a plugin for this text editor specially if sublime API is as convenient as it is claimed. The first step is to learn how to use correctly the pywin32 package and what it does under the hood to fully understand what the 'ultimate' solution could be. --jo 2013/1/3 César Sáez cesa...@gmail.com You're right, sublime/any-other-editor can't see that softimage variables. If you're using 'Application' (or any 'implicit variable' like that) your script will fail on import, sipyutils module (or your own version of it) is the way to go IMHO. On Thu, Jan 3, 2013 at 9:18 PM, Alan Fregtman alan.fregt...@gmail.comwrote: But it won't be able to find global XSI objects just like that, right? Application is defined by the axscript module, but I feel like SI internally dispatches it in a way I don't think Sublime could see it. On Thu, Jan 3, 2013 at 1:40 PM, César Sáez cesa...@gmail.com wrote: You have to add your environment paths to the 'env' tag in your python.sublime-build config file, this way if you have a shortcuts module it will instrospect it. El 03/01/2013 17:34, Gene Crucean emailgeneonthel...@gmail.com escribió: Hehe I was trying to figure out the same thing. On Thu, Jan 3, 2013 at 8:09 AM, Alan Fregtman alan.fregt...@gmail.comwrote: I use SublimeCodeIntel too but it's not aware of XSI globals like Application, XSIUtils and so on, so it won't introspect them. How would one hack it to be more aware of such? On Wed, Jan 2, 2013 at 9:19 PM, César Sáez cesa...@gmail.com wrote: SublimeCodeIntel does a great job autocompleting python modules and import statements (via introspoction, works with your own modules too), it's not softimage specific but helps alot. Another cool package is the SublimeLinter, it highlight potential errors in your code (IDE-like). I have no idea how far I was from PEP8 until I start using it, now my code is way cleaner and easy to the eyes :) On Thu, Jan 3, 2013 at 12:22 AM, Raffaele Fragapane raffsxsil...@googlemail.com wrote: You actually can introspect recursively almost the entirety of the scripting API and generate a dummy set of libraries from there. That will offer autocompletion in most IDEs. We've had that running here in AL for a while thanks to Aloys' efforts a long time ago and it's worked without a hitch for years. On Thu, Jan 3, 2013 at 10:18 AM, Gene Crucean emailgeneonthel...@gmail.com wrote: It would be completely bitchin if it autocompleted the entire sdk... and not just simple commonly used snippets. -- Gene Crucean - Emmy winning - Oscar nominated VFX Supervisor / iOS-OSX Developer / Filmmaker / Photographer ** *Freelance for hire* ** www.genecrucean.com ~~ Please use my website's contact form on www.genecrucean.com for any personal emails. Thanks. I may not get them at this address. ~~
Re: Softimage Picker
hey david, you shouldn't need to update your widgets every time the user has changed its selection (completely behind steve on that one) but everytime focus has changed back to your widget. overload QWidget::enterEvent or QWidget::focusInEvent and update your highlight buttons when the widget is under the cursor. your developer could also have a look to the tool sdk, both are compatible and you could end up with something nice (custom manipulater + synoptic). -- jo 2012/11/21 Steven Caron car...@gmail.com this is a good example. combined with a few other good reasons i would probably implement an event, but if this were the only good reason i would still avoid doing it with an event. as i said in my email to david, if performance were to be an issue, i would highlight the controls in the gui once the cursor enters the application. there are a few things in softimage that make me paranoid and selection events is one of them. i remember a plugin that was installed at blur a long time ago that did an on selection change script that was the culprit for some serious lag for the animators. i also imagine one might want to keep open multiple character guis and i can see this getting out of hand. but its still worth some investigation. s On Wed, Nov 21, 2012 at 3:56 PM, Raffaele Fragapane raffsxsil...@googlemail.com wrote: Bi-Directionality is actually quite important. A lot of people want to do part of a selection in the viewport quickly, and then add a few missing, or easier to retrieve, bits clicking around in the character pane. Doing it with events isn't a huge drag, it only kicks in at selection time in the viewport, and it's most likely done with a monitor job in Maya, which tends to have comparable lag, so if people find it ok in one they will most likely be fine with the other's. On Thu, Nov 22, 2012 at 9:52 AM, Steven Caron car...@gmail.com wrote: ya, it might be slow. i dont see an advantage to the bi-directionality feature, anyone care to give me a good example? s
Re: Overlapping UV (Scripting)
Hey Martin, I am afraid that the software is not aware of this concept assuming this is only revealed when drawing into the texture editor viewport. You can still deduce it by scripting. what about this: - get the texture projection elements - create a bitmap matching the uv space (minmax u for columns, minmax v for rows, using a precision number to calculate the stepping) - iterate over the samples coordinates using their rounded (using the precision number) u and v values as indices of the bitmap - if the bit is already positive, it means the sample is overlapping - from the samples, retrieve the geometry components its should be quite efficient (compared to some bbox collision systems) and straightforward in python to write. -- jo Le mercredi 31 octobre 2012, Martin a écrit : Hi list, Overlapping UVs aren't good for baking textures, so we need to check if the UVs are overlapping in any way and fix them. We are doing it manually right now. I mean, if the UV plane turns red, it is overlapping. It's quite simple, but really tedious when you have thousands of UV samples and lots of scenes and objects to check. Is it possible to make this task faster and more accurate? Any ideas? Thanks M.Yara
Re: SDK: When *exactly* does XSIUnloadPlugin get called
I guess the plugin is loaded once for discovering and registration (plugin manager), and then reloaded for getting the actual features (actual extension of features). Usually, plugin systems use a specification file for each new plugin (xml or other) that is in charge of describing (description, name, version, author, ...) and register items (commands, windows, ...) plus the actual plugin where the Load and Unload functions are only called once. Wouldnt be great to have something similar for XSI ? -- jo 2012/10/26 Luc-Eric Rousseau luceri...@gmail.com sounds like if you put some code in the constructor of a global variable, then you'd be called twice per xsi session, since your dll will be loaded and unloaded twice? On Fri, Oct 26, 2012 at 9:34 AM, Marc-Andre Belzile marc-andre.belz...@autodesk.com wrote: Sorry for not being clear enough. When a plugin is loaded at startup or through LoadPlugin, all plugin items are registered through XSILoadPlugin and then the dll is unloaded by XSI *without* calling XSIUnloadPlugin. Anything allocated in the current dll process will be zapped by the OS at this point. The plugin dll will be loaded back again when one of the registered plugin item is required by XSI, and in this case XSILoadPlugin *won't* be called again. So if you allocated objects or resources in the plugin dll process through XSILoadPlugin, they will not be available when the dll is loaded back. -mab
Re: combobox
hey Gareth, if I remember correctly and in the case where the multi-selection flag is not on, you can do something like this: values = ['red', 'orange', 'blue'] formatted = list() [formatted.extend(x) for x in enumerate(values)] ['red', 0, 'orange', 1, 'blue', 2] values[listbox.Value] no ? -- jo 2012/10/26 Peter Agg peter@googlemail.com I usually just do a quick python type thing: selected = box.Value boxList = box.UIItems boxList[ boxList.index(selected) - 1 ] That's presuming that each Label and Value entry are unique, of course. Pete On 26 October 2012 14:56, Gareth Bell gareth.b...@primefocusworld.comwrote: Afternoon all, ** ** So a combobox is derived from two values - the Label and the Value e.g. * *** ** ** box = [Label1, Value1, Label2, Value2] ** ** Say I've selected Label1 ** ** by using GetValue (box) the value it returns will be Value1 ** ** Is it possible to get the label as a return value other than setting the value to the same as the label? ** **
Re: SDK: When *exactly* does XSIUnloadPlugin get called
You mean like the .spdl and .preset formats? nope at all, I mean like a specification file. plugins specifications are usually little xml/json files where all informations relative to the plugin are written (what you do with the PluginRegistrar::Put* calls). This has mainly two big advantages which are: - the shared library itself (plugin) has no need to be loaded to be discovered and exposed to the audience of what it is about and what does it do. - In the case of complex plugin systems, to declare dependencies to other plugins for the plugin manager to resolve them before loading the actual plugins. This is something powerful and flexible where some systems are like Softimage or Maya more traditional in the way they ask for an handle, keeping it in memory and whatever happens, they don't really care. Spdl s have a different meaning (description language used to declare and define multiple things) as are presets (data storage). -- jo 2012/10/26 Nicolas Burtnyk nico...@redshift3d.com Yep cached. That explains it. On Fri, Oct 26, 2012 at 4:37 PM, Kamen Lilov kamen.li...@chaosgroup.com wrote: On 10/26/2012 7:52 PM, Nicolas Burtnyk wrote: I'm confused. I just tested this and global variable constructors only get called once in my plugin (on 2012 SP1). Nicolas, is your plugin DLL marked as 'cached'? Because I double-checked the mechanism explained by Marc-Andre, turns out he's right (not surprisingly - he's the SDK lead after all ;) ) BUT - this all applies only to external plugins not marked as cached. Cached ones - which happens to be the default - are LoadLibrary-ied just once, and FreeLibrary-ied just once (unless ofcourse you select Reload)
Re: Qt Wrapper command log issue
The different API usages have already been mentioned there for reference: https://groups.google.com/forum/m/?fromgroups#!topic/xsi_list/1HqDKBMspyE Pyside shouldnt have the same problem tho because of their design choices. http://qt.gitorious.org/pyside/pseps/blobs/3cb0883a01206033b8c549815bed9f9e388129b8/psep-0101.txt I would be curious Tony to know if the same problem occurs using the official dist of pyqt from riverbank? Your code should run and actually do. If this is working when you're assigning the layout to a variable before adding it to the main layout and you're only notice this crash's happening with pyside and the case where youre nesting the return value into the addLayout function call, I would think first to a bug from the binding (python memory model managment can be thought to deal with and can easily crash any software). Please, let us know how this is going. -- jo Le mercredi 24 octobre 2012, Raffaele Fragapane a écrit : This is Spring, actually. You'll know it's summer this year when inline skating will feel like stilt walking because the asphalt is practically fluid. On Thu, Oct 25, 2012 at 1:22 PM, Eric Thivierge ethivie...@gmail.comwrote: Its nice! Clear blue skies with a high of 80F / 32C. Got to love summer! Eric Thivierge http://www.ethivierge.com On Thu, Oct 25, 2012 at 11:49 AM, Tim Crowson tim.crow...@magneticdreams.com wrote: I keep forgetting what a time difference there is. How does the future look? -Tim -- Our users will know fear and cower before our software! Ship it! Ship it and let them flee like the dogs they are!
Re: PyQtForSoftimage: QFileDialog
Hey Cesar, there is no limitations nor bugs, its just softimage is setting new controls to use its style and qt lets do. Use this and you should be safe. void SuspendWin32ControlsHookhttp://download.autodesk.com/global/docs/softimage2013/en_us/sdkguide/si_cpp/classXSI_1_1Desktop.html#a93ffc147515c5cfbbe7d8f0b9d2aab4f () void RestoreWin32ControlsHookhttp://download.autodesk.com/global/docs/softimage2013/en_us/sdkguide/si_cpp/classXSI_1_1Desktop.html#a890a0a0469659022bb54a1a10d8e108f () -- jo 2012/10/18 César Sáez cesa...@gmail.com On Fri, Oct 19, 2012 at 7:26 AM, César Sáez cesa...@gmail.com wrote: Hi list, I'm starting to use PyQtForSoftimage and I'm having some issues with a QFileDialog, it works but the dialog get mixed with the softimage ones. Is there any way to make it work properly? Has something to do with * modal* dialog limitations? Just a known issue? I'm just calling a QFileDialog.getOpenFileName in a button signal. Thanks!
Re: Qt Wrapper command log issue
hey Tony, welcome aboard. I did not find any explicit message that would match what you get (I quickly grep the source code, this would deserve much more investigations). As you're the first one to report this kind of problem, and as you have compiled pyside, Ive emitted the idea that it could be one of the qt source numerous debug messages because of a debug flag accidentally turned on for compilation. Even if I wish, I can't really help on that one, I miss time because of the job and my other commitments but feel free to use my email anytime ... For completeness, the code in cpp you can find in the plugin has been put there to show the way I did my personal qt integration when people were asking how ... Ive always warned and repeated about the fact that this is what it is, a demo code ... Ive been just too busy (or maybe lazy) to release the complete thing I guess. besides, I've not worked that much with pyside in softimage, mainly because when I wrote the code, pyside wasnt even in beta and studios are still committed to riverbank ... but considering the only major difference between pyqt and pyside is the vendor and the binding generator, this doesn't change anything on its usage with the plugin nor with the way I used to integrate qt into proprietary softwares ... -- jo 2012/10/16 Tony Barbieri great...@gmail.com Hey Steven, I just joined the list this morning so I could join in the conversation. Do you happen to know if Jo found that in the actual Qt source code or in PySide? I compiled both debug and release but compiled PySide against the release .dlls. Thanks! -tony so, you guys are compiling it yourself... maybe with debug mode on? jo just grep'd the qt code base and found debug message with caught in it On Mon, Oct 15, 2012 at 4:54 PM, Steven Caron car...@gmail.com wrote: oh nice! On Mon, Oct 15, 2012 at 4:46 PM, Bradley Gabe witha...@gmail.com wrote: Tony said he didn't have to do any work to get PySide going. He just compiled the latest version... -- -tony
Re: etRenamer 3.0, now with PyQt version
regular expressions are clearly a must have ... you clearly see their power when switching to linux. because when you have a dude who called you to his desk to say Hey that cmd gives me an error like what the *bip* has no subscriptions to the *bip* but in the *bip* it turns out it has ... well, you don't have the time to go back at your desk, launch your favourite python editor (OR sublime-text) and write a beautiful python tool to parse the output from one custom cmd to use it as input for another one, repeated 10 times and handling special cases, but you clearly have the time to open a shell and use your best buddies: Pipe, Sed, Awk and XArgs, to finally ending with a freaking 10 lines long command. and voilà ... the *bip* has now the right subscriptions to the *bip*...! =) *bip*: f**king NDA ... **: fucking decency... -- jo 2012/10/16 Alok Gandhi alok.gandhi2...@gmail.com We use regex in some pipeline tools for softimage but that is all coming from python 're' module. Personally I have used regex to do some screen scraping off webpages for some personal projects. But for that all Beautiful Soup is a great package for python. ** ** ** ** *From:* softimage-boun...@listproc.autodesk.com [mailto: softimage-boun...@listproc.autodesk.com] *On Behalf Of *Eric Turman *Sent:* Tuesday, October 16, 2012 6:30 PM *To:* softimage@listproc.autodesk.com *Subject:* Re: etRenamer 3.0, now with PyQt version ** ** nice..I like that one since it has community examples. Thanks for sharing. On Tue, Oct 16, 2012 at 8:25 PM, Chris Gardner chrisg.dot@gmail.com wrote: I use this one online: http://gskinner.com/RegExr/ get it right in realtime before you stuff it into code. cheers, chrisg On 17 October 2012 12:21, Eric Turman i.anima...@gmail.com wrote: This is a really handy tools to nail that regex just right. http://download.cnet.com/The-Regex-Coach/3000-2056_4-10795049.html -- -=T=- --
Re: the goon kickstarter.
FYI, if you guys get this funded and need some help rigging you know who to call. thanks dude for referencing me, I appreciate. =D 2012/10/12 Eric Thivierge ethivie...@gmail.com FYI, if you guys get this funded and need some help rigging you know who to call.
Re: Raafal
wait a sec, a framework written in purebasic, based on open techs with a Softimage UI ... the headlines sound cool but ... if Guy is planning developing a framework that will be used to build a 3d software like what he has in mind, I would hear more about how he is thinking the architecture than the UI which is really not the key concept of a framework ... PureBasic, really ? why making that choice when your project will use and be open source ... it is closing a lot of doors here ... Is there any roadmaps for the future months ? Anyways, still good to hear about new projects and I wish him success and courage =) -- jo 2012/10/10 Jeff McFall jeff.mcf...@sas.com Heck yeah! ** ** *From:* softimage-boun...@listproc.autodesk.com [mailto: softimage-boun...@listproc.autodesk.com] *On Behalf Of *Alan Fregtman *Sent:* Wednesday, October 10, 2012 2:05 PM *To:* softimage@listproc.autodesk.com *Subject:* Re: Raafal ** ** Via Google Translate: *Hello, I am announcing the creation of the project raafal. This is an application framework 3d, free, open source and cross-platform for professional use and an alternative to blender. internal code will be inspired concepts Blender and use of open-source libraries Pixar, ILM, Disney, Sony, etc. .. but with an interface and ergonomic blender completely different, closer to that of SOFTIMAGE | XSI. The framework and the UI will be fully coded in PureBasic (but probably much more than that.) No precipitation however, I realize that this is a project spanning several years see decades. This project was born after years of frustration at the behavior of some companies developing dcc tools such as Autodesk. Experts PureBasic 3d experts and developers are welcome. This project is sponsored by my company, radfac. I worked as R D Manager and as Technical Director 3d for over 15 years. The site will be hosted at: http://www.raafal.org Several mailing lists are already in place: http://raafal.org/mailman/listinfo Thank you for your attention. Sincerely, Guy.* On Wed, Oct 10, 2012 at 1:58 PM, Greg Punchatz g...@janimation.com wrote: Based on a few comments on this list and reading the fine print, it looks like Guy Rabiller is making a fabric engine type dev platform but instead he is going open source. Look forward to both of these projects bringing us truly next generation tools. Greg Punchatz Sr. Creative Director Janimation 214.823.7760 www.janimation.com On 10/10/2012 11:40 AM, benjamin malartre wrote: Hello list, a message from the future: http://raafal.org/fr/
Re: OT - Python Question: how to get the Handle (Windows) for a specific application?
Hey Tim, there is many ways to bring back a window to the foreground, and the way you're going is one of them. In any cases, you will need the window handle to manipulate the right window. There is many ways to retrieve this handle, start looking thru the Fusion SDK, if they are not exposing it or just use the win32 api and its convenient functions to enumerate the windows and find the one you're interested in. You have btw to be sure you have the handle of the parent window of the application. I remember having posted times ago some examples related to the Qt integration in xsi which could fit your needs. =) -- Jo 2012/7/29 Tim Crowson tim.crow...@magneticdreams.com Somewhat OT here... I've been Googling for half an hour without much luck... I have a tool which contains a button that either launches a program (in this case Fusion), or brings it to the foreground if it's already running. Launching it if it's not already running is trivial, but I can't quite figure out how to bring it to the foreground (and take focus away from XSI). I know it's bad manners to steal focus, but in this case it kinda makes sense (plus it's been requested). As far as I can tell, I can use win32gui.BringWindowToTop() to bring Fusion to the foreground, but I need to pass the program's handle to it. Can anyone shed some light on how to go about getting said handle? Or, if you have a suggestion for switching app focus from Soft to Fusion (via a button, not Alt-tab!), I'm all ears. Thanks for any and all assistance! -- *Tim Crowson **Lead CG Artist* *Magnetic Dreams Animation Studio, Inc. *2525 Lebanon Pike, Building C. Nashville, TN 37214 *Ph* 615.885.6801 | *Fax* 615.889.4768 | www.magneticdreams.com tim.crow...@magneticdreams.com
Re: get all the expressions driven by a parameter
Hey Jeremie, Here is what I am coming with on a character with thousands of expressions: # method 1 took 5.42011094882 and find 3 expressions. # method 2 took 2.31037755754 and find 3 expressions. # method 3 took 5.41616293425 and find 3 expressions. I would recommend you to take a look at a paradigm that is called Data-Oriented Design and which is specially considered to avoid CPU usage and fast computation. Let me know if this fit your needs :) -- Jo import time SI_EXPRESSION_ID = 49 def Jerems( param ): allExpressions = Application.FindObjects(None, {12723EB2-7DDB-11D0-A57F-00A0C91412DE}) result = [] for exp in allExpressions: if exp.OutputPorts.Count: for port in exp.InputPorts: if port.Target2.IsEqualTo(param): result.append(exp) break return result def exprs_from_parameters(parameters): if type(parameters) not in (list, tuple): parameters = (parameters, ) res = list() parameters = [p for p in parameters if p is not None] nparameters = len(parameters) if nparameters == 0: return res expressions = Application.FindObjects2(SI_EXPRESSION_ID) res = [list() for i in xrange(nparameters)] for exp in expressions: sources = [iport.Target2 for iport in exp.InputPorts] for i in xrange(nparameters): b = [src.IsEqualTo(parameters[i]) for src in sources] if any(b): res[i].append(exp) return tuple(res) def Aloks(param): PARAM_EXPR_DICT = {} for expr in Application.FindObjects(None, {12723EB2-7DDB-11D0-A57F-00A0C91412DE}): ports = expr.InputPorts if not ports.Count: continue for port in ports: paramName = port.Target2.FullName if not PARAM_EXPR_DICT.has_key(paramName): PARAM_EXPR_DICT[paramName] = [] PARAM_EXPR_DICT[paramName].append(expr) return PARAM_EXPR_DICT[param.FullName] if PARAM_EXPR_DICT.has_key(param.Name) else None msg = method {0} took {1} and find {2} expressions. def timethat1(): ppg = Application.Selection(0) res = [] t = time.clock() for param in ppg.Parameters: res.append(Jerems(param)) t = time.clock() - t print msg.format(1, t, sum([len(r) for r in res])) def timethat2(): ppg = Application.Selection(0) t = time.clock() res = exprs_from_parameters(tuple(ppg.Parameters)) t = time.clock() - t print msg.format(2, t, sum([len(r) for r in res])) def timethat3(): ppg = Application.Selection(0) res = [] t = time.clock() for param in ppg.Parameters: res.append(Aloks(param)) t = time.clock() - t print msg.format(3, t, sum([len(r) for r in res])) timethat1() timethat2() timethat3() 2012/7/27 Jeremie Passerin gerem@gmail.com Thanks Matt ! Interesting solution Alok, my issue is not the 2sec that it takes to perform the seach but that I am looping on this method about 20 times... so it makes sense to try something like that ! I'll give it a try right now ! On 27 July 2012 15:54, Alok alok.gan...@modusfx.com wrote: Maybe globally store the expressions with their params in a hash (dictionary in Python) and then do the reverse look up. Will not run faster but will save you time for each call to getExpressionsDrivenByParameter() In this case: PARAM_EXPR_DICT = {} for expr in Application.FindObjects(None, {12723EB2-7DDB-11D0-A57F-00A0C91412DE}): ports = expr.InputPorts if not ports.Count: continue for port in in ports : paramName = port.Target2.FullName if not PARAM_EXPR_DICT.has_key(paramName): PARAM_EXPR_DICT[paramName] = [] PARAM_EXPR_DICT[paramName].append(expr) Then you can test it for parameter simply by: def getExpressionsDrivenByParameter( param ): return (PARAM_EXPR_DICT[param.FullName] if PARAM_EXPR_DICT.has_key(param.Name) else None) Alok. On 27/07/2012 5:44 PM, Jeremie Passerin wrote: Hi guys, I was wondering what is your technique to get all the expressions driven by a parameter. I'm trying to find the fastest way to do it. here is my code : def getExpressionsDrivenByParameter( param ): allExpressions = xsi.FindObjects(None, {12723EB2-7DDB-11D0-A57F-00A0C91412DE}) result = [] for exp in allExpressions: for port in exp.InputPorts: if port.Target2.IsEqualTo(param) and exp.OutputPorts.Count: result.append(exp) break return result With around 5000 expressions in my scene it takes about 2sec to get the result. Anyone got a faster solution ? cheers, Jeremie No virus found in this message. Checked by AVG - www.avg.com Version: 2012.0.2197 / Virus Database: 2437/5158 - Release Date: 07/27/12
Re: Shed Pose Library
Hey Miquel, looks terrific! thanks for sharing this with us! -- jo Le lundi 23 juillet 2012, Miquel Campos a écrit : Hello Softimage fellas, At shed we did some tools for the animators and one of them is shed_poseLib a Pose manager to help speed up the animation process. The tool stores the poses in XML format and allows to exchange it between characters(or any model with rig) and projects. The repositories are user base so we can exchange the poses from one user to other. For more information and download the tool : http://www.akaosaru.com/p/tools.html I would like to thanks Sly, Ph, Renaud and Shed team to allow me to release this tool. I hope it is useful for many animators :P Cheers, Miquel Miquel Campos *Character Animation TD* Working at: www.shedmtl.com Personal web: www.akaosaru.com
Re: Inherit from a Softimage class
Hey Chris, I assume you're referring to that part: you're able to inherit some classes of the C++ API [..] and create a python binding to it using the Python API. There is no magic. Once you've inherited the desired class in cpp (in which the CBase is part of the inheritance tree), write your extension using the CPython API. To provide a smoother inter-operability between both, I rely on the pythoncom lib and the XSI::ConvertObject function. I'm not going to implement a complete subclass (too lazy on a sunday), but here is a sample that should show you the basic idea. Note that I omitted any security code for brevity. For other folks, don't use that in a production-context, it deserves much more love. *First link of the list here. http://www.jobenayoun.com/* There could be some drawbacks depending on what is your usage as well as major differences between the two interfaces (C++ vs COM). This is far from being *perfect* nor *elegant*, but still, I consider this mechanism valid for specific needs. I would stay on my first suggestion for Jeremie tho, which is to wrap the desired class directly in python as it's also the way recommended by Mark Hammond himself according his book (he refers to it as the *delegate* pattern). =) -- Jo 2012/7/12 Chris Chia chris.c...@autodesk.com Will be interesting to see how u would implement that... Do share when you have something ;) Chris On 13 Jul, 2012, at 6:57 AM, Jeremie Passerin gerem@gmail.com mailto:gerem@gmail.com wrote: Thanks Jo, That was more a thinking I had rather than a real intention to do it... I'm looking for different way to organize my code. Thanks for the advice ! On 11 July 2012 12:10, jo benayoun jobenay...@gmail.commailto: jobenay...@gmail.com wrote: Hey Jeremie, considering the COM architecture (interfaces inheritance) + the python binding (dynamically invoking), this is really a bad idea to even think to inheritance... The most easiest and elegant way that I think of is to wrap the desired object into a class. On another hand, you're able to inherit some classes of the C++ API (even if its not recommended and limited) and create a python binding to it using the Python API. Not even sure, you will get what you're looking for. =( -- Jo 2012/7/10 Jeremie Passerin gerem@gmail.commailto:gerem@gmail.com Hi list, I'm pretty sure I know the answer to that one but just wondering. Do we have a way in Python to create a class that inherits from a class of the softimage SDK ? Let's say I want to extend the SIVector3 or the Null object ? Any chance I could do something like that ? class mySIVector3( SIVector3 ) or class myCustomNull( Null ) Jeremie
Re: Inherit from a Softimage class
Hey Jeremie, considering the COM architecture (interfaces inheritance) + the python binding (dynamically invoking), this is really a bad idea to even think to inheritance... The most easiest and elegant way that I think of is to wrap the desired object into a class. On another hand, you're able to inherit some classes of the C++ API (even if its not recommended and limited) and create a python binding to it using the Python API. Not even sure, you will get what you're looking for. =( -- Jo 2012/7/10 Jeremie Passerin gerem@gmail.com Hi list, I'm pretty sure I know the answer to that one but just wondering. Do we have a way in Python to create a class that inherits from a class of the softimage SDK ? Let's say I want to extend the SIVector3 or the Null object ? Any chance I could do something like that ? class mySIVector3( SIVector3 ) or class myCustomNull( Null ) Jeremie
Re: Getting the bounding box for a subcomponentcollection?
for completeness... -- Jo def get_bbox_pos(obj): pos = [0, 0, 0] res = Application.GetBBox(obj) xmin, ymin, zmin, xmax, ymax, zmax = res x = (xmin + xmax) * 0.5 y = (ymin + ymax) * 0.5 z = (zmin + zmax) * 0.5 return (x, y, z) def marker_at_center(comp): pos = get_bbox_pos(comp) parent = comp.SubComponent.Parent3DObject basename = parent.Name if len(basename) 3 and basename[3] == _: basename = basename[4:] nil =parent.Model.AddNull(MARKER_ + basename) kine = nil.Kinematics.Global kine.posx = pos[0] kine.posy = pos[1] kine.posz = pos[2] nil.shadow_icon = 4 nil.shadow_scaleX = 0.5 nil.shadow_scaleY = 0.5 nil.shadow_scaleZ = 0.5 return None def do_it(): selection = Application.Selection if selection.Count 0: comp = selection(0) marker_at_center(comp) return None do_it() 2012/7/9 Vincent Ullmann vincent.ullm...@googlemail.com For the Center i did a little Script some time ago Sadly it only works when the Object got no Transformations on it. Also these RotationStuff may be incorrect To get a BoundingBox, you could try to modify this, so that it keeps the lowest/highest X/Y/Z-Component and Outputs them (See the CustomICE-Node-Example Get BoundingBox, thats exactly the thing i would do in jScript to get a BoundingBox) // Get Selection var oSel = selection(0); var oSelCtr = Sel_Center(oSel); var vVecX = oSelCtr[0]; var vVecY = oSelCtr[1]; var vVecZ = oSelCtr[2]; var vRotX = oSelCtr[3]; var vRotY = oSelCtr[4]; var vRotZ = oSelCtr[5]; // // Get Selection Center function Sel_Center(oSel) { var vAllVerts = 0; var vPosX = 0; var vPosY = 0; var vPosZ = 0; var vNrmX = 0; var vNrmY = 0; var vNrmZ = 0; var oSelType = oSel.Type; switch (oSelType) { // If Poly or Edge case polySubComponent: case edgeSubComponent: var vSubCompCount = oSel.SubComponent.ComponentCollection.Count; for (i=0; ivSubCompCount; i++) { var vVertCount = oSel.SubComponent.ComponentCollection.Item(i).Vertices.Count; for (j=0; jvVertCount; j++) { var vAllVerts = vAllVerts + 1; var vPosX = vPosX + oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Position.x; var vPosY = vPosY + oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Position.y; var vPosZ = vPosZ + oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Position.z; var vNrmX = vNrmX + oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Normal.x; var vNrmY = vNrmY + oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Normal.y; var vNrmZ = vNrmZ + oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Normal.z; } // for j End } // for i End break; // Case End // If Vertex case pntSubComponent: var vAllVerts = oSel.SubComponent.ComponentCollection.Count; for (i=0; ivAllVerts; i++) { var vPosX = vPosX + oSel.SubComponent.ComponentCollection.Item(i).Position.x; var vPosY = vPosY + oSel.SubComponent.ComponentCollection.Item(i).Position.y; var vPosZ = vPosZ + oSel.SubComponent.ComponentCollection.Item(i).Position.z; var vNrmX = vNrmX + oSel.SubComponent.ComponentCollection.Item(i).Normal.x; var vNrmY = vNrmY + oSel.SubComponent.ComponentCollection.Item(i).Normal.y; var vNrmZ = vNrmZ + oSel.SubComponent.ComponentCollection.Item(i).Normal.z; } // for i End break; //If Selection =/= Poly/Vertex/Edge default: var vAllVerts = 1; } //Switch End //Convert Normal-Direction to Rotation var vecWorldX = XSIMath.CreateVector3(); vecWorldX.Set (1,0,0); var vecWorldY = XSIMath.CreateVector3(); vecWorldY.Set (0,1,0); var vecWorldZ = XSIMath.CreateVector3(); vecWorldZ.Set (0,0,1); var vecNrmX = XSIMath.CreateVector3(); vecNrmX.Set ( vNrmX/vAllVerts, vNrmY/vAllVerts, vNrmZ/vAllVerts); var vecNrmY = XSIMath.CreateVector3(); vecNrmY.Set ( 0, vNrmY/vAllVerts, vNrmZ/vAllVerts); var vecNrmZ = XSIMath.CreateVector3(); vecNrmZ.Set ( 0, 0, vNrmZ/vAllVerts); var vRotX = vecNrmX.Dot (vecWorldX); var vRotY = vecNrmY.Dot (vecWorldY); var vRotZ = vecNrmZ.Dot (vecWorldZ); LogMessage (Position: X: + vPosX/vAllVerts + / Y: + vPosY/vAllVerts + / Z: + vPosZ/vAllVerts); LogMessage (Rotation: X: + vRotX + / Y: + vRotY + / Z: + vRotZ); return [vPosX/vAllVerts, vPosY/vAllVerts, vPosZ/vAllVerts, vRotX, vRotY, vRotZ] } //
Re: XSI Import troubles
No need of plugins Eric, when coding on Notepad, you know you have to be aware of everything and can't trust anything. That makes your code looking * sublime*, smarter and more professional ! :D -- Jo 2012/6/7 Eric Thivierge ethivie...@gmail.com Notepad might have a plugin for all of that... Eric Thivierge http://www.ethivierge.com
Re: Scripting Development with an external IDE
Sublime has this shiny side I don't like and do definitively less than an emacs or cie, its the perfect tool to develop snippets and little tools tho ... What a good IDE should have: - a good code editor - an awesome project manager - an amazing debugger - a without-effort integrated build environment IMHO, Sublime fails on the last 3 points. When is coming the time to develop serious stuff and packages in python, no doubts, Eclipse is the only valid choice to me ! I guess, the most important is just you feel comfortable with your choice and super-productive ... I find often myself more confortable to write in the notepad app than in a code editor ... - jo 2012/5/31 Dan Yargici danyarg...@gmail.com Thanks Alan, I'm sold! I was using Komodo, however I just do the odd script here and there so this suits my needs better I think. It's great that it's available on Linux also. On Thu, May 31, 2012 at 2:34 AM, Alan Fregtman alan.fregt...@gmail.comwrote: Screencast.com cut me off for eating the free monthly limit of 2GB, lol. Just put the video on my blog thanks to Vimeo: http://darkvertex.com/wp/2012/05/30/i-love-sublimetext2/ On Tue, May 29, 2012 at 9:58 PM, Alan Fregtman alan.fregt...@gmail.comwrote: Recorded a little video running down through some Sublime features: http://www.screencast.com/t/0KEX9gW0 My apologies for uhms, ehhs and ocassional ranting. This is what happens when you record straight ahead. :p By the way, while it is a commercial product, you can try it out for as long as you wish with all features; it just nags once every so many file saves. Go try! http://www.sublimetext.com/2 On Tue, May 29, 2012 at 12:04 PM, Alan Fregtman alan.fregt...@gmail.com wrote: It's good for everyone, projects big or small. The multi-select tricks in particular are like pure witchcraft. I'll make a video capture showing some of the cool stuff later when I get home. On Tue, May 29, 2012 at 11:56 AM, Gustavo Eggert Boehs gustav...@gmail.com wrote: what is so good about it? will it help me on my very narrow PY developments, or is it only good for thousands of lines type of work?
Re: PyQtForSoftimage vs Blur-dev
Hey Ana, I'm agreed with you about how softimage events are managed for now is not the best way to go ... Ideally, we should have QEvent subclasses for Softimage events and one and unique method with the following signature SoftimageWidget::softimageEvent(QEvent *event) to handle them (and fit the Qt design, events are not signals) and a method to register to them. There is also lot of other additions to think about to get everything's working fine. But as you guess, Steve or me have jobs and personal projects on the way which make our free time precious. As I told you, any additions or examples are welcomed to be commit to the github repo and would be greatly appreciated by Steve or me. In a wonderful world, it would be awesome if more people were jumping on Qt to let developers and artists having the same experience on the different platforms and 3d packages ... Thanks to have done that jump :) -jo 2012/5/8 Ana Gomez agomezalca...@gmail.com Hello again! My concern was if some features have been lost in the process of exposing the pyqt implementation from the Blur tools. Or if someone has had problems by using this plugin. You told me that people is using it, more or less, without problem so I'm going to keep testing it. I don't really want to install the Blur tools just for PyQt. I don't need its rest of tools, nor the wrappers for the rest of softwares. I see that Steven has just made a new example that uses a ui file in response to the last issue. Thanks and thanks for pointing me the issue, I hadn't read it. On the other hand, I've rewritten some of the code in order to control the XSI events because I don't like the idea of having unecessary active events. I read that Steven doesn't like this idea (last comments in Issue #1) but if you like, i'll give you the changes (well, I haven't invented the wheel). :)
Re: PyQt For Softimage
Hi Enrique, You can still (as suggested by Stefan) subscribe to the siOnValueChanged which will give you back a reference to the parameter to retrieve its new value. A good option would be to implement a custom engine. You can imagine a mechanism implemented in your main SynopticWidget which will be responsible to catch the xsi parameters bound to your sliders (acting like a mapping). For convenience, you should also implement a custom slider widget ala softimage reproducing the main signals/slots of the existing QSlider. Then a good API to bind/add a slider to a xsi parameter could be something like mysynoptic.addSlider(mysiobject.kine.posx), behind the scenes everything would be handled by your custom synoptic If you're worried by the performances especially with python, you still have the option to implement everything in cplusplus which should be faster in communicating with qt widgets and create a command to add xsi parameters to you synoptic. Considering the type of the parameter (string, float, whatever), your engine would be capable of install and bind the right widget. xsiparameters | handle by (siOnValueChanged) | SynopticWidget contains and bind to xsi parameters SynopticSlider contains and bind to xsi parameters SynopticController (why not to recreate a facial panel, its just 2d graphics ...) contains and bind to xsi parameters -jo 2012/5/7 Stefan Kubicek s...@tidbit-images.com I'm just diving into it as well, but the way I'd do it is to implement a siOnTimeChange event that either calls a function in your UI (or menu) to update it's parameters, or, if you want the UI to respond to value changes happening without the time slider being moved (somebody changes a parameter through scripting or the normal Softimage interface) you probably have to implement an onValueChanged event. How sophistivated this event is (whether it checks for what values actually have changed and whether the Qt UI has to be upated or not, or whether it just stupidly calls the Update QT UI function every time) comes down to performance. Keep it simple first and optimize if required. Would love to hear more ideas on this as well. Just bringing this thread back to life. We are getting more into using PYQT here and I am looking into completely replacing synoptics and use PYQT instead. I was hoping somebody could help me figure out how to get information from XSI sent to PYQT currently everything that I have done has been the opposite, where PYQT drives something, but does very little evaluation of the scene. An example would be. When a characters facial animation is animated, and the time slider scrubs, I will need the PYQT slider that drives that facial animation to detect the value change in XSI and show its new value in the menu. Currently I don't really know how to do that, as the example SignalSlot function that comes with this implementation only covers something with a registered event. Do I need to create onValueChanged events for every value on the rig? any help would be awesome, I'm pretty new to PYQT still. thanks, Enrique On Wed, Feb 29, 2012 at 3:29 PM, Enrique Caballero enriquecaball...@gmail.com wrote: For those of us using linux, is there an out of box PYQT implementation such as this that we can use? On Thu, Dec 8, 2011 at 6:45 AM, Alok Gandhi alok.gandhi2...@gmail.com* *wrote: Oh ok, thanks for the info Steven. On Wed, Dec 7, 2011 at 5:24 PM, Steven Caron car...@gmail.com wrote: well for your reference, i am using Alan Jones' cmake softimage module. it automates a lot of the process for creating softimage plugins with cmake. it can be found in the src\CMake\Modules folder. its very handy :) s On Wed, Dec 7, 2011 at 2:21 PM, Alok Gandhi alok.gandhi2...@gmail.com **wrote: Yep that works too, I knew that it did not need shader lib for sure, but was not sure, so I set the path anyways. On Wed, Dec 7, 2011 at 2:08 PM, Steven Caron car...@gmail.com wrote: well it doesn't need that actually, let the entry in the cmake gui stay red. just hit generate... does this work for you? -- -- -- --**- Stefan Kubicek Co-founder --**- keyvis digital imagery Wehrgasse 9 - Grüner Hof 1050 Vienna Austria Phone:+43/699/12614231 --- www.keyvis.at ste...@keyvis.at --- -- This email and its attachments are --confidential and for the recipient only--
Re: PyQtForSoftimage vs Blur-dev
Hi Ana, Qt on windows relies on the win32 api as well as Softimage (MFC). As they share a common base, both are hackable. So, whatever the strategy that is used, it still remains the same ... hooking a widget into the main softimage app by going thru the win32 api. The only main difference I would say by using pyQtSoftimage (except the source codes) is to not have to deal with all the overhead and extra layers Blur developers put over their modules/wrappers ... Those packages are both first steps considering more should be done by spending time on it and make things working better. I had lot of feedback around me saying studios are using this implementation ... so it should be solid enough to go with it. So feel free to make your own additions and come back here to share them with us ... :) -jo 2012/5/7 Ana Gomez agomezalca...@gmail.com Hello everybody! I'm trying PyQtForSoftimage and I'm wondering some questions. As far as I know, this plugin is based on Blur tools. So, which are the differences between them? Do they have the same features? (of course, from the point of view of PyQt) Thanks in advance and thanks to Steven Caron and Jo Benayoun for sharing it.
Re: Getting the objects to which a material was assigned in siOnEndCommand
Hey Nicolas, I know, this is not answering directly to your issue here, but rethinking to your problems (tracking FCurves, materials, etc) for the project you're working, I would ask why not building a custom scene graph (something relatively simple) where all nodes are just CRef (the encapsulated pointer to object should stay valid) pointing to SceneObjects. A custom scene graph would let you implement a faster visitor pattern that you could think of using the API, which would query the GetEvaluationID and GetHierarchicalEvaluationID (awesome to avoid to visit an entire branch - good for perfs) methods to track which scene objects is getting dirty. You could also register to siOnObjectAdded and siOnObjectRemoved events to keep your custom scene graph updated and aware to the scene. The scene graph would be built when your renderer gets initialized. Im quite sure, it doesnt fit your needs, but maybe it could help you to get new ideas :) A node of your scene graph, could be as simple as: struct scenegraphnode { /* next sibling and children as linkedlist */ struct scenegraphnode *siblings[2]; /* previous dirty number */ ulong_t prev_dirty; /* visitor to query the node */ void (*visit)(struct scenegraphnode *self, struct visitor v); /* the actual ref */ XSI::CRef ref; }; Your struct visitor could be a struct checking the dirty count, and if it is not equal to the previous, in charge of getting the new material, fcurve, position, etc and sending those new informations to your renderer. again, just an idea ... -jo 2012/5/4 Nicolas Burtnyk nico...@redshift3d.com Thanks Steven! I already use siOnConnectShader (and siOnDisconnectShader) to track changes to the shader tree. These don't get fired as a result of assigning a material to an object. siOnCreateShader only gets called when you create a shader node and in fact partially fails at even that since it doesn't get called when you create a material (which creates a shader as well). Thanks for the tip on material assignment via drag drop. Kind of a shame that it ends up calling CopyPaste command but it should be simple enough to monitor for that command as well. -Nicolas On Fri, May 4, 2012 at 4:54 PM, Steven Caron car...@gmail.com wrote: have you tried... siOnCreateShader? i generated this event from the wizard and it seems to log a lot of relevant info. also there is siOnConnectShader *Question*: Can material assignment happen without this command being run? In other words, is catching this command sufficient for monitoring all the ways that a material can be assigned to an object? I'm not very experienced with using Softimage, but I know that in Maya there are a million and one ways to assign materials. -one could change the shader graph but not the material assignment. -one could 'drag and drop' a material from the material view in the explorer on to an object. that calls 'CopyPaste()' command. i have always been on the fence whether that command is good or bad) On Fri, May 4, 2012 at 4:39 PM, Nicolas Burtnyk nico...@redshift3d.comwrote: Hi list people! For my custom renderer, I'm trying to keep track of when materials get assigned to objects. This is part of an overall system which tracks changes to the scene so that I can incrementally process only the parts of the scene that change between renders. Since there is no specific event that gets fired when a material is assigned to an object (that I know of - please correct me if I'm wrong!), I'm trying to use *siOnEndCommand *to catch the *AssignMaterial *command. *By the way Softimage devs: please add a OnMaterialAssigned event :)* I have 1 question and 1 issue: *Question*: Can material assignment happen without this command being run? In other words, is catching this command sufficient for monitoring all the ways that a material can be assigned to an object? I'm not very experienced with using Softimage, but I know that in Maya there are a million and one ways to assign materials. *Issue*: While I'm correctly receiving the ApplyMaterial command in the siOnEndCommand callback, I'm having trouble deciphering the command arguments. Basically I want to know the Material that was assigned and the Object(s) it was assigned to. Simple, right? In the siOnEndCommand callback, I get the Command attribute from the context and create a Command object from it. I then retreive the arguments using Command::GetArguments(). The ArgumentArray always has a count of 2 (whether I assign the material to 1 or more objects). The second argument (ActionWhenLocalMaterialsOverlap) is irrelevant to me. The first argument is a CValueArray that has a CRef for the Material being assigned as its first element and some mysterious CRef as its second item. *My issue is that I don't know what to do with this strange CRef* . Here is a concrete example: I have 2 objects and 1 material in my scene and assign the material to
Re: Getting the objects to which a material was assigned in siOnEndCommand
I double check before suggesting it, on my side, its aware of material and animation. The hierarchical one is pretty awesome, since it avoids you to visit an entire subtree. so you go pretty quickly to the dirty CRef. 2012/5/4 Nicolas Burtnyk nico...@redshift3d.com To Guillaume: Thanks for the heads-up! Do you know of any example scripts that demonstrate this? I can't seem to assign materials to objects this way. Also I found 1 more: the ApplyShader command. To Jo: Well I wasn't even aware of this GetEvaluationID/ GetHierarchicalEvaluationID! I will definitely take a look at this. Thanks! On Fri, May 4, 2012 at 5:46 PM, jo benayoun jobenay...@gmail.com wrote: Hey Nicolas, I know, this is not answering directly to your issue here, but rethinking to your problems (tracking FCurves, materials, etc) for the project you're working, I would ask why not building a custom scene graph (something relatively simple) where all nodes are just CRef (the encapsulated pointer to object should stay valid) pointing to SceneObjects. A custom scene graph would let you implement a faster visitor pattern that you could think of using the API, which would query the GetEvaluationID and GetHierarchicalEvaluationID (awesome to avoid to visit an entire branch - good for perfs) methods to track which scene objects is getting dirty. You could also register to siOnObjectAdded and siOnObjectRemoved events to keep your custom scene graph updated and aware to the scene. The scene graph would be built when your renderer gets initialized. Im quite sure, it doesnt fit your needs, but maybe it could help you to get new ideas :) A node of your scene graph, could be as simple as: struct scenegraphnode { /* next sibling and children as linkedlist */ struct scenegraphnode *siblings[2]; /* previous dirty number */ ulong_t prev_dirty; /* visitor to query the node */ void (*visit)(struct scenegraphnode *self, struct visitor v); /* the actual ref */ XSI::CRef ref; }; Your struct visitor could be a struct checking the dirty count, and if it is not equal to the previous, in charge of getting the new material, fcurve, position, etc and sending those new informations to your renderer. again, just an idea ... -jo 2012/5/4 Nicolas Burtnyk nico...@redshift3d.com Thanks Steven! I already use siOnConnectShader (and siOnDisconnectShader) to track changes to the shader tree. These don't get fired as a result of assigning a material to an object. siOnCreateShader only gets called when you create a shader node and in fact partially fails at even that since it doesn't get called when you create a material (which creates a shader as well). Thanks for the tip on material assignment via drag drop. Kind of a shame that it ends up calling CopyPaste command but it should be simple enough to monitor for that command as well. -Nicolas On Fri, May 4, 2012 at 4:54 PM, Steven Caron car...@gmail.com wrote: have you tried... siOnCreateShader? i generated this event from the wizard and it seems to log a lot of relevant info. also there is siOnConnectShader *Question*: Can material assignment happen without this command being run? In other words, is catching this command sufficient for monitoring all the ways that a material can be assigned to an object? I'm not very experienced with using Softimage, but I know that in Maya there are a million and one ways to assign materials. -one could change the shader graph but not the material assignment. -one could 'drag and drop' a material from the material view in the explorer on to an object. that calls 'CopyPaste()' command. i have always been on the fence whether that command is good or bad) On Fri, May 4, 2012 at 4:39 PM, Nicolas Burtnyk nico...@redshift3d.com wrote: Hi list people! For my custom renderer, I'm trying to keep track of when materials get assigned to objects. This is part of an overall system which tracks changes to the scene so that I can incrementally process only the parts of the scene that change between renders. Since there is no specific event that gets fired when a material is assigned to an object (that I know of - please correct me if I'm wrong!), I'm trying to use *siOnEndCommand *to catch the *AssignMaterial *command. *By the way Softimage devs: please add a OnMaterialAssigned event :)* I have 1 question and 1 issue: *Question*: Can material assignment happen without this command being run? In other words, is catching this command sufficient for monitoring all the ways that a material can be assigned to an object? I'm not very experienced with using Softimage, but I know that in Maya there are a million and one ways to assign materials. *Issue*: While I'm correctly receiving the ApplyMaterial command in the siOnEndCommand callback, I'm having trouble deciphering the command arguments. Basically I want to know the Material that was assigned
Re: Getting the objects to which a material was assigned in siOnEndCommand
Well, you can still subscribe to an event like siOnValueChange or why not a timer that will helps you to get an idea to when run your visitor thru your custom scene graph. It would be enough to make a trace between each user edit. At worst you can adjust the stepping of your custom timer. Also since you're only storing the previous ID, that should not be a problem. Thinking of lexer implementation, why not storing the last two IDs, and be sure your object is actually changing before firing an update. Im quite sure actually you will get the opposite issue, that the render event is fired too often instead of not enough ... Anyways, there is more to explore and if you go with that way, Im sure new issues will pop up ! :) -jo 2012/5/4 Nicolas Burtnyk nico...@redshift3d.com To Steven : if the application of the shader to the object creates a shader and a material and connects the shader to the material, then yeah, those events are called. But if you assign an existing material, they're not. To Jo: I'm playing with this right now and it's very promising. I wonder though if it's possible to get the same hierarchical evaluation id after some edits. The reason I'm worried about this is that I noticed that assigning different materials to an object caused the hierarchical evaluation id to go up and down. I wonder if some combination of edits could result in the same evaluation id and therefore cause my system to think nothing has changed which would obviously be pretty bad! Other than this worry, and verifying that this is valid for all kinds of edits that might change the way an object is rendered, this technique of checking the hierarchical object id might be a lot simpler than chasing down every last little command, callback, etc.. that can change the scene. Thanks guys!! On Fri, May 4, 2012 at 6:02 PM, Steven Caron car...@gmail.com wrote: in my quick test i applied multiple shader's from the menu, both standard and custom. both seemed to get fired. i could have been wrong. On Fri, May 4, 2012 at 5:20 PM, Nicolas Burtnyk nico...@redshift3d.comwrote: Thanks Steven! I already use siOnConnectShader (and siOnDisconnectShader) to track changes to the shader tree. These don't get fired as a result of assigning a material to an object. siOnCreateShader only gets called when you create a shader node and in fact partially fails at even that since it doesn't get called when you create a material (which creates a shader as well). Thanks for the tip on material assignment via drag drop. Kind of a shame that it ends up calling CopyPaste command but it should be simple enough to monitor for that command as well. -Nicolas On Fri, May 4, 2012 at 4:54 PM, Steven Caron car...@gmail.com wrote: have you tried... siOnCreateShader? i generated this event from the wizard and it seems to log a lot of relevant info. also there is siOnConnectShader *Question*: Can material assignment happen without this command being run? In other words, is catching this command sufficient for monitoring all the ways that a material can be assigned to an object? I'm not very experienced with using Softimage, but I know that in Maya there are a million and one ways to assign materials. -one could change the shader graph but not the material assignment. -one could 'drag and drop' a material from the material view in the explorer on to an object. that calls 'CopyPaste()' command. i have always been on the fence whether that command is good or bad) On Fri, May 4, 2012 at 4:39 PM, Nicolas Burtnyk nico...@redshift3d.com wrote: Hi list people! For my custom renderer, I'm trying to keep track of when materials get assigned to objects. This is part of an overall system which tracks changes to the scene so that I can incrementally process only the parts of the scene that change between renders. Since there is no specific event that gets fired when a material is assigned to an object (that I know of - please correct me if I'm wrong!), I'm trying to use *siOnEndCommand *to catch the *AssignMaterial *command. *By the way Softimage devs: please add a OnMaterialAssigned event :)* I have 1 question and 1 issue: *Question*: Can material assignment happen without this command being run? In other words, is catching this command sufficient for monitoring all the ways that a material can be assigned to an object? I'm not very experienced with using Softimage, but I know that in Maya there are a million and one ways to assign materials. *Issue*: While I'm correctly receiving the ApplyMaterial command in the siOnEndCommand callback, I'm having trouble deciphering the command arguments. Basically I want to know the Material that was assigned and the Object(s) it was assigned to. Simple, right? In the siOnEndCommand callback, I get the Command attribute from the context and create a Command object from it. I then retreive the arguments using
Re: Getting the objects to which a material was assigned in siOnEndCommand
Hey Nicolas, This depends of the frequency of your scenegraph traversal. For sure, if you run it like this Start: sphere with bend modifier, Material2 assigned (226) traversal Assign material 1 (206) Change the bend angle 10 times (226) traversal the system will break. But visiting at this frequency will work: Start: sphere with bend modifier, Material2 assigned (226) traversal Assign material 1 (206) traversal Change the bend angle 10 times (226) traversal Since you can avoid visiting entire branches because of the hierarchical attribute. I bet a traversal would be really fast to do reducing the number of visited node (all nodes are not traversed unlike the original visitor pattern). The frequency is up to you, with a custom timer, or by subscribing to siOnValueChanged should be enough. -jo 2012/5/4 Nicolas Burtnyk nico...@redshift3d.com Unfortunately I was able to pretty easily break this system :( While playing around with all kinds of edits, I noticed that when I had Material1 assigned to my object the hierarchical eval id was 20 less than when I had Material2 assigned. I also noticed that if the object had a bend modifier on it, changing the bend angle would increment the hierarchical eval id by 2. So with this sequence of events, I got the same eval id before and after edits. *Hierarchical eval id of the sphere is shown in brackets at each step* Start: sphere with bend modifier, Material2 assigned (226) Assign material 1 (206) Change the bend angle 10 times (226) The problem is the way the hierarchical eval id is computed by simply summing the eval ids up the hierarchy. Maybe instead, I could crawl the hierarchy myself (annoying but not a big deal) and compute a hash from all eval ids in the hierarchy of the object. Assuming a suitable hash function, any change to any eval id in the hierarchy would cause big changes in the hash and bring the probability of a false negative down to some infinitesimally small amount. On Fri, May 4, 2012 at 6:12 PM, Nicolas Burtnyk nico...@redshift3d.comwrote: To Steven : if the application of the shader to the object creates a shader and a material and connects the shader to the material, then yeah, those events are called. But if you assign an existing material, they're not. To Jo: I'm playing with this right now and it's very promising. I wonder though if it's possible to get the same hierarchical evaluation id after some edits. The reason I'm worried about this is that I noticed that assigning different materials to an object caused the hierarchical evaluation id to go up and down. I wonder if some combination of edits could result in the same evaluation id and therefore cause my system to think nothing has changed which would obviously be pretty bad! Other than this worry, and verifying that this is valid for all kinds of edits that might change the way an object is rendered, this technique of checking the hierarchical object id might be a lot simpler than chasing down every last little command, callback, etc.. that can change the scene. Thanks guys!! On Fri, May 4, 2012 at 6:02 PM, Steven Caron car...@gmail.com wrote: in my quick test i applied multiple shader's from the menu, both standard and custom. both seemed to get fired. i could have been wrong. On Fri, May 4, 2012 at 5:20 PM, Nicolas Burtnyk nico...@redshift3d.comwrote: Thanks Steven! I already use siOnConnectShader (and siOnDisconnectShader) to track changes to the shader tree. These don't get fired as a result of assigning a material to an object. siOnCreateShader only gets called when you create a shader node and in fact partially fails at even that since it doesn't get called when you create a material (which creates a shader as well). Thanks for the tip on material assignment via drag drop. Kind of a shame that it ends up calling CopyPaste command but it should be simple enough to monitor for that command as well. -Nicolas On Fri, May 4, 2012 at 4:54 PM, Steven Caron car...@gmail.com wrote: have you tried... siOnCreateShader? i generated this event from the wizard and it seems to log a lot of relevant info. also there is siOnConnectShader *Question*: Can material assignment happen without this command being run? In other words, is catching this command sufficient for monitoring all the ways that a material can be assigned to an object? I'm not very experienced with using Softimage, but I know that in Maya there are a million and one ways to assign materials. -one could change the shader graph but not the material assignment. -one could 'drag and drop' a material from the material view in the explorer on to an object. that calls 'CopyPaste()' command. i have always been on the fence whether that command is good or bad) On Fri, May 4, 2012 at 4:39 PM, Nicolas Burtnyk nico...@redshift3d.com wrote: Hi list people! For my custom renderer, I'm trying to keep track of when materials
Re: Getting the objects to which a material was assigned in siOnEndCommand
Hey Nicolas, I think there is a misunderstanding on what I'm suggesting and what you could expect. 1/ When I was talking about increasing the frequency of the custom scene graph traversal, I was thinking to it in the context of a quick preview ala render region where things have to be updated when a slider is touched. subscribing to the siOnValueChanged or with a custom timer fit the case. 2/ A regular scene graph traversing would happen in the context of your render is launched but with a range of frames (let say 0-100) where you dont need to take care of user edits. It means, that the user press starts, your scene graph gets initialized and scene graph traversing is done for every frame. ID is ideal to track animated objects, ... 3/ The other and last one Im thinking about is if the user ask the renderer for one frame and press the button start, no need of a custom scene graph. You have to evaluate everything. In this three cases, I don't see which one would make the system breaks considering the ID increased or decreased between updates. If there is a context or something I didn't think about, please, let me know, that I could try to think to something else ! :) :) -jo 2012/5/4 Alok Gandhi alok.gandhi2...@gmail.com Hi Nicolas, If I understand what you are saying, for each dirty of your interest, you would like to capture and store that as soon as it happens and compare it with last render event to process the delta change. And right now you the challenge that you are faced with is capturing the dirties, specially with the material assignment. But isn't it true that Joe's proposal lets you visit the scene graph to capture the scene graph changes at each render, still doing the same thing but with a different approach. Please correct me if I am wrong. Alok.
Re: [C++] store Fcurve in a CRefArray?
Hey Ahmidou, Is the ref you try to add to the array is the ref returned by the FCurve::GetRef() method ? -jo 2012/5/2 Ahmidou Lyazidi ahmidou@gmail.com Hi Is it possible ? I can't get it working... Thanks -- Ahmidou Lyazidi Director | TD | CG artist http://vimeo.com/ahmidou/videos
Re: Convert Position Fcurves key's tangents in 3d space
def find_closest_point(obj, pos): x, y, z = pos points = obj.ActivePrimitive.Geometry.Points count = points.Count points = points.PositionArray xx, yy, zz = points delta = [((x-xx[i])**2 + (y-yy[i])**2 + (z-zz[i])**2) for i in xrange(count)] return delta.index(min(delta)) results: # brad: 2380 in 0.0239490809458 sec. # alan: 2380 in 0.00761895761661 sec. # jojo: 2380 in 0.00452239920537 sec. jo 2012/5/2 Jens Lindgren jens.lindgren@gmail.com Nice find Alan! /Jens On Wed, May 2, 2012 at 8:25 PM, Alan Fregtman alan.fregt...@gmail.comwrote: Nice response man! A good way to paste code safely is to highlight it first: http://tohtml.com/python/ then copy from the browser and paste into Gmail while Rich Formatting is enabled. On Mon, Apr 30, 2012 at 2:19 PM, jo benayoun jobenay...@gmail.com wrote: Hi Ahmidou, looks quite nice ! :) For your problem, I would go in c by reproducing a kinda structure that mimic FCurves ones like the following. struct bezfragments { double cps[4][3]; uint_t interp; }; struct motionpath { constchar_t *source; ushort_t color[3]; uint_t flags; uint_t nbezfragments; struct bezfragments *[1]; }; A MotionPath as a FCurve is a fixed length array of bezier curves with some extra informations like the object which is the source, the color of the path and some other flags for ui convenience (selection mode, ...). You have the choice to represent your bezier segments by pairing control points by 3 or by 4, I dont think it makes a huge difference. This system coupled with a MotionPathManager will avoid you to have to query the softimage API each time you need to redraw your viewport as your datas are cached in memory. Also, by subscripting to any event like siOnValueChange, you will be able to rebuild a motion path targeting just what you need. Also a good point for perfs. Anyways Here is a little pysnippet (I dont have the possibility to write it in C right now) ! It should I hope answer to your first question ! :) jo # Im quite sure gmail will eat my indent efforts so take care about that ! # Each key for each params must have a buddy on the others axes. # Create a cube, animate its pos's being sure a key is set at the same frame for the three axes. # import random class BezFragment(object): cpoints = tuple() interp = int() class MotionPath(object): source = str() color = tuple() bezfragments = tuple() def build_axis_data(param): keys = tuple(param.Source.Keys) res = list() bfrag = None i = 0 while i (len(keys)-1): cp = list() key = keys[i] nextkey = keys[i+1] cp.append(round(key.Value, 1)) cp.append(round(key.Time, 1)) cp.append(round(key.Value + key.LeftTanX, 1)) cp.append(round(key.Time + key.LeftTanY, 1)) cp.append(round(nextkey.Value - key.RightTanY, 1)) cp.append(round(nextkey.Time - key.RightTanX, 1)) cp.append(round(nextkey.Value, 1)) cp.append(round(nextkey.Time, 1)) bfrag = BezFragment() res.append(bfrag) bfrag.interp = key.Interpolation bfrag.cpoints = tuple(cp) i += 1 return tuple(res) def build_motion_path(siobj): x = build_axis_data(siobj.Kinematics.Local.posx) y = build_axis_data(siobj.Kinematics.Local.posy) z = build_axis_data(siobj.Kinematics.Local.posz) mp = MotionPath() mp.source = siobj.FullName mp.color = (random.randint(120, 255), random.randint(120, 255), random.randint(120, 255), ) mp.bezfragments = tuple(zip(x, y, z)) return mp def log_bezfragment(bfrag): msg = {0}:({1}, {2})---o ({3}, {4}) ({5}, {6})o---({7}, {8})\n \ \__/ print msg.format(, *bfrag.cpoints) return None def log_obj_motionpath(): for obj in Application.Selection: mp = build_motion_path(obj) print source: {0}.format(mp.source) print mp-color: {0}.format(mp.color) for bezf in mp.bezfragments: print \ncp for xyz in bezf: log_bezfragment(xyz) return None log_obj_motionpath() 2012/4/30 Ahmidou Lyazidi ahmidou@gmail.com I think I got it :) 2012/4/30 Halim Negadi hneg...@gmail.com Looks awesome Ahmidou, can't wait to play with it. Cheers, H. On Mon, Apr 30, 2012 at 4:44 PM, Ahmidou Lyazidi ahmidou@gmail.com wrote: Well, as soon as I have resolved the tangent handle stuff :) I'm sure it's simple, but I can't get
Re: Convert Position Fcurves key's tangents in 3d space
oops ! wrong topic :( 2012/5/2 Eric Thivierge ethivie...@gmail.com PYTHON THUNDER DOME :D 2 coders enter, 1 coder leaves Eric Thivierge http://www.ethivierge.com On Thu, May 3, 2012 at 4:57 AM, jo benayoun jobenay...@gmail.com wrote: def find_closest_point(obj, pos): x, y, z = pos points = obj.ActivePrimitive.Geometry.Points count = points.Count points = points.PositionArray xx, yy, zz = points delta = [((x-xx[i])**2 + (y-yy[i])**2 + (z-zz[i])**2) for i in xrange(count)] return delta.index(min(delta)) results: # brad: 2380 in 0.0239490809458 sec. # alan: 2380 in 0.00761895761661 sec. # jojo: 2380 in 0.00452239920537 sec. jo
Re: Scripting: Closest Point On a Point Cloud?
def find_closest_point(obj, pos): x, y, z = pos points = obj.ActivePrimitive.Geometry. Points count = points.Count points = points.PositionArray xx, yy, zz = points delta = [((x-xx[i])**2 + (y-yy[i])**2 + (z-zz[i])**2) for i in xrange(count)] return delta.index(min(delta)) results: # brad: 2380 in 0.0239490809458 sec. # alan: 2380 in 0.00761895761661 sec. # jojo: 2380 in 0.00452239920537 sec. 2012/5/2 Bradley Gabe witha...@gmail.com Thanks Alan! You have officially leveled up and gained the title of SI Python Optimizer (Spo). I knew the math, but for some reason assumed that compiled Math functions would run faster than Python. That'll teach me. [?] Actually, thinking about it now, anything that has to repeated call the COM layer would end up being slow-ish. Nifty trick there using a key sort in lieu of comparing values to figure out the min. FYI, it might be even faster for multi-Pos queries to provide an optional 3rd argument allowing the user to input the PosArray if they have already generated it: def FindClosestPoint( inObj, inPos, pos=None ): fX, fY, fZ = inPos.Get2() if not pos: pts = inObj.ActivePrimitive.Geometry.Points pos = pts.PositionArray d = dict( [ (i, (fX-pos[0][i])**2 + (fY-pos[1][i])**2 + (fZ-pos[2][i])**2 ) for i in xrange(pts.Count) ] ) closestIndices = sorted(d, key=d.get) # distance = d[closestIndices[0]]**0.5 return closestIndices[0] On Wed, May 2, 2012 at 2:00 PM, Alan Fregtman alan.fregt...@gmail.comwrote: Hey Brad, I wondered if using math directly would be faster than working with XSIMath objects, so I tried. You probably knew this, but to get a distance between two 3D vectors the formula is quite easy: * d = √ (Ax-Bx)2 + (Ay-By)2 + (Az-Bz)2 * where A and B are two vectors to measure from. However, you can skip the squareroot if you're only comparing relative distances. Squareroots can be computationally expensive. Knowing this, I wrote a version which appears to run about 77% faster, and it's shorter too! (It takes 4.5s testing a null near a 1000x1000 pointcloud grid, vs your code taking about 20.3s on the same task.) def FindClosestPoint( inObj, inPos ): fX, fY, fZ = inPos.Get2() pts = inObj.ActivePrimitive.Geometry.Points pos = pts.PositionArray d = dict( [ (i, (fX-pos[0][i])**2 + (fY-pos[1][i])**2 + (fZ-pos[2][i])**2 ) for i in xrange(pts.Count) ] ) closestIndices = sorted(d, key=d.get) # distance = d[closestIndices[0]]**0.5 return closestIndices[0] I love me a Python optimization challenge. :) Cheers, -- Alan ps: Friendly nod to Xavier for pointing out ** syntax does to the power of so I don't need to use math.pow() in my code. On Tue, May 1, 2012 at 5:55 PM, Bradley Gabe witha...@gmail.com wrote: Sure, have at it: def FindClosestPoint( inObj, inPos): dist = 1 ID = -1 Pos = XSIMath.CreateVector3() PosArr = inObj.ActivePrimitive.Geometry.Points.PositionArray for index in range(inObj.ActivePrimitive.Geometry.Points.Count): Pos.Set( PosArr[0][index], PosArr[1][index], PosArr[2][index] ) Pos.SubInPlace(inPos) D = Pos.Length() if D dist: dist = D ID = index return ID On Tue, May 1, 2012 at 5:52 PM, Alan Fregtman alan.fregt...@gmail.comwrote: Care to share a sample snippet? Maybe there are even faster ways to approach it. On Tue, May 1, 2012 at 5:42 PM, Bradley Gabe witha...@gmail.comwrote: UPDATE: All things considered, it's not too horrible simply looping through every position from the Geometry.Points.PositionArray, and comparing the distance in order to find the closest point in the cloud. So far, that technique is faster than anything else I've attempted to cook up. -Bradley On Tue, May 1, 2012 at 3:01 PM, Bradley Gabe witha...@gmail.comwrote: Nah, it was raising errors when I tried it before starting this thread, and it still is now [?]: # ERROR : 2028 - Traceback (most recent call last): # File Script Block , line 2, in module # obj.ActivePrimitive.Geometry.GetClosestLocations([0, 0, 0]) # File COMObject unknown, line 2, in GetClosestLocations # COM Error: Invalid argument specified. - [line 2] On Tue, May 1, 2012 at 2:58 PM, Bradley Gabe witha...@gmail.comwrote: I was going by the following quote from the docs: Note: Point locators are currently only supported by NurbsSurfaceMesh and PolygonMesh objects. But I'll still give it a shot... On Tue, May 1, 2012 at 2:54 PM, Stephen Blair stephen.bl...@autodesk.com wrote: But doesn't a PointCloudGeometry support GetClosestLocations? Can you use that (I didn't try it yet) ? 338.gif347.gif
Re: Convert Position Fcurves key's tangents in 3d space
Hi Ahmidou, looks quite nice ! :) For your problem, I would go in c by reproducing a kinda structure that mimic FCurves ones like the following. struct bezfragments { double cps[4][3]; uint_t interp; }; struct motionpath { constchar_t *source; ushort_t color[3]; uint_t flags; uint_t nbezfragments; struct bezfragments *[1]; }; A MotionPath as a FCurve is a fixed length array of bezier curves with some extra informations like the object which is the source, the color of the path and some other flags for ui convenience (selection mode, ...). You have the choice to represent your bezier segments by pairing control points by 3 or by 4, I dont think it makes a huge difference. This system coupled with a MotionPathManager will avoid you to have to query the softimage API each time you need to redraw your viewport as your datas are cached in memory. Also, by subscripting to any event like siOnValueChange, you will be able to rebuild a motion path targeting just what you need. Also a good point for perfs. Anyways Here is a little pysnippet (I dont have the possibility to write it in C right now) ! It should I hope answer to your first question ! :) jo # Im quite sure gmail will eat my indent efforts so take care about that ! # Each key for each params must have a buddy on the others axes. # Create a cube, animate its pos's being sure a key is set at the same frame for the three axes. # import random class BezFragment(object): cpoints = tuple() interp = int() class MotionPath(object): source = str() color = tuple() bezfragments = tuple() def build_axis_data(param): keys = tuple(param.Source.Keys) res = list() bfrag = None i = 0 while i (len(keys)-1): cp = list() key = keys[i] nextkey = keys[i+1] cp.append(round(key.Value, 1)) cp.append(round(key.Time, 1)) cp.append(round(key.Value + key.LeftTanX, 1)) cp.append(round(key.Time + key.LeftTanY, 1)) cp.append(round(nextkey.Value - key.RightTanY, 1)) cp.append(round(nextkey.Time - key.RightTanX, 1)) cp.append(round(nextkey.Value, 1)) cp.append(round(nextkey.Time, 1)) bfrag = BezFragment() res.append(bfrag) bfrag.interp = key.Interpolation bfrag.cpoints = tuple(cp) i += 1 return tuple(res) def build_motion_path(siobj): x = build_axis_data(siobj.Kinematics.Local.posx) y = build_axis_data(siobj.Kinematics.Local.posy) z = build_axis_data(siobj.Kinematics.Local.posz) mp = MotionPath() mp.source = siobj.FullName mp.color = (random.randint(120, 255), random.randint(120, 255), random.randint(120, 255), ) mp.bezfragments = tuple(zip(x, y, z)) return mp def log_bezfragment(bfrag): msg = {0}:({1}, {2})---o ({3}, {4}) ({5}, {6})o---({7}, {8})\n \ \__/ print msg.format(, *bfrag.cpoints) return None def log_obj_motionpath(): for obj in Application.Selection: mp = build_motion_path(obj) print source: {0}.format(mp.source) print mp-color: {0}.format(mp.color) for bezf in mp.bezfragments: print \ncp for xyz in bezf: log_bezfragment(xyz) return None log_obj_motionpath() 2012/4/30 Ahmidou Lyazidi ahmidou@gmail.com I think I got it :) 2012/4/30 Halim Negadi hneg...@gmail.com Looks awesome Ahmidou, can't wait to play with it. Cheers, H. On Mon, Apr 30, 2012 at 4:44 PM, Ahmidou Lyazidi ahmidou@gmail.comwrote: Well, as soon as I have resolved the tangent handle stuff :) I'm sure it's simple, but I can't get it... 2012/4/30 Philip Melancon philip.melan...@modusfx.com This is looking amazing, do you have an idea of when/how you plan to release this nice little piece of animation goodness? I know that the animators I work with would kill for something like this! Philip Melancon Lead Crowd TD Modus FX On 4/30/2012 10:30 AM, Xavier Lapointe wrote: Whoa, this is awesome. I feel some animators out there are probably jubilating right now :) No virus found in this message. Checked by AVG - www.avg.com Version: 2012.0.1913 / Virus Database: 2411/4969 - Release Date: 04/30/12 -- Ahmidou Lyazidi Director | TD | CG artist http://vimeo.com/ahmidou/videos -- Ahmidou Lyazidi Director | TD | CG artist http://vimeo.com/ahmidou/videos
Re: PyQt For Softimage - COM Error: Out of present range. (0x-7ffdfff6)
Hi Jared, yo Steve, Jared, you should unplug all the extras python modules and see how is output the anchor's adress (is valid ? is bigger than a long on your machine ?) from the cpp side. That's where I would start. jo 2012/4/30 Steven Caron car...@gmail.com hey jared i haven't seen this before. is there any other information you can share? s On Mon, Apr 30, 2012 at 7:09 AM, Jared Glass jared.gl...@triggerfish.co.za wrote: Hi There I recently moved the softimage workgroups that Steven's awesome PyQtForSoftimage plugin was installed to and since then the plugin has been giving the following error message every now and then: # ERROR : Traceback (most recent call last): # File Script Block , line 9, in module # Application.getQtSoftimageAnchor() # File COMObject Application, line 2, in getQtSoftimageAnchor # COM Error: Out of present range. (0x-7ffdfff6) BUT when I get this error I can still call: Application.killQtSoftimageAnchor() and that works absolutly fine. It seems that a freshly opened xsi's getQtSoftimageAnchor() will always work but after loading a scene the command may stop working. I say may because you can load a .scn and the plugin wont work but next time you load the exact same .scn it will. Also one of the more complex plugins I've created that uses the qtSoftimage now crashes instead of returning an error message. It didn't do this before the workgroup move. Could it be the move? The thing is I've uninstalled the addon from the moved workgroups and re-installed it just to make sure and that hasn't made the plugin any more stable. As I said it was working perfectly before. I'm using the PyQtForSoftimage_beta4.xsiaddon. Please let me know if anyone has any ideas? -- Kind Regards, Jared Glass jared.gl...@triggerfish.co.za | Technical Lead Triggerfish Animation Studios http://www.triggerfish.co.za Zambezia Movie http://www.zambeziamovie.com/ | Khumba Moviehttp://www.triggerfish.co.za/khumba/
Re: CRefArray doesn't respect C++ copy semantics
Hey Nicolas, never ran into that, but should definitively logged as bug ! :( jo 2012/4/30 Nicolas Burtnyk nico...@redshift3d.com I ran into this today while trying to figure out why my code was broken. Thought I'd pass this along and hopefully save someone some wasted time in the future... CRefArray a1; a1.Add(CRef()); a1.Add(CRef()); CRefArray a2(a1); a2.Add(CRef()); LONG n1 = a1.GetCount(); // expected n1 == 2 LONG n2 = a2.GetCount(); // expected n2 == 3 I expected a2 to be a copy of a1 before the last add and so I assumed a1 would have 2 elements. Instead, I was surprised to find that n1 == n2 == 3!
Re: CRefArray doesn't respect C++ copy semantics
in this case, CRefArray a1; a1.Add(CRef()); a1.Add(CRef()); CRefArray a2(a1); a2.Add(CRef()); The copy constructor is invoked and is not the one you mentioned Alok but this one CRefArray(const CRefArray other) which have different behaviors and purposes than the overloaded assignment operator. *Copy constructor* is called every time a copy of an object is made. When you pass an object by value, either into a function or as a function's return value, a temporary copy of that object is made. Assignment operator is called whenever you assign to an object. Assignment operator must check to see if the right-hand side of the assignment operator is the object itself. It executes only the two sides are not equal Referring to the docs : Constructs a CRefArrayhttp://download.autodesk.com/global/docs/softimage2012/en_us/sdkguide/si_cpp/classXSI_1_1CRefArray.htmlobject from another CRefArrayhttp://download.autodesk.com/global/docs/softimage2012/en_us/sdkguide/si_cpp/classXSI_1_1CRefArray.htmlobject. which is the expected behavior. For completeness, the copy constructor in the case of an array, a string, a ptr or whatever container has a main purpose to pass an implicit shared memory block to save memory specially in the case of passing arguments by value. A deep copy is done only at the first call of a method non-const which should create a brand new underlying object (concept called copy-on-write). In this case, it seems its not what happens ... which is a bug in all case unless its a wanted behavior and it should be specified in the doc ! A more comprehensible example is the python list example: doing an assignment mylist = myotherlist creates a shallow copy and returns the myotherlist object to the mylist which is not the case of calling the ctor directly with mylist = list(myotherlist). That's a behavior that could be implemented here. mylist = [1, 2] print mylist myotherlist = mylist mylist.append(6) print mylist print myotherlist myoolist = list(mylist) mylist.append(9) print mylist print myotherlist print myoolist Sethttp://download.autodesk.com/global/docs/softimage2012/en_us/sdkguide/si_cpp/classXSI_1_1CRefArray.html#acb58b1fecf704752ebcf59a50444cf37(const CValueArrayhttp://download.autodesk.com/global/docs/softimage2012/en_us/sdkguide/si_cpp/classXSI_1_1CValueArray.htmlin_valarray) I dont see any overloaded cast method nor ctors for a CRefArray to CValueArray. Even if there was, it would mean that your CValueArray have to be built from a CRefArray before being passed by reference. Which is an overhead instead of using the copy ctor. const is a keyword that we use to assure to the compiler, we will not try to modify the underlying memory block nor call any procedures that could do this. Of course, the compiler takes this as serious and do optimizations in consequences which is a good thing for us. jo 2012/4/30 piotrek marczak piotrek.marc...@gmail.com Maybe a2.Set(a1) or a2+=a1 would work? newbie question isn’t “const” keyword a hint that we won’t change input array? *From:* Alok Gandhi alok.gan...@modusfx.com *Sent:* Tuesday, May 01, 2012 1:31 AM *To:* softimage@listproc.autodesk.com *Subject:* Re: CRefArray doesn't respect C++ copy semantics The docs say that: CRefArrayhttp://download.autodesk.com/global/docs/softimage2012/en_us/sdkguide/si_cpp/classXSI_1_1CRefArray.html operator= ( const CRefArrayhttp://download.autodesk.com/global/docs/softimage2012/en_us/sdkguide/si_cpp/classXSI_1_1CRefArray.html *in_refArray* ) *Assigns* a CRefArrayhttp://download.autodesk.com/global/docs/softimage2012/en_us/sdkguide/si_cpp/classXSI_1_1CRefArray.htmlobject to this one. *Parameters:* in_refArray A constant CRefArrayhttp://download.autodesk.com/global/docs/softimage2012/en_us/sdkguide/si_cpp/classXSI_1_1CRefArray.htmlobject. *Returns:* A new reference object. So what I think is happening is that the copy constructor is doing exactly what it is supposed to do and returns the new CRefArray object which still points to a1, 'assigns' is the operative word here. To keep them separate I would rather do: CRefArray a1; a1.Add(CRef()); a1.Add(CRef()); CRefArray a2; for(int i=0; ia1.GetCount(); i++) { a2.Add(a1[i]); } a2.Add(CRef()); //a2.Add(CRef()); LONG n1 = a1.GetCount(); // expected n1 == 2 LONG n2 = a2.GetCount(); // expected n2 == 3 which gives me correctly: # VERBOSE : cRefArrayTest_Execute called # VERBOSE : Count a1: 2 # VERBOSE : Count a2: 3 On 4/30/2012 7:13 PM, Nicolas Burtnyk wrote: Yeah, exactly as I unfortunately discovered :( On Mon, Apr 30, 2012 at 3:49 PM, Alok Gandhi alok.gan...@modusfx.comwrote: A quick test gives me following result: # VERBOSE : cRefArrayTest_Execute called # VERBOSE : Count a1: 3 # VERBOSE : Count a2: 3 On 4/30/2012 6:24 PM, Nicolas Burtnyk wrote: I ran into this today while trying to figure out why my code was broken.
Re: install directories
Oh ! I see, makes sense :) You can still look in the winreg, you have the install paths per version and per machine. You launch a shell or a pyscript from your cmake at compile time to retrieve those informations. 2012/4/27 Steven Caron car...@gmail.com thanks jo Something in mind or happened to you ? nope, just improving my cmake search directories On Fri, Apr 27, 2012 at 10:24 AM, jo benayoun jobenay...@gmail.comwrote: Hey Steve, I install on vm, my softimage versions in the same legacy folder than before adsk acquisition meaning D:\\Softimage\\whatever_name_I_use. On my host machine, I have them in the same folder than Maya, D:\\Program Files[(x64)]\\Autodesk\\. I never had any troubles on both sides (work production as customization). Something in mind or happened to you ? jo 2012/4/27 Steven Caron car...@gmail.com hey guys i wanted to gather some feedback about where people install softimage... who uses the default installation directory and who uses a modified installation directory? if you use a modified folder what types of variations do you make? i personally named 2012 Subscription Advantage Pack to 2012.5. s
Re: Softimage development
*Couple people from PDI were around too saying they were using Soft|3D for a show that would have blown our minds (which ended up becoming shrek).* From what I heard, *Antz* has also been done with Softimage by PDI (*Antz*was the first movie of the couple PDI-Dreamworks before *Shrek*) ... jo 2012/4/18 Matt Lind ml...@carbinestudios.com And Ovaltine was there…. ** ** ** ** ** ** ** ** *From:* softimage-boun...@listproc.autodesk.com [mailto: softimage-boun...@listproc.autodesk.com] *On Behalf Of *Raffaele Fragapane *Sent:* Wednesday, April 18, 2012 7:40 PM *To:* softimage@listproc.autodesk.com *Subject:* Re: Softimage development ** ** Last part I meant in the context of the original timeline I posted, sorry. Jan '98 and then March '98 in Milan, first at smau and then at the local siggy chapter, MS and Avid had opposing stands and I'm sure Soft was still with MS back then, and DS was being demoed by someone I don't remember, and twister by Raffaele Rodaro on the floor. The Avid guys were clearly resenting it as the media composer station had no crowd :p I think it was the first time I saw the render region... maybe :) Couple people from PDI were around too saying they were using Soft|3D for a show that would have blown our minds (which ended up becoming shrek).*** * On Thu, Apr 19, 2012 at 12:23 PM, Luc-Eric Rousseau luceri...@gmail.com wrote: Last paragraph offsetted by two years.. we were sold to Avid in 1998, and shipped XSI in year 2000. On Apr 18, 2012 5:40 PM, Raffaele Fragapane raffsxsil...@googlemail.com wrote: Actually I can think of a couple names that drifted in and out that I recognized across different lists and stuff. I think Brent might be kidding there, as 14 years and two months ago Maya was being released for the first time, and only became remotely usable a few months later with 1.0.1 (Q4 98). At that point it had so many issues and limitations (many of them similar to xsi 1 ironically), that most of us only started taking it seriously with 1.5, which sadly was an IRIX only release (only a few weeks after the buggy 1.0.1 for win). 2.5.2 in 2000 is where it really took off like a rocket. Weta's first images of gollum in the trailer and some leaks, together with Framestore moving across a few months before, and Dneg choosing maya and getting all of pitch black done with it in record time and budget spun the hype mill so hard there was no going back in public perception. Producers were mesemrized by Weta's results and Dnegs budgets, TDs were swayed by having scripting (at all) and an API that didn't suck yards of penis, and decision makers all swung around within less than a year between 99 and 2k. Sumatra was still unseen at that point, the buzz was around the beta of twister that was being demoed alongside Softimage|DS. This was at the microsoft stand, right across the Avid one. You could zap a cellphone dead from static just walking between the two :p On Thu, Apr 19, 2012 at 1:30 AM, Xavier Lapointe xl.mailingl...@gmail.com wrote: I would love hearing about maya devs who switched to the xsi team ! Not sure that ever happened ... (unless that was sarcasm) -- Our users will know fear and cower before our software! Ship it! Ship it and let them flee like the dogs they are!
Re: Envelope Weights Without the Envelope Op?
Hi Bradley, What about transferring the weights on a cav map (script or direct paint on it ?), creating a group of siobjects and keep a relationship between both by the display color - color at vertex (smooth weights should not be that easy to process, but at least absolute ones should be ... ) ?? Another solution could be a 'userdatamap' ('facerobot' uses some to store extra envelopes informations for custom ops) mixed with a cav map. This last idea would be the same as applying an envelope, painting it, creating a group to keep a track to the deformers, duplicating the envelope cluster and it's map, and finally freezing. just some thoughts, :) jo 2012/4/17 Bradley Gabe witha...@gmail.com I'd like to be able to use the envelope weighting workflow to control a custom ICE deformer, rather than an envelope op. The hacky way to do this is to mute the envelope operator, but I was wondering if anyone has figured out a more direct way to get access to the weight painting workflow without applying the envelope deformation. -B
Re: Cython
Hi Eugen, There is a bunch of tools like cython which are simply code generators (py - c, a quick google search should give you a good list of them). Imho, cython leads to ugly and unreadable python-like code and breaks the ideas and concepts behind the language. (there is a big bunch of devs behind the py core, and each design decision takes long talks and many implementations before being incorporated in the public release). Then, the c code generated by cython is unreadable and produces usually bigger binaries (example of a cython hello world generating hundreds lines of code where in a regular cpy extension, it could be a dozen). I also heard about lot of memory related problems. Maybe fixed now ? If you are looking for speed, I would recommend writing your modules directly in C using the C Python API which is kinda smart and convenient. (before being a language, python is a c library which is damn useful: unicode support, data-structures implementations, etc). If you don't want to bother with C, you can still use the 'ctypes' packages which will let you code in python and keeping a bridge to the C world for specific speed purposes. In a pure performances topic on processing softimage world datas, I observed: c dlls called by ctypes = c extensions using cpython = cython = pure ctypes. Im sure this scale depends of the context and the implementations. ** prototyping ops in cython using the si python binding ? writing qt widgets in cython using pyqt ? In the way I understand it, no, it should not be possible (or maybe with a huge amount of work and time to get everything working). A python binding can be tough to produce and usually deals/answers to specific needs/cases of the target API. That's why, I would tend to prefer pybindings provided by Qt or Softimage instead of solution like this. If there is no available binding (which is kinda rare cases), or when I need speed improvements, I'm choosing, pure c/cpp implementation bind with 'ctypes' or c python extensions. Finally, I would say, in a prototyping context, there is definitively no point to use something else than pure python and official bindings, then reimplementing the code in c/cpp. Anyway, hope this general feedback will be valuable to you, jo 2012/4/17 Eugen Sares softim...@keyvis.at without