Mailing List
Home
Forum Home
Softimage
Carrara
trueSpace
Dir3d-l
Maya - a powerful 3D animation and visual effects software
Macromedia Flash Development
Subjects
Cameras
scaleDown command
black out solved
Aircraft Tutorial
Mathematical XYZ ?
Its done This vs That
Its done first week
recommendations for screen video captures?
3DExplorer "Oddity "
New Director
ProTeam renewals
Fuel 's new websites (X post)
Blue peter create a make toy
targeting groups question
XPost: Shockwave 3D game ( sort of )
RES: RES: RES: Fish Modeling
Emitting particles from object intersection
Fuel 's new websites (X post)
Texturing
Big Break Contest Videos
New Plugins
Models and Texture on my updated site
Error Installing Patch tS6 6
Plasma?
Looking for Inspiration
Weird EMail Q
It 's done first week ?
Cherry not cranberry
New game
Camera Animation Problem
Particle plugins?
 
Running scripts are slow - newbie

Running scripts are slow - newbie

2005-05-24       - By kim aldis

 Back
Reply:     <<     11     12     13     14     15     16     17     18  

Excelent work. Your next assignment will be to port it to Jscript. ;-)



-- --Original Message-- --
From: owner-xsi@(protected) [mailto:owner-xsi@(protected)] On Behalf Of
Jeff McFall
Sent: 24 May 2005 22:22
To: XSI@(protected)
Subject: RE: Running scripts are slow - newbie

Well it took a bit longer than an evening ;) but I think Ive mostly made the
transition to the object model for at least parts of this.
This is my first real XSI script let alone something using the OM so Im
pretty happy with the results - that it even works) Ive learned a ton -
thanks to Kim and Bernard for their tips.

In researching this I am prety sure there are some additional ways to
streamline this.
Still takes about 4 minutes on my machine to do the 1500 odd objects.

Much thanks

Jeff



CreateImageClip "...\Mosaic_test_mdb\Pictures\keith.pic"

SelectObj "Clips.keith_pic"


set oImageClip = Selection(0)

set oImage = oImageClip.GetImage

' set the keyframe #
Tframe = 31

set oColl = createobject( "XSI.Collection" )

' wild card select of everything cube!!!
oColl.Items = "Cube*"

for each oCube in oColl
   
  selectObj oCube


xPos = oCube.posX.Value
yPos = oCube.posZ.Value
 

' objects X and Z positions must be within the bounds of the resolution of
the image being used ' my example uses an image of 720 x 540

    xImagepos = CInt(720 - (xPos*100))
    yImagepos = CInt(540 - (yPos*100))
   

' read the texture and apply the material
   

      set oPixelColor = oImage.GetPixel (xImagepos ,
yImagepos)  
     
      oCube.AddMaterial( "Phong")

      Set oPhong = oCube.Material.Shaders( "Phong" )

      set MatDifRed = oPhong.diffuse.red.AddFCurve()
      set MatDifgreen = oPhong.diffuse.green.AddFCurve()
      set MatDifblue = oPhong.diffuse.blue.AddFCurve()

      MatDifRed.AddKey Tframe, oPixelColor.Red
      MatDifRed.AddKey Tframe, oPixelColor.Green
      MatDifRed.AddKey Tframe, oPixelColor.Blue

      set MatAmbRed = oPhong.ambient.red.AddFCurve()
      set MatAmbgreen = oPhong.ambient.green.AddFCurve()
      set MatAmbblue = oPhong.ambient.blue.AddFCurve()

      MatDifRed.AddKey Tframe, oPixelColor.Red
      MatDifGreen.AddKey Tframe, oPixelColor.Green
      MatDifBlue.AddKey Tframe, oPixelColor.Blue

     
     
' lift them  
 
      height = ((oPixelColor.Red + oPixelColor.blue +
oPixelColor.green) * 1.5)
     
      set lift = oCube.posY.AddFCurve()
      lift.Addkey Tframe, height
     
' size them    * I bet there is a way to do this with 1 command


      size = (oPixelColor.Red + oPixelColor.blue +
oPixelColor.green)
     
      set bigness = oCube.sclx.AddFCurve()
      bigness.Addkey Tframe, size
     
      set bigness = oCube.scly.AddFCurve()
      bigness.Addkey Tframe, size  
     
      set bigness = oCube.sclz.AddFCurve()
      bigness.Addkey Tframe, size

next













