Populate a set

3 11 2011

Building props for a set is not the easiest thing in the world. The biggest task is actually to figure out what to build.
So in order to learn how to populate a set with stuff you can do a little exercise.

Take a photo of a room, then make a spreadsheet document of all the things that you see. Now count the objects.

It’s a good exercise and you will learn a lot about set dressing.





So what’s going on?

2 11 2011

I’m really busy at work… So hence the lack of blog entry’s. But I found a little WordPress app for my iPhone which will enable me to do blogging while I travel.

We (Madcrew) have just moved into a new office space. Lots of things to take care of, and lots of things to think about when you se moving a hole office. I’ll upload some images later on that progress.

Other than that I’m learning houdini right now. Loving it! Been testing it on and off for a few years, but since two weeks back I’m really diving deep into the program. And I actually think I now could use it in production.
It’s not as easy as softimage ice, but a lot more powerful! Slower, but powerful.

That’s all for now.





long time… no post

30 10 2010

Been really busy at my new job at MadCrew, so there haven’t been much to post about. Will add some new posting soon.

regards
stefan





new desktop image :)

23 05 2010

click on the image to download (1920×1200)





Softimage online documentation

10 05 2010

They have updated it, and it’s really really fast now. As a linux user I’m very happy about this one as it’s a lot faster than the chm files.

User Docs

    http://softimage.wiki.softimage.com/xsidocs/hh_start.htm

SDK Docs

    http://softimage.wiki.softimage.com/sdkdocs/hh_start.htm




Add Personal Note Application

4 05 2010

