-
Content count
232 -
Donations
0.00 CAD -
Joined
-
Last visited
-
Days Won
6
jordibares last won the day on September 7 2019
jordibares had the most liked content!
Community Reputation
94 ExcellentAbout jordibares
-
Rank
Initiate
Contact Methods
-
Website URL
www.jordibares.com
-
Skype
jordibares
Personal Information
-
Name
Jordi Bares
-
Location
London
-
Interests
Too many interests
-
I use mainly Linux at work, at home only Mac. I love my mac but my take is that the cost compares with a regular linux box is prety hard to justify. Let's see where things go.
-
Boolean subtract geometry from curves?
jordibares replied to Ellyfish's topic in General Houdini Questions
I never stop learning every single time I see one of your example scenes... what a joy to see this elegant solution. Thank you. -
I am also interested in it... I think this may not be possible without changing the Theme design itself... and will be globa. i wish there was some extra refinements on the interface (native wise) and also allow us to further customize things like bigger buttonstrips, alignment, etc...
-
Check this out. https://www.sidefx.com/learn/collections/character-masterclasses/
-
AFAIK there are no agents available commercially.
-
AlSk started following jordibares
-
Superb toolset, really well crafted. Thank you so much for your generosity, I hope we can repay you in the form of beer or something. :-)
-
Thanks Szymon, I did end up using that approach and it works well, nevertheless it has been quite annoying not to be able to rely on the evalAtFrame() I took advantage as well as the worldTransformAtTime does a proper evaluation on the frame so I don't need to update the frame and things are a lot faster and smoother. Thanks once again.
-
I am writing a little python tool that requires evaluating the value of a channel a particular frame, but the object i am evaluating has a chop constraint and the function pos = internal_cam.parmTuple('t').evalAtFrame(f) returns (0,0,0) I imagine the chop network is "overriding" the value but I don't seem to get the result. Any ideas? Thanks. jb
-
This is a great effort, really really nicely put together as well..
-
Finally, 2 years later... we are now allowed to talk about it. https://www.jordibares.com/post/2018-07-07/champions-league-rebrand/ The text is a bit lame but it is the only we are allowed to use... sorry guys.
-
Indeed, we are witnessing something that is going to revolutionise Computer Graphics and your checkmate analogy is spot on.
-
Fixed, the code snippet now incorporates your fix... I did have it on my text editor correctly but something went wrong on the copy I think... thanks once again.
-
I don't know if it is of any use but here is a linux version... DISCLAIMER, I have ignored accounting for the outputConnections() as I don't really understand the purpose... also I have commented a bit further and expand strings to support variables vs absolute paths discrepancies... should work ok. import hou import os import subprocess import nodegraphutils as utils from time import gmtime, strftime widthRatio = 4 # change to make screenshot bigger or smaller, this is ~x4 node width # -------------------------------------------------------------------------------------------- # FUNCTIONS # -------------------------------------------------------------------------------------------- def createScreenshotFolder(saveFolder): '''create screenshot folder under $HIP folder ''' # System call to create the necessary folder subprocess.check_call([r"mkdir", r"-p", saveFolder]) def takeScreenShot(savePath): '''change to your preferred capture app /!\ no error checking for now ''' # System call using ImageMagik import command that requests an interactive region to operate subprocess.check_call([r"import", savePath]) def removeBackgroundImage(**kwargs): ''' erases bg image from tuples of backgroundImages() if it can find it, updates bg ''' # find the node that is meant to be deleted deletingNode = [x[1] for x in kwargs.items()][0] # find the image in the spare tab image = deletingNode.parm('houdinipath').eval() # find the network editor = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor) # collect the images stored in it backgroundImagesDic = editor.backgroundImages() # find the one image to be deleted backgroundImagesDic = tuple(x for x in backgroundImagesDic if hou.expandString(x.path()) != hou.expandString(image)) # update the images editor.setBackgroundImages(backgroundImagesDic) utils.saveBackgroundImages(editor.pwd(), backgroundImagesDic) def changeBackgroundImageBrightness(event_type,**kwargs): ''' changes brightness/visibility if template or bypass flags are checked -- its poorly written/thought but i was tired''' # find the null holding the image nullNode = [x[1] for x in kwargs.items()][0] # find the image in the spare tab image = nullNode.parm('houdinipath').eval() # define color based on flags if nullNode.isBypassed(): brightness = 0.0 elif nullNode.isTemplateFlagSet(): brightness = 0.5 else: brightness = 1.0 # find the network editor = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor) # collect the images stored in it backgroundImagesDic = editor.backgroundImages() # traverse all images, find the one we have actioned and set the brightness i = 0 for item in backgroundImagesDic: if hou.expandString(item.path()) == hou.expandString(image): backgroundImagesDic[i].setBrightness(brightness) break i = i + 1 # update the visibility values editor.setBackgroundImages(backgroundImagesDic) utils.saveBackgroundImages(editor.pwd(), backgroundImagesDic) # -------------------------------------------------------------------------------------------- # MAIN # -------------------------------------------------------------------------------------------- # generate unique(ish) path for screenshot timestamp = strftime('%Y%m%d_%H%M%S', gmtime()) hipname = str(hou.getenv('HIPNAME')) hippath = str(hou.getenv('HIP')) + '/screenshots' screenshotName = hipname + '.' + timestamp + '.png' systempath = hippath + '/' + screenshotName houdinipath = '$HIP/screenshots/' + screenshotName # take screenshot with capture region createScreenshotFolder(hippath) takeScreenShot(systempath) # set up background image plane editor = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor) image = hou.NetworkImage() image.setPath(houdinipath) sel = hou.selectedNodes() nullNode = '' if sel: lastSel = sel[-1] nullNode = lastSel.parent().createNode('null','screenshot') nullNode.setInput(0,lastSel) #if lastSel.outputConnections(): # nullNode.setInput(0,lastSel) else: nullNode = editor.pwd().createNode('null','screenshot') nullNode.moveToGoodPosition() lastSel = nullNode # configure image plane placement nullNode.setUserData('nodeshape','task') nullNode.setPosition(lastSel.position()) nullNode.setColor(hou.Color(.3,.3,.3)) nullNode.move([lastSel.size()[0]*2,-lastSel.size()[1]*2]) rez = hou.imageResolution(systempath) ratio = 1.0*rez[1]/rez[0] rect = hou.BoundingRect(0,-lastSel.size()[1]*1.1,widthRatio,-widthRatio*ratio-lastSel.size()[1]*1.1) image.setRelativeToPath(nullNode.path()) image.setRect(rect) # following is adding a spare parm with image path to be able to know which node corresponds to which background image # could have used a user attribute or relativeToPath() and smarter logic but it works and it helps visualize filepath hou_parm_template_group = hou.ParmTemplateGroup() hou_parm_template = hou.LabelParmTemplate("houdinipath", "Label", column_labels=([houdinipath])) hou_parm_template.hideLabel(True) hou_parm_template_group.append(hou_parm_template) nullNode.setParmTemplateGroup(hou_parm_template_group) # attach a function that deletes the background image plane if the corresponding node is deleted (faster than doing it by hand) nullNode.addEventCallback((hou.nodeEventType.BeingDeleted,), removeBackgroundImage) # attach a function to change visibility or opacity if corresponding node flags are changed nullNode.addEventCallback((hou.nodeEventType.FlagChanged,), changeBackgroundImageBrightness) # add image to network background backgroundImagesDic = editor.backgroundImages() backgroundImagesDic = backgroundImagesDic + (image,) editor.setBackgroundImages(backgroundImagesDic) utils.saveBackgroundImages(editor.pwd(), backgroundImagesDic)
-
Richard, fantastic to see all those tools in production in such a cool way.. :-)
-
topobuild / remesh - guides or direction
jordibares replied to jackassol's topic in General Houdini Questions
What about this? https://www.sidefx.com/tutorials/houdini-game-dev-tools-instant-meshes-bridge/ If you want to drive the direction as you indicate, then you may want to use Instant Meshes natively.