-- --Original Message-- --
From: owner-xsi@(protected) [mailto:owner-xsi@(protected)] On Behalf Of
kim aldis
Sent: Monday, May 23, 2005 5:11 PM
To: XSI@(protected)
Subject: RE: Running scripts are slow - newbie

Here's another tip:

For I = 1 to 1567

Is a bit specific and you probably had to go to work on the scene to figure
that number out. Try something like this instead, which should ease you into
the OM gently by relieving you of a selectobj at the same time:-



set oColl = createobject( "XSI.Collection" )

' wild card select of everything cube!!!
oColl.Items = "Cube*"

for each oCube in oColl
 
    logmessage oCube
 
next

-- --Original Message-- --
From: owner-xsi@(protected) [mailto:owner-xsi@(protected)] On Behalf Of
Bernard Lebel
Sent: 23 May 2005 20:55
To: XSI@(protected)
Subject: Re: Running scripts are slow - newbie

First of all, I you have 1500 objects, you may not want to print their name.
Each time you log a message it ads to the execution time. On a small bunch
of object it doesn't matter that much, but on longer lists it may affect
execution time significantly. If you really want a log message to show
progress you may print such message only once every 10 or 100 objects. Only
when the script is giving you troubles you will force it to print every
object.

Now Kim is 100% right, using the object model instead of the command model
will make your scripts enormously faster. In fact, do not pretend you know
scripting until you use the object model (or at least know how to use it!)
;-)

So lets's look at the various of your script... (see [Bernard] below)


Jeff McFall wrote:

>CreateImageClip " .... \VIDEO_ELEMENTS\Mosaic_test_mdb\Pictures\relief.pic"

>
>SelectObj "Clips.relief_pic"
>
>set oImageClip = Selection(0)
>set oImage = oImageClip.GetImage
>
>
>for i = 1 to 1567
>
>
>SelectObj("cube" & i)
>
>'   show where we are
>logmessage i
>  
>
[Bernard] Remove this logmessage, as explained above.

>xPos = Selection(0).posX.Value
>yPos = Selection(0).posZ.Value
>
>
>     xImagepos = CInt(720 - (xPos*100))
>     yImagepos = CInt(540 - (yPos*100))
>    
>
>       set oPixelColor = oImage.GetPixel (xImagepos ,
yImagepos)  
>      
>       ApplyShader "Phong"
>      
>    
>       SetKey obj & ".Material.Phong.Diffuse.red", 91 ,
oPixelColor.Red
>       SetKey obj & ".Material.Phong.Diffuse.green", 91 ,
oPixelColor.Green
>       SetKey obj & ".Material.Phong.Diffuse.blue",  91 ,
oPixelColor.Blue
>      
>       SetKey obj & ".Material.Phong.Ambient.red",  91 ,
oPixelColor.Blue
>       SetKey obj & ".Material.Phong.Ambient.green", 91 ,
oPixelColor.Blue
>       SetKey obj & ".Material.Phong.Ambient.blue", 91 ,
oPixelColor.Blue
>  
>
[Bernard] There is a way to replace the set key commands. First, apply an
fcurve to the parameters you wish to keyframe. The AddFCurve() method will
return a FCurve object. Now use that object to add keyframes, with the
AddKey() method.
The AddKey() entry in the docs have a good example of how to do these two
things.

>      
>            
>       height = ((oPixelColor.Red + oPixelColor.blue +
oPixelColor.green) * 1.5)
>       size = (oPixelColor.Red + oPixelColor.blue +
oPixelColor.green)
>      
>    
>       SetKey  obj & ".kine.local.posy", 91, height
>        
>      
>       SetKey  obj & ".kine.local.sclx", 91 , size
>       SetKey  obj & ".kine.local.scly", 91 , size
>       SetKey  obj & ".kine.local.sclz", 91 , size
>
>      
>next
>  
>
[Bernard] The same applies. Instead of setting keys onto the transformation
of the object, you should add fcurves and use addkey().


Cheers
Bernard

---
Unsubscribe? Mail Majordomo@(protected) with the following text in body:
unsubscribe xsi


---
Unsubscribe? Mail Majordomo@(protected) with the following text in body:
unsubscribe xsi

---
Unsubscribe? Mail Majordomo@(protected) with the following text in body:
unsubscribe xsi


---
Unsubscribe? Mail Majordomo@(protected) with the following text in body:
unsubscribe xsi