Download Personal Notes1.0
Requires

  • Python 2.5 or 2.6
  • PyQt4
  • Tested on:

  • Fedora Core 12, under Gnome
  • OSX 10.5




  • Ed Catmull talks about leadership

    30 04 2010

    This is a really inspiring video where Ed Catmull talks about leadership and how to form good leadership. As everybody knows it’s a creative process on how to evolve and keep everything in a good flow.

    Identifying problems and how to solve them, and thoughts about how to see them.

    Link to video with Ed Catmull on leadership

    Everyone should watch this one.





    Shortfilm, meet meline

    23 04 2010

    And amazing shortfilm has just been released, and I’m in awe of these people. Really well done!

    Story: http://features.cgsociety.org/story_custom.php?story_id=5625


    from Sebastien LABAN





    parse a text file to retrieve keyframes

    20 04 2010

    http://forums.cgsociety.org/showthread.php?p=6473887#post6473887

    I stumbled on this at CgTalk and though I would share it here, as it is something that we encounter now and then. Almost all programs as the option to output a text file with raw data of keyframes. But it can be tedious if we don’t know how to parse a text file and get it into maya or softimage.

    I will only cover how to parse the file here as it’s mostly a python exercise.

    The content of the text file looks something like this

    13.232 12.134 11.134
    14.234 67.423 22.634
    13.232 10.001 7.346
    13.232 12.134 4.126

    So each column is X Y Z and each row is a frame. We now need to open this file and read in the text

    raw_keyframes_file = open('text.txt')
    text = raw_keyframes_file.read()
    raw_keyframes_file.close()
    print text
    

    Once you have it as a list we can start to split the text so that we get each frame. Python sees a linebreak as \n, so we can use that to split the text into frames (since each line is a frame).

    raw_keyframes_file = open('text.txt')
    frames = raw_keyframes_file.read().split('\n')
    raw_keyframes_file.close()
    print frames
    

    And we can now also split each frame in into channels. And we should remove empty rows as they might mess up the animation (if each frame was on every other row instead if each row).

    raw_keyframes_file = open('text.txt')
    frames = raw_keyframes_file.read().split('\n')
    raw_keyframes_file.close()
    keyframes = [] #empty to be filled with keyframes
    for frame in frames:
        ''' removed empty rows '''
        if not frame == '':
            keyframes.append(frame)
    x = []
    y = []
    z = []
    for channel in keyframes:
        ''' use the space to split the keyfame into channels '''
        chan = channel.split(' ')
        x.append(chan[0])
        y.append(chan[2])
        z.append(chan[4])
    print x, y, x
    

    We have now successfully gathered all information that we need. But the code isn’t very pretty, and we would be better off if we could reuse this. So……… **loud music*** let’s make it into a class.

    class MyTools(object):
        def parse_keys(self, textfile):
            raw_keyframes_file = open(textfile)
            frames = raw_keyframes_file.read().split('\n')
            raw_keyframes_file.close()
            keys = MyTools()
            keys.x = []
            keys.y = []
            keys.z = []
            keyframe = []
            for frame in frames:
                if not frame == '':
                    keyframe.append(frame)
            for channel in keyframe:
                chan = channel.split(' ')
                keys.x.append(chan[0])
                keys.y.append(chan[2])
                keys.z.append(chan[4])
            return keys
    

    It’s almost the same code, with the difference that we now have it wrapped up in a class. And we now have a attribute called ‘keys’ which also has x, y, z in it. So if you save out the file in a folder called ‘tools’ and call it ‘__init__.py’. If you read the previous ‘lesson’ we can now import this into other scripts.

    import sys
    sys.path.append('/server/tools/python')
    from sanders3d import tools
    
    tools = tools.MyTools() #first we need to instance the class
    keys = tools.parse_keys('raw_keyframe.txt') #now point the text file into it
    
    #print out the channels
    print keys.x
    print keys.y
    print keys.z
    

    Did that work? I hope so :)





    create and import python libs

    20 04 2010

    One thing that you will encounter a lot when you are dealing with 3d pipelines is that they
    tend to change a lot. And folder locations change… or change names.. or.. a thousand other things.
    While this is quite normal, it can get frustrating to change in each script that you have to suite those changes. And you can’t trust that the sysadmin might set environment variables that he/she will update.
    But what you can do is to create your own little environment script that all of your scripts will use. So if something needs to be changed or modifyied, you change only that file.

    In your scripts you can append a new lib where the location of this environment file will be. Create a folder with your lib name (in my case ‘sanders3d’) and in that folder another folder you name ‘core’ and put a text file in both called __init__.py

    ex:
    /server/tools/python/sanders3d/__init__.py
    /server/tools/python/sanders3d/core/__init__.py

    By doing this we can import both of these folders and python files in them

    ex

    import sys
    sys.path.append('/server/tools/python/')
    from sanders3d import core
    

    So anything you put into the core/__init__.py file, you can now use. And here is where we will start to add things that has to do with our pipeline or programs.

    As an example, in the __init__.py file I will add locations of the project server and a texture library.

    class MyEnvironment(object):
        @staticmethod
        def server_env(self):
            env = MyEnvironment()
            env.project_server = '/server/projects'
            env.texturelib = '/server01/texturelib'
            return env
    

    What I can do now in my scripts is to use these as environments.

    import sys
    sys.path.append('/server/tools/python/')
    from sanders3d import core
    
    env = core.MyEnvironment.server_env()
    print env.project_server # will print '/server/projects'
    

    You can also use this as a method to have naming conventions and always return correct names or you can point towards correct location of a program

    I’ll add more into the __init__.py file

    class MyEnvironment(object):
        @staticmethod
        def server_env(self):
            env = MyEnvironment()
            env.project_server = '/server/projects'
            env.texturelib = '/server01/texturelib'
            return env
    
        @staticmethod
        def env_app(self, version)
            env = MyEnvironment()
            env.maya_bin = '/usr/autodesk/maya%s-x64/bin/maya' % version
            env.softimage_bin = '/usr/Softimage/Softimage_%s/Application/bin/xsi' % version
            return env
    

    And to get this addition into our file.

    import sys
    sys.path.append('/server/tools/python/')
    from sanders3d import core
    
    env = core.MyEnvironment.server_env()
    env_app = core.MyEnvironment.env_app()
    
    print env.project_server
    print env_app.maya_bin
    

    I hope these few examples will help you on your way.








    Follow

    Get every new post delivered to your Inbox.