Myosis
Limited Member-
Posts
37 -
Joined
-
Last visited
-
Days Won
1
Content Type
Profiles
Blogs
Forums
Gallery
Pipeline Tools
3D Wiki
Plugin List
Store
Downloads
Everything posted by Myosis
-
Hi there, I'm trying to rotate a Bezier spline handle by the direction of its “controller”. I have a circle and I want to rotate 1 half like so: I tried this by connect the points of the the “full circle” to the “half a circle controllers” But as I rotate the controllers, the handles of the Bezier spline stay in a straight line: It's a bit hard to explain so, I've added the scene to download. Does anyone know how to achieve this ? Cheers, Tim Spline fold.c4d
-
@Rectro Thank you! I reused and tweaked bones from another mesh as guidelines. I'm relatively new to rigging and it tends to help me understand it, especially around the hip and shoulder area. So yes, mainly use it to find the right placement for joints 🙂
-
@HippoDasTamus The first file save was 4 weeks ago from today. Most of the time went into rigging, cloth simulations and particles. All these systems feel outdated but served the purpose. Except for the particle emitter I ditch that and draw them in by hand... Animating a sphere over a spline. (Far from ideal, but fast) Modeling texturing and rendering went fast, I hardly took time to “revisit” any. As for the texturing, I like body paint unfortunately it’s been getting worse with each new edition of C4D. I’ve briefly played around in substance painter, but there wasn’t much to texture, a simple fabric bump and some stitches did the trick. There is a small piece of that in the “making of” video. I should work with more software “for better results”. If I had to choose I would probably learn Houdini. And then switch completely😅 Yes, doing UV’s in C4D sucks. I relax using an edge selection but this never gives me symmetrical results, I then have to copy, delete, and flip.
-
@Igor and @southpaw Thank you for letting me know and the kind words! And @3D-Pangel Wow, that might be the most motivating comment I have ever gotten! I was ‘in the midst of weather or not’ to continue, but you might have just convinced me to do another one 😉 Thank you all again for letting me know. It means a lot 🙂
-
@HippoDasTamus Thanks for your reply! glad you like it! It was pretty intense, not sure if I will make more. 😅 I underestimated how much work it would be, but it sure was a fun challenge.
-
Hi, I was wondering why I never see just one person making "shorts". Now I know.. In the end, the list of “necessary” fixes only got bigger. I had to ignore it in order to post this in a decant time frame.. It's t actually far from done. I used C4D. No plugins or pre-made assets where used. Yes I’m aware the bow is reversed, thought it looked cooler. The character is a girl, sidekick of Fred. While she can do magic, Fred just likes bananas. You can follow me for more on: https://www.instagram.com/myosis/ https://www.artstation.com/myosis https://myosis.cgsociety.org/
-
@Rectro I remember you from the original post! Glad you're still interested! At the moment it only supports C4D naively. However you can still use it's function if your (renderer) has its own bake function, like Redshift, which has “BakeSet”. In this image we bake our Redshift render using the Redshift bake tool first, after that we can transfer it to a new model / new uv set using R.T.T. Image Hairs need to be converted to polygons first. As for your hairs, I'm not sure: If the Redshift "BakeSet" can bake them to their individual planes, then you can use this plugin to transform them to any “low poly” mesh like in the video. S22 might take a bit, but I do plan on it. Best, Myosis
-
Finally had time to release the plugin. I started this project a long time ago, and its still not perfect but i'm using it with almost every project. I'm not a scripting wonder, it took me way more time then I wanted, therefor its for sell, and not for free. Store Available for: R18, R19, R20, R21. Bake renders to textures Bake the render output directly onto a new mesh, or the same mesh. Because we are working with a boundary, anything that falls within will be baked. This even allows you to bake a displacement, or hairs as a texture. Full tutorial can be watched in this post or here on YouTube: Its a rather boring video sorry.. In this (3 minute) video make a bake from start to finish, and go over the pro's and con's. Functionalities are: Bake HDRI’s. Bake Hires to low res. Bake Hires onto itself (Can be done with no limitations). Bake Hires onto itself with new UV map. Low-res to new low-res with new UV layout. Displacement, hairs, textures. You get the point.. Limitations are: Not good with 90 degree corners. Low poly mesh has to be simple and smooth. Some hand clean up is necessary. (complex meshes) Small bug: The undo function (Ctrl+Z) doesn't work properly. So please work in a new scene when baking. Hi-res to low-res Even when the model does not have UV’s and is generically textured, you can simply transfer the data over to a new map. (In this scenario the Hi-res model had no uv’s, it had a cylindrical texture applied only repeating over the Y axis.) Redshift to texture You can do the same for any Redshift renders by baking them first onto itself with ‘Redshift bakeset’ and to a new model / new uv layout with ‘render to texture’. Hairs to texture You do need to convert it to pollies and use a non hair material, but it works great! Creating alphas is also not a problem. This scene and tutorial video will be included in the download. Transfer texture to new model An extreme example is to go from a cube to a sphere, obviously this would look very weird but it's possible. Therefore you can bake literally anything as a HDRI. Anything to a HDRI When you bake using a sphere as a boundary you can turn anything into an hdri. Let me know what you think. Thanks, Myosis PS: For those who signed up a year ago, a discount code is on its way.
-
@Cairyn Thank you very much, it worked out great! You've helped me on numerous occasions (various topics) and I am very grateful. Been going down a rabbit hole on how to dynamically change the window size for when the group gets folded / unfolded. Figured this is a different topic so made a new thread for this: Cheers 🙂
-
Hi, Preferably I don't want the user to resize the dialog window, but it doesn't seem possible when using a DLG_TYPE_ASYNC type dialog. I also gave up on trying to dynamically resize the dialog for when a group 'in the dialog' gets folded/unfolded, but that simply doesn't seem possible. Closest I came was closing it and reopening it in a different size. This worked to a certain extent but not without flaws. I got that idea from here So I stopped caring about the empty space when a group gets folded. But I want upon startup that the dialog “at least” goes back to its original shape. (the smallest it can be) Defaulth=0, defaultw=0 are only useful on the very first time opening. When the user resizes this c4d seems to prioritize this and saves it. So do I use RestoreLayout for this?
-
Works very nice! I couldn't find an example of this online, I'm sure this will help others too, thank you very much! @Cairyn When I set the value of: flagSubgroupClosed = False To True it doesn't seem to be folded upon opening. Any idea what might cause that ? Side question: Tab groups, and quick tabs, don't work in a DLG_TYPE_ASYNC modal window, do they ? Cheers!
-
Hi, Does anyone know why the button is not in/under the foldable subgroup? import c4d from c4d import gui class Fold(gui.GeDialog): def CreateLayout(self): self.SetTitle('') # create a quicktab self.GroupBegin(1011, c4d.BFH_SCALEFIT, 0, title = '') bc = c4d.BaseContainer() bc.SetBool(c4d.QUICKTAB_BAR, True) bc.SetString(c4d.QUICKTAB_BARTITLE, 'title') bc.SetBool(c4d.QUICKTAB_BARSUBGROUP, True) subgroup = self.AddCustomGui(122, c4d.CUSTOMGUI_QUICKTAB, '', c4d.BFH_SCALEFIT, 0, 0, bc) #foldable group ? self.GroupBegin(122, flags=c4d.BFH_SCALEFIT, cols=1, rows=1, title='', groupflags=0) self.AddButton(123, c4d.BFH_SCALEFIT, 0, 0, 'Button') self.GroupEnd() return True def main(): dlg = Fold() dlg.Open(c4d.DLG_TYPE_MODAL) if __name__=='__main__': main() c4d.EventAdd()
-
Here the a result review from the video. You can see that around the edges there are some weird lines that need to be cleaned up. Inside / around the dotted lines. "For this I use the clone tool in body paint" Btw: There is more then one video in the post, showing Ambient Occlusion and Normal map baking as well. (The first image is just the view port, not a render output)
-
@zeden Glad you like it! It's a bit technical. Every normal of the “boundary” has to look at your mesh, The problem with hard surface is that with very tight corners the “boundary” looks at itself before hitting the mesh. Resulting in a black area. (the corner) It's doable depending on the shape. Some shapes are too much work to clean up with the clone tool and are probably better off using other methods.
-
Hi there, I made a plugin that mimics a render to texture kind of process. it's not perfect, but the results are good enough to quickly fix any mistakes by hand with a clone tool. It works with both standard an physical. Better at organic shapes then hard surface ones. For me it's good enough to use on a professional level. Videos can be watched here: Instagram post Let me know what you think of it, bear in mind it's my first ever plugin. Have done a lot of online research, in the SDK, on plugincafe, and here on c4d cafe!
-
Hi, I'm making a pretty simple script, but I can find very little documentation on the following: I want to create a bitmap with a preset ‘Height’, ‘Width’, and ‘Random Background color’ on the Luminance channel. Preferably using a SaveDialog, to choose a directory for the bitmap. So far I haven't been able to find any example of this, and I'm fairly new and inexperienced to scripting. Maybe someone here can help me out. As you can see I'm struggling quite a bit, I'm trying to let c4d generate a bitmap on the Luminance channel, 600x600, as a png, and no background. import c4d import bitmaps def main(): # create material Mat = c4d.BaseMaterial(5703) Mat[c4d.ID_BASELIST_NAME] = "4K Preview" doc.InsertMaterial(PrintMat) Mat[c4d.MATERIAL_USE_COLOR] = False Mat()[c4d.MATERIAL_USE_LUMINANCE] = True Mat()[c4d.MATERIAL_USE_REFLECTION] = False Mat()[c4d.MATERIAL_PREVIEWSIZE] = 12 # change sizing to 4k preview mode # create bitmap (i have no clue, this is just a rough idea) """ filePath = "C:\Users\PCname\Desktop\test.png" #or a SaveDialog somehow res = 600 texture = bitmaps.BaseBitmap() texture.Init(res,res) texture.Save(filePath,c4d.FILTER_PNG) """ # Would i then apply the bitmap back using something like this? fn = c4d.storage.GeGetC4DPath(c4d.C4D_PATH_DESKTOP) #Gets the desktop path pathToTexture = os.path.join(fn,'test.png') #Gets the specific texture image on your desktop mat = doc.GetActiveMaterial() #Assign the active material a variable shdr_texture = c4d.BaseList2D(c4d.Xbitmap) #Create a bitmap shader in memory shdr_texture[c4d.BITMAPSHADER_FILENAME] = pathToTexture #Assign the path to the texture image to your shader mat[c4d.MATERIAL_LUMINANCE_SHADER]= shdr_texture #Assign the shader to the luminace channel in memory only mat.InsertShader(shdr_texture) #Insert the shader into the luminace channel mat.Update(True, True) #Re-calculate the thumbnails of the material if __name__=='__main__': main() c4d.EventAdd() If someone knows more about this topic, I would love to hear it! :)
-
@kalugin Your the best! Ah so it was, GetInt32, should have tried. This part I would have never guessed, thanks for explaining it :) The self.GetColorField(BACKGROUND_COLOR)['color'] tag = doc.GetActiveObject().MakeTag(c4d.Tbaketexture) # this creates the tag and applies it to the active object This is great! Again thanks so much for adding this. It works perfectly. Very happy :)) I guess I have one question: I now made it auto start the baking process, and I’m looking to perform some actions after the "Initializing process". If you bake something, you would see 3 phases in your "status bar" bottom left. Initializing , Rendering texture.., and finally: Baking completely --:--. I’m trying to revert that was has been done after the load process. How can I access this process, basically make the script wait for it to be done? Maybe you know how to do it? Super grateful, for your help before, can't thank you enough :)
-
Hi, I'm working on a script that opens a dialog window and creates a tag from some basic options In this case a Bake Tag I am very new and inexperienced in scripting, learning slowly. I got it to work by looking at lot of examples and trying a whole bunch of stuff.. It works for the most part, the only part that does not work are: “Number Arrows” And “Background color” I’m thinking the problem is in the #saving values so the rest of the script can access them The "Check boxes" work fine: self.option_color = self.GetBool(OPTION_COLOR) self.option_AO = self.GetBool(OPTION_AO) And this is what I tried with the Background and Arrow numbers: self.option_BG = self.GetColorField(BACKGROUND_COLOR) self.option_width = self.GetReal(OPTION_WIDTH) self.option_hight = self.GetReal(OPTION_HIGHT) Not that sure about .GetColorField But I really thought the .GetReal was going to work. Does anyone know what I’m doing wrong? Probably whole bunch of stuff Here the entire script import c4d from c4d import gui #Welcome to the world of Python #Unique id numbers for each of the GUI elements BACKGROUND = 1000 BACKGROUND_COLOR = 1001 GROUP_OPTIONS = 10000 OPTION_COLOR = 10001 OPTION_AO = 10002 GROUP_BUTTONS = 20000 BUTTON_OK = 20001 BUTTON_CANCEL = 20002 OPTION_WIDTH = 20003 OPTION_HIGHT = 20004 #This class defines the dialogue that pops up to request user options class OptionsDialog(gui.GeDialog): #Add all the items we want to show in the dialogue box def CreateLayout(self): #Bake cehck box self.GroupBegin(GROUP_OPTIONS, c4d.BFH_SCALE|c4d.BFH_LEFT, 1, 2) self.AddCheckbox(OPTION_COLOR, c4d.BFH_LEFT, 0,0, name="Color") self.AddCheckbox(OPTION_AO, c4d.BFH_LEFT, 0,0, name="AO") self.GroupEnd() #BG color self.AddStaticText(BACKGROUND, c4d.BFH_LEFT, name="Background Color") self.AddColorField(BACKGROUND_COLOR, c4d.BFH_SCALEFIT, 80, 12) #Group name self.GroupBegin(10000, c4d.BFH_SCALEFIT, 1, title = 'Texture size') self.GroupBorder(c4d.BORDER_GROUP_IN) self.GroupBorderSpace(20, 5, 20, 5) #Arrow numbers self.AddEditNumberArrows(OPTION_WIDTH, c4d.BFH_SCALEFIT, 50, 0) self.AddEditNumberArrows(OPTION_HIGHT, c4d.BFH_SCALEFIT, 50, 0) #Buttons - an OK and a CANCEL button self.GroupBegin(GROUP_OPTIONS, c4d.BFH_CENTER, 2, 1) self.AddButton(BUTTON_OK, c4d.BFH_SCALE, name="Set") self.AddButton(BUTTON_CANCEL, c4d.BFH_SCALE, name="Cancel") self.GroupEnd() return True #This is where we react to user input (eg button clicks) def Command(self, id, msg): if id==BUTTON_CANCEL: #The user has clicked the 'Cancel' button self.ok = False self.Close() elif id==BUTTON_OK: #The user has clicked the 'OK' button self.ok = True #Save the checkbox values so that the rest of the script can access them self.option_color = self.GetBool(OPTION_COLOR) self.option_AO = self.GetBool(OPTION_AO) self.option_BG = self.GetColorField(BACKGROUND_COLOR) self.option_width = self.GetReal(OPTION_WIDTH) self.option_hight = self.GetReal(OPTION_HIGHT) self.Close() return True #This is where the action happens def main(): #Open the options dialogue to let users choose their options optionsdialog = OptionsDialog() optionsdialog.Open(c4d.DLG_TYPE_MODAL, defaultw=300, defaulth=50) #Quit if the user has clicked cancel if not optionsdialog.ok: return #create tag def tool(): return plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL) def object(): return doc.GetActiveObject() def tag(): return doc.GetActiveTag() def renderdata(): return doc.GetActiveRenderData() def prefs(id): return plugins.FindPlugin(id, c4d.PLUGINTYPE_PREFS) c4d.CallCommand(100004788, 50005) # New Tag tag()[c4d.BAKETEXTURE_CHANNEL_COLOR] = (optionsdialog.option_color) tag()[c4d.BAKETEXTURE_CHANNEL_AO] = (optionsdialog.option_AO) tag()[c4d.BAKETEXTURE_WIDTH] = (optionsdialog.option_width) tag()[c4d.BAKETEXTURE_HEIGHT] = (optionsdialog.option_hight) tag()[c4d.BAKETEXTURE_BACKGROUND] = c4d.Vector(optionsdialog.option_BG) if __name__=='__main__': main() Probably a wonder that it works at all, but I'm proud of my small achievements non the less, and feel like I'm very close to finessing it. If you know the solution, help a brother out ;) Cheers
-
Hey @kalugin and @Cerbera Thanks for the replay! By camera resolution I mean the render output. This is by default: 1280 x 720. I’m using R19.024 studio. Would be great if you guys could help! or help me steer in the right direction.
-
Hi all I would like to ask all scripting geniuses a question. How do I add multiple Cameras with Projection: Front, Back, Left, Right, Top, and Bottom. And make them all frame a selected object by camera resolution? These are the steps I would like to see in a script, First: Select object I want to frame script: 1 Create camera, select property: Projection Front 2 Go in the camera view 3 Press S to frame the selected object ,. But wait! If I press S the camera frames by the viewport dimensions and not by the 'users set' camera resolution, how do I frame the object by camera resolution? And can anyone help me write this script? It would mean the world to me! Hope to hear something